[FFmpeg-devel] [PATCH 21/50] avformat/matroskadec: use av_packet_alloc() to allocate packets
James Almer
jamrial at gmail.com
Mon Feb 8 17:27:53 EET 2021
On 2/8/2021 12:22 PM, Andreas Rheinhardt wrote:
> James Almer:
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>> libavformat/matroskadec.c | 17 ++++++++++++-----
>> 1 file changed, 12 insertions(+), 5 deletions(-)
>>
>> diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
>> index 374831baa3..9fad78c78b 100644
>> --- a/libavformat/matroskadec.c
>> +++ b/libavformat/matroskadec.c
>> @@ -365,6 +365,8 @@ typedef struct MatroskaDemuxContext {
>> /* byte position of the segment inside the stream */
>> int64_t segment_start;
>>
>> + AVPacket *pkt;
>> +
>> /* the packet queue */
>> AVPacketList *queue;
>> AVPacketList *queue_end;
>> @@ -2885,6 +2887,10 @@ static int matroska_read_header(AVFormatContext *s)
>> }
>> ebml_free(ebml_syntax, &ebml);
>>
>> + matroska->pkt = av_packet_alloc();
>> + if (!matroska->pkt)
>
> Missing AVERROR(ENOMEM).
This seems to be a common mistake in this set. Sorry.
> (I actually have an idea to completely remove the packet list from
> matroskadec.)
Should i commit this while you work on that, or just withdraw this
patch? It's not urgent at all, since any deprecation period is 2+ years.
Either option is fine by me.
>
>> + goto fail;
>> +
>> /* The next thing is a segment. */
>> pos = avio_tell(matroska->ctx->pb);
>> res = ebml_parse(matroska, matroska_segments, matroska);
>> @@ -2947,7 +2953,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;
>> @@ -3180,7 +3186,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) {
>> @@ -3317,7 +3323,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;
>> @@ -3434,7 +3440,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);
>> @@ -3464,7 +3470,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);
>> @@ -3838,6 +3844,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)
>>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
More information about the ffmpeg-devel
mailing list