mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-08-28 17:42:28 +08:00
cmake: Update cross-platform build project management for Windows
Enables creation of x64 and x86 child projects when building on ARM64 and decouples functionality from legacy_check function
This commit is contained in:
@@ -1,19 +1,5 @@
|
||||
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()
|
||||
|
||||
legacy_check()
|
||||
|
||||
find_package(FFmpeg REQUIRED avcodec avutil)
|
||||
@@ -21,6 +7,22 @@ find_package(FFmpeg REQUIRED avcodec avutil)
|
||||
add_library(win-dshow MODULE)
|
||||
add_library(OBS::dshow ALIAS win-dshow)
|
||||
|
||||
if(NOT TARGET OBS::tiny-nv12-scale)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/shared/obs-tiny-nv12-scale" obs-tiny-nv12-scale)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::shared-memory-queue)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/shared/obs-shared-memory-queue" obs-shared-memory-queue)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::libdshowcapture)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libdshowcapture" libdshowcapture)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::winhandle)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/libobs" "${CMAKE_BINARY_DIR}/libobs")
|
||||
endif()
|
||||
|
||||
target_sources(
|
||||
win-dshow
|
||||
PRIVATE dshow-plugin.cpp encode-dstr.hpp ffmpeg-decode.c ffmpeg-decode.h win-dshow-encoder.cpp win-dshow.cpp
|
||||
@@ -31,7 +33,17 @@ target_sources(win-dshow PRIVATE win-dshow.rc)
|
||||
|
||||
target_link_libraries(
|
||||
win-dshow
|
||||
PRIVATE OBS::libobs OBS::w32-pthreads OBS::libdshowcapture FFmpeg::avcodec FFmpeg::avutil strmiids winmm
|
||||
PRIVATE
|
||||
OBS::libobs
|
||||
OBS::w32-pthreads
|
||||
OBS::libdshowcapture
|
||||
OBS::tiny-nv12-scale
|
||||
OBS::shared-memory-queue
|
||||
OBS::winhandle
|
||||
FFmpeg::avcodec
|
||||
FFmpeg::avutil
|
||||
strmiids
|
||||
winmm
|
||||
)
|
||||
|
||||
if(TARGET OBS::virtualcam AND TARGET OBS::virtualcam-guid)
|
||||
@@ -43,3 +55,5 @@ if(TARGET OBS::virtualcam AND TARGET OBS::virtualcam-guid)
|
||||
endif()
|
||||
|
||||
set_target_properties_obs(win-dshow PROPERTIES FOLDER plugins/win-dshow PREFIX "")
|
||||
|
||||
add_subdirectory(virtualcam-module)
|
||||
|
||||
@@ -10,9 +10,7 @@ if(NOT ENABLE_VIRTUALCAM)
|
||||
endif()
|
||||
|
||||
if(ENABLE_VIRTUALCAM AND NOT VIRTUALCAM_GUID)
|
||||
set(VIRTUALCAM_GUID
|
||||
""
|
||||
CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
set(VIRTUALCAM_GUID "" CACHE STRING "Virtual Camera GUID" FORCE)
|
||||
mark_as_advanced(VIRTUALCAM_GUID)
|
||||
endif()
|
||||
|
||||
@@ -23,8 +21,10 @@ 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)
|
||||
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)
|
||||
@@ -33,44 +33,51 @@ 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)
|
||||
INTERFACE
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/EGAVResult.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/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)
|
||||
INTERFACE
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshowcapture.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/capture-filter.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/capture-filter.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/output-filter.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/output-filter.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshowcapture.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshowencode.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/device.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/device.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/device-vendor.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/encoder.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/encoder.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-base.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-base.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-demux.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-demux.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-device-defs.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-enum.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-enum.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-formats.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-formats.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-media-type.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-encoded-device.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/dshow-media-type.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/log.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/log.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/source/external/IVideoCaptureFilter.h
|
||||
)
|
||||
|
||||
target_include_directories(
|
||||
libdshowcapture INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/libdshowcapture/external/capture-device-support/Library)
|
||||
libdshowcapture
|
||||
INTERFACE
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library
|
||||
)
|
||||
|
||||
target_compile_definitions(libdshowcapture-external INTERFACE _UP_WINDOWS=1)
|
||||
target_compile_definitions(libdshowcapture INTERFACE _UP_WINDOWS=1)
|
||||
@@ -82,8 +89,10 @@ configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in win-dsh
|
||||
|
||||
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)
|
||||
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)
|
||||
@@ -109,11 +118,13 @@ if(ENABLE_VIRTUALCAM)
|
||||
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)
|
||||
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})
|
||||
@@ -139,70 +150,82 @@ 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)
|
||||
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)
|
||||
FILES
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/EGAVResult.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/ElgatoUVCDevice.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/external/capture-device-support/Library/win/EGAVHIDImplementation.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/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)
|
||||
FILES
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/capture-filter.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/output-filter.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshowcapture.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshowencode.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/device.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/device-vendor.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/encoder.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-base.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-demux.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-enum.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-formats.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-media-type.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-encoded-device.cpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/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)
|
||||
FILES
|
||||
libdshowcapture/dshowcapture.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/capture-filter.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/output-filter.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/device.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/encoder.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-base.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-demux.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-device-defs.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-enum.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-formats.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/dshow-media-type.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/log.hpp
|
||||
${CMAKE_SOURCE_DIR}/deps/libdshowcapture/src/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_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-module/virtualcam-guid.h.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config/virtualcam-guid.h)
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/virtualcam-module/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)
|
||||
|
||||
|
||||
Submodule plugins/win-dshow/libdshowcapture deleted from ef8c1d2e19
@@ -1,89 +1,131 @@
|
||||
cmake_minimum_required(VERSION 3.24...3.25)
|
||||
|
||||
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()
|
||||
legacy_check()
|
||||
|
||||
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.")
|
||||
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
|
||||
${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.rc
|
||||
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_link_libraries(
|
||||
_virtualcam
|
||||
INTERFACE OBS::virtualcam-interface OBS::virtualcam-guid OBS::libdshowcapture OBS::winhandle gdiplus strmiids winmm
|
||||
)
|
||||
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()
|
||||
|
||||
legacy_check()
|
||||
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.")
|
||||
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()
|
||||
|
||||
if(NOT TARGET OBS::winhandle)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/libobs" "${CMAKE_BINARY_DIR}/libobs")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::threading-windows)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/libobs" "${CMAKE_BINARY_DIR}/libobs")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::tiny-nv12-scale)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/shared/obs-tiny-nv12-scale" obs-tiny-nv12-scale)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::shared-memory-queue)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/shared/obs-shared-memory-queue" obs-shared-memory-queue)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET OBS::libdshowcapture)
|
||||
add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libdshowcapture" libdshowcapture)
|
||||
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(obs-virtualcam-module MODULE)
|
||||
add_library(OBS::virtualcam ALIAS obs-virtualcam-module)
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE cmake/windows/virtualcam-module64.def)
|
||||
target_link_libraries(obs-virtualcam-module PRIVATE _virtualcam)
|
||||
configure_file(cmake/windows/obs-module.rc.in virtualcam-module.rc)
|
||||
target_sources(
|
||||
obs-virtualcam-module
|
||||
PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/virtualcam-module.rc
|
||||
placeholder.cpp
|
||||
sleepto.c
|
||||
sleepto.h
|
||||
virtualcam-filter.cpp
|
||||
virtualcam-filter.hpp
|
||||
virtualcam-module.cpp
|
||||
)
|
||||
|
||||
set_property(TARGET obs-virtualcam-module PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
target_include_directories(obs-virtualcam-module PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
target_compile_definitions(obs-virtualcam-module PRIVATE VIRTUALCAM_AVAILABLE)
|
||||
|
||||
target_link_libraries(
|
||||
obs-virtualcam-module
|
||||
PRIVATE
|
||||
OBS::tiny-nv12-scale
|
||||
OBS::shared-memory-queue
|
||||
OBS::virtualcam-guid
|
||||
OBS::libdshowcapture
|
||||
OBS::winhandle
|
||||
OBS::threading-windows
|
||||
gdiplus
|
||||
strmiids
|
||||
winmm
|
||||
)
|
||||
|
||||
if(OBS_PARENT_ARCHITECTURE STREQUAL CMAKE_GENERATOR_PLATFORM)
|
||||
if(CMAKE_GENERATOR_PLATFORM STREQUAL x64)
|
||||
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 x86 obs-virtualcam-module"
|
||||
)
|
||||
endif()
|
||||
|
||||
add_dependencies(win-dshow obs-virtualcam-module)
|
||||
endif()
|
||||
|
||||
if(CMAKE_GENERATOR_PLATFORM STREQUAL x64)
|
||||
set(_OUTPUT_NAME virtualcam-module64)
|
||||
else()
|
||||
set(_OUTPUT_NAME virtualcam-module32)
|
||||
endif()
|
||||
|
||||
target_sources(obs-virtualcam-module PRIVATE cmake/windows/${_OUTPUT_NAME}.def)
|
||||
|
||||
configure_file(virtualcam-install.bat.in virtualcam-install.bat)
|
||||
target_add_resource(obs-virtualcam-module "${CMAKE_CURRENT_BINARY_DIR}/virtualcam-install.bat"
|
||||
@@ -95,6 +137,9 @@ target_add_resource(obs-virtualcam-module "${CMAKE_CURRENT_BINARY_DIR}/virtualca
|
||||
"${OBS_DATA_DESTINATION}/obs-plugins/win-dshow"
|
||||
)
|
||||
|
||||
include(cmake/32bit.cmake)
|
||||
|
||||
set_target_properties_obs(obs-virtualcam-module PROPERTIES FOLDER plugins/win-dshow OUTPUT_NAME obs-virtualcam-module64)
|
||||
set_target_properties_obs(
|
||||
obs-virtualcam-module PROPERTIES
|
||||
FOLDER plugins/win-dshow
|
||||
OUTPUT_NAME obs-${_OUTPUT_NAME}
|
||||
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
||||
)
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
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 MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
|
||||
set_property(TARGET obs-virtualcam-module PROPERTY OUTPUT_NAME obs-virtualcam-module32)
|
||||
@@ -1,6 +0,0 @@
|
||||
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"
|
||||
)
|
||||
@@ -7,15 +7,15 @@
|
||||
#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 "../../../deps/libdshowcapture/src/source/output-filter.hpp"
|
||||
#include "../../../deps/libdshowcapture/src/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 <source/output-filter.hpp>
|
||||
#include <source/dshow-formats.hpp>
|
||||
#include <util/windows/WinHandle.hpp>
|
||||
#include <util/threading-windows.h>
|
||||
#endif
|
||||
|
||||
@@ -2,7 +2,11 @@
|
||||
#include <obs-avc.h>
|
||||
#include <util/darray.h>
|
||||
#include <util/dstr.hpp>
|
||||
#ifdef OBS_LEGACY
|
||||
#include "libdshowcapture/dshowcapture.hpp"
|
||||
#else
|
||||
#include <dshowcapture.hpp>
|
||||
#endif
|
||||
|
||||
using namespace DShow;
|
||||
using namespace std;
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
#include <util/platform.h>
|
||||
#include <util/windows/WinHandle.hpp>
|
||||
#include <util/threading.h>
|
||||
#ifdef OBS_LEGACY
|
||||
#include "libdshowcapture/dshowcapture.hpp"
|
||||
#else
|
||||
#include <dshowcapture.hpp>
|
||||
#endif
|
||||
#include "ffmpeg-decode.h"
|
||||
#include "encode-dstr.hpp"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user