专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体/流媒体开发

急求RGB565转YUV420的算法解决思路

发布时间:2011-06-27 19:27:36 文章来源:www.iduyao.cn 采编人员:星星草
急求RGB565转YUV420的算法
急求RGB565转YUV420的算法, 有代码就最好了, 谢谢!

我在directshow采集视频时取出来的是RGB565, 现在想转换成YUV42O, 我在网上找到了一下只有YUV420转RGB565的

------解决方案--------------------
别让哥削你,xvid。
------解决方案--------------------
http://download.csdn.net/source/3348196
尝试怎么用,我不写 demo 了,
------解决方案--------------------
YUV与RGB格式的互转资料,可以参考http://www.fourcc.org/fccyvrgb.php
------解决方案--------------------
可以用ffmpeg转换。
ffmpeg的效率很高。
------解决方案--------------------
你编译完 colorspace 以后,有个 colorspace.lib 的静态库 和 colorspace.h
colorspace.h 里是 colorspace 支持的转换,如 
C/C++ code

packedFunc rgb555_to_yv12_c;
packedFunc rgb565_to_yv12_c;
packedFunc rgb_to_yv12_c;
packedFunc bgr_to_yv12_c;
packedFunc bgra_to_yv12_c;

------解决方案--------------------
#ifndef GET565RValue
#define GET565RValue(rgb) ((BYTE) (((((WORD)(rgb))&0xF800))>>8) )
#endif
#ifndef GET565GValue
#define GET565GValue(rgb) ((BYTE) (((((WORD)(rgb))&0x07E0))>>3) )
#endif
#ifndef GET565BValue
#define GET565BValue(rgb) ((BYTE) (((((WORD)(rgb))&0x001F)) << 3) )
#endif

#define CLIP(v) ( (v)<0? 0 : (v>255?255:v) )

#define GETY(r,g,b) ( ( 66 * (r) + 129 * (g) + 25 * (b) + 128) >> 8) + 16
#define GETU(r,g,b) ( ( -38 * (r) - 74 * (g) + 112 * (b) + 128) >> 8) + 128
#define GETV(r,g,b) ( ( 112 * (r) - 94 * (g) - 18 * (b) + 128) >> 8) + 128


void RgbToYuv(unsigned char *pRgbData, int w, int h, unsigned char *pYuv, int iLen)
{
unsigned char *pY, *pU, *pV, y, u, v;
WORD word, r, g, b;
WORD *pRgb = (WORD *)pRgbData;
int iVideSize = w * h;
pY = pYuv;
pU = (pY + iVideSize);
pV = (pU + iVideSize/4);
int off = 0, iChromaOff = 0;
for(int row=0; row<h; row++)
{
off = row * w;
iChromaOff = row/2 * w/2;
for(int col=0; col<w; col++)
{
word = *(pRgb + off + col);
r = GET565RValue(word);
g = GET565GValue(word);
b = GET565BValue(word);

y = CLIP(GETY(r,g,b));
pY[off + col] = y;
if( !(row%2) && !(col%2) )
{
u = CLIP(GETU(r,g,b));
v = CLIP(GETV(r,g,b));
pU[iChromaOff + col/2] = u;
pV[iChromaOff + col/2] = v;
}
}
}
}

我这里也有一个, 不过用的时候有个奇怪的问题,第1桢是正常的, 第2,3,4桢是花的, 第5桢又是正常的, 这样中间有三个桢是花的, 是不是算法那里还有问题呀

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: