wince上好像不能直接显示 yuv420p的数据,
从网上找来一些转换的函数,将yuv420p转换成rgb565,出现要不是黑屏,要不是彩色条纹。
我想采用sws_scale来解决,但是
static struct SwsContext *ctx;
ctx = sws_getContext(c->width,c->height,PIX_FMT_RGB565,c->width,c->height,PIX_FMT_YUV420P,SWS_BICUBIC, NULL, NULL, NULL);
ctx得到的值总是NULL,根本就不能使用sws_scale来转换。
各位大侠,请问该怎么办?
大哥不是CE不支持什么的。。yuv420,422一般是摄像头一类的采用的格式。。要想将数据显示在屏上还必须将拿到的数据转换成565,或者888,等等,,,你出现花屏,或者是黑屏。要么是你去的数据yuv的顺序搞错了,要么是RGB数据位搞错了。还有你的yuv数据时什么形式的,两种形式一种是pack模式,一种是plannar模式。都要搞清楚了你才能下定结论。。看到有彩色条纹你要先对比下自己晃一下手。。看图像是否有变化
谁说的,用ddraw直接就可以显示yuv格式的,我的摄像头程序就是那样。你要转成RGB格式再显示?别告诉我用GDI的方式,我以前就是,图像大的时候很不流畅。后面用ddraw,相当流畅,而且也不用转换格式
哦。。我似乎就是GDI画的吧。。只是仪的简单的测试程序。。将RGB得数据直接放到display的缓存就完了。。。呵呵。。顶你
我在PC机上 采用directshow 架构,用yuv420P 直接在屏幕上显示,画面没有问题,能够很流畅的播放文件。
现在是同样的程序使用在wince上,却出现彩色条纹。
我开始以为是wince不支持yuv420P,所以转换成rgb,仍然是 彩色条纹。
烦恼啊……
我做camera的时候,用intel的ipp库把yuv422转成RGB565过,你可以去看一看
引用: 引用 2 楼 qwqwqw408 的回复:
? 谁说的,用ddraw直接就可以显示yuv格式的,我的摄像头程序就是那样。你要转成RGB格式再显示?别告诉我用GDI的方式,我以前就是,图像大的时候很不流畅。后面用ddraw,相当流畅,而且也不用转换格式
你要知道,directdraw是会根据你的BSP提供的硬件加速接口,自动去调用你YUV转RGB的硬件加速的,并不是说你用了DDRAW就能直接显示YUV格式的,能不能直接显示YUV,要看你的CPU显示控制器支不支持YUV输入,如果它只认RGB数据,directdraw还是要调用软件转换库把你的YUV转成RGB格式的
引用: 引用 7 楼 ok138ok 的回复:
引用 2 楼 qwqwqw408 的回复:
? 谁说的,用ddraw直接就可以显示yuv格式的,我的摄像头程序就是那样。你要转成RGB格式再显示?别告诉我用GDI的方式,我以前就是,图像大的时候很不流畅。后面用ddraw,相当流畅,而且也不用转换格式
你要知道,directdraw是会根据你的BSP提供的硬件加速接口,自动去调用你YUV转RGB的硬件加速的,并不是说你用了DDRAW就能直接显示YUV格式的,能不能直接显示YUV,要看你的CPU显示控制器支不支持YUV输入,如果它只认RGB数据,directdraw还是要调用软件转换库把你的YUV转成RGB格式的
他只是问wince能不能直接显示yuv格式的数据。言下之意,wince上是否有直接可以显示yuv格式视频的api。人家并不是搞硬件或驱动开发,你没必要搞到这么深入。
8楼的小哥,你说的很对,我不是搞硬件/驱动开发
我只是需要解决显示的问题。
用ddraw试一下。创建一个主表面,然后再创建一个覆盖面,覆盖面的类型要设置为yuv格式。具体设置哪一种需要看你的ddraw支持哪几种的,我的上面是可以支持yv12和yuyv420等。创建完之后,就可以将覆盖页面显示在主页面了。具体代码很多,这里贴不出来