[FFmpeg-devel] [PATCH] lavf/segment: move list filename printing logic from segment_end() to segment_start()

Stefano Sabatini stefasab at gmail.com
Fri Jun 29 17:18:38 CEST 2012


Allow to deal with the list file printing only in a single point, thus
simplifying logic, and allow a bit of factorization (no special case
needed when printing the first file name of the list).
---
 libavformat/segment.c |   28 ++++++++++++----------------
 1 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index a6ddf90..17ef20a 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -102,6 +102,18 @@ static int segment_end(AVFormatContext *s)
         av_log(s, AV_LOG_ERROR, "Failure occurred when ending segment '%s'\n",
                oc->filename);
 
+    if (seg->list) {
+        if (seg->list_size && !(seg->number % seg->list_size)) {
+            avio_close(seg->pb);
+            if ((ret = avio_open2(&seg->pb, seg->list, AVIO_FLAG_WRITE,
+                                  &s->interrupt_callback, NULL)) < 0)
+                goto end;
+        }
+        avio_printf(seg->pb, "%s\n", oc->filename);
+        avio_flush(seg->pb);
+    }
+
+end:
     avio_close(oc->pb);
     if (oc->oformat->priv_class)
         av_opt_free(oc->priv_data);
@@ -172,11 +184,6 @@ static int seg_write_header(AVFormatContext *s)
         goto fail;
     }
 
-    if (seg->list) {
-        avio_printf(seg->pb, "%s\n", oc->filename);
-        avio_flush(seg->pb);
-    }
-
 fail:
     if (ret) {
         if (oc) {
@@ -213,17 +220,6 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt)
 
         if (ret)
             goto fail;
-
-        if (seg->list) {
-            avio_printf(seg->pb, "%s\n", oc->filename);
-            avio_flush(seg->pb);
-            if (seg->list_size && !(seg->number % seg->list_size)) {
-                avio_close(seg->pb);
-                if ((ret = avio_open2(&seg->pb, seg->list, AVIO_FLAG_WRITE,
-                                      &s->interrupt_callback, NULL)) < 0)
-                    goto fail;
-            }
-        }
     }
 
     ret = oc->oformat->write_packet(oc, pkt);
-- 
1.7.5.4



More information about the ffmpeg-devel mailing list