[FFmpeg-devel] [PATCH 1/3] avformat/aiffenc: Use standard packet list functions

Matthieu Bouron matthieu.bouron at gmail.com
Wed Oct 2 10:05:35 EEST 2019


On Wed, Oct 02, 2019 at 06:04:10AM +0200, Andreas Rheinhardt wrote:
> Up until now, aiffenc didn't rely on the standard functions for adding
> an element to a linked list and freeing the list, but instead
> reimplemented them. This has been changed.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavformat/aiffenc.c | 33 ++++-----------------------------
>  1 file changed, 4 insertions(+), 29 deletions(-)
> 
> diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c
> index aab37418f0..dd8b8c3d01 100644
> --- a/libavformat/aiffenc.c
> +++ b/libavformat/aiffenc.c
> @@ -36,7 +36,7 @@ typedef struct AIFFOutputContext {
>      int64_t frames;
>      int64_t ssnd;
>      int audio_stream_idx;
> -    AVPacketList *pict_list;
> +    AVPacketList *pict_list, *pict_list_end;
>      int write_id3v2;
>      int id3v2_version;
>  } AIFFOutputContext;
> @@ -215,9 +215,6 @@ static int aiff_write_packet(AVFormatContext *s, AVPacket *pkt)
>      if (pkt->stream_index == aiff->audio_stream_idx)
>          avio_write(pb, pkt->data, pkt->size);
>      else {
> -        int ret;
> -        AVPacketList *pict_list, *last;
> -
>          if (s->streams[pkt->stream_index]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO)
>              return 0;
>  
> @@ -229,24 +226,8 @@ static int aiff_write_packet(AVFormatContext *s, AVPacket *pkt)
>          if (s->streams[pkt->stream_index]->nb_frames >= 1)
>              return 0;
>  
> -        pict_list = av_mallocz(sizeof(AVPacketList));
> -        if (!pict_list)
> -            return AVERROR(ENOMEM);
> -
> -        ret = av_packet_ref(&pict_list->pkt, pkt);
> -        if (ret < 0) {
> -            av_freep(&pict_list);
> -            return ret;
> -        }
> -
> -        if (!aiff->pict_list)
> -            aiff->pict_list = pict_list;
> -        else {
> -            last = aiff->pict_list;
> -            while (last->next)
> -                last = last->next;
> -            last->next = pict_list;
> -        }
> +        return ff_packet_list_put(&aiff->pict_list, &aiff->pict_list_end,
> +                                  pkt, FF_PACKETLIST_FLAG_REF_PACKET);
>      }
>  
>      return 0;
> @@ -257,7 +238,6 @@ static int aiff_write_trailer(AVFormatContext *s)
>      int ret;
>      AVIOContext *pb = s->pb;
>      AIFFOutputContext *aiff = s->priv_data;
> -    AVPacketList *pict_list = aiff->pict_list;
>      AVCodecParameters *par = s->streams[aiff->audio_stream_idx]->codecpar;
>  
>      /* Chunks sizes must be even */
> @@ -293,12 +273,7 @@ static int aiff_write_trailer(AVFormatContext *s)
>          avio_flush(pb);
>      }
>  
> -    while (pict_list) {
> -        AVPacketList *next = pict_list->next;
> -        av_packet_unref(&pict_list->pkt);
> -        av_freep(&pict_list);
> -        pict_list = next;
> -    }
> +    ff_packet_list_free(&aiff->pict_list, &aiff->pict_list_end);
>  
>      return 0;
>  }
> -- 
> 2.21.0

LGTM.

Fate passes and patch tested with a few remux of aiff files containing
id3v2 tags + attached pics (ffmpeg -i input.aiff -write_id3v2 1
output.aiff).

Thanks.

-- 
Matthieu B.


More information about the ffmpeg-devel mailing list