[FFmpeg-cvslog] Merge commit '141c960e21d2860e354f9b90df136184dd00a9a8'
James Almer
git at videolan.org
Tue Sep 11 20:21:02 EEST 2018
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | 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 <jamrial at gmail.com>
> 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;
More information about the ffmpeg-cvslog
mailing list