]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/oggenc.c
Merge commit '95b7fa1729b93bbb3f4fb85a5c0cb53cf970c3c7'
[ffmpeg] / libavformat / oggenc.c
index bec3917a219ef3aaa38bdb0fafe027558df2aaa3..6c50fc3521e5e640c8d5a47e15b939e39fac21fa 100644 (file)
@@ -554,7 +554,7 @@ static int ogg_write_header(AVFormatContext *s)
     return 0;
 }
 
-static int ogg_write_packet(AVFormatContext *s, AVPacket *pkt)
+static int ogg_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
 {
     AVStream *st = s->streams[pkt->stream_index];
     OGGStreamContext *oggstream = st->priv_data;
@@ -592,6 +592,23 @@ static int ogg_write_packet(AVFormatContext *s, AVPacket *pkt)
     return 0;
 }
 
+static int ogg_write_packet(AVFormatContext *s, AVPacket *pkt)
+{
+    int i;
+
+    if (pkt)
+        return ogg_write_packet_internal(s, pkt);
+
+    for (i = 0; i < s->nb_streams; i++) {
+        OGGStreamContext *oggstream = s->streams[i]->priv_data;
+        if (oggstream->page.segments_count)
+            ogg_buffer_page(s, oggstream);
+    }
+
+    ogg_write_pages(s, 2);
+    return 0;
+}
+
 static int ogg_write_trailer(AVFormatContext *s)
 {
     int i;
@@ -647,7 +664,7 @@ AVOutputFormat ff_ogg_muxer = {
     .write_header      = ogg_write_header,
     .write_packet      = ogg_write_packet,
     .write_trailer     = ogg_write_trailer,
-    .flags             = AVFMT_TS_NEGATIVE,
+    .flags             = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
     .priv_class        = &ogg_muxer_class,
 };
 #endif