En utilisant opengl es shader pour convertir YUV RVB

Je veux convertir yuv rvb en opengl es shader avec juste un échantillonneur qui contient yuv données. Mon code est ci-dessous:

1) - je envoyer yuv données de texture:

GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_LUMINANCE,
            mData.w, mData.h * 3 /2, 0, GLES20.GL_LUMINANCE,
            GLES20.GL_UNSIGNED_BYTE, ByteBuffer.wrap(mData.yuv));

2) Mon vertex shader:

attribute vec4 position;
attribute vec2 inputTextureCoordinate;
attribute mediump float width;

varying vec2 v_texCoord;
varying mediump vec2 v_vuTexCoord;
varying mediump float x_coord;

void main()
{
    gl_Position = position;
    v_texCoord = vec2(inputTextureCoordinate.x, inputTextureCoordinate.y * 0.6666667);
    v_vuTexCoord = vec2(inputTextureCoordinate.x, inputTextureCoordinate.y * 0.333333 + 0.6666667);
    x_coord = floor(inputTextureCoordinate.x * width);
}

3) Mon fragment shader:

uniform sampler2D inputImageTexture;  
varying mediump vec2 v_texCoord;
varying mediump vec2 v_vuTexCoord;
varying mediump float x_coord;
uniform mediump float u_one_over_tex_size;

void main()
{
    mediump vec3 yuv;
    mediump vec3 rgb;
    mediump float valx = mod(x_coord , 2.0);
    if(valx < 1.0) 
    {
        yuv.y = texture2D(inputImageTexture, v_vuTexCoord + vec2(u_one_over_tex_size, 0)).r - 0.5;
        yuv.z = texture2D(inputImageTexture, v_vuTexCoord).r - 0.5;
    } 
    else {
        yuv.y = texture2D(inputImageTexture, v_vuTexCoord).r - 0.5;
        yuv.z = texture2D(inputImageTexture, v_vuTexCoord + vec2(u_one_over_tex_size, 0)).r - 0.5;
    }
    yuv.x = texture2D(inputImageTexture, v_texCoord).r;
    rgb = mat3(    1,       1,     1,
                   0, -.34413, 1.772,
               1.402, -.71414,     0) * yuv;
    gl_FragColor = vec4(rgb, 1);
}

Mais le résultat n'est pas que je ne le pensais. Si je divise yuv données pour y et uv échantillonneurs et changement de vertex et fragment shader, et je peux avoir le bon résultat. Mais comment pouvais-je seulement envoyer un sampler juste
comme ci-dessus?

J'ai trouvé quelques informations intéressantes dans ce site code.google.com/p/o3d/source/browse/trunk/samples_webgl/shaders/...

OriginalL'auteur The Lord Of Ring | 2013-06-14