aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRodger Combs <rodger.combs@gmail.com>2015-03-29 10:57:09 -0600
committerMichael Niedermayer <michaelni@gmx.at>2015-03-29 19:04:17 +0200
commitde2aaf1a2a14c07793a99c41596e0b436ec3736d (patch)
tree2f056987f5bd1821bcf5f63272a096aff75dddb7
parent9573737dfbe530158b7ecf7a3acbe9971c20cb0e (diff)
downloadffmpeg-de2aaf1a2a14c07793a99c41596e0b436ec3736d.tar.gz
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@gmx.at>
-rw-r--r--libavformat/segment.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libavformat/segment.c b/libavformat/segment.c
index c36d812a46..7b8fdade68 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: