Message ID | 20200521023647.27847-2-andreas.rheinhardt@gmail.com |
---|---|
State | Accepted |
Commit | dbacecd347599aa421be94ad5e16521aa51f7014 |
Headers | show |
Series | [FFmpeg-devel,1/3] avformat/matroskadec: Beautify matroska_parse_laces() | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
On 5/20/2020 11:36 PM, Andreas Rheinhardt wrote: > The TTA muxer writes a seektable in a dynamic buffer as it receives > packets and when writing the trailer, closes the dynamic buffer using > avio_close_dyn_buf(), writes the seektable and frees the buffer. But > the TTA muxer already has a deinit function which unconditionally > calls ffio_free_dyn_buf() on the dynamic buffer, so switching to > avio_get_dyn_buf() means that one can remove the code to free the > buffer; furthermore, it also might save an allocation if the seektable > is so small that it fits into the dynamic buffer's write buffer or if > adding the padding that avio_close_dyn_buf() adds necessitated > reallocating of the underlying buffer. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> > --- > libavformat/ttaenc.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/libavformat/ttaenc.c b/libavformat/ttaenc.c > index 4860aab4c1..becd3e7153 100644 > --- a/libavformat/ttaenc.c > +++ b/libavformat/ttaenc.c > @@ -145,10 +145,8 @@ static int tta_write_trailer(AVFormatContext *s) > /* Write Seek table */ > crc = ffio_get_checksum(tta->seek_table) ^ UINT32_MAX; > avio_wl32(tta->seek_table, crc); > - size = avio_close_dyn_buf(tta->seek_table, &ptr); > + size = avio_get_dyn_buf(tta->seek_table, &ptr); > avio_write(s->pb, ptr, size); > - tta->seek_table = NULL; > - av_free(ptr); > > /* Write audio data */ > tta_queue_flush(s); LGTM
James Almer: > On 5/20/2020 11:36 PM, Andreas Rheinhardt wrote: >> The TTA muxer writes a seektable in a dynamic buffer as it receives >> packets and when writing the trailer, closes the dynamic buffer using >> avio_close_dyn_buf(), writes the seektable and frees the buffer. But >> the TTA muxer already has a deinit function which unconditionally >> calls ffio_free_dyn_buf() on the dynamic buffer, so switching to >> avio_get_dyn_buf() means that one can remove the code to free the >> buffer; furthermore, it also might save an allocation if the seektable >> is so small that it fits into the dynamic buffer's write buffer or if >> adding the padding that avio_close_dyn_buf() adds necessitated >> reallocating of the underlying buffer. >> >> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> >> --- >> libavformat/ttaenc.c | 4 +--- >> 1 file changed, 1 insertion(+), 3 deletions(-) >> >> diff --git a/libavformat/ttaenc.c b/libavformat/ttaenc.c >> index 4860aab4c1..becd3e7153 100644 >> --- a/libavformat/ttaenc.c >> +++ b/libavformat/ttaenc.c >> @@ -145,10 +145,8 @@ static int tta_write_trailer(AVFormatContext *s) >> /* Write Seek table */ >> crc = ffio_get_checksum(tta->seek_table) ^ UINT32_MAX; >> avio_wl32(tta->seek_table, crc); >> - size = avio_close_dyn_buf(tta->seek_table, &ptr); >> + size = avio_get_dyn_buf(tta->seek_table, &ptr); >> avio_write(s->pb, ptr, size); >> - tta->seek_table = NULL; >> - av_free(ptr); >> >> /* Write audio data */ >> tta_queue_flush(s); > > LGTM Applied, thanks. - Andreas
diff --git a/libavformat/ttaenc.c b/libavformat/ttaenc.c index 4860aab4c1..becd3e7153 100644 --- a/libavformat/ttaenc.c +++ b/libavformat/ttaenc.c @@ -145,10 +145,8 @@ static int tta_write_trailer(AVFormatContext *s) /* Write Seek table */ crc = ffio_get_checksum(tta->seek_table) ^ UINT32_MAX; avio_wl32(tta->seek_table, crc); - size = avio_close_dyn_buf(tta->seek_table, &ptr); + size = avio_get_dyn_buf(tta->seek_table, &ptr); avio_write(s->pb, ptr, size); - tta->seek_table = NULL; - av_free(ptr); /* Write audio data */ tta_queue_flush(s);
The TTA muxer writes a seektable in a dynamic buffer as it receives packets and when writing the trailer, closes the dynamic buffer using avio_close_dyn_buf(), writes the seektable and frees the buffer. But the TTA muxer already has a deinit function which unconditionally calls ffio_free_dyn_buf() on the dynamic buffer, so switching to avio_get_dyn_buf() means that one can remove the code to free the buffer; furthermore, it also might save an allocation if the seektable is so small that it fits into the dynamic buffer's write buffer or if adding the padding that avio_close_dyn_buf() adds necessitated reallocating of the underlying buffer. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> --- libavformat/ttaenc.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)