YUV转RGB函数
来源:互联网 发布:64码高清网络电视vlc 编辑:程序博客网 时间:2024/04/29 18:11
以下是YUV420转RGB24函数,有试过可以的,其中参数
src0 是Y量的起始指针, src1 是U量的起始指针 , src2是 V量的起始指针
dst_ori 是RGB buffer的起始指针
width 为宽,height 为高
对于YUV420格式数据的YUV量分配分别是
Y量为 数据的起始指针
U量为 数据的起始指针 + 宽*高
V量为 数据的起始指针 + 宽*高*5/4
void ConvertYUVtoRGB(unsigned char *src0,unsigned char *src1,unsigned char *src2,unsigned char *dst_ori,int width, int height)
{
extern long int crv_tab[];
extern long int cbu_tab[];
extern long int cgu_tab[];
extern long int cgv_tab[];
extern long int tab_76309[];
int y11, y21;
int y12, y22;
int y13, y23;
int y14, y24;
int u, v;
int i, j;
int c11, c21, c31, c41;
int c12, c22, c32, c42;
unsigned int DW;
unsigned int *id1, *id2;
unsigned char *py1, *py2, *pu, *pv;
unsigned char *d1, *d2;
d1 = dst_ori;
d1 += width * height * 3 - width * 3;
d2 = d1 - width * 3;
py1 = src0;
pu = src1;
pv = src2;
py2 = py1 + width;
id1 = (unsigned int *) d1;
id2 = (unsigned int *) d2;
for (j = 0; j < height; j += 2)
{
/* line j + 0 */
for (i = 0; i < width; i += 4)
{
u = *pu++;
v = *pv++;
c11 = crv_tab[v];
c21 = cgu_tab[u];
c31 = cgv_tab[v];
c41 = cbu_tab[u];
u = *pu++;
v = *pv++;
c12 = crv_tab[v];
c22 = cgu_tab[u];
c32 = cgv_tab[v];
c42 = cbu_tab[u];
y11 = tab_76309[*py1++]; /* (255/219)*65536 */
y12 = tab_76309[*py1++];
y13 = tab_76309[*py1++]; /* (255/219)*65536 */
y14 = tab_76309[*py1++];
y21 = tab_76309[*py2++];
y22 = tab_76309[*py2++];
y23 = tab_76309[*py2++];
y24 = tab_76309[*py2++];
/* RGBR */
DW = ((clp[(y11 + c41) >> 16])) |
((clp[(y11 - c21 - c31) >> 16]) << 8) |
((clp[(y11 + c11) >> 16]) << 16) |
((clp[(y12 + c41) >> 16]) << 24);
*id1++ = DW;
/* GBRG */
DW = ((clp[(y12 - c21 - c31) >> 16])) |
((clp[(y12 + c11) >> 16]) << 8) |
((clp[(y13 + c42) >> 16]) << 16) |
((clp[(y13 - c22 - c32) >> 16]) << 24);
*id1++ = DW;
/* BRGB */
DW = ((clp[(y13 + c12) >> 16])) |
((clp[(y14 + c42) >> 16]) << 8) |
((clp[(y14 - c22 - c32) >> 16]) << 16) |
((clp[(y14 + c12) >> 16]) << 24);
*id1++ = DW;
/* RGBR */
DW = ((clp[(y21 + c41) >> 16])) |
((clp[(y21 - c21 - c31) >> 16]) << 8) |
((clp[(y21 + c11) >> 16]) << 16) |
((clp[(y22 + c41) >> 16]) << 24);
*id2++ = DW;
/* GBRG */
DW = ((clp[(y22 - c21 - c31) >> 16])) |
((clp[(y22 + c11) >> 16]) << 8) |
((clp[(y23 + c42) >> 16]) << 16) |
((clp[(y23 - c22 - c32) >> 16]) << 24);
*id2++ = DW;
/* BRGB */
DW = ((clp[(y23 + c12) >> 16])) |
((clp[(y24 + c42) >> 16]) << 8) |
((clp[(y24 - c22 - c32) >> 16]) << 16) |
((clp[(y24 + c12) >> 16]) << 24);
*id2++ = DW;
}
id1 -= (9 * width) >> 2;
id2 -= (9 * width) >> 2;
py1 += width;
py2 += width;
}
}
- YUV转RGB函数
- yuv转rgb的函数
- YUV转RGB常用函数
- YUV转RGB的相关函数
- YUV 与RGB互转的函数
- YUV转RGB的相关函数
- RGB转YUV YUV转RGB
- YUV转RGB
- YUV转RGB
- RGB转YUV
- YUV转RGB
- YUV转RGB汇总
- android YUV转RGB
- YUV转RGB
- YUV转RGB
- RGB转YUV
- yuv转rgb
- yuv转RGB
- SVN使用技巧
- itoa实现类型转换
- 想做什么样的首页?只有你想不到的,没有我做不到的
- IIS常见问题及解答以及故障分析
- 裴琳为吸毒事件鞠躬认错狂飚泪
- YUV转RGB函数
- 公主小妹第10集播放(完整版)
- C#实现登录验证码
- 分析下周股市五大猜想
- VC学习一日一练(1)---为菜单项前添加图标
- 股票转让所得税暂不开征
- readonly vs. const [C#] .net
- The Architecture Of Avalon
- 11月17日火箭vs马刺