diff options
author | Vitor Sessak <vitor1001@gmail.com> | 2011-01-29 14:14:32 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-01-30 03:41:47 +0100 |
commit | bc0a603c7888c1faf4db580829e103b21442b6e4 (patch) | |
tree | ed2abb15649def6ff1cfa6c77b0caf3d3372c439 | |
parent | 8afac88e144f30ff6928ec2d33c8107b3c630a97 (diff) | |
download | ffmpeg-bc0a603c7888c1faf4db580829e103b21442b6e4.tar.gz |
Fix overread in altivec DSP function sad16
Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit 3af1fe829ee6db5eafe261947e74b8516ffe5188)
-rw-r--r-- | libavcodec/ppc/dsputil_altivec.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/libavcodec/ppc/dsputil_altivec.c b/libavcodec/ppc/dsputil_altivec.c index 163323264c..6779312c96 100644 --- a/libavcodec/ppc/dsputil_altivec.c +++ b/libavcodec/ppc/dsputil_altivec.c @@ -230,7 +230,7 @@ static int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, i int i; int s; const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); - vector unsigned char perm1, perm2, *pix1v, *pix2v; + vector unsigned char perm1, perm2, pix1v_low, pix1v_high, pix2v_low, pix2v_high; vector unsigned char t1, t2, t3,t4, t5; vector unsigned int sad; vector signed int sumdiffs; @@ -241,11 +241,13 @@ static int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, i for (i = 0; i < h; i++) { /* Read potentially unaligned pixels into t1 and t2 */ perm1 = vec_lvsl(0, pix1); - pix1v = (vector unsigned char *) pix1; + pix1v_high = vec_ld( 0, pix1); + pix1v_low = vec_ld(15, pix1); perm2 = vec_lvsl(0, pix2); - pix2v = (vector unsigned char *) pix2; - t1 = vec_perm(pix1v[0], pix1v[1], perm1); - t2 = vec_perm(pix2v[0], pix2v[1], perm2); + pix2v_high = vec_ld( 0, pix2); + pix2v_low = vec_ld(15, pix2); + t1 = vec_perm(pix1v_high, pix1v_low, perm1); + t2 = vec_perm(pix2v_high, pix2v_low, perm2); /* Calculate a sum of abs differences vector */ t3 = vec_max(t1, t2); |