[FFmpeg-cvslog] fftools/ffmpeg: move OutputStream.last_nb0_frames to Encoder

Anton Khirnov git at videolan.org
Thu Apr 13 16:41:52 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Mar 27 07:37:29 2023 +0200| [83da6d3f54fc85784e0ef843ee6e0c03e338722e] | committer: Anton Khirnov

fftools/ffmpeg: move OutputStream.last_nb0_frames to Encoder

It is video encoding-only and does not need to be visible outside of
ffmpeg_enc.c

Also, rename the variable to frames_prev_hist to be consistent with
the naming in do_video_out().

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

 fftools/ffmpeg.h     |  1 -
 fftools/ffmpeg_enc.c | 18 +++++++++++-------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 84418d8da5..b45a2039ce 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -590,7 +590,6 @@ typedef struct OutputStream {
     AVFrame *filtered_frame;
     AVPacket *pkt;
     int64_t last_dropped;
-    int64_t last_nb0_frames[3];
 
     /* video only */
     AVRational frame_rate;
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 5c56ad0325..7f6bd76f10 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -50,6 +50,10 @@ struct Encoder {
     AVFrame *last_frame;
     /* number of frames emitted by the video-encoding sync code */
     int64_t vsync_frame_number;
+    /* history of nb_frames_prev, i.e. the number of times the
+     * previous frame was duplicated by vsync code in recent
+     * do_video_out() calls */
+    int64_t frames_prev_hist[3];
 
     AVFrame *sq_frame;
 };
@@ -999,18 +1003,18 @@ static void do_video_out(OutputFile *of,
 
     if (!next_picture) {
         //end, flushing
-        nb_frames_prev = nb_frames = mid_pred(ost->last_nb0_frames[0],
-                                              ost->last_nb0_frames[1],
-                                              ost->last_nb0_frames[2]);
+        nb_frames_prev = nb_frames = mid_pred(e->frames_prev_hist[0],
+                                              e->frames_prev_hist[1],
+                                              e->frames_prev_hist[2]);
     } else {
         video_sync_process(of, ost, next_picture, duration,
                            &nb_frames, &nb_frames_prev);
     }
 
-    memmove(ost->last_nb0_frames + 1,
-            ost->last_nb0_frames,
-            sizeof(ost->last_nb0_frames[0]) * (FF_ARRAY_ELEMS(ost->last_nb0_frames) - 1));
-    ost->last_nb0_frames[0] = nb_frames_prev;
+    memmove(e->frames_prev_hist + 1,
+            e->frames_prev_hist,
+            sizeof(e->frames_prev_hist[0]) * (FF_ARRAY_ELEMS(e->frames_prev_hist) - 1));
+    e->frames_prev_hist[0] = nb_frames_prev;
 
     if (nb_frames_prev == 0 && ost->last_dropped) {
         nb_frames_drop++;



More information about the ffmpeg-cvslog mailing list