[FFmpeg-cvslog] lavf/segment: Mark output contexts as non-seekable when applicable

Rodger Combs git at videolan.org
Sun Mar 29 19:14:06 CEST 2015


ffmpeg | branch: master | Rodger Combs <rodger.combs at gmail.com> | Sun Mar 29 10:57:09 2015 -0600| [de2aaf1a2a14c07793a99c41596e0b436ec3736d] | committer: Michael Niedermayer

lavf/segment: Mark output contexts as non-seekable when applicable

This prevents sub-muxers from trying to seek back to the beginning of the
whole stream, only to find themselves overwriting some video data in the
current (often last) segment.

We only do this when not writing individual header/trailers.

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=de2aaf1a2a14c07793a99c41596e0b436ec3736d
---

 libavformat/segment.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index c36d812..7b8fdad 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -237,6 +237,8 @@ static int segment_start(AVFormatContext *s, int write_header)
         av_log(s, AV_LOG_ERROR, "Failed to open segment '%s'\n", oc->filename);
         return err;
     }
+    if (!seg->individual_header_trailer)
+        oc->pb->seekable = 0;
 
     if (oc->oformat->priv_class && oc->priv_data)
         av_opt_set(oc->priv_data, "mpegts_flags", "+resend_headers", 0);
@@ -680,6 +682,8 @@ static int seg_write_header(AVFormatContext *s)
             av_log(s, AV_LOG_ERROR, "Failed to open segment '%s'\n", oc->filename);
             goto fail;
         }
+        if (!seg->individual_header_trailer)
+            oc->pb->seekable = 0;
     } else {
         if ((ret = open_null_ctx(&oc->pb)) < 0)
             goto fail;
@@ -720,6 +724,8 @@ static int seg_write_header(AVFormatContext *s)
         if ((ret = avio_open2(&oc->pb, oc->filename, AVIO_FLAG_WRITE,
                               &s->interrupt_callback, NULL)) < 0)
             goto fail;
+        if (!seg->individual_header_trailer)
+            oc->pb->seekable = 0;
     }
 
 fail:



More information about the ffmpeg-cvslog mailing list