Date: Monday, February 14, 2022 @ 11:44:52 Author: arojas Revision: 1133127
FFmpeg 5 rebuild Added: vtk/trunk/ffmpeg5.patch Modified: vtk/trunk/PKGBUILD ---------------+ PKGBUILD | 10 ++- ffmpeg5.patch | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2022-02-14 11:29:37 UTC (rev 1133126) +++ PKGBUILD 2022-02-14 11:44:52 UTC (rev 1133127) @@ -7,7 +7,7 @@ pkgname=vtk pkgver=9.1.0 -pkgrel=9 +pkgrel=10 pkgdesc="Software system for 3D computer graphics, image processing, and visualization" arch=(x86_64) url="https://www.vtk.org/" @@ -55,10 +55,12 @@ sqlite unixodbc) source=(${url}/files/release/${pkgver%.*}/VTK-${pkgver}.tar.gz - vtk-tbb-2021.patch::https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/2509.patch) + vtk-tbb-2021.patch::https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/2509.patch + ffmpeg5.patch) options=(staticlibs) sha256sums=('8fed42f4f8f1eb8083107b68eaa9ad71da07110161a3116ad807f43e5ca5ce96' - '37cff664c4eaacf44ecb995e62e9e54e54880bae0857d598c74660a2159ccb2e') + '37cff664c4eaacf44ecb995e62e9e54e54880bae0857d598c74660a2159ccb2e' + '066ad5eb3f7cd101c4bbbe4d91ba97419f18537f9dadf6654776b7151c7c6a8d') prepare() { cd VTK-${pkgver} @@ -68,6 +70,8 @@ sed -i "s|8.1.0|8.0.1|" ThirdParty/fmt/CMakeLists.txt # Fix build with TBB 2021 patch -d ThirdParty/vtkm/vtkvtkm/vtk-m -p1 -i "$srcdir"/vtk-tbb-2021.patch + # Fix build with FFmpeg 5 https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8863 + patch -p1 -i "$srcdir"/ffmpeg5.patch } build() { Added: ffmpeg5.patch =================================================================== --- ffmpeg5.patch (rev 0) +++ ffmpeg5.patch 2022-02-14 11:44:52 UTC (rev 1133127) @@ -0,0 +1,158 @@ +From bad8f3e9d0aad03e8f2aff9524cb3c5f2d10ccaf Mon Sep 17 00:00:00 2001 +From: Ben Boeckel <[email protected]> +Date: Fri, 28 Jan 2022 10:44:28 -0500 +Subject: [PATCH] IO/FFMPEG: support FFmpeg 5.0 API changes + +Fixes: #18445 +--- + Documentation/release/dev/ffmpeg-5.0.md | 3 +++ + IO/FFMPEG/CMakeLists.txt | 18 +++++++++++++++-- + IO/FFMPEG/vtkFFMPEGVideoSource.cxx | 4 ++-- + IO/FFMPEG/vtkFFMPEGWriter.cxx | 27 +++++++++++++------------ + 4 files changed, 35 insertions(+), 17 deletions(-) + create mode 100644 Documentation/release/dev/ffmpeg-5.0.md + +diff --git a/Documentation/release/dev/ffmpeg-5.0.md b/Documentation/release/dev/ffmpeg-5.0.md +new file mode 100644 +index 00000000000..02ebd3ff840 +--- /dev/null ++++ b/Documentation/release/dev/ffmpeg-5.0.md +@@ -0,0 +1,3 @@ ++## FFmpeg 5.0 support ++ ++FFmpeg 5.0 API changes are now supported. +diff --git a/IO/FFMPEG/CMakeLists.txt b/IO/FFMPEG/CMakeLists.txt +index f6900843ac0..ed43978cfc6 100644 +--- a/IO/FFMPEG/CMakeLists.txt ++++ b/IO/FFMPEG/CMakeLists.txt +@@ -6,7 +6,9 @@ vtk_module_find_package( + avformat + avcodec + avutil +- swscale) ++ swscale ++ OPTIONAL_COMPONENTS ++ swresample) + + set(classes + vtkFFMPEGWriter) +@@ -21,6 +23,17 @@ if (NOT FFMPEG_VERSION VERSION_LESS "3.1") + vtkFFMPEGVideoSource) + endif () + ++set(ffmpeg_libraries) ++if (NOT FFMPEG_VERSION VERSION_LESS "5.0") ++ if (NOT FFMPEG_swresample_FOUND) ++ message(FATAL_ERROR ++ "FFMPEG 5.0 requires the `swresample` library.") ++ endif () ++ ++ list(APPEND ffmpeg_libraries ++ FFMPEG::swresample) ++endif () ++ + vtk_module_add_module(VTK::IOFFMPEG + CLASSES ${classes}) + vtk_module_link(VTK::IOFFMPEG +@@ -28,4 +41,5 @@ vtk_module_link(VTK::IOFFMPEG + FFMPEG::avformat + FFMPEG::avcodec + FFMPEG::avutil +- FFMPEG::swscale) ++ FFMPEG::swscale ++ ${ffmpeg_libraries}) +diff --git a/IO/FFMPEG/vtkFFMPEGVideoSource.cxx b/IO/FFMPEG/vtkFFMPEGVideoSource.cxx +index 45900ee02bc..f3169d3545d 100644 +--- a/IO/FFMPEG/vtkFFMPEGVideoSource.cxx ++++ b/IO/FFMPEG/vtkFFMPEGVideoSource.cxx +@@ -205,7 +205,7 @@ void vtkFFMPEGVideoSource::Initialize() + + this->Internal->VideoStream = fcontext->streams[this->Internal->VideoStreamIndex]; + +- AVCodec* dec = avcodec_find_decoder(this->Internal->VideoStream->codecpar->codec_id); ++ const AVCodec* dec = avcodec_find_decoder(this->Internal->VideoStream->codecpar->codec_id); + if (!dec) + { + vtkErrorMacro("Failed to find codec for video"); +@@ -271,7 +271,7 @@ void vtkFFMPEGVideoSource::Initialize() + { + this->Internal->AudioStream = fcontext->streams[this->Internal->AudioStreamIndex]; + +- AVCodec* adec = avcodec_find_decoder(this->Internal->AudioStream->codecpar->codec_id); ++ const AVCodec* adec = avcodec_find_decoder(this->Internal->AudioStream->codecpar->codec_id); + if (!adec) + { + vtkErrorMacro("Failed to find codec for audio"); +diff --git a/IO/FFMPEG/vtkFFMPEGWriter.cxx b/IO/FFMPEG/vtkFFMPEGWriter.cxx +index 5011b40f579..5d284b088ed 100644 +--- a/IO/FFMPEG/vtkFFMPEGWriter.cxx ++++ b/IO/FFMPEG/vtkFFMPEGWriter.cxx +@@ -21,10 +21,17 @@ + + extern "C" + { ++#include <libavcodec/avcodec.h> + #include <libavformat/avformat.h> + #include <libswscale/swscale.h> + } + ++#if LIBAVFORMAT_VERSION_MAJOR < 59 ++#define vtk_ff_const59 ++#else ++#define vtk_ff_const59 const ++#endif ++ + #if defined(LIBAVFORMAT_VERSION_MAJOR) && LIBAVFORMAT_VERSION_MAJOR >= 57 + extern "C" + { +@@ -51,7 +58,7 @@ private: + + AVFormatContext* avFormatContext; + +- AVOutputFormat* avOutputFormat; ++ vtk_ff_const59 AVOutputFormat* avOutputFormat; + + AVStream* avStream; + +@@ -115,15 +122,9 @@ int vtkFFMPEGWriterInternal::Start() + return 0; + } + +- if (this->Writer->GetCompression()) +- { +- // choose a codec that is easily playable on windows +- this->avOutputFormat->video_codec = AV_CODEC_ID_MJPEG; +- } +- else +- { +- this->avOutputFormat->video_codec = AV_CODEC_ID_RAWVIDEO; +- } ++ enum AVCodecID video_codec = this->Writer->GetCompression() ++ ? AV_CODEC_ID_MJPEG // choose a codec that is easily playable on windows ++ : AV_CODEC_ID_RAWVIDEO; + + // create the format context that wraps all of the media output structures + if (avformat_alloc_output_context2( +@@ -133,8 +134,8 @@ int vtkFFMPEGWriterInternal::Start() + return 0; + } + +- AVCodec* codec; +- if (!(codec = avcodec_find_encoder(this->avOutputFormat->video_codec))) ++ vtk_ff_const59 AVCodec* codec; ++ if (!(codec = avcodec_find_encoder(video_codec))) + { + vtkGenericWarningMacro(<< "Failed to get video codec."); + return 0; +@@ -155,7 +156,7 @@ int vtkFFMPEGWriterInternal::Start() + return 0; + } + +- this->avStream->codecpar->codec_id = static_cast<AVCodecID>(this->avOutputFormat->video_codec); ++ this->avStream->codecpar->codec_id = video_codec; + this->avStream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; + this->avStream->codecpar->width = this->Dim[0]; + this->avStream->codecpar->height = this->Dim[1]; +-- +GitLab +
