Package: cloudcompare Version: 2.11.3-5 Followup-For: Bug #1004801 User: ubuntu-de...@lists.ubuntu.com Usertags: origin-ubuntu kinetic ubuntu-patch Control: tags -1 patch
Hi Gürkan, The attached patch fixes the build failure with ffmpeg 5.0. I have uploaded this fix to Ubuntu. Unfortunately there doesn't appear to be an upstream test suite, so I'm not certain whether it works with this change. -- 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 cloudcompare-2.11.3/debian/control cloudcompare-2.11.3/debian/control --- cloudcompare-2.11.3/debian/control 2022-07-19 05:45:18.000000000 -0700 +++ cloudcompare-2.11.3/debian/control 2022-07-21 08:00:54.000000000 -0700 @@ -1,8 +1,7 @@ Source: cloudcompare Section: graphics Priority: optional -Maintainer: Ubuntu Developers <ubuntu-devel-disc...@lists.ubuntu.com> -XSBC-Original-Maintainer: Gürkan Myczko <t...@debian.org> +Maintainer: Gürkan Myczko <t...@debian.org> Build-Depends: debhelper-compat (= 13), cmake, libqt5opengl5-dev, libcgal-dev, libdxflib-dev (>= 2.5.0), libglew-dev, libfreenect-dev, libgdal-dev, libgomp1, libboost-all-dev, libavcodec-dev, libavformat-dev, libswscale-dev, libeigen3-dev, libjsoncpp-dev, libcurl4-gnutls-dev | libcurl4-openssl-dev, libcgal-qt5-dev, libqt5svg5-dev, qttools5-dev-tools, qttools5-dev diff -Nru cloudcompare-2.11.3/debian/patches/ffmpeg-5.0.patch cloudcompare-2.11.3/debian/patches/ffmpeg-5.0.patch --- cloudcompare-2.11.3/debian/patches/ffmpeg-5.0.patch 1969-12-31 16:00:00.000000000 -0800 +++ cloudcompare-2.11.3/debian/patches/ffmpeg-5.0.patch 2022-07-21 07:59:38.000000000 -0700 @@ -0,0 +1,144 @@ +Description: compatibility with ffmpeg 5.0. +Author: Steve Langasek <steve.langa...@ubuntu.com> +Bug-Debian: https://bugs.debian.org/1004801 +Last-Update: 2022-07-21 +Forwarded: no + +Index: cloudcompare-2.11.3/plugins/core/Standard/qAnimation/src/QTFFmpegWrapper/QVideoEncoder.cpp +=================================================================== +--- cloudcompare-2.11.3.orig/plugins/core/Standard/qAnimation/src/QTFFmpegWrapper/QVideoEncoder.cpp ++++ cloudcompare-2.11.3/plugins/core/Standard/qAnimation/src/QTFFmpegWrapper/QVideoEncoder.cpp +@@ -116,9 +116,6 @@ + return false; + } + +- //Initialize libavcodec, and register all codecs and formats +- av_register_all(); +- + // find the output format + avformat_alloc_output_context2(&m_ff->formatContext, NULL, NULL, qPrintable(m_filename)); + if (!m_ff->formatContext) +@@ -139,7 +136,7 @@ + AVCodecID codec_id = m_ff->formatContext->oformat->video_codec; + //codec_id = AV_CODEC_ID_MPEG1VIDEO; + //codec_id = AV_CODEC_ID_H264; +- AVCodec *pCodec = avcodec_find_encoder(codec_id); ++ const AVCodec *pCodec = avcodec_find_encoder(codec_id); + if (!pCodec) + { + if (errorString) +@@ -191,7 +188,9 @@ + return false; + } + m_ff->videoStream->id = m_ff->formatContext->nb_streams-1; +- m_ff->videoStream->codec = m_ff->codecContext; ++ m_ff->videoStream->codecpar = avcodec_parameters_alloc(); ++ avcodec_parameters_from_context(m_ff->videoStream->codecpar, ++ m_ff->codecContext); + m_ff->videoStream->time_base.num = 1; + m_ff->videoStream->time_base.den = m_fps; + +@@ -269,31 +268,28 @@ + memset( &pkt, 0, sizeof( AVPacket ) ); + av_init_packet(&pkt); + +- int got_packet = 0; +- int ret = avcodec_encode_video2(m_ff->codecContext, &pkt, 0, &got_packet); +- if (ret < 0 || !got_packet) +- { +- break; ++ while (avcodec_receive_packet(m_ff->codecContext, &pkt) > 0) { ++ write_frame(m_ff, &pkt); + } + +- write_frame(m_ff, &pkt); +- + av_packet_unref(&pkt); + } + + av_write_trailer(m_ff->formatContext); + + // close the codec +- avcodec_close(m_ff->videoStream->codec); ++ avcodec_free_context(&m_ff->codecContext); + + // free the streams and other data + freeFrame(); + for(unsigned i = 0; i < m_ff->formatContext->nb_streams; i++) + { +- av_freep(&m_ff->formatContext->streams[i]->codec); ++ avcodec_parameters_free(&m_ff->formatContext->streams[i]->codecpar); + av_freep(&m_ff->formatContext->streams[i]); + } + ++ avcodec_parameters_free(&m_ff->videoStream->codecpar); ++ + // close the file + avio_close(m_ff->formatContext->pb); + +@@ -325,39 +321,46 @@ + av_init_packet(&pkt); + + // encode the image +- int got_packet = 0; +- { +- //compute correct timestamp based on the input frame index +- //int timestamp = ((m_ff->codecContext->time_base.num * 90000) / m_ff->codecContext->time_base.den) * frameIndex; +- m_ff->frame->pts = frameIndex/*timestamp*/; ++ char errorStr[AV_ERROR_MAX_STRING_SIZE] = {0}; ++ //compute correct timestamp based on the input frame index ++ //int timestamp = ((m_ff->codecContext->time_base.num * 90000) / m_ff->codecContext->time_base.den) * frameIndex; ++ m_ff->frame->pts = frameIndex/*timestamp*/; ++ ++ int retcode = true; ++ int ret = avcodec_send_frame(m_ff->codecContext, m_ff->frame); ++ if (ret < 0) { ++ av_make_error_string(errorStr, AV_ERROR_MAX_STRING_SIZE, ret); ++ if (errorString) ++ *errorString = QString("Error sending a frame for encoding: %1").arg(errorStr); ++ av_packet_unref(&pkt); ++ return false; ++ } + +- int ret = avcodec_encode_video2(m_ff->codecContext, &pkt, m_ff->frame, &got_packet); +- if (ret < 0) +- { +- char errorStr[AV_ERROR_MAX_STRING_SIZE] = {0}; ++ while (ret >= 0) { ++ ret = avcodec_receive_packet(m_ff->codecContext, &pkt); ++ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) ++ break; ++ else if (ret < 0) { + av_make_error_string(errorStr, AV_ERROR_MAX_STRING_SIZE, ret); + if (errorString) + *errorString = QString("Error encoding video frame: %1").arg(errorStr); +- return false; ++ retcode = false; ++ break; + } +- } +- +- if (got_packet) +- { +- int ret = write_frame(m_ff, &pkt); ++ ret = write_frame(m_ff, &pkt); + if (ret < 0) + { +- char errorStr[AV_ERROR_MAX_STRING_SIZE] = {0}; + av_make_error_string(errorStr, AV_ERROR_MAX_STRING_SIZE, ret); + if (errorString) + *errorString = QString("Error while writing video frame: %1").arg(errorStr); +- return false; ++ retcode = false; ++ break; + } + } + + av_packet_unref(&pkt); +- +- return true; ++ ++ return retcode; + } + + bool QVideoEncoder::convertImage_sws(const QImage &image, QString* errorString/*=0*/) diff -Nru cloudcompare-2.11.3/debian/patches/series cloudcompare-2.11.3/debian/patches/series --- cloudcompare-2.11.3/debian/patches/series 2021-11-17 03:08:34.000000000 -0800 +++ cloudcompare-2.11.3/debian/patches/series 2022-07-21 06:18:05.000000000 -0700 @@ -1,2 +1,3 @@ grr 0-stdlib.h +ffmpeg-5.0.patch