summaryrefslogtreecommitdiff
path: root/libavformat/matroskadec.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-01-29 10:42:48 -0300
committerJames Almer <jamrial@gmail.com>2021-03-17 15:06:49 -0300
commit8d78e90a6ba96646f7f25aff6ca3e12e71cec164 (patch)
treed8d5297e79841cc87ea67a210cb970a85adca636 /libavformat/matroskadec.c
parentf57a2582232810a897bfec0ad5076afb2ab80401 (diff)
avformat/matroskadec: use av_packet_alloc() to allocate packets
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r--libavformat/matroskadec.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 6e78a3e099..9acfdf5b32 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -381,6 +381,8 @@ typedef struct MatroskaDemuxContext {
/* byte position of the segment inside the stream */
int64_t segment_start;
+ AVPacket *pkt;
+
/* the packet queue */
PacketList *queue;
PacketList *queue_end;
@@ -2943,6 +2945,10 @@ static int matroska_read_header(AVFormatContext *s)
}
ebml_free(ebml_syntax, &ebml);
+ matroska->pkt = av_packet_alloc();
+ if (!matroska->pkt)
+ return AVERROR(ENOMEM);
+
/* The next thing is a segment. */
pos = avio_tell(matroska->ctx->pb);
res = ebml_parse(matroska, matroska_segments, matroska);
@@ -3006,7 +3012,7 @@ static int matroska_read_header(AVFormatContext *s)
st->disposition |= AV_DISPOSITION_ATTACHED_PIC;
st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
- av_init_packet(pkt);
+ av_packet_unref(pkt);
pkt->buf = attachments[j].bin.buf;
attachments[j].bin.buf = NULL;
pkt->data = attachments[j].bin.data;
@@ -3238,7 +3244,7 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska,
while (track->audio.pkt_cnt) {
int ret;
- AVPacket pktl, *pkt = &pktl;
+ AVPacket *pkt = matroska->pkt;
ret = av_new_packet(pkt, a);
if (ret < 0) {
@@ -3375,7 +3381,7 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska,
uint64_t duration,
int64_t pos)
{
- AVPacket pktl, *pkt = &pktl;
+ AVPacket *pkt = matroska->pkt;
uint8_t *id, *settings, *text, *buf;
int id_len, settings_len, text_len;
uint8_t *p, *q;
@@ -3492,7 +3498,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska,
{
uint8_t *pkt_data = data;
int res = 0;
- AVPacket pktl, *pkt = &pktl;
+ AVPacket *pkt = matroska->pkt;
if (st->codecpar->codec_id == AV_CODEC_ID_WAVPACK) {
res = matroska_parse_wavpack(track, &pkt_data, &pkt_size);
@@ -3522,7 +3528,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska,
if (!pkt_size && !additional_size)
goto no_output;
- av_init_packet(pkt);
+ av_packet_unref(pkt);
if (!buf)
pkt->buf = av_buffer_create(pkt_data, pkt_size + AV_INPUT_BUFFER_PADDING_SIZE,
NULL, NULL, 0);
@@ -3896,6 +3902,7 @@ static int matroska_read_close(AVFormatContext *s)
int n;
matroska_clear_queue(matroska);
+ av_packet_free(&matroska->pkt);
for (n = 0; n < matroska->tracks.nb_elem; n++)
if (tracks[n].type == MATROSKA_TRACK_TYPE_AUDIO)