From 34732ba2087e7fe125c3c19edde8fbc7b9567776 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Fri, 8 Aug 2014 21:13:38 +0200 Subject: [PATCH] opal: bump version and fix build for ZHF --- pkgs/development/libraries/opal/default.nix | 62 +- .../libraries/opal/disable-samples-ftbfs.diff | 14 + pkgs/development/libraries/opal/libav10.patch | 208 +++++++ pkgs/development/libraries/opal/libav9.patch | 543 ++++++++++++++++++ 4 files changed, 787 insertions(+), 40 deletions(-) create mode 100644 pkgs/development/libraries/opal/disable-samples-ftbfs.diff create mode 100644 pkgs/development/libraries/opal/libav10.patch create mode 100644 pkgs/development/libraries/opal/libav9.patch diff --git a/pkgs/development/libraries/opal/default.nix b/pkgs/development/libraries/opal/default.nix index 83f3dcf8b26..ef6dbdfd5ee 100644 --- a/pkgs/development/libraries/opal/default.nix +++ b/pkgs/development/libraries/opal/default.nix @@ -1,53 +1,35 @@ -x@{builderDefsPackage - , doxygen, pkgconfig, ptlib, srtp, libtheora, speex - , ffmpeg, x264, cyrus_sasl, openldap, openssl, expat, unixODBC - , ...}: -builderDefsPackage -(a : -let - helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ - []; +{ stdenv, fetchurl, pkgconfig, ptlib, srtp, libtheora, speex +, ffmpeg, x264, cyrus_sasl, openldap, openssl, expat, unixODBC }: - buildInputs = map (n: builtins.getAttr n x) - (builtins.attrNames (builtins.removeAttrs x helperArgNames)); - sourceInfo = rec { - baseName="opal"; - baseVersion="3.6"; - patchlevel="8"; - version="${baseVersion}.${patchlevel}"; - name="${baseName}-${version}"; - url="mirror://gnome/sources/${baseName}/${baseVersion}/${name}.tar.bz2"; - hash="0359wqmrxqajd94sw3q2dn6n6y3caggavwdcmzyn6maw7srspgwc"; - }; -in -rec { - src = a.fetchurl { - url = sourceInfo.url; - sha256 = sourceInfo.hash; +stdenv.mkDerivation rec { + name = "opal-3.10.10"; + + src = fetchurl { + url = "mirror://gnome/sources/opal/3.10/${name}.tar.xz"; + sha256 = "f208985003461b2743575eccac13ad890b3e5baac35b68ddef17162460aff864"; }; - inherit (sourceInfo) name version; - inherit buildInputs; + buildInputs = [ pkgconfig ptlib srtp libtheora speex + ffmpeg x264 cyrus_sasl openldap openssl expat unixODBC ]; - /* doConfigure should be removed if not needed */ - phaseNames = ["setVars" "doConfigure" "doMakeInstall"]; - configureFlags = [ - "--enable-h323" - ]; - setVars = a.noDepEntry ('' - export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -D__STDC_CONSTANT_MACROS=1" - ''); + configureFlags = [ "--enable-h323" ]; + + enableParallelBuilding = true; + + NIX_CFLAGS = "-D__STDC_CONSTANT_MACROS=1"; + + patches = [ ./disable-samples-ftbfs.diff ./libav9.patch ./libav10.patch ]; - meta = { + meta = with stdenv.lib; { description = "OPAL VoIP library"; - maintainers = [ a.lib.maintainers.raskin ]; - platforms = a.lib.platforms.linux; - broken = true; + maintainers = [ maintainers.raskin ]; + platforms = platforms.linux; }; + passthru = { updateInfo = { downloadPage = "http://ftp.gnome.org/pub/GNOME/sources/opal"; }; }; -}) x +} diff --git a/pkgs/development/libraries/opal/disable-samples-ftbfs.diff b/pkgs/development/libraries/opal/disable-samples-ftbfs.diff new file mode 100644 index 00000000000..1b073821607 --- /dev/null +++ b/pkgs/development/libraries/opal/disable-samples-ftbfs.diff @@ -0,0 +1,14 @@ +Index: opal-3.10.4~dfsg/Makefile.in +=================================================================== +--- opal-3.10.4~dfsg.orig/Makefile.in 2012-02-22 10:08:36.000000000 +1100 ++++ opal-3.10.4~dfsg/Makefile.in 2012-03-08 08:32:44.000000000 +1100 +@@ -45,8 +45,7 @@ + samples/codectest \ + samples/callgen \ + samples/opalecho \ +- samples/faxopal \ +- samples/c_api ++ samples/faxopal + ifeq ($(OPAL_IVR),yes) + SUBDIRS += samples/opalmcu \ + samples/ivropal \ diff --git a/pkgs/development/libraries/opal/libav10.patch b/pkgs/development/libraries/opal/libav10.patch new file mode 100644 index 00000000000..3e02704f899 --- /dev/null +++ b/pkgs/development/libraries/opal/libav10.patch @@ -0,0 +1,208 @@ +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; diff --git a/pkgs/development/libraries/opal/libav9.patch b/pkgs/development/libraries/opal/libav9.patch new file mode 100644 index 00000000000..f91a8c033fe --- /dev/null +++ b/pkgs/development/libraries/opal/libav9.patch @@ -0,0 +1,543 @@ +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".