Преглед изворни кода

add pthread patch for svt av1

ruki пре 2 година
родитељ
комит
a9e5bec5aa
2 измењених фајлова са 73 додато и 8 уклоњено
  1. 61 0
      packages/s/svt-av1/patches/1.6.0/pthread.patch
  2. 12 8
      packages/s/svt-av1/xmake.lua

+ 61 - 0
packages/s/svt-av1/patches/1.6.0/pthread.patch

@@ -0,0 +1,61 @@
+diff --git a/Source/Lib/Common/Codec/EbThreads.c b/Source/Lib/Common/Codec/EbThreads.c
+index ea403ae..4f99818 100644
+--- a/Source/Lib/Common/Codec/EbThreads.c
++++ b/Source/Lib/Common/Codec/EbThreads.c
+@@ -121,11 +121,13 @@ EbHandle svt_create_thread(void *thread_function(void *), void *thread_context)
+      * the thread priority will __always__ fail the thread sanitizer.
+      * https://github.com/google/sanitizers/issues/1088
+      */
++#if 0
+     if (!EB_THREAD_SANITIZER_ENABLED && !geteuid()) {
+         if (pthread_setschedparam(*th, SCHED_FIFO, &(struct sched_param){.sched_priority = 99}))
+             SVT_WARN("Failed to set thread priority\n");
+         // ignore if this failed
+     }
++#endif
+     thread_handle = th;
+ #endif // _WIN32
+ 
+diff --git a/Source/Lib/Common/Codec/EbThreads.h b/Source/Lib/Common/Codec/EbThreads.h
+index 8506c7f..6ed7125 100644
+--- a/Source/Lib/Common/Codec/EbThreads.h
++++ b/Source/Lib/Common/Codec/EbThreads.h
+@@ -83,7 +83,6 @@ extern EbErrorType svt_destroy_mutex(EbHandle mutex_handle);
+     do {                                                                                             \
+         pointer = svt_create_thread(thread_function, thread_context);                                \
+         EB_ADD_MEM(pointer, 1, EB_THREAD);                                                           \
+-        pthread_setaffinity_np(*((pthread_t *)pointer), sizeof(cpu_set_t), &svt_aom_group_affinity); \
+     } while (0)
+ #else
+ #define EB_CREATE_THREAD(pointer, thread_function, thread_context)    \
+diff --git a/Source/Lib/Decoder/Codec/EbDecHandle.c b/Source/Lib/Decoder/Codec/EbDecHandle.c
+index 952d889..4c1b954 100644
+--- a/Source/Lib/Decoder/Codec/EbDecHandle.c
++++ b/Source/Lib/Decoder/Codec/EbDecHandle.c
+@@ -76,10 +76,6 @@ EbErrorType svt_aom_decode_multiple_obu(EbDecHandle *dec_handle_ptr, uint8_t **d
+                                         uint32_t is_annexb);
+ 
+ static void dec_switch_to_real_time() {
+-#if !defined(_WIN32)
+-    if (!geteuid())
+-        (void)pthread_setschedparam(pthread_self(), SCHED_FIFO, &(struct sched_param){.sched_priority = 99});
+-#endif
+ }
+ 
+ /***********************************
+diff --git a/Source/Lib/Encoder/Globals/EbEncHandle.c b/Source/Lib/Encoder/Globals/EbEncHandle.c
+index be068d9..1ddc2a6 100644
+--- a/Source/Lib/Encoder/Globals/EbEncHandle.c
++++ b/Source/Lib/Encoder/Globals/EbEncHandle.c
+@@ -312,11 +312,6 @@ void svt_aom_init_intra_predictors_internal(void);
+ void svt_av1_init_me_luts(void);
+ 
+ static void enc_switch_to_real_time(){
+-#if !defined(_WIN32)
+-    if (!geteuid())
+-        (void)pthread_setschedparam(
+-            pthread_self(), SCHED_FIFO, &(struct sched_param){.sched_priority = 99});
+-#endif
+ }
+ #define SINGLE_CORE_COUNT       1
+ #define CONS_CORE_COUNT         16

+ 12 - 8
packages/s/svt-av1/xmake.lua

@@ -3,12 +3,16 @@ package("svt-av1")
     set_description("Scalable Video Technology for AV1 (SVT-AV1 Encoder and Decoder)")
 
     add_urls("https://gitlab.com/AOMediaCodec/SVT-AV1.git",
-        "https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v$(version)/SVT-AV1-v$(version).tar.gz")
+             "https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v$(version)/SVT-AV1-v$(version).tar.gz")
     add_versions("1.4.0", "0a4650b822c4eeb9656fbe96bd795e7a73cbfd1ab8c12546348ba88d8ed6b415")
     add_versions("1.4.1", "e3f7fc194afc6c90b43e0b80fa24c09940cb03bea394e0e1f5d1ded18e9ab23f")
     add_versions("1.5.0", "64e27b024eb43e4ba4e7b85584e0497df534043b2ce494659532c585819d0333")
     add_versions("1.6.0", "3bc207247568ac713245063555082bfc905edc31df3bf6355e3b194cb73ad817")
 
+    if is_plat("wasm", "android") then
+        add_patches("1.6.0", path.join(os.scriptdir(), "patches", "1.6.0", "pthread.patch"), "1875f99a581e00d9233b14ca66443289a805dadd55b4c81a4d253e6770516216")
+    end
+
     if is_plat("wasm") then
         add_configs("shared",  {description = "Build shared library.", default = false, type = "boolean", readonly = true})
     end
@@ -30,23 +34,23 @@ package("svt-av1")
     end)
 
     on_install(function (package)
-        local configs = {}
+        local configs = {"-DBUILD_TESTING=OFF", "-DCOVERAGE=OFF", "-DBUILD_APPS=OFF"}
         table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
         table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
         table.insert(configs, "-DLIB_INSTALL_DIR=" .. package:installdir("lib"))
         if package:is_plat("wasm") then
             io.replace("CMakeLists.txt", "if(MINGW)", "if(TRUE)\n    check_both_flags_add(-pthread)\n  elseif(MINGW)", {plain = true})
             io.replace("CMakeLists.txt", "set(CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -z noexecstack -z relro -z now\")",  "", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Decoder", "CMakeLists.txt"), "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Encoder", "CMakeLists.txt"), "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
+            io.replace("Source/Lib/Decoder/CMakeLists.txt", "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
+            io.replace("Source/Lib/Encoder/CMakeLists.txt", "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
         elseif package:is_plat("mingw") and package:is_arch("x64", "x86_64") then
             table.insert(configs, "-DCMAKE_SYSTEM_PROCESSOR=AMD64")
         elseif package:is_plat("android") then
             io.replace("CMakeLists.txt", "CMAKE_C_COMPILER_ID MATCHES \"Clang\" AND UNIX AND NOT APPLE", "FALSE", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Decoder", "CMakeLists.txt"), "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Decoder", "CMakeLists.txt"), "set(LIBS_PRIVATE \"-lpthread -lm\")", "set(LIBS_PRIVATE \"-lm\")", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Encoder", "CMakeLists.txt"), "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
-            io.replace(path.join(os.curdir(), "Source", "Lib", "Encoder", "CMakeLists.txt"), "set(LIBS_PRIVATE \"-lpthread -lm\")", "set(LIBS_PRIVATE \"-lm\")", {plain = true})
+            io.replace("Source/Lib/Decoder/CMakeLists.txt", "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
+            io.replace("Source/Lib/Decoder/CMakeLists.txt", "set(LIBS_PRIVATE \"-lpthread -lm\")", "set(LIBS_PRIVATE \"-lm\")", {plain = true})
+            io.replace("Source/Lib/Encoder/CMakeLists.txt", "list(APPEND PLATFORM_LIBS Threads::Threads)", "", {plain = true})
+            io.replace("Source/Lib/Encoder/CMakeLists.txt", "set(LIBS_PRIVATE \"-lpthread -lm\")", "set(LIBS_PRIVATE \"-lm\")", {plain = true})
         end
         import("package.tools.cmake").install(package, configs)
     end)