本文先简单记录:
1.ov9650采集 摄像头输出yuyv格式
2.写入到framebuffer显示
3.贴yuv2rgb.c的代码如下:
tips: 查表法/bpp=32 table略
void yuv2rgb(unsigned char *pyuv,unsigned char *prgb,int width, int height)
{
unsigned char *py = pyuv;
//unsigned short *pb = prgb;
unsigned char *pb = prgb;
unsigned int y1,u,y2,v;
int rdif, invgdif, bdif;
int r = 0,g = 0,b = 0;
int x,y;
for(y = 0; y < height; y++){
for(x = 0; x < width; x += 2){
y1 = *py++ ;
u = *py++ ;
y2 = *py++ ;
v = *py++;
rdif = Table_fv1[v];
invgdif = Table_fu1[u] + Table_fv2[v];
bdif = Table_fu2[u];
r = y1 + rdif;
g = y1 - invgdif;
b = y1 + bdif;
r = (r > 255)?255:(r < 0)?0:r;
g = (g > 255)?255:(g < 0)?0:g;
b = (b > 255)?255:(b < 0)?0:b;
//pb[x+0] = b;
//pb[x+1] = g;
//pb[x+2] = r;
//pb[x+3] = 0;
*pb++ = b;
*pb++ = g;
*pb++ = r;
*pb++ = 0;
//*pb++ = 0;
//*pb++ = 0;
//*pb++ = 200;
//*pb++ = 0;
//*pb++ = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3) ;
r = y2 + rdif;
g = y2 - invgdif;
b = y2 + bdif;
r = (r > 255)?255:(r < 0)?0:r;
g = (g > 255)?255:(g < 0)?0:g;
b = (b > 255)?255:(b < 0)?0:b;
//pb[x+4] = b;
//pb[x+5] = g;
//pb[x+6] = r;
//pb[x+7] = 0;
*pb++ = b;
*pb++ = g;
*pb++ = r;
*pb++ = 0;
//*pb++ = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
}
pb = prgb + 800 * 4 * y;
}
同样也可以用移位去计算rgb:(像素编码)
unsigned int *pb = prgb;
*pb++ = (r << 16) | ((g << 8) | b;