[FFmpeg-devel] [PATCH 21/50] avformat/matroskadec: use av_packet_alloc() to allocate packets

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Mon Feb 8 17:32:43 EET 2021


James Almer:
> 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.
> 

Yeah, the failure paths seem untested.

>> (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.
> 
I don't want to have deprecation warnings.

>>
>>> +        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".
>>
> 
> _______________________________________________
> 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