| Index: media/base/simd/convert_yuv_to_rgb_c.cc
|
| diff --git a/media/base/simd/convert_yuv_to_rgb_c.cc b/media/base/simd/convert_yuv_to_rgb_c.cc
|
| index 9d6476b07d562e5bff097c01ca16594da1fbbd67..0466112918de950cac7b819f590c92579af694e9 100644
|
| --- a/media/base/simd/convert_yuv_to_rgb_c.cc
|
| +++ b/media/base/simd/convert_yuv_to_rgb_c.cc
|
| @@ -38,22 +38,21 @@
|
| static inline void ConvertYUVToRGB32_C(uint8 y,
|
| uint8 u,
|
| uint8 v,
|
| - uint8* rgb_buf,
|
| - const int16 convert_table[1024][4]) {
|
| - int b = convert_table[256+u][B_INDEX];
|
| - int g = convert_table[256+u][G_INDEX];
|
| - int r = convert_table[256+u][R_INDEX];
|
| - int a = convert_table[256+u][A_INDEX];
|
| -
|
| - b = paddsw(b, convert_table[512+v][B_INDEX]);
|
| - g = paddsw(g, convert_table[512+v][G_INDEX]);
|
| - r = paddsw(r, convert_table[512+v][R_INDEX]);
|
| - a = paddsw(a, convert_table[512+v][A_INDEX]);
|
| -
|
| - b = paddsw(b, convert_table[y][B_INDEX]);
|
| - g = paddsw(g, convert_table[y][G_INDEX]);
|
| - r = paddsw(r, convert_table[y][R_INDEX]);
|
| - a = paddsw(a, convert_table[y][A_INDEX]);
|
| + uint8* rgb_buf) {
|
| + int b = kCoefficientsRgbY[256+u][B_INDEX];
|
| + int g = kCoefficientsRgbY[256+u][G_INDEX];
|
| + int r = kCoefficientsRgbY[256+u][R_INDEX];
|
| + int a = kCoefficientsRgbY[256+u][A_INDEX];
|
| +
|
| + b = paddsw(b, kCoefficientsRgbY[512+v][B_INDEX]);
|
| + g = paddsw(g, kCoefficientsRgbY[512+v][G_INDEX]);
|
| + r = paddsw(r, kCoefficientsRgbY[512+v][R_INDEX]);
|
| + a = paddsw(a, kCoefficientsRgbY[512+v][A_INDEX]);
|
| +
|
| + b = paddsw(b, kCoefficientsRgbY[y][B_INDEX]);
|
| + g = paddsw(g, kCoefficientsRgbY[y][G_INDEX]);
|
| + r = paddsw(r, kCoefficientsRgbY[y][R_INDEX]);
|
| + a = paddsw(a, kCoefficientsRgbY[y][A_INDEX]);
|
|
|
| b >>= 6;
|
| g >>= 6;
|
| @@ -70,19 +69,18 @@
|
| uint8 u,
|
| uint8 v,
|
| uint8 a,
|
| - uint8* rgb_buf,
|
| - const int16 convert_table[1024][4]) {
|
| - int b = convert_table[256+u][0];
|
| - int g = convert_table[256+u][1];
|
| - int r = convert_table[256+u][2];
|
| -
|
| - b = paddsw(b, convert_table[512+v][0]);
|
| - g = paddsw(g, convert_table[512+v][1]);
|
| - r = paddsw(r, convert_table[512+v][2]);
|
| -
|
| - b = paddsw(b, convert_table[y][0]);
|
| - g = paddsw(g, convert_table[y][1]);
|
| - r = paddsw(r, convert_table[y][2]);
|
| + uint8* rgb_buf) {
|
| + int b = kCoefficientsRgbY[256+u][0];
|
| + int g = kCoefficientsRgbY[256+u][1];
|
| + int r = kCoefficientsRgbY[256+u][2];
|
| +
|
| + b = paddsw(b, kCoefficientsRgbY[512+v][0]);
|
| + g = paddsw(g, kCoefficientsRgbY[512+v][1]);
|
| + r = paddsw(r, kCoefficientsRgbY[512+v][2]);
|
| +
|
| + b = paddsw(b, kCoefficientsRgbY[y][0]);
|
| + g = paddsw(g, kCoefficientsRgbY[y][1]);
|
| + r = paddsw(r, kCoefficientsRgbY[y][2]);
|
|
|
| b >>= 6;
|
| g >>= 6;
|
| @@ -102,16 +100,15 @@
|
| const uint8* u_buf,
|
| const uint8* v_buf,
|
| uint8* rgb_buf,
|
| - ptrdiff_t width,
|
| - const int16 convert_table[1024][4]) {
|
| + ptrdiff_t width) {
|
| for (int x = 0; x < width; x += 2) {
|
| uint8 u = u_buf[x >> 1];
|
| uint8 v = v_buf[x >> 1];
|
| uint8 y0 = y_buf[x];
|
| - ConvertYUVToRGB32_C(y0, u, v, rgb_buf, convert_table);
|
| + ConvertYUVToRGB32_C(y0, u, v, rgb_buf);
|
| if ((x + 1) < width) {
|
| uint8 y1 = y_buf[x + 1];
|
| - ConvertYUVToRGB32_C(y1, u, v, rgb_buf + 4, convert_table);
|
| + ConvertYUVToRGB32_C(y1, u, v, rgb_buf + 4);
|
| }
|
| rgb_buf += 8; // Advance 2 pixels.
|
| }
|
| @@ -122,18 +119,17 @@
|
| const uint8* v_buf,
|
| const uint8* a_buf,
|
| uint8* rgba_buf,
|
| - ptrdiff_t width,
|
| - const int16 convert_table[1024][4]) {
|
| + ptrdiff_t width) {
|
| for (int x = 0; x < width; x += 2) {
|
| uint8 u = u_buf[x >> 1];
|
| uint8 v = v_buf[x >> 1];
|
| uint8 y0 = y_buf[x];
|
| uint8 a0 = a_buf[x];
|
| - ConvertYUVAToARGB_C(y0, u, v, a0, rgba_buf, convert_table);
|
| + ConvertYUVAToARGB_C(y0, u, v, a0, rgba_buf);
|
| if ((x + 1) < width) {
|
| uint8 y1 = y_buf[x + 1];
|
| uint8 a1 = a_buf[x + 1];
|
| - ConvertYUVAToARGB_C(y1, u, v, a1, rgba_buf + 4, convert_table);
|
| + ConvertYUVAToARGB_C(y1, u, v, a1, rgba_buf + 4);
|
| }
|
| rgba_buf += 8; // Advance 2 pixels.
|
| }
|
| @@ -148,18 +144,17 @@
|
| const uint8* v_buf,
|
| uint8* rgb_buf,
|
| ptrdiff_t width,
|
| - ptrdiff_t source_dx,
|
| - const int16 convert_table[1024][4]) {
|
| + ptrdiff_t source_dx) {
|
| int x = 0;
|
| for (int i = 0; i < width; i += 2) {
|
| int y = y_buf[x >> 16];
|
| int u = u_buf[(x >> 17)];
|
| int v = v_buf[(x >> 17)];
|
| - ConvertYUVToRGB32_C(y, u, v, rgb_buf, convert_table);
|
| + ConvertYUVToRGB32_C(y, u, v, rgb_buf);
|
| x += source_dx;
|
| if ((i + 1) < width) {
|
| y = y_buf[x >> 16];
|
| - ConvertYUVToRGB32_C(y, u, v, rgb_buf+4, convert_table);
|
| + ConvertYUVToRGB32_C(y, u, v, rgb_buf+4);
|
| x += source_dx;
|
| }
|
| rgb_buf += 8;
|
| @@ -171,14 +166,13 @@
|
| const uint8* v_buf,
|
| uint8* rgb_buf,
|
| ptrdiff_t width,
|
| - ptrdiff_t source_dx,
|
| - const int16 convert_table[1024][4]) {
|
| + ptrdiff_t source_dx) {
|
| // Avoid point-sampling for down-scaling by > 2:1.
|
| int source_x = 0;
|
| if (source_dx >= 0x20000)
|
| source_x += 0x8000;
|
| LinearScaleYUVToRGB32RowWithRange_C(y_buf, u_buf, v_buf, rgb_buf, width,
|
| - source_x, source_dx, convert_table);
|
| + source_x, source_dx);
|
| }
|
|
|
| void LinearScaleYUVToRGB32RowWithRange_C(const uint8* y_buf,
|
| @@ -187,8 +181,7 @@
|
| uint8* rgb_buf,
|
| int dest_width,
|
| int x,
|
| - int source_dx,
|
| - const int16 convert_table[1024][4]) {
|
| + int source_dx) {
|
| for (int i = 0; i < dest_width; i += 2) {
|
| int y0 = y_buf[x >> 16];
|
| int y1 = y_buf[(x >> 16) + 1];
|
| @@ -201,14 +194,14 @@
|
| int y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16;
|
| int u = (uv_frac * u1 + (uv_frac ^ 65535) * u0) >> 16;
|
| int v = (uv_frac * v1 + (uv_frac ^ 65535) * v0) >> 16;
|
| - ConvertYUVToRGB32_C(y, u, v, rgb_buf, convert_table);
|
| + ConvertYUVToRGB32_C(y, u, v, rgb_buf);
|
| x += source_dx;
|
| if ((i + 1) < dest_width) {
|
| y0 = y_buf[x >> 16];
|
| y1 = y_buf[(x >> 16) + 1];
|
| y_frac = (x & 65535);
|
| y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16;
|
| - ConvertYUVToRGB32_C(y, u, v, rgb_buf+4, convert_table);
|
| + ConvertYUVToRGB32_C(y, u, v, rgb_buf+4);
|
| x += source_dx;
|
| }
|
| rgb_buf += 8;
|
| @@ -225,7 +218,7 @@
|
| int uvstride,
|
| int rgbstride,
|
| YUVType yuv_type) {
|
| - unsigned int y_shift = GetVerticalShift(yuv_type);
|
| + unsigned int y_shift = yuv_type;
|
| for (int y = 0; y < height; ++y) {
|
| uint8* rgb_row = rgbframe + y * rgbstride;
|
| const uint8* y_ptr = yplane + y * ystride;
|
| @@ -236,8 +229,7 @@
|
| u_ptr,
|
| v_ptr,
|
| rgb_row,
|
| - width,
|
| - GetLookupTable(yuv_type));
|
| + width);
|
| }
|
| }
|
|
|
| @@ -266,8 +258,7 @@
|
| v_ptr,
|
| a_ptr,
|
| rgba_row,
|
| - width,
|
| - GetLookupTable(yuv_type));
|
| + width);
|
| }
|
| }
|
|
|
|
|