|
|
@@ -2,9 +2,8 @@
|
|
|
#include <initguid.h>
|
|
|
#include "virtualcam.h"
|
|
|
|
|
|
-STDAPI AMovieSetupRegisterServer(CLSID clsServer, LPCWSTR szDescription,
|
|
|
- LPCWSTR szFileName, LPCWSTR szThreadingModel = L"Both",
|
|
|
- LPCWSTR szServerType = L"InprocServer32");
|
|
|
+STDAPI AMovieSetupRegisterServer(CLSID clsServer, LPCWSTR szDescription, LPCWSTR szFileName, LPCWSTR szThreadingModel = L"Both", LPCWSTR szServerType = L"InprocServer32");
|
|
|
+
|
|
|
STDAPI AMovieSetupUnregisterServer(CLSID clsServer);
|
|
|
|
|
|
#define NUM_VIDEO_FILTERS 2
|
|
|
@@ -15,7 +14,6 @@ const AMOVIESETUP_MEDIATYPE AMSMediaTypesV =
|
|
|
&MEDIASUBTYPE_YUY2
|
|
|
};
|
|
|
|
|
|
-
|
|
|
const AMOVIESETUP_PIN AMSPinV =
|
|
|
{
|
|
|
L"Output",
|
|
|
@@ -29,8 +27,7 @@ const AMOVIESETUP_PIN AMSPinV =
|
|
|
&AMSMediaTypesV
|
|
|
};
|
|
|
|
|
|
-
|
|
|
-const AMOVIESETUP_FILTER AMSFilterV =
|
|
|
+const AMOVIESETUP_FILTER AMSFilterENV =
|
|
|
{
|
|
|
&CLSID_RVC_ENV_VirtualV,
|
|
|
L"RVC_ENV_Virtual_Camera",
|
|
|
@@ -39,7 +36,7 @@ const AMOVIESETUP_FILTER AMSFilterV =
|
|
|
&AMSPinV
|
|
|
};
|
|
|
|
|
|
-const AMOVIESETUP_FILTER AMSFilterV2 =
|
|
|
+const AMOVIESETUP_FILTER AMSFilterOPT =
|
|
|
{
|
|
|
&CLSID_RVC_OPT_VirtualV,
|
|
|
L"RVC_OPT_Virtual_Camera",
|
|
|
@@ -54,16 +51,16 @@ CFactoryTemplate g_Templates[NUM_VIDEO_FILTERS] =
|
|
|
{
|
|
|
L"RVC_ENV_Virtual_Camera",
|
|
|
&CLSID_RVC_ENV_VirtualV,
|
|
|
- CreateInstance,
|
|
|
+ CreateEnvInstance,
|
|
|
NULL,
|
|
|
- &AMSFilterV
|
|
|
+ &AMSFilterENV
|
|
|
},
|
|
|
{
|
|
|
L"RVC_OPT_Virtual_Camera",
|
|
|
&CLSID_RVC_OPT_VirtualV,
|
|
|
- CreateInstance2,
|
|
|
+ CreateOptInstance,
|
|
|
NULL,
|
|
|
- &AMSFilterV2
|
|
|
+ &AMSFilterOPT
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -76,19 +73,17 @@ STDAPI RegisterFilters(bool bRegister, int reg_video_filters)
|
|
|
char achTemp[MAX_PATH] = {0};
|
|
|
ASSERT(g_hInst != 0);
|
|
|
|
|
|
- if (0 == GetModuleFileNameA(g_hInst, achTemp, sizeof(achTemp)))
|
|
|
- return AmHresultFromWin32 (GetLastError());
|
|
|
-
|
|
|
- MultiByteToWideChar(CP_ACP, 0L, achTemp, lstrlenA(achTemp) + 1,
|
|
|
- achFileName, NUMELMS(achFileName));
|
|
|
+ if (0 == GetModuleFileNameA(g_hInst, achTemp, sizeof(achTemp))) {
|
|
|
+ return AmHresultFromWin32(GetLastError());
|
|
|
+ }
|
|
|
+
|
|
|
+ MultiByteToWideChar(CP_ACP, 0L, achTemp, lstrlenA(achTemp) + 1, achFileName, NUMELMS(achFileName));
|
|
|
|
|
|
hr = CoInitialize(0);
|
|
|
if (bRegister) {
|
|
|
for (int i = 0; i < reg_video_filters; i++) {
|
|
|
- hr |= AMovieSetupRegisterServer(*(g_Templates[i].m_ClsID),
|
|
|
- g_Templates[i].m_Name, achFileName);
|
|
|
+ hr |= AMovieSetupRegisterServer(*(g_Templates[i].m_ClsID), g_Templates[i].m_Name, achFileName);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if (SUCCEEDED(hr))
|
|
|
@@ -104,21 +99,19 @@ STDAPI RegisterFilters(bool bRegister, int reg_video_filters)
|
|
|
rf2.rgPins = &AMSPinV;
|
|
|
for (int i = 0; i < reg_video_filters; i++) {
|
|
|
IMoniker *moniker_video = 0;
|
|
|
- hr = fm->RegisterFilter(*(g_Templates[i].m_ClsID),
|
|
|
- g_Templates[i].m_Name, &moniker_video,
|
|
|
- &CLSID_VideoInputDeviceCategory, NULL, &rf2);
|
|
|
+ hr = fm->RegisterFilter(*(g_Templates[i].m_ClsID), g_Templates[i].m_Name, &moniker_video, &CLSID_VideoInputDeviceCategory, NULL, &rf2);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
for (int i = 0; i < reg_video_filters; i++) {
|
|
|
- hr = fm->UnregisterFilter(&CLSID_VideoInputDeviceCategory, 0,
|
|
|
- *(g_Templates[i].m_ClsID));
|
|
|
+ hr = fm->UnregisterFilter(&CLSID_VideoInputDeviceCategory, 0, *(g_Templates[i].m_ClsID));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (fm)
|
|
|
+ if (fm) {
|
|
|
fm->Release();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (SUCCEEDED(hr) && !bRegister){
|
|
|
@@ -137,16 +130,21 @@ STDAPI RegisterFilters(bool bRegister, int reg_video_filters)
|
|
|
|
|
|
STDAPI DllInstall(bool bInstall, _In_opt_ LPCWSTR pszCmdLine)
|
|
|
{
|
|
|
- if (!bInstall)
|
|
|
+ if (!bInstall) {
|
|
|
return RegisterFilters(false, NUM_VIDEO_FILTERS);
|
|
|
- else if (lstrcmpW(pszCmdLine, L"1") == 0)
|
|
|
+ }
|
|
|
+ else if (lstrcmpW(pszCmdLine, L"1") == 0) {
|
|
|
return RegisterFilters(true, 1);
|
|
|
- else if (lstrcmpW(pszCmdLine, L"2") == 0)
|
|
|
+ }
|
|
|
+ else if (lstrcmpW(pszCmdLine, L"2") == 0) {
|
|
|
return RegisterFilters(true, 2);
|
|
|
- else if (lstrcmpW(pszCmdLine, L"3") == 0)
|
|
|
+ }
|
|
|
+ else if (lstrcmpW(pszCmdLine, L"3") == 0) {
|
|
|
return RegisterFilters(true, 3);
|
|
|
- else
|
|
|
+ }
|
|
|
+ else {
|
|
|
return RegisterFilters(true, NUM_VIDEO_FILTERS);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
STDAPI DllRegisterServer()
|