diff options
author | Mark Thompson <sw@jkqxz.net> | 2017-02-12 23:47:58 +0000 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2017-02-15 21:31:15 +0000 |
commit | 82989bd98c7f4e87f59af2147b645b8fd8f31c53 (patch) | |
tree | 87f65069397052966372b596c471987b0222a1d2 | |
parent | 030de53e9cc225dc767458aedcc87efd457b4f3b (diff) | |
download | ffmpeg-82989bd98c7f4e87f59af2147b645b8fd8f31c53.tar.gz |
avconv: Move rescale to stream timebase before monotonisation
If the stream timebase is coarser than the muxing timebase then the
monotonisation process may fail because adding one to the timestamp
need not actually produce a different timestamp after the rescale.
-rw-r--r-- | avconv.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -326,6 +326,8 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost) } } + av_packet_rescale_ts(pkt, ost->mux_timebase, ost->st->time_base); + if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS) && ost->last_mux_dts != AV_NOPTS_VALUE && pkt->dts < ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT)) { @@ -349,7 +351,6 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost) ost->packets_written++; pkt->stream_index = ost->index; - av_packet_rescale_ts(pkt, ost->mux_timebase, ost->st->time_base); ret = av_interleaved_write_frame(s, pkt); if (ret < 0) { @@ -1006,7 +1007,7 @@ FF_ENABLE_DEPRECATION_WARNINGS vid = 1; } /* compute min output value */ - pts = (double)ost->last_mux_dts * av_q2d(ost->mux_timebase); + pts = (double)ost->last_mux_dts * av_q2d(ost->st->time_base); if ((pts < ti1) && (pts > 0)) ti1 = pts; } |