diff --git a/main.sh b/main.sh index 135837d..f4a3162 100755 --- a/main.sh +++ b/main.sh @@ -1,10 +1,10 @@ #! /bin/bash set -e # Add dependent repositories -#wget -q -O - https://ppa.pika-os.com/key.gpg | sudo apt-key add - -#add-apt-repository https://ppa.pika-os.com -#add-apt-repository ppa:pikaos/pika -#add-apt-repository ppa:kubuntu-ppa/backports +wget -q -O - https://ppa.pika-os.com/key.gpg | sudo apt-key add - +add-apt-repository https://ppa.pika-os.com +add-apt-repository ppa:pikaos/pika +add-apt-repository ppa:kubuntu-ppa/backports # Clone Upstream wget https://launchpad.net/~obsproject/+archive/ubuntu/obs-studio/+sourcefiles/obs-studio/29.0.2-0obsproject1~kinetic/obs-studio_29.0.2.orig.tar.gz tar -xf ./obs-studio_29.0.2.orig.tar.gz -C ./ diff --git a/patches/7206.patch b/patches/7206.patch index e8e4364..eea24cb 100644 --- a/patches/7206.patch +++ b/patches/7206.patch @@ -1,29 +1,25 @@ -From 7ac1d462af1be795569e0d5c8f79871901e5d6e0 Mon Sep 17 00:00:00 2001 -From: David Rosca -Date: Sun, 28 Aug 2022 10:15:16 +0200 -Subject: [PATCH] obs-ffmpeg: Make AMF encoder work on Linux +From ef97ae930812bcd418cc57403669d50d36f3e5b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jos=C3=A9=20Miguel=20Sarasola?= +Date: Fri, 3 Feb 2023 23:08:46 +0100 +Subject: [PATCH] Test -Only the fallback encoders are available (no texture support). - -Requires AMD proprietary Vulkan driver, using different driver -will be detected on startup and the encoders disabled. --- plugins/obs-ffmpeg/CMakeLists.txt | 3 + .../obs-ffmpeg/obs-amf-test/CMakeLists.txt | 11 +- .../obs-amf-test/obs-amf-test-linux.cpp | 140 ++++++++++++++++++ plugins/obs-ffmpeg/obs-ffmpeg.c | 10 +- plugins/obs-ffmpeg/texture-amf-opts.hpp | 2 +- - plugins/obs-ffmpeg/texture-amf.cpp | 81 +++++++++- - 6 files changed, 236 insertions(+), 11 deletions(-) + plugins/obs-ffmpeg/texture-amf.cpp | 93 +++++++++--- + 6 files changed, 236 insertions(+), 23 deletions(-) create mode 100644 plugins/obs-ffmpeg/obs-amf-test/obs-amf-test-linux.cpp diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt -index 681a057..35cb1ea 100644 +index 244c6df92..ef1cd98d4 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt -@@ -119,11 +119,14 @@ +@@ -119,11 +119,14 @@ if(OS_WINDOWS) obs-ffmpeg.rc) - + elseif(OS_POSIX AND NOT OS_MACOS) + add_subdirectory(obs-amf-test) find_package(Libva REQUIRED) @@ -31,13 +27,13 @@ index 681a057..35cb1ea 100644 target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c vaapi-utils.c vaapi-utils.h) target_link_libraries(obs-ffmpeg PRIVATE Libva::va Libva::drm LIBPCI::LIBPCI) -+ target_sources(obs-ffmpeg PRIVATE texture-amf.cpp) ++ target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c texture-amf.cpp) + target_link_libraries(obs-ffmpeg PRIVATE LIBPCI::LIBPCI) endif() - + setup_plugin_target(obs-ffmpeg) diff --git a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt -index 85347e7..034b4cc 100644 +index 85347e73d..034b4cc3b 100644 --- a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt +++ b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt @@ -3,8 +3,15 @@ project(obs-amf-test) @@ -60,7 +56,7 @@ index 85347e7..034b4cc 100644 diff --git a/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test-linux.cpp b/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test-linux.cpp new file mode 100644 -index 0000000..018486e +index 000000000..018486e0c --- /dev/null +++ b/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test-linux.cpp @@ -0,0 +1,140 @@ @@ -205,10 +201,10 @@ index 0000000..018486e + return 0; +} diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c -index 1677e08..4bb870a 100644 +index f1884c789..bce316d4f 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c -@@ -322,6 +322,9 @@ static bool nvenc_supported(bool *out_h264, bool *out_hevc, bool *out_av1) +@@ -339,6 +339,9 @@ static bool h264_vaapi_supported(void) #ifdef _WIN32 extern void jim_nvenc_load(bool h264, bool hevc, bool av1); extern void jim_nvenc_unload(void); @@ -218,7 +214,7 @@ index 1677e08..4bb870a 100644 extern void amf_load(void); extern void amf_unload(void); #endif -@@ -391,7 +394,7 @@ bool obs_module_load(void) +@@ -408,7 +411,7 @@ bool obs_module_load(void) #endif } @@ -227,7 +223,7 @@ index 1677e08..4bb870a 100644 amf_load(); #endif -@@ -409,8 +412,11 @@ void obs_module_unload(void) +@@ -440,8 +443,11 @@ void obs_module_unload(void) obs_ffmpeg_unload_logging(); #endif @@ -241,7 +237,7 @@ index 1677e08..4bb870a 100644 #endif } diff --git a/plugins/obs-ffmpeg/texture-amf-opts.hpp b/plugins/obs-ffmpeg/texture-amf-opts.hpp -index b1c37d2..d28e3f7 100644 +index b1c37d200..d28e3f77e 100644 --- a/plugins/obs-ffmpeg/texture-amf-opts.hpp +++ b/plugins/obs-ffmpeg/texture-amf-opts.hpp @@ -321,7 +321,7 @@ static void amf_apply_opt(amf_base *enc, obs_option *opt) @@ -254,7 +250,7 @@ index b1c37d2..d28e3f7 100644 bool bool_val = (bool)val; set_amf_property(enc, wname, bool_val); diff --git a/plugins/obs-ffmpeg/texture-amf.cpp b/plugins/obs-ffmpeg/texture-amf.cpp -index 92e57e0..8c648ce 100644 +index 7916cf85d..201be298c 100644 --- a/plugins/obs-ffmpeg/texture-amf.cpp +++ b/plugins/obs-ffmpeg/texture-amf.cpp @@ -20,6 +20,7 @@ @@ -443,16 +439,23 @@ index 92e57e0..8c648ce 100644 static void *amf_av1_create_fallback(obs_data_t *settings, obs_encoder_t *encoder) -@@ -2159,9 +2215,16 @@ static bool enum_luids(void *param, uint32_t idx, uint64_t luid) - return true; - } +@@ -2151,17 +2207,16 @@ static void register_av1() + /* ========================================================================= */ + /* Global Stuff */ +-static bool enum_luids(void *param, uint32_t idx, uint64_t luid) +-{ +- std::stringstream &cmd = *(std::stringstream *)param; +- cmd << " " << std::hex << luid; +- UNUSED_PARAMETER(idx); +- return true; +-} +#ifdef _WIN32 +#define OBS_AMF_TEST "obs-amf-test.exe" +#else +#define OBS_AMF_TEST "obs-amf-test" +#endif -+ + extern "C" void amf_load(void) try { AMF_RESULT res; @@ -460,7 +463,7 @@ index 92e57e0..8c648ce 100644 HMODULE amf_module_test; /* Check if the DLL is present before running the more expensive */ -@@ -2171,17 +2234,25 @@ try { +@@ -2171,18 +2226,20 @@ try { if (!amf_module_test) throw "No AMF library"; FreeLibrary(amf_module_test); @@ -475,20 +478,19 @@ index 92e57e0..8c648ce 100644 /* Check for supported codecs */ - BPtr test_exe = os_get_executable_path_ptr("obs-amf-test.exe"); +- std::stringstream cmd; + BPtr test_exe = os_get_executable_path_ptr(OBS_AMF_TEST); - std::stringstream cmd; std::string caps_str; - cmd << test_exe; +- cmd << test_exe; - enum_graphics_device_luids(enum_luids, &cmd); - -+#ifdef _WIN32 -+ enum_graphics_device_luids(enum_luids, &cmd); -+#endif - os_process_pipe_t *pp = os_process_pipe_create(cmd.str().c_str(), "r"); +- +- os_process_pipe_t *pp = os_process_pipe_create(cmd.str().c_str(), "r"); ++ os_process_pipe_t *pp = os_process_pipe_create(test_exe, "r"); if (!pp) throw "Failed to launch the AMF test process I guess"; -@@ -2240,12 +2311,12 @@ try { + +@@ -2240,12 +2297,12 @@ try { /* ----------------------------------- */ /* Init AMF */ @@ -503,7 +505,7 @@ index 92e57e0..8c648ce 100644 if (!init) throw "Failed to get AMFInit address"; -@@ -2257,7 +2328,7 @@ try { +@@ -2257,7 +2314,7 @@ try { if (res != AMF_OK) throw amf_error("GetTrace failed", res); @@ -513,5 +515,5 @@ index 92e57e0..8c648ce 100644 if (!get_ver) throw "Failed to get AMFQueryVersion address"; -- -2.39.0 +2.39.1