转换是必要的,一般显卡直接支持的yuv显示格式是I420或者YV12,还是要转
转换方法:1. ffmpeg里的swscale库,1080P的一张视频转换消耗时间在1-5毫秒左右,不能算很耗时
2. opengl 或者 d3d,自己写着色器转换(相当于显卡实现转换,不怎么用你的cpu)
显示写的不好可能比颜色空间转换要的代价更大
转换方法:1. ffmpeg里的swscale库,1080P的一张视频转换消耗时间在1-5毫秒左右,不能算很耗时
2. opengl 或者 d3d,自己写着色器转换(相当于显卡实现转换,不怎么用你的cpu)
显示写的不好可能比颜色空间转换要的代价更大
解决方案 »
- 我使用DIRECTX定点坐标创建图形出错时为什么?
- 为什么我拥有Administrator权限,打开系统进程还是失败?
- 有没连接https的代码啊?
- 分割窗口问题!!!
- ActiveX控件中一个接口返回一个结构类型.其中一个元素是BSTR 在C#中实例化该结构没有问题.但在vb中出现类型不能自动化的问题.
- 请教一个关于switch case 的问题?
- 这个出错信息如何解决?
- 师傅们好,我想把txt文本的数据导入到ACCESS数据库,有2000万条不知道怎么弄
- 各位大哥各位大姐,关于流光4。7的问题,虽然在这里提不太合适,可我老来这!!!
- hinstance 是不是就是地址?
- videonet视频聊天程序求助
- CFileDialog 的 DoModal执行时候,提示“文件已存在,是否覆盖”的对话框,选择“是”,如何获取用户的选择?
{
if(v < 0)
v=0;
else if( v > 255)
v=255;
return (unsigned char)v;
}
BOOL YUY2_RGB2_ljh(unsigned char *YUY2buff,unsigned char *RGBbuff,long dwSize)
{
unsigned char *orgRGBbuff = RGBbuff;
for( long count = 0; count < dwSize; count += 4 )
{//Y0 U0 Y1 V0
unsigned char Y0 = *YUY2buff;
unsigned char U = *(++YUY2buff);
unsigned char Y1 = *(++YUY2buff);
unsigned char V = *(++YUY2buff);
++YUY2buff;
long Y,C,D,E;
unsigned char R,G,B;
Y = Y0;
C = Y - 16;
D = U - 128;
E = V - 128;
R = clip255(( 298 * C + 409 * E + 128) >> 8);
G = clip255(( 298 * C - 100 * D - 208 * E + 128)>> 8);
B = clip255(( 298 * C + 516 * D + 128) >> 8);
*(RGBbuff) = B;
*(++RGBbuff) = G;
*(++RGBbuff) = R;
Y = Y1;
C = Y-16;
D = U-128;
E = V-128;
R = clip255(( 298 * C + 409 * E + 128) >> 8);
G = clip255(( 298 * C - 100 * D - 208 * E + 128)>> 8);
B = clip255(( 298 * C + 516 * D + 128) >> 8);
*(++RGBbuff) = B;
*(++RGBbuff) = G;
*(++RGBbuff) = R;
++RGBbuff;
}
return true;
}嗯,谢谢。这是我在网上找到的YUY2转RGB的方法,还好用。贴出来,如果有需要可以参考下。
左边是本地的图像显示 正常的 右边为解码之后的 就有问题了