summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2014-11-17 13:31:47 +0200
committerMartin Storsjö <martin@martin.st>2014-11-17 23:18:55 +0200
commit9257692ac15eff7b07540c1f61cebde0d8823fbd (patch)
tree6585f4ad7f959524ba5fad02f6eb70a89cc77ac7
parentc302d034ba2690a935df8bf7e4f5d44ed86e8d5c (diff)
downloadffmpeg-9257692ac15eff7b07540c1f61cebde0d8823fbd.tar.gz
lavf: Only initialize s->offset once when using avoid_negative_ts make_zero
When given a stream starting at dts=0, it would previously consider s->offset as uninitialized and set an offset when the second packet was written, ending up writing two packets with dts=0. By initializing this field to AV_NOPTS_VALUE, we make sure that we only initialize it once, on the first packet. Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavformat/mux.c4
-rw-r--r--libavformat/options.c1
2 files changed, 3 insertions, 2 deletions
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 87220ecd63..9aee224d1f 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -329,12 +329,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
AVRational time_base = s->streams[pkt->stream_index]->time_base;
int64_t offset = 0;
- if (!s->offset && pkt->dts != AV_NOPTS_VALUE &&
+ if (s->offset == AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
(pkt->dts < 0 || s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_MAKE_ZERO)) {
s->offset = -pkt->dts;
s->offset_timebase = time_base;
}
- if (s->offset)
+ if (s->offset != AV_NOPTS_VALUE)
offset = av_rescale_q(s->offset, s->offset_timebase, time_base);
if (pkt->dts != AV_NOPTS_VALUE)
diff --git a/libavformat/options.c b/libavformat/options.c
index a5646df997..ad47004651 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -101,6 +101,7 @@ AVFormatContext *avformat_alloc_context(void)
ic = av_malloc(sizeof(AVFormatContext));
if (!ic) return ic;
avformat_get_context_defaults(ic);
+ ic->offset = AV_NOPTS_VALUE;
ic->internal = av_mallocz(sizeof(*ic->internal));
if (!ic->internal) {