summaryrefslogtreecommitdiff
path: root/libavfilter/vf_tinterlace.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-01-06 23:20:18 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-01-06 23:21:28 +0100
commitac3f6429ba5b596406da12746659f1fb7c5b7b07 (patch)
tree042224b8392f12cc7b26938fe157119294058902 /libavfilter/vf_tinterlace.c
parentf931b1ef450e67c211c6294788da3a1265c0af81 (diff)
vfilter/vf_tinterlace: Fix issues with linesize and cols
Based on patch by Vittorio Giovara <vittorio.giovara@gmail.com> from 696141e898193311c994b399a8dc60713709092f Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavfilter/vf_tinterlace.c')
-rw-r--r--libavfilter/vf_tinterlace.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/libavfilter/vf_tinterlace.c b/libavfilter/vf_tinterlace.c
index c644895ee0..f3411f99b6 100644
--- a/libavfilter/vf_tinterlace.c
+++ b/libavfilter/vf_tinterlace.c
@@ -197,20 +197,17 @@ void copy_picture_field(TInterlaceContext *tinterlace,
int flags)
{
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(format);
+ int hsub = desc->log2_chroma_w;
int plane, vsub = desc->log2_chroma_h;
int k = src_field == FIELD_UPPER_AND_LOWER ? 1 : 2;
int h;
for (plane = 0; plane < desc->nb_components; plane++) {
int lines = plane == 1 || plane == 2 ? FF_CEIL_RSHIFT(src_h, vsub) : src_h;
- int cols = plane == 1 || plane == 2 ? FF_CEIL_RSHIFT( w, desc->log2_chroma_w) : w;
- int linesize = av_image_get_linesize(format, w, plane);
+ int cols = plane == 1 || plane == 2 ? FF_CEIL_RSHIFT( w, hsub) : w;
uint8_t *dstp = dst[plane];
const uint8_t *srcp = src[plane];
- if (linesize < 0)
- return;
-
lines = (lines + (src_field == FIELD_UPPER)) / k;
if (src_field == FIELD_LOWER)
srcp += src_linesize[plane];
@@ -234,7 +231,7 @@ void copy_picture_field(TInterlaceContext *tinterlace,
}
} else {
av_image_copy_plane(dstp, dst_linesize[plane] * (interleave ? 2 : 1),
- srcp, src_linesize[plane]*k, linesize, lines);
+ srcp, src_linesize[plane]*k, cols, lines);
}
}
}