[FFmpeg-cvslog] avformat/movenc: fix VVC encoding with leading pictures

Gabriel Hege git at videolan.org
Sat May 31 04:50:04 EEST 2025


ffmpeg | branch: master | Gabriel Hege <g+ffmpeg at hege.cc> | Wed Apr 16 13:51:06 2025 +0200| [6c291232cf4a1e8f176636ee07652c9164a6d73d] | committer: Nuo Mi

avformat/movenc: fix VVC encoding with leading pictures

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 at hege.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6c291232cf4a1e8f176636ee07652c9164a6d73d
---

 libavformat/movenc.c | 4 ++--
 1 file 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 +



More information about the ffmpeg-cvslog mailing list