mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-06 16:56:55 +08:00
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
This commit is contained in:
parent
85ebc8e20b
commit
ebe9ae9b21
@ -1,6 +1,6 @@
|
||||
Name: libyuv
|
||||
URL: http://code.google.com/p/libyuv/
|
||||
Version: 248
|
||||
Version: 249
|
||||
License: BSD
|
||||
License File: LICENSE
|
||||
|
||||
|
||||
@ -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_
|
||||
|
||||
|
||||
@ -2770,33 +2770,70 @@ 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] +
|
||||
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;
|
||||
src_ptr += 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] +
|
||||
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] +
|
||||
@ -2804,7 +2841,6 @@ static void ScaleRowDown4Int_C(const uint8* src_ptr, int src_stride,
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user