[FFmpeg-cvslog] fftools/ffmpeg_enc: move handling video frame duration to video_sync_process()

Anton Khirnov git at videolan.org
Tue Oct 10 13:45:47 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Jul 23 09:58:29 2023 +0200| [a9b9e771b399b39d2d60d626ce447ae806c80cf0] | committer: Anton Khirnov

fftools/ffmpeg_enc: move handling video frame duration to video_sync_process()

That is a more appropriate place for this.

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

 fftools/ffmpeg_enc.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index be35465c28..d21e85397e 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -953,12 +953,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],
@@ -967,6 +967,8 @@ static void video_sync_process(OutputFile *of, OutputStream *ost,
         goto finish;
     }
 
+    duration = 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. */
@@ -1095,12 +1097,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 = 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) {



More information about the ffmpeg-cvslog mailing list