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.
---
As mentioned earlier on IRC.

Test case (from Michael Niedermayer):
./avconv -i Voting_Machine.wmv test.avi
<http://data.onas.ru/fun-clips/Voting_Machine.wmv>


 avconv.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/avconv.c b/avconv.c
index 94b6da2a8..4a01aa32b 100644
--- a/avconv.c
+++ b/avconv.c
@@ -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) {
-- 
2.11.0

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to