diff options
author | Benjamin Steffes <benjaminst123@gmail.com> | 2016-03-14 13:44:24 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2016-03-16 19:58:14 +0100 |
commit | 06267afe1cec91656447458e029900dbe8536603 (patch) | |
tree | d87c8916890964cf1c61fa26f9ac40d15439b659 | |
parent | 50ef7361cb5f78c94da2323f3bae86c6bbd618c8 (diff) | |
download | ffmpeg-06267afe1cec91656447458e029900dbe8536603.tar.gz |
Fix detelecine filter for patterns like 3444 or 33333334.
Signed-off-by: Benjamin Steffes <benjaminst123@gmail.com>
Signed-off-by: Carl Eugen Hoyos <cehoyos@ag.or.at>
-rw-r--r-- | libavfilter/vf_detelecine.c | 40 |
1 files 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 |