diff mbox series

[FFmpeg-devel,9/9] fftools/ffmpeg: move derivation of frame duration from filter framerate

Message ID 20231001125552.23976-9-anton@khirnov.net
State Accepted
Commit 8d12762b42c27ffc0b4ce9890bc622c96c524549
Headers show
Series [FFmpeg-devel,1/9] lavfi/yadif: update output frame durations | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov Oct. 1, 2023, 12:55 p.m. UTC
From ffmpeg_enc to ffmpeg_filter, which is a more appropriate
place for it.
---
 fftools/ffmpeg_enc.c    | 9 +--------
 fftools/ffmpeg_filter.c | 6 +++++-
 2 files changed, 6 insertions(+), 9 deletions(-)
diff mbox series

Patch

diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 6c00156121..ec9cebbd96 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -1109,16 +1109,9 @@  static int do_video_out(OutputFile *of, OutputStream *ost, AVFrame *frame)
     int64_t nb_frames, nb_frames_prev, i;
     double duration = 0;
 
-    if (frame) {
-        FrameData *fd = frame_data(frame);
-
+    if (frame)
         duration = frame->duration * av_q2d(frame->time_base) / av_q2d(enc->time_base);
 
-        if (duration <= 0 &&
-            fd->frame_rate_filter.num > 0 && fd->frame_rate_filter.den > 0)
-            duration = 1 / (av_q2d(fd->frame_rate_filter) * av_q2d(enc->time_base));
-    }
-
     video_sync_process(of, ost, frame, duration,
                        &nb_frames, &nb_frames_prev);
 
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 9bf870b615..b6348d7f87 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -1817,8 +1817,12 @@  static int fg_output_step(OutputFilterPriv *ofp, int flush)
 
     if (ost->type == AVMEDIA_TYPE_VIDEO) {
         AVRational fr = av_buffersink_get_frame_rate(filter);
-        if (fr.num > 0 && fr.den > 0)
+        if (fr.num > 0 && fr.den > 0) {
             fd->frame_rate_filter = fr;
+
+            if (!frame->duration)
+                frame->duration = av_rescale_q(1, av_inv_q(fr), frame->time_base);
+        }
     }
 
     ret = enc_frame(ost, frame);