cconvYV12.c revision 6035a3d1ce01a78c316578f23393c0b7edca0548
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#extension GL_ARB_texture_rectangle : enable
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncuniform sampler2DRect uSrcTex;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncuniform sampler2DRect uVTex;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncuniform sampler2DRect uUTex;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncfloat splitBGRA(vec4 color, float coord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid cconvApplyAYUV(vec4 color);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* texture internalFormat: GL_LUMINANCE
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * size: width X height
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * data format: GL_LUMINANCE
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* YV12-rgb888 conversion shader */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid cconvYV12(vec2 srcCoord)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vec4 clrY = texture2DRect(uSrcTex, srcCoord);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vec4 clrV = texture2DRect(uVTex, vec2(gl_TexCoord[2]));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync vec4 clrU = texture2DRect(uUTex, vec2(gl_TexCoord[3]));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float y = splitBGRA(clrY, srcCoord.x);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float v = splitBGRA(clrV, gl_TexCoord[2].x);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync float u = splitBGRA(clrU, gl_TexCoord[3].x);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* convert it to AYUV (for the GL_BGRA_EXT texture this is mapped as follows:
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * A -> B
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Y -> G
a48399c41d6eb8b66ad69c050ad263af36873e9cvboxsync * U -> R
a48399c41d6eb8b66ad69c050ad263af36873e9cvboxsync * V -> A */
a48399c41d6eb8b66ad69c050ad263af36873e9cvboxsync cconvApplyAYUV(vec4(u, y, 0.0, v));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync// gl_FragColor = vec4(clrY.r,clrY.r,clrY.r,1.0);
aae15a3015041f7ed6043344bf4939736254acf6vboxsync}
aae15a3015041f7ed6043344bf4939736254acf6vboxsync