我试图创建一个虚拟摄像头DirectShow过滤器与多个虚拟设备。
摄像机的定义如下:
CFactoryTemplate g_Templates[] =
{
{
SUB_DEVICE_NAME_0,
&CLSID_VirtualCam_0,
CVCam::CreateInstance0,
NULL,
&AMSFilterVCam_0
},
{
SUB_DEVICE_NAME_1,
&CLSID_VirtualCam_1,
CVCam::CreateInstance1,
NULL,
&AMSFilterVCam_1
}
};初始化由以下static方法完成:
CUnknown * WINAPI CVCam::CreateInstance0(LPUNKNOWN lpunk, HRESULT *phr)
{
return new CVCam(NAME(DEVICE_NAME_0), lpunk, phr, CLSID_VirtualCam_0, 0);
}
CUnknown * WINAPI CVCam::CreateInstance1(LPUNKNOWN lpunk, HRESULT *phr)
{
return new CVCam(NAME(DEVICE_NAME_1), lpunk, phr, CLSID_VirtualCam_1, 1);
}是否有可能更动态地这样做,这样我们就不必硬编码每个摄像机,而是可以在运行时传递一个参数?
致以敬意,
发布于 2022-01-19 12:37:17
动态加法和移除相机是可能的。然而,这与你在问题中所想的完全不同。DirectShow BaseClasses为您提供了将静态声明转换为注册和DirectShow示例代码演示DLL导出如何连接到这些助手以满足注册需要。的特定助手。
要使其动态化,您需要扩展AMoveDllRegisterServer2为大多数筛选器项目所做的工作,并根据您的需要对其实现进行调整。
RegisterFilters可能是一个很好的起点,您可能想让它成为一个循环或什么的。您将不得不处理额外的fm->RegisterFilter(...调用的额外虚拟相机,你想要的。
https://stackoverflow.com/questions/70767510
复制相似问题