diff --git a/README.chromium b/README.chromium index 85598ef3e..7b8bdc7a1 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 248 +Version: 249 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index 84b187375..d69289ad9 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,7 +11,7 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 248 +#define LIBYUV_VERSION 249 #endif // INCLUDE_LIBYUV_VERSION_H_ diff --git a/source/scale.cc b/source/scale.cc index 856c4705d..b67098aab 100644 --- a/source/scale.cc +++ b/source/scale.cc @@ -2770,41 +2770,77 @@ static void ScaleFilterRows_SSSE3(uint8* dst_ptr, // CPU agnostic row functions static void ScaleRowDown2_C(const uint8* src_ptr, int, uint8* dst, int dst_width) { - for (int x = 0; x < dst_width; ++x) { - *dst++ = *src_ptr; - src_ptr += 2; + for (int x = 0; x < dst_width - 1; x += 2) { + dst[0] = src_ptr[0]; + dst[1] = src_ptr[2]; + dst += 2; + src_ptr += 4; + } + if (dst_width & 1) { + dst[0] = src_ptr[0]; } } void ScaleRowDown2Int_C(const uint8* src_ptr, int src_stride, uint8* dst, int dst_width) { - for (int x = 0; x < dst_width; ++x) { - *dst++ = (src_ptr[0] + src_ptr[1] + - src_ptr[src_stride] + src_ptr[src_stride + 1] + 2) >> 2; - src_ptr += 2; + for (int x = 0; x < dst_width - 1; x += 2) { + dst[0] = (src_ptr[0] + src_ptr[1] + + src_ptr[src_stride] + src_ptr[src_stride + 1] + 2) >> 2; + dst[1] = (src_ptr[2] + src_ptr[3] + + src_ptr[src_stride + 2] + src_ptr[src_stride + 3] + 2) >> 2; + dst += 2; + src_ptr += 4; + } + if (dst_width & 1) { + dst[0] = (src_ptr[0] + src_ptr[1] + + src_ptr[src_stride] + src_ptr[src_stride + 1] + 2) >> 2; } } static void ScaleRowDown4_C(const uint8* src_ptr, int, uint8* dst, int dst_width) { - for (int x = 0; x < dst_width; ++x) { - *dst++ = *src_ptr; - src_ptr += 4; + for (int x = 0; x < dst_width - 1; x += 2) { + dst[0] = src_ptr[0]; + dst[1] = src_ptr[4]; + dst += 2; + src_ptr += 8; + } + if (dst_width & 1) { + dst[0] = src_ptr[0]; } } static void ScaleRowDown4Int_C(const uint8* src_ptr, int src_stride, uint8* dst, int dst_width) { - for (int x = 0; x < dst_width; ++x) { - *dst++ = (src_ptr[0] + src_ptr[1] + src_ptr[2] + src_ptr[3] + - src_ptr[src_stride + 0] + src_ptr[src_stride + 1] + - src_ptr[src_stride + 2] + src_ptr[src_stride + 3] + - src_ptr[src_stride * 2 + 0] + src_ptr[src_stride * 2 + 1] + - src_ptr[src_stride * 2 + 2] + src_ptr[src_stride * 2 + 3] + - src_ptr[src_stride * 3 + 0] + src_ptr[src_stride * 3 + 1] + - src_ptr[src_stride * 3 + 2] + src_ptr[src_stride * 3 + 3] + - 8) >> 4; - src_ptr += 4; + for (int x = 0; x < dst_width - 1; x += 2) { + dst[0] = (src_ptr[0] + src_ptr[1] + src_ptr[2] + src_ptr[3] + + src_ptr[src_stride + 0] + src_ptr[src_stride + 1] + + src_ptr[src_stride + 2] + src_ptr[src_stride + 3] + + src_ptr[src_stride * 2 + 0] + src_ptr[src_stride * 2 + 1] + + src_ptr[src_stride * 2 + 2] + src_ptr[src_stride * 2 + 3] + + src_ptr[src_stride * 3 + 0] + src_ptr[src_stride * 3 + 1] + + src_ptr[src_stride * 3 + 2] + src_ptr[src_stride * 3 + 3] + + 8) >> 4; + dst[1] = (src_ptr[4] + src_ptr[5] + src_ptr[6] + src_ptr[7] + + src_ptr[src_stride + 4] + src_ptr[src_stride + 5] + + src_ptr[src_stride + 6] + src_ptr[src_stride + 7] + + src_ptr[src_stride * 2 + 4] + src_ptr[src_stride * 2 + 5] + + src_ptr[src_stride * 2 + 6] + src_ptr[src_stride * 2 + 7] + + src_ptr[src_stride * 3 + 4] + src_ptr[src_stride * 3 + 5] + + src_ptr[src_stride * 3 + 6] + src_ptr[src_stride * 3 + 7] + + 8) >> 4; + dst += 2; + src_ptr += 8; + } + if (dst_width & 1) { + dst[0] = (src_ptr[0] + src_ptr[1] + src_ptr[2] + src_ptr[3] + + src_ptr[src_stride + 0] + src_ptr[src_stride + 1] + + src_ptr[src_stride + 2] + src_ptr[src_stride + 3] + + src_ptr[src_stride * 2 + 0] + src_ptr[src_stride * 2 + 1] + + src_ptr[src_stride * 2 + 2] + src_ptr[src_stride * 2 + 3] + + src_ptr[src_stride * 3 + 0] + src_ptr[src_stride * 3 + 1] + + src_ptr[src_stride * 3 + 2] + src_ptr[src_stride * 3 + 3] + + 8) >> 4; } } @@ -2815,9 +2851,14 @@ static const int kMaxRow12 = kMaxOutputWidth * 2; static void ScaleRowDown8_C(const uint8* src_ptr, int, uint8* dst, int dst_width) { - for (int x = 0; x < dst_width; ++x) { - *dst++ = *src_ptr; - src_ptr += 8; + for (int x = 0; x < dst_width - 1; x += 2) { + dst[0] = src_ptr[0]; + dst[1] = src_ptr[8]; + dst += 2; + src_ptr += 16; + } + if (dst_width & 1) { + dst[0] = src_ptr[0]; } }