OSDN Git Service

segment: Use the public av_write_header/av_write_trailer functions
authorMartin Storsjö <martin@martin.st>
Sat, 25 Feb 2012 23:31:14 +0000 (01:31 +0200)
committerMartin Storsjö <martin@martin.st>
Thu, 4 Oct 2012 10:52:09 +0000 (13:52 +0300)
With this change, the segmenter muxer doesn't rely on anything
not available/supported to libavformat external users, making
the segmenter muxer do things just like a normal segmenter
application using libavformat would do.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/segment.c

index ccd8a91..20adb73 100644 (file)
@@ -62,42 +62,18 @@ static int segment_start(AVFormatContext *s)
                           &s->interrupt_callback, NULL)) < 0)
         return err;
 
-    if (!oc->priv_data && oc->oformat->priv_data_size > 0) {
-        oc->priv_data = av_mallocz(oc->oformat->priv_data_size);
-        if (!oc->priv_data) {
-            avio_close(oc->pb);
-            return AVERROR(ENOMEM);
-        }
-        if (oc->oformat->priv_class) {
-            *(const AVClass**)oc->priv_data = oc->oformat->priv_class;
-            av_opt_set_defaults(oc->priv_data);
-        }
-    }
-
-    if ((err = oc->oformat->write_header(oc)) < 0) {
-        goto fail;
-    }
+    if ((err = avformat_write_header(oc, NULL)) < 0)
+        return err;
 
     return 0;
-
-fail:
-    avio_close(oc->pb);
-    av_freep(&oc->priv_data);
-
-    return err;
 }
 
 static int segment_end(AVFormatContext *oc)
 {
     int ret = 0;
 
-    if (oc->oformat->write_trailer)
-        ret = oc->oformat->write_trailer(oc);
-
+    av_write_trailer(oc);
     avio_close(oc->pb);
-    if (oc->oformat->priv_class)
-        av_opt_free(oc->priv_data);
-    av_freep(&oc->priv_data);
 
     return ret;
 }