这两天写播放器测试插件,涉及到了yuv2rgb的部分,这里我说现实到PC上,所以是转成32位RGBA,准确的来说windows是BGRA的现实方式,参考了下广大网友的很多做法,最简单典型的算整形法了,而且速度也很快,不会涉及到浮点数运算。当然如果要PORTING到嵌入式平台,做好的当然是使用查表法咯,查表分部分查表法和完全查表法,等会研究下,在贴出具体情况。
自我感觉代码还算简单,理解起来也不难,这里贴出来分享:
/*------------------------
yuv420 to rgb8888
转换公式:
R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128) - 0.7169*(V-128)
B=Y+1.779*(U-128)
为了加快运算速度,采用下面的整形计算法:
u = YUVdata[UPOS] - 128;
v = YUVdata[VPOS] - 128;
rdif = v + ((v * 103) >> 8);
invgdif = ((u * 88) >> 8) +((v * 183) >> 8);
bdif = u +( (u*198) >> 8);
r = YUVdata[YPOS] + rdif;
g = YUVdata[YPOS] - invgdif;
b = YUVdata[YPOS] + bdif;
r=r>255?:255:(r<0:?0:r);
g=g>255?:255:(g<0:?0:g);
b=b