diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-06-13 23:34:19 +0300 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-06-15 16:44:27 +0300 |
commit | cbe336c9e81e2d9de3a18abef887c9255a9b9da5 (patch) | |
tree | 3a2187953b62ad244b871db8d392d65e36b8ea8f /libavformat | |
parent | b737575c76ff33ef5ffd602ebf3e30cc71ec536c (diff) |
avformat/matroskadec: Move AVBufferRef instead of copying, fix memleak
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@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/matroskadec.c | 5 |
1 files 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; |