$OpenBSD: patch-libmedia_ffmpeg_VideoDecoderFfmpeg_cpp,v 1.1 2013/03/08 00:58:26 brad Exp $ Update for newer FFmpeg API. --- libmedia/ffmpeg/VideoDecoderFfmpeg.cpp.orig Thu Jan 19 14:17:49 2012 +++ libmedia/ffmpeg/VideoDecoderFfmpeg.cpp Mon Feb 18 12:06:22 2013 @@ -171,7 +171,10 @@ VideoDecoderFfmpeg::init(enum CodecID codecId, int /*w boost::uint8_t* extradata, int extradataSize) { // Init the avdecoder-decoder +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52,6,2) + // Starting from this version avcodec_register calls avcodec_init avcodec_init(); +#endif avcodec_register_all();// change this to only register need codec? _videoCodec = avcodec_find_decoder(codecId); @@ -180,7 +183,11 @@ VideoDecoderFfmpeg::init(enum CodecID codecId, int /*w throw MediaException(_("libavcodec can't decode this video format")); } +#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0) + _videoCodecCtx.reset(new CodecContextWrapper(avcodec_alloc_context3(_videoCodec))); +#else _videoCodecCtx.reset(new CodecContextWrapper(avcodec_alloc_context())); +#endif if (!_videoCodecCtx->getContext()) { throw MediaException(_("libavcodec couldn't allocate context")); } @@ -203,7 +210,11 @@ VideoDecoderFfmpeg::init(enum CodecID codecId, int /*w } #endif +#if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0) + int ret = avcodec_open2(ctx, _videoCodec, NULL); +#else int ret = avcodec_open(ctx, _videoCodec); +#endif if (ret < 0) { boost::format msg = boost::format(_("libavcodec " "failed to initialize FFMPEG " @@ -529,7 +540,11 @@ get_buffer(AVCodecContext* avctx, AVFrame* pic) static unsigned int pic_num = 0; pic->type = FF_BUFFER_TYPE_USER; +#if LIBAVCODEC_VERSION_MAJOR < 54 + // This field has been unused for longer but has been removed with + // libavcodec 54. pic->age = ++pic_num - surface->getPicNum(); +#endif surface->setPicNum(pic_num); return 0; #endif