平台:6410+WINCE6.0
新开一个贴,再讨论一下这个CAMERA应用开发,因为本人一直是做驱动的,现在要写应用,而且是COM接口的directshow,所以有很多东西要向大家请教,
用640X480分辩进行preview 和 拍照都没有问题,但是,我驱动给directshow传的是RGB数据才行,如果是YUV的话,超过320X240,它就会去调用MFC Decoder的filter,所以程序不能正常运行,把MFC Decoder的filter去掉,它就显示调用出错。
如果给directshow传的是RGB数据,那么,能做到1024x768分辩率的拍照,当我提高到2048x1536分辨率时,它就出错了,
打印信息如下:
//-------------------------------------------------------------
Platform Type : SMDK6410
加载模块: quartz.dll
加载模块: WS2.dll
加载模块: MMTimer.dll
加载模块: urlmon.dll
加载模块: SHLWAPI.dll
加载模块: WININET.dll
加载模块: iphlpapi.dll
加载模块: wmvdmoe.dll
加载模块: msdmo.dll
加载模块: DDRAW.DLL
Width = 642, Height = 480
线程 0x9ee0006 已退出,返回值为 0 (0x0)。
线程 0x9ec000e 已退出,返回值为 0 (0x0)。
线程 0x8020012 已退出,返回值为 0 (0x0)。
线程 0x9fd000e 已退出,返回值为 0 (0x0)。
程序“[7a1006e] CameraDemo.exe”已退出,返回值为 1067 (0x42b)。
//----------------------------------------------------------------
我创建拍照的PIN 代码如下:
// 创建Still Pin,用于抓图
CHK(m_pImageSinkFilter.CoCreateInstance(CLSID_IMGSinkFilter));
CHK(m_pGraphBuilder->AddFilter(m_pImageSinkFilter, L"Still image filter" ));
CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));
//-----------------------驱动里我给still的配置如下
MAKE_STREAM_MODE_RGB565(DCAM_StreamMode_13, 2048,1536, 16, 15);
......
m_pModeVideoFormat[STILL].pCsDataRangeVideo[0] = &DCAM_StreamMode_13;
//------------------------------------------------------------------------
如果我不创建这个PIN,它是不会退出的,但是不能拍照,或者我驱动给应用返回的still的分辩率小于2048x1536,它也是正常的,
我的问题:
1、是不是directshow的still image filter “CLSID_IMGSinkFilter filter”有分辨率限制? 如果是,我如何修改?
2、我现在要实现2048x1536 分辨率拍照,请问我该如何做?
请做过这个的高手指点迷津!谢谢!