diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 1af782adca3c70..cfba0b02445cdd 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -36,6 +36,7 @@ add_obs_plugin( PLATFORMS WINDOWS MACOS LINUX WITH_MESSAGE ) +add_obs_plugin(obs-amf PLATFORMS WINDOWS) add_obs_plugin(coreaudio-encoder PLATFORMS WINDOWS MACOS) add_obs_plugin( decklink diff --git a/plugins/obs-amf/CMakeLists.txt b/plugins/obs-amf/CMakeLists.txt new file mode 100644 index 00000000000000..d54d965a04de23 --- /dev/null +++ b/plugins/obs-amf/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.28...3.30) + +option(ENABLE_AMF "Build AMD Radeon Hardware Encoder Plugin" ON) + +if(NOT ENABLE_AMF) + target_disable_feature(obs-amf "AMD Radeon Hardware Encoder") + target_disable(obs-amf) + return() +endif() + +if(NOT TARGET OBS::opts-parser) + add_subdirectory("${CMAKE_SOURCE_DIR}/shared/opts-parser" "${CMAKE_BINARY_DIR}/shared/opts-parser") +endif() + +find_package(AMF 1.4.29 REQUIRED) + +add_library(obs-amf MODULE) +add_library(OBS::amf ALIAS obs-amf) + +add_subdirectory(obs-amf-test) + +target_sources(obs-amf PRIVATE obs-amf.c texture-amf-opts.hpp texture-amf.cpp) + +target_link_libraries(obs-amf PRIVATE OBS::libobs OBS::opts-parser AMF::AMF) + +if(OS_WINDOWS) + configure_file(cmake/windows/obs-module.rc.in obs-amf.rc) + target_sources(obs-amf PRIVATE obs-amf.rc) +endif() + +set_target_properties_obs(obs-amf PROPERTIES FOLDER plugins/obs-amf PREFIX "") diff --git a/plugins/obs-amf/cmake/windows/obs-module.rc.in b/plugins/obs-amf/cmake/windows/obs-module.rc.in new file mode 100644 index 00000000000000..1cc7eace4e2f25 --- /dev/null +++ b/plugins/obs-amf/cmake/windows/obs-module.rc.in @@ -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 AMF 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", "obs-amf" + VALUE "OriginalFilename", "obs-amf" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END diff --git a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt b/plugins/obs-amf/obs-amf-test/CMakeLists.txt similarity index 100% rename from plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt rename to plugins/obs-amf/obs-amf-test/CMakeLists.txt diff --git a/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp b/plugins/obs-amf/obs-amf-test/obs-amf-test.cpp similarity index 100% rename from plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp rename to plugins/obs-amf/obs-amf-test/obs-amf-test.cpp diff --git a/plugins/obs-amf/obs-amf.c b/plugins/obs-amf/obs-amf.c new file mode 100644 index 00000000000000..f3b150fea5c657 --- /dev/null +++ b/plugins/obs-amf/obs-amf.c @@ -0,0 +1,24 @@ +#include + +extern void amf_load(void); +extern void amf_unload(void); + +OBS_DECLARE_MODULE() +OBS_MODULE_USE_DEFAULT_LOCALE("obs-amf", "en-US") + +MODULE_EXPORT const char *obs_module_description(void) +{ + return "AMD Radeon Encoder (AMF) Plugin"; +} + +bool obs_module_load(void) +{ + amf_load(); + + return true; +} + +void obs_module_unload(void) +{ + amf_unload(); +} diff --git a/plugins/obs-ffmpeg/texture-amf-opts.hpp b/plugins/obs-amf/texture-amf-opts.hpp similarity index 100% rename from plugins/obs-ffmpeg/texture-amf-opts.hpp rename to plugins/obs-amf/texture-amf-opts.hpp diff --git a/plugins/obs-ffmpeg/texture-amf.cpp b/plugins/obs-amf/texture-amf.cpp similarity index 100% rename from plugins/obs-ffmpeg/texture-amf.cpp rename to plugins/obs-amf/texture-amf.cpp diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index 6bc0ab087b47b3..d27907b25f9c2b 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -26,8 +26,6 @@ target_sources( $<$:obs-ffmpeg-vaapi.c> $<$:vaapi-utils.c> $<$:vaapi-utils.h> - $<$:texture-amf-opts.hpp> - $<$:texture-amf.cpp> obs-ffmpeg-audio-encoders.c obs-ffmpeg-av1.c obs-ffmpeg-compat.h @@ -65,7 +63,6 @@ target_link_libraries( FFmpeg::swscale FFmpeg::swresample $<$:OBS::w32-pthreads> - $<$:AMF::AMF> $<$:ws2_32> $<$:Libva::va> $<$:Libva::drm> diff --git a/plugins/obs-ffmpeg/cmake/dependencies.cmake b/plugins/obs-ffmpeg/cmake/dependencies.cmake index 39641fadf2562a..d998b0ff04b867 100644 --- a/plugins/obs-ffmpeg/cmake/dependencies.cmake +++ b/plugins/obs-ffmpeg/cmake/dependencies.cmake @@ -12,10 +12,7 @@ if(NOT TARGET OBS::opts-parser) add_subdirectory("${CMAKE_SOURCE_DIR}/shared/opts-parser" "${CMAKE_BINARY_DIR}/shared/opts-parser") endif() -if(OS_WINDOWS) - find_package(AMF 1.4.29 REQUIRED) - add_subdirectory(obs-amf-test) -elseif(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD) +if(OS_LINUX OR OS_FREEBSD OR OS_OPENBSD) find_package(Libva REQUIRED) find_package(Libpci REQUIRED) find_package(Libdrm REQUIRED) diff --git a/plugins/obs-ffmpeg/obs-amf-test/cmake/legacy.cmake b/plugins/obs-ffmpeg/obs-amf-test/cmake/legacy.cmake deleted file mode 100644 index e00cef1cf1d8ac..00000000000000 --- a/plugins/obs-ffmpeg/obs-amf-test/cmake/legacy.cmake +++ /dev/null @@ -1,14 +0,0 @@ -project(obs-amf-test) - -add_executable(obs-amf-test) - -find_package(AMF 1.4.29 REQUIRED) - -target_include_directories(obs-amf-test PRIVATE ${CMAKE_SOURCE_DIR}/libobs) - -target_sources(obs-amf-test PRIVATE obs-amf-test.cpp) -target_link_libraries(obs-amf-test d3d11 dxgi dxguid AMF::AMF) - -set_target_properties(obs-amf-test PROPERTIES FOLDER "plugins/obs-ffmpeg") - -setup_binary_target(obs-amf-test) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index 83651e95df2141..79b258bf95213e 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -328,11 +328,6 @@ static bool hevc_vaapi_supported(void) #endif #endif -#ifdef _WIN32 -extern void amf_load(void); -extern void amf_unload(void); -#endif - #if ENABLE_FFMPEG_LOGGING extern void obs_ffmpeg_load_logging(void); extern void obs_ffmpeg_unload_logging(void); @@ -379,10 +374,6 @@ bool obs_module_load(void) } #endif -#ifdef _WIN32 - amf_load(); -#endif - #ifdef LIBAVUTIL_VAAPI_AVAILABLE const char *libva_env = getenv("LIBVA_DRIVER_NAME"); if (!!libva_env) @@ -428,8 +419,4 @@ void obs_module_unload(void) #if ENABLE_FFMPEG_LOGGING obs_ffmpeg_unload_logging(); #endif - -#ifdef _WIN32 - amf_unload(); -#endif }