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

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Wed Oct 2 07:04:10 EEST 2019


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



More information about the ffmpeg-devel mailing list