From 203a0ce2808419cfed91bc2c2675b94c640763c5 Mon Sep 17 00:00:00 2001 From: thirumalai-qcom Date: Tue, 23 Jul 2024 16:15:38 +0530 Subject: [PATCH 1/5] deps: Add ARM64 definitions in w32-pthreads Update w32-pthreads/context.h to include definitions for _M_ARM and _M_ARM64 in addition to existing ARM definitions. --- deps/w32-pthreads/context.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/w32-pthreads/context.h b/deps/w32-pthreads/context.h index f55dd73e944929..72e1c1812a9b14 100644 --- a/deps/w32-pthreads/context.h +++ b/deps/w32-pthreads/context.h @@ -63,7 +63,7 @@ #define PTW32_PROGCTR(Context) ((Context).Rip) #endif -#if defined(_ARM_) || defined(ARM) +#if defined(_ARM_) || defined(ARM) || defined(_M_ARM) || defined(_M_ARM64) #define PTW32_PROGCTR(Context) ((Context).Pc) #endif From a98b1fb89a312b3d4a36514dba461d1bd1da510a Mon Sep 17 00:00:00 2001 From: thirumalai-qcom Date: Tue, 23 Jul 2024 16:21:17 +0530 Subject: [PATCH 2/5] libobs: Add ARM64 support to Windows crash handler Adjust obs-win-crash-handler.c to handle instruction pointers and stack traces, improving crash reporting on ARM64 systems. --- libobs/obs-win-crash-handler.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libobs/obs-win-crash-handler.c b/libobs/obs-win-crash-handler.c index 649b0ca962ca0d..664a9c6eb12305 100644 --- a/libobs/obs-win-crash-handler.c +++ b/libobs/obs-win-crash-handler.c @@ -138,7 +138,13 @@ static inline bool get_dbghelp_imports(struct exception_handler_data *data) static inline void init_instruction_data(struct stack_trace *trace) { -#ifdef _WIN64 +#if defined(_M_ARM64) + trace->instruction_ptr = trace->context.Pc; + trace->frame.AddrPC.Offset = trace->instruction_ptr; + trace->frame.AddrFrame.Offset = trace->context.Fp; + trace->frame.AddrStack.Offset = trace->context.Sp; + trace->image_type = IMAGE_FILE_MACHINE_ARM64; +#elif defined(_WIN64) trace->instruction_ptr = trace->context.Rip; trace->frame.AddrPC.Offset = trace->instruction_ptr; trace->frame.AddrFrame.Offset = trace->context.Rbp; From 7c99798a8b2a1f1c43ea21d1494147df8375df77 Mon Sep 17 00:00:00 2001 From: thirumalai-qcom Date: Tue, 23 Jul 2024 16:29:34 +0530 Subject: [PATCH 3/5] obs-filters: Rename S_THRESHOLD to S_FILTER_THRESHOLD Rename S_THRESHOLD to S_FILTER_THRESHOLD to prevent macro redefinition warnings in obs-filters. --- plugins/obs-filters/compressor-filter.c | 10 +++++----- plugins/obs-filters/expander-filter.c | 12 ++++++------ plugins/obs-filters/limiter-filter.c | 10 +++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/plugins/obs-filters/compressor-filter.c b/plugins/obs-filters/compressor-filter.c index 649952b6db45af..432263e7371e36 100644 --- a/plugins/obs-filters/compressor-filter.c +++ b/plugins/obs-filters/compressor-filter.c @@ -27,7 +27,7 @@ /* clang-format off */ #define S_RATIO "ratio" -#define S_THRESHOLD "threshold" +#define S_FILTER_THRESHOLD "threshold" #define S_ATTACK_TIME "attack_time" #define S_RELEASE_TIME "release_time" #define S_OUTPUT_GAIN "output_gain" @@ -190,7 +190,7 @@ static void compressor_update(void *data, obs_data_t *s) const char *sidechain_name = obs_data_get_string(s, S_SIDECHAIN_SOURCE); cd->ratio = (float)obs_data_get_double(s, S_RATIO); - cd->threshold = (float)obs_data_get_double(s, S_THRESHOLD); + cd->threshold = (float)obs_data_get_double(s, S_FILTER_THRESHOLD); cd->attack_gain = gain_coefficient(sample_rate, attack_time_ms / MS_IN_S_F); cd->release_gain = gain_coefficient(sample_rate, release_time_ms / MS_IN_S_F); cd->output_gain = db_to_mul(output_gain_db); @@ -438,7 +438,7 @@ static struct obs_audio_data *compressor_filter_audio(void *data, struct obs_aud static void compressor_defaults(obs_data_t *s) { obs_data_set_default_double(s, S_RATIO, 10.0f); - obs_data_set_default_double(s, S_THRESHOLD, -18.0f); + obs_data_set_default_double(s, S_FILTER_THRESHOLD, -18.0f); obs_data_set_default_int(s, S_ATTACK_TIME, 6); obs_data_set_default_int(s, S_RELEASE_TIME, 60); obs_data_set_default_double(s, S_OUTPUT_GAIN, 0.0f); @@ -477,8 +477,8 @@ static obs_properties_t *compressor_properties(void *data) p = obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO, MIN_RATIO, MAX_RATIO, 0.5); obs_property_float_set_suffix(p, ":1"); - p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB, - 0.1); + p = obs_properties_add_float_slider(props, S_FILTER_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, + MAX_THRESHOLD_DB, 0.1); obs_property_float_set_suffix(p, " dB"); p = obs_properties_add_int_slider(props, S_ATTACK_TIME, TEXT_ATTACK_TIME, MIN_ATK_RLS_MS, MAX_ATK_MS, 1); obs_property_int_set_suffix(p, " ms"); diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index e5aaf6dfdade0f..077451e74b0c03 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -27,7 +27,7 @@ /* clang-format off */ #define S_RATIO "ratio" -#define S_THRESHOLD "threshold" +#define S_FILTER_THRESHOLD "threshold" #define S_ATTACK_TIME "attack_time" #define S_RELEASE_TIME "release_time" #define S_OUTPUT_GAIN "output_gain" @@ -158,7 +158,7 @@ static void expander_defaults(obs_data_t *s) is_expander_preset = false; obs_data_set_default_string(s, S_PRESETS, is_expander_preset ? "expander" : "gate"); obs_data_set_default_double(s, S_RATIO, is_expander_preset ? 2.0 : 10.0); - obs_data_set_default_double(s, S_THRESHOLD, -40.0f); + obs_data_set_default_double(s, S_FILTER_THRESHOLD, -40.0f); obs_data_set_default_int(s, S_ATTACK_TIME, 10); obs_data_set_default_int(s, S_RELEASE_TIME, is_expander_preset ? 50 : 125); obs_data_set_default_double(s, S_OUTPUT_GAIN, 0.0); @@ -168,7 +168,7 @@ static void expander_defaults(obs_data_t *s) static void upward_compressor_defaults(obs_data_t *s) { obs_data_set_default_double(s, S_RATIO, 0.5); - obs_data_set_default_double(s, S_THRESHOLD, -20.0f); + obs_data_set_default_double(s, S_FILTER_THRESHOLD, -20.0f); obs_data_set_default_int(s, S_ATTACK_TIME, 10); obs_data_set_default_int(s, S_RELEASE_TIME, 50); obs_data_set_default_double(s, S_OUTPUT_GAIN, 0.0); @@ -204,7 +204,7 @@ static void expander_update(void *data, obs_data_t *s) cd->ratio = (float)obs_data_get_double(s, S_RATIO); - cd->threshold = (float)obs_data_get_double(s, S_THRESHOLD); + cd->threshold = (float)obs_data_get_double(s, S_FILTER_THRESHOLD); cd->attack_gain = gain_coefficient(sample_rate, attack_time_ms / MS_IN_S_F); cd->release_gain = gain_coefficient(sample_rate, release_time_ms / MS_IN_S_F); cd->output_gain = db_to_mul(output_gain_db); @@ -445,8 +445,8 @@ static obs_properties_t *expander_properties(void *data) p = obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO, !cd->is_upwcomp ? MIN_RATIO : MIN_RATIO_UPW, !cd->is_upwcomp ? MAX_RATIO : MAX_RATIO_UPW, 0.1); obs_property_float_set_suffix(p, ":1"); - p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB, - 0.1); + p = obs_properties_add_float_slider(props, S_FILTER_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, + MAX_THRESHOLD_DB, 0.1); obs_property_float_set_suffix(p, " dB"); p = obs_properties_add_int_slider(props, S_ATTACK_TIME, TEXT_ATTACK_TIME, MIN_ATK_RLS_MS, MAX_ATK_MS, 1); obs_property_int_set_suffix(p, " ms"); diff --git a/plugins/obs-filters/limiter-filter.c b/plugins/obs-filters/limiter-filter.c index 86b0484c47704a..927737cebdf714 100644 --- a/plugins/obs-filters/limiter-filter.c +++ b/plugins/obs-filters/limiter-filter.c @@ -24,7 +24,7 @@ /* clang-format off */ -#define S_THRESHOLD "threshold" +#define S_FILTER_THRESHOLD "threshold" #define S_RELEASE_TIME "release_time" #define MT_ obs_module_text @@ -90,7 +90,7 @@ static void limiter_update(void *data, obs_data_t *s) const float release_time_ms = (float)obs_data_get_int(s, S_RELEASE_TIME); const float output_gain_db = 0; - cd->threshold = (float)obs_data_get_double(s, S_THRESHOLD); + cd->threshold = (float)obs_data_get_double(s, S_FILTER_THRESHOLD); cd->attack_gain = gain_coefficient(sample_rate, attack_time_ms / MS_IN_S_F); cd->release_gain = gain_coefficient(sample_rate, release_time_ms / MS_IN_S_F); @@ -181,7 +181,7 @@ static struct obs_audio_data *limiter_filter_audio(void *data, struct obs_audio_ static void limiter_defaults(obs_data_t *s) { - obs_data_set_default_double(s, S_THRESHOLD, -6.0f); + obs_data_set_default_double(s, S_FILTER_THRESHOLD, -6.0f); obs_data_set_default_int(s, S_RELEASE_TIME, 60); } @@ -190,8 +190,8 @@ static obs_properties_t *limiter_properties(void *data) obs_properties_t *props = obs_properties_create(); obs_property_t *p; - p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, MAX_THRESHOLD_DB, - 0.1); + p = obs_properties_add_float_slider(props, S_FILTER_THRESHOLD, TEXT_THRESHOLD, MIN_THRESHOLD_DB, + MAX_THRESHOLD_DB, 0.1); obs_property_float_set_suffix(p, " dB"); p = obs_properties_add_int_slider(props, S_RELEASE_TIME, TEXT_RELEASE_TIME, MIN_ATK_RLS_MS, MAX_RLS_MS, 1); obs_property_int_set_suffix(p, " ms"); From 8592284c8b14ce8ca15d92a4cf0c298a548cab5d Mon Sep 17 00:00:00 2001 From: thirumalai-qcom Date: Tue, 23 Jul 2024 16:38:56 +0530 Subject: [PATCH 4/5] obs-outputs: Use _CountTrailingZeros() in ctz32 for ARM64 This change modifies the `ctz32` function to use `_CountTrailingZeros` when `_M_ARM64` is defined, as `_tzcnt_u32` is not available on WOA. --- plugins/obs-outputs/utils.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/obs-outputs/utils.h b/plugins/obs-outputs/utils.h index 989977508214f1..5b28697c35aa75 100644 --- a/plugins/obs-outputs/utils.h +++ b/plugins/obs-outputs/utils.h @@ -22,7 +22,11 @@ static inline uint32_t clz32(unsigned long val) static inline uint32_t ctz32(unsigned long val) { +#if defined(_M_ARM64) + return _CountTrailingZeros(val); +#else return _tzcnt_u32(val); +#endif } #else static uint32_t popcnt(uint32_t x) From b59015312af3705c467cd7898ba07add5395dbcd Mon Sep 17 00:00:00 2001 From: thirumalai-qcom Date: Wed, 12 Feb 2025 07:14:26 +0000 Subject: [PATCH 5/5] frontend: Define WIN32_LEAN_AND_MEAN conditionally for ARM64 To avoid redefinition errors defined WIN32_LEAN_AND_MEAN conditionally if not defined in win-ARM64 devices. --- frontend/dialogs/OBSBasicFilters.cpp | 2 ++ frontend/dialogs/OBSBasicInteraction.cpp | 2 ++ frontend/dialogs/OBSBasicProperties.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/frontend/dialogs/OBSBasicFilters.cpp b/frontend/dialogs/OBSBasicFilters.cpp index 94bd1b5c7a9259..6640248839b7b2 100644 --- a/frontend/dialogs/OBSBasicFilters.cpp +++ b/frontend/dialogs/OBSBasicFilters.cpp @@ -30,7 +30,9 @@ #include #ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 +#endif #include #endif diff --git a/frontend/dialogs/OBSBasicInteraction.cpp b/frontend/dialogs/OBSBasicInteraction.cpp index e4c2b705e5be3b..67880c75dbc07d 100644 --- a/frontend/dialogs/OBSBasicInteraction.cpp +++ b/frontend/dialogs/OBSBasicInteraction.cpp @@ -27,7 +27,9 @@ #include #ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 +#endif #include #endif diff --git a/frontend/dialogs/OBSBasicProperties.cpp b/frontend/dialogs/OBSBasicProperties.cpp index ee656f595c88a3..881ed5e0d2dc2d 100644 --- a/frontend/dialogs/OBSBasicProperties.cpp +++ b/frontend/dialogs/OBSBasicProperties.cpp @@ -27,7 +27,9 @@ #include #ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 +#endif #include #endif