| Index: cc/output/gl_renderer.cc
|
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
|
| index bb1ecbf6bc61f6691d5eb5fd55690d0448eee2ae..8e60f944d4f6f23cf033f15f2f7c619473fe99cf 100644
|
| --- a/cc/output/gl_renderer.cc
|
| +++ b/cc/output/gl_renderer.cc
|
| @@ -1777,9 +1777,12 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| // These values are magic numbers that are used in the transformation from YUV
|
| // to RGB color values. They are taken from the following webpage:
|
| // http://www.fourcc.org/fccyvrgb.php
|
| - float yuv_to_rgb[9] = {1.164f, 1.164f, 1.164f, 0.0f, -.391f,
|
| - 2.018f, 1.596f, -.813f, 0.0f, };
|
| - GLC(gl_, gl_->UniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb));
|
| + float yuv_to_rgb_rec601[9] = {
|
| + 1.164f, 1.164f, 1.164f, 0.0f, -.391f, 2.018f, 1.596f, -.813f, 0.0f,
|
| + };
|
| + float yuv_to_rgb_rec601_jpeg[9] = {
|
| + 1.f, 1.f, 1.f, 0.0f, -.34414f, 1.772f, 1.402f, -.71414f, 0.0f,
|
| + };
|
|
|
| // These values map to 16, 128, and 128 respectively, and are computed
|
| // as a fraction over 256 (e.g. 16 / 256 = 0.0625).
|
| @@ -1787,7 +1790,30 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| // Y - 16 : Gives 16 values of head and footroom for overshooting
|
| // U - 128 : Turns unsigned U into signed U [-128,127]
|
| // V - 128 : Turns unsigned V into signed V [-128,127]
|
| - float yuv_adjust[3] = {-0.0625f, -0.5f, -0.5f, };
|
| + float yuv_adjust_rec601[3] = {
|
| + -0.0625f, -0.5f, -0.5f,
|
| + };
|
| +
|
| + // Same as above, but without the head and footroom.
|
| + float yuv_adjust_rec601_jpeg[3] = {
|
| + 0.0f, -0.5f, -0.5f,
|
| + };
|
| +
|
| + float* yuv_to_rgb = NULL;
|
| + float* yuv_adjust = NULL;
|
| +
|
| + switch (quad->color_space) {
|
| + case YUVVideoDrawQuad::REC_601:
|
| + yuv_to_rgb = yuv_to_rgb_rec601;
|
| + yuv_adjust = yuv_adjust_rec601;
|
| + break;
|
| + case YUVVideoDrawQuad::REC_601_JPEG:
|
| + yuv_to_rgb = yuv_to_rgb_rec601_jpeg;
|
| + yuv_adjust = yuv_adjust_rec601_jpeg;
|
| + break;
|
| + }
|
| +
|
| + GLC(gl_, gl_->UniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb));
|
| GLC(gl_, gl_->Uniform3fv(yuv_adj_location, 1, yuv_adjust));
|
|
|
| SetShaderOpacity(quad->opacity(), alpha_location);
|
|
|