@@ -5917,7 +5917,18 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
* to signal the difference in starting time without an edit list.
* Thus move the timestamp for this first sample to 0, increasing
* its duration instead. */
- trk->cluster[trk->entry].dts = trk->start_dts = 0;
+ if (pkt->dts < INT32_MAX) {
+ trk->cluster[trk->entry].dts = trk->start_dts = 0;
+ } else {
+ /* Impossible to write a sample duration >= UINT32_MAX.
+ * Use INT32_MAX as a tight restriction.
+ */
+ trk->start_dts = pkt->dts;
+ av_log(s, AV_LOG_WARNING,
+ "Track %d starts with a nonzero dts %" PRId64
+ " which will be shifted to zero\n",
+ pkt->stream_index, pkt->dts);
+ }
}
if (trk->start_dts == AV_NOPTS_VALUE) {
trk->start_dts = pkt->dts;