You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-libs/qtav/files/qtav-1.12.0-ffmpeg4-2.patch

119 lines
5.3 KiB

From 7f6929b49c25ca475a08f87e8b52aa1642d109dd Mon Sep 17 00:00:00 2001
From: Felix Matouschek <felix@matouschek.org>
Date: Sat, 11 Nov 2017 10:13:06 +0100
Subject: [PATCH] Make QtAV build with newer versions of FFmpeg
Some defines changed their name in newer versions of FFmpeg, this
patch uses preprocessor instructions in AVCompat.h to use the
correct define names. Also filter names retrieved by
'avfilter_get_by_name' should be used as const variables in
libavfilter versions starting at 7.0.0.
---
src/AVMuxer.cpp | 2 +-
src/QtAV/private/AVCompat.h | 12 ++++++++++++
src/codec/audio/AudioEncoderFFmpeg.cpp | 4 ++--
src/codec/video/VideoEncoderFFmpeg.cpp | 2 +-
src/filter/LibAVFilter.cpp | 8 +++++++-
src/subtitle/SubtitleProcessorFFmpeg.cpp | 2 +-
6 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/src/AVMuxer.cpp b/src/AVMuxer.cpp
index 2f0b40d05..d2eb3dde8 100644
--- a/src/AVMuxer.cpp
+++ b/src/AVMuxer.cpp
@@ -124,7 +124,7 @@ AVStream *AVMuxer::Private::addStream(AVFormatContext* ctx, const QString &codec
c->time_base = s->time_base;
/* Some formats want stream headers to be separate. */
if (ctx->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
+ c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
// expose avctx to encoder and set properties in encoder?
// list codecs for a given format in ui
return s;
diff --git a/src/QtAV/private/AVCompat.h b/src/QtAV/private/AVCompat.h
index e387868a8..6c38596d1 100644
--- a/src/QtAV/private/AVCompat.h
+++ b/src/QtAV/private/AVCompat.h
@@ -456,3 +456,15 @@ const char *get_codec_long_name(AVCodecID id);
} } while(0)
#endif //QTAV_COMPAT_H
+
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(56,33,0)
+#define AV_CODEC_FLAG_GLOBAL_HEADER CODEC_FLAG_GLOBAL_HEADER
+#endif
+
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(56,56,100)
+#define AV_INPUT_BUFFER_MIN_SIZE FF_MIN_BUFFER_SIZE
+#endif
+
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(56,56,100)
+#define AV_INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE
+#endif
diff --git a/src/codec/audio/AudioEncoderFFmpeg.cpp b/src/codec/audio/AudioEncoderFFmpeg.cpp
index a74f4f31d..3811e11a6 100644
--- a/src/codec/audio/AudioEncoderFFmpeg.cpp
+++ b/src/codec/audio/AudioEncoderFFmpeg.cpp
@@ -151,8 +151,8 @@ bool AudioEncoderFFmpegPrivate::open()
} else {
buffer_size = frame_size*format_used.bytesPerSample()*format_used.channels()*2+200;
}
- if (buffer_size < FF_MIN_BUFFER_SIZE)
- buffer_size = FF_MIN_BUFFER_SIZE;
+ if (buffer_size < AV_INPUT_BUFFER_MIN_SIZE)
+ buffer_size = AV_INPUT_BUFFER_MIN_SIZE;
buffer.resize(buffer_size);
return true;
}
diff --git a/src/codec/video/VideoEncoderFFmpeg.cpp b/src/codec/video/VideoEncoderFFmpeg.cpp
index 7c5ed42d0..671efa7d3 100644
--- a/src/codec/video/VideoEncoderFFmpeg.cpp
+++ b/src/codec/video/VideoEncoderFFmpeg.cpp
@@ -245,7 +245,7 @@ bool VideoEncoderFFmpegPrivate::open()
applyOptionsForContext();
AV_ENSURE_OK(avcodec_open2(avctx, codec, &dict), false);
// from mpv ao_lavc
- const int buffer_size = qMax<int>(qMax<int>(width*height*6+200, FF_MIN_BUFFER_SIZE), sizeof(AVPicture));//??
+ const int buffer_size = qMax<int>(qMax<int>(width*height*6+200, AV_INPUT_BUFFER_MIN_SIZE), sizeof(AVPicture));//??
buffer.resize(buffer_size);
return true;
}
diff --git a/src/filter/LibAVFilter.cpp b/src/filter/LibAVFilter.cpp
index 191512040..8993a91f7 100644
--- a/src/filter/LibAVFilter.cpp
+++ b/src/filter/LibAVFilter.cpp
@@ -120,7 +120,10 @@ class LibAVFilter::Private
// pixel_aspect==sar, pixel_aspect is more compatible
QString buffersrc_args = args;
qDebug("buffersrc_args=%s", buffersrc_args.toUtf8().constData());
- AVFilter *buffersrc = avfilter_get_by_name(video ? "buffer" : "abuffer");
+#if LIBAVFILTER_VERSION_INT >= AV_VERSION_INT(7,0,0)
+ const
+#endif
+ AVFilter *buffersrc = avfilter_get_by_name(video ? "buffer" : "abuffer");
Q_ASSERT(buffersrc);
AV_ENSURE_OK(avfilter_graph_create_filter(&in_filter_ctx,
buffersrc,
@@ -128,6 +131,9 @@ class LibAVFilter::Private
filter_graph)
, false);
/* buffer video sink: to terminate the filter chain. */
+#if LIBAVFILTER_VERSION_INT >= AV_VERSION_INT(7,0,0)
+ const
+#endif
AVFilter *buffersink = avfilter_get_by_name(video ? "buffersink" : "abuffersink");
Q_ASSERT(buffersink);
AV_ENSURE_OK(avfilter_graph_create_filter(&out_filter_ctx, buffersink, "out",
diff --git a/src/subtitle/SubtitleProcessorFFmpeg.cpp b/src/subtitle/SubtitleProcessorFFmpeg.cpp
index 30ee9367c..1755c3816 100644
--- a/src/subtitle/SubtitleProcessorFFmpeg.cpp
+++ b/src/subtitle/SubtitleProcessorFFmpeg.cpp
@@ -249,7 +249,7 @@ bool SubtitleProcessorFFmpeg::processHeader(const QByteArray &codec, const QByte
codec_ctx->time_base.den = 1000;
if (!data.isEmpty()) {
av_free(codec_ctx->extradata);
- codec_ctx->extradata = (uint8_t*)av_mallocz(data.size() + FF_INPUT_BUFFER_PADDING_SIZE);
+ codec_ctx->extradata = (uint8_t*)av_mallocz(data.size() + AV_INPUT_BUFFER_PADDING_SIZE);
if (!codec_ctx->extradata)
return false;
codec_ctx->extradata_size = data.size();