Browse Source

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
tags/n0.8
Baptiste Coudurier 14 years ago
parent
commit
902d49eef7
1 changed files with 12 additions and 2 deletions
  1. +12
    -2
      libavfilter/vf_yadif.c

+ 12
- 2
libavfilter/vf_yadif.c View File

@@ -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);
}



Loading…
Cancel
Save