(compability_mode ? get_simple_blend_color_func() : get_blend_color_func())\r
\r
+\r
-\r
- " \n"\r
- "// NOTE: YCbCr, ITU-R, http://www.intersil.com/data/an/an9717.pdf \n"\r
- "// TODO: Support for more yuv formats might be needed. \n"\r
+ "//http://slouken.blogspot.com/2011/02/mpeg-acceleration-with-glsl.html \n"\r
"vec4 ycbcra_to_rgba_sd(float y, float cb, float cr, float a) \n"\r
"{ \n"\r
- " cb -= 0.5; \n"\r
- " cr -= 0.5; \n"\r
- " y = 1.164*(y-0.0625); \n"\r
+ " // YUV offset \n"\r
+ " const vec3 offset = vec3(-0.0625, -0.5, -0.5); \n"\r
+ " \n"\r
+ " // RGB coefficients \n"\r
+ " const vec3 Rcoeff = vec3(1.164, 0.000, 1.596); \n"\r
+ " const vec3 Gcoeff = vec3(1.164, -0.391, -0.813); \n"\r
+ " const vec3 Bcoeff = vec3(1.164, 2.018, 0.000); \n"\r
" \n"\r
- " vec4 color; \n"\r
- " color.r = y + 2.018 * cb; \n"\r
- " color.b = y + 1.596 * cr; \n"\r
- " color.g = y - 0.813 * cr - 0.391 * cb; \n"\r
- " color.a = a; \n"\r
+ " vec3 yuv = vec3(y, cr, cb); \n"\r
+ " vec4 rgba; \n"\r
" \n"\r
- " return color; \n"\r
+ " yuv += offset; \n"\r
+ " rgba.r = dot(yuv, Rcoeff); \n"\r
+ " rgba.g = dot(yuv, Gcoeff); \n"\r
+ " rgba.b = dot(yuv, Bcoeff); \n"\r
+ " rgba.a = a; \n"\r
+ " \n"\r
+ " return rgba; \n"\r
"} \n" \r
" \n"\r
"vec4 ycbcra_to_rgba_hd(float y, float cb, float cr, float a) \n"\r
"{ \n"\r
- " cb -= 0.5; \n"\r
- " cr -= 0.5; \n"\r
- " y = 1.164*(y-0.0625); \n"\r
+ " // YUV offset \n"\r
+ " const vec3 offset = vec3(-0.0625, -0.5, -0.5); \n"\r
+ " \n"\r
+ " // RGB coefficients \n"\r
+ " const vec3 Rcoeff = vec3(1.164, 0.000, 1.793); \n"\r
+ " const vec3 Gcoeff = vec3(1.164, -0.213, -0.534); \n"\r
+ " const vec3 Bcoeff = vec3(1.164, 2.115, 0.000); \n"\r
+ " \n"\r
+ " vec3 yuv = vec3(y, cr, cb); \n"\r
+ " vec4 rgba; \n"\r
" \n"\r
- " vec4 color; \n"\r
- " color.r = y + 2.115 * cb; \n"\r
- " color.b = y + 1.793 * cr; \n"\r
- " color.g = y - 0.534 * cr - 0.213 * cb; \n"\r
- " color.a = a; \n"\r
+ " yuv += offset; \n"\r
+ " rgba.r = dot(yuv, Rcoeff); \n"\r
+ " rgba.g = dot(yuv, Gcoeff); \n"\r
+ " rgba.b = dot(yuv, Bcoeff); \n"\r
+ " rgba.a = a; \n"\r
" \n"\r
- " return color; \n"\r
+ " return rgba; \n"\r
"} \n" \r
- " \n" \r
+ " \n" \r
"vec4 ycbcra_to_rgba(float y, float cb, float cr, float a) \n"\r
"{ \n"\r
" if(is_hd) \n"\r