static short __s_r_1370705v[256] = {0};
static short __s_b_1732446u[256] = {0};
static short __s_g_337633u[256] = {0};
static short __s_g_698001v[256] = {0};
/* 初始化YUV转RGB转换对照表 */
static bool initYUV2RGBTabel()
{
for (int i = 0; i < 256; i++) {
__s_r_1370705v[i] = (1.370705 * (i-128));
__s_b_1732446u[i] = (1.732446 * (i-128));
__s_g_337633u[i] = (0.337633 * (i-128));
__s_g_698001v[i] = (0.698001 * (i-128));
}
return true;
}
void YUV2RGB(unsigned char* rgbBuffer, unsigned char y, unsigned char u, unsigned char v)
{
/* 只初始化一次,用于初始化YUV转RGB对照表 */
static bool __isInitialized = initYUV2RGBTabel();
int r = (int)y + __s_r_1370705v[v];
int g = (int)y - __s_g_337633u[u] - __s_g_698001v[v];
int b = (int)y + __s_b_1732446u[u];
*(rgbBuffer+2) = (r < 0 ? 0 : (r > 255 ? 255 : r)); /* R */
*(rgbBuffer+1) = (g < 0 ? 0 : (g > 255 ? 255 : g)); /* G */
*(rgbBuffer) = (b < 0 ? 0 : (b > 255 ? 255 : b)); /* B */
}