Package: bino Version: 1.6.0-1 Severity: important Tags: patch User: [email protected] Usertags: ffmpeg2.9
Dear Maintainer, your package fails to build with the upcoming ffmpeg 2.9. This bug will become release-critical at some point when the ffmpeg2.9 transition gets closer. Attached is a patch replacing the deprecated functionality. It also works with ffmpeg 2.8. Please apply this patch and forward it upstream, if necessary. These changes have little regression potential. Best regards, Andreas
diff --git a/debian/patches/ffmpeg_2.9.patch b/debian/patches/ffmpeg_2.9.patch new file mode 100644 index 0000000..6468ee5 --- /dev/null +++ b/debian/patches/ffmpeg_2.9.patch @@ -0,0 +1,130 @@ +Description: Replace deprecated FFmpeg API +Author: Andreas Cadhalpun <[email protected]> +Last-Update: <2015-11-02> + +--- bino-1.6.0.orig/src/media_object.cpp ++++ bino-1.6.0/src/media_object.cpp +@@ -427,20 +427,20 @@ void media_object::set_video_frame_templ + video_frame_template.value_range = video_frame::u8_full; + video_frame_template.chroma_location = video_frame::center; + if (!_always_convert_to_bgra32 +- && (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P10)) ++ && (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P10)) + { +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10) + { + video_frame_template.layout = video_frame::yuv444p; + } +- else if (video_codec_ctx->pix_fmt == PIX_FMT_YUV422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10) ++ else if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10) + { + video_frame_template.layout = video_frame::yuv422p; + } +@@ -453,9 +453,9 @@ void media_object::set_video_frame_templ + { + video_frame_template.color_space = video_frame::yuv709; + } +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P10) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P10) + { + video_frame_template.value_range = video_frame::u10_mpeg; + if (video_codec_ctx->color_range == AVCOL_RANGE_JPEG) +@@ -482,15 +482,15 @@ void media_object::set_video_frame_templ + } + } + else if (!_always_convert_to_bgra32 +- && (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUVJ422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUVJ420P)) ++ && (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ420P)) + { +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ444P) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ444P) + { + video_frame_template.layout = video_frame::yuv444p; + } +- else if (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ422P) ++ else if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ422P) + { + video_frame_template.layout = video_frame::yuv422p; + } +@@ -898,15 +898,6 @@ void media_object::open(const std::strin + // Activate multithreaded decoding. This must be done before opening the codec; see + // http://lists.gnu.org/archive/html/bino-list/2011-08/msg00019.html + codec_ctx->thread_count = video_decoding_threads(); +- // Set CODEC_FLAG_EMU_EDGE in the same situations in which ffplay sets it. +- // I don't know what exactly this does, but it is necessary to fix the problem +- // described in this thread: http://lists.nongnu.org/archive/html/bino-list/2012-02/msg00039.html +- int lowres = 0; +-#ifdef FF_API_LOWRES +- lowres = codec_ctx->lowres; +-#endif +- if (lowres || (codec && (codec->capabilities & CODEC_CAP_DR1))) +- codec_ctx->flags |= CODEC_FLAG_EMU_EDGE; + } + // Find and open the codec. AV_CODEC_ID_TEXT is a special case: it has no decoder since it is unencoded raw data. + if (codec_ctx->codec_id != AV_CODEC_ID_TEXT && (!codec || (e = avcodec_open2(codec_ctx, codec, NULL)) < 0)) +@@ -944,8 +935,8 @@ void media_object::open(const std::strin + _ffmpeg->video_frames.push_back(av_frame_alloc()); + _ffmpeg->video_buffered_frames.push_back(av_frame_alloc()); + #endif +- enum PixelFormat frame_fmt = (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32 +- ? PIX_FMT_BGRA : _ffmpeg->video_codec_ctxs[j]->pix_fmt); ++ enum AVPixelFormat frame_fmt = (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32 ++ ? AV_PIX_FMT_BGRA : _ffmpeg->video_codec_ctxs[j]->pix_fmt); + int frame_bufsize = (avpicture_get_size(frame_fmt, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height)); + _ffmpeg->video_buffers.push_back(static_cast<uint8_t *>(av_malloc(frame_bufsize))); +@@ -958,7 +949,7 @@ void media_object::open(const std::strin + if (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32) + { + // Initialize things needed for software pixel format conversion +- int sws_bufsize = avpicture_get_size(PIX_FMT_BGRA, ++ int sws_bufsize = avpicture_get_size(AV_PIX_FMT_BGRA, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); + #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1) + _ffmpeg->video_sws_frames.push_back(avcodec_alloc_frame()); +@@ -971,11 +962,11 @@ void media_object::open(const std::strin + throw exc(HERE + ": " + strerror(ENOMEM)); + } + avpicture_fill(reinterpret_cast<AVPicture *>(_ffmpeg->video_sws_frames[j]), _ffmpeg->video_sws_buffers[j], +- PIX_FMT_BGRA, _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); ++ AV_PIX_FMT_BGRA, _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); + // Call sws_getCachedContext(NULL, ...) instead of sws_getContext(...) just to avoid a deprecation warning. + _ffmpeg->video_sws_ctxs.push_back(sws_getCachedContext(NULL, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, _ffmpeg->video_codec_ctxs[j]->pix_fmt, +- _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, PIX_FMT_BGRA, ++ _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, AV_PIX_FMT_BGRA, + SWS_POINT, NULL, NULL, NULL)); + if (!_ffmpeg->video_sws_ctxs[j]) + { +@@ -1529,7 +1520,7 @@ read_frame: + // We need to buffer the data because FFmpeg will clubber it when decoding the next frame. + av_picture_copy(reinterpret_cast<AVPicture *>(_ffmpeg->video_buffered_frames[_video_stream]), + reinterpret_cast<AVPicture *>(_ffmpeg->video_frames[_video_stream]), +- static_cast<enum PixelFormat>(_ffmpeg->video_codec_ctxs[_video_stream]->pix_fmt), ++ static_cast<enum AVPixelFormat>(_ffmpeg->video_codec_ctxs[_video_stream]->pix_fmt), + _ffmpeg->video_codec_ctxs[_video_stream]->width, + _ffmpeg->video_codec_ctxs[_video_stream]->height); + src_frame = _ffmpeg->video_buffered_frames[_video_stream]; diff --git a/debian/patches/series b/debian/patches/series index e45f696..65b6a15 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ fix-info-image-path.patch +ffmpeg_2.9.patch

