| Index: source/row_common.cc
|
| diff --git a/source/row_common.cc b/source/row_common.cc
|
| index 5f4aa3714a33d73463223bc91cec7cfc9a254191..13195684cabc130e0da3d8728caa8d9fecce7112 100644
|
| --- a/source/row_common.cc
|
| +++ b/source/row_common.cc
|
| @@ -1149,6 +1149,30 @@ void I444ToARGBRow_C(const uint8* src_y,
|
| rgb_buf + 0, rgb_buf + 1, rgb_buf + 2);
|
| }
|
| }
|
| +
|
| +void I444ToABGRRow_C(const uint8* src_y,
|
| + const uint8* src_u,
|
| + const uint8* src_v,
|
| + uint8* rgb_buf,
|
| + int width) {
|
| + int x;
|
| + for (x = 0; x < width - 1; x += 2) {
|
| + uint8 u = (src_u[0] + src_u[1] + 1) >> 1;
|
| + uint8 v = (src_v[0] + src_v[1] + 1) >> 1;
|
| + YuvPixel(src_y[0], u, v, rgb_buf + 2, rgb_buf + 1, rgb_buf + 0);
|
| + rgb_buf[3] = 255;
|
| + YuvPixel(src_y[1], u, v, rgb_buf + 6, rgb_buf + 5, rgb_buf + 4);
|
| + rgb_buf[7] = 255;
|
| + src_y += 2;
|
| + src_u += 2;
|
| + src_v += 2;
|
| + rgb_buf += 8; // Advance 2 pixels.
|
| + }
|
| + if (width & 1) {
|
| + YuvPixel(src_y[0], src_u[0], src_v[0],
|
| + rgb_buf + 2, rgb_buf + 1, rgb_buf + 0);
|
| + }
|
| +}
|
| #else
|
| void I444ToARGBRow_C(const uint8* src_y,
|
| const uint8* src_u,
|
| @@ -1166,6 +1190,23 @@ void I444ToARGBRow_C(const uint8* src_y,
|
| rgb_buf += 4; // Advance 1 pixel.
|
| }
|
| }
|
| +
|
| +void I444ToABGRRow_C(const uint8* src_y,
|
| + const uint8* src_u,
|
| + const uint8* src_v,
|
| + uint8* rgb_buf,
|
| + int width) {
|
| + int x;
|
| + for (x = 0; x < width; ++x) {
|
| + YuvPixel(src_y[0], src_u[0], src_v[0],
|
| + rgb_buf + 2, rgb_buf + 1, rgb_buf + 0);
|
| + rgb_buf[3] = 255;
|
| + src_y += 1;
|
| + src_u += 1;
|
| + src_v += 1;
|
| + rgb_buf += 4; // Advance 1 pixel.
|
| + }
|
| +}
|
| #endif
|
|
|
| // Also used for 420
|
| @@ -2319,6 +2360,19 @@ ANYYUV(I422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvConstants)
|
| ANYYUV(J422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvJConstants)
|
| ANYYUV(H422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvHConstants)
|
| #endif
|
| +// TODO(fbarchard): Neon, J444, H444 versions.
|
| +#ifdef HAS_I444TOARGBMATRIXROW_SSSE3
|
| +ANYYUV(I444ToARGBRow_SSSE3, I444ToARGBMatrixRow_SSSE3, kYuvConstants)
|
| +#endif
|
| +#ifdef HAS_I444TOARGBMATRIXROW_AVX2
|
| +ANYYUV(I444ToARGBRow_AVX2, I444ToARGBMatrixRow_AVX2, kYuvConstants)
|
| +#endif
|
| +#ifdef HAS_I444TOABGRMATRIXROW_SSSE3
|
| +ANYYUV(I444ToABGRRow_SSSE3, I444ToABGRMatrixRow_SSSE3, kYuvConstants)
|
| +#endif
|
| +#ifdef HAS_I444TOABGRMATRIXROW_AVX2
|
| +ANYYUV(I444ToABGRRow_AVX2, I444ToABGRMatrixRow_AVX2, kYuvConstants)
|
| +#endif
|
|
|
| // Maximum temporary width for wrappers to process at a time, in pixels.
|
| #define MAXTWIDTH 2048
|
|
|