cconvUYVY.c revision 6035a3d1ce01a78c316578f23393c0b7edca0548
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync#extension GL_ARB_texture_rectangle : enable
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync
7bff28e0cedd8656acd24b420759649184d8cf00vboxsyncuniform sampler2DRect uSrcTex;
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync
7bff28e0cedd8656acd24b420759649184d8cf00vboxsyncvoid cconvApplyAYUV(vec4 color);
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/* texture internalFormat: 4
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * size: width/2 X height
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * data format: GL_BGRA_EXT
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * UYVY ->
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * U = B
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * V = R
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * for even -> Y = G
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * for odd -> Y = A
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/* UYVY-rgb888 conversion shader */
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync/* this is also Y422 and UYNV */
7bff28e0cedd8656acd24b420759649184d8cf00vboxsyncvoid cconvUYVY(vec2 srcCoord)
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync{
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync float x = srcCoord.x;
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync vec4 srcClr = texture2DRect(uSrcTex, vec2(x, srcCoord.y));
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync float u = srcClr.b;
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync float v = srcClr.r;
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync int pix = int(x);
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync float part = x - float(pix);
27537ffef7291d0bb3a24e459a6b94c65586defevboxsync float y;
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync if(part < 0.5)
8c5d1958147c3988a7693b5a7666f5fe21a93b7bvboxsync {
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync y = srcClr.g;
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync }
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync else
8c5d1958147c3988a7693b5a7666f5fe21a93b7bvboxsync {
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync y = srcClr.a;
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync }
c4c106ad74e0ad745ac49a2c4182c4f42ced7248vboxsync /* convert it to AYUV (for the GL_BGRA_EXT texture this is mapped as follows:
c5861c548c83913808475ea59cab2e09a23247c8vboxsync * A -> B
c5861c548c83913808475ea59cab2e09a23247c8vboxsync * Y -> G
c5861c548c83913808475ea59cab2e09a23247c8vboxsync * U -> R
7bff28e0cedd8656acd24b420759649184d8cf00vboxsync * V -> A */
c5861c548c83913808475ea59cab2e09a23247c8vboxsync cconvApplyAYUV(vec4(u, y, 0.0, v));}
c5861c548c83913808475ea59cab2e09a23247c8vboxsync