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().
pull/389/head
Anton Khirnov 2 years ago
parent 87ae84e4af
commit 83da6d3f54
  1. 1
      fftools/ffmpeg.h
  2. 18
      fftools/ffmpeg_enc.c

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

@ -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++;

Loading…
Cancel
Save