diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index 7235b073ae..1949b7985f 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -239,19 +239,20 @@ static const char *frag_YUY2_YVYU_UYVY_prog = { "precision mediump float;" "varying vec2 opos;" "uniform sampler2D Ytex, UVtex;" + "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" + "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);" + "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);" + "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);" "void main(void) {" - " float fx, fy, y, u, v, r, g, b;" - " fx = opos.x;" - " fy = opos.y;" - " y = texture2D(Ytex,vec2(fx,fy)).%c;" - " u = texture2D(UVtex,vec2(fx,fy)).%c;" - " v = texture2D(UVtex,vec2(fx,fy)).%c;" - " y=1.1643*(y-0.0625);" - " u=u-0.5;" - " v=v-0.5;" - " r=y+1.5958*v;" - " g=y-0.39173*u-0.81290*v;" - " b=y+2.017*u;" + " float r, g, b;" + " vec3 yuv;" + " vec2 oposxy = vec2(opos.x, opos.y);" + " yuv.x = texture2D(Ytex,oposxy).x;" + " yuv.yz = texture2D(UVtex,oposxy).yz;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" " gl_FragColor=vec4(r,g,b,1.0);" "}" };