枚举系统中所有的Filter的代码,我刚刚找到,希望有人能用得到

zhangjianyu 2003-08-21 08:26:12
void CVideoControl::GetAllVideoCaptureDevices(void)
{

// clear the vector
m_vCamSource.clear();

int i;
HRESULT hr;
IEnumMoniker *camEnum = NULL;
IMoniker *cam = NULL;
CComPtr<ICreateDevEnum> devEnum;

//Find the cameras
hr = devEnum.CoCreateInstance(CLSID_SystemDeviceEnum);
if (FAILED(hr)) exit(1);
hr = devEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,
&camEnum, 0);
if (FAILED(hr)) exit(1);

i = 0;
while (camEnum->Next(1, &cam, NULL) == S_OK)
{
USES_CONVERSION;

IPropertyBag *pPropBag;
IBaseFilter *camSrc;
VARIANT camName;
VariantInit(&camName);

//Get the name of the camera
hr = cam->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
if (FAILED(hr)) exit(1);
hr = pPropBag->Read(L"FriendlyName", &camName, 0);
if (FAILED(hr)) continue;
LPCTSTR cName = OLE2T(camName.bstrVal);
Msg(cName);
pPropBag->Release();

char filtName[500];
sprintf(filtName, "Cam %d", i);
hr = cam->BindToObject(0, 0, IID_IBaseFilter, (void **)&camSrc);
if (FAILED(hr)) continue;
m_vCamSource.push_back(camSrc);
hr = m_pGraph->AddFilter(camSrc, T2OLE(filtName));
if (FAILED(hr)) continue;
i++;
}
}


void Msg(const TCHAR *szFormat, ...)
{
TCHAR szBuffer[1024]; // Large buffer for long filenames or URLs
const size_t NUMCHARS = sizeof(szBuffer) / sizeof(szBuffer[0]);
const int LASTCHAR = NUMCHARS - 1;

// Format the input string
va_list pArgs;
va_start(pArgs, szFormat);

// Use a bounded buffer size to prevent buffer overruns. Limit count to
// character size minus one to allow for a NULL terminating character.
_vsntprintf(szBuffer, NUMCHARS - 1, szFormat, pArgs);
va_end(pArgs);

// Ensure that the formatted string is NULL-terminated
szBuffer[LASTCHAR] = TEXT('\0');

MessageBox(NULL, szBuffer, TEXT("PlayCap Message"), MB_OK | MB_ICONERROR);
}


以上是Capture Filter的枚举,可以取得系统中所有的视频采集设备相关的代码。

对应其他类别的Filter
可以把CLSID_VideoInputDeviceCategory换成
CLSID_AudioInputDeviceCategory Audio Capture Sources category
CLSID_AudioCompressorCategory Audio Compressors category
CLSID_AudioRendererCategory Audio Renderers category
CLSID_LegacyAmFilterCategory DirectShow Filters category
CLSID_MidiRendererCategory Midi Renderers category
CLSID_VideoInputDeviceCategory Video Capture Sources category
CLSID_VideoCompressorCategory Video Compressors category
CLSID_ActiveMovieCategories The seven categories of filters in DirectShow
...全文
55 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfraim 2003-08-22
  • 打赏
  • 举报
回复
谢谢!

2,542

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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