diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2016-01-17 12:33:50 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-01-31 00:24:27 +0100 |
commit | c48296d3bf1c7cff239faae7057dd300550ed1f2 (patch) | |
tree | e10935c1f78f02a23a92cdfceb83ec981f4b188d | |
parent | aea2f5a6eeb75bf69853d3ba12128446bbe47a0f (diff) | |
download | ffmpeg-c48296d3bf1c7cff239faae7057dd300550ed1f2.tar.gz |
swscale/x86/rgb2rgb_template: Fix planar2x() for short width
Fixes: 451b3e0cf956c0bd2f27ed753ac24050/asan_heap-oob_2873c01_3231_7ed10a9464d15f0d57277f5917c566a8.AVI
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit c8a9aaab2695e0f9921db946a3b9f14bea880167)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libswscale/x86/rgb2rgb_template.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libswscale/x86/rgb2rgb_template.c b/libswscale/x86/rgb2rgb_template.c index 6f218ddbb7..73af74e6aa 100644 --- a/libswscale/x86/rgb2rgb_template.c +++ b/libswscale/x86/rgb2rgb_template.c @@ -1434,7 +1434,9 @@ static inline void RENAME(planar2x)(const uint8_t *src, uint8_t *dst, int srcWid dst+= dstStride; for (y=1; y<srcHeight; y++) { - const x86_reg mmxSize= srcWidth&~15; + x86_reg mmxSize= srcWidth&~15; + + if (mmxSize) { __asm__ volatile( "mov %4, %%"REG_a" \n\t" "movq "MANGLE(mmx_ff)", %%mm0 \n\t" @@ -1481,6 +1483,11 @@ static inline void RENAME(planar2x)(const uint8_t *src, uint8_t *dst, int srcWid NAMED_CONSTRAINTS_ADD(mmx_ff) : "%"REG_a ); + } else { + mmxSize = 1; + dst[0] = (src[0] * 3 + src[srcStride]) >> 2; + dst[dstStride] = (src[0] + 3 * src[srcStride]) >> 2; + } for (x=mmxSize-1; x<srcWidth-1; x++) { dst[2*x +1]= (3*src[x+0] + src[x+srcStride+1])>>2; |