fftools/ffmpeg_enc: rename next_picture to frame
The name is misleading, because it is not a picture in the sense of MPEG terminology (which define "picture" as "frame or field"), but always a full frame. 'next' is also redundant and/or misleading, because it is the _current_ frame to be encoded.
This commit is contained in:
parent
c94e9d03b4
commit
403088cb67
@ -873,14 +873,14 @@ early_exit:
|
||||
* desired target framerate (if any).
|
||||
*/
|
||||
static void video_sync_process(OutputFile *of, OutputStream *ost,
|
||||
AVFrame *next_picture, double duration,
|
||||
AVFrame *frame, double duration,
|
||||
int64_t *nb_frames, int64_t *nb_frames_prev)
|
||||
{
|
||||
Encoder *e = ost->enc;
|
||||
double delta0, delta;
|
||||
|
||||
double sync_ipts = adjust_frame_pts_to_encoder_tb(of, ost, next_picture);
|
||||
/* delta0 is the "drift" between the input frame (next_picture) and
|
||||
double 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. */
|
||||
delta0 = sync_ipts - e->next_pts;
|
||||
delta = delta0 + duration;
|
||||
@ -923,18 +923,18 @@ static void video_sync_process(OutputFile *of, OutputStream *ost,
|
||||
if (delta0 > 1.1)
|
||||
*nb_frames_prev = llrintf(delta0 - 0.6);
|
||||
}
|
||||
next_picture->duration = 1;
|
||||
frame->duration = 1;
|
||||
break;
|
||||
case VSYNC_VFR:
|
||||
if (delta <= -0.6)
|
||||
*nb_frames = 0;
|
||||
else if (delta > 0.6)
|
||||
e->next_pts = llrint(sync_ipts);
|
||||
next_picture->duration = duration;
|
||||
frame->duration = duration;
|
||||
break;
|
||||
case VSYNC_DROP:
|
||||
case VSYNC_PASSTHROUGH:
|
||||
next_picture->duration = duration;
|
||||
frame->duration = duration;
|
||||
e->next_pts = llrint(sync_ipts);
|
||||
break;
|
||||
default:
|
||||
@ -994,10 +994,8 @@ force_keyframe:
|
||||
return AV_PICTURE_TYPE_I;
|
||||
}
|
||||
|
||||
/* May modify/reset next_picture */
|
||||
static void do_video_out(OutputFile *of,
|
||||
OutputStream *ost,
|
||||
AVFrame *next_picture)
|
||||
/* May modify/reset frame */
|
||||
static void do_video_out(OutputFile *of, OutputStream *ost, AVFrame *frame)
|
||||
{
|
||||
int ret;
|
||||
Encoder *e = ost->enc;
|
||||
@ -1007,8 +1005,8 @@ static void do_video_out(OutputFile *of,
|
||||
double duration = 0;
|
||||
AVFilterContext *filter = ost->filter->filter;
|
||||
|
||||
if (next_picture)
|
||||
duration = lrintf(next_picture->duration * av_q2d(next_picture->time_base) / av_q2d(enc->time_base));
|
||||
if (frame)
|
||||
duration = lrintf(frame->duration * av_q2d(frame->time_base) / av_q2d(enc->time_base));
|
||||
|
||||
if (duration <= 0 && ost->frame_rate.num)
|
||||
duration = FFMIN(duration, 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)));
|
||||
@ -1017,13 +1015,13 @@ static void do_video_out(OutputFile *of,
|
||||
if (duration <= 0 && frame_rate.num > 0 && frame_rate.den > 0)
|
||||
duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base));
|
||||
|
||||
if (!next_picture) {
|
||||
if (!frame) {
|
||||
//end, flushing
|
||||
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,
|
||||
video_sync_process(of, ost, frame, duration,
|
||||
&nb_frames, &nb_frames_prev);
|
||||
}
|
||||
|
||||
@ -1051,8 +1049,8 @@ static void do_video_out(OutputFile *of,
|
||||
dup_warning *= 10;
|
||||
}
|
||||
}
|
||||
ost->last_dropped = nb_frames == nb_frames_prev && next_picture;
|
||||
ost->kf.dropped_keyframe = ost->last_dropped && next_picture && next_picture->key_frame;
|
||||
ost->last_dropped = nb_frames == nb_frames_prev && frame;
|
||||
ost->kf.dropped_keyframe = ost->last_dropped && frame && frame->key_frame;
|
||||
|
||||
/* duplicates frame if needed */
|
||||
for (i = 0; i < nb_frames; i++) {
|
||||
@ -1061,7 +1059,7 @@ static void do_video_out(OutputFile *of,
|
||||
if (i < nb_frames_prev && e->last_frame->buf[0]) {
|
||||
in_picture = e->last_frame;
|
||||
} else
|
||||
in_picture = next_picture;
|
||||
in_picture = frame;
|
||||
|
||||
if (!in_picture)
|
||||
return;
|
||||
@ -1085,8 +1083,8 @@ static void do_video_out(OutputFile *of,
|
||||
}
|
||||
|
||||
av_frame_unref(e->last_frame);
|
||||
if (next_picture)
|
||||
av_frame_move_ref(e->last_frame, next_picture);
|
||||
if (frame)
|
||||
av_frame_move_ref(e->last_frame, frame);
|
||||
}
|
||||
|
||||
void enc_frame(OutputStream *ost, AVFrame *frame)
|
||||
|
Loading…
x
Reference in New Issue
Block a user