[FFmpeg-devel] [PATCH 01/26] avformat/matroskadec: Move AVBufferRef instead of copying, fix memleak
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Mon Jun 15 16:40:30 EEST 2020
Andreas Rheinhardt:
> EBML binary elements are already made reference-counted when read;
> so when populating the AVStream.attached_pic, one does not need to
> allocate a new buffer for the data; instead the current code just
> creates a new reference to the underlying AVBuffer. But this can be
> improved even further: Just move the already existing reference.
>
> This also fixes a memleak that happens upon error because
> matroska_read_close has not been called in this scenario.
>
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> This fixes one of the memleaks that I found during the work on my patchset
> [1] that intended to automatically call a demuxer's read_close function
> if reading the header fails. Several other of the patches of this
> patchset also fix such memleaks.
>
> I intend to apply this patchset soon so that 4.3 can finally be
> released.
>
> [1]: https://ffmpeg.org/pipermail/ffmpeg-devel/2020-March/258831.html
>
> libavformat/matroskadec.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
> index bb3a126c29..b1da40983f 100644
> --- a/libavformat/matroskadec.c
> +++ b/libavformat/matroskadec.c
> @@ -2938,9 +2938,8 @@ static int matroska_read_header(AVFormatContext *s)
> st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
>
> av_init_packet(pkt);
> - pkt->buf = av_buffer_ref(attachments[j].bin.buf);
> - if (!pkt->buf)
> - return AVERROR(ENOMEM);
> + pkt->buf = attachments[j].bin.buf;
> + attachments[j].bin.buf = NULL;
> pkt->data = attachments[j].bin.data;
> pkt->size = attachments[j].bin.size;
> pkt->stream_index = st->index;
>
Will apply 1-26.
- Andreas
More information about the ffmpeg-devel
mailing list