diff --git a/plugins/win-dshow/CMakeLists.txt b/plugins/win-dshow/CMakeLists.txt index 387167d90..e483ac536 100644 --- a/plugins/win-dshow/CMakeLists.txt +++ b/plugins/win-dshow/CMakeLists.txt @@ -13,7 +13,67 @@ set(win-dshow_HEADERS ffmpeg-decode.h) set(MODULE_DESCRIPTION "OBS DirectShow module") + +set(VIRTUALCAM_GUID "" CACHE STRING "VirtualCam GUID") + +set(VIRTUALCAM_ENABLED FALSE) +if(VIRTUALCAM_GUID STREQUAL "") + message(STATUS "VirtualCam GUID not set! VirtualCam disabled.") +else() + set(INVALID_GUID TRUE) + + string(REPLACE "-" ";" GUID_VALS ${VIRTUALCAM_GUID}) + + list(LENGTH GUID_VALS GUID_VAL_COUNT) + if(GUID_VAL_COUNT EQUAL 5) + string(REPLACE ";" "0" GUID_HEX ${GUID_VALS}) + string(REGEX MATCH "[0-9a-fA-F]+" GUID_ACTUAL_HEX ${GUID_HEX}) + if(GUID_ACTUAL_HEX STREQUAL GUID_HEX) + list(GET GUID_VALS 0 GUID_VALS_DATA1) + list(GET GUID_VALS 1 GUID_VALS_DATA2) + list(GET GUID_VALS 2 GUID_VALS_DATA3) + list(GET GUID_VALS 3 GUID_VALS_DATA4) + list(GET GUID_VALS 4 GUID_VALS_DATA5) + string(LENGTH ${GUID_VALS_DATA1} GUID_VALS_DATA1_LENGTH) + string(LENGTH ${GUID_VALS_DATA2} GUID_VALS_DATA2_LENGTH) + string(LENGTH ${GUID_VALS_DATA3} GUID_VALS_DATA3_LENGTH) + string(LENGTH ${GUID_VALS_DATA4} GUID_VALS_DATA4_LENGTH) + string(LENGTH ${GUID_VALS_DATA5} GUID_VALS_DATA5_LENGTH) + if(GUID_VALS_DATA1_LENGTH EQUAL 8 AND + GUID_VALS_DATA2_LENGTH EQUAL 4 AND + GUID_VALS_DATA3_LENGTH EQUAL 4 AND + GUID_VALS_DATA4_LENGTH EQUAL 4 AND + GUID_VALS_DATA5_LENGTH EQUAL 12) + set(GUID_VAL01 ${GUID_VALS_DATA1}) + set(GUID_VAL02 ${GUID_VALS_DATA2}) + set(GUID_VAL03 ${GUID_VALS_DATA3}) + string(SUBSTRING ${GUID_VALS_DATA4} 0 2 GUID_VAL04) + string(SUBSTRING ${GUID_VALS_DATA4} 2 2 GUID_VAL05) + string(SUBSTRING ${GUID_VALS_DATA5} 0 2 GUID_VAL06) + string(SUBSTRING ${GUID_VALS_DATA5} 2 2 GUID_VAL07) + string(SUBSTRING ${GUID_VALS_DATA5} 4 2 GUID_VAL08) + string(SUBSTRING ${GUID_VALS_DATA5} 6 2 GUID_VAL09) + string(SUBSTRING ${GUID_VALS_DATA5} 8 2 GUID_VAL10) + string(SUBSTRING ${GUID_VALS_DATA5} 10 2 GUID_VAL11) + set(VIRTUALCAM_ENABLED TRUE) + set(INVALID_GUID FALSE) + endif() + endif() + endif() +endif() + +if(INVALID_GUID) + message(WARNING "Invalid VirtualCam GUID! VirtualCam disabled.") +endif() + +if(VIRTUALCAM_ENABLED) + add_definitions(-DVIRTUALCAM_ENABLED) +endif() + configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in win-dshow.rc) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-guid.h.in ${CMAKE_CURRENT_BINARY_DIR}/virtualcam-guid.h) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + set(win-dshow_SOURCES win-dshow.cpp win-dshow-encoder.cpp @@ -21,13 +81,15 @@ set(win-dshow_SOURCES ffmpeg-decode.c win-dshow.rc) -set(virtualcam-output_SOURCES - tiny-nv12-scale.c - shared-memory-queue.c - virtualcam.c) -set(virtualcam-output_HEADERS - tiny-nv12-scale.h - shared-memory-queue.h) +if(VIRTUALCAM_ENABLED) + set(virtualcam-output_SOURCES + tiny-nv12-scale.c + shared-memory-queue.c + virtualcam.c) + set(virtualcam-output_HEADERS + tiny-nv12-scale.h + shared-memory-queue.h) +endif() set(libdshowcapture_SOURCES libdshowcapture/source/capture-filter.cpp @@ -80,4 +142,6 @@ source_group("libdshowcapture\\Header Files" FILES ${libdshowcapture_HEADERS}) install_obs_plugin_with_data(win-dshow data) -add_subdirectory(virtualcam-module) +if(VIRTUALCAM_ENABLED) + add_subdirectory(virtualcam-module) +endif() diff --git a/plugins/win-dshow/dshow-plugin.cpp b/plugins/win-dshow/dshow-plugin.cpp index 8658003d7..2891692a1 100644 --- a/plugins/win-dshow/dshow-plugin.cpp +++ b/plugins/win-dshow/dshow-plugin.cpp @@ -13,6 +13,7 @@ MODULE_EXPORT const char *obs_module_description(void) extern void RegisterDShowSource(); extern void RegisterDShowEncoders(); +#ifdef VIRTUALCAM_ENABLED extern "C" struct obs_output_info virtualcam_info; static bool vcam_installed(bool b64) @@ -35,14 +36,19 @@ static bool vcam_installed(bool b64) RegCloseKey(key); return true; } +#endif bool obs_module_load(void) { RegisterDShowSource(); RegisterDShowEncoders(); +#ifdef VIRTUALCAM_ENABLED obs_register_output(&virtualcam_info); bool installed = vcam_installed(false); +#else + bool installed = false; +#endif obs_data_t *obs_settings = obs_data_create(); obs_data_set_bool(obs_settings, "vcamEnabled", installed); diff --git a/plugins/win-dshow/virtualcam-guid.h b/plugins/win-dshow/virtualcam-guid.h deleted file mode 100644 index 4c488d0c3..000000000 --- a/plugins/win-dshow/virtualcam-guid.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include -#include - -// {A3FCE0F5-3493-419F-958A-ABA1250EC20B} -DEFINE_GUID(CLSID_OBS_VirtualVideo, 0xa3fce0f5, 0x3493, 0x419f, 0x95, 0x8a, - 0xab, 0xa1, 0x25, 0xe, 0xc2, 0xb); diff --git a/plugins/win-dshow/virtualcam-guid.h.in b/plugins/win-dshow/virtualcam-guid.h.in new file mode 100644 index 000000000..fd06b6417 --- /dev/null +++ b/plugins/win-dshow/virtualcam-guid.h.in @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +#ifdef VIRTUALCAM_ENABLED +DEFINE_GUID(CLSID_OBS_VirtualVideo, + 0x@GUID_VAL01@, + 0x@GUID_VAL02@, + 0x@GUID_VAL03@, + 0x@GUID_VAL04@, + 0x@GUID_VAL05@, + 0x@GUID_VAL06@, + 0x@GUID_VAL07@, + 0x@GUID_VAL08@, + 0x@GUID_VAL09@, + 0x@GUID_VAL10@, + 0x@GUID_VAL11@); +#endif diff --git a/plugins/win-dshow/virtualcam-module/CMakeLists.txt b/plugins/win-dshow/virtualcam-module/CMakeLists.txt index a169d2449..73cc55d3f 100644 --- a/plugins/win-dshow/virtualcam-module/CMakeLists.txt +++ b/plugins/win-dshow/virtualcam-module/CMakeLists.txt @@ -14,6 +14,8 @@ configure_file( set(MODULE_DESCRIPTION "OBS Virtual Camera output module") configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in virtualcam-module.rc) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/..) + set(libdshowcapture_SOURCES ../libdshowcapture/source/log.cpp ../libdshowcapture/source/dshow-base.cpp diff --git a/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp b/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp index 74ef5dba5..0a4d4311e 100644 --- a/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp +++ b/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp @@ -1,5 +1,5 @@ #include "virtualcam-filter.hpp" -#include "../virtualcam-guid.h" +#include "virtualcam-guid.h" /* ========================================================================= */