WINCE6.0基于DirectShow架构的camera驱动使用高分辨率(2048*1535)打开预览很慢
大家好,我的平台是WINCE6.0+S3C2451,摄像头是采用Q3S04C模组,其中的感光芯片是三星的S5K5CAGA,camera驱动采用的是基于DirectShow架构的,应用是用《windows CE嵌入式高级编程及其实例详解》第7章摄像头捕捉的例子,基于这个应用程序我们增加了不同的分辨率320*240,640*480,1024*768和2048*1536这四种分辨率来预览,对于三种分辨率,从选择预览到图像显示出来大概需要12s,而2048*1536相应的需要30s,在调试过程当中,我遇到下面的一些问题需要大家帮忙分析一下:
1.我在下面的应用程序中添加输出信息
if (!GetFirstCameraDriver( wzDeviceName ))
{
goto Cleanup;
}
NKDbgPrintfW(TEXT("PreviewCamera 222222\r\n"));
varCamName = wzDeviceName;
if(( varCamName.vt == VT_BSTR ) == NULL ) {
return FALSE;
}
//设置视频捕捉为第1个捕捉设备
PropBag.Write( L"VCapName", &varCamName );
CHK(m_pPropertyBag->Load( &PropBag, NULL ));
NKDbgPrintfW(TEXT("sundi 00000\r\n"));
可是为什么在NKDbgPrintfW(TEXT("PreviewCamera 222222\r\n"))和NKDbgPrintfW(TEXT("sundi 00000\r\n"));之间会调用了27次左右的CAM_IOControl()
CAM_IOControl qiang(d3076840): IOCTL:0x2f0003, InBuf:0x4f018, InBufLen:24, OutBuf:0x4f064, OutBufLen:0x4)
CAM_IOControl() minute=29,second=30
CAM_IOControl(d3076840): IOCTL_CS_PROPERTY
CAM_IOControl(d26a7f80): AdapterHandleCustomRequests
而不是一次呢?当后到预览图像出来之前还调用了很多次CAM_IOControl函数。
2.为什么对于2048*1536分辨率的预览,在下面的调用中消耗了大概13s的时间,而对于其他三种分辨率在这里大概消耗3s
CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));
而且我通过出口输出信息发现对于最高的分辨率来说,在这13s的时间里停留了4次,每次约为2.5s,而且是停在camera驱动输出的IOControl Adapter PDD: Unsupported PropertySet Request信息的地方,这种停顿对于前三种分辨率是没有的,应该是和高分辨率有关,因为高分辨率需要更大的内容,比如2048*1536*2=6MB,但具体不知道为什么会这样?如何解决这个问题?
备注:上面应用程序的源代码见链接:http://www.waterpub.com.cn/softdown/FileInfo-1.Asp?SoftID=2989
期望大家谈谈自己的想法、理解,期望能给我提供解决问题的思路,麻烦大家了,谢谢。
陈堪宜