From: Jiejun Zhang <zhangjiejun1...@gmail.com> This fixes #6940 --- libavcodec/audiotoolboxenc.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/libavcodec/audiotoolboxenc.c b/libavcodec/audiotoolboxenc.c index 71885d1530..b70375a692 100644 --- a/libavcodec/audiotoolboxenc.c +++ b/libavcodec/audiotoolboxenc.c @@ -48,6 +48,9 @@ typedef struct ATDecodeContext { AudioFrameQueue afq; int eof; int frame_size; + + uint8_t* audio_data_buf; + uint32_t audio_data_buf_size; } ATDecodeContext; static UInt32 ffat_get_format_id(enum AVCodecID codec, int profile) @@ -442,6 +445,9 @@ static av_cold int ffat_init_encoder(AVCodecContext *avctx) ff_af_queue_init(avctx, &at->afq); + at->audio_data_buf_size = 0; + at->audio_data_buf = NULL; + return 0; } @@ -471,7 +477,15 @@ static OSStatus ffat_encode_callback(AudioConverterRef converter, UInt32 *nb_pac data->mBuffers[0].mDataByteSize = frame->nb_samples * av_get_bytes_per_sample(avctx->sample_fmt) * avctx->channels; - data->mBuffers[0].mData = frame->data[0]; + if (at->audio_data_buf_size < data->mBuffers[0].mDataByteSize) { + av_log(avctx, AV_LOG_INFO, "Increasing audio data buffer size to %u", + data->mBuffers[0].mDataByteSize); + av_free(at->audio_data_buf); + at->audio_data_buf_size = data->mBuffers[0].mDataByteSize; + at->audio_data_buf = av_malloc(at->audio_data_buf_size); + } + memcpy(at->audio_data_buf, frame->data[0], data->mBuffers[0].mDataByteSize); + data->mBuffers[0].mData = at->audio_data_buf; if (*nb_packets > frame->nb_samples) *nb_packets = frame->nb_samples; @@ -565,6 +579,10 @@ static av_cold int ffat_close_encoder(AVCodecContext *avctx) ff_bufqueue_discard_all(&at->frame_queue); ff_bufqueue_discard_all(&at->used_frame_queue); ff_af_queue_close(&at->afq); + if (at->audio_data_buf_size > 0) { + at->audio_data_buf_size = 0; + av_free(at->audio_data_buf); + } return 0; } -- 2.14.3 (Apple Git-98) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel