patch from: http://www.linuxfromscratch.org/blfs/view/svn/multimedia/opal.html Submitted By: Igor Živković Date: 2013-10-08 Initial Package Version: 3.10.10 Upstream Status: Unknown Origin: Gentoo Description: Fixes building against FFmpeg version >= 2.0.0 diff -Naur opal-3.10.10.orig/plugins/video/common/dyna.cxx opal-3.10.10/plugins/video/common/dyna.cxx --- opal-3.10.10.orig/plugins/video/common/dyna.cxx 2013-02-20 03:18:05.000000000 +0100 +++ plugins/video/common/dyna.cxx 2013-10-08 12:57:25.058873513 +0200 @@ -210,7 +210,7 @@ #endif -FFMPEGLibrary::FFMPEGLibrary(CodecID codec) +FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec) { m_codec = codec; if (m_codec==CODEC_ID_H264) @@ -348,12 +348,12 @@ 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 -Naur opal-3.10.10.orig/plugins/video/common/dyna.h opal-3.10.10/plugins/video/common/dyna.h --- opal-3.10.10.orig/plugins/video/common/dyna.h 2013-02-20 03:18:05.000000000 +0100 +++ plugins/video/common/dyna.h 2013-10-08 12:57:25.058873513 +0200 @@ -88,13 +88,13 @@ 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 @@ 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 -Naur opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h opal-3.10.10/plugins/video/common/ffmpeg/libavcodec/avcodec.h --- opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-02-20 03:18:04.000000000 +0100 +++ plugins/video/common/ffmpeg/libavcodec/avcodec.h 2013-10-08 12:57:25.060873488 +0200 @@ -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 @@ 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 @@ */ 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 @@ * * See CODEC_ID_xxx */ - enum CodecID id; + enum AVCodecID id; /** * Supported pixel format. @@ -3402,10 +3402,10 @@ /** * 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 @@ /** * 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 @@ * @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 -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx opal-3.10.10/plugins/video/H.263-1998/h263-1998.cxx --- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx 2013-02-20 03:18:03.000000000 +0100 +++ plugins/video/H.263-1998/h263-1998.cxx 2013-10-08 12:57:25.061873475 +0200 @@ -48,6 +48,10 @@ #endif #include "h263-1998.h" +extern "C" +{ +#include +} #include #include #include @@ -203,7 +207,7 @@ 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"); @@ -317,9 +321,9 @@ // Level 2+ // works with eyeBeam, signaled via non-standard "D" if (atoi(value) == 1) - m_context->flags |= CODEC_FLAG_H263P_UMV; + av_opt_set_int(m_context->priv_data, "umv", 1, 0); else - m_context->flags &= ~CODEC_FLAG_H263P_UMV; + av_opt_set_int(m_context->priv_data, "umv", 0, 0); return; } @@ -328,9 +332,9 @@ // Annex F: Advanced Prediction Mode // does not work with eyeBeam if (atoi(value) == 1) - m_context->flags |= CODEC_FLAG_OBMC; + av_opt_set_int(m_context->priv_data, "obmc", 1, 0); else - m_context->flags &= ~CODEC_FLAG_OBMC; + av_opt_set_int(m_context->priv_data, "obmc", 0, 0); return; } #endif @@ -360,9 +364,9 @@ // Annex K: Slice Structure // does not work with eyeBeam if (atoi(value) != 0) - m_context->flags |= CODEC_FLAG_H263P_SLICE_STRUCT; + av_opt_set_int(m_context->priv_data, "structured_slices", 1, 0); else - m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; + av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0); return; } @@ -370,9 +374,9 @@ // Annex S: Alternative INTER VLC mode // does not work with eyeBeam if (atoi(value) == 1) - m_context->flags |= CODEC_FLAG_H263P_AIV; + av_opt_set_int(m_context->priv_data, "aiv", 1, 0); else - m_context->flags &= ~CODEC_FLAG_H263P_AIV; + av_opt_set_int(m_context->priv_data, "aiv", 0, 0); return; } @@ -450,15 +454,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 +516,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 +598,13 @@ m_context->rtp_callback = &H263_RFC2190_EncoderContext::RTPCallBack; m_context->opaque = this; // used to separate out packets from different encode threads - m_context->flags &= ~CODEC_FLAG_H263P_UMV; + av_opt_set_int(m_context->priv_data, "umv", 0, 0); m_context->flags &= ~CODEC_FLAG_4MV; #if LIBAVCODEC_RTP_MODE m_context->flags &= ~CODEC_FLAG_H263P_AIC; #endif - m_context->flags &= ~CODEC_FLAG_H263P_AIV; - m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; + av_opt_set_int(m_context->priv_data, "aiv", 0, 0); + av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0); return true; } diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h opal-3.10.10/plugins/video/H.263-1998/h263-1998.h --- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h 2013-02-20 03:18:03.000000000 +0100 +++ plugins/video/H.263-1998/h263-1998.h 2013-10-08 12:57:25.062873463 +0200 @@ -115,7 +115,7 @@ 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 -Naur opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in opal-3.10.10/plugins/video/H.263-1998/Makefile.in --- opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in 2013-02-20 03:18:03.000000000 +0100 +++ plugins/video/H.263-1998/Makefile.in 2013-10-08 12:57:25.062873463 +0200 @@ -35,7 +35,7 @@ $(COMMONDIR)/dyna.cxx CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR) -LIBS += @DL_LIBS@ +LIBS += @DL_LIBS@ @LIBAVUTIL_LIBS@ HAVE_LIBAVCODEC_RTP_MODE=@HAVE_LIBAVCODEC_RTP_MODE@ ifeq ($(HAVE_LIBAVCODEC_RTP_MODE),yes) diff -Naur opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx opal-3.10.10/plugins/video/H.264/gpl/h264_helper.cxx --- opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx 2013-02-20 03:18:02.000000000 +0100 +++ plugins/video/H.264/gpl/h264_helper.cxx 2013-10-08 12:57:25.062873463 +0200 @@ -27,6 +27,7 @@ #include #include #include +#include #ifdef HAVE_UNISTD_H #include diff -Naur opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx opal-3.10.10/plugins/video/H.264/h264-x264.cxx --- opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx 2013-02-20 03:18:02.000000000 +0100 +++ plugins/video/H.264/h264-x264.cxx 2013-10-08 12:57:25.063873450 +0200 @@ -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" @@ -1071,13 +1074,10 @@ 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 | - CODEC_FLAG2_DROP_FRAME_TIMECODE | + m_context->flags2 = CODEC_FLAG2_DROP_FRAME_TIMECODE | CODEC_FLAG2_SKIP_RD | CODEC_FLAG2_CHUNKS; diff -Naur opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx opal-3.10.10/plugins/video/H.264/shared/x264wrap.cxx --- opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx 2013-02-20 03:18:02.000000000 +0100 +++ plugins/video/H.264/shared/x264wrap.cxx 2013-10-08 12:57:25.064873438 +0200 @@ -33,6 +33,7 @@ #include #include +#include #ifdef HAVE_UNISTD_H #include diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in opal-3.10.10/plugins/video/MPEG4-ffmpeg/Makefile.in --- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in 2013-02-20 03:18:07.000000000 +0100 +++ plugins/video/MPEG4-ffmpeg/Makefile.in 2013-10-08 12:57:25.064873438 +0200 @@ -31,7 +31,7 @@ SRCS := mpeg4.cxx $(COMMONDIR)/dyna.cxx CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR) -LIBS += @DL_LIBS@ +LIBS += @DL_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". diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx opal-3.10.10/plugins/video/MPEG4-ffmpeg/mpeg4.cxx --- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2013-02-20 03:18:07.000000000 +0100 +++ plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2013-10-08 12:57:25.065873425 +0200 @@ -103,6 +103,7 @@ #else /* LIBAVCODEC_HAVE_SOURCE_DIR */ #include "../common/ffmpeg.h" +#include #endif /* LIBAVCODEC_HAVE_SOURCE_DIR */ } @@ -589,17 +590,17 @@ m_avpicture->quality = m_videoQMin; #ifdef USE_ORIG - m_avcontext->flags |= CODEC_FLAG_PART; // data partitioning + av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0); 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; + av_opt_set_int(m_avcontext->priv_data, "umv", 1, 0); /*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; + av_opt_set_int(m_avcontext->priv_data, "structured_slices", 1, 0); #endif m_avcontext->opaque = this; // for use in RTP callback } @@ -804,7 +805,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 +1326,7 @@ void MPEG4DecoderContext::SetStaticDecodingParams() { m_avcontext->flags |= CODEC_FLAG_4MV; - m_avcontext->flags |= CODEC_FLAG_PART; + av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0); m_avcontext->workaround_bugs = 0; // no workaround for buggy implementations }