summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libraries/chromaprint/chromaprint.SlackBuild2
-rw-r--r--libraries/chromaprint/ffmpeg5.patch76
2 files changed, 78 insertions, 0 deletions
diff --git a/libraries/chromaprint/chromaprint.SlackBuild b/libraries/chromaprint/chromaprint.SlackBuild
index 3b01f015bc..7ec8bf6a04 100644
--- a/libraries/chromaprint/chromaprint.SlackBuild
+++ b/libraries/chromaprint/chromaprint.SlackBuild
@@ -83,6 +83,8 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+patch -p1 < $CWD/ffmpeg5.patch
+
mkdir -p build
cd build
cmake \
diff --git a/libraries/chromaprint/ffmpeg5.patch b/libraries/chromaprint/ffmpeg5.patch
new file mode 100644
index 0000000000..d90767fd14
--- /dev/null
+++ b/libraries/chromaprint/ffmpeg5.patch
@@ -0,0 +1,76 @@
+From 6d938d70b1d52634f8b0d88cb29da87f8d5b35a2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= <bero@lindev.ch>
+Date: Mon, 17 Jan 2022 04:41:33 +0100
+Subject: [PATCH] Port to ffmpeg 5.0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Replace removed functionality like accessing the codec context
+from an AVStream and avcodec_decode_audio4()
+
+Signed-off-by: Bernhard Rosenkränzer <bero@lindev.ch>
+---
+ src/audio/ffmpeg_audio_reader.h | 24 ++++++++++++++++++++++--
+ 1 file changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/src/audio/ffmpeg_audio_reader.h b/src/audio/ffmpeg_audio_reader.h
+index 5550164..a3b8de7 100644
+--- a/src/audio/ffmpeg_audio_reader.h
++++ b/src/audio/ffmpeg_audio_reader.h
+@@ -74,7 +74,7 @@ class FFmpegAudioReader {
+ uint8_t *m_convert_buffer[1] = { nullptr };
+ int m_convert_buffer_nb_samples = 0;
+
+- AVInputFormat *m_input_fmt = nullptr;
++ const AVInputFormat *m_input_fmt = nullptr;
+ AVDictionary *m_input_opts = nullptr;
+
+ AVFormatContext *m_format_ctx = nullptr;
+@@ -153,7 +153,7 @@ inline bool FFmpegAudioReader::Open(const std::string &file_name) {
+ return false;
+ }
+
+- AVCodec *codec;
++ const AVCodec *codec;
+ ret = av_find_best_stream(m_format_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &codec, 0);
+ if (ret < 0) {
+ SetError("Could not find any audio stream in the file", ret);
+@@ -161,7 +161,13 @@ inline bool FFmpegAudioReader::Open(const std::string &file_name) {
+ }
+ m_stream_index = ret;
+
++#if LIBAVCODEC_VERSION_MAJOR >= 59
++ const AVCodec *streamcodec = avcodec_find_decoder(m_format_ctx->streams[m_stream_index]->codecpar->codec_id);
++ m_codec_ctx = avcodec_alloc_context3(streamcodec);
++ avcodec_parameters_to_context(m_codec_ctx, m_format_ctx->streams[m_stream_index]->codecpar);
++#else
+ m_codec_ctx = m_format_ctx->streams[m_stream_index]->codec;
++#endif
+ m_codec_ctx->request_sample_fmt = AV_SAMPLE_FMT_S16;
+
+ ret = avcodec_open2(m_codec_ctx, codec, nullptr);
+@@ -278,7 +284,23 @@ inline bool FFmpegAudioReader::Read(const int16_t **data, size_t *size) {
+ }
+ }
+
++#if LIBAVCODEC_VERSION_MAJOR < 59
+ ret = avcodec_decode_audio4(m_codec_ctx, m_frame, &m_got_frame, &m_packet);
++#else
++ m_got_frame = 0;
++ ret = avcodec_send_packet(m_codec_ctx, &m_packet);
++ if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
++ ret = 0;
++ if(ret >= 0) {
++ ret = avcodec_receive_frame(m_codec_ctx, m_frame);
++ if (ret == 0) {
++ m_got_frame = 1;
++ ret = m_packet.size;
++ }
++ }
++ if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
++ ret = 0;
++#endif
+ if (ret < 0) {
+ if (m_decode_error) {
+ SetError("Error decoding audio frame", m_decode_error);