community/vtk to 9.1.0-10

This commit is contained in:
Kevin Mihelich 2022-02-17 19:38:03 +00:00
parent 021c711556
commit b7dc6ef229
2 changed files with 165 additions and 8 deletions

View file

@ -10,11 +10,10 @@
# - add makedepend on tbb, previously pulled in by ospray
# - explicitly disable the fides, adios2 modules due to -DVTK_BUILD_ALL_MODULES=ON
# - generalize moving .so files in install
# - explicitly link v5/v6 with libatomic
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/"
@ -59,10 +58,12 @@ optdepends=('gnuplot: plotting tools'
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}
@ -72,10 +73,8 @@ prepare() {
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
# explicitly link with libatomic
if [[ $CARCH == "arm" || $CARCH == "armv6h" ]]; then
echo "vtk_module_link(VTK::CommonDataModel PUBLIC atomic)" >> Common/DataModel/CMakeLists.txt
fi
# Fix build with FFmpeg 5 https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8863
patch -p1 -i "$srcdir"/ffmpeg5.patch
}
build() {

158
community/vtk/ffmpeg5.patch Normal file
View file

@ -0,0 +1,158 @@
From bad8f3e9d0aad03e8f2aff9524cb3c5f2d10ccaf Mon Sep 17 00:00:00 2001
From: Ben Boeckel <ben.boeckel@kitware.com>
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