Description: Replace deprecated FFmpeg API Author: Andreas Cadhalpun Last-Update: <2015-11-02> --- opal-3.10.10~dfsg2.orig/plugins/video/H.263-1998/h263-1998.cxx +++ opal-3.10.10~dfsg2/plugins/video/H.263-1998/h263-1998.cxx @@ -230,11 +230,10 @@ bool H263_Base_EncoderContext::Init(AVCo m_context->opaque = this; - m_context->flags = CODEC_FLAG_EMU_EDGE // don't draw edges - | CODEC_FLAG_TRUNCATED // Possible missing packets + m_context->flags = CODEC_FLAG_TRUNCATED // Possible missing packets ; - m_context->pix_fmt = PIX_FMT_YUV420P; + m_context->pix_fmt = AV_PIX_FMT_YUV420P; m_context->gop_size = H263_KEY_FRAME_INTERVAL; // X-Lite does not like Custom Picture frequency clocks... stick to 29.97Hz @@ -440,9 +439,6 @@ bool H263_Base_EncoderContext::OpenCodec m_inputFrame->data[1] = m_inputFrame->data[0] + planeSize; m_inputFrame->data[2] = m_inputFrame->data[1] + (planeSize / 4); - if (m_context->width > 352) - m_context->flags &= ~CODEC_FLAG_EMU_EDGE; // Totally bizarre! FFMPEG crashes if on for CIF4 - // Dump info PTRACE(5, m_prefix, "Size is " << m_context->width << "x" << m_context->height); PTRACE(5, m_prefix, "GOP is " << m_context->gop_size); @@ -456,7 +452,7 @@ bool H263_Base_EncoderContext::OpenCodec PTRACE(5, m_prefix, "qmax set to " << m_context->qmax); PTRACE(5, m_prefix, "payload size set to " << m_context->rtp_payload_size); - return FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) == 0; + return FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec, NULL) == 0; } void H263_Base_EncoderContext::CloseCodec() @@ -707,7 +703,7 @@ bool H263_Base_DecoderContext::OpenCodec return 0; } - if (FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) < 0) { + if (FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec, NULL) < 0) { PTRACE(1, m_prefix, "Failed to open H.263 decoder"); return false; } --- opal-3.10.10~dfsg2.orig/plugins/video/H.264/h264-x264.cxx +++ opal-3.10.10~dfsg2/plugins/video/H.264/h264-x264.cxx @@ -1074,7 +1074,6 @@ class MyDecoder : public PluginCodecworkaround_bugs = FF_BUG_AUTODETECT; m_context->idct_algo = FF_IDCT_H264; m_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK; - m_context->flags = CODEC_FLAG_INPUT_PRESERVED | CODEC_FLAG_EMU_EDGE; m_context->flags2 = CODEC_FLAG2_DROP_FRAME_TIMECODE | CODEC_FLAG2_SKIP_RD | CODEC_FLAG2_CHUNKS; @@ -1084,7 +1083,7 @@ class MyDecoder : public PluginCodecpix_fmt = PIX_FMT_YUV420P; + m_avcontext->pix_fmt = AV_PIX_FMT_YUV420P; m_avcontext->mb_decision = FF_MB_DECISION_SIMPLE; // high quality off m_avcontext->rtp_payload_size = 750; // ffh263 uses 750 m_avcontext->rtp_callback = &MPEG4EncoderContext::RtpCallback; @@ -595,7 +595,6 @@ void MPEG4EncoderContext::SetStaticEncod m_avcontext->flags|=CODEC_FLAG_AC_PRED; /*c->flags|=CODEC_FLAG_QPEL;*/ /*don't enable this one: this forces profile_level to advanced simple profile */ m_avcontext->flags|=CODEC_FLAG_4MV; - m_avcontext->flags|=CODEC_FLAG_GMC; m_avcontext->flags|=CODEC_FLAG_LOOP_FILTER; #endif m_avcontext->opaque = this; // for use in RTP callback @@ -710,13 +709,15 @@ bool MPEG4EncoderContext::OpenCodec() if (PTRACE_CHECK(4)) { m_avcontext->debug |= FF_DEBUG_RC; m_avcontext->debug |= FF_DEBUG_PICT_INFO; - m_avcontext->debug |= FF_DEBUG_MV; +// m_avcontext->debug |= FF_DEBUG_MV; } #endif SetStaticEncodingParams(); SetDynamicEncodingParams(false); // don't force a restart, it's not open - if (FFMPEGLibraryInstance.AvcodecOpen(m_avcontext, m_avcodec) < 0) + AVDictionary *opts = NULL; + av_dict_set_int(&opts, "gmc", 1, 0); + if (FFMPEGLibraryInstance.AvcodecOpen(m_avcontext, m_avcodec, &opts) < 0) { PTRACE(1, "MPEG4", "Encoder could not be opened"); return false; @@ -1411,7 +1412,7 @@ bool MPEG4DecoderContext::OpenCodec() SetStaticDecodingParams(); SetDynamicDecodingParams(false); // don't force a restart, it's not open - if (FFMPEGLibraryInstance.AvcodecOpen(m_avcontext, m_avcodec) < 0) { + if (FFMPEGLibraryInstance.AvcodecOpen(m_avcontext, m_avcodec, NULL) < 0) { PTRACE(1, "MPEG4", "Decoder failed to open"); return false; } --- opal-3.10.10~dfsg2.orig/plugins/video/common/dyna.h +++ opal-3.10.10~dfsg2/plugins/video/common/dyna.h @@ -97,7 +97,7 @@ class FFMPEGLibrary AVCodec *AvcodecFindDecoder(enum AVCodecID id); AVCodecContext *AvcodecAllocContext(AVCodec*); AVFrame *AvcodecAllocFrame(void); - int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); + int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec, AVDictionary **options); int AvcodecClose(AVCodecContext *ctx); int AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); int AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size); --- opal-3.10.10~dfsg2.orig/plugins/video/common/ffmpeg.h +++ opal-3.10.10~dfsg2/plugins/video/common/ffmpeg.h @@ -47,6 +47,7 @@ extern "C" { #include "libavcodec/avcodec.h" +#include "libavutil/imgutils.h" // AVPacket was declared in avformat.h before April 2009 #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(52, 25, 0) #include --- opal-3.10.11/plugins/video/H.263-1998/h263-1998.cxx.0 2016-02-19 21:19:02.095496404 +0000 +++ opal-3.10.11/plugins/video/H.263-1998/h263-1998.cxx 2016-02-19 21:19:48.541962342 +0000 @@ -98,7 +98,7 @@ { CIF16_WIDTH, CIF16_HEIGHT, PLUGINCODEC_CIF16_MPI }, }; -static FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H263P); +static FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H263P); ///////////////////////////////////////////////////////////////////////////// @@ -583,7 +583,7 @@ bool H263_RFC2190_EncoderContext::Init() { - if (!H263_Base_EncoderContext::Init(CODEC_ID_H263)) + if (!H263_Base_EncoderContext::Init(AV_CODEC_ID_H263)) return false; #if LIBAVCODEC_RTP_MODE @@ -620,7 +620,7 @@ bool H263_RFC2429_EncoderContext::Init() { - return H263_Base_EncoderContext::Init(CODEC_ID_H263P); + return H263_Base_EncoderContext::Init(AV_CODEC_ID_H263P); } @@ -644,7 +644,7 @@ if (!FFMPEGLibraryInstance.Load()) return; - if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H263)) == NULL) { + if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_H263)) == NULL) { PTRACE(1, m_prefix, "Codec not found for decoder"); return; } --- opal-3.10.11/plugins/video/common/dyna.cxx.0 2016-02-19 21:31:56.865493193 +0000 +++ opal-3.10.11/plugins/video/common/dyna.cxx 2016-02-19 21:32:05.935454276 +0000 @@ -213,11 +213,11 @@ FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec) { m_codec = codec; - if (m_codec==CODEC_ID_H264) + if (m_codec==AV_CODEC_ID_H264) snprintf( m_codecString, sizeof(m_codecString), "H264"); - if (m_codec==CODEC_ID_H263P) + if (m_codec==AV_CODEC_ID_H263P) snprintf( m_codecString, sizeof(m_codecString), "H263+"); - if (m_codec==CODEC_ID_MPEG4) + if (m_codec==AV_CODEC_ID_MPEG4) snprintf( m_codecString, sizeof(m_codecString), "MPEG4"); m_isLoadedOK = false; } @@ -374,7 +374,7 @@ return Favcodec_alloc_frame(); } -int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec) +int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec, AVDictionary **options) { WaitAndSignal m(processLock); --- opal-3.10.11/plugins/video/MPEG4-ffmpeg/mpeg4.cxx.0 2016-02-19 21:52:51.566808873 +0000 +++ opal-3.10.11/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2016-02-19 21:53:02.306763310 +0000 @@ -206,7 +206,7 @@ { 0 } }; -FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_MPEG4); +FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_MPEG4); static bool mpeg4IsIframe (BYTE * frameBuffer, unsigned int frameLen ) @@ -703,7 +703,7 @@ return false; } - if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(CODEC_ID_MPEG4)) == NULL){ + if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(AV_CODEC_ID_MPEG4)) == NULL){ PTRACE(1, "MPEG4", "Encoder not found"); return false; } @@ -1396,7 +1396,7 @@ bool MPEG4DecoderContext::OpenCodec() { - if ((m_avcodec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_MPEG4)) == NULL) { + if ((m_avcodec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_MPEG4)) == NULL) { PTRACE(1, "MPEG4", "Decoder not found for encoder"); return false; } --- opal-3.10.11/plugins/video/H.264/h264-x264.cxx.orig 2016-02-19 22:04:47.243776296 +0000 +++ opal-3.10.11/plugins/video/H.264/h264-x264.cxx 2016-02-19 22:04:58.863727118 +0000 @@ -107,7 +107,7 @@ /////////////////////////////////////////////////////////////////////////////// -FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H264); +FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H264); PLUGINCODEC_CONTROL_LOG_FUNCTION_DEF @@ -1067,7 +1067,7 @@ allows you to fail the create operation (return false), which cannot be done in the normal C++ constructor. */ - if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H264)) == NULL) + if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(AV_CODEC_ID_H264)) == NULL) return false; if ((m_context = FFMPEGLibraryInstance.AvcodecAllocContext()) == NULL)