Commit ebe9ae9b authored by fbarchard@google.com's avatar fbarchard@google.com

scale unrolled to 2 pixels for C code

BUG=none
TEST=none
Review URL: https://webrtc-codereview.appspot.com/520001

git-svn-id: http://libyuv.googlecode.com/svn/trunk@249 16f28f9a-4ce2-e073-06de-1de4eb20be90
parent 85ebc8e2
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 248 Version: 249
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#ifndef INCLUDE_LIBYUV_VERSION_H_ #ifndef INCLUDE_LIBYUV_VERSION_H_
#define INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_
#define LIBYUV_VERSION 248 #define LIBYUV_VERSION 249
#endif // INCLUDE_LIBYUV_VERSION_H_ #endif // INCLUDE_LIBYUV_VERSION_H_
...@@ -2770,41 +2770,77 @@ static void ScaleFilterRows_SSSE3(uint8* dst_ptr, ...@@ -2770,41 +2770,77 @@ static void ScaleFilterRows_SSSE3(uint8* dst_ptr,
// CPU agnostic row functions // CPU agnostic row functions
static void ScaleRowDown2_C(const uint8* src_ptr, int, static void ScaleRowDown2_C(const uint8* src_ptr, int,
uint8* dst, int dst_width) { uint8* dst, int dst_width) {
for (int x = 0; x < dst_width; ++x) { for (int x = 0; x < dst_width - 1; x += 2) {
*dst++ = *src_ptr; dst[0] = src_ptr[0];
src_ptr += 2; 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, void ScaleRowDown2Int_C(const uint8* src_ptr, int src_stride,
uint8* dst, int dst_width) { uint8* dst, int dst_width) {
for (int x = 0; x < dst_width; ++x) { for (int x = 0; x < dst_width - 1; x += 2) {
*dst++ = (src_ptr[0] + src_ptr[1] + dst[0] = (src_ptr[0] + src_ptr[1] +
src_ptr[src_stride] + src_ptr[src_stride + 1] + 2) >> 2; src_ptr[src_stride] + src_ptr[src_stride + 1] + 2) >> 2;
src_ptr += 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, static void ScaleRowDown4_C(const uint8* src_ptr, int,
uint8* dst, int dst_width) { uint8* dst, int dst_width) {
for (int x = 0; x < dst_width; ++x) { for (int x = 0; x < dst_width - 1; x += 2) {
*dst++ = *src_ptr; dst[0] = src_ptr[0];
src_ptr += 4; 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, static void ScaleRowDown4Int_C(const uint8* src_ptr, int src_stride,
uint8* dst, int dst_width) { uint8* dst, int dst_width) {
for (int x = 0; x < dst_width; ++x) { for (int x = 0; x < dst_width - 1; x += 2) {
*dst++ = (src_ptr[0] + src_ptr[1] + src_ptr[2] + src_ptr[3] + 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 + 0] + src_ptr[src_stride + 1] +
src_ptr[src_stride + 2] + src_ptr[src_stride + 3] + 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 + 0] + src_ptr[src_stride * 2 + 1] +
src_ptr[src_stride * 2 + 2] + src_ptr[src_stride * 2 + 3] + 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 + 0] + src_ptr[src_stride * 3 + 1] +
src_ptr[src_stride * 3 + 2] + src_ptr[src_stride * 3 + 3] + src_ptr[src_stride * 3 + 2] + src_ptr[src_stride * 3 + 3] +
8) >> 4; 8) >> 4;
src_ptr += 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; ...@@ -2815,9 +2851,14 @@ static const int kMaxRow12 = kMaxOutputWidth * 2;
static void ScaleRowDown8_C(const uint8* src_ptr, int, static void ScaleRowDown8_C(const uint8* src_ptr, int,
uint8* dst, int dst_width) { uint8* dst, int dst_width) {
for (int x = 0; x < dst_width; ++x) { for (int x = 0; x < dst_width - 1; x += 2) {
*dst++ = *src_ptr; dst[0] = src_ptr[0];
src_ptr += 8; dst[1] = src_ptr[8];
dst += 2;
src_ptr += 16;
}
if (dst_width & 1) {
dst[0] = src_ptr[0];
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment