aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2017-04-14 16:50:39 -0700
committerFrank Barchard <fbarchard@google.com>2017-04-19 15:01:20 -0700
commitb281539ba96d4563227984fa49c7c94383e4259a (patch)
treed09f1ce475537f3a9f283f6dcffccf2853fa6406
parentcead1e07666bcc5914f8927712c2f89b9b789f9b (diff)
downloadlibyuv-b281539ba96d4563227984fa49c7c94383e4259a.tar.gz
crash fix for I420ToRGB565
To reproduce with the unittest (not included in this CL): out/Release/libyuv_unittest --gtest_filter=*Convert*I*To* --libyuv_width=1280 --libyuv_height=720 [ RUN ] LibYUVConvertTest.I420ToRGB24_Opt [ OK ] LibYUVConvertTest.I420ToRGB24_Opt (585 ms) [ RUN ] LibYUVConvertTest.I420ToRGB565_Any /Users/fbarchard/bin/runyuv10: line 2: 9424 Segmentation fault: 11 Happens when running with Intel with AVX2 on odd width image. Odd widths are uncommon, and AVX2 is not common on mobile, so doesnt occur much. This function is used by stagefright. The change calls a function with a larger alignment value, indicating the AVX2 should do multiple of 16 pixels with AVX2, and use C code to handle the remainder. Previously the function was passed too small of an alignment value, so the AVX2 would overwrite memory. e.g if it were called with 9 pixels, it would convert 16. Bug: 37328100 Test: out/Release/libyuv_unittest --gtest_filter=*Convert*I*To* --libyuv_width=1280 --libyuv_height=720 Change-Id: If56113527084256e2c2092938bf573722b16f0df
-rw-r--r--files/source/row_any.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/files/source/row_any.cc b/files/source/row_any.cc
index af5d1fbc..88c2cf13 100644
--- a/files/source/row_any.cc
+++ b/files/source/row_any.cc
@@ -158,13 +158,13 @@ ANY31C(I422ToRGBARow_Any_AVX2, I422ToRGBARow_AVX2, 1, 0, 4, 15)
ANY31C(I444ToARGBRow_Any_AVX2, I444ToARGBRow_AVX2, 0, 0, 4, 15)
#endif
#ifdef HAS_I422TOARGB4444ROW_AVX2
-ANY31C(I422ToARGB4444Row_Any_AVX2, I422ToARGB4444Row_AVX2, 1, 0, 2, 7)
+ANY31C(I422ToARGB4444Row_Any_AVX2, I422ToARGB4444Row_AVX2, 1, 0, 2, 15)
#endif
#ifdef HAS_I422TOARGB1555ROW_AVX2
-ANY31C(I422ToARGB1555Row_Any_AVX2, I422ToARGB1555Row_AVX2, 1, 0, 2, 7)
+ANY31C(I422ToARGB1555Row_Any_AVX2, I422ToARGB1555Row_AVX2, 1, 0, 2, 15)
#endif
#ifdef HAS_I422TORGB565ROW_AVX2
-ANY31C(I422ToRGB565Row_Any_AVX2, I422ToRGB565Row_AVX2, 1, 0, 2, 7)
+ANY31C(I422ToRGB565Row_Any_AVX2, I422ToRGB565Row_AVX2, 1, 0, 2, 15)
#endif
#ifdef HAS_I422TOARGBROW_NEON
ANY31C(I444ToARGBRow_Any_NEON, I444ToARGBRow_NEON, 0, 0, 4, 7)