Package: casparcg-server Version: 2.2.0+dfsg-2.1 Severity: serious Tags: patch Justification: FTBFS User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu kinetic ubuntu-patch
Hi Petter, casparcg-server fails to build against ffmpeg 5.0 which is now in unstable. The attached patch fixes the API incompatibilities. Other fixes are needed to get casparcg-server building in general; I believe there are bugs open for these other issues. -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. Ubuntu Developer https://www.debian.org/ slanga...@ubuntu.com vor...@debian.org
diff -Nru casparcg-server-2.2.0+dfsg/debian/control casparcg-server-2.2.0+dfsg/debian/control --- casparcg-server-2.2.0+dfsg/debian/control 2022-03-09 03:13:39.000000000 -0800 +++ casparcg-server-2.2.0+dfsg/debian/control 2022-07-20 21:42:59.000000000 -0700 @@ -1,6 +1,5 @@ Source: casparcg-server -Maintainer: Ubuntu Developers <ubuntu-devel-disc...@lists.ubuntu.com> -XSBC-Original-Maintainer: Petter Reinholdtsen <p...@debian.org> +Maintainer: Petter Reinholdtsen <p...@debian.org> Section: contrib/video Priority: optional Standards-Version: 4.3.0 diff -Nru casparcg-server-2.2.0+dfsg/debian/patches/ffmpeg-5.0.patch casparcg-server-2.2.0+dfsg/debian/patches/ffmpeg-5.0.patch --- casparcg-server-2.2.0+dfsg/debian/patches/ffmpeg-5.0.patch 1969-12-31 16:00:00.000000000 -0800 +++ casparcg-server-2.2.0+dfsg/debian/patches/ffmpeg-5.0.patch 2022-07-20 21:42:59.000000000 -0700 @@ -0,0 +1,182 @@ +Description: Compatibility with ffmpeg 5.0. +Author: Steve Langasek <steve.langa...@ubuntu.com> +Last-Update: 2022-07-20 +Forwarded: no + +Index: casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/producer/av_producer.cpp +=================================================================== +--- casparcg-server-2.2.0+dfsg.orig/src/modules/ffmpeg/producer/av_producer.cpp ++++ casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/producer/av_producer.cpp +@@ -38,6 +38,7 @@ + #include <libavfilter/buffersrc.h> + #include <libavformat/avformat.h> + #include <libavutil/avutil.h> ++#include <libavutil/channel_layout.h> + #include <libavutil/error.h> + #include <libavutil/opt.h> + #include <libavutil/pixfmt.h> +Index: casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/util/av_util.cpp +=================================================================== +--- casparcg-server-2.2.0+dfsg.orig/src/modules/ffmpeg/util/av_util.cpp ++++ casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/util/av_util.cpp +@@ -9,7 +9,9 @@ + extern "C" { + #include <libavcodec/avcodec.h> + #include <libavfilter/avfilter.h> ++#include <libavutil/channel_layout.h> + #include <libavutil/frame.h> ++#include <libavutil/imgutils.h> + #include <libavutil/pixfmt.h> + } + #if defined(_MSC_VER) +@@ -113,46 +115,52 @@ + core::pixel_format_desc pixel_format_desc(AVPixelFormat pix_fmt, int width, int height) + { + // Get linesizes +- AVPicture dummy_pict; +- avpicture_fill(&dummy_pict, nullptr, pix_fmt, width, height); ++ uint8_t *pointers[4]; ++ int linesize[4]; ++ av_image_alloc(pointers, linesize, width, height, pix_fmt, 8); + + core::pixel_format_desc desc = get_pixel_format(pix_fmt); + + switch (desc.format) { + case core::pixel_format::gray: + case core::pixel_format::luma: { +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[0], height, 1)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[0], height, 1)); ++ av_freep(&pointers[0]); + return desc; + } + case core::pixel_format::bgr: + case core::pixel_format::rgb: { +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[0] / 3, height, 3)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[0] / 3, height, 3)); ++ av_freep(&pointers[0]); + return desc; + } + case core::pixel_format::bgra: + case core::pixel_format::argb: + case core::pixel_format::rgba: + case core::pixel_format::abgr: { +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[0] / 4, height, 4)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[0] / 4, height, 4)); ++ av_freep(&pointers[0]); + return desc; + } + case core::pixel_format::ycbcr: + case core::pixel_format::ycbcra: { + // Find chroma height +- auto size2 = static_cast<int>(dummy_pict.data[2] - dummy_pict.data[1]); +- auto h2 = size2 / dummy_pict.linesize[1]; ++ auto size2 = static_cast<int>(pointers[2] - pointers[1]); ++ auto h2 = size2 / linesize[1]; + +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[0], height, 1)); +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[1], h2, 1)); +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[2], h2, 1)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[0], height, 1)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[1], h2, 1)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[2], h2, 1)); + + if (desc.format == core::pixel_format::ycbcra) +- desc.planes.push_back(core::pixel_format_desc::plane(dummy_pict.linesize[3], height, 1)); ++ desc.planes.push_back(core::pixel_format_desc::plane(linesize[3], height, 1)); + ++ av_freep(&pointers[0]); + return desc; + } + default: + desc.format = core::pixel_format::invalid; ++ av_freep(&pointers[0]); + return desc; + } + } +Index: casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/ffmpeg.cpp +=================================================================== +--- casparcg-server-2.2.0+dfsg.orig/src/modules/ffmpeg/ffmpeg.cpp ++++ casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/ffmpeg.cpp +@@ -52,37 +52,6 @@ + } + + namespace caspar { namespace ffmpeg { +-int ffmpeg_lock_callback(void** mutex, enum AVLockOp op) +-{ +- if (!mutex) +- return 0; +- +- auto my_mutex = reinterpret_cast<std::recursive_mutex*>(*mutex); +- +- switch (op) { +- case AV_LOCK_CREATE: { +- *mutex = new std::recursive_mutex(); +- break; +- } +- case AV_LOCK_OBTAIN: { +- if (my_mutex) +- my_mutex->lock(); +- break; +- } +- case AV_LOCK_RELEASE: { +- if (my_mutex) +- my_mutex->unlock(); +- break; +- } +- case AV_LOCK_DESTROY: { +- delete my_mutex; +- *mutex = nullptr; +- break; +- } +- } +- return 0; +-} +- + static void sanitize(uint8_t* line) + { + while (*line) { +@@ -141,13 +110,9 @@ + + void init(core::module_dependencies dependencies) + { +- av_lockmgr_register(ffmpeg_lock_callback); + av_log_set_callback(log_for_thread); + +- avfilter_register_all(); +- av_register_all(); + avformat_network_init(); +- avcodec_register_all(); + avdevice_register_all(); + + dependencies.consumer_registry->register_consumer_factory(L"FFmpeg Consumer", create_consumer); +@@ -160,6 +125,5 @@ + { + // avfilter_uninit(); + avformat_network_deinit(); +- av_lockmgr_register(nullptr); + } + }} // namespace caspar::ffmpeg +Index: casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/consumer/ffmpeg_consumer.cpp +=================================================================== +--- casparcg-server-2.2.0+dfsg.orig/src/modules/ffmpeg/consumer/ffmpeg_consumer.cpp ++++ casparcg-server-2.2.0+dfsg/src/modules/ffmpeg/consumer/ffmpeg_consumer.cpp +@@ -58,6 +58,7 @@ + #include <libavfilter/buffersink.h> + #include <libavfilter/buffersrc.h> + #include <libavformat/avformat.h> ++#include <libavutil/channel_layout.h> + #include <libavutil/opt.h> + #include <libavutil/pixfmt.h> + #include <libavutil/samplefmt.h> +Index: casparcg-server-2.2.0+dfsg/src/modules/decklink/producer/decklink_producer.cpp +=================================================================== +--- casparcg-server-2.2.0+dfsg.orig/src/modules/decklink/producer/decklink_producer.cpp ++++ casparcg-server-2.2.0+dfsg/src/modules/decklink/producer/decklink_producer.cpp +@@ -63,6 +63,7 @@ + #include <libavfilter/buffersink.h> + #include <libavfilter/buffersrc.h> + #include <libavformat/avformat.h> ++#include <libavutil/channel_layout.h> + #include <libavutil/opt.h> + #include <libavutil/pixfmt.h> + #include <libavutil/samplefmt.h> diff -Nru casparcg-server-2.2.0+dfsg/debian/patches/series casparcg-server-2.2.0+dfsg/debian/patches/series --- casparcg-server-2.2.0+dfsg/debian/patches/series 2021-11-20 13:05:06.000000000 -0800 +++ casparcg-server-2.2.0+dfsg/debian/patches/series 2022-07-20 21:39:55.000000000 -0700 @@ -1,1 +1,2 @@ cmake-ftbfs.patch +ffmpeg-5.0.patch