diff --git a/ffmpeg.c b/ffmpeg.c index 9cff55714c181f1cfa7c9c50f6c5b08adfe4cc07..fd45afb837f2bcd1cb090593bbeb37f1f52b4ae7 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -962,7 +962,9 @@ static void do_video_out(AVFormatContext *s, } case VSYNC_CFR: // FIXME set to 0.5 after we fix some dts/pts bugs like in avidec.c - if (delta < -1.1) + if (frame_drop_threshold && delta < frame_drop_threshold && ost->frame_number) { + nb_frames = 0; + } else if (delta < -1.1) nb_frames = 0; else if (delta > 1.1) { nb_frames = lrintf(delta); diff --git a/ffmpeg.h b/ffmpeg.h index cb425b324af9a5f1fd020ae5b93aaf1c95a6d6c4..d2e0c5c3e920bc30b0b0d36999d068b5b83aa663 100644 --- a/ffmpeg.h +++ b/ffmpeg.h @@ -482,6 +482,7 @@ extern float dts_error_threshold; extern int audio_volume; extern int audio_sync_method; extern int video_sync_method; +extern float frame_drop_threshold; extern int do_benchmark; extern int do_benchmark_all; extern int do_deinterlace; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index c5e38967faccd0cfe6e3f83e8e26acec15b4d6a3..56b882eead5c160f11190f6c285ec3d3d61a8df5 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -86,6 +86,7 @@ float dts_error_threshold = 3600*30; int audio_volume = 256; int audio_sync_method = 0; int video_sync_method = VSYNC_AUTO; +float frame_drop_threshold = 0; int do_deinterlace = 0; int do_benchmark = 0; int do_benchmark_all = 0; @@ -2873,6 +2874,8 @@ const OptionDef options[] = { " \"dv\", \"dv50\", \"pal-vcd\", \"ntsc-svcd\", ...)", "type" }, { "vsync", HAS_ARG | OPT_EXPERT, { opt_vsync }, "video sync method", "" }, + { "frame_drop_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &frame_drop_threshold }, + "frame drop threshold", "" }, { "async", HAS_ARG | OPT_INT | OPT_EXPERT, { &audio_sync_method }, "audio sync method", "" }, { "adrift_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, { &audio_drift_threshold },