1Description: Fix compilation against libav10
2Author: Reinhard Tartler <siretart@tauware.de>
3Bug-Debian: http://bugs.debian.org/739439
4
5--- a/plugins/video/H.263-1998/h263-1998.cxx
6+++ b/plugins/video/H.263-1998/h263-1998.cxx
7@@ -94,7 +94,7 @@ static struct StdSizes {
8 { CIF16_WIDTH, CIF16_HEIGHT, PLUGINCODEC_CIF16_MPI },
9 };
10
11-static FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H263P);
12+static FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H263P);
13
14
15 /////////////////////////////////////////////////////////////////////////////
16@@ -203,7 +203,7 @@ H263_Base_EncoderContext::~H263_Base_Enc
17 PTRACE(4, m_prefix, "Encoder closed");
18 }
19
20-bool H263_Base_EncoderContext::Init(CodecID codecId)
21+bool H263_Base_EncoderContext::Init(AVCodecID codecId)
22 {
23 PTRACE(5, m_prefix, "Opening encoder");
24
25@@ -589,7 +589,7 @@ void H263_RFC2190_EncoderContext::RTPCal
26
27 bool H263_RFC2190_EncoderContext::Init()
28 {
29- if (!H263_Base_EncoderContext::Init(CODEC_ID_H263))
30+ if (!H263_Base_EncoderContext::Init(AV_CODEC_ID_H263))
31 return false;
32
33 #if LIBAVCODEC_RTP_MODE
34@@ -632,7 +632,7 @@ H263_RFC2429_EncoderContext::~H263_RFC24
35
36 bool H263_RFC2429_EncoderContext::Init()
37 {
38- return H263_Base_EncoderContext::Init(CODEC_ID_H263P);
39+ return H263_Base_EncoderContext::Init(AV_CODEC_ID_H263P);
40 }
41
42
43@@ -656,7 +656,7 @@ H263_Base_DecoderContext::H263_Base_Deco
44 if (!FFMPEGLibraryInstance.Load())
45 return;
46
47- if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H263)) == NULL) {
48+ if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_H263)) == NULL) {
49 PTRACE(1, m_prefix, "Codec not found for decoder");
50 return;
51 }
52--- a/plugins/video/H.264/h264-x264.cxx
53+++ b/plugins/video/H.264/h264-x264.cxx
54@@ -105,7 +105,7 @@ static struct PluginCodec_information Li
55
56 ///////////////////////////////////////////////////////////////////////////////
57
58-FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H264);
59+FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H264);
60
61 PLUGINCODEC_CONTROL_LOG_FUNCTION_DEF
62
63@@ -1065,17 +1065,17 @@ class MyDecoder : public PluginCodec<MY_
64 allows you to fail the create operation (return false), which cannot
65 be done in the normal C++ constructor. */
66
67- if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H264)) == NULL)
68+ if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_H264)) == NULL)
69 return false;
70
71 if ((m_context = FFMPEGLibraryInstance.AvcodecAllocContext(m_codec)) == NULL)
72 return false;
73
74 m_context->workaround_bugs = FF_BUG_AUTODETECT;
75- m_context->idct_algo = FF_IDCT_H264;
76+ m_context->idct_algo = FF_IDCT_AUTO;
77 m_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
78 m_context->flags = CODEC_FLAG_INPUT_PRESERVED | CODEC_FLAG_EMU_EDGE;
79- m_context->flags2 = CODEC_FLAG2_SKIP_RD |
80+ m_context->flags2 =
81 #ifdef CODEC_FLAG2_DROP_FRAME_TIMECODE
82 CODEC_FLAG2_DROP_FRAME_TIMECODE |
83 #endif
84--- a/plugins/video/MPEG4-ffmpeg/mpeg4.cxx
85+++ b/plugins/video/MPEG4-ffmpeg/mpeg4.cxx
86@@ -205,7 +205,7 @@ const static struct mpeg4_resolution {
87 { 0 }
88 };
89
90-FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_MPEG4);
91+FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_MPEG4);
92
93
94 static bool mpeg4IsIframe (BYTE * frameBuffer, unsigned int frameLen )
95@@ -688,7 +688,7 @@ void MPEG4EncoderContext::ResizeEncoding
96
97 bool MPEG4EncoderContext::OpenCodec()
98 {
99- if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(CODEC_ID_MPEG4)) == NULL){
100+ if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(AV_CODEC_ID_MPEG4)) == NULL){
101 PTRACE(1, "MPEG4", "Encoder not found");
102 return false;
103 }
104@@ -1390,7 +1390,7 @@ void MPEG4DecoderContext::ResizeDecoding
105
106 bool MPEG4DecoderContext::OpenCodec()
107 {
108- if ((m_avcodec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_MPEG4)) == NULL) {
109+ if ((m_avcodec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_MPEG4)) == NULL) {
110 PTRACE(1, "MPEG4", "Decoder not found for encoder");
111 return false;
112 }
113--- a/plugins/video/H.263-1998/h263-1998.h
114+++ b/plugins/video/H.263-1998/h263-1998.h
115@@ -115,7 +115,7 @@ class H263_Base_EncoderContext
116 virtual ~H263_Base_EncoderContext();
117
118 virtual bool Init() = 0;
119- virtual bool Init(CodecID codecId);
120+ virtual bool Init(AVCodecID codecId);
121
122 virtual bool SetOptions(const char * const * options);
123 virtual void SetOption(const char * option, const char * value);
124--- a/plugins/video/common/dyna.cxx
125+++ b/plugins/video/common/dyna.cxx
126@@ -217,14 +217,14 @@ static void logCallbackFFMPEG(void * avc
127 #endif
128
129
130-FFMPEGLibrary::FFMPEGLibrary(CodecID codec)
131+FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec)
132 {
133 m_codec = codec;
134- if (m_codec==CODEC_ID_H264)
135+ if (m_codec==AV_CODEC_ID_H264)
136 snprintf( m_codecString, sizeof(m_codecString), "H264");
137- if (m_codec==CODEC_ID_H263P)
138+ if (m_codec==AV_CODEC_ID_H263P)
139 snprintf( m_codecString, sizeof(m_codecString), "H263+");
140- if (m_codec==CODEC_ID_MPEG4)
141+ if (m_codec==AV_CODEC_ID_MPEG4)
142 snprintf( m_codecString, sizeof(m_codecString), "MPEG4");
143 m_isLoadedOK = false;
144 }
145@@ -268,12 +268,12 @@ bool FFMPEGLibrary::Load()
146 return true;
147 }
148
149-AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id)
150+AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum AVCodecID id)
151 {
152 return avcodec_find_encoder(id);
153 }
154
155-AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id)
156+AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum AVCodecID id)
157 {
158 WaitAndSignal m(processLock);
159
160@@ -308,13 +308,18 @@ int FFMPEGLibrary::AvcodecClose(AVCodecC
161 return avcodec_close(ctx);
162 }
163
164+#undef FFMAX
165+#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
166 int FFMPEGLibrary::AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict)
167 {
168+ AVPacket pkt = { 0 };
169+ int ret, got_output;
170 int res;
171
172- res = avcodec_encode_video(ctx, buf, buf_size, pict);
173+ ret = avcodec_encode_video2(ctx, &pkt, pict, &got_output);
174
175- PTRACE(6, m_codecString, "DYNA\tEncoded into " << res << " bytes, max " << buf_size);
176+ PTRACE(6, m_codecString, "DYNA\tEncoded into " << ret << " bytes, max " << buf_size);
177+ memcpy(buf, pkt.data, FFMAX(pkt.size, buf_size));
178 return res;
179 }
180
181--- a/plugins/video/common/dyna.h
182+++ b/plugins/video/common/dyna.h
183@@ -88,13 +88,13 @@ class DynaLink
184 class FFMPEGLibrary
185 {
186 public:
187- FFMPEGLibrary(CodecID codec);
188+ FFMPEGLibrary(AVCodecID codec);
189 ~FFMPEGLibrary();
190
191 bool Load();
192
193- AVCodec *AvcodecFindEncoder(enum CodecID id);
194- AVCodec *AvcodecFindDecoder(enum CodecID id);
195+ AVCodec *AvcodecFindEncoder(enum AVCodecID id);
196+ AVCodec *AvcodecFindDecoder(enum AVCodecID id);
197 AVCodecContext *AvcodecAllocContext(AVCodec*);
198 AVFrame *AvcodecAllocFrame(void);
199 int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec);
200@@ -117,7 +117,7 @@ class FFMPEGLibrary
201 DynaLink m_libAvcodec;
202 DynaLink m_libAvutil;
203
204- CodecID m_codec;
205+ AVCodecID m_codec;
206 char m_codecString[32];
207
208 bool m_isLoadedOK;