summaryrefslogtreecommitdiff
path: root/libavcodec/utvideodec.c
diff options
context:
space:
mode:
authorMartin Vignali <martin.vignali@gmail.com>2017-12-02 19:46:42 +0100
committerMartin Vignali <martin.vignali@gmail.com>2017-12-09 15:19:03 +0100
commit630967ef63d0f2a5cc12b06815af0ec6cb5c9d2a (patch)
tree6c85ea7d96b89876c994e4ded30a42da7149813b /libavcodec/utvideodec.c
parent4353c3506742c9fecce4cf9f68cc6a7ab7ea05b1 (diff)
downloadffmpeg-630967ef63d0f2a5cc12b06815af0ec6cb5c9d2a.tar.gz
avcodec/utvideodec : add SIMD (SSSE3 and AVX2) for gradient_pred
Diffstat (limited to 'libavcodec/utvideodec.c')
-rw-r--r--libavcodec/utvideodec.c5
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;
}
}