WM6中directshow调用摄像头无响应

benbenmajia 2010-04-09 03:15:45
HRESULT hr;
CComPtr<IGraphBuilder> m_pGB;
CComPtr<ICaptureGraphBuilder2> m_pCapture;
m_pCapture.CoCreateInstance(CLSID_CaptureGraphBuilder);
m_pGB.CoCreateInstance(CLSID_FilterGraph);
m_pCapture->SetFiltergraph(m_pGB);

//FindFirstDevice
DEVMGR_DEVICE_INFORMATION di;
GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A, 0x93, 0x3E, 0x4D, 0x7E, 0x3C, 0x86 };
di.dwSize = sizeof(di);
HANDLE handle = FindFirstDevice(DeviceSearchByGuid, &guidCamera, &di);
FindClose(handle);

//VideoCaptureFilter
CComPtr<IBaseFilter> pVideoCaptureFilter;
CComPtr<IPersistPropertyBag> pPropertyBag;
pVideoCaptureFilter.CoCreateInstance( CLSID_VideoCapture );
pVideoCaptureFilter.QueryInterface( &pPropertyBag );
CComVariant varCamName;
varCamName = di.szLegacyName;
CPropertyBag PropBag;
PropBag.Write(L"VCapName", &varCamName);
pPropertyBag->Load(&PropBag, NULL);
pPropertyBag.Release();
m_pGB->AddFilter(pVideoCaptureFilter, L"Video capture source");

//RenderStream, ControlStream
hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pVideoCaptureFilter, NULL, NULL );

cout<<hr<<endl;
if( FAILED( hr ) )
{
return hr;//hr返回值显示failed,退出程序,我想知道原因
}

手机为多普达,刷的系统6.5,请指教
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiguanjimo 2010-07-22
  • 打赏
  • 举报
回复
这些代码是在什么地方运行啊?
benbenmajia 2010-04-12
  • 打赏
  • 举报
回复
hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pVideoCaptureFilter, NULL, NULL );

cout<<hr<<endl;
if( FAILED( hr ) )
{
return hr;//hr返回值显示failed,退出程序,我想知道原因
}
就是这里连接不成功
benbenmajia 2010-04-12
  • 打赏
  • 举报
回复
我断点调试的时候是在renderstream中返回的hr的值是一个错误的值,即在if(failed(hr))中判断rendererstream没有连接成功。
erwintao 2010-04-10
  • 打赏
  • 举报
回复
刚才的回复不要看了!我搞错了!
你是不是要预览啊?你这样写看上去倒也没什么问题,虽然camera并不一定有preview pin。
你出错的时候返回值是什么?
erwintao 2010-04-10
  • 打赏
  • 举报
回复
你最好是调试代码的时候多加一些断点,就看FindFirstDevice的返回值。
erwintao 2010-04-10
  • 打赏
  • 举报
回复
虽然你自己刷机了,但是DShow 毕竟还是驱动支持的,比如说你用“CAM1:”去找Camera就没找到。
摄像头的驱动一般在这个路径(注册表):HKEY_LOCAL_MACHINE\Drivers\BuiltIn\NullCam (Dopod 摄像头一般都叫这名字)。这里面可以看到“Prefix=CAM”,就是CAM1:是否有效的根本了。
驱动文件的名字也很容易看到“Dll=NullCam.dll”
你还会看到一个值“IClass=『CB998A05-xxxxx』”什么的,这就是你看WM6 SDK带的CameraCapture里面那段CLSID,这是固定值。SDK里面这个CameraCapture是能用的,MS没这么大胆放无效代码出来。

我的建议是,你先去确认一下驱动的情况,简单的方法就是看看注册表。是否符合条件,重点是那个ICLASS!
参考程序CameraCapture里面这个函数GetFirstCameraDriver,就是以ICLASS去找设备的!
bsr2009 2010-04-10
  • 打赏
  • 举报
回复
看看:
http://blog.csdn.net/czbever/archive/2009/05/17/4195195.aspx

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧