50分求助:手机双摄像头时,IPersistPropertyBag::Load()失败
大家好:本人用DirectShow调用手机的摄像头,之前在一个摄像头的手机上,程序运行没有问题;
但在2个摄像头的手机上,发现IPersistPropertyBag::Load()方法失败,返回错误码55,
意思就是“指定的网络资源或设备不再可用”;但我就是没法解决这个问题,大家有谁碰到过
这中问题的啊?
对了,我是在Windows Mobile平台开发的,是手机程序。部分代码如下:
CComPtr<IBaseFilter> m_pSourceFilter;
......
GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A,
0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 };
DEVMGR_DEVICE_INFORMATION di;
di.dwSize = sizeof(DEVMGR_DEVICE_INFORMATION);
FindFirstDevice(DeviceSearchByGuid, &guidCamera, &di);
CComPtr<IPersistPropertyBag> pPropertyBag;
m_pSourceFilter.QueryInte易做图ce(&pPropertyBag);
CComVariant varCamName = di.szLegacyName;
CPropertyBag PropBag;
PropBag.Write(L"VCapName", &varCamName);
pPropertyBag->Load(&PropBag, NULL); //就是这句报错
pPropertyBag.Release();
诸位帮忙看看,先谢过了! --------------------编程问答-------------------- 查了下MSDN,发现Load定义如下:
HRESULT Load(
IPropertyBag *pPropBag,
IErrorLog *pErrorLog
);
IPropertyBag
而楼主的参数是 CPropertyBag指针
在MSDN上没查到CPropertyBag这个类
是不是这的问题呢? --------------------编程问答-------------------- 楼主的方法看似是没有问题的,因为我也是这样做的,不过我没有带前后摄像头的手机,没测试过。不过我很疑惑的是, 我这么才能知道用户使用的是那个摄像头, Mobile SDK中没有ICreateDevEnum接口, 那要怎么才能枚举系统中的设备呢 ? --------------------编程问答-------------------- 先谢谢大家;
是这样的,程序在单摄像头的手机上是没问题的,但双摄像头就有上述问题了。
还有,我把varCamName打印出来看,有的是L"CAM1:";有的是L"CAP1:";
这说明前面的语句都正确执行了的。
to jiangyongtao :
CPropertyBag is a custom class that has implemented IPropertyBag.
to Tannear :
可以用FindFirstDevice和FindNextDevice来查询设备,但我没用过,呵呵。
Tannear可不可以把你代码借我参考参考?谢谢
贴出来,或者发我邮箱:ghostsmile@yahoo.cn
--------------------编程问答-------------------- 我一点点跟踪了下,发现FindFirstDevice(DeviceSearchByGuid, &guidCamera, &di); 后
双摄像头手机的DEVMGR_DEVICE_INFORMATION di.szDeviceKey = L"Drivers\BuiltIn\NullCam"
而在程序正常运行的手机上, di.szDeviceKey = L"Drivers\BuiltIn\CameraDriver"
我试着把该属性改成di.szDeviceKey = L"Drivers\BuiltIn\CameraDriver"也不行;
后来到注册表下查看,发现没有CameraDriver栏目,是不是说驱动没有写到注册表啊?
那也不对吧,也为用手机自身的摄像头程序是没有问题的;
大家知道应该怎么办么?
我测试的是HTC 4550手机。
--------------------编程问答-------------------- 就是IPersistPropertyBag::Load()执行失败了。
不知道怎么重载IPersistPropertyBag::Load()函数;
有谁能给些提示么? --------------------编程问答-------------------- 我之前也有做过双摄象头,好象是要驱动那边支持的。你这个可能是你那个摄象头没有初始化。
我当时是经过驱动处理的,驱动不断地读注册表自己设定的一个值,如果发现当前注册表里的那个值改变,则在驱动重新初始化另外一个摄象头。 --------------------编程问答-------------------- 顶啊,也遇到这个问题 --------------------编程问答-------------------- 关注
补充:移动开发 , Windows Phone