int EnumDevices()
{
int id = 0;
//枚举视频扑捉设备
ICreateDevEnum *pCreateDevEnum;
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum, (void**)&pCreateDevEnum);
if (hr != NOERROR)
return -1;
CComPtr<IEnumMoniker> pEm;
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEm, 0);
if (hr != NOERROR)
return -1;
pEm->Reset();
ULONG cFetched;
IMoniker *pM;
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK)
{
IPropertyBag *pBag;
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
if(SUCCEEDED(hr))
{
VARIANT var;
var.vt = VT_BSTR;
hr = pBag->Read(L"FriendlyName", &var, NULL); //you can get other info by first parame
if (hr == NOERROR)
{
id++;
SysFreeString(var.bstrVal);
}
&nbs

本文介绍了在Windows环境下,使用DirectShow进行摄像头采集的详细步骤,包括枚举设备、初始化GraphBuilder、创建Input与OutputFilter、设置SampleGrabber、配置回调函数以及开始视频捕获。同时,还涉及了如何处理视频数据格式和输出到指定窗口。
最低0.47元/天 解锁文章
1089

被折叠的 条评论
为什么被折叠?



