Quickly, here is the YUV code I used with Tango
int halfi, uvOffset, halfj, uvOffsetHalfj;
float y_scaled, v_scaled, u_scaled;
const float Umax = 0.436f;
const float Vmax = 0.615f;
unsigned char* pData = TangoData::cameraImageBuffer;
unsigned char* iData = TangoData::cameraImageBufferRGBA;
float invByte = 0.0039215686274509803921568627451;
is_image_dirty = false;
int size = (int)(TangoData::imageBufferStride * TangoData::imageBufferHeight);
int uOffset = size / 4 + size;
int halfstride = TangoData::imageBufferStride / 2;
for (int i = 0; i < TangoData::imageBufferHeight; ++i)
{
halfi = i / 2;
uvOffset = halfi * halfstride;
for (int j = 0; j < TangoData::imageBufferWidth; ++j)
{
halfj = j / 2;
uvOffsetHalfj = uvOffset + halfj;
y_scaled = pData[i * TangoData::imageBufferStride + j] * invByte;
v_scaled = 2 * (pData[uvOffsetHalfj + size] * invByte - 0.5f) * Vmax;
u_scaled = 2 * (pData[uvOffsetHalfj + uOffset] * invByte - 0.5f) * Umax;
*iData++ = (unsigned char)((y_scaled + 1.13983f * v_scaled) * 255.0);;
*iData++ = (unsigned char)((y_scaled - 0.39465f * u_scaled - 0.58060f * v_scaled) * 255.0);
*iData++ = (unsigned char)((y_scaled + 2.03211f * u_scaled) * 255.0);
*iData++ = 255;
}
}
, , , , - , . , , , , ..... !
Google Devs, , . , , , , . , , Google, AR, . , Google Devs, , - A . , , . !