急!!!wince 上yuv420p 转 RGB565 黑屏或者花屏

guiziqian   2009-9-23 10:41 楼主
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来转换。

各位大侠,请问该怎么办?

回复评论 (13)

大哥不是CE不支持什么的。。yuv420,422一般是摄像头一类的采用的格式。。要想将数据显示在屏上还必须将拿到的数据转换成565,或者888,等等,,,你出现花屏,或者是黑屏。要么是你去的数据yuv的顺序搞错了,要么是RGB数据位搞错了。还有你的yuv数据时什么形式的,两种形式一种是pack模式,一种是plannar模式。都要搞清楚了你才能下定结论。。看到有彩色条纹你要先对比下自己晃一下手。。看图像是否有变化
点赞  2009-9-23 13:44
  谁说的,用ddraw直接就可以显示yuv格式的,我的摄像头程序就是那样。你要转成RGB格式再显示?别告诉我用GDI的方式,我以前就是,图像大的时候很不流畅。后面用ddraw,相当流畅,而且也不用转换格式
点赞  2009-9-23 14:38
哦。。我似乎就是GDI画的吧。。只是仪的简单的测试程序。。将RGB得数据直接放到display的缓存就完了。。。呵呵。。顶你
点赞  2009-9-23 16:49
我在PC机上 采用directshow 架构,用yuv420P 直接在屏幕上显示,画面没有问题,能够很流畅的播放文件。
现在是同样的程序使用在wince上,却出现彩色条纹。

我开始以为是wince不支持yuv420P,所以转换成rgb,仍然是 彩色条纹。

烦恼啊……
点赞  2009-9-24 11:54
我做camera的时候,用intel的ipp库把yuv422转成RGB565过,你可以去看一看
点赞  2009-9-25 09:16
引用: 引用 5 楼 suwyhoho 的回复:
我做camera的时候,用intel的ipp库把yuv422转成RGB565过,你可以去看一看


intel的ipp库这个怎么用?我也在弄这个
点赞  2009-9-25 17:12
引用: 引用 2 楼 qwqwqw408 的回复:
? 谁说的,用ddraw直接就可以显示yuv格式的,我的摄像头程序就是那样。你要转成RGB格式再显示?别告诉我用GDI的方式,我以前就是,图像大的时候很不流畅。后面用ddraw,相当流畅,而且也不用转换格式


你要知道,directdraw是会根据你的BSP提供的硬件加速接口,自动去调用你YUV转RGB的硬件加速的,并不是说你用了DDRAW就能直接显示YUV格式的,能不能直接显示YUV,要看你的CPU显示控制器支不支持YUV输入,如果它只认RGB数据,directdraw还是要调用软件转换库把你的YUV转成RGB格式的
点赞  2009-9-26 11:38
引用: 引用 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。人家并不是搞硬件或驱动开发,你没必要搞到这么深入。
点赞  2009-9-26 13:39
8楼的小哥,你说的很对,我不是搞硬件/驱动开发
我只是需要解决显示的问题。
点赞  2009-9-27 09:10
我使用plannar模式存储 yuv420数据的
点赞  2009-9-27 09:13
mark
点赞  2009-9-28 22:19
站位
点赞  2009-9-29 09:36
  用ddraw试一下。创建一个主表面,然后再创建一个覆盖面,覆盖面的类型要设置为yuv格式。具体设置哪一种需要看你的ddraw支持哪几种的,我的上面是可以支持yv12和yuyv420等。创建完之后,就可以将覆盖页面显示在主页面了。具体代码很多,这里贴不出来
点赞  2009-9-29 09:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复