forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
media-libs/qtav: Fix build with ffmpeg-4
Thanks-to: Marco Genasci <[email protected]> Closes: https://bugs.gentoo.org/670765 Package-Manager: Portage-2.3.52, Repoman-2.3.12 Signed-off-by: Andreas Sturmlechner <[email protected]>
- Loading branch information
Showing
3 changed files
with
122 additions
and
3 deletions.
There are no files selected for viewing
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
From 7f6929b49c25ca475a08f87e8b52aa1642d109dd Mon Sep 17 00:00:00 2001 | ||
From: Felix Matouschek <[email protected]> | ||
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(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters