aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-01-17 12:33:50 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-01-31 00:24:51 +0100
commit9631209eeaf035e5394a759542371875f837d0db (patch)
tree245a5b4fc72fddaab298dafd07376fae17342d1a
parent93c675d6a6c98e94ddce1a4b04bc1507f562249f (diff)
downloadffmpeg-9631209eeaf035e5394a759542371875f837d0db.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.c9
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;