--- libavcodec/libfdk-aacenc.c.orig 2018-09-04 17:31:43.145385000 +0200 +++ libavcodec/libfdk-aacenc.c 2018-09-04 17:39:10.786071200 +0200 @@ -289,7 +289,7 @@ } avctx->frame_size = info.frameLength; - avctx->initial_padding = info.encoderDelay; + avctx->initial_padding = info.nDelay; ff_af_queue_init(avctx, &s->afq); if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { @@ -322,28 +322,35 @@ 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_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_ptr = frame->data[0]; + in_buffer_size = 2 * avctx->channels * frame->nb_samples; + + 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;