| Index: media/base/yuv_row_linux.cc
|
| ===================================================================
|
| --- media/base/yuv_row_linux.cc (revision 16299)
|
| +++ media/base/yuv_row_linux.cc (working copy)
|
| @@ -150,101 +150,39 @@
|
| (0xff000000);
|
| }
|
|
|
| -void ConvertYV12ToRGB32Row(const uint8* y_buf,
|
| - const uint8* u_buf,
|
| - const uint8* v_buf,
|
| - uint8* rgb_buf,
|
| - int width) {
|
| +void FastConvertYUVToRGB32Row(const uint8* y_buf,
|
| + const uint8* u_buf,
|
| + const uint8* v_buf,
|
| + uint8* rgb_buf,
|
| + int width) {
|
| for (int32 x = 0; x < static_cast<int32>(width); x += 2) {
|
| uint8 u = u_buf[x >> 1];
|
| uint8 v = v_buf[x >> 1];
|
| - int32 d = static_cast<int32>(u) - 128;
|
| - int32 e = static_cast<int32>(v) - 128;
|
| -
|
| - int32 cb = (516 * d + 128);
|
| - int32 cg = (- 100 * d - 208 * e + 128);
|
| - int32 cr = (409 * e + 128);
|
| -
|
| uint8 y0 = y_buf[x];
|
| - int32 C298a = ((static_cast<int32>(y0) - 16) * 298 + 128);
|
| - *reinterpret_cast<uint32*>(rgb_buf) = clip(C298a + cb) |
|
| - (clip(C298a + cg) << 8) |
|
| - (clip(C298a + cr) << 16) |
|
| - 0xff000000;
|
| -
|
| uint8 y1 = y_buf[x + 1];
|
| - int32 C298b = ((static_cast<int32>(y1) - 16) * 298 + 128);
|
| - *reinterpret_cast<uint32*>(rgb_buf + 4) = clip(C298b + cb) |
|
| - (clip(C298b + cg) << 8) |
|
| - (clip(C298b + cr) << 16) |
|
| - 0xff000000;
|
| + YuvPixel(y0, u, v, rgb_buf);
|
| + YuvPixel(y1, u, v, rgb_buf + 4);
|
|
|
| rgb_buf += 8; // Advance 2 pixels.
|
| }
|
| }
|
|
|
| -void HalfYV12ToRGB32Row(const uint8* y_buf,
|
| - const uint8* u_buf,
|
| - const uint8* v_buf,
|
| - uint8* rgb_buf,
|
| - int width) {
|
| - for (int32 x = 0; x < width; ++x) {
|
| - uint8 u = u_buf[x];
|
| - uint8 v = v_buf[x];
|
| - int32 d = static_cast<int32>(u) - 128;
|
| - int32 e = static_cast<int32>(v) - 128;
|
| -
|
| - int32 cb = (516 * d + 128);
|
| - int32 cg = (- 100 * d - 208 * e + 128);
|
| - int32 cr = (409 * e + 128);
|
| -
|
| - uint8 y0 = y_buf[x * 2 + 0];
|
| - uint8 y1 = y_buf[x * 2 + 1];
|
| - int32 C298a = ((static_cast<int32>((y0 + y1) >> 1) - 16) * 298 + 128);
|
| - *reinterpret_cast<uint32*>(rgb_buf) = clip(C298a + cb) |
|
| - (clip(C298a + cg) << 8) |
|
| - (clip(C298a + cr) << 16) |
|
| - 0xff000000;
|
| -
|
| - rgb_buf += 4;
|
| - }
|
| -}
|
| -
|
| // 28.4 fixed point is used. A shift by 4 isolates the integer.
|
| // A shift by 5 is used to further subsample the chrominence channels.
|
| // & 15 isolates the fixed point fraction. >> 2 to get the upper 2 bits,
|
| // for 1/4 pixel accurate interpolation.
|
| -void ScaleYV12ToRGB32Row(const uint8* y_buf,
|
| - const uint8* u_buf,
|
| - const uint8* v_buf,
|
| - uint8* rgb_buf,
|
| - int width,
|
| - int scaled_dx) {
|
| +void ScaleYUVToRGB32Row(const uint8* y_buf,
|
| + const uint8* u_buf,
|
| + const uint8* v_buf,
|
| + uint8* rgb_buf,
|
| + int width,
|
| + int scaled_dx) {
|
| int scaled_x = 0;
|
| for (int32 x = 0; x < width; ++x) {
|
| uint8 u = u_buf[scaled_x >> 5];
|
| uint8 v = v_buf[scaled_x >> 5];
|
| uint8 y0 = y_buf[scaled_x >> 4];
|
| -#if MEDIA_BILINEAR_FILTER
|
| - uint8 y1 = y_buf[(scaled_x >> 4) + 1];
|
| - switch ((scaled_x & 15) >> 2) {
|
| - case 1: // 75% first pixel, 25% second pixel.
|
| - y0 = (y0 + y0 + y0 + y1) >> 2;
|
| - break;
|
| - case 2: // 50/50 blend
|
| - y0 = (y0 + y1) >> 1;
|
| - break;
|
| - case 3: // 25% first pixel, 75% second pixel.
|
| - y0 = (y0 + y1 + y1 + y1) >> 2;
|
| - break;
|
| - default:
|
| - case 0: // 100% first pixel.
|
| - break;
|
| - }
|
| -#endif // MEDIA_BILINEAR_FILTER
|
| -
|
| YuvPixel(y0, u, v, rgb_buf);
|
| -
|
| rgb_buf += 4;
|
| scaled_x += scaled_dx;
|
| }
|
|
|