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,请指教
...全文
207 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
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

7,655

社区成员

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

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