ffmpeg: skip duration cliping for passthrough & drop modes
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
18
ffmpeg.c
18
ffmpeg.c
@ -904,13 +904,6 @@ static void do_video_out(AVFormatContext *s,
|
|||||||
sync_ipts = next_picture->pts;
|
sync_ipts = next_picture->pts;
|
||||||
delta0 = sync_ipts - ost->sync_opts;
|
delta0 = sync_ipts - ost->sync_opts;
|
||||||
delta = delta0 + duration;
|
delta = delta0 + duration;
|
||||||
if (delta0 < 0 && delta > 0) {
|
|
||||||
double cor = FFMIN(-delta0, duration);
|
|
||||||
av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
|
|
||||||
sync_ipts += cor;
|
|
||||||
duration -= cor;
|
|
||||||
delta0 += cor;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* by default, we output a single frame */
|
/* by default, we output a single frame */
|
||||||
nb0_frames = 0;
|
nb0_frames = 0;
|
||||||
@ -933,6 +926,17 @@ static void do_video_out(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (delta0 < 0 &&
|
||||||
|
delta > 0 &&
|
||||||
|
format_video_sync != VSYNC_PASSTHROUGH &&
|
||||||
|
format_video_sync != VSYNC_DROP) {
|
||||||
|
double cor = FFMIN(-delta0, duration);
|
||||||
|
av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
|
||||||
|
sync_ipts += cor;
|
||||||
|
duration -= cor;
|
||||||
|
delta0 += cor;
|
||||||
|
}
|
||||||
|
|
||||||
switch (format_video_sync) {
|
switch (format_video_sync) {
|
||||||
case VSYNC_VSCFR:
|
case VSYNC_VSCFR:
|
||||||
if (ost->frame_number == 0 && delta - duration >= 0.5) {
|
if (ost->frame_number == 0 && delta - duration >= 0.5) {
|
||||||
|
Reference in New Issue
Block a user