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

Anton Khirnov git at videolan.org
Tue Oct 3 18:01:21 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Fri Jul 21 18:39:08 2023 +0200| [8d12762b42c27ffc0b4ce9890bc622c96c524549] | committer: Anton Khirnov

fftools/ffmpeg: move derivation of frame duration from filter framerate

>From ffmpeg_enc to ffmpeg_filter, which is a more appropriate
place for it.

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

 fftools/ffmpeg_enc.c    | 9 +--------
 fftools/ffmpeg_filter.c | 6 +++++-
 2 files changed, 6 insertions(+), 9 deletions(-)

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);



More information about the ffmpeg-cvslog mailing list