diff options
author | Paul B Mahol <onemda@gmail.com> | 2017-04-21 21:44:28 +0200 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2017-04-25 00:38:07 +0200 |
commit | b812db66af160bfac2f64aef2ade4aed7eb76b12 (patch) | |
tree | 94144b8471b13d3caf6d34955dec3c0267e2aed0 | |
parent | 7c25523cc8e618e77dc84d960e41e9644eaf8c33 (diff) | |
download | ffmpeg-b812db66af160bfac2f64aef2ade4aed7eb76b12.tar.gz |
utvideodec: Fix gradient prediction when stride does not match width
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
-rw-r--r-- | libavcodec/utvideodec.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index 0f58c83979..ed6368e4cd 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -686,7 +686,11 @@ static void restore_gradient_planar_il(UtvideoContext *c, uint8_t *src, ptrdiff_ C = bsrc[i - 1]; bsrc[i] = (A - B + C + bsrc[i]) & 0xFF; } - for (i = 0; i < width; i++) { + A = bsrc[-stride]; + B = bsrc[-(1 + stride + stride - width)]; + C = bsrc[width - 1]; + bsrc[stride] = (A - B + C + bsrc[stride]) & 0xFF; + for (i = 1; i < width; i++) { A = bsrc[i - stride]; B = bsrc[i - (1 + stride)]; C = bsrc[i - 1 + stride]; @@ -784,7 +788,11 @@ static void restore_gradient_packed_il(uint8_t *src, int step, ptrdiff_t stride, C = bsrc[i - step]; bsrc[i] = (A - B + C + bsrc[i]) & 0xFF; } - for (i = 0; i < width * step; i += step) { + A = bsrc[-stride]; + B = bsrc[-(step + stride + stride - width * step)]; + C = bsrc[width * step - step]; + bsrc[stride] = (A - B + C + bsrc[stride]) & 0xFF; + for (i = step; i < width * step; i += step) { A = bsrc[i - stride]; B = bsrc[i - (step + stride)]; C = bsrc[i - step + stride]; |