diff --git a/multimedia/ffmpeg/patches/ffmpeg-fix-build-with-fdk-aac-2.0.patch b/multimedia/ffmpeg/patches/ffmpeg-fix-build-with-fdk-aac-2.0.patch new file mode 100644 index 000000000..c951a8793 --- /dev/null +++ b/multimedia/ffmpeg/patches/ffmpeg-fix-build-with-fdk-aac-2.0.patch @@ -0,0 +1,316 @@ +From 9969fbafe2c83aee196c115acdaafbb623727927 Mon Sep 17 00:00:00 2001 +From: Bernd Kuhls +Date: Mon, 28 Jan 2019 21:55:19 +0100 +Subject: package/ffmpeg: fix build with libfdk-aac 2.0.0 + +Add upstream patches to fix +http://autobuild.buildroot.net/results/909/9097a2b190f4032ff51eda531f4379a99da5181a/ + +after fdk-aac was bumped to 2.0.0: +https://git.buildroot.net/buildroot/commit/package/fdk-aac?id=31ff32824a4f3d09351367c3418b5605f9c40521 + +Signed-off-by: Bernd Kuhls +Signed-off-by: Thomas Petazzoni +--- + ...dk-aacenc-Fix-building-with-libfdk-aac-v2.patch | 100 +++++++++++++++++++++ + ...Consistently-use-a-proper-version-check-m.patch | 99 ++++++++++++++++++++ + ...-libfdk-aac-Don-t-use-defined-in-a-define.patch | 72 +++++++++++++++ + 3 files changed, 271 insertions(+) + create mode 100644 package/ffmpeg/0002-libfdk-aacenc-Fix-building-with-libfdk-aac-v2.patch + create mode 100644 package/ffmpeg/0003-libfdk-aac-Consistently-use-a-proper-version-check-m.patch + create mode 100644 package/ffmpeg/0004-libfdk-aac-Don-t-use-defined-in-a-define.patch + +(limited to 'package') + +diff --git a/package/ffmpeg/0002-libfdk-aacenc-Fix-building-with-libfdk-aac-v2.patch b/package/ffmpeg/0002-libfdk-aacenc-Fix-building-with-libfdk-aac-v2.patch +new file mode 100644 +index 0000000000..3f452242fa +--- /dev/null ++++ b/package/ffmpeg/0002-libfdk-aacenc-Fix-building-with-libfdk-aac-v2.patch +@@ -0,0 +1,100 @@ ++From c60fb550302878aba7e86037451f7996e8069289 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Martin=20Storsj=C3=B6?= ++Date: Fri, 31 Aug 2018 14:25:30 +0300 ++Subject: [PATCH] libfdk-aacenc: Fix building with libfdk-aac v2 ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++When flushing the encoder, we now need to provide non-null buffer ++parameters for everything, even if they are unused. ++ ++The encoderDelay parameter has been replaced by two, nDelay and ++nDelayCore. ++ ++Downloaded from ++http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=141c960e21d2860e354f9b90df136184dd00a9a8 ++ ++Signed-off-by: Martin Storsjö ++[Bernd: rebased for ffmpeg 3.4.5] ++Signed-off-by: Bernd Kuhls ++--- ++ libavcodec/libfdk-aacenc.c | 34 +++++++++++++++++++++++++--------- ++ 1 file changed, 25 insertions(+), 9 deletions(-) ++ ++diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c ++index 0e2051b468..f5adb407ed 100644 ++--- a/libavcodec/libfdk-aacenc.c +++++ b/libavcodec/libfdk-aacenc.c ++@@ -26,6 +26,11 @@ ++ #include "audio_frame_queue.h" ++ #include "internal.h" ++ +++#define FDKENC_VER_AT_LEAST(vl0, vl1) \ +++ (defined(AACENCODER_LIB_VL0) && \ +++ ((AACENCODER_LIB_VL0 > vl0) || \ +++ (AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1))) +++ ++ typedef struct AACContext { ++ const AVClass *class; ++ HANDLE_AACENCODER handle; ++@@ -286,7 +291,11 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ++ } ++ ++ avctx->frame_size = info.frameLength; +++#if FDKENC_VER_AT_LEAST(4, 0) +++ avctx->initial_padding = info.nDelay; +++#else ++ avctx->initial_padding = info.encoderDelay; +++#endif ++ ff_af_queue_init(avctx, &s->afq); ++ ++ if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { ++@@ -319,28 +328,35 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, ++ int out_buffer_size, out_buffer_element_size; ++ void *in_ptr, *out_ptr; ++ int ret; +++ uint8_t dummy_buf[1]; ++ AACENC_ERROR err; ++ ++ /* handle end-of-stream small frame and flushing */ ++ if (!frame) { +++ /* Must be a non-null pointer, even if it's a dummy. We could use +++ * the address of anything else on the stack as well. */ +++ in_ptr = dummy_buf; +++ in_buffer_size = 0; +++ ++ in_args.numInSamples = -1; ++ } else { ++- in_ptr = frame->data[0]; ++- in_buffer_size = 2 * avctx->channels * frame->nb_samples; ++- in_buffer_element_size = 2; +++ in_ptr = frame->data[0]; +++ in_buffer_size = 2 * avctx->channels * frame->nb_samples; ++ ++- in_args.numInSamples = avctx->channels * frame->nb_samples; ++- in_buf.numBufs = 1; ++- in_buf.bufs = &in_ptr; ++- in_buf.bufferIdentifiers = &in_buffer_identifier; ++- in_buf.bufSizes = &in_buffer_size; ++- in_buf.bufElSizes = &in_buffer_element_size; +++ in_args.numInSamples = avctx->channels * frame->nb_samples; ++ ++ /* add current frame to the queue */ ++ if ((ret = ff_af_queue_add(&s->afq, frame)) < 0) ++ return ret; ++ } ++ +++ in_buffer_element_size = 2; +++ in_buf.numBufs = 1; +++ in_buf.bufs = &in_ptr; +++ in_buf.bufferIdentifiers = &in_buffer_identifier; +++ in_buf.bufSizes = &in_buffer_size; +++ in_buf.bufElSizes = &in_buffer_element_size; +++ ++ /* The maximum packet size is 6144 bits aka 768 bytes per channel. */ ++ if ((ret = ff_alloc_packet2(avctx, avpkt, FFMAX(8192, 768 * avctx->channels), 0)) < 0) ++ return ret; ++-- ++2.20.1 ++ +diff --git a/package/ffmpeg/0003-libfdk-aac-Consistently-use-a-proper-version-check-m.patch b/package/ffmpeg/0003-libfdk-aac-Consistently-use-a-proper-version-check-m.patch +new file mode 100644 +index 0000000000..c358a045d1 +--- /dev/null ++++ b/package/ffmpeg/0003-libfdk-aac-Consistently-use-a-proper-version-check-m.patch +@@ -0,0 +1,99 @@ ++From 48be4c81e0ad081edab65e133e6e1bdec7de3b55 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Martin=20Storsj=C3=B6?= ++Date: Tue, 4 Sep 2018 08:29:37 +0300 ++Subject: [PATCH] libfdk-aac: Consistently use a proper version check macro for ++ detecting features ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++libfdk-aac: Consistently use a proper version check macro for detecting features ++ ++The previous version checks checked explicitly for the version ++where the version define was added to the installed headers, ++making an "#ifdef AACDECODER_LIB_VL0" enough. Now that we have ++a need for more diverse version checks than this, convert all checks ++to such checks. ++ ++Downloaded from ++http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=ffb9b7a6bab6c6bfd3dd9a7c32e3724209824999 ++ ++Signed-off-by: Martin Storsjö ++Signed-off-by: Bernd Kuhls ++--- ++ libavcodec/libfdk-aacdec.c | 13 ++++++++----- ++ libavcodec/libfdk-aacenc.c | 6 +++--- ++ 2 files changed, 11 insertions(+), 8 deletions(-) ++ ++diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c ++index 2857b9453f..ef51184ebd 100644 ++--- a/libavcodec/libfdk-aacdec.c +++++ b/libavcodec/libfdk-aacdec.c ++@@ -25,9 +25,12 @@ ++ #include "avcodec.h" ++ #include "internal.h" ++ ++-/* The version macro is introduced the same time as the setting enum was ++- * changed, so this check should suffice. */ ++-#ifndef AACDECODER_LIB_VL0 +++#define FDKDEC_VER_AT_LEAST(vl0, vl1) \ +++ (defined(AACDECODER_LIB_VL0) && \ +++ ((AACDECODER_LIB_VL0 > vl0) || \ +++ (AACDECODER_LIB_VL0 == vl0 && AACDECODER_LIB_VL1 >= vl1))) +++ +++#if !FDKDEC_VER_AT_LEAST(2, 5) // < 2.5.10 ++ #define AAC_PCM_MAX_OUTPUT_CHANNELS AAC_PCM_OUTPUT_CHANNELS ++ #endif ++ ++@@ -72,7 +75,7 @@ static const AVOption fdk_aac_dec_options[] = { ++ OFFSET(drc_level), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 127, AD, NULL }, ++ { "drc_heavy", "Dynamic Range Control: heavy compression, where [1] is on (RF mode) and [0] is off", ++ OFFSET(drc_heavy), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, AD, NULL }, ++-#ifdef AACDECODER_LIB_VL0 +++#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 ++ { "level_limit", "Signal level limiting", OFFSET(level_limit), AV_OPT_TYPE_INT, { .i64 = 0 }, -1, 1, AD }, ++ #endif ++ { NULL } ++@@ -293,7 +296,7 @@ static av_cold int fdk_aac_decode_init(AVCodecContext *avctx) ++ } ++ } ++ ++-#ifdef AACDECODER_LIB_VL0 +++#if FDKDEC_VER_AT_LEAST(2, 5) // 2.5.10 ++ if (aacDecoder_SetParam(s->handle, AAC_PCM_LIMITER_ENABLE, s->level_limit) != AAC_DEC_OK) { ++ av_log(avctx, AV_LOG_ERROR, "Unable to set in signal level limiting in the decoder\n"); ++ return AVERROR_UNKNOWN; ++diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c ++index f5adb407ed..91dcb5a1b9 100644 ++--- a/libavcodec/libfdk-aacenc.c +++++ b/libavcodec/libfdk-aacenc.c ++@@ -156,7 +156,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ++ case 6: mode = MODE_1_2_2_1; sce = 2; cpe = 2; break; ++ /* The version macro is introduced the same time as the 7.1 support, so this ++ should suffice. */ ++-#ifdef AACENCODER_LIB_VL0 +++#if FDKENC_VER_AT_LEAST(3, 4) // 3.4.12 ++ case 8: ++ sce = 2; ++ cpe = 3; ++@@ -291,7 +291,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ++ } ++ ++ avctx->frame_size = info.frameLength; ++-#if FDKENC_VER_AT_LEAST(4, 0) +++#if FDKENC_VER_AT_LEAST(4, 0) // 4.0.0 ++ avctx->initial_padding = info.nDelay; ++ #else ++ avctx->initial_padding = info.encoderDelay; ++@@ -412,7 +412,7 @@ static const uint64_t aac_channel_layout[] = { ++ AV_CH_LAYOUT_4POINT0, ++ AV_CH_LAYOUT_5POINT0_BACK, ++ AV_CH_LAYOUT_5POINT1_BACK, ++-#ifdef AACENCODER_LIB_VL0 +++#if FDKENC_VER_AT_LEAST(3, 4) // 3.4.12 ++ AV_CH_LAYOUT_7POINT1_WIDE_BACK, ++ AV_CH_LAYOUT_7POINT1, ++ #endif ++-- ++2.20.1 ++ +diff --git a/package/ffmpeg/0004-libfdk-aac-Don-t-use-defined-in-a-define.patch b/package/ffmpeg/0004-libfdk-aac-Don-t-use-defined-in-a-define.patch +new file mode 100644 +index 0000000000..30357b91e1 +--- /dev/null ++++ b/package/ffmpeg/0004-libfdk-aac-Don-t-use-defined-in-a-define.patch +@@ -0,0 +1,72 @@ ++From 452746d80fdaaaf1b546860eb78449c6de3678d7 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?Martin=20Storsj=C3=B6?= ++Date: Wed, 12 Sep 2018 20:03:12 +0300 ++Subject: [PATCH] libfdk-aac: Don't use defined() in a #define ++MIME-Version: 1.0 ++Content-Type: text/plain; charset=UTF-8 ++Content-Transfer-Encoding: 8bit ++ ++libfdk-aac: Don't use defined() in a #define ++ ++MSVC expands the preprocessor directives differently, making the ++version check fail in the previous form. ++ ++Clang can warn about this with -Wexpansion-to-defined (not currently ++enabled by default): ++warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined] ++ ++Downloaded from ++http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=2a9e1c122eed66be1b26b747342b848300b226c7 ++ ++Signed-off-by: Martin Storsjö ++Signed-off-by: Bernd Kuhls ++--- ++ libavcodec/libfdk-aacdec.c | 9 ++++++--- ++ libavcodec/libfdk-aacenc.c | 9 ++++++--- ++ 2 files changed, 12 insertions(+), 6 deletions(-) ++ ++diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c ++index ef51184ebd..0fbab36463 100644 ++--- a/libavcodec/libfdk-aacdec.c +++++ b/libavcodec/libfdk-aacdec.c ++@@ -25,10 +25,13 @@ ++ #include "avcodec.h" ++ #include "internal.h" ++ +++#ifdef AACDECODER_LIB_VL0 ++ #define FDKDEC_VER_AT_LEAST(vl0, vl1) \ ++- (defined(AACDECODER_LIB_VL0) && \ ++- ((AACDECODER_LIB_VL0 > vl0) || \ ++- (AACDECODER_LIB_VL0 == vl0 && AACDECODER_LIB_VL1 >= vl1))) +++ ((AACDECODER_LIB_VL0 > vl0) || \ +++ (AACDECODER_LIB_VL0 == vl0 && AACDECODER_LIB_VL1 >= vl1)) +++#else +++#define FDKDEC_VER_AT_LEAST(vl0, vl1) 0 +++#endif ++ ++ #if !FDKDEC_VER_AT_LEAST(2, 5) // < 2.5.10 ++ #define AAC_PCM_MAX_OUTPUT_CHANNELS AAC_PCM_OUTPUT_CHANNELS ++diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c ++index 91dcb5a1b9..8349e56dcb 100644 ++--- a/libavcodec/libfdk-aacenc.c +++++ b/libavcodec/libfdk-aacenc.c ++@@ -26,10 +26,13 @@ ++ #include "audio_frame_queue.h" ++ #include "internal.h" ++ +++#ifdef AACENCODER_LIB_VL0 ++ #define FDKENC_VER_AT_LEAST(vl0, vl1) \ ++- (defined(AACENCODER_LIB_VL0) && \ ++- ((AACENCODER_LIB_VL0 > vl0) || \ ++- (AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1))) +++ ((AACENCODER_LIB_VL0 > vl0) || \ +++ (AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1)) +++#else +++#define FDKENC_VER_AT_LEAST(vl0, vl1) 0 +++#endif ++ ++ typedef struct AACContext { ++ const AVClass *class; ++-- ++2.20.1 ++ +-- +cgit v1.2.1 +