mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-08-28 17:42:28 +08:00
cmake: Add changes for CMake build framework 3.0
New code path only taken if OBS_CMAKE_VERSION is set to 3.0.0 or greater, old functionality remains unchanged.
This commit is contained in:
@@ -1,215 +1,48 @@
|
||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/dshowcapture.hpp")
|
||||
obs_status(FATAL_ERROR "libdshowcapture submodule not found! Please fetch submodules. win-dshow plugin disabled.")
|
||||
return()
|
||||
cmake_minimum_required(VERSION 3.24...3.25)
|
||||
|
||||
if(OBS_CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.0)
|
||||
add_library(obs-virtualcam-interface INTERFACE)
|
||||
add_library(OBS::virtualcam-interface ALIAS obs-virtualcam-interface)
|
||||
|
||||
target_sources(obs-virtualcam-interface INTERFACE shared-memory-queue.c shared-memory-queue.h tiny-nv12-scale.c
|
||||
tiny-nv12-scale.h)
|
||||
target_include_directories(obs-virtualcam-interface INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
include(cmake/libdshowcapture.cmake)
|
||||
add_subdirectory(virtualcam-module)
|
||||
endif()
|
||||
|
||||
option(ENABLE_VIRTUALCAM "Enable building with Virtual Camera (Windows)" ON)
|
||||
legacy_check()
|
||||
|
||||
if(NOT ENABLE_VIRTUALCAM)
|
||||
obs_status(DISABLED "Windows Virtual Camera")
|
||||
endif()
|
||||
|
||||
if(ENABLE_VIRTUALCAM AND NOT VIRTUALCAM_GUID)
|
||||
set(VIRTUALCAM_GUID
|
||||
""
|
||||
CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
mark_as_advanced(VIRTUALCAM_GUID)
|
||||
endif()
|
||||
|
||||
project(win-dshow)
|
||||
|
||||
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil)
|
||||
find_package(FFmpeg REQUIRED avcodec avutil)
|
||||
|
||||
add_library(win-dshow MODULE)
|
||||
add_library(OBS::dshow ALIAS win-dshow)
|
||||
|
||||
target_sources(win-dshow PRIVATE encode-dstr.hpp win-dshow.cpp win-dshow-encoder.cpp dshow-plugin.cpp ffmpeg-decode.c
|
||||
ffmpeg-decode.h)
|
||||
|
||||
add_library(libdshowcapture-external INTERFACE)
|
||||
add_library(libdshowcapture INTERFACE)
|
||||
add_library(OBS::libdshowcapture-external ALIAS libdshowcapture-external)
|
||||
add_library(OBS::libdshowcapture ALIAS libdshowcapture)
|
||||
|
||||
target_sources(
|
||||
libdshowcapture-external
|
||||
INTERFACE libdshowcapture/external/capture-device-support/Library/EGAVResult.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
libdshowcapture/external/capture-device-support/SampleCode/DriverInterface.cpp)
|
||||
|
||||
target_sources(
|
||||
libdshowcapture
|
||||
INTERFACE libdshowcapture/dshowcapture.hpp
|
||||
libdshowcapture/source/capture-filter.cpp
|
||||
libdshowcapture/source/capture-filter.hpp
|
||||
libdshowcapture/source/output-filter.cpp
|
||||
libdshowcapture/source/output-filter.hpp
|
||||
libdshowcapture/source/dshowcapture.cpp
|
||||
libdshowcapture/source/dshowencode.cpp
|
||||
libdshowcapture/source/device.cpp
|
||||
libdshowcapture/source/device.hpp
|
||||
libdshowcapture/source/device-vendor.cpp
|
||||
libdshowcapture/source/encoder.cpp
|
||||
libdshowcapture/source/encoder.hpp
|
||||
libdshowcapture/source/dshow-base.cpp
|
||||
libdshowcapture/source/dshow-base.hpp
|
||||
libdshowcapture/source/dshow-demux.cpp
|
||||
libdshowcapture/source/dshow-demux.hpp
|
||||
libdshowcapture/source/dshow-device-defs.hpp
|
||||
libdshowcapture/source/dshow-enum.cpp
|
||||
libdshowcapture/source/dshow-enum.hpp
|
||||
libdshowcapture/source/dshow-formats.cpp
|
||||
libdshowcapture/source/dshow-formats.hpp
|
||||
libdshowcapture/source/dshow-media-type.cpp
|
||||
libdshowcapture/source/dshow-encoded-device.cpp
|
||||
libdshowcapture/source/dshow-media-type.hpp
|
||||
libdshowcapture/source/log.cpp
|
||||
libdshowcapture/source/log.hpp
|
||||
libdshowcapture/source/external/IVideoCaptureFilter.h)
|
||||
|
||||
target_include_directories(
|
||||
libdshowcapture INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/external/capture-device-support/Library)
|
||||
|
||||
target_compile_definitions(libdshowcapture-external INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_definitions(libdshowcapture INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_options(libdshowcapture-external INTERFACE /wd4018)
|
||||
|
||||
set(MODULE_DESCRIPTION "OBS DirectShow module")
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in win-dshow.rc)
|
||||
target_sources(win-dshow PRIVATE dshow-plugin.cpp encode-dstr.hpp ffmpeg-decode.c ffmpeg-decode.h win-dshow-encoder.cpp
|
||||
win-dshow.cpp)
|
||||
|
||||
configure_file(cmake/windows/obs-module.rc.in win-dshow.rc)
|
||||
target_sources(win-dshow PRIVATE win-dshow.rc)
|
||||
|
||||
target_compile_definitions(win-dshow PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS)
|
||||
|
||||
set(VIRTUALCAM_AVAILABLE OFF)
|
||||
if(ENABLE_VIRTUALCAM)
|
||||
if(VIRTUALCAM_GUID STREQUAL "")
|
||||
obs_status(WARNING "Windows Virtual Camera - GUID not set. Specify as 'VIRTUALCAM_GUID' to enable.")
|
||||
else()
|
||||
set(INVALID_GUID ON)
|
||||
|
||||
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_AVAILABLE ON)
|
||||
set(INVALID_GUID OFF)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(INVALID_GUID)
|
||||
obs_status(WARNING "Windows Virtual Camera - invalid GUID supplied")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(
|
||||
win-dshow
|
||||
PRIVATE OBS::libobs
|
||||
OBS::w32-pthreads
|
||||
OBS::libdshowcapture-external
|
||||
OBS::libdshowcapture
|
||||
setupapi
|
||||
strmiids
|
||||
ksuser
|
||||
winmm
|
||||
wmcodecdspuuid
|
||||
FFmpeg::avcodec
|
||||
FFmpeg::avutil)
|
||||
|
||||
source_group(
|
||||
"libdshowcapture-external\\Source Files"
|
||||
FILES libdshowcapture/external/capture-device-support/Library/EGAVResult.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
libdshowcapture/external/capture-device-support/SampleCode/DriverInterface.cpp)
|
||||
source_group(
|
||||
"libdshowcapture\\Source Files"
|
||||
FILES libdshowcapture/source/capture-filter.cpp
|
||||
libdshowcapture/source/output-filter.cpp
|
||||
libdshowcapture/source/dshowcapture.cpp
|
||||
libdshowcapture/source/dshowencode.cpp
|
||||
libdshowcapture/source/device.cpp
|
||||
libdshowcapture/source/device-vendor.cpp
|
||||
libdshowcapture/source/encoder.cpp
|
||||
libdshowcapture/source/dshow-base.cpp
|
||||
libdshowcapture/source/dshow-demux.cpp
|
||||
libdshowcapture/source/dshow-enum.cpp
|
||||
libdshowcapture/source/dshow-formats.cpp
|
||||
libdshowcapture/source/dshow-media-type.cpp
|
||||
libdshowcapture/source/dshow-encoded-device.cpp
|
||||
libdshowcapture/source/log.cpp)
|
||||
source_group(
|
||||
"libdshowcapture\\Header Files"
|
||||
FILES libdshowcapture/dshowcapture.hpp
|
||||
libdshowcapture/source/capture-filter.hpp
|
||||
libdshowcapture/source/output-filter.hpp
|
||||
libdshowcapture/source/device.hpp
|
||||
libdshowcapture/source/encoder.hpp
|
||||
libdshowcapture/source/dshow-base.hpp
|
||||
libdshowcapture/source/dshow-demux.hpp
|
||||
libdshowcapture/source/dshow-device-defs.hpp
|
||||
libdshowcapture/source/dshow-enum.hpp
|
||||
libdshowcapture/source/dshow-formats.hpp
|
||||
libdshowcapture/source/dshow-media-type.hpp
|
||||
libdshowcapture/source/log.hpp
|
||||
libdshowcapture/source/external/IVideoCaptureFilter.h)
|
||||
|
||||
set_target_properties(win-dshow PROPERTIES FOLDER "plugins/win-dshow")
|
||||
|
||||
setup_plugin_target(win-dshow)
|
||||
|
||||
if(ENABLE_VIRTUALCAM AND VIRTUALCAM_AVAILABLE)
|
||||
target_sources(win-dshow PRIVATE tiny-nv12-scale.c tiny-nv12-scale.h shared-memory-queue.c shared-memory-queue.h
|
||||
virtualcam.c)
|
||||
FFmpeg::avutil
|
||||
strmiids
|
||||
winmm)
|
||||
|
||||
if(TARGET OBS::virtualcam AND TARGET OBS::virtualcam-guid)
|
||||
target_sources(win-dshow PRIVATE virtualcam.c)
|
||||
target_link_libraries(win-dshow PRIVATE OBS::virtualcam-interface OBS::virtualcam-guid)
|
||||
target_compile_definitions(win-dshow PRIVATE VIRTUALCAM_AVAILABLE)
|
||||
|
||||
target_include_directories(win-dshow PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config)
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-guid.h.in ${CMAKE_CURRENT_BINARY_DIR}/config/virtualcam-guid.h)
|
||||
|
||||
target_sources(win-dshow PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config/virtualcam-guid.h)
|
||||
|
||||
configure_file(virtualcam-install.bat.in "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat")
|
||||
|
||||
configure_file(virtualcam-uninstall.bat.in "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-uninstall.bat")
|
||||
|
||||
add_target_resource(win-dshow "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat" "obs-plugins/win-dshow/")
|
||||
add_target_resource(win-dshow "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-uninstall.bat" "obs-plugins/win-dshow/")
|
||||
|
||||
add_subdirectory(virtualcam-module)
|
||||
add_dependencies(win-dshow obs-virtualcam-module)
|
||||
endif()
|
||||
|
||||
# cmake-format: off
|
||||
set_target_properties_obs(win-dshow PROPERTIES FOLDER plugins/win-dshow PREFIX "")
|
||||
# cmake-format: on
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/dshowcapture.hpp")
|
||||
obs_status(FATAL_ERROR "libdshowcapture submodule not found! Please fetch submodules. win-dshow plugin disabled.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
option(ENABLE_VIRTUALCAM "Enable building with Virtual Camera (Windows)" ON)
|
||||
|
||||
if(NOT ENABLE_VIRTUALCAM)
|
||||
obs_status(DISABLED "Windows Virtual Camera")
|
||||
endif()
|
||||
|
||||
if(ENABLE_VIRTUALCAM AND NOT VIRTUALCAM_GUID)
|
||||
set(VIRTUALCAM_GUID
|
||||
""
|
||||
CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
mark_as_advanced(VIRTUALCAM_GUID)
|
||||
endif()
|
||||
|
||||
project(win-dshow)
|
||||
|
||||
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil)
|
||||
|
||||
add_library(win-dshow MODULE)
|
||||
add_library(OBS::dshow ALIAS win-dshow)
|
||||
|
||||
target_sources(win-dshow PRIVATE encode-dstr.hpp win-dshow.cpp win-dshow-encoder.cpp dshow-plugin.cpp ffmpeg-decode.c
|
||||
ffmpeg-decode.h)
|
||||
|
||||
add_library(libdshowcapture-external INTERFACE)
|
||||
add_library(libdshowcapture INTERFACE)
|
||||
add_library(OBS::libdshowcapture-external ALIAS libdshowcapture-external)
|
||||
add_library(OBS::libdshowcapture ALIAS libdshowcapture)
|
||||
|
||||
target_sources(
|
||||
libdshowcapture-external
|
||||
INTERFACE libdshowcapture/external/capture-device-support/Library/EGAVResult.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
libdshowcapture/external/capture-device-support/SampleCode/DriverInterface.cpp)
|
||||
|
||||
target_sources(
|
||||
libdshowcapture
|
||||
INTERFACE libdshowcapture/dshowcapture.hpp
|
||||
libdshowcapture/source/capture-filter.cpp
|
||||
libdshowcapture/source/capture-filter.hpp
|
||||
libdshowcapture/source/output-filter.cpp
|
||||
libdshowcapture/source/output-filter.hpp
|
||||
libdshowcapture/source/dshowcapture.cpp
|
||||
libdshowcapture/source/dshowencode.cpp
|
||||
libdshowcapture/source/device.cpp
|
||||
libdshowcapture/source/device.hpp
|
||||
libdshowcapture/source/device-vendor.cpp
|
||||
libdshowcapture/source/encoder.cpp
|
||||
libdshowcapture/source/encoder.hpp
|
||||
libdshowcapture/source/dshow-base.cpp
|
||||
libdshowcapture/source/dshow-base.hpp
|
||||
libdshowcapture/source/dshow-demux.cpp
|
||||
libdshowcapture/source/dshow-demux.hpp
|
||||
libdshowcapture/source/dshow-device-defs.hpp
|
||||
libdshowcapture/source/dshow-enum.cpp
|
||||
libdshowcapture/source/dshow-enum.hpp
|
||||
libdshowcapture/source/dshow-formats.cpp
|
||||
libdshowcapture/source/dshow-formats.hpp
|
||||
libdshowcapture/source/dshow-media-type.cpp
|
||||
libdshowcapture/source/dshow-encoded-device.cpp
|
||||
libdshowcapture/source/dshow-media-type.hpp
|
||||
libdshowcapture/source/log.cpp
|
||||
libdshowcapture/source/log.hpp
|
||||
libdshowcapture/source/external/IVideoCaptureFilter.h)
|
||||
|
||||
target_include_directories(
|
||||
libdshowcapture INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/external/capture-device-support/Library)
|
||||
|
||||
target_compile_definitions(libdshowcapture-external INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_definitions(libdshowcapture INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_options(libdshowcapture-external INTERFACE /wd4018)
|
||||
|
||||
set(MODULE_DESCRIPTION "OBS DirectShow module")
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in win-dshow.rc)
|
||||
|
||||
target_sources(win-dshow PRIVATE win-dshow.rc)
|
||||
|
||||
target_compile_definitions(win-dshow PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS
|
||||
OBS_LEGACY)
|
||||
|
||||
set(VIRTUALCAM_AVAILABLE OFF)
|
||||
if(ENABLE_VIRTUALCAM)
|
||||
if(VIRTUALCAM_GUID STREQUAL "")
|
||||
obs_status(WARNING "Windows Virtual Camera - GUID not set. Specify as 'VIRTUALCAM_GUID' to enable.")
|
||||
else()
|
||||
set(INVALID_GUID ON)
|
||||
|
||||
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_AVAILABLE ON)
|
||||
set(INVALID_GUID OFF)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(INVALID_GUID)
|
||||
obs_status(WARNING "Windows Virtual Camera - invalid GUID supplied")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(
|
||||
win-dshow
|
||||
PRIVATE OBS::libobs
|
||||
OBS::w32-pthreads
|
||||
OBS::libdshowcapture-external
|
||||
OBS::libdshowcapture
|
||||
setupapi
|
||||
strmiids
|
||||
ksuser
|
||||
winmm
|
||||
wmcodecdspuuid
|
||||
FFmpeg::avcodec
|
||||
FFmpeg::avutil)
|
||||
|
||||
source_group(
|
||||
"libdshowcapture-external\\Source Files"
|
||||
FILES libdshowcapture/external/capture-device-support/Library/EGAVResult.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
libdshowcapture/external/capture-device-support/SampleCode/DriverInterface.cpp)
|
||||
source_group(
|
||||
"libdshowcapture\\Source Files"
|
||||
FILES libdshowcapture/source/capture-filter.cpp
|
||||
libdshowcapture/source/output-filter.cpp
|
||||
libdshowcapture/source/dshowcapture.cpp
|
||||
libdshowcapture/source/dshowencode.cpp
|
||||
libdshowcapture/source/device.cpp
|
||||
libdshowcapture/source/device-vendor.cpp
|
||||
libdshowcapture/source/encoder.cpp
|
||||
libdshowcapture/source/dshow-base.cpp
|
||||
libdshowcapture/source/dshow-demux.cpp
|
||||
libdshowcapture/source/dshow-enum.cpp
|
||||
libdshowcapture/source/dshow-formats.cpp
|
||||
libdshowcapture/source/dshow-media-type.cpp
|
||||
libdshowcapture/source/dshow-encoded-device.cpp
|
||||
libdshowcapture/source/log.cpp)
|
||||
source_group(
|
||||
"libdshowcapture\\Header Files"
|
||||
FILES libdshowcapture/dshowcapture.hpp
|
||||
libdshowcapture/source/capture-filter.hpp
|
||||
libdshowcapture/source/output-filter.hpp
|
||||
libdshowcapture/source/device.hpp
|
||||
libdshowcapture/source/encoder.hpp
|
||||
libdshowcapture/source/dshow-base.hpp
|
||||
libdshowcapture/source/dshow-demux.hpp
|
||||
libdshowcapture/source/dshow-device-defs.hpp
|
||||
libdshowcapture/source/dshow-enum.hpp
|
||||
libdshowcapture/source/dshow-formats.hpp
|
||||
libdshowcapture/source/dshow-media-type.hpp
|
||||
libdshowcapture/source/log.hpp
|
||||
libdshowcapture/source/external/IVideoCaptureFilter.h)
|
||||
|
||||
set_target_properties(win-dshow PROPERTIES FOLDER "plugins/win-dshow")
|
||||
|
||||
setup_plugin_target(win-dshow)
|
||||
|
||||
if(ENABLE_VIRTUALCAM AND VIRTUALCAM_AVAILABLE)
|
||||
target_sources(win-dshow PRIVATE tiny-nv12-scale.c tiny-nv12-scale.h shared-memory-queue.c shared-memory-queue.h
|
||||
virtualcam.c)
|
||||
|
||||
target_compile_definitions(win-dshow PRIVATE VIRTUALCAM_AVAILABLE)
|
||||
|
||||
target_include_directories(win-dshow PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config)
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-guid.h.in ${CMAKE_CURRENT_BINARY_DIR}/config/virtualcam-guid.h)
|
||||
|
||||
target_sources(win-dshow PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config/virtualcam-guid.h)
|
||||
|
||||
configure_file(virtualcam-module/virtualcam-install.bat.in "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat")
|
||||
|
||||
configure_file(virtualcam-module/virtualcam-uninstall.bat.in "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-uninstall.bat")
|
||||
|
||||
add_target_resource(win-dshow "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat" "obs-plugins/win-dshow/")
|
||||
add_target_resource(win-dshow "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-uninstall.bat" "obs-plugins/win-dshow/")
|
||||
|
||||
add_subdirectory(virtualcam-module)
|
||||
endif()
|
||||
@@ -0,0 +1,56 @@
|
||||
add_library(libdshowcapture INTERFACE)
|
||||
add_library(OBS::libdshowcapture ALIAS libdshowcapture)
|
||||
|
||||
target_sources(
|
||||
libdshowcapture
|
||||
INTERFACE libdshowcapture/dshowcapture.hpp
|
||||
libdshowcapture/source/capture-filter.cpp
|
||||
libdshowcapture/source/capture-filter.hpp
|
||||
libdshowcapture/source/device-vendor.cpp
|
||||
libdshowcapture/source/device.cpp
|
||||
libdshowcapture/source/device.hpp
|
||||
libdshowcapture/source/dshow-base.cpp
|
||||
libdshowcapture/source/dshow-base.hpp
|
||||
libdshowcapture/source/dshow-demux.cpp
|
||||
libdshowcapture/source/dshow-demux.hpp
|
||||
libdshowcapture/source/dshow-device-defs.hpp
|
||||
libdshowcapture/source/dshow-encoded-device.cpp
|
||||
libdshowcapture/source/dshow-enum.cpp
|
||||
libdshowcapture/source/dshow-enum.hpp
|
||||
libdshowcapture/source/dshow-formats.cpp
|
||||
libdshowcapture/source/dshow-formats.hpp
|
||||
libdshowcapture/source/dshow-media-type.cpp
|
||||
libdshowcapture/source/dshow-media-type.hpp
|
||||
libdshowcapture/source/dshowcapture.cpp
|
||||
libdshowcapture/source/dshowencode.cpp
|
||||
libdshowcapture/source/encoder.cpp
|
||||
libdshowcapture/source/encoder.hpp
|
||||
libdshowcapture/source/external/IVideoCaptureFilter.h
|
||||
libdshowcapture/source/log.cpp
|
||||
libdshowcapture/source/log.hpp
|
||||
libdshowcapture/source/output-filter.cpp
|
||||
libdshowcapture/source/output-filter.hpp
|
||||
libdshowcapture/external/capture-device-support/Library/EGAVResult.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
libdshowcapture/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
libdshowcapture/external/capture-device-support/SampleCode/DriverInterface.cpp)
|
||||
|
||||
target_include_directories(
|
||||
libdshowcapture INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/external/capture-device-support/Library")
|
||||
|
||||
target_compile_definitions(libdshowcapture INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_options(libdshowcapture INTERFACE /wd4018)
|
||||
|
||||
get_target_property(target_sources libdshowcapture INTERFACE_SOURCES)
|
||||
set(target_headers ${target_sources})
|
||||
set(target_external_sources ${target_sources})
|
||||
|
||||
list(FILTER target_external_sources INCLUDE REGEX ".+external/.+/.+\\.cpp")
|
||||
list(FILTER target_sources EXCLUDE REGEX ".+external/.+/.+\\.cpp")
|
||||
list(FILTER target_sources INCLUDE REGEX ".*\\.(m|c[cp]?p?|swift)")
|
||||
list(FILTER target_headers INCLUDE REGEX ".*\\.h(pp)?")
|
||||
|
||||
source_group("libdshowcapture-external\\Source Files" FILES ${target_external_sources})
|
||||
source_group("libdshowcapture\\Source Files" FILES ${target_sources})
|
||||
source_group("libdshowcapture\\Header Files" FILES ${target_headers})
|
||||
@@ -0,0 +1,24 @@
|
||||
1 VERSIONINFO
|
||||
FILEVERSION ${OBS_VERSION_MAJOR},${OBS_VERSION_MINOR},${OBS_VERSION_PATCH},0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "${OBS_COMPANY_NAME}"
|
||||
VALUE "FileDescription", "OBS DirectShow module"
|
||||
VALUE "FileVersion", "${OBS_VERSION_CANONICAL}"
|
||||
VALUE "ProductName", "${OBS_PRODUCT_NAME}"
|
||||
VALUE "ProductVersion", "${OBS_VERSION_CANONICAL}"
|
||||
VALUE "Comments", "${OBS_COMMENTS}"
|
||||
VALUE "LegalCopyright", "${OBS_LEGAL_COPYRIGHT}"
|
||||
VALUE "InternalName", "win-dshow"
|
||||
VALUE "OriginalFilename", "win-dshow"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0409, 0x04B0
|
||||
END
|
||||
END
|
||||
@@ -1,59 +1,97 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(obs-virtualcam-module)
|
||||
cmake_minimum_required(VERSION 3.24...3.25)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(_output_suffix "64")
|
||||
else()
|
||||
set(_output_suffix "32")
|
||||
if(OBS_CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.0)
|
||||
option(ENABLE_VIRTUALCAM "Enable Windows Virtual Camera" ON)
|
||||
if(NOT ENABLE_VIRTUALCAM)
|
||||
target_disable_feature(obs-virtualcam-module "Virtual Camera Support")
|
||||
target_disable(obs-virtualcam-module)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT VIRTUALCAM_GUID)
|
||||
# cmake-format: off
|
||||
set(VIRTUALCAM_GUID "" CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
mark_as_advanced(VIRTUALCAM_GUID)
|
||||
# cmake-format: on
|
||||
|
||||
message(WARNING "Empty Virtual Camera GUID set.")
|
||||
target_disable_feature(obs-virtualcam-module "Virtual Camera Support (empty GUID)")
|
||||
return()
|
||||
else()
|
||||
set(VALID_GUID FALSE)
|
||||
check_uuid(${VIRTUALCAM_GUID} VALID_GUID)
|
||||
|
||||
if(NOT VALID_GUID)
|
||||
message(WARNING "Invalid Virtual Camera GUID set.")
|
||||
target_disable_feature(obs-virtualcam-module "Virtual Camera Support (invalid GUID)")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# DirectShow API requires separate GUID tokens
|
||||
string(REPLACE "-" ";" GUID_VALS ${VIRTUALCAM_GUID})
|
||||
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)
|
||||
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)
|
||||
endif()
|
||||
|
||||
add_library(obs-virtualcam-guid INTERFACE)
|
||||
add_library(OBS::virtualcam-guid ALIAS obs-virtualcam-guid)
|
||||
|
||||
configure_file(virtualcam-guid.h.in virtualcam-guid.h)
|
||||
target_sources(obs-virtualcam-guid INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-guid.h")
|
||||
target_include_directories(obs-virtualcam-guid INTERFACE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
add_library(_virtualcam INTERFACE)
|
||||
|
||||
configure_file(cmake/windows/obs-module.rc.in virtualcam-module.rc)
|
||||
target_sources(_virtualcam INTERFACE placeholder.cpp sleepto.c sleepto.h virtualcam-filter.cpp virtualcam-filter.hpp
|
||||
virtualcam-module.cpp)
|
||||
target_include_directories(_virtualcam INTERFACE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
target_compile_definitions(_virtualcam INTERFACE VIRTUALCAM_AVAILABLE)
|
||||
target_compile_options(_virtualcam INTERFACE $<IF:$<CONFIG:Debug>,/MTd,/MT>)
|
||||
|
||||
target_link_libraries(
|
||||
_virtualcam
|
||||
INTERFACE OBS::virtualcam-interface
|
||||
OBS::virtualcam-guid
|
||||
OBS::libdshowcapture
|
||||
OBS::winhandle
|
||||
gdiplus
|
||||
strmiids
|
||||
winmm)
|
||||
endif()
|
||||
|
||||
legacy_check()
|
||||
|
||||
add_library(obs-virtualcam-module MODULE)
|
||||
add_library(OBS::virtualcam-module ALIAS obs-virtualcam-module)
|
||||
add_library(OBS::virtualcam ALIAS obs-virtualcam-module)
|
||||
|
||||
target_sources(
|
||||
obs-virtualcam-module
|
||||
PRIVATE sleepto.c
|
||||
sleepto.h
|
||||
placeholder.cpp
|
||||
virtualcam-module.cpp
|
||||
virtualcam-filter.cpp
|
||||
virtualcam-filter.hpp
|
||||
virtualcam-module.rc
|
||||
../shared-memory-queue.c
|
||||
../shared-memory-queue.h
|
||||
../tiny-nv12-scale.c
|
||||
../tiny-nv12-scale.h)
|
||||
target_sources(obs-virtualcam-module PRIVATE cmake/windows/virtualcam-module64.def)
|
||||
target_link_libraries(obs-virtualcam-module PRIVATE _virtualcam)
|
||||
|
||||
target_include_directories(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
configure_file(virtualcam-install.bat.in virtualcam-install.bat)
|
||||
target_add_resource(obs-virtualcam-module "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat"
|
||||
"${OBS_DATA_DESTINATION}/obs-plugins/win-dshow")
|
||||
|
||||
set(MODULE_DESCRIPTION "OBS Virtual Camera output module")
|
||||
configure_file(virtualcam-uninstall.bat.in virtualcam-uninstall.bat)
|
||||
target_add_resource(obs-virtualcam-module "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-uninstall.bat"
|
||||
"${OBS_DATA_DESTINATION}/obs-plugins/win-dshow")
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in virtualcam-module.rc)
|
||||
include(cmake/32bit.cmake)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE virtualcam-module.rc)
|
||||
|
||||
target_link_libraries(obs-virtualcam-module PRIVATE OBS::libdshowcapture OBS::libdshowcapture-external setupapi winmm
|
||||
strmiids gdiplus)
|
||||
|
||||
target_link_options(obs-virtualcam-module PRIVATE "LINKER:/ignore:4104")
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-module.def.in ${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.def)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.def)
|
||||
|
||||
target_include_directories(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../config)
|
||||
|
||||
target_compile_definitions(obs-virtualcam-module PRIVATE VIRTUALCAM_AVAILABLE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS
|
||||
_CRT_NONSTDC_NO_WARNINGS)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(obs-virtualcam-module PRIVATE "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
|
||||
add_target_resource(win-dshow "$<TARGET_PDB_FILE:obs-virtualcam-module>" "obs-plugins/win-dshow/" OPTIONAL)
|
||||
|
||||
endif()
|
||||
|
||||
set_target_properties(obs-virtualcam-module PROPERTIES FOLDER "plugins/win-dshow")
|
||||
|
||||
set_target_properties(obs-virtualcam-module PROPERTIES OUTPUT_NAME "obs-virtualcam-module${_output_suffix}")
|
||||
|
||||
add_target_resource(win-dshow "$<TARGET_FILE:obs-virtualcam-module>" "obs-plugins/win-dshow/")
|
||||
# cmake-format: off
|
||||
set_target_properties_obs(obs-virtualcam-module PROPERTIES FOLDER plugins/win-dshow OUTPUT_NAME obs-virtualcam-module64)
|
||||
# cmake-format: on
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
option(ENABLE_VIRTUALCAM "Enable Windows Virtual Camera" ON)
|
||||
if(NOT ENABLE_VIRTUALCAM)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT VIRTUALCAM_GUID)
|
||||
set(VIRTUALCAM_GUID
|
||||
""
|
||||
CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
mark_as_advanced(VIRTUALCAM_GUID)
|
||||
|
||||
message(WARNING "Empty Virtual Camera GUID set.")
|
||||
return()
|
||||
else()
|
||||
set(VALID_GUID FALSE)
|
||||
check_uuid(${VIRTUALCAM_GUID} VALID_GUID)
|
||||
|
||||
if(NOT VALID_GUID)
|
||||
message(WARNING "Invalid Virtual Camera GUID set.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# DirectShow API requires separate GUID tokens
|
||||
string(REPLACE "-" ";" GUID_VALS ${VIRTUALCAM_GUID})
|
||||
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)
|
||||
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)
|
||||
endif()
|
||||
|
||||
add_library(obs-virtualcam-module MODULE)
|
||||
add_library(OBS::virtualcam ALIAS obs-virtualcam-module)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE cmake/windows/virtualcam-module32.def)
|
||||
target_link_libraries(obs-virtualcam-module PRIVATE _virtualcam)
|
||||
|
||||
set_property(TARGET obs-virtualcam-module PROPERTY OUTPUT_NAME obs-virtualcam-module32)
|
||||
@@ -0,0 +1,5 @@
|
||||
add_custom_command(
|
||||
TARGET obs-virtualcam-module
|
||||
POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_SOURCE_DIR}/build_x86 --config $<CONFIG> -t obs-virtualcam-module
|
||||
COMMENT "Build 32-bit obs-virtualcam")
|
||||
@@ -0,0 +1,60 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(obs-virtualcam-module)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(_output_suffix "64")
|
||||
else()
|
||||
set(_output_suffix "32")
|
||||
endif()
|
||||
|
||||
add_library(obs-virtualcam-module MODULE)
|
||||
add_library(OBS::virtualcam-module ALIAS obs-virtualcam-module)
|
||||
|
||||
target_sources(
|
||||
obs-virtualcam-module
|
||||
PRIVATE sleepto.c
|
||||
sleepto.h
|
||||
placeholder.cpp
|
||||
virtualcam-module.cpp
|
||||
virtualcam-filter.cpp
|
||||
virtualcam-filter.hpp
|
||||
virtualcam-module.rc
|
||||
../shared-memory-queue.c
|
||||
../shared-memory-queue.h
|
||||
../tiny-nv12-scale.c
|
||||
../tiny-nv12-scale.h)
|
||||
|
||||
target_include_directories(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
|
||||
set(MODULE_DESCRIPTION "OBS Virtual Camera output module")
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in virtualcam-module.rc)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE virtualcam-module.rc)
|
||||
|
||||
target_link_libraries(obs-virtualcam-module PRIVATE OBS::libdshowcapture OBS::libdshowcapture-external setupapi winmm
|
||||
strmiids gdiplus)
|
||||
|
||||
target_link_options(obs-virtualcam-module PRIVATE "LINKER:/ignore:4104")
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-module.def.in ${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.def)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.def)
|
||||
|
||||
target_include_directories(obs-virtualcam-module PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../config
|
||||
${CMAKE_SOURCE_DIR}/libobs)
|
||||
|
||||
target_compile_definitions(obs-virtualcam-module PRIVATE VIRTUALCAM_AVAILABLE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS
|
||||
_CRT_NONSTDC_NO_WARNINGS OBS_LEGACY)
|
||||
|
||||
if(MSVC)
|
||||
target_compile_options(obs-virtualcam-module PRIVATE "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
|
||||
add_target_resource(win-dshow "$<TARGET_PDB_FILE:obs-virtualcam-module>" "obs-plugins/win-dshow/" OPTIONAL)
|
||||
|
||||
endif()
|
||||
|
||||
set_target_properties(obs-virtualcam-module PROPERTIES FOLDER "plugins/win-dshow")
|
||||
|
||||
set_target_properties(obs-virtualcam-module PROPERTIES OUTPUT_NAME "obs-virtualcam-module${_output_suffix}")
|
||||
|
||||
add_target_resource(win-dshow "$<TARGET_FILE:obs-virtualcam-module>" "obs-plugins/win-dshow/")
|
||||
@@ -0,0 +1,24 @@
|
||||
1 VERSIONINFO
|
||||
FILEVERSION ${OBS_VERSION_MAJOR},${OBS_VERSION_MINOR},${OBS_VERSION_PATCH},0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904B0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "${OBS_COMPANY_NAME}"
|
||||
VALUE "FileDescription", "OBS Virtual Camera output module"
|
||||
VALUE "FileVersion", "${OBS_VERSION_CANONICAL}"
|
||||
VALUE "ProductName", "${OBS_PRODUCT_NAME}"
|
||||
VALUE "ProductVersion", "${OBS_VERSION_CANONICAL}"
|
||||
VALUE "Comments", "${OBS_COMMENTS}"
|
||||
VALUE "LegalCopyright", "${OBS_LEGAL_COPYRIGHT}"
|
||||
VALUE "InternalName", "${PROJECT_NAME}"
|
||||
VALUE "OriginalFilename", "${PROJECT_NAME}"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0409, 0x04B0
|
||||
END
|
||||
END
|
||||
@@ -0,0 +1,8 @@
|
||||
LIBRARY obs-virtualcam-module32.dll
|
||||
EXPORTS
|
||||
DllMain PRIVATE
|
||||
DllGetClassObject PRIVATE
|
||||
DllCanUnloadNow PRIVATE
|
||||
DllRegisterServer PRIVATE
|
||||
DllUnregisterServer PRIVATE
|
||||
DllInstall PRIVATE
|
||||
@@ -0,0 +1,8 @@
|
||||
LIBRARY obs-virtualcam-module64.dll
|
||||
EXPORTS
|
||||
DllMain PRIVATE
|
||||
DllGetClassObject PRIVATE
|
||||
DllCanUnloadNow PRIVATE
|
||||
DllRegisterServer PRIVATE
|
||||
DllUnregisterServer PRIVATE
|
||||
DllInstall PRIVATE
|
||||
@@ -3,12 +3,22 @@
|
||||
#include <windows.h>
|
||||
#include <cstdint>
|
||||
#include <thread>
|
||||
|
||||
#ifdef OBS_LEGACY
|
||||
#include "../shared-memory-queue.h"
|
||||
#include "../tiny-nv12-scale.h"
|
||||
#include "../libdshowcapture/source/output-filter.hpp"
|
||||
#include "../libdshowcapture/source/dshow-formats.hpp"
|
||||
#include "../../../libobs/util/windows/WinHandle.hpp"
|
||||
#include "../../../libobs/util/threading-windows.h"
|
||||
#else
|
||||
#include <shared-memory-queue.h>
|
||||
#include <tiny-nv12-scale.h>
|
||||
#include <libdshowcapture/source/output-filter.hpp>
|
||||
#include <libdshowcapture/source/dshow-formats.hpp>
|
||||
#include <util/windows/WinHandle.hpp>
|
||||
#include <util/threading-windows.h>
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
int cx;
|
||||
|
||||
Reference in New Issue
Block a user