Index: cc/output/gl_renderer.cc |
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
index cc9a752ecf5cda3c8406bb6a92f9503a3cf4dbe3..8f24f4e48c4a1804d73ce4172f6a3ccd4c98356f 100644 |
--- a/cc/output/gl_renderer.cc |
+++ b/cc/output/gl_renderer.cc |
@@ -1723,8 +1723,18 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame, |
0.0f, -.391f, 2.018f, |
1.596f, -.813f, 0.0f, |
}; |
+ float yuv_to_rgb_jpeg[9] = { |
+ 1.f, 1.f, 1.f, |
+ 0.0f, -.34414f, 1.772f, |
+ 1.402f, -.71414, 0.0f, |
+ }; |
+ |
GLC(Context(), |
- Context()->uniformMatrix3fv(yuv_matrix_location, 1, 0, yuv_to_rgb)); |
+ Context()->uniformMatrix3fv( |
+ yuv_matrix_location, |
+ 1, |
+ 0, |
+ quad->jpeg_color_range ? yuv_to_rgb_jpeg : yuv_to_rgb)); |
// These values map to 16, 128, and 128 respectively, and are computed |
// as a fraction over 256 (e.g. 16 / 256 = 0.0625). |
@@ -1733,8 +1743,15 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame, |
// 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, }; |
- GLC(Context(), Context()->uniform3fv(yuv_adj_location, 1, yuv_adjust)); |
+ // Same as above, but without the head and footroom in Y. |
+ float yuv_adjust_jpeg[3] = { 0.f, -0.5f, -0.5f, }; |
+ |
+ GLC(Context(), |
+ Context()->uniform3fv( |
+ yuv_adj_location, |
+ 1, |
+ quad->jpeg_color_range ? yuv_adjust_jpeg : yuv_adjust)); |
SetShaderOpacity(quad->opacity(), alpha_location); |
DrawQuadGeometry(frame, quad->quadTransform(), quad->rect, matrix_location); |