Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.vs
.vs/*
bin
bin/*
bin_cmake
Expand Down
1 change: 1 addition & 0 deletions build/cmake/third-party/dependencies_windows.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
libusb
wxwidgets
libyuv
directshow
35 changes: 35 additions & 0 deletions build/cmake/third-party/directshow.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

include(${CMAKE_CURRENT_SOURCE_DIR}/ocean_third_party_utilities.cmake)

message(CHECK_START "directshow")
list(APPEND CMAKE_MESSAGE_INDENT " ")

find_package(Git REQUIRED)

# DirectShow is Windows-only
if(NOT WIN32)
message(CHECK_FAIL "skipped (Windows only)")
list(POP_BACK CMAKE_MESSAGE_INDENT)
return()
endif()

set(DIRECTSHOW_GIT_TAG "adf93f0")

CPMAddPackage(
NAME directshow
GIT_REPOSITORY https://github.com/microsoft/Windows-classic-samples.git
GIT_TAG ${DIRECTSHOW_GIT_TAG}
SOURCE_SUBDIR Samples/Win7Samples/multimedia/directshow/baseclasses
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
"${CMAKE_CURRENT_SOURCE_DIR}/directshow/CMakeLists.txt"
"<SOURCE_DIR>/Samples/Win7Samples/multimedia/directshow/baseclasses/CMakeLists.txt"
)

write_library_version("${DIRECTSHOW_GIT_TAG}")

list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "completed")
229 changes: 229 additions & 0 deletions build/cmake/third-party/directshow/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
cmake_minimum_required(VERSION 3.15)

project(DirectShowBaseClasses
LANGUAGES CXX
DESCRIPTION "DirectShow Base Classes Library"
)

# Set C++ standard (the original code is compatible with older standards)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED OFF)

# Source files (from baseclasses.vcproj)
set(BASECLASSES_SOURCES
amextra.cpp
amfilter.cpp
amvideo.cpp
arithutil.cpp
combase.cpp
cprop.cpp
ctlutil.cpp
ddmm.cpp
dllentry.cpp
dllsetup.cpp
mtype.cpp
outputq.cpp
perflog.cpp
pstream.cpp
pullpin.cpp
refclock.cpp
renbase.cpp
schedule.cpp
seekpt.cpp
source.cpp
strmctl.cpp
sysclock.cpp
transfrm.cpp
transip.cpp
videoctl.cpp
vtrans.cpp
winctrl.cpp
winutil.cpp
wxdebug.cpp
wxlist.cpp
wxutil.cpp
)

# Header files (for IDE organization)
set(BASECLASSES_HEADERS
amextra.h
amfilter.h
cache.h
checkbmi.h
combase.h
cprop.h
ctlutil.h
ddmm.h
dllsetup.h
dxmperf.h
fourcc.h
measure.h
msgthrd.h
mtype.h
outputq.h
perflog.h
perfstruct.h
pstream.h
pullpin.h
refclock.h
reftime.h
renbase.h
schedule.h
seekpt.h
source.h
streams.h
strmctl.h
sysclock.h
transfrm.h
transip.h
videoctl.h
vtrans.h
winctrl.h
winutil.h
wxdebug.h
wxlist.h
wxutil.h
)

# Create the static library
add_library(strmbase STATIC
${BASECLASSES_SOURCES}
${BASECLASSES_HEADERS}
)

# Set output name based on configuration
# Debug builds get 'd' suffix, matching the original project
set_target_properties(strmbase PROPERTIES
OUTPUT_NAME_DEBUG "strmbasd"
OUTPUT_NAME_RELEASE "strmbase"
OUTPUT_NAME_RELWITHDEBINFO "strmbase"
OUTPUT_NAME_MINSIZEREL "strmbase"
)

# Include directories
target_include_directories(strmbase
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)

# Preprocessor definitions
target_compile_definitions(strmbase
PRIVATE
WIN32
_LIB
$<$<CONFIG:Debug>:_DEBUG>
$<$<NOT:$<CONFIG:Debug>>:NDEBUG>
)

# Compiler options matching the original project
if(MSVC)
target_compile_options(strmbase PRIVATE
/W3 # Warning level 3
$<$<CONFIG:Debug>:/Od> # No optimization for debug
$<$<CONFIG:Debug>:/RTC1> # Runtime checks for debug
$<$<CONFIG:Release>:/O2> # Optimize for speed in release
)

# Use Unicode character set (matches default configuration)
target_compile_definitions(strmbase PRIVATE
UNICODE
_UNICODE
)

# Set runtime library to match original project
# /MD for Release (Multi-threaded DLL)
# /MDd for Debug (Multi-threaded Debug DLL)
set_target_properties(strmbase PROPERTIES
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
)
endif()

# Link against required Windows libraries
target_link_libraries(strmbase
PUBLIC
strmiids # DirectShow GUIDs library
winmm # Windows multimedia
)

# Optional: Create MBCS variants (Multi-Byte Character Set)
# Uncomment these sections if you need MBCS builds
#
# add_library(strmbase_mbcs STATIC
# ${BASECLASSES_SOURCES}
# ${BASECLASSES_HEADERS}
# )
#
# set_target_properties(strmbase_mbcs PROPERTIES
# OUTPUT_NAME_DEBUG "strmbasd_mbcs"
# OUTPUT_NAME_RELEASE "strmbase_mbcs"
# )
#
# target_include_directories(strmbase_mbcs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# target_compile_definitions(strmbase_mbcs PRIVATE WIN32 _LIB _MBCS
# $<$<CONFIG:Debug>:_DEBUG>
# $<$<NOT:$<CONFIG:Debug>>:NDEBUG>
# )
# target_link_libraries(strmbase_mbcs PUBLIC strmiids winmm)

# Installation rules
install(TARGETS strmbase
EXPORT DirectShowBaseClassesTargets
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)

install(FILES ${BASECLASSES_HEADERS}
DESTINATION include
)

# Install CMake package configuration
include(CMakePackageConfigHelpers)

# Check if config template exists, otherwise create simple config
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DirectShowBaseClassesConfig.cmake.in)
# Generate the config file from template
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/DirectShowBaseClassesConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/DirectShowBaseClassesConfig.cmake
INSTALL_DESTINATION lib/cmake/DirectShowBaseClasses
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
else()
# Generate a basic config file inline
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/DirectShowBaseClassesConfig.cmake
"# DirectShow Base Classes CMake Configuration
include(\${CMAKE_CURRENT_LIST_DIR}/DirectShowBaseClassesTargets.cmake)
set(DirectShowBaseClasses_LIBRARIES DirectShow::strmbase)
")
endif()

# Generate version file
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/DirectShowBaseClassesConfigVersion.cmake
VERSION 1.0.0
COMPATIBILITY SameMajorVersion
)

# Install the configuration files
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/DirectShowBaseClassesConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/DirectShowBaseClassesConfigVersion.cmake
DESTINATION lib/cmake/DirectShowBaseClasses
)

# Install the export set
install(EXPORT DirectShowBaseClassesTargets
FILE DirectShowBaseClassesTargets.cmake
NAMESPACE DirectShow::
DESTINATION lib/cmake/DirectShowBaseClasses
)

# Print configuration information
message(STATUS "DirectShow Base Classes Configuration:")
message(STATUS " Output (Debug): strmbasd.lib")
message(STATUS " Output (Release): strmbase.lib")
message(STATUS " Character Set: Unicode")
message(STATUS " Install Prefix: ${CMAKE_INSTALL_PREFIX}")
4 changes: 2 additions & 2 deletions build/cmake/third-party/ocean_third_party_utilities.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ function(write_library_version VERSION_STRING)

# List of known third-party library names (must match dependency names)
set(KNOWN_LIBS
"assimp" "curl" "eigen" "freetype" "giflib" "gl" "googletest"
"assimp" "curl" "directshow" "eigen" "freetype" "giflib" "gl" "googletest"
"libjpeg-turbo" "libpng" "libtiff" "libusb" "libyuv"
"mbedtls" "openxr" "protozero" "tinyxml2" "vtzero" "wxwidgets" "zlib"
"android" "android_native_app_glue" "arcore-android-sdk"
Expand Down Expand Up @@ -56,7 +56,7 @@ function(get_library_install_root LIBRARY_NAME OUTPUT_VAR)

# List of known third-party library names (must match dependency names)
set(KNOWN_LIBS
"assimp" "curl" "eigen" "freetype" "giflib" "gl" "googletest"
"assimp" "curl" "directshow" "eigen" "freetype" "giflib" "gl" "googletest"
"libjpeg-turbo" "libpng" "libtiff" "libusb" "libyuv"
"mbedtls" "openxr" "protozero" "tinyxml2" "vtzero" "wxwidgets" "zlib"
"android" "android_native_app_glue" "arcore-android-sdk"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\include\freetype2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\eigen\3.4\impl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\eigen\287c8017808fb4c7a651ba4c02363a773e2f0c46\include\eigen3;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<LibraryDependencies>m;%(LibraryDependencies)</LibraryDependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,31 +15,31 @@
</ImportGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\h;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\include\freetype2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|x64' Or '$(Configuration)|$(Platform)'=='Shared Debug|x64'">
<Link>
<AdditionalDependencies>freetype.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\lib\win_x64_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\lib\win_x64_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\lib\win_x64_vc143_static_debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetyped.lib;libpng16d.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\lib\win_x64_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\ed217e3e601d8e462f7fd1e04bed43ac42212429\lib\win_x64_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf\lib\win_x64_vc143_static_debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Debug|Win32' Or '$(Configuration)|$(Platform)'=='Shared Debug|Win32'">
<Link>
<AdditionalDependencies>freetype.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\lib\win_x86_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\lib\win_x86_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\lib\win_x86_vc143_static_debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetyped.lib;libpng16d.lib;zlibd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\lib\win_x86_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\ed217e3e601d8e462f7fd1e04bed43ac42212429\lib\win_x86_vc143_static_debug;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf\lib\win_x86_vc143_static_debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Profile|x64' Or '$(Configuration)|$(Platform)'=='Shared Profile|x64' Or '$(Configuration)|$(Platform)'=='Static Release|x64' Or '$(Configuration)|$(Platform)'=='Shared Release|x64'">
<Link>
<AdditionalDependencies>freetype.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\lib\win_x64_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\lib\win_x64_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\lib\win_x64_vc143_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetype.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\lib\win_x64_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\ed217e3e601d8e462f7fd1e04bed43ac42212429\lib\win_x64_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf\lib\win_x64_vc143_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Static Profile|Win32' Or '$(Configuration)|$(Platform)'=='Shared Profile|Win32' Or '$(Configuration)|$(Platform)'=='Static Release|Win32' Or '$(Configuration)|$(Platform)'=='Shared Release|Win32'">
<Link>
<AdditionalDependencies>freetype.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\2.10\lib\win_x86_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\lib\win_x86_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\lib\win_x86_vc143_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>freetype.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OCEAN_DEVELOPMENT_PATH)\3rdparty\freetype\VER-2-13-2\lib\win_x86_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\libpng\ed217e3e601d8e462f7fd1e04bed43ac42212429\lib\win_x86_vc143_static;$(OCEAN_DEVELOPMENT_PATH)\3rdparty\zlib\51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf\lib\win_x86_vc143_static;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
</Project>
Loading