On Tue, Jan 2, 2018 at 10:37 PM, wm4 <nfx...@googlemail.com> wrote: > On Tue, 2 Jan 2018 22:27:49 +0800 > Jiejun Zhang <zhangjiejun1...@gmail.com> wrote: > >> On Tue, Jan 2, 2018 at 8:03 PM, Carl Eugen Hoyos <ceffm...@gmail.com> wrote: >> > 2018-01-02 8:52 GMT+01:00 <zhangjiejun1...@gmail.com>: >> > >> >> @@ -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); >> >> + } >> > >> > The if() looks unnecessary. >> >> Yes. I'll remove it. Thanks for pointing it out. >> >> > Could you explain what this patch changes? >> > From a quick look, until now a buffer a was used with a calculated size x. >> > After the patch, a buffer b with the same calculated size x is allocated, >> > and x bytes are copied from a to b. >> > What do I miss? >> >> Although undocumented, AudioToolbox seems to require the data supplied >> by the callback (i.e. ffat_encode_callback) being unchanged until the >> next time the callback is called. In the old implementation, the >> AVBuffer backing the frame is recycled after the frame is freed, and >> somebody else (maybe the decoder) will write into the AVBuffer and >> change the data. AudioToolbox then encodes some wrong data and noise >> is produced. Copying the data to a separate buffer solves this >> problem. > > This should be in the commit message.
Done. Submitting v2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel