diff options
author | Gabriel Hege <g+ffmpeg@hege.cc> | 2025-04-16 13:51:06 +0200 |
---|---|---|
committer | Nuo Mi <nuomi2021@gmail.com> | 2025-05-31 09:47:50 +0800 |
commit | 6c291232cf4a1e8f176636ee07652c9164a6d73d (patch) | |
tree | 5df686f4dbc7990651e5d9e18be094758409cbda | |
parent | a02e880e35926c37797c87a215a745245570f369 (diff) | |
download | ffmpeg-master.tar.gz |
The default behavior for VVenC (since v1.10.0) is to create an IDR with
leading pictures for the first picture in decoding order (POC 32). This
leads to FFmpeg generating an edit list with an empty entry, skipping
the leading pictures.
This patch fixes the calculation for the start_pts, while the DTS is
negative (as produced by vvenc).
Signed-off-by: Gabriel Hege <g+ffmpeg@hege.cc>
-rw-r--r-- | libavformat/movenc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 9392ba5370..f11633525e 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -3966,7 +3966,7 @@ static int mov_write_edts_tag(AVIOContext *pb, MOVMuxContext *mov, int flags = 0; if (track->entry) { - if (start_dts != track->cluster[0].dts || start_ct != track->cluster[0].cts) { + if (start_dts != track->cluster[0].dts || (start_ct != track->cluster[0].cts && track->cluster[0].dts >= 0)) { av_log(mov->fc, AV_LOG_DEBUG, "EDTS using dts:%"PRId64" cts:%d instead of dts:%"PRId64" cts:%"PRId64" tid:%d\n", @@ -6928,7 +6928,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) trk->flags |= MOV_TRACK_CTTS; trk->cluster[trk->entry].cts = pkt->pts - pkt->dts; trk->cluster[trk->entry].flags = 0; - if (trk->start_cts == AV_NOPTS_VALUE) + if (trk->start_cts == AV_NOPTS_VALUE || (pkt->dts <= 0 && trk->start_cts > pkt->pts - pkt->dts)) trk->start_cts = pkt->pts - pkt->dts; if (trk->end_pts == AV_NOPTS_VALUE) trk->end_pts = trk->cluster[trk->entry].dts + |