From 902d49eef75d422344c0dad1b31c01a3b21380af Mon Sep 17 00:00:00 2001 From: Baptiste Coudurier Date: Mon, 22 Nov 2010 20:42:08 +0000 Subject: In yadif filter, copy video props to output picture. Fix issue #2269. Interpolate pts for the second frame when using field output mode. Originally committed as revision 25798 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/vf_yadif.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'libavfilter/vf_yadif.c') diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c index 9e700f9d5b..5c4a2455d3 100644 --- a/libavfilter/vf_yadif.c +++ b/libavfilter/vf_yadif.c @@ -175,8 +175,17 @@ static void return_frame(AVFilterContext *ctx, int is_second) filter(ctx, yadif->out, tff ^ !is_second, tff); - if (is_second) + if (is_second) { + if (yadif->next->pts != AV_NOPTS_VALUE && + yadif->cur->pts != AV_NOPTS_VALUE) { + yadif->out->pts = + (yadif->next->pts&yadif->cur->pts) + + ((yadif->next->pts^yadif->cur->pts)>>1); + } else { + yadif->out->pts = AV_NOPTS_VALUE; + } avfilter_start_frame(ctx->outputs[0], yadif->out); + } avfilter_draw_slice(ctx->outputs[0], 0, link->h, 1); avfilter_end_frame(ctx->outputs[0]); @@ -206,7 +215,8 @@ static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref) yadif->out = avfilter_get_video_buffer(ctx->outputs[0], AV_PERM_WRITE | AV_PERM_PRESERVE | AV_PERM_REUSE, link->w, link->h); - yadif->out->pts = yadif->cur->pts; + avfilter_copy_buffer_ref_props(yadif->out, yadif->cur); + yadif->out->video->interlaced = 0; avfilter_start_frame(ctx->outputs[0], yadif->out); } -- cgit v1.2.3