From 06267afe1cec91656447458e029900dbe8536603 Mon Sep 17 00:00:00 2001 From: Benjamin Steffes Date: Mon, 14 Mar 2016 13:44:24 +0100 Subject: Fix detelecine filter for patterns like 3444 or 33333334. Signed-off-by: Benjamin Steffes Signed-off-by: Carl Eugen Hoyos --- libavfilter/vf_detelecine.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/libavfilter/vf_detelecine.c b/libavfilter/vf_detelecine.c index 6fd9aade07..f5ae350c05 100644 --- a/libavfilter/vf_detelecine.c +++ b/libavfilter/vf_detelecine.c @@ -195,21 +195,15 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpicref) s->nskip_fields -= 2; return 0; } else if (s->nskip_fields >= 1) { - if (s->occupied) { - s->occupied = 0; - s->nskip_fields--; - } - else { - for (i = 0; i < s->nb_planes; i++) { - av_image_copy_plane(s->temp->data[i], s->temp->linesize[i], - inpicref->data[i], inpicref->linesize[i], - s->stride[i], - s->planeheight[i]); - } - s->occupied = 1; - s->nskip_fields--; - return 0; + for (i = 0; i < s->nb_planes; i++) { + av_image_copy_plane(s->temp->data[i], s->temp->linesize[i], + inpicref->data[i], inpicref->linesize[i], + s->stride[i], + s->planeheight[i]); } + s->occupied = 1; + s->nskip_fields--; + return 0; } if (s->nskip_fields == 0) { @@ -243,15 +237,19 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpicref) s->stride[i], (s->planeheight[i] - !s->first_field + 1) / 2); } - len -= 2; - for (i = 0; i < s->nb_planes; i++) { - av_image_copy_plane(s->temp->data[i], s->temp->linesize[i], - inpicref->data[i], inpicref->linesize[i], - s->stride[i], - s->planeheight[i]); + + s->occupied = 0; + if (len <= 2) { + for (i = 0; i < s->nb_planes; i++) { + av_image_copy_plane(s->temp->data[i], s->temp->linesize[i], + inpicref->data[i], inpicref->linesize[i], + s->stride[i], + s->planeheight[i]); + } + s->occupied = 1; } - s->occupied = 1; out = 1; + len = (len >= 3) ? len - 3 : 0; } else { if (len >= 2) { // output THIS image as-is -- cgit v1.2.3