Index: media/base/simd/convert_rgb_to_yuv_ssse3.h |
diff --git a/media/base/simd/convert_rgb_to_yuv_ssse3.h b/media/base/simd/convert_rgb_to_yuv_ssse3.h |
index 84557d197facb77ca4e6c4b780f9ae3d4edb4593..92144c9aaca15e6742e8406c3d9e1feeb9e450ae 100644 |
--- a/media/base/simd/convert_rgb_to_yuv_ssse3.h |
+++ b/media/base/simd/convert_rgb_to_yuv_ssse3.h |
@@ -13,19 +13,25 @@ extern "C" { |
// instructions so we can call them from C++ code. These functions are |
// implemented in "convert_rgb_to_yuv_ssse3.asm". |
+// We use ptrdiff_t instead of int for yasm routine parameters to portably |
+// sign-extend int. On Win64, MSVC does not sign-extend the value in the stack |
+// home of int function parameters, and yasm routines are unaware of this lack |
+// of extension and fault. ptrdiff_t is portably sign-extended and fixes this |
+// issue on at least Win64. |
+ |
// Convert a row of 24-bit RGB pixels to YV12 pixels. |
void ConvertRGBToYUVRow_SSSE3(const uint8* rgb, |
uint8* y, |
uint8* u, |
uint8* v, |
- int width); |
+ ptrdiff_t width); |
// Convert a row of 32-bit RGB pixels to YV12 pixels. |
void ConvertARGBToYUVRow_SSSE3(const uint8* argb, |
uint8* y, |
uint8* u, |
uint8* v, |
- int width); |
+ ptrdiff_t width); |
#ifdef __cplusplus |
} |