Amos Tibaldi wrote:
>     unsigned short int thecolor =  u << 12 | y << 8 | v << 4 | y;
> 
This is completely wrong. In a UYVY image, you have two different 8-bit
Y components, sharing an 8-bit U component, and an 8-bit V component. In
pseudocode, creating a 32-bit UYVY pixel pair from two RGB pixels:

(y, u, v) RGBtoYUV( r, g, b )
{
        y =  0.299 * r +
             0.587 * g +
             0.114 * b;

        u = -0.147 * r +
            -0.289 * g +
             0.436 * b;

        v =  0.615 * r +
            -0.515 * g +
            -0.100 * b;
}

uyvy RGBtoUYUV( r1, g1, b1, r2, g2, b2 )
{
        (y1,u1,v1) = RGBtoYUV( r1, g1, b1 )
        (y2,u2,v2) = RGBtoYUV( r2, g2, b2 )

        u = (u1 + u2) / 2; // Or other decimation strategy
        v = (v1 + v2) / 2; // Or other decimation strategy

        uyvy  = 8bits(u) << 24;
        uyvy |= 8bits(y1) << 16;
        uyvy |= 8bits(v) << 8;
        uyvy |= 8bits(y2);
}
-- 
Simon Farnsworth

_______________________________________________
xorg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to