aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel Hege <g+ffmpeg@hege.cc>2025-04-16 13:51:06 +0200
committerNuo Mi <nuomi2021@gmail.com>2025-05-31 09:47:50 +0800
commit6c291232cf4a1e8f176636ee07652c9164a6d73d (patch)
tree5df686f4dbc7990651e5d9e18be094758409cbda
parenta02e880e35926c37797c87a215a745245570f369 (diff)
downloadffmpeg-master.tar.gz
avformat/movenc: fix VVC encoding with leading picturesHEADmaster
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.c4
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 +