按照微软给的例子Camera_null来开发摄像头驱动,最近一直有个困扰,因为camera sensor ov3640过来的是YUV格式,拍照时候用到QXGA(2048*1536)分辨率,但DShow不支持,现象是CameraDshowApp.exe程序进入时候查询Pin,最终失败!我的设置如下:
/* 000=> RGB format */
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_001, 320, 240, 16, 30);//320x240 QVGA
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_002, 352, 288, 16, 15);//352x288 CIF
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_003, 640, 480, 16, 15);//640x480 VGA
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_004, 800, 600, 16, 15);//800x600 SVGA
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_005, 1024,768, 16, 15);//1024x768 XGA
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_006, 2048,1536,16, 15);//2048x1536 QXGA
//High resolution pic can only take RGB,not YUV
/* 100==> YUY2 format */
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_101, 320, -240, 16, 30);//320x240 QVGA
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_102, 352, -288, 16, 30);//352x288 CIF
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_103, 640, -480, 16, 15);//640x480 VGA
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_104, 800, -600, 16, 15);//800x600 SVGA
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_105, 1024,-768, 16, 15);//1024x768 XGA
MAKE_STREAM_MODE_YUY2(DCAM_StreamMode_106, 2048,-1536,16, 15);//2048x1536 QXGA
用DCAM_StreamMode_006拍照是可以的,但用DCAM_StreamMode_106就失败,用DCAM_StreamMode_105 XGA也可以,说明其不支持YUV高分辨率的图像。如果用DCAM_StreamMode_006,数据到来得软件转换YUV到RGB,太慢了点,所以想法看DCAM_StreamMode_106可行否,可以速度会提高很多。有点怀疑,是不是内存大小的限制???
引用: 引用 1 楼 terryzou 的回复:
肯定是内存不够导致的问题,因为IImageSinkFilter是不支持YUV数据的,所以得有中间的Transfer Filter把YUV数据转换为RGB,这需要开一些BUFF。你用RGB时,就不要中间的Transfer Filter了。
参考下:
http://topic.eeworld.net/u/20091207/20/ecd2dad6-55e8-4972-b3e8-8b6376458915.html,更改下就没问题了
有道理,我搜索了国外有人也碰到类似的问题,就是高分辨率的YUV导致占用内存很大,致使失败。
肯定是内存不够导致的问题,因为IImageSinkFilter是不支持YUV数据的,所以得有中间的Transfer Filter把YUV数据转换为RGB,这需要开一些BUFF。你用RGB时,就不要中间的Transfer Filter了。
参考下:
http://topic.eeworld.net/u/20091207/20/ecd2dad6-55e8-4972-b3e8-8b6376458915.html,更改下就没问题了