cconvYV12.c revision bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsync#extension GL_ARB_texture_rectangle : enable
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsyncuniform sampler2DRect uSrcTex;
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsyncuniform sampler2DRect uVTex;
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsyncuniform sampler2DRect uUTex;
64082f4699f276693cf5b1ec5886ac12234af115vboxsyncvoid vboxCConvApplyAYUV(vec4 color);
9fc488be77be11a4dcb83feb09cdee11bb160746vboxsyncvoid vboxCConv()
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsync{
073b23b4ae48ce7c105b28442f47c9a0c7a1110fvboxsync vec2 clrCoordY = vec2(gl_TexCoord[0]);
073b23b4ae48ce7c105b28442f47c9a0c7a1110fvboxsync vec2 clrCoordV = vec2(gl_TexCoord[1]);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync int ixY = int(clrCoordY.x);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync vec2 coordY = vec2(float(ixY), clrCoordY.y);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync int ixV = int(clrCoordV.x);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync vec2 coordV = vec2(float(ixV), clrCoordV.y);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync vec4 clrY = texture2DRect(uSrcTex, coordY);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync vec4 clrV = texture2DRect(uVTex, coordV);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync vec4 clrU = texture2DRect(uUTex, coordV);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync float partY = clrCoordY.x - float(ixY);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync float partVU = clrCoordV.x - float(ixV);
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync float y;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync float v;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync float u;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync if(partY < 0.25)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync y = clrY.b;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else if(partY < 0.5)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync y = clrY.g;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else if(partY < 0.75)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync y = clrY.r;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync y = clrY.a;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync if(partVU < 0.25)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync v = clrV.b;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync u = clrU.b;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else if(partVU < 0.5)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync v = clrV.g;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync u = clrU.g;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else if(partVU < 0.75)
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync v = clrV.r;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync u = clrU.r;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync else
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync {
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync v = clrV.a;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync u = clrU.a;
bea46bb4f0a6e785631fe3c97cbe39d0a3f795c6vboxsync }
64082f4699f276693cf5b1ec5886ac12234af115vboxsync vboxCConvApplyAYUV(vec4(u, y, 0.0, v));
6035a3d1ce01a78c316578f23393c0b7edca0548vboxsync}