[FFmpeg-cvslog] Revert "avcodec/nvenc: fix b-frame DTS behavior with fractional framerates"

Timo Rothenpieler git at videolan.org
Thu Jun 15 02:02:37 EEST 2023


ffmpeg | branch: master | Timo Rothenpieler <timo at rothenpieler.org> | Thu Jun 15 00:45:44 2023 +0200| [ac7c265b33b52f914ebe05e581bbe9343eca1186] | committer: Timo Rothenpieler

Revert "avcodec/nvenc: fix b-frame DTS behavior with fractional framerates"

This reverts commit 9a245bdf5d7860b8bc5e5c21a105a075925b719a.

This commit basically broke all samples with fractional framerates,
rather than fixing them.
I at this point do not understand the original issue anymore, and I'm
not sure how this slipped my initial testing.
All my test samples must have happened to have a simple timebase.

The actual dts values pretty much always are just a simple chain of
1,2,3,4,5,... Or maybe slightly bigger steps. Each increase by one means
an advance in time by one unit of the timebase.
So a fractional framerate/timebase is already not an issue.

So with this patch applied, the calculation might end up substracting
huge values (1001 is a common one) from the dts, which would be an
offset of that many frames, not of that many fractions of a second.
This broke at least muxing into mp4, if the sample happened to have a
fractional framerate.

I do not thing the original issue this patch tried to fix existed in the
first place, so it can be reverted without further consequences.

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

 libavcodec/nvenc.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 50371d6336..7874cb887b 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -2285,11 +2285,10 @@ static int nvenc_set_timestamp(AVCodecContext *avctx,
     if (avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) {
 FF_DISABLE_DEPRECATION_WARNINGS
         pkt->dts = dts -
-            FFMAX(ctx->encode_config.frameIntervalP - 1, 0)
 #if FF_API_TICKS_PER_FRAME
-            * FFMAX(avctx->ticks_per_frame, 1)
+            FFMAX(avctx->ticks_per_frame, 1) *
 #endif
-            * FFMAX(avctx->time_base.num, 1);
+            FFMAX(ctx->encode_config.frameIntervalP - 1, 0);
 FF_ENABLE_DEPRECATION_WARNINGS
     } else {
         pkt->dts = pkt->pts;



More information about the ffmpeg-cvslog mailing list