lavf/segment: move list filename printing logic from segment_end() to segment_start()
authorStefano Sabatini <stefasab@gmail.com>
Fri, 13 Jan 2012 23:16:55 +0000 (00:16 +0100)
committerStefano Sabatini <stefasab@gmail.com>
Tue, 3 Jul 2012 19:48:50 +0000 (21:48 +0200)
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

index a6ddf90..17ef20a 100644 (file)
@@ -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);
 
         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);
     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;
     }
 
         goto fail;
     }
 
-    if (seg->list) {
-        avio_printf(seg->pb, "%s\n", oc->filename);
-        avio_flush(seg->pb);
-    }
-
 fail:
     if (ret) {
         if (oc) {
 fail:
     if (ret) {
         if (oc) {
@@ -213,17 +220,6 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt)
 
         if (ret)
             goto fail;
 
         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);
     }
 
     ret = oc->oformat->write_packet(oc, pkt);