首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

一个比较简单的平面yuv422格式转rgb24格式的代码(速度比较快)解决方案

2012-12-23 
一个比较简单的平面yuv422格式转rgb24格式的代码(速度比较快)int table_y[240]int table_ub[256]int tab

一个比较简单的平面yuv422格式转rgb24格式的代码(速度比较快)


int table_y[240];
int table_ub[256];
int table_ug[256];
int table_vg[256];
int table_vr[256];

void InitialTable()
{
for (int i = 0; i < 240; ++i)
{
table_y[i] = 4767*i;
table_y[i] = table_y[i] >>12;
}
for (int j = 0; j < 256; ++j)
{
table_ub[j] = 8265*(j-128);
table_ub[j] = table_ub[j]>>12;

table_ug[j] = 1556*(j-128);
table_ug[j] = table_ug[j]>>12;

table_vg[j] = 3330 * (j-128);
table_vg[j] = table_vg[j]>>12;

table_vr[j] = 4747*(j-128);
table_vr[j] = table_vr[j] >>12;
}
}

BOOL YUV422TORGB24( BYTE* pDest, int width, int height, int channel, const BYTE* pSrc )
{
int offset1 = width * height;
int offset2 = offset1 + (width >>1)*height;
for (int i = 0; i < height; i++)
{
int widthOffset1 = i*width;
int index1 = widthOffset1 * channel;
for (int j =0; j < width; j+=2)
{
{
int y = pSrc[widthOffset1 + j];
int u = pSrc[offset1 + ((widthOffset1 + j)>>1)];
int v = pSrc[offset2 + ((widthOffset1 + j)>>1)];
int yy = y-16;
int b = table_y[yy] + table_ub[u]; //查表
int g = table_y[yy] - table_ug[u] - table_vg[v];
int r = table_y[yy] + table_vr[v];
if (r > 255) r = 255;
if (r < 0) r = 0;
if (g > 255) g = 255;
if (g < 0) g = 0;
if (b > 255) b = 255;
if (b < 0) b = 0;
int index = index1 + j*channel; 
pDest[index] = b;
pDest[index + 1] = g;
pDest[index + 2] = r;
}
{
int y = pSrc[widthOffset1 + (j+1)];
int u = pSrc[offset1 + ((widthOffset1 + (j+1))>>1)];
int v = pSrc[offset2 + ((widthOffset1 + (j+1))>>1)];
int yy = y-16;

int b = table_y[yy] + table_ub[u];
int g = table_y[yy] - table_ug[u] - table_vg[v];
int r = table_y[yy] + table_vr[v];
if (r > 255)r = 255;
if (r < 0) r = 0;
if (g > 255) g = 255;
if (g < 0) g = 0;
if (b > 255) b = 255;
if (b < 0) b = 0;
int index = index1 + (j+1)*channel; 
pDest[index] = b;
pDest[index + 1] = g;
pDest[index + 2] = r;
}
}
}
return TRUE;
}


------解决方案--------------------


上面的转换速度还是比较快,主要问题还是占用cpu,大概是在50%左右,哪位高手看再能不能给优化一下,或者使用mmx进行优化
[解决办法]
帮顶一个.
[解决办法]
怎么就没有人响应呢
大家提个意见
看怎么再优化
[解决办法]
难道没有人知道mmx
要是有高手知道的话就解答一下咯

[解决办法]
不懂,帮顶
[解决办法]
http://blog.csdn.net/wxzking/archive/2009/07/11/4339650.aspx
算法优化:rgb向yuv的转化最优算法,快得让你吃惊! 

看看这个,希望能对你会有所启发。

[解决办法]
int yy = y-16;

这句话可能造成yy<0,查表会出错,我用的时候先判断了一下,然后给yy置零,不知道对不对
[解决办法]
我请为你channel是指的什么啊?

热点排行