Date: Friday, February 19, 2016 @ 23:19:45 Author: arojas Revision: 260008
ffmpeg 3.0 rebuild Added: opal/trunk/opal-ffmpeg3.patch Modified: opal/trunk/PKGBUILD --------------------+ PKGBUILD | 9 + opal-ffmpeg3.patch | 247 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 253 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2016-02-19 22:01:00 UTC (rev 260007) +++ PKGBUILD 2016-02-19 22:19:45 UTC (rev 260008) @@ -3,7 +3,7 @@ # Contributor: Tom K <t...@runbox.com> pkgname=opal pkgver=3.10.11 -pkgrel=9 +pkgrel=10 pkgdesc="Open Phone Abstraction Library" arch=(i686 x86_64) url="http://www.opalvoip.org" @@ -13,13 +13,16 @@ optdepends=('ffmpeg: h263 and mpeg4 plugins') options=(!makeflags) source=(http://downloads.sourceforge.net/opalvoip/$pkgname-$pkgver.tar.bz2 - opal-ffmpeg.patch) + opal-ffmpeg.patch opal-ffmpeg3.patch) sha256sums=('f38e7969e88a28dd9a10a6051315aceecde79d0bbd1a35676868dc5787aed706' - '83f60ecf692e004293ce9dbaae7d7eb64d9713d3bfb71a0e7b1a0d1f936794cd') + '83f60ecf692e004293ce9dbaae7d7eb64d9713d3bfb71a0e7b1a0d1f936794cd' + 'e4927c5e703842b25fe94010dd4e0bc4e5e8f5d3d8ce086cf11500c24e2b3bf5') prepare() { cd $pkgname-$pkgver patch -Np1 -i ../opal-ffmpeg.patch +# Fix build with ffmpeg 3.0 (Debian) + patch -p1 -i ../opal-ffmpeg3.patch } build() { Added: opal-ffmpeg3.patch =================================================================== --- opal-ffmpeg3.patch (rev 0) +++ opal-ffmpeg3.patch 2016-02-19 22:19:45 UTC (rev 260008) @@ -0,0 +1,247 @@ +Description: Replace deprecated FFmpeg API +Author: Andreas Cadhalpun <andreas.cadhal...@googlemail.com> +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 PluginCodec<MY_ + m_context->workaround_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 PluginCodec<MY_ + if ((m_picture = FFMPEGLibraryInstance.AvcodecAllocFrame()) == NULL) + return false; + +- if (FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) < 0) ++ if (FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec, NULL) < 0) + return false; + + PTRACE(4, MY_CODEC_LOG, "Opened decoder (SVN $Revision: 28048 $)"); +--- opal-3.10.10~dfsg2.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx ++++ opal-3.10.10~dfsg2/plugins/video/MPEG4-ffmpeg/mpeg4.cxx +@@ -539,7 +539,7 @@ void MPEG4EncoderContext::ResetBitCounte + // + + void MPEG4EncoderContext::SetStaticEncodingParams(){ +- m_avcontext->pix_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 <libavformat/avformat.h> +--- 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)