diff mbox series

[FFmpeg-devel,02/27] fftools/ffmpeg_enc: move handling video frame duration to video_sync_process()

Message ID 20230919191044.18873-3-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel,01/27] fftools/ffmpeg: move derivation of frame duration from filter framerate | expand

Commit Message

Anton Khirnov Sept. 19, 2023, 7:10 p.m. UTC
That is a more appropriate place for this.
---
 fftools/ffmpeg_enc.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 9b8b3e0226..9aa00f682c 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -965,12 +965,12 @@  early_exit:
  * should this (and possibly previous) frame be repeated in order to conform to
  * desired target framerate (if any).
  */
-static void video_sync_process(OutputFile *of, OutputStream *ost,
-                               AVFrame *frame, double duration,
+static void video_sync_process(OutputFile *of, OutputStream *ost, AVFrame *frame,
                                int64_t *nb_frames, int64_t *nb_frames_prev)
 {
     Encoder *e = ost->enc;
-    double delta0, delta, sync_ipts;
+    AVCodecContext *enc = ost->enc_ctx;
+    double delta0, delta, sync_ipts, duration;
 
     if (!frame) {
         *nb_frames_prev = *nb_frames = mid_pred(e->frames_prev_hist[0],
@@ -979,6 +979,8 @@  static void video_sync_process(OutputFile *of, OutputStream *ost,
         goto finish;
     }
 
+    duration = lrintf(frame->duration * av_q2d(frame->time_base) / av_q2d(enc->time_base));
+
     sync_ipts = adjust_frame_pts_to_encoder_tb(of, ost, frame);
     /* delta0 is the "drift" between the input frame and
      * where it would fall in the output. */
@@ -1107,12 +1109,8 @@  static int do_video_out(OutputFile *of, OutputStream *ost, AVFrame *frame)
     Encoder *e = ost->enc;
     AVCodecContext *enc = ost->enc_ctx;
     int64_t nb_frames, nb_frames_prev, i;
-    double duration = 0;
 
-    if (frame)
-        duration = lrintf(frame->duration * av_q2d(frame->time_base) / av_q2d(enc->time_base));
-
-    video_sync_process(of, ost, frame, duration,
+    video_sync_process(of, ost, frame,
                        &nb_frames, &nb_frames_prev);
 
     if (nb_frames_prev == 0 && ost->last_dropped) {