InputStream *ist = ifilter->ist;
AVRational tb = ist->framerate.num ? av_inv_q(ist->framerate) :
ist->st->time_base;
- AVRational fr = ist->framerate.num ? ist->framerate :
- ist->st->r_frame_rate;
+ AVRational fr = ist->framerate;
AVRational sar;
AVBPrint args;
char name[255];
int pad_idx = in->pad_idx;
int ret;
- if (!ist->framerate.num && ist->st->codec->ticks_per_frame>1) {
- AVRational codec_fr = av_inv_q(ist->st->codec->time_base);
- AVRational avg_fr = ist->st->avg_frame_rate;
- codec_fr.den *= ist->st->codec->ticks_per_frame;
- if ( codec_fr.num>0 && codec_fr.den>0 && av_q2d(codec_fr) < av_q2d(fr)*0.7
- && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr)))>0.1)
- fr = codec_fr;
- }
+ if (!fr.num)
+ fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL);
if (ist->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist);
pad_idx = 0;
}
+ if (do_deinterlace) {
+ AVFilterContext *yadif;
+
+ snprintf(name, sizeof(name), "deinterlace input from stream %d:%d",
+ ist->file_index, ist->st->index);
+ if ((ret = avfilter_graph_create_filter(&yadif,
+ avfilter_get_by_name("yadif"),
+ name, "", NULL,
+ fg->graph)) < 0)
+ return ret;
+
+ if ((ret = avfilter_link(yadif, 0, first_filter, pad_idx)) < 0)
+ return ret;
+
+ first_filter = yadif;
+ pad_idx = 0;
+ }
+
if ((ret = avfilter_link(ifilter->filter, 0, first_filter, pad_idx)) < 0)
return ret;
return 0;