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

James Almer jamrial at gmail.com
Mon Feb 8 20:55:56 EET 2021


On 2/8/2021 3:43 PM, Andreas Rheinhardt wrote:
> James Almer:
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>>   libavformat/flacdec.c | 20 ++++++++++++--------
>>   1 file changed, 12 insertions(+), 8 deletions(-)
>>
>> diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c
>> index 6aca4755a1..7852a79d39 100644
>> --- a/libavformat/flacdec.c
>> +++ b/libavformat/flacdec.c
>> @@ -259,7 +259,7 @@ static int flac_probe(const AVProbeData *p)
>>   static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_index,
>>                                                int64_t *ppos, int64_t pos_limit)
>>   {
>> -    AVPacket pkt;
>> +    AVPacket *pkt;
>>       AVStream *st = s->streams[stream_index];
>>       AVCodecParserContext *parser;
>>       int ret;
>> @@ -268,9 +268,12 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde
>>       if (avio_seek(s->pb, *ppos, SEEK_SET) < 0)
>>           return AV_NOPTS_VALUE;
>>   
>> -    av_init_packet(&pkt);
>> +    pkt = av_packet_alloc();
>> +    if (!pkt)
>> +        return AV_NOPTS_VALUE;
>>       parser = av_parser_init(st->codecpar->codec_id);
>>       if (!parser){
>> +        av_packet_free(&pkt);
>>           return AV_NOPTS_VALUE;
>>       }
>>       parser->flags |= PARSER_FLAG_USE_CODEC_TS;
>> @@ -279,20 +282,20 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde
>>           uint8_t *data;
>>           int size;
>>   
>> -        ret = ff_raw_read_partial_packet(s, &pkt);
>> +        ret = ff_raw_read_partial_packet(s, pkt);
>>           if (ret < 0){
>>               if (ret == AVERROR(EAGAIN))
>>                   continue;
>>               else {
>> -                av_packet_unref(&pkt);
>> -                av_assert1(!pkt.size);
>> +                av_packet_unref(pkt);
>> +                av_assert1(!pkt->size);
>>               }
>>           }
>>           av_parser_parse2(parser, st->internal->avctx,
>> -                         &data, &size, pkt.data, pkt.size,
>> -                         pkt.pts, pkt.dts, *ppos);
>> +                         &data, &size, pkt->data, pkt->size,
>> +                         pkt->pts, pkt->dts, *ppos);
>>   
>> -        av_packet_unref(&pkt);
>> +        av_packet_unref(pkt);
>>           if (size) {
>>               if (parser->pts != AV_NOPTS_VALUE){
>>                   // seeking may not have started from beginning of a frame
>> @@ -304,6 +307,7 @@ static av_unused int64_t flac_read_timestamp(AVFormatContext *s, int stream_inde
>>           } else if (ret < 0)
>>               break;
>>       }
>> +    av_packet_free(&pkt);
>>       av_parser_close(parser);
>>       return pts;
>>   }
>>
> The parse_packet is unused during this function, so it can be reused.

The AVFormatInternal one? Good idea.


More information about the ffmpeg-devel mailing list