From 8d7f7562f92558761e3ffa847fed382b8bd27165 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Thu, 27 Sep 2018 13:03:33 +0200 Subject: [PATCH] - use libsrtp2 instead of srtp; partial ffmpeg update --- ffmpeg.patch | 1048 +++++++++++++++++++++++++++++++++++++++++++ ffmpeg2.patch | 177 -------- opal-build.patch | 13 + opal-ffmpeg10.patch | 109 ----- opal.spec | 10 +- srtp.patch | 20 + 6 files changed, 1087 insertions(+), 290 deletions(-) create mode 100644 ffmpeg.patch delete mode 100644 ffmpeg2.patch delete mode 100644 opal-ffmpeg10.patch create mode 100644 srtp.patch diff --git a/ffmpeg.patch b/ffmpeg.patch new file mode 100644 index 0000000..49a95b0 --- /dev/null +++ b/ffmpeg.patch @@ -0,0 +1,1048 @@ +Description: Backport changes for the libav 9 API + Also replace loading of libavcodec and libavutil via dlopen by linking against + it. +Author: Sebastian Ramacher +Bug-Debian: http://bugs.debian.org/720824 +Last-Update: 2013-09-12 + +--- a/plugins/video/H.263-1998/h263-1998.cxx ++++ b/plugins/video/H.263-1998/h263-1998.cxx +@@ -216,7 +216,7 @@ + return false; + } + +- m_context = FFMPEGLibraryInstance.AvcodecAllocContext(); ++ m_context = FFMPEGLibraryInstance.AvcodecAllocContext(m_codec); + if (m_context == NULL) { + PTRACE(1, m_prefix, "Failed to allocate context for encoder"); + return false; +@@ -312,6 +312,7 @@ + return; + } + ++#ifdef CODEC_FLAG_H263P_UMV + if (STRCMPI(option, H263_ANNEX_D) == 0) { + // Annex D: Unrestructed Motion Vectors + // Level 2+ +@@ -322,6 +323,7 @@ + m_context->flags &= ~CODEC_FLAG_H263P_UMV; + return; + } ++#endif + + #if 0 // DO NOT ENABLE THIS FLAG. FFMPEG IS NOT THREAD_SAFE WHEN THIS FLAG IS SET + if (STRCMPI(option, H263_ANNEX_F) == 0) { +@@ -356,6 +358,7 @@ + return; + } + ++#ifdef CODEC_FLAG_H263P_SLICE_STRUCT + if (STRCMPI(option, H263_ANNEX_K) == 0) { + // Annex K: Slice Structure + // does not work with eyeBeam +@@ -365,7 +368,9 @@ + m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; + return; + } ++#endif + ++#ifdef CODEC_FLAG_H263P_AIV + if (STRCMPI(option, H263_ANNEX_S) == 0) { + // Annex S: Alternative INTER VLC mode + // does not work with eyeBeam +@@ -375,6 +380,7 @@ + m_context->flags &= ~CODEC_FLAG_H263P_AIV; + return; + } ++#endif + + if (STRCMPI(option, PLUGINCODEC_MEDIA_PACKETIZATION) == 0 || + STRCMPI(option, PLUGINCODEC_MEDIA_PACKETIZATIONS) == 0) { +@@ -450,15 +456,6 @@ + PTRACE(5, m_prefix, "qmax set to " << m_context->qmax); + PTRACE(5, m_prefix, "payload size set to " << m_context->rtp_payload_size); + +- #define CODEC_TRACER_FLAG(tracer, flag) \ +- PTRACE(4, m_prefix, #flag " is " << ((m_context->flags & flag) ? "enabled" : "disabled")); +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_UMV); +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_OBMC); +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_AC_PRED); +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_SLICE_STRUCT) +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_LOOP_FILTER); +- CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_AIV); +- + return FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) == 0; + } + +@@ -521,7 +518,7 @@ + + // Need to copy to local buffer to guarantee 16 byte alignment + memcpy(m_inputFrame->data[0], OPAL_VIDEO_FRAME_DATA_PTR(header), header->width*header->height*3/2); +- m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? FF_I_TYPE : AV_PICTURE_TYPE_NONE; ++ m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_NONE; + + /* + m_inputFrame->pts = (int64_t)srcRTP.GetTimestamp()*m_context->time_base.den/m_context->time_base.num/VIDEO_CLOCKRATE; +@@ -603,13 +600,19 @@ + m_context->rtp_callback = &H263_RFC2190_EncoderContext::RTPCallBack; + m_context->opaque = this; // used to separate out packets from different encode threads + ++#ifdef CODEC_FLAG_H263P_UMV + m_context->flags &= ~CODEC_FLAG_H263P_UMV; ++#endif + m_context->flags &= ~CODEC_FLAG_4MV; + #if LIBAVCODEC_RTP_MODE + m_context->flags &= ~CODEC_FLAG_H263P_AIC; + #endif ++#ifdef CODEC_FLAG_H263P_AIV + m_context->flags &= ~CODEC_FLAG_H263P_AIV; ++#endif ++#ifdef CODEC_FLAG_H263P_SLICE_STRUCT + m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; ++#endif + + return true; + } +@@ -658,7 +661,7 @@ + return; + } + +- m_context = FFMPEGLibraryInstance.AvcodecAllocContext(); ++ m_context = FFMPEGLibraryInstance.AvcodecAllocContext(m_codec); + if (m_context == NULL) { + PTRACE(1, m_prefix, "Failed to allocate context for decoder"); + return; +--- a/plugins/video/H.264/h264-x264.cxx ++++ b/plugins/video/H.264/h264-x264.cxx +@@ -48,6 +48,7 @@ + #include "shared/h264frame.h" + #include "shared/x264wrap.h" + ++#include + + #define MY_CODEC x264 // Name of codec (use C variable characters) + #define MY_CODEC_LOG "x264" +@@ -1067,18 +1068,17 @@ + if ((m_codec = FFMPEGLibraryInstance.AvcodecFindDecoder(CODEC_ID_H264)) == NULL) + return false; + +- if ((m_context = FFMPEGLibraryInstance.AvcodecAllocContext()) == NULL) ++ if ((m_context = FFMPEGLibraryInstance.AvcodecAllocContext(m_codec)) == NULL) + return false; + + m_context->workaround_bugs = FF_BUG_AUTODETECT; +- m_context->error_recognition = FF_ER_AGGRESSIVE; + 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_BRDO | +- CODEC_FLAG2_MEMC_ONLY | ++ m_context->flags2 = CODEC_FLAG2_SKIP_RD | ++#ifdef CODEC_FLAG2_DROP_FRAME_TIMECODE + CODEC_FLAG2_DROP_FRAME_TIMECODE | +- CODEC_FLAG2_SKIP_RD | ++#endif + CODEC_FLAG2_CHUNKS; + + if ((m_picture = FFMPEGLibraryInstance.AvcodecAllocFrame()) == NULL) +--- a/plugins/video/MPEG4-ffmpeg/mpeg4.cxx ++++ b/plugins/video/MPEG4-ffmpeg/mpeg4.cxx +@@ -589,17 +589,14 @@ + m_avpicture->quality = m_videoQMin; + + #ifdef USE_ORIG +- m_avcontext->flags |= CODEC_FLAG_PART; // data partitioning + m_avcontext->flags |= CODEC_FLAG_4MV; // 4 motion vectors + #else + m_avcontext->max_b_frames=0; /*don't use b frames*/ + m_avcontext->flags|=CODEC_FLAG_AC_PRED; +- m_avcontext->flags|=CODEC_FLAG_H263P_UMV; + /*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; +- m_avcontext->flags|=CODEC_FLAG_H263P_SLICE_STRUCT; + #endif + m_avcontext->opaque = this; // for use in RTP callback + } +@@ -691,7 +688,12 @@ + + bool MPEG4EncoderContext::OpenCodec() + { +- m_avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(); ++ if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(CODEC_ID_MPEG4)) == NULL){ ++ PTRACE(1, "MPEG4", "Encoder not found"); ++ return false; ++ } ++ ++ m_avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(m_avcodec); + if (m_avcontext == NULL) { + PTRACE(1, "MPEG4", "Encoder failed to allocate context for encoder"); + return false; +@@ -703,11 +705,6 @@ + return false; + } + +- if((m_avcodec = FFMPEGLibraryInstance.AvcodecFindEncoder(CODEC_ID_MPEG4)) == NULL){ +- PTRACE(1, "MPEG4", "Encoder not found"); +- return false; +- } +- + #if PLUGINCODEC_TRACING + // debugging flags + if (PTRACE_CHECK(4)) { +@@ -804,7 +801,7 @@ + // Should the next frame be an I-Frame? + if ((flags & PluginCodec_CoderForceIFrame) || (m_frameNum == 0)) + { +- m_avpicture->pict_type = FF_I_TYPE; ++ m_avpicture->pict_type = AV_PICTURE_TYPE_I; + } + else // No IFrame requested, let avcodec decide what to do + { +@@ -1325,7 +1322,6 @@ + + void MPEG4DecoderContext::SetStaticDecodingParams() { + m_avcontext->flags |= CODEC_FLAG_4MV; +- m_avcontext->flags |= CODEC_FLAG_PART; + m_avcontext->workaround_bugs = 0; // no workaround for buggy implementations + } + +@@ -1399,7 +1395,7 @@ + return false; + } + +- m_avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(); ++ m_avcontext = FFMPEGLibraryInstance.AvcodecAllocContext(m_avcodec); + if (m_avcontext == NULL) { + PTRACE(1, "MPEG4", "Decoder failed to allocate context"); + return false; +--- a/plugins/video/common/dyna.cxx ++++ b/plugins/video/common/dyna.cxx +@@ -38,6 +38,13 @@ + * Matthias Schneider (ma30002000@yahoo.de) + */ + #include "dyna.h" ++#include ++#include ++ ++extern "C" { ++#include ++#include ++} + + bool DynaLink::Open(const char *name) + { +@@ -228,101 +235,15 @@ + m_libAvutil.Close(); + } + +-#define CHECK_AVUTIL(name, func) \ +- (seperateLibAvutil ? \ +- m_libAvutil.GetFunction(name, (DynaLink::Function &)func) : \ +- m_libAvcodec.GetFunction(name, (DynaLink::Function &)func) \ +- ) \ +- +- + bool FFMPEGLibrary::Load() + { + WaitAndSignal m(processLock); + if (IsLoaded()) + return true; + +- bool seperateLibAvutil = false; +- +-#ifdef LIBAVCODEC_LIB_NAME +- if (m_libAvcodec.Open(LIBAVCODEC_LIB_NAME)) +- seperateLibAvutil = true; +- else +-#endif +- if (m_libAvcodec.Open("libavcodec")) +- seperateLibAvutil = false; +- else if (m_libAvcodec.Open("avcodec-" AV_STRINGIFY(LIBAVCODEC_VERSION_MAJOR))) +- seperateLibAvutil = true; +- else { +- PTRACE(1, m_codecString, "Failed to load FFMPEG libavcodec library"); +- return false; +- } +- +- if (seperateLibAvutil && +- !( +-#ifdef LIBAVUTIL_LIB_NAME +- m_libAvutil.Open(LIBAVUTIL_LIB_NAME) || +-#endif +- m_libAvutil.Open("libavutil") || +- m_libAvutil.Open("avutil-" AV_STRINGIFY(LIBAVUTIL_VERSION_MAJOR)) +- ) ) { +- PTRACE(1, m_codecString, "Failed to load FFMPEG libavutil library"); +- return false; +- } +- +- strcpy(m_libAvcodec.m_codecString, m_codecString); +- strcpy(m_libAvutil.m_codecString, m_codecString); +- +- if (!m_libAvcodec.GetFunction("avcodec_init", (DynaLink::Function &)Favcodec_init)) +- return false; +- +- if (!m_libAvcodec.GetFunction("av_init_packet", (DynaLink::Function &)Fav_init_packet)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_register_all", (DynaLink::Function &)Favcodec_register_all)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_find_encoder", (DynaLink::Function &)Favcodec_find_encoder)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_find_decoder", (DynaLink::Function &)Favcodec_find_decoder)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_alloc_context", (DynaLink::Function &)Favcodec_alloc_context)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_alloc_frame", (DynaLink::Function &)Favcodec_alloc_frame)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_open", (DynaLink::Function &)Favcodec_open)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_close", (DynaLink::Function &)Favcodec_close)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_encode_video", (DynaLink::Function &)Favcodec_encode_video)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_decode_video2", (DynaLink::Function &)Favcodec_decode_video)) +- return false; +- +- if (!m_libAvcodec.GetFunction("avcodec_set_dimensions", (DynaLink::Function &)Favcodec_set_dimensions)) +- return false; +- +- if (!CHECK_AVUTIL("av_free", Favcodec_free)) +- return false; +- +- if(!m_libAvcodec.GetFunction("avcodec_version", (DynaLink::Function &)Favcodec_version)) +- return false; +- +- if (!CHECK_AVUTIL("av_log_set_level", FAv_log_set_level)) +- return false; +- +- if (!CHECK_AVUTIL("av_log_set_callback", FAv_log_set_callback)) +- return false; +- + // must be called before using avcodec lib + +- unsigned libVer = Favcodec_version(); ++ unsigned libVer = avcodec_version(); + if (libVer != LIBAVCODEC_VERSION_INT) { + PTRACE(2, m_codecString, "Warning: compiled against libavcodec headers from version " + << LIBAVCODEC_VERSION_MAJOR << '.' << LIBAVCODEC_VERSION_MINOR << '.' << LIBAVCODEC_VERSION_MICRO +@@ -334,8 +255,7 @@ + << (libVer >> 16) << ((libVer>>8) & 0xff) << (libVer & 0xff)); + } + +- Favcodec_init(); +- Favcodec_register_all (); ++ avcodec_register_all(); + + #if PLUGINCODEC_TRACING + AvLogSetLevel(AV_LOG_DEBUG); +@@ -350,49 +270,49 @@ + + AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id) + { +- return Favcodec_find_encoder(id); ++ return avcodec_find_encoder(id); + } + + AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id) + { + WaitAndSignal m(processLock); + +- return Favcodec_find_decoder(id); ++ return avcodec_find_decoder(id); + } + +-AVCodecContext *FFMPEGLibrary::AvcodecAllocContext(void) ++AVCodecContext *FFMPEGLibrary::AvcodecAllocContext(AVCodec *codec) + { + WaitAndSignal m(processLock); + +- return Favcodec_alloc_context(); ++ return avcodec_alloc_context3(codec); + } + + AVFrame *FFMPEGLibrary::AvcodecAllocFrame(void) + { + WaitAndSignal m(processLock); + +- return Favcodec_alloc_frame(); ++ return avcodec_alloc_frame(); + } + + int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec) + { + WaitAndSignal m(processLock); + +- return Favcodec_open(ctx, codec); ++ return avcodec_open2(ctx, codec, NULL); + } + + int FFMPEGLibrary::AvcodecClose(AVCodecContext *ctx) + { + WaitAndSignal m(processLock); + +- return Favcodec_close(ctx); ++ return avcodec_close(ctx); + } + + int FFMPEGLibrary::AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict) + { + int res; + +- res = Favcodec_encode_video(ctx, buf, buf_size, pict); ++ res = avcodec_encode_video(ctx, buf, buf_size, pict); + + PTRACE(6, m_codecString, "DYNA\tEncoded into " << res << " bytes, max " << buf_size); + return res; +@@ -401,35 +321,35 @@ + int FFMPEGLibrary::AvcodecDecodeVideo(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, BYTE *buf, int buf_size) + { + AVPacket avpkt; +- Fav_init_packet(&avpkt); ++ av_init_packet(&avpkt); + avpkt.data = buf; + avpkt.size = buf_size; + +- return Favcodec_decode_video(ctx, pict, got_picture_ptr, &avpkt); ++ return avcodec_decode_video2(ctx, pict, got_picture_ptr, &avpkt); + } + + void FFMPEGLibrary::AvcodecFree(void * ptr) + { + WaitAndSignal m(processLock); + +- Favcodec_free(ptr); ++ av_free(ptr); + } + + void FFMPEGLibrary::AvSetDimensions(AVCodecContext *s, int width, int height) + { + WaitAndSignal m(processLock); + +- Favcodec_set_dimensions(s, width, height); ++ avcodec_set_dimensions(s, width, height); + } + + void FFMPEGLibrary::AvLogSetLevel(int level) + { +- FAv_log_set_level(level); ++ av_log_set_level(level); + } + + void FFMPEGLibrary::AvLogSetCallback(void (*callback)(void*, int, const char*, va_list)) + { +- FAv_log_set_callback(callback); ++ av_log_set_callback(callback); + } + + bool FFMPEGLibrary::IsLoaded() +--- a/plugins/video/common/dyna.h ++++ b/plugins/video/common/dyna.h +@@ -95,7 +95,7 @@ + + AVCodec *AvcodecFindEncoder(enum CodecID id); + AVCodec *AvcodecFindDecoder(enum CodecID id); +- AVCodecContext *AvcodecAllocContext(void); ++ AVCodecContext *AvcodecAllocContext(AVCodec*); + AVFrame *AvcodecAllocFrame(void); + int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); + int AvcodecClose(AVCodecContext *ctx); +@@ -120,26 +120,6 @@ + CodecID m_codec; + char m_codecString[32]; + +- void (*Favcodec_init)(void); +- void (*Fav_init_packet)(AVPacket *pkt); +- +- void (*Favcodec_register_all)(void); +- AVCodec *(*Favcodec_find_encoder)(enum CodecID id); +- AVCodec *(*Favcodec_find_decoder)(enum CodecID id); +- AVCodecContext *(*Favcodec_alloc_context)(void); +- AVFrame *(*Favcodec_alloc_frame)(void); +- int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec); +- int (*Favcodec_close)(AVCodecContext *ctx); +- int (*Favcodec_encode_video)(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict); +- int (*Favcodec_decode_video)(AVCodecContext *ctx, AVFrame *pict, int *got_picture_ptr, AVPacket *avpkt); +- unsigned (*Favcodec_version)(void); +- void (*Favcodec_set_dimensions)(AVCodecContext *ctx, int width, int height); +- +- void (*Favcodec_free)(void *); +- +- void (*FAv_log_set_level)(int level); +- void (*FAv_log_set_callback)(void (*callback)(void*, int, const char*, va_list)); +- + bool m_isLoadedOK; + }; + +--- a/plugins/video/common/ffmpeg.h ++++ b/plugins/video/common/ffmpeg.h +@@ -45,11 +45,13 @@ + + #include "platform.h" + +-#include "libavcodec/avcodec.h" ++extern "C" { ++#include + // AVPacket was declared in avformat.h before April 2009 + #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(52, 25, 0) +-#include "libavformat/avformat.h" ++#include + #endif ++} + + #ifndef LIBAVCODEC_VERSION_INT + #error Libavcodec include is not correct +--- a/plugins/video/H.263-1998/Makefile.in ++++ b/plugins/video/H.263-1998/Makefile.in +@@ -34,8 +34,8 @@ + $(COMMONDIR)/mpi.cxx \ + $(COMMONDIR)/dyna.cxx + +-CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR) +-LIBS += @DL_LIBS@ ++CFLAGS += @LIBAVCODEC_CFLAGS@ @LIBAVUTIL_CFLAGS@ -I$(COMMONDIR) ++LIBS += @DL_LIBS@ @LIBAVCODEC_LIBS@ @LIBAVUTIL_LIBS@ + + HAVE_LIBAVCODEC_RTP_MODE=@HAVE_LIBAVCODEC_RTP_MODE@ + ifeq ($(HAVE_LIBAVCODEC_RTP_MODE),yes) +--- a/plugins/video/H.264/Makefile.in ++++ b/plugins/video/H.264/Makefile.in +@@ -34,8 +34,8 @@ + $(SHAREDDIR)/x264wrap.cxx \ + $(COMMONDIR)/dyna.cxx \ + +-CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR) -DLIB_DIR='"$(libdir)"' -DVC_PLUGIN_DIR='"@VC_PLUGIN_DIR@"' +-LIBS += @DL_LIBS@ ++CFLAGS += @LIBAVCODEC_CFLAGS@ @LIBAVUTIL_CFLAGS@ -I$(COMMONDIR) -DLIB_DIR='"$(libdir)"' -DVC_PLUGIN_DIR='"@VC_PLUGIN_DIR@"' ++LIBS += @DL_LIBS@ @LIBAVCODEC_LIBS@ @LIBAVUTIL_LIBS@ + + IS_H264_LICENSED:=@IS_H264_LICENSED@ + ifeq ($(IS_H264_LICENSED),yes) +--- a/plugins/video/MPEG4-ffmpeg/Makefile.in ++++ b/plugins/video/MPEG4-ffmpeg/Makefile.in +@@ -30,8 +30,8 @@ + SRCDIR := . + SRCS := mpeg4.cxx $(COMMONDIR)/dyna.cxx + +-CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR) +-LIBS += @DL_LIBS@ ++CFLAGS += @LIBAVCODEC_CFLAGS@ @LIBAVUTIL_CFLAGS@ -I$(COMMONDIR) ++LIBS += @DL_LIBS@ @LIBAVCODEC_LIBS@ @LIBAVUTIL_LIBS@ + + # Add LIBAVCODEC_SOURCE_DIR to the include path so we can #include + # Also add libavutil, so ffmpeg headers can #include "log.h". +Description: Fix compilation against libav10 +Author: Reinhard Tartler +Bug-Debian: http://bugs.debian.org/739439 + +--- a/plugins/video/H.263-1998/h263-1998.cxx ++++ b/plugins/video/H.263-1998/h263-1998.cxx +@@ -94,7 +94,7 @@ static struct StdSizes { + { CIF16_WIDTH, CIF16_HEIGHT, PLUGINCODEC_CIF16_MPI }, + }; + +-static FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H263P); ++static FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H263P); + + + ///////////////////////////////////////////////////////////////////////////// +@@ -203,7 +203,7 @@ H263_Base_EncoderContext::~H263_Base_Enc + PTRACE(4, m_prefix, "Encoder closed"); + } + +-bool H263_Base_EncoderContext::Init(CodecID codecId) ++bool H263_Base_EncoderContext::Init(AVCodecID codecId) + { + PTRACE(5, m_prefix, "Opening encoder"); + +@@ -589,7 +589,7 @@ void H263_RFC2190_EncoderContext::RTPCal + + 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 +@@ -632,7 +632,7 @@ H263_RFC2429_EncoderContext::~H263_RFC24 + + bool H263_RFC2429_EncoderContext::Init() + { +- return H263_Base_EncoderContext::Init(CODEC_ID_H263P); ++ return H263_Base_EncoderContext::Init(AV_CODEC_ID_H263P); + } + + +@@ -656,7 +656,7 @@ H263_Base_DecoderContext::H263_Base_Deco + 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; + } +--- a/plugins/video/H.264/h264-x264.cxx ++++ b/plugins/video/H.264/h264-x264.cxx +@@ -105,7 +105,7 @@ static struct PluginCodec_information Li + + /////////////////////////////////////////////////////////////////////////////// + +-FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_H264); ++FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_H264); + + PLUGINCODEC_CONTROL_LOG_FUNCTION_DEF + +@@ -1065,17 +1065,17 @@ class MyDecoder : public PluginCodecworkaround_bugs = FF_BUG_AUTODETECT; +- m_context->idct_algo = FF_IDCT_H264; ++ m_context->idct_algo = FF_IDCT_AUTO; + 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_SKIP_RD | ++ m_context->flags2 = + #ifdef CODEC_FLAG2_DROP_FRAME_TIMECODE + CODEC_FLAG2_DROP_FRAME_TIMECODE | + #endif +--- a/plugins/video/MPEG4-ffmpeg/mpeg4.cxx ++++ b/plugins/video/MPEG4-ffmpeg/mpeg4.cxx +@@ -205,7 +205,7 @@ const static struct mpeg4_resolution { + { 0 } + }; + +-FFMPEGLibrary FFMPEGLibraryInstance(CODEC_ID_MPEG4); ++FFMPEGLibrary FFMPEGLibraryInstance(AV_CODEC_ID_MPEG4); + + + static bool mpeg4IsIframe (BYTE * frameBuffer, unsigned int frameLen ) +@@ -688,7 +688,7 @@ void MPEG4EncoderContext::ResizeEncoding + + bool MPEG4EncoderContext::OpenCodec() + { +- 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; + } +@@ -1390,7 +1390,7 @@ void MPEG4DecoderContext::ResizeDecoding + + 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; + } +--- a/plugins/video/H.263-1998/h263-1998.h ++++ b/plugins/video/H.263-1998/h263-1998.h +@@ -115,7 +115,7 @@ class H263_Base_EncoderContext + virtual ~H263_Base_EncoderContext(); + + virtual bool Init() = 0; +- virtual bool Init(CodecID codecId); ++ virtual bool Init(AVCodecID codecId); + + virtual bool SetOptions(const char * const * options); + virtual void SetOption(const char * option, const char * value); +--- a/plugins/video/common/dyna.cxx ++++ b/plugins/video/common/dyna.cxx +@@ -217,14 +217,14 @@ static void logCallbackFFMPEG(void * avc + #endif + + +-FFMPEGLibrary::FFMPEGLibrary(CodecID codec) ++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; + } +@@ -268,12 +268,12 @@ bool FFMPEGLibrary::Load() + return true; + } + +-AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id) ++AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum AVCodecID id) + { + return avcodec_find_encoder(id); + } + +-AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id) ++AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum AVCodecID id) + { + WaitAndSignal m(processLock); + +@@ -308,13 +308,18 @@ int FFMPEGLibrary::AvcodecClose(AVCodecC + return avcodec_close(ctx); + } + ++#undef FFMAX ++#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) + int FFMPEGLibrary::AvcodecEncodeVideo(AVCodecContext *ctx, BYTE *buf, int buf_size, const AVFrame *pict) + { ++ AVPacket pkt = { 0 }; ++ int ret, got_output; + int res; + +- res = avcodec_encode_video(ctx, buf, buf_size, pict); ++ ret = avcodec_encode_video2(ctx, &pkt, pict, &got_output); + +- PTRACE(6, m_codecString, "DYNA\tEncoded into " << res << " bytes, max " << buf_size); ++ PTRACE(6, m_codecString, "DYNA\tEncoded into " << ret << " bytes, max " << buf_size); ++ memcpy(buf, pkt.data, FFMAX(pkt.size, buf_size)); + return res; + } + +--- a/plugins/video/common/dyna.h ++++ b/plugins/video/common/dyna.h +@@ -88,13 +88,13 @@ class DynaLink + class FFMPEGLibrary + { + public: +- FFMPEGLibrary(CodecID codec); ++ FFMPEGLibrary(AVCodecID codec); + ~FFMPEGLibrary(); + + bool Load(); + +- AVCodec *AvcodecFindEncoder(enum CodecID id); +- AVCodec *AvcodecFindDecoder(enum CodecID id); ++ AVCodec *AvcodecFindEncoder(enum AVCodecID id); ++ AVCodec *AvcodecFindDecoder(enum AVCodecID id); + AVCodecContext *AvcodecAllocContext(AVCodec*); + AVFrame *AvcodecAllocFrame(void); + int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); +@@ -117,7 +117,7 @@ class FFMPEGLibrary + DynaLink m_libAvcodec; + DynaLink m_libAvutil; + +- CodecID m_codec; ++ AVCodecID m_codec; + char m_codecString[32]; + + bool m_isLoadedOK; +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_AUTO; + 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 = + #ifdef CODEC_FLAG2_DROP_FRAME_TIMECODE + CODEC_FLAG2_DROP_FRAME_TIMECODE | +@@ -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.cxx ++++ opal-3.10.10~dfsg2/plugins/video/common/dyna.cxx +@@ -291,14 +291,14 @@ AVFrame *FFMPEGLibrary::AvcodecAllocFram + { + WaitAndSignal m(processLock); + +- return avcodec_alloc_frame(); ++ return av_frame_alloc(); + } + +-int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec) ++int FFMPEGLibrary::AvcodecOpen(AVCodecContext *ctx, AVCodec *codec, AVDictionary **options) + { + WaitAndSignal m(processLock); + +- return avcodec_open2(ctx, codec, NULL); ++ return avcodec_open2(ctx, codec, options); + } + + int FFMPEGLibrary::AvcodecClose(AVCodecContext *ctx) +@@ -344,7 +344,15 @@ void FFMPEGLibrary::AvSetDimensions(AVCo + { + WaitAndSignal m(processLock); + +- avcodec_set_dimensions(s, width, height); ++ if (av_image_check_size(width, height, 0, s) < 0) { ++ av_log(s, AV_LOG_WARNING, "Failed to set dimensions %d %d\n", width, height); ++ width = height = 0; ++ } ++ ++ s->coded_width = width; ++ s->coded_height = height; ++ s->width = (width + (1 << av_codec_get_lowres(s)) - 1) >> av_codec_get_lowres(s); ++ s->height = (height + (1 << av_codec_get_lowres(s)) - 1) >> av_codec_get_lowres(s); + } + + void FFMPEGLibrary::AvLogSetLevel(int level) +--- 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 ++#include + // AVPacket was declared in avformat.h before April 2009 + #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(52, 25, 0) + #include +diff -ur opal-3.10.11.org/plugins/video/H.263-1998/h263-1998.cxx opal-3.10.11/plugins/video/H.263-1998/h263-1998.cxx +--- opal-3.10.11.org/plugins/video/H.263-1998/h263-1998.cxx 2018-09-27 12:41:23.304757504 +0200 ++++ opal-3.10.11/plugins/video/H.263-1998/h263-1998.cxx 2018-09-27 12:59:25.737615925 +0200 +@@ -230,7 +230,7 @@ + + m_context->opaque = this; + +- m_context->flags = CODEC_FLAG_TRUNCATED // Possible missing packets ++ m_context->flags = AV_CODEC_FLAG_TRUNCATED // Possible missing packets + ; + + m_context->pix_fmt = AV_PIX_FMT_YUV420P; +@@ -341,9 +341,9 @@ + // Level 3+ + // works with eyeBeam + if (atoi(value) == 1) +- m_context->flags |= CODEC_FLAG_AC_PRED; ++ m_context->flags |= AV_CODEC_FLAG_AC_PRED; + else +- m_context->flags &= ~CODEC_FLAG_AC_PRED; ++ m_context->flags &= ~AV_CODEC_FLAG_AC_PRED; + return; + } + +@@ -351,9 +351,9 @@ + // Annex J: Deblocking Filter + // works with eyeBeam + if (atoi(value) == 1) +- m_context->flags |= CODEC_FLAG_LOOP_FILTER; ++ m_context->flags |= AV_CODEC_FLAG_LOOP_FILTER; + else +- m_context->flags &= ~CODEC_FLAG_LOOP_FILTER; ++ m_context->flags &= ~AV_CODEC_FLAG_LOOP_FILTER; + return; + } + +@@ -599,7 +599,7 @@ + #ifdef CODEC_FLAG_H263P_UMV + m_context->flags &= ~CODEC_FLAG_H263P_UMV; + #endif +- m_context->flags &= ~CODEC_FLAG_4MV; ++ m_context->flags &= ~AV_CODEC_FLAG_4MV; + #if LIBAVCODEC_RTP_MODE + m_context->flags &= ~CODEC_FLAG_H263P_AIC; + #endif +diff -ur opal-3.10.11.org/plugins/video/H.263-1998/rfc2429.cxx opal-3.10.11/plugins/video/H.263-1998/rfc2429.cxx +--- opal-3.10.11.org/plugins/video/H.263-1998/rfc2429.cxx 2013-08-15 01:22:47.000000000 +0200 ++++ opal-3.10.11/plugins/video/H.263-1998/rfc2429.cxx 2018-09-27 12:46:38.534350768 +0200 +@@ -286,7 +286,7 @@ + + unsigned char * RFC2429Frame::GetBuffer() + { +- memset (m_encodedFrame.ptr + m_encodedFrame.pos,0 , FF_INPUT_BUFFER_PADDING_SIZE); ++ memset (m_encodedFrame.ptr + m_encodedFrame.pos,0 , AV_INPUT_BUFFER_PADDING_SIZE); + return (m_encodedFrame.ptr); + } + +@@ -340,10 +340,10 @@ + + unsigned remBytes = packet.GetPayloadSize() - headerPLEN - (headerV ? 3 : 2); + +- if ((m_encodedFrame.pos + (headerP ? 2 : 0) + remBytes) > (m_maxFrameSize - FF_INPUT_BUFFER_PADDING_SIZE)) { ++ if ((m_encodedFrame.pos + (headerP ? 2 : 0) + remBytes) > (m_maxFrameSize - AV_INPUT_BUFFER_PADDING_SIZE)) { + PTRACE(2, "H.263-RFC2429", "Trying to add " << remBytes + << " bytes to frame at position " << m_encodedFrame.pos + (headerP ? 2 : 0) +- << " bytes while maximum frame size is " << m_maxFrameSize << "-" << FF_INPUT_BUFFER_PADDING_SIZE << " bytes"); ++ << " bytes while maximum frame size is " << m_maxFrameSize << "-" << AV_INPUT_BUFFER_PADDING_SIZE << " bytes"); + return false; + } + +diff -ur opal-3.10.11.org/plugins/video/MPEG4-ffmpeg/mpeg4.cxx opal-3.10.11/plugins/video/MPEG4-ffmpeg/mpeg4.cxx +--- opal-3.10.11.org/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2018-09-27 12:41:23.304757504 +0200 ++++ opal-3.10.11/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2018-09-27 12:57:41.014440233 +0200 +@@ -589,13 +589,13 @@ + m_avpicture->quality = m_videoQMin; + + #ifdef USE_ORIG +- m_avcontext->flags |= CODEC_FLAG_4MV; // 4 motion vectors ++ m_avcontext->flags |= AV_CODEC_FLAG_4MV; // 4 motion vectors + #else + m_avcontext->max_b_frames=0; /*don't use b frames*/ +- m_avcontext->flags|=CODEC_FLAG_AC_PRED; ++ m_avcontext->flags|=AV_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_LOOP_FILTER; ++ m_avcontext->flags|=AV_CODEC_FLAG_4MV; ++ m_avcontext->flags|=AV_CODEC_FLAG_LOOP_FILTER; + #endif + m_avcontext->opaque = this; // for use in RTP callback + } +@@ -607,6 +607,7 @@ + // + + void MPEG4EncoderContext::SetDynamicEncodingParams(bool restartOnResize) { ++ char buf[1024]; + // If no bitrate limit is set, max out at 3 mbit + // Use 75% of available bandwidth so not as many frames are dropped + unsigned bitRate +@@ -661,7 +662,7 @@ + { + delete[] m_rawFrameBuffer; + } +- m_rawFrameBuffer = new BYTE[m_rawFrameLen + FF_INPUT_BUFFER_PADDING_SIZE]; ++ m_rawFrameBuffer = new BYTE[m_rawFrameLen + AV_INPUT_BUFFER_PADDING_SIZE]; + + if (m_encFrameBuffer) + { +@@ -671,7 +672,7 @@ + m_encFrameBuffer = new BYTE[m_encFrameLen]; + + // Clear the back padding +- memset(m_rawFrameBuffer + m_rawFrameLen, 0, FF_INPUT_BUFFER_PADDING_SIZE); ++ memset(m_rawFrameBuffer + m_rawFrameLen, 0, AV_INPUT_BUFFER_PADDING_SIZE); + const unsigned fsz = m_frameWidth * m_frameHeight; + m_avpicture->data[0] = m_rawFrameBuffer; // luminance + m_avpicture->data[1] = m_rawFrameBuffer + fsz; // first chroma channel +@@ -1322,7 +1323,7 @@ + // + + void MPEG4DecoderContext::SetStaticDecodingParams() { +- m_avcontext->flags |= CODEC_FLAG_4MV; ++ m_avcontext->flags |= AV_CODEC_FLAG_4MV; + m_avcontext->workaround_bugs = 0; // no workaround for buggy implementations + } + diff --git a/ffmpeg2.patch b/ffmpeg2.patch deleted file mode 100644 index af29abf..0000000 --- a/ffmpeg2.patch +++ /dev/null @@ -1,177 +0,0 @@ -diff -rupN a/plugins/video/common/dyna.cxx b/plugins/video/common/dyna.cxx ---- a/plugins/video/common/dyna.cxx 2013-02-20 02:18:05.000000000 +0000 -+++ b/plugins/video/common/dyna.cxx 2013-07-22 16:55:47.307946942 +0000 -@@ -210,7 +210,7 @@ static void logCallbackFFMPEG(void * avc - #endif - - --FFMPEGLibrary::FFMPEGLibrary(CodecID codec) -+FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec) - { - m_codec = codec; - if (m_codec==CODEC_ID_H264) -@@ -348,12 +348,12 @@ bool FFMPEGLibrary::Load() - return true; - } - --AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id) -+AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum AVCodecID id) - { - return Favcodec_find_encoder(id); - } - --AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id) -+AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum AVCodecID id) - { - WaitAndSignal m(processLock); - -diff -rupN a/plugins/video/common/dyna.h b/plugins/video/common/dyna.h ---- a/plugins/video/common/dyna.h 2013-02-20 02:18:05.000000000 +0000 -+++ b/plugins/video/common/dyna.h 2013-07-22 16:55:47.191281134 +0000 -@@ -88,13 +88,13 @@ class DynaLink - class FFMPEGLibrary - { - public: -- FFMPEGLibrary(CodecID codec); -+ FFMPEGLibrary(AVCodecID codec); - ~FFMPEGLibrary(); - - bool Load(); - -- AVCodec *AvcodecFindEncoder(enum CodecID id); -- AVCodec *AvcodecFindDecoder(enum CodecID id); -+ AVCodec *AvcodecFindEncoder(enum AVCodecID id); -+ AVCodec *AvcodecFindDecoder(enum AVCodecID id); - AVCodecContext *AvcodecAllocContext(void); - AVFrame *AvcodecAllocFrame(void); - int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec); -@@ -117,15 +117,15 @@ class FFMPEGLibrary - DynaLink m_libAvcodec; - DynaLink m_libAvutil; - -- CodecID m_codec; -+ AVCodecID m_codec; - char m_codecString[32]; - - void (*Favcodec_init)(void); - void (*Fav_init_packet)(AVPacket *pkt); - - void (*Favcodec_register_all)(void); -- AVCodec *(*Favcodec_find_encoder)(enum CodecID id); -- AVCodec *(*Favcodec_find_decoder)(enum CodecID id); -+ AVCodec *(*Favcodec_find_encoder)(enum AVCodecID id); -+ AVCodec *(*Favcodec_find_decoder)(enum AVCodecID id); - AVCodecContext *(*Favcodec_alloc_context)(void); - AVFrame *(*Favcodec_alloc_frame)(void); - int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec); -diff -rupN a/plugins/video/common/ffmpeg/libavcodec/avcodec.h b/plugins/video/common/ffmpeg/libavcodec/avcodec.h ---- a/plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-02-20 02:18:04.000000000 +0000 -+++ b/plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-07-22 16:55:47.167947971 +0000 -@@ -101,7 +101,7 @@ - * 1. no value of a existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs. - */ --enum CodecID { -+enum AVCodecID { - CODEC_ID_NONE, - - /* video codecs */ -@@ -1390,7 +1390,7 @@ typedef struct AVCodecContext { - - char codec_name[32]; - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ -- enum CodecID codec_id; /* see CODEC_ID_xxx */ -+ enum AVCodecID codec_id; /* see CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). -@@ -2843,7 +2843,7 @@ typedef struct AVCodec { - */ - const char *name; - enum AVMediaType type; -- enum CodecID id; -+ enum AVCodecID id; - int priv_data_size; - int (*init)(AVCodecContext *); - int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); -@@ -2898,7 +2898,7 @@ typedef struct AVHWAccel { - * - * See CODEC_ID_xxx - */ -- enum CodecID id; -+ enum AVCodecID id; - - /** - * Supported pixel format. -@@ -3402,10 +3402,10 @@ void avcodec_register(AVCodec *codec); - /** - * Find a registered encoder with a matching codec ID. - * -- * @param id CodecID of the requested encoder -+ * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_encoder(enum CodecID id); -+AVCodec *avcodec_find_encoder(enum AVCodecID id); - - /** - * Find a registered encoder with the specified name. -@@ -3418,10 +3418,10 @@ AVCodec *avcodec_find_encoder_by_name(co - /** - * Find a registered decoder with a matching codec ID. - * -- * @param id CodecID of the requested decoder -+ * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_decoder(enum CodecID id); -+AVCodec *avcodec_find_decoder(enum AVCodecID id); - - /** - * Find a registered decoder with the specified name. -@@ -3822,7 +3822,7 @@ char av_get_pict_type_char(int pict_type - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ --int av_get_bits_per_sample(enum CodecID codec_id); -+int av_get_bits_per_sample(enum AVCodecID codec_id); - - #if FF_API_OLD_SAMPLE_FMT - /** -diff -rupN a/plugins/video/H.263-1998/h263-1998.cxx b/plugins/video/H.263-1998/h263-1998.cxx ---- a/plugins/video/H.263-1998/h263-1998.cxx 2013-02-20 02:18:03.000000000 +0000 -+++ b/plugins/video/H.263-1998/h263-1998.cxx 2013-07-22 16:55:47.314613571 +0000 -@@ -203,7 +203,7 @@ H263_Base_EncoderContext::~H263_Base_Enc - PTRACE(4, m_prefix, "Encoder closed"); - } - --bool H263_Base_EncoderContext::Init(CodecID codecId) -+bool H263_Base_EncoderContext::Init(AVCodecID codecId) - { - PTRACE(5, m_prefix, "Opening encoder"); - -diff -rupN a/plugins/video/H.263-1998/h263-1998.h b/plugins/video/H.263-1998/h263-1998.h ---- a/plugins/video/H.263-1998/h263-1998.h 2013-02-20 02:18:03.000000000 +0000 -+++ b/plugins/video/H.263-1998/h263-1998.h 2013-07-22 16:55:47.307946942 +0000 -@@ -115,7 +115,7 @@ class H263_Base_EncoderContext - virtual ~H263_Base_EncoderContext(); - - virtual bool Init() = 0; -- virtual bool Init(CodecID codecId); -+ virtual bool Init(AVCodecID codecId); - - virtual bool SetOptions(const char * const * options); - virtual void SetOption(const char * option, const char * value); -diff -rupN a/plugins/video/H.264/h264-x264.cxx b/plugins/video/H.264/h264-x264.cxx ---- a/plugins/video/H.264/h264-x264.cxx 2013-02-20 02:18:02.000000000 +0000 -+++ b/plugins/video/H.264/h264-x264.cxx 2013-07-22 17:05:35.383661843 +0000 -@@ -40,6 +40,9 @@ - #include "plugin-config.h" - #endif - -+#define FF_IDCT_H264 11 -+#define CODEC_FLAG2_SKIP_RD 0x00004000 -+ - #include - - #include "../common/ffmpeg.h" diff --git a/opal-build.patch b/opal-build.patch index 468da57..ce23040 100644 --- a/opal-build.patch +++ b/opal-build.patch @@ -36,3 +36,16 @@ PLUGIN = ./ixj_lid_pwplugin.so +--- opal-3.10.11/plugins/video/common/mpi.cxx.orig 2017-07-12 19:15:10.396689138 +0000 ++++ opal-3.10.11/plugins/video/common/mpi.cxx 2017-07-12 19:18:02.036496397 +0000 +@@ -132,8 +132,8 @@ + // to the desired one or matches it + for (i=0; i < MPIs.size(); i++) { + // we square the value in order to get absolute distances +- distance = ( abs(MPIs[i].width - desiredWidth ) * +- abs(MPIs[i].height - desiredHeight) ); ++ distance = ( abs((int)(MPIs[i].width - desiredWidth) ) * ++ abs((int)(MPIs[i].height - desiredHeight) ) ); + + if (distance < minDistance) { + minDistance = distance; diff --git a/opal-ffmpeg10.patch b/opal-ffmpeg10.patch deleted file mode 100644 index 2e5ad38..0000000 --- a/opal-ffmpeg10.patch +++ /dev/null @@ -1,109 +0,0 @@ -Submitted By: Bruce Dubbs -Date: 2012-01-17 -Initial Package Version: 3.10.2 -Rediffed for 3.10.7 on 2012-10-28 -Upstream Status: Not applied, supposedly fixed by a change to configure. -Origin: http://sourceforge.net/tracker/index.php?func=detail&aid=3369480&group_id=204472&atid=989750 -Modified by: Andy Benton -Modified by: Ken Moffat -Description: Fixes compiling with recent releases of ffmpeg. - -diff -Naur opal-3.10.7.orig/plugins/video/H.263-1998/h263-1998.cxx opal-3.10.7/plugins/video/H.263-1998/h263-1998.cxx ---- opal-3.10.7.orig/plugins/video/H.263-1998/h263-1998.cxx 2012-08-23 02:18:42.000000000 +0000 -+++ opal-3.10.7/plugins/video/H.263-1998/h263-1998.cxx 2012-10-29 04:02:50.000000000 +0000 -@@ -60,6 +60,10 @@ - #include "rfc2190.h" - #include "rfc2429.h" - -+#ifndef CODEC_FLAG_H263P_UMV -+#define CODEC_FLAG_H263P_UMV 0x02000000 -+#endif -+ - - static const char YUV420PDesc[] = { "YUV420P" }; - static const char h263PDesc[] = { "H.263plus" }; -@@ -335,6 +339,19 @@ - } - #endif - -+#ifndef CODEC_FLAG_OBMC -+#define CODEC_FLAG_OBMC 0x00000001 -+#endif -+#ifndef CODEC_FLAG_H263P_AIV -+#define CODEC_FLAG_H263P_AIV 0x00000008 -+#endif -+#ifndef CODEC_FLAG_H263P_UMV -+#define CODEC_FLAG_H263P_UMV 0x02000000 -+#endif -+#ifndef CODEC_FLAG_H263P_SLICE_STRUCT -+#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 -+#endif -+ - if (STRCMPI(option, H263_ANNEX_I) == 0) { - // Annex I: Advanced Intra Coding - // Level 3+ -@@ -521,7 +538,7 @@ - - // Need to copy to local buffer to guarantee 16 byte alignment - memcpy(m_inputFrame->data[0], OPAL_VIDEO_FRAME_DATA_PTR(header), header->width*header->height*3/2); -- m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? FF_I_TYPE : AV_PICTURE_TYPE_NONE; -+ m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_NONE; - - /* - m_inputFrame->pts = (int64_t)srcRTP.GetTimestamp()*m_context->time_base.den/m_context->time_base.num/VIDEO_CLOCKRATE; -diff -Naur opal-3.10.7.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx opal-3.10.7/plugins/video/MPEG4-ffmpeg/mpeg4.cxx ---- opal-3.10.7.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2012-08-23 02:18:44.000000000 +0000 -+++ opal-3.10.7/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2012-10-29 03:49:41.000000000 +0000 -@@ -538,6 +538,16 @@ - // unchanged through the duration of the encoding context. - // - -+#ifndef CODEC_FLAG_H263P_UMV -+#define CODEC_FLAG_H263P_UMV 0x02000000 -+#endif -+#ifndef CODEC_FLAG_H263P_SLICE_STRUCT -+#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000 -+#endif -+#ifndef CODEC_FLAG_PART -+#define CODEC_FLAG_PART 0x0080 -+#endif -+ - void MPEG4EncoderContext::SetStaticEncodingParams(){ - m_avcontext->pix_fmt = PIX_FMT_YUV420P; - m_avcontext->mb_decision = FF_MB_DECISION_SIMPLE; // high quality off -@@ -804,7 +814,7 @@ - // Should the next frame be an I-Frame? - if ((flags & PluginCodec_CoderForceIFrame) || (m_frameNum == 0)) - { -- m_avpicture->pict_type = FF_I_TYPE; -+ m_avpicture->pict_type = AV_PICTURE_TYPE_I; - } - else // No IFrame requested, let avcodec decide what to do - { -@@ -1339,7 +1349,7 @@ - if (m_doError) { - int errors = 0; - MpegEncContext *s = (MpegEncContext *) m_avcontext->priv_data; -- if (s->error_count && m_avcontext->coded_frame->pict_type == FF_I_TYPE) { -+ if (s->error_count && m_avcontext->coded_frame->pict_type == AV_PICTURE_TYPE_I) { - const uint8_t badflags = AC_ERROR | DC_ERROR | MV_ERROR; - for (int i = 0; i < s->mb_num && errors < threshold; ++i) { - if (s->error_status_table[s->mb_index2xy[i]] & badflags) ---- opal-3.10.8/plugins/video/H.264/h264-x264.cxx.orig 2012-10-05 08:19:40.000000000 +0200 -+++ opal-3.10.8/plugins/video/H.264/h264-x264.cxx 2012-11-19 12:41:41.265765218 +0100 -@@ -1071,13 +1071,11 @@ - return false; - - m_context->workaround_bugs = FF_BUG_AUTODETECT; -- m_context->error_recognition = FF_ER_AGGRESSIVE; -+ m_context->err_recognition = AV_EF_AGGRESSIVE; - 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_BRDO | -- CODEC_FLAG2_MEMC_ONLY | -- CODEC_FLAG2_DROP_FRAME_TIMECODE | -+ m_context->flags2 = CODEC_FLAG2_DROP_FRAME_TIMECODE | - CODEC_FLAG2_SKIP_RD | - CODEC_FLAG2_CHUNKS; - diff --git a/opal.spec b/opal.spec index 4453989..516ad0b 100644 --- a/opal.spec +++ b/opal.spec @@ -37,13 +37,13 @@ Group: Libraries Source0: http://downloads.sourceforge.net/opalvoip/%{name}-%{version}.tar.bz2 # Source0-md5: fc36a30d2cbce0fbf7cb6ef33b8d63c3 Patch0: %{name}-build.patch -Patch1: %{name}-ffmpeg10.patch +Patch1: ffmpeg.patch Patch2: %{name}-sh.patch Patch3: %{name}-libilbc.patch Patch4: %{name}-ah.patch Patch5: %{name}-exceptions.patch Patch6: %{name}-ruby.patch -Patch7: ffmpeg2.patch +Patch7: srtp.patch URL: http://www.opalvoip.org/ BuildRequires: autoconf >= 2.50 BuildRequires: automake @@ -57,7 +57,7 @@ BuildRequires: ptlib-devel >= 1:2.10.9 BuildRequires: sed >= 4.0 BuildRequires: speex-devel >= 1:1.2 BuildRequires: speexdsp-devel >= 1.2 -%{?with_srtp:BuildRequires: srtp-devel} +%{?with_srtp:BuildRequires: libsrtp2-devel} %if %{without sip_fax_only} BuildRequires: SDL-devel # libavcodec >= 51.11.0 libavutil @@ -112,7 +112,7 @@ Requires: libstdc++-devel %{?with_zrtp:Requires: libzrtp-devel} Requires: ptlib-devel >= 1:2.10.9 Requires: speex-devel >= 1:1.2 -%{?with_srtp:Requires: srtp-devel} +%{?with_srtp:Requires: libsrtp2-devel} %description devel Header files and libraries for developing applications that use OPAL. @@ -158,6 +158,8 @@ cd plugins cd .. # Run grep '^OPAL_.*=' configure.ac|grep 'yes\|no' to check current defaults %configure \ + CFLAGS="%{rpmcflags} -std=gnu++98" \ + CXXFLAGS="%{rpmcxxflags} -std=gnu++98" \ %{?with_java:JDK_ROOT=%{_jvmdir}/java} \ %if %{with sip_fax_only} --disable-aec \ diff --git a/srtp.patch b/srtp.patch new file mode 100644 index 0000000..daf28e3 --- /dev/null +++ b/srtp.patch @@ -0,0 +1,20 @@ +--- opal-3.10.11/opal.m4~ 2018-09-27 11:03:07.000000000 +0200 ++++ opal-3.10.11/opal.m4 2018-09-27 11:04:28.172164490 +0200 +@@ -903,7 +903,7 @@ AC_DEFUN([OPAL_FIND_LIBSRTP], + [ + AC_LANG(C) + AC_COMPILE_IFELSE([ +- AC_LANG_PROGRAM([[#include "srtp/srtp.h"]], ++ AC_LANG_PROGRAM([[#include "srtp2/srtp.h"]], + [[ + crypto_policy_t p; p.cipher_key_len = SRTP_MASTER_KEY_LEN; return 0; + ]] +@@ -913,7 +913,7 @@ AC_DEFUN([OPAL_FIND_LIBSRTP], + [opal_libsrtp=no]) + + if test "x${opal_libsrtp}" = "xyes" ; then +- SRTP_LIBS="-lsrtp" ++ SRTP_LIBS="-lsrtp2" + fi + AS_IF([test AS_VAR_GET([opal_libsrtp]) = yes], [$1], [$2])[] + ]) -- 2.43.0