diff options
author | Martin Vignali <martin.vignali@gmail.com> | 2017-12-02 19:46:42 +0100 |
---|---|---|
committer | Martin Vignali <martin.vignali@gmail.com> | 2017-12-09 15:19:03 +0100 |
commit | 630967ef63d0f2a5cc12b06815af0ec6cb5c9d2a (patch) | |
tree | 6c85ea7d96b89876c994e4ded30a42da7149813b /libavcodec/utvideodec.c | |
parent | 4353c3506742c9fecce4cf9f68cc6a7ab7ea05b1 (diff) | |
download | ffmpeg-630967ef63d0f2a5cc12b06815af0ec6cb5c9d2a.tar.gz |
avcodec/utvideodec : add SIMD (SSSE3 and AVX2) for gradient_pred
Diffstat (limited to 'libavcodec/utvideodec.c')
-rw-r--r-- | libavcodec/utvideodec.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index d2da825fbf..b85cb5daa6 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -460,6 +460,7 @@ static void restore_gradient_planar(UtvideoContext *c, uint8_t *src, ptrdiff_t s uint8_t *bsrc; int slice_start, slice_height; const int cmask = ~rmode; + int min_width = FFMIN(width, 32); for (slice = 0; slice < slices; slice++) { slice_start = ((slice * height) / slices) & cmask; @@ -479,12 +480,14 @@ static void restore_gradient_planar(UtvideoContext *c, uint8_t *src, ptrdiff_t s for (j = 1; j < slice_height; j++) { // second line - first element has top prediction, the rest uses gradient bsrc[0] = (bsrc[0] + bsrc[-stride]) & 0xFF; - for (i = 1; i < width; i++) { + for (i = 1; i < min_width; i++) { /* dsp need align 32 */ A = bsrc[i - stride]; B = bsrc[i - (stride + 1)]; C = bsrc[i - 1]; bsrc[i] = (A - B + C + bsrc[i]) & 0xFF; } + if (width > 32) + c->llviddsp.add_gradient_pred(bsrc + 32, stride, width - 32); bsrc += stride; } } |