ffmpeg | branch: master | James Almer <[email protected]> | Tue Sep 11 14:02:58 2018 -0300| [ee96ab2db507b95a694f10b152481cf71842de28] | committer: James Almer
Merge commit '141c960e21d2860e354f9b90df136184dd00a9a8' * commit '141c960e21d2860e354f9b90df136184dd00a9a8': libfdk-aacenc: Fix building with libfdk-aac v2 Merged-by: James Almer <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ee96ab2db507b95a694f10b152481cf71842de28 --- 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 25d33fec18..df6f7e7a74 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_packet2(avctx, avpkt, FFMAX(8192, 768 * avctx->channels), 0)) < 0) return ret; ====================================================================== diff --cc libavcodec/libfdk-aacenc.c index 25d33fec18,2ad768ed44..df6f7e7a74 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@@ -345,9 -354,18 +354,16 @@@ static int aac_encode_frame(AVCodecCont 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"); + if ((ret = ff_alloc_packet2(avctx, avpkt, FFMAX(8192, 768 * avctx->channels), 0)) < 0) return ret; - } out_ptr = avpkt->data; out_buffer_size = avpkt->size; _______________________________________________ ffmpeg-cvslog mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
