From cb254f1a885f1851f9de68fad26a1ce8f71af1bc Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Sat, 30 Mar 2019 18:56:11 +0000 Subject: Initial revision --- ffmpeg/build/patches/fdk-aac_v2.patch | 89 +++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 ffmpeg/build/patches/fdk-aac_v2.patch diff --git a/ffmpeg/build/patches/fdk-aac_v2.patch b/ffmpeg/build/patches/fdk-aac_v2.patch new file mode 100644 index 00000000..880ebd1e --- /dev/null +++ b/ffmpeg/build/patches/fdk-aac_v2.patch @@ -0,0 +1,89 @@ +From: Martin Storsjö +Date: Fri, 31 Aug 2018 11:25:30 +0000 (+0300) +Subject: libfdk-aacenc: Fix building with libfdk-aac v2 +X-Git-Url: https://git.libav.org/?p=libav.git;a=commitdiff_plain;h=141c960e21d2860e354f9b90df136184dd00a9a8;hp=c8bca9fe466f810fd484e2c6db7ef7bc83b5a943 + +libfdk-aacenc: Fix building with libfdk-aac v2 + +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. + +Signed-off-by: Martin Storsjö +--- + +diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c +index c340a1e..2ad768e 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; +@@ -290,7 +295,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) { +@@ -323,28 +332,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_packet(avpkt, FFMAX(8192, 768 * avctx->channels)))) { + av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n"); -- cgit v1.2.3