From a95834a4911c3507b864c0478771d2d7106c7031 Mon Sep 17 00:00:00 2001 From: "Reynaldo H. Verdejo Pinochet" Date: Wed, 10 Oct 2012 02:04:18 -0300 Subject: [PATCH] eglglessink: GLSL: Optimize frag_AYUV_prog - Avoid repeatedly performing the texture lookup - Use consts for the transform's offset and cofficients values - Use the dot product instead of the explicit mult and add --- ext/eglgles/gsteglglessink.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index b03de82..b70e927 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -213,23 +213,24 @@ static const char *frag_REORDER_prog = { /* Packed YUV converters */ -/** From gst-plugins-gl: AYUV to RGB conversion */ +/** AYUV to RGB conversion */ static const char *frag_AYUV_prog = { "precision mediump float;" "varying vec2 opos;" "uniform sampler2D tex;" + "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 r,g,b,y,u,v;" + " float r,g,b;" + " vec3 yuv; " vec2 nxy = opos.xy;" - " y=texture2D(tex,nxy).g;" - " u=texture2D(tex,nxy).b;" - " v=texture2D(tex,nxy).a;" - " 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;" + " yuv = texture2D(tex,nxy).gba;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" " gl_FragColor=vec4(r,g,b,1.0);" "}" }; -- 2.7.4