mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
159 lines
4.8 KiB
Diff
159 lines
4.8 KiB
Diff
|
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
|
||
|
|