From 321776efa3bc1578fff7bcaa4f7cc18cb7e566b7 Mon Sep 17 00:00:00 2001 From: "kevin.dww" Date: Tue, 10 Jan 2023 15:03:27 +0800 Subject: [PATCH 0001/2225] rtmp-services: update Mildom servers --- plugins/rtmp-services/data/package.json | 4 ++-- plugins/rtmp-services/data/services.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index d4b5cfee495fbb..53ea4db42e0d27 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 216, + "version": 217, "files": [ { "name": "services.json", - "version": 216 + "version": 217 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 7022f9cbfd279b..3801c0a1053062 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2381,8 +2381,8 @@ "stream_key_link": "https://www.mildom.com/creator/live", "servers": [ { - "name": "Asia: Tokyo, Japan", - "url": "rtmp://live-tyo-tct.mildom.tv/live" + "name": "Global", + "url": "rtmp://txlvb-push.mildom.tv/live" } ], "recommended": { From 1166e504bbde35e4574af2cf6fb8104bcf96e088 Mon Sep 17 00:00:00 2001 From: "Chris (Flaeri)" Date: Fri, 13 Jan 2023 15:19:32 +0000 Subject: [PATCH 0002/2225] obs-ffmpeg: Remove forced x264 and aac for RTMP Remove code forcing x264 and ffmpeg aac encoder. People using custom ffmpeg output should be able to use other video and audio encoders when streaming with RTMP, given its h264 or aac. --- plugins/obs-ffmpeg/obs-ffmpeg-output.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c index 10591e3a99ca7d..3d5a5498d96ae4 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c @@ -640,9 +640,7 @@ bool ffmpeg_data_init(struct ffmpeg_data *data, struct ffmpeg_cfg *config) } #else if (is_rtmp) { - data->config.audio_encoder = "aac"; data->config.audio_encoder_id = AV_CODEC_ID_AAC; - data->config.video_encoder = "libx264"; data->config.video_encoder_id = AV_CODEC_ID_H264; } #endif From 2133f47658f9c05b317baf83ddb7d08e9cccbd88 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 13 Jan 2023 18:36:22 +0100 Subject: [PATCH 0003/2225] UI: Reintroduce spacing to YouTube dialog buttons --- UI/forms/OBSYoutubeActions.ui | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/forms/OBSYoutubeActions.ui b/UI/forms/OBSYoutubeActions.ui index 5825a2314b8fa0..0594dc942349ce 100644 --- a/UI/forms/OBSYoutubeActions.ui +++ b/UI/forms/OBSYoutubeActions.ui @@ -646,6 +646,9 @@ QLayout::SetNoConstraint + + 10 + From 1805712f4695e7ff89ee793f932250283373a9fb Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 14 Jan 2023 12:54:43 +0900 Subject: [PATCH 0004/2225] libobs/util: Fix text-lookup not always case-insensitive Convert `lookup` to upper-case before creating the tree so that later code does not need to consider the case-insensitivity. When converting to upper-case, use `toupper` instead of adding 0x20 so that the behavior is consistent with `astrcmpi_n`. --- libobs/util/text-lookup.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libobs/util/text-lookup.c b/libobs/util/text-lookup.c index 433aebd7f56c8c..6fc144f78fcd10 100644 --- a/libobs/util/text-lookup.c +++ b/libobs/util/text-lookup.c @@ -14,6 +14,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include "dstr.h" #include "text-lookup.h" #include "lexer.h" @@ -159,11 +160,6 @@ static void lookup_addstring(const char *lookup_val, struct text_leaf *leaf, char val1 = child->str.array[len], val2 = lookup_val[len]; - if (val1 >= 'A' && val1 <= 'Z') - val1 += 0x20; - if (val2 >= 'A' && val2 <= 'Z') - val2 += 0x20; - if (val1 != val2) break; } @@ -323,6 +319,9 @@ static void lookup_addfiledata(struct text_lookup *lookup, leaf->lookup = bstrdup_n(name.array, name.len); leaf->value = convert_string(value.array, value.len); + for (size_t i = 0; i < name.len; i++) + leaf->lookup[i] = toupper(leaf->lookup[i]); + lookup_addstring(leaf->lookup, leaf, lookup->top); if (!lookup_goto_nextline(&lex)) From 143877c8ffc69090ea8a32ddae05389c97bb626c Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 12 Jan 2023 22:33:55 +0100 Subject: [PATCH 0005/2225] updater: Fix portable OBS not being relaunched correctly --- UI/win-update/updater/updater.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index f65808fa1dc580..0a1cd2ac41d54c 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -1754,7 +1754,7 @@ static void CancelUpdate(bool quit) } } -static void LaunchOBS() +static void LaunchOBS(bool portable) { wchar_t cwd[MAX_PATH]; wchar_t newCwd[MAX_PATH]; @@ -1794,6 +1794,9 @@ static void LaunchOBS() execInfo.lpDirectory = newCwd; execInfo.nShow = SW_SHOWNORMAL; + if (portable) + execInfo.lpParameters = L"--portable"; + ShellExecuteEx(&execInfo); } @@ -1907,6 +1910,8 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) GetCurrentDirectoryW(_countof(cwd) - 1, cwd); is32bit = wcsstr(cwd, L"bin\\32bit") != nullptr; + bool isPortable = wcsstr(lpCmdLine, L"Portable") != nullptr || + wcsstr(lpCmdLine, L"--portable") != nullptr; if (!IsWindows10OrGreater()) { MessageBox( @@ -1942,7 +1947,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) nullptr); SetCurrentDirectory(newPath); - LaunchOBS(); + LaunchOBS(isPortable); } if (hLowMutex) { @@ -1990,7 +1995,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) WinHandle hMutex = OpenMutex( SYNCHRONIZE, false, L"OBSUpdaterRunningAsNonAdminUser"); if (msg.wParam == 1 && !hMutex) { - LaunchOBS(); + LaunchOBS(isPortable); } return (int)msg.wParam; From 599b017881239c84da7c9bf560ddb47333a5a8f1 Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sun, 8 Jan 2023 19:50:18 -0800 Subject: [PATCH 0006/2225] libobs-opengl: Drop gl pointers on device_leave_context Mac was already dropping a most of these when leaving contexts, this patch brings the same drops to linux and also drops vertex/index buffers that were noticed as leaking across contexts and resulting in invalid bindings by later draws. Especially with the new spacing labels. --- libobs-opengl/gl-cocoa.m | 2 ++ libobs-opengl/gl-nix.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/libobs-opengl/gl-cocoa.m b/libobs-opengl/gl-cocoa.m index caaf3bf85ceda1..599ba952571373 100644 --- a/libobs-opengl/gl-cocoa.m +++ b/libobs-opengl/gl-cocoa.m @@ -265,6 +265,8 @@ void device_leave_context(gs_device_t *device) { glFlush(); [NSOpenGLContext clearCurrentContext]; + device->cur_vertex_buffer = NULL; + device->cur_index_buffer = NULL; device->cur_render_target = NULL; device->cur_zstencil_buffer = NULL; device->cur_swap = NULL; diff --git a/libobs-opengl/gl-nix.c b/libobs-opengl/gl-nix.c index 52a300346b56a7..c775079fce4931 100644 --- a/libobs-opengl/gl-nix.c +++ b/libobs-opengl/gl-nix.c @@ -86,6 +86,12 @@ extern void device_enter_context(gs_device_t *device) extern void device_leave_context(gs_device_t *device) { + device->cur_render_target = NULL; + device->cur_zstencil_buffer = NULL; + device->cur_vertex_buffer = NULL; + device->cur_index_buffer = NULL; + device->cur_swap = NULL; + device->cur_fbo = NULL; gl_vtable->device_leave_context(device); } From bf00ef1ea3c7103b53e6296ed2429cb95e80bbd4 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 29 Dec 2022 02:20:06 +0100 Subject: [PATCH 0007/2225] obs-outputs: Improvements to Windows interface logging Now uses GetIfEntry2 which supports 64-bit values for reporting speed, so 10+ gbps adapters are now reported correctly in the log. Also added an additional log line if the interface error counters are non-zero to possibly help identify physical faults. Finally the transmit and receive speeds are logged independently so that asynchronous mediums such as Wi-Fi that might have good RX but poor TX can be better diagnosed. --- plugins/obs-outputs/rtmp-stream.c | 40 +++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 8b1908f568f8ea..0d82c8c8ab0f62 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1007,26 +1007,46 @@ static void win32_log_interface_type(struct rtmp_stream *stream) return; if (!GetBestRoute(dest_addr, source_addr, &route)) { - MIB_IFROW row; + MIB_IF_ROW2 row; memset(&row, 0, sizeof(row)); - row.dwIndex = route.dwForwardIfIndex; + row.InterfaceIndex = route.dwForwardIfIndex; - if (!GetIfEntry(&row)) { - uint32_t speed = row.dwSpeed / 1000000; + if (!GetIfEntry2(&row)) { + uint32_t rxSpeed = row.ReceiveLinkSpeed / 1000000; + uint32_t txSpeed = row.TransmitLinkSpeed / 1000000; char *type; struct dstr other = {0}; - if (row.dwType == IF_TYPE_ETHERNET_CSMACD) { + switch (row.PhysicalMediumType) { + case NdisPhysicalMedium802_3: type = "ethernet"; - } else if (row.dwType == IF_TYPE_IEEE80211) { + break; + case NdisPhysicalMediumWirelessLan: + case NdisPhysicalMediumNative802_11: type = "802.11"; - } else { - dstr_printf(&other, "type %lu", row.dwType); + break; + default: + dstr_printf(&other, "type %d", + (int)row.PhysicalMediumType); type = other.array; + break; } - info("Interface: %s (%s, %lu mbps)", row.bDescr, type, - speed); + char *desc; + os_wcs_to_utf8_ptr(row.Description, 0, &desc); + + info("Interface: %s (%s, %lu↓/%lu↑ mbps)", desc, type, + rxSpeed, txSpeed); + + bfree(desc); + + if (row.InErrors || row.OutErrors) { + warn("Interface has non-zero error counters (%" PRIu64 + "/%" PRIu64 " errors, %" PRIu64 "/%" PRIu64 + " discards)", + row.InErrors, row.OutErrors, + row.InDiscards, row.OutDiscards); + } dstr_free(&other); } From fb58f60ae4fdce4fe8b4c5ed1b157330f37b00ed Mon Sep 17 00:00:00 2001 From: jpark37 Date: Wed, 28 Dec 2022 14:23:40 -0800 Subject: [PATCH 0008/2225] win-capture: Show Force SDR setting on Windows 10 Was using wrong bool for visibility. --- plugins/win-capture/window-capture.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/win-capture/window-capture.c b/plugins/win-capture/window-capture.c index 33a2dd06b4a23f..f548a6c22e112e 100644 --- a/plugins/win-capture/window-capture.c +++ b/plugins/win-capture/window-capture.c @@ -401,7 +401,7 @@ static void update_settings_visibility(obs_properties_t *props, obs_property_set_visible(p, wgc_options); p = obs_properties_get(props, "force_sdr"); - obs_property_set_visible(p, wgc_cursor_toggle); + obs_property_set_visible(p, wgc_options); pthread_mutex_unlock(&wc->update_mutex); } From 22ea8f4e1fc83a30d27476fcb7b444df244be036 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Wed, 28 Dec 2022 14:22:24 -0800 Subject: [PATCH 0009/2225] libobs-winrt,win-capture: Add Force SDR for WGC display Leverage existing window capture support for display capture. --- libobs-winrt/winrt-capture.cpp | 5 +++-- libobs-winrt/winrt-capture.h | 4 ++-- plugins/win-capture/duplicator-monitor-capture.c | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/libobs-winrt/winrt-capture.cpp b/libobs-winrt/winrt-capture.cpp index 09d5d80b0e0b78..e125288f78e366 100644 --- a/libobs-winrt/winrt-capture.cpp +++ b/libobs-winrt/winrt-capture.cpp @@ -546,9 +546,10 @@ winrt_capture_init_window(BOOL cursor, HWND window, BOOL client_area, } extern "C" EXPORT struct winrt_capture * -winrt_capture_init_monitor(BOOL cursor, HMONITOR monitor) +winrt_capture_init_monitor(BOOL cursor, HMONITOR monitor, BOOL force_sdr) { - return winrt_capture_init_internal(cursor, NULL, false, false, monitor); + return winrt_capture_init_internal(cursor, NULL, false, force_sdr, + monitor); } extern "C" EXPORT void winrt_capture_free(struct winrt_capture *capture) diff --git a/libobs-winrt/winrt-capture.h b/libobs-winrt/winrt-capture.h index 58eb511546712e..cd38c50effbedb 100644 --- a/libobs-winrt/winrt-capture.h +++ b/libobs-winrt/winrt-capture.h @@ -14,8 +14,8 @@ EXPORT BOOL winrt_capture_cursor_toggle_supported(); EXPORT struct winrt_capture *winrt_capture_init_window(BOOL cursor, HWND window, BOOL client_area, BOOL force_sdr); -EXPORT struct winrt_capture *winrt_capture_init_monitor(BOOL cursor, - HMONITOR monitor); +EXPORT struct winrt_capture * +winrt_capture_init_monitor(BOOL cursor, HMONITOR monitor, BOOL force_sdr); EXPORT void winrt_capture_free(struct winrt_capture *capture); EXPORT BOOL winrt_capture_active(const struct winrt_capture *capture); diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index a1c9ccec8be13a..ccb06ffe1e0c44 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -27,6 +27,7 @@ #define TEXT_METHOD_AUTO obs_module_text("WindowCapture.Method.Auto") #define TEXT_METHOD_DXGI obs_module_text("Method.DXGI") #define TEXT_METHOD_WGC obs_module_text("Method.WindowsGraphicsCapture") +#define TEXT_FORCE_SDR obs_module_text("ForceSdr") /* clang-format on */ @@ -35,7 +36,7 @@ typedef BOOL (*PFN_winrt_capture_supported)(); typedef BOOL (*PFN_winrt_capture_cursor_toggle_supported)(); typedef struct winrt_capture *(*PFN_winrt_capture_init_monitor)( - BOOL cursor, HMONITOR monitor); + BOOL cursor, HMONITOR monitor, BOOL force_sdr); typedef void (*PFN_winrt_capture_free)(struct winrt_capture *capture); typedef BOOL (*PFN_winrt_capture_active)(const struct winrt_capture *capture); @@ -74,6 +75,7 @@ struct duplicator_capture { bool reset_wgc; HMONITOR handle; bool capture_cursor; + bool force_sdr; bool showing; LONG logged_width; LONG logged_height; @@ -278,6 +280,7 @@ static inline void update_settings(struct duplicator_capture *capture, capture->handle = monitor.handle; capture->capture_cursor = obs_data_get_bool(settings, "capture_cursor"); + capture->force_sdr = obs_data_get_bool(settings, "force_sdr"); capture->logged_width = monitor.rect.right - monitor.rect.left; capture->logged_height = monitor.rect.bottom - monitor.rect.top; @@ -351,6 +354,7 @@ static void duplicator_capture_defaults(obs_data_t *settings) obs_data_set_default_string(settings, "monitor_id", "DUMMY"); obs_data_set_default_int(settings, "monitor_wgc", 0); obs_data_set_default_bool(settings, "capture_cursor", true); + obs_data_set_default_bool(settings, "force_sdr", false); } static void duplicator_capture_update(void *data, obs_data_t *settings) @@ -515,7 +519,8 @@ static void duplicator_capture_tick(void *data, float seconds) capture->capture_winrt = capture->exports.winrt_capture_init_monitor( capture->capture_cursor, - capture->handle); + capture->handle, + capture->force_sdr); if (!capture->capture_winrt) { update_monitor_handle(capture); @@ -523,7 +528,8 @@ static void duplicator_capture_tick(void *data, float seconds) capture->capture_winrt = capture->exports.winrt_capture_init_monitor( capture->capture_cursor, - capture->handle); + capture->handle, + capture->force_sdr); } } } @@ -782,6 +788,9 @@ static void update_settings_visibility(obs_properties_t *props, obs_property_t *p = obs_properties_get(props, "cursor"); obs_property_set_visible(p, dxgi_options || wgc_cursor_toggle); + p = obs_properties_get(props, "force_sdr"); + obs_property_set_visible(p, wgc_options); + pthread_mutex_unlock(&capture->update_mutex); } @@ -824,6 +833,7 @@ static obs_properties_t *duplicator_capture_properties(void *data) OBS_COMBO_FORMAT_STRING); obs_properties_add_bool(props, "capture_cursor", TEXT_CAPTURE_CURSOR); + obs_properties_add_bool(props, "force_sdr", TEXT_FORCE_SDR); EnumDisplayMonitors(NULL, NULL, enum_monitor_props, (LPARAM)monitors); From eb35b07f44bc1cbb01f14960c561ccc255db11f4 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Tue, 3 Jan 2023 14:49:34 +0100 Subject: [PATCH 0010/2225] libobs: Fix stopping transitions that are not active --- libobs/obs-source-transition.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libobs/obs-source-transition.c b/libobs/obs-source-transition.c index 45869bc4703b91..9c50f4a99fd34b 100644 --- a/libobs/obs-source-transition.c +++ b/libobs/obs-source-transition.c @@ -439,7 +439,7 @@ void obs_transition_set(obs_source_t *transition, obs_source_t *source) obs_source_t *s[2]; bool active[2]; - if (!transition_valid(transition, "obs_transition_clear")) + if (!transition_valid(transition, "obs_transition_set")) return; source = obs_source_get_ref(source); @@ -893,6 +893,9 @@ bool obs_transition_video_render_direct(obs_source_t *transition, transition->transitioning_video = false; video_stopped = true; + if (!obs_source_active(transition)) + transition->transitioning_audio = false; + if (!transition->transitioning_audio) { obs_transition_stop(transition); stopped = true; From 24e9f82f8799078f3960029defbd912a8cfa3da6 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 22:09:23 -0800 Subject: [PATCH 0011/2225] docs: Document a few missing obs_output_t function calls - `obs_weak_output_references_output` - `obs_output_get_id` - `obs_output_output_caption_text[1/2]` --- docs/sphinx/reference-outputs.rst | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index a0766ef4885e51..730a6bb4bae3d9 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -373,12 +373,26 @@ General Output Functions --------------------- +.. function:: bool obs_weak_output_references_output(obs_weak_output_t *weak, obs_output_t *output) + + Compares a weak output reference with an output. + + :return: Whether the weak output reference ties back to the specified output + +--------------------- + .. function:: const char *obs_output_get_name(const obs_output_t *output) :return: The name of the output --------------------- +.. function:: const char *obs_output_get_id(const obs_output_t *output) + + :return: The output's type identifier string + +--------------------- + .. function:: bool obs_output_start(obs_output_t *output) Starts the output. @@ -621,6 +635,18 @@ General Output Functions --------------------- +.. function:: void obs_output_output_caption_text1(obs_output_t *output, const char *text) + void obs_output_output_caption_text2(obs_output_t *output, const char *text, double display_duration) + + Outputs captions from the specified text input. *text1* is the same as + *text2*, except that the *display_duration* is hardcoded to 2.0 seconds. + + *display_duration* represents the minimum quantity of time that a given + caption can be displayed for before moving onto the next caption in the + queue. + +--------------------- + .. function:: float obs_output_get_congestion(obs_output_t *output) :return: The congestion value. This value is used to visualize the From 78d31322b2e9fae15f9db4f7a24a81ddfa5392a8 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 22:59:59 -0800 Subject: [PATCH 0012/2225] libobs: Remove extra space in output reconnect log message It has been bothering me to no end. --- libobs/obs-output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 3253a3b25a7fab..9c096726c45ab8 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -2417,7 +2417,7 @@ static void output_reconnect(struct obs_output *output) blog(LOG_WARNING, "Failed to create reconnect thread"); os_atomic_set_bool(&output->reconnecting, false); } else { - blog(LOG_INFO, "Output '%s': Reconnecting in %.02f seconds..", + blog(LOG_INFO, "Output '%s': Reconnecting in %.02f seconds..", output->context.name, (float)(output->reconnect_retry_cur_msec / 1000.0)); From 7de0bd350fbea7088b98b6a1231a5ff9fa7bca9e Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 5 Aug 2022 12:29:27 +0200 Subject: [PATCH 0013/2225] libobs,plugins: Remove one-case switches --- libobs/obs-nix.c | 9 +------- libobs/obs-scene.c | 14 ++++--------- libobs/obs-source-deinterlace.c | 3 +-- libobs/obs-source.c | 3 +-- plugins/linux-capture/linux-capture.c | 9 +------- plugins/obs-filters/crop-filter.c | 3 +-- plugins/obs-filters/gpu-delay.c | 3 +-- .../obs-filters/nvidia-greenscreen-filter.c | 3 +-- plugins/obs-filters/scale-filter.c | 21 ++++--------------- plugins/obs-filters/scroll-filter.c | 3 +-- 10 files changed, 16 insertions(+), 55 deletions(-) diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c index 31b3bcd3dcf30b..b574dbaa0d65da 100644 --- a/libobs/obs-nix.c +++ b/libobs/obs-nix.c @@ -326,15 +326,8 @@ void log_system_info(void) log_distribution_info(); log_desktop_session_info(); #endif - switch (obs_get_nix_platform()) { - case OBS_NIX_PLATFORM_X11_EGL: + if (obs_get_nix_platform() == OBS_NIX_PLATFORM_X11_EGL) obs_nix_x11_log_info(); - break; -#ifdef ENABLE_WAYLAND - case OBS_NIX_PLATFORM_WAYLAND: - break; -#endif - } } bool obs_hotkeys_platform_init(struct obs_core_hotkeys *hotkeys) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index f07e38c9725257..4ccacce0fdeb9a 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -608,8 +608,7 @@ static void render_item_texture(struct obs_scene_item *item, float multiplier = 1.f; - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: @@ -618,8 +617,7 @@ static void render_item_texture(struct obs_scene_item *item, } } - switch (source_space) { - case GS_CS_709_SCRGB: + if (source_space == GS_CS_709_SCRGB) { switch (current_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: @@ -634,10 +632,8 @@ static void render_item_texture(struct obs_scene_item *item, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) tech_name = "DrawUpscaleMultiply"; - } break; case GS_CS_709_EXTENDED: switch (current_space) { @@ -663,10 +659,8 @@ static void render_item_texture(struct obs_scene_item *item, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) tech_name = "DrawMultiply"; - } break; case GS_CS_709_EXTENDED: switch (current_space) { diff --git a/libobs/obs-source-deinterlace.c b/libobs/obs-source-deinterlace.c index 96ea51c8fd2ed5..1f1f5d4ec533c3 100644 --- a/libobs/obs-source-deinterlace.c +++ b/libobs/obs-source-deinterlace.c @@ -386,8 +386,7 @@ void deinterlace_render(obs_source_t *s) switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 3fe724bf89482a..30212699fa4aae 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -2498,8 +2498,7 @@ static inline void obs_source_render_async_video(obs_source_t *source) } break; case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; diff --git a/plugins/linux-capture/linux-capture.c b/plugins/linux-capture/linux-capture.c index 0d921d99b8fbc8..60cf76a4a82698 100644 --- a/plugins/linux-capture/linux-capture.c +++ b/plugins/linux-capture/linux-capture.c @@ -31,16 +31,9 @@ bool obs_module_load(void) { enum obs_nix_platform_type platform = obs_get_nix_platform(); - switch (platform) { - case OBS_NIX_PLATFORM_X11_EGL: + if (platform == OBS_NIX_PLATFORM_X11_EGL) { obs_register_source(&xshm_input); xcomposite_load(); - break; - -#ifdef ENABLE_WAYLAND - case OBS_NIX_PLATFORM_WAYLAND: - break; -#endif } return true; diff --git a/plugins/obs-filters/crop-filter.c b/plugins/obs-filters/crop-filter.c index f17888f4590ff5..0bb99089faa146 100644 --- a/plugins/obs-filters/crop-filter.c +++ b/plugins/obs-filters/crop-filter.c @@ -194,8 +194,7 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; } diff --git a/plugins/obs-filters/gpu-delay.c b/plugins/obs-filters/gpu-delay.c index 53671a28acf7b8..439018995deb87 100644 --- a/plugins/obs-filters/gpu-delay.c +++ b/plugins/obs-filters/gpu-delay.c @@ -199,8 +199,7 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; } diff --git a/plugins/obs-filters/nvidia-greenscreen-filter.c b/plugins/obs-filters/nvidia-greenscreen-filter.c index dc51d6997299c3..41b5b999374936 100644 --- a/plugins/obs-filters/nvidia-greenscreen-filter.c +++ b/plugins/obs-filters/nvidia-greenscreen-filter.c @@ -634,8 +634,7 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; } diff --git a/plugins/obs-filters/scale-filter.c b/plugins/obs-filters/scale-filter.c index 109c468dab6d96..3a6c1fb369f93f 100644 --- a/plugins/obs-filters/scale-filter.c +++ b/plugins/obs-filters/scale-filter.c @@ -281,16 +281,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: - *multiplier = obs_get_video_sdr_white_level() / 80.f; - } - break; case GS_CS_709_EXTENDED: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) *multiplier = obs_get_video_sdr_white_level() / 80.f; - } break; case GS_CS_709_SCRGB: switch (current_space) { @@ -307,10 +300,8 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) tech_name = "DrawUndistortMultiply"; - } break; case GS_CS_709_EXTENDED: switch (current_space) { @@ -337,10 +328,8 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) tech_name = "DrawUpscaleMultiply"; - } break; case GS_CS_709_EXTENDED: switch (current_space) { @@ -366,10 +355,8 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) tech_name = "DrawMultiply"; - } break; case GS_CS_709_EXTENDED: switch (current_space) { diff --git a/plugins/obs-filters/scroll-filter.c b/plugins/obs-filters/scroll-filter.c index dff9abe8dc25c4..73710c15d135c7 100644 --- a/plugins/obs-filters/scroll-filter.c +++ b/plugins/obs-filters/scroll-filter.c @@ -195,8 +195,7 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; } From 9cde3c302c6f242560519827a3899b0f6fd55a3d Mon Sep 17 00:00:00 2001 From: tytan652 <17492366+tytan652@users.noreply.github.com> Date: Wed, 26 Oct 2022 12:33:21 +0000 Subject: [PATCH 0014/2225] libobs: Fix all-except-one switches --- libobs/obs-scene.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 4ccacce0fdeb9a..68490ba302088f 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -614,6 +614,9 @@ static void render_item_texture(struct obs_scene_item *item, case GS_CS_SRGB_16F: case GS_CS_709_EXTENDED: multiplier = obs_get_video_sdr_white_level() / 80.f; + break; + case GS_CS_709_SCRGB: + break; } } @@ -623,6 +626,9 @@ static void render_item_texture(struct obs_scene_item *item, case GS_CS_SRGB_16F: case GS_CS_709_EXTENDED: multiplier = 80.f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } From cf5c68b773c9af1304801495ee525e8f4c9e6bd5 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 5 Aug 2022 14:25:57 +0200 Subject: [PATCH 0015/2225] UI,libobs,libobs-opengl,obs-ffmpeg: Remove unneeded cast in switches Those casts were usually used to workaround switch warnings. Also adds default to OBS frontend event switches that had this workaround. --- UI/source-tree.cpp | 4 +++- UI/window-basic-stats.cpp | 4 +++- libobs-opengl/gl-shader.c | 2 +- libobs/graphics/graphics-ffmpeg.c | 2 +- libobs/obs.c | 2 +- plugins/obs-ffmpeg/obs-ffmpeg-formats.h | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/UI/source-tree.cpp b/UI/source-tree.cpp index 3d9f03a33684b4..0aa6302c0c5a57 100644 --- a/UI/source-tree.cpp +++ b/UI/source-tree.cpp @@ -636,7 +636,7 @@ void SourceTreeModel::OBSFrontendEvent(enum obs_frontend_event event, void *ptr) { SourceTreeModel *stm = reinterpret_cast(ptr); - switch ((int)event) { + switch (event) { case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED: stm->SceneChanged(); break; @@ -644,6 +644,8 @@ void SourceTreeModel::OBSFrontendEvent(enum obs_frontend_event event, void *ptr) case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP: stm->Clear(); break; + default: + break; } } diff --git a/UI/window-basic-stats.cpp b/UI/window-basic-stats.cpp index dd05bdf38ab43e..732dba2d0e8744 100644 --- a/UI/window-basic-stats.cpp +++ b/UI/window-basic-stats.cpp @@ -22,13 +22,15 @@ void OBSBasicStats::OBSFrontendEvent(enum obs_frontend_event event, void *ptr) { OBSBasicStats *stats = reinterpret_cast(ptr); - switch ((int)event) { + switch (event) { case OBS_FRONTEND_EVENT_RECORDING_STARTED: stats->StartRecTimeLeft(); break; case OBS_FRONTEND_EVENT_RECORDING_STOPPED: stats->ResetRecTimeLeft(); break; + default: + break; } } diff --git a/libobs-opengl/gl-shader.c b/libobs-opengl/gl-shader.c index 6d7a2a18dd8399..0c3c9c11519dce 100644 --- a/libobs-opengl/gl-shader.c +++ b/libobs-opengl/gl-shader.c @@ -735,7 +735,7 @@ void gs_shader_set_val(gs_sparam_t *param, const void *val, size_t size) if (!count) count = 1; - switch ((uint32_t)param->type) { + switch (param->type) { case GS_SHADER_PARAM_FLOAT: expected_size = sizeof(float); break; diff --git a/libobs/graphics/graphics-ffmpeg.c b/libobs/graphics/graphics-ffmpeg.c index 495378f5c2a99b..a94d41eb31eb71 100644 --- a/libobs/graphics/graphics-ffmpeg.c +++ b/libobs/graphics/graphics-ffmpeg.c @@ -617,7 +617,7 @@ void gs_free_image_deps(void) {} static inline enum gs_color_format convert_format(enum AVPixelFormat format) { - switch ((int)format) { + switch (format) { case AV_PIX_FMT_RGBA: return GS_RGBA; case AV_PIX_FMT_BGRA: diff --git a/libobs/obs.c b/libobs/obs.c index 291e256823af3c..fae0a5176dbb64 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -56,7 +56,7 @@ static inline void calc_gpu_conversion_sizes(struct obs_core_video_mix *video) video->conversion_width_i = 0.f; video->conversion_height_i = 0.f; - switch ((uint32_t)info->format) { + switch (info->format) { case VIDEO_FORMAT_I420: video->conversion_needed = true; video->conversion_techs[0] = "Planar_Y"; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h index d2a9b112d21b7e..963ed3db889d55 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h @@ -98,7 +98,7 @@ determine_chroma_location(enum AVPixelFormat pix_fmt, static inline enum audio_format convert_ffmpeg_sample_format(enum AVSampleFormat format) { - switch ((uint32_t)format) { + switch (format) { case AV_SAMPLE_FMT_U8: return AUDIO_FORMAT_U8BIT; case AV_SAMPLE_FMT_S16: From 107b2a8f27b8a603a50feac74fa763d3b69ed223 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 5 Aug 2022 15:08:33 +0200 Subject: [PATCH 0016/2225] libobs-d3d11,libobs-opengl,plugins: Remove unneeded cast in switches Those casts were usually used to workaround switch warnings. --- libobs-d3d11/d3d11-subsystem.hpp | 2 +- libobs-opengl/gl-windows.c | 6 +++--- plugins/obs-qsv11/common_directx9.cpp | 2 +- plugins/win-capture/graphics-hook/d3d8-capture.cpp | 2 +- plugins/win-capture/graphics-hook/d3d9-capture.cpp | 2 +- plugins/win-capture/graphics-hook/dxgi-helpers.hpp | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index e5139d4ea59282..0be9a9e2d214e9 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/libobs-d3d11/d3d11-subsystem.hpp @@ -143,7 +143,7 @@ ConvertGSTextureFormatViewLinear(gs_color_format format) static inline gs_color_format ConvertDXGITextureFormat(DXGI_FORMAT format) { - switch ((unsigned long)format) { + switch (format) { case DXGI_FORMAT_A8_UNORM: return GS_A8; case DXGI_FORMAT_R8_UNORM: diff --git a/libobs-opengl/gl-windows.c b/libobs-opengl/gl-windows.c index e9f3f09385aa64..b93396c63d3132 100644 --- a/libobs-opengl/gl-windows.c +++ b/libobs-opengl/gl-windows.c @@ -39,7 +39,7 @@ struct gl_platform { /* For now, only support basic 32bit formats for graphics output. */ static inline int get_color_format_bits(enum gs_color_format format) { - switch ((uint32_t)format) { + switch (format) { case GS_RGBA: case GS_BGRA: return 32; @@ -50,7 +50,7 @@ static inline int get_color_format_bits(enum gs_color_format format) static inline int get_depth_format_bits(enum gs_zstencil_format zsformat) { - switch ((uint32_t)zsformat) { + switch (zsformat) { case GS_Z16: return 16; case GS_Z24_S8: @@ -62,7 +62,7 @@ static inline int get_depth_format_bits(enum gs_zstencil_format zsformat) static inline int get_stencil_format_bits(enum gs_zstencil_format zsformat) { - switch ((uint32_t)zsformat) { + switch (zsformat) { case GS_Z24_S8: return 8; default: diff --git a/plugins/obs-qsv11/common_directx9.cpp b/plugins/obs-qsv11/common_directx9.cpp index 4e49961a78a034..00f22f7e73280a 100644 --- a/plugins/obs-qsv11/common_directx9.cpp +++ b/plugins/obs-qsv11/common_directx9.cpp @@ -186,7 +186,7 @@ mfxStatus dx9_simple_lock(mfxHDL pthis, mfxMemId mid, mfxFrameData *ptr) if (FAILED(hr)) return MFX_ERR_LOCK_MEMORY; - switch ((DWORD)desc.Format) { + switch (desc.Format) { case D3DFMT_NV12: ptr->Pitch = (mfxU16)locked.Pitch; ptr->Y = (mfxU8 *)locked.pBits; diff --git a/plugins/win-capture/graphics-hook/d3d8-capture.cpp b/plugins/win-capture/graphics-hook/d3d8-capture.cpp index e5a2b11b7430b9..eb81794e8a31e7 100644 --- a/plugins/win-capture/graphics-hook/d3d8-capture.cpp +++ b/plugins/win-capture/graphics-hook/d3d8-capture.cpp @@ -35,7 +35,7 @@ static d3d8_data data = {}; static DXGI_FORMAT d3d8_to_dxgi_format(D3DFORMAT format) { - switch ((unsigned long)format) { + switch (format) { case D3DFMT_X1R5G5B5: case D3DFMT_A1R5G5B5: return DXGI_FORMAT_B5G5R5A1_UNORM; diff --git a/plugins/win-capture/graphics-hook/d3d9-capture.cpp b/plugins/win-capture/graphics-hook/d3d9-capture.cpp index 7ee41152282e0a..cf537435bbb901 100644 --- a/plugins/win-capture/graphics-hook/d3d9-capture.cpp +++ b/plugins/win-capture/graphics-hook/d3d9-capture.cpp @@ -94,7 +94,7 @@ static void d3d9_free() static DXGI_FORMAT d3d9_to_dxgi_format(D3DFORMAT format) { - switch ((unsigned long)format) { + switch (format) { case D3DFMT_A2B10G10R10: return DXGI_FORMAT_R10G10B10A2_UNORM; case D3DFMT_A8R8G8B8: diff --git a/plugins/win-capture/graphics-hook/dxgi-helpers.hpp b/plugins/win-capture/graphics-hook/dxgi-helpers.hpp index f23bdccf27e497..c9b10ff04a749b 100644 --- a/plugins/win-capture/graphics-hook/dxgi-helpers.hpp +++ b/plugins/win-capture/graphics-hook/dxgi-helpers.hpp @@ -4,7 +4,7 @@ static inline DXGI_FORMAT strip_dxgi_format_srgb(DXGI_FORMAT format) { - switch ((unsigned long)format) { + switch (format) { case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8A8_UNORM; case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: @@ -18,7 +18,7 @@ static inline DXGI_FORMAT apply_dxgi_format_typeless(DXGI_FORMAT format, bool allow_srgb_alias) { if (allow_srgb_alias) { - switch ((unsigned long)format) { + switch (format) { case DXGI_FORMAT_B8G8R8A8_UNORM: return DXGI_FORMAT_B8G8R8A8_TYPELESS; case DXGI_FORMAT_R8G8B8A8_UNORM: From 8fad36868e4bdde9be1a6d11bab9b45b11cff3b5 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 26 Aug 2022 23:15:13 +0200 Subject: [PATCH 0017/2225] UI: Refactor Windows taskbar switch --- UI/platform-windows.cpp | 51 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/UI/platform-windows.cpp b/UI/platform-windows.cpp index 3834ed40481e7c..22d64ae1f7905a 100644 --- a/UI/platform-windows.cpp +++ b/UI/platform-windows.cpp @@ -465,33 +465,32 @@ void TaskbarOverlaySetStatus(TaskbarOverlayStatus status) return; } - if (status != TaskbarOverlayStatusInactive) { - QIcon qicon; - switch (status) { - case TaskbarOverlayStatusActive: - qicon = QIcon::fromTheme( - "obs-active", QIcon(":/res/images/active.png")); - break; - case TaskbarOverlayStatusPaused: - qicon = QIcon::fromTheme( - "obs-paused", QIcon(":/res/images/paused.png")); - break; - } - - HICON hicon = nullptr; - if (!qicon.isNull()) { - Q_GUI_EXPORT HICON qt_pixmapToWinHICON( - const QPixmap &p); - hicon = qt_pixmapToWinHICON( - qicon.pixmap(GetSystemMetrics(SM_CXSMICON))); - if (!hicon) - return; - } - - taskbarIcon->SetOverlayIcon(hwnd, hicon, nullptr); - DestroyIcon(hicon); - } else { + QIcon qicon; + switch (status) { + case TaskbarOverlayStatusActive: + qicon = QIcon::fromTheme("obs-active", + QIcon(":/res/images/active.png")); + break; + case TaskbarOverlayStatusPaused: + qicon = QIcon::fromTheme("obs-paused", + QIcon(":/res/images/paused.png")); + break; + case TaskbarOverlayStatusInactive: taskbarIcon->SetOverlayIcon(hwnd, nullptr, nullptr); + taskbarIcon->Release(); + return; } + + HICON hicon = nullptr; + if (!qicon.isNull()) { + Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &p); + hicon = qt_pixmapToWinHICON( + qicon.pixmap(GetSystemMetrics(SM_CXSMICON))); + if (!hicon) + return; + } + + taskbarIcon->SetOverlayIcon(hwnd, hicon, nullptr); + DestroyIcon(hicon); taskbarIcon->Release(); } From 447adfbe385249ba721dec2ad9d2e4aaa9f0376a Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 11 Jan 2023 18:50:04 +0100 Subject: [PATCH 0018/2225] mac-virtualcam: Fix memory access issues for shared IOSurfaces The DAL plugin-based virtualcamera shares data between OBS and the plugin using an IOSurface. IOSurface locks are necessary to ensure race conditions between data generation (OBS side) and consumption (virtual camera side) and also that an IOSurface is not offloaded to GPU memory when it is indeed needed in CPU memory. Also moves the invalidation of the NSMachPort for the frames to after the IOSurface data has been converted into a pixelbuffer and added to the frame queue of the virtual camera, as an early invalidation will cut off access to the pixel data shared with the DAL plugin. --- .../src/dal-plugin/OBSDALMachClient.mm | 89 ++++++++++--------- .../src/obs-plugin/OBSDALMachServer.mm | 7 ++ 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.mm b/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.mm index 9514eee9fa1733..303a3a4dc72135 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/OBSDALMachClient.mm @@ -93,6 +93,8 @@ - (BOOL)connectToServer - (void)handlePortMessage:(NSPortMessage *)message { + __strong id strongDelegate = self.delegate; + VLogFunc(@""); NSArray *components = message.components; switch (message.msgid) { @@ -113,57 +115,60 @@ - (void)handlePortMessage:(NSPortMessage *)message IOSurfaceRef surface = IOSurfaceLookupFromMachPort( [framePort machPort]); - [framePort invalidate]; - mach_port_deallocate(mach_task_self(), - [framePort machPort]); - if (!surface) { - ELog(@"Failed to obtain IOSurface from Mach port"); - return; - } - - /* - * IOSurfaceLocks are only necessary on non Apple Silicon devices, as those have - * unified memory. On Intel machines, the lock ensures that the IOSurface is copied back - * from GPU memory to CPU memory so we can process the pixel buffer. - */ + if (surface) { + /* + * IOSurfaceLocks are only necessary on non Apple Silicon devices, as those have + * unified memory. On Intel machines, the lock ensures that the IOSurface is copied back + * from GPU memory to CPU memory so we can process the pixel buffer. + */ #ifndef __aarch64__ - IOSurfaceLock(surface, kIOSurfaceLockReadOnly, NULL); + IOSurfaceLock(surface, kIOSurfaceLockReadOnly, + NULL); #endif - CVPixelBufferRef frame; - CVPixelBufferCreateWithIOSurface(kCFAllocatorDefault, - surface, NULL, &frame); + CVPixelBufferRef frame; + CVPixelBufferCreateWithIOSurface( + kCFAllocatorDefault, surface, NULL, + &frame); #ifndef __aarch64__ - IOSurfaceUnlock(surface, kIOSurfaceLockReadOnly, NULL); + IOSurfaceUnlock(surface, kIOSurfaceLockReadOnly, + NULL); #endif - CFRelease(surface); - - uint64_t timestamp; - [components[1] getBytes:×tamp - length:sizeof(timestamp)]; - - VLog(@"Received frame data: %zux%zu (%llu)", - CVPixelBufferGetWidth(frame), - CVPixelBufferGetHeight(frame), timestamp); - - uint32_t fpsNumerator; - [components[2] getBytes:&fpsNumerator - length:sizeof(fpsNumerator)]; - uint32_t fpsDenominator; - [components[3] getBytes:&fpsDenominator - length:sizeof(fpsDenominator)]; - - [self.delegate receivedPixelBuffer:frame - timestamp:timestamp - fpsNumerator:fpsNumerator - fpsDenominator:fpsDenominator]; - - CVPixelBufferRelease(frame); + CFRelease(surface); + + uint64_t timestamp; + [components[1] getBytes:×tamp + length:sizeof(timestamp)]; + + VLog(@"Received frame data: %zux%zu (%llu)", + CVPixelBufferGetWidth(frame), + CVPixelBufferGetHeight(frame), timestamp); + + uint32_t fpsNumerator; + [components[2] getBytes:&fpsNumerator + length:sizeof(fpsNumerator)]; + uint32_t fpsDenominator; + [components[3] getBytes:&fpsDenominator + length:sizeof(fpsDenominator)]; + + [strongDelegate + receivedPixelBuffer:frame + timestamp:timestamp + fpsNumerator:fpsNumerator + fpsDenominator:fpsDenominator]; + + CVPixelBufferRelease(frame); + } else { + ELog(@"Failed to obtain IOSurface from Mach port"); + } + [framePort invalidate]; + mach_port_deallocate(mach_task_self(), + [framePort machPort]); } break; case MachMsgIdStop: DLog(@"Received stop message"); - [self.delegate receivedStop]; + [strongDelegate receivedStop]; break; default: ELog(@"Received unexpected response msgid %u", diff --git a/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.mm b/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.mm index efd33c1b44beae..450e994668a12d 100644 --- a/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.mm +++ b/plugins/mac-virtualcam/src/obs-plugin/OBSDALMachServer.mm @@ -148,6 +148,9 @@ - (void)sendPixelBuffer:(CVPixelBufferRef)frame length:sizeof(fpsDenominator)]; IOSurfaceRef surface = CVPixelBufferGetIOSurface(frame); +#ifndef __aarch64__ + IOSurfaceLock(surface, 0, NULL); +#endif if (!surface) { blog(LOG_ERROR, @@ -174,6 +177,10 @@ - (void)sendPixelBuffer:(CVPixelBufferRef)frame ]]; mach_port_deallocate(mach_task_self(), framePort); + +#ifndef __aarch64__ + IOSurfaceUnlock(surface, 0, NULL); +#endif } } From dfc20bbb311b71516f6571584c585a010ea63eb7 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 20:12:09 -0800 Subject: [PATCH 0019/2225] libobs: Protect some encoder functions from being used while active Protect `obs_encoder_set_video()` and `obs_encoder_set_audio()` from being used if the encoder is active. Changing these values while active is undefined behavior. --- libobs/obs-encoder.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index dd33e3344c00d8..f90817519ec084 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -792,6 +792,14 @@ void obs_encoder_set_video(obs_encoder_t *encoder, video_t *video) obs_encoder_get_name(encoder)); return; } + if (encoder_active(encoder)) { + blog(LOG_WARNING, + "encoder '%s': Cannot apply a new video_t " + "object while the encoder is active", + obs_encoder_get_name(encoder)); + return; + } + if (!video) return; @@ -813,6 +821,14 @@ void obs_encoder_set_audio(obs_encoder_t *encoder, audio_t *audio) obs_encoder_get_name(encoder)); return; } + if (encoder_active(encoder)) { + blog(LOG_WARNING, + "encoder '%s': Cannot apply a new audio_t " + "object while the encoder is active", + obs_encoder_get_name(encoder)); + return; + } + if (!audio) return; @@ -1316,7 +1332,7 @@ static void receive_audio(void *param, size_t mix_idx, struct audio_data *in) void obs_encoder_add_output(struct obs_encoder *encoder, struct obs_output *output) { - if (!encoder) + if (!encoder || !output) return; pthread_mutex_lock(&encoder->outputs_mutex); @@ -1327,7 +1343,7 @@ void obs_encoder_add_output(struct obs_encoder *encoder, void obs_encoder_remove_output(struct obs_encoder *encoder, struct obs_output *output) { - if (!encoder) + if (!encoder || !output) return; pthread_mutex_lock(&encoder->outputs_mutex); From eb0d9dc5d2492bf3365bf3d6ab596c5447507553 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 20:17:21 -0800 Subject: [PATCH 0020/2225] libobs: Allow sending NULL to obs_encoder_set_video/audio() There is currently no way to clear a video_t or audio_t object from an encoder once applied. `audio_t`/`video_t` objects can be destructed at any time, and it is dangerous to prevent these object references from even being cleared. This does not fix the issue where destroying an audio/video object does not clear the reference from all subscribed encoders. --- libobs/obs-encoder.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index f90817519ec084..4804760cf8ac35 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -800,14 +800,16 @@ void obs_encoder_set_video(obs_encoder_t *encoder, video_t *video) return; } - if (!video) - return; - - voi = video_output_get_info(video); - - encoder->media = video; - encoder->timebase_num = voi->fps_den; - encoder->timebase_den = voi->fps_num; + if (video) { + voi = video_output_get_info(video); + encoder->media = video; + encoder->timebase_num = voi->fps_den; + encoder->timebase_den = voi->fps_num; + } else { + encoder->media = NULL; + encoder->timebase_num = 0; + encoder->timebase_den = 0; + } } void obs_encoder_set_audio(obs_encoder_t *encoder, audio_t *audio) @@ -829,12 +831,15 @@ void obs_encoder_set_audio(obs_encoder_t *encoder, audio_t *audio) return; } - if (!audio) - return; - - encoder->media = audio; - encoder->timebase_num = 1; - encoder->timebase_den = audio_output_get_sample_rate(audio); + if (audio) { + encoder->media = audio; + encoder->timebase_num = 1; + encoder->timebase_den = audio_output_get_sample_rate(audio); + } else { + encoder->media = NULL; + encoder->timebase_num = 0; + encoder->timebase_den = 0; + } } video_t *obs_encoder_video(const obs_encoder_t *encoder) From 7e30d3f8a29ccd11710fb9bb438b3b0c84ee31a1 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 20:33:58 -0800 Subject: [PATCH 0021/2225] libobs: Remove unused internal encoder util function Was previously introduced in a0f679bc40cc9452f84bb7c63143bffb1ac6c348, but has since been made unused. --- libobs/obs-encoder.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index 4804760cf8ac35..ea277b5249f598 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -175,16 +175,6 @@ static inline void get_video_info(struct obs_encoder *encoder, obs_encoder_set_scaled_size(encoder, info->width, info->height); } -static inline bool has_scaling(const struct obs_encoder *encoder) -{ - uint32_t video_width = video_output_get_width(encoder->media); - uint32_t video_height = video_output_get_height(encoder->media); - - return encoder->scaled_width && encoder->scaled_height && - (video_width != encoder->scaled_width || - video_height != encoder->scaled_height); -} - static inline bool gpu_encode_available(const struct obs_encoder *encoder) { struct obs_core_video_mix *video = get_mix_for_video(encoder->media); From c69e40734dcc547c844d14f221adf2f11ff77890 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 21:24:36 -0800 Subject: [PATCH 0022/2225] libobs: Prevent encoders from initializing/starting if no media is set This fixes a case of undefined behavior, where encoders can try to init or start without actually having any video_t or audio_t object assigned. --- libobs/obs-encoder.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index ea277b5249f598..cafe2b2b2c66df 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -443,6 +443,13 @@ static THREAD_LOCAL bool can_reroute = false; static inline bool obs_encoder_initialize_internal(obs_encoder_t *encoder) { + if (!encoder->media) { + blog(LOG_ERROR, + "obs_encoder_initialize_internal: encoder '%s' has no media set", + encoder->context.name); + return false; + } + if (encoder_active(encoder)) return true; if (encoder->initialized) @@ -552,7 +559,7 @@ static inline void obs_encoder_start_internal( struct encoder_callback cb = {false, new_packet, param}; bool first = false; - if (!encoder->context.data) + if (!encoder->context.data || !encoder->media) return; pthread_mutex_lock(&encoder->callbacks_mutex); From 25df3e183ec2273cf706b9ea9b4ef248153629d1 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 22:53:16 -0800 Subject: [PATCH 0023/2225] libobs: Fix logging of remaining views OBS has been logging `1 views remain at shutdown` when in reality there are not technically any views remaining. When views are removed, the view itself is destroyed immediately, but the mix remains, to be garbage collected by the graphics thread. In this case, the view has already been removed, but the graphics thread has not run an interation and cleaned up the mix, so this log message appears. Fixes the issue by checking if a mix actually has an assigned view, instead of blindly logging existing mixes. --- libobs/obs.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libobs/obs.c b/libobs/obs.c index fae0a5176dbb64..2131733d2db469 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -774,13 +774,16 @@ void obs_free_video_mix(struct obs_core_video_mix *video) static void obs_free_video(void) { pthread_mutex_lock(&obs->video.mixes_mutex); - size_t num = obs->video.mixes.num; - if (num) - blog(LOG_WARNING, "%zu views remain at shutdown", num); - for (size_t i = 0; i < num; i++) { - obs_free_video_mix(obs->video.mixes.array[i]); + size_t num_views = 0; + for (size_t i = 0; i < obs->video.mixes.num; i++) { + struct obs_core_video_mix *video = obs->video.mixes.array[i]; + if (video && video->view) + num_views++; + obs_free_video_mix(video); obs->video.mixes.array[i] = NULL; } + if (num_views > 0) + blog(LOG_WARNING, "Number of remaining views: %ld", num_views); pthread_mutex_unlock(&obs->video.mixes_mutex); pthread_mutex_destroy(&obs->video.mixes_mutex); From 8f0e5a72d6aa1129c02d03016fd1f5eac4ace2f0 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Sun, 15 Jan 2023 21:27:47 -0800 Subject: [PATCH 0024/2225] UI: Fix logging of output ID when start fails + code cleanup Previously, an output that does not implement `info.get_output_type` would result in these log messages saying `(null)`. This uses the actual ID directly from the output itself instead. Also removes two extra calls to `obs_encoder_set_video()` as they are redundant and unnecessary. --- UI/window-basic-main-outputs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 6a09854197cfb7..cf239b9eeb443b 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1007,7 +1007,7 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) else lastError = string(); - const char *type = obs_service_get_output_type(service); + const char *type = obs_output_get_id(streamOutput); blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type, hasLastError ? " Last Error: " : "", hasLastError ? error : ""); return false; @@ -1906,7 +1906,7 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service) else lastError = string(); - const char *type = obs_service_get_output_type(service); + const char *type = obs_output_get_id(streamOutput); blog(LOG_WARNING, "Stream output type '%s' failed to start!%s%s", type, hasLastError ? " Last Error: " : "", hasLastError ? error : ""); return false; From 5a68d3aaf5cb7a34b71699b02c8d89fb153257cb Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 17 Jan 2023 20:46:22 -0800 Subject: [PATCH 0025/2225] UI: Remove extra encoder function calls The audio_t and video_t objects are already applied in the parent functions already. --- UI/window-basic-main-outputs.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index cf239b9eeb443b..a4651673725db6 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1482,7 +1482,6 @@ inline void AdvancedOutput::SetupStreaming() obs_output_set_audio_encoder(streamOutput, streamAudioEnc, 0); obs_encoder_set_scaled_size(videoStreaming, cx, cy); - obs_encoder_set_video(videoStreaming, obs_get_video()); const char *id = obs_service_get_id(main->GetService()); if (strcmp(id, "rtmp_custom") == 0) { @@ -1536,7 +1535,6 @@ inline void AdvancedOutput::SetupRecording() } obs_encoder_set_scaled_size(videoRecording, cx, cy); - obs_encoder_set_video(videoRecording, obs_get_video()); obs_output_set_video_encoder(fileOutput, videoRecording); if (replayBuffer) obs_output_set_video_encoder(replayBuffer, From d70171daa670c52b40578b5034ccc786e0d6cecc Mon Sep 17 00:00:00 2001 From: John Bradley Date: Mon, 16 Jan 2023 17:33:15 -0600 Subject: [PATCH 0026/2225] libobs: Make internal version of remove encoder --- libobs/obs-encoder.c | 4 +++- libobs/obs-internal.h | 3 +++ libobs/obs-output.c | 18 +++++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index cafe2b2b2c66df..42b1519616e45f 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -245,7 +245,9 @@ static void obs_encoder_actually_destroy(obs_encoder_t *encoder) pthread_mutex_lock(&encoder->outputs_mutex); for (size_t i = 0; i < encoder->outputs.num; i++) { struct obs_output *output = encoder->outputs.array[i]; - obs_output_remove_encoder(output, encoder); + // This happens while the output is still "active", so + // remove without checking active + obs_output_remove_encoder_internal(output, encoder); } da_free(encoder->outputs); pthread_mutex_unlock(&encoder->outputs_mutex); diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 185dad4ebbced2..a05fbbc665d9c5 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -1265,3 +1265,6 @@ extern bool obs_service_initialize(struct obs_service *service, struct obs_output *output); void obs_service_destroy(obs_service_t *service); + +void obs_output_remove_encoder_internal(struct obs_output *output, + struct obs_encoder *encoder); diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 9c096726c45ab8..12ccab7b06959f 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -792,10 +792,10 @@ size_t obs_output_get_mixers(const obs_output_t *output) : 0; } -void obs_output_remove_encoder(struct obs_output *output, - struct obs_encoder *encoder) +void obs_output_remove_encoder_internal(struct obs_output *output, + struct obs_encoder *encoder) { - if (!obs_output_valid(output, "obs_output_remove_encoder")) + if (!obs_output_valid(output, "obs_output_remove_encoder_internal")) return; if (output->video_encoder == encoder) { @@ -808,6 +808,18 @@ void obs_output_remove_encoder(struct obs_output *output, } } +void obs_output_remove_encoder(struct obs_output *output, + struct obs_encoder *encoder) +{ + if (!obs_output_valid(output, "obs_output_remove_encoder")) + return; + if (active(output)) { + return; + } + + obs_output_remove_encoder_internal(output, encoder); +} + void obs_output_set_video_encoder(obs_output_t *output, obs_encoder_t *encoder) { if (!obs_output_valid(output, "obs_output_set_video_encoder")) From 61284cf9bafc3d2c9e2c533c436f8fd38c6d187e Mon Sep 17 00:00:00 2001 From: John Bradley Date: Tue, 17 Jan 2023 00:48:34 -0600 Subject: [PATCH 0027/2225] libobs: Refactor obs-output encoded use of mixes There was quite a bit of conflated usage of mixes (which refers to raw audio) and encoder counts. This fully separates the two and makes a distinct separation when iterating over mixes vs encoders. --- libobs/obs-internal.h | 4 +- libobs/obs-output.c | 215 ++++++++++++++++++++---------------------- libobs/obs-output.h | 2 + 3 files changed, 108 insertions(+), 113 deletions(-) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index a05fbbc665d9c5..2ddb6865af8a78 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -1024,7 +1024,7 @@ struct obs_output { volatile bool data_active; volatile bool end_data_capture_thread_active; int64_t video_offset; - int64_t audio_offsets[MAX_AUDIO_MIXES]; + int64_t audio_offsets[MAX_OUTPUT_AUDIO_ENCODERS]; int64_t highest_audio_ts; int64_t highest_video_ts; pthread_t end_data_capture_thread; @@ -1054,7 +1054,7 @@ struct obs_output { video_t *video; audio_t *audio; obs_encoder_t *video_encoder; - obs_encoder_t *audio_encoders[MAX_AUDIO_MIXES]; + obs_encoder_t *audio_encoders[MAX_OUTPUT_AUDIO_ENCODERS]; obs_service_t *service; size_t mixer_mask; diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 12ccab7b06959f..ad71c7cedea3b7 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -180,7 +180,7 @@ static inline void free_packets(struct obs_output *output) da_free(output->interleaved_packets); } -static inline void clear_audio_buffers(obs_output_t *output) +static inline void clear_raw_audio_buffers(obs_output_t *output) { for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { for (size_t j = 0; j < MAX_AV_PLANES; j++) { @@ -215,14 +215,14 @@ void obs_output_destroy(obs_output_t *output) output); } - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (output->audio_encoders[i]) { obs_encoder_remove_output( output->audio_encoders[i], output); } } - clear_audio_buffers(output); + clear_raw_audio_buffers(output); os_event_destroy(output->stopping_event); pthread_mutex_destroy(&output->pause.mutex); @@ -572,16 +572,16 @@ static inline bool pause_can_stop(struct pause_data *pause) static bool obs_encoded_output_pause(obs_output_t *output, bool pause) { obs_encoder_t *venc; - obs_encoder_t *aenc[MAX_AUDIO_MIXES]; + obs_encoder_t *aenc[MAX_OUTPUT_AUDIO_ENCODERS]; uint64_t closest_v_ts; bool success = false; venc = output->video_encoder; - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) aenc[i] = output->audio_encoders[i]; pthread_mutex_lock(&venc->pause.mutex); - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (aenc[i]) { pthread_mutex_lock(&aenc[i]->pause.mutex); } @@ -595,7 +595,7 @@ static bool obs_encoded_output_pause(obs_output_t *output, bool pause) if (!pause_can_start(&venc->pause)) { goto fail; } - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (aenc[i] && !pause_can_start(&aenc[i]->pause)) { goto fail; } @@ -604,7 +604,7 @@ static bool obs_encoded_output_pause(obs_output_t *output, bool pause) os_atomic_set_bool(&venc->paused, true); venc->pause.ts_start = closest_v_ts; - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (aenc[i]) { os_atomic_set_bool(&aenc[i]->paused, true); aenc[i]->pause.ts_start = closest_v_ts; @@ -614,7 +614,7 @@ static bool obs_encoded_output_pause(obs_output_t *output, bool pause) if (!pause_can_stop(&venc->pause)) { goto fail; } - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (aenc[i] && !pause_can_stop(&aenc[i]->pause)) { goto fail; } @@ -623,7 +623,7 @@ static bool obs_encoded_output_pause(obs_output_t *output, bool pause) os_atomic_set_bool(&venc->paused, false); end_pause(&venc->pause, closest_v_ts); - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { if (aenc[i]) { os_atomic_set_bool(&aenc[i]->paused, false); end_pause(&aenc[i]->pause, closest_v_ts); @@ -636,7 +636,7 @@ static bool obs_encoded_output_pause(obs_output_t *output, bool pause) success = true; fail: - for (size_t i = MAX_AUDIO_MIXES; i > 0; i--) { + for (size_t i = MAX_OUTPUT_AUDIO_ENCODERS; i > 0; i--) { if (aenc[i - 1]) { pthread_mutex_unlock(&aenc[i - 1]->pause.mutex); } @@ -801,8 +801,9 @@ void obs_output_remove_encoder_internal(struct obs_output *output, if (output->video_encoder == encoder) { output->video_encoder = NULL; } else { - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { - if (output->audio_encoders[i] == encoder) + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + obs_encoder_t *audio = output->audio_encoders[i]; + if (audio == encoder) output->audio_encoders[i] = NULL; } } @@ -870,7 +871,7 @@ void obs_output_set_audio_encoder(obs_output_t *output, obs_encoder_t *encoder, } if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) { - if (idx >= MAX_AUDIO_MIXES) { + if (idx >= MAX_OUTPUT_AUDIO_ENCODERS) { return; } } else { @@ -900,15 +901,8 @@ obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output, if (!obs_output_valid(output, "obs_output_get_audio_encoder")) return NULL; - if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) { - if (idx >= MAX_AUDIO_MIXES) { - return NULL; - } - } else { - if (idx > 0) { - return NULL; - } - } + if (idx >= MAX_OUTPUT_AUDIO_ENCODERS) + return NULL; return output->audio_encoders[idx]; } @@ -1054,42 +1048,18 @@ void obs_output_set_audio_conversion( output->audio_conversion_set = true; } -static inline size_t num_audio_mixes(const struct obs_output *output) -{ - size_t mix_count = 1; - - if ((output->info.flags & OBS_OUTPUT_MULTI_TRACK) != 0) { - mix_count = 0; - - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { - if (!output->audio_encoders[i]) - break; - - mix_count++; - } - } - - return mix_count; -} - static inline bool audio_valid(const struct obs_output *output, bool encoded) { if (encoded) { - size_t mix_count = num_audio_mixes(output); - if (!mix_count) - return false; - - for (size_t i = 0; i < mix_count; i++) { - if (!output->audio_encoders[i]) { - return false; + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + return true; } } - } else { - if (!output->audio) - return false; + return false; } - return true; + return output->audio != NULL; } static bool can_begin_data_capture(const struct obs_output *output, @@ -1166,10 +1136,10 @@ get_audio_conversion(struct obs_output *output) static size_t get_track_index(const struct obs_output *output, struct encoder_packet *pkt) { - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { struct obs_encoder *encoder = output->audio_encoders[i]; - if (pkt->encoder == encoder) + if (encoder && pkt->encoder == encoder) return i; } @@ -1420,7 +1390,6 @@ static size_t get_interleaved_start_idx(struct obs_output *output) static int prune_premature_packets(struct obs_output *output) { - size_t audio_mixes = num_audio_mixes(output); struct encoder_packet *video; int video_idx; int max_idx; @@ -1438,10 +1407,13 @@ static int prune_premature_packets(struct obs_output *output) video = &output->interleaved_packets.array[video_idx]; duration_usec = video->timebase_num * 1000000LL / video->timebase_den; - for (size_t i = 0; i < audio_mixes; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { struct encoder_packet *audio; int audio_idx; + if (!output->audio_encoders[i]) + continue; + audio_idx = find_first_packet_type_idx(output, OBS_ENCODER_AUDIO, i); if (audio_idx == -1) { @@ -1565,18 +1537,20 @@ find_last_packet_type(struct obs_output *output, enum obs_encoder_type type, static bool get_audio_and_video_packets(struct obs_output *output, struct encoder_packet **video, - struct encoder_packet **audio, - size_t audio_mixes) + struct encoder_packet **audio) { *video = find_first_packet_type(output, OBS_ENCODER_VIDEO, 0); if (!*video) output->received_video = false; - for (size_t i = 0; i < audio_mixes; i++) { - audio[i] = find_first_packet_type(output, OBS_ENCODER_AUDIO, i); - if (!audio[i]) { - output->received_audio = false; - return false; + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + audio[i] = find_first_packet_type(output, + OBS_ENCODER_AUDIO, i); + if (!audio[i]) { + output->received_audio = false; + return false; + } } } @@ -1587,26 +1561,50 @@ static bool get_audio_and_video_packets(struct obs_output *output, return true; } +static bool get_first_audio_encoder_index(const struct obs_output *output, + size_t *index) +{ + if (!index) + return false; + + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + *index = i; + return true; + } + } + + return false; +} + static bool initialize_interleaved_packets(struct obs_output *output) { struct encoder_packet *video; - struct encoder_packet *audio[MAX_AUDIO_MIXES]; - struct encoder_packet *last_audio[MAX_AUDIO_MIXES]; - size_t audio_mixes = num_audio_mixes(output); + struct encoder_packet *audio[MAX_OUTPUT_AUDIO_ENCODERS]; + struct encoder_packet *last_audio[MAX_OUTPUT_AUDIO_ENCODERS]; size_t start_idx; + size_t first_audio_idx; - if (!get_audio_and_video_packets(output, &video, audio, audio_mixes)) + if (!get_first_audio_encoder_index(output, &first_audio_idx)) return false; - for (size_t i = 0; i < audio_mixes; i++) - last_audio[i] = - find_last_packet_type(output, OBS_ENCODER_AUDIO, i); + if (!get_audio_and_video_packets(output, &video, audio)) + return false; + + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + last_audio[i] = find_last_packet_type( + output, OBS_ENCODER_AUDIO, i); + } + } /* ensure that there is audio past the first video packet */ - for (size_t i = 0; i < audio_mixes; i++) { - if (last_audio[i]->dts_usec < video->dts_usec) { - output->received_audio = false; - return false; + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + if (last_audio[i]->dts_usec < video->dts_usec) { + output->received_audio = false; + return false; + } } } @@ -1614,19 +1612,20 @@ static bool initialize_interleaved_packets(struct obs_output *output) start_idx = get_interleaved_start_idx(output); if (start_idx) { discard_to_idx(output, start_idx); - if (!get_audio_and_video_packets(output, &video, audio, - audio_mixes)) + if (!get_audio_and_video_packets(output, &video, audio)) return false; } /* get new offsets */ output->video_offset = video->pts; - for (size_t i = 0; i < audio_mixes; i++) - output->audio_offsets[i] = audio[i]->dts; - + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + output->audio_offsets[i] = audio[i]->dts; + } + } #if DEBUG_STARTING_PACKETS == 1 int64_t v = video->dts_usec; - int64_t a = audio[0]->dts_usec; + int64_t a = audio[first_audio_idx]->dts_usec; int64_t diff = v - a; blog(LOG_DEBUG, @@ -1636,7 +1635,7 @@ static bool initialize_interleaved_packets(struct obs_output *output) #endif /* subtract offsets from highest TS offset variables */ - output->highest_audio_ts -= audio[0]->dts_usec; + output->highest_audio_ts -= audio[first_audio_idx]->dts_usec; output->highest_video_ts -= video->dts_usec; /* apply new offsets to all existing packet DTS/PTS values */ @@ -1885,11 +1884,11 @@ static void default_raw_audio_callback(void *param, size_t mix_idx, static inline void start_audio_encoders(struct obs_output *output, encoded_callback_t encoded_callback) { - size_t num_mixes = num_audio_mixes(output); - - for (size_t i = 0; i < num_mixes; i++) { - obs_encoder_start(output->audio_encoders[i], encoded_callback, - output); + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + if (output->audio_encoders[i]) { + obs_encoder_start(output->audio_encoders[i], + encoded_callback, output); + } } } @@ -1919,7 +1918,7 @@ static void reset_packet_data(obs_output_t *output) output->highest_video_ts = 0; output->video_offset = 0; - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) output->audio_offsets[i] = 0; free_packets(output); @@ -2049,14 +2048,14 @@ bool obs_output_can_begin_data_capture(const obs_output_t *output, has_service); } -static inline bool initialize_audio_encoders(obs_output_t *output, - size_t num_mixes) +static inline bool initialize_audio_encoders(obs_output_t *output) { - for (size_t i = 0; i < num_mixes; i++) { - if (!obs_encoder_initialize(output->audio_encoders[i])) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + obs_encoder_t *audio = output->audio_encoders[i]; + + if (audio && !obs_encoder_initialize(audio)) { obs_output_set_last_error( - output, obs_encoder_get_last_error( - output->audio_encoders[i])); + output, obs_encoder_get_last_error(audio)); return false; } } @@ -2064,10 +2063,9 @@ static inline bool initialize_audio_encoders(obs_output_t *output, return true; } -static inline obs_encoder_t *find_inactive_audio_encoder(obs_output_t *output, - size_t num_mixes) +static inline obs_encoder_t *find_inactive_audio_encoder(obs_output_t *output) { - for (size_t i = 0; i < num_mixes; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { struct obs_encoder *audio = output->audio_encoders[i]; if (audio && !audio->active && !audio->paired_encoder) @@ -2077,11 +2075,10 @@ static inline obs_encoder_t *find_inactive_audio_encoder(obs_output_t *output, return NULL; } -static inline void pair_encoders(obs_output_t *output, size_t num_mixes) +static inline void pair_encoders(obs_output_t *output) { struct obs_encoder *video = output->video_encoder; - struct obs_encoder *audio = - find_inactive_audio_encoder(output, num_mixes); + struct obs_encoder *audio = find_inactive_audio_encoder(output); if (video && audio) { pthread_mutex_lock(&audio->init_mutex); @@ -2103,7 +2100,6 @@ static inline void pair_encoders(obs_output_t *output, size_t num_mixes) bool obs_output_initialize_encoders(obs_output_t *output, uint32_t flags) { bool encoded, has_video, has_audio, has_service; - size_t num_mixes = num_audio_mixes(output); if (!obs_output_valid(output, "obs_output_initialize_encoders")) return false; @@ -2122,7 +2118,7 @@ bool obs_output_initialize_encoders(obs_output_t *output, uint32_t flags) obs_encoder_get_last_error(output->video_encoder)); return false; } - if (has_audio && !initialize_audio_encoders(output, num_mixes)) + if (has_audio && !initialize_audio_encoders(output)) return false; return true; @@ -2150,7 +2146,7 @@ static bool begin_delayed_capture(obs_output_t *output) static void reset_raw_output(obs_output_t *output) { - clear_audio_buffers(output); + clear_raw_audio_buffers(output); if (output->audio) { const struct audio_output_info *aoi = @@ -2187,7 +2183,6 @@ static void reset_raw_output(obs_output_t *output) bool obs_output_begin_data_capture(obs_output_t *output, uint32_t flags) { bool encoded, has_video, has_audio, has_service; - size_t num_mixes; if (!obs_output_valid(output, "obs_output_begin_data_capture")) return false; @@ -2210,9 +2205,8 @@ bool obs_output_begin_data_capture(obs_output_t *output, uint32_t flags) has_service)) return false; - num_mixes = num_audio_mixes(output); if (has_video && has_audio) - pair_encoders(output, num_mixes); + pair_encoders(output); os_atomic_set_bool(&output->data_active, true); hook_data_capture(output, encoded, has_video, has_audio); @@ -2240,11 +2234,10 @@ bool obs_output_begin_data_capture(obs_output_t *output, uint32_t flags) static inline void stop_audio_encoders(obs_output_t *output, encoded_callback_t encoded_callback) { - size_t num_mixes = num_audio_mixes(output); - - for (size_t i = 0; i < num_mixes; i++) { - obs_encoder_stop(output->audio_encoders[i], encoded_callback, - output); + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { + obs_encoder_t *audio = output->audio_encoders[i]; + if (audio) + obs_encoder_stop(audio, encoded_callback, output); } } @@ -2650,7 +2643,7 @@ const char *obs_output_get_last_error(obs_output_t *output) return vencoder->last_error_message; } - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { + for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { obs_encoder_t *aencoder = output->audio_encoders[i]; if (aencoder && aencoder->last_error_message) { return aencoder->last_error_message; diff --git a/libobs/obs-output.h b/libobs/obs-output.h index 51093f49074502..e57659fd9f5104 100644 --- a/libobs/obs-output.h +++ b/libobs/obs-output.h @@ -29,6 +29,8 @@ extern "C" { #define OBS_OUTPUT_MULTI_TRACK (1 << 4) #define OBS_OUTPUT_CAN_PAUSE (1 << 5) +#define MAX_OUTPUT_AUDIO_ENCODERS 6 + struct encoder_packet; struct obs_output_info { From b0c1c9c86c36163f73c9835aa7a95a6391b7fe15 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 5 Aug 2022 12:29:27 +0200 Subject: [PATCH 0028/2225] libobs,plugins: Remove individual -Wno-switch --- libobs/CMakeLists.txt | 7 +------ plugins/obs-ffmpeg/CMakeLists.txt | 5 ----- plugins/obs-filters/CMakeLists.txt | 6 ------ plugins/obs-x264/CMakeLists.txt | 6 ------ 4 files changed, 1 insertion(+), 23 deletions(-) diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 5b91b4bb051958..4405eb66f3cd03 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -264,12 +264,7 @@ target_compile_definitions( target_compile_features(libobs PRIVATE cxx_alias_templates) -target_compile_options( - libobs - PUBLIC ${ARCH_SIMD_FLAGS} - PRIVATE - $<$,$,$>:-Wno-switch> -) +target_compile_options(libobs PUBLIC ${ARCH_SIMD_FLAGS}) target_include_directories( libobs PUBLIC $ diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index 9671ef9781e57e..491dc6179d7c79 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -90,11 +90,6 @@ endif() set_target_properties(obs-ffmpeg PROPERTIES FOLDER "plugins/obs-ffmpeg" PREFIX "") -target_compile_options( - obs-ffmpeg - PRIVATE - $<$,$,$>:-Wno-switch> -) if(OS_WINDOWS) add_subdirectory(obs-amf-test) diff --git a/plugins/obs-filters/CMakeLists.txt b/plugins/obs-filters/CMakeLists.txt index 2b7ef640f0d2f7..a483da9a17d677 100644 --- a/plugins/obs-filters/CMakeLists.txt +++ b/plugins/obs-filters/CMakeLists.txt @@ -184,12 +184,6 @@ target_include_directories( target_link_libraries(obs-filters PRIVATE OBS::libobs) -target_compile_options( - obs-filters - PRIVATE - $<$,$,$>:-Wno-switch> -) - set_target_properties(obs-filters PROPERTIES FOLDER "plugins" PREFIX "") if(OS_WINDOWS) diff --git a/plugins/obs-x264/CMakeLists.txt b/plugins/obs-x264/CMakeLists.txt index 2035105e8a6c82..09db3f814e657e 100644 --- a/plugins/obs-x264/CMakeLists.txt +++ b/plugins/obs-x264/CMakeLists.txt @@ -16,12 +16,6 @@ target_link_libraries(obs-x264 PRIVATE LIBX264::LIBX264 OBS::opts-parser) set_target_properties(obs-x264 PROPERTIES FOLDER "plugins" PREFIX "") -target_compile_options( - obs-x264 - PRIVATE - $<$,$,$>:-Wno-switch> -) - if(OS_WINDOWS) set(MODULE_DESCRIPTION "OBS x264 encoder") configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in From 2839837ed6a4b63227d5a19bbd7411459cd13477 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 14 Aug 2022 11:17:49 +0200 Subject: [PATCH 0029/2225] plugins: Fix -Wsign-compare on Linux --- plugins/linux-capture/xshm-input.c | 2 +- plugins/linux-v4l2/v4l2-input.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/linux-capture/xshm-input.c b/plugins/linux-capture/xshm-input.c index 1e59cb89826cf0..d9c7cb56759f18 100644 --- a/plugins/linux-capture/xshm-input.c +++ b/plugins/linux-capture/xshm-input.c @@ -367,7 +367,7 @@ static bool xshm_server_changed(obs_properties_t *props, obs_property_t *p, if (name == NULL) { int ret = snprintf(name_tmp, sizeof(name_tmp), "%" PRIuFAST32, i); - if (ret >= sizeof(name_tmp)) + if (ret >= (int)sizeof(name_tmp)) blog(LOG_DEBUG, "linux-capture: A format truncation may have occurred." " This can be ignored since it is quite improbable."); diff --git a/plugins/linux-v4l2/v4l2-input.c b/plugins/linux-v4l2/v4l2-input.c index 6798304c8020f2..d5092ec5f5e8f9 100644 --- a/plugins/linux-v4l2/v4l2-input.c +++ b/plugins/linux-v4l2/v4l2-input.c @@ -419,7 +419,7 @@ static void v4l2_device_list(obs_property_t *prop, obs_data_t *settings) int ret = snprintf(unique_device_name, sizeof(unique_device_name), "%s (%s)", video_cap.card, video_cap.bus_info); - if (ret >= sizeof(unique_device_name)) + if (ret >= (int)sizeof(unique_device_name)) blog(LOG_DEBUG, "linux-v4l2: A format truncation may have occurred." " This can be ignored since it is quite improbable."); From c6a8b0371928505c24f20fc3e95efd014277ca79 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 3 Aug 2022 08:53:29 +0200 Subject: [PATCH 0030/2225] obs-scripting: Fix compilation warnings on Clang and GCC - Fix Python deprecation warnings - Fix maybe uninitialized warning (GCC only) --- deps/obs-scripting/obs-scripting-python.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/deps/obs-scripting/obs-scripting-python.c b/deps/obs-scripting/obs-scripting-python.c index 0502967b6bc1db..280cd4cc8f6ed8 100644 --- a/deps/obs-scripting/obs-scripting-python.c +++ b/deps/obs-scripting/obs-scripting-python.c @@ -1538,7 +1538,7 @@ static void python_tick(void *param, float seconds) * the cur_python_script state variable. Use the busy_script variable * to save and restore the value if not null. */ - struct obs_python_script *busy_script; + struct obs_python_script *busy_script = NULL; bool valid; uint64_t ts = obs_get_video_frame_time(); @@ -1686,15 +1686,15 @@ bool obs_scripting_load_python(const char *python_path) #if RUNTIME_LINK if (python_version.major == 3 && python_version.minor < 7) { -#elif PY_VERSION_HEX < 0x030700b0 - if (true) { -#else - if (false) { -#endif PyEval_InitThreads(); if (!PyEval_ThreadsInitialized()) return false; } +#elif PY_VERSION_HEX < 0x03070000 + PyEval_InitThreads(); + if (!PyEval_ThreadsInitialized()) + return false; +#endif /* ---------------------------------------------- */ /* Must set arguments for guis to work */ From e58a2d49e0c0904272a0a051cab4f929a7d7a064 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Tue, 26 Jul 2022 15:11:04 +0200 Subject: [PATCH 0031/2225] obs-filters: Fix unused parameter warnings --- plugins/obs-filters/chroma-key-filter.c | 3 +++ plugins/obs-filters/color-correction-filter.c | 3 +++ plugins/obs-filters/color-grade-filter.c | 3 +++ plugins/obs-filters/color-key-filter.c | 3 +++ plugins/obs-filters/luma-key-filter.c | 3 +++ plugins/obs-filters/mask-filter.c | 3 +++ plugins/obs-filters/sharpness-filter.c | 3 +++ 7 files changed, 21 insertions(+) diff --git a/plugins/obs-filters/chroma-key-filter.c b/plugins/obs-filters/chroma-key-filter.c index 45f132de5a5fbe..598a617fd0cc22 100644 --- a/plugins/obs-filters/chroma-key-filter.c +++ b/plugins/obs-filters/chroma-key-filter.c @@ -541,6 +541,9 @@ static enum gs_color_space chroma_key_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/color-correction-filter.c b/plugins/obs-filters/color-correction-filter.c index b304ba374b365e..00e6814e2ef34b 100644 --- a/plugins/obs-filters/color-correction-filter.c +++ b/plugins/obs-filters/color-correction-filter.c @@ -730,6 +730,9 @@ static void color_correction_filter_defaults_v2(obs_data_t *settings) static enum gs_color_space color_correction_filter_get_color_space( void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/color-grade-filter.c b/plugins/obs-filters/color-grade-filter.c index e908cfb076390c..29a808d1027c7d 100644 --- a/plugins/obs-filters/color-grade-filter.c +++ b/plugins/obs-filters/color-grade-filter.c @@ -515,6 +515,9 @@ static enum gs_color_space color_grade_filter_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/color-key-filter.c b/plugins/obs-filters/color-key-filter.c index bd0506457b8218..52374c2a4ad6b3 100644 --- a/plugins/obs-filters/color-key-filter.c +++ b/plugins/obs-filters/color-key-filter.c @@ -485,6 +485,9 @@ static enum gs_color_space color_key_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/luma-key-filter.c b/plugins/obs-filters/luma-key-filter.c index 6dfdf3c83cd349..772ab8214a49b6 100644 --- a/plugins/obs-filters/luma-key-filter.c +++ b/plugins/obs-filters/luma-key-filter.c @@ -208,6 +208,9 @@ static enum gs_color_space luma_key_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/mask-filter.c b/plugins/obs-filters/mask-filter.c index ad45dbdc0137a3..6d2817bbe47c57 100644 --- a/plugins/obs-filters/mask-filter.c +++ b/plugins/obs-filters/mask-filter.c @@ -364,6 +364,9 @@ static enum gs_color_space mask_filter_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, diff --git a/plugins/obs-filters/sharpness-filter.c b/plugins/obs-filters/sharpness-filter.c index 38965c676393f1..8d1a933e4a69fe 100644 --- a/plugins/obs-filters/sharpness-filter.c +++ b/plugins/obs-filters/sharpness-filter.c @@ -142,6 +142,9 @@ static enum gs_color_space sharpness_get_color_space(void *data, size_t count, const enum gs_color_space *preferred_spaces) { + UNUSED_PARAMETER(count); + UNUSED_PARAMETER(preferred_spaces); + const enum gs_color_space potential_spaces[] = { GS_CS_SRGB, GS_CS_SRGB_16F, From e4f004cdf814f615c2d4bc248c29fdde1e698d1d Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 31 Jul 2022 14:51:08 +0200 Subject: [PATCH 0032/2225] mac-syphon: Fix unused parameter warning --- plugins/mac-syphon/syphon.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/mac-syphon/syphon.m b/plugins/mac-syphon/syphon.m index 3ba6c2168781b9..2dbb5fab164855 100644 --- a/plugins/mac-syphon/syphon.m +++ b/plugins/mac-syphon/syphon.m @@ -680,6 +680,8 @@ static inline void build_sprite_rect(struct gs_vb_data *data, float origin_x, static void syphon_video_tick(void *data, float seconds) { + UNUSED_PARAMETER(seconds); + syphon_t s = data; if (!s->tex) From ca896dbce7b4e34dc29e3a7fc7968734dcd115a1 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 15:18:54 +0200 Subject: [PATCH 0033/2225] media-io: Fix FF_API_BUFFER_SIZE_T not being defined on Ubuntu 20.04 --- libobs/media-io/media-remux.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libobs/media-io/media-remux.c b/libobs/media-io/media-remux.c index a208af602a1bd1..05b315adf12b02 100644 --- a/libobs/media-io/media-remux.c +++ b/libobs/media-io/media-remux.c @@ -34,6 +34,10 @@ #define CODEC_FLAG_GLOBAL_H CODEC_FLAG_GLOBAL_HEADER #endif +#ifndef FF_API_BUFFER_SIZE_T +#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) +#endif + struct media_remux_job { int64_t in_size; AVFormatContext *ifmt_ctx, *ofmt_ctx; From 90c49c7af1992f08f179601505421985d095f81e Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 25 Jul 2022 19:09:33 +0200 Subject: [PATCH 0034/2225] UI: Fix shadow-ivar warning on macOS --- UI/platform-osx.mm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index d3697314e5f7fa..0e58caf4123c5e 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -207,7 +207,7 @@ void EnableOSXDockIcon(bool enable) @interface DockView : NSView { @private - QIcon icon; + QIcon _icon; } @end @@ -215,7 +215,7 @@ @implementation DockView - (id)initWithIcon:(QIcon)icon { self = [super init]; - self->icon = icon; + _icon = icon; return self; } - (void)drawRect:(NSRect)dirtyRect @@ -230,7 +230,7 @@ - (void)drawRect:(NSRect)dirtyRect /* Draw small icon on top */ float iconSize = 0.45; CGImageRef image = - icon.pixmap(size.width, size.height).toImage().toCGImage(); + _icon.pixmap(size.width, size.height).toImage().toCGImage(); CGContextRef context = [[NSGraphicsContext currentContext] CGContext]; CGContextDrawImage(context, CGRectMake(size.width * (1 - iconSize), 0, From ba92da8d7454e7ef5237de493d8cb388c265064a Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 15:02:55 +0200 Subject: [PATCH 0035/2225] aja: Fix compilation warnings on Clang and GCC - Fix format warning On Linux uint64_t is a unsigned long and on macOS it is a unsigned long long. - Fix macro-redefine warning on macOS --- plugins/aja/aja-output.cpp | 5 ++++- plugins/aja/aja-source.cpp | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/aja/aja-output.cpp b/plugins/aja/aja-output.cpp index 668e55a1d2d346..046d51f5b9bb87 100644 --- a/plugins/aja/aja-output.cpp +++ b/plugins/aja/aja-output.cpp @@ -15,6 +15,7 @@ #include #include +#include // Log AJA Output video/audio delay/sync // #define AJA_OUTPUT_STATS @@ -839,7 +840,9 @@ void AJAOutput::OutputThread(AJAThread *thread, void *ctx) uint32_t audioSize = props.audioNumChannels / props.audioSampleSize; if (audioSize > 0) { blog(LOG_INFO, - "AJAOutput::OutputThread: Thread stopped\n[Video] qf: %lu wf: %lu pf: %lu\n[Audio] qs: %lu ws: %lu ps: %lu", + "AJAOutput::OutputThread: Thread stopped\n[Video] qf: %" PRIu64 + " wf: %" PRIu64 " pf: %" PRIu64 "\n[Audio] qs: %" PRIu64 + " ws: %" PRIu64 " ps: %" PRIu64, ajaOutput->mVideoQueueFrames, ajaOutput->mVideoWriteFrames, ajaOutput->mVideoPlayFrames, ajaOutput->mAudioQueueBytes / audioSize, diff --git a/plugins/aja/aja-source.cpp b/plugins/aja/aja-source.cpp index 68be79411facff..77c78fc94ea630 100644 --- a/plugins/aja/aja-source.cpp +++ b/plugins/aja/aja-source.cpp @@ -13,7 +13,9 @@ #include #include +#ifndef NSEC_PER_SEC #define NSEC_PER_SEC 1000000000LL +#endif #define NTV2_AUDIOSIZE_MAX (401 * 1024) AJASource::AJASource(obs_source_t *source) From d473c9416f0a218463702c445067676b1b1e2d51 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 30 Jul 2022 17:39:25 +0200 Subject: [PATCH 0036/2225] obs-ffmpeg: Fix compilation warnings on Clang and GCC - Fix format warnings - Fix unused-parameter warnings --- plugins/obs-ffmpeg/obs-ffmpeg-rist.h | 6 +++--- plugins/obs-ffmpeg/obs-ffmpeg-srt.h | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-rist.h b/plugins/obs-ffmpeg/obs-ffmpeg-rist.h index 41e8bd3370f67a..215f80ae181c86 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-rist.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-rist.h @@ -132,9 +132,9 @@ static int cb_stats(void *arg, const struct rist_stats *stats_container) blog(LOG_DEBUG, "[obs-ffmpeg mpegts muxer / librist]: Session Summary\n" "\tbandwidth [%.3f Mbps]\n" - "\tpackets sent [%lu]\n" - "\tpkts received [%lu]\n" - "\tpkts retransmitted [%lu]\n" + "\tpackets sent [%" PRIu64 "]\n" + "\tpkts received [%" PRIu64 "]\n" + "\tpkts retransmitted [%" PRIu64 "]\n" "\tquality (pkt sent over sent+retransmitted+skipped) [%.2f]\n" "\trtt [%" PRIu32 " ms]\n", (double)(stats_container->stats.sender_peer.bandwidth) / diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h index 2046d56c643623..d4e73e56aea845 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h @@ -104,6 +104,8 @@ static int libsrt_neterrno(URLContext *h) static int libsrt_getsockopt(URLContext *h, SRTSOCKET fd, SRT_SOCKOPT optname, const char *optnamestr, void *optval, int *optlen) { + UNUSED_PARAMETER(h); + if (srt_getsockopt(fd, 0, optname, optval, optlen) < 0) { blog(LOG_INFO, "[obs-ffmpeg mpegts muxer / libsrt]: Failed to get option %s on socket: %s", @@ -275,6 +277,8 @@ static int libsrt_setsockopt(URLContext *h, SRTSOCKET fd, SRT_SOCKOPT optname, const char *optnamestr, const void *optval, int optlen) { + UNUSED_PARAMETER(h); + if (srt_setsockopt(fd, 0, optname, optval, optlen) < 0) { blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt]: Failed to set option %s on socket: %s", From 2d7e854476e76f42c9a776bc9872b5c2a95a2bd9 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 14:49:56 +0200 Subject: [PATCH 0037/2225] deps/jansson: Disable warnings on Clang and GCC --- deps/jansson/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/deps/jansson/CMakeLists.txt b/deps/jansson/CMakeLists.txt index e514324a7bf92c..e00576132bc7ab 100644 --- a/deps/jansson/CMakeLists.txt +++ b/deps/jansson/CMakeLists.txt @@ -701,5 +701,11 @@ set(JANSSON_LIBRARIES jansson CACHE STRING "Jansson libraries") +if (NOT MSVC) + target_compile_options(jansson PUBLIC + -Wno-format-truncation + -Wno-implicit-fallthrough) +endif() + target_include_directories(jansson PUBLIC src "${CMAKE_CURRENT_BINARY_DIR}/include") From f147be2d6883bfd19c20a423a1156d0a13495a11 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 14:56:04 +0200 Subject: [PATCH 0038/2225] obslua: Ignore maybe-unitialized warning with SWIG and GCC Only with SWIG version earlier than 4.1 because it is fixed upstream. https://github.com/swig/swig/commit/fa2f9dc5da405586ba3857dd515ae84b7868819f --- deps/obs-scripting/obslua/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deps/obs-scripting/obslua/CMakeLists.txt b/deps/obs-scripting/obslua/CMakeLists.txt index 9ee23cf8626f6a..13f0f61335379c 100644 --- a/deps/obs-scripting/obslua/CMakeLists.txt +++ b/deps/obs-scripting/obslua/CMakeLists.txt @@ -61,4 +61,8 @@ elseif(OS_MACOS) MACHO_COMPATIBILITY_VERSION 0) endif() +if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND SWIG_VERSION VERSION_LESS "4.1") + target_compile_options(obslua PRIVATE -Wno-maybe-uninitialized) +endif() + setup_script_plugin_target(obslua) From 2f111510566725c14a9894041048f23b5373f4bc Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 14 Aug 2022 15:44:24 +0200 Subject: [PATCH 0039/2225] obs-filters: Disable RNNoise warning on Clang --- plugins/obs-filters/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/obs-filters/CMakeLists.txt b/plugins/obs-filters/CMakeLists.txt index a483da9a17d677..9e1bfac6fd6c13 100644 --- a/plugins/obs-filters/CMakeLists.txt +++ b/plugins/obs-filters/CMakeLists.txt @@ -74,6 +74,11 @@ else() target_compile_definitions(obs-rnnoise INTERFACE COMPILE_OPUS) + target_compile_options( + obs-rnnoise + INTERFACE + "$<$:-Wno-null-dereference>") + if(OS_LINUX) set_property(SOURCE ${_RNNOISE_SOURCES} PROPERTY COMPILE_FLAGS -fvisibility=hidden) From 189c6939d11ad16a92cbb76c9132c0de3e0eb140 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 14:39:53 +0200 Subject: [PATCH 0040/2225] cmake: Treat warnings as errors on Clang and GCC -Wformat-security is enabled, some Linux packages build system have it enabled. https://github.com/obsproject/obs-studio/pull/5766 -Wunused-parameter is enabled too. Also ensure that null conversion (C++ only for GCC) is enabled because its enablement by default can depend on the CMake generator. -Wswitch is enabled but it is kept as a warning. It was already enabled with Clang. If Clang has -Wshorten-64-to-32 enabled, keep it as warnings. --- cmake/Modules/CompilerConfig.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index 9497fc018cedf2..2f792854b6c288 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -91,16 +91,23 @@ else() endif() add_compile_options( + -Werror -Wextra -Wvla + -Wswitch + -Wno-error=switch + -Wformat + -Wformat-security + -Wunused-parameter -Wno-unused-function -Wno-missing-field-initializers -fno-strict-aliasing "$<$:-Werror-implicit-function-declaration;-Wno-missing-braces>" "$<$:-stdlib=libc++>" "$<$:-DDEBUG=1;-D_DEBUG=1>" - "$<$:-fcolor-diagnostics>" - "$<$:-fcolor-diagnostics>") + "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" + "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" + "$<$:-Wconversion-null>") if(OBS_CODESIGN_LINKER) add_link_options("LINKER:$<$:-adhoc_codesign>") From 541b3292e925ef62b398810ca927a25dd259adb4 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 15 Aug 2022 11:08:30 +0200 Subject: [PATCH 0041/2225] cmake: Add workaround for GCC on aarch64 GCC on aarch64 seems to found type-limits issue in the code where GCC x86_64 does not. --- cmake/Modules/CompilerConfig.cmake | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index 2f792854b6c288..ab891d29f633f7 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -109,6 +109,12 @@ else() "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" "$<$:-Wconversion-null>") + # GCC on aarch64 emits type-limits warnings that do not appear on x86_64 + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_PROCESSOR STREQUAL + "aarch64") + add_compile_options(-Wno-error=type-limits) + endif() + if(OBS_CODESIGN_LINKER) add_link_options("LINKER:$<$:-adhoc_codesign>") endif() From c648222332d1a7ce7ea55fd14fbe514a5f258f33 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Tue, 19 Jul 2022 13:13:48 +0200 Subject: [PATCH 0042/2225] libobs,libobs-opengl,obs-ffmpeg-mux: Calm deprecation warnings on *nix Calm libobs-opengl deprecation warnings on macOS. Calm FFmpeg deprecation warning with LIBAVFORMAT_VERSION_MAJOR < 59. --- libobs-opengl/gl-cocoa.m | 9 +++++++++ libobs/obs-nix-platform.c | 3 +++ libobs/util/c99defs.h | 20 ++++++++++++++++++++ plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c | 3 +++ 4 files changed, 35 insertions(+) diff --git a/libobs-opengl/gl-cocoa.m b/libobs-opengl/gl-cocoa.m index 599ba952571373..a3c19ca104169c 100644 --- a/libobs-opengl/gl-cocoa.m +++ b/libobs-opengl/gl-cocoa.m @@ -92,7 +92,10 @@ [context makeCurrentContext]; GLint interval = 0; + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION [context setValues:&interval forParameter:NSOpenGLCPSwapInterval]; + PRAGMA_WARN_POP const bool success = gladLoadGL() != 0; if (!success) { @@ -138,10 +141,13 @@ bool gl_platform_init_swapchain(struct gs_swap_chain *swap) CGLLockContext(context_obj); [context makeCurrentContext]; + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION [context setView:swap->wi->view]; GLint interval = 0; [context setValues:&interval forParameter:NSOpenGLCPSwapInterval]; + PRAGMA_WARN_POP gl_gen_framebuffers(1, &swap->wi->fbo); gl_bind_framebuffer(GL_FRAMEBUFFER, swap->wi->fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, @@ -199,7 +205,10 @@ void gl_platform_cleanup_swapchain(struct gs_swap_chain *swap) wi->view = info->window.view; wi->view.window.colorSpace = NSColorSpace.sRGBColorSpace; + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION wi->view.wantsBestResolutionOpenGLSurface = YES; + PRAGMA_WARN_POP return wi; } diff --git a/libobs/obs-nix-platform.c b/libobs/obs-nix-platform.c index 52a8d841f13f15..0db6dd0d47291d 100644 --- a/libobs/obs-nix-platform.c +++ b/libobs/obs-nix-platform.c @@ -25,7 +25,10 @@ static void *obs_nix_platform_display = NULL; void obs_set_nix_platform(enum obs_nix_platform_type platform) { + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION assert(platform != OBS_NIX_PLATFORM_X11_GLX); + PRAGMA_WARN_POP obs_nix_platform = platform; } diff --git a/libobs/util/c99defs.h b/libobs/util/c99defs.h index 6d1fabf0ccda39..a05a1cdfc7691a 100644 --- a/libobs/util/c99defs.h +++ b/libobs/util/c99defs.h @@ -51,6 +51,26 @@ #define EXPORT __attribute__((visibility("default"))) #endif +#ifdef _MSC_VER +#define PRAGMA_WARN_PUSH __pragma(warning(push)) +#define PRAGMA_WARN_POP __pragma(warning(pop)) +#define PRAGMA_WARN_DEPRECATION +#elif defined(__clang__) +#define PRAGMA_WARN_PUSH _Pragma("clang diagnostic push") +#define PRAGMA_WARN_POP _Pragma("clang diagnostic pop") +#define PRAGMA_WARN_DEPRECATION \ + _Pragma("clang diagnostic warning \"-Wdeprecated-declarations\"") +#elif defined(__GNUC__) +#define PRAGMA_WARN_PUSH _Pragma("GCC diagnostic push") +#define PRAGMA_WARN_POP _Pragma("GCC diagnostic pop") +#define PRAGMA_WARN_DEPRECATION \ + _Pragma("GCC diagnostic warning \"-Wdeprecated-declarations\"") +#else +#define PRAGMA_WARN_PUSH +#define PRAGMA_WARN_POP +#define PRAGMA_WARN_DEPRECATION +#endif + #include #include #include diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index 0f7bc54500bf0c..a2287a66dc533b 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -472,7 +472,10 @@ static void create_video_stream(struct ffmpeg_mux *ffm) ffm->video_stream->time_base = context->time_base; #if LIBAVFORMAT_VERSION_MAJOR < 59 // codec->time_base may still be used if LIBAVFORMAT_VERSION_MAJOR < 59 + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION ffm->video_stream->codec->time_base = context->time_base; + PRAGMA_WARN_POP #endif ffm->video_stream->avg_frame_rate = av_inv_q(context->time_base); From 678b0287e6558de97e9a819e6c3d3049ac93ca51 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 28 Jul 2022 11:09:00 +0200 Subject: [PATCH 0043/2225] libobs: Calm stringop-overflow warning on GCC Those warnings appeared with GCC 12 with -O2, those are potentially created by regression from GCC. --- libobs/util/c99defs.h | 5 +++++ libobs/util/darray.h | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/libobs/util/c99defs.h b/libobs/util/c99defs.h index a05a1cdfc7691a..3d6a32a4526b1a 100644 --- a/libobs/util/c99defs.h +++ b/libobs/util/c99defs.h @@ -55,20 +55,25 @@ #define PRAGMA_WARN_PUSH __pragma(warning(push)) #define PRAGMA_WARN_POP __pragma(warning(pop)) #define PRAGMA_WARN_DEPRECATION +#define PRAGMA_WARN_STRINGOP_OVERFLOW #elif defined(__clang__) #define PRAGMA_WARN_PUSH _Pragma("clang diagnostic push") #define PRAGMA_WARN_POP _Pragma("clang diagnostic pop") #define PRAGMA_WARN_DEPRECATION \ _Pragma("clang diagnostic warning \"-Wdeprecated-declarations\"") +#define PRAGMA_WARN_STRINGOP_OVERFLOW #elif defined(__GNUC__) #define PRAGMA_WARN_PUSH _Pragma("GCC diagnostic push") #define PRAGMA_WARN_POP _Pragma("GCC diagnostic pop") #define PRAGMA_WARN_DEPRECATION \ _Pragma("GCC diagnostic warning \"-Wdeprecated-declarations\"") +#define PRAGMA_WARN_STRINGOP_OVERFLOW \ + _Pragma("GCC diagnostic warning \"-Wstringop-overflow\"") #else #define PRAGMA_WARN_PUSH #define PRAGMA_WARN_POP #define PRAGMA_WARN_DEPRECATION +#define PRAGMA_WARN_STRINGOP_OVERFLOW #endif #include diff --git a/libobs/util/darray.h b/libobs/util/darray.h index b18d86614dc946..db8a77d426ae3e 100644 --- a/libobs/util/darray.h +++ b/libobs/util/darray.h @@ -207,7 +207,11 @@ static inline void *darray_push_back_new(const size_t element_size, darray_ensure_capacity(element_size, dst, ++dst->num); last = darray_end(element_size, dst); + PRAGMA_WARN_PUSH + // NOTE: Those warning could be false positive from GCC 12 with -O2 + PRAGMA_WARN_STRINGOP_OVERFLOW memset(last, 0, element_size); + PRAGMA_WARN_POP return last; } From 77a174ddac997e3a490c3ad52ac3a6f4b5c93371 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Tue, 19 Jul 2022 13:15:26 +0200 Subject: [PATCH 0044/2225] aja,aja-output-ui: Calm deprecation warnings on Clang and GCC --- UI/frontend-plugins/aja-output-ui/CMakeLists.txt | 5 +++++ plugins/aja/CMakeLists.txt | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt index 96eb393104a0ab..fb989651bcd8bc 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -83,6 +83,11 @@ else() target_link_libraries(aja-output-ui PRIVATE X11::X11 Qt::GuiPrivate) endif() +if(NOT MSVC) + target_compile_options(aja-output-ui + PRIVATE -Wno-error=deprecated-declarations) +endif() + set_target_properties(aja-output-ui PROPERTIES FOLDER "frontend" PREFIX "") get_target_property(_SOURCES aja-output-ui SOURCES) diff --git a/plugins/aja/CMakeLists.txt b/plugins/aja/CMakeLists.txt index ee67650a70b0ab..d940255aa0fc6b 100644 --- a/plugins/aja/CMakeLists.txt +++ b/plugins/aja/CMakeLists.txt @@ -64,6 +64,10 @@ elseif(OS_WINDOWS) target_link_options(aja PRIVATE "LINKER:/IGNORE:4099") endif() +if(NOT MSVC) + target_compile_options(aja PRIVATE -Wno-error=deprecated-declarations) +endif() + set_target_properties(aja PROPERTIES FOLDER "plugins/aja" PREFIX "") setup_plugin_target(aja) From 1007a0cf42f70baaf73b3fb18ed1eb3f4cc72e72 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 15:00:48 +0200 Subject: [PATCH 0045/2225] linux-capture: Fix format-overflow warning --- plugins/linux-capture/xshm-input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/linux-capture/xshm-input.c b/plugins/linux-capture/xshm-input.c index d9c7cb56759f18..265d739b9907d5 100644 --- a/plugins/linux-capture/xshm-input.c +++ b/plugins/linux-capture/xshm-input.c @@ -352,7 +352,7 @@ static bool xshm_server_changed(obs_properties_t *props, obs_property_t *p, for (int_fast32_t i = 0; i < count; ++i) { char *name; - char name_tmp[12]; + char name_tmp[20]; int_fast32_t x, y, w, h; x = y = w = h = 0; From 323d2f60da1832934714466009e67bf8149408f3 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 18 Jul 2022 14:52:33 +0200 Subject: [PATCH 0046/2225] obs-outputs: Calm some warnings if FTL on Clang and GCC -Wenum-conversion is only available with GCC from the version 10. --- plugins/obs-outputs/CMakeLists.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/plugins/obs-outputs/CMakeLists.txt b/plugins/obs-outputs/CMakeLists.txt index 60bad1e935a9d5..c678db4500b0b7 100644 --- a/plugins/obs-outputs/CMakeLists.txt +++ b/plugins/obs-outputs/CMakeLists.txt @@ -179,6 +179,24 @@ elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt") obs-outputs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/libftl/posix) endif() + if(NOT MSVC) + target_compile_options( + obs-outputs + PRIVATE + -Wno-error=extra + -Wno-error=sign-compare + -Wno-error=incompatible-pointer-types + -Wno-error=int-conversion + -Wno-error=unused-parameter + -Wno-error=deprecated-declarations + "$<$:-Wno-error=maybe-uninitialized>" + "$<$:-Wno-error=pointer-sign>") + if((NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") OR CMAKE_C_COMPILER_VERSION + VERSION_GREATER_EQUAL "10") + target_compile_options(obs-outputs PRIVATE -Wno-error=enum-conversion) + endif() + endif() + target_compile_definitions(obs-outputs PRIVATE FTL_FOUND) endif() From 6dd99e3a9fbbf3d7ff8cb90de668510883953171 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 11 Nov 2022 22:03:45 +0100 Subject: [PATCH 0047/2225] UI: Fix implicit conversion warning on Linux with Clang --- UI/volume-control.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index 8fdbf1db50b9dc..51af38c0626f6f 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -1077,7 +1077,8 @@ inline int VolumeMeter::convertToInt(float number) constexpr int min = std::numeric_limits::min(); constexpr int max = std::numeric_limits::max(); - if (number > max) + // NOTE: Conversion from 'const int' to 'float' changes max value from 2147483647 to 2147483648 + if (number >= (float)max) return max; else if (number < min) return min; From aa97b7f1f1d7fae603bbde2f60a5bf01fc6d1be7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 7 Jan 2023 09:23:25 +0100 Subject: [PATCH 0048/2225] cmake: Add workaround for GCC 12.1.0 Freedesktop Flatpaks 22.08 provide this version of GCC. --- cmake/Modules/CompilerConfig.cmake | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index ab891d29f633f7..2529d8d6e8d62d 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -109,10 +109,16 @@ else() "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" "$<$:-Wconversion-null>") - # GCC on aarch64 emits type-limits warnings that do not appear on x86_64 - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_PROCESSOR STREQUAL - "aarch64") - add_compile_options(-Wno-error=type-limits) + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # GCC on aarch64 emits type-limits warnings that do not appear on x86_64 + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") + add_compile_options(-Wno-error=type-limits) + endif() + + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105562 + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "12.1.0") + add_compile_options(-Wno-error=maybe-uninitialized) + endif() endif() if(OBS_CODESIGN_LINKER) From af59a903e19c31a2f64c15c377f488498477538a Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Thu, 19 Jan 2023 11:35:51 -0500 Subject: [PATCH 0049/2225] CI: Revert Qt to 6.3.1 on Windows --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index daa5b869433c47..800c2d70aca615 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,11 +22,11 @@ env: QT_HASH_MAC_X86_64: 'c5ed7bc9f6e802910ec539066bcf0a8d64100fafce568071f264c88c22c5859b' QT_HASH_MAC_ARM64: '1ce472fd1e28f947456b72b1d7ab929d6e93cb774c2928e22eca9bb751b12ccf' QT_HASH_MAC_UNIVERSAL: '873f7c9c9f7fcee740a79c075b32a505c932c816d928807fa16f3439c610fbfd' - QT_VERSION_WIN: '6.4.1' + QT_VERSION_WIN: '6.3.1' DEPS_VERSION_MAC: '2022-11-21' DEPS_HASH_MAC_X86_64: 'ed0a145e88496f8975da14a07939dbe5633e60510aada34509a4aef64a66e438' DEPS_HASH_MAC_ARM64: 'f397dc524e5ee7f85684f0b9661c45957446e28d166fcd6dfacf895c9d4d2521' - DEPS_VERSION_WIN: '2022-11-21' + DEPS_VERSION_WIN: '2023-01-06' VLC_VERSION_MAC: '3.0.8' VLC_HASH_MAC: 'e0149ef4a20a19b9ecd87309c2d27787ee3f47dfd47c6639644bc1f6fd95bdf6' VLC_VERSION_WIN: '3.0.0-git' From 018ce16703b4dfc384cbca7e6edec8c5ff03b9fb Mon Sep 17 00:00:00 2001 From: tt2468 Date: Thu, 19 Jan 2023 02:49:15 -0800 Subject: [PATCH 0050/2225] libobs: Fix loading of custom_size for empty scenes Previously, `custom_size` was checked at the end of the `scene_load` function. If the scene contained no "items" array, the `custom_scene` loading code would never be run. This moves the `custom_size` code above the return statement. --- libobs/obs-scene.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 68490ba302088f..c5fff5f922b3ef 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -1103,6 +1103,12 @@ static void scene_load(void *data, obs_data_t *settings) remove_all_items(scene); + if (obs_data_get_bool(settings, "custom_size")) { + scene->cx = (uint32_t)obs_data_get_int(settings, "cx"); + scene->cy = (uint32_t)obs_data_get_int(settings, "cy"); + scene->custom_size = true; + } + if (!items) return; @@ -1117,12 +1123,6 @@ static void scene_load(void *data, obs_data_t *settings) if (obs_data_has_user_value(settings, "id_counter")) scene->id_counter = obs_data_get_int(settings, "id_counter"); - if (obs_data_get_bool(settings, "custom_size")) { - scene->cx = (uint32_t)obs_data_get_int(settings, "cx"); - scene->cy = (uint32_t)obs_data_get_int(settings, "cy"); - scene->custom_size = true; - } - obs_data_array_release(items); } From 610a2171a269bdd12d771bf6dcb7e64a16048ed1 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 21 Jan 2023 13:41:33 -0600 Subject: [PATCH 0051/2225] UI: Don't open properties dialog if item is scene This disables opening of the properties dialog if a scene is double clicked in the source tree. --- UI/source-tree.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/source-tree.cpp b/UI/source-tree.cpp index 0aa6302c0c5a57..90260a8547c17e 100644 --- a/UI/source-tree.cpp +++ b/UI/source-tree.cpp @@ -328,7 +328,7 @@ void SourceTreeItem::mouseDoubleClickEvent(QMouseEvent *event) obs_source_t *source = obs_sceneitem_get_source(sceneitem); OBSBasic *main = reinterpret_cast(App()->GetMainWindow()); - if (source) { + if (obs_source_configurable(source)) { main->CreatePropertiesWindow(source); } } From edcb80ae8ba01a29a4e813d71bc8f39a9f131975 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 21 Jan 2023 10:13:27 +0100 Subject: [PATCH 0052/2225] updater: Hash files with multiple threads --- UI/win-update/updater/updater.cpp | 88 +++++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 0a1cd2ac41d54c..61132f4d4409ae 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -25,6 +25,7 @@ #include #include #include +#include using namespace std; using namespace json11; @@ -356,6 +357,7 @@ struct deletion_t { } }; +static unordered_map hashes; static vector updates; static vector deletions; static mutex updateMutex; @@ -594,6 +596,72 @@ static inline bool WideToUTF8(char *utf8, int utf8Size, const wchar_t *wide) nullptr, nullptr); } +#define UTF8ToWideBuf(wide, utf8) UTF8ToWide(wide, _countof(wide), utf8) +#define WideToUTF8Buf(utf8, wide) WideToUTF8(utf8, _countof(utf8), wide) + +/* ----------------------------------------------------------------------- */ + +queue hashQueue; + +void HasherThread() +{ + bool hasherThreadFailure = false; + unique_lock ulock(updateMutex, defer_lock); + + while (true) { + ulock.lock(); + if (hashQueue.empty()) + return; + + auto fileName = hashQueue.front(); + hashQueue.pop(); + + ulock.unlock(); + + wchar_t updateFileName[MAX_PATH]; + + if (!UTF8ToWideBuf(updateFileName, fileName.c_str())) + continue; + if (!IsSafeFilename(updateFileName)) + continue; + + BYTE existingHash[BLAKE2_HASH_LENGTH]; + wchar_t fileHashStr[BLAKE2_HASH_STR_LENGTH]; + + if (CalculateFileHash(updateFileName, existingHash)) { + HashToString(existingHash, fileHashStr); + ulock.lock(); + hashes.emplace(fileName, fileHashStr); + ulock.unlock(); + } + } +} + +static void RunHasherWorkers(int num, const Json &packages) +try { + + for (const Json &package : packages.array_items()) { + for (const Json &file : package["files"].array_items()) { + if (!file["name"].is_string()) + continue; + hashQueue.push(file["name"].string_value()); + } + } + + vector> futures; + futures.resize(num); + + for (auto &result : futures) { + result = async(launch::async, HasherThread); + } + for (auto &result : futures) { + result.wait(); + } +} catch (...) { +} + +/* ----------------------------------------------------------------------- */ + static inline bool FileExists(const wchar_t *path) { WIN32_FIND_DATAW wfd; @@ -648,9 +716,6 @@ static inline bool is_64bit_file(const char *file) strstr(file, "64.exe") != nullptr; } -#define UTF8ToWideBuf(wide, utf8) UTF8ToWide(wide, _countof(wide), utf8) -#define WideToUTF8Buf(utf8, wide) WideToUTF8(utf8, _countof(utf8), wide) - #define UPDATE_URL L"https://cdn-fastly.obsproject.com/update_studio" static bool AddPackageUpdateFiles(const Json &root, size_t idx, @@ -737,16 +802,14 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, /* Check file hash */ - BYTE existingHash[BLAKE2_HASH_LENGTH]; - wchar_t fileHashStr[BLAKE2_HASH_STR_LENGTH]; + wstring fileHashStr; bool has_hash; /* We don't really care if this fails, it's just to avoid * wasting bandwidth by downloading unmodified files */ - if (CalculateFileHash(updateFileName, existingHash)) { - - HashToString(existingHash, fileHashStr); - if (wcscmp(fileHashStr, updateHashStr) == 0) + if (hashes.count(fileUTF8)) { + fileHashStr = hashes[fileUTF8]; + if (fileHashStr == updateHashStr) continue; has_hash = true; @@ -771,7 +834,7 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, update.has_hash = has_hash; if (has_hash) - StringToHash(fileHashStr, update.my_hash); + StringToHash(fileHashStr.data(), update.my_hash); updates.push_back(move(update)); @@ -1403,6 +1466,11 @@ static bool Update(wchar_t *cmdLine) return false; } + /* ------------------------------------- * + * Hash local files listed in manifest */ + + RunHasherWorkers(4, root["packages"]); + /* ------------------------------------- * * Parse current manifest update files */ From d08ede33cd2a6115bbaf19929bd31056e1513653 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 21 Jan 2023 15:45:55 -0600 Subject: [PATCH 0053/2225] UI: Disable screenshot action if item has no video This disables the source screenshot action in the context menu if the source has no video. --- UI/window-basic-main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 35fdc2134c76e6..6aec6062dbb65b 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5689,8 +5689,12 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) popup.addMenu(sourceProjector); popup.addAction(QTStr("SourceWindow"), this, SLOT(OpenSourceWindow())); - popup.addAction(QTStr("Screenshot.Source"), this, - SLOT(ScreenshotSelectedSource())); + + QAction *screenshotAction = + popup.addAction(QTStr("Screenshot.Source"), this, + SLOT(ScreenshotSelectedSource())); + screenshotAction->setEnabled(flags & OBS_SOURCE_VIDEO); + popup.addSeparator(); if (flags & OBS_SOURCE_INTERACTION) From c082c4a74d079d5e0bd6ed7e6338b767c29f69c9 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sat, 31 Dec 2022 15:20:09 +0000 Subject: [PATCH 0054/2225] libobs/graphics: Enable DMABUF on FreeBSD and DragonFly Required under Wayland (wlrobs) on FreeBSD and DragonFly. DMABUF was already partially exposed after c50c62555516. --- docs/sphinx/reference-libobs-graphics-graphics.rst | 6 +++--- libobs/graphics/device-exports.h | 2 +- libobs/graphics/graphics-imports.c | 2 +- libobs/graphics/graphics-internal.h | 2 +- libobs/graphics/graphics.c | 2 +- libobs/graphics/graphics.h | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/sphinx/reference-libobs-graphics-graphics.rst b/docs/sphinx/reference-libobs-graphics-graphics.rst index 16d183fe77f6a8..aeba705459acf3 100644 --- a/docs/sphinx/reference-libobs-graphics-graphics.rst +++ b/docs/sphinx/reference-libobs-graphics-graphics.rst @@ -1009,7 +1009,7 @@ Texture Functions .. function:: gs_texture_t *gs_texture_create_from_dmabuf(unsigned int width, unsigned int height, uint32_t drm_format, enum gs_color_format color_format, uint32_t n_planes, const int *fds, const uint32_t *strides, const uint32_t *offsets, const uint64_t *modifiers) - **Linux only:** Creates a texture from DMA-BUF metadata. + **only Linux, FreeBSD, DragonFly:** Creates a texture from DMA-BUF metadata. Exchanging DMA-BUFs is a verbose process because of its multiplanar nature. For example, YUV can have each plane as a color channel, or a monitor buffer @@ -1049,7 +1049,7 @@ Texture Functions .. function:: bool *gs_query_dmabuf_capabilities(enum gs_dmabuf_flags *dmabuf_flags, uint32_t **drm_formats, size_t *n_formats) - **Linux only:** Queries the capabilities for DMA-BUFs. + **only Linux, FreeBSD, DragonFly:** Queries the capabilities for DMA-BUFs. Graphics cards can optimize frame buffers by storing them in custom layouts, depending on their hardware features. These layouts can make these frame @@ -1068,7 +1068,7 @@ Texture Functions .. function:: bool *gs_query_dmabuf_modifiers_for_format(uint32_t drm_format, uint64_t **modifiers, size_t *n_modifiers) - **Linux only:** Queries the supported DMA-BUF modifiers for a given format. + **only Linux, FreeBSD, DragonFly:** Queries the supported DMA-BUF modifiers for a given format. This function queries all supported explicit modifiers for a format, stores them as an array and returns the number of supported modifiers. diff --git a/libobs/graphics/device-exports.h b/libobs/graphics/device-exports.h index 6200796ed28d70..4fcae2e6a9055e 100644 --- a/libobs/graphics/device-exports.h +++ b/libobs/graphics/device-exports.h @@ -178,7 +178,7 @@ EXPORT void device_debug_marker_begin(gs_device_t *device, const float color[4]); EXPORT void device_debug_marker_end(gs_device_t *device); -#if __linux__ +#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) EXPORT gs_texture_t *device_texture_create_from_dmabuf( gs_device_t *device, unsigned int width, unsigned int height, diff --git a/libobs/graphics/graphics-imports.c b/libobs/graphics/graphics-imports.c index b7a32890e30233..00681680cf3933 100644 --- a/libobs/graphics/graphics-imports.c +++ b/libobs/graphics/graphics-imports.c @@ -234,7 +234,7 @@ bool load_graphics_imports(struct gs_exports *exports, void *module, GRAPHICS_IMPORT_OPTIONAL(device_stagesurface_create_p010); GRAPHICS_IMPORT_OPTIONAL(device_register_loss_callbacks); GRAPHICS_IMPORT_OPTIONAL(device_unregister_loss_callbacks); -#elif __linux__ +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) GRAPHICS_IMPORT(device_texture_create_from_dmabuf); GRAPHICS_IMPORT(device_query_dmabuf_capabilities); GRAPHICS_IMPORT(device_query_dmabuf_modifiers_for_format); diff --git a/libobs/graphics/graphics-internal.h b/libobs/graphics/graphics-internal.h index 434b76187acd2a..137a0219686ed6 100644 --- a/libobs/graphics/graphics-internal.h +++ b/libobs/graphics/graphics-internal.h @@ -348,7 +348,7 @@ struct gs_exports { gs_device_t *device, const struct gs_device_loss *callbacks); void (*device_unregister_loss_callbacks)(gs_device_t *device, void *data); -#elif __linux__ +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) struct gs_texture *(*device_texture_create_from_dmabuf)( gs_device_t *device, unsigned int width, unsigned int height, uint32_t drm_format, enum gs_color_format color_format, diff --git a/libobs/graphics/graphics.c b/libobs/graphics/graphics.c index c68b26afc882d9..7bc03dff180634 100644 --- a/libobs/graphics/graphics.c +++ b/libobs/graphics/graphics.c @@ -1387,7 +1387,7 @@ gs_texture_t *gs_texture_create(uint32_t width, uint32_t height, levels, data, flags); } -#if __linux__ +#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) gs_texture_t *gs_texture_create_from_dmabuf( unsigned int width, unsigned int height, uint32_t drm_format, diff --git a/libobs/graphics/graphics.h b/libobs/graphics/graphics.h index b18f5d9bbadf02..5b309d0022d468 100644 --- a/libobs/graphics/graphics.h +++ b/libobs/graphics/graphics.h @@ -967,7 +967,7 @@ EXPORT gs_stagesurf_t *gs_stagesurface_create_p010(uint32_t width, EXPORT void gs_register_loss_callbacks(const struct gs_device_loss *callbacks); EXPORT void gs_unregister_loss_callbacks(void *data); -#elif defined(__linux__) || defined(__FreeBSD__) +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) EXPORT gs_texture_t *gs_texture_create_from_dmabuf( unsigned int width, unsigned int height, uint32_t drm_format, From 5a4283816d192d26942f77bc67409d087bf2cd3c Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 19 Jan 2023 23:12:19 +0100 Subject: [PATCH 0055/2225] obs-filters: Improve NVIDIA effects SDK version checks - Don't repeatedly query version at runtime in case a user installs the SDK while OBS is running - Restore default DLL search directory - Don't show outdated SDK message if the SDK is not found - Protect minimum version macro with brackets --- plugins/obs-filters/noise-suppress-filter.c | 4 ++-- plugins/obs-filters/nvafx-load.h | 19 +++++++++++++++---- .../obs-filters/nvidia-greenscreen-filter.c | 6 +++--- plugins/obs-filters/nvvfx-load.h | 19 +++++++++++++++---- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/plugins/obs-filters/noise-suppress-filter.c b/plugins/obs-filters/noise-suppress-filter.c index d019a2272ad2dc..2b042bf2b082eb 100644 --- a/plugins/obs-filters/noise-suppress-filter.c +++ b/plugins/obs-filters/noise-suppress-filter.c @@ -634,7 +634,7 @@ bool load_nvafx(void) blog(LOG_INFO, "[noise suppress]: NVIDIA AUDIO FX version: %i.%i.%i.%i", major, minor, build, revision); - if (version < (MIN_AFX_SDK_VERSION)) { + if (version < MIN_AFX_SDK_VERSION) { blog(LOG_INFO, "[noise suppress]: NVIDIA AUDIO Effects SDK is outdated. Please update both audio & video SDK."); } @@ -1227,7 +1227,7 @@ static obs_properties_t *noise_suppress_properties(void *data) 1.0f, 0.01f); } unsigned int version = get_lib_version(); - if (version < (MIN_AFX_SDK_VERSION)) { + if (version && version < MIN_AFX_SDK_VERSION) { obs_property_t *warning = obs_properties_add_text( ppts, "deprecation", NULL, OBS_TEXT_INFO); obs_property_text_set_info_type(warning, OBS_TEXT_INFO_WARNING); diff --git a/plugins/obs-filters/nvafx-load.h b/plugins/obs-filters/nvafx-load.h index 7fc94c007aefac..0b02c426e42870 100644 --- a/plugins/obs-filters/nvafx-load.h +++ b/plugins/obs-filters/nvafx-load.h @@ -9,7 +9,7 @@ #define NVAFX_API #ifdef LIBNVAFX_ENABLED -#define MIN_AFX_SDK_VERSION 1 << 24 | 2 << 16 | 13 << 0 +#define MIN_AFX_SDK_VERSION (1 << 24 | 2 << 16 | 13 << 0) static HMODULE nv_audiofx = NULL; static HMODULE nv_cuda = NULL; @@ -312,15 +312,26 @@ static bool load_lib(void) static unsigned int get_lib_version(void) { + static unsigned int version = 0; + static bool version_checked = false; + + if (version_checked) + return version; + + version_checked = true; + char path[MAX_PATH]; if (!nvafx_get_sdk_path(path, sizeof(path))) return 0; SetDllDirectoryA(path); + struct win_version_info nto_ver = {0}; - get_dll_ver(L"NVAudioEffects.dll", &nto_ver); - unsigned int version = nto_ver.major << 24 | nto_ver.minor << 16 | - nto_ver.build << 8 | nto_ver.revis << 0; + if (get_dll_ver(L"NVAudioEffects.dll", &nto_ver)) + version = nto_ver.major << 24 | nto_ver.minor << 16 | + nto_ver.build << 8 | nto_ver.revis << 0; + + SetDllDirectoryA(NULL); return version; } #endif diff --git a/plugins/obs-filters/nvidia-greenscreen-filter.c b/plugins/obs-filters/nvidia-greenscreen-filter.c index 41b5b999374936..7ea783d370e907 100644 --- a/plugins/obs-filters/nvidia-greenscreen-filter.c +++ b/plugins/obs-filters/nvidia-greenscreen-filter.c @@ -479,7 +479,7 @@ static void *nv_greenscreen_filter_create(obs_data_t *settings, uint8_t build = (filter->version >> 8) & 0x0000ff; uint8_t revision = (filter->version >> 0) & 0x000000ff; // sanity check - nvvfx_new_sdk = filter->version >= (MIN_VFX_SDK_VERSION) && + nvvfx_new_sdk = filter->version >= MIN_VFX_SDK_VERSION && nvvfx_new_sdk; } @@ -551,7 +551,7 @@ static obs_properties_t *nv_greenscreen_filter_properties(void *data) props, S_PROCESSING, TEXT_PROCESSING, 1, 4, 1); obs_property_set_long_description(partial, TEXT_PROCESSING_HINT); unsigned int version = get_lib_version(); - if (version < (MIN_VFX_SDK_VERSION)) { + if (version && version < MIN_VFX_SDK_VERSION) { obs_property_t *warning = obs_properties_add_text( props, "deprecation", NULL, OBS_TEXT_INFO); obs_property_text_set_info_type(warning, OBS_TEXT_INFO_WARNING); @@ -895,7 +895,7 @@ bool load_nvvfx(void) blog(LOG_INFO, "[NVIDIA VIDEO FX]: NVIDIA VIDEO FX version: %i.%i.%i.%i", major, minor, build, revision); - if (version < (MIN_VFX_SDK_VERSION)) { + if (version < MIN_VFX_SDK_VERSION) { blog(LOG_INFO, "[NVIDIA VIDEO FX]: NVIDIA VIDEO Effects SDK is outdated. Please update both audio & video SDK."); } diff --git a/plugins/obs-filters/nvvfx-load.h b/plugins/obs-filters/nvvfx-load.h index 4feb5afc683578..cd1df985b3e26d 100644 --- a/plugins/obs-filters/nvvfx-load.h +++ b/plugins/obs-filters/nvvfx-load.h @@ -39,7 +39,7 @@ extern "C" { #define CUDARTAPI #ifdef LIBNVVFX_ENABLED -#define MIN_VFX_SDK_VERSION 0 << 24 | 7 << 16 | 1 << 8 | 0 << 0 +#define MIN_VFX_SDK_VERSION (0 << 24 | 7 << 16 | 1 << 8 | 0 << 0) static HMODULE nv_videofx = NULL; static HMODULE nv_cvimage = NULL; static HMODULE nv_cudart = NULL; @@ -817,14 +817,25 @@ static inline bool load_nv_vfx_libs() static unsigned int get_lib_version(void) { + static unsigned int version = 0; + static bool version_checked = false; + + if (version_checked) + return version; + + version_checked = true; + char path[MAX_PATH]; nvvfx_get_sdk_path(path, sizeof(path)); SetDllDirectoryA(path); + struct win_version_info nto_ver = {0}; - get_dll_ver(L"NVVideoEffects.dll", &nto_ver); - unsigned int version = nto_ver.major << 24 | nto_ver.minor << 16 | - nto_ver.build << 8 | nto_ver.revis << 0; + if (get_dll_ver(L"NVVideoEffects.dll", &nto_ver)) + version = nto_ver.major << 24 | nto_ver.minor << 16 | + nto_ver.build << 8 | nto_ver.revis << 0; + + SetDllDirectoryA(NULL); return version; } #endif From 4216991413d1df6c4797852378dc1d44ed279aca Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sun, 22 Jan 2023 12:15:32 -0800 Subject: [PATCH 0056/2225] libobs-opengl: Fixup dmabuf queries on X11 Previously we passed the wrong display and formats/modifiers could not be queried. This prevented pipewire sources from negotiating texture sharing on x11. --- libobs-opengl/gl-x11-egl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c index df722f3763acc4..908b3d88230203 100644 --- a/libobs-opengl/gl-x11-egl.c +++ b/libobs-opengl/gl-x11-egl.c @@ -590,7 +590,7 @@ static bool gl_x11_egl_device_query_dmabuf_capabilities( { struct gl_platform *plat = device->plat; - return gl_egl_query_dmabuf_capabilities(plat->xdisplay, dmabuf_flags, + return gl_egl_query_dmabuf_capabilities(plat->edisplay, dmabuf_flags, drm_formats, n_formats); } @@ -601,7 +601,7 @@ static bool gl_x11_egl_device_query_dmabuf_modifiers_for_format( struct gl_platform *plat = device->plat; return gl_egl_query_dmabuf_modifiers_for_format( - plat->xdisplay, drm_format, modifiers, n_modifiers); + plat->edisplay, drm_format, modifiers, n_modifiers); } static const struct gl_winsys_vtable egl_x11_winsys_vtable = { From 7d26721be59d7818721f9f7a2ababb49521e6b15 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 3 Dec 2022 17:59:50 +0100 Subject: [PATCH 0057/2225] frontend-tools: Fix crash on non X11 windowing systems --- .../auto-scene-switcher-nix.cpp | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp b/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp index 2aa0120a6ad02e..e5e5f96afd3dfd 100644 --- a/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp +++ b/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp @@ -46,8 +46,14 @@ static bool ewmhIsSupported() unsigned long num = 0, bytes = 0; unsigned char *data = NULL; Window ewmh_window = 0; + Window root_window = 0; - int status = XGetWindowProperty(display, DefaultRootWindow(display), + root_window = DefaultRootWindow(display); + if (!root_window) { + return false; + } + + int status = XGetWindowProperty(display, root_window, netSupportingWmCheck, 0L, 1L, false, XA_WINDOW, &actualType, &format, &num, &bytes, &data); @@ -97,6 +103,9 @@ static std::vector getTopLevelWindows() for (int i = 0; i < ScreenCount(disp()); ++i) { Window rootWin = RootWindow(disp(), i); + if (!rootWin) { + continue; + } int status = XGetWindowProperty(disp(), rootWin, netClList, 0L, ~0L, false, AnyPropertyType, @@ -119,6 +128,9 @@ static std::vector getTopLevelWindows() static std::string GetWindowTitle(size_t i) { Window w = getTopLevelWindows().at(i); + if (!w) { + return ""; + } std::string windowTitle; char *name; @@ -164,11 +176,17 @@ void GetCurrentWindowTitle(string &title) char *name; Window rootWin = RootWindow(disp(), 0); + if (!rootWin) { + return; + } XGetWindowProperty(disp(), rootWin, active, 0L, ~0L, false, AnyPropertyType, &actualType, &format, &num, &bytes, (uint8_t **)&data); + if (!data[0]) { + return; + } int status = XFetchName(disp(), data[0], &name); if (status >= Success && name != nullptr) { From 3462ea3fdac41b2d544bc9403edac0820d42e911 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 24 Jan 2023 09:12:18 -0800 Subject: [PATCH 0058/2225] obs-ffmpeg: Tell FFmpeg that BGRA uses alpha Prevents alpha from getting dropped with custom encoders. --- plugins/obs-ffmpeg/obs-ffmpeg-output.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c index 3d5a5498d96ae4..9f3a807d0cf7cf 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c @@ -241,8 +241,10 @@ static bool create_video_stream(struct ffmpeg_data *data) closest_format = data->config.format; if (data->vcodec->pix_fmts) { + const int has_alpha = closest_format == AV_PIX_FMT_BGRA; closest_format = avcodec_find_best_pix_fmt_of_list( - data->vcodec->pix_fmts, data->config.format, 0, NULL); + data->vcodec->pix_fmts, closest_format, has_alpha, + NULL); } #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) From 3dcf68f8ed500a23154f502a85caa109afd04d81 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 24 Jan 2023 13:59:51 +0100 Subject: [PATCH 0059/2225] UI: Work around Qt dock restore crash --- UI/auth-restream.cpp | 4 +++- UI/auth-twitch.cpp | 8 ++++++-- UI/auth-youtube.cpp | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/UI/auth-restream.cpp b/UI/auth-restream.cpp index f242deb9e65c41..689ea14e84297e 100644 --- a/UI/auth-restream.cpp +++ b/UI/auth-restream.cpp @@ -200,7 +200,9 @@ void RestreamAuth::LoadUI() main->Config(), service(), "DockState"); QByteArray dockState = QByteArray::fromBase64(QByteArray(dockStateStr)); - main->restoreState(dockState); + + if (main->isVisible() || !main->isMaximized()) + main->restoreState(dockState); } uiLoaded = true; diff --git a/UI/auth-twitch.cpp b/UI/auth-twitch.cpp index af942e9e2f9637..c01eb6e4ea0f5e 100644 --- a/UI/auth-twitch.cpp +++ b/UI/auth-twitch.cpp @@ -276,7 +276,9 @@ void TwitchAuth::LoadUI() main->Config(), service(), "DockState"); QByteArray dockState = QByteArray::fromBase64(QByteArray(dockStateStr)); - main->restoreState(dockState); + + if (main->isVisible() || !main->isMaximized()) + main->restoreState(dockState); } TryLoadSecondaryUIPanes(); @@ -405,7 +407,9 @@ void TwitchAuth::LoadSecondaryUIPanes() main->Config(), service(), "DockState"); QByteArray dockState = QByteArray::fromBase64(QByteArray(dockStateStr)); - main->restoreState(dockState); + + if (main->isVisible() || !main->isMaximized()) + main->restoreState(dockState); } } diff --git a/UI/auth-youtube.cpp b/UI/auth-youtube.cpp index 3a8cc856ee87c8..f2ee5e42b81e30 100644 --- a/UI/auth-youtube.cpp +++ b/UI/auth-youtube.cpp @@ -164,7 +164,9 @@ void YoutubeAuth::LoadUI() main->Config(), service(), "DockState"); QByteArray dockState = QByteArray::fromBase64(QByteArray(dockStateStr)); - main->restoreState(dockState); + + if (main->isVisible() || !main->isMaximized()) + main->restoreState(dockState); } #endif From 2e7f7acfebb5de1eb1a10b18a31b369142c702c7 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 24 Jan 2023 08:22:40 -0800 Subject: [PATCH 0060/2225] libobs-d3d11: Log monitor color depth --- libobs-d3d11/d3d11-subsystem.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index 271d9998e8ac59..4028bcc5a673aa 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -1224,6 +1224,7 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) target.monitorFriendlyDeviceName[0] = 0; } + UINT bits_per_color = 8; DXGI_COLOR_SPACE_TYPE type = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; FLOAT min_luminance = 0.f; @@ -1231,6 +1232,7 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) FLOAT max_full_frame_luminance = 0.f; DXGI_OUTPUT_DESC1 desc1; if (GetOutputDesc1(output, &desc1)) { + bits_per_color = desc1.BitsPerColor; type = desc1.ColorSpace; min_luminance = desc1.MinLuminance; max_luminance = desc1.MaxLuminance; @@ -1260,13 +1262,14 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) "\t size={%d, %d}\n" "\t attached=%s\n" "\t refresh=%u\n" + "\t bits_per_color=%u\n" "\t space=%s\n" "\t sdr_white_nits=%lu\n" "\t nit_range=[min=%f, max=%f, max_full_frame=%f]", i, target.monitorFriendlyDeviceName, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, - desc.AttachedToDesktop ? "true" : "false", refresh, space, - nits, min_luminance, max_luminance, + desc.AttachedToDesktop ? "true" : "false", refresh, + bits_per_color, space, nits, min_luminance, max_luminance, max_full_frame_luminance); } } From 792f8473ee2799bae64b1536d58cd52c855b12d6 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 24 Jan 2023 08:12:47 -0800 Subject: [PATCH 0061/2225] libobs: Fix SDR async video on non-SDR targets Bug was seen when projecting SDR video capture on WCG displays. --- libobs/obs-source.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 30212699fa4aae..39c555020dc84c 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -2478,6 +2478,8 @@ static inline void obs_source_render_async_video(obs_source_t *source) bool nonlinear_alpha = false; switch (source_space) { case GS_CS_SRGB: + linear_srgb = linear_srgb || + (current_space != GS_CS_SRGB); nonlinear_alpha = linear_srgb && !source->async_linear_alpha; switch (current_space) { @@ -2492,7 +2494,6 @@ static inline void obs_source_render_async_video(obs_source_t *source) nonlinear_alpha ? "DrawNonlinearAlphaMultiply" : "DrawMultiply"; - linear_srgb = true; multiplier = obs_get_video_sdr_white_level() / 80.0f; } From ffd7202168faf5b0d172344b7d6d2a8712ee6322 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 22 Jan 2023 00:57:49 +0100 Subject: [PATCH 0062/2225] updater: Add additional status messages --- UI/win-update/updater/updater.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 61132f4d4409ae..795fd5ca77a05e 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -1716,6 +1716,7 @@ static bool Update(wchar_t *cmdLine) }; if (!bIsPortable) { + Status(L"Installing Virtual Camera..."); wchar_t regsvr[MAX_PATH]; wchar_t src[MAX_PATH]; wchar_t tmp[MAX_PATH]; @@ -1749,11 +1750,13 @@ static bool Update(wchar_t *cmdLine) /* ------------------------------------- * * Update hook files and vulkan registry */ + Status(L"Updating Game Capture hooks..."); UpdateHookFiles(); /* ------------------------------------- * * Finish */ + Status(L"Cleaning up..."); /* If we get here, all updates installed successfully so we can purge * the old versions */ for (update_t &update : updates) { From 0b30ff1debb24149d0d11079e6b92d675a00c51f Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 17 Jan 2023 21:39:40 -0800 Subject: [PATCH 0063/2225] win-capture: Support EnumDisplayDevices failure Seeing EnumDisplayDevices fail in the wild, so use GetMonitorInfo name when the persistent name is unavailable. --- .../win-capture/duplicator-monitor-capture.c | 106 ++++++++++++------ 1 file changed, 70 insertions(+), 36 deletions(-) diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index ccb06ffe1e0c44..64fb0b2b7b389d 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -94,7 +94,7 @@ struct duplicator_capture { struct winrt_capture *capture_winrt; }; -struct wgc_monitor_info { +struct duplicator_monitor_info { char device_id[128]; char name[64]; RECT rect; @@ -189,7 +189,8 @@ static BOOL CALLBACK enum_monitor(HMONITOR handle, HDC hdc, LPRECT rect, { UNUSED_PARAMETER(hdc); - struct wgc_monitor_info *monitor = (struct wgc_monitor_info *)param; + struct duplicator_monitor_info *monitor = + (struct duplicator_monitor_info *)param; bool match = false; @@ -200,8 +201,8 @@ static BOOL CALLBACK enum_monitor(HMONITOR handle, HDC hdc, LPRECT rect, device.cb = sizeof(device); if (EnumDisplayDevicesA(mi.szDevice, 0, &device, EDD_GET_DEVICE_INTERFACE_NAME)) { - const bool match = strcmp(monitor->device_id, - device.DeviceID) == 0; + match = strcmp(monitor->device_id, device.DeviceID) == + 0; if (match) { monitor->rect = *rect; monitor->handle = handle; @@ -214,6 +215,31 @@ static BOOL CALLBACK enum_monitor(HMONITOR handle, HDC hdc, LPRECT rect, return !match; } +static BOOL CALLBACK enum_monitor_fallback(HMONITOR handle, HDC hdc, + LPRECT rect, LPARAM param) +{ + UNUSED_PARAMETER(hdc); + + struct duplicator_monitor_info *monitor = + (struct duplicator_monitor_info *)param; + + bool match = false; + + MONITORINFOEXA mi; + mi.cbSize = sizeof(mi); + if (GetMonitorInfoA(handle, (LPMONITORINFO)&mi)) { + match = strcmp(monitor->device_id, mi.szDevice) == 0; + if (match) { + monitor->rect = *rect; + monitor->handle = handle; + GetMonitorName(handle, monitor->name, + _countof(monitor->name)); + } + } + + return !match; +} + static void log_settings(struct duplicator_capture *capture, const char *monitor, LONG width, LONG height) { @@ -259,15 +285,26 @@ choose_method(enum display_capture_method method, bool wgc_supported, extern bool wgc_supported; +static struct duplicator_monitor_info find_monitor(const char *monitor_id) +{ + struct duplicator_monitor_info monitor = {0}; + strcpy_s(monitor.device_id, _countof(monitor.device_id), monitor_id); + EnumDisplayMonitors(NULL, NULL, &enum_monitor, (LPARAM)&monitor); + if (monitor.handle == NULL) { + EnumDisplayMonitors(NULL, NULL, &enum_monitor_fallback, + (LPARAM)&monitor); + } + + return monitor; +} + static inline void update_settings(struct duplicator_capture *capture, obs_data_t *settings) { pthread_mutex_lock(&capture->update_mutex); - struct wgc_monitor_info monitor = {0}; - strcpy_s(monitor.device_id, _countof(monitor.device_id), - obs_data_get_string(settings, "monitor_id")); - EnumDisplayMonitors(NULL, NULL, enum_monitor, (LPARAM)&monitor); + struct duplicator_monitor_info monitor = + find_monitor(obs_data_get_string(settings, "monitor_id")); capture->method = choose_method((int)obs_data_get_int(settings, "method"), @@ -467,11 +504,7 @@ static void free_capture_data(struct duplicator_capture *capture) static void update_monitor_handle(struct duplicator_capture *capture) { - struct wgc_monitor_info monitor = {0}; - strcpy_s(monitor.device_id, _countof(monitor.device_id), - capture->monitor_id); - EnumDisplayMonitors(NULL, NULL, enum_monitor, (LPARAM)&monitor); - capture->handle = monitor.handle; + capture->handle = find_monitor(capture->monitor_id).handle; } static void duplicator_capture_tick(void *data, float seconds) @@ -733,40 +766,41 @@ static BOOL CALLBACK enum_monitor_props(HMONITOR handle, HDC hdc, LPRECT rect, UNUSED_PARAMETER(hdc); UNUSED_PARAMETER(rect); + char monitor_name[64]; + GetMonitorName(handle, monitor_name, sizeof(monitor_name)); + MONITORINFOEXA mi; mi.cbSize = sizeof(mi); if (GetMonitorInfoA(handle, (LPMONITORINFO)&mi)) { + obs_property_t *monitor_list = (obs_property_t *)param; + struct dstr monitor_desc = {0}; + dstr_printf(&monitor_desc, "%s: %dx%d @ %d,%d", monitor_name, + mi.rcMonitor.right - mi.rcMonitor.left, + mi.rcMonitor.bottom - mi.rcMonitor.top, + mi.rcMonitor.left, mi.rcMonitor.top); + if (mi.dwFlags == MONITORINFOF_PRIMARY) + dstr_catf(&monitor_desc, " (%s)", TEXT_PRIMARY_MONITOR); + DISPLAY_DEVICEA device; device.cb = sizeof(device); if (EnumDisplayDevicesA(mi.szDevice, 0, &device, EDD_GET_DEVICE_INTERFACE_NAME)) { - obs_property_t *monitor_list = (obs_property_t *)param; - struct dstr monitor_desc = {0}; - struct dstr resolution = {0}; - - dstr_catf(&resolution, "%dx%d @ %d,%d", - mi.rcMonitor.right - mi.rcMonitor.left, - mi.rcMonitor.bottom - mi.rcMonitor.top, - mi.rcMonitor.left, mi.rcMonitor.top); - - char monitor_name[64]; - GetMonitorName(handle, monitor_name, - sizeof(monitor_name)); - dstr_catf(&monitor_desc, "%s: %s", monitor_name, - resolution.array); - - if (mi.dwFlags == MONITORINFOF_PRIMARY) { - dstr_catf(&monitor_desc, " (%s)", - TEXT_PRIMARY_MONITOR); - } - obs_property_list_add_string(monitor_list, monitor_desc.array, device.DeviceID); - - dstr_free(&monitor_desc); - dstr_free(&resolution); + } else { + blog(LOG_WARNING, + "[duplicator-monitor-capture] EnumDisplayDevices failed for monitor (%s), falling back to szDevice", + monitor_name); + obs_property_list_add_string( + monitor_list, monitor_desc.array, mi.szDevice); } + + dstr_free(&monitor_desc); + } else { + blog(LOG_WARNING, + "[duplicator-monitor-capture] GetMonitorInfo failed for monitor: %s", + monitor_name); } return TRUE; From 778cf5a96ab7bb268240af7bc448eee41006da97 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 16 Jan 2023 02:29:10 +0100 Subject: [PATCH 0064/2225] updater: Pass AppData path to elevated process --- UI/win-update/updater/updater.cpp | 53 +++++++++++++++++-------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 795fd5ca77a05e..9b78b2812bc0af 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -1352,6 +1352,7 @@ static bool Update(wchar_t *cmdLine) bool bIsPortable = false; wstring branch = L"stable"; + wstring appdata; if (cmdLine[0]) { int argc; @@ -1366,6 +1367,9 @@ static bool Update(wchar_t *cmdLine) } else if (wcsncmp(argv[i], L"--branch=", 9) == 0) { branch = argv[i] + 9; + } else if (wcsncmp(argv[i], L"--appdata=", + 10) == 0) { + appdata = argv[i] + 10; } else if (wcscmp(argv[i], L"--portable") == 0) { bIsPortable = true; @@ -1385,18 +1389,16 @@ static bool Update(wchar_t *cmdLine) GetCurrentDirectory(_countof(lpAppDataPath), lpAppDataPath); StringCbCat(lpAppDataPath, sizeof(lpAppDataPath), L"\\config"); } else { - DWORD ret; - ret = GetEnvironmentVariable(L"OBS_USER_APPDATA_PATH", - lpAppDataPath, - _countof(lpAppDataPath)); - - if (ret >= _countof(lpAppDataPath)) { - Status(L"Update failed: Could not determine AppData " - L"location"); - return false; - } - - if (!ret) { + if (!appdata.empty()) { + HRESULT hr = StringCbCopy(lpAppDataPath, + sizeof(lpAppDataPath), + appdata.c_str()); + if (hr != S_OK) { + Status(L"Update failed: Could not determine AppData " + L"location"); + return false; + } + } else { CoTaskMemPtr pOut; HRESULT hr = SHGetKnownFolderPath( FOLDERID_RoamingAppData, KF_FLAG_DEFAULT, @@ -1916,13 +1918,26 @@ static int RestartAsAdmin(LPCWSTR lpCmdLine, LPCWSTR cwd) return 0; } + /* If the admin is a different user, add the path to the user's + * AppData to the command line so we can load the correct manifest. */ + wstring elevatedCmdLine(lpCmdLine); + CoTaskMemPtr pOut; + HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, + KF_FLAG_DEFAULT, nullptr, &pOut); + if (hr == S_OK) { + elevatedCmdLine += L" \"--appdata="; + elevatedCmdLine += pOut; + elevatedCmdLine += L"\""; + } + SHELLEXECUTEINFO shExInfo = {0}; shExInfo.cbSize = sizeof(shExInfo); shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS; shExInfo.hwnd = 0; - shExInfo.lpVerb = L"runas"; /* Operation to perform */ - shExInfo.lpFile = myPath; /* Application to start */ - shExInfo.lpParameters = lpCmdLine; /* Additional parameters */ + shExInfo.lpVerb = L"runas"; /* Operation to perform */ + shExInfo.lpFile = myPath; /* Application to start */ + shExInfo.lpParameters = + elevatedCmdLine.c_str(); /* Additional parameters */ shExInfo.lpDirectory = cwd; shExInfo.nShow = SW_NORMAL; shExInfo.hInstApp = 0; @@ -1931,14 +1946,6 @@ static int RestartAsAdmin(LPCWSTR lpCmdLine, LPCWSTR cwd) * windows :( */ AllowSetForegroundWindow(ASFW_ANY); - /* if the admin is a different user, save the path to the user's - * appdata so we can load the correct manifest */ - CoTaskMemPtr pOut; - HRESULT hr = SHGetKnownFolderPath(FOLDERID_RoamingAppData, - KF_FLAG_DEFAULT, nullptr, &pOut); - if (hr == S_OK) - SetEnvironmentVariable(L"OBS_USER_APPDATA_PATH", pOut); - if (ShellExecuteEx(&shExInfo)) { DWORD exitCode; From ee144377dc50b5d9f1fdf0598cea56f7e34eab9b Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 15 Jan 2023 17:08:39 +0100 Subject: [PATCH 0065/2225] cmake,obs-ffmpeg: Refactor Libva finder This refactor adds Libva DRM, required for obs-ffmpeg --- cmake/Modules/FindLibva.cmake | 48 ++++++++++++++++++++++++------- plugins/obs-ffmpeg/CMakeLists.txt | 2 +- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/cmake/Modules/FindLibva.cmake b/cmake/Modules/FindLibva.cmake index afba96b5d992b6..0e49cb42e52029 100644 --- a/cmake/Modules/FindLibva.cmake +++ b/cmake/Modules/FindLibva.cmake @@ -1,9 +1,10 @@ -# * Try to find Libva, once done this will define # -# * LIBVA_FOUND - system has Libva -# * LIBVA_INCLUDE_DIRS - the Libva include directory -# * LIBVA_LIBRARIES - the libraries needed to use Libva -# * LIBVA_DEFINITIONS - Compiler switches required for using Libva +# This module defines the following variables: +# +# * LIBVA_FOUND - The component was found +# * LIBVA_INCLUDE_DIRS - The component include directory +# * LIBVA_LIBRARIES - The component library Libva +# * LIBVA_DRM_LIBRARIES - The component library Libva DRM # Use pkg-config to get the directories and then use these values in the # find_path() and find_library() calls @@ -11,14 +12,14 @@ find_package(PkgConfig QUIET) if(PKG_CONFIG_FOUND) pkg_check_modules(_LIBVA libva) + pkg_check_modules(_LIBVA_DRM libva-drm) endif() find_path( LIBVA_INCLUDE_DIR - NAMES va.h + NAMES va/va.h va/va_drm.h HINTS ${_LIBVA_INCLUDE_DIRS} - PATHS /usr/include /usr/local/include /opt/local/include - PATH_SUFFIXES va/) + PATHS /usr/include /usr/local/include /opt/local/include) find_library( LIBVA_LIB @@ -26,14 +27,21 @@ find_library( HINTS ${_LIBVA_LIBRARY_DIRS} PATHS /usr/lib /usr/local/lib /opt/local/lib) +find_library( + LIBVA_DRM_LIB + NAMES ${_LIBVA_DRM_LIBRARIES} libva-drm + HINTS ${_LIBVA_DRM_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib /opt/local/lib) + include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Libva REQUIRED_VARS LIBVA_LIB - LIBVA_INCLUDE_DIR) -mark_as_advanced(LIBVA_INCLUDE_DIR LIBVA_LIB) +find_package_handle_standard_args(Libva REQUIRED_VARS LIBVA_INCLUDE_DIR + LIBVA_LIB LIBVA_DRM_LIB) +mark_as_advanced(LIBVA_INCLUDE_DIR LIBVA_LIB LIBVA_DRM_LIB) if(LIBVA_FOUND) set(LIBVA_INCLUDE_DIRS ${LIBVA_INCLUDE_DIR}) set(LIBVA_LIBRARIES ${LIBVA_LIB}) + set(LIBVA_DRM_LIBRARIES ${LIBVA_DRM_LIB}) if(NOT TARGET Libva::va) if(IS_ABSOLUTE "${LIBVA_LIBRARIES}") @@ -45,5 +53,23 @@ if(LIBVA_FOUND) set_target_properties(Libva::va PROPERTIES IMPORTED_LIBNAME "${LIBVA_LIBRARIES}") endif() + + set_target_properties(Libva::va PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${LIBVA_INCLUDE_DIRS}") + endif() + + if(NOT TARGET Libva::drm) + if(IS_ABSOLUTE "${LIBVA_DRM_LIBRARIES}") + add_library(Libva::drm UNKNOWN IMPORTED) + set_target_properties(Libva::drm PROPERTIES IMPORTED_LOCATION + "${LIBVA_DRM_LIBRARIES}") + else() + add_library(Libva::drm INTERFACE IMPORTED) + set_target_properties(Libva::drm PROPERTIES IMPORTED_LIBNAME + "${LIBVA_DRM_LIBRARIES}") + endif() + + set_target_properties(Libva::drm PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${LIBVA_INCLUDE_DIRS}") endif() endif() diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index 491dc6179d7c79..ea92d3f9dfcd6a 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -118,7 +118,7 @@ elseif(OS_POSIX AND NOT OS_MACOS) find_package(Libpci REQUIRED) target_sources(obs-ffmpeg PRIVATE obs-ffmpeg-vaapi.c vaapi-utils.c vaapi-utils.h) - target_link_libraries(obs-ffmpeg PRIVATE Libva::va LIBPCI::LIBPCI) + target_link_libraries(obs-ffmpeg PRIVATE Libva::va Libva::drm LIBPCI::LIBPCI) endif() setup_plugin_target(obs-ffmpeg) From 5810571e53238d11aa3beda33a770fe44e98749a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Sat, 21 Jan 2023 05:00:58 +0100 Subject: [PATCH 0066/2225] libobs: Close display when destroying X11 hotkey platform Currently, the X11 display is leaked when the X11 hotkey platform is destroyed. Fix that by calling XCloseDisplay() to free it. Fixes: bcb04bb80010fb ("libobs: Open a separate X11 connection for hotkeys") --- libobs/obs-nix-x11.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libobs/obs-nix-x11.c b/libobs/obs-nix-x11.c index ce571b977b7ac6..a60048a5f515b5 100644 --- a/libobs/obs-nix-x11.c +++ b/libobs/obs-nix-x11.c @@ -878,6 +878,7 @@ static void obs_nix_x11_hotkeys_platform_free(struct obs_core_hotkeys *hotkeys) da_free(context->keycodes[i].list); bfree(context->keysyms); + XCloseDisplay(context->display); bfree(context); hotkeys->platform_context = NULL; From dee7ef85122fe988bfc8059a3fa5305109bc6999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Sat, 21 Jan 2023 05:07:16 +0100 Subject: [PATCH 0067/2225] libobs-opengl: Do not close X11 platform display on error The platform display is not owned by libobs, it should not be closed. Doing so results in heap use-after-frees when Qt components try to use it while trying to show a message box about the failure: info: Initializing OpenGL... error: Failed to initialize EGL: EGL_BAD_ACCESS error: Failed to create context! error: device_create (GL) failed error: Failed to initialize video. Your GPU may not be supported, or your graphics drivers may need to be updated. ================================================================= ==2320345==ERROR: AddressSanitizer: heap-use-after-free on address 0x621000018668 at pc 0x7fcb75e20d6e bp 0x7ffe88d0e910 sp 0x7ffe88d0e900 READ of size 8 at 0x621000018668 thread T0 0 0x7fcb75e20d6d in XInternAtom /.../libx11/src/IntAtom.c:175 1 0x7fcb6bf5edfd in Kvantum::ThemeConfig::getCompositeSpec() 2 0x7fcb6bf0eb19 in Kvantum::Style::setSurfaceFormat(QWidget*) const 3 0x7fcb6bf11bae in Kvantum::Style::styleHint(QStyle::StyleHint, QStyleOption const*, QWidget const*, QStyleHintReturn*) const 4 0x5585cbce70b8 in OBSIgnoreWheelProxyStyle::styleHint(QStyle::StyleHint, QStyleOption const*, QWidget const*, QStyleHintReturn*) const /.../obs-studio/UI/obs-proxy-style.cpp:88 5 0x7fcb85826515 (/usr/lib/libQt6Widgets.so.6+0x226515) 6 0x7fcb859dbf1d (/usr/lib/libQt6Widgets.so.6+0x3dbf1d) 7 0x7fcb859dc5f0 in QMessageBox::QMessageBox(...) 8 0x7fcb859dc6b1 (/usr/lib/libQt6Widgets.so.6+0x3dc6b1) 9 0x5585cbd2fb31 in OBSErrorBoxva /.../obs-studio/UI/qt-wrappers.cpp:48 10 0x5585cbd2fd34 in OBSErrorBox(QWidget*, char const*, ...) /.../obs-studio/UI/qt-wrappers.cpp:55 11 0x5585cbcc3f36 in run_program /.../obs-studio/UI/obs-app.cpp:2475 12 0x5585cbcc52b4 in main /.../obs-studio/UI/obs-app.cpp:3358 13 0x7fcb82e3c28f (/usr/lib/libc.so.6+0x2328f) 14 0x7fcb82e3c349 in __libc_start_main 15 0x5585cbbd2f54 in _start Fixes: 137966e01fffe0 ("libobs-opengl: Try to use the platform display if available") --- libobs-opengl/gl-x11-egl.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c index 908b3d88230203..fd5c1f3f20d54f 100644 --- a/libobs-opengl/gl-x11-egl.c +++ b/libobs-opengl/gl-x11-egl.c @@ -82,6 +82,7 @@ struct gl_platform { EGLConfig config; EGLContext context; EGLSurface pbuffer; + bool close_xdisplay; }; /* The following utility function is copied verbatim from GLX code. */ @@ -269,15 +270,19 @@ static void gl_x11_egl_windowinfo_destroy(struct gl_windowinfo *info) bfree(info); } -static Display *open_windowless_display(Display *platform_display) +static Display *open_windowless_display(bool *should_close) { + Display *platform_display = obs_get_nix_platform_display(); Display *display; xcb_connection_t *xcb_conn; - if (platform_display) + if (platform_display) { display = platform_display; - else + *should_close = false; + } else { display = XOpenDisplay(NULL); + *should_close = true; + } if (!display) { blog(LOG_ERROR, "Unable to open new X connection!"); @@ -298,7 +303,8 @@ static Display *open_windowless_display(Display *platform_display) return display; error: - XCloseDisplay(display); + if (*should_close) + XCloseDisplay(display); return NULL; } @@ -325,8 +331,7 @@ static struct gl_platform *gl_x11_egl_platform_create(gs_device_t *device, For an explanation see here: http://xcb.freedesktop.org/MixingCalls/ Essentially, EGL requires Xlib. Everything else we use xcb. */ struct gl_platform *plat = bmalloc(sizeof(struct gl_platform)); - Display *platform_display = obs_get_nix_platform_display(); - Display *display = open_windowless_display(platform_display); + Display *display = open_windowless_display(&plat->close_xdisplay); if (!display) { goto fail_display_open; @@ -363,7 +368,8 @@ static struct gl_platform *gl_x11_egl_platform_create(gs_device_t *device, gl_context_destroy(plat); fail_context_create: fail_load_gl: - XCloseDisplay(display); + if (plat->close_xdisplay) + XCloseDisplay(plat->xdisplay); fail_display_open: bfree(plat); plat = NULL; From 8e96d47cd3d94213da52277678d844ef616d08a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Sat, 21 Jan 2023 05:13:47 +0100 Subject: [PATCH 0068/2225] libobs-opengl: Close display when destroying X11/EGL platform Currently, the X11 display may be leaked when the X11/EGL platform is destroyed. Fix that by calling XCloseDisplay() to free it. Fixes: 2fd8a6df557766 ("libobs-opengl: Introduce the X11/EGL winsys") --- libobs-opengl/gl-x11-egl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libobs-opengl/gl-x11-egl.c b/libobs-opengl/gl-x11-egl.c index fd5c1f3f20d54f..56086a997bcf79 100644 --- a/libobs-opengl/gl-x11-egl.c +++ b/libobs-opengl/gl-x11-egl.c @@ -385,6 +385,8 @@ static void gl_x11_egl_platform_destroy(struct gl_platform *plat) gl_context_destroy(plat); eglTerminate(plat->edisplay); + if (plat->close_xdisplay) + XCloseDisplay(plat->xdisplay); bfree(plat); } From e0a4d8628d287217cebc3d05d2077e1f0709b450 Mon Sep 17 00:00:00 2001 From: columbarius Date: Sat, 18 Sep 2021 23:42:38 +0200 Subject: [PATCH 0069/2225] linux-pipewire: Reject invalid buffers PipeWire supports two flags to signal an invalid buffer: SPA_META_HEADER_FLAG_CORRUPTED signals that the whole buffer is invalid and should not be used SPA_CHUNK_FLAG_CORRUPTED signals that one single buffer plane is invalid Skipping a buffer because of size 0 was moved to only the SHM case. For DMA-BUFs the size of a single plane is not relevant and should be ignored [1]. Compatibility note: GNOME pre 43 sets the chunk size to 0 when a buffer copy failed. Luckily GNOME doesn't use the META_Header and thus we can detect if we should use the new or old style of invalid buffer detection. This workaround should be dropped when reasonable. [1] https://docs.pipewire.org/page_dma_buf.html --- plugins/linux-pipewire/pipewire.c | 47 ++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 7020dff7c8c128..e2bbd600598d6d 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -454,11 +454,12 @@ static void on_process_cb(void *user_data) obs_pipewire_data *obs_pw = user_data; struct spa_meta_cursor *cursor; uint32_t drm_format; + struct spa_meta_header *header; struct spa_meta_region *region; struct spa_buffer *buffer; struct pw_buffer *b; bool swap_red_blue = false; - bool has_buffer; + bool has_buffer = true; /* Find the most recent buffer */ b = NULL; @@ -478,10 +479,19 @@ static void on_process_cb(void *user_data) } buffer = b->buffer; - has_buffer = buffer->datas[0].chunk->size != 0; + header = spa_buffer_find_meta_data(buffer, SPA_META_Header, + sizeof(*header)); + if (header && (header->flags & SPA_META_HEADER_FLAG_CORRUPTED) > 0) { + blog(LOG_ERROR, "[pipewire] buffer is corrupt"); + pw_stream_queue_buffer(obs_pw->stream, b); + return; + } else if (!header) { + has_buffer = buffer->datas[0].chunk->size != 0; + } obs_enter_graphics(); + // Workaround for mutter behaviour pre GNOME 43 if (!has_buffer) goto read_metadata; @@ -492,6 +502,7 @@ static void on_process_cb(void *user_data) uint64_t modifiers[planes]; int fds[planes]; bool use_modifiers; + bool corrupt = false; blog(LOG_DEBUG, "[pipewire] DMA-BUF info: fd:%ld, stride:%d, offset:%u, size:%dx%d", @@ -514,6 +525,14 @@ static void on_process_cb(void *user_data) offsets[plane] = buffer->datas[plane].chunk->offset; strides[plane] = buffer->datas[plane].chunk->stride; modifiers[plane] = obs_pw->format.info.raw.modifier; + corrupt |= (buffer->datas[plane].chunk->flags & + SPA_CHUNK_FLAG_CORRUPTED) > 0; + } + + if (corrupt) { + blog(LOG_ERROR, + "[pipewire] buffer contains corrupted data"); + goto read_metadata; } g_clear_pointer(&obs_pw->texture, gs_texture_destroy); @@ -547,6 +566,19 @@ static void on_process_cb(void *user_data) goto read_metadata; } + if ((buffer->datas[0].chunk->flags & SPA_CHUNK_FLAG_CORRUPTED) > + 0) { + blog(LOG_ERROR, + "[pipewire] buffer contains corrupted data"); + goto read_metadata; + } + + if (buffer->datas[0].chunk->size == 0) { + blog(LOG_ERROR, + "[pipewire] buffer contains empty data"); + goto read_metadata; + } + g_clear_pointer(&obs_pw->texture, gs_texture_destroy); obs_pw->texture = gs_texture_create( obs_pw->format.info.raw.size.width, @@ -626,7 +658,7 @@ static void on_param_changed_cb(void *user_data, uint32_t id, { obs_pipewire_data *obs_pw = user_data; struct spa_pod_builder pod_builder; - const struct spa_pod *params[3]; + const struct spa_pod *params[4]; uint32_t buffer_types; uint8_t params_buffer[1024]; int result; @@ -695,7 +727,14 @@ static void on_param_changed_cb(void *user_data, uint32_t id, &pod_builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, SPA_PARAM_BUFFERS_dataType, SPA_POD_Int(buffer_types)); - pw_stream_update_params(obs_pw->stream, params, 3); + /* Meta header */ + params[3] = spa_pod_builder_add_object( + &pod_builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, + SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Header), + SPA_PARAM_META_size, + SPA_POD_Int(sizeof(struct spa_meta_header))); + + pw_stream_update_params(obs_pw->stream, params, 4); obs_pw->negotiated = true; } From f625bb579f34250a237e0ca9cfdc6f60bb7c5469 Mon Sep 17 00:00:00 2001 From: pkv Date: Mon, 23 Jan 2023 14:30:38 +0100 Subject: [PATCH 0070/2225] obs-filters: Fix expander and upward compressor above threshold Fixes behaviours above threshold for expander and upward compressor. Fixes issues #8052 & #8030 . Signed-off-by: pkv --- plugins/obs-filters/expander-filter.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index 157cf564095380..aef9a99729fd9e 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -379,14 +379,11 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, /* --------------------------------- */ /* output */ - float min_val = - is_upwcomp ? fminf(diff, threshold - mul_to_db(samples[idx])) - : 0.0f; - gain = db_to_mul(fminf(min_val, gain_db[idx])); - - // above threshold, don't process expander nor upward compressor - if (threshold - env_db <= 0) - gain = 1.0f; + if (!is_upwcomp) { + gain = db_to_mul(fminf(0, gain_db[idx])); + } else { + gain = db_to_mul(gain_db[idx]); + } samples[idx] *= gain * output_gain; } From 50db09760c1a130730da564c8eea505b25ca9810 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 19:04:14 +0900 Subject: [PATCH 0071/2225] obs-filters: Make continuous gain on upward compressor The upward compressor has a -60 dB threshold to stop increasing the gain. At the threshold, the gain was not continuous, which is not ideal. Co-authored-by: pkv Signed-off-by: pkv --- plugins/obs-filters/expander-filter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index aef9a99729fd9e..d9b7f06870841d 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -351,8 +351,8 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, float env_db = mul_to_db(env_buf[idx]); float diff = threshold - env_db; - if (is_upwcomp && env_db <= -60.0f) - diff = 0.0f; + if (is_upwcomp && env_db <= (threshold - 60.0f) / 2) + diff = env_db + 60.0f; float gain = diff > 0.0f ? fmaxf(slope * diff, -60.0f) : 0.0f; float prev_gain = gain_db[idx - 1]; From 10e6d0fbd0515b7174ef61adc6188c468545724d Mon Sep 17 00:00:00 2001 From: pkv Date: Sat, 21 Jan 2023 18:53:05 +0100 Subject: [PATCH 0072/2225] obs-filters: Improve upward compressor with soft knee This adds a knee setting to the upward compressor. Signed-off-by: pkv --- plugins/obs-filters/data/locale/en-US.ini | 1 + plugins/obs-filters/expander-filter.c | 57 +++++++++++++++-------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/plugins/obs-filters/data/locale/en-US.ini b/plugins/obs-filters/data/locale/en-US.ini index 99fb894ca7cde0..a3def5ff546ba1 100644 --- a/plugins/obs-filters/data/locale/en-US.ini +++ b/plugins/obs-filters/data/locale/en-US.ini @@ -115,6 +115,7 @@ Expander.None="None" Expander.Presets="Presets" Expander.Presets.Expander="Expander" Expander.Presets.Gate="Gate" +Expander.Knee.Width="Knee Width" LumaKeyFilter="Luma Key" Luma.LumaMax="Luma Max" Luma.LumaMin="Luma Min" diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index d9b7f06870841d..be3ca9fbd6df7e 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -34,6 +34,7 @@ #define S_OUTPUT_GAIN "output_gain" #define S_DETECTOR "detector" #define S_PRESETS "presets" +#define S_KNEE "knee_width" #define MT_ obs_module_text #define TEXT_RATIO MT_("expander.Ratio") @@ -48,6 +49,7 @@ #define TEXT_PRESETS MT_("expander.Presets") #define TEXT_PRESETS_EXP MT_("expander.Presets.Expander") #define TEXT_PRESETS_GATE MT_("expander.Presets.Gate") +#define TEXT_KNEE MT_("expander.Knee.Width") #define MIN_RATIO 1.0f #define MAX_RATIO 20.0f @@ -95,6 +97,7 @@ struct expander_data { float *env_in; size_t env_in_len; bool is_upwcomp; + float knee; }; enum { @@ -179,6 +182,7 @@ static void upward_compressor_defaults(obs_data_t *s) obs_data_set_default_int(s, S_RELEASE_TIME, 50); obs_data_set_default_double(s, S_OUTPUT_GAIN, 0.0); obs_data_set_default_string(s, S_DETECTOR, "RMS"); + obs_data_set_default_int(s, S_KNEE, 10); } static void expander_update(void *data, obs_data_t *s) @@ -208,6 +212,8 @@ static void expander_update(void *data, obs_data_t *s) (float)obs_data_get_int(s, S_RELEASE_TIME); const float output_gain_db = (float)obs_data_get_double(s, S_OUTPUT_GAIN); + const float knee = cd->is_upwcomp ? (float)obs_data_get_int(s, S_KNEE) + : 0.0f; cd->ratio = (float)obs_data_get_double(s, S_RATIO); @@ -220,6 +226,7 @@ static void expander_update(void *data, obs_data_t *s) cd->num_channels = num_channels; cd->sample_rate = sample_rate; cd->slope = 1.0f - cd->ratio; + cd->knee = knee; const char *detect_mode = obs_data_get_string(s, S_DETECTOR); if (strcmp(detect_mode, "RMS") == 0) @@ -343,7 +350,8 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, float channel_gain, float threshold, float slope, float attack_gain, float inv_attack_gain, float release_gain, - float inv_release_gain, float output_gain) + float inv_release_gain, float output_gain, + float knee) { /* --------------------------------- */ /* gain stage of expansion */ @@ -354,27 +362,33 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, if (is_upwcomp && env_db <= (threshold - 60.0f) / 2) diff = env_db + 60.0f; - float gain = diff > 0.0f ? fmaxf(slope * diff, -60.0f) : 0.0f; - float prev_gain = gain_db[idx - 1]; + float gain = 0.0f; + // Note that the gain is always >= 0 for the upward compressor + // but is always <=0 for the expander. + if (is_upwcomp) { + // gain above knee (included for clarity): + if (env_db >= threshold + knee / 2) + gain = 0.0f; + // gain below knee: + if (threshold - knee / 2 >= env_db) + gain = slope * diff; + // gain in knee: + if (env_db > threshold - knee / 2 && + threshold + knee / 2 > env_db) + gain = slope * powf(diff + knee / 2, 2) / (2.0f * knee); + } else { + gain = diff > 0.0f ? fmaxf(slope * diff, -60.0f) : 0.0f; + } + float prev_gain = idx > 0 ? gain_db[idx - 1] : channel_gain; /* --------------------------------- */ /* ballistics (attack/release) */ - if (idx > 0) { - if (gain > prev_gain) - gain_db[idx] = attack_gain * prev_gain + - inv_attack_gain * gain; - else - gain_db[idx] = release_gain * prev_gain + - inv_release_gain * gain; - } else { - if (gain > channel_gain) - gain_db[idx] = attack_gain * channel_gain + - inv_attack_gain * gain; - else - gain_db[idx] = release_gain * channel_gain + - inv_release_gain * gain; - } + if (gain > prev_gain) + gain_db[idx] = attack_gain * prev_gain + inv_attack_gain * gain; + else + gain_db[idx] = + release_gain * prev_gain + inv_release_gain * gain; /* --------------------------------- */ /* output */ @@ -400,6 +414,7 @@ static inline void process_expansion(struct expander_data *cd, float **samples, const float slope = cd->slope; const float output_gain = cd->output_gain; const bool is_upwcomp = cd->is_upwcomp; + const float knee = cd->knee; if (cd->gain_db_len < num_samples) resize_gain_db_buffer(cd, num_samples); @@ -419,7 +434,7 @@ static inline void process_expansion(struct expander_data *cd, float **samples, is_upwcomp, channel_gain, threshold, slope, attack_gain, inv_attack_gain, release_gain, inv_release_gain, - output_gain); + output_gain, knee); } cd->gain_db_buf[chan] = gain_db[num_samples - 1]; } @@ -484,6 +499,10 @@ static obs_properties_t *expander_properties(void *data) OBS_COMBO_FORMAT_STRING); obs_property_list_add_string(detect, TEXT_RMS, "RMS"); obs_property_list_add_string(detect, TEXT_PEAK, "peak"); + } else { + p = obs_properties_add_int_slider(props, S_KNEE, TEXT_KNEE, 0, + 20, 1); + obs_property_float_set_suffix(p, " dB"); } return props; } From 9b1f7d6d21bbc11dd27660069ffb65f3c6dd7699 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 26 Jan 2023 01:20:38 +0100 Subject: [PATCH 0073/2225] virtualcam-module: Update filter size immediately when used in OBS Fixes a crash due to the previous output size being used when scaling the frame. --- plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp b/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp index 5e432b7cbbe4f1..9c36ac843e2dd7 100644 --- a/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp +++ b/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp @@ -270,6 +270,11 @@ void VCamFilter::Frame(uint64_t ts) the format we present to match */ SetVideoFormat(GetVideoFormat(), new_obs_cx, new_obs_cy, new_obs_interval); + + /* Update the new filter size immediately since we + know it just changed above */ + new_filter_cx = new_obs_cx; + new_filter_cy = new_obs_cy; } /* Re-initialize the main scaler to use the new resolution */ From 062cfcf63d7b0f01edb3dbde843ba757898c9d9c Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 27 Jan 2023 23:20:30 +0100 Subject: [PATCH 0074/2225] obs-filters: Fix wrong number of arguments to error macro --- plugins/obs-filters/nvidia-greenscreen-filter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/obs-filters/nvidia-greenscreen-filter.c b/plugins/obs-filters/nvidia-greenscreen-filter.c index 7ea783d370e907..93f833234acc8a 100644 --- a/plugins/obs-filters/nvidia-greenscreen-filter.c +++ b/plugins/obs-filters/nvidia-greenscreen-filter.c @@ -256,14 +256,14 @@ static void init_images_greenscreen(struct nv_greenscreen_data *filter) filter->render = gs_texrender_create( gs_get_format_from_space(filter->space), GS_ZS_NONE); if (!filter->render) { - error("Failed to create render texrenderer", vfxErr); + error("Failed to create render texrenderer"); goto fail; } if (filter->render_unorm) gs_texrender_destroy(filter->render_unorm); filter->render_unorm = gs_texrender_create(GS_BGRA_UNORM, GS_ZS_NONE); if (!filter->render_unorm) { - error("Failed to create render_unorm texrenderer", vfxErr); + error("Failed to create render_unorm texrenderer"); goto fail; } From 668775f4f0d5b85cc934b3c3602c1d2bd798a889 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 27 Jan 2023 23:32:54 +0100 Subject: [PATCH 0075/2225] obs-ffmpeg: Use gai_strerrorA for error logging on Windows Avoids wide characters in the format string which cause truncation. --- plugins/obs-ffmpeg/obs-ffmpeg-srt.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h index d4e73e56aea845..17a970d3970281 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h @@ -489,7 +489,13 @@ static int libsrt_setup(URLContext *h, const char *uri) if (ret) { blog(LOG_ERROR, "[obs-ffmpeg mpegts muxer / libsrt]: Failed to resolve hostname %s: %s", - hostname, gai_strerror(ret)); + hostname, +#ifdef _WIN32 + gai_strerrorA(ret) +#else + gai_strerror(ret) +#endif + ); return OBS_OUTPUT_CONNECT_FAILED; } From b5b293fe72a697e3d9a41abb152bcdf7cf6d513d Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 22 Jan 2023 02:20:42 +0100 Subject: [PATCH 0076/2225] UI: Re-raise properties window after picking files on macOS --- UI/properties-view.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/UI/properties-view.cpp b/UI/properties-view.cpp index 36d5ba1efd4bb6..6ceceb2378ad1a 100644 --- a/UI/properties-view.cpp +++ b/UI/properties-view.cpp @@ -1750,6 +1750,11 @@ bool WidgetInfo::PathChanged(const char *setting) path = SaveFile(view, QT_UTF8(desc), QT_UTF8(default_path), QT_UTF8(filter)); +#ifdef __APPLE__ + // TODO: Revisit when QTBUG-42661 is fixed + widget->window()->raise(); +#endif + if (path.isEmpty()) return false; @@ -2217,6 +2222,10 @@ void WidgetInfo::EditListAddFiles() QStringList files = OpenFiles(App()->GetMainWindow(), title, QT_UTF8(default_path), QT_UTF8(filter)); +#ifdef __APPLE__ + // TODO: Revisit when QTBUG-42661 is fixed + widget->window()->raise(); +#endif if (files.count() == 0) return; @@ -2237,6 +2246,10 @@ void WidgetInfo::EditListAddDir() QString dir = SelectDirectory(App()->GetMainWindow(), title, QT_UTF8(default_path)); +#ifdef __APPLE__ + // TODO: Revisit when QTBUG-42661 is fixed + widget->window()->raise(); +#endif if (dir.isEmpty()) return; From 10880d6b21cedd9b6dd43d5bbfa57fc19190eac2 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 25 Jan 2023 22:01:31 +0100 Subject: [PATCH 0077/2225] UI: Unblock encoder comboboxes signals before change Signals are blocked while encoder is enforced, those need to be unblocked before setting the new encoder. --- UI/window-basic-settings-stream.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 8dea1821560e5f..f691baefce4f47 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1481,6 +1481,7 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) } idx = ui->advOutEncoder->findData(lastAdvEnc); + s2.unblock(); ui->advOutEncoder->setCurrentIndex(idx); } @@ -1494,6 +1495,7 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) } idx = ui->simpleOutStrEncoder->findData(lastEnc); + s1.unblock(); ui->simpleOutStrEncoder->setCurrentIndex(idx); } } From c2f157470b0a12b606e395b12c1543d3ba66a768 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:16:46 +0900 Subject: [PATCH 0078/2225] UI: Remove unused macros Also removes a translation string that was referred from the removed macro. --- UI/data/locale/en-US.ini | 1 - UI/importers/classic.cpp | 3 --- UI/win-update/win-update.cpp | 2 -- UI/window-basic-auto-config-test.cpp | 1 - UI/window-basic-settings-a11y.cpp | 2 -- UI/window-basic-settings.cpp | 2 -- 6 files changed, 11 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index e66cb30f31d906..84f36418987520 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -223,7 +223,6 @@ Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Failed to connect to a Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testing bandwidth for: %1" Basic.AutoConfig.TestPage.TestingStreamEncoder="Testing stream encoder, this may take a minute..." Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testing recording encoder, this may take a minute..." -Basic.AutoConfig.TestPage.TestingRes="Testing resolutions, this may take a few minutes..." Basic.AutoConfig.TestPage.TestingRes.Fail="Failed to start up encoder" Basic.AutoConfig.TestPage.TestingRes.Resolution="Testing %1x%2 %3 FPS..." Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming Encoder" diff --git a/UI/importers/classic.cpp b/UI/importers/classic.cpp index a03d0e981454df..32291360c7c02f 100644 --- a/UI/importers/classic.cpp +++ b/UI/importers/classic.cpp @@ -36,8 +36,6 @@ static bool source_name_exists(const Json::array &sources, const string &name) #define translate_int(in_key, in, out_key, out, off) \ out[out_key] = in[in_key].int_value() + off; #define translate_string(in_key, in, out_key, out) out[out_key] = in[in_key]; -#define translate_double(in_key, in, out_key, out) \ - translate_string(in_key, in, out_key, out); #define translate_bool(in_key, in, out_key, out) \ out[out_key] = in[in_key].int_value() == 1; @@ -271,7 +269,6 @@ static Json::object translate_source(const Json &in, const Json &sources) #undef translate_int #undef translate_string -#undef translate_double #undef translate_bool static void translate_sc(const Json &in, Json &out) diff --git a/UI/win-update/win-update.cpp b/UI/win-update/win-update.cpp index b4d19081e0c309..0a63adf4b6275b 100644 --- a/UI/win-update/win-update.cpp +++ b/UI/win-update/win-update.cpp @@ -70,8 +70,6 @@ typedef struct { #define BLAKE2_HASH_LENGTH 20 #define BLAKE2_HASH_STR_LENGTH ((BLAKE2_HASH_LENGTH * 2) + 1) -#define TEST_BUILD - // Hard coded 4096 bit RSA public key for obsproject.com in PEM format static const unsigned char obs_pub[] = { 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x50, diff --git a/UI/window-basic-auto-config-test.cpp b/UI/window-basic-auto-config-test.cpp index bb2a86a5387051..ceb2e1cfbaa026 100644 --- a/UI/window-basic-auto-config-test.cpp +++ b/UI/window-basic-auto-config-test.cpp @@ -91,7 +91,6 @@ class TestMode { #define TEST_BW_CONNECTING TEST_STR("TestingBandwidth.Connecting") #define TEST_BW_CONNECT_FAIL TEST_STR("TestingBandwidth.ConnectFailed") #define TEST_BW_SERVER TEST_STR("TestingBandwidth.Server") -#define TEST_RES TEST_STR("TestingRes") #define TEST_RES_VAL TEST_STR("TestingRes.Resolution") #define TEST_RES_FAIL TEST_STR("TestingRes.Fail") #define TEST_SE TEST_STR("TestingStreamEncoder") diff --git a/UI/window-basic-settings-a11y.cpp b/UI/window-basic-settings-a11y.cpp index 136e36ee5541d7..c75d197317d3fc 100644 --- a/UI/window-basic-settings-a11y.cpp +++ b/UI/window-basic-settings-a11y.cpp @@ -5,8 +5,6 @@ #include "qt-wrappers.hpp" #include -#define I18nStr(str) QTStr(str).toStdString().c_str() - enum ColorPreset { COLOR_PRESET_DEFAULT, COLOR_PRESET_COLOR_BLIND_1, diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index ee9a4b3cbf9bf2..24bab1d39bcc71 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -333,14 +333,12 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal, #define CHECK_CHANGED SIGNAL(clicked(bool)) #define SCROLL_CHANGED SIGNAL(valueChanged(int)) #define DSCROLL_CHANGED SIGNAL(valueChanged(double)) -#define TOGGLE_CHANGED SIGNAL(toggled(bool)) #define GENERAL_CHANGED SLOT(GeneralChanged()) #define STREAM1_CHANGED SLOT(Stream1Changed()) #define OUTPUTS_CHANGED SLOT(OutputsChanged()) #define AUDIO_RESTART SLOT(AudioChangedRestart()) #define AUDIO_CHANGED SLOT(AudioChanged()) -#define VIDEO_RESTART SLOT(VideoChangedRestart()) #define VIDEO_RES SLOT(VideoChangedResolution()) #define VIDEO_CHANGED SLOT(VideoChanged()) #define A11Y_CHANGED SLOT(A11yChanged()) From cf2a9461a804c73e2a473fad751ac42e86c7c923 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:19:03 +0900 Subject: [PATCH 0079/2225] Remove OBSBasicSettings::VideoChangedRestart The function `OBSBasicSettings::VideoChangedRestart` was never called, hence remove it. --- UI/window-basic-settings.cpp | 10 ---------- UI/window-basic-settings.hpp | 1 - 2 files changed, 11 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 24bab1d39bcc71..9672f7afa09552 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -4444,16 +4444,6 @@ void RestrictResetBitrates(initializer_list boxes, int maxbitrate) } } -void OBSBasicSettings::VideoChangedRestart() -{ - if (!loading) { - videoChanged = true; - ui->videoMsg->setText(QTStr("Basic.Settings.ProgramRestart")); - sender()->setProperty("changed", QVariant(true)); - EnableApplyButton(true); - } -} - void OBSBasicSettings::AdvancedChangedRestart() { if (!loading) { diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 80a6999cb3f09e..51f00e9418ec9c 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -425,7 +425,6 @@ private slots: void Stream1Changed(); void VideoChanged(); void VideoChangedResolution(); - void VideoChangedRestart(); void HotkeysChanged(); bool ScanDuplicateHotkeys(QFormLayout *layout); void ReloadHotkeys(obs_hotkey_id ignoreKey = OBS_INVALID_HOTKEY_ID); From d18a6f1039b1ff013c68d0e18fb886aa1c39f80c Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:20:14 +0900 Subject: [PATCH 0080/2225] libobs/graphics: Remove unused macros The macros BOUNDS_MAX_X, BOUNDS_MAX_Y, and BOUNDS_MAX_Z are never used and they are never defined how to use. --- libobs/graphics/bounds.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libobs/graphics/bounds.h b/libobs/graphics/bounds.h index bb5eb8fc27f327..6a66d90b4bb231 100644 --- a/libobs/graphics/bounds.h +++ b/libobs/graphics/bounds.h @@ -28,10 +28,6 @@ extern "C" { #endif -#define BOUNDS_MAX_X 1 -#define BOUNDS_MAX_Y 2 -#define BOUNDS_MAX_Z 4 - #define BOUNDS_OUTSIDE 1 #define BOUNDS_INSIDE 2 #define BOUNDS_PARTIAL 3 From 27c7dc91554059f54dfe4f0fd2eda5327d9f78fe Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:21:23 +0900 Subject: [PATCH 0081/2225] docs/sphinx: Add undocumented macros for darray --- docs/sphinx/reference-libobs-util-darray.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/sphinx/reference-libobs-util-darray.rst b/docs/sphinx/reference-libobs-util-darray.rst index 30d29dafb71a08..09365b4d2cc7f7 100644 --- a/docs/sphinx/reference-libobs-util-darray.rst +++ b/docs/sphinx/reference-libobs-util-darray.rst @@ -66,6 +66,15 @@ dynamic array value with a reference (&) operator. For example: --------------------- +.. function:: size_t da_alloc_size(v) + + Gets a size of allocated array in bytes. + + :param da: The dynamic array + :return: The allocated size of the dynamic array. + +--------------------- + .. function:: void *da_end(da) Gets a pointer to the last value. @@ -185,6 +194,17 @@ dynamic array value with a reference (&) operator. For example: --------------------- +.. function:: void da_insert_array(dst, size_t idx, src, size_t n) + + Inserts one or more items at a given index. + + :param dst: The dynamic array: + :param idx: Index where the new item will be inserted + :param src: Pointer to the first item to insert + :param n: Number of items to insert + +--------------------- + .. function:: void da_insert_da(da_dst, size_t idx, da_src) Inserts a dynamic array in to another dynamic array at a specific From be2e0829618068e893a346b6ae4c7ed2faa1a440 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:22:35 +0900 Subject: [PATCH 0082/2225] mac-capture: Remove unused macros --- plugins/mac-capture/mac-audio.c | 2 -- plugins/mac-capture/mac-display-capture.m | 4 ---- 2 files changed, 6 deletions(-) diff --git a/plugins/mac-capture/mac-audio.c b/plugins/mac-capture/mac-audio.c index e8a066162a704e..074888d0999230 100644 --- a/plugins/mac-capture/mac-audio.c +++ b/plugins/mac-capture/mac-audio.c @@ -22,8 +22,6 @@ #define BUS_OUTPUT 0 #define BUS_INPUT 1 -#define MAX_DEVICES 20 - #define set_property AudioUnitSetProperty #define get_property AudioUnitGetProperty diff --git a/plugins/mac-capture/mac-display-capture.m b/plugins/mac-capture/mac-display-capture.m index 8b71773399cf96..3c5d1ea1d3d0e3 100644 --- a/plugins/mac-capture/mac-display-capture.m +++ b/plugins/mac-capture/mac-display-capture.m @@ -428,10 +428,6 @@ static void display_capture_video_render(void *data, gs_effect_t *effect) return obs_module_text("DisplayCapture"); } -#define CROPPED_LENGTH(rect, origin_, length) \ - fabs((rect##.size.##length - dc->crop_rect.size.##length) - \ - (rect##.origin.##origin_ + dc->crop_rect.origin.##origin_)) - static uint32_t display_capture_getwidth(void *data) { struct display_capture *dc = data; From 1069d810196340b96c8f89f3b8f29496024df1d7 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:24:04 +0900 Subject: [PATCH 0083/2225] obs-filters: Remove unused macro --- plugins/obs-filters/obs-filters-config.h.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/obs-filters/obs-filters-config.h.in b/plugins/obs-filters/obs-filters-config.h.in index 20b14ea1539e22..0bbe303c222f4b 100644 --- a/plugins/obs-filters/obs-filters-config.h.in +++ b/plugins/obs-filters/obs-filters-config.h.in @@ -9,5 +9,3 @@ #endif #cmakedefine HAS_NOISEREDUCTION -#define NVIDIA_GREENSCREEN_ENABLED @NVVFX_FOUND@ - From d89ca5846763dfd2a9ef814ebcc6449ea5cb3e7a Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:24:30 +0900 Subject: [PATCH 0084/2225] obs-outputs: Remove unused macro --- plugins/obs-outputs/flv-mux.c | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/obs-outputs/flv-mux.c b/plugins/obs-outputs/flv-mux.c index 7b28512530e50d..9e4d061d4f279d 100644 --- a/plugins/obs-outputs/flv-mux.c +++ b/plugins/obs-outputs/flv-mux.c @@ -29,7 +29,6 @@ //#define DEBUG_TIMESTAMPS //#define WRITE_FLV_HEADER -#define VIDEO_HEADER_SIZE 5 #define VIDEODATA_AVCVIDEOPACKET 7.0 #define AUDIODATA_AAC 10.0 From a4a85af7873a7942f12ee19f0e274cbac9e8cbb2 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:56:07 +0900 Subject: [PATCH 0085/2225] obs-text: Remove unused macros --- plugins/obs-text/gdiplus/obs-text.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/obs-text/gdiplus/obs-text.cpp b/plugins/obs-text/gdiplus/obs-text.cpp index b80bb63d903a52..2070e5936fdc3e 100644 --- a/plugins/obs-text/gdiplus/obs-text.cpp +++ b/plugins/obs-text/gdiplus/obs-text.cpp @@ -84,9 +84,6 @@ using namespace Gdiplus; #define S_TRANSFORM_LOWERCASE 2 #define S_TRANSFORM_STARTCASE 3 -#define S_ANTIALIASING_NONE 0 -#define S_ANTIALIASING_STANDARD 1 - #define T_(v) obs_module_text(v) #define T_FONT T_("Font") #define T_USE_FILE T_("ReadFromFile") From 72e7437ce91b964442af4735662ca101dd7605f4 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 17:57:15 +0900 Subject: [PATCH 0086/2225] win-capture: Remove unused macros --- plugins/win-capture/game-capture.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/win-capture/game-capture.c b/plugins/win-capture/game-capture.c index cc421c9212b7cd..36c0359b0ad234 100644 --- a/plugins/win-capture/game-capture.c +++ b/plugins/win-capture/game-capture.c @@ -30,7 +30,6 @@ #define SETTING_MODE "capture_mode" #define SETTING_CAPTURE_WINDOW "window" -#define SETTING_ACTIVE_WINDOW "active_window" #define SETTING_WINDOW_PRIORITY "priority" #define SETTING_COMPATIBILITY "sli_compatibility" #define SETTING_CURSOR "capture_cursor" @@ -1324,9 +1323,6 @@ static inline enum capture_result init_capture_data(struct game_capture *gc) return CAPTURE_SUCCESS; } -#define PIXEL_16BIT_SIZE 2 -#define PIXEL_32BIT_SIZE 4 - static inline uint32_t convert_5_to_8bit(uint16_t val) { return (uint32_t)((double)(val & 0x1F) * (255.0 / 31.0)); From 2b4bc03b4cc63197c1a2da070e1bde53bede831f Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 22 Jan 2023 18:00:44 +0900 Subject: [PATCH 0087/2225] libobs/graphics: Remove unused macros for inputs --- libobs/graphics/input.h | 118 ---------------------------------------- 1 file changed, 118 deletions(-) diff --git a/libobs/graphics/input.h b/libobs/graphics/input.h index 778f41487d9762..0a83d3a660f0ab 100644 --- a/libobs/graphics/input.h +++ b/libobs/graphics/input.h @@ -23,124 +23,6 @@ extern "C" { #endif -#define KBC_ESCAPE 0x0 -#define KBC_1 0x1 -#define KBC_2 0x2 -#define KBC_3 0x3 -#define KBC_4 0x4 -#define KBC_5 0x5 -#define KBC_6 0x6 -#define KBC_7 0x7 -#define KBC_8 0x8 -#define KBC_9 0x9 -#define KBC_0 0xA -#define KBC_MINUS 0xB -#define KBC_EQUALS 0xC -#define KBC_BACK 0xD -#define KBC_TAB 0xE -#define KBC_Q 0xF -#define KBC_W 0x10 -#define KBC_E 0x11 -#define KBC_R 0x12 -#define KBC_T 0x13 -#define KBC_Y 0x14 -#define KBC_U 0x15 -#define KBC_I 0x16 -#define KBC_O 0x17 -#define KBC_P 0x18 -#define KBC_LBRACKET 0x19 -#define KBC_RBRACKET 0x1A -#define KBC_RETURN 0x1B -#define KBC_LCONTROL 0x1C -#define KBC_A 0x1D -#define KBC_S 0x1E -#define KBC_D 0x1F -#define KBC_F 0x20 -#define KBC_G 0x21 -#define KBC_H 0x22 -#define KBC_J 0x23 -#define KBC_K 0x24 -#define KBC_L 0x25 -#define KBC_SEMICOLON 0x26 -#define KBC_APOSTROPHE 0x27 -#define KBC_TILDE 0x28 -#define KBC_LSHIFT 0x29 -#define KBC_BACKSLASH 0x2A -#define KBC_Z 0x2B -#define KBC_X 0x2C -#define KBC_C 0x2D -#define KBC_V 0x2E -#define KBC_B 0x2F -#define KBC_N 0x30 -#define KBC_M 0x31 -#define KBC_COMMA 0x32 -#define KBC_PERIOD 0x33 -#define KBC_SLASH 0x34 -#define KBC_RSHIFT 0x35 -#define KBC_MULTIPLY 0x36 -#define KBC_LALT 0x37 -#define KBC_SPACE 0x38 -#define KBC_CAPSLOCK 0x39 -#define KBC_F1 0x3A -#define KBC_F2 0x3B -#define KBC_F3 0x3C -#define KBC_F4 0x3D -#define KBC_F5 0x3E -#define KBC_F6 0x3F -#define KBC_F7 0x40 -#define KBC_F8 0x41 -#define KBC_F9 0x42 -#define KBC_F10 0x43 -#define KBC_NUMLOCK 0x44 -#define KBC_SCROLLLOCK 0x45 -#define KBC_NUMPAD7 0x46 -#define KBC_NUMPAD8 0x47 -#define KBC_NUMPAD9 0x48 -#define KBC_SUBTRACT 0x49 -#define KBC_NUMPAD4 0x4A -#define KBC_NUMPAD5 0x4B -#define KBC_NUMPAD6 0x4C -#define KBC_ADD 0x4D -#define KBC_NUMPAD1 0x4E -#define KBC_NUMPAD2 0x4F -#define KBC_NUMPAD3 0x50 -#define KBC_NUMPAD0 0x51 -#define KBC_DECIMAL 0x52 -#define KBC_F11 0x53 -#define KBC_F12 0x54 -#define KBC_NUMPADENTER 0x55 -#define KBC_RCONTROL 0x56 -#define KBC_DIVIDE 0x57 -#define KBC_SYSRQ 0x58 -#define KBC_RALT 0x59 -#define KBC_PAUSE 0x5A -#define KBC_HOME 0x5B -#define KBC_UP 0x5C -#define KBC_PAGEDOWN 0x5D -#define KBC_LEFT 0x5E -#define KBC_RIGHT 0x5F -#define KBC_END 0x60 -#define KBC_DOWN 0x61 -#define KBC_PAGEUP 0x62 -#define KBC_INSERT 0x63 -#define KBC_DELETE 0x64 - -#define MOUSE_LEFTBUTTON 0x65 -#define MOUSE_MIDDLEBUTTON 0x66 -#define MOUSE_RIGHTBUTTON 0x67 -#define MOUSE_WHEEL 0x68 -#define MOUSE_MOVE 0x69 - -#define KBC_CONTROL 0xFFFFFFFE -#define KBC_ALT 0xFFFFFFFD -#define KBC_SHIFT 0xFFFFFFFC - -#define STATE_LBUTTONDOWN (1 << 0) -#define STATE_RBUTTONDOWN (1 << 1) -#define STATE_MBUTTONDOWN (1 << 2) -#define STATE_X4BUTTONDOWN (1 << 3) -#define STATE_X5BUTTONDOWN (1 << 4) - /* wrapped opaque data types */ struct input_subsystem; typedef struct input_subsystem input_t; From e7c40a1d29d6875577d761beae2f704afb2c20ce Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Mon, 23 Jan 2023 00:57:15 +0900 Subject: [PATCH 0088/2225] obs-ffmpeg: Remove unused macro --- plugins/obs-ffmpeg/obs-ffmpeg-source.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-source.c b/plugins/obs-ffmpeg/obs-ffmpeg-source.c index 2a1156f9762ce7..d358c27324ce10 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-source.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-source.c @@ -23,8 +23,6 @@ #include -#define FF_LOG(level, format, ...) \ - blog(level, "[Media Source]: " format, ##__VA_ARGS__) #define FF_LOG_S(source, level, format, ...) \ blog(level, "[Media Source '%s']: " format, \ obs_source_get_name(source), ##__VA_ARGS__) From a96211a0ee3efad64743c716bf735a20aa08c996 Mon Sep 17 00:00:00 2001 From: Crocodile Gena Date: Wed, 25 Jan 2023 10:31:32 +0200 Subject: [PATCH 0089/2225] obs-vst: Add reporting of vendor name --- plugins/obs-vst/VSTPlugin.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/obs-vst/VSTPlugin.cpp b/plugins/obs-vst/VSTPlugin.cpp index 07eedba3d4867b..fca7dc137b91d7 100644 --- a/plugins/obs-vst/VSTPlugin.cpp +++ b/plugins/obs-vst/VSTPlugin.cpp @@ -24,7 +24,6 @@ intptr_t VSTPlugin::hostCallback_static(AEffect *effect, int32_t opcode, void *ptr, float opt) { UNUSED_PARAMETER(opt); - UNUSED_PARAMETER(ptr); VSTPlugin *plugin = nullptr; if (effect && effect->user) { @@ -48,6 +47,10 @@ intptr_t VSTPlugin::hostCallback_static(AEffect *effect, int32_t opcode, } return 0; + case audioMasterGetVendorString: + strncpy((char *)ptr, "OBS Studio", 11); + return 1; + case audioMasterGetTime: if (plugin) { return (intptr_t)plugin->GetTimeInfo(); From d7fade2c447f4d025b3fb58c21cc4dce9c15a543 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 23 Jan 2023 08:30:12 +0100 Subject: [PATCH 0090/2225] cmake: Allow disabling deprecation errors on GCC/Clang --- cmake/Modules/CompilerConfig.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index 2529d8d6e8d62d..7883efe62ad38d 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -90,6 +90,7 @@ else() set(CMAKE_CUDA_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") # CMake 3.9+ endif() + option(CALM_DEPRECATION "Keep deprecated-declarations as warnings" OFF) add_compile_options( -Werror -Wextra @@ -107,7 +108,8 @@ else() "$<$:-DDEBUG=1;-D_DEBUG=1>" "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" "$<$:-Wnull-conversion;-fcolor-diagnostics;-Wno-error=shorten-64-to-32>" - "$<$:-Wconversion-null>") + "$<$:-Wconversion-null>" + "$<$:-Wno-error=deprecated-declarations>") if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # GCC on aarch64 emits type-limits warnings that do not appear on x86_64 From e13e0937a29558a939abeea3ee5b9a6d8b69e2eb Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 23 Jan 2023 08:34:41 +0100 Subject: [PATCH 0091/2225] obs-scripting: Fix compilation warnings on Clang and GCC * Fix unused-parameter when Python is disabled * Calm PySys_SetArgv deprecation since Python 3.11 --- deps/obs-scripting/obs-scripting-python.c | 3 +++ deps/obs-scripting/obs-scripting.c | 1 + 2 files changed, 4 insertions(+) diff --git a/deps/obs-scripting/obs-scripting-python.c b/deps/obs-scripting/obs-scripting-python.c index 280cd4cc8f6ed8..0f3073707b2447 100644 --- a/deps/obs-scripting/obs-scripting-python.c +++ b/deps/obs-scripting/obs-scripting-python.c @@ -1702,7 +1702,10 @@ bool obs_scripting_load_python(const char *python_path) wchar_t *argv[] = {L"", NULL}; int argc = sizeof(argv) / sizeof(wchar_t *) - 1; + PRAGMA_WARN_PUSH + PRAGMA_WARN_DEPRECATION PySys_SetArgv(argc, argv); + PRAGMA_WARN_POP #ifdef DEBUG_PYTHON_STARTUP /* ---------------------------------------------- */ diff --git a/deps/obs-scripting/obs-scripting.c b/deps/obs-scripting/obs-scripting.c index 2c1d353ecb37ab..7e84f6e030e4e9 100644 --- a/deps/obs-scripting/obs-scripting.c +++ b/deps/obs-scripting/obs-scripting.c @@ -461,6 +461,7 @@ bool obs_scripting_python_runtime_linked(void) void obs_scripting_python_version(char *version, size_t version_length) { + UNUSED_PARAMETER(version_length); version[0] = 0; } #endif From 918c0c0aebe7cd0562e26c89529e557d3ecdd28d Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 23 Jan 2023 08:36:09 +0100 Subject: [PATCH 0092/2225] deps/media-playback: Fix deprecation warning --- deps/media-playback/media-playback/decode.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index 0b73fe14c2c5b1..059687b6db5933 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -438,8 +438,11 @@ bool mp_decode_next(struct mp_decode *d) av_rescale_q(d->in_frame->best_effort_timestamp, d->stream->time_base, (AVRational){1, 1000000000}); - +#if LIBAVUTIL_VERSION_MAJOR >= 57 && LIBAVUTIL_VERSION_MINOR >= 30 + int64_t duration = d->in_frame->duration; +#else int64_t duration = d->in_frame->pkt_duration; +#endif if (!duration) duration = get_estimated_duration(d, last_pts); else From 52045316b3fa18bc7cea8940da678c602d70d173 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Tue, 24 Jan 2023 06:08:30 -0600 Subject: [PATCH 0093/2225] UI: Hide menu items if source is only audio Hides the following items if source is only audio: - Transform menu - Resize output (size of source) - Scale filter menu - Blending mode menus - Projector menus - Screenshots - Interact --- UI/window-basic-main.cpp | 82 +++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 6aec6062dbb65b..5c9af8c2d1e716 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5626,6 +5626,7 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) bool isAsyncVideo = (flags & OBS_SOURCE_ASYNC_VIDEO) == OBS_SOURCE_ASYNC_VIDEO; bool hasAudio = (flags & OBS_SOURCE_AUDIO) == OBS_SOURCE_AUDIO; + bool hasVideo = (flags & OBS_SOURCE_VIDEO) == OBS_SOURCE_VIDEO; colorMenu = new QMenu(QTStr("ChangeBG")); colorWidgetAction = new QWidgetAction(colorMenu); @@ -5639,7 +5640,9 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) popup.addSeparator(); popup.addMenu(ui->orderMenu); - popup.addMenu(ui->transformMenu); + + if (hasVideo) + popup.addMenu(ui->transformMenu); popup.addSeparator(); @@ -5652,48 +5655,51 @@ void OBSBasic::CreateSourcePopupMenu(int idx, bool preview) popup.addSeparator(); } - QAction *resizeOutput = - popup.addAction(QTStr("ResizeOutputSizeOfSource"), this, - SLOT(ResizeOutputSizeOfSource())); - - int width = obs_source_get_width(source); - int height = obs_source_get_height(source); - - resizeOutput->setEnabled(!obs_video_active()); - - if (width < 8 || height < 8) - resizeOutput->setEnabled(false); - - scaleFilteringMenu = new QMenu(QTStr("ScaleFiltering")); - popup.addMenu( - AddScaleFilteringMenu(scaleFilteringMenu, sceneItem)); - blendingModeMenu = new QMenu(QTStr("BlendingMode")); - popup.addMenu(AddBlendingModeMenu(blendingModeMenu, sceneItem)); - blendingMethodMenu = new QMenu(QTStr("BlendingMethod")); - popup.addMenu( - AddBlendingMethodMenu(blendingMethodMenu, sceneItem)); - if (isAsyncVideo) { - deinterlaceMenu = new QMenu(QTStr("Deinterlacing")); - popup.addMenu( - AddDeinterlacingMenu(deinterlaceMenu, source)); - } - popup.addSeparator(); + if (hasVideo) { + QAction *resizeOutput = popup.addAction( + QTStr("ResizeOutputSizeOfSource"), this, + SLOT(ResizeOutputSizeOfSource())); + + int width = obs_source_get_width(source); + int height = obs_source_get_height(source); + + resizeOutput->setEnabled(!obs_video_active()); + + if (width < 8 || height < 8) + resizeOutput->setEnabled(false); + + scaleFilteringMenu = new QMenu(QTStr("ScaleFiltering")); + popup.addMenu(AddScaleFilteringMenu(scaleFilteringMenu, + sceneItem)); + blendingModeMenu = new QMenu(QTStr("BlendingMode")); + popup.addMenu(AddBlendingModeMenu(blendingModeMenu, + sceneItem)); + blendingMethodMenu = new QMenu(QTStr("BlendingMethod")); + popup.addMenu(AddBlendingMethodMenu(blendingMethodMenu, + sceneItem)); + if (isAsyncVideo) { + deinterlaceMenu = + new QMenu(QTStr("Deinterlacing")); + popup.addMenu(AddDeinterlacingMenu( + deinterlaceMenu, source)); + } - popup.addMenu(CreateVisibilityTransitionMenu(true)); - popup.addMenu(CreateVisibilityTransitionMenu(false)); - popup.addSeparator(); + popup.addSeparator(); + + popup.addMenu(CreateVisibilityTransitionMenu(true)); + popup.addMenu(CreateVisibilityTransitionMenu(false)); + popup.addSeparator(); - sourceProjector = new QMenu(QTStr("SourceProjector")); - AddProjectorMenuMonitors(sourceProjector, this, - SLOT(OpenSourceProjector())); - popup.addMenu(sourceProjector); - popup.addAction(QTStr("SourceWindow"), this, - SLOT(OpenSourceWindow())); + sourceProjector = new QMenu(QTStr("SourceProjector")); + AddProjectorMenuMonitors(sourceProjector, this, + SLOT(OpenSourceProjector())); + popup.addMenu(sourceProjector); + popup.addAction(QTStr("SourceWindow"), this, + SLOT(OpenSourceWindow())); - QAction *screenshotAction = popup.addAction(QTStr("Screenshot.Source"), this, SLOT(ScreenshotSelectedSource())); - screenshotAction->setEnabled(flags & OBS_SOURCE_VIDEO); + } popup.addSeparator(); From cbe3ef7e57f566146de014ad5c49be9f4062be05 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 10:08:43 +0100 Subject: [PATCH 0094/2225] Revert "UI/updater: Fix files with similar hashes clashing" This reverts commit 7396c211be75da3bce74cf8d2661a481a5c10fff. --- UI/win-update/updater/updater.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 9b78b2812bc0af..877362bcdfa26d 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -952,16 +952,12 @@ static void UpdateWithPatchIfAvailable(const char *name, const char *hash, update.fileSize = size; update.patchable = true; - /* ensure the filename is unique */ - static long increment = 0; - /* Since the patch depends on the previous version, we can * no longer rely on the temp name being unique to the * new file's hash */ update.tempPath = tempPath; update.tempPath += L"\\"; update.tempPath += patchHashStr; - update.tempPath += std::to_wstring(increment++); break; } } From cd78ecae50b6e5d4c4c8fc350f44c5c8b5e7199d Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 10:11:45 +0100 Subject: [PATCH 0095/2225] updater: Deduplicate delta patch downloads --- UI/win-update/updater/updater.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 877362bcdfa26d..decfcf7ee716ef 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -1637,9 +1637,6 @@ static bool Update(wchar_t *cmdLine) unordered_set tempFiles; for (update_t &update : updates) { - if (update.patchable) - continue; - if (tempFiles.count(update.tempPath)) { update.state = STATE_ALREADY_DOWNLOADED; totalFileSize -= update.fileSize; From 2272efc91f659952beaacc24ecbc1d9daf865ccc Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 27 Jan 2023 16:41:53 +0100 Subject: [PATCH 0096/2225] UI: Use native combobox popup on macOS As recommended by Qt on QTBUG-106162, this fixes QComboBox popups not working with VoiceOver. --- UI/obs-app.cpp | 2 +- UI/obs-proxy-style.cpp | 11 +++++++---- UI/obs-proxy-style.hpp | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 0ea5b0aba1cbe0..db637383678302 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1249,7 +1249,7 @@ bool OBSApp::SetTheme(std::string name, std::string path) bool OBSApp::InitTheme() { defaultPalette = palette(); - setStyle(new OBSIgnoreWheelProxyStyle()); + setStyle(new OBSProxyStyle()); const char *themeName = config_get_string(globalConfig, "General", "CurrentTheme3"); diff --git a/UI/obs-proxy-style.cpp b/UI/obs-proxy-style.cpp index 270ab127fbdbc4..49be6524ef3080 100644 --- a/UI/obs-proxy-style.cpp +++ b/UI/obs-proxy-style.cpp @@ -77,13 +77,16 @@ OBSContextBarProxyStyle::generatedIconPixmap(QIcon::Mode iconMode, return QProxyStyle::generatedIconPixmap(iconMode, pixmap, option); } -int OBSIgnoreWheelProxyStyle::styleHint(StyleHint hint, - const QStyleOption *option, - const QWidget *widget, - QStyleHintReturn *returnData) const +int OBSProxyStyle::styleHint(StyleHint hint, const QStyleOption *option, + const QWidget *widget, + QStyleHintReturn *returnData) const { if (hint == SH_ComboBox_AllowWheelScrolling) return 0; +#ifdef __APPLE__ + if (hint == SH_ComboBox_UseNativePopup) + return 1; +#endif return QProxyStyle::styleHint(hint, option, widget, returnData); } diff --git a/UI/obs-proxy-style.hpp b/UI/obs-proxy-style.hpp index e3a74a26e7c4e0..437ce1e27332ff 100644 --- a/UI/obs-proxy-style.hpp +++ b/UI/obs-proxy-style.hpp @@ -2,14 +2,14 @@ #include -class OBSIgnoreWheelProxyStyle : public QProxyStyle { +class OBSProxyStyle : public QProxyStyle { public: int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const override; }; -class OBSContextBarProxyStyle : public OBSIgnoreWheelProxyStyle { +class OBSContextBarProxyStyle : public OBSProxyStyle { public: QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const override; From 11e92918005d11688ecbb371380fca8b76eeb161 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Tue, 31 Jan 2023 17:28:21 +0100 Subject: [PATCH 0097/2225] UI: Set macOS appearance on theme change Makes macOS aware that we're using either light or dark theme to adjust native dialog colors accordingly. Co-Authored-By: Patrick Heyer --- UI/obs-app.cpp | 4 ++++ UI/platform-osx.mm | 11 +++++++++++ UI/platform.hpp | 1 + 3 files changed, 16 insertions(+) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index db637383678302..9d018e88ebc70a 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1242,6 +1242,10 @@ bool OBSApp::SetTheme(std::string name, std::string path) themeDarkMode = !(color.redF() < 0.5); } +#ifdef __APPLE__ + SetMacOSDarkMode(themeDarkMode); +#endif + emit StyleChanged(); return true; } diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index 0e58caf4123c5e..a5f36ebf269d41 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -384,6 +384,17 @@ void OpenMacOSPrivacyPreferences(const char *tab) [[NSWorkspace sharedWorkspace] openURL:url]; } +void SetMacOSDarkMode(bool dark) +{ + if (dark) { + NSApp.appearance = + [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua]; + } else { + NSApp.appearance = + [NSAppearance appearanceNamed:NSAppearanceNameAqua]; + } +} + void TaskbarOverlayInit() {} void TaskbarOverlaySetStatus(TaskbarOverlayStatus status) { diff --git a/UI/platform.hpp b/UI/platform.hpp index 746e57848d6f0a..22ce5ca9c6e810 100644 --- a/UI/platform.hpp +++ b/UI/platform.hpp @@ -101,6 +101,7 @@ bool isInBundle(); void InstallNSApplicationSubclass(); void InstallNSThreadLocks(); void disableColorSpaceConversion(QWidget *window); +void SetMacOSDarkMode(bool dark); MacPermissionStatus CheckPermissionWithPrompt(MacPermissionType type, bool prompt_for_permission); From 5d3943ab480dbd830b37b3546ba69a4125d9de8d Mon Sep 17 00:00:00 2001 From: Jim Date: Tue, 31 Jan 2023 22:58:00 -0800 Subject: [PATCH 0098/2225] libobs: Update version to 29.0.1 --- libobs/obs-config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs/obs-config.h b/libobs/obs-config.h index 5fcc6bea0f8c10..e38e35a8ddc7d3 100644 --- a/libobs/obs-config.h +++ b/libobs/obs-config.h @@ -41,7 +41,7 @@ * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 0 +#define LIBOBS_API_PATCH_VER 1 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \ ((major << 24) | (minor << 16) | patch) From 0a18c006caeda47bf7897c266cdc54b20f4087ea Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 09:05:33 +0100 Subject: [PATCH 0099/2225] CI: Publish docs to Cloudflare Pages --- .github/workflows/docs.yml | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 22bf2d79c0b75d..36e534a20a2f8f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -4,20 +4,34 @@ on: push: paths-ignore: - "cmake/**" + branches: ['*'] + tags: ['*'] pull_request: paths: - "docs/sphinx/**" + workflow_dispatch: jobs: docs: runs-on: ubuntu-latest + outputs: + commitHash: ${{ steps.setup.outputs.commitHash }} + commitBranch: ${{ steps.setup.outputs.commitBranch }} + fullCommitHash: ${{ steps.setup.outputs.fullCommitHash }} steps: - name: Checkout uses: actions/checkout@v3 + - name: Setup Environment id: setup run: | + BRANCH=$(git describe --exact-match --tags 2> /dev/null || git branch --show-current) + # Remove patch version from tag + BRANCH=$(echo ${BRANCH} | sed -e 's/\.[0-9]*$//') + echo "commitBranch=${BRANCH}" >> $GITHUB_OUTPUT echo "commitHash=$(git describe --exact-match --tags 2> /dev/null || git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + echo "fullCommitHash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + - name: Bump Version Number shell: bash if: github.event_name == 'push' @@ -40,6 +54,7 @@ jobs: SCOPY="copyright = '([A-Za-z0-9, ]+)'" RCOPY="copyright = '2017-$(date +"%Y"), Hugh Bailey'" sed -i -E -e "s/${SVER}/${RVER}/g" -e "s/${SREL}/${RREL}/g" -e "s/${SCOPY}/${RCOPY}/g" docs/sphinx/conf.py + - uses: totaldebug/sphinx-publish-action@1.2.0 with: sphinx_src: 'docs/sphinx' @@ -47,9 +62,47 @@ jobs: target_branch: 'master' target_path: '../home/_build' pre_build_commands: 'pip install -Iv sphinx==5.1.1' + - uses: actions/upload-artifact@v3 with: name: 'OBS Studio Docs ${{ steps.setup.outputs.commitHash }}' path: | ${{ runner.temp }}/_github_home/_build !${{ runner.temp }}/_github_home/_build/.doctrees + + deploy: + runs-on: ubuntu-latest + needs: docs + if: ${{ github.event_name == 'workflow_dispatch' || (github.repository_owner == 'obsproject' && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request') }} + environment: + name: cf-pages-deploy + concurrency: + group: "cf-pages-deployment" + cancel-in-progress: true + steps: + - uses: actions/download-artifact@v3 + with: + name: 'OBS Studio Docs ${{ needs.docs.outputs.commitHash }}' + path: docs + + - name: Setup redirects + run: | + echo "/previous/27.2 https://obsproject.com/docs/27.2 302" >> docs/_redirects + echo "/previous/:major.:minor https://:major-:minor.${{ vars.CF_PAGES_PROJECT }}.pages.dev 302" >> docs/_redirects + + - name: Publish to live page + uses: cloudflare/wrangler-action@4c10c1822abba527d820b29e6333e7f5dac2cabd + with: + workingDirectory: docs + apiToken: ${{ secrets.CF_API_TOKEN }} + accountId: ${{ secrets.CF_ACCOUNT_ID }} + command: pages publish . --project-name=${{ vars.CF_PAGES_PROJECT }} --commit-hash='${{ needs.docs.outputs.fullCommitHash }}' + + - name: Publish to tag alias + if: ${{ startsWith(github.ref, 'refs/tags/') }} + uses: cloudflare/wrangler-action@4c10c1822abba527d820b29e6333e7f5dac2cabd + with: + workingDirectory: docs + apiToken: ${{ secrets.CF_API_TOKEN }} + accountId: ${{ secrets.CF_ACCOUNT_ID }} + command: pages publish . --project-name=${{ vars.CF_PAGES_PROJECT }} --commit-hash='${{ needs.docs.outputs.fullCommitHash }}' --branch='${{ needs.docs.outputs.commitBranch }}' From e9a401d89859a10d125d8aee3ef23f4719164e4d Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Wed, 1 Feb 2023 23:00:50 +0100 Subject: [PATCH 0100/2225] UI: Remove unsupported Windows versions from manifest --- UI/obs.manifest | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/UI/obs.manifest b/UI/obs.manifest index 74c6d814873d21..b20d07746dc30c 100644 --- a/UI/obs.manifest +++ b/UI/obs.manifest @@ -13,14 +13,8 @@ - + - - - - - - From c36583d79448bcbbfbeccb228899da06cb6f9ce7 Mon Sep 17 00:00:00 2001 From: R1CH Date: Sat, 4 Feb 2023 08:27:15 +0100 Subject: [PATCH 0101/2225] obs-filters: Ensure gain is positive for upward compressor The gain should be positive for an upward compressor. Initially, the gain would be zeroe'd below -60 dB to ensure noise is not amplified by the upward compressor. This created a discontinuity at -60 dB since just above -60 dB, the audio is boosted by +20 dB (at default settings). This was fixed in commit 50db097 which decreased smoothly the gain so that it's 0 dB at -60 dB. However that commit forgot to limit the gain decrease which was negative below -60 dB. This is fixed by the current commit. Additionally initialization allowed -inf gain. We hard limit to positive gains only as they should be for an upward compressor. The bugfix was found by R1ch and put in form by pkv. Co-authored-by: pkv Signed-off-by: pkv --- plugins/obs-filters/expander-filter.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index be3ca9fbd6df7e..e162d44264c937 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -360,12 +360,15 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, float diff = threshold - env_db; if (is_upwcomp && env_db <= (threshold - 60.0f) / 2) - diff = env_db + 60.0f; + diff = env_db + 60.0f > 0 ? env_db + 60.0f : 0.0f; float gain = 0.0f; + float prev_gain = 0.0f; // Note that the gain is always >= 0 for the upward compressor // but is always <=0 for the expander. if (is_upwcomp) { + prev_gain = idx > 0 ? fmaxf(gain_db[idx - 1], 0) + : fmaxf(channel_gain, 0); // gain above knee (included for clarity): if (env_db >= threshold + knee / 2) gain = 0.0f; @@ -377,9 +380,9 @@ static inline void process_sample(size_t idx, float *samples, float *env_buf, threshold + knee / 2 > env_db) gain = slope * powf(diff + knee / 2, 2) / (2.0f * knee); } else { + prev_gain = idx > 0 ? gain_db[idx - 1] : channel_gain; gain = diff > 0.0f ? fmaxf(slope * diff, -60.0f) : 0.0f; } - float prev_gain = idx > 0 ? gain_db[idx - 1] : channel_gain; /* --------------------------------- */ /* ballistics (attack/release) */ From 2ff210acfdf9f72ee6c845c9eacceae1886c275f Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sat, 4 Feb 2023 02:17:10 -0800 Subject: [PATCH 0102/2225] libobs: Update version to 29.0.2 --- libobs/obs-config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs/obs-config.h b/libobs/obs-config.h index e38e35a8ddc7d3..1772f479099ff6 100644 --- a/libobs/obs-config.h +++ b/libobs/obs-config.h @@ -41,7 +41,7 @@ * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 1 +#define LIBOBS_API_PATCH_VER 2 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \ ((major << 24) | (minor << 16) | patch) From 46da073aa5fc3a87c0805fac1cbba1dcd8df04cf Mon Sep 17 00:00:00 2001 From: Exeldro Date: Mon, 30 Jan 2023 12:34:59 +0100 Subject: [PATCH 0103/2225] UI: Add obs_frontend_open_sceneitem_edit_transform() --- UI/api-interface.cpp | 8 +++++++ UI/obs-frontend-api/obs-frontend-api.cpp | 6 +++++ UI/obs-frontend-api/obs-frontend-api.h | 1 + UI/obs-frontend-api/obs-frontend-internal.hpp | 2 ++ UI/window-basic-main.cpp | 23 +++++++++++++++---- UI/window-basic-main.hpp | 2 ++ UI/window-basic-transform.cpp | 3 +-- UI/window-basic-transform.hpp | 2 +- docs/sphinx/reference-frontend-api.rst | 8 +++++++ 9 files changed, 47 insertions(+), 8 deletions(-) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index c56bf9f2bc1497..34dd94d4daf50b 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -630,6 +630,14 @@ struct OBSStudioAPI : obs_frontend_callbacks { Q_ARG(OBSSource, OBSSource(source))); } + void obs_frontend_open_sceneitem_edit_transform( + obs_sceneitem_t *item) override + { + QMetaObject::invokeMethod(main, "OpenEditTransform", + Q_ARG(OBSSceneItem, + OBSSceneItem(item))); + } + char *obs_frontend_get_current_record_output_path(void) override { const char *recordOutputPath = main->GetCurrentOutputPath(); diff --git a/UI/obs-frontend-api/obs-frontend-api.cpp b/UI/obs-frontend-api/obs-frontend-api.cpp index f1445dde5287c9..e5ca328fc2a744 100644 --- a/UI/obs-frontend-api/obs-frontend-api.cpp +++ b/UI/obs-frontend-api/obs-frontend-api.cpp @@ -559,6 +559,12 @@ void obs_frontend_open_source_interaction(obs_source_t *source) c->obs_frontend_open_source_interaction(source); } +void obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) +{ + if (callbacks_valid()) + c->obs_frontend_open_sceneitem_edit_transform(item); +} + char *obs_frontend_get_current_record_output_path(void) { return !!callbacks_valid() diff --git a/UI/obs-frontend-api/obs-frontend-api.h b/UI/obs-frontend-api/obs-frontend-api.h index c1ad7adfd00159..797decb006ea75 100644 --- a/UI/obs-frontend-api/obs-frontend-api.h +++ b/UI/obs-frontend-api/obs-frontend-api.h @@ -226,6 +226,7 @@ EXPORT void obs_frontend_reset_video(void); EXPORT void obs_frontend_open_source_properties(obs_source_t *source); EXPORT void obs_frontend_open_source_filters(obs_source_t *source); EXPORT void obs_frontend_open_source_interaction(obs_source_t *source); +EXPORT void obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item); EXPORT char *obs_frontend_get_current_record_output_path(void); EXPORT const char *obs_frontend_get_locale_string(const char *string); diff --git a/UI/obs-frontend-api/obs-frontend-internal.hpp b/UI/obs-frontend-api/obs-frontend-internal.hpp index ea057ece1e9931..bb0bbec9a71f33 100644 --- a/UI/obs-frontend-api/obs-frontend-internal.hpp +++ b/UI/obs-frontend-api/obs-frontend-internal.hpp @@ -141,6 +141,8 @@ struct obs_frontend_callbacks { virtual void obs_frontend_open_source_filters(obs_source_t *source) = 0; virtual void obs_frontend_open_source_interaction(obs_source_t *source) = 0; + virtual void + obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) = 0; virtual char *obs_frontend_get_current_record_output_path(void) = 0; virtual const char * diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 5c9af8c2d1e716..cd36a4e115875b 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -6391,6 +6391,15 @@ void OBSBasic::OpenInteraction(OBSSource source) CreateInteractionWindow(source); } +void OBSBasic::OpenEditTransform(OBSSceneItem item) +{ + if (!item) + item = GetCurrentSceneItem(); + if (!item) + return; + CreateEditTransformWindow(item); +} + void OBSBasic::OpenSceneFilters() { OBSScene scene = GetCurrentScene(); @@ -8058,13 +8067,17 @@ void OBSBasic::UpdateEditMenu() void OBSBasic::on_actionEditTransform_triggered() { - if (transformWindow) - transformWindow->close(); - - if (!GetCurrentSceneItem()) + const auto item = GetCurrentSceneItem(); + if (!item) return; + CreateEditTransformWindow(item); +} - transformWindow = new OBSBasicTransform(this); +void OBSBasic::CreateEditTransformWindow(obs_sceneitem_t *item) +{ + if (transformWindow) + transformWindow->close(); + transformWindow = new OBSBasicTransform(item, this); connect(ui->scenes, &QListWidget::currentItemChanged, transformWindow, &OBSBasicTransform::OnSceneChanged); transformWindow->show(); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 158e274855f887..065d7b51b9d6ae 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -945,6 +945,7 @@ private slots: void CreateInteractionWindow(obs_source_t *source); void CreatePropertiesWindow(obs_source_t *source); void CreateFiltersWindow(obs_source_t *source); + void CreateEditTransformWindow(obs_sceneitem_t *item); QAction *AddDockWidget(QDockWidget *dock); @@ -1157,6 +1158,7 @@ private slots: void OpenFilters(OBSSource source = nullptr); void OpenProperties(OBSSource source = nullptr); void OpenInteraction(OBSSource source = nullptr); + void OpenEditTransform(OBSSceneItem item = nullptr); void EnablePreviewDisplay(bool enable); void TogglePreview(); diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index c9f7da75047e57..84a9e55bdcd92e 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -40,7 +40,7 @@ void OBSBasicTransform::HookWidget(QWidget *widget, const char *signal, #define ISCROLL_CHANGED SIGNAL(valueChanged(int)) #define DSCROLL_CHANGED SIGNAL(valueChanged(double)) -OBSBasicTransform::OBSBasicTransform(OBSBasic *parent) +OBSBasicTransform::OBSBasicTransform(OBSSceneItem item, OBSBasic *parent) : QDialog(parent), ui(new Ui::OBSBasicTransform), main(parent) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); @@ -69,7 +69,6 @@ OBSBasicTransform::OBSBasicTransform(OBSBasic *parent) installEventFilter(CreateShortcutFilter()); - OBSSceneItem item = FindASelectedItem(main->GetCurrentScene()); OBSScene scene = obs_sceneitem_get_scene(item); SetScene(scene); SetItem(item); diff --git a/UI/window-basic-transform.hpp b/UI/window-basic-transform.hpp index fcbf4b35af013f..de9809b570c414 100644 --- a/UI/window-basic-transform.hpp +++ b/UI/window-basic-transform.hpp @@ -48,7 +48,7 @@ private slots: void on_resetButton_clicked(); public: - OBSBasicTransform(OBSBasic *parent); + OBSBasicTransform(OBSSceneItem item, OBSBasic *parent); ~OBSBasicTransform(); public slots: diff --git a/docs/sphinx/reference-frontend-api.rst b/docs/sphinx/reference-frontend-api.rst index d18e18823aad2b..7fc93f8202aaa5 100644 --- a/docs/sphinx/reference-frontend-api.rst +++ b/docs/sphinx/reference-frontend-api.rst @@ -794,6 +794,14 @@ Functions --------------------------------------- +.. function:: void *obs_frontend_open_sceneitem_edit_transform(obs_sceneitem_t *item) + + Opens the edit transform window of the specified sceneitem. + + :param item: The sceneitem to open the edit transform window of + +--------------------------------------- + .. function:: char *obs_frontend_get_current_record_output_path(void) :return: A new pointer to the current record output path. Free From 945deec266d5f748e107914583e022c607636bed Mon Sep 17 00:00:00 2001 From: bin Date: Wed, 1 Feb 2023 10:09:11 +0800 Subject: [PATCH 0104/2225] UI: Use input validator on resolution line edit in adv tab --- UI/window-basic-settings.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 9672f7afa09552..f2f22d75526af6 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -916,6 +916,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) QValidator *validator = new QRegularExpressionValidator(rx, this); ui->baseResolution->lineEdit()->setValidator(validator); ui->outputResolution->lineEdit()->setValidator(validator); + ui->advOutRescale->lineEdit()->setValidator(validator); + ui->advOutRecRescale->lineEdit()->setValidator(validator); + ui->advOutFFRescale->lineEdit()->setValidator(validator); connect(ui->useStreamKeyAdv, SIGNAL(clicked()), this, SLOT(UseStreamKeyAdvClicked())); From 318db2842a1deb6fb47695ba9b795ad511b994a4 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Tue, 31 Jan 2023 14:28:10 +0100 Subject: [PATCH 0105/2225] obs-scripting: Add PyType_Modified import for Swig 4.1.1 compat --- deps/obs-scripting/obs-scripting-python-import.c | 1 + deps/obs-scripting/obs-scripting-python-import.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/deps/obs-scripting/obs-scripting-python-import.c b/deps/obs-scripting/obs-scripting-python-import.c index 87b4880dfea475..88dad96909d62b 100644 --- a/deps/obs-scripting/obs-scripting-python-import.c +++ b/deps/obs-scripting/obs-scripting-python-import.c @@ -116,6 +116,7 @@ bool import_python(const char *python_path, python_version_t *python_version) } while (false) IMPORT_FUNC(PyType_Ready); + IMPORT_FUNC(PyType_Modified); IMPORT_FUNC(PyObject_GenericGetAttr); IMPORT_FUNC(PyObject_IsTrue); IMPORT_FUNC(Py_DecRef); diff --git a/deps/obs-scripting/obs-scripting-python-import.h b/deps/obs-scripting/obs-scripting-python-import.h index bf61bf08eaa4b4..b0b9e1db945bf0 100644 --- a/deps/obs-scripting/obs-scripting-python-import.h +++ b/deps/obs-scripting/obs-scripting-python-import.h @@ -57,6 +57,7 @@ typedef struct python_version { PY_EXTERN int (*Import_PyType_Ready)(PyTypeObject *); PY_EXTERN PyObject *(*Import_PyObject_GenericGetAttr)(PyObject *, PyObject *); +PY_EXTERN void (*Import_PyType_Modified)(PyTypeObject *); PY_EXTERN int (*Import_PyObject_IsTrue)(PyObject *); PY_EXTERN void (*Import_Py_DecRef)(PyObject *); PY_EXTERN void *(*Import_PyObject_Malloc)(size_t size); @@ -153,6 +154,7 @@ extern bool import_python(const char *python_path, #ifndef NO_REDEFS #define PyType_Ready Import_PyType_Ready #define PyType_GetFlags Import_PyType_GetFlags +#define PyType_Modified Import_PyType_Modified #define PyObject_GenericGetAttr Import_PyObject_GenericGetAttr #define PyObject_IsTrue Import_PyObject_IsTrue #define Py_DecRef Import_Py_DecRef From 2d3013ccdc447299a6a49a3fa6052d58479c0864 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Wed, 1 Feb 2023 12:21:59 +0100 Subject: [PATCH 0106/2225] UI: Add obs_frontend_add_undo_redo_action --- UI/api-interface.cpp | 14 ++++++++++++++ UI/obs-frontend-api/obs-frontend-api.cpp | 11 +++++++++++ UI/obs-frontend-api/obs-frontend-api.h | 5 +++++ UI/obs-frontend-api/obs-frontend-internal.hpp | 7 +++++++ docs/sphinx/reference-frontend-api.rst | 16 ++++++++++++++++ 5 files changed, 53 insertions(+) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index 34dd94d4daf50b..10382b28b47bea 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -670,6 +670,20 @@ struct OBSStudioAPI : obs_frontend_callbacks { return bstrdup(main->lastReplay.c_str()); } + void obs_frontend_add_undo_redo_action(const char *name, + const undo_redo_cb undo, + const undo_redo_cb redo, + const char *undo_data, + const char *redo_data, + bool repeatable) override + { + main->undo_s.add_action( + name, + [undo](const std::string &data) { undo(data.c_str()); }, + [redo](const std::string &data) { redo(data.c_str()); }, + undo_data, redo_data, repeatable); + } + void on_load(obs_data_t *settings) override { for (size_t i = saveCallbacks.size(); i > 0; i--) { diff --git a/UI/obs-frontend-api/obs-frontend-api.cpp b/UI/obs-frontend-api/obs-frontend-api.cpp index e5ca328fc2a744..56b349da4a3fa4 100644 --- a/UI/obs-frontend-api/obs-frontend-api.cpp +++ b/UI/obs-frontend-api/obs-frontend-api.cpp @@ -600,3 +600,14 @@ char *obs_frontend_get_last_replay(void) return !!callbacks_valid() ? c->obs_frontend_get_last_replay() : nullptr; } + +void obs_frontend_add_undo_redo_action(const char *name, + const undo_redo_cb undo, + const undo_redo_cb redo, + const char *undo_data, + const char *redo_data, bool repeatable) +{ + if (callbacks_valid()) + c->obs_frontend_add_undo_redo_action( + name, undo, redo, undo_data, redo_data, repeatable); +} diff --git a/UI/obs-frontend-api/obs-frontend-api.h b/UI/obs-frontend-api/obs-frontend-api.h index 797decb006ea75..df00024c2dde00 100644 --- a/UI/obs-frontend-api/obs-frontend-api.h +++ b/UI/obs-frontend-api/obs-frontend-api.h @@ -237,6 +237,11 @@ EXPORT char *obs_frontend_get_last_recording(void); EXPORT char *obs_frontend_get_last_screenshot(void); EXPORT char *obs_frontend_get_last_replay(void); +typedef void (*undo_redo_cb)(const char *data); +EXPORT void obs_frontend_add_undo_redo_action( + const char *name, const undo_redo_cb undo, const undo_redo_cb redo, + const char *undo_data, const char *redo_data, bool repeatable); + /* ------------------------------------------------------------------------- */ #ifdef __cplusplus diff --git a/UI/obs-frontend-api/obs-frontend-internal.hpp b/UI/obs-frontend-api/obs-frontend-internal.hpp index bb0bbec9a71f33..e0cd9a7b718692 100644 --- a/UI/obs-frontend-api/obs-frontend-internal.hpp +++ b/UI/obs-frontend-api/obs-frontend-internal.hpp @@ -153,6 +153,13 @@ struct obs_frontend_callbacks { virtual char *obs_frontend_get_last_recording(void) = 0; virtual char *obs_frontend_get_last_screenshot(void) = 0; virtual char *obs_frontend_get_last_replay(void) = 0; + + virtual void obs_frontend_add_undo_redo_action(const char *name, + const undo_redo_cb undo, + const undo_redo_cb redo, + const char *undo_data, + const char *redo_data, + bool repeatable) = 0; }; EXPORT void diff --git a/docs/sphinx/reference-frontend-api.rst b/docs/sphinx/reference-frontend-api.rst index 7fc93f8202aaa5..47eb89cc7ed30c 100644 --- a/docs/sphinx/reference-frontend-api.rst +++ b/docs/sphinx/reference-frontend-api.rst @@ -226,6 +226,10 @@ Structures/Enumerations Translation callback +.. type:: void (*undo_redo_cb)(const char *data) + + Undo redo callback + Functions --------- @@ -846,3 +850,15 @@ Functions :c:func:`bfree()` .. versionadded:: 29.0.0 + +--------------------------------------- + +.. function:: void obs_frontend_add_undo_redo_action(const char *name, const undo_redo_cb undo, const undo_redo_cb redo, const char *undo_data, const char *redo_data, bool repeatable) + + :param name: The name of the undo redo action + :param undo: Callback to use for undo + :param redo: Callback to use for redo + :param undo_data: String with data for the undo callback + :param redo_data: String with data for the redo callback + :param repeatable: Allow multiple actions with the same name to be merged to 1 undo redo action. + This uses the undo action from the first and the redo action from the last action. From 4fe2a43f00ab66285d446e91c9e07f60dc16e0f2 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 1 Feb 2023 22:53:29 +0100 Subject: [PATCH 0107/2225] libobs-d3d11: Log display DPI --- libobs-d3d11/CMakeLists.txt | 2 +- libobs-d3d11/d3d11-subsystem.cpp | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libobs-d3d11/CMakeLists.txt b/libobs-d3d11/CMakeLists.txt index 322fe9a59c41dd..8e67d65930ceec 100644 --- a/libobs-d3d11/CMakeLists.txt +++ b/libobs-d3d11/CMakeLists.txt @@ -45,7 +45,7 @@ else() GPU_PRIORITY_VAL=${GPU_PRIORITY_VAL}) endif() -target_link_libraries(libobs-d3d11 PRIVATE OBS::libobs d3d9 d3d11 dxgi) +target_link_libraries(libobs-d3d11 PRIVATE OBS::libobs d3d9 d3d11 dxgi shcore) set_target_properties( libobs-d3d11 diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index 4028bcc5a673aa..d83a94f4883a77 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -25,6 +25,7 @@ #include #include #include "d3d11-subsystem.hpp" +#include struct UnsupportedHWError : HRError { inline UnsupportedHWError(const char *str, HRESULT hr) @@ -1253,6 +1254,16 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) (unsigned)type); } + // These are always identical, but you still have to supply both, thanks Microsoft! + UINT dpiX, dpiY; + unsigned scaling = 100; + if (GetDpiForMonitor(desc.Monitor, MDT_EFFECTIVE_DPI, &dpiX, + &dpiY) == S_OK) { + scaling = (unsigned)(dpiX * 100.0f / 96.0f); + } else { + dpiX = 0; + } + const RECT &rect = desc.DesktopCoordinates; const ULONG nits = GetSdrWhiteNits(desc.Monitor); blog(LOG_INFO, @@ -1265,12 +1276,13 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) "\t bits_per_color=%u\n" "\t space=%s\n" "\t sdr_white_nits=%lu\n" - "\t nit_range=[min=%f, max=%f, max_full_frame=%f]", + "\t nit_range=[min=%f, max=%f, max_full_frame=%f]\n" + "\t dpi=%u (%u%%)", i, target.monitorFriendlyDeviceName, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, desc.AttachedToDesktop ? "true" : "false", refresh, bits_per_color, space, nits, min_luminance, max_luminance, - max_full_frame_luminance); + max_full_frame_luminance, dpiX, scaling); } } From 148122f5aa281a84c61af20a6d014276533a2f24 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 4 Feb 2023 10:17:42 -0800 Subject: [PATCH 0108/2225] graphics-hook: Stop trying to connect early It never works, and leaves a confusing message behind. --- plugins/win-capture/graphics-hook/graphics-hook.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/win-capture/graphics-hook/graphics-hook.c b/plugins/win-capture/graphics-hook/graphics-hook.c index 25cb91c9b75065..294604ea3b8103 100644 --- a/plugins/win-capture/graphics-hook/graphics-hook.c +++ b/plugins/win-capture/graphics-hook/graphics-hook.c @@ -244,8 +244,6 @@ static inline bool init_hook(HANDLE thread_handle) _snwprintf(keepalive_name, sizeof(keepalive_name) / sizeof(wchar_t), L"%s%lu", WINDOW_HOOK_KEEPALIVE, GetCurrentProcessId()); - init_pipe(); - init_dummy_window_thread(); log_current_process(); From 26725fa2d5cad74627bbd2095b25f1363005a398 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sun, 11 Dec 2022 22:50:56 -0600 Subject: [PATCH 0109/2225] UI: Disable properties button in source toolbar If a scene or group is selected, disable the properties button in the source toolbar. This also does a refactor of the function to enable/disable the toolbar buttons. --- UI/window-basic-main.cpp | 27 +++++++++++++++++++++------ UI/window-basic-main.hpp | 2 +- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index cd36a4e115875b..f8fe21d1aaeed2 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3089,10 +3089,26 @@ void OBSBasic::UpdateContextBarDeferred(bool force) Qt::QueuedConnection, Q_ARG(bool, force)); } -void OBSBasic::SourceToolBarActionsSetEnabled(bool enable) +void OBSBasic::SourceToolBarActionsSetEnabled() { + bool enable = false; + bool disableProps = false; + + OBSSceneItem item = GetCurrentSceneItem(); + + if (item) { + OBSSource source = obs_sceneitem_get_source(item); + disableProps = !obs_source_configurable(source); + + enable = true; + } + + if (disableProps) + ui->actionSourceProperties->setEnabled(false); + else + ui->actionSourceProperties->setEnabled(enable); + ui->actionRemoveSource->setEnabled(enable); - ui->actionSourceProperties->setEnabled(enable); ui->actionSourceUp->setEnabled(enable); ui->actionSourceDown->setEnabled(enable); @@ -3101,14 +3117,13 @@ void OBSBasic::SourceToolBarActionsSetEnabled(bool enable) void OBSBasic::UpdateContextBar(bool force) { - OBSSceneItem item = GetCurrentSceneItem(); - bool enable = item != nullptr; - - SourceToolBarActionsSetEnabled(enable); + SourceToolBarActionsSetEnabled(); if (!ui->contextContainer->isVisible() && !force) return; + OBSSceneItem item = GetCurrentSceneItem(); + if (item) { obs_source_t *source = obs_sceneitem_get_source(item); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 065d7b51b9d6ae..6e78f07a8adbed 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -638,7 +638,7 @@ class OBSBasic : public OBSMainWindow { bool drawSpacingHelpers = true; float GetDevicePixelRatio(); - void SourceToolBarActionsSetEnabled(bool enable); + void SourceToolBarActionsSetEnabled(); std::string lastScreenshot; std::string lastReplay; From 48b2efdb2014fc37d2a2cf0dea245f206456f323 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 5 Feb 2023 02:36:52 +0100 Subject: [PATCH 0110/2225] CI: Use cURL for downloading dependency packages --- CI/windows/01_install_dependencies.ps1 | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/CI/windows/01_install_dependencies.ps1 b/CI/windows/01_install_dependencies.ps1 index 3691564bc242f1..ba90dff33e7274 100644 --- a/CI/windows/01_install_dependencies.ps1 +++ b/CI/windows/01_install_dependencies.ps1 @@ -31,9 +31,7 @@ Function Install-obs-deps { if (!(Test-Path "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}")) { Write-Step "Download..." - $ProgressPreference = $(if ($Quiet.isPresent) { "SilentlyContinue" } else { "Continue" }) - Invoke-WebRequest -Uri "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-${Version}-${ArchSuffix}.zip" -UseBasicParsing -OutFile "windows-deps-${Version}-${ArchSuffix}.zip" - $ProgressPreference = "Continue" + curl.exe -Lf "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-${Version}-${ArchSuffix}.zip" -o "windows-deps-${Version}-${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" }) Write-Step "Unpack..." @@ -57,9 +55,7 @@ function Install-qt-deps { if (!(Test-Path "${DepsBuildDir}/windows-deps-${Version}-${ArchSuffix}/mkspecs")) { Write-Step "Download..." - $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' }) - Invoke-WebRequest -Uri "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-qt6-${Version}-${ArchSuffix}.zip" -UseBasicParsing -OutFile "windows-deps-qt6-${Version}-${ArchSuffix}.zip" - $ProgressPreference = "Continue" + curl.exe -Lf "https://github.com/obsproject/obs-deps/releases/download/${Version}/windows-deps-qt6-${Version}-${ArchSuffix}.zip" -o "windows-deps-qt6-${Version}-${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" }) Write-Step "Unpack..." @@ -80,9 +76,7 @@ function Install-vlc { if (!((Test-Path "$DepsBuildDir/vlc-${Version}") -and (Test-Path "$DepsBuildDir/vlc-${Version}/include/vlc/vlc.h"))) { Write-Step "Download..." - $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' }) - Invoke-WebRequest -Uri "https://cdn-fastly.obsproject.com/downloads/vlc.zip" -UseBasicParsing -OutFile "vlc_${Version}.zip" - $ProgressPreference = "Continue" + curl.exe -Lf "https://cdn-fastly.obsproject.com/downloads/vlc.zip" -o "vlc_${Version}.zip" $(if ($Quiet.isPresent) { "-s" }) Write-Step "Unpack..." # Expand-Archive -Path "vlc_${Version}.zip" @@ -105,9 +99,7 @@ function Install-cef { if (!((Test-Path "${DepsBuildDir}/cef_binary_${Version}_windows_${ArchSuffix}") -and (Test-Path "${DepsBuildDir}/cef_binary_${Version}_windows_${ArchSuffix}/build/libcef_dll_wrapper/Release/libcef_dll_wrapper.lib"))) { Write-Step "Download..." - $ProgressPreference = $(if ($Quiet.isPresent) { 'SilentlyContinue' } else { 'Continue' }) - Invoke-WebRequest -Uri "https://cdn-fastly.obsproject.com/downloads/cef_binary_${Version}_windows_${ArchSuffix}.zip" -UseBasicParsing -OutFile "cef_binary_${Version}_windows_${ArchSuffix}.zip" - $ProgressPreference = "Continue" + curl.exe -Lf "https://cdn-fastly.obsproject.com/downloads/cef_binary_${Version}_windows_${ArchSuffix}.zip" -o "cef_binary_${Version}_windows_${ArchSuffix}.zip" $(if ($Quiet.isPresent) { "-s" }) Write-Step "Unpack..." Expand-Archive -Path "cef_binary_${Version}_windows_${ArchSuffix}.zip" -Force From 1f469e4f7c56bea2e0394aa213f5bef7a635e5c1 Mon Sep 17 00:00:00 2001 From: Jim Date: Fri, 3 Feb 2023 12:01:04 -0800 Subject: [PATCH 0111/2225] libobs/media-io: Add get_total_audio_size() get_audio_size() gets the size of individual planes. get_total_audio_size() gets the size if you include all planes. --- libobs/media-io/audio-io.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libobs/media-io/audio-io.h b/libobs/media-io/audio-io.h index 3712f3a2225128..ed0387605fb193 100644 --- a/libobs/media-io/audio-io.h +++ b/libobs/media-io/audio-io.h @@ -193,6 +193,14 @@ static inline size_t get_audio_size(enum audio_format format, get_audio_bytes_per_channel(format) * frames; } +static inline size_t get_total_audio_size(enum audio_format format, + enum speaker_layout speakers, + uint32_t frames) +{ + return get_audio_channels(speakers) * + get_audio_bytes_per_channel(format) * frames; +} + static inline uint64_t audio_frames_to_ns(size_t sample_rate, uint64_t frames) { return util_mul_div64(frames, 1000000000ULL, sample_rate); From 44882022470d93b928712bd7e3cee3ab4de5762a Mon Sep 17 00:00:00 2001 From: Jim Date: Fri, 3 Feb 2023 12:02:53 -0800 Subject: [PATCH 0112/2225] obs-ffmpeg: Remove unused variables --- plugins/obs-ffmpeg/obs-ffmpeg-source.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-source.c b/plugins/obs-ffmpeg/obs-ffmpeg-source.c index d358c27324ce10..5233da0d6fb093 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-source.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-source.c @@ -34,12 +34,6 @@ struct ffmpeg_source { bool media_valid; bool destroy_media; - struct SwsContext *sws_ctx; - int sws_width; - int sws_height; - enum AVPixelFormat sws_format; - uint8_t *sws_data; - int sws_linesize; enum video_range_type range; bool is_linear_alpha; obs_source_t *source; @@ -651,9 +645,6 @@ static void ffmpeg_source_destroy(void *data) if (s->media_valid) mp_media_free(&s->media); - if (s->sws_ctx != NULL) - sws_freeContext(s->sws_ctx); - bfree(s->sws_data); bfree(s->input); bfree(s->input_format); bfree(s->ffmpeg_options); From f81f580d26366dec262f0ef2144cf7a77ae86393 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Tue, 7 Feb 2023 14:56:24 +0100 Subject: [PATCH 0113/2225] flatpak: Override PipeWire to 0.3.65 Fixe crashes with 0.3.48/49 daemons. --- CI/flatpak/com.obsproject.Studio.json | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json index 0b5789cbc6723b..cf79328f6de5bf 100644 --- a/CI/flatpak/com.obsproject.Studio.json +++ b/CI/flatpak/com.obsproject.Studio.json @@ -330,6 +330,38 @@ } ] }, + { + "name": "pipewire", + "buildsystem": "meson", + "config-opts": [ + "-Daudiotestsrc=disabled", + "-Droc=disabled", + "-Dvideotestsrc=disabled", + "-Dvolume=disabled", + "-Dvulkan=disabled", + "-Ddocs=disabled", + "-Dman=disabled", + "-Dbluez5-codec-ldac=disabled", + "-Dbluez5-codec-aptx=disabled", + "-Dlibcamera=disabled", + "-Dudevrulesdir=/app/lib/udev/rules.d/", + "-Dsession-managers=[]", + "-Dtests=disabled", + "-Dexamples=disabled", + "-Dpw-cat=disabled" + ], + "cleanup": [ + "/bin" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/pipewire/pipewire.git", + "tag": "0.3.65", + "commit": "9558a5d5e0360d8af822431c76ee858a8c7495ac" + } + ] + }, { "name": "ntv2", "buildsystem": "cmake-ninja", From b2375a0660b9174a42e05ce1b32ae63e2457e5b1 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Wed, 8 Feb 2023 11:13:41 -0800 Subject: [PATCH 0114/2225] obs-ffmpeg: Initialize SRT stats object before requesting stats The `srt_bstats()` function is not guaranteed to zero the stats object before filling in stats. If a socket was connected, then disconnected, without any data being sent over it, the stats object would remain uninitialized, and weird results could occur. --- plugins/obs-ffmpeg/obs-ffmpeg-srt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h index 17a970d3970281..cbd5f294fcbf9e 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-srt.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-srt.h @@ -854,7 +854,7 @@ static int libsrt_close(URLContext *h) if (s->passphrase) av_freep(&s->passphrase); /* Log stream stats. */ - SRT_TRACEBSTATS perf; + SRT_TRACEBSTATS perf = {0}; srt_bstats(s->fd, &perf, 1); blog(LOG_INFO, "---------------------------------"); blog(LOG_INFO, From a0b5c1b3f5027600f097ad180ff2efa5baf73df4 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 5 Feb 2023 17:23:40 +0100 Subject: [PATCH 0115/2225] UI: Fix properties widget being cut off until resize --- UI/properties-view.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/UI/properties-view.cpp b/UI/properties-view.cpp index 6ceceb2378ad1a..c596c06964ad3f 100644 --- a/UI/properties-view.cpp +++ b/UI/properties-view.cpp @@ -138,6 +138,7 @@ void OBSPropertiesView::RefreshProperties() setWidget(widget); SetScrollPos(h, v); setSizePolicy(mainPolicy); + adjustSize(); lastFocused.clear(); if (lastWidget) { From 35ee1b2ed1778cb79b10b68cfabc60d1da4b7ff8 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 4 Feb 2023 11:03:18 -0800 Subject: [PATCH 0116/2225] libobs-d3d11: Log display ids --- libobs-d3d11/d3d11-subsystem.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index d83a94f4883a77..5e62c7e47f8a61 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -1192,6 +1192,22 @@ static ULONG GetSdrWhiteNits(HMONITOR monitor) return nits; } +static void PopulateMonitorIds(HMONITOR handle, char *id, char *alt_id, + size_t capacity) +{ + MONITORINFOEXA mi; + mi.cbSize = sizeof(mi); + if (GetMonitorInfoA(handle, (LPMONITORINFO)&mi)) { + strcpy_s(alt_id, capacity, mi.szDevice); + DISPLAY_DEVICEA device; + device.cb = sizeof(device); + if (EnumDisplayDevicesA(mi.szDevice, 0, &device, + EDD_GET_DEVICE_INTERFACE_NAME)) { + strcpy_s(id, capacity, device.DeviceID); + } + } +} + static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) { UINT i; @@ -1207,6 +1223,11 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) bool target_found = false; DISPLAYCONFIG_TARGET_DEVICE_NAME target; + constexpr size_t id_capacity = 128; + char id[id_capacity]{}; + char alt_id[id_capacity]{}; + PopulateMonitorIds(desc.Monitor, id, alt_id, id_capacity); + MONITORINFOEX info; info.cbSize = sizeof(info); if (GetMonitorInfo(desc.Monitor, &info)) { @@ -1277,12 +1298,14 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) "\t space=%s\n" "\t sdr_white_nits=%lu\n" "\t nit_range=[min=%f, max=%f, max_full_frame=%f]\n" - "\t dpi=%u (%u%%)", + "\t dpi=%u (%u%%)\n" + "\t id=%s\n" + "\t alt_id=%s", i, target.monitorFriendlyDeviceName, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, desc.AttachedToDesktop ? "true" : "false", refresh, bits_per_color, space, nits, min_luminance, max_luminance, - max_full_frame_luminance, dpiX, scaling); + max_full_frame_luminance, dpiX, scaling, id, alt_id); } } From 6734167bf160e1f384f2e79cef6d89c31b5d5746 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 4 Feb 2023 11:03:25 -0800 Subject: [PATCH 0117/2225] win-capture: Log display ids --- .../win-capture/duplicator-monitor-capture.c | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index 64fb0b2b7b389d..7a4b1649b4b3a1 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -70,6 +70,8 @@ struct duplicator_capture { obs_source_t *source; pthread_mutex_t update_mutex; char monitor_id[128]; + char id[128]; + char alt_id[128]; char monitor_name[64]; enum display_capture_method method; bool reset_wgc; @@ -96,6 +98,8 @@ struct duplicator_capture { struct duplicator_monitor_info { char device_id[128]; + char id[128]; + char alt_id[128]; char name[64]; RECT rect; HMONITOR handle; @@ -204,10 +208,15 @@ static BOOL CALLBACK enum_monitor(HMONITOR handle, HDC hdc, LPRECT rect, match = strcmp(monitor->device_id, device.DeviceID) == 0; if (match) { - monitor->rect = *rect; - monitor->handle = handle; + strcpy_s(monitor->id, _countof(monitor->id), + device.DeviceID); + strcpy_s(monitor->alt_id, + _countof(monitor->alt_id), + mi.szDevice); GetMonitorName(handle, monitor->name, _countof(monitor->name)); + monitor->rect = *rect; + monitor->handle = handle; } } } @@ -230,10 +239,12 @@ static BOOL CALLBACK enum_monitor_fallback(HMONITOR handle, HDC hdc, if (GetMonitorInfoA(handle, (LPMONITORINFO)&mi)) { match = strcmp(monitor->device_id, mi.szDevice) == 0; if (match) { - monitor->rect = *rect; - monitor->handle = handle; + strcpy_s(monitor->alt_id, _countof(monitor->alt_id), + mi.szDevice); GetMonitorName(handle, monitor->name, _countof(monitor->name)); + monitor->rect = *rect; + monitor->handle = handle; } } @@ -246,9 +257,13 @@ static void log_settings(struct duplicator_capture *capture, info("update settings:\n" "\tdisplay: %s (%ldx%ld)\n" "\tcursor: %s\n" - "\tmethod: %s", + "\tmethod: %s\n" + "\tid: %s\n" + "\talt_id: %s\n" + "\tsetting_id: %s", monitor, width, height, capture->capture_cursor ? "true" : "false", - get_method_name(capture->method)); + get_method_name(capture->method), capture->id, capture->alt_id, + capture->monitor_id); } static enum display_capture_method @@ -312,6 +327,8 @@ static inline void update_settings(struct duplicator_capture *capture, strcpy_s(capture->monitor_id, _countof(capture->monitor_id), monitor.device_id); + strcpy_s(capture->id, _countof(capture->id), monitor.id); + strcpy_s(capture->alt_id, _countof(capture->alt_id), monitor.alt_id); strcpy_s(capture->monitor_name, _countof(capture->monitor_name), monitor.name); capture->handle = monitor.handle; From ad3df88fe30753ba26b87fc9cb8300c29241aadf Mon Sep 17 00:00:00 2001 From: pkv Date: Wed, 8 Feb 2023 13:40:51 +0100 Subject: [PATCH 0118/2225] obs-ffmpeg: Fix encoding of 2.1 with FFmpeg aac encoder The aac spec has a list of default channel layouts that are implemented by all aac encoders / decoders. Unfortunately 2.1 is not in that list. When I wrote the surround sound support into OBS, as a workaround I decided to encode 2.1 as AV_CH_LAYOUT_SURROUND = FL+FR+FC. The LFE channel is encoded as a regular audio channel which uses more bits but this allows compatibility with all aac decoders. Recently we updated to the new channel layout API of FFmpeg, but the mapping of 2.1 to AV_CH_LAYOUT_SURROUND was forgotten in the FFmpeg native aac encoder. This is remedied here. Signed-off-by: pkv --- plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index 41e4c79175ba0c..6b08cb58ec2767 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -235,6 +235,9 @@ static void *enc_create(obs_data_t *settings, obs_encoder_t *encoder, if (aoi->speakers == SPEAKERS_4POINT1) enc->context->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_4POINT1; + if (aoi->speakers == SPEAKERS_2POINT1) + enc->context->ch_layout = + (AVChannelLayout)AV_CHANNEL_LAYOUT_SURROUND; #endif enc->context->sample_rate = audio_output_get_sample_rate(audio); From 228a170361435fd380794d98cbaeb355d29cb45b Mon Sep 17 00:00:00 2001 From: bin Date: Tue, 7 Feb 2023 12:11:12 +0800 Subject: [PATCH 0119/2225] obs-filters: Fix preset properties refresh --- plugins/obs-filters/expander-filter.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index e162d44264c937..524e84115e03d9 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -459,6 +459,15 @@ expander_filter_audio(void *data, struct obs_audio_data *audio) return audio; } +static bool presets_changed(obs_properties_t *props, obs_property_t *prop, + obs_data_t *settings) +{ + UNUSED_PARAMETER(props); + UNUSED_PARAMETER(prop); + UNUSED_PARAMETER(settings); + return true; +} + static obs_properties_t *expander_properties(void *data) { struct expander_data *cd = data; @@ -472,6 +481,7 @@ static obs_properties_t *expander_properties(void *data) "expander"); obs_property_list_add_string(presets, TEXT_PRESETS_GATE, "gate"); + obs_property_set_modified_callback(presets, presets_changed); } p = obs_properties_add_float_slider( From ee6ddeeaedf0db366a3ddf5b1f1959deeb53664c Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Wed, 8 Feb 2023 18:08:20 +0900 Subject: [PATCH 0120/2225] libobs: Avoid position underflow when mixing audio sources When a variable `pos` became larger than `AUDIO_OUTPUT_FRAMES`, `count` will get overflowed number. To avoid the overflow, continue the loop when `AUDIO_OUTPUT_FRAMES - pos` is not positive. --- libobs/obs-scene.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index c5fff5f922b3ef..c415268b8b95b4 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -1472,6 +1472,12 @@ static bool scene_audio_render(void *data, uint64_t *ts_out, pos = (size_t)ns_to_audio_frames(sample_rate, source_ts - timestamp); + + if (pos >= AUDIO_OUTPUT_FRAMES) { + item = item->next; + continue; + } + count = AUDIO_OUTPUT_FRAMES - pos; if (!apply_buf && !item->visible && From d831e9403f7cd9532b9d18c5a5a280b60fc3852e Mon Sep 17 00:00:00 2001 From: bin Date: Thu, 9 Feb 2023 15:31:34 +0800 Subject: [PATCH 0121/2225] obs-vst: Read plugins in symlink --- plugins/obs-vst/obs-vst.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/obs-vst/obs-vst.cpp b/plugins/obs-vst/obs-vst.cpp index 3b9f9745f37b11..f2c6afe6733370 100644 --- a/plugins/obs-vst/obs-vst.cpp +++ b/plugins/obs-vst/obs-vst.cpp @@ -263,7 +263,9 @@ static void fill_out_plugins(obs_property_t *list) for (int a = 0; a < dir_list.size(); ++a) { QDir search_dir(dir_list[a]); search_dir.setNameFilters(filters); - QDirIterator it(search_dir, QDirIterator::Subdirectories); + QDirIterator it(search_dir, + QDirIterator::Subdirectories | + QDirIterator::FollowSymlinks); while (it.hasNext()) { QString path = it.next(); QString name = it.fileName(); From 213ce75328a8fda618b74f197c30832209e7724b Mon Sep 17 00:00:00 2001 From: Ilya Melamed Date: Fri, 10 Feb 2023 14:52:15 +0300 Subject: [PATCH 0122/2225] UI: Add check for null widgetForAction result In some cases, `QToolbar::widgetForAction` may return `nullptr`. This causes a crash on affected system. To mitigate this, we check for `widgetForAction` result and skip operating on a NULL widget. --- UI/qt-wrappers.cpp | 4 ++++ UI/window-basic-main.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/UI/qt-wrappers.cpp b/UI/qt-wrappers.cpp index 4a89dc8fc27534..030ecbeaef2217 100644 --- a/UI/qt-wrappers.cpp +++ b/UI/qt-wrappers.cpp @@ -412,6 +412,10 @@ void RefreshToolBarStyling(QToolBar *toolBar) { for (QAction *action : toolBar->actions()) { QWidget *widget = toolBar->widgetForAction(action); + + if (!widget) + continue; + widget->style()->unpolish(widget); widget->style()->polish(widget); } diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index f8fe21d1aaeed2..2a417017c715b9 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -587,6 +587,9 @@ void OBSBasic::copyActionsDynamicProperties() for (QAction *x : ui->scenesToolbar->actions()) { QWidget *temp = ui->scenesToolbar->widgetForAction(x); + if (!temp) + continue; + for (QByteArray &y : x->dynamicPropertyNames()) { temp->setProperty(y, x->property(y)); } @@ -595,6 +598,9 @@ void OBSBasic::copyActionsDynamicProperties() for (QAction *x : ui->sourcesToolbar->actions()) { QWidget *temp = ui->sourcesToolbar->widgetForAction(x); + if (!temp) + continue; + for (QByteArray &y : x->dynamicPropertyNames()) { temp->setProperty(y, x->property(y)); } @@ -603,6 +609,9 @@ void OBSBasic::copyActionsDynamicProperties() for (QAction *x : ui->mixerToolbar->actions()) { QWidget *temp = ui->mixerToolbar->widgetForAction(x); + if (!temp) + continue; + for (QByteArray &y : x->dynamicPropertyNames()) { temp->setProperty(y, x->property(y)); } From 5bdf492f8ac17923092423895be35ec33b40b63a Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 10 Feb 2023 13:27:08 +0100 Subject: [PATCH 0123/2225] UI: Avoid excessive config reads when drawing preview --- UI/window-basic-main.cpp | 15 +++++++++++++++ UI/window-basic-main.hpp | 2 ++ UI/window-basic-preview.cpp | 17 ++++------------- UI/window-basic-preview.hpp | 22 ++++++++++++++++++++++ UI/window-basic-settings.cpp | 8 +++++--- 5 files changed, 48 insertions(+), 16 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 2a417017c715b9..ffc8064f493ff1 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -488,6 +488,7 @@ OBSBasic::OBSBasic(QWidget *parent) UpdatePreviewSafeAreas(); UpdatePreviewSpacingHelpers(); + UpdatePreviewOverflowSettings(); } static void SaveAudioDevice(const char *name, int channel, obs_data_t *parent, @@ -10294,6 +10295,20 @@ void OBSBasic::UpdatePreviewSafeAreas() "ShowSafeAreas"); } +void OBSBasic::UpdatePreviewOverflowSettings() +{ + bool hidden = config_get_bool(App()->GlobalConfig(), "BasicWindow", + "OverflowHidden"); + bool select = config_get_bool(App()->GlobalConfig(), "BasicWindow", + "OverflowSelectionHidden"); + bool always = config_get_bool(App()->GlobalConfig(), "BasicWindow", + "OverflowAlwaysVisible"); + + ui->preview->SetOverflowHidden(hidden); + ui->preview->SetOverflowSelectionHidden(select); + ui->preview->SetOverflowAlwaysVisible(always); +} + void OBSBasic::SetDisplayAffinity(QWindow *window) { if (!SetDisplayAffinitySupported()) diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 6e78f07a8adbed..a94e62a0372c74 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -643,6 +643,8 @@ class OBSBasic : public OBSMainWindow { std::string lastScreenshot; std::string lastReplay; + void UpdatePreviewOverflowSettings(); + public slots: void DeferSaveBegin(); void DeferSaveEnd(); diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index c56e63d3a4d948..7fb8bd5569e43b 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -1868,10 +1868,9 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene, if (!SceneItemHasVideo(item)) return true; - bool select = config_get_bool(GetGlobalConfig(), "BasicWindow", - "OverflowSelectionHidden"); + OBSBasicPreview *prev = reinterpret_cast(param); - if (!select && !obs_sceneitem_visible(item)) + if (!prev->GetOverflowSelectionHidden() && !obs_sceneitem_visible(item)) return true; if (obs_sceneitem_is_group(item)) { @@ -1885,14 +1884,9 @@ bool OBSBasicPreview::DrawSelectedOverflow(obs_scene_t *scene, gs_matrix_pop(); } - bool always = config_get_bool(GetGlobalConfig(), "BasicWindow", - "OverflowAlwaysVisible"); - - if (!always && !obs_sceneitem_selected(item)) + if (!prev->GetOverflowAlwaysVisible() && !obs_sceneitem_selected(item)) return true; - OBSBasicPreview *prev = reinterpret_cast(param); - matrix4 boxTransform; matrix4 invBoxTransform; obs_sceneitem_get_box_transform(item, &boxTransform); @@ -2177,10 +2171,7 @@ void OBSBasicPreview::DrawOverflow() if (locked) return; - bool hidden = config_get_bool(GetGlobalConfig(), "BasicWindow", - "OverflowHidden"); - - if (hidden) + if (overflowHidden) return; GS_DEBUG_MARKER_BEGIN(GS_DEBUG_COLOR_DEFAULT, "DrawOverflow"); diff --git a/UI/window-basic-preview.hpp b/UI/window-basic-preview.hpp index 586f740a95ec7d..e6754179e5faad 100644 --- a/UI/window-basic-preview.hpp +++ b/UI/window-basic-preview.hpp @@ -73,6 +73,9 @@ class OBSBasicPreview : public OBSQTDisplay { bool scrollMode = false; bool fixedScaling = false; bool selectionBox = false; + bool overflowHidden = false; + bool overflowSelectionHidden = false; + bool overflowAlwaysVisible = false; int32_t scalingLevel = 0; float scalingAmount = 1.0f; float groupRot = 0.0f; @@ -162,6 +165,25 @@ class OBSBasicPreview : public OBSQTDisplay { inline float GetScrollX() const { return scrollingOffset.x; } inline float GetScrollY() const { return scrollingOffset.y; } + inline void SetOverflowHidden(bool hidden) { overflowHidden = hidden; } + inline void SetOverflowSelectionHidden(bool hidden) + { + overflowSelectionHidden = hidden; + } + inline void SetOverflowAlwaysVisible(bool visible) + { + overflowAlwaysVisible = visible; + } + + inline bool GetOverflowSelectionHidden() const + { + return overflowSelectionHidden; + } + inline bool GetOverflowAlwaysVisible() const + { + return overflowAlwaysVisible; + } + /* use libobs allocator for alignment because the matrices itemToScreen * and screenToItem may contain SSE data, which will cause SSE * instructions to crash if the data is not aligned to at least a 16 diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index f2f22d75526af6..98720b2c9c8099 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -3170,18 +3170,20 @@ void OBSBasicSettings::SaveGeneralSettings() if (WidgetChanged(ui->snapDistance)) config_set_double(GetGlobalConfig(), "BasicWindow", "SnapDistance", ui->snapDistance->value()); - if (WidgetChanged(ui->overflowAlwaysVisible)) + if (WidgetChanged(ui->overflowAlwaysVisible) || + WidgetChanged(ui->overflowHide) || + WidgetChanged(ui->overflowSelectionHide)) { config_set_bool(GetGlobalConfig(), "BasicWindow", "OverflowAlwaysVisible", ui->overflowAlwaysVisible->isChecked()); - if (WidgetChanged(ui->overflowHide)) config_set_bool(GetGlobalConfig(), "BasicWindow", "OverflowHidden", ui->overflowHide->isChecked()); - if (WidgetChanged(ui->overflowSelectionHide)) config_set_bool(GetGlobalConfig(), "BasicWindow", "OverflowSelectionHidden", ui->overflowSelectionHide->isChecked()); + main->UpdatePreviewOverflowSettings(); + } if (WidgetChanged(ui->previewSafeAreas)) { config_set_bool(GetGlobalConfig(), "BasicWindow", "ShowSafeAreas", From 3e4bbe85c8be9630501e30b42e20c1f6ed7ac598 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 10 Feb 2023 15:09:12 +0100 Subject: [PATCH 0124/2225] UI: Remove workaround for current scene being deselectable on Qt 6.4.3+ Qt 6.2 introduced an issue where SingleSelection item views would deselect the current item if the user clicked on empty area in the widget. This was very confusing in the scene tree as it was now possible to unselect the current scene. A workaround for this in OBS was added in 08e4ee6 and expanded on in dc30cf0, but being quite hacky it never was the perfect solution. I since dug into Qt and fixed the issue upstream in qt/qtbase@f11e5435c7 for Qt 6.4.3 and newer, so we can remove the workaround when using those versions (with the long term goal of removing the code altogether). --- UI/item-widget-helpers.cpp | 5 +++++ UI/scene-tree.cpp | 2 ++ UI/scene-tree.hpp | 2 ++ 3 files changed, 9 insertions(+) diff --git a/UI/item-widget-helpers.cpp b/UI/item-widget-helpers.cpp index b1444f933eeec4..b10c957c1f5ddf 100644 --- a/UI/item-widget-helpers.cpp +++ b/UI/item-widget-helpers.cpp @@ -37,8 +37,10 @@ void DeleteListItem(QListWidget *widget, QListWidgetItem *item) void ClearListItems(QListWidget *widget) { +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3) // Workaround for the SceneTree workaround for QTBUG-105870 widget->setProperty("clearing", true); +#endif widget->setCurrentItem(nullptr, QItemSelectionModel::Clear); @@ -46,5 +48,8 @@ void ClearListItems(QListWidget *widget) delete widget->itemWidget(widget->item(i)); widget->clear(); +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3) + // Workaround for the SceneTree workaround for QTBUG-105870 widget->setProperty("clearing", false); +#endif } diff --git a/UI/scene-tree.cpp b/UI/scene-tree.cpp index 5444051734ea9a..5cad22571c9338 100644 --- a/UI/scene-tree.cpp +++ b/UI/scene-tree.cpp @@ -248,6 +248,7 @@ void SceneTree::rowsInserted(const QModelIndex &parent, int start, int end) QListWidget::rowsInserted(parent, start, end); } +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3) // Workaround for QTBUG-105870. Remove once that is solved upstream. void SceneTree::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) @@ -256,3 +257,4 @@ void SceneTree::selectionChanged(const QItemSelection &selected, !property("clearing").toBool()) setCurrentRow(deselected.indexes().front().row()); } +#endif diff --git a/UI/scene-tree.hpp b/UI/scene-tree.hpp index b80918f14dc4b0..0950f12eadccea 100644 --- a/UI/scene-tree.hpp +++ b/UI/scene-tree.hpp @@ -38,9 +38,11 @@ class SceneTree : public QListWidget { virtual void dragLeaveEvent(QDragLeaveEvent *event) override; virtual void rowsInserted(const QModelIndex &parent, int start, int end) override; +#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3) virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override; +#endif signals: void scenesReordered(); From eacc246584984e2daf8e35c9e5b8b71c24a77077 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 4 Feb 2023 12:34:48 +0100 Subject: [PATCH 0125/2225] libobs: Add Flatpak info logging --- libobs/obs-nix.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c index b574dbaa0d65da..bbd866f0b54000 100644 --- a/libobs/obs-nix.c +++ b/libobs/obs-nix.c @@ -21,6 +21,8 @@ #include "obs-nix-platform.h" #include "obs-nix-x11.h" +#include "util/config-file.h" + #ifdef ENABLE_WAYLAND #include "obs-nix-wayland.h" #endif @@ -305,6 +307,66 @@ static void log_distribution_info(void) free(line); } +static void log_flatpak_extensions(const char *extensions) +{ + if (!extensions) + return; + + char **exts_list = strlist_split(extensions, ';', false); + for (char **ext = exts_list; *ext != NULL; ext++) { + // Log the extension name without its commit hash + char **name = strlist_split(*ext, '=', false); + blog(LOG_INFO, " - %s", *name); + strlist_free(name); + } + strlist_free(exts_list); +} + +static void log_flatpak_info(void) +{ + config_t *fp_info = NULL; + + if (config_open(&fp_info, "/.flatpak-info", CONFIG_OPEN_EXISTING) != + CONFIG_SUCCESS) { + blog(LOG_ERROR, "Unable to open .flatpak-info file"); + return; + } + + const char *branch = config_get_string(fp_info, "Instance", "branch"); + const char *arch = config_get_string(fp_info, "Instance", "arch"); + + const char *runtime = + config_get_string(fp_info, "Application", "runtime"); + + const char *app_exts = + config_get_string(fp_info, "Instance", "app-extensions"); + const char *runtime_exts = + config_get_string(fp_info, "Instance", "runtime-extensions"); + + const char *fp_version = + config_get_string(fp_info, "Instance", "flatpak-version"); + + blog(LOG_INFO, "Flatpak Branch: %s", branch ? branch : "none"); + blog(LOG_INFO, "Flatpak Arch: %s", arch ? arch : "unknown"); + + blog(LOG_INFO, "Flatpak Runtime: %s", runtime ? runtime : "none"); + + if (app_exts) { + blog(LOG_INFO, "App Extensions:"); + log_flatpak_extensions(app_exts); + } + + if (runtime_exts) { + blog(LOG_INFO, "Runtime Extensions:"); + log_flatpak_extensions(runtime_exts); + } + + blog(LOG_INFO, "Flatpak Framework Version: %s", + fp_version ? fp_version : "unknown"); + + config_close(fp_info); +} + static void log_desktop_session_info(void) { char *session_ptr = getenv("XDG_SESSION_TYPE"); @@ -323,7 +385,11 @@ void log_system_info(void) log_memory_info(); log_kernel_version(); #if defined(__linux__) || defined(__FreeBSD__) - log_distribution_info(); + if (access("/.flatpak-info", F_OK) == 0) + log_flatpak_info(); + else + log_distribution_info(); + log_desktop_session_info(); #endif if (obs_get_nix_platform() == OBS_NIX_PLATFORM_X11_EGL) From cb6b5cc24944519f1479cfe75e18522f09c77b37 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 4 Feb 2023 14:15:35 +0100 Subject: [PATCH 0126/2225] libobs: Add desktop environment to Linux log --- libobs/obs-nix.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c index bbd866f0b54000..8b02bda2bd16bc 100644 --- a/libobs/obs-nix.c +++ b/libobs/obs-nix.c @@ -369,10 +369,19 @@ static void log_flatpak_info(void) static void log_desktop_session_info(void) { - char *session_ptr = getenv("XDG_SESSION_TYPE"); - if (session_ptr) { - blog(LOG_INFO, "Session Type: %s", session_ptr); - } + char *current_desktop = getenv("XDG_CURRENT_DESKTOP"); + char *session_desktop = getenv("XDG_SESSION_DESKTOP"); + char *session_type = getenv("XDG_SESSION_TYPE"); + + if (current_desktop && session_desktop) + blog(LOG_INFO, "Desktop Environment: %s (%s)", current_desktop, + session_desktop); + else if (current_desktop || session_desktop) + blog(LOG_INFO, "Desktop Environment: %s", + current_desktop ? current_desktop : session_desktop); + + if (session_type) + blog(LOG_INFO, "Session Type: %s", session_type); } #endif From 3840f92777a1e66a67dc20eb1c28b54f83e8968d Mon Sep 17 00:00:00 2001 From: Exeldro Date: Fri, 16 Dec 2022 15:49:14 +0100 Subject: [PATCH 0127/2225] win-dshow: Fix virtualcam output a default video format --- plugins/win-dshow/libdshowcapture | 2 +- .../virtualcam-module/virtualcam-filter.cpp | 9 +-------- .../virtualcam-module/virtualcam-filter.hpp | 14 +++++--------- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/plugins/win-dshow/libdshowcapture b/plugins/win-dshow/libdshowcapture index 2fa2e488b7dc4a..bac23f2ca01b71 160000 --- a/plugins/win-dshow/libdshowcapture +++ b/plugins/win-dshow/libdshowcapture @@ -1 +1 @@ -Subproject commit 2fa2e488b7dc4a266eb8f5be56ced626e39a6159 +Subproject commit bac23f2ca01b712b9740c6a3822d32c134ab6325 diff --git a/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp b/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp index 9c36ac843e2dd7..3a53d4ee7ebc38 100644 --- a/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp +++ b/plugins/win-dshow/virtualcam-module/virtualcam-filter.cpp @@ -14,18 +14,11 @@ extern volatile long locks; /* ========================================================================= */ -VCamFilter::VCamFilter() - : OutputFilter(VideoFormat::NV12, DEFAULT_CX, DEFAULT_CY, - DEFAULT_INTERVAL) +VCamFilter::VCamFilter() : OutputFilter() { thread_start = CreateEvent(nullptr, true, false, nullptr); thread_stop = CreateEvent(nullptr, true, false, nullptr); - AddVideoFormat(VideoFormat::I420, DEFAULT_CX, DEFAULT_CY, - DEFAULT_INTERVAL); - AddVideoFormat(VideoFormat::YUY2, DEFAULT_CX, DEFAULT_CY, - DEFAULT_INTERVAL); - format = VideoFormat::NV12; placeholder.scaled_data = nullptr; diff --git a/plugins/win-dshow/virtualcam-module/virtualcam-filter.hpp b/plugins/win-dshow/virtualcam-module/virtualcam-filter.hpp index 1b185396a72396..14824cac69af2c 100644 --- a/plugins/win-dshow/virtualcam-module/virtualcam-filter.hpp +++ b/plugins/win-dshow/virtualcam-module/virtualcam-filter.hpp @@ -10,10 +10,6 @@ #include "../../../libobs/util/windows/WinHandle.hpp" #include "../../../libobs/util/threading-windows.h" -#define DEFAULT_CX 1920 -#define DEFAULT_CY 1080 -#define DEFAULT_INTERVAL 333333ULL - typedef struct { int cx; int cy; @@ -30,11 +26,11 @@ class VCamFilter : public DShow::OutputFilter { bool in_obs = false; enum queue_state prev_state = SHARED_QUEUE_STATE_INVALID; placeholder_t placeholder; - uint32_t obs_cx = DEFAULT_CX; - uint32_t obs_cy = DEFAULT_CY; - uint64_t obs_interval = DEFAULT_INTERVAL; - uint32_t filter_cx = DEFAULT_CX; - uint32_t filter_cy = DEFAULT_CY; + uint32_t obs_cx = 0; + uint32_t obs_cy = 0; + uint64_t obs_interval = 0; + uint32_t filter_cx = 0; + uint32_t filter_cy = 0; DShow::VideoFormat format; WinHandle thread_start; WinHandle thread_stop; From 7a838e877f9003ed2b27b47ee9788dacbe6fc5f5 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Thu, 9 Feb 2023 01:08:09 -0600 Subject: [PATCH 0128/2225] UI: Fix scene item edit drag & drop bug If an user exits the source tree edit mode, without changing the name, the scene item would become undraggable until the scene is refreshed. We were setting the focus to just the label, not the whole widget. --- UI/source-tree.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/source-tree.cpp b/UI/source-tree.cpp index 90260a8547c17e..43d8948385c59c 100644 --- a/UI/source-tree.cpp +++ b/UI/source-tree.cpp @@ -413,7 +413,7 @@ void SourceTreeItem::ExitEditModeInternal(bool save) editor = nullptr; setFocusPolicy(Qt::NoFocus); boxLayout->insertWidget(index, label); - label->setFocus(); + setFocus(); /* ----------------------------------------- */ /* check for empty string */ From 67e6b8649ac4ebe6cd85a9ee1899b2131c51cc46 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 10 Feb 2023 00:24:52 +0100 Subject: [PATCH 0129/2225] mac-videotoolbox: Load encoders from system asynchronously Copying the encoder list takes a while which blocks the main thread. Doing the copying asynchronously removes instead of blocking the main thread improves startup performance by about 60ms. --- plugins/mac-videotoolbox/encoder.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/plugins/mac-videotoolbox/encoder.c b/plugins/mac-videotoolbox/encoder.c index 4c8c45ba3b33cc..7bd21202550e15 100644 --- a/plugins/mac-videotoolbox/encoder.c +++ b/plugins/mac-videotoolbox/encoder.c @@ -1477,8 +1477,23 @@ compare_encoder_list(const void *left_val, const void *right_val, void *unused) OBS_DECLARE_MODULE() OBS_MODULE_USE_DEFAULT_LOCALE("mac-videotoolbox", "en-US") +dispatch_group_t encoder_list_dispatch_group; +CFArrayRef encoder_list_const; bool obs_module_load(void) +{ + dispatch_queue_t queue = + dispatch_queue_create("Encoder list load queue", NULL); + encoder_list_dispatch_group = dispatch_group_create(); + dispatch_group_async(encoder_list_dispatch_group, queue, ^{ + VTCopyVideoEncoderList(NULL, &encoder_list_const); + }); + // The group dispatch keeps a reference until it's finished + dispatch_release(queue); + return true; +} + +void obs_module_post_load(void) { struct obs_encoder_info info = { .type = OBS_ENCODER_VIDEO, @@ -1496,8 +1511,8 @@ bool obs_module_load(void) da_init(vt_prores_hardware_encoder_list); da_init(vt_prores_software_encoder_list); - CFArrayRef encoder_list_const; - VTCopyVideoEncoderList(NULL, &encoder_list_const); + dispatch_group_wait(encoder_list_dispatch_group, DISPATCH_TIME_FOREVER); + dispatch_release(encoder_list_dispatch_group); CFIndex size = CFArrayGetCount(encoder_list_const); CFMutableArrayRef encoder_list = CFArrayCreateMutableCopy( @@ -1582,9 +1597,7 @@ bool obs_module_load(void) CFRelease(encoder_list); - VT_LOG(LOG_INFO, "Adding VideoToolbox encoders"); - - return true; + VT_LOG(LOG_INFO, "Added VideoToolbox encoders"); } void obs_module_unload(void) From 041fee048467dfd57b3c5fe604fdf603092aca33 Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sat, 11 Feb 2023 13:52:03 -0800 Subject: [PATCH 0130/2225] libobs-opengl: Accelerate dmabuf import Previously we would actually initialize a texture memory that would then also have to be deleted when we bound the EGLImage to the texture during dmabuf import. Instead simply do not create the dummy texture memory. One odd thing is that we must still query the texture to ensure its initialized or binding the EGLImage will not work. So we leave the TEXTURE_MAX_LEVEL check. This makes screencapture up to 100x faster on discrete intel cards and likely has some performance benefit for amd/integrated cards. Without this dmabufs are actually slower than shared memory for these intel cards. --- libobs-opengl/gl-egl-common.c | 2 +- libobs-opengl/gl-texture2d.c | 11 +---------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/libobs-opengl/gl-egl-common.c b/libobs-opengl/gl-egl-common.c index fb8a6b9df66c40..f06cd19019b297 100644 --- a/libobs-opengl/gl-egl-common.c +++ b/libobs-opengl/gl-egl-common.c @@ -186,7 +186,7 @@ struct gs_texture *gl_egl_create_texture_from_eglimage( struct gs_texture *texture = NULL; texture = gs_texture_create(width, height, color_format, 1, NULL, - GS_DYNAMIC); + GS_GL_DUMMYTEX); const GLuint gltex = *(GLuint *)gs_texture_get_obj(texture); gl_bind_texture(GL_TEXTURE_2D, gltex); diff --git a/libobs-opengl/gl-texture2d.c b/libobs-opengl/gl-texture2d.c index eec3534cd0d261..6c4aafb6febb43 100644 --- a/libobs-opengl/gl-texture2d.c +++ b/libobs-opengl/gl-texture2d.c @@ -110,16 +110,7 @@ gs_texture_t *device_texture_create(gs_device_t *device, uint32_t width, if (!gl_bind_texture(GL_TEXTURE_2D, tex->base.texture)) goto fail; - uint32_t row_size = - tex->width * gs_get_format_bpp(tex->base.format); - uint32_t tex_size = tex->height * row_size / 8; - bool compressed = gs_is_compressed_format(tex->base.format); - bool did_init = gl_init_face(GL_TEXTURE_2D, tex->base.gl_type, - 1, tex->base.gl_format, - tex->base.gl_internal_format, - compressed, tex->width, - tex->height, tex_size, NULL); - did_init = + bool did_init = gl_tex_param_i(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); bool did_unbind = gl_bind_texture(GL_TEXTURE_2D, 0); From 5b370d4e3a5680f01b64467c08e9b0dc016d89ac Mon Sep 17 00:00:00 2001 From: Service Checker Date: Mon, 13 Feb 2023 00:22:08 +0000 Subject: [PATCH 0131/2225] rtmp-services: Remove defunct servers/services --- plugins/rtmp-services/data/package.json | 4 +- plugins/rtmp-services/data/services.json | 65 ------------------------ 2 files changed, 2 insertions(+), 67 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 53ea4db42e0d27..6ff4cc6a917f21 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 217, + "version": 218, "files": [ { "name": "services.json", - "version": 217 + "version": 218 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 3801c0a1053062..f8973691943595 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2296,71 +2296,6 @@ "max audio bitrate": 196 } }, - { - "name": "Shareplay", - "more_info_link": "https://shareplay.tv", - "servers": [ - { - "name": "Default", - "url": "rtmp://shareplay.tv:833/live" - } - ], - "recommended": { - "keyint": 2, - "profile": "main", - "supported resolutions": [ - "1920x1080", - "1280x720", - "852x480", - "640x360" - ], - "bitrate matrix": [ - { - "res": "640x360", - "fps": 30, - "max bitrate": 1000 - }, - { - "res": "640x360", - "fps": 60, - "max bitrate": 1500 - }, - { - "res": "852x480", - "fps": 30, - "max bitrate": 2000 - }, - { - "res": "852x480", - "fps": 60, - "max bitrate": 3000 - }, - { - "res": "1280x720", - "fps": 30, - "max bitrate": 4000 - }, - { - "res": "1280x720", - "fps": 60, - "max bitrate": 6000 - }, - { - "res": "1920x1080", - "fps": 30, - "max bitrate": 6000 - }, - { - "res": "1920x1080", - "fps": 60, - "max bitrate": 9000 - } - ], - "max fps": 60, - "max video bitrate": 9000, - "max audio bitrate": 128 - } - }, { "name": "Sympla", "servers": [ From b8cfe1aab13313ebffc94b852d68a3754417c751 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 16:34:46 -0300 Subject: [PATCH 0132/2225] linux-pipewire: Return actual type in obs_pipewire_create Instead of returning an opaque void* pointer, return the leaf C type obs_pipewire_data*. This commit introduces no functional changes. --- plugins/linux-pipewire/pipewire.c | 2 +- plugins/linux-pipewire/pipewire.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index e2bbd600598d6d..3ee3748d9089a3 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -868,7 +868,7 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw) /* obs_source_info methods */ -void *obs_pipewire_create(int pipewire_fd, int pipewire_node) +obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node) { obs_pipewire_data *obs_pw = bzalloc(sizeof(obs_pipewire_data)); diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index 05118bf7c49252..f0df6e9066c9fe 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -24,7 +24,7 @@ typedef struct _obs_pipewire_data obs_pipewire_data; -void *obs_pipewire_create(int pipewire_fd, int pipewire_node); +obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node); void obs_pipewire_destroy(obs_pipewire_data *obs_pw); void obs_pipewire_show(obs_pipewire_data *obs_pw); From 874c30cb884a08229f7c86e2648459e13760d2b9 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 16:37:35 -0300 Subject: [PATCH 0133/2225] linux-pipewire: Cleanup D-Bus proxy on unload When the linux-pipewire plugin is unloaded, make sure to cleanup the D-Bus proxy for the ScreenCast portal too. This effectively doesn't change anything, but it's always good to keep up with the code hygiene. --- plugins/linux-pipewire/linux-pipewire.c | 2 ++ plugins/linux-pipewire/screencast-portal.c | 5 +++++ plugins/linux-pipewire/screencast-portal.h | 1 + 3 files changed, 8 insertions(+) diff --git a/plugins/linux-pipewire/linux-pipewire.c b/plugins/linux-pipewire/linux-pipewire.c index fea91254ac19ea..798ae2fe8ca9f2 100644 --- a/plugins/linux-pipewire/linux-pipewire.c +++ b/plugins/linux-pipewire/linux-pipewire.c @@ -43,6 +43,8 @@ bool obs_module_load(void) void obs_module_unload(void) { + screencast_portal_unload(); + #if PW_CHECK_VERSION(0, 3, 49) pw_deinit(); #endif diff --git a/plugins/linux-pipewire/screencast-portal.c b/plugins/linux-pipewire/screencast-portal.c index 08ed2f442f76f9..0765c44f5d4041 100644 --- a/plugins/linux-pipewire/screencast-portal.c +++ b/plugins/linux-pipewire/screencast-portal.c @@ -880,3 +880,8 @@ void screencast_portal_load(void) if (window_capture_available) obs_register_source(&screencast_portal_window_capture_info); } + +void screencast_portal_unload(void) +{ + g_clear_object(&screencast_proxy); +} diff --git a/plugins/linux-pipewire/screencast-portal.h b/plugins/linux-pipewire/screencast-portal.h index 874d5c35023950..0289d99c06a7e9 100644 --- a/plugins/linux-pipewire/screencast-portal.h +++ b/plugins/linux-pipewire/screencast-portal.h @@ -21,3 +21,4 @@ #pragma once void screencast_portal_load(void); +void screencast_portal_unload(void); From 86be35ae99c11d8e1ffe14199b941553148848df Mon Sep 17 00:00:00 2001 From: columbarius Date: Wed, 29 Jun 2022 00:28:26 +0200 Subject: [PATCH 0134/2225] linux-pipewire: Move stream properties to constructors And let each portal pass the stream properties relevant to them. This makes the pipewire.c more independent of the actual portal by providing a wrapper to create a stream. This will be relevant later, when linux-pipewire introduces more portals like the Camera one. --- plugins/linux-pipewire/pipewire.c | 17 +++++++++-------- plugins/linux-pipewire/pipewire.h | 7 ++++++- plugins/linux-pipewire/screencast-portal.c | 7 +++++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 3ee3748d9089a3..c52f64c32c8a58 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -791,7 +791,9 @@ static const struct pw_core_events core_events = { .error = on_core_error_cb, }; -static void play_pipewire_stream(obs_pipewire_data *obs_pw) +static void play_pipewire_stream(obs_pipewire_data *obs_pw, + const char *stream_name, + struct pw_properties *stream_properties) { struct spa_pod_builder pod_builder; const struct spa_pod **params = NULL; @@ -834,11 +836,8 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw) pw_thread_loop_wait(obs_pw->thread_loop); /* Stream */ - obs_pw->stream = pw_stream_new( - obs_pw->core, "OBS Studio", - pw_properties_new(PW_KEY_MEDIA_TYPE, "Video", - PW_KEY_MEDIA_CATEGORY, "Capture", - PW_KEY_MEDIA_ROLE, "Screen", NULL)); + obs_pw->stream = + pw_stream_new(obs_pw->core, stream_name, stream_properties); pw_stream_add_listener(obs_pw->stream, &obs_pw->stream_listener, &stream_events, obs_pw); blog(LOG_INFO, "[pipewire] Created stream %p", obs_pw->stream); @@ -868,7 +867,9 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw) /* obs_source_info methods */ -obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node) +obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, + const char *stream_name, + struct pw_properties *stream_properties) { obs_pipewire_data *obs_pw = bzalloc(sizeof(obs_pipewire_data)); @@ -876,7 +877,7 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node) obs_pw->pipewire_node = pipewire_node; init_format_info(obs_pw); - play_pipewire_stream(obs_pw); + play_pipewire_stream(obs_pw, stream_name, stream_properties); return obs_pw; } diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index f0df6e9066c9fe..88becc124ff94b 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -22,9 +22,14 @@ #include +#include +#include + typedef struct _obs_pipewire_data obs_pipewire_data; -obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node); +obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, + const char *stream_name, + struct pw_properties *stream_properties); void obs_pipewire_destroy(obs_pipewire_data *obs_pw); void obs_pipewire_show(obs_pipewire_data *obs_pw); diff --git a/plugins/linux-pipewire/screencast-portal.c b/plugins/linux-pipewire/screencast-portal.c index 0765c44f5d4041..e5907501534036 100644 --- a/plugins/linux-pipewire/screencast-portal.c +++ b/plugins/linux-pipewire/screencast-portal.c @@ -245,8 +245,11 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res, return; } - capture->obs_pw = - obs_pipewire_create(pipewire_fd, capture->pipewire_node); + capture->obs_pw = obs_pipewire_create( + pipewire_fd, capture->pipewire_node, "OBS Studio", + pw_properties_new(PW_KEY_MEDIA_TYPE, "Video", + PW_KEY_MEDIA_CATEGORY, "Capture", + PW_KEY_MEDIA_ROLE, "Screen", NULL)); obs_pipewire_set_cursor_visible(capture->obs_pw, capture->cursor_visible); } From 890ca94b0b42cbc802140f350111f664985dd375 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 16:55:05 -0300 Subject: [PATCH 0135/2225] linux-pipewire: Inline play_pipewire_stream() This separation of obs_pipewire_create() and play_pipewire_stream() was an artifact of how the original code was written, and there is no reason to keep this separation anymore. Inlining it will help future commits too. --- plugins/linux-pipewire/pipewire.c | 39 ++++++++++++++----------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index c52f64c32c8a58..04f5ca60b69207 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -791,22 +791,32 @@ static const struct pw_core_events core_events = { .error = on_core_error_cb, }; -static void play_pipewire_stream(obs_pipewire_data *obs_pw, - const char *stream_name, - struct pw_properties *stream_properties) +/* obs_source_info methods */ + +obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, + const char *stream_name, + struct pw_properties *stream_properties) { struct spa_pod_builder pod_builder; const struct spa_pod **params = NULL; + obs_pipewire_data *obs_pw; uint32_t n_params; uint8_t params_buffer[2048]; + obs_pw = bzalloc(sizeof(obs_pipewire_data)); + obs_pw->pipewire_fd = pipewire_fd; + obs_pw->pipewire_node = pipewire_node; + + init_format_info(obs_pw); + obs_pw->thread_loop = pw_thread_loop_new("PipeWire thread loop", NULL); obs_pw->context = pw_context_new( pw_thread_loop_get_loop(obs_pw->thread_loop), NULL, 0); if (pw_thread_loop_start(obs_pw->thread_loop) < 0) { blog(LOG_WARNING, "Error starting threaded mainloop"); - return; + bfree(obs_pw); + return NULL; } pw_thread_loop_lock(obs_pw->thread_loop); @@ -818,7 +828,8 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw, if (!obs_pw->core) { blog(LOG_WARNING, "Error creating PipeWire core: %m"); pw_thread_loop_unlock(obs_pw->thread_loop); - return; + bfree(obs_pw); + return NULL; } pw_core_add_listener(obs_pw->core, &obs_pw->core_listener, &core_events, @@ -851,7 +862,8 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw, if (!build_format_params(obs_pw, &pod_builder, ¶ms, &n_params)) { pw_thread_loop_unlock(obs_pw->thread_loop); teardown_pipewire(obs_pw); - return; + bfree(obs_pw); + return NULL; } pw_stream_connect( @@ -863,21 +875,6 @@ static void play_pipewire_stream(obs_pipewire_data *obs_pw, pw_thread_loop_unlock(obs_pw->thread_loop); bfree(params); -} - -/* obs_source_info methods */ - -obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, - const char *stream_name, - struct pw_properties *stream_properties) -{ - obs_pipewire_data *obs_pw = bzalloc(sizeof(obs_pipewire_data)); - - obs_pw->pipewire_fd = pipewire_fd; - obs_pw->pipewire_node = pipewire_node; - - init_format_info(obs_pw); - play_pipewire_stream(obs_pw, stream_name, stream_properties); return obs_pw; } From 5065e86bb98a317da6f2656850bd29ea51dc2a58 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 17:00:21 -0300 Subject: [PATCH 0136/2225] linux-pipewire: Remove unnecessary struct field We don't actually need to restore the node id anymore, since this is handled by the screencast-portal.c code now. Remove the pipewire_node field, and just create the stream directly from the passed file descriptor now. --- plugins/linux-pipewire/pipewire.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 04f5ca60b69207..8329a39da93559 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -53,7 +53,6 @@ struct format_info { }; struct _obs_pipewire_data { - uint32_t pipewire_node; int pipewire_fd; gs_texture_t *texture; @@ -805,7 +804,6 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, obs_pw = bzalloc(sizeof(obs_pipewire_data)); obs_pw->pipewire_fd = pipewire_fd; - obs_pw->pipewire_node = pipewire_node; init_format_info(obs_pw); @@ -867,7 +865,7 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, } pw_stream_connect( - obs_pw->stream, PW_DIRECTION_INPUT, obs_pw->pipewire_node, + obs_pw->stream, PW_DIRECTION_INPUT, pipewire_node, PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS, params, n_params); From b7daa89f852e2144b5c4af788e985ac1655aa877 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 17:08:17 -0300 Subject: [PATCH 0137/2225] linux-pipewire: Split initialization of core and streams This commit introduces an important distinction in the initialization process that is essential to future camera and audio work: it splits creating and connecting to the PipeWire socket, from connecting to specific PipeWire nodes. Right now, for the only consumer in existence - the ScreenCast portal code - this distinction is irrelevant, but from an API perspective it just makes sense to model it this way. --- plugins/linux-pipewire/pipewire.c | 47 ++++++++++++---------- plugins/linux-pipewire/pipewire.h | 7 ++-- plugins/linux-pipewire/screencast-portal.c | 9 ++++- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 8329a39da93559..922fa68e2be8c8 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -792,15 +792,9 @@ static const struct pw_core_events core_events = { /* obs_source_info methods */ -obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, - const char *stream_name, - struct pw_properties *stream_properties) +obs_pipewire_data *obs_pipewire_create(int pipewire_fd) { - struct spa_pod_builder pod_builder; - const struct spa_pod **params = NULL; obs_pipewire_data *obs_pw; - uint32_t n_params; - uint8_t params_buffer[2048]; obs_pw = bzalloc(sizeof(obs_pipewire_data)); obs_pw->pipewire_fd = pipewire_fd; @@ -833,17 +827,32 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, pw_core_add_listener(obs_pw->core, &obs_pw->core_listener, &core_events, obs_pw); + // Dispatch to receive the info core event + obs_pw->server_version_sync = pw_core_sync(obs_pw->core, PW_ID_CORE, + obs_pw->server_version_sync); + pw_thread_loop_wait(obs_pw->thread_loop); + pw_thread_loop_unlock(obs_pw->thread_loop); + + return obs_pw; +} + +void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node, + const char *stream_name, + struct pw_properties *stream_properties) +{ + struct spa_pod_builder pod_builder; + const struct spa_pod **params = NULL; + uint32_t n_params; + uint8_t params_buffer[2048]; + + pw_thread_loop_lock(obs_pw->thread_loop); + /* Signal to renegotiate */ obs_pw->reneg = pw_loop_add_event(pw_thread_loop_get_loop(obs_pw->thread_loop), renegotiate_format, obs_pw); blog(LOG_DEBUG, "[pipewire] registered event %p", obs_pw->reneg); - // Dispatch to receive the info core event - obs_pw->server_version_sync = pw_core_sync(obs_pw->core, PW_ID_CORE, - obs_pw->server_version_sync); - pw_thread_loop_wait(obs_pw->thread_loop); - /* Stream */ obs_pw->stream = pw_stream_new(obs_pw->core, stream_name, stream_properties); @@ -859,22 +868,18 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, if (!build_format_params(obs_pw, &pod_builder, ¶ms, &n_params)) { pw_thread_loop_unlock(obs_pw->thread_loop); - teardown_pipewire(obs_pw); - bfree(obs_pw); - return NULL; + return; } - pw_stream_connect( - obs_pw->stream, PW_DIRECTION_INPUT, pipewire_node, - PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS, params, - n_params); + pw_stream_connect(obs_pw->stream, PW_DIRECTION_INPUT, pipewire_node, + PW_STREAM_FLAG_AUTOCONNECT | + PW_STREAM_FLAG_MAP_BUFFERS, + params, n_params); blog(LOG_INFO, "[pipewire] Playing stream %p", obs_pw->stream); pw_thread_loop_unlock(obs_pw->thread_loop); bfree(params); - - return obs_pw; } void obs_pipewire_destroy(obs_pipewire_data *obs_pw) diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index 88becc124ff94b..4df410d0446089 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -27,9 +27,10 @@ typedef struct _obs_pipewire_data obs_pipewire_data; -obs_pipewire_data *obs_pipewire_create(int pipewire_fd, int pipewire_node, - const char *stream_name, - struct pw_properties *stream_properties); +obs_pipewire_data *obs_pipewire_create(int pipewire_fd); +void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node, + const char *stream_name, + struct pw_properties *stream_properties); void obs_pipewire_destroy(obs_pipewire_data *obs_pw); void obs_pipewire_show(obs_pipewire_data *obs_pw); diff --git a/plugins/linux-pipewire/screencast-portal.c b/plugins/linux-pipewire/screencast-portal.c index e5907501534036..543d281ecc393c 100644 --- a/plugins/linux-pipewire/screencast-portal.c +++ b/plugins/linux-pipewire/screencast-portal.c @@ -245,8 +245,13 @@ static void on_pipewire_remote_opened_cb(GObject *source, GAsyncResult *res, return; } - capture->obs_pw = obs_pipewire_create( - pipewire_fd, capture->pipewire_node, "OBS Studio", + capture->obs_pw = obs_pipewire_create(pipewire_fd); + + if (!capture->obs_pw) + return; + + obs_pipewire_connect_stream( + capture->obs_pw, capture->pipewire_node, "OBS Studio", pw_properties_new(PW_KEY_MEDIA_TYPE, "Video", PW_KEY_MEDIA_CATEGORY, "Capture", PW_KEY_MEDIA_ROLE, "Screen", NULL)); From f8a7b13cd375ac32f45a79156887df490f85bc34 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 17:21:43 -0300 Subject: [PATCH 0138/2225] linux-pipewire: Rename obs_pipewire_data to obs_pipewire Next commits will introduce new obs_pipewire_* types, so this renaming will make it slightly easier to read the code with different types. --- plugins/linux-pipewire/pipewire.c | 55 +++++++++++----------- plugins/linux-pipewire/pipewire.h | 21 ++++----- plugins/linux-pipewire/screencast-portal.c | 2 +- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 922fa68e2be8c8..c7c3f3344f6b13 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -52,7 +52,7 @@ struct format_info { DARRAY(uint64_t) modifiers; }; -struct _obs_pipewire_data { +struct _obs_pipewire { int pipewire_fd; gs_texture_t *texture; @@ -112,7 +112,7 @@ static bool check_pw_version(const struct obs_pw_version *pw_version, int major, return pw_version->micro >= micro; } -static void update_pw_versions(obs_pipewire_data *obs_pw, const char *version) +static void update_pw_versions(obs_pipewire *obs_pw, const char *version) { blog(LOG_INFO, "[pipewire] Server version: %s", version); blog(LOG_INFO, "[pipewire] Library version: %s", @@ -124,7 +124,7 @@ static void update_pw_versions(obs_pipewire_data *obs_pw, const char *version) blog(LOG_WARNING, "[pipewire] failed to parse server version"); } -static void teardown_pipewire(obs_pipewire_data *obs_pw) +static void teardown_pipewire(obs_pipewire *obs_pw) { if (obs_pw->thread_loop) { pw_thread_loop_wait(obs_pw->thread_loop); @@ -145,7 +145,7 @@ static void teardown_pipewire(obs_pipewire_data *obs_pw) obs_pw->negotiated = false; } -static void destroy_session(obs_pipewire_data *obs_pw) +static void destroy_session(obs_pipewire *obs_pw) { obs_enter_graphics(); g_clear_pointer(&obs_pw->cursor.texture, gs_texture_destroy); @@ -153,7 +153,7 @@ static void destroy_session(obs_pipewire_data *obs_pw) obs_leave_graphics(); } -static inline bool has_effective_crop(obs_pipewire_data *obs_pw) +static inline bool has_effective_crop(obs_pipewire *obs_pw) { return obs_pw->crop.valid && (obs_pw->crop.x != 0 || obs_pw->crop.y != 0 || @@ -289,7 +289,7 @@ static inline struct spa_pod *build_format(struct spa_pod_builder *b, return spa_pod_builder_pop(b, &format_frame); } -static bool build_format_params(obs_pipewire_data *obs_pw, +static bool build_format_params(obs_pipewire *obs_pw, struct spa_pod_builder *pod_builder, const struct spa_pod ***param_list, uint32_t *n_params) @@ -342,7 +342,7 @@ static bool drm_format_available(uint32_t drm_format, uint32_t *drm_formats, return false; } -static void init_format_info(obs_pipewire_data *obs_pw) +static void init_format_info(obs_pipewire *obs_pw) { da_init(obs_pw->format_info); @@ -389,7 +389,7 @@ static void init_format_info(obs_pipewire_data *obs_pw) bfree(drm_formats); } -static void clear_format_info(obs_pipewire_data *obs_pw) +static void clear_format_info(obs_pipewire *obs_pw) { for (size_t i = 0; i < obs_pw->format_info.num; i++) { da_free(obs_pw->format_info.array[i].modifiers); @@ -397,7 +397,7 @@ static void clear_format_info(obs_pipewire_data *obs_pw) da_free(obs_pw->format_info); } -static void remove_modifier_from_format(obs_pipewire_data *obs_pw, +static void remove_modifier_from_format(obs_pipewire *obs_pw, uint32_t spa_format, uint64_t modifier) { for (size_t i = 0; i < obs_pw->format_info.num; i++) { @@ -424,7 +424,7 @@ static void remove_modifier_from_format(obs_pipewire_data *obs_pw, static void renegotiate_format(void *data, uint64_t expirations) { UNUSED_PARAMETER(expirations); - obs_pipewire_data *obs_pw = (obs_pipewire_data *)data; + obs_pipewire *obs_pw = (obs_pipewire *)data; const struct spa_pod **params = NULL; blog(LOG_INFO, "[pipewire] Renegotiating stream"); @@ -450,7 +450,7 @@ static void renegotiate_format(void *data, uint64_t expirations) static void on_process_cb(void *user_data) { - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; struct spa_meta_cursor *cursor; uint32_t drm_format; struct spa_meta_header *header; @@ -655,7 +655,7 @@ static void on_process_cb(void *user_data) static void on_param_changed_cb(void *user_data, uint32_t id, const struct spa_pod *param) { - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; struct spa_pod_builder pod_builder; const struct spa_pod *params[4]; uint32_t buffer_types; @@ -743,7 +743,7 @@ static void on_state_changed_cb(void *user_data, enum pw_stream_state old, { UNUSED_PARAMETER(old); - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; blog(LOG_INFO, "[pipewire] Stream %p state: \"%s\" (error: %s)", obs_pw->stream, pw_stream_state_as_string(state), @@ -759,7 +759,7 @@ static const struct pw_stream_events stream_events = { static void on_core_info_cb(void *user_data, const struct pw_core_info *info) { - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; update_pw_versions(obs_pw, info->version); } @@ -767,7 +767,7 @@ static void on_core_info_cb(void *user_data, const struct pw_core_info *info) static void on_core_error_cb(void *user_data, uint32_t id, int seq, int res, const char *message) { - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; blog(LOG_ERROR, "[pipewire] Error id:%u seq:%d res:%d (%s): %s", id, seq, res, g_strerror(res), message); @@ -777,7 +777,7 @@ static void on_core_error_cb(void *user_data, uint32_t id, int seq, int res, static void on_core_done_cb(void *user_data, uint32_t id, int seq) { - obs_pipewire_data *obs_pw = user_data; + obs_pipewire *obs_pw = user_data; if (id == PW_ID_CORE && obs_pw->server_version_sync == seq) pw_thread_loop_signal(obs_pw->thread_loop, FALSE); @@ -792,11 +792,11 @@ static const struct pw_core_events core_events = { /* obs_source_info methods */ -obs_pipewire_data *obs_pipewire_create(int pipewire_fd) +obs_pipewire *obs_pipewire_create(int pipewire_fd) { - obs_pipewire_data *obs_pw; + obs_pipewire *obs_pw; - obs_pw = bzalloc(sizeof(obs_pipewire_data)); + obs_pw = bzalloc(sizeof(obs_pipewire)); obs_pw->pipewire_fd = pipewire_fd; init_format_info(obs_pw); @@ -836,7 +836,7 @@ obs_pipewire_data *obs_pipewire_create(int pipewire_fd) return obs_pw; } -void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node, +void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node, const char *stream_name, struct pw_properties *stream_properties) { @@ -882,7 +882,7 @@ void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node, bfree(params); } -void obs_pipewire_destroy(obs_pipewire_data *obs_pw) +void obs_pipewire_destroy(obs_pipewire *obs_pw) { if (!obs_pw) return; @@ -895,19 +895,19 @@ void obs_pipewire_destroy(obs_pipewire_data *obs_pw) bfree(obs_pw); } -void obs_pipewire_show(obs_pipewire_data *obs_pw) +void obs_pipewire_show(obs_pipewire *obs_pw) { if (obs_pw->stream) pw_stream_set_active(obs_pw->stream, true); } -void obs_pipewire_hide(obs_pipewire_data *obs_pw) +void obs_pipewire_hide(obs_pipewire *obs_pw) { if (obs_pw->stream) pw_stream_set_active(obs_pw->stream, false); } -uint32_t obs_pipewire_get_width(obs_pipewire_data *obs_pw) +uint32_t obs_pipewire_get_width(obs_pipewire *obs_pw) { if (!obs_pw->negotiated) return 0; @@ -918,7 +918,7 @@ uint32_t obs_pipewire_get_width(obs_pipewire_data *obs_pw) return obs_pw->format.info.raw.size.width; } -uint32_t obs_pipewire_get_height(obs_pipewire_data *obs_pw) +uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) { if (!obs_pw->negotiated) return 0; @@ -929,7 +929,7 @@ uint32_t obs_pipewire_get_height(obs_pipewire_data *obs_pw) return obs_pw->format.info.raw.size.height; } -void obs_pipewire_video_render(obs_pipewire_data *obs_pw, gs_effect_t *effect) +void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) { gs_eparam_t *image; @@ -963,8 +963,7 @@ void obs_pipewire_video_render(obs_pipewire_data *obs_pw, gs_effect_t *effect) } } -void obs_pipewire_set_cursor_visible(obs_pipewire_data *obs_pw, - bool cursor_visible) +void obs_pipewire_set_cursor_visible(obs_pipewire *obs_pw, bool cursor_visible) { obs_pw->cursor.visible = cursor_visible; } diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index 4df410d0446089..03867dbfa7214c 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -25,19 +25,18 @@ #include #include -typedef struct _obs_pipewire_data obs_pipewire_data; +typedef struct _obs_pipewire obs_pipewire; -obs_pipewire_data *obs_pipewire_create(int pipewire_fd); -void obs_pipewire_connect_stream(obs_pipewire_data *obs_pw, int pipewire_node, +obs_pipewire *obs_pipewire_create(int pipewire_fd); +void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node, const char *stream_name, struct pw_properties *stream_properties); -void obs_pipewire_destroy(obs_pipewire_data *obs_pw); +void obs_pipewire_destroy(obs_pipewire *obs_pw); -void obs_pipewire_show(obs_pipewire_data *obs_pw); -void obs_pipewire_hide(obs_pipewire_data *obs_pw); -uint32_t obs_pipewire_get_width(obs_pipewire_data *obs_pw); -uint32_t obs_pipewire_get_height(obs_pipewire_data *obs_pw); -void obs_pipewire_video_render(obs_pipewire_data *obs_pw, gs_effect_t *effect); +void obs_pipewire_show(obs_pipewire *obs_pw); +void obs_pipewire_hide(obs_pipewire *obs_pw); +uint32_t obs_pipewire_get_width(obs_pipewire *obs_pw); +uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw); +void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect); -void obs_pipewire_set_cursor_visible(obs_pipewire_data *obs_pw, - bool cursor_visible); +void obs_pipewire_set_cursor_visible(obs_pipewire *obs_pw, bool cursor_visible); diff --git a/plugins/linux-pipewire/screencast-portal.c b/plugins/linux-pipewire/screencast-portal.c index 543d281ecc393c..c3fdbb0da1c78a 100644 --- a/plugins/linux-pipewire/screencast-portal.c +++ b/plugins/linux-pipewire/screencast-portal.c @@ -49,7 +49,7 @@ struct screencast_portal_capture { uint32_t pipewire_node; bool cursor_visible; - obs_pipewire_data *obs_pw; + obs_pipewire *obs_pw; }; /* ------------------------------------------------- */ From fad7420198d719998eab51925c9e60457f2f5859 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 1 Jul 2022 17:24:37 -0300 Subject: [PATCH 0139/2225] linux-pipewire: Trivially shuffle some code around A trivial cosmetic change. This groups the constructor and destructor together. Two sides of the same coin, yin and yang, bound by their nature, and linked by their position in code. --- plugins/linux-pipewire/pipewire.c | 26 +++++++++++++------------- plugins/linux-pipewire/pipewire.h | 3 ++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index c7c3f3344f6b13..0bfbf3cb1fee8a 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -836,6 +836,19 @@ obs_pipewire *obs_pipewire_create(int pipewire_fd) return obs_pw; } +void obs_pipewire_destroy(obs_pipewire *obs_pw) +{ + if (!obs_pw) + return; + + teardown_pipewire(obs_pw); + destroy_session(obs_pw); + + clear_format_info(obs_pw); + + bfree(obs_pw); +} + void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node, const char *stream_name, struct pw_properties *stream_properties) @@ -882,19 +895,6 @@ void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node, bfree(params); } -void obs_pipewire_destroy(obs_pipewire *obs_pw) -{ - if (!obs_pw) - return; - - teardown_pipewire(obs_pw); - destroy_session(obs_pw); - - clear_format_info(obs_pw); - - bfree(obs_pw); -} - void obs_pipewire_show(obs_pipewire *obs_pw) { if (obs_pw->stream) diff --git a/plugins/linux-pipewire/pipewire.h b/plugins/linux-pipewire/pipewire.h index 03867dbfa7214c..41c785b8f22d76 100644 --- a/plugins/linux-pipewire/pipewire.h +++ b/plugins/linux-pipewire/pipewire.h @@ -28,10 +28,11 @@ typedef struct _obs_pipewire obs_pipewire; obs_pipewire *obs_pipewire_create(int pipewire_fd); +void obs_pipewire_destroy(obs_pipewire *obs_pw); + void obs_pipewire_connect_stream(obs_pipewire *obs_pw, int pipewire_node, const char *stream_name, struct pw_properties *stream_properties); -void obs_pipewire_destroy(obs_pipewire *obs_pw); void obs_pipewire_show(obs_pipewire *obs_pw); void obs_pipewire_hide(obs_pipewire *obs_pw); From c24ec240af7421aa7b5f065bbd56c6cc1c5e70da Mon Sep 17 00:00:00 2001 From: gxalpha Date: Mon, 13 Feb 2023 01:19:31 +0100 Subject: [PATCH 0140/2225] UI: Remove unused Qt crash reporter code The crash reporter made with Qt was introduced in 824c7b0, but then was quickly replaced by a native OS implementation in d42a7ce. This code has been lying around ever since. --- UI/CMakeLists.txt | 2 -- UI/crash-report.cpp | 51 --------------------------------------------- UI/crash-report.hpp | 18 ---------------- UI/obs-app.cpp | 1 - 4 files changed, 72 deletions(-) delete mode 100644 UI/crash-report.cpp delete mode 100644 UI/crash-report.hpp diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 1d49ab0ba74cac..59c8735c7783cd 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -134,8 +134,6 @@ target_sources( api-interface.cpp auth-base.cpp auth-base.hpp - crash-report.cpp - crash-report.hpp display-helpers.hpp platform.hpp qt-display.cpp diff --git a/UI/crash-report.cpp b/UI/crash-report.cpp deleted file mode 100644 index e423f8d11184e7..00000000000000 --- a/UI/crash-report.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include "crash-report.hpp" -#include -#include -#include -#include -#include -#include -#include "qt-wrappers.hpp" -#include "plain-text-edit.hpp" - -OBSCrashReport::OBSCrashReport(QWidget *parent, const char *text) - : QDialog(parent) -{ - QPushButton *copyButton = new QPushButton; - copyButton->setText("Copy crash log"); - - QPushButton *exitButton = new QPushButton; - exitButton->setText("Exit"); - - textBox = new OBSPlainTextEdit; - textBox->setPlainText(QT_UTF8(text)); - textBox->setLineWrapMode(QPlainTextEdit::NoWrap); - - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addWidget(copyButton); - buttonLayout->addWidget(exitButton); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(textBox); - mainLayout->addItem(buttonLayout); - - setLayout(mainLayout); - - QWidget::connect(copyButton, SIGNAL(clicked()), this, - SLOT(CopyClicked())); - QWidget::connect(exitButton, SIGNAL(clicked()), this, - SLOT(ExitClicked())); - - resize(800, 600); - setWindowTitle("Oops, OBS has crashed!"); -} - -void OBSCrashReport::ExitClicked() -{ - exit(-1); -} - -void OBSCrashReport::CopyClicked() -{ - QApplication::clipboard()->setText(textBox->toPlainText()); -} diff --git a/UI/crash-report.hpp b/UI/crash-report.hpp deleted file mode 100644 index ae53e93feef184..00000000000000 --- a/UI/crash-report.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include - -class OBSPlainTextEdit; - -class OBSCrashReport : public QDialog { - Q_OBJECT - - OBSPlainTextEdit *textBox; - -public: - OBSCrashReport(QWidget *parent, const char *text); - -public slots: - void ExitClicked(); - void CopyClicked(); -}; diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 9d018e88ebc70a..b9544bff197224 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -47,7 +47,6 @@ #include "window-permissions.hpp" #endif #include "window-basic-settings.hpp" -#include "crash-report.hpp" #include "platform.hpp" #include From c5a06d3cf2cc89ec448de35d918ee2ce73d219f9 Mon Sep 17 00:00:00 2001 From: Roman Huts <71274498+rhutsAMD@users.noreply.github.com> Date: Fri, 13 Jan 2023 09:56:18 -0500 Subject: [PATCH 0141/2225] obs-ffmpeg: Update AMF SDK to v1.4.29 --- .../AMF/include/components/HQScaler.h | 6 +- .../AMF/include/components/SupportedCodecs.h | 61 +++++++++++++++++++ .../AMF/include/components/VQEnhancer.h | 11 ++-- .../AMF/include/components/VideoDecoderUVD.h | 5 +- .../AMF/include/components/VideoEncoderAV1.h | 20 ++++-- .../AMF/include/components/VideoEncoderHEVC.h | 2 + .../AMF/include/components/VideoEncoderVCE.h | 27 +++++++- .../external/AMF/include/core/D3D12AMF.h | 5 ++ .../external/AMF/include/core/Factory.h | 2 +- .../external/AMF/include/core/Platform.h | 9 ++- .../external/AMF/include/core/Surface.h | 4 +- .../external/AMF/include/core/Variant.h | 53 +++++++++------- .../external/AMF/include/core/VulkanAMF.h | 17 +++--- 13 files changed, 170 insertions(+), 52 deletions(-) create mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h b/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h index 207d87b499bdc7..251723e033c14f 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h @@ -43,9 +43,10 @@ enum AMF_HQ_SCALER_ALGORITHM_ENUM { AMF_HQ_SCALER_ALGORITHM_BILINEAR = 0, AMF_HQ_SCALER_ALGORITHM_BICUBIC = 1, - AMF_HQ_SCALER_ALGORITHM_FSR = 2, + AMF_HQ_SCALER_ALGORITHM_FSR = 2, // deprecated + AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_0 = 2, AMF_HQ_SCALER_ALGORITHM_POINT = 3, - AMF_HQ_SCALER_ALGORITHM_FSR1_1 = 4, + AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_1 = 4, }; @@ -63,5 +64,6 @@ enum AMF_HQ_SCALER_ALGORITHM_ENUM #define AMF_HQ_SCALER_FROM_SRGB L"FromSRGB" // bool (default=true) Convert to SRGB. #define AMF_HQ_SCALER_SHARPNESS L"HQScalerSharpness" // Float in the range of [0.0, 2.0] +#define AMF_HQ_SCALER_FRAME_RATE L"HQScalerFrameRate" // Frame rate (off, 15, 30, 60) #endif //#ifndef AMFHQScaler_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h b/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h new file mode 100644 index 00000000000000..efdd9705371bc3 --- /dev/null +++ b/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h @@ -0,0 +1,61 @@ +// +// Notice Regarding Standards. AMD does not provide a license or sublicense to +// any Intellectual Property Rights relating to any standards, including but not +// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; +// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 +// (collectively, the "Media Technologies"). For clarity, you will pay any +// royalties due for such third party technologies, which may include the Media +// Technologies that are owed as a result of AMD providing the Software to you. +// +// MIT license +// +// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +//------------------------------------------------------------------------------------------------- +// An interface available on some components to provide information on supported input and output codecs +//------------------------------------------------------------------------------------------------- +#ifndef AMF_SupportedCodecs_h +#define AMF_SupportedCodecs_h + +#pragma once + +#include "public/include/core/Interface.h" + +//properties on the returned AMFPropertyStorage +#define SUPPORTEDCODEC_ID L"CodecId" //amf_int64 +#define SUPPORTEDCODEC_SAMPLERATE L"SampleRate" //amf_int32 + +namespace amf +{ + class AMFSupportedCodecs : public AMFInterface + { + public: + AMF_DECLARE_IID(0xc1003a83, 0x7934, 0x408a, 0x95, 0x5b, 0xc4, 0xdd, 0x85, 0x9d, 0xf5, 0x61) + + //call with increasing values until it returns AMF_OUT_OF_RANGE + virtual AMF_RESULT AMF_STD_CALL GetInputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0; + virtual AMF_RESULT AMF_STD_CALL GetOutputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0; + }; + typedef AMFInterfacePtr_T AMFSupportedCodecsPtr; +} + +#endif \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h b/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h index 1ea7b2ec98e4f4..6d3468ab80a5b7 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h @@ -1,4 +1,4 @@ -// +// // Notice Regarding Standards. AMD does not provide a license or sublicense to // any Intellectual Property Rights relating to any standards, including but not // limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; @@ -6,9 +6,9 @@ // (collectively, the "Media Technologies"). For clarity, you will pay any // royalties due for such third party technologies, which may include the Media // Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// +// +// MIT license +// // Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -40,8 +40,9 @@ #define AMFVQEnhancer L"AMFVQEnhancer" #define AMF_VIDEO_ENHANCER_ENGINE_TYPE L"AMF_VIDEI_ENHANCER_ENGINE_TYPE" // AMF_MEMORY_TYPE (DX11, DX12, OPENCL, VULKAN default : DX11)" - determines how the object is initialized and what kernels to use -#define AMF_VIDEO_ENHANCER_OUTPUT_SIZE L"AMF_VIDEO_ENHANCER_OUTPUT_SIZE" // AMFSize +#define AMF_VIDEO_ENHANCER_OUTPUT_SIZE L"AMF_VIDEO_ENHANCER_OUTPUT_SIZE" // AMFSize #define AMF_VE_FCR_ATTENUATION L"AMF_VE_FCR_ATTENUATION" // Float in the range of [0.02, 0.4], default : 0.1 #define AMF_VE_FCR_RADIUS L"AMF_VE_FCR_RADIUS" // int in the range of [1, 4] +#define AMF_VE_FCR_SPLIT_VIEW L"AMF_VE_FCR_SPLIT_VIEW" // FCR View split window #endif //#ifndef AMFVQEnhancer_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h index eb28c29eb88b03..c01b26994ad8c4 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h @@ -106,7 +106,7 @@ enum AMF_TIMESTAMP_MODE_ENUM // properties to be set on decoder if internal converter is used #define AMF_VIDEO_DECODER_OUTPUT_TRANSFER_CHARACTERISTIC L"OutColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_DECODER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum +#define AMF_VIDEO_DECODER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum #define AMF_VIDEO_DECODER_OUTPUT_HDR_METADATA L"OutHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL #define AMF_VIDEO_DECODER_LOW_LATENCY L"LowLatencyDecode" // amf_bool; default = false; true = low latency decode, false = regular decode @@ -120,4 +120,7 @@ enum AMF_TIMESTAMP_MODE_ENUM #define AMF_VIDEO_DECODER_NATIVEWINDOW L"AppleNativeWindow" // amf_int64; default = 0; pointer to native window #endif //__APPLE__ +#define AMF_VIDEO_DECODER_ENABLE_SMART_ACCESS_VIDEO L"EnableDecoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature +#define AMF_VIDEO_DECODER_SKIP_TRANSFER_SMART_ACCESS_VIDEO L"SkipTransferSmartAccessVideo" // amf_bool; default = false; true = keeps output on GPU where it ran + #endif //#ifndef AMF_VideoDecoderUVD_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h index e02803bbd95a87..0111f66c83cfae 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h @@ -120,8 +120,8 @@ enum AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_ENUM enum AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM { - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_HIGH_QUALITY = 0, - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY = 30, + AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_HIGH_QUALITY = 0, + AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY = 30, AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_BALANCED = 70, AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_SPEED = 100 }; @@ -163,13 +163,18 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__GOP_ALIGNED = 1, AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__CONTINUOUS = 2 }; +enum AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM +{ + AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED = 0, + AMF_VIDEO_ENCODER_AV1_LTR_MODE_KEEP_UNUSED = 1 +}; -// *** Static properties - can be set only before Init() *** +// *** Static properties - can be set only before Init() *** // Encoder Engine Settings #define AMF_VIDEO_ENCODER_AV1_ENCODER_INSTANCE_INDEX L"Av1EncoderInstanceIndex" // amf_int64; default = 0; selected HW instance idx. The number of instances is queried by using AMF_VIDEO_ENCODER_AV1_CAP_NUM_OF_HW_INSTANCES -#define AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE L"Av1EncodingLatencyMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM); default = depends on USAGE; The encoding latency mode. +#define AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE L"Av1EncodingLatencyMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM); default = depends on USAGE; The encoding latency mode. #define AMF_VIDEO_ENCODER_AV1_QUERY_TIMEOUT L"Av1QueryTimeout" // amf_int64; default = 0 (no wait); timeout for QueryOutput call in ms. // Usage Settings @@ -184,7 +189,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM #define AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET L"Av1QualityPreset" // amf_int64(AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset // Codec Configuration -#define AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS L"Av1ScreenContentTools" // bool; default = depends on USAGE; If true, allow enabling screen content tools by AMF_VIDEO_ENCODER_AV1_PALETTE_MODE_ENABLE and AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV; if false, all screen content tools are disabled. +#define AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS L"Av1ScreenContentTools" // bool; default = depends on USAGE; If true, allow enabling screen content tools by AMF_VIDEO_ENCODER_AV1_PALETTE_MODE and AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV; if false, all screen content tools are disabled. #define AMF_VIDEO_ENCODER_AV1_ORDER_HINT L"Av1OrderHint" // bool; default = depends on USAGE; If true, code order hint; if false, don't code order hint #define AMF_VIDEO_ENCODER_AV1_FRAME_ID L"Av1FrameId" // bool; default = depends on USAGE; If true, code frame id; if false, don't code frame id #define AMF_VIDEO_ENCODER_AV1_TILE_GROUP_OBU L"Av1TileGroupObu" // bool; default = depends on USAGE; If true, code FrameHeaderObu + TileGroupObu and each TileGroupObu contains one tile; if false, code FrameObu. @@ -207,6 +212,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM // Picture Management Configuration #define AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS L"Av1MaxNumOfTemporalLayers" // amf_int64; default = depends on USAGE; Max number of temporal layers might be enabled. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS #define AMF_VIDEO_ENCODER_AV1_MAX_LTR_FRAMES L"Av1MaxNumLTRFrames" // amf_int64; default = depends on USAGE; Max number of LTR frames. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES +#define AMF_VIDEO_ENCODER_AV1_LTR_MODE L"Av1LTRMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_AV1_FORCE_LTR_REFERENCE_BITFIELD) #define AMF_VIDEO_ENCODER_AV1_MAX_NUM_REFRAMES L"Av1MaxNumRefFrames" // amf_int64; default = 1; Maximum number of reference frames // color conversion @@ -216,7 +222,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM #define AMF_VIDEO_ENCODER_AV1_EXTRA_DATA L"Av1ExtraData" // AMFInterface* - > AMFBuffer*; buffer to retrieve coded sequence header -// *** Dynamic properties - can be set anytime *** +// *** Dynamic properties - can be set anytime *** // Codec Configuration #define AMF_VIDEO_ENCODER_AV1_PALETTE_MODE L"Av1PaletteMode" // bool; default = depends on USAGE; If true, enable palette mode; if false, disable palette mode. Valid only when AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS is true. @@ -289,4 +295,6 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM #define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS L"Av1CapMaxNumTemporalLayers" // amf_int64; default = N/A; The cap of maximum number of temporal layers #define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES L"Av1CapMaxNumLTRFrames" // amf_int64; default = N/A; The cap of maximum number of LTR frames. This value is calculated based on current value of AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS. +#define AMF_VIDEO_ENCODER_AV1_ENABLE_SMART_ACCESS_VIDEO L"Av1EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature + #endif //#ifndef AMF_VideoEncoderAV1_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h index 19af408f433c3a..848c85aa857b1b 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h @@ -302,4 +302,6 @@ enum AMF_VIDEO_ENCODER_HEVC_LTR_MODE_ENUM // properties set on AMFComponent to control component creation #define AMF_VIDEO_ENCODER_HEVC_MEMORY_TYPE L"HevcEncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_UNKNOWN (auto) +#define AMF_VIDEO_ENCODER_HEVC_ENABLE_SMART_ACCESS_VIDEO L"HevcEnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature + #endif //#ifndef AMF_VideoEncoderHEVC_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h index 7cb839c094e456..ba0387e45a9c16 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h +++ b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h @@ -66,6 +66,29 @@ enum AMF_VIDEO_ENCODER_PROFILE_ENUM AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH = 257 }; +enum AMF_VIDEO_ENCODER_H264_LEVEL_ENUM +{ + AMF_H264_LEVEL__1 = 10, + AMF_H264_LEVEL__1_1 = 11, + AMF_H264_LEVEL__1_2 = 12, + AMF_H264_LEVEL__1_3 = 13, + AMF_H264_LEVEL__2 = 20, + AMF_H264_LEVEL__2_1 = 21, + AMF_H264_LEVEL__2_2 = 22, + AMF_H264_LEVEL__3 = 30, + AMF_H264_LEVEL__3_1 = 31, + AMF_H264_LEVEL__3_2 = 32, + AMF_H264_LEVEL__4 = 40, + AMF_H264_LEVEL__4_1 = 41, + AMF_H264_LEVEL__4_2 = 42, + AMF_H264_LEVEL__5 = 50, + AMF_H264_LEVEL__5_1 = 51, + AMF_H264_LEVEL__5_2 = 52, + AMF_H264_LEVEL__6 = 60, + AMF_H264_LEVEL__6_1 = 61, + AMF_H264_LEVEL__6_2 = 62 +}; + enum AMF_VIDEO_ENCODER_SCANTYPE_ENUM { AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE = 0, @@ -151,7 +174,7 @@ enum AMF_VIDEO_ENCODER_LTR_MODE_ENUM #define AMF_VIDEO_ENCODER_EXTRADATA L"ExtraData" // AMFInterface* - > AMFBuffer*; SPS/PPS buffer in Annex B format - read-only #define AMF_VIDEO_ENCODER_USAGE L"Usage" // amf_int64(AMF_VIDEO_ENCODER_USAGE_ENUM); default = N/A; Encoder usage type. fully configures parameter set. #define AMF_VIDEO_ENCODER_PROFILE L"Profile" // amf_int64(AMF_VIDEO_ENCODER_PROFILE_ENUM) ; default = AMF_VIDEO_ENCODER_PROFILE_MAIN; H264 profile -#define AMF_VIDEO_ENCODER_PROFILE_LEVEL L"ProfileLevel" // amf_int64; default = 42; H264 profile level +#define AMF_VIDEO_ENCODER_PROFILE_LEVEL L"ProfileLevel" // amf_int64(AMF_VIDEO_ENCODER_H264_LEVEL_ENUM); default = AMF_H264_LEVEL__4_2; H264 level #define AMF_VIDEO_ENCODER_MAX_LTR_FRAMES L"MaxOfLTRFrames" // amf_int64; default = 0; Max number of LTR frames #define AMF_VIDEO_ENCODER_LTR_MODE L"LTRMode" // amf_int64(AMF_VIDEO_ENCODER_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_FORCE_LTR_REFERENCE_BITFIELD) #define AMF_VIDEO_ENCODER_SCANTYPE L"ScanType" // amf_int64(AMF_VIDEO_ENCODER_SCANTYPE_ENUM); default = AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE; indicates input stream type @@ -326,4 +349,6 @@ enum AMF_VIDEO_ENCODER_LTR_MODE_ENUM // properties set on AMFComponent to control component creation #define AMF_VIDEO_ENCODER_MEMORY_TYPE L"EncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_VULKAN or AMF_MEMORY_UNKNOWN (auto) +#define AMF_VIDEO_ENCODER_ENABLE_SMART_ACCESS_VIDEO L"EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature + #endif //#ifndef AMF_VideoEncoderVCE_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h b/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h index 19fa8ba880a2ef..37956b4c5ff666 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h @@ -39,6 +39,11 @@ AMF_WEAK GUID AMFResourceStateGUID = { 0x452da9bf, 0x4ad7, 0x47a5, { 0xa6, 0x9b, 0x96, 0xd3, 0x23, 0x76, 0xf2, 0xf3 } }; // Current resource state value (D3D12_RESOURCE_STATES ), sizeof(UINT), set on ID3D12Resource AMF_WEAK GUID AMFFenceGUID = { 0x910a7928, 0x57bd, 0x4b04, { 0x91, 0xa3, 0xe7, 0xb8, 0x04, 0x12, 0xcd, 0xa5 } }; // IUnknown (ID3D12Fence), set on ID3D12Resource syncronization fence for this resource AMF_WEAK GUID AMFFenceValueGUID = { 0x62a693d3, 0xbb4a, 0x46c9, { 0xa5, 0x04, 0x9a, 0x8e, 0x97, 0xbf, 0xf0, 0x56 } }; // The last value to wait on the fence from AMFFenceGUID; sizeof(UINT64), set on ID3D12Fence + +AMF_WEAK GUID AMFFenceD3D11GUID = { 0xdffdf6e0, 0x85e0, 0x4645, { 0x9d, 0x7, 0xe6, 0x4a, 0x19, 0x6b, 0xc9, 0xbf } }; // IUnknown (ID3D11Fence) OpenSharedFence for interop +AMF_WEAK GUID AMFFenceValueD3D11GUID = { 0x86581b71, 0x699f, 0x484b, { 0xb8, 0x75, 0x24, 0xda, 0x49, 0x8a, 0x74, 0xcf } }; // last value to wait on in d3d11 +AMF_WEAK GUID AMFSharedHandleFenceGUID = { 0xca60dcc8, 0x76d1, 0x4088, 0xad, 0xd, 0x97, 0x71, 0xe7, 0xb0, 0x92, 0x49 }; // ID3D12Fence shared handle for D3D11 interop + #endif #endif // __D3D12AMF_h__ \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h b/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h index ece7defaead442..8f4795e5ae06ee 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h @@ -114,7 +114,7 @@ extern "C" #define AMF_DLL_NAME L"amfrt32.dll" #define AMF_DLL_NAMEA "amfrt32.dll" #endif -#elif defined(__ANDROID__) +#elif defined(__ANDROID__) && !defined(AMF_ANDROID_ENCODER) #define AMF_DLL_NAME L"libamf.so" #define AMF_DLL_NAMEA "libamf.so" #elif defined(__APPLE__) diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h b/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h index 7fa61cc932b051..3ead3aed4e7e53 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h @@ -72,7 +72,7 @@ // #error Need to define AMF_ALIGN #endif -#if defined(__linux) || (__clang__) +#ifndef _WIN32 typedef signed int HRESULT; #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) #define FAILED(hr) (((HRESULT)(hr)) < 0) @@ -184,9 +184,11 @@ typedef amf_uint32 amf_flags; #define AMF_SECOND 10000000L // 1 second in 100 nanoseconds #define AMF_MILLISECOND (AMF_SECOND / 1000) +#define AMF_MICROSECOND (AMF_MILLISECOND / 1000) #define AMF_MIN(a, b) ((a) < (b) ? (a) : (b)) #define AMF_MAX(a, b) ((a) > (b) ? (a) : (b)) +#define AMF_CLAMP(x, a, b) (AMF_MIN(AMF_MAX(x, a), b)) #define AMF_BITS_PER_BYTE 8 @@ -380,13 +382,10 @@ static AMF_INLINE struct AMFRatio AMFConstructRatio(amf_uint32 num, amf_uint32 d #pragma pack(push, 1) #if defined(_MSC_VER) #pragma warning( push ) -#endif -#if defined(WIN32) -#if defined(_MSC_VER) #pragma warning(disable : 4200) #pragma warning(disable : 4201) #endif -#endif + typedef struct AMFColor { union diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h b/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h index 20b9a50c44c9b9..3013af040c0f79 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h @@ -68,9 +68,11 @@ namespace amf AMF_SURFACE_Y410, ///< 16 - packed 4:4:4 - 10 bit per YUV component, 2 bits per A, AVYU AMF_SURFACE_Y416, ///< 16 - packed 4:4:4 - 16 bit per component 4 bytes, AVYU AMF_SURFACE_GRAY32, ///< 17 - single component - 32 bit + AMF_SURFACE_P012, ///< 18 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 12 bit per component (16 allocated, upper 12 bits are used) + AMF_SURFACE_P016, ///< 19 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 16 bit per component (16 allocated, all bits are used) AMF_SURFACE_FIRST = AMF_SURFACE_NV12, - AMF_SURFACE_LAST = AMF_SURFACE_GRAY32 + AMF_SURFACE_LAST = AMF_SURFACE_P016 } AMF_SURFACE_FORMAT; //---------------------------------------------------------------------------------------------- // AMF_SURFACE_USAGE translates to D3D11_BIND_FLAG or VkImageUsageFlags diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h b/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h index 69e8874ab94581..859146439fc088 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h @@ -366,6 +366,8 @@ namespace amf } #if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600) +#pragma warning (push) +#pragma warning (disable : 26439) //This kind of function may not throw. Declare it 'noexcept'. String(String&& p_other) : m_Str(NULL) { operator=(p_other); @@ -498,6 +500,7 @@ namespace amf p_other.m_Str = NULL; // Transfer the ownership return *this; } +#pragma warning (pop) #endif wchar_t& operator[](size_t index) { @@ -755,7 +758,7 @@ namespace amf switch(AMFVariantGetType(pSrc)) { case AMF_VARIANT_EMPTY: - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); break; case AMF_VARIANT_BOOL: errRet = AMFVariantAssignBool(pDest, AMFVariantBool(pSrc)); @@ -1201,21 +1204,21 @@ namespace amf { res = AMF_OK; char buff[0xFF]; - sprintf(buff, "%d,%d", value.num, value.den); + sprintf(buff, "%u,%u", value.num, value.den); return buff; } static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertRatioToString(const AMFRatio& value, AMF_RESULT& res) { res = AMF_OK; char buff[0xFF]; - sprintf(buff, "%d,%d", value.num, value.den); + sprintf(buff, "%u,%u", value.num, value.den); return buff; } static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertColorToString(const AMFColor& value, AMF_RESULT& res) { res = AMF_OK; char buff[0xFF]; - sprintf(buff, "%d,%d,%d,%d", value.r, value.g, value.b, value.a); + sprintf(buff, "%u,%u,%u,%u", value.r, value.g, value.b, value.a); return buff; } @@ -1346,7 +1349,7 @@ namespace amf int readElements = 0; if(value.size() > 0) { - readElements = sscanf(value.c_str(), "%d,%d", &tmp.num, &tmp.den); + readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den); } if(readElements) { @@ -1362,7 +1365,7 @@ namespace amf int readElements = 0; if(value.size() > 0) { - readElements = sscanf(value.c_str(), "%d,%d", &tmp.num, &tmp.den); + readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den); } if(readElements) { @@ -1581,7 +1584,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_BOOL; @@ -1595,7 +1598,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_INT64; @@ -1609,7 +1612,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_DOUBLE; @@ -1623,7 +1626,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if (errRet == AMF_OK) { pDest->type = AMF_VARIANT_FLOAT; @@ -1638,7 +1641,7 @@ namespace amf AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { const size_t size = (strlen(pValue) + 1); @@ -1662,7 +1665,7 @@ namespace amf AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { const size_t size = (wcslen(pValue) + 1); @@ -1686,7 +1689,7 @@ namespace amf AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); //AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue);//can be NULL - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_INTERFACE; @@ -1715,7 +1718,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_RECT; @@ -1736,7 +1739,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_SIZE; @@ -1773,7 +1776,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_POINT; @@ -1787,7 +1790,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if (errRet == AMF_OK) { pDest->type = AMF_VARIANT_FLOAT_SIZE; @@ -1801,7 +1804,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if (errRet == AMF_OK) { pDest->type = AMF_VARIANT_FLOAT_POINT2D; @@ -1815,7 +1818,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if (errRet == AMF_OK) { pDest->type = AMF_VARIANT_FLOAT_POINT3D; @@ -1829,7 +1832,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if (errRet == AMF_OK) { pDest->type = AMF_VARIANT_FLOAT_VECTOR4D; @@ -1850,7 +1853,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_RATE; @@ -1871,7 +1874,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_RATIO; @@ -1892,7 +1895,7 @@ namespace amf AMF_RESULT errRet = AMF_OK; AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - errRet = AMFVariantClear(pDest); + errRet = AMFVariantInit(pDest); if(errRet == AMF_OK) { pDest->type = AMF_VARIANT_COLOR; @@ -1980,6 +1983,7 @@ namespace amf //------------------------------------------------------------------------------------------------- AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariantStruct& other) { + AMFVariantClear(this); AMFVariantCopy(this, const_cast(&other)); return *this; } @@ -1988,6 +1992,7 @@ namespace amf { if(pOther != NULL) { + AMFVariantClear(this); AMFVariantCopy(this, const_cast(pOther)); } return *this; @@ -1995,6 +2000,7 @@ namespace amf //------------------------------------------------------------------------------------------------- AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariant& other) { + AMFVariantClear(this); AMFVariantCopy(this, const_cast(static_cast(&other))); return *this; @@ -2003,6 +2009,7 @@ namespace amf template AMFVariant& AMFVariant::operator=(const AMFInterfacePtr_T& value) { + AMFVariantClear(this); AMFVariantAssignInterface(this, value); return *this; } diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h b/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h index 459d5538ca9612..188e36c703fba1 100644 --- a/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h +++ b/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h @@ -52,9 +52,9 @@ namespace amf typedef struct AMFVulkanSync { - amf_size cbSizeof; // sizeof(AMFVulkanSemaphore) + amf_size cbSizeof; // sizeof(AMFVulkanSync) void* pNext; // reserved for extensions - VkSemaphore hSemaphore; + VkSemaphore hSemaphore; // VkSemaphore; can be nullptr bool bSubmitted; // if true - wait for hSemaphore. re-submit hSemaphore if not synced by other ways and set to true VkFence hFence; // To sync on CPU; can be nullptr. Submitted in vkQueueSubmit. If waited for hFence, null it, do not delete or reset. } AMFVulkanSync; @@ -78,12 +78,12 @@ namespace amf amf_size cbSizeof; // sizeof(AMFVulkanSurface) void* pNext; // reserved for extensions // surface properties - VkImage hImage; - VkDeviceMemory hMemory; + VkImage hImage; // vulkan native image for which the surface is created + VkDeviceMemory hMemory; // memory for hImage, can be nullptr amf_int64 iSize; // memory size amf_uint32 eFormat; // VkFormat - amf_int32 iWidth; - amf_int32 iHeight; + amf_int32 iWidth; // image width + amf_int32 iHeight; // image height amf_uint32 eCurrentLayout; // VkImageLayout amf_uint32 eUsage; // AMF_SURFACE_USAGE amf_uint32 eAccess; // AMF_MEMORY_CPU_ACCESS @@ -92,7 +92,7 @@ namespace amf typedef struct AMFVulkanView { - amf_size cbSizeof; // sizeof(AMFVulkanSurface) + amf_size cbSizeof; // sizeof(AMFVulkanView) void* pNext; // reserved for extensions // surface properties AMFVulkanSurface *pSurface; @@ -102,6 +102,9 @@ namespace amf amf_int32 iPlaneWidthPitch; amf_int32 iPlaneHeightPitch; } AMFVulkanView; + +#define AMF_CONTEXT_VULKAN_COMPUTE_QUEUE L"VulkanComputeQueue" // amf_int64; default=0; Compute queue index in range [0, (VkQueueFamilyProperties.queueCount-1)] of the compute queue family. + #if defined(__cplusplus) } // namespace amf #endif From be629b93cea68b2465c0ba053a37a9046afcb92d Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 14 Feb 2023 18:05:48 -0300 Subject: [PATCH 0142/2225] linux-pipewire: Demote error to debug message Receiving buffers flagged as corrupted, or empty, is a casualty of how things are implemented in various compositors, and it's not a critical situation to be afraid of. We can expect a few buffers to be flagged as corrupted here and there, and that's fine. Demote these warnings to debug messages, as they're still useful for debugging. --- plugins/linux-pipewire/pipewire.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 0bfbf3cb1fee8a..dd5f64f31384e2 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -567,13 +567,13 @@ static void on_process_cb(void *user_data) if ((buffer->datas[0].chunk->flags & SPA_CHUNK_FLAG_CORRUPTED) > 0) { - blog(LOG_ERROR, + blog(LOG_DEBUG, "[pipewire] buffer contains corrupted data"); goto read_metadata; } if (buffer->datas[0].chunk->size == 0) { - blog(LOG_ERROR, + blog(LOG_DEBUG, "[pipewire] buffer contains empty data"); goto read_metadata; } From b5b3563479d6040fc209758172fc441a2ad29621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=83=E4=BA=AE=E6=96=8C?= Date: Sat, 2 Jul 2022 11:42:42 +0800 Subject: [PATCH 0143/2225] vlc-video: Support subtitle track up to 1000 --- plugins/vlc-video/vlc-video-source.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/vlc-video/vlc-video-source.c b/plugins/vlc-video/vlc-video-source.c index 0610ca1dd2ee27..b4e32473659833 100644 --- a/plugins/vlc-video/vlc-video-source.c +++ b/plugins/vlc-video/vlc-video-source.c @@ -1137,8 +1137,8 @@ static obs_properties_t *vlcs_properties(void *data) obs_properties_add_int(ppts, S_TRACK, T_TRACK, 1, 10, 1); obs_properties_add_bool(ppts, S_SUBTITLE_ENABLE, T_SUBTITLE_ENABLE); - obs_properties_add_int(ppts, S_SUBTITLE_TRACK, T_SUBTITLE_TRACK, 1, 10, - 1); + obs_properties_add_int(ppts, S_SUBTITLE_TRACK, T_SUBTITLE_TRACK, 1, + 1000, 1); return ppts; } From 27ba216271a8e36f521183f042c5b8c0dcc4d2e1 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Tue, 14 Feb 2023 19:42:41 +0100 Subject: [PATCH 0144/2225] libobs-opengl: Fix projector crash with external macOS displays When an external display is disconnected with a fullscreen projector attached to it, Qt will trigger a resize of the window twice, which makes the renderer queue 2 resize event blocks. At the time when those blocks are run, Qt's window destructor will have reset all pointers, and the block directly accesses pointers within structures identified by pointers, which are invalid by that point. This commit makes a block return early if the associated window has been destroyed already and also explicitly checks for valid pointers after. --- libobs-opengl/gl-cocoa.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libobs-opengl/gl-cocoa.m b/libobs-opengl/gl-cocoa.m index a3c19ca104169c..12dac25136a5ca 100644 --- a/libobs-opengl/gl-cocoa.m +++ b/libobs-opengl/gl-cocoa.m @@ -228,6 +228,10 @@ void gl_update(gs_device_t *device) NSOpenGLContext *parent = device->plat->context; NSOpenGLContext *context = swap->wi->context; dispatch_async(dispatch_get_main_queue(), ^() { + if (!swap || !swap->wi) { + return; + } + CGLContextObj parent_obj = [parent CGLContextObj]; CGLLockContext(parent_obj); From 003241511c4f9b0b0ddecc0b764106fe7bf5cb2e Mon Sep 17 00:00:00 2001 From: Paul Hindt Date: Mon, 20 Jun 2022 13:03:33 -0700 Subject: [PATCH 0145/2225] aja: Add audio channel selection to capture Adapted audio repacker for 32-bit samples, with an ifdef to use SIMD or C version. --- plugins/aja/CMakeLists.txt | 5 +- plugins/aja/aja-props.cpp | 43 +++-- plugins/aja/aja-props.hpp | 1 + plugins/aja/aja-routing.cpp | 4 +- plugins/aja/aja-source.cpp | 107 +++++++++++- plugins/aja/aja-source.hpp | 1 + plugins/aja/aja-ui-props.hpp | 22 ++- plugins/aja/audio-repack.c | 268 ++++++++++++++++++++++++++++++ plugins/aja/audio-repack.h | 51 ++++++ plugins/aja/audio-repack.hpp | 23 +++ plugins/aja/data/locale/en-US.ini | 10 ++ 11 files changed, 509 insertions(+), 26 deletions(-) create mode 100644 plugins/aja/audio-repack.c create mode 100644 plugins/aja/audio-repack.h create mode 100644 plugins/aja/audio-repack.hpp diff --git a/plugins/aja/CMakeLists.txt b/plugins/aja/CMakeLists.txt index d940255aa0fc6b..02bbec614ae5de 100644 --- a/plugins/aja/CMakeLists.txt +++ b/plugins/aja/CMakeLists.txt @@ -41,7 +41,10 @@ target_sources( aja-widget-io.cpp aja-widget-io.hpp aja-card-manager.hpp - aja-ui-props.hpp) + aja-ui-props.hpp + audio-repack.c + audio-repack.h + audio-repack.hpp) target_link_libraries(aja PRIVATE OBS::libobs AJA::LibAJANTV2) diff --git a/plugins/aja/aja-props.cpp b/plugins/aja/aja-props.cpp index ec38d20846d777..abea0f575cd2bf 100644 --- a/plugins/aja/aja-props.cpp +++ b/plugins/aja/aja-props.cpp @@ -13,12 +13,13 @@ SourceProps::SourceProps() pixelFormat{NTV2_FBF_INVALID}, sdiTransport{SDITransport::SingleLink}, sdi4kTransport{SDITransport4K::TwoSampleInterleave}, - audioNumChannels{8}, - audioSampleSize{4}, - audioSampleRate{48000}, + audioNumChannels{kDefaultAudioChannels}, + audioSampleSize{kDefaultAudioSampleSize}, + audioSampleRate{kDefaultAudioSampleRate}, vpids{}, autoDetect{false}, - deactivateWhileNotShowing{false} + deactivateWhileNotShowing{false}, + swapFrontCenterLFE{false} { } @@ -30,12 +31,13 @@ SourceProps::SourceProps(NTV2DeviceID devID) pixelFormat{NTV2_FBF_INVALID}, sdiTransport{SDITransport::SingleLink}, sdi4kTransport{SDITransport4K::TwoSampleInterleave}, - audioNumChannels{8}, - audioSampleSize{4}, - audioSampleRate{48000}, + audioNumChannels{kDefaultAudioChannels}, + audioSampleSize{kDefaultAudioSampleSize}, + audioSampleRate{kDefaultAudioSampleRate}, vpids{}, autoDetect{false}, - deactivateWhileNotShowing{false} + deactivateWhileNotShowing{false}, + swapFrontCenterLFE{false} { } @@ -54,6 +56,7 @@ SourceProps::SourceProps(const SourceProps &props) vpids = props.vpids; autoDetect = props.autoDetect; deactivateWhileNotShowing = props.deactivateWhileNotShowing; + swapFrontCenterLFE = props.swapFrontCenterLFE; } SourceProps::SourceProps(SourceProps &&props) @@ -71,6 +74,7 @@ SourceProps::SourceProps(SourceProps &&props) vpids = props.vpids; autoDetect = props.autoDetect; deactivateWhileNotShowing = props.deactivateWhileNotShowing; + swapFrontCenterLFE = props.swapFrontCenterLFE; } void SourceProps::operator=(const SourceProps &props) @@ -88,6 +92,7 @@ void SourceProps::operator=(const SourceProps &props) vpids = props.vpids; autoDetect = props.autoDetect; deactivateWhileNotShowing = props.deactivateWhileNotShowing; + swapFrontCenterLFE = props.swapFrontCenterLFE; } void SourceProps::operator=(SourceProps &&props) @@ -105,6 +110,7 @@ void SourceProps::operator=(SourceProps &&props) vpids = props.vpids; autoDetect = props.autoDetect; deactivateWhileNotShowing = props.deactivateWhileNotShowing; + swapFrontCenterLFE = props.swapFrontCenterLFE; } bool SourceProps::operator==(const SourceProps &props) @@ -120,7 +126,8 @@ bool SourceProps::operator==(const SourceProps &props) audioNumChannels == props.audioNumChannels && audioSampleSize == props.audioSampleSize && audioSampleRate == props.audioSampleRate && - deactivateWhileNotShowing == props.deactivateWhileNotShowing); + deactivateWhileNotShowing == props.deactivateWhileNotShowing && + swapFrontCenterLFE == props.swapFrontCenterLFE); } bool SourceProps::operator!=(const SourceProps &props) @@ -196,9 +203,19 @@ audio_format SourceProps::AudioFormat() const speaker_layout SourceProps::SpeakerLayout() const { - if (audioNumChannels == 2) + if (audioNumChannels == 1) + return SPEAKERS_MONO; + else if (audioNumChannels == 2) return SPEAKERS_STEREO; - // NTV2 is always at least 8ch on modern boards + else if (audioNumChannels == 3) + return SPEAKERS_2POINT1; + else if (audioNumChannels == 4) + return SPEAKERS_4POINT0; + else if (audioNumChannels == 5) + return SPEAKERS_4POINT1; + else if (audioNumChannels == 6) + return SPEAKERS_5POINT1; + // NTV2 card is always set to at least 8ch return SPEAKERS_7POINT1; } @@ -213,8 +230,8 @@ OutputProps::OutputProps(NTV2DeviceID devID) pixelFormat{NTV2_FBF_INVALID}, sdi4kTransport{SDITransport4K::TwoSampleInterleave}, audioNumChannels{8}, - audioSampleSize{4}, - audioSampleRate{48000} + audioSampleSize{kDefaultAudioSampleSize}, + audioSampleRate{kDefaultAudioSampleRate} { } diff --git a/plugins/aja/aja-props.hpp b/plugins/aja/aja-props.hpp index a63a57fd2ba962..e2ac09f50a24f2 100644 --- a/plugins/aja/aja-props.hpp +++ b/plugins/aja/aja-props.hpp @@ -47,6 +47,7 @@ class SourceProps { uint32_t audioSampleRate; bool autoDetect; bool deactivateWhileNotShowing; + bool swapFrontCenterLFE; }; class OutputProps { diff --git a/plugins/aja/aja-routing.cpp b/plugins/aja/aja-routing.cpp index c914ce5a74a62c..2638ddd026db65 100644 --- a/plugins/aja/aja-routing.cpp +++ b/plugins/aja/aja-routing.cpp @@ -152,7 +152,7 @@ void Routing::StartSourceAudio(const SourceProps &props, CNTV2Card *card) audioSys, NTV2InputSourceToAudioSource(inputSrc), NTV2InputSourceToEmbeddedAudioInput(inputSrc)); - card->SetNumberAudioChannels(props.audioNumChannels, audioSys); + card->SetNumberAudioChannels(kDefaultAudioChannels, audioSys); card->SetAudioRate(props.AudioRate(), audioSys); card->SetAudioBufferSize(NTV2_AUDIO_BUFFER_BIG, audioSys); @@ -188,7 +188,7 @@ void Routing::StartSourceAudio(const SourceProps &props, CNTV2Card *card) for (int a = 0; a < NTV2DeviceGetNumAudioSystems(card->GetDeviceID()); a++) { - card->SetAudioLoopBack(NTV2_AUDIO_LOOPBACK_OFF, + card->SetAudioLoopBack(NTV2_AUDIO_LOOPBACK_ON, NTV2AudioSystem(a)); } diff --git a/plugins/aja/aja-source.cpp b/plugins/aja/aja-source.cpp index 77c78fc94ea630..097c12c46ef627 100644 --- a/plugins/aja/aja-source.cpp +++ b/plugins/aja/aja-source.cpp @@ -18,6 +18,30 @@ #endif #define NTV2_AUDIOSIZE_MAX (401 * 1024) +static constexpr int kDefaultAudioCaptureChannels = 2; + +static inline audio_repack_mode_t ConvertRepackFormat(speaker_layout format, + bool swap = false) +{ + switch (format) { + case SPEAKERS_STEREO: + return repack_mode_8to2ch; + case SPEAKERS_2POINT1: + return repack_mode_8to3ch; + case SPEAKERS_4POINT0: + return repack_mode_8to4ch; + case SPEAKERS_4POINT1: + return swap ? repack_mode_8to5ch_swap : repack_mode_8to5ch; + case SPEAKERS_5POINT1: + return swap ? repack_mode_8to6ch_swap : repack_mode_8to6ch; + case SPEAKERS_7POINT1: + return swap ? repack_mode_8ch_swap : repack_mode_8ch; + default: + assert(false && "No repack requested"); + return (audio_repack_mode_t)-1; + } +} + AJASource::AJASource(obs_source_t *source) : mVideoBuffer{}, mAudioBuffer{}, @@ -283,7 +307,6 @@ void AJASource::CaptureThread(AJAThread *thread, void *data) // etc... ULWord currentCardFrame = GetIndexForNTV2Channel(framestore) * 2; card->WaitForInputFieldID(NTV2_FIELD0, channel); - currentCardFrame ^= 1; card->SetInputFrame(framestore, currentCardFrame); @@ -293,6 +316,11 @@ void AJASource::CaptureThread(AJAThread *thread, void *data) obs_data_t *settings = obs_source_get_settings(ajaSource->mSource); + AudioRepacker *audioRepacker = new AudioRepacker( + ConvertRepackFormat(sourceProps.SpeakerLayout(), + sourceProps.swapFrontCenterLFE), + sourceProps.audioSampleSize * 8); + while (ajaSource->IsCapturing()) { if (card->GetModelName() == "(Not Found)") { os_sleep_ms(250); @@ -340,15 +368,35 @@ void AJASource::CaptureThread(AJAThread *thread, void *data) ResetAudioBufferOffsets(card, audioSystem, offsets); } else { offsets.lastAddress = offsets.currentAddress; + uint32_t sampleCount = offsets.bytesRead / + (kDefaultAudioChannels * + sourceProps.audioSampleSize); obs_source_audio audioPacket; - audioPacket.samples_per_sec = 48000; - audioPacket.format = AUDIO_FORMAT_32BIT; - audioPacket.speakers = SPEAKERS_7POINT1; - audioPacket.frames = offsets.bytesRead / 32; + audioPacket.samples_per_sec = + sourceProps.audioSampleRate; + audioPacket.format = sourceProps.AudioFormat(); + audioPacket.speakers = sourceProps.SpeakerLayout(); + audioPacket.frames = sampleCount; audioPacket.timestamp = - get_sample_time(audioPacket.frames, 48000); - audioPacket.data[0] = (uint8_t *)ajaSource->mAudioBuffer - .GetHostPointer(); + get_sample_time(audioPacket.frames, + sourceProps.audioSampleRate); + uint8_t *hostAudioBuffer = + (uint8_t *)ajaSource->mAudioBuffer + .GetHostPointer(); + if (sourceProps.audioNumChannels >= 2 && + sourceProps.audioNumChannels <= 6) { + /* Repack 8ch audio to fit specified OBS speaker layout */ + audioRepacker->repack(hostAudioBuffer, + sampleCount); + audioPacket.data[0] = + (*audioRepacker)->packet_buffer; + } else { + /* Silence, or pass-through 8ch of audio */ + if (sourceProps.audioNumChannels == 0) + memset(hostAudioBuffer, 0, + offsets.bytesRead); + audioPacket.data[0] = hostAudioBuffer; + } obs_source_output_audio(ajaSource->mSource, &audioPacket); } @@ -395,7 +443,10 @@ void AJASource::CaptureThread(AJAThread *thread, void *data) } blog(LOG_INFO, "AJASource::Capturethread: Thread loop stopped"); - + if (audioRepacker) { + delete audioRepacker; + audioRepacker = nullptr; + } ajaSource->GenerateTestPattern(sourceProps.videoFormat, sourceProps.pixelFormat, NTV2_TestPatt_Black); @@ -682,6 +733,8 @@ bool aja_source_device_changed(void *data, obs_properties_t *props, obs_properties_get(props, kUIPropSDITransport.id); obs_property_t *sdi_4k_list = obs_properties_get(props, kUIPropSDITransport4K.id); + obs_property_t *channel_format_list = + obs_properties_get(props, kUIPropChannelFormat.id); obs_property_list_clear(vid_fmt_list); obs_property_list_add_int(vid_fmt_list, obs_module_text("Auto"), @@ -702,6 +755,22 @@ bool aja_source_device_changed(void *data, obs_properties_t *props, obs_property_list_clear(sdi_4k_list); populate_sdi_4k_transport_list(sdi_4k_list); + obs_property_list_clear(channel_format_list); + obs_property_list_add_int(channel_format_list, TEXT_CHANNEL_FORMAT_NONE, + 0); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_2_0CH, 2); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_2_1CH, 3); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_4_0CH, 4); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_4_1CH, 5); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_5_1CH, 6); + obs_property_list_add_int(channel_format_list, + TEXT_CHANNEL_FORMAT_7_1CH, 8); + populate_io_selection_input_list(cardID, ajaSource->GetName(), deviceID, io_select_list); @@ -904,8 +973,12 @@ static void aja_source_update(void *data, obs_data_t *settings) obs_data_get_int(settings, kUIPropSDITransport.id)); auto sdi_t4k_select = static_cast( obs_data_get_int(settings, kUIPropSDITransport4K.id)); + auto num_audio_channels = + obs_data_get_int(settings, kUIPropChannelFormat.id); bool deactivateWhileNotShowing = obs_data_get_bool(settings, kUIPropDeactivateWhenNotShowing.id); + bool swapFrontCenterLFE = + obs_data_get_bool(settings, kUIPropChannelSwap_FC_LFE.id); const std::string &wantCardID = obs_data_get_string(settings, kUIPropDevice.id); @@ -989,6 +1062,8 @@ static void aja_source_update(void *data, obs_data_t *settings) ? SDITransport::Unknown : static_cast(sdi_trx_select); want_props.sdi4kTransport = sdi_t4k_select; + want_props.audioNumChannels = (uint32_t)num_audio_channels; + want_props.swapFrontCenterLFE = swapFrontCenterLFE; want_props.vpids.clear(); want_props.deactivateWhileNotShowing = deactivateWhileNotShowing; if (aja::IsIOSelectionSDI(io_select)) { @@ -1099,11 +1174,21 @@ static obs_properties_t *aja_source_get_properties(void *data) obs_properties_add_list(props, kUIPropSDITransport4K.id, obs_module_text(kUIPropSDITransport4K.text), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); + obs_properties_add_list(props, kUIPropChannelFormat.id, + obs_module_text(kUIPropChannelFormat.text), + OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); + obs_property_t *swap = obs_properties_add_bool( + props, kUIPropChannelSwap_FC_LFE.id, + obs_module_text(kUIPropChannelSwap_FC_LFE.text)); + obs_property_set_long_description(swap, + kUIPropChannelSwap_FC_LFE.tooltip); obs_properties_add_bool( props, kUIPropDeactivateWhenNotShowing.id, obs_module_text(kUIPropDeactivateWhenNotShowing.text)); obs_properties_add_bool(props, kUIPropBuffering.id, obs_module_text(kUIPropBuffering.text)); + obs_properties_add_bool(props, kUIPropBuffering.id, + obs_module_text(kUIPropBuffering.text)); obs_property_set_modified_callback(vid_fmt_list, aja_video_format_changed); @@ -1128,6 +1213,10 @@ void aja_source_get_defaults(obs_data_t *settings) obs_data_set_default_int( settings, kUIPropSDITransport4K.id, static_cast(SDITransport4K::TwoSampleInterleave)); + obs_data_set_default_int(settings, kUIPropChannelFormat.id, + kDefaultAudioCaptureChannels); + obs_data_set_default_bool(settings, kUIPropChannelSwap_FC_LFE.id, + false); obs_data_set_default_bool(settings, kUIPropDeactivateWhenNotShowing.id, false); } diff --git a/plugins/aja/aja-source.hpp b/plugins/aja/aja-source.hpp index 81e3831abce26f..cb56a963ace6f4 100644 --- a/plugins/aja/aja-source.hpp +++ b/plugins/aja/aja-source.hpp @@ -1,6 +1,7 @@ #pragma once #include "aja-props.hpp" +#include "audio-repack.hpp" #include diff --git a/plugins/aja/aja-ui-props.hpp b/plugins/aja/aja-ui-props.hpp index 1c47658ea516c7..da082d6642cb8e 100644 --- a/plugins/aja/aja-ui-props.hpp +++ b/plugins/aja/aja-ui-props.hpp @@ -107,4 +107,24 @@ static const UIProperty kUIPropMultiViewAudioSource = { "ui_prop_multi_view_audio_source", "Multi View Audio Source", "", -}; \ No newline at end of file +}; + +static const UIProperty kUIPropChannelFormat = { + "ui_prop_channel_format", + "ChannelFormat", + "", +}; + +static const UIProperty kUIPropChannelSwap_FC_LFE = { + "ui_prop_channel_swap_fc_lfe", + "SwapFC-LFE", + "SwapFC-LFE.Tooltip", +}; + +#define TEXT_CHANNEL_FORMAT_NONE obs_module_text("ChannelFormat.None") +#define TEXT_CHANNEL_FORMAT_2_0CH obs_module_text("ChannelFormat.2_0ch") +#define TEXT_CHANNEL_FORMAT_2_1CH obs_module_text("ChannelFormat.2_1ch") +#define TEXT_CHANNEL_FORMAT_4_0CH obs_module_text("ChannelFormat.4_0ch") +#define TEXT_CHANNEL_FORMAT_4_1CH obs_module_text("ChannelFormat.4_1ch") +#define TEXT_CHANNEL_FORMAT_5_1CH obs_module_text("ChannelFormat.5_1ch") +#define TEXT_CHANNEL_FORMAT_7_1CH obs_module_text("ChannelFormat.7_1ch") diff --git a/plugins/aja/audio-repack.c b/plugins/aja/audio-repack.c new file mode 100644 index 00000000000000..d8c1d5974ae124 --- /dev/null +++ b/plugins/aja/audio-repack.c @@ -0,0 +1,268 @@ +#include "audio-repack.h" + +#define USE_SIMD +#ifdef USE_SIMD +#include +#endif + +#define NUM_CHANNELS 8 /* max until OBS supports higher channel counts */ + +int check_buffer(struct audio_repack *repack, uint32_t frame_count) +{ + const uint32_t new_size = + frame_count * repack->base_dst_size + repack->pad_dst_size; + + if (repack->packet_size < new_size) { + repack->packet_buffer = + brealloc(repack->packet_buffer, new_size); + if (!repack->packet_buffer) + return -1; + repack->packet_size = new_size; + } + + return 0; +} + +#ifdef USE_SIMD +/* + * Squash array of 8ch to new channel count + * 16-bit PCM, SIMD version + * For instance: + * 2.1: + * + * | FL | FR | LFE | emp | emp | emp |emp |emp | + * | | | + * | FL | FR | LFE | +*/ +int repack_squash16(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + + int squash = repack->squash_count; + const __m128i *src = (__m128i *)bsrc; + const __m128i *end = src + frame_count; + uint16_t *dst = (uint16_t *)repack->packet_buffer; + + /* Audio needs squashing in order to avoid resampling issues. + * The condition checks for 7.1 audio for which no squash is needed. + */ + if (squash > 0) { + while (src != end) { + __m128i target = _mm_load_si128(src++); + _mm_storeu_si128((__m128i *)dst, target); + dst += NUM_CHANNELS - squash; + } + } + + return 0; +} + +/* + * Squash array of 8ch and swap Front Center channel with LFE + * 16-bit PCM, SIMD version + * For instance: + * 2.1: + * + * | FL | FR | FC | LFE | RL | RR | LC | RC | + * | | | + * | FL | FR | LFE | FC | RL | RR | LC | RC | +*/ +int repack_squash_swap16(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + int squash = repack->squash_count; + const __m128i *src = (__m128i *)bsrc; + const __m128i *end = src + frame_count; + uint16_t *dst = (uint16_t *)repack->packet_buffer; + while (src != end) { + __m128i target = _mm_load_si128(src++); + __m128i buf = + _mm_shufflelo_epi16(target, _MM_SHUFFLE(2, 3, 1, 0)); + _mm_storeu_si128((__m128i *)dst, buf); + dst += NUM_CHANNELS - squash; + } + return 0; +} + +/* + * Squash array of 8ch to new channel count + * 32-bit PCM, SIMD version + */ +int repack_squash32(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + + int squash = repack->squash_count; + const __m128i *src = (__m128i *)bsrc; + const __m128i *end = + (__m128i *)(bsrc + (frame_count * repack->base_src_size)); + uint32_t *dst = (uint32_t *)repack->packet_buffer; + + if (squash > 0) { + while (src != end) { + __m128i tgt_lo = _mm_loadu_si128(src++); + __m128i tgt_hi = _mm_loadu_si128(src++); + _mm_storeu_si128((__m128i *)dst, tgt_lo); + dst += 4; + _mm_storeu_si128((__m128i *)dst, tgt_hi); + dst += 4; + dst -= squash; + } + } + + return 0; +} + +/* + * Squash array of 8ch to new channel count and swap FC with LFE + * 32-bit PCM, SIMD version + */ +int repack_squash_swap32(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + int squash = repack->squash_count; + const __m128i *src = (__m128i *)bsrc; + const __m128i *end = + (__m128i *)(bsrc + (frame_count * repack->base_src_size)); + uint32_t *dst = (uint32_t *)repack->packet_buffer; + while (src != end) { + __m128i tgt_lo = _mm_shuffle_epi32(_mm_loadu_si128(src++), + _MM_SHUFFLE(2, 3, 1, 0)); + __m128i tgt_hi = _mm_loadu_si128(src++); + _mm_storeu_si128((__m128i *)dst, tgt_lo); + dst += 4; + _mm_storeu_si128((__m128i *)dst, tgt_hi); + dst += 4; + dst -= squash; + } + return 0; +} + +#else + +/* + * Squash array of 8ch to new channel count + * 16-bit or 32-bit PCM, C version + */ +int repack_squash(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + int squash = repack->squash_count; + const uint8_t *src = bsrc; + const uint8_t *end = src + frame_count * repack->base_src_size; + uint8_t *dst = repack->packet_buffer; + uint32_t new_channel_count = NUM_CHANNELS - squash; + if (squash > 0) { + while (src != end) { + memcpy(dst, src, + repack->bytes_per_sample * new_channel_count); + dst += (new_channel_count * repack->bytes_per_sample); + src += NUM_CHANNELS * repack->bytes_per_sample; + } + } + + return 0; +} + +void shuffle_8ch(uint8_t *dst, const uint8_t *src, size_t szb, int ch1, int ch2, + int ch3, int ch4, int ch5, int ch6, int ch7, int ch8) +{ + /* shuffle 8 channels of audio */ + for (size_t i = 0; i < szb; i++) { + dst[0 * szb + i] = src[ch1 * szb + i]; + dst[1 * szb + i] = src[ch2 * szb + i]; + dst[2 * szb + i] = src[ch3 * szb + i]; + dst[3 * szb + i] = src[ch4 * szb + i]; + dst[4 * szb + i] = src[ch5 * szb + i]; + dst[5 * szb + i] = src[ch6 * szb + i]; + dst[6 * szb + i] = src[ch7 * szb + i]; + dst[7 * szb + i] = src[ch8 * szb + i]; + } +} + +/* + * Squash array of 8ch to new channel count and swap FC with LFE + * 16-bit or 32-bit PCM, C version + */ +int repack_squash_swap(struct audio_repack *repack, const uint8_t *bsrc, + uint32_t frame_count) +{ + if (check_buffer(repack, frame_count) < 0) + return -1; + + int squash = repack->squash_count; + const uint8_t *src = bsrc; + const uint8_t *end = src + (frame_count * repack->base_src_size); + uint8_t *dst = repack->packet_buffer; + uint32_t new_channel_count = NUM_CHANNELS - squash; + if (squash > 0) { + while (src != end) { + shuffle_8ch(dst, src, 4, 0, 1, 3, 2, 4, 5, 6, 7); + dst += (new_channel_count * repack->bytes_per_sample); + src += (NUM_CHANNELS * repack->bytes_per_sample); + } + } + + return 0; +} +#endif + +int audio_repack_init(struct audio_repack *repack, + audio_repack_mode_t repack_mode, uint8_t bits_per_sample) +{ + memset(repack, 0, sizeof(*repack)); + + if (bits_per_sample != 16 && bits_per_sample != 32) + return -1; + int _audio_repack_ch[9] = {2, 3, 4, 5, 6, 5, 6, 8, 8}; + int bytes_per_sample = (bits_per_sample / 8); + repack->bytes_per_sample = bytes_per_sample; + repack->base_src_size = NUM_CHANNELS * bytes_per_sample; + repack->base_dst_size = + _audio_repack_ch[repack_mode] * bytes_per_sample; + uint32_t squash_count = NUM_CHANNELS - _audio_repack_ch[repack_mode]; + repack->pad_dst_size = squash_count * bytes_per_sample; + repack->squash_count = squash_count; + +#ifdef USE_SIMD + if (bits_per_sample == 16) { + repack->repack_func = &repack_squash16; + if (repack_mode == repack_mode_8to5ch_swap || + repack_mode == repack_mode_8to6ch_swap || + repack_mode == repack_mode_8ch_swap) + repack->repack_func = &repack_squash_swap16; + } else if (bits_per_sample == 32) { + repack->repack_func = &repack_squash32; + if (repack_mode == repack_mode_8to5ch_swap || + repack_mode == repack_mode_8to6ch_swap || + repack_mode == repack_mode_8ch_swap) + repack->repack_func = &repack_squash_swap32; + } +#else + repack->repack_func = &repack_squash; + if (repack_mode == repack_mode_8to5ch_swap || + repack_mode == repack_mode_8to6ch_swap || + repack_mode == repack_mode_8ch_swap) + repack->repack_func = &repack_squash_swap; +#endif + + return 0; +} + +void audio_repack_free(struct audio_repack *repack) +{ + if (repack->packet_buffer) + bfree(repack->packet_buffer); + + memset(repack, 0, sizeof(*repack)); +} diff --git a/plugins/aja/audio-repack.h b/plugins/aja/audio-repack.h new file mode 100644 index 00000000000000..992e907f86ed50 --- /dev/null +++ b/plugins/aja/audio-repack.h @@ -0,0 +1,51 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include + +struct audio_repack; + +typedef int (*audio_repack_func_t)(struct audio_repack *, const uint8_t *, + uint32_t); + +struct audio_repack { + uint8_t *packet_buffer; + uint32_t packet_size; + + uint32_t base_src_size; + uint32_t base_dst_size; + uint32_t pad_dst_size; + uint32_t squash_count; + uint32_t bytes_per_sample; + + audio_repack_func_t repack_func; +}; + +enum _audio_repack_mode { + repack_mode_8to2ch = 0, + repack_mode_8to3ch, + repack_mode_8to4ch, + repack_mode_8to5ch, + repack_mode_8to6ch, + repack_mode_8to5ch_swap, + repack_mode_8to6ch_swap, + repack_mode_8ch_swap, + repack_mode_8ch, +}; + +typedef enum _audio_repack_mode audio_repack_mode_t; + +extern int audio_repack_init(struct audio_repack *repack, + audio_repack_mode_t repack_mode, + uint8_t bits_per_sample); +extern void audio_repack_free(struct audio_repack *repack); + +#ifdef __cplusplus +} +#endif diff --git a/plugins/aja/audio-repack.hpp b/plugins/aja/audio-repack.hpp new file mode 100644 index 00000000000000..946a40388c2e47 --- /dev/null +++ b/plugins/aja/audio-repack.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "audio-repack.h" + +class AudioRepacker { + struct audio_repack arepack; + +public: + inline AudioRepacker(audio_repack_mode_t repack_mode, + int bits_per_sample) + { + audio_repack_init(&arepack, repack_mode, bits_per_sample); + } + inline ~AudioRepacker() { audio_repack_free(&arepack); } + + inline int repack(const uint8_t *src, uint32_t frame_size) + { + return (*arepack.repack_func)(&arepack, src, frame_size); + } + + inline operator struct audio_repack *() { return &arepack; } + inline struct audio_repack *operator->() { return &arepack; } +}; diff --git a/plugins/aja/data/locale/en-US.ini b/plugins/aja/data/locale/en-US.ini index 8b5d0023fe7d76..88c4430c46e12c 100644 --- a/plugins/aja/data/locale/en-US.ini +++ b/plugins/aja/data/locale/en-US.ini @@ -15,3 +15,13 @@ IOSelect="Select..." SDITransport="SDI Transport" SDITransport4K="SDI 4K Transport" Auto="Auto" +ChannelFormat="Channel" +ChannelFormat.None="None" +ChannelFormat.2_0ch="2ch" +ChannelFormat.2_1ch="2.1ch" +ChannelFormat.4_0ch="4ch" +ChannelFormat.4_1ch="4.1ch" +ChannelFormat.5_1ch="5.1ch" +ChannelFormat.7_1ch="7.1ch" +SwapFC-LFE="Swap FC and LFE" +SwapFC-LFE.Tooltip="Swap Front Center Channel and LFE Channel" From fad0c8d401344d4ee4c04824dcd5c63c830667b8 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 1 Feb 2023 19:48:21 +0100 Subject: [PATCH 0146/2225] CI: Only publish docs on stable tags Also fixes version update not running for workflow_dispatch events. --- .github/workflows/docs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 36e534a20a2f8f..f906bc81d0729e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -34,7 +34,7 @@ jobs: - name: Bump Version Number shell: bash - if: github.event_name == 'push' + if: github.event_name != 'pull_request' run: | VERTEST="\#define\sLIBOBS_API_\w+_VER\s([0-9]{1,2})" VER="" @@ -91,6 +91,7 @@ jobs: echo "/previous/:major.:minor https://:major-:minor.${{ vars.CF_PAGES_PROJECT }}.pages.dev 302" >> docs/_redirects - name: Publish to live page + if: ${{ !contains(needs.docs.outputs.commitBranch, 'beta') && !contains(needs.docs.outputs.commitBranch, 'rc') }} uses: cloudflare/wrangler-action@4c10c1822abba527d820b29e6333e7f5dac2cabd with: workingDirectory: docs From 970585d073889d6313a20ca04ffece0472563631 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 1 Feb 2023 19:49:35 +0100 Subject: [PATCH 0147/2225] CI,docs: Create separate CF pages artifact The CF pages artifact has no extensions in generated links to avoid the automatic redirects CF does. --- .github/workflows/docs.yml | 29 ++++++++++++++++++++++++++++- docs/sphinx/conf.py | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f906bc81d0729e..d783517338221b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,6 +18,8 @@ jobs: commitHash: ${{ steps.setup.outputs.commitHash }} commitBranch: ${{ steps.setup.outputs.commitBranch }} fullCommitHash: ${{ steps.setup.outputs.fullCommitHash }} + env: + BUILD_CF_ARTIFACT: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} steps: - name: Checkout uses: actions/checkout@v3 @@ -63,6 +65,23 @@ jobs: target_path: '../home/_build' pre_build_commands: 'pip install -Iv sphinx==5.1.1' + - name: Disable link extensions + shell: bash + if: ${{ env.BUILD_CF_ARTIFACT == 'true' }} + run: | + SOPT="html_link_suffix = None" + ROPT="html_link_suffix = ''" + sed -i -e "s/${SOPT}/${ROPT}/g" docs/sphinx/conf.py + + - uses: totaldebug/sphinx-publish-action@1.2.0 + if: ${{ env.BUILD_CF_ARTIFACT == 'true' }} + with: + sphinx_src: 'docs/sphinx' + build_only: True + target_branch: 'master' + target_path: '../home/_build_cf' + pre_build_commands: 'pip install -Iv sphinx==5.1.1' + - uses: actions/upload-artifact@v3 with: name: 'OBS Studio Docs ${{ steps.setup.outputs.commitHash }}' @@ -70,6 +89,14 @@ jobs: ${{ runner.temp }}/_github_home/_build !${{ runner.temp }}/_github_home/_build/.doctrees + - uses: actions/upload-artifact@v3 + if: ${{ env.BUILD_CF_ARTIFACT == 'true' }} + with: + name: 'CF Pages ${{ steps.setup.outputs.commitHash }}' + path: | + ${{ runner.temp }}/_github_home/_build_cf + !${{ runner.temp }}/_github_home/_build_cf/.doctrees + deploy: runs-on: ubuntu-latest needs: docs @@ -82,7 +109,7 @@ jobs: steps: - uses: actions/download-artifact@v3 with: - name: 'OBS Studio Docs ${{ needs.docs.outputs.commitHash }}' + name: 'CF Pages ${{ needs.docs.outputs.commitHash }}' path: docs - name: Setup redirects diff --git a/docs/sphinx/conf.py b/docs/sphinx/conf.py index 1e5658c5cfd2d8..fa08135d5a2ed5 100644 --- a/docs/sphinx/conf.py +++ b/docs/sphinx/conf.py @@ -143,6 +143,7 @@ ] } +html_link_suffix = None # -- Options for HTMLHelp output ------------------------------------------ From 60e014e0e3a7849ea14ddc67a6383cfaa18a1bf4 Mon Sep 17 00:00:00 2001 From: bin Date: Mon, 13 Feb 2023 18:37:57 +0800 Subject: [PATCH 0148/2225] UI: Correct browse behavior in non-empty input edit line --- UI/window-remux.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/window-remux.cpp b/UI/window-remux.cpp index 81c00fc5d9c3f4..edb87088507a7e 100644 --- a/UI/window-remux.cpp +++ b/UI/window-remux.cpp @@ -349,7 +349,7 @@ bool RemuxQueueModel::setData(const QModelIndex &index, const QVariant &value, endRemoveRows(); } } else { - if (pathList.size() > 1 && + if (pathList.size() >= 1 && index.row() < queue.length()) { queue[index.row()].sourcePath = pathList[0]; checkInputPath(index.row()); From e36163ce89ffbcfb87e8ef71154809612ac0024f Mon Sep 17 00:00:00 2001 From: tuduweb Date: Sun, 15 Jan 2023 01:48:24 +0800 Subject: [PATCH 0149/2225] libobs/media-io: Correctly check codec tag compatibility for out stream --- libobs/media-io/media-remux.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libobs/media-io/media-remux.c b/libobs/media-io/media-remux.c index 05b315adf12b02..dd060a4f2a1005 100644 --- a/libobs/media-io/media-remux.c +++ b/libobs/media-io/media-remux.c @@ -153,14 +153,17 @@ static inline bool init_output(media_remux_job_t job, const char *out_filename) av_dict_copy(&out_stream->metadata, in_stream->metadata, 0); #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101) - if (in_stream->codecpar->codec_tag != 0) { - out_stream->codecpar->codec_tag = - in_stream->codecpar->codec_tag; - } else if (in_stream->codecpar->codec_id == AV_CODEC_ID_HEVC) { + if (in_stream->codecpar->codec_id == AV_CODEC_ID_HEVC && + job->ofmt_ctx->oformat->codec_tag && + av_codec_get_id(job->ofmt_ctx->oformat->codec_tag, + MKTAG('h', 'v', 'c', '1')) == + out_stream->codecpar->codec_id) { // Tag HEVC files with industry standard HVC1 tag for wider device compatibility + // when HVC1 tag is supported by out stream codec out_stream->codecpar->codec_tag = MKTAG('h', 'v', 'c', '1'); } else { + // Otherwise tag 0 to let FFmpeg automatically select the appropriate tag out_stream->codecpar->codec_tag = 0; } #else From 7c8acd48a9abe48d62f2552becebe5b3451e0bdc Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Tue, 17 Jan 2023 21:13:44 +0100 Subject: [PATCH 0150/2225] UI: Improved implementation for sorting filters menu Rather than finding the insertion point and iterating the vector for each item, let's sort it afterwards. --- UI/window-basic-filters.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index b323b99cf6c5f6..bbff8c23ad797e 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -528,6 +528,11 @@ QMenu *OBSBasicFilters::CreateAddFilterPopupMenu(bool async) : type(type_), name(name_) { } + + bool operator<(const FilterInfo &r) const + { + return name < r.name; + } }; vector types; @@ -542,15 +547,11 @@ QMenu *OBSBasicFilters::CreateAddFilterPopupMenu(bool async) if ((caps & OBS_SOURCE_CAP_OBSOLETE) != 0) continue; - auto it = types.begin(); - for (; it != types.end(); ++it) { - if (it->name >= name) - break; - } - - types.emplace(it, type_str, name); + types.emplace_back(type_str, name); } + sort(types.begin(), types.end()); + QMenu *popup = new QMenu(QTStr("Add"), this); for (FilterInfo &type : types) { uint32_t filterFlags = From 7178124da9ad0994509537a059c2769dd3e0626c Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sat, 24 Dec 2022 23:23:05 +0100 Subject: [PATCH 0151/2225] libobs: Fix typo in function name --- libobs/obs-audio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libobs/obs-audio.c b/libobs/obs-audio.c index 15f4d01107b053..4603441b79e708 100644 --- a/libobs/obs-audio.c +++ b/libobs/obs-audio.c @@ -421,8 +421,8 @@ static void add_audio_buffering(struct obs_core_audio *audio, *ts = new_ts; } -static bool audio_buffer_insuffient(struct obs_source *source, - size_t sample_rate, uint64_t min_ts) +static bool audio_buffer_insufficient(struct obs_source *source, + size_t sample_rate, uint64_t min_ts) { size_t total_floats = AUDIO_OUTPUT_FRAMES; size_t size; @@ -476,7 +476,7 @@ static inline bool mark_invalid_sources(struct obs_core_data *data, struct obs_source *source = data->first_audio_source; while (source) { recalculate |= - audio_buffer_insuffient(source, sample_rate, min_ts); + audio_buffer_insufficient(source, sample_rate, min_ts); source = (struct obs_source *)source->next_audio_source; } From 1f278bb18bf39a9e2ad4d14d62581a6cd0328b1e Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sat, 24 Dec 2022 23:23:25 +0100 Subject: [PATCH 0152/2225] UI: Set remux entry state before adding to queue When adding to the queue, this triggers rowCountChanged which then calls canClearFinished, reading undefined memory for state if this is not set. The correct state is set immediately after by checkInputPath. Detected by UBSan. --- UI/window-remux.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UI/window-remux.cpp b/UI/window-remux.cpp index edb87088507a7e..fd6b3386dfda37 100644 --- a/UI/window-remux.cpp +++ b/UI/window-remux.cpp @@ -367,6 +367,7 @@ bool RemuxQueueModel::setData(const QModelIndex &index, const QVariant &value, for (QString path : pathList) { RemuxQueueEntry entry; entry.sourcePath = path; + entry.state = RemuxEntryState::Empty; queue.insert(row, entry); row++; @@ -386,6 +387,7 @@ bool RemuxQueueModel::setData(const QModelIndex &index, const QVariant &value, if (!path.isEmpty()) { RemuxQueueEntry entry; entry.sourcePath = path; + entry.state = RemuxEntryState::Empty; beginInsertRows(QModelIndex(), queue.length() + 1, queue.length() + 1); From bff7928b5069beea674274d42afab33528924dfd Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sat, 24 Dec 2022 23:42:07 +0100 Subject: [PATCH 0153/2225] UI: Avoid division by zero when calculating slider position Detected by UBSan. --- UI/media-controls.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/UI/media-controls.cpp b/UI/media-controls.cpp index 13112ad85b9b9f..a6179647f3b9d0 100644 --- a/UI/media-controls.cpp +++ b/UI/media-controls.cpp @@ -338,7 +338,13 @@ void MediaControls::SetSliderPosition() float time = (float)obs_source_media_get_time(source); float duration = (float)obs_source_media_get_duration(source); - float sliderPosition = (time / duration) * (float)ui->slider->maximum(); + float sliderPosition; + + if (duration) + sliderPosition = + (time / duration) * (float)ui->slider->maximum(); + else + sliderPosition = 0.0f; ui->slider->setValue((int)sliderPosition); From 2ac43052f91ee08ae5afe198f58bc119740357bd Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 26 Dec 2022 16:19:29 +0100 Subject: [PATCH 0154/2225] UI: Fix memory leak of remux window --- UI/window-basic-main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index ffc8064f493ff1..513b3859f9ae0b 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2677,6 +2677,8 @@ OBSBasic::~OBSBasic() if (about) delete about; + delete remux; + obs_display_remove_draw_callback(ui->preview->GetDisplay(), OBSBasic::RenderMain, this); From e9504326f9f60b7d045700b14b0306407ee38dd1 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 26 Dec 2022 16:20:23 +0100 Subject: [PATCH 0155/2225] UI: Remove unnecessary null checks --- UI/window-basic-main.cpp | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 513b3859f9ae0b..384d2fa90a5f29 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2659,24 +2659,12 @@ OBSBasic::~OBSBasic() service = nullptr; outputHandler.reset(); - if (interaction) - delete interaction; - - if (properties) - delete properties; - - if (filters) - delete filters; - - if (transformWindow) - delete transformWindow; - - if (advAudioWindow) - delete advAudioWindow; - - if (about) - delete about; - + delete interaction; + delete properties; + delete filters; + delete transformWindow; + delete advAudioWindow; + delete about; delete remux; obs_display_remove_draw_callback(ui->preview->GetDisplay(), From 9afc3cabca5370eb42aa85c1b17fe668f6fdf61d Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 12 Feb 2023 22:48:44 +0100 Subject: [PATCH 0156/2225] UI: Refactor / Clean up addNudge --- UI/window-basic-main.cpp | 57 ++++++++++------------------------------ UI/window-basic-main.hpp | 9 ------- 2 files changed, 14 insertions(+), 52 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 384d2fa90a5f29..743dfcd56affbf 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -394,22 +394,26 @@ OBSBasic::OBSBasic(QWidget *parent) ui->actionE_xit->setShortcut(Qt::CTRL | Qt::Key_Q); #endif - auto addNudge = [this](const QKeySequence &seq, const char *s) { + auto addNudge = [this](const QKeySequence &seq, MoveDir direction, + int distance) { QAction *nudge = new QAction(ui->preview); nudge->setShortcut(seq); nudge->setShortcutContext(Qt::WidgetShortcut); ui->preview->addAction(nudge); - connect(nudge, SIGNAL(triggered()), this, s); + connect(nudge, &QAction::triggered, + [this, distance, direction]() { + Nudge(distance, direction); + }); }; - addNudge(Qt::Key_Up, SLOT(NudgeUp())); - addNudge(Qt::Key_Down, SLOT(NudgeDown())); - addNudge(Qt::Key_Left, SLOT(NudgeLeft())); - addNudge(Qt::Key_Right, SLOT(NudgeRight())); - addNudge(Qt::SHIFT | Qt::Key_Up, SLOT(NudgeUpFar())); - addNudge(Qt::SHIFT | Qt::Key_Down, SLOT(NudgeDownFar())); - addNudge(Qt::SHIFT | Qt::Key_Left, SLOT(NudgeLeftFar())); - addNudge(Qt::SHIFT | Qt::Key_Right, SLOT(NudgeRightFar())); + addNudge(Qt::Key_Up, MoveDir::Up, 1); + addNudge(Qt::Key_Down, MoveDir::Down, 1); + addNudge(Qt::Key_Left, MoveDir::Left, 1); + addNudge(Qt::Key_Right, MoveDir::Right, 1); + addNudge(Qt::SHIFT | Qt::Key_Up, MoveDir::Up, 10); + addNudge(Qt::SHIFT | Qt::Key_Down, MoveDir::Down, 10); + addNudge(Qt::SHIFT | Qt::Key_Left, MoveDir::Left, 10); + addNudge(Qt::SHIFT | Qt::Key_Right, MoveDir::Right, 10); assignDockToggle(ui->scenesDock, ui->toggleScenes); assignDockToggle(ui->sourcesDock, ui->toggleSources); @@ -8725,39 +8729,6 @@ void OBSBasic::Nudge(int dist, MoveDir dir) obs_scene_enum_items(GetCurrentScene(), nudge_callback, &offset); } -void OBSBasic::NudgeUp() -{ - Nudge(1, MoveDir::Up); -} -void OBSBasic::NudgeDown() -{ - Nudge(1, MoveDir::Down); -} -void OBSBasic::NudgeLeft() -{ - Nudge(1, MoveDir::Left); -} -void OBSBasic::NudgeRight() -{ - Nudge(1, MoveDir::Right); -} -void OBSBasic::NudgeUpFar() -{ - Nudge(10, MoveDir::Up); -} -void OBSBasic::NudgeDownFar() -{ - Nudge(10, MoveDir::Down); -} -void OBSBasic::NudgeLeftFar() -{ - Nudge(10, MoveDir::Left); -} -void OBSBasic::NudgeRightFar() -{ - Nudge(10, MoveDir::Right); -} - void OBSBasic::DeleteProjector(OBSProjector *projector) { for (size_t i = 0; i < projectors.size(); i++) { diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index a94e62a0372c74..7f096b18238ff7 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -1165,15 +1165,6 @@ private slots: void EnablePreviewDisplay(bool enable); void TogglePreview(); - void NudgeUp(); - void NudgeDown(); - void NudgeLeft(); - void NudgeRight(); - void NudgeUpFar(); - void NudgeDownFar(); - void NudgeLeftFar(); - void NudgeRightFar(); - void OpenStudioProgramProjector(); void OpenPreviewProjector(); void OpenSourceProjector(); From e98c9fbd65aa4e3d91da081b6020962c7b3e68ee Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sun, 1 Jan 2023 04:32:46 +0000 Subject: [PATCH 0157/2225] linux-pipewire: Drop unused Linux-only header provides DMA_BUF_IOCTL_* which were never used by OBS. --- plugins/linux-pipewire/pipewire.c | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index dd5f64f31384e2..9b325d3985a4a6 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include From 0a257a71e83225d1e6b503a5cc2dc0eea99c1e13 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sun, 1 Jan 2023 04:35:45 +0000 Subject: [PATCH 0158/2225] plugins: Enable linux-pipewire on FreeBSD --- plugins/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index d20bce142fe43f..84da8b30c3adfa 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -64,6 +64,7 @@ elseif(OS_LINUX) check_obs_browser() elseif(OS_FREEBSD) add_subdirectory(linux-capture) + add_subdirectory(linux-pipewire) add_subdirectory(linux-pulseaudio) add_subdirectory(linux-v4l2) add_subdirectory(linux-jack) From 60d20d461874e1c0ce3f0e07b1deef56eb4a72fa Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sun, 1 Jan 2023 04:42:39 +0000 Subject: [PATCH 0159/2225] CI: Enable PipeWire on FreeBSD similar to Linux --- CI/freebsd/01_install_dependencies.sh | 8 +++++++- CI/freebsd/02_build_obs.sh | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CI/freebsd/01_install_dependencies.sh b/CI/freebsd/01_install_dependencies.sh index 203ebbea5ba6c5..bfd0252e75216b 100644 --- a/CI/freebsd/01_install_dependencies.sh +++ b/CI/freebsd/01_install_dependencies.sh @@ -24,7 +24,11 @@ install_obs-deps() { status "Install OBS dependencies" trap "caught_error 'install_obs-deps'" ERR - sudo pkg install -U -y $@ + if [ -z "${DISABLE_PIPEWIRE}" ]; then + sudo pkg install -U -y $@ pipewire + else + sudo pkg install -U -y $@ + fi } install_qt-deps() { @@ -79,6 +83,7 @@ print_usage() { "-h, --help : Print this help\n" \ "-q, --quiet : Suppress most build process output\n" \ "-v, --verbose : Enable more verbose build process output\n" + "--disable-pipewire : Disable building with PipeWire support (default: off)\n" } install-dependencies-main() { @@ -88,6 +93,7 @@ install-dependencies-main() { -h | --help ) print_usage; exit 0 ;; -q | --quiet ) export QUIET=TRUE; shift ;; -v | --verbose ) export VERBOSE=TRUE; shift ;; + --disable-pipewire ) DISABLE_PIPEWIRE=TRUE; shift ;; -- ) shift; break ;; * ) break ;; esac diff --git a/CI/freebsd/02_build_obs.sh b/CI/freebsd/02_build_obs.sh index 162aff8e07f443..8563cefea50de6 100644 --- a/CI/freebsd/02_build_obs.sh +++ b/CI/freebsd/02_build_obs.sh @@ -48,10 +48,14 @@ _configure_obs() { PORTABLE_BUILD="ON" fi + if [ "${DISABLE_PIPEWIRE}" ]; then + PIPEWIRE_OPTION="-DENABLE_PIPEWIRE=OFF" + fi + cmake -S . -B ${BUILD_DIR} -G Ninja \ -DCMAKE_BUILD_TYPE=${BUILD_CONFIG} \ -DLINUX_PORTABLE=${PORTABLE_BUILD:-OFF} \ - -DENABLE_PIPEWIRE=OFF \ + ${PIPEWIRE_OPTION} \ ${CCACHE_OPTIONS} \ ${TWITCH_OPTIONS} \ ${YOUTUBE_OPTIONS} \ @@ -96,6 +100,7 @@ print_usage() { "-q, --quiet : Suppress most build process output\n" \ "-v, --verbose : Enable more verbose build process output\n" \ "-p, --portable : Create portable build (default: off)\n" \ + "--disable-pipewire : Disable building with PipeWire support (default: off)\n" \ "--build-dir : Specify alternative build directory (default: build)\n" } @@ -107,6 +112,7 @@ build-obs-main() { -q | --quiet ) export QUIET=TRUE; shift ;; -v | --verbose ) export VERBOSE=TRUE; shift ;; -p | --portable ) export PORTABLE=TRUE; shift ;; + --disable-pipewire ) DISABLE_PIPEWIRE=TRUE; shift ;; --build-dir ) BUILD_DIR="${2}"; shift 2 ;; -- ) shift; break ;; * ) break ;; From ca6dc263324459bde0fff1757541f2ceba44ba48 Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Sun, 1 Jan 2023 06:00:01 +0000 Subject: [PATCH 0160/2225] CI: Add PipeWire package to FreeBSD config for CirrusCI --- .cirrus.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.cirrus.yml b/.cirrus.yml index a325e4c05fbea0..a261f9a400e395 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -17,6 +17,7 @@ task: mesa-libs lua52 pkgconf srt qt5-svg qt5-qmake qt5-buildtools qt5-x11extras qt5-xml + pipewire script: - mkdir build - cd build From 50338afe5149654f5cc76bc6229f9e96c7e3df2b Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Fri, 10 Feb 2023 17:28:17 +0000 Subject: [PATCH 0161/2225] CI: Consistently capitalize PipeWire --- CI/build-linux.sh | 2 +- CI/linux/01_install_dependencies.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/build-linux.sh b/CI/build-linux.sh index dbeb15907b470f..bbd7c299e8623f 100755 --- a/CI/build-linux.sh +++ b/CI/build-linux.sh @@ -53,7 +53,7 @@ print_usage() { "-d, --skip-dependency-checks : Skip dependency checks (default: off)\n" \ "-p, --portable : Create portable build (default: off)\n" \ "-pkg, --package : Create distributable disk image (default: off)\n" \ - "--disable-pipewire : Disable building with Pipewire support (default: off)\n" \ + "--disable-pipewire : Disable building with PipeWire support (default: off)\n" \ "--build-dir : Specify alternative build directory (default: build)\n" } diff --git a/CI/linux/01_install_dependencies.sh b/CI/linux/01_install_dependencies.sh index 5be91fbec7dc15..4c11fd38665835 100755 --- a/CI/linux/01_install_dependencies.sh +++ b/CI/linux/01_install_dependencies.sh @@ -124,7 +124,7 @@ print_usage() { "-h, --help : Print this help\n" \ "-q, --quiet : Suppress most build process output\n" \ "-v, --verbose : Enable more verbose build process output\n" \ - "--disable-pipewire : Disable building with Pipewire support (default: off)\n" + "--disable-pipewire : Disable building with PipeWire support (default: off)\n" } install-dependencies-main() { From 150124038bbe405f3da6aeb0eaeb3a2f7f935fc0 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 2 Jan 2023 01:30:34 +0100 Subject: [PATCH 0162/2225] libobs-d3d11: Convert monitor name to UTF-8 for logging --- libobs-d3d11/d3d11-subsystem.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index 5e62c7e47f8a61..bcaa922bb282a3 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -1287,9 +1287,14 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) const RECT &rect = desc.DesktopCoordinates; const ULONG nits = GetSdrWhiteNits(desc.Monitor); + + char *friendly_name; + os_wcs_to_utf8_ptr(target.monitorFriendlyDeviceName, 0, + &friendly_name); + blog(LOG_INFO, "\t output %u:\n" - "\t name=%ls\n" + "\t name=%s\n" "\t pos={%d, %d}\n" "\t size={%d, %d}\n" "\t attached=%s\n" @@ -1301,11 +1306,12 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) "\t dpi=%u (%u%%)\n" "\t id=%s\n" "\t alt_id=%s", - i, target.monitorFriendlyDeviceName, rect.left, rect.top, + i, friendly_name, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, desc.AttachedToDesktop ? "true" : "false", refresh, bits_per_color, space, nits, min_luminance, max_luminance, max_full_frame_luminance, dpiX, scaling, id, alt_id); + bfree(friendly_name); } } From 0121533e3ebb375662c1072e7bc9e1fae7c70a84 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 2 Jan 2023 01:31:39 +0100 Subject: [PATCH 0163/2225] win-capture: Convert monitor name to UTF-8 for display Also increase the buffer size to account for potential wide characters consuming many bytes. --- plugins/win-capture/duplicator-monitor-capture.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index 7a4b1649b4b3a1..4dd0222a8acfd2 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -100,7 +100,7 @@ struct duplicator_monitor_info { char device_id[128]; char id[128]; char alt_id[128]; - char name[64]; + char name[128]; RECT rect; HMONITOR handle; }; @@ -182,7 +182,12 @@ static void GetMonitorName(HMONITOR handle, char *name, size_t count) mi.cbSize = sizeof(mi); if (GetMonitorInfoW(handle, (LPMONITORINFO)&mi) && GetMonitorTarget(mi.szDevice, &target)) { - snprintf(name, count, "%ls", target.monitorFriendlyDeviceName); + char *friendly_name; + os_wcs_to_utf8_ptr(target.monitorFriendlyDeviceName, 0, + &friendly_name); + + strcpy_s(name, count, friendly_name); + bfree(friendly_name); } else { strcpy_s(name, count, "[OBS: Unknown]"); } From 07233d189a6e58d316998ef9a055f19733275e4a Mon Sep 17 00:00:00 2001 From: gkvjwa <285794886@qq.com> Date: Mon, 2 Jan 2023 01:32:05 +0100 Subject: [PATCH 0164/2225] libobs-winrt: Convert errors to UTF-8 with winrt::to_string --- libobs-winrt/winrt-capture.cpp | 52 ++++++++++++++++++--------------- libobs-winrt/winrt-dispatch.cpp | 9 +++--- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/libobs-winrt/winrt-capture.cpp b/libobs-winrt/winrt-capture.cpp index e125288f78e366..3be44612578a7c 100644 --- a/libobs-winrt/winrt-capture.cpp +++ b/libobs-winrt/winrt-capture.cpp @@ -21,8 +21,8 @@ try { IsApiContractPresent(L"Windows.Foundation.UniversalApiContract", 8); } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_capture_supported (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "winrt_capture_supported (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); return false; } catch (...) { blog(LOG_ERROR, "winrt_capture_supported (0x%08X)", @@ -37,8 +37,8 @@ try { L"Windows.Graphics.Capture.GraphicsCaptureSession", L"IsCursorCaptureEnabled"); } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); return false; } catch (...) { blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X)", @@ -274,8 +274,8 @@ static void winrt_capture_device_loss_release(void *data) capture->frame_pool.Close(); } catch (winrt::hresult_error &err) { blog(LOG_ERROR, - "Direct3D11CaptureFramePool::Close (0x%08X): %ls", - err.code().value, err.message().c_str()); + "Direct3D11CaptureFramePool::Close (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "Direct3D11CaptureFramePool::Close (0x%08X)", winrt::to_hresult().value); @@ -284,8 +284,8 @@ static void winrt_capture_device_loss_release(void *data) try { capture->session.Close(); } catch (winrt::hresult_error &err) { - blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X)", winrt::to_hresult().value); @@ -305,8 +305,8 @@ try { L"Windows.Graphics.Capture.GraphicsCaptureSession", L"IsBorderRequired"); } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_capture_border_toggle_supported (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "winrt_capture_border_toggle_supported (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); return false; } catch (...) { blog(LOG_ERROR, "winrt_capture_border_toggle_supported (0x%08X)", @@ -330,8 +330,9 @@ winrt_capture_create_item(IGraphicsCaptureItemInterop *const interop_factory, if (FAILED(hr)) blog(LOG_ERROR, "CreateForWindow (0x%08X)", hr); } catch (winrt::hresult_error &err) { - blog(LOG_ERROR, "CreateForWindow (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "CreateForWindow (0x%08X): %s", + err.code().value, + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "CreateForWindow (0x%08X)", winrt::to_hresult().value); @@ -350,8 +351,9 @@ winrt_capture_create_item(IGraphicsCaptureItemInterop *const interop_factory, blog(LOG_ERROR, "CreateForMonitor (0x%08X)", hr); } catch (winrt::hresult_error &err) { - blog(LOG_ERROR, "CreateForMonitor (0x%08X): %ls", - err.code().value, err.message().c_str()); + blog(LOG_ERROR, "CreateForMonitor (0x%08X): %s", + err.code().value, + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "CreateForMonitor (0x%08X)", winrt::to_hresult().value); @@ -425,8 +427,8 @@ static void winrt_capture_device_loss_rebuild(void *device_void, void *data) session.StartCapture(); capture->active = TRUE; } catch (winrt::hresult_error &err) { - blog(LOG_ERROR, "StartCapture (0x%08X): %ls", err.code().value, - err.message().c_str()); + blog(LOG_ERROR, "StartCapture (0x%08X): %s", err.code().value, + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "StartCapture (0x%08X)", winrt::to_hresult().value); @@ -528,8 +530,8 @@ try { return capture; } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_capture_init (0x%08X): %ls", err.code().value, - err.message().c_str()); + blog(LOG_ERROR, "winrt_capture_init (0x%08X): %s", err.code().value, + winrt::to_string(err.message()).c_str()); return nullptr; } catch (...) { blog(LOG_ERROR, "winrt_capture_init (0x%08X)", @@ -581,8 +583,9 @@ extern "C" EXPORT void winrt_capture_free(struct winrt_capture *capture) capture->frame_pool.Close(); } catch (winrt::hresult_error &err) { blog(LOG_ERROR, - "Direct3D11CaptureFramePool::Close (0x%08X): %ls", - err.code().value, err.message().c_str()); + "Direct3D11CaptureFramePool::Close (0x%08X): %s", + err.code().value, + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "Direct3D11CaptureFramePool::Close (0x%08X)", @@ -594,8 +597,9 @@ extern "C" EXPORT void winrt_capture_free(struct winrt_capture *capture) capture->session.Close(); } catch (winrt::hresult_error &err) { blog(LOG_ERROR, - "GraphicsCaptureSession::Close (0x%08X): %ls", - err.code().value, err.message().c_str()); + "GraphicsCaptureSession::Close (0x%08X): %s", + err.code().value, + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X)", @@ -628,8 +632,8 @@ extern "C" EXPORT BOOL winrt_capture_show_cursor(struct winrt_capture *capture, success = TRUE; } catch (winrt::hresult_error &err) { blog(LOG_ERROR, - "GraphicsCaptureSession::IsCursorCaptureEnabled (0x%08X): %ls", - err.code().value, err.message().c_str()); + "GraphicsCaptureSession::IsCursorCaptureEnabled (0x%08X): %s", + err.code().value, winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "GraphicsCaptureSession::IsCursorCaptureEnabled (0x%08X)", diff --git a/libobs-winrt/winrt-dispatch.cpp b/libobs-winrt/winrt-dispatch.cpp index 2ee780be068f0b..c3bf24e762c3f1 100644 --- a/libobs-winrt/winrt-dispatch.cpp +++ b/libobs-winrt/winrt-dispatch.cpp @@ -42,8 +42,9 @@ extern "C" EXPORT struct winrt_disaptcher *winrt_dispatcher_init() dispatcher->controller = std::move(controller); } } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X): %ls", - (int32_t)err.code(), err.message().c_str()); + blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X): %s", + (int32_t)err.code(), + winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X)", (int32_t)winrt::to_hresult()); @@ -57,8 +58,8 @@ winrt_dispatcher_free(struct winrt_disaptcher *dispatcher) try { delete dispatcher; } catch (const winrt::hresult_error &err) { - blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X): %ls", - (int32_t)err.code(), err.message().c_str()); + blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X): %s", + (int32_t)err.code(), winrt::to_string(err.message()).c_str()); } catch (...) { blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X)", (int32_t)winrt::to_hresult()); From c57a2913160804c0d97f8060cecee04ade5f0d9d Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 2 Jan 2023 01:34:09 +0100 Subject: [PATCH 0165/2225] libobs: Convert security product name to UTF-8 for logging Co-Authored-By: gkvjwa <285794886@qq.com> --- libobs/obs-windows.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libobs/obs-windows.c b/libobs/obs-windows.c index 7777ab5a15f20a..4d16b011c3ce89 100644 --- a/libobs/obs-windows.c +++ b/libobs/obs-windows.c @@ -316,9 +316,14 @@ static void log_security_products_by_type(IWSCProductList *prod_list, int type) continue; } - blog(LOG_INFO, "\t%S: %s (%s)", name, + char *product_name; + os_wcs_to_utf8_ptr(name, 0, &product_name); + + blog(LOG_INFO, "\t%s: %s (%s)", product_name, get_str_for_state(prod_state), get_str_for_type(type)); + bfree(product_name); + SysFreeString(name); prod->lpVtbl->Release(prod); } From 559925ebaa4262fe383234097da47967646c9d4f Mon Sep 17 00:00:00 2001 From: bin Date: Fri, 4 Nov 2022 00:43:46 +0800 Subject: [PATCH 0166/2225] UI: Check item whether selected before select To prevent item from being selected again, then mess up the qt internal list order. --- UI/source-tree.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/source-tree.cpp b/UI/source-tree.cpp index 43d8948385c59c..91e83bb9a914e7 100644 --- a/UI/source-tree.cpp +++ b/UI/source-tree.cpp @@ -1154,7 +1154,7 @@ void SourceTree::SelectItem(obs_sceneitem_t *sceneitem, bool select) return; QModelIndex index = stm->createIndex(i, 0); - if (index.isValid()) + if (index.isValid() && select != selectionModel()->isSelected(index)) selectionModel()->select( index, select ? QItemSelectionModel::Select : QItemSelectionModel::Deselect); From cddf69d69f0e2369dc05250b844b0c1e7200f982 Mon Sep 17 00:00:00 2001 From: univrsal Date: Thu, 16 Feb 2023 17:54:28 +0100 Subject: [PATCH 0167/2225] linux-jack: Prepend devices with "OBS Studio: " This makes it more clear that the device belongs to OBS. Fixes #7988 --- plugins/linux-jack/jack-input.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/linux-jack/jack-input.c b/plugins/linux-jack/jack-input.c index 3fe97b6a1ea1fd..a7353d053d83f2 100644 --- a/plugins/linux-jack/jack-input.c +++ b/plugins/linux-jack/jack-input.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include "jack-wrapper.h" #include +#include /** * Returns the name of the plugin @@ -76,8 +77,13 @@ static void jack_update(void *vptr, obs_data_t *settings) if (!data->device || strcmp(data->device, new_device) != 0) { if (data->device) bfree(data->device); - data->device = bstrdup(new_device); + /* prefix all devices to make it clear that they belong to obs */ + struct dstr device; + dstr_init(&device); + dstr_catf(&device, "OBS Studio: %s", new_device); + data->device = bstrdup(device.array); settings_changed = true; + dstr_free(&device); } if (settings_changed) { From 08af16edaf3ec3343c8e3e3e6f8098afb5f2afe4 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 8 Jan 2023 09:14:41 +0100 Subject: [PATCH 0168/2225] CI: Factorize Github labels checks --- .github/workflows/main.yml | 83 ++++++++++++++------------------------ 1 file changed, 31 insertions(+), 52 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 800c2d70aca615..0d9bf9518c553d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -64,6 +64,23 @@ jobs: run: | ./CI/check-cmake.sh + config: + name: '01 - Configure Build Jobs' + runs-on: [ubuntu-22.04] + outputs: + create_artifacts: ${{ steps.config.outputs.create_artifacts }} + cache_date: ${{ steps.config.outputs.cache_date }} + steps: + - name: 'Configure Build Jobs' + id: config + run: | + if [[ "${{ github.event_name == 'pull_request' }}" == "true" ]]; then + echo "create_artifacts=${{ contains(github.event.pull_request.labels.*.name, 'Seeking Testers') }}" >> $GITHUB_OUTPUT + else + echo 'create_artifacts=true' >> $GITHUB_OUTPUT + fi + echo "cache_date=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT + macos_build: name: '02 - macOS' runs-on: [macos-12] @@ -71,7 +88,7 @@ jobs: matrix: arch: ['x86_64', 'arm64'] if: always() - needs: [clang_check] + needs: [config, clang_check] env: MACOSX_DEPLOYMENT_TARGET_X86_64: '10.15' MACOSX_DEPLOYMENT_TARGET_ARM64: '11.0' @@ -92,17 +109,6 @@ jobs: path: 'obs-studio' fetch-depth: 0 - - name: 'Check for Github Labels' - if: github.event_name == 'pull_request' - run: | - if test -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')"; then - echo "SEEKING_TESTERS=1" >> $GITHUB_ENV - else - echo "SEEKING_TESTERS=0" >> $GITHUB_ENV - fi - - echo "CACHE_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV - - name: 'Restore ccache from cache' id: ccache-cache uses: actions/cache@v3 @@ -110,7 +116,7 @@ jobs: CACHE_NAME: 'ccache-cache' with: path: ${{ github.workspace }}/.ccache - key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ matrix.arch }}-${{ env.CACHE_DATE }} + key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ matrix.arch }}-${{ needs.config.outputs.cache_date }} - name: 'Restore Chromium Embedded Framework from cache' id: cef-cache @@ -186,14 +192,14 @@ jobs: run: cmake --build build -t test - name: 'Create build artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} run: | CI/macos/03_package_obs.sh --codesign --architecture "${{ matrix.arch }}" ARTIFACT_NAME=$(basename $(/usr/bin/find build -type f -name "obs-studio-*.dmg" -depth 1 | head -1)) echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV - name: 'Upload build Artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} uses: actions/upload-artifact@v3 with: name: 'obs-studio-macos-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}' @@ -206,7 +212,7 @@ jobs: matrix: ubuntu: ['ubuntu-20.04', 'ubuntu-22.04'] if: always() - needs: [clang_check] + needs: [config, clang_check] defaults: run: shell: bash @@ -221,17 +227,6 @@ jobs: path: 'obs-studio' fetch-depth: 0 - - name: 'Check for Github Labels' - if: github.event_name == 'pull_request' - run: | - if test -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')"; then - echo "SEEKING_TESTERS=1" >> $GITHUB_ENV - else - echo "SEEKING_TESTERS=0" >> $GITHUB_ENV - fi - - echo "CACHE_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV - - name: 'Restore ccache from cache' id: ccache-cache uses: actions/cache@v3 @@ -239,7 +234,7 @@ jobs: CACHE_NAME: 'ccache-cache' with: path: ${{ github.workspace }}/.ccache - key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ matrix.ubuntu }}-${{ env.CACHE_DATE }} + key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ matrix.ubuntu }}-${{ needs.config.outputs.cache_date }} - name: 'Restore Chromium Embedded Framework from cache' id: cef-cache @@ -268,7 +263,7 @@ jobs: run: cmake --build build -t test - name: 'Create build artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} run: | CI/linux/03_package_obs.sh ARTIFACT_NAME=$(basename $(/usr/bin/find build -maxdepth 1 -type f -name "obs-studio-*.deb" | sort -rn | head -1)) @@ -276,14 +271,14 @@ jobs: echo "DEBUG_FILE_NAME=${ARTIFACT_NAME//.deb/-dbgsym.ddeb}" >> $GITHUB_ENV - name: 'Upload build Artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} uses: actions/upload-artifact@v3 with: name: 'obs-studio-${{ matrix.ubuntu }}-${{ steps.setup.outputs.commitHash }}' path: '${{ github.workspace }}/obs-studio/build/${{ env.FILE_NAME }}' - name: 'Upload debug symbol Artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} uses: actions/upload-artifact@v3 with: name: 'obs-studio-${{ matrix.ubuntu }}-${{ steps.setup.outputs.commitHash }}-dbgsym' @@ -292,7 +287,7 @@ jobs: windows_build: name: '02 - Windows' runs-on: [windows-2022] - needs: [clang_check] + needs: [config, clang_check] if: always() strategy: matrix: @@ -316,12 +311,6 @@ jobs: - name: 'Add msbuild to PATH' uses: microsoft/setup-msbuild@v1.1 - - name: 'Check for Github Labels' - if: github.event_name == 'pull_request' - run: | - $LabelFound = try { (Invoke-RestMethod -Authentication 'Bearer' -Token (ConvertTo-SecureString '${{ secrets.GITHUB_TOKEN }}' -AsPlainText) -Uri "${{ github.event.pull_request.url }}" -UseBasicParsing).labels.name.contains("Seeking Testers") } catch { $false } - Write-Output "SEEKING_TESTERS=$(if( $LabelFound -eq $true ) { 1 } else { 0 })" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - - name: 'Restore VLC dependency from cache' id: vlc-cache uses: actions/cache@v3 @@ -356,14 +345,14 @@ jobs: run: CI/windows/02_build_obs.ps1 -BuildArch ${{ matrix.arch }} - name: 'Create build artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} run: | CI/windows/03_package_obs.ps1 -BuildArch ${{ matrix.arch }} -Package $ArtifactName = Get-ChildItem -filter "obs-studio-*-windows-${{ matrix.arch }}.zip" -File Write-Output "FILE_NAME=${ArtifactName}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - name: 'Upload build artifact' - if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} + if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} uses: actions/upload-artifact@v3 with: name: 'obs-studio-windows-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}' @@ -372,8 +361,7 @@ jobs: linux_package: name: '02 - Flatpak' runs-on: [ubuntu-latest] - needs: [clang_check] - if: always() + needs: [config, clang_check] defaults: run: shell: bash @@ -381,15 +369,6 @@ jobs: image: bilelmoussaoui/flatpak-github-actions:kde-6.4 options: --privileged steps: - - name: 'Check for Github Labels' - if: github.event_name == 'pull_request' - run: | - if ! /usr/bin/command -v "jq" >/dev/null 2>&1; then sudo dnf install -y -q jq; fi - if test -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')"; then - echo "SEEKING_TESTERS=1" >> $GITHUB_ENV - else - echo "SEEKING_TESTERS=0" >> $GITHUB_ENV - fi - name: 'Checkout' uses: actions/checkout@v3 @@ -407,7 +386,7 @@ jobs: - name: Build Flatpak Manifest uses: flatpak/flatpak-github-actions/flatpak-builder@v5 with: - build-bundle: ${{ github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1' }} + build-bundle: ${{ fromJSON(needs.config.outputs.create_artifacts) }} bundle: obs-studio-flatpak-${{ env.OBS_GIT_HASH }}.flatpak manifest-path: CI/flatpak/com.obsproject.Studio.json cache-key: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }} From e59333508670cf204825bb382ad2f1541259d80f Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sun, 1 Jan 2023 20:06:12 +0100 Subject: [PATCH 0169/2225] obs-ffmpeg: NVENC error logging improvements This writes the result of nvEncGetLastErrorString to the last encoder error instead of just the log file. This makes it user-visible, which should help users diagnose and solve the problem. Also strips off leading colons from NVENC error strings as these can look odd given our format string. An example of such an error: ::NV_ENC_TWO_PASS_FULL_RESOLUTION is only supported multipass encoding on this architecture. --- plugins/obs-ffmpeg/jim-nvenc-helpers.c | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/plugins/obs-ffmpeg/jim-nvenc-helpers.c b/plugins/obs-ffmpeg/jim-nvenc-helpers.c index 436dd3bfb722c2..e36be20908ab84 100644 --- a/plugins/obs-ffmpeg/jim-nvenc-helpers.c +++ b/plugins/obs-ffmpeg/jim-nvenc-helpers.c @@ -37,11 +37,22 @@ bool nv_failed2(obs_encoder_t *encoder, void *session, NVENCSTATUS err, const char *func, const char *call) { struct dstr error_message = {0}; + const char *nvenc_error = NULL; - switch (err) { - case NV_ENC_SUCCESS: + if (err == NV_ENC_SUCCESS) return false; + if (session) { + nvenc_error = nv.nvEncGetLastErrorString(session); + if (nvenc_error) { + // Some NVENC errors begin with :: which looks + // odd to users. Strip it off. + while (*nvenc_error == ':') + nvenc_error++; + } + } + + switch (err) { case NV_ENC_ERR_OUT_OF_MEMORY: obs_encoder_set_last_error( encoder, obs_module_text("NVENC.TooManySessions")); @@ -58,17 +69,23 @@ bool nv_failed2(obs_encoder_t *encoder, void *session, NVENCSTATUS err, break; default: - dstr_printf(&error_message, - "NVENC Error: %s: %s failed: %d (%s)", func, call, - (int)err, nv_error_name(err)); + if (nvenc_error && *nvenc_error) { + dstr_printf(&error_message, "NVENC Error: %s (%s)", + nvenc_error, nv_error_name(err)); + } else { + + dstr_printf(&error_message, + "NVENC Error: %s: %s failed: %d (%s)", func, + call, (int)err, nv_error_name(err)); + } obs_encoder_set_last_error(encoder, error_message.array); dstr_free(&error_message); break; } - if (session) { + if (nvenc_error && *nvenc_error) { error("%s: %s failed: %d (%s): %s", func, call, (int)err, - nv_error_name(err), nv.nvEncGetLastErrorString(session)); + nv_error_name(err), nvenc_error); } else { error("%s: %s failed: %d (%s)", func, call, (int)err, nv_error_name(err)); From 7dae8d307c85a44a111b9e6db534051467c3547e Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 17 Feb 2023 00:54:45 +0100 Subject: [PATCH 0170/2225] obs-ffmpeg: Restore bad GPU index NVENC error message FFmpeg wipes priv_data if the encoder fails to start, so we need some way of knowing if the GPU index was non-zero. This is a bit ugly but the best way to do it for now. --- plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c index f0f77474463535..884c6db83ae605 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c @@ -35,6 +35,7 @@ struct nvenc_encoder { #ifdef ENABLE_HEVC bool hevc; #endif + int gpu; DARRAY(uint8_t) header; DARRAY(uint8_t) sei; }; @@ -178,6 +179,10 @@ static bool nvenc_update(struct nvenc_encoder *enc, obs_data_t *settings, av_opt_set(enc->ffve.context->priv_data, "level", "auto", 0); av_opt_set_int(enc->ffve.context->priv_data, "gpu", gpu, 0); + // This is ugly but ffmpeg wipes priv_data on error and we need + // to know this to show a proper error message. + enc->gpu = gpu; + set_psycho_aq(enc, psycho_aq); enc->ffve.context->max_b_frames = bf; @@ -243,20 +248,15 @@ static void on_init_error(void *data, int ret) struct nvenc_encoder *enc = data; struct dstr error_message = {0}; - int64_t gpu; - if (av_opt_get_int(enc->ffve.context->priv_data, "gpu", 0, &gpu) < 0) { - gpu = -1; - } - dstr_copy(&error_message, obs_module_text("NVENC.Error")); dstr_replace(&error_message, "%1", av_err2str(ret)); dstr_cat(&error_message, "\r\n\r\n"); - if (gpu > 0) { + if (enc->gpu > 0) { // if a non-zero GPU failed, almost always // user error. tell then to fix it. char gpu_str[16]; - snprintf(gpu_str, sizeof(gpu_str) - 1, "%d", (int)gpu); + snprintf(gpu_str, sizeof(gpu_str) - 1, "%d", enc->gpu); gpu_str[sizeof(gpu_str) - 1] = 0; dstr_cat(&error_message, obs_module_text("NVENC.BadGPUIndex")); From 25f01357e6c4bdc03f85c8550b211acc097ab753 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 17 Feb 2023 15:17:45 +0100 Subject: [PATCH 0171/2225] obs-ffmpeg: Handle NV_ENC_ERR_NO_ENCODE_DEVICE error --- plugins/obs-ffmpeg/jim-nvenc-helpers.c | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/obs-ffmpeg/jim-nvenc-helpers.c b/plugins/obs-ffmpeg/jim-nvenc-helpers.c index e36be20908ab84..44fa487c8fbc6b 100644 --- a/plugins/obs-ffmpeg/jim-nvenc-helpers.c +++ b/plugins/obs-ffmpeg/jim-nvenc-helpers.c @@ -58,6 +58,7 @@ bool nv_failed2(obs_encoder_t *encoder, void *session, NVENCSTATUS err, encoder, obs_module_text("NVENC.TooManySessions")); break; + case NV_ENC_ERR_NO_ENCODE_DEVICE: case NV_ENC_ERR_UNSUPPORTED_DEVICE: obs_encoder_set_last_error( encoder, obs_module_text("NVENC.UnsupportedDevice")); From e280fd6cd0383e602ac48706ffb2054e70833740 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 17 Feb 2023 15:18:45 +0100 Subject: [PATCH 0172/2225] obs-ffmpeg: Add GeForce MX350 variant to unsupported NVENC list --- plugins/obs-ffmpeg/obs-ffmpeg.c | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index f1884c789f142b..aeb586d20871f7 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -93,6 +93,7 @@ static const int blacklisted_adapters[] = { 0x1d13, // GP108M [GeForce MX250] 0x1d52, // GP108BM [GeForce MX250] 0x1c94, // GP107 [GeForce MX350] + 0x1c96, // GP107 [GeForce MX350] 0x1f97, // TU117 [GeForce MX450] 0x137b, // GM108GLM [Quadro M520 Mobile] 0x1d33, // GP108GLM [Quadro P500 Mobile] From 5d1f0efc43c64c25f5edd4101bc1f0013bcacb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Cezner?= Date: Sun, 15 Jan 2023 11:49:35 +0100 Subject: [PATCH 0173/2225] vlc-video: Fix videos larger than 1080p being squished Fix an overflow in display_width caused by unsafe multiplication of the video width by Sample Aspect Ratio. --- plugins/vlc-video/vlc-video-source.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/vlc-video/vlc-video-source.c b/plugins/vlc-video/vlc-video-source.c index b4e32473659833..559a45827531bb 100644 --- a/plugins/vlc-video/vlc-video-source.c +++ b/plugins/vlc-video/vlc-video-source.c @@ -401,8 +401,8 @@ static void calculate_display_size(struct vlc_source *c, unsigned *width, if (track->i_type != libvlc_track_video) continue; - int display_width = track->video->i_width; - int display_height = track->video->i_height; + unsigned display_width = track->video->i_width; + unsigned display_height = track->video->i_height; if (display_width == 0 || display_height == 0) continue; @@ -410,9 +410,9 @@ static void calculate_display_size(struct vlc_source *c, unsigned *width, /* Adjust for Sample Aspect Ratio (SAR) */ if (track->video->i_sar_num > 0 && track->video->i_sar_den > 0) { - display_width = display_width * - track->video->i_sar_num / - track->video->i_sar_den; + display_width = (unsigned)util_mul_div64( + display_width, track->video->i_sar_num, + track->video->i_sar_den); } switch (track->video->i_orientation) { From e355a320663a01f18edc594f07c4633d4bb9098c Mon Sep 17 00:00:00 2001 From: pkv Date: Wed, 15 Feb 2023 19:08:59 +0100 Subject: [PATCH 0174/2225] obs-ffmpeg: Relax 'lookahead' constraint when bitrate is updated When bitrate is updated, a check against 'lookahead' setting is done. If 'lookahead' is enabled, the bitrate update is disabled. We indeed used to observe crashes with nvenc when frequent bitrate resettings were effected while lookahead option was enabled. But recent tests have shown that the issue is gone. As a result this commit allows 'lookahead' with bitrate live update. Signed-off-by: pkv --- plugins/obs-ffmpeg/jim-nvenc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/obs-ffmpeg/jim-nvenc.c b/plugins/obs-ffmpeg/jim-nvenc.c index 7b247c877312c1..41429fdc5030f1 100644 --- a/plugins/obs-ffmpeg/jim-nvenc.c +++ b/plugins/obs-ffmpeg/jim-nvenc.c @@ -645,8 +645,7 @@ static bool init_encoder_base(struct nvenc_data *enc, obs_data_t *settings, /* rate control */ enc->can_change_bitrate = - nv_get_cap(enc, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE) && - !lookahead; + nv_get_cap(enc, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE); config->rcParams.rateControlMode = NV_ENC_PARAMS_RC_VBR; From b44910726d7607a7b72fde01c1e498d3be8f5c69 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 12 Feb 2023 01:23:18 +0100 Subject: [PATCH 0175/2225] UI: Defer Settings window hotkey loading --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicSettings.ui | 19 +++++++++++++++++++ UI/window-basic-settings.cpp | 25 +++++++++++++++++++++++-- UI/window-basic-settings.hpp | 1 + 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 84f36418987520..4e0b39f58fe02b 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -1209,6 +1209,7 @@ Basic.Settings.Hotkeys.Pair="Key combinations shared with '%1' act as toggles" Basic.Settings.Hotkeys.Filter="Filter" Basic.Settings.Hotkeys.FilterByHotkey="Filter by Hotkey" Basic.Settings.Hotkeys.DuplicateWarning="This hotkey is shared by one or more other actions, click to show conflicts" +Basic.Settings.Hotkeys.PleaseWait="Loading hotkeys, please wait..." # basic mode hotkeys Basic.Hotkeys.SelectScene="Switch to scene" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index ff27f52c255338..c20e7d3d1799cc 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -5692,6 +5692,25 @@ 9 + + + + + 0 + 0 + + + + Basic.Settings.Hotkeys.PleaseWait + + + false + + + Qt::AlignCenter + + + diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 98720b2c9c8099..0ce8800ab8302f 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -3074,6 +3074,13 @@ void OBSBasicSettings::LoadHotkeySettings(obs_hotkey_id ignoreKey) AddHotkeys(*hotkeysLayout, obs_service_get_name, services); ScanDuplicateHotkeys(hotkeysLayout); + + /* After this function returns the UI can still be unresponsive for a bit. + * So by deferring the call to unsetCursor() to the Qt event loop it will + * take until it has actually finished processing the created widgets + * before the cursor is reset. */ + QTimer::singleShot(1, this, &OBSBasicSettings::unsetCursor); + hotkeysLoaded = true; } void OBSBasicSettings::LoadSettings(bool changedOnly) @@ -3088,8 +3095,6 @@ void OBSBasicSettings::LoadSettings(bool changedOnly) LoadAudioSettings(); if (!changedOnly || videoChanged) LoadVideoSettings(); - if (!changedOnly || hotkeysChanged) - LoadHotkeySettings(); if (!changedOnly || a11yChanged) LoadA11ySettings(); if (!changedOnly || advancedChanged) @@ -3996,6 +4001,20 @@ void OBSBasicSettings::on_listWidget_itemSelectionChanged() if (loading || row == pageIndex) return; + if (!hotkeysLoaded && row == 5) { + setCursor(Qt::BusyCursor); + /* Look, I know this /feels/ wrong, but the specific issue we're dealing with + * here means that the UI locks up immediately even when using "invokeMethod". + * So the only way for the user to see the loading message on the page is to + * give the Qt event loop a tiny bit of time to switch to the hotkey page, + * and only then start loading. This could maybe be done by subclassing QWidget + * for the hotkey page and then using showEvent() but I *really* don't want + * to deal with that right now. I've got better things to do with my life + * than to work around this god damn stupid issue for something we'll remove + * soon enough anyway. So this solution it is. */ + QTimer::singleShot(1, this, [&]() { LoadHotkeySettings(); }); + } + pageIndex = row; } @@ -4629,6 +4648,8 @@ bool OBSBasicSettings::ScanDuplicateHotkeys(QFormLayout *layout) void OBSBasicSettings::ReloadHotkeys(obs_hotkey_id ignoreKey) { + if (!hotkeysLoaded) + return; LoadHotkeySettings(ignoreKey); } diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 51f00e9418ec9c..51f00336f8e98c 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -125,6 +125,7 @@ class OBSBasicSettings : public QDialog { int sampleRateIndex = 0; int channelIndex = 0; bool llBufferingEnabled = false; + bool hotkeysLoaded = false; int lastSimpleRecQualityIdx = 0; int lastServiceIdx = -1; From 64d4ae0106ff9c61978bdb7b55dc35679edb5a13 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Mon, 13 Feb 2023 17:09:18 -0600 Subject: [PATCH 0176/2225] UI: Remove bitness strings This removes the bitness strings from the title bar and about dialog. --- UI/obs-app.cpp | 5 ----- UI/window-basic-about.cpp | 8 +------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index b9544bff197224..e815d072e46242 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1722,11 +1722,6 @@ string OBSApp::GetVersionString() const ver << " ("; #ifdef _WIN32 - if (sizeof(void *) == 8) - ver << "64-bit, "; - else - ver << "32-bit, "; - ver << "windows)"; #elif __APPLE__ ver << "mac)"; diff --git a/UI/window-basic-about.cpp b/UI/window-basic-about.cpp index 2bbc216aa28647..7142d10625f58d 100644 --- a/UI/window-basic-about.cpp +++ b/UI/window-basic-about.cpp @@ -15,14 +15,8 @@ OBSAbout::OBSAbout(QWidget *parent) : QDialog(parent), ui(new Ui::OBSAbout) ui->setupUi(this); - QString bitness; QString ver; - if (sizeof(void *) == 4) - bitness = " (32 bit)"; - else if (sizeof(void *) == 8) - bitness = " (64 bit)"; - #ifdef HAVE_OBSCONFIG_H ver += OBS_VERSION; #else @@ -30,7 +24,7 @@ OBSAbout::OBSAbout(QWidget *parent) : QDialog(parent), ui(new Ui::OBSAbout) LIBOBS_API_PATCH_VER; #endif - ui->version->setText(ver + bitness); + ui->version->setText(ver); ui->contribute->setText(QTStr("About.Contribute")); From 623af1582106ac5f88f113a12e26804575754455 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 16 Feb 2023 15:30:47 +0100 Subject: [PATCH 0177/2225] UI: Connect Reset button in Transform dialog with main window directly --- UI/window-basic-transform.cpp | 8 ++------ UI/window-basic-transform.hpp | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index 84a9e55bdcd92e..a66c16ab4b473e 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -65,7 +65,8 @@ OBSBasicTransform::OBSBasicTransform(OBSSceneItem item, OBSBasic *parent) ui->buttonBox->button(QDialogButtonBox::Close)->setDefault(true); connect(ui->buttonBox->button(QDialogButtonBox::Reset), - SIGNAL(clicked()), this, SLOT(on_resetButton_clicked())); + &QPushButton::clicked, main, + &OBSBasic::on_actionResetTransform_triggered); installEventFilter(CreateShortcutFilter()); @@ -342,11 +343,6 @@ void OBSBasicTransform::OnCropChanged() ignoreTransformSignal = false; } -void OBSBasicTransform::on_resetButton_clicked() -{ - main->on_actionResetTransform_triggered(); -} - template static T GetOBSRef(QListWidgetItem *item) { return item->data(static_cast(QtDataRole::OBSRef)).value(); diff --git a/UI/window-basic-transform.hpp b/UI/window-basic-transform.hpp index de9809b570c414..16342609d22161 100644 --- a/UI/window-basic-transform.hpp +++ b/UI/window-basic-transform.hpp @@ -45,7 +45,6 @@ private slots: void OnBoundsType(int index); void OnControlChanged(); void OnCropChanged(); - void on_resetButton_clicked(); public: OBSBasicTransform(OBSSceneItem item, OBSBasic *parent); From 7035ca79647ab0ae3a6c26eb1b65fe9efbc74808 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:51:27 +0100 Subject: [PATCH 0178/2225] libcaption: Fix missing newline at the end of file --- deps/libcaption/src/utf8.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/libcaption/src/utf8.c b/deps/libcaption/src/utf8.c index 789511e9e2fe36..41c6de49b8189b 100644 --- a/deps/libcaption/src/utf8.c +++ b/deps/libcaption/src/utf8.c @@ -245,4 +245,4 @@ char* strnstr(const char* string1, const char* string2, size_t len) } return NULL; } -#endif \ No newline at end of file +#endif From cfa0dc573ec5b657c105d542133e171037fc93c8 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:51:49 +0100 Subject: [PATCH 0179/2225] media-playback: Fix non-exhaustive switch statement --- deps/media-playback/media-playback/decode.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index 059687b6db5933..08377ebe4814ac 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -142,9 +142,14 @@ static uint16_t get_max_luminance(const AVStream *stream) break; } - case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: - return (uint16_t)((AVContentLightMetadata *)sd->data) - ->MaxCLL; + case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: { + const AVContentLightMetadata *const md = + (AVContentLightMetadata *)&sd->data; + max_luminance = md->MaxCLL; + break; + } + default: + break; } } From fb7a9edadc7276683fbf723164b8fcc5eb83a053 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:53:24 +0100 Subject: [PATCH 0180/2225] libobs: Fix non-exhaustive switch statements --- libobs/graphics/graphics-ffmpeg.c | 4 +-- libobs/media-io/video-io.c | 3 +++ libobs/media-io/video-matrices.c | 15 ++++++----- libobs/obs-scene.c | 44 +++++++++++-------------------- libobs/obs-source-deinterlace.c | 6 +++++ libobs/obs-source.c | 17 ++++++++++++ libobs/obs.c | 18 ++++++++++--- 7 files changed, 66 insertions(+), 41 deletions(-) diff --git a/libobs/graphics/graphics-ffmpeg.c b/libobs/graphics/graphics-ffmpeg.c index a94d41eb31eb71..87a62d9b6abe21 100644 --- a/libobs/graphics/graphics-ffmpeg.c +++ b/libobs/graphics/graphics-ffmpeg.c @@ -626,9 +626,9 @@ static inline enum gs_color_format convert_format(enum AVPixelFormat format) return GS_BGRX; case AV_PIX_FMT_RGBA64BE: return GS_RGBA16; + default: + return GS_BGRX; } - - return GS_BGRX; } uint8_t *gs_create_texture_file_data(const char *file, diff --git a/libobs/media-io/video-io.c b/libobs/media-io/video-io.c index 32d8d73b99cd55..cc772650f83e0e 100644 --- a/libobs/media-io/video-io.c +++ b/libobs/media-io/video-io.c @@ -309,6 +309,9 @@ static enum video_colorspace collapse_space(enum video_colorspace cs) break; case VIDEO_CS_2100_HLG: cs = VIDEO_CS_2100_PQ; + break; + default: + break; } return cs; diff --git a/libobs/media-io/video-matrices.c b/libobs/media-io/video-matrices.c index 4e9239b2c8600b..a054313050d64e 100644 --- a/libobs/media-io/video-matrices.c +++ b/libobs/media-io/video-matrices.c @@ -242,12 +242,10 @@ bool video_format_get_parameters(enum video_colorspace color_space, enum video_range_type range, float matrix[16], float range_min[3], float range_max[3]) { - uint32_t bpc = 8; - switch (color_space) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: - bpc = 10; - } + uint32_t bpc = (color_space == VIDEO_CS_2100_PQ || + color_space == VIDEO_CS_2100_HLG) + ? 10 + : 8; return video_format_get_parameters_for_bpc(color_space, range, matrix, range_min, range_max, bpc); @@ -260,7 +258,7 @@ bool video_format_get_parameters_for_format(enum video_colorspace color_space, float range_min[3], float range_max[3]) { - uint32_t bpc = 8; + uint32_t bpc; switch (format) { case VIDEO_FORMAT_I010: case VIDEO_FORMAT_P010: @@ -271,6 +269,9 @@ bool video_format_get_parameters_for_format(enum video_colorspace color_space, case VIDEO_FORMAT_YA2L: bpc = 12; break; + default: + bpc = 8; + break; } return video_format_get_parameters_for_bpc(color_space, range, matrix, diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index c415268b8b95b4..d2bceb14230f77 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -642,24 +642,19 @@ static void render_item_texture(struct obs_scene_item *item, tech_name = "DrawUpscaleMultiply"; break; case GS_CS_709_EXTENDED: - switch (current_space) { - case GS_CS_SRGB: - case GS_CS_SRGB_16F: + if (current_space == GS_CS_SRGB || + current_space == GS_CS_SRGB_16F) tech_name = "DrawUpscaleTonemap"; - break; - case GS_CS_709_SCRGB: + else if (current_space == GS_CS_709_SCRGB) tech_name = "DrawUpscaleMultiply"; - } break; case GS_CS_709_SCRGB: - switch (current_space) { - case GS_CS_SRGB: - case GS_CS_SRGB_16F: + if (current_space == GS_CS_SRGB || + current_space == GS_CS_SRGB_16F) tech_name = "DrawUpscaleMultiplyTonemap"; - break; - case GS_CS_709_EXTENDED: + else if (current_space == GS_CS_709_EXTENDED) tech_name = "DrawUpscaleMultiply"; - } + break; } } else { switch (source_space) { @@ -669,24 +664,19 @@ static void render_item_texture(struct obs_scene_item *item, tech_name = "DrawMultiply"; break; case GS_CS_709_EXTENDED: - switch (current_space) { - case GS_CS_SRGB: - case GS_CS_SRGB_16F: + if (current_space == GS_CS_SRGB || + current_space == GS_CS_SRGB_16F) tech_name = "DrawTonemap"; - break; - case GS_CS_709_SCRGB: + else if (current_space == GS_CS_709_SCRGB) tech_name = "DrawMultiply"; - } break; case GS_CS_709_SCRGB: - switch (current_space) { - case GS_CS_SRGB: - case GS_CS_SRGB_16F: + if (current_space == GS_CS_SRGB || + current_space == GS_CS_SRGB_16F) tech_name = "DrawMultiplyTonemap"; - break; - case GS_CS_709_EXTENDED: + else if (current_space == GS_CS_709_EXTENDED) tech_name = "DrawMultiply"; - } + break; } } @@ -1524,11 +1514,9 @@ scene_video_get_color_space(void *data, size_t count, enum gs_color_space space = GS_CS_SRGB; struct obs_video_info ovi; if (obs_get_video_info(&ovi)) { - switch (ovi.colorspace) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: + if (ovi.colorspace == VIDEO_CS_2100_PQ || + ovi.colorspace == VIDEO_CS_2100_HLG) space = GS_CS_709_EXTENDED; - } } return space; diff --git a/libobs/obs-source-deinterlace.c b/libobs/obs-source-deinterlace.c index 1f1f5d4ec533c3..05f756353b5945 100644 --- a/libobs/obs-source-deinterlace.c +++ b/libobs/obs-source-deinterlace.c @@ -400,6 +400,9 @@ void deinterlace_render(obs_source_t *s) case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -412,6 +415,9 @@ void deinterlace_render(obs_source_t *s) case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 39c555020dc84c..64a27a784a140e 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -2516,6 +2516,9 @@ static inline void obs_source_render_async_video(obs_source_t *source) tech_name = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -2531,6 +2534,9 @@ static inline void obs_source_render_async_video(obs_source_t *source) tech_name = "DrawMultiply"; multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } @@ -2655,6 +2661,11 @@ static void source_render(obs_source_t *source, gs_effect_t *effect) case GS_CS_709_SCRGB: convert_tech = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_SRGB: + break; + case GS_CS_SRGB_16F: + break; } break; case GS_CS_709_EXTENDED: @@ -2666,6 +2677,9 @@ static void source_render(obs_source_t *source, gs_effect_t *effect) case GS_CS_709_SCRGB: convert_tech = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -2678,6 +2692,9 @@ static void source_render(obs_source_t *source, gs_effect_t *effect) case GS_CS_709_EXTENDED: convert_tech = "DrawMultiply"; multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } diff --git a/libobs/obs.c b/libobs/obs.c index 2131733d2db469..db39833ce7392e 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -108,6 +108,9 @@ static inline void calc_gpu_conversion_sizes(struct obs_core_video_mix *video) video->conversion_techs[0] = "P010_SRGB_Y"; video->conversion_techs[1] = "P010_SRGB_UV"; } + break; + default: + break; } } @@ -234,6 +237,8 @@ static bool obs_init_gpu_conversion(struct obs_core_video_mix *video) if (!video->convert_textures[0] || !video->convert_textures[1]) success = false; break; + default: + break; } if (!success) { @@ -345,6 +350,9 @@ static bool obs_init_textures(struct obs_core_video_mix *video) case VIDEO_FORMAT_I412: case VIDEO_FORMAT_YA2L: format = GS_RGBA16F; + break; + default: + break; } for (size_t i = 0; i < NUM_TEXTURES; i++) { @@ -390,11 +398,10 @@ static bool obs_init_textures(struct obs_core_video_mix *video) space = GS_CS_709_EXTENDED; break; default: - switch (info->format) { - case VIDEO_FORMAT_I010: - case VIDEO_FORMAT_P010: + if (info->format == VIDEO_FORMAT_I010 || + info->format == VIDEO_FORMAT_P010) space = GS_CS_SRGB_16F; - } + break; } video->render_texture = @@ -2051,6 +2058,9 @@ static void obs_render_main_texture_internal(enum gs_blend_type src_c, case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; multiplier = obs_get_video_sdr_white_level() / 80.f; + break; + case GS_CS_709_EXTENDED: + break; } const bool previous = gs_framebuffer_srgb_enabled(); From db3a01db6b455a198a65d5f680e3d59c6fa0206b Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:53:39 +0100 Subject: [PATCH 0181/2225] libobs: Remove unused variables --- libobs/obs-video.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libobs/obs-video.c b/libobs/obs-video.c index aa97ac28535905..a2e9653fb9631b 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -221,7 +221,6 @@ static const char *render_output_texture_name = "render_output_texture"; static inline gs_texture_t * render_output_texture(struct obs_core_video_mix *mix) { - struct obs_core_video *video = &obs->video; gs_texture_t *texture = mix->render_texture; gs_texture_t *target = mix->output_texture; uint32_t width = gs_texture_get_width(target); @@ -1055,7 +1054,6 @@ static inline void update_active_state(struct obs_core_video_mix *video) os_atomic_load_long(&video->gpu_encoder_active) > 0; const bool active = raw_active || gpu_active; #else - const bool gpu_active = 0; const bool active = raw_active; #endif From 2f4b611fd7330085623a4dbe1064f4630574e6a7 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:54:13 +0100 Subject: [PATCH 0182/2225] libobs-opengl: Fix non-exhaustive switch statement --- libobs-opengl/gl-nix.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libobs-opengl/gl-nix.c b/libobs-opengl/gl-nix.c index c775079fce4931..6d01e211d5012b 100644 --- a/libobs-opengl/gl-nix.c +++ b/libobs-opengl/gl-nix.c @@ -28,17 +28,17 @@ static void init_winsys(void) { assert(gl_vtable == NULL); - switch (obs_get_nix_platform()) { - case OBS_NIX_PLATFORM_X11_EGL: + enum obs_nix_platform_type platform = obs_get_nix_platform(); + + if (platform == OBS_NIX_PLATFORM_X11_EGL) gl_vtable = gl_x11_egl_get_winsys_vtable(); - break; + #ifdef ENABLE_WAYLAND - case OBS_NIX_PLATFORM_WAYLAND: + if (platform == OBS_NIX_PLATFORM_WAYLAND) { gl_vtable = gl_wayland_egl_get_winsys_vtable(); blog(LOG_INFO, "Using EGL/Wayland"); - break; -#endif } +#endif assert(gl_vtable != NULL); } From 41a10b05fd12abc883a36fcd411eb2a1dafc4357 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:56:11 +0100 Subject: [PATCH 0183/2225] libobs-opengl: Refactor macOS implementation Replaces macros with actual code and uses more platform-specific code. As an added benefit this improves debugging and code navigation in Xcode. --- libobs-opengl/gl-cocoa.m | 87 +++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 50 deletions(-) diff --git a/libobs-opengl/gl-cocoa.m b/libobs-opengl/gl-cocoa.m index 12dac25136a5ca..78711e6c18f63e 100644 --- a/libobs-opengl/gl-cocoa.m +++ b/libobs-opengl/gl-cocoa.m @@ -22,8 +22,6 @@ #import #import -//#include "util/darray.h" - struct gl_windowinfo { NSView *view; NSOpenGLContext *context; @@ -37,26 +35,9 @@ static NSOpenGLContext *gl_context_create(NSOpenGLContext *share) { - unsigned attrib_count = 0; - -#define ADD_ATTR(x) \ - { \ - attributes[attrib_count++] = (NSOpenGLPixelFormatAttribute)x; \ - } -#define ADD_ATTR2(x, y) \ - { \ - ADD_ATTR(x); \ - ADD_ATTR(y); \ - } - - NSOpenGLPixelFormatAttribute attributes[40]; - - ADD_ATTR(NSOpenGLPFADoubleBuffer); - ADD_ATTR2(NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core); - ADD_ATTR(0); - -#undef ADD_ATTR2 -#undef ADD_ATTR + NSOpenGLPixelFormatAttribute attributes[] = { + NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile, + NSOpenGLProfileVersion3_2Core, 0}; NSOpenGLPixelFormat *pf; pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes]; @@ -79,11 +60,9 @@ return context; } -struct gl_platform *gl_platform_create(gs_device_t *device, uint32_t adapter) +struct gl_platform *gl_platform_create(gs_device_t *device __unused, + uint32_t adapter __unused) { - UNUSED_PARAMETER(device); - UNUSED_PARAMETER(adapter); - NSOpenGLContext *context = gl_context_create(nil); if (!context) { blog(LOG_ERROR, "gl_context_create failed"); @@ -92,10 +71,8 @@ [context makeCurrentContext]; GLint interval = 0; - PRAGMA_WARN_PUSH - PRAGMA_WARN_DEPRECATION - [context setValues:&interval forParameter:NSOpenGLCPSwapInterval]; - PRAGMA_WARN_POP + [context setValues:&interval + forParameter:NSOpenGLContextParameterSwapInterval]; const bool success = gladLoadGL() != 0; if (!success) { @@ -141,13 +118,14 @@ bool gl_platform_init_swapchain(struct gs_swap_chain *swap) CGLLockContext(context_obj); [context makeCurrentContext]; - PRAGMA_WARN_PUSH - PRAGMA_WARN_DEPRECATION + +#pragma clang diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" [context setView:swap->wi->view]; +#pragma clang diagnostic pop GLint interval = 0; [context setValues:&interval - forParameter:NSOpenGLCPSwapInterval]; - PRAGMA_WARN_POP + forParameter:NSOpenGLContextParameterSwapInterval]; gl_gen_framebuffers(1, &swap->wi->fbo); gl_bind_framebuffer(GL_FRAMEBUFFER, swap->wi->fbo); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, @@ -205,10 +183,10 @@ void gl_platform_cleanup_swapchain(struct gs_swap_chain *swap) wi->view = info->window.view; wi->view.window.colorSpace = NSColorSpace.sRGBColorSpace; - PRAGMA_WARN_PUSH - PRAGMA_WARN_DEPRECATION +#pragma clang diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" wi->view.wantsBestResolutionOpenGLSurface = YES; - PRAGMA_WARN_POP +#pragma clang diagnostic pop return wi; } @@ -304,9 +282,8 @@ void device_load_swapchain(gs_device_t *device, gs_swapchain_t *swap) } } -bool device_is_present_ready(gs_device_t *device) +bool device_is_present_ready(gs_device_t *device __unused) { - UNUSED_PARAMETER(device); return true; } @@ -333,11 +310,8 @@ void device_present(gs_device_t *device) [device->plat->context makeCurrentContext]; } -bool device_is_monitor_hdr(gs_device_t *device, void *monitor) +bool device_is_monitor_hdr(gs_device_t *device __unused, void *monitor __unused) { - UNUSED_PARAMETER(device); - UNUSED_PARAMETER(monitor); - return false; } @@ -357,10 +331,17 @@ void gl_getclientsize(const struct gs_swap_chain *swap, uint32_t *width, struct gs_texture_2d *tex = bzalloc(sizeof(struct gs_texture_2d)); OSType pf = IOSurfaceGetPixelFormat(ref); - const bool l10r = pf == 'l10r'; + + FourCharCode l10r_code = 0; + l10r_code = ('l' << 24) | ('1' << 16) | ('0' << 8) | 'r'; + + FourCharCode bgra_code = 0; + bgra_code = ('B' << 24) | ('G' << 16) | ('R' << 8) | 'A'; + + const bool l10r = pf == l10r_code; if (pf == 0) blog(LOG_ERROR, "Invalid IOSurface Buffer"); - else if ((pf != 'BGRA') && !l10r) + else if ((pf != bgra_code) && !l10r) blog(LOG_ERROR, "Unexpected pixel format: %d (%c%c%c%c)", pf, pf >> 24, pf >> 16, pf >> 8, pf); @@ -379,8 +360,8 @@ void gl_getclientsize(const struct gs_swap_chain *swap, uint32_t *width, tex->base.is_dynamic = false; tex->base.is_render_target = false; tex->base.gen_mipmaps = false; - tex->width = IOSurfaceGetWidth(ref); - tex->height = IOSurfaceGetHeight(ref); + tex->width = (uint32_t)IOSurfaceGetWidth(ref); + tex->height = (uint32_t)IOSurfaceGetHeight(ref); if (!gl_gen_textures(1, &tex->base.texture)) goto fail; @@ -439,19 +420,25 @@ bool gs_texture_rebind_iosurface(gs_texture_t *texture, void *iosurf) if (!iosurf) return false; + FourCharCode l10r_code = 0; + l10r_code = ('l' << 24) | ('1' << 16) | ('0' << 8) | 'r'; + + FourCharCode bgra_code = 0; + bgra_code = ('B' << 24) | ('G' << 16) | ('R' << 8) | 'A'; + struct gs_texture_2d *tex = (struct gs_texture_2d *)texture; IOSurfaceRef ref = (IOSurfaceRef)iosurf; OSType pf = IOSurfaceGetPixelFormat(ref); if (pf == 0) { blog(LOG_ERROR, "Invalid IOSurface buffer"); - } else if ((pf != 'BGRA') && (pf != 'l10r')) { + } else if ((pf != bgra_code) && (pf != l10r_code)) { blog(LOG_ERROR, "Unexpected pixel format: %d (%c%c%c%c)", pf, pf >> 24, pf >> 16, pf >> 8, pf); } - tex->width = IOSurfaceGetWidth(ref); - tex->height = IOSurfaceGetHeight(ref); + tex->width = (uint32_t)IOSurfaceGetWidth(ref); + tex->height = (uint32_t)IOSurfaceGetHeight(ref); if (!gl_bind_texture(tex->base.gl_target, tex->base.texture)) return false; From ce9854a11b3fe8f7db2cc070bca601f9d9982de7 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:56:33 +0100 Subject: [PATCH 0184/2225] aja: Remove unused variables --- plugins/aja/aja-output.cpp | 4 ---- plugins/aja/aja-routing.cpp | 6 ------ plugins/aja/aja-widget-io.cpp | 6 ------ 3 files changed, 16 deletions(-) diff --git a/plugins/aja/aja-output.cpp b/plugins/aja/aja-output.cpp index 046d51f5b9bb87..02e9f7d90fc741 100644 --- a/plugins/aja/aja-output.cpp +++ b/plugins/aja/aja-output.cpp @@ -917,10 +917,6 @@ bool aja_output_device_changed(void *data, obs_properties_t *props, obs_properties_get(props, kUIPropVideoFormatSelect.id); obs_property_t *pix_fmt_list = obs_properties_get(props, kUIPropPixelFormatSelect.id); - obs_property_t *sdi_trx_list = - obs_properties_get(props, kUIPropSDITransport.id); - obs_property_t *sdi_4k_list = - obs_properties_get(props, kUIPropSDITransport4K.id); const NTV2DeviceID deviceID = cardEntry->GetDeviceID(); populate_io_selection_output_list(cardID, outputID, deviceID, diff --git a/plugins/aja/aja-routing.cpp b/plugins/aja/aja-routing.cpp index 2638ddd026db65..fe9acf21a5003e 100644 --- a/plugins/aja/aja-routing.cpp +++ b/plugins/aja/aja-routing.cpp @@ -211,11 +211,8 @@ bool Routing::ConfigureSourceRoute(const SourceProps &props, NTV2Mode mode, if (!card) return false; - bool found_preset = false; auto deviceID = props.deviceID; NTV2VideoFormat vf = props.videoFormat; - bool is_hfr = NTV2_IS_HIGH_NTV2FrameRate( - GetNTV2FrameRateFromVideoFormat(props.videoFormat)); auto init_src = props.InitialInputSource(); auto init_channel = props.Channel(); @@ -355,10 +352,7 @@ bool Routing::ConfigureOutputRoute(const OutputProps &props, NTV2Mode mode, if (!card) return false; - bool found_preset = false; auto deviceID = props.deviceID; - bool is_hfr = NTV2_IS_HIGH_NTV2FrameRate( - GetNTV2FrameRateFromVideoFormat(props.videoFormat)); NTV2OutputDestinations outputDests; aja::IOSelectionToOutputDests(props.ioSelect, outputDests); if (outputDests.empty()) { diff --git a/plugins/aja/aja-widget-io.cpp b/plugins/aja/aja-widget-io.cpp index 34f42cbeaf876e..18e571dfe98c51 100644 --- a/plugins/aja/aja-widget-io.cpp +++ b/plugins/aja/aja-widget-io.cpp @@ -28,7 +28,6 @@ static const char *kBlackNickname = "black"; static const char *kCompressionNickname = "comp"; static const char *kFrameSyncNickname = "fsync"; static const char *kTestPatternNickname = "pat"; -static const char *kOENickname = "oe"; // Table of firmware widget's input crosspoint/id/channel/name/datastream index // clang-format off @@ -342,11 +341,6 @@ static WidgetOutputSocket kWidgetOutputSockets[] = { }; // clang-format on -static const size_t kNumWidgetInputSockets = - (sizeof(kWidgetInputSockets) / sizeof(WidgetInputSocket)); -static const size_t kNumWidgetOutputSockets = - (sizeof(kWidgetOutputSockets) / sizeof(WidgetOutputSocket)); - bool WidgetInputSocket::Find(const std::string &name, NTV2Channel channel, int32_t datastream, WidgetInputSocket &inp) { From c4d60f47c71a73782a0da2eea6c0469eab42b258 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:56:49 +0100 Subject: [PATCH 0185/2225] decklink: Add missing newlines at the end of files --- plugins/decklink/util.cpp | 2 +- plugins/decklink/util.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/decklink/util.cpp b/plugins/decklink/util.cpp index 0ebdbc1897d91c..38e2aa1ff2247c 100644 --- a/plugins/decklink/util.cpp +++ b/plugins/decklink/util.cpp @@ -40,4 +40,4 @@ const char *bmd_audio_connection_to_name(BMDAudioConnection connection) default: return "Unknown"; } -} \ No newline at end of file +} diff --git a/plugins/decklink/util.hpp b/plugins/decklink/util.hpp index f264a0b5ccaf14..dfe40df19b9ac2 100644 --- a/plugins/decklink/util.hpp +++ b/plugins/decklink/util.hpp @@ -4,4 +4,4 @@ const char *bmd_video_connection_to_name(BMDVideoConnection connection); -const char *bmd_audio_connection_to_name(BMDAudioConnection connection); \ No newline at end of file +const char *bmd_audio_connection_to_name(BMDAudioConnection connection); From 6e0d802874b3a6623ca1ffa6d2a03c8046b39ccd Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:57:15 +0100 Subject: [PATCH 0186/2225] obs-ffmpeg: Fix non-exhaustive switch statements --- plugins/obs-ffmpeg/obs-ffmpeg-av1.c | 14 +++++--------- plugins/obs-ffmpeg/obs-ffmpeg-formats.h | 2 ++ plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c | 14 ++++++-------- plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c | 2 ++ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-av1.c b/plugins/obs-ffmpeg/obs-ffmpeg-av1.c index de7e237279d9eb..0b671ae5c16573 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-av1.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-av1.c @@ -209,21 +209,17 @@ static void *av1_create_internal(obs_data_t *settings, obs_encoder_t *encoder, { video_t *video = obs_encoder_video(encoder); const struct video_output_info *voi = video_output_get_info(video); - switch (voi->format) { - case VIDEO_FORMAT_I010: - case VIDEO_FORMAT_P010: - break; - default: - switch (voi->colorspace) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: { + + if (voi->format != VIDEO_FORMAT_P010 && + voi->format != VIDEO_FORMAT_I010) { + if (voi->colorspace == VIDEO_CS_2100_PQ || + voi->colorspace == VIDEO_CS_2100_HLG) { const char *const text = obs_module_text("AV1.8bitUnsupportedHdr"); obs_encoder_set_last_error(encoder, text); blog(LOG_ERROR, "[AV1 encoder] %s", text); return NULL; } - } } struct av1_encoder *enc = bzalloc(sizeof(*enc)); diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h index 963ed3db889d55..c33424a24a062d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h @@ -115,6 +115,8 @@ convert_ffmpeg_sample_format(enum AVSampleFormat format) return AUDIO_FORMAT_32BIT_PLANAR; case AV_SAMPLE_FMT_FLTP: return AUDIO_FORMAT_FLOAT_PLANAR; + default: + return AUDIO_FORMAT_16BIT; } /* shouldn't get here */ diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c index 884c6db83ae605..d90ce895c00973 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c @@ -343,16 +343,15 @@ static void *h264_nvenc_create(obs_data_t *settings, obs_encoder_t *encoder) return NULL; } default: - switch (voi->colorspace) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: { + if (voi->colorspace == VIDEO_CS_2100_PQ || + voi->colorspace == VIDEO_CS_2100_HLG) { const char *const text = obs_module_text("NVENC.8bitUnsupportedHdr"); obs_encoder_set_last_error(encoder, text); blog(LOG_ERROR, "[NVENC encoder] %s", text); return NULL; } - } + break; } bool psycho_aq = obs_data_get_bool(settings, "psycho_aq"); @@ -383,16 +382,15 @@ static void *hevc_nvenc_create(obs_data_t *settings, obs_encoder_t *encoder) case VIDEO_FORMAT_P010: break; default: - switch (voi->colorspace) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: { + if (voi->colorspace == VIDEO_CS_2100_PQ || + voi->colorspace == VIDEO_CS_2100_HLG) { const char *const text = obs_module_text("NVENC.8bitUnsupportedHdr"); obs_encoder_set_last_error(encoder, text); blog(LOG_ERROR, "[NVENC encoder] %s", text); return NULL; } - } + break; } bool psycho_aq = obs_data_get_bool(settings, "psycho_aq"); diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c index ee0e5571ff21fe..f4dff74f76b056 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c @@ -277,6 +277,8 @@ static bool vaapi_update(void *data, obs_data_t *settings) enc->context->color_primaries = AVCOL_PRI_BT709; colorspace = AVCOL_SPC_BT709; break; + default: + break; } enc->context->colorspace = colorspace; From 19c131c981088010c3c861a7a7bb1a52ad6ee8d4 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:57:28 +0100 Subject: [PATCH 0187/2225] obs-ffmpeg: Remove unused variables --- plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index 9f496ccfbb5f46..5a20aae5132cfa 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -141,7 +141,6 @@ static bool create_video_stream(struct ffmpeg_output *stream, struct ffmpeg_data *data) { AVCodecContext *context; - void *extradata = NULL; struct obs_video_info ovi; if (!obs_get_video_info(&ovi)) { @@ -230,7 +229,6 @@ static bool create_audio_stream(struct ffmpeg_output *stream, { AVCodecContext *context; AVStream *avstream; - void *extradata = NULL; struct obs_audio_info aoi; const char *name = data->config.audio_encoder; int channels; From 3175e699ea1e98e88af4b5b2551b86a97c1622c6 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:57:53 +0100 Subject: [PATCH 0188/2225] obs-filters: Fix non-exhaustive switch statements --- plugins/obs-filters/crop-filter.c | 6 ++++++ plugins/obs-filters/gpu-delay.c | 6 ++++++ plugins/obs-filters/hdr-tonemap-filter.c | 5 ++--- plugins/obs-filters/scale-filter.c | 21 +++++++++++++++++++++ plugins/obs-filters/scroll-filter.c | 6 ++++++ 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/plugins/obs-filters/crop-filter.c b/plugins/obs-filters/crop-filter.c index 0bb99089faa146..ea2df3efaced46 100644 --- a/plugins/obs-filters/crop-filter.c +++ b/plugins/obs-filters/crop-filter.c @@ -208,6 +208,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -220,6 +223,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; *multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } diff --git a/plugins/obs-filters/gpu-delay.c b/plugins/obs-filters/gpu-delay.c index 439018995deb87..4334f87b6d9602 100644 --- a/plugins/obs-filters/gpu-delay.c +++ b/plugins/obs-filters/gpu-delay.c @@ -213,6 +213,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + default: + break; } break; case GS_CS_709_SCRGB: @@ -225,6 +228,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; *multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + default: + break; } } diff --git a/plugins/obs-filters/hdr-tonemap-filter.c b/plugins/obs-filters/hdr-tonemap-filter.c index 989f4dbd7dd4ba..e24e59f08ba313 100644 --- a/plugins/obs-filters/hdr-tonemap-filter.c +++ b/plugins/obs-filters/hdr-tonemap-filter.c @@ -215,9 +215,8 @@ hdr_tonemap_filter_get_color_space(void *data, size_t count, OBS_COUNTOF(potential_spaces), potential_spaces); enum gs_color_space space = source_space; - switch (source_space) { - case GS_CS_709_EXTENDED: - case GS_CS_709_SCRGB: + + if (source_space == GS_CS_709_EXTENDED || source_space == GS_CS_SRGB) { if (filter->transform == TRANSFORM_SDR_REINHARD) { space = GS_CS_SRGB; for (size_t i = 0; i < count; ++i) { diff --git a/plugins/obs-filters/scale-filter.c b/plugins/obs-filters/scale-filter.c index 3a6c1fb369f93f..eecb31f1a3c77b 100644 --- a/plugins/obs-filters/scale-filter.c +++ b/plugins/obs-filters/scale-filter.c @@ -291,6 +291,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, case GS_CS_SRGB_16F: case GS_CS_709_EXTENDED: *multiplier = 80.f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } @@ -311,6 +314,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_SCRGB: tech_name = "DrawUndistortMultiply"; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -321,6 +327,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_EXTENDED: tech_name = "DrawUndistortMultiply"; + break; + case GS_CS_709_SCRGB: + break; } } } else if (filter->upscale) { @@ -339,6 +348,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_SCRGB: tech_name = "DrawUpscaleMultiply"; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -349,6 +361,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_EXTENDED: tech_name = "DrawUpscaleMultiply"; + break; + case GS_CS_709_SCRGB: + break; } } } else { @@ -366,6 +381,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -376,6 +394,9 @@ get_tech_name_and_multiplier(const struct scale_filter_data *filter, break; case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; + break; + case GS_CS_709_SCRGB: + break; } } } diff --git a/plugins/obs-filters/scroll-filter.c b/plugins/obs-filters/scroll-filter.c index 73710c15d135c7..589898e74a527f 100644 --- a/plugins/obs-filters/scroll-filter.c +++ b/plugins/obs-filters/scroll-filter.c @@ -209,6 +209,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -221,6 +224,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; *multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } From bb2a99cec81394346920c19117c8f48fee9e4c8f Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:58:15 +0100 Subject: [PATCH 0189/2225] obs-transitions: Fix non-exhaustive switch statements --- plugins/obs-transitions/transition-stinger.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/obs-transitions/transition-stinger.c b/plugins/obs-transitions/transition-stinger.c index c27656d86b5974..076e2a46fc7493 100644 --- a/plugins/obs-transitions/transition-stinger.c +++ b/plugins/obs-transitions/transition-stinger.c @@ -343,8 +343,7 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, switch (source_space) { case GS_CS_SRGB: case GS_CS_SRGB_16F: - switch (current_space) { - case GS_CS_709_SCRGB: + if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; } @@ -358,6 +357,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_SCRGB: tech_name = "DrawMultiply"; *multiplier = obs_get_video_sdr_white_level() / 80.0f; + break; + case GS_CS_709_EXTENDED: + break; } break; case GS_CS_709_SCRGB: @@ -370,6 +372,9 @@ get_tech_name_and_multiplier(enum gs_color_space current_space, case GS_CS_709_EXTENDED: tech_name = "DrawMultiply"; *multiplier = 80.0f / obs_get_video_sdr_white_level(); + break; + case GS_CS_709_SCRGB: + break; } } From f4bbe080bf281d66950cadce8fdadc376df3a9ae Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:58:30 +0100 Subject: [PATCH 0190/2225] obs-vst: Fix missing newlines at the end of files --- plugins/obs-vst/headers/vst-plugin-callbacks.hpp | 2 +- plugins/obs-vst/vst_header/aeffectx.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/obs-vst/headers/vst-plugin-callbacks.hpp b/plugins/obs-vst/headers/vst-plugin-callbacks.hpp index 4d33015743d860..800f039082ec1e 100644 --- a/plugins/obs-vst/headers/vst-plugin-callbacks.hpp +++ b/plugins/obs-vst/headers/vst-plugin-callbacks.hpp @@ -18,4 +18,4 @@ along with this program. If not, see . #include "aeffectx.h" -typedef AEffect *(*vstPluginMain)(audioMasterCallback audioMaster); \ No newline at end of file +typedef AEffect *(*vstPluginMain)(audioMasterCallback audioMaster); diff --git a/plugins/obs-vst/vst_header/aeffectx.h b/plugins/obs-vst/vst_header/aeffectx.h index 18f0f644d5c80f..9be1cd8377c079 100644 --- a/plugins/obs-vst/vst_header/aeffectx.h +++ b/plugins/obs-vst/vst_header/aeffectx.h @@ -379,4 +379,4 @@ enum VstPlugCategory kPlugCategMaxCount // 12=Marker to count the categories }; -#endif \ No newline at end of file +#endif From f67c1bccebdfa01c64cb3b71d633afa5d385ea39 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:58:46 +0100 Subject: [PATCH 0191/2225] obs-x264: Fix non-exhaustive switch statements --- plugins/obs-x264/obs-x264.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/obs-x264/obs-x264.c b/plugins/obs-x264/obs-x264.c index 3955dfff3f452e..1de88d3720db2c 100644 --- a/plugins/obs-x264/obs-x264.c +++ b/plugins/obs-x264/obs-x264.c @@ -495,6 +495,9 @@ static void update_params(struct obs_x264 *obsx264, obs_data_t *settings, colorprim = bt709; transfer = "iec61966-2-1"; colmatrix = bt709; + break; + default: + break; } obsx264->params.vui.i_sar_height = 1; @@ -697,9 +700,8 @@ static void *obs_x264_create(obs_data_t *settings, obs_encoder_t *encoder) "OBS does not support using x264 with 10-bit formats"); return NULL; default: - switch (voi->colorspace) { - case VIDEO_CS_2100_PQ: - case VIDEO_CS_2100_HLG: + if (voi->colorspace == VIDEO_CS_2100_PQ || + voi->colorspace == VIDEO_CS_2100_HLG) { obs_encoder_set_last_error( encoder, obs_module_text("HdrUnsupported")); warn_enc( @@ -707,6 +709,7 @@ static void *obs_x264_create(obs_data_t *settings, obs_encoder_t *encoder) "OBS does not support using x264 with Rec. 2100"); return NULL; } + break; } struct obs_x264 *obsx264 = bzalloc(sizeof(struct obs_x264)); From 1bb06a8bdc192f7e1090c95a85eb46c453cae9c9 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:58:58 +0100 Subject: [PATCH 0192/2225] rtmp-services: Fix missing newline at the end of files --- plugins/rtmp-services/service-specific/younow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rtmp-services/service-specific/younow.h b/plugins/rtmp-services/service-specific/younow.h index 427ebfe30796f5..4f181daefcaf2b 100644 --- a/plugins/rtmp-services/service-specific/younow.h +++ b/plugins/rtmp-services/service-specific/younow.h @@ -1,3 +1,3 @@ #pragma once -extern const char *younow_get_ingest(const char *server, const char *key); \ No newline at end of file +extern const char *younow_get_ingest(const char *server, const char *key); From 8b0843803ea9e9c429dcd8d7116832fb6213d01a Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 16 Feb 2023 20:59:12 +0100 Subject: [PATCH 0193/2225] UI: Remove unused variables --- UI/obs-app.cpp | 2 -- UI/window-basic-vcam-config.cpp | 2 -- 2 files changed, 4 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index e815d072e46242..e64250bd8f2830 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -2356,8 +2356,6 @@ static int run_program(fstream &logFile, int argc, char *argv[]) } if (!multi) { - QMessageBox::StandardButtons buttons( - QMessageBox::Yes | QMessageBox::Cancel); QMessageBox mb(QMessageBox::Question, QTStr("AlreadyRunning.Title"), QTStr("AlreadyRunning.Text")); diff --git a/UI/window-basic-vcam-config.cpp b/UI/window-basic-vcam-config.cpp index 4dba97cd6cc2ba..86bbd4db527757 100644 --- a/UI/window-basic-vcam-config.cpp +++ b/UI/window-basic-vcam-config.cpp @@ -59,7 +59,6 @@ void OBSBasicVCamConfig::OutputTypeChanged(int type) case VCamOutputType::Scene: { // Scenes in default order BPtr scenes = obs_frontend_get_scene_names(); - int idx = 0; for (char **temp = scenes; *temp; temp++) { list->addItem(*temp); @@ -74,7 +73,6 @@ void OBSBasicVCamConfig::OutputTypeChanged(int type) std::vector sources; auto AddSource = [&](obs_source_t *source) { auto name = obs_source_get_name(source); - auto flags = obs_source_get_output_flags(source); if (!(obs_source_get_output_flags(source) & OBS_SOURCE_VIDEO)) From c5bb6218b61b2fbe44d4ddd0b8da7f1d8592e411 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 25 Jan 2023 22:37:38 +0100 Subject: [PATCH 0194/2225] mac-avcapture: Fix compiler warnings CMake build framework 3.0 introduces more strict typing checks, which require additional code fixes to silence. * Fixes warnings about multi-character assignments * Fixes warnings about implicit casts --- plugins/mac-avcapture/av-capture.mm | 29 +++++++++++++++------------- plugins/mac-avcapture/left-right.hpp | 2 +- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/plugins/mac-avcapture/av-capture.mm b/plugins/mac-avcapture/av-capture.mm index 48c412ef19a889..5bb523537fbedc 100644 --- a/plugins/mac-avcapture/av-capture.mm +++ b/plugins/mac-avcapture/av-capture.mm @@ -208,7 +208,7 @@ static bool get_input_format(obs_data_t *settings, FourCharCode &fourcc) if (!item) return false; - fourcc = obs_data_item_get_int(item.get()); + fourcc = (FourCharCode)obs_data_item_get_int(item.get()); return true; } @@ -584,7 +584,7 @@ static inline bool update_frame(av_capture *capture, obs_source_frame *frame, CVPixelBufferLockBaseAddress(img, kCVPixelBufferLock_ReadOnly); if (!CVPixelBufferIsPlanar(img)) { - frame->linesize[0] = CVPixelBufferGetBytesPerRow(img); + frame->linesize[0] = (uint32_t)CVPixelBufferGetBytesPerRow(img); frame->data[0] = static_cast( CVPixelBufferGetBaseAddress(img)); return true; @@ -592,7 +592,8 @@ static inline bool update_frame(av_capture *capture, obs_source_frame *frame, size_t count = CVPixelBufferGetPlaneCount(img); for (size_t i = 0; i < count; i++) { - frame->linesize[i] = CVPixelBufferGetBytesPerRowOfPlane(img, i); + frame->linesize[i] = + (uint32_t)CVPixelBufferGetBytesPerRowOfPlane(img, i); frame->data[i] = static_cast( CVPixelBufferGetBaseAddressOfPlane(img, i)); } @@ -634,12 +635,12 @@ static inline bool update_audio(obs_source_audio *audio, for (size_t i = 0; i < list->mNumberBuffers; i++) audio->data[i] = (uint8_t *)list->mBuffers[i].mData; - audio->frames = CMSampleBufferGetNumSamples(sample_buffer); + audio->frames = (uint32_t)CMSampleBufferGetNumSamples(sample_buffer); CMFormatDescriptionRef desc = CMSampleBufferGetFormatDescription(sample_buffer); const AudioStreamBasicDescription *asbd = CMAudioFormatDescriptionGetStreamBasicDescription(desc); - audio->samples_per_sec = asbd->mSampleRate; + audio->samples_per_sec = (uint32_t)asbd->mSampleRate; audio->speakers = (enum speaker_layout)asbd->mChannelsPerFrame; switch (asbd->mBitsPerChannel) { case 8: @@ -1071,7 +1072,7 @@ static bool init_manual(av_capture *capture, AVCaptureDevice *dev, clear_capture(capture); auto input_format = obs_data_get_int(settings, "input_format"); - FourCharCode actual_format = input_format; + FourCharCode actual_format = (FourCharCode)input_format; SCOPE_EXIT { @@ -1094,7 +1095,7 @@ static bool init_manual(av_capture *capture, AVCaptureDevice *dev, }; capture->requested_colorspace = - obs_data_get_int(settings, "color_space"); + (int)obs_data_get_int(settings, "color_space"); if (!color_space_valid(capture->requested_colorspace)) { AVLOG(LOG_WARNING, "Unsupported color space: %d", capture->requested_colorspace); @@ -1102,7 +1103,7 @@ static bool init_manual(av_capture *capture, AVCaptureDevice *dev, } capture->requested_video_range = - obs_data_get_int(settings, "video_range"); + (int)obs_data_get_int(settings, "video_range"); if (!video_range_valid(capture->requested_video_range)) { AVLOG(LOG_WARNING, "Unsupported color range: %d", capture->requested_video_range); @@ -1146,9 +1147,10 @@ static bool init_manual(av_capture *capture, AVCaptureDevice *dev, if (!lock_device(capture, dev)) return false; - const char *if_name = input_format == INPUT_FORMAT_AUTO - ? "Auto" - : fourcc_subtype_name(input_format); + const char *if_name = + input_format == INPUT_FORMAT_AUTO + ? "Auto" + : fourcc_subtype_name((FourCharCode)input_format); #define IF_AUTO(x) (input_format != INPUT_FORMAT_AUTO ? "" : x) AVLOG(LOG_INFO, @@ -1818,7 +1820,8 @@ static bool input_format_property_needs_update( auto num = obs_property_list_item_count(p); for (size_t i = 1; i < num; i++) { // skip auto entry - FourCharCode fourcc = obs_property_list_item_int(p, i); + FourCharCode fourcc = + (FourCharCode)obs_property_list_item_int(p, i); fourcc_found = fourcc_found || fourcc == *fourcc_; auto pos = find_if(begin(formats), end(formats), @@ -1926,7 +1929,7 @@ static bool update_int_list_property(obs_property_t *p, const int *val, if (!p) p = obs_properties_get(props, prop_name); - int val = obs_data_get_int(conf.settings, prop_name); + int val = (int)obs_data_get_int(conf.settings, prop_name); av_video_info vi; if (ref) diff --git a/plugins/mac-avcapture/left-right.hpp b/plugins/mac-avcapture/left-right.hpp index cbc54e049ae824..123f3555103c42 100644 --- a/plugins/mac-avcapture/left-right.hpp +++ b/plugins/mac-avcapture/left-right.hpp @@ -23,7 +23,7 @@ template struct left_right { std::this_thread::yield(); f(data[next]); - current = next; + current = (std::uint_fast8_t)next; while (readers[cur] != 0) std::this_thread::yield(); From f98c2d2514e9fe3b8dd9067846799fcc4ec29351 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 18 Feb 2023 21:14:46 +0100 Subject: [PATCH 0195/2225] mac-capture: Fix compiler warnings CMake build framework 3.0 introduces more strict typing checks, which require additional code fixes to silence. * Fixes warnings about multi-character assignments * Fixes warnings about implicit casts * Fixes warnings about shadowing variables --- plugins/mac-capture/mac-display-capture.m | 40 ++++++----- plugins/mac-capture/mac-screen-capture.m | 81 +++++++++++------------ plugins/mac-capture/mac-window-capture.m | 6 +- plugins/mac-capture/window-utils.m | 12 ++-- 4 files changed, 70 insertions(+), 69 deletions(-) diff --git a/plugins/mac-capture/mac-display-capture.m b/plugins/mac-capture/mac-display-capture.m index 3c5d1ea1d3d0e3..21b2b185d9af49 100644 --- a/plugins/mac-capture/mac-display-capture.m +++ b/plugins/mac-capture/mac-display-capture.m @@ -209,9 +209,12 @@ static bool init_display_stream(struct display_capture *dc) os_event_init(&dc->disp_finished, OS_EVENT_TYPE_MANUAL); + FourCharCode bgra_code = 0; + bgra_code = ('B' << 24) | ('G' << 16) | ('R' << 8) | 'A'; + const CGSize *size = &dc->frame.size; dc->disp = CGDisplayStreamCreateWithDispatchQueue( - disp_id, size->width, size->height, 'BGRA', + disp_id, (size_t)size->width, (size_t)size->height, bgra_code, (__bridge CFDictionaryRef)dict, dispatch_queue_create(NULL, NULL), ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, @@ -280,7 +283,7 @@ bool init_vertbuf(struct display_capture *dc) init_window(&dc->window, settings); load_crop(dc, settings); - dc->display = obs_data_get_int(settings, "display"); + dc->display = (unsigned int)obs_data_get_int(settings, "display"); pthread_mutex_init(&dc->mutex, NULL); if (!init_display_stream(dc)) @@ -311,7 +314,7 @@ static void build_sprite(struct gs_vb_data *data, float fcx, float fcy, static inline void build_sprite_rect(struct gs_vb_data *data, float origin_x, float origin_y, float end_x, float end_y) { - build_sprite(data, fabs(end_x - origin_x), fabs(end_y - origin_y), + build_sprite(data, fabsf(end_x - origin_x), fabsf(end_y - origin_y), origin_x, end_x, origin_y, end_y); } @@ -343,7 +346,7 @@ static void display_capture_video_tick(void *data, float seconds) CGPoint end = {0.f}; switch (dc->crop) { - float x, y; + double x, y; case CROP_INVALID: break; @@ -371,8 +374,9 @@ static void display_capture_video_tick(void *data, float seconds) } obs_enter_graphics(); - build_sprite_rect(gs_vertexbuffer_get_data(dc->vertbuf), origin.x, - origin.y, end.x, end.y); + build_sprite_rect(gs_vertexbuffer_get_data(dc->vertbuf), + (float)origin.x, (float)origin.y, (float)end.x, + (float)end.y); if (dc->tex) gs_texture_rebind_iosurface(dc->tex, dc->prev); @@ -432,19 +436,19 @@ static uint32_t display_capture_getwidth(void *data) { struct display_capture *dc = data; - float crop = dc->crop_rect.origin.x + dc->crop_rect.size.width; + double crop = dc->crop_rect.origin.x + dc->crop_rect.size.width; switch (dc->crop) { case CROP_NONE: - return dc->frame.size.width; + return (uint32_t)dc->frame.size.width; case CROP_MANUAL: - return fabs(dc->frame.size.width - crop); + return (uint32_t)fabs(dc->frame.size.width - crop); case CROP_TO_WINDOW: - return dc->window_rect.size.width; + return (uint32_t)dc->window_rect.size.width; case CROP_TO_WINDOW_AND_MANUAL: - return fabs(dc->window_rect.size.width - crop); + return (uint32_t)fabs(dc->window_rect.size.width - crop); case CROP_INVALID: break; @@ -456,19 +460,19 @@ static uint32_t display_capture_getheight(void *data) { struct display_capture *dc = data; - float crop = dc->crop_rect.origin.y + dc->crop_rect.size.height; + double crop = dc->crop_rect.origin.y + dc->crop_rect.size.height; switch (dc->crop) { case CROP_NONE: - return dc->frame.size.height; + return (uint32_t)dc->frame.size.height; case CROP_MANUAL: - return fabs(dc->frame.size.height - crop); + return (uint32_t)fabs(dc->frame.size.height - crop); case CROP_TO_WINDOW: - return dc->window_rect.size.height; + return (uint32_t)dc->window_rect.size.height; case CROP_TO_WINDOW_AND_MANUAL: - return fabs(dc->window_rect.size.height - crop); + return (uint32_t)fabs(dc->window_rect.size.height - crop); case CROP_INVALID: break; @@ -487,7 +491,7 @@ static void display_capture_defaults(obs_data_t *settings) void load_crop_mode(enum crop_mode *mode, obs_data_t *settings) { - *mode = obs_data_get_int(settings, "crop_mode"); + *mode = (int)obs_data_get_int(settings, "crop_mode"); if (!crop_mode_valid(*mode)) *mode = CROP_NONE; } @@ -532,7 +536,7 @@ static void display_capture_update(void *data, obs_data_t *settings) if (requires_window(dc->crop)) update_window(&dc->window, settings); - unsigned display = obs_data_get_int(settings, "display"); + unsigned display = (unsigned int)obs_data_get_int(settings, "display"); bool show_cursor = obs_data_get_bool(settings, "show_cursor"); if (dc->display == display && dc->hide_cursor != show_cursor) return; diff --git a/plugins/mac-capture/mac-screen-capture.m b/plugins/mac-capture/mac-screen-capture.m index 5b01f6f5b8e1e2..e296dd81ca865e 100644 --- a/plugins/mac-capture/mac-screen-capture.m +++ b/plugins/mac-capture/mac-screen-capture.m @@ -254,8 +254,10 @@ static inline void screen_stream_video_update(struct screen_capture *sc, } if (needs_to_update_properties) { - [sc->stream_properties setWidth:sc->frame.size.width]; - [sc->stream_properties setHeight:sc->frame.size.height]; + [sc->stream_properties + setWidth:(size_t)sc->frame.size.width]; + [sc->stream_properties + setHeight:(size_t)sc->frame.size.height]; [sc->disp updateConfiguration:sc->stream_properties @@ -320,9 +322,9 @@ static inline void screen_stream_audio_update(struct screen_capture *sc, audio_description->mBytesPerFrame / audio_description->mChannelsPerFrame); audio_data.speakers = audio_description->mChannelsPerFrame; - audio_data.samples_per_sec = audio_description->mSampleRate; + audio_data.samples_per_sec = (uint32_t)audio_description->mSampleRate; audio_data.timestamp = - CMTimeGetSeconds(presentation_time) * NSEC_PER_SEC; + (uint64_t)(CMTimeGetSeconds(presentation_time) * NSEC_PER_SEC); audio_data.format = AUDIO_FORMAT_FLOAT_PLANAR; obs_source_output_audio(sc->source, &audio_data); } @@ -353,12 +355,13 @@ static bool init_screen_stream(struct screen_capture *sc) }; void (^set_display_mode)(struct screen_capture *, SCDisplay *) = ^void( - struct screen_capture *sc, SCDisplay *target_display) { + struct screen_capture *capture_data, + SCDisplay *target_display) { CGDisplayModeRef display_mode = CGDisplayCopyDisplayMode(target_display.displayID); - [sc->stream_properties + [capture_data->stream_properties setWidth:CGDisplayModeGetPixelWidth(display_mode)]; - [sc->stream_properties + [capture_data->stream_properties setHeight:CGDisplayModeGetPixelHeight(display_mode)]; CGDisplayModeRelease(display_mode); }; @@ -398,9 +401,10 @@ static bool init_screen_stream(struct screen_capture *sc) if (target_window) { [sc->stream_properties - setWidth:target_window.frame.size.width]; + setWidth:(size_t)target_window.frame.size.width]; [sc->stream_properties - setHeight:target_window.frame.size.height]; + setHeight:(size_t)target_window.frame.size + .height]; } } break; @@ -441,7 +445,9 @@ static bool init_screen_stream(struct screen_capture *sc) [sc->stream_properties setQueueDepth:8]; [sc->stream_properties setShowsCursor:!sc->hide_cursor]; [sc->stream_properties setColorSpaceName:kCGColorSpaceDisplayP3]; - [sc->stream_properties setPixelFormat:'l10r']; + FourCharCode l10r_type = 0; + l10r_type = ('l' << 24) | ('1' << 16) | ('0' << 8) | 'r'; + [sc->stream_properties setPixelFormat:l10r_type]; if (@available(macOS 13.0, *)) { #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 130000 @@ -463,17 +469,17 @@ static bool init_screen_stream(struct screen_capture *sc) configuration:sc->stream_properties delegate:nil]; - NSError *error = nil; + NSError *addStreamOutputError = nil; BOOL did_add_output = [sc->disp addStreamOutput:sc->capture_delegate type:SCStreamOutputTypeScreen sampleHandlerQueue:nil - error:&error]; + error:&addStreamOutputError]; if (!did_add_output) { MACCAP_ERR( "init_screen_stream: Failed to add stream output with error %s\n", - [[error localizedFailureReason] + [[addStreamOutputError localizedFailureReason] cStringUsingEncoding:NSUTF8StringEncoding]); - [error release]; + [addStreamOutputError release]; return !did_add_output; } @@ -483,14 +489,14 @@ static bool init_screen_stream(struct screen_capture *sc) addStreamOutput:sc->capture_delegate type:SCStreamOutputTypeAudio sampleHandlerQueue:nil - error:&error]; + error:&addStreamOutputError]; if (!did_add_output) { MACCAP_ERR( "init_screen_stream: Failed to add audio stream output with error %s\n", - [[error localizedFailureReason] + [[addStreamOutputError localizedFailureReason] cStringUsingEncoding: NSUTF8StringEncoding]); - [error release]; + [addStreamOutputError release]; return !did_add_output; } } @@ -595,8 +601,7 @@ typedef void (^shareable_content_callback)(SCShareableContent *, return NULL; } -static void screen_capture_video_tick(void *data, - float seconds __attribute__((unused))) +static void screen_capture_video_tick(void *data, float seconds __unused) { struct screen_capture *sc = data; @@ -628,8 +633,8 @@ float seconds __attribute__((unused))) } } -static void screen_capture_video_render(void *data, gs_effect_t *effect - __attribute__((unused))) +static void screen_capture_video_render(void *data, + gs_effect_t *effect __unused) { struct screen_capture *sc = data; @@ -648,7 +653,7 @@ static void screen_capture_video_render(void *data, gs_effect_t *effect gs_enable_framebuffer_srgb(previous); } -static const char *screen_capture_getname(void *unused __attribute__((unused))) +static const char *screen_capture_getname(void *unused __unused) { if (@available(macOS 13.0, *)) return obs_module_text("SCK.Name"); @@ -660,14 +665,14 @@ static uint32_t screen_capture_getwidth(void *data) { struct screen_capture *sc = data; - return sc->frame.size.width; + return (uint32_t)sc->frame.size.width; } static uint32_t screen_capture_getheight(void *data) { struct screen_capture *sc = data; - return sc->frame.size.height; + return (uint32_t)sc->frame.size.height; } static void screen_capture_defaults(obs_data_t *settings) @@ -767,15 +772,13 @@ static bool build_display_list(struct screen_capture *sc, [sc->shareable_content.displays enumerateObjectsUsingBlock:^( SCDisplay *_Nonnull display, - NSUInteger idx - __attribute__((unused)), - BOOL *_Nonnull stop - __attribute__((unused))) { - NSUInteger screen_index = [NSScreen.screens - indexOfObjectPassingTest:^BOOL( - NSScreen *_Nonnull screen, - NSUInteger index __attribute__((unused)), - BOOL *_Nonnull stop) { + NSUInteger idx __unused, + BOOL *_Nonnull _stop __unused) { + NSUInteger screen_index = + [NSScreen.screens indexOfObjectPassingTest:^BOOL( + NSScreen *_Nonnull screen, + NSUInteger index __unused, + BOOL *_Nonnull stop) { NSNumber *screen_num = screen.deviceDescription [@"NSScreenNumber"]; @@ -824,10 +827,8 @@ static bool build_window_list(struct screen_capture *sc, [sc->shareable_content.windows enumerateObjectsUsingBlock:^( SCWindow *_Nonnull window, - NSUInteger idx - __attribute__((unused)), - BOOL *_Nonnull stop - __attribute__((unused))) { + NSUInteger idx __unused, + BOOL *_Nonnull stop __unused) { NSString *app_name = window.owningApplication.applicationName; NSString *title = window.title; @@ -863,8 +864,7 @@ static bool build_application_list(struct screen_capture *sc, [sc->shareable_content.applications enumerateObjectsUsingBlock:^( SCRunningApplication *_Nonnull application, - NSUInteger idx __attribute__((unused)), - BOOL *_Nonnull stop __attribute__((unused))) { + NSUInteger idx __unused, BOOL *_Nonnull stop __unused) { const char *name = [application.applicationName UTF8String]; const char *bundle_id = @@ -879,8 +879,7 @@ NSUInteger idx __attribute__((unused)), } static bool content_settings_changed(void *data, obs_properties_t *props, - obs_property_t *list - __attribute__((unused)), + obs_property_t *list __unused, obs_data_t *settings) { struct screen_capture *sc = data; diff --git a/plugins/mac-capture/mac-window-capture.m b/plugins/mac-capture/mac-window-capture.m index 594090ed7495fa..e6a958186e68c4 100644 --- a/plugins/mac-capture/mac-window-capture.m +++ b/plugins/mac-capture/mac-window-capture.m @@ -61,10 +61,10 @@ static inline void capture_frame(struct window_capture *wc) struct obs_source_frame frame = { .format = VIDEO_FORMAT_BGRA, - .width = width, - .height = height, + .width = (uint32_t)width, + .height = (uint32_t)height, .data[0] = (uint8_t *)CFDataGetBytePtr(data), - .linesize[0] = CGImageGetBytesPerRow(img), + .linesize[0] = (uint32_t)CGImageGetBytesPerRow(img), .timestamp = ts, }; diff --git a/plugins/mac-capture/window-utils.m b/plugins/mac-capture/window-utils.m index aa2a390f8673ec..31bd32abe314f6 100644 --- a/plugins/mac-capture/window-utils.m +++ b/plugins/mac-capture/window-utils.m @@ -102,10 +102,8 @@ void init_window(cocoa_window_t cw, obs_data_t *settings) if (owner_names_match && (ids_match || window_names_match)) { pthread_mutex_unlock(&cw->name_lock); - NSNumber *window_id = (NSNumber *)dict[WINDOW_NUMBER]; - cw->window_id = window_id.intValue; - NSNumber *owner_pid = (NSNumber *)dict[OWNER_PID]; - cw->owner_pid = owner_pid.intValue; + cw->window_id = [dict[WINDOW_NUMBER] intValue]; + cw->owner_pid = [dict[OWNER_PID] intValue]; obs_data_set_int(settings, "window", cw->window_id); obs_data_set_int(settings, "owner_pid", cw->owner_pid); @@ -136,8 +134,8 @@ void update_window(cocoa_window_t cw, obs_data_t *settings) [cw->window_name retain]; pthread_mutex_unlock(&cw->name_lock); - cw->owner_pid = obs_data_get_int(settings, "owner_pid"); - cw->window_id = obs_data_get_int(settings, "window"); + cw->owner_pid = (int)obs_data_get_int(settings, "owner_pid"); + cw->window_id = (unsigned int)obs_data_get_int(settings, "window"); } static inline const char *make_name(NSString *owner, NSString *name) @@ -163,7 +161,7 @@ void update_window(cocoa_window_t cw, obs_data_t *settings) static inline bool window_changed_internal(obs_property_t *p, obs_data_t *settings) { - int window_id = obs_data_get_int(settings, "window"); + int window_id = (int)obs_data_get_int(settings, "window"); NSString *window_owner = @(obs_data_get_string(settings, "owner_name")); NSString *window_name = @(obs_data_get_string(settings, "window_name")); From 8c8a44b26a663e1e00bd1ac1c7d39a0ee7af8c42 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sat, 28 Jan 2023 21:23:05 +0100 Subject: [PATCH 0196/2225] mac-virtualcam: Fix compiler warnings CMake build framework 3.0 introduces more strict typing checks, which require additional code fixes to silence. * Fixes warnings about implicit casts * Fixes warnings about weak references used multiple times inside blocks --- .../src/dal-plugin/CMSampleBufferUtils.mm | 3 +- .../src/dal-plugin/OBSDALPlugIn.mm | 12 ++++--- .../src/dal-plugin/OBSDALStream.mm | 36 ++++++++++--------- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm index 296d72ca4eab64..868680103408ba 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm @@ -22,7 +22,8 @@ CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos, timing.duration = CMTimeMake(fpsDenominator * scale, fpsNumerator * scale); timing.presentationTimeStamp = CMTimeMake( - (timestampNanos / (double)NSEC_PER_SEC) * scale, scale); + ((int64_t)(timestampNanos / (double)NSEC_PER_SEC) * scale), + scale); timing.decodeTimeStamp = kCMTimeInvalid; return timing; } diff --git a/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugIn.mm b/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugIn.mm index c1dcaa36c62af7..691142f3525ed5 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugIn.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/OBSDALPlugIn.mm @@ -81,13 +81,15 @@ - (instancetype)init uint64_t intervalTime = (int64_t)(1 * NSEC_PER_SEC); dispatch_source_set_timer(_machConnectTimer, startTime, intervalTime, 0); + dispatch_source_set_event_handler(_machConnectTimer, ^{ - if (![[weakSelf machClient] isServerAvailable]) { + __strong __typeof(weakSelf) strongSelf = weakSelf; + if (![[strongSelf machClient] isServerAvailable]) { DLog(@"Server is not available"); - } else if (weakSelf.state == + } else if (strongSelf.state == PlugInStateWaitingForServer) { DLog(@"Attempting connection"); - [[weakSelf machClient] connectToServer]; + [[strongSelf machClient] connectToServer]; } }); } @@ -233,8 +235,8 @@ - (void)receivedPixelBuffer:(CVPixelBufferRef)frame // Add 5 more seconds onto the timeout timer dispatch_source_set_timer( _timeoutTimer, - dispatch_time(DISPATCH_TIME_NOW, 5.0 * NSEC_PER_SEC), - 5.0 * NSEC_PER_SEC, (1ull * NSEC_PER_SEC) / 10); + dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), + (uint64_t)(5.0 * NSEC_PER_SEC), (1ull * NSEC_PER_SEC) / 10); [self.stream queuePixelBuffer:frame timestamp:timestamp diff --git a/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm b/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm index 571eefd70a6f2d..8f96a9a42c3c9e 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm @@ -103,7 +103,7 @@ - (CMSimpleQueueRef)queue if (_queue == NULL) { // Allocate a one-second long queue, which we can use our FPS constant for. OSStatus err = CMSimpleQueueCreate(kCFAllocatorDefault, - self.fps, &_queue); + (int32_t)self.fps, &_queue); if (err != noErr) { DLog(@"Err %d in CMSimpleQueueCreate", err); } @@ -131,9 +131,9 @@ - (NSSize)testCardSize if (NSEqualSizes(_testCardSize, NSZeroSize)) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - int width = [[defaults objectForKey:kTestCardWidthKey] + NSInteger width = [[defaults objectForKey:kTestCardWidthKey] integerValue]; - int height = [[defaults objectForKey:kTestCardHeightKey] + NSInteger height = [[defaults objectForKey:kTestCardHeightKey] integerValue]; if (width == 0 || height == 0) { _testCardSize = @@ -183,8 +183,10 @@ - (NSImage *)testCardImage NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL - pixelsWide:self.testCardSize.width - pixelsHigh:self.testCardSize.height + pixelsWide:(NSInteger) + self.testCardSize.width + pixelsHigh:(NSInteger)self.testCardSize + .height bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES @@ -194,18 +196,18 @@ - (NSImage *)testCardImage bitsPerPixel:0]; rep.size = self.testCardSize; - float hScale = + double hScale = placeholderImage.size.width / self.testCardSize.width; - float vScale = + double vScale = placeholderImage.size.height / self.testCardSize.height; - float scaling = fmax(hScale, vScale); + double scaling = fmax(hScale, vScale); - float newWidth = placeholderImage.size.width / scaling; - float newHeight = placeholderImage.size.height / scaling; + double newWidth = placeholderImage.size.width / scaling; + double newHeight = placeholderImage.size.height / scaling; - float leftOffset = (self.testCardSize.width - newWidth) / 2; - float topOffset = (self.testCardSize.height - newHeight) / 2; + double leftOffset = (self.testCardSize.width - newWidth) / 2; + double topOffset = (self.testCardSize.height - newHeight) / 2; [NSGraphicsContext saveGraphicsState]; [NSGraphicsContext @@ -249,8 +251,8 @@ - (CMSimpleQueueRef)copyBufferQueueWithAlteredProc: - (CVPixelBufferRef)createPixelBufferWithTestAnimation { - int width = self.testCardSize.width; - int height = self.testCardSize.height; + int width = (int)self.testCardSize.width; + int height = (int)self.testCardSize.height; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: @@ -316,7 +318,7 @@ - (void)fillFrame uint64_t hostTime = mach_absolute_time(); CMSampleTimingInfo timingInfo = - CMSampleTimingInfoForTimestamp(hostTime, self.fps, 1); + CMSampleTimingInfoForTimestamp(hostTime, (uint32_t)self.fps, 1); OSStatus err = CMIOStreamClockPostTimingEvent( timingInfo.presentationTimeStamp, hostTime, true, self.clock); @@ -418,8 +420,8 @@ - (CMVideoFormatDescriptionRef)getFormatDescription OSStatus err = CMVideoFormatDescriptionCreate( kCFAllocatorDefault, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, - self.testCardSize.width, self.testCardSize.height, NULL, - &formatDescription); + (int32_t)self.testCardSize.width, + (int32_t)self.testCardSize.height, NULL, &formatDescription); if (err != noErr) { DLog(@"Error %d from CMVideoFormatDescriptionCreate", err); } From 64176daaf47ae42f532ec6f605d698bc349cea84 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 16 Feb 2023 12:41:15 +0100 Subject: [PATCH 0197/2225] UI: Force Wayland usage on Ubuntu GNOME XDG_CURRENT_DESKTOP is set to "ubuntu:GNOME" on Ubuntu custom version of GNOME. --- UI/obs-app.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index e64250bd8f2830..a45624a1dce55a 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -2317,7 +2317,7 @@ static int run_program(fstream &logFile, int argc, char *argv[]) const char *desktop = getenv("XDG_CURRENT_DESKTOP"); const char *session_type = getenv("XDG_SESSION_TYPE"); - if (session_type && desktop && strcmp(desktop, "GNOME") == 0 && + if (session_type && desktop && strstr(desktop, "GNOME") != nullptr && strcmp(session_type, "wayland") == 0) setenv("QT_QPA_PLATFORM", "wayland", false); #endif From 0972da9e1a8add94ee7b962236b5efb98619a765 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 4 Nov 2022 23:30:55 +0100 Subject: [PATCH 0198/2225] UI: Merge win-update and nix-update --- UI/CMakeLists.txt | 37 +- .../crypto-helpers-mac.mm | 0 .../crypto-helpers-mbedtls.cpp | 0 UI/{nix-update => update}/crypto-helpers.hpp | 0 .../shared-update.cpp} | 81 +- .../shared-update.hpp} | 8 + .../update-helpers.cpp} | 2 +- .../update-helpers.hpp} | 0 UI/{win-update => update}/update-window.cpp | 0 UI/{win-update => update}/update-window.hpp | 0 UI/update/win-update.cpp | 398 ++++++++ UI/{win-update => update}/win-update.hpp | 26 - UI/win-update/updater/CMakeLists.txt | 9 +- UI/win-update/updater/helpers.cpp | 6 + .../helpers.hpp} | 30 - UI/win-update/updater/updater.hpp | 2 +- UI/win-update/win-update-helpers.cpp | 40 - UI/win-update/win-update.cpp | 926 ------------------ UI/window-basic-main.cpp | 5 +- 19 files changed, 492 insertions(+), 1078 deletions(-) rename UI/{nix-update => update}/crypto-helpers-mac.mm (100%) rename UI/{nix-update => update}/crypto-helpers-mbedtls.cpp (100%) rename UI/{nix-update => update}/crypto-helpers.hpp (100%) rename UI/{nix-update/nix-update.cpp => update/shared-update.cpp} (78%) rename UI/{nix-update/nix-update.hpp => update/shared-update.hpp} (67%) rename UI/{nix-update/nix-update-helpers.cpp => update/update-helpers.cpp} (93%) rename UI/{nix-update/nix-update-helpers.hpp => update/update-helpers.hpp} (100%) rename UI/{win-update => update}/update-window.cpp (100%) rename UI/{win-update => update}/update-window.hpp (100%) create mode 100644 UI/update/win-update.cpp rename UI/{win-update => update}/win-update.hpp (61%) create mode 100644 UI/win-update/updater/helpers.cpp rename UI/win-update/{win-update-helpers.hpp => updater/helpers.hpp} (52%) delete mode 100644 UI/win-update/win-update-helpers.cpp delete mode 100644 UI/win-update/win-update.cpp diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 59c8735c7783cd..858817a49729a0 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -344,12 +344,16 @@ if(OS_WINDOWS) obs PRIVATE obs.manifest platform-windows.cpp - win-update/update-window.cpp - win-update/update-window.hpp - win-update/win-update.cpp - win-update/win-update.hpp - win-update/win-update-helpers.cpp - win-update/win-update-helpers.hpp + update/update-window.cpp + update/update-window.hpp + update/win-update.cpp + update/win-update.hpp + update/shared-update.cpp + update/shared-update.hpp + update/update-helpers.cpp + update/update-helpers.hpp + update/crypto-helpers-mbedtls.cpp + update/crypto-helpers.hpp ${CMAKE_BINARY_DIR}/obs.rc) if(_QT_VERSION EQUAL 5) @@ -357,7 +361,8 @@ if(OS_WINDOWS) target_link_libraries(obs PRIVATE Qt::WinExtras) endif() - target_link_libraries(obs PRIVATE crypt32 OBS::blake2) + find_package(MbedTLS) + target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2) target_compile_features(obs PRIVATE cxx_std_17) @@ -446,12 +451,9 @@ elseif(OS_MACOS) target_sources( obs - PRIVATE nix-update/crypto-helpers.hpp - nix-update/crypto-helpers-mac.mm - nix-update/nix-update.cpp - nix-update/nix-update.hpp - nix-update/nix-update-helpers.cpp - nix-update/nix-update-helpers.hpp) + PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mac.mm + update/shared-update.cpp update/shared-update.hpp + update/update-helpers.cpp update/update-helpers.hpp) endif() set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS @@ -485,12 +487,9 @@ elseif(OS_POSIX) target_sources( obs - PRIVATE nix-update/crypto-helpers.hpp - nix-update/crypto-helpers-mbedtls.cpp - nix-update/nix-update.cpp - nix-update/nix-update.hpp - nix-update/nix-update-helpers.cpp - nix-update/nix-update-helpers.hpp) + PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mbedtls.cpp + update/shared-update.cpp update/shared-update.hpp + update/update-helpers.cpp update/update-helpers.hpp) target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2) endif() endif() diff --git a/UI/nix-update/crypto-helpers-mac.mm b/UI/update/crypto-helpers-mac.mm similarity index 100% rename from UI/nix-update/crypto-helpers-mac.mm rename to UI/update/crypto-helpers-mac.mm diff --git a/UI/nix-update/crypto-helpers-mbedtls.cpp b/UI/update/crypto-helpers-mbedtls.cpp similarity index 100% rename from UI/nix-update/crypto-helpers-mbedtls.cpp rename to UI/update/crypto-helpers-mbedtls.cpp diff --git a/UI/nix-update/crypto-helpers.hpp b/UI/update/crypto-helpers.hpp similarity index 100% rename from UI/nix-update/crypto-helpers.hpp rename to UI/update/crypto-helpers.hpp diff --git a/UI/nix-update/nix-update.cpp b/UI/update/shared-update.cpp similarity index 78% rename from UI/nix-update/nix-update.cpp rename to UI/update/shared-update.cpp index 64f580bd10017b..5c29dce3760f83 100644 --- a/UI/nix-update/nix-update.cpp +++ b/UI/update/shared-update.cpp @@ -1,6 +1,6 @@ -#include "nix-update.hpp" +#include "shared-update.hpp" #include "crypto-helpers.hpp" -#include "nix-update-helpers.hpp" +#include "update-helpers.hpp" #include "obs-app.hpp" #include "remote-text.hpp" #include "platform.hpp" @@ -24,12 +24,18 @@ extern QCef *cef; #define MAC_WHATSNEW_URL "https://obsproject.com/update_studio/whatsnew.json" #endif +#ifndef WIN_WHATSNEW_URL +#define WIN_WHATSNEW_URL "https://obsproject.com/update_studio/whatsnew.json" +#endif + #ifndef LINUX_WHATSNEW_URL #define LINUX_WHATSNEW_URL "https://obsproject.com/update_studio/whatsnew.json" #endif #ifdef __APPLE__ #define WHATSNEW_URL MAC_WHATSNEW_URL +#elif defined(_WIN32) +#define WHATSNEW_URL WIN_WHATSNEW_URL #else #define WHATSNEW_URL LINUX_WHATSNEW_URL #endif @@ -194,28 +200,34 @@ try { /* ------------------------------------------------------------------------ */ -void WhatsNewInfoThread::run() -try { +bool FetchAndVerifyFile(const char *name, const char *file, const char *url, + std::string *out, + const std::vector &extraHeaders) +{ long responseCode; - std::vector extraHeaders; - std::string text; + std::vector headers; std::string error; std::string signature; - uint8_t whatsnewHash[BLAKE2_HASH_LENGTH]; + std::string data; + uint8_t fileHash[BLAKE2_HASH_LENGTH]; bool success; - BPtr whatsnewPath = - GetConfigPathPtr("obs-studio/updates/whatsnew.json"); + BPtr filePath = GetConfigPathPtr(file); + + if (!extraHeaders.empty()) { + headers.insert(headers.end(), extraHeaders.begin(), + extraHeaders.end()); + } /* ----------------------------------- * - * avoid downloading json again */ + * avoid downloading file again */ - if (CalculateFileHash(whatsnewPath, whatsnewHash)) { - auto hash = QByteArray::fromRawData((const char *)whatsnewHash, + if (CalculateFileHash(filePath, fileHash)) { + auto hash = QByteArray::fromRawData((const char *)fileHash, BLAKE2_HASH_LENGTH); QString header = "If-None-Match: " + hash.toHex(); - extraHeaders.push_back(move(header.toStdString())); + headers.push_back(move(header.toStdString())); } /* ----------------------------------- * @@ -225,20 +237,20 @@ try { if (!guid.empty()) { std::string header = "X-OBS2-GUID: " + guid; - extraHeaders.push_back(move(header)); + headers.push_back(move(header)); } /* ----------------------------------- * - * get json from server */ + * get file from server */ - success = GetRemoteFile(WHATSNEW_URL, text, error, &responseCode, - nullptr, "", nullptr, extraHeaders, &signature); + success = GetRemoteFile(url, data, error, &responseCode, nullptr, "", + nullptr, headers, &signature); if (!success || (responseCode != 200 && responseCode != 304)) { if (responseCode == 404) - return; + return false; - throw strprintf("Failed to fetch whatsnew file: %s", + throw strprintf("Failed to fetch %s file: %s", name, error.c_str()); } @@ -246,29 +258,40 @@ try { * verify file signature */ if (responseCode == 200) { - success = CheckDataSignature("whatsnew", text, signature); + success = CheckDataSignature(name, data, signature); if (!success) - throw std::string("Invalid whatsnew signature"); + throw strprintf("Invalid %s signature", name); } /* ----------------------------------- * - * write or load json */ + * write or load file */ if (responseCode == 200) { - if (!QuickWriteFile(whatsnewPath, text)) + if (!QuickWriteFile(filePath, data)) throw strprintf("Could not write file '%s'", - whatsnewPath.Get()); - } else { - if (!QuickReadFile(whatsnewPath, text)) + filePath.Get()); + } else if (out) { /* Only read file if caller wants data */ + if (!QuickReadFile(filePath, data)) throw strprintf("Could not read file '%s'", - whatsnewPath.Get()); + filePath.Get()); } + if (out) + *out = data; + /* ----------------------------------- * * success */ + return true; +} - emit Result(QString::fromStdString(text)); +void WhatsNewInfoThread::run() +try { + std::string text; + if (FetchAndVerifyFile("whatsnew", "obs-studio/updates/whatsnew.json", + WHATSNEW_URL, &text)) { + emit Result(QString::fromStdString(text)); + } } catch (std::string &text) { blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); } @@ -277,6 +300,8 @@ try { void WhatsNewBrowserInitThread::run() { +#ifdef BROWSER_AVAILABLE cef->wait_for_browser_init(); +#endif emit Result(url); } diff --git a/UI/nix-update/nix-update.hpp b/UI/update/shared-update.hpp similarity index 67% rename from UI/nix-update/nix-update.hpp rename to UI/update/shared-update.hpp index 56394930f8261d..b1522947cdd9d5 100644 --- a/UI/nix-update/nix-update.hpp +++ b/UI/update/shared-update.hpp @@ -3,6 +3,14 @@ #include #include +#include +#include + +bool FetchAndVerifyFile(const char *name, const char *file, const char *url, + std::string *out, + const std::vector &extraHeaders = + std::vector()); + class WhatsNewInfoThread : public QThread { Q_OBJECT diff --git a/UI/nix-update/nix-update-helpers.cpp b/UI/update/update-helpers.cpp similarity index 93% rename from UI/nix-update/nix-update-helpers.cpp rename to UI/update/update-helpers.cpp index 5a9004305abe34..8d466e691862ed 100644 --- a/UI/nix-update/nix-update-helpers.cpp +++ b/UI/update/update-helpers.cpp @@ -1,4 +1,4 @@ -#include "nix-update-helpers.hpp" +#include "update-helpers.hpp" #include diff --git a/UI/nix-update/nix-update-helpers.hpp b/UI/update/update-helpers.hpp similarity index 100% rename from UI/nix-update/nix-update-helpers.hpp rename to UI/update/update-helpers.hpp diff --git a/UI/win-update/update-window.cpp b/UI/update/update-window.cpp similarity index 100% rename from UI/win-update/update-window.cpp rename to UI/update/update-window.cpp diff --git a/UI/win-update/update-window.hpp b/UI/update/update-window.hpp similarity index 100% rename from UI/win-update/update-window.hpp rename to UI/update/update-window.hpp diff --git a/UI/update/win-update.cpp b/UI/update/win-update.cpp new file mode 100644 index 00000000000000..86203b7ebbe078 --- /dev/null +++ b/UI/update/win-update.cpp @@ -0,0 +1,398 @@ +#include "update-helpers.hpp" +#include "shared-update.hpp" +#include "update-window.hpp" +#include "remote-text.hpp" +#include "qt-wrappers.hpp" +#include "win-update.hpp" +#include "obs-app.hpp" + +#include + +#include +#include + +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include +#include +#include + +#ifdef BROWSER_AVAILABLE +#include +#endif + +using namespace std; +using namespace json11; + +/* ------------------------------------------------------------------------ */ + +#ifndef WIN_MANIFEST_URL +#define WIN_MANIFEST_URL "https://obsproject.com/update_studio/manifest.json" +#endif + +#ifndef WIN_MANIFEST_BASE_URL +#define WIN_MANIFEST_BASE_URL "https://obsproject.com/update_studio/" +#endif + +#ifndef WIN_BRANCHES_URL +#define WIN_BRANCHES_URL "https://obsproject.com/update_studio/branches.json" +#endif + +#ifndef WIN_DEFAULT_BRANCH +#define WIN_DEFAULT_BRANCH "stable" +#endif + +#ifndef WIN_UPDATER_URL +#define WIN_UPDATER_URL "https://obsproject.com/update_studio/updater.exe" +#endif + +/* ------------------------------------------------------------------------ */ + +#if defined(OBS_RELEASE_CANDIDATE) && OBS_RELEASE_CANDIDATE > 0 +#define CUR_VER \ + ((uint64_t)OBS_RELEASE_CANDIDATE_VER << 16ULL | OBS_RELEASE_CANDIDATE \ + << 8ULL) +#define PRE_RELEASE true +#elif OBS_BETA > 0 +#define CUR_VER ((uint64_t)OBS_BETA_VER << 16ULL | OBS_BETA) +#define PRE_RELEASE true +#elif defined(OBS_COMMIT) +#define CUR_VER 1 << 16ULL +#define CUR_COMMIT OBS_COMMIT +#define PRE_RELEASE true +#else +#define CUR_VER ((uint64_t)LIBOBS_API_VER << 16ULL) +#define PRE_RELEASE false +#endif + +#ifndef CUR_COMMIT +#define CUR_COMMIT "00000000" +#endif + +static bool ParseUpdateManifest(const char *manifest, bool *updatesAvailable, + string ¬es_str, uint64_t &updateVer, + string &branch) +try { + + string error; + Json root = Json::parse(manifest, error); + if (!error.empty()) + throw strprintf("Failed reading json string: %s", + error.c_str()); + + if (!root.is_object()) + throw string("Root of manifest is not an object"); + + int major = root["version_major"].int_value(); + int minor = root["version_minor"].int_value(); + int patch = root["version_patch"].int_value(); + int rc = root["rc"].int_value(); + int beta = root["beta"].int_value(); + string commit_hash = root["commit"].string_value(); + + if (major == 0 && commit_hash.empty()) + throw strprintf("Invalid version number: %d.%d.%d", major, + minor, patch); + + const Json ¬es = root["notes"]; + if (!notes.is_string()) + throw string("'notes' value invalid"); + + notes_str = notes.string_value(); + + const Json &packages = root["packages"]; + if (!packages.is_array()) + throw string("'packages' value invalid"); + + uint64_t cur_ver; + uint64_t new_ver; + + if (commit_hash.empty()) { + cur_ver = CUR_VER; + new_ver = MAKE_SEMANTIC_VERSION( + (uint64_t)major, (uint64_t)minor, (uint64_t)patch); + new_ver <<= 16; + /* RC builds are shifted so that rc1 and beta1 versions do not result + * in the same new_ver. */ + if (rc > 0) + new_ver |= (uint64_t)rc << 8; + else if (beta > 0) + new_ver |= (uint64_t)beta; + } else { + /* Test or nightly builds may not have a (valid) version number, + * so compare commit hashes instead. */ + cur_ver = stoul(CUR_COMMIT, nullptr, 16); + new_ver = stoul(commit_hash.substr(0, 8), nullptr, 16); + } + + updateVer = new_ver; + + /* When using a pre-release build or non-default branch we only check if + * the manifest version is different, so that it can be rolled-back. */ + if (branch != WIN_DEFAULT_BRANCH || PRE_RELEASE) + *updatesAvailable = new_ver != cur_ver; + else + *updatesAvailable = new_ver > cur_ver; + + return true; + +} catch (string &text) { + blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); + return false; +} + +#undef CUR_COMMIT +#undef CUR_VER +#undef PRE_RELEASE + +/* ------------------------------------------------------------------------ */ + +bool GetBranchAndUrl(string &selectedBranch, string &manifestUrl) +{ + const char *config_branch = + config_get_string(GetGlobalConfig(), "General", "UpdateBranch"); + if (!config_branch) + return true; + + bool found = false; + for (const UpdateBranch &branch : App()->GetBranches()) { + if (branch.name != config_branch) + continue; + /* A branch that is found but disabled will just silently fall back to + * the default. But if the branch was removed entirely, the user should + * be warned, so leave this false *only* if the branch was removed. */ + found = true; + + if (branch.is_enabled) { + selectedBranch = branch.name.toStdString(); + if (branch.name != WIN_DEFAULT_BRANCH) { + manifestUrl = WIN_MANIFEST_BASE_URL; + manifestUrl += "manifest_" + + branch.name.toStdString() + + ".json"; + } + } + break; + } + + return found; +} + +/* ------------------------------------------------------------------------ */ + +void AutoUpdateThread::infoMsg(const QString &title, const QString &text) +{ + OBSMessageBox::information(App()->GetMainWindow(), title, text); +} + +void AutoUpdateThread::info(const QString &title, const QString &text) +{ + QMetaObject::invokeMethod(this, "infoMsg", Qt::BlockingQueuedConnection, + Q_ARG(QString, title), Q_ARG(QString, text)); +} + +int AutoUpdateThread::queryUpdateSlot(bool localManualUpdate, + const QString &text) +{ + OBSUpdate updateDlg(App()->GetMainWindow(), localManualUpdate, text); + return updateDlg.exec(); +} + +int AutoUpdateThread::queryUpdate(bool localManualUpdate, const char *text_utf8) +{ + int ret = OBSUpdate::No; + QString text = text_utf8; + QMetaObject::invokeMethod(this, "queryUpdateSlot", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(int, ret), + Q_ARG(bool, localManualUpdate), + Q_ARG(QString, text)); + return ret; +} + +bool AutoUpdateThread::queryRepairSlot() +{ + QMessageBox::StandardButton res = OBSMessageBox::question( + App()->GetMainWindow(), QTStr("Updater.RepairConfirm.Title"), + QTStr("Updater.RepairConfirm.Text"), + QMessageBox::Yes | QMessageBox::Cancel); + + return res == QMessageBox::Yes; +} + +bool AutoUpdateThread::queryRepair() +{ + bool ret = false; + QMetaObject::invokeMethod(this, "queryRepairSlot", + Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, ret)); + return ret; +} + +void AutoUpdateThread::run() +try { + string text; + string branch = WIN_DEFAULT_BRANCH; + string manifestUrl = WIN_MANIFEST_URL; + vector extraHeaders; + bool updatesAvailable = false; + + struct FinishedTrigger { + inline ~FinishedTrigger() + { + QMetaObject::invokeMethod(App()->GetMainWindow(), + "updateCheckFinished"); + } + } finishedTrigger; + + /* ----------------------------------- * + * get branches from server */ + + if (FetchAndVerifyFile("branches", "obs-studio\\updates\\branches.json", + WIN_BRANCHES_URL, &text)) + App()->SetBranchData(text); + + /* ----------------------------------- * + * check branch and get manifest url */ + + if (!GetBranchAndUrl(branch, manifestUrl)) { + config_set_string(GetGlobalConfig(), "General", "UpdateBranch", + WIN_DEFAULT_BRANCH); + info(QTStr("Updater.BranchNotFound.Title"), + QTStr("Updater.BranchNotFound.Text")); + } + + /* allow server to know if this was a manual update check in case + * we want to allow people to bypass a configured rollout rate */ + if (manualUpdate) + extraHeaders.emplace_back("X-OBS2-ManualUpdate: 1"); + + /* ----------------------------------- * + * get manifest from server */ + + text.clear(); + if (!FetchAndVerifyFile("manifest", + "obs-studio\\updates\\manifest.json", + manifestUrl.c_str(), &text, extraHeaders)) + return; + + /* ----------------------------------- * + * check manifest for update */ + + string notes; + uint64_t updateVer = 0; + + if (!ParseUpdateManifest(text.c_str(), &updatesAvailable, notes, + updateVer, branch)) + throw string("Failed to parse manifest"); + + if (!updatesAvailable && !repairMode) { + if (manualUpdate) + info(QTStr("Updater.NoUpdatesAvailable.Title"), + QTStr("Updater.NoUpdatesAvailable.Text")); + return; + } else if (updatesAvailable && repairMode) { + info(QTStr("Updater.RepairButUpdatesAvailable.Title"), + QTStr("Updater.RepairButUpdatesAvailable.Text")); + return; + } + + /* ----------------------------------- * + * skip this version if set to skip */ + + uint64_t skipUpdateVer = config_get_uint(GetGlobalConfig(), "General", + "SkipUpdateVersion"); + if (!manualUpdate && updateVer == skipUpdateVer && !repairMode) + return; + + /* ----------------------------------- * + * fetch updater module */ + + if (!FetchAndVerifyFile("updater", "obs-studio\\updates\\updater.exe", + WIN_UPDATER_URL, nullptr)) + return; + + /* ----------------------------------- * + * query user for update */ + + if (repairMode) { + if (!queryRepair()) + return; + } else { + int queryResult = queryUpdate(manualUpdate, notes.c_str()); + + if (queryResult == OBSUpdate::No) { + if (!manualUpdate) { + long long t = (long long)time(nullptr); + config_set_int(GetGlobalConfig(), "General", + "LastUpdateCheck", t); + } + return; + + } else if (queryResult == OBSUpdate::Skip) { + config_set_uint(GetGlobalConfig(), "General", + "SkipUpdateVersion", updateVer); + return; + } + } + + /* ----------------------------------- * + * get working dir */ + + wchar_t cwd[MAX_PATH]; + GetModuleFileNameW(nullptr, cwd, _countof(cwd) - 1); + wchar_t *p = wcsrchr(cwd, '\\'); + if (p) + *p = 0; + + /* ----------------------------------- * + * execute updater */ + + BPtr updateFilePath = + GetConfigPathPtr("obs-studio\\updates\\updater.exe"); + BPtr wUpdateFilePath; + + size_t size = os_utf8_to_wcs_ptr(updateFilePath, 0, &wUpdateFilePath); + if (!size) + throw string("Could not convert updateFilePath to wide"); + + /* note, can't use CreateProcess to launch as admin. */ + SHELLEXECUTEINFO execInfo = {}; + + execInfo.cbSize = sizeof(execInfo); + execInfo.lpFile = wUpdateFilePath; + + string parameters = ""; + if (App()->IsPortableMode()) + parameters += "--portable"; + if (branch != WIN_DEFAULT_BRANCH) + parameters += "--branch=" + branch; + + BPtr lpParameters; + size = os_utf8_to_wcs_ptr(parameters.c_str(), 0, &lpParameters); + if (!size && !parameters.empty()) + throw string("Could not convert parameters to wide"); + + execInfo.lpParameters = lpParameters; + execInfo.lpDirectory = cwd; + execInfo.nShow = SW_SHOWNORMAL; + + if (!ShellExecuteEx(&execInfo)) { + QString msg = QTStr("Updater.FailedToLaunch"); + info(msg, msg); + throw strprintf("Can't launch updater '%s': %d", + updateFilePath.Get(), GetLastError()); + } + + /* force OBS to perform another update check immediately after updating + * in case of issues with the new version */ + config_set_int(GetGlobalConfig(), "General", "LastUpdateCheck", 0); + config_set_int(GetGlobalConfig(), "General", "SkipUpdateVersion", 0); + + QMetaObject::invokeMethod(App()->GetMainWindow(), "close"); + +} catch (string &text) { + blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); +} diff --git a/UI/win-update/win-update.hpp b/UI/update/win-update.hpp similarity index 61% rename from UI/win-update/win-update.hpp rename to UI/update/win-update.hpp index a9e944c59fa254..a2b85bd7d667c0 100644 --- a/UI/win-update/win-update.hpp +++ b/UI/update/win-update.hpp @@ -27,29 +27,3 @@ private slots: { } }; - -class WhatsNewInfoThread : public QThread { - Q_OBJECT - - virtual void run() override; - -signals: - void Result(const QString &text); - -public: - inline WhatsNewInfoThread() {} -}; - -class WhatsNewBrowserInitThread : public QThread { - Q_OBJECT - - QString url; - - virtual void run() override; - -signals: - void Result(const QString &url); - -public: - inline WhatsNewBrowserInitThread(const QString &url_) : url(url_) {} -}; diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index 50afe0bc000bca..64672fae394181 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -25,14 +25,13 @@ target_sources( updater.rc init-hook-files.c updater.manifest - ${CMAKE_SOURCE_DIR}/UI/win-update/win-update-helpers.cpp - ${CMAKE_SOURCE_DIR}/UI/win-update/win-update-helpers.hpp + helpers.cpp + helpers.hpp ${CMAKE_SOURCE_DIR}/deps/json11/json11.hpp ${CMAKE_SOURCE_DIR}/deps/json11/json11.cpp) -target_include_directories( - updater PRIVATE ${CMAKE_SOURCE_DIR}/libobs ${CMAKE_SOURCE_DIR}/UI/win-update - ${CMAKE_SOURCE_DIR}/deps/json11) +target_include_directories(updater PRIVATE ${CMAKE_SOURCE_DIR}/libobs + ${CMAKE_SOURCE_DIR}/deps/json11) target_compile_definitions(updater PRIVATE NOMINMAX "PSAPI_VERSION=2") diff --git a/UI/win-update/updater/helpers.cpp b/UI/win-update/updater/helpers.cpp new file mode 100644 index 00000000000000..2d0b3d99e823ef --- /dev/null +++ b/UI/win-update/updater/helpers.cpp @@ -0,0 +1,6 @@ +#include "helpers.hpp" + +void FreeProvider(HCRYPTPROV prov) +{ + CryptReleaseContext(prov, 0); +} diff --git a/UI/win-update/win-update-helpers.hpp b/UI/win-update/updater/helpers.hpp similarity index 52% rename from UI/win-update/win-update-helpers.hpp rename to UI/win-update/updater/helpers.hpp index 3f7040c873dbc5..2c172758ec121a 100644 --- a/UI/win-update/win-update-helpers.hpp +++ b/UI/win-update/updater/helpers.hpp @@ -37,35 +37,5 @@ template class CustomHandle { }; void FreeProvider(HCRYPTPROV prov); -void FreeHash(HCRYPTHASH hash); -void FreeKey(HCRYPTKEY key); using CryptProvider = CustomHandle; -using CryptHash = CustomHandle; -using CryptKey = CustomHandle; - -/* ------------------------------------------------------------------------ */ - -template class LocalPtr { - T *ptr = nullptr; - -public: - inline ~LocalPtr() - { - if (ptr) - LocalFree(ptr); - } - - inline T **operator&() { return &ptr; } - inline operator T() const { return ptr; } - inline T *get() const { return ptr; } - - inline bool operator!() const { return !ptr; } - - inline T *operator->() { return ptr; } -}; - -/* ------------------------------------------------------------------------ */ - -std::string vstrprintf(const char *format, va_list args); -std::string strprintf(const char *format, ...); diff --git a/UI/win-update/updater/updater.hpp b/UI/win-update/updater/updater.hpp index 02d99d2a6f4873..8d1adaec11409a 100644 --- a/UI/win-update/updater/updater.hpp +++ b/UI/win-update/updater/updater.hpp @@ -40,7 +40,7 @@ #include -#include "../win-update-helpers.hpp" +#include "helpers.hpp" #define BLAKE2_HASH_LENGTH 20 #define BLAKE2_HASH_STR_LENGTH ((BLAKE2_HASH_LENGTH * 2) + 1) diff --git a/UI/win-update/win-update-helpers.cpp b/UI/win-update/win-update-helpers.cpp deleted file mode 100644 index 98cffbc2d834f4..00000000000000 --- a/UI/win-update/win-update-helpers.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "win-update-helpers.hpp" - -void FreeProvider(HCRYPTPROV prov) -{ - CryptReleaseContext(prov, 0); -} - -void FreeHash(HCRYPTHASH hash) -{ - CryptDestroyHash(hash); -} - -void FreeKey(HCRYPTKEY key) -{ - CryptDestroyKey(key); -} - -std::string vstrprintf(const char *format, va_list args) -{ - if (!format) - return std::string(); - - std::string str; - int size = (int)vsnprintf(nullptr, 0, format, args) + 1; - str.resize(size); - vsnprintf(&str[0], size, format, args); - return str; -} - -std::string strprintf(const char *format, ...) -{ - std::string str; - va_list args; - - va_start(args, format); - str = vstrprintf(format, args); - va_end(args); - - return str; -} diff --git a/UI/win-update/win-update.cpp b/UI/win-update/win-update.cpp deleted file mode 100644 index 0a63adf4b6275b..00000000000000 --- a/UI/win-update/win-update.cpp +++ /dev/null @@ -1,926 +0,0 @@ -#include "win-update-helpers.hpp" -#include "update-window.hpp" -#include "remote-text.hpp" -#include "qt-wrappers.hpp" -#include "win-update.hpp" -#include "obs-app.hpp" - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifdef BROWSER_AVAILABLE -#include -#endif - -using namespace std; -using namespace json11; - -struct QCef; -extern QCef *cef; - -/* ------------------------------------------------------------------------ */ - -#ifndef WIN_MANIFEST_URL -#define WIN_MANIFEST_URL "https://obsproject.com/update_studio/manifest.json" -#endif - -#ifndef WIN_MANIFEST_BASE_URL -#define WIN_MANIFEST_BASE_URL "https://obsproject.com/update_studio/" -#endif - -#ifndef WIN_BRANCHES_URL -#define WIN_BRANCHES_URL "https://obsproject.com/update_studio/branches.json" -#endif - -#ifndef WIN_DEFAULT_BRANCH -#define WIN_DEFAULT_BRANCH "stable" -#endif - -#ifndef WIN_WHATSNEW_URL -#define WIN_WHATSNEW_URL "https://obsproject.com/update_studio/whatsnew.json" -#endif - -#ifndef WIN_UPDATER_URL -#define WIN_UPDATER_URL "https://obsproject.com/update_studio/updater.exe" -#endif - -static __declspec(thread) HCRYPTPROV provider = 0; - -#pragma pack(push, r1, 1) - -typedef struct { - BLOBHEADER blobheader; - RSAPUBKEY rsapubkey; -} PUBLICKEYHEADER; - -#pragma pack(pop, r1) - -#define BLAKE2_HASH_LENGTH 20 -#define BLAKE2_HASH_STR_LENGTH ((BLAKE2_HASH_LENGTH * 2) + 1) - -// Hard coded 4096 bit RSA public key for obsproject.com in PEM format -static const unsigned char obs_pub[] = { - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x50, - 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x49, 0x6a, 0x41, 0x4e, 0x42, - 0x67, 0x6b, 0x71, 0x68, 0x6b, 0x69, 0x47, 0x39, 0x77, 0x30, 0x42, 0x41, - 0x51, 0x45, 0x46, 0x41, 0x41, 0x4f, 0x43, 0x41, 0x67, 0x38, 0x41, 0x4d, - 0x49, 0x49, 0x43, 0x43, 0x67, 0x4b, 0x43, 0x41, 0x67, 0x45, 0x41, 0x6c, - 0x33, 0x73, 0x76, 0x65, 0x72, 0x77, 0x39, 0x48, 0x51, 0x2b, 0x72, 0x59, - 0x51, 0x4e, 0x6e, 0x39, 0x43, 0x61, 0x37, 0x0a, 0x39, 0x4c, 0x55, 0x36, - 0x32, 0x6e, 0x47, 0x36, 0x4e, 0x6f, 0x7a, 0x45, 0x2f, 0x46, 0x73, 0x49, - 0x56, 0x4e, 0x65, 0x72, 0x2b, 0x57, 0x2f, 0x68, 0x75, 0x65, 0x45, 0x38, - 0x57, 0x51, 0x31, 0x6d, 0x72, 0x46, 0x50, 0x2b, 0x32, 0x79, 0x41, 0x2b, - 0x69, 0x59, 0x52, 0x75, 0x74, 0x59, 0x50, 0x65, 0x45, 0x67, 0x70, 0x78, - 0x74, 0x6f, 0x64, 0x48, 0x68, 0x67, 0x6b, 0x52, 0x34, 0x70, 0x45, 0x4b, - 0x0a, 0x56, 0x6e, 0x72, 0x72, 0x31, 0x38, 0x71, 0x34, 0x73, 0x7a, 0x6c, - 0x76, 0x38, 0x39, 0x51, 0x49, 0x37, 0x74, 0x38, 0x6c, 0x4d, 0x6f, 0x4c, - 0x54, 0x6c, 0x46, 0x2b, 0x74, 0x31, 0x49, 0x52, 0x30, 0x56, 0x34, 0x77, - 0x4a, 0x56, 0x33, 0x34, 0x49, 0x33, 0x43, 0x2b, 0x33, 0x35, 0x39, 0x4b, - 0x69, 0x78, 0x6e, 0x7a, 0x4c, 0x30, 0x42, 0x6c, 0x39, 0x61, 0x6a, 0x2f, - 0x7a, 0x44, 0x63, 0x72, 0x58, 0x0a, 0x57, 0x6c, 0x35, 0x70, 0x48, 0x54, - 0x69, 0x6f, 0x4a, 0x77, 0x59, 0x4f, 0x67, 0x4d, 0x69, 0x42, 0x47, 0x4c, - 0x79, 0x50, 0x65, 0x69, 0x74, 0x4d, 0x46, 0x64, 0x6a, 0x6a, 0x54, 0x49, - 0x70, 0x43, 0x4d, 0x2b, 0x6d, 0x78, 0x54, 0x57, 0x58, 0x43, 0x72, 0x5a, - 0x39, 0x64, 0x50, 0x55, 0x4b, 0x76, 0x5a, 0x74, 0x67, 0x7a, 0x6a, 0x64, - 0x2b, 0x49, 0x7a, 0x6c, 0x48, 0x69, 0x64, 0x48, 0x74, 0x4f, 0x0a, 0x4f, - 0x52, 0x42, 0x4e, 0x35, 0x6d, 0x52, 0x73, 0x38, 0x4c, 0x4e, 0x4f, 0x35, - 0x38, 0x6b, 0x37, 0x39, 0x72, 0x37, 0x37, 0x44, 0x63, 0x67, 0x51, 0x59, - 0x50, 0x4e, 0x69, 0x69, 0x43, 0x74, 0x57, 0x67, 0x43, 0x2b, 0x59, 0x34, - 0x4b, 0x37, 0x75, 0x53, 0x5a, 0x58, 0x33, 0x48, 0x76, 0x65, 0x6f, 0x6d, - 0x32, 0x74, 0x48, 0x62, 0x56, 0x58, 0x79, 0x30, 0x4c, 0x2f, 0x43, 0x6c, - 0x37, 0x66, 0x4d, 0x0a, 0x48, 0x4b, 0x71, 0x66, 0x63, 0x51, 0x47, 0x75, - 0x79, 0x72, 0x76, 0x75, 0x64, 0x34, 0x32, 0x4f, 0x72, 0x57, 0x61, 0x72, - 0x41, 0x73, 0x6e, 0x32, 0x70, 0x32, 0x45, 0x69, 0x36, 0x4b, 0x7a, 0x78, - 0x62, 0x33, 0x47, 0x36, 0x45, 0x53, 0x43, 0x77, 0x31, 0x35, 0x6e, 0x48, - 0x41, 0x67, 0x4c, 0x61, 0x6c, 0x38, 0x7a, 0x53, 0x71, 0x37, 0x2b, 0x72, - 0x61, 0x45, 0x2f, 0x78, 0x6b, 0x4c, 0x70, 0x43, 0x0a, 0x62, 0x59, 0x67, - 0x35, 0x67, 0x6d, 0x59, 0x36, 0x76, 0x62, 0x6d, 0x57, 0x6e, 0x71, 0x39, - 0x64, 0x71, 0x57, 0x72, 0x55, 0x7a, 0x61, 0x71, 0x4f, 0x66, 0x72, 0x5a, - 0x50, 0x67, 0x76, 0x67, 0x47, 0x30, 0x57, 0x76, 0x6b, 0x42, 0x53, 0x68, - 0x66, 0x61, 0x45, 0x4f, 0x42, 0x61, 0x49, 0x55, 0x78, 0x41, 0x33, 0x51, - 0x42, 0x67, 0x7a, 0x41, 0x5a, 0x68, 0x71, 0x65, 0x65, 0x64, 0x46, 0x39, - 0x68, 0x0a, 0x61, 0x66, 0x4d, 0x47, 0x4d, 0x4d, 0x39, 0x71, 0x56, 0x62, - 0x66, 0x77, 0x75, 0x75, 0x7a, 0x4a, 0x32, 0x75, 0x68, 0x2b, 0x49, 0x6e, - 0x61, 0x47, 0x61, 0x65, 0x48, 0x32, 0x63, 0x30, 0x34, 0x6f, 0x56, 0x63, - 0x44, 0x46, 0x66, 0x65, 0x4f, 0x61, 0x44, 0x75, 0x78, 0x52, 0x6a, 0x43, - 0x43, 0x62, 0x71, 0x72, 0x35, 0x73, 0x4c, 0x53, 0x6f, 0x31, 0x43, 0x57, - 0x6f, 0x6b, 0x79, 0x6e, 0x6a, 0x4e, 0x0a, 0x43, 0x42, 0x2b, 0x62, 0x32, - 0x72, 0x51, 0x46, 0x37, 0x44, 0x50, 0x50, 0x62, 0x44, 0x34, 0x73, 0x2f, - 0x6e, 0x54, 0x39, 0x4e, 0x73, 0x63, 0x6b, 0x2f, 0x4e, 0x46, 0x7a, 0x72, - 0x42, 0x58, 0x52, 0x4f, 0x2b, 0x64, 0x71, 0x6b, 0x65, 0x42, 0x77, 0x44, - 0x55, 0x43, 0x76, 0x37, 0x62, 0x5a, 0x67, 0x57, 0x37, 0x4f, 0x78, 0x75, - 0x4f, 0x58, 0x30, 0x37, 0x4c, 0x54, 0x71, 0x66, 0x70, 0x35, 0x73, 0x0a, - 0x4f, 0x65, 0x47, 0x67, 0x75, 0x62, 0x75, 0x62, 0x69, 0x77, 0x59, 0x33, - 0x55, 0x64, 0x48, 0x59, 0x71, 0x2b, 0x4c, 0x39, 0x4a, 0x71, 0x49, 0x53, - 0x47, 0x31, 0x74, 0x4d, 0x34, 0x48, 0x65, 0x4b, 0x6a, 0x61, 0x48, 0x6a, - 0x75, 0x31, 0x4d, 0x44, 0x6a, 0x76, 0x48, 0x5a, 0x32, 0x44, 0x62, 0x6d, - 0x4c, 0x77, 0x55, 0x78, 0x75, 0x59, 0x61, 0x36, 0x4a, 0x5a, 0x44, 0x4b, - 0x57, 0x73, 0x37, 0x72, 0x0a, 0x49, 0x72, 0x64, 0x44, 0x77, 0x78, 0x33, - 0x4a, 0x77, 0x61, 0x63, 0x46, 0x36, 0x36, 0x68, 0x33, 0x59, 0x55, 0x57, - 0x36, 0x74, 0x7a, 0x55, 0x5a, 0x68, 0x7a, 0x74, 0x63, 0x6d, 0x51, 0x65, - 0x70, 0x50, 0x2f, 0x75, 0x37, 0x42, 0x67, 0x47, 0x72, 0x6b, 0x4f, 0x50, - 0x50, 0x70, 0x59, 0x41, 0x30, 0x4e, 0x45, 0x4a, 0x38, 0x30, 0x53, 0x65, - 0x41, 0x78, 0x37, 0x68, 0x69, 0x4e, 0x34, 0x76, 0x61, 0x0a, 0x65, 0x45, - 0x51, 0x4b, 0x6e, 0x52, 0x6e, 0x2b, 0x45, 0x70, 0x42, 0x4e, 0x36, 0x55, - 0x42, 0x61, 0x35, 0x66, 0x37, 0x4c, 0x6f, 0x4b, 0x38, 0x43, 0x41, 0x77, - 0x45, 0x41, 0x41, 0x51, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x45, 0x4e, 0x44, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4b, - 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a}; -static const unsigned int obs_pub_len = 800; - -/* ------------------------------------------------------------------------ */ - -static bool QuickWriteFile(const char *file, const void *data, size_t size) -try { - BPtr w_file; - if (os_utf8_to_wcs_ptr(file, 0, &w_file) == 0) - return false; - - WinHandle handle = CreateFileW(w_file, GENERIC_WRITE, 0, nullptr, - CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH, - nullptr); - - if (handle == INVALID_HANDLE_VALUE) - throw strprintf("Failed to open file '%s': %lu", file, - GetLastError()); - - DWORD written; - if (!WriteFile(handle, data, (DWORD)size, &written, nullptr)) - throw strprintf("Failed to write file '%s': %lu", file, - GetLastError()); - - return true; - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -static bool QuickReadFile(const char *file, string &data) -try { - BPtr w_file; - if (os_utf8_to_wcs_ptr(file, 0, &w_file) == 0) - return false; - - WinHandle handle = CreateFileW(w_file, GENERIC_READ, FILE_SHARE_READ, - nullptr, OPEN_EXISTING, 0, nullptr); - - if (handle == INVALID_HANDLE_VALUE) - throw strprintf("Failed to open file '%s': %lu", file, - GetLastError()); - - DWORD size = GetFileSize(handle, nullptr); - data.resize(size); - - DWORD read; - if (!ReadFile(handle, &data[0], size, &read, nullptr)) - throw strprintf("Failed to write file '%s': %lu", file, - GetLastError()); - - return true; - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -static void HashToString(const uint8_t *in, char *out) -{ - const char alphabet[] = "0123456789abcdef"; - - for (int i = 0; i != BLAKE2_HASH_LENGTH; ++i) { - out[2 * i] = alphabet[in[i] / 16]; - out[2 * i + 1] = alphabet[in[i] % 16]; - } - - out[BLAKE2_HASH_LENGTH * 2] = 0; -} - -static bool CalculateFileHash(const char *path, uint8_t *hash) -try { - blake2b_state blake2; - if (blake2b_init(&blake2, BLAKE2_HASH_LENGTH) != 0) - return false; - - BPtr w_path; - if (os_utf8_to_wcs_ptr(path, 0, &w_path) == 0) - return false; - - WinHandle handle = CreateFileW(w_path, GENERIC_READ, FILE_SHARE_READ, - nullptr, OPEN_EXISTING, 0, nullptr); - if (handle == INVALID_HANDLE_VALUE) - throw strprintf("Failed to open file '%s': %lu", path, - GetLastError()); - - vector buf; - buf.resize(65536); - - for (;;) { - DWORD read = 0; - if (!ReadFile(handle, buf.data(), (DWORD)buf.size(), &read, - nullptr)) - throw strprintf("Failed to read file '%s': %lu", path, - GetLastError()); - - if (!read) - break; - - if (blake2b_update(&blake2, buf.data(), read) != 0) - return false; - } - - if (blake2b_final(&blake2, hash, BLAKE2_HASH_LENGTH) != 0) - return false; - - return true; - -} catch (string &text) { - blog(LOG_DEBUG, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -/* ------------------------------------------------------------------------ */ - -static bool VerifyDigitalSignature(uint8_t *buf, size_t len, uint8_t *sig, - size_t sigLen) -{ - /* ASN of PEM public key */ - BYTE binaryKey[1024]; - DWORD binaryKeyLen = sizeof(binaryKey); - - /* Windows X509 public key info from ASN */ - LocalPtr publicPBLOB; - DWORD iPBLOBSize; - - /* RSA BLOB info from X509 public key */ - LocalPtr rsaPublicBLOB; - DWORD rsaPublicBLOBSize; - - /* Handle to public key */ - CryptKey keyOut; - - /* Handle to hash context */ - CryptHash hash; - - /* Signature in little-endian format */ - vector reversedSig; - - if (!CryptStringToBinaryA((LPCSTR)obs_pub, obs_pub_len, - CRYPT_STRING_BASE64HEADER, binaryKey, - &binaryKeyLen, nullptr, nullptr)) - return false; - - if (!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, - binaryKey, binaryKeyLen, - CRYPT_DECODE_ALLOC_FLAG, nullptr, &publicPBLOB, - &iPBLOBSize)) - return false; - - if (!CryptDecodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB, - publicPBLOB->PublicKey.pbData, - publicPBLOB->PublicKey.cbData, - CRYPT_DECODE_ALLOC_FLAG, nullptr, - &rsaPublicBLOB, &rsaPublicBLOBSize)) - return false; - - if (!CryptImportKey(provider, (const BYTE *)rsaPublicBLOB.get(), - rsaPublicBLOBSize, 0, 0, &keyOut)) - return false; - - if (!CryptCreateHash(provider, CALG_SHA_512, 0, 0, &hash)) - return false; - - if (!CryptHashData(hash, buf, (DWORD)len, 0)) - return false; - - /* Windows requires signature in little-endian. Every other crypto - * provider is big-endian of course. */ - reversedSig.resize(sigLen); - for (size_t i = 0; i < sigLen; i++) - reversedSig[i] = sig[sigLen - i - 1]; - - if (!CryptVerifySignature(hash, reversedSig.data(), (DWORD)sigLen, - keyOut, nullptr, 0)) - return false; - - return true; -} - -static inline void HexToByteArray(const char *hexStr, size_t hexLen, - vector &out) -{ - char ptr[3]; - - ptr[2] = 0; - - for (size_t i = 0; i < hexLen; i += 2) { - ptr[0] = hexStr[i]; - ptr[1] = hexStr[i + 1]; - out.push_back((uint8_t)strtoul(ptr, nullptr, 16)); - } -} - -static bool CheckDataSignature(const string &data, const char *name, - const char *hexSig, size_t sigLen) -try { - if (sigLen == 0 || sigLen > 0xFFFF || (sigLen & 1) != 0) - throw strprintf("Missing or invalid signature for %s", name); - - /* Convert TCHAR signature to byte array */ - vector signature; - signature.reserve(sigLen); - HexToByteArray(hexSig, sigLen, signature); - - if (!VerifyDigitalSignature((uint8_t *)data.data(), data.size(), - signature.data(), signature.size())) - throw strprintf("Signature check failed for %s", name); - - return true; - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -/* ------------------------------------------------------------------------ */ - -static bool FetchUpdaterModule(const char *url) -try { - long responseCode; - uint8_t updateFileHash[BLAKE2_HASH_LENGTH]; - vector extraHeaders; - - BPtr updateFilePath = - GetConfigPathPtr("obs-studio\\updates\\updater.exe"); - - if (CalculateFileHash(updateFilePath, updateFileHash)) { - char hashString[BLAKE2_HASH_STR_LENGTH]; - HashToString(updateFileHash, hashString); - - string header = "If-None-Match: "; - header += hashString; - extraHeaders.push_back(move(header)); - } - - string signature; - string error; - string data; - - bool success = GetRemoteFile(url, data, error, &responseCode, nullptr, - "", nullptr, extraHeaders, &signature); - - if (!success || (responseCode != 200 && responseCode != 304)) { - if (responseCode == 404) - return false; - - throw strprintf("Could not fetch '%s': %s", url, error.c_str()); - } - - /* A new file must be digitally signed */ - if (responseCode == 200) { - bool valid = CheckDataSignature(data, url, signature.data(), - signature.size()); - if (!valid) - throw string("Invalid updater module signature"); - - if (!QuickWriteFile(updateFilePath, data.data(), data.size())) - return false; - } - - return true; - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -/* ------------------------------------------------------------------------ */ - -#if defined(OBS_RELEASE_CANDIDATE) && OBS_RELEASE_CANDIDATE > 0 -#define CUR_VER \ - ((uint64_t)OBS_RELEASE_CANDIDATE_VER << 16ULL | OBS_RELEASE_CANDIDATE \ - << 8ULL) -#define PRE_RELEASE true -#elif OBS_BETA > 0 -#define CUR_VER ((uint64_t)OBS_BETA_VER << 16ULL | OBS_BETA) -#define PRE_RELEASE true -#elif defined(OBS_COMMIT) -#define CUR_VER 1 << 16ULL -#define CUR_COMMIT OBS_COMMIT -#define PRE_RELEASE true -#else -#define CUR_VER ((uint64_t)LIBOBS_API_VER << 16ULL) -#define PRE_RELEASE false -#endif - -#ifndef CUR_COMMIT -#define CUR_COMMIT "00000000" -#endif - -static bool ParseUpdateManifest(const char *manifest, bool *updatesAvailable, - string ¬es_str, uint64_t &updateVer, - string &branch) -try { - - string error; - Json root = Json::parse(manifest, error); - if (!error.empty()) - throw strprintf("Failed reading json string: %s", - error.c_str()); - - if (!root.is_object()) - throw string("Root of manifest is not an object"); - - int major = root["version_major"].int_value(); - int minor = root["version_minor"].int_value(); - int patch = root["version_patch"].int_value(); - int rc = root["rc"].int_value(); - int beta = root["beta"].int_value(); - string commit_hash = root["commit"].string_value(); - - if (major == 0 && commit_hash.empty()) - throw strprintf("Invalid version number: %d.%d.%d", major, - minor, patch); - - const Json ¬es = root["notes"]; - if (!notes.is_string()) - throw string("'notes' value invalid"); - - notes_str = notes.string_value(); - - const Json &packages = root["packages"]; - if (!packages.is_array()) - throw string("'packages' value invalid"); - - uint64_t cur_ver; - uint64_t new_ver; - - if (commit_hash.empty()) { - cur_ver = CUR_VER; - new_ver = MAKE_SEMANTIC_VERSION( - (uint64_t)major, (uint64_t)minor, (uint64_t)patch); - new_ver <<= 16; - /* RC builds are shifted so that rc1 and beta1 versions do not result - * in the same new_ver. */ - if (rc > 0) - new_ver |= (uint64_t)rc << 8; - else if (beta > 0) - new_ver |= (uint64_t)beta; - } else { - /* Test or nightly builds may not have a (valid) version number, - * so compare commit hashes instead. */ - cur_ver = stoul(CUR_COMMIT, nullptr, 16); - new_ver = stoul(commit_hash.substr(0, 8), nullptr, 16); - } - - updateVer = new_ver; - - /* When using a pre-release build or non-default branch we only check if - * the manifest version is different, so that it can be rolled-back. */ - if (branch != WIN_DEFAULT_BRANCH || PRE_RELEASE) - *updatesAvailable = new_ver != cur_ver; - else - *updatesAvailable = new_ver > cur_ver; - - return true; - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); - return false; -} - -#undef CUR_COMMIT -#undef CUR_VER -#undef PRE_RELEASE - -/* ------------------------------------------------------------------------ */ - -void GenerateGUID(string &guid) -{ - BYTE junk[20]; - - if (!CryptGenRandom(provider, sizeof(junk), junk)) - return; - - guid.resize(41); - HashToString(junk, &guid[0]); -} - -string GetProgramGUID() -{ - static mutex m; - lock_guard lock(m); - - /* NOTE: this is an arbitrary random number that we use to count the - * number of unique OBS installations and is not associated with any - * kind of identifiable information */ - const char *pguid = - config_get_string(GetGlobalConfig(), "General", "InstallGUID"); - string guid; - if (pguid) - guid = pguid; - - if (guid.empty()) { - GenerateGUID(guid); - - if (!guid.empty()) - config_set_string(GetGlobalConfig(), "General", - "InstallGUID", guid.c_str()); - } - - return guid; -} - -/* ------------------------------------------------------------------------ */ - -bool GetBranchAndUrl(string &selectedBranch, string &manifestUrl) -{ - const char *config_branch = - config_get_string(GetGlobalConfig(), "General", "UpdateBranch"); - if (!config_branch) - return true; - - bool found = false; - for (const UpdateBranch &branch : App()->GetBranches()) { - if (branch.name != config_branch) - continue; - /* A branch that is found but disabled will just silently fall back to - * the default. But if the branch was removed entirely, the user should - * be warned, so leave this false *only* if the branch was removed. */ - found = true; - - if (branch.is_enabled) { - selectedBranch = branch.name.toStdString(); - if (branch.name != WIN_DEFAULT_BRANCH) { - manifestUrl = WIN_MANIFEST_BASE_URL; - manifestUrl += "manifest_" + - branch.name.toStdString() + - ".json"; - } - } - break; - } - - return found; -} - -/* ------------------------------------------------------------------------ */ - -static bool -FetchAndVerifyFile(const char *name, const char *file, const char *url, - string &text, - const vector &extraHeaders = vector()) -{ - long responseCode; - vector headers; - string error; - string signature; - BYTE fileHash[BLAKE2_HASH_LENGTH]; - bool success; - - BPtr filePath = GetConfigPathPtr(file); - - if (!extraHeaders.empty()) { - headers.insert(headers.end(), extraHeaders.begin(), - extraHeaders.end()); - } - - /* ----------------------------------- * - * avoid downloading json again */ - - if (CalculateFileHash(filePath, fileHash)) { - char hashString[BLAKE2_HASH_STR_LENGTH]; - HashToString(fileHash, hashString); - - string header = "If-None-Match: "; - header += hashString; - headers.push_back(move(header)); - } - - /* ----------------------------------- * - * get current install GUID */ - - string guid = GetProgramGUID(); - - if (!guid.empty()) { - string header = "X-OBS2-GUID: "; - header += guid; - headers.push_back(move(header)); - } - - /* ----------------------------------- * - * get json from server */ - - success = GetRemoteFile(url, text, error, &responseCode, nullptr, "", - nullptr, headers, &signature); - - if (!success || (responseCode != 200 && responseCode != 304)) { - if (responseCode == 404) - return false; - - throw strprintf("Failed to fetch %s file: %s", name, - error.c_str()); - } - - /* ----------------------------------- * - * verify file signature */ - - if (responseCode == 200) { - success = CheckDataSignature(text, name, signature.data(), - signature.size()); - if (!success) - throw strprintf("Invalid %s signature", name); - } - - /* ----------------------------------- * - * write or load json */ - - if (responseCode == 200) { - if (!QuickWriteFile(filePath, text.data(), text.size())) - throw strprintf("Could not write file '%s'", - filePath.Get()); - } else { - if (!QuickReadFile(filePath, text)) - throw strprintf("Could not read file '%s'", - filePath.Get()); - } - - /* ----------------------------------- * - * success */ - return true; -} - -/* ------------------------------------------------------------------------ */ - -void AutoUpdateThread::infoMsg(const QString &title, const QString &text) -{ - OBSMessageBox::information(App()->GetMainWindow(), title, text); -} - -void AutoUpdateThread::info(const QString &title, const QString &text) -{ - QMetaObject::invokeMethod(this, "infoMsg", Qt::BlockingQueuedConnection, - Q_ARG(QString, title), Q_ARG(QString, text)); -} - -int AutoUpdateThread::queryUpdateSlot(bool localManualUpdate, - const QString &text) -{ - OBSUpdate updateDlg(App()->GetMainWindow(), localManualUpdate, text); - return updateDlg.exec(); -} - -int AutoUpdateThread::queryUpdate(bool localManualUpdate, const char *text_utf8) -{ - int ret = OBSUpdate::No; - QString text = text_utf8; - QMetaObject::invokeMethod(this, "queryUpdateSlot", - Qt::BlockingQueuedConnection, - Q_RETURN_ARG(int, ret), - Q_ARG(bool, localManualUpdate), - Q_ARG(QString, text)); - return ret; -} - -bool AutoUpdateThread::queryRepairSlot() -{ - QMessageBox::StandardButton res = OBSMessageBox::question( - App()->GetMainWindow(), QTStr("Updater.RepairConfirm.Title"), - QTStr("Updater.RepairConfirm.Text"), - QMessageBox::Yes | QMessageBox::Cancel); - - return res == QMessageBox::Yes; -} - -bool AutoUpdateThread::queryRepair() -{ - bool ret = false; - QMetaObject::invokeMethod(this, "queryRepairSlot", - Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, ret)); - return ret; -} - -void AutoUpdateThread::run() -try { - string text; - string branch = WIN_DEFAULT_BRANCH; - string manifestUrl = WIN_MANIFEST_URL; - vector extraHeaders; - bool updatesAvailable = false; - CryptProvider localProvider; - - struct FinishedTrigger { - inline ~FinishedTrigger() - { - QMetaObject::invokeMethod(App()->GetMainWindow(), - "updateCheckFinished"); - } - } finishedTrigger; - - /* ----------------------------------- * - * create signature provider */ - - if (!CryptAcquireContext(&localProvider, nullptr, MS_ENH_RSA_AES_PROV, - PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) - throw strprintf("CryptAcquireContext failed: %lu", - GetLastError()); - - provider = localProvider; - - /* ----------------------------------- * - * get branches from server */ - - if (FetchAndVerifyFile("branches", "obs-studio\\updates\\branches.json", - WIN_BRANCHES_URL, text)) - App()->SetBranchData(text); - - /* ----------------------------------- * - * get branches from server */ - - if (!GetBranchAndUrl(branch, manifestUrl)) { - config_set_string(GetGlobalConfig(), "General", "UpdateBranch", - WIN_DEFAULT_BRANCH); - info(QTStr("Updater.BranchNotFound.Title"), - QTStr("Updater.BranchNotFound.Text")); - } - - /* allow server to know if this was a manual update check in case - * we want to allow people to bypass a configured rollout rate */ - if (manualUpdate) - extraHeaders.emplace_back("X-OBS2-ManualUpdate: 1"); - - /* ----------------------------------- * - * get manifest from server */ - - text.clear(); - if (!FetchAndVerifyFile("manifest", - "obs-studio\\updates\\manifest.json", - manifestUrl.c_str(), text, extraHeaders)) - return; - - /* ----------------------------------- * - * check manifest for update */ - - string notes; - uint64_t updateVer = 0; - - if (!ParseUpdateManifest(text.c_str(), &updatesAvailable, notes, - updateVer, branch)) - throw string("Failed to parse manifest"); - - if (!updatesAvailable && !repairMode) { - if (manualUpdate) - info(QTStr("Updater.NoUpdatesAvailable.Title"), - QTStr("Updater.NoUpdatesAvailable.Text")); - return; - } else if (updatesAvailable && repairMode) { - info(QTStr("Updater.RepairButUpdatesAvailable.Title"), - QTStr("Updater.RepairButUpdatesAvailable.Text")); - return; - } - - /* ----------------------------------- * - * skip this version if set to skip */ - - uint64_t skipUpdateVer = config_get_uint(GetGlobalConfig(), "General", - "SkipUpdateVersion"); - if (!manualUpdate && updateVer == skipUpdateVer && !repairMode) - return; - - /* ----------------------------------- * - * fetch updater module */ - - if (!FetchUpdaterModule(WIN_UPDATER_URL)) - return; - - /* ----------------------------------- * - * query user for update */ - - if (repairMode) { - if (!queryRepair()) - return; - } else { - int queryResult = queryUpdate(manualUpdate, notes.c_str()); - - if (queryResult == OBSUpdate::No) { - if (!manualUpdate) { - long long t = (long long)time(nullptr); - config_set_int(GetGlobalConfig(), "General", - "LastUpdateCheck", t); - } - return; - - } else if (queryResult == OBSUpdate::Skip) { - config_set_uint(GetGlobalConfig(), "General", - "SkipUpdateVersion", updateVer); - return; - } - } - - /* ----------------------------------- * - * get working dir */ - - wchar_t cwd[MAX_PATH]; - GetModuleFileNameW(nullptr, cwd, _countof(cwd) - 1); - wchar_t *p = wcsrchr(cwd, '\\'); - if (p) - *p = 0; - - /* ----------------------------------- * - * execute updater */ - - BPtr updateFilePath = - GetConfigPathPtr("obs-studio\\updates\\updater.exe"); - BPtr wUpdateFilePath; - - size_t size = os_utf8_to_wcs_ptr(updateFilePath, 0, &wUpdateFilePath); - if (!size) - throw string("Could not convert updateFilePath to wide"); - - /* note, can't use CreateProcess to launch as admin. */ - SHELLEXECUTEINFO execInfo = {}; - - execInfo.cbSize = sizeof(execInfo); - execInfo.lpFile = wUpdateFilePath; - - string parameters = ""; - if (App()->IsPortableMode()) - parameters += "--portable"; - if (branch != WIN_DEFAULT_BRANCH) - parameters += "--branch=" + branch; - - BPtr lpParameters; - size = os_utf8_to_wcs_ptr(parameters.c_str(), 0, &lpParameters); - if (!size && !parameters.empty()) - throw string("Could not convert parameters to wide"); - - execInfo.lpParameters = lpParameters; - execInfo.lpDirectory = cwd; - execInfo.nShow = SW_SHOWNORMAL; - - if (!ShellExecuteEx(&execInfo)) { - QString msg = QTStr("Updater.FailedToLaunch"); - info(msg, msg); - throw strprintf("Can't launch updater '%s': %d", - updateFilePath.Get(), GetLastError()); - } - - /* force OBS to perform another update check immediately after updating - * in case of issues with the new version */ - config_set_int(GetGlobalConfig(), "General", "LastUpdateCheck", 0); - config_set_int(GetGlobalConfig(), "General", "SkipUpdateVersion", 0); - - QMetaObject::invokeMethod(App()->GetMainWindow(), "close"); - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); -} - -/* ------------------------------------------------------------------------ */ - -void WhatsNewInfoThread::run() -try { - string text; - CryptProvider localProvider; - /* ----------------------------------- * - * create signature provider */ - - if (!CryptAcquireContext(&localProvider, nullptr, MS_ENH_RSA_AES_PROV, - PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) - throw strprintf("CryptAcquireContext failed: %lu", - GetLastError()); - - provider = localProvider; - - if (FetchAndVerifyFile("whatsnew", "obs-studio\\updates\\whatsnew.json", - WIN_WHATSNEW_URL, text)) { - emit Result(QString::fromStdString(text)); - } - -} catch (string &text) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); -} - -/* ------------------------------------------------------------------------ */ - -void WhatsNewBrowserInitThread::run() -{ -#ifdef BROWSER_AVAILABLE - cef->wait_for_browser_init(); -#endif - emit Result(url); -} diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 743dfcd56affbf..bd1d306862dc99 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -77,12 +77,13 @@ #include #ifdef _WIN32 -#include "win-update/win-update.hpp" +#include "update/win-update.hpp" +#include "update/shared-update.hpp" #include "windows.h" #endif #if !defined(_WIN32) && defined(WHATSNEW_ENABLED) -#include "nix-update/nix-update.hpp" +#include "update/shared-update.hpp" #endif #include "ui_OBSBasic.h" From 634fd3231ca97d7890ecf1e0ff0be396bdcdd5ef Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 5 Nov 2022 22:25:59 +0100 Subject: [PATCH 0199/2225] CI/cmake: Update Sparkle to 2.3.2 --- .github/workflows/main.yml | 6 ++++-- CI/macos/02_build_obs.sh | 5 +++++ cmake/Modules/ObsDefaults_macOS.cmake | 5 ++++- cmake/Modules/ObsHelpers_macOS.cmake | 14 ++------------ cmake/bundle/macOS/bundleutils.cmake | 15 --------------- 5 files changed, 15 insertions(+), 30 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0d9bf9518c553d..8b3e73c3573eab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -92,8 +92,10 @@ jobs: env: MACOSX_DEPLOYMENT_TARGET_X86_64: '10.15' MACOSX_DEPLOYMENT_TARGET_ARM64: '11.0' - SPARKLE_VERSION: '1.26.0' - SPARKLE_HASH: '8312cbf7528297a49f1b97692c33cb8d33254c396dc51be394e9484e4b6833a0' + SPARKLE_VERSION: '2.3.2' + SPARKLE_HASH: '2b3fe6918ca20a83729aad34f8f693a678b714a17d33b5f13ca2d25edfa7eed3' + SPARKLE_APPCAST_URL: 'https://obsproject.com/osx_update/updates_${{ matrix.arch }}_v2.xml' + SPARKLE_PUBLIC_KEY: 'HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM=' BLOCKED_FORMULAS: 'speexdsp curl php composer' CODESIGN_IDENT: '-' HAVE_CODESIGN_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY != '' && secrets.MACOS_SIGNING_CERT != '' }} diff --git a/CI/macos/02_build_obs.sh b/CI/macos/02_build_obs.sh index 073faa3322378c..23c347ec325cd5 100755 --- a/CI/macos/02_build_obs.sh +++ b/CI/macos/02_build_obs.sh @@ -69,6 +69,10 @@ _configure_obs() { UNITTEST_OPTIONS="-DENABLE_UNIT_TESTS=ON" fi + if [ "${SPARKLE_APPCAST_URL}" -a "${SPARKLE_PUBLIC_KEY}" ]; then + SPARKLE_OPTIONS="-DSPARKLE_APPCAST_URL=\"${SPARKLE_APPCAST_URL}\" -DSPARKLE_PUBLIC_KEY=\"${SPARKLE_PUBLIC_KEY}\"" + fi + cmake -S . -B ${BUILD_DIR} -G ${GENERATOR} \ -DCEF_ROOT_DIR="${DEPS_BUILD_DIR}/cef_binary_${MACOS_CEF_BUILD_VERSION:-${CI_MACOS_CEF_VERSION}}_macos_${ARCH:-x86_64}" \ -DENABLE_BROWSER=ON \ @@ -86,6 +90,7 @@ _configure_obs() { ${TWITCH_OPTIONS} \ ${RESTREAM_OPTIONS} \ ${UNITTEST_OPTIONS} \ + ${SPARKLE_OPTIONS} \ ${CI:+-DBUILD_FOR_DISTRIBUTION=${BUILD_FOR_DISTRIBUTION} -DOBS_BUILD_NUMBER=${GITHUB_RUN_ID}} \ ${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR} } diff --git a/cmake/Modules/ObsDefaults_macOS.cmake b/cmake/Modules/ObsDefaults_macOS.cmake index 37641355950969..2822d6f85204b7 100644 --- a/cmake/Modules/ObsDefaults_macOS.cmake +++ b/cmake/Modules/ObsDefaults_macOS.cmake @@ -138,10 +138,13 @@ macro(setup_obs_project) endif() if(BUILD_FOR_DISTRIBUTION OR DEFINED ENV{CI}) - set_option(ENABLE_SPARKLE_UPDATER ON) set_option(ENABLE_RTMPS ON) endif() + if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) + set_option(ENABLE_SPARKLE_UPDATER ON) + endif() + set(CPACK_PACKAGE_NAME "OBS") set(CPACK_PACKAGE_VENDOR "${OBS_WEBSITE}") set(CPACK_GENERATOR "DragNDrop") diff --git a/cmake/Modules/ObsHelpers_macOS.cmake b/cmake/Modules/ObsHelpers_macOS.cmake index 8e7f4c8b551b0f..fb64515eca1ffb 100644 --- a/cmake/Modules/ObsHelpers_macOS.cmake +++ b/cmake/Modules/ObsHelpers_macOS.cmake @@ -360,7 +360,7 @@ function(setup_obs_bundle target) POST_BUILD COMMAND /bin/sh -c - "plutil -replace SUFeedURL -string https://obsproject.com/osx_update/stable/updates_${CMAKE_OSX_ARCHITECTURES}.xml \"$/Info.plist\"" + "plutil -replace SUFeedURL -string ${SPARKLE_APPCAST_URL} \"$/Info.plist\"" VERBATIM) add_custom_command( @@ -368,19 +368,9 @@ function(setup_obs_bundle target) POST_BUILD COMMAND /bin/sh -c - "plutil -replace SUPublicDSAKeyFile -string OBSPublicDSAKey.pem \"$/Info.plist\"" + "plutil -replace SUPublicEDKey -string \"${SPARKLE_PUBLIC_KEY}\" \"$/Info.plist\"" VERBATIM) - target_sources( - ${target} - PRIVATE "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/OBSPublicDSAKey.pem") - set_source_files_properties( - "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/OBSPublicDSAKey.pem" - PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") - source_group( - "Resources" - FILES "${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/OBSPublicDSAKey.pem") - install( DIRECTORY ${SPARKLE} DESTINATION $.app/Contents/Frameworks diff --git a/cmake/bundle/macOS/bundleutils.cmake b/cmake/bundle/macOS/bundleutils.cmake index 895c8cb5b6389d..780506d7d379ca 100644 --- a/cmake/bundle/macOS/bundleutils.cmake +++ b/cmake/bundle/macOS/bundleutils.cmake @@ -111,21 +111,6 @@ endif() # Codesign all binaries inside-out message(STATUS "OBS: Codesign dependencies") -if(EXISTS - "${CMAKE_INSTALL_PREFIX}/${_BUNDLENAME}/Contents/Frameworks/Sparkle.framework" -) - execute_process( - COMMAND - /usr/bin/codesign --remove-signature - "${CMAKE_INSTALL_PREFIX}/${_BUNDLENAME}/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app" - ${_VERBOSE_FLAG} ${_QUIET_FLAG}) - execute_process( - COMMAND - /usr/bin/codesign --force --sign "${_CODESIGN_IDENTITY}" --deep --options - runtime - "${CMAKE_INSTALL_PREFIX}/${_BUNDLENAME}/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app" - ${_VERBOSE_FLAG} ${_QUIET_FLAG}) -endif() if(EXISTS "${CMAKE_INSTALL_PREFIX}/${_BUNDLENAME}/Contents/Frameworks/Chromium Embedded Framework.framework" ) From 12a27d8b99473d00d8939a78601c3ebcd6b2a2a9 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 5 Nov 2022 22:32:43 +0100 Subject: [PATCH 0200/2225] UI: Add update channels (macOS) --- UI/CMakeLists.txt | 23 +++--- UI/obs-app.cpp | 14 +++- UI/sparkle-updater.mm | 141 ----------------------------------- UI/update/mac-update.cpp | 87 +++++++++++++++++++++ UI/update/mac-update.hpp | 51 +++++++++++++ UI/update/sparkle-updater.mm | 95 +++++++++++++++++++++++ UI/window-basic-main.cpp | 49 +++++++++--- UI/window-basic-main.hpp | 1 + UI/window-basic-settings.cpp | 14 ++-- 9 files changed, 300 insertions(+), 175 deletions(-) delete mode 100644 UI/sparkle-updater.mm create mode 100644 UI/update/mac-update.cpp create mode 100644 UI/update/mac-update.hpp create mode 100644 UI/update/sparkle-updater.mm diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 858817a49729a0..0941dc0852fc52 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -430,16 +430,6 @@ elseif(OS_MACOS) target_link_libraries(obs PRIVATE ${APPKIT} ${AVFOUNDATION} ${APPLICATIONSERVICES}) - if(ENABLE_SPARKLE_UPDATER) - find_library(SPARKLE Sparkle) - mark_as_advanced(SPARKLE) - - target_sources(obs PRIVATE sparkle-updater.mm) - target_compile_definitions(obs PRIVATE ENABLE_SPARKLE_UPDATER) - - target_link_libraries(obs PRIVATE ${SPARKLE}) - endif() - target_sources(obs PRIVATE platform-osx.mm) target_sources(obs PRIVATE forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp) @@ -454,6 +444,19 @@ elseif(OS_MACOS) PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mac.mm update/shared-update.cpp update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) + + if(ENABLE_SPARKLE_UPDATER) + find_library(SPARKLE Sparkle) + mark_as_advanced(SPARKLE) + + target_sources(obs PRIVATE update/mac-update.cpp update/mac-update.hpp + update/sparkle-updater.mm) + target_compile_definitions(obs PRIVATE ENABLE_SPARKLE_UPDATER) + target_link_libraries(obs PRIVATE ${SPARKLE}) + # Enable Automatic Reference Counting for Sparkle wrapper + set_source_files_properties(update/sparkle-updater.mm + PROPERTIES COMPILE_FLAGS -fobjc-arc) + endif() endif() set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index a45624a1dce55a..0deda133bd1c71 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -54,7 +54,6 @@ #include #ifdef _WIN32 -#include #include #include #else @@ -62,6 +61,10 @@ #include #endif +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) +#include +#endif + #if !defined(_WIN32) && !defined(__APPLE__) #include #include @@ -1268,7 +1271,7 @@ bool OBSApp::InitTheme() return SetTheme("System"); } -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) void ParseBranchesJson(const std::string &jsonString, vector &out, std::string &error) { @@ -1281,6 +1284,9 @@ void ParseBranchesJson(const std::string &jsonString, vector &out, #ifdef _WIN32 if (!item["windows"].bool_value()) continue; +#elif defined(__APPLE__) + if (!item["macos"].bool_value()) + continue; #endif UpdateBranch branch = { @@ -1329,7 +1335,7 @@ bool LoadBranchesFile(vector &out) void OBSApp::SetBranchData(const string &data) { -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) string error; vector result; @@ -1356,7 +1362,7 @@ std::vector OBSApp::GetBranches() /* Always ensure the default branch exists */ out.push_back(UpdateBranch{"stable", "", "", true, true}); -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) if (!branches_loaded) { vector result; if (LoadBranchesFile(result)) diff --git a/UI/sparkle-updater.mm b/UI/sparkle-updater.mm deleted file mode 100644 index 932a3a70599c8d..00000000000000 --- a/UI/sparkle-updater.mm +++ /dev/null @@ -1,141 +0,0 @@ -#import -#import - -static inline bool equali(NSString *a, NSString *b) -{ - return a && b && [a caseInsensitiveCompare:b] == NSOrderedSame; -} - -@interface OBSSparkleUpdateDelegate - : NSObject { -} -@property (nonatomic) bool updateToUndeployed; -@end - -@implementation OBSSparkleUpdateDelegate { -} - -@synthesize updateToUndeployed; - -- (SUAppcastItem *)bestValidUpdateWithDeltasInAppcast:(SUAppcast *)appcast - forUpdater:(SUUpdater *)updater -{ - SUAppcastItem *item = appcast.items.firstObject; - if (!appcast.items.firstObject) - return nil; - - SUAppcastItem *app = nil, *mpkg = nil; - for (SUAppcastItem *item in appcast.items) { - NSString *deployed = item.propertiesDictionary[@"ce:deployed"]; - if (deployed && !(deployed.boolValue || updateToUndeployed)) - continue; - - NSString *type = item.propertiesDictionary[@"ce:packageType"]; - if (!mpkg && (!type || equali(type, @"mpkg"))) - mpkg = item; - else if (!app && type && equali(type, @"app")) - app = item; - - if (app && mpkg) - break; - } - - if (app) - item = app; - - NSBundle *host = updater.hostBundle; - if (mpkg && (!app || equali(host.bundlePath, @"/Applications/OBS.app"))) - item = mpkg; - - NSMutableDictionary *dict = [NSMutableDictionary - dictionaryWithDictionary:item.propertiesDictionary]; - NSString *build = [host objectForInfoDictionaryKey:@"CFBundleVersion"]; - NSString *url = dict[@"sparkle:releaseNotesLink"]; - dict[@"sparkle:releaseNotesLink"] = - [url stringByAppendingFormat:@"#%@", build]; - - return [[SUAppcastItem alloc] initWithDictionary:dict]; -} - -- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast - forUpdater:(SUUpdater *)updater -{ - SUAppcastItem *selected = [self - bestValidUpdateWithDeltasInAppcast:appcast - forUpdater:updater]; - - NSBundle *host = updater.hostBundle; - NSString *build = [host objectForInfoDictionaryKey:@"CFBundleVersion"]; - SUAppcastItem *deltaUpdate = [selected deltaUpdates][build]; - if (deltaUpdate) - return deltaUpdate; - - return selected; -} - -- (NSString *)feedURLStringForUpdater:(SUUpdater *)updater -{ - //URL from Info.plist takes precedence because there may be bundles with - //differing feed URLs on the system - NSBundle *bundle = updater.hostBundle; - return [bundle objectForInfoDictionaryKey:@"SUFeedURL"]; -} - -- (NSComparisonResult)compareVersion:(NSString *)versionA - toVersion:(NSString *)versionB -{ - if (![versionA isEqual:versionB]) - return NSOrderedAscending; - return NSOrderedSame; -} - -- (id)versionComparatorForUpdater:(SUUpdater *)__unused - updater -{ - return self; -} - -@end - -static inline bool bundle_matches(NSBundle *bundle) -{ - if (!bundle.executablePath) - return false; - - NSRange r = [bundle.executablePath rangeOfString:@"Contents/MacOS/"]; - return [bundle.bundleIdentifier isEqual:@"com.obsproject.obs-studio"] && - r.location != NSNotFound; -} - -static inline NSBundle *find_bundle() -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSString *path = [fm currentDirectoryPath]; - NSString *prev = path; - do { - NSBundle *bundle = [NSBundle bundleWithPath:path]; - if (bundle_matches(bundle)) - return bundle; - - prev = path; - path = [path stringByDeletingLastPathComponent]; - } while (![prev isEqual:path]); - return nil; -} - -static SUUpdater *updater; - -static OBSSparkleUpdateDelegate *delegate; - -void init_sparkle_updater(bool update_to_undeployed) -{ - updater = [SUUpdater updaterForBundle:find_bundle()]; - delegate = [[OBSSparkleUpdateDelegate alloc] init]; - delegate.updateToUndeployed = update_to_undeployed; - updater.delegate = delegate; -} - -void trigger_sparkle_update() -{ - [updater checkForUpdates:nil]; -} diff --git a/UI/update/mac-update.cpp b/UI/update/mac-update.cpp new file mode 100644 index 00000000000000..717fb0c75f6461 --- /dev/null +++ b/UI/update/mac-update.cpp @@ -0,0 +1,87 @@ +#include "update-helpers.hpp" +#include "shared-update.hpp" +#include "qt-wrappers.hpp" +#include "mac-update.hpp" +#include "obs-app.hpp" + +#include + +#include + +/* ------------------------------------------------------------------------ */ + +#ifndef MAC_BRANCHES_URL +#define MAC_BRANCHES_URL "https://obsproject.com/update_studio/branches.json" +#endif + +#ifndef MAC_DEFAULT_BRANCH +#define MAC_DEFAULT_BRANCH "stable" +#endif + +/* ------------------------------------------------------------------------ */ + +bool GetBranch(std::string &selectedBranch) +{ + const char *config_branch = + config_get_string(GetGlobalConfig(), "General", "UpdateBranch"); + if (!config_branch) + return true; + + bool found = false; + for (const UpdateBranch &branch : App()->GetBranches()) { + if (branch.name != config_branch) + continue; + /* A branch that is found but disabled will just silently fall back to + * the default. But if the branch was removed entirely, the user should + * be warned, so leave this false *only* if the branch was removed. */ + found = true; + + if (branch.is_enabled) { + selectedBranch = branch.name.toStdString(); + } + break; + } + + return found; +} + +/* ------------------------------------------------------------------------ */ + +void MacUpdateThread::infoMsg(const QString &title, const QString &text) +{ + OBSMessageBox::information(App()->GetMainWindow(), title, text); +} + +void MacUpdateThread::info(const QString &title, const QString &text) +{ + QMetaObject::invokeMethod(this, "infoMsg", Qt::BlockingQueuedConnection, + Q_ARG(QString, title), Q_ARG(QString, text)); +} + +void MacUpdateThread::run() +try { + std::string text; + std::string branch = MAC_DEFAULT_BRANCH; + + /* ----------------------------------- * + * get branches from server */ + + if (FetchAndVerifyFile("branches", "obs-studio/updates/branches.json", + MAC_BRANCHES_URL, &text)) + App()->SetBranchData(text); + + /* ----------------------------------- * + * Validate branch selection */ + + if (!GetBranch(branch)) { + config_set_string(GetGlobalConfig(), "General", "UpdateBranch", + MAC_DEFAULT_BRANCH); + info(QTStr("Updater.BranchNotFound.Title"), + QTStr("Updater.BranchNotFound.Text")); + } + + emit Result(QString::fromStdString(branch), manualUpdate); + +} catch (std::string &text) { + blog(LOG_WARNING, "%s: %s", __FUNCTION__, text.c_str()); +} diff --git a/UI/update/mac-update.hpp b/UI/update/mac-update.hpp new file mode 100644 index 00000000000000..cedac60ebc3cde --- /dev/null +++ b/UI/update/mac-update.hpp @@ -0,0 +1,51 @@ +#ifndef MAC_UPDATER_H +#define MAC_UPDATER_H + +#include + +#include +#include +#include + +class QAction; + +class MacUpdateThread : public QThread { + Q_OBJECT + + bool manualUpdate; + + virtual void run() override; + + void info(const QString &title, const QString &text); + +signals: + void Result(const QString &branch, bool manual); + +private slots: + void infoMsg(const QString &title, const QString &text); + +public: + MacUpdateThread(bool manual) : manualUpdate(manual) {} +}; + +#ifdef __OBJC__ +@class OBSUpdateDelegate; +#endif + +class OBSSparkle : public QObject { + Q_OBJECT + +public: + OBSSparkle(const char *branch, QAction *checkForUpdatesAction); + void setBranch(const char *branch); + void checkForUpdates(bool manualCheck); + +private: +#ifdef __OBJC__ + OBSUpdateDelegate *updaterDelegate; +#else + void *updaterDelegate; +#endif +}; + +#endif diff --git a/UI/update/sparkle-updater.mm b/UI/update/sparkle-updater.mm new file mode 100644 index 00000000000000..ce253d1b6e8940 --- /dev/null +++ b/UI/update/sparkle-updater.mm @@ -0,0 +1,95 @@ +#include "mac-update.hpp" + +#include + +#import +#import + +@interface OBSUpdateDelegate : NSObject { +} +@property (copy) NSString *branch; +@property (nonatomic) SPUStandardUpdaterController *updaterController; +@end + +@implementation OBSUpdateDelegate { +} + +@synthesize branch; + +- (nonnull NSSet *)allowedChannelsForUpdater: + (nonnull SPUUpdater *)updater +{ + return [NSSet setWithObject:branch]; +} + +- (void)observeCanCheckForUpdatesWithAction:(QAction *)action +{ + [_updaterController.updater + addObserver:self + forKeyPath:NSStringFromSelector(@selector(canCheckForUpdates)) + options:(NSKeyValueObservingOptionInitial | + NSKeyValueObservingOptionNew) + context:(void *)action]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context +{ + if ([keyPath isEqualToString:NSStringFromSelector( + @selector(canCheckForUpdates))]) { + QAction *menuAction = (QAction *)context; + menuAction->setEnabled( + _updaterController.updater.canCheckForUpdates); + } else { + [super observeValueForKeyPath:keyPath + ofObject:object + change:change + context:context]; + } +} + +- (void)dealloc +{ + @autoreleasepool { + [_updaterController.updater + removeObserver:self + forKeyPath:NSStringFromSelector( + @selector(canCheckForUpdates))]; + } +} + +@end + +OBSSparkle::OBSSparkle(const char *branch, QAction *checkForUpdatesAction) +{ + @autoreleasepool { + updaterDelegate = [[OBSUpdateDelegate alloc] init]; + updaterDelegate.branch = [NSString stringWithUTF8String:branch]; + updaterDelegate.updaterController = + [[SPUStandardUpdaterController alloc] + initWithStartingUpdater:YES + updaterDelegate:updaterDelegate + userDriverDelegate:nil]; + [updaterDelegate observeCanCheckForUpdatesWithAction: + checkForUpdatesAction]; + } +} + +void OBSSparkle::setBranch(const char *branch) +{ + updaterDelegate.branch = [NSString stringWithUTF8String:branch]; +} + +void OBSSparkle::checkForUpdates(bool manualCheck) +{ + @autoreleasepool { + if (manualCheck) { + [updaterDelegate.updaterController checkForUpdates:nil]; + } else { + [updaterDelegate.updaterController + .updater checkForUpdatesInBackground]; + } + } +} diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index bd1d306862dc99..b0f19643d258dd 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -86,6 +86,10 @@ #include "update/shared-update.hpp" #endif +#ifdef ENABLE_SPARKLE_UPDATER +#include "update/mac-update.hpp" +#endif + #include "ui_OBSBasic.h" #include "ui_ColorSelect.h" @@ -2041,7 +2045,8 @@ void OBSBasic::OBSInit() QMetaObject::invokeMethod(this, "on_autoConfigure_triggered", Qt::QueuedConnection); -#if defined(_WIN32) && (OBS_RELEASE_CANDIDATE > 0 || OBS_BETA > 0) +#if (defined(_WIN32) || defined(__APPLE__)) && \ + (OBS_RELEASE_CANDIDATE > 0 || OBS_BETA > 0) /* Automatically set branch to "beta" the first time a pre-release build is run. */ if (!config_get_bool(App()->GlobalConfig(), "General", "AutoBetaOptIn")) { @@ -3720,11 +3725,6 @@ bool OBSBasic::QueryRemoveSource(obs_source_t *source) #define UPDATE_CHECK_INTERVAL (60 * 60 * 24 * 4) /* 4 days */ -#if defined(ENABLE_SPARKLE_UPDATER) -void init_sparkle_updater(bool update_to_undeployed); -void trigger_sparkle_update(); -#endif - void OBSBasic::TimedCheckForUpdates() { if (App()->IsUpdaterDisabled()) @@ -3734,8 +3734,7 @@ void OBSBasic::TimedCheckForUpdates() return; #if defined(ENABLE_SPARKLE_UPDATER) - init_sparkle_updater(config_get_bool(App()->GlobalConfig(), "General", - "UpdateToUndeployed")); + CheckForUpdates(false); #elif _WIN32 long long lastUpdate = config_get_int(App()->GlobalConfig(), "General", "LastUpdateCheck"); @@ -3758,20 +3757,46 @@ void OBSBasic::TimedCheckForUpdates() void OBSBasic::CheckForUpdates(bool manualUpdate) { -#if defined(ENABLE_SPARKLE_UPDATER) - trigger_sparkle_update(); -#elif _WIN32 +#if _WIN32 ui->actionCheckForUpdates->setEnabled(false); ui->actionRepair->setEnabled(false); if (updateCheckThread && updateCheckThread->isRunning()) return; - updateCheckThread.reset(new AutoUpdateThread(manualUpdate)); updateCheckThread->start(); +#elif defined(ENABLE_SPARKLE_UPDATER) + ui->actionCheckForUpdates->setEnabled(false); + + if (updateCheckThread && updateCheckThread->isRunning()) + return; + + MacUpdateThread *mut = new MacUpdateThread(manualUpdate); + connect(mut, &MacUpdateThread::Result, this, + &OBSBasic::MacBranchesFetched, Qt::QueuedConnection); + updateCheckThread.reset(mut); + updateCheckThread->start(); #endif + UNUSED_PARAMETER(manualUpdate); +} + +void OBSBasic::MacBranchesFetched(const QString &branch, bool manualUpdate) +{ +#ifdef ENABLE_SPARKLE_UPDATER + static OBSSparkle *updater; + if (!updater) { + updater = new OBSSparkle(QT_TO_UTF8(branch), + ui->actionCheckForUpdates); + return; + } + + updater->setBranch(QT_TO_UTF8(branch)); + updater->checkForUpdates(manualUpdate); +#else + UNUSED_PARAMETER(branch); UNUSED_PARAMETER(manualUpdate); +#endif } void OBSBasic::updateCheckFinished() diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 7f096b18238ff7..e2c72ddbd24e7c 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -541,6 +541,7 @@ class OBSBasic : public OBSMainWindow { obs_data_array_t *SaveProjectors(); void LoadSavedProjectors(obs_data_array_t *savedProjectors); + void MacBranchesFetched(const QString &branch, bool manualUpdate); void ReceivedIntroJson(const QString &text); void ShowWhatsNew(const QString &url); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 0ce8800ab8302f..e51d88ce3b0771 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -583,9 +583,6 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->updateChannelBox = nullptr; delete ui->updateSettingsGroupBox; ui->updateSettingsGroupBox = nullptr; -#elif defined(__APPLE__) - delete ui->updateChannelBox; - ui->updateChannelBox = nullptr; delete ui->updateChannelLabel; ui->updateChannelLabel = nullptr; #else @@ -1207,7 +1204,7 @@ void OBSBasicSettings::LoadThemeList() ui->theme->setCurrentIndex(idx); } -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) void TranslateBranchInfo(const QString &name, QString &displayName, QString &description) { @@ -1225,7 +1222,7 @@ void TranslateBranchInfo(const QString &name, QString &displayName, void OBSBasicSettings::LoadBranchesList() { -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) bool configBranchRemoved = true; QString configBranch = config_get_string(GetGlobalConfig(), "General", "UpdateBranch"); @@ -1286,7 +1283,7 @@ void OBSBasicSettings::LoadGeneralSettings() "EnableAutoUpdates"); ui->enableAutoUpdates->setChecked(enableAutoUpdates); -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) LoadBranchesList(); #endif #endif @@ -3126,7 +3123,7 @@ void OBSBasicSettings::SaveGeneralSettings() "EnableAutoUpdates", ui->enableAutoUpdates->isChecked()); #endif -#ifdef _WIN32 +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) int branchIdx = ui->updateChannelBox->currentIndex(); QString branchName = ui->updateChannelBox->itemData(branchIdx).toString(); @@ -3136,7 +3133,8 @@ void OBSBasicSettings::SaveGeneralSettings() QT_TO_UTF8(branchName)); forceUpdateCheck = true; } - +#endif +#ifdef _WIN32 if (ui->hideOBSFromCapture && WidgetChanged(ui->hideOBSFromCapture)) { bool hide_window = ui->hideOBSFromCapture->isChecked(); config_set_bool(GetGlobalConfig(), "BasicWindow", From 9d71d2f7fdb331839f4af6a6d1a91dddf3537c5c Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Feb 2023 19:37:59 +0100 Subject: [PATCH 0201/2225] cmake: Remove ENABLE_SPARKLE_UPDATER option Since public key and appcast are now options we simply rely on those to decide whether or not to enable Sparkle. --- CMakeLists.txt | 4 ---- UI/CMakeLists.txt | 2 +- cmake/Modules/ObsDefaults_macOS.cmake | 4 ---- cmake/Modules/ObsHelpers_macOS.cmake | 2 +- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 176553c0e4b68d..ddb72ed671b627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,10 +52,6 @@ if(OS_WINDOWS) "Build a multiarch installer (needs to run independently after both archs have compiled) (Windows)" OFF) -elseif(OS_MACOS) - option(ENABLE_SPARKLE_UPDATER "Enable Sparkle framework for updates (macOS)" - OFF) - elseif(OS_POSIX) option(LINUX_PORTABLE "Build portable version (Linux)" OFF) option(USE_XDG "Utilize XDG Base Directory Specification (Linux)" ON) diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 0941dc0852fc52..c7083bb1f364d9 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -445,7 +445,7 @@ elseif(OS_MACOS) update/shared-update.cpp update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) - if(ENABLE_SPARKLE_UPDATER) + if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) find_library(SPARKLE Sparkle) mark_as_advanced(SPARKLE) diff --git a/cmake/Modules/ObsDefaults_macOS.cmake b/cmake/Modules/ObsDefaults_macOS.cmake index 2822d6f85204b7..374f9134bdbb11 100644 --- a/cmake/Modules/ObsDefaults_macOS.cmake +++ b/cmake/Modules/ObsDefaults_macOS.cmake @@ -141,10 +141,6 @@ macro(setup_obs_project) set_option(ENABLE_RTMPS ON) endif() - if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) - set_option(ENABLE_SPARKLE_UPDATER ON) - endif() - set(CPACK_PACKAGE_NAME "OBS") set(CPACK_PACKAGE_VENDOR "${OBS_WEBSITE}") set(CPACK_GENERATOR "DragNDrop") diff --git a/cmake/Modules/ObsHelpers_macOS.cmake b/cmake/Modules/ObsHelpers_macOS.cmake index fb64515eca1ffb..2154fd714b2333 100644 --- a/cmake/Modules/ObsHelpers_macOS.cmake +++ b/cmake/Modules/ObsHelpers_macOS.cmake @@ -354,7 +354,7 @@ function(setup_obs_bundle target) set(_CODESIGN_ENTITLEMENTS \"${CMAKE_SOURCE_DIR}/cmake/bundle/macOS\")" COMPONENT obs_resources) - if(ENABLE_SPARKLE_UPDATER) + if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) add_custom_command( TARGET ${target} POST_BUILD From 9e6a482c66cbf4c4fc515943cb5f862cd437dd97 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 15 Feb 2023 11:12:07 +0100 Subject: [PATCH 0202/2225] UI: Fix button callback in OBSPropertiesView created with an id Before calling the button callback, two values are null-checked but when the property is created with an id (const char*). Those values are null which prevent the callback from being called. --- UI/properties-view.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/UI/properties-view.cpp b/UI/properties-view.cpp index c596c06964ad3f..d46f9ec80e6435 100644 --- a/UI/properties-view.cpp +++ b/UI/properties-view.cpp @@ -1971,13 +1971,12 @@ void WidgetInfo::ButtonClicked() } return; } - if (view->rawObj || view->weakObj) { - OBSObject strongObj = view->GetObject(); - void *obj = strongObj ? strongObj.Get() : view->rawObj; - if (obs_property_button_clicked(property, obj)) { - QMetaObject::invokeMethod(view, "RefreshProperties", - Qt::QueuedConnection); - } + + OBSObject strongObj = view->GetObject(); + void *obj = strongObj ? strongObj.Get() : view->rawObj; + if (obs_property_button_clicked(property, obj)) { + QMetaObject::invokeMethod(view, "RefreshProperties", + Qt::QueuedConnection); } } From e438037960b65d491a5ae4f0bd687b8ffb203e95 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Wed, 25 Jan 2023 15:11:59 +0100 Subject: [PATCH 0203/2225] UI: Use native color dialog on macOS --- UI/context-bar-controls.cpp | 6 ++++-- UI/properties-view.cpp | 13 ++++++++----- UI/window-basic-main.cpp | 3 ++- UI/window-basic-settings-a11y.cpp | 3 ++- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/UI/context-bar-controls.cpp b/UI/context-bar-controls.cpp index ff6eda919a2749..da55f4d905ac8f 100644 --- a/UI/context-bar-controls.cpp +++ b/UI/context-bar-controls.cpp @@ -573,7 +573,8 @@ void ColorSourceToolbar::on_choose_clicked() QColorDialog::ColorDialogOptions options; options |= QColorDialog::ShowAlphaChannel; -#ifndef _WIN32 +#ifdef __linux__ + // TODO: Revisit hang on Ubuntu with native dialog options |= QColorDialog::DontUseNativeDialog; #endif @@ -695,7 +696,8 @@ void TextSourceToolbar::on_selectColor_clicked() QColorDialog::ColorDialogOptions options; options |= QColorDialog::ShowAlphaChannel; -#ifndef _WIN32 +#ifdef __linux__ + // TODO: Revisit hang on Ubuntu with native dialog options |= QColorDialog::DontUseNativeDialog; #endif diff --git a/UI/properties-view.cpp b/UI/properties-view.cpp index d46f9ec80e6435..524a2d2bb81fbd 100644 --- a/UI/properties-view.cpp +++ b/UI/properties-view.cpp @@ -1813,15 +1813,18 @@ bool WidgetInfo::ColorChangedInternal(const char *setting, bool supportAlpha) options |= QColorDialog::ShowAlphaChannel; } - /* The native dialog on OSX has all kinds of problems, like closing - * other open QDialogs on exit, and - * https://bugreports.qt-project.org/browse/QTBUG-34532 - */ -#ifndef _WIN32 +#ifdef __linux__ + // TODO: Revisit hang on Ubuntu with native dialog options |= QColorDialog::DontUseNativeDialog; #endif color = QColorDialog::getColor(color, view, QT_UTF8(desc), options); + +#ifdef __APPLE__ + // TODO: Revisit when QTBUG-42661 is fixed + widget->window()->raise(); +#endif + if (!color.isValid()) return false; diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index b0f19643d258dd..b5569978c06cd1 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -9721,7 +9721,8 @@ void OBSBasic::ColorChange() obs_data_get_string(curPrivData, "color"); const char *customColor = *oldColor != 0 ? oldColor : "#55FF0000"; -#ifndef _WIN32 +#ifdef __linux__ + // TODO: Revisit hang on Ubuntu with native dialog options |= QColorDialog::DontUseNativeDialog; #endif diff --git a/UI/window-basic-settings-a11y.cpp b/UI/window-basic-settings-a11y.cpp index c75d197317d3fc..03e9290043ddd5 100644 --- a/UI/window-basic-settings-a11y.cpp +++ b/UI/window-basic-settings-a11y.cpp @@ -36,7 +36,8 @@ QColor OBSBasicSettings::GetColor(uint32_t colorVal, QString label) { QColorDialog::ColorDialogOptions options; -#ifndef _WIN32 +#ifdef __linux__ + // TODO: Revisit hang on Ubuntu with native dialog options |= QColorDialog::DontUseNativeDialog; #endif From 27981b15e9b29d347810225a055d6b180807792c Mon Sep 17 00:00:00 2001 From: bin Date: Sun, 19 Feb 2023 17:14:25 +0800 Subject: [PATCH 0204/2225] UI: Fix compile error when obs-browser disabled --- UI/update/shared-update.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UI/update/shared-update.cpp b/UI/update/shared-update.cpp index 5c29dce3760f83..702a1660ffb0b3 100644 --- a/UI/update/shared-update.cpp +++ b/UI/update/shared-update.cpp @@ -15,10 +15,12 @@ #include #include +#ifdef BROWSER_AVAILABLE #include struct QCef; extern QCef *cef; +#endif #ifndef MAC_WHATSNEW_URL #define MAC_WHATSNEW_URL "https://obsproject.com/update_studio/whatsnew.json" From 19a0afe5268f55cf360b8c6ce324991ae92ea5cc Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 19 Feb 2023 13:57:14 +0100 Subject: [PATCH 0205/2225] UI: Don't double-delete children of deleted widgets These widgets are all children of updateSettingsGroupBox, meaning they get deleted when updateSettingsGroupBox gets deleted. This means that the first two calls are unnecessary and the third one segfaults as updateChannelLabel is gone already. Just delete the parent widget instead. --- UI/window-basic-settings.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index e51d88ce3b0771..f97eb897857db8 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -577,14 +577,11 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->advOutFFABitrate->setSuffix(" Kbps"); #if !defined(_WIN32) && !defined(__APPLE__) - delete ui->enableAutoUpdates; - ui->enableAutoUpdates = nullptr; - delete ui->updateChannelBox; - ui->updateChannelBox = nullptr; delete ui->updateSettingsGroupBox; ui->updateSettingsGroupBox = nullptr; - delete ui->updateChannelLabel; ui->updateChannelLabel = nullptr; + ui->updateChannelBox = nullptr; + ui->enableAutoUpdates = nullptr; #else // Hide update section if disabled if (App()->IsUpdaterDisabled()) From 7bfde6657888c441b236e6ac366988f39487423c Mon Sep 17 00:00:00 2001 From: jpark37 Date: Thu, 29 Dec 2022 00:08:26 -0800 Subject: [PATCH 0206/2225] libobs-d3d11: Support color spaces for duplicator Need this plumbing to make decisions about duplicator colors. --- libobs-d3d11/d3d11-duplicator.cpp | 25 +++++++ libobs-d3d11/d3d11-subsystem.cpp | 109 ++++++++++++++-------------- libobs-d3d11/d3d11-subsystem.hpp | 19 +++-- libobs/graphics/graphics-imports.c | 2 + libobs/graphics/graphics-internal.h | 3 + libobs/graphics/graphics.c | 22 ++++++ libobs/graphics/graphics.h | 3 + 7 files changed, 122 insertions(+), 61 deletions(-) diff --git a/libobs-d3d11/d3d11-duplicator.cpp b/libobs-d3d11/d3d11-duplicator.cpp index 86d1f66aad7e7f..132f3a782c5869 100644 --- a/libobs-d3d11/d3d11-duplicator.cpp +++ b/libobs-d3d11/d3d11-duplicator.cpp @@ -45,6 +45,8 @@ void gs_duplicator::Start() throw "Invalid monitor index"; hr = output->QueryInterface(IID_PPV_ARGS(output5.Assign())); + hdr = false; + sdr_white_nits = 80.f; if (SUCCEEDED(hr)) { constexpr DXGI_FORMAT supportedFormats[]{ DXGI_FORMAT_R16G16B16A16_FLOAT, @@ -56,6 +58,13 @@ void gs_duplicator::Start() duplicator.Assign()); if (FAILED(hr)) throw HRError("Failed to DuplicateOutput1", hr); + DXGI_OUTPUT_DESC desc; + if (SUCCEEDED(output->GetDesc(&desc))) { + gs_monitor_color_info info = + device->GetMonitorColorInfo(desc.Monitor); + hdr = info.hdr; + sdr_white_nits = (float)info.sdr_white_nits; + } } else { hr = output->QueryInterface(IID_PPV_ARGS(output1.Assign())); if (FAILED(hr)) @@ -238,6 +247,11 @@ static inline void copy_texture(gs_duplicator_t *d, ID3D11Texture2D *tex) delete d->texture; d->texture = (gs_texture_2d *)gs_texture_create( desc.Width, desc.Height, general_format, 1, nullptr, 0); + d->color_space = d->hdr ? GS_CS_709_SCRGB + : ((desc.Format == + DXGI_FORMAT_R16G16B16A16_FLOAT) + ? GS_CS_SRGB_16F + : GS_CS_SRGB); } if (d->texture) @@ -294,4 +308,15 @@ EXPORT gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator) { return duplicator->texture; } + +EXPORT enum gs_color_space +gs_duplicator_get_color_space(gs_duplicator_t *duplicator) +{ + return duplicator->color_space; +} + +EXPORT float gs_duplicator_get_sdr_white_level(gs_duplicator_t *duplicator) +{ + return duplicator->sdr_white_nits; +} } diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index bcaa922bb282a3..9c4e3a0699a4ec 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -67,53 +67,6 @@ gs_obj::~gs_obj() next->prev_next = prev_next; } -static gs_monitor_color_info get_monitor_color_info(gs_device_t *device, - HMONITOR hMonitor) -{ - IDXGIFactory1 *factory1 = device->factory; - if (!factory1->IsCurrent()) { - device->InitFactory(); - factory1 = device->factory; - device->monitor_to_hdr.clear(); - } - - for (const std::pair &pair : - device->monitor_to_hdr) { - if (pair.first == hMonitor) - return pair.second; - } - - ComPtr adapter; - ComPtr output; - ComPtr output6; - for (UINT adapterIndex = 0; - SUCCEEDED(factory1->EnumAdapters(adapterIndex, &adapter)); - ++adapterIndex) { - for (UINT outputIndex = 0; - SUCCEEDED(adapter->EnumOutputs(outputIndex, &output)); - ++outputIndex) { - if (SUCCEEDED(output->QueryInterface(&output6))) { - DXGI_OUTPUT_DESC1 desc1; - if (SUCCEEDED(output6->GetDesc1(&desc1)) && - (desc1.Monitor == hMonitor)) { - const bool hdr = - desc1.ColorSpace == - DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; - return device->monitor_to_hdr - .emplace_back( - hMonitor, - gs_monitor_color_info( - hdr, - desc1.BitsPerColor)) - .second; - } - } - } - } - - return gs_monitor_color_info(false, 8); -} - static enum gs_color_space get_next_space(gs_device_t *device, HWND hwnd, DXGI_SWAP_EFFECT effect) { @@ -123,7 +76,7 @@ static enum gs_color_space get_next_space(gs_device_t *device, HWND hwnd, MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (hMonitor) { const gs_monitor_color_info info = - get_monitor_color_info(device, hMonitor); + device->GetMonitorColorInfo(hMonitor); if (info.hdr) next_space = GS_CS_709_SCRGB; else if (info.bits_per_color > 8) @@ -1170,9 +1123,9 @@ static HRESULT GetPathInfo(HMONITOR hMonitor, return hr; } -static ULONG GetSdrWhiteNits(HMONITOR monitor) +static ULONG GetSdrMaxNits(HMONITOR monitor) { - ULONG nits = 0; + ULONG nits = 80; DISPLAYCONFIG_PATH_INFO info; if (SUCCEEDED(GetPathInfo(monitor, &info))) { @@ -1192,6 +1145,51 @@ static ULONG GetSdrWhiteNits(HMONITOR monitor) return nits; } +gs_monitor_color_info gs_device::GetMonitorColorInfo(HMONITOR hMonitor) +{ + IDXGIFactory1 *factory1 = factory; + if (!factory1->IsCurrent()) { + InitFactory(); + factory1 = factory; + monitor_to_hdr.clear(); + } + + for (const std::pair &pair : + monitor_to_hdr) { + if (pair.first == hMonitor) + return pair.second; + } + + ComPtr adapter; + ComPtr output; + ComPtr output6; + for (UINT adapterIndex = 0; + SUCCEEDED(factory1->EnumAdapters(adapterIndex, &adapter)); + ++adapterIndex) { + for (UINT outputIndex = 0; + SUCCEEDED(adapter->EnumOutputs(outputIndex, &output)); + ++outputIndex) { + DXGI_OUTPUT_DESC1 desc1; + if (SUCCEEDED(output->QueryInterface(&output6)) && + SUCCEEDED(output6->GetDesc1(&desc1)) && + (desc1.Monitor == hMonitor)) { + const bool hdr = + desc1.ColorSpace == + DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; + const UINT bits = desc1.BitsPerColor; + const ULONG nits = GetSdrMaxNits(desc1.Monitor); + return monitor_to_hdr + .emplace_back(hMonitor, + gs_monitor_color_info( + hdr, bits, nits)) + .second; + } + } + } + + return gs_monitor_color_info(false, 8, 80); +} + static void PopulateMonitorIds(HMONITOR handle, char *id, char *alt_id, size_t capacity) { @@ -1286,7 +1284,7 @@ static inline void LogAdapterMonitors(IDXGIAdapter1 *adapter) } const RECT &rect = desc.DesktopCoordinates; - const ULONG nits = GetSdrWhiteNits(desc.Monitor); + const ULONG nits = GetSdrMaxNits(desc.Monitor); char *friendly_name; os_wcs_to_utf8_ptr(target.monitorFriendlyDeviceName, 0, @@ -2098,10 +2096,9 @@ bool device_framebuffer_srgb_enabled(gs_device_t *device) return device->curFramebufferSrgb; } -inline void gs_device::CopyTex(ID3D11Texture2D *dst, uint32_t dst_x, - uint32_t dst_y, gs_texture_t *src, - uint32_t src_x, uint32_t src_y, uint32_t src_w, - uint32_t src_h) +void gs_device::CopyTex(ID3D11Texture2D *dst, uint32_t dst_x, uint32_t dst_y, + gs_texture_t *src, uint32_t src_x, uint32_t src_y, + uint32_t src_w, uint32_t src_h) { if (src->type != GS_TEXTURE_2D) throw "Source texture must be a 2D texture"; @@ -3090,7 +3087,7 @@ extern "C" EXPORT bool device_p010_available(gs_device_t *device) extern "C" EXPORT bool device_is_monitor_hdr(gs_device_t *device, void *monitor) { const HMONITOR hMonitor = static_cast(monitor); - return get_monitor_color_info(device, hMonitor).hdr; + return device->GetMonitorColorInfo(hMonitor).hdr; } extern "C" EXPORT void device_debug_marker_begin(gs_device_t *, diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index 0be9a9e2d214e9..1d167051d73e95 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/libobs-d3d11/d3d11-subsystem.hpp @@ -779,6 +779,9 @@ struct gs_vertex_shader : gs_shader { struct gs_duplicator : gs_obj { ComPtr duplicator; gs_texture_2d *texture; + bool hdr = false; + enum gs_color_space color_space = GS_CS_SRGB; + float sdr_white_nits = 80.f; int idx; long refs; bool updated; @@ -982,9 +985,13 @@ struct mat4float { struct gs_monitor_color_info { bool hdr; UINT bits_per_color; + ULONG sdr_white_nits; - gs_monitor_color_info(bool hdr, int bits_per_color) - : hdr(hdr), bits_per_color(bits_per_color) + gs_monitor_color_info(bool hdr, int bits_per_color, + ULONG sdr_white_nits) + : hdr(hdr), + bits_per_color(bits_per_color), + sdr_white_nits(sdr_white_nits) { } }; @@ -1061,9 +1068,9 @@ struct gs_device { void LoadVertexBufferData(); - inline void CopyTex(ID3D11Texture2D *dst, uint32_t dst_x, - uint32_t dst_y, gs_texture_t *src, uint32_t src_x, - uint32_t src_y, uint32_t src_w, uint32_t src_h); + void CopyTex(ID3D11Texture2D *dst, uint32_t dst_x, uint32_t dst_y, + gs_texture_t *src, uint32_t src_x, uint32_t src_y, + uint32_t src_w, uint32_t src_h); void UpdateViewProjMatrix(); @@ -1073,6 +1080,8 @@ struct gs_device { bool HasBadNV12Output(); + gs_monitor_color_info GetMonitorColorInfo(HMONITOR hMonitor); + gs_device(uint32_t adapterIdx); ~gs_device(); }; diff --git a/libobs/graphics/graphics-imports.c b/libobs/graphics/graphics-imports.c index 00681680cf3933..f2324ef697d384 100644 --- a/libobs/graphics/graphics-imports.c +++ b/libobs/graphics/graphics-imports.c @@ -218,6 +218,8 @@ bool load_graphics_imports(struct gs_exports *exports, void *module, GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_destroy); GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_update_frame); GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_get_texture); + GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_get_color_space); + GRAPHICS_IMPORT_OPTIONAL(gs_duplicator_get_sdr_white_level); GRAPHICS_IMPORT_OPTIONAL(gs_get_adapter_count); GRAPHICS_IMPORT_OPTIONAL(device_texture_create_gdi); GRAPHICS_IMPORT_OPTIONAL(gs_texture_get_dc); diff --git a/libobs/graphics/graphics-internal.h b/libobs/graphics/graphics-internal.h index 137a0219686ed6..d0ae5b895b39c9 100644 --- a/libobs/graphics/graphics-internal.h +++ b/libobs/graphics/graphics-internal.h @@ -307,6 +307,9 @@ struct gs_exports { bool (*gs_duplicator_update_frame)(gs_duplicator_t *duplicator); gs_texture_t *(*gs_duplicator_get_texture)(gs_duplicator_t *duplicator); + enum gs_color_space (*gs_duplicator_get_color_space)( + gs_duplicator_t *duplicator); + float (*gs_duplicator_get_sdr_white_level)(gs_duplicator_t *duplicator); uint32_t (*gs_get_adapter_count)(void); diff --git a/libobs/graphics/graphics.c b/libobs/graphics/graphics.c index 7bc03dff180634..288fb1db6409c6 100644 --- a/libobs/graphics/graphics.c +++ b/libobs/graphics/graphics.c @@ -3050,6 +3050,28 @@ gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator) return thread_graphics->exports.gs_duplicator_get_texture(duplicator); } +enum gs_color_space gs_duplicator_get_color_space(gs_duplicator_t *duplicator) +{ + if (!gs_valid_p("gs_duplicator_get_color_space", duplicator)) + return GS_CS_SRGB; + if (!thread_graphics->exports.gs_duplicator_get_color_space) + return GS_CS_SRGB; + + return thread_graphics->exports.gs_duplicator_get_color_space( + duplicator); +} + +float gs_duplicator_get_sdr_white_level(gs_duplicator_t *duplicator) +{ + if (!gs_valid_p("gs_duplicator_get_sdr_white_level", duplicator)) + return 80.f; + if (!thread_graphics->exports.gs_duplicator_get_sdr_white_level) + return 80.f; + + return thread_graphics->exports.gs_duplicator_get_sdr_white_level( + duplicator); +} + /** creates a windows GDI-lockable texture */ gs_texture_t *gs_texture_create_gdi(uint32_t width, uint32_t height) { diff --git a/libobs/graphics/graphics.h b/libobs/graphics/graphics.h index 5b309d0022d468..0f62d5b9550628 100644 --- a/libobs/graphics/graphics.h +++ b/libobs/graphics/graphics.h @@ -919,6 +919,9 @@ EXPORT void gs_duplicator_destroy(gs_duplicator_t *duplicator); EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *duplicator); EXPORT gs_texture_t *gs_duplicator_get_texture(gs_duplicator_t *duplicator); +EXPORT enum gs_color_space +gs_duplicator_get_color_space(gs_duplicator_t *duplicator); +EXPORT float gs_duplicator_get_sdr_white_level(gs_duplicator_t *duplicator); EXPORT uint32_t gs_get_adapter_count(void); From 7bf3015864288e1231d4c61ef2b3d5d8f2d91251 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Thu, 29 Dec 2022 00:10:50 -0800 Subject: [PATCH 0207/2225] win-capture: Add Force SDR for DXGI duplicator Also plumb support for wide SDR although DXGI chooses narrow anyway? --- .../win-capture/duplicator-monitor-capture.c | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index 4dd0222a8acfd2..1d3aa2f2f48a41 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -734,18 +734,32 @@ static void duplicator_capture_render(void *data, gs_effect_t *unused) const char *tech_name = "Draw"; float multiplier = 1.f; const enum gs_color_space current_space = gs_get_color_space(); - if (gs_texture_get_color_format(texture) == GS_RGBA16F) { - switch (current_space) { - case GS_CS_SRGB: - case GS_CS_SRGB_16F: - tech_name = "DrawMultiplyTonemap"; - multiplier = - 80.f / obs_get_video_sdr_white_level(); - break; - case GS_CS_709_EXTENDED: + if (gs_duplicator_get_color_space(capture->duplicator) == + GS_CS_709_SCRGB) { + if (capture->force_sdr) { tech_name = "DrawMultiply"; - multiplier = - 80.f / obs_get_video_sdr_white_level(); + const float target_nits = + (current_space == GS_CS_709_SCRGB) + ? obs_get_video_sdr_white_level() + : 80.f; + multiplier = target_nits / + gs_duplicator_get_sdr_white_level( + capture->duplicator); + } else { + switch (current_space) { + case GS_CS_SRGB: + case GS_CS_SRGB_16F: + tech_name = "DrawMultiplyTonemap"; + multiplier = + 80.f / + obs_get_video_sdr_white_level(); + break; + case GS_CS_709_EXTENDED: + tech_name = "DrawMultiply"; + multiplier = + 80.f / + obs_get_video_sdr_white_level(); + } } } else if (current_space == GS_CS_709_SCRGB) { tech_name = "DrawMultiply"; @@ -844,9 +858,6 @@ static void update_settings_visibility(obs_properties_t *props, obs_property_t *p = obs_properties_get(props, "cursor"); obs_property_set_visible(p, dxgi_options || wgc_cursor_toggle); - p = obs_properties_get(props, "force_sdr"); - obs_property_set_visible(p, wgc_options); - pthread_mutex_unlock(&capture->update_mutex); } @@ -909,17 +920,9 @@ duplicator_capture_get_color_space(void *data, size_t count, capture->exports.winrt_capture_get_color_space( capture->capture_winrt); } - } else { - if (capture->duplicator) { - gs_texture_t *const texture = - gs_duplicator_get_texture(capture->duplicator); - if (texture) { - capture_space = (gs_texture_get_color_format( - texture) == GS_RGBA16F) - ? GS_CS_709_EXTENDED - : GS_CS_SRGB; - } - } + } else if (capture->duplicator && !capture->force_sdr) { + capture_space = + gs_duplicator_get_color_space(capture->duplicator); } enum gs_color_space space = capture_space; From 695f4765532a4e75fbfb94a22a0a0bbf72370026 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Thu, 29 Dec 2022 00:25:40 -0800 Subject: [PATCH 0208/2225] win-capture: Add logging for Force SDR checkbox --- plugins/win-capture/duplicator-monitor-capture.c | 5 +++-- plugins/win-capture/window-capture.c | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/win-capture/duplicator-monitor-capture.c b/plugins/win-capture/duplicator-monitor-capture.c index 1d3aa2f2f48a41..69d206235b3b92 100644 --- a/plugins/win-capture/duplicator-monitor-capture.c +++ b/plugins/win-capture/duplicator-monitor-capture.c @@ -265,10 +265,11 @@ static void log_settings(struct duplicator_capture *capture, "\tmethod: %s\n" "\tid: %s\n" "\talt_id: %s\n" - "\tsetting_id: %s", + "\tsetting_id: %s\n" + "\tforce SDR: %s", monitor, width, height, capture->capture_cursor ? "true" : "false", get_method_name(capture->method), capture->id, capture->alt_id, - capture->monitor_id); + capture->monitor_id, capture->force_sdr ? "true" : "false"); } static enum display_capture_method diff --git a/plugins/win-capture/window-capture.c b/plugins/win-capture/window-capture.c index f548a6c22e112e..4d7221db353e01 100644 --- a/plugins/win-capture/window-capture.c +++ b/plugins/win-capture/window-capture.c @@ -180,9 +180,12 @@ static void log_settings(struct window_capture *wc, obs_data_t *s) "[window-capture: '%s'] update settings:\n" "\texecutable: %s\n" "\tmethod selected: %s\n" - "\tmethod chosen: %s\n", + "\tmethod chosen: %s\n" + "\tforce SDR: %s", obs_source_get_name(wc->source), wc->executable, - get_method_name(method), get_method_name(wc->method)); + get_method_name(method), get_method_name(wc->method), + (wc->force_sdr && (wc->method == METHOD_WGC)) ? "true" + : "false"); blog(LOG_DEBUG, "\tclass: %s", wc->class); } } From 9ee97bba1ace153192b35c0b1483b318f599798d Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 6 Sep 2022 22:03:02 -0700 Subject: [PATCH 0209/2225] libobs: Add obs_output_get_video_conversion Need post-convert size to avoid CPU rescale. --- docs/sphinx/reference-outputs.rst | 5 +++-- libobs/obs-output.c | 6 +++--- libobs/obs.h | 4 ++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index 730a6bb4bae3d9..d4444213207442 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -697,9 +697,10 @@ Functions used by outputs --------------------- .. function:: void obs_output_set_video_conversion(obs_output_t *output, const struct video_scale_info *conversion) + const struct video_scale_info *obs_output_get_video_conversion(obs_output_t *output) - Optionally sets the video conversion information. Only used by raw - outputs. + Optionally sets/gets the video conversion information. Only used by + raw outputs. Relevant data types used with this function: diff --git a/libobs/obs-output.c b/libobs/obs-output.c index ad71c7cedea3b7..88ad4a5381e7c5 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -1098,8 +1098,8 @@ static inline bool has_scaling(const struct obs_output *output) video_height != output->scaled_height); } -static inline struct video_scale_info * -get_video_conversion(struct obs_output *output) +const struct video_scale_info * +obs_output_get_video_conversion(struct obs_output *output) { if (output->video_conversion_set) { if (!output->video_conversion.width) @@ -1966,7 +1966,7 @@ static void hook_data_capture(struct obs_output *output, bool encoded, } else { if (has_video) start_raw_video(output->video, - get_video_conversion(output), + obs_output_get_video_conversion(output), default_raw_video_callback, output); if (has_audio) start_raw_audio(output); diff --git a/libobs/obs.h b/libobs/obs.h index 1e56cc38471fcf..548128b35d2d8f 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2194,6 +2194,10 @@ obs_output_get_supported_audio_codecs(const obs_output_t *output); EXPORT void *obs_output_get_type_data(obs_output_t *output); +/** Gets the video conversion info. Used only for raw output */ +EXPORT const struct video_scale_info * +obs_output_get_video_conversion(obs_output_t *output); + /** Optionally sets the video conversion info. Used only for raw output */ EXPORT void obs_output_set_video_conversion(obs_output_t *output, From 06b8cef665fbb3c468be0f4eed3398f13d013354 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 6 Sep 2022 22:04:56 -0700 Subject: [PATCH 0210/2225] decklink: Set video conversion earlier Owner needs this info set sooner to move rescale from CPU to GPU. --- plugins/decklink/decklink-output.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/plugins/decklink/decklink-output.cpp b/plugins/decklink/decklink-output.cpp index e7f8acc91cd3ea..2526b902a80173 100644 --- a/plugins/decklink/decklink-output.cpp +++ b/plugins/decklink/decklink-output.cpp @@ -25,6 +25,22 @@ static void *decklink_output_create(obs_data_t *settings, obs_output_t *output) decklinkOutput->modeID = obs_data_get_int(settings, MODE_ID); decklinkOutput->keyerMode = (int)obs_data_get_int(settings, KEYER); + ComPtr device; + device.Set(deviceEnum->FindByHash(decklinkOutput->deviceHash)); + if (device) { + DeckLinkDeviceMode *mode = + device->FindOutputMode(decklinkOutput->modeID); + + struct video_scale_info to = {}; + to.format = VIDEO_FORMAT_BGRA; + to.width = mode->GetWidth(); + to.height = mode->GetHeight(); + to.range = VIDEO_RANGE_FULL; + to.colorspace = VIDEO_CS_709; + + obs_output_set_video_conversion(output, &to); + } + return decklinkOutput; } @@ -80,15 +96,6 @@ static bool decklink_output_start(void *data) decklink->SetSize(mode->GetWidth(), mode->GetHeight()); - struct video_scale_info to = {}; - to.format = VIDEO_FORMAT_BGRA; - to.width = mode->GetWidth(); - to.height = mode->GetHeight(); - to.range = VIDEO_RANGE_FULL; - to.colorspace = VIDEO_CS_709; - - obs_output_set_video_conversion(decklink->GetOutput(), &to); - device->SetKeyerMode(decklink->keyerMode); if (!decklink->Activate(device, decklink->modeID)) From 593a0f034c51d15493d655e45fc7dba3326a682f Mon Sep 17 00:00:00 2001 From: jpark37 Date: Tue, 6 Sep 2022 22:05:21 -0700 Subject: [PATCH 0211/2225] decklink-output-ui: Move preview rescale to GPU Internal keyer computes with straight alpha, so use DrawAlphaDivide. --- .../decklink-output-ui/decklink-ui-main.cpp | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp b/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp index c9aed37e3553c9..a937255e580b12 100644 --- a/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp +++ b/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp @@ -29,6 +29,7 @@ struct preview_output { obs_output_t *output; video_t *video_queue; + gs_texrender_t *texrender_premultiplied; gs_texrender_t *texrender; gs_stagesurf_t *stagesurfaces[STAGE_BUFFER_COUNT]; bool surf_written[STAGE_BUFFER_COUNT]; @@ -120,6 +121,8 @@ static void preview_tick(void *param, float sec) auto ctx = (struct preview_output *)param; + if (ctx->texrender_premultiplied) + gs_texrender_reset(ctx->texrender_premultiplied); if (ctx->texrender) gs_texrender_reset(ctx->texrender); } @@ -135,9 +138,14 @@ void preview_output_stop() obs_source_release(context.current_source); obs_enter_graphics(); - for (gs_stagesurf_t *surf : context.stagesurfaces) + for (gs_stagesurf_t *&surf : context.stagesurfaces) { gs_stagesurface_destroy(surf); + surf = nullptr; + } gs_texrender_destroy(context.texrender); + context.texrender = nullptr; + gs_texrender_destroy(context.texrender_premultiplied); + context.texrender_premultiplied = nullptr; obs_leave_graphics(); video_output_close(context.video_queue); @@ -161,10 +169,14 @@ void preview_output_start() obs_get_video_info(&context.ovi); - uint32_t width = context.ovi.base_width; - uint32_t height = context.ovi.base_height; + const struct video_scale_info *const conversion = + obs_output_get_video_conversion(context.output); + const uint32_t width = conversion->width; + const uint32_t height = conversion->height; obs_enter_graphics(); + context.texrender_premultiplied = + gs_texrender_create(GS_BGRA, GS_ZS_NONE); context.texrender = gs_texrender_create(GS_BGRA, GS_ZS_NONE); for (gs_stagesurf_t *&surf : context.stagesurfaces) surf = gs_stagesurface_create(width, height, GS_BGRA); @@ -257,10 +269,17 @@ void render_preview_source(void *param, uint32_t cx, uint32_t cy) if (!ctx->current_source) return; - uint32_t width = obs_source_get_base_width(ctx->current_source); - uint32_t height = obs_source_get_base_height(ctx->current_source); + const uint32_t width = obs_source_get_base_width(ctx->current_source); + const uint32_t height = obs_source_get_base_height(ctx->current_source); + + const struct video_scale_info *const conversion = + obs_output_get_video_conversion(context.output); + const uint32_t scaled_width = conversion->width; + const uint32_t scaled_height = conversion->height; - if (gs_texrender_begin(ctx->texrender, width, height)) { + gs_texrender_t *const texrender_premultiplied = + ctx->texrender_premultiplied; + if (gs_texrender_begin(texrender_premultiplied, width, height)) { struct vec4 background; vec4_zero(&background); @@ -274,7 +293,30 @@ void render_preview_source(void *param, uint32_t cx, uint32_t cy) obs_source_video_render(ctx->current_source); gs_blend_state_pop(); - gs_texrender_end(ctx->texrender); + gs_texrender_end(texrender_premultiplied); + + if (gs_texrender_begin(ctx->texrender, scaled_width, + scaled_height)) { + const bool previous = gs_framebuffer_srgb_enabled(); + gs_enable_framebuffer_srgb(true); + gs_enable_blending(false); + + gs_texture_t *const tex = gs_texrender_get_texture( + texrender_premultiplied); + gs_effect_t *const effect = + obs_get_base_effect(OBS_EFFECT_DEFAULT); + gs_effect_set_texture_srgb( + gs_effect_get_param_by_name(effect, "image"), + tex); + while (gs_effect_loop(effect, "DrawAlphaDivide")) { + gs_draw_sprite(tex, 0, 0, 0); + } + + gs_enable_blending(true); + gs_enable_framebuffer_srgb(previous); + + gs_texrender_end(ctx->texrender); + } const size_t write_stage_index = ctx->stage_index; gs_stage_texture(ctx->stagesurfaces[write_stage_index], @@ -295,8 +337,8 @@ void render_preview_source(void *param, uint32_t cx, uint32_t cy) &ctx->video_linesize)) { uint32_t linesize = output_frame.linesize[0]; - for (uint32_t i = 0; - i < ctx->ovi.base_height; i++) { + for (uint32_t i = 0; i < scaled_height; + i++) { uint32_t dst_offset = linesize * i; uint32_t src_offset = From 2b33fb3ad28cdef8e19fe998fc085c38eae0970b Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 12 Feb 2023 15:45:40 +0100 Subject: [PATCH 0212/2225] UI: Massive improve hotkey search performance --- UI/window-basic-settings.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index f97eb897857db8..97c5630ed85600 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -4519,7 +4519,6 @@ void OBSBasicSettings::SearchHotkeys(const QString &text, std::vector combos; bool showHotkey; ui->hotkeyScrollArea->ensureVisible(0, 0); - ui->hotkeyScrollArea->setUpdatesEnabled(false); QLayoutItem *hotkeysItem = ui->hotkeyFormLayout->itemAt(0); QWidget *hotkeys = hotkeysItem->widget(); @@ -4528,6 +4527,9 @@ void OBSBasicSettings::SearchHotkeys(const QString &text, QFormLayout *hotkeysLayout = qobject_cast(hotkeys->layout()); + hotkeysLayout->setEnabled(false); + + QString needle = text.toLower(); for (int i = 0; i < hotkeysLayout->rowCount(); i++) { auto label = hotkeysLayout->itemAt(i, QFormLayout::LabelRole); @@ -4539,18 +4541,19 @@ void OBSBasicSettings::SearchHotkeys(const QString &text, if (!item) continue; - item->widget->GetCombinations(combos); QString fullname = item->property("fullName").value(); - showHotkey = text.isEmpty() || - fullname.toLower().contains(text.toLower()); + showHotkey = needle.isEmpty() || + fullname.toLower().contains(needle); if (showHotkey && !obs_key_combination_is_empty(filterCombo)) { showHotkey = false; + + item->widget->GetCombinations(combos); for (auto combo : combos) { if (combo == filterCombo) { showHotkey = true; - continue; + break; } } } @@ -4561,7 +4564,7 @@ void OBSBasicSettings::SearchHotkeys(const QString &text, if (field) field->widget()->setVisible(showHotkey); } - ui->hotkeyScrollArea->setUpdatesEnabled(true); + hotkeysLayout->setEnabled(true); } void OBSBasicSettings::on_hotkeyFilterReset_clicked() From a44700871b07957ce9f21ed2c14ac094ef8809e9 Mon Sep 17 00:00:00 2001 From: shiina424 Date: Sat, 5 Nov 2022 06:17:04 +0900 Subject: [PATCH 0213/2225] UI: Fix window text when disabled in dark theme --- UI/data/themes/Dark.qss | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index ea08353ad87ae7..0c2626773991ab 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -19,7 +19,7 @@ /* Colors */ -/* rgb(225,224,225); /* veryLight */ +/* rgb(254,253,254); /* veryLight */ /* rgb(200,199,200); /* lighter */ /* rgb(122,121,122); /* light */ /* rgb(88,87,88); /* kindaDark */ @@ -39,12 +39,12 @@ OBSThemeMeta { * Using it without will set all three (making 'active' a bit redundant) */ OBSTheme { window: rgb(58,57,58); /* dark */ - windowText: rgb(225,224,225); /* veryLight */ + windowText: rgb(254,253,254); /* veryLight */ base: rgb(31,30,31); /* veryDark */ alternateBase: rgb(11,10,11); /* veryVeryDark */ - text: rgb(225,224,225); /* veryLight */ + text: rgb(254,253,254); /* veryLight */ button: rgb(88,87,88); /* kindaDark */ - buttonText: rgb(225,224,225); /* veryLight */ + buttonText: rgb(254,253,254); /* veryLight */ brightText: rgb(200,199,200); /* lighter */ light: rgb(88,87,88); /* kindaDark */ @@ -60,9 +60,10 @@ OBSTheme { } OBSTheme::disabled { - text: rgb(122,121,122); /* light */ - buttonText: rgb(122,121,122); /* light */ - brightText: rgb(122,121,122); /* light */ + windowText: rgb(165,164,165); /* disabledText */ + text: rgb(165,164,165); /* disabledText */ + buttonText: rgb(165,164,165); /* disabledText */ + brightText: rgb(165,164,165); /* disabledText */ } OBSTheme::inactive { @@ -941,7 +942,7 @@ OBSYoutubeActions { } #ytEventList QLabel { - color: rgb(225,224,225); /* veryLight */ + color: rgb(254,253,254); /* veryLight */ background-color: rgb(76,76,76); border: none; border-radius: 3px; @@ -1035,13 +1036,13 @@ QCalendarWidget QWidget { alternate-background-color: rgb(70,69,70); } QCalendarWidget QAbstractItemView:enabled { background-color: rgb(31,30,31); - color: rgb(225,224,225); + color: rgb(254,253,254); selection-background-color: rgb(25,51,75); - selection-color: rgb(225,224,225); + selection-color: rgb(254,253,254); } QCalendarWidget QAbstractItemView:disabled { - color: rgb(122,121,122); + color: rgb(165,164,165); /* disabledText */ } /* Disable icons on QDialogButtonBox */ From 8d4a0b36451218cd13af58828eb7788e1df12551 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 11 Sep 2022 16:54:24 +0200 Subject: [PATCH 0214/2225] UI: Use valueChanged() signal for T-Bar everywhere The sliderMoved signal doesn't trigger when clicking on the slider, only the valueChanged signal. According to QTBUG-72995 this is intentional, since the documentation states that sliderDown also needs to be true for the sliderMoved signal to be triggered. As for why sliderDown isn't true when clicking, or why that would even be necessary for a signal that should trigger when the slider is moved (and it very clearly moves) remains a mystery. Also gets rid of the wrong usage of the on_foo_bar slot declaration, which should only be used for signals where the sender is part of a UI file and it gets connected automatically. While it of course is possible to connect it manually, this is against convention and can cause confusion. In this case it was particularly wrong since even if tBar was part of a UI file (which it isn't), the method should have been called on_tBar_valueChanged instead of on_tbar_position_valueChanged. --- UI/window-basic-main-transitions.cpp | 17 ++++------------- UI/window-basic-main.hpp | 1 - 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index e3f4e7374674bd..0d9b6d0013233d 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -793,9 +793,7 @@ void OBSBasic::CreateProgramOptions() tBar->setProperty("themeID", "tBarSlider"); - connect(tBar, SIGNAL(sliderMoved(int)), this, SLOT(TBarChanged(int))); - connect(tBar, SIGNAL(valueChanged(int)), this, - SLOT(on_tbar_position_valueChanged(int))); + connect(tBar, &QSlider::valueChanged, this, &OBSBasic::TBarChanged); connect(tBar, SIGNAL(sliderReleased()), this, SLOT(TBarReleased())); layout->addStretch(0); @@ -918,8 +916,6 @@ void OBSBasic::TBarChanged(int value) { OBSSourceAutoRelease transition = obs_get_output_source(0); - tBar->setValue(value); - if (!tBarActive) { OBSSource sceneSource = GetCurrentSceneSource(); OBSSource tBarTr = GetOverrideTransition(sceneSource); @@ -945,6 +941,9 @@ void OBSBasic::TBarChanged(int value) obs_transition_set_manual_time(transition, (float)value / T_BAR_PRECISION_F); + + if (api) + api->on_event(OBS_FRONTEND_EVENT_TBAR_VALUE_CHANGED); } int OBSBasic::GetTbarPosition() @@ -952,14 +951,6 @@ int OBSBasic::GetTbarPosition() return tBar->value(); } -void OBSBasic::on_tbar_position_valueChanged(int value) -{ - if (api) { - api->on_event(OBS_FRONTEND_EVENT_TBAR_VALUE_CHANGED); - } - - UNUSED_PARAMETER(value); -} void OBSBasic::on_modeSwitch_clicked() { SetPreviewProgramMode(!IsPreviewProgramMode()); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index e2c72ddbd24e7c..fa0857056567b4 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -1118,7 +1118,6 @@ private slots: void on_transitionRemove_clicked(); void on_transitionProps_clicked(); void on_transitionDuration_valueChanged(int value); - void on_tbar_position_valueChanged(int value); void ShowTransitionProperties(); void HideTransitionProperties(); From 644b73eb461c39e15778974927d7b6178da5be15 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 13:40:59 +0100 Subject: [PATCH 0215/2225] UI: Add confirmation dialog for resetting properties --- UI/data/locale/en-US.ini | 4 ++++ UI/window-basic-filters.cpp | 14 ++++++++++++++ UI/window-basic-properties.cpp | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 4e0b39f58fe02b..67496c3dcd379c 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -382,6 +382,10 @@ ConfirmRemove.Title="Confirm Remove" ConfirmRemove.Text="Are you sure you wish to remove '%1'?" ConfirmRemove.TextMultiple="Are you sure you wish to remove %1 items?" +# confirm reset to defaults dialog box +ConfirmReset.Title="Reset Properties" +ConfirmReset.Text="Are you sure you wish to reset current properties to their defaults?" + # output start messages Output.StartStreamFailed="Failed to start streaming" Output.StartRecordingFailed="Failed to start recording" diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index bbff8c23ad797e..266a10e6485f3d 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -1184,6 +1184,17 @@ void OBSBasicFilters::EffectFilterNameEdited( UNUSED_PARAMETER(endHint); } +static bool ConfirmReset(QWidget *parent) +{ + QMessageBox::StandardButton button; + + button = OBSMessageBox::question(parent, QTStr("ConfirmReset.Title"), + QTStr("ConfirmReset.Text"), + QMessageBox::Yes | QMessageBox::No); + + return button == QMessageBox::Yes; +} + void OBSBasicFilters::ResetFilters() { QListWidget *list = isAsync ? ui->asyncFilters : ui->effectFilters; @@ -1194,6 +1205,9 @@ void OBSBasicFilters::ResetFilters() if (!filter) return; + if (!ConfirmReset(this)) + return; + OBSDataAutoRelease settings = obs_source_get_settings(filter); OBSDataAutoRelease empty_settings = obs_data_create(); diff --git a/UI/window-basic-properties.cpp b/UI/window-basic-properties.cpp index 8dce819a19a6f7..145b2efc001b4e 100644 --- a/UI/window-basic-properties.cpp +++ b/UI/window-basic-properties.cpp @@ -301,6 +301,17 @@ void OBSBasicProperties::UpdateProperties(void *data, calldata_t *) "ReloadProperties"); } +static bool ConfirmReset(QWidget *parent) +{ + QMessageBox::StandardButton button; + + button = OBSMessageBox::question(parent, QTStr("ConfirmReset.Title"), + QTStr("ConfirmReset.Text"), + QMessageBox::Yes | QMessageBox::No); + + return button == QMessageBox::Yes; +} + void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) { QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button); @@ -362,6 +373,9 @@ void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) close(); } else if (val == QDialogButtonBox::ResetRole) { + if (!ConfirmReset(this)) + return; + OBSDataAutoRelease settings = obs_source_get_settings(source); obs_data_clear(settings); From 4bcd86b395c8efc0d33884d5b881f0c2b96dd633 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 25 Nov 2022 10:16:14 +0100 Subject: [PATCH 0216/2225] UI: Disable replay buffer checkbox when using custom FFmpeg --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicSettings.ui | 10 ++++++++++ UI/window-basic-settings.cpp | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 67496c3dcd379c..a0423ce64ee08d 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -949,6 +949,7 @@ Basic.Settings.Output.ReplayBuffer.EstimateTooLarge="Warning: Estimated memory u Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit." Basic.Settings.Output.ReplayBuffer.Prefix="Replay Buffer Filename Prefix" Basic.Settings.Output.ReplayBuffer.Suffix="Suffix" +Basic.Settings.Output.ReplayBuffer.UnavailableCustomFFmpeg="Replay Buffer cannot be used when recording type is set to Custom Output (FFmpeg)." Basic.Settings.Output.Simple.SavePath="Recording Path" Basic.Settings.Output.Simple.RecordingQuality="Recording Quality" Basic.Settings.Output.Simple.RecordingQuality.Stream="Same as stream" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index c20e7d3d1799cc..83d2076dea8772 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -4593,6 +4593,16 @@ 9 + + + + Basic.Settings.Output.ReplayBuffer.UnavailableCustomFFmpeg + + + warning + + + diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 97c5630ed85600..6ada5f496b34e9 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -5083,8 +5083,10 @@ void OBSBasicSettings::UpdateAutomaticReplayBufferCheckboxes() break; case 1: state = ui->advReplayBuf->isChecked(); + bool customFFmpeg = ui->advOutRecType->currentIndex() == 1; ui->advReplayBuf->setEnabled( - !obs_frontend_replay_buffer_active()); + !obs_frontend_replay_buffer_active() && !customFFmpeg); + ui->advReplayBufCustomFFmpeg->setVisible(customFFmpeg); break; } ui->replayWhileStreaming->setEnabled(state); From 7a02fa8cc8475172de6af3ead5be6d790370adf2 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 19 Feb 2023 23:15:17 +0100 Subject: [PATCH 0217/2225] CONTRIBUTING: Add AI/Machine Learning policy --- CONTRIBUTING.rst | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index e9feb9807ee1ae..344bac296e0436 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -75,3 +75,33 @@ Conduct Guidelines ------------------ - Contributors to the OBS Project are expected to abide by the OBS Project Code of Conduct: https://github.com/obsproject/obs-studio/blob/master/COC.rst + +AI/Machine Learning Policy +-------------------------- + +AI/machine learning systems such as those based on the GPT family (Copilot, +ChatGPT, etc.) are prone to generating plausible-sounding, but wrong code that +makes incorrect assumptions about OBS internals or APIs it interfaces with. + +This means code generated by such systems will require human review and is +likely to require human intervention. If the submitter is unable to undertake +that work themselves due to a lack of understanding of the OBS codebase and/or +programming, the submission has a high likelihood of being invalid. +Such invalid submissions end up taking maintainers' time to review and respond +away from legitimate submissions. + +Additionally, such systems have been demonstrated to reproduce code contained +in the training data, which may have been originally published under a license +that would prohibit its inclusion in OBS. + +Because of the above concerns, we have opted to take the following policy +towards submissions with regard to the use of these AI tools: + +- Submissions created largely or entirely by AI systems are not allowed. + +- The use of GitHub Copilot and other assistive AI technologies is heavily + discouraged. + +- Low-effort or incorrect submissions that are determined to have been + generated by, or created with aid of such systems may lead to a ban from + contributing to the repository or project as a whole. From e2b80c04e8fa98d0d26f81ae7cb05edd4ef3abf5 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 20 Feb 2023 21:55:07 +0100 Subject: [PATCH 0218/2225] CONTRIBUTING: Add language and PR/Issue template notes --- CONTRIBUTING.rst | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 344bac296e0436..2dcee3023de2f2 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -27,6 +27,18 @@ Quick Links for Contributing - To add a new service to OBS Studio please see the service submission guidelines: https://github.com/obsproject/obs-studio/wiki/Service-Submission-Guidelines +General Guidelines +------------------ + +- The OBS Project uses English as a common language. Please ensure that any + submissions have at least machine-translated English descriptions and titles. + +- Templates for Pull Requests and Issues must be properly filled out. Failure + to do so may result in your PR or Issue being closed. The templates request + the bare minimum amount of information required for us to process them. + +- Contributors to the OBS Project are expected to abide by the OBS Project Code of Conduct: https://github.com/obsproject/obs-studio/blob/master/COC.rst + Coding Guidelines ----------------- @@ -44,6 +56,8 @@ Coding Guidelines - 80 columns max +- Comments and names of variables/functions/etc. must be in English + Commit Guidelines ----------------- @@ -71,10 +85,7 @@ Commit Guidelines - If you still need examples, please view the commit history. -Conduct Guidelines ------------------- - -- Contributors to the OBS Project are expected to abide by the OBS Project Code of Conduct: https://github.com/obsproject/obs-studio/blob/master/COC.rst +- Commit titles and descriptions must be in English AI/Machine Learning Policy -------------------------- From 433c85bcd72a6d29752ccaec352950c2bec20ab8 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Mon, 20 Feb 2023 15:09:43 +0100 Subject: [PATCH 0219/2225] mac-capture: Fix various SCK memory leaks Detected by clang analyzer. --- plugins/mac-capture/mac-screen-capture.m | 28 +++++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/plugins/mac-capture/mac-screen-capture.m b/plugins/mac-capture/mac-screen-capture.m index e296dd81ca865e..cc09437fa64cea 100644 --- a/plugins/mac-capture/mac-screen-capture.m +++ b/plugins/mac-capture/mac-screen-capture.m @@ -63,7 +63,7 @@ @interface ScreenCaptureDelegate : NSObject pthread_mutex_t mutex; - unsigned capture_type; + ScreenCaptureStreamType capture_type; CGDirectDisplayID display; CGWindowID window; NSString *application_id; @@ -142,6 +142,7 @@ static void screen_capture_destroy(void *data) if (sc->capture_delegate) { [sc->capture_delegate release]; } + [sc->application_id release]; pthread_mutex_destroy(&sc->mutex); bfree(sc); @@ -370,9 +371,11 @@ static bool init_screen_stream(struct screen_capture *sc) case ScreenCaptureDisplayStream: { SCDisplay *target_display = get_target_display(); + NSArray *empty = [[NSArray alloc] init]; content_filter = [[SCContentFilter alloc] initWithDisplay:target_display - excludingWindows:[[NSArray alloc] init]]; + excludingWindows:empty]; + [empty release]; set_display_mode(sc, target_display); } break; @@ -433,10 +436,13 @@ static bool init_screen_stream(struct screen_capture *sc) NSArray *target_application_array = [[NSArray alloc] initWithObjects:target_application, nil]; + NSArray *empty_array = [[NSArray alloc] init]; content_filter = [[SCContentFilter alloc] initWithDisplay:target_display includingApplications:target_application_array - exceptingWindows:[[NSArray alloc] init]]; + exceptingWindows:empty_array]; + [target_application_array release]; + [empty_array release]; set_display_mode(sc, target_display); } break; @@ -458,6 +464,7 @@ static bool init_screen_stream(struct screen_capture *sc) } else { if (sc->capture_type != ScreenCaptureWindowStream) { sc->disp = NULL; + [content_filter release]; os_event_init(&sc->disp_finished, OS_EVENT_TYPE_MANUAL); os_event_init(&sc->stream_start_completed, OS_EVENT_TYPE_MANUAL); @@ -469,6 +476,8 @@ static bool init_screen_stream(struct screen_capture *sc) configuration:sc->stream_properties delegate:nil]; + [content_filter release]; + NSError *addStreamOutputError = nil; BOOL did_add_output = [sc->disp addStreamOutput:sc->capture_delegate type:SCStreamOutputTypeScreen @@ -728,20 +737,26 @@ static void screen_capture_update(void *data, obs_data_t *settings) switch (sc->capture_type) { case ScreenCaptureDisplayStream: { if (sc->display == display && - sc->hide_cursor != show_cursor) + sc->hide_cursor != show_cursor) { + [application_id release]; return; + } } break; case ScreenCaptureWindowStream: { if (old_window_id == sc->window && - sc->hide_cursor != show_cursor) + sc->hide_cursor != show_cursor) { + [application_id release]; return; + } } break; case ScreenCaptureApplicationStream: { if (sc->display == display && [application_id isEqualToString:sc->application_id] && - sc->hide_cursor != show_cursor) + sc->hide_cursor != show_cursor) { + [application_id release]; return; + } } break; } } @@ -751,6 +766,7 @@ static void screen_capture_update(void *data, obs_data_t *settings) destroy_screen_stream(sc); sc->capture_type = capture_type; sc->display = display; + [sc->application_id release]; sc->application_id = application_id; sc->hide_cursor = !show_cursor; sc->show_empty_names = show_empty_names; From 0efaf88caf97b8c942abf6866478175e19cf6879 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sun, 20 Nov 2022 19:09:16 -0800 Subject: [PATCH 0220/2225] libobs: Add PQ/HLG support for I210/I412 formats Seen when playing back ProRes files. --- libobs/data/format_conversion.effect | 90 ++++++++++++++++++++++++++++ libobs/obs-source.c | 18 +++++- 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/libobs/data/format_conversion.effect b/libobs/data/format_conversion.effect index 7ce8cbc7d78ebb..60d8229aef3eb8 100644 --- a/libobs/data/format_conversion.effect +++ b/libobs/data/format_conversion.effect @@ -573,6 +573,32 @@ float4 PSPlanar422_10LE_Reverse(VertTexPos frag_in) : TARGET return float4(rgb, 1.); } +float4 PSPlanar422_10LE_PQ_Reverse(VertTexPos frag_in) : TARGET +{ + float y = image.Load(int3(frag_in.pos.xy, 0)).x; + float cb = image1.Sample(def_sampler, frag_in.uv).x; + float cr = image2.Sample(def_sampler, frag_in.uv).x; + float3 yuv = float3(y, cb, cr); + yuv *= 65535. / 1023.; + float3 pq = YUV_to_RGB(yuv); + float3 hdr2020 = st2084_to_linear_eetf(pq, hdr_lw, hdr_lmax) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + +float4 PSPlanar422_10LE_HLG_Reverse(VertTexPos frag_in) : TARGET +{ + float y = image.Load(int3(frag_in.pos.xy, 0)).x; + float cb = image1.Sample(def_sampler, frag_in.uv).x; + float cr = image2.Sample(def_sampler, frag_in.uv).x; + float3 yuv = float3(y, cb, cr); + yuv *= 65535. / 1023.; + float3 hlg = YUV_to_RGB(yuv); + float3 hdr2020 = hlg_to_linear(hlg, hlg_exponent) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + float4 PSPlanar422A_Reverse(VertTexPos frag_in) : TARGET { int3 xy0_luma = int3(frag_in.pos.xy, 0); @@ -609,6 +635,34 @@ float4 PSPlanar444_12LE_Reverse(FragPos frag_in) : TARGET return float4(rgb, 1.); } +float4 PSPlanar444_12LE_PQ_Reverse(FragPos frag_in) : TARGET +{ + int3 xy0 = int3(frag_in.pos.xy, 0); + float y = image.Load(xy0).x; + float cb = image1.Load(xy0).x; + float cr = image2.Load(xy0).x; + float3 yuv = float3(y, cb, cr); + yuv *= 65535. / 4095; + float3 pq = YUV_to_RGB(yuv); + float3 hdr2020 = st2084_to_linear_eetf(pq, hdr_lw, hdr_lmax) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + +float4 PSPlanar444_12LE_HLG_Reverse(FragPos frag_in) : TARGET +{ + int3 xy0 = int3(frag_in.pos.xy, 0); + float y = image.Load(xy0).x; + float cb = image1.Load(xy0).x; + float cr = image2.Load(xy0).x; + float3 yuv = float3(y, cb, cr); + yuv *= 65535. / 4095; + float3 hlg = YUV_to_RGB(yuv); + float3 hdr2020 = hlg_to_linear(hlg, hlg_exponent) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + float4 PSPlanar444A_Reverse(FragPos frag_in) : TARGET { int3 xy0 = int3(frag_in.pos.xy, 0); @@ -1089,6 +1143,24 @@ technique I210_Reverse } } +technique I210_PQ_Reverse +{ + pass + { + vertex_shader = VS422Left_Reverse(id); + pixel_shader = PSPlanar422_10LE_PQ_Reverse(frag_in); + } +} + +technique I210_HLG_Reverse +{ + pass + { + vertex_shader = VS422Left_Reverse(id); + pixel_shader = PSPlanar422_10LE_HLG_Reverse(frag_in); + } +} + technique I42A_Reverse { pass @@ -1116,6 +1188,24 @@ technique I412_Reverse } } +technique I412_PQ_Reverse +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PSPlanar444_12LE_PQ_Reverse(frag_in); + } +} + +technique I412_HLG_Reverse +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PSPlanar444_12LE_HLG_Reverse(frag_in); + } +} + technique YUVA_Reverse { pass diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 64a27a784a140e..497dab62946cd0 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -2134,7 +2134,14 @@ static const char *select_conversion_technique(enum video_format format, return "I444_Reverse"; case VIDEO_FORMAT_I412: - return "I412_Reverse"; + switch (trc) { + case VIDEO_TRC_PQ: + return "I412_PQ_Reverse"; + case VIDEO_TRC_HLG: + return "I412_HLG_Reverse"; + default: + return "I412_Reverse"; + } case VIDEO_FORMAT_Y800: return full_range ? "Y800_Full" : "Y800_Limited"; @@ -2146,7 +2153,14 @@ static const char *select_conversion_technique(enum video_format format, return "I422_Reverse"; case VIDEO_FORMAT_I210: - return "I210_Reverse"; + switch (trc) { + case VIDEO_TRC_PQ: + return "I210_PQ_Reverse"; + case VIDEO_TRC_HLG: + return "I210_HLG_Reverse"; + default: + return "I210_Reverse"; + } case VIDEO_FORMAT_I40A: return "I40A_Reverse"; From 463bf0dff59a452edf66bbdb3ab20995bcfd25b1 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sun, 20 Nov 2022 19:11:27 -0800 Subject: [PATCH 0221/2225] libobs,UI: Add P216/P416 pixel formats Will be useful for ProRes. --- UI/data/locale/en-US.ini | 4 +- UI/window-basic-main.cpp | 4 + UI/window-basic-settings.cpp | 12 +- docs/sphinx/reference-libobs-media-io.rst | 10 + docs/sphinx/reference-outputs.rst | 15 ++ docs/sphinx/reference-sources.rst | 15 ++ libobs/data/format_conversion.effect | 230 ++++++++++++++++++++++ libobs/media-io/video-frame.c | 33 ++++ libobs/media-io/video-io.h | 24 ++- libobs/media-io/video-matrices.c | 4 + libobs/media-io/video-scaler-ffmpeg.c | 14 +- libobs/obs-internal.h | 2 + libobs/obs-video.c | 27 +++ libobs/obs.c | 84 +++++++- plugins/obs-ffmpeg/obs-ffmpeg-formats.h | 6 + 15 files changed, 466 insertions(+), 18 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index a0423ce64ee08d..7a6d40a0fec8b4 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -1148,7 +1148,7 @@ Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal" Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Below Normal" Basic.Settings.Advanced.General.ProcessPriority.Idle="Idle" Basic.Settings.Advanced.FormatWarning="Warning: Color formats other than NV12/P010 are primarily intended for recording, and are not recommended when streaming. Streaming may incur increased CPU usage due to color format conversion." -Basic.Settings.Advanced.FormatWarning10BitSdr="Warning: 10-bit formats are more commonly used with HDR color spaces." +Basic.Settings.Advanced.FormatWarningPreciseSdr="Warning: High-precision formats are more commonly used with HDR color spaces." Basic.Settings.Advanced.FormatWarning2100="Warning: Rec. 2100 should use a format with more precision." Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time" Basic.Settings.Advanced.Video.ColorFormat="Color Format" @@ -1157,6 +1157,8 @@ Basic.Settings.Advanced.Video.ColorFormat.I420="I420 (8-bit, 4:2:0, 3 planes)" Basic.Settings.Advanced.Video.ColorFormat.I444="I444 (8-bit, 4:4:4, 3 planes)" Basic.Settings.Advanced.Video.ColorFormat.P010="P010 (10-bit, 4:2:0, 2 planes)" Basic.Settings.Advanced.Video.ColorFormat.I010="I010 (10-bit, 4:2:0, 3 planes)" +Basic.Settings.Advanced.Video.ColorFormat.P216="P216 (16-bit, 4:2:2, 2 planes)" +Basic.Settings.Advanced.Video.ColorFormat.P416="P416 (16-bit, 4:4:4, 2 planes)" Basic.Settings.Advanced.Video.ColorFormat.BGRA="BGRA (8-bit)" Basic.Settings.Advanced.Video.ColorSpace="Color Space" Basic.Settings.Advanced.Video.ColorSpace.sRGB="sRGB" diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index b5569978c06cd1..5f537befe3e6d7 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -4393,6 +4393,10 @@ static inline enum video_format GetVideoFormatFromName(const char *name) return VIDEO_FORMAT_I010; else if (astrcmpi(name, "P010") == 0) return VIDEO_FORMAT_P010; + else if (astrcmpi(name, "P216") == 0) + return VIDEO_FORMAT_P216; + else if (astrcmpi(name, "P416") == 0) + return VIDEO_FORMAT_P416; #if 0 //currently unsupported else if (astrcmpi(name, "YVYU") == 0) return VIDEO_FORMAT_YVYU; diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 6ada5f496b34e9..e1c5a32a44f8fe 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1006,6 +1006,8 @@ void OBSBasicSettings::LoadColorSpaces() #define CF_I444_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.I444") #define CF_P010_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.P010") #define CF_I010_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.I010") +#define CF_P216_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.P216") +#define CF_P416_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.P416") #define CF_BGRA_STR QTStr("Basic.Settings.Advanced.Video.ColorFormat.BGRA") void OBSBasicSettings::LoadColorFormats() @@ -1015,6 +1017,8 @@ void OBSBasicSettings::LoadColorFormats() ui->colorFormat->addItem(CF_I444_STR, "I444"); ui->colorFormat->addItem(CF_P010_STR, "P010"); ui->colorFormat->addItem(CF_I010_STR, "I010"); + ui->colorFormat->addItem(CF_P216_STR, "P216"); + ui->colorFormat->addItem(CF_P416_STR, "P416"); ui->colorFormat->addItem(CF_BGRA_STR, "RGB"); // Avoid config break } @@ -2599,7 +2603,8 @@ void OBSBasicSettings::UpdateColorFormatSpaceWarning() switch (ui->colorSpace->currentIndex()) { case 3: /* Rec.2100 (PQ) */ case 4: /* Rec.2100 (HLG) */ - if (format == "P010") { + if ((format == "P010") || (format == "P216") || + (format == "P416")) { ui->advancedMsg2->clear(); } else if (format == "I010") { ui->advancedMsg2->setText( @@ -2612,9 +2617,10 @@ void OBSBasicSettings::UpdateColorFormatSpaceWarning() default: if (format == "NV12") { ui->advancedMsg2->clear(); - } else if ((format == "I010") || (format == "P010")) { + } else if ((format == "I010") || (format == "P010") || + (format == "P216") || (format == "P416")) { ui->advancedMsg2->setText(QTStr( - "Basic.Settings.Advanced.FormatWarning10BitSdr")); + "Basic.Settings.Advanced.FormatWarningPreciseSdr")); } else { ui->advancedMsg2->setText( QTStr("Basic.Settings.Advanced.FormatWarning")); diff --git a/docs/sphinx/reference-libobs-media-io.rst b/docs/sphinx/reference-libobs-media-io.rst index 88ae5c02cb1f53..ec88c1658ee731 100644 --- a/docs/sphinx/reference-libobs-media-io.rst +++ b/docs/sphinx/reference-libobs-media-io.rst @@ -48,6 +48,16 @@ Video Handler - VIDEO_FORMAT_I010 - VIDEO_FORMAT_P010 + - VIDEO_FORMAT_I210 + + - VIDEO_FORMAT_I412 + + - VIDEO_FORMAT_YA2L + + - VIDEO_FORMAT_P216 + + - VIDEO_FORMAT_P416 + --------------------- .. enum:: video_trc diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index 730a6bb4bae3d9..28dad380504df2 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -747,6 +747,21 @@ Functions used by outputs /* planar 4:2:0 format, 10 bpp */ VIDEO_FORMAT_I010, /* three-plane */ VIDEO_FORMAT_P010, /* two-plane, luma and packed chroma */ + + /* planar 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_I210, + + /* planar 4:4:4 format, 12 bpp */ + VIDEO_FORMAT_I412, + + /* planar 4:4:4:4 format, 12 bpp */ + VIDEO_FORMAT_YA2L, + + /* planar 4:2:2 format, 16 bpp */ + VIDEO_FORMAT_P216, /* two-plane, luma and packed chroma */ + + /* planar 4:4:4 format, 16 bpp */ + VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ }; enum video_colorspace { diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index 6a38adc9454e72..b72e96b45e6e36 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -1425,6 +1425,21 @@ Functions used by sources /* planar 4:2:0 format, 10 bpp */ VIDEO_FORMAT_I010, /* three-plane */ VIDEO_FORMAT_P010, /* two-plane, luma and packed chroma */ + + /* planar 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_I210, + + /* planar 4:4:4 format, 12 bpp */ + VIDEO_FORMAT_I412, + + /* planar 4:4:4:4 format, 12 bpp */ + VIDEO_FORMAT_YA2L, + + /* planar 4:2:2 format, 16 bpp */ + VIDEO_FORMAT_P216, /* two-plane, luma and packed chroma */ + + /* planar 4:4:4 format, 16 bpp */ + VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ }; struct obs_source_frame { diff --git a/libobs/data/format_conversion.effect b/libobs/data/format_conversion.effect index 60d8229aef3eb8..a88da9eb6a767e 100644 --- a/libobs/data/format_conversion.effect +++ b/libobs/data/format_conversion.effect @@ -252,6 +252,58 @@ float PS_P010_SRGB_Y(FragPos frag_in) : TARGET return y; } +float PS_P216_PQ_Y_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb * sdr_white_nits_over_maximum; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_st2084(rgb); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + +float PS_P216_HLG_Y_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb * sdr_white_nits_over_maximum; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_hlg(rgb, hdr_lw); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + +float PS_P216_SRGB_Y(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; + rgb = srgb_linear_to_nonlinear(rgb); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + +float PS_P416_PQ_Y_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb * sdr_white_nits_over_maximum; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_st2084(rgb); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + +float PS_P416_HLG_Y_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb * sdr_white_nits_over_maximum; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_hlg(rgb, hdr_lw); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + +float PS_P416_SRGB_Y(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; + rgb = srgb_linear_to_nonlinear(rgb); + float y = dot(color_vec0.xyz, rgb) + color_vec0.w; + return y; +} + float PS_I010_PQ_Y_709_2020(FragPos frag_in) : TARGET { float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb * sdr_white_nits_over_maximum; @@ -333,6 +385,76 @@ float2 PS_P010_SRGB_UV_Wide(FragTexWide frag_in) : TARGET return uv; } +float2 PS_P216_PQ_UV_709_2020_Wide(FragTexWide frag_in) : TARGET +{ + float3 rgb_left = image.Sample(def_sampler, frag_in.uuv.xz).rgb; + float3 rgb_right = image.Sample(def_sampler, frag_in.uuv.yz).rgb; + float3 rgb = (rgb_left + rgb_right) * (0.5 * sdr_white_nits_over_maximum); + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_st2084(rgb); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + +float2 PS_P216_HLG_UV_709_2020_Wide(FragTexWide frag_in) : TARGET +{ + float3 rgb_left = image.Sample(def_sampler, frag_in.uuv.xz).rgb; + float3 rgb_right = image.Sample(def_sampler, frag_in.uuv.yz).rgb; + float3 rgb = (rgb_left + rgb_right) * (0.5 * sdr_white_nits_over_maximum); + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_hlg(rgb, hdr_lw); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + +float2 PS_P216_SRGB_UV_Wide(FragTexWide frag_in) : TARGET +{ + float3 rgb_left = image.Sample(def_sampler, frag_in.uuv.xz).rgb; + float3 rgb_right = image.Sample(def_sampler, frag_in.uuv.yz).rgb; + float3 rgb = (rgb_left + rgb_right) * 0.5; + rgb = srgb_linear_to_nonlinear(rgb); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + +float2 PS_P416_PQ_UV_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_st2084(rgb); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + +float2 PS_P416_HLG_UV_709_2020(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; + rgb = rec709_to_rec2020(rgb); + rgb = linear_to_hlg(rgb, hdr_lw); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + +float2 PS_P416_SRGB_UV(FragPos frag_in) : TARGET +{ + float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; + rgb = srgb_linear_to_nonlinear(rgb); + float u = dot(color_vec1.xyz, rgb) + color_vec1.w; + float v = dot(color_vec2.xyz, rgb) + color_vec2.w; + float2 uv = float2(u, v); + return uv; +} + float PS_U(FragPos frag_in) : TARGET { float3 rgb = image.Load(int3(frag_in.pos.xy, 0)).rgb; @@ -1044,6 +1166,114 @@ technique P010_SRGB_UV } } +technique P216_PQ_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P216_PQ_Y_709_2020(frag_in); + } +} + +technique P216_HLG_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P216_HLG_Y_709_2020(frag_in); + } +} + +technique P216_SRGB_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P216_SRGB_Y(frag_in); + } +} + +technique P216_PQ_UV +{ + pass + { + vertex_shader = VSTexPos_Left(id); + pixel_shader = PS_P216_PQ_UV_709_2020_Wide(frag_in); + } +} + +technique P216_HLG_UV +{ + pass + { + vertex_shader = VSTexPos_Left(id); + pixel_shader = PS_P216_HLG_UV_709_2020_Wide(frag_in); + } +} + +technique P216_SRGB_UV +{ + pass + { + vertex_shader = VSTexPos_Left(id); + pixel_shader = PS_P216_SRGB_UV_Wide(frag_in); + } +} + +technique P416_PQ_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_PQ_Y_709_2020(frag_in); + } +} + +technique P416_HLG_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_HLG_Y_709_2020(frag_in); + } +} + +technique P416_SRGB_Y +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_SRGB_Y(frag_in); + } +} + +technique P416_PQ_UV +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_PQ_UV_709_2020(frag_in); + } +} + +technique P416_HLG_UV +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_HLG_UV_709_2020(frag_in); + } +} + +technique P416_SRGB_UV +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PS_P416_SRGB_UV(frag_in); + } +} + technique UYVY_Reverse { pass diff --git a/libobs/media-io/video-frame.c b/libobs/media-io/video-frame.c index b5a7e6b9594507..21491b55eb78db 100644 --- a/libobs/media-io/video-frame.c +++ b/libobs/media-io/video-frame.c @@ -303,6 +303,33 @@ void video_frame_init(struct video_frame *frame, enum video_format format, frame->linesize[1] = cbcr_width * 2; break; } + + case VIDEO_FORMAT_P216: { + size = width * height * 2; + ALIGN_SIZE(size, alignment); + offsets[0] = size; + const uint32_t cbcr_width = (width + 1) & (UINT32_MAX - 1); + size += cbcr_width * height * 2; + ALIGN_SIZE(size, alignment); + frame->data[0] = bmalloc(size); + frame->data[1] = (uint8_t *)frame->data[0] + offsets[0]; + frame->linesize[0] = width * 2; + frame->linesize[1] = cbcr_width * 2; + break; + } + + case VIDEO_FORMAT_P416: { + size = width * height * 2; + ALIGN_SIZE(size, alignment); + offsets[0] = size; + size += width * height * 4; + ALIGN_SIZE(size, alignment); + frame->data[0] = bmalloc(size); + frame->data[1] = (uint8_t *)frame->data[0] + offsets[0]; + frame->linesize[0] = width * 2; + frame->linesize[1] = width * 4; + break; + } } } @@ -362,5 +389,11 @@ void video_frame_copy(struct video_frame *dst, const struct video_frame *src, memcpy(dst->data[2], src->data[2], src->linesize[2] * cy); memcpy(dst->data[3], src->data[3], src->linesize[3] * cy); break; + + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: + memcpy(dst->data[0], src->data[0], src->linesize[0] * cy); + memcpy(dst->data[1], src->data[1], src->linesize[1] * cy); + break; } } diff --git a/libobs/media-io/video-io.h b/libobs/media-io/video-io.h index 97985a94102c5f..b5efc8c704616f 100644 --- a/libobs/media-io/video-io.h +++ b/libobs/media-io/video-io.h @@ -74,14 +74,20 @@ enum video_format { VIDEO_FORMAT_I010, /* three-plane */ VIDEO_FORMAT_P010, /* two-plane, luma and packed chroma */ - /* planar 4:2:2 10 bits */ - VIDEO_FORMAT_I210, // Little Endian + /* planar 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_I210, - /* planar 4:4:4 12 bits */ - VIDEO_FORMAT_I412, // Little Endian + /* planar 4:4:4 format, 12 bpp */ + VIDEO_FORMAT_I412, - /* planar 4:4:4 12 bits with alpha */ - VIDEO_FORMAT_YA2L, // Little Endian + /* planar 4:4:4:4 format, 12 bpp */ + VIDEO_FORMAT_YA2L, + + /* planar 4:2:2 format, 16 bpp */ + VIDEO_FORMAT_P216, /* two-plane, luma and packed chroma */ + + /* planar 4:4:4 format, 16 bpp */ + VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ }; enum video_trc { @@ -145,6 +151,8 @@ static inline bool format_is_yuv(enum video_format format) case VIDEO_FORMAT_AYUV: case VIDEO_FORMAT_I010: case VIDEO_FORMAT_P010: + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: return true; case VIDEO_FORMAT_NONE: case VIDEO_FORMAT_RGBA: @@ -203,6 +211,10 @@ static inline const char *get_video_format_name(enum video_format format) return "I010"; case VIDEO_FORMAT_P010: return "P010"; + case VIDEO_FORMAT_P216: + return "P216"; + case VIDEO_FORMAT_P416: + return "P416"; case VIDEO_FORMAT_NONE:; } diff --git a/libobs/media-io/video-matrices.c b/libobs/media-io/video-matrices.c index a054313050d64e..3feb1467341ea4 100644 --- a/libobs/media-io/video-matrices.c +++ b/libobs/media-io/video-matrices.c @@ -269,6 +269,10 @@ bool video_format_get_parameters_for_format(enum video_colorspace color_space, case VIDEO_FORMAT_YA2L: bpc = 12; break; + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: + bpc = 16; + break; default: bpc = 8; break; diff --git a/libobs/media-io/video-scaler-ffmpeg.c b/libobs/media-io/video-scaler-ffmpeg.c index c83fced2e31b84..102ca3d81d6374 100644 --- a/libobs/media-io/video-scaler-ffmpeg.c +++ b/libobs/media-io/video-scaler-ffmpeg.c @@ -68,23 +68,25 @@ get_ffmpeg_video_format(enum video_format format) return AV_PIX_FMT_YUVA422P; case VIDEO_FORMAT_YUVA: return AV_PIX_FMT_YUVA444P; - case VIDEO_FORMAT_YA2L: #if LIBAVUTIL_BUILD >= AV_VERSION_INT(56, 31, 100) + case VIDEO_FORMAT_YA2L: return AV_PIX_FMT_YUVA444P12LE; -#else - return AV_PIX_FMT_NONE; #endif case VIDEO_FORMAT_I010: return AV_PIX_FMT_YUV420P10LE; case VIDEO_FORMAT_P010: return AV_PIX_FMT_P010LE; +#if LIBAVUTIL_BUILD >= AV_VERSION_INT(57, 17, 100) + case VIDEO_FORMAT_P216: + return AV_PIX_FMT_P216LE; + case VIDEO_FORMAT_P416: + return AV_PIX_FMT_P416LE; +#endif case VIDEO_FORMAT_NONE: case VIDEO_FORMAT_AYUV: - /* not supported by FFmpeg */ + default: return AV_PIX_FMT_NONE; } - - return AV_PIX_FMT_NONE; } static inline int get_ffmpeg_scale_type(enum video_scale_type type) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 2ddb6865af8a78..b7df1f235142b8 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -909,6 +909,8 @@ convert_video_format(enum video_format format, enum video_trc trc) case VIDEO_FORMAT_I210: case VIDEO_FORMAT_I412: case VIDEO_FORMAT_YA2L: + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: return GS_RGBA16F; default: return GS_BGRX; diff --git a/libobs/obs-video.c b/libobs/obs-video.c index a2e9653fb9631b..ab66db3c5eeef5 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -729,6 +729,33 @@ static void set_gpu_converted_data(struct video_frame *output, break; } + case VIDEO_FORMAT_P216: { + const uint32_t width_x2 = info->width * 2; + const uint32_t height = info->height; + + set_gpu_converted_plane(width_x2, height, input->linesize[0], + output->linesize[0], input->data[0], + output->data[0]); + + set_gpu_converted_plane(width_x2, height, input->linesize[1], + output->linesize[1], input->data[1], + output->data[1]); + + break; + } + case VIDEO_FORMAT_P416: { + const uint32_t height = info->height; + + set_gpu_converted_plane(info->width * 2, height, + input->linesize[0], output->linesize[0], + input->data[0], output->data[0]); + + set_gpu_converted_plane(info->width * 4, height, + input->linesize[1], output->linesize[1], + input->data[1], output->data[1]); + + break; + } case VIDEO_FORMAT_NONE: case VIDEO_FORMAT_YVYU: diff --git a/libobs/obs.c b/libobs/obs.c index db39833ce7392e..bf045f68fbe7c2 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -109,6 +109,36 @@ static inline void calc_gpu_conversion_sizes(struct obs_core_video_mix *video) video->conversion_techs[1] = "P010_SRGB_UV"; } break; + case VIDEO_FORMAT_P216: + video->conversion_needed = true; + video->conversion_width_i = 1.f / (float)info->width; + video->conversion_height_i = 1.f / (float)info->height; + if (info->colorspace == VIDEO_CS_2100_PQ) { + video->conversion_techs[0] = "P216_PQ_Y"; + video->conversion_techs[1] = "P216_PQ_UV"; + } else if (info->colorspace == VIDEO_CS_2100_HLG) { + video->conversion_techs[0] = "P216_HLG_Y"; + video->conversion_techs[1] = "P216_HLG_UV"; + } else { + video->conversion_techs[0] = "P216_SRGB_Y"; + video->conversion_techs[1] = "P216_SRGB_UV"; + } + break; + case VIDEO_FORMAT_P416: + video->conversion_needed = true; + video->conversion_width_i = 1.f / (float)info->width; + video->conversion_height_i = 1.f / (float)info->height; + if (info->colorspace == VIDEO_CS_2100_PQ) { + video->conversion_techs[0] = "P416_PQ_Y"; + video->conversion_techs[1] = "P416_PQ_UV"; + } else if (info->colorspace == VIDEO_CS_2100_HLG) { + video->conversion_techs[0] = "P416_HLG_Y"; + video->conversion_techs[1] = "P416_HLG_UV"; + } else { + video->conversion_techs[0] = "P416_SRGB_Y"; + video->conversion_techs[1] = "P416_SRGB_UV"; + } + break; default: break; } @@ -237,6 +267,26 @@ static bool obs_init_gpu_conversion(struct obs_core_video_mix *video) if (!video->convert_textures[0] || !video->convert_textures[1]) success = false; break; + case VIDEO_FORMAT_P216: + video->convert_textures[0] = + gs_texture_create(info->width, info->height, GS_R16, 1, + NULL, GS_RENDER_TARGET); + video->convert_textures[1] = + gs_texture_create(info->width / 2, info->height, + GS_RG16, 1, NULL, GS_RENDER_TARGET); + if (!video->convert_textures[0] || !video->convert_textures[1]) + success = false; + break; + case VIDEO_FORMAT_P416: + video->convert_textures[0] = + gs_texture_create(info->width, info->height, GS_R16, 1, + NULL, GS_RENDER_TARGET); + video->convert_textures[1] = + gs_texture_create(info->width, info->height, GS_RG16, 1, + NULL, GS_RENDER_TARGET); + if (!video->convert_textures[0] || !video->convert_textures[1]) + success = false; + break; default: break; } @@ -328,6 +378,26 @@ static bool obs_init_gpu_copy_surfaces(struct obs_core_video_mix *video, if (!video->copy_surfaces[i][1]) return false; break; + case VIDEO_FORMAT_P216: + video->copy_surfaces[i][0] = gs_stagesurface_create( + info->width, info->height, GS_R16); + if (!video->copy_surfaces[i][0]) + return false; + video->copy_surfaces[i][1] = gs_stagesurface_create( + info->width / 2, info->height, GS_RG16); + if (!video->copy_surfaces[i][1]) + return false; + break; + case VIDEO_FORMAT_P416: + video->copy_surfaces[i][0] = gs_stagesurface_create( + info->width, info->height, GS_R16); + if (!video->copy_surfaces[i][0]) + return false; + video->copy_surfaces[i][1] = gs_stagesurface_create( + info->width, info->height, GS_RG16); + if (!video->copy_surfaces[i][1]) + return false; + break; default: break; } @@ -349,6 +419,8 @@ static bool obs_init_textures(struct obs_core_video_mix *video) case VIDEO_FORMAT_I210: case VIDEO_FORMAT_I412: case VIDEO_FORMAT_YA2L: + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: format = GS_RGBA16F; break; default: @@ -398,9 +470,17 @@ static bool obs_init_textures(struct obs_core_video_mix *video) space = GS_CS_709_EXTENDED; break; default: - if (info->format == VIDEO_FORMAT_I010 || - info->format == VIDEO_FORMAT_P010) + switch (info->format) { + case VIDEO_FORMAT_I010: + case VIDEO_FORMAT_P010: + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: space = GS_CS_SRGB_16F; + break; + default: + space = GS_CS_SRGB; + break; + } break; } diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h index c33424a24a062d..b9cc7ac5d42af9 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-formats.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-formats.h @@ -56,6 +56,12 @@ obs_to_ffmpeg_video_format(enum video_format format) return AV_PIX_FMT_YUV420P10LE; case VIDEO_FORMAT_P010: return AV_PIX_FMT_P010LE; +#if LIBAVUTIL_BUILD >= AV_VERSION_INT(57, 17, 100) + case VIDEO_FORMAT_P216: + return AV_PIX_FMT_P216LE; + case VIDEO_FORMAT_P416: + return AV_PIX_FMT_P416LE; +#endif case VIDEO_FORMAT_NONE: case VIDEO_FORMAT_AYUV: default: From 09c2a321cefc3f02a27cd14ebdc440acb56dc802 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sun, 20 Nov 2022 19:12:50 -0800 Subject: [PATCH 0222/2225] mac-videotoolbox: Add ProRes 4444 (XQ) support Also leverage P216/P416 pixel formats to retain precision. --- .../mac-videotoolbox/data/locale/en-US.ini | 2 + plugins/mac-videotoolbox/encoder.c | 49 +++++++++++++++---- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/plugins/mac-videotoolbox/data/locale/en-US.ini b/plugins/mac-videotoolbox/data/locale/en-US.ini index 310ee62d49aba5..9091740098dafd 100644 --- a/plugins/mac-videotoolbox/data/locale/en-US.ini +++ b/plugins/mac-videotoolbox/data/locale/en-US.ini @@ -17,6 +17,8 @@ UseBFrames="Use B-Frames" RateControl="Rate Control" ColorFormatUnsupported="The selected color format is not supported by the selected Apple VT encoder. Select a compatible color format in Settings -> Advanced or use a different encoder." ProResCodec="ProRes Codec" +ProRes4444XQ="ProRes 4444 XQ" +ProRes4444="ProRes 4444" ProRes422Proxy="ProRes 422 Proxy" ProRes422LT="ProRes 422 LT" ProRes422="ProRes 422" diff --git a/plugins/mac-videotoolbox/encoder.c b/plugins/mac-videotoolbox/encoder.c index 7bd21202550e15..9191045419bbc9 100644 --- a/plugins/mac-videotoolbox/encoder.c +++ b/plugins/mac-videotoolbox/encoder.c @@ -72,6 +72,10 @@ static const char *codec_type_to_print_fmt(CMVideoCodecType codec_type) return "h264"; case kCMVideoCodecType_HEVC: return "hevc"; + case kCMVideoCodecType_AppleProRes4444XQ: + return "ap4x"; + case kCMVideoCodecType_AppleProRes4444: + return "ap4h"; case kCMVideoCodecType_AppleProRes422Proxy: return "apco"; case kCMVideoCodecType_AppleProRes422LT: @@ -685,9 +689,22 @@ static bool set_video_format(struct vt_encoder *enc, enum video_format format, ? kCVPixelFormatType_420YpCbCr10BiPlanarFullRange : kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange; return true; - } else { - return false; } + break; + case VIDEO_FORMAT_P216: + if (!full_range) { + enc->vt_pix_fmt = + kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange; + return true; + } + break; + case VIDEO_FORMAT_P416: + if (!full_range) { + enc->vt_pix_fmt = + kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange; + return true; + } + break; default: return false; } @@ -1354,32 +1371,44 @@ static obs_properties_t *vt_properties_prores(void *unused, void *data) for (size_t i = 0; i < size; ++i) { switch (encoder_list[i].codec_type) { - case kCMVideoCodecType_AppleProRes422Proxy: + case kCMVideoCodecType_AppleProRes4444XQ: codec_availability_flags |= (1 << 0); break; - case kCMVideoCodecType_AppleProRes422LT: + case kCMVideoCodecType_AppleProRes4444: codec_availability_flags |= (1 << 1); break; - case kCMVideoCodecType_AppleProRes422: + case kCMVideoCodecType_AppleProRes422Proxy: codec_availability_flags |= (1 << 2); break; - case kCMVideoCodecType_AppleProRes422HQ: + case kCMVideoCodecType_AppleProRes422LT: codec_availability_flags |= (1 << 3); break; + case kCMVideoCodecType_AppleProRes422: + codec_availability_flags |= (1 << 4); + break; + case kCMVideoCodecType_AppleProRes422HQ: + codec_availability_flags |= (1 << 5); + break; } } if (codec_availability_flags & (1 << 0)) + obs_property_list_add_int(p, obs_module_text("ProRes4444XQ"), + kCMVideoCodecType_AppleProRes4444XQ); + if (codec_availability_flags & (1 << 1)) + obs_property_list_add_int(p, obs_module_text("ProRes4444"), + kCMVideoCodecType_AppleProRes4444); + if (codec_availability_flags & (1 << 2)) obs_property_list_add_int( p, obs_module_text("ProRes422Proxy"), kCMVideoCodecType_AppleProRes422Proxy); - if (codec_availability_flags & (1 << 1)) + if (codec_availability_flags & (1 << 3)) obs_property_list_add_int(p, obs_module_text("ProRes422LT"), kCMVideoCodecType_AppleProRes422LT); - if (codec_availability_flags & (1 << 2)) + if (codec_availability_flags & (1 << 4)) obs_property_list_add_int(p, obs_module_text("ProRes422"), kCMVideoCodecType_AppleProRes422); - if (codec_availability_flags & (1 << 3)) + if (codec_availability_flags & (1 << 5)) obs_property_list_add_int(p, obs_module_text("ProRes422HQ"), kCMVideoCodecType_AppleProRes422HQ); @@ -1561,6 +1590,8 @@ void obs_module_post_load(void) codec_type); break; + case kCMVideoCodecType_AppleProRes4444XQ: + case kCMVideoCodecType_AppleProRes4444: case kCMVideoCodecType_AppleProRes422Proxy: case kCMVideoCodecType_AppleProRes422LT: case kCMVideoCodecType_AppleProRes422HQ: From 80616520516970d3228ee98c452af1ee718d19aa Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Tue, 21 Feb 2023 19:41:09 +0100 Subject: [PATCH 0223/2225] mac-videotoolbox: Refactor implementation Existing code made use of macros which broke parsing in Xcode and complicated debugging as crucial code was executed within macros and not actual source code. Use of mutable CoreFramework data structures (which were never mutated) is replaced by use of faster non-mutable variants. When an allocator needs to be used, `kCFAllocatorDefault` is specified explicitly. VideoToolbox session properties are also set in bulk instead of multiple consecutive calls. Also simplifies detection of Apple Silicon hosts to make code more readable. --- plugins/mac-videotoolbox/encoder.c | 505 +++++++++++++++++------------ 1 file changed, 301 insertions(+), 204 deletions(-) diff --git a/plugins/mac-videotoolbox/encoder.c b/plugins/mac-videotoolbox/encoder.c index 9191045419bbc9..893dffb7225977 100644 --- a/plugins/mac-videotoolbox/encoder.c +++ b/plugins/mac-videotoolbox/encoder.c @@ -36,6 +36,12 @@ struct vt_prores_encoder_data { static DARRAY(struct vt_prores_encoder_data) vt_prores_hardware_encoder_list; static DARRAY(struct vt_prores_encoder_data) vt_prores_software_encoder_list; +#ifdef __aarch64__ +bool is_apple_silicon = true; +#else +bool is_apple_silicon = false; +#endif + struct vt_encoder { obs_encoder_t *encoder; @@ -50,7 +56,7 @@ struct vt_encoder { float quality; bool limit_bitrate; uint32_t rc_max_bitrate; - float rc_max_bitrate_window; + double rc_max_bitrate_window; const char *profile; CMVideoCodecType codec_type; bool bframes; @@ -215,7 +221,7 @@ static CFDataRef obs_to_vt_masteringdisplay(uint32_t hdr_nominal_peak_level) UInt8 bytes[sizeof(struct mastering_display_colour_volume)]; memcpy(bytes, &mdcv, sizeof(bytes)); - return CFDataCreate(NULL, bytes, sizeof(bytes)); + return CFDataCreate(kCFAllocatorDefault, bytes, sizeof(bytes)); } /* Adapted from Chromium GenerateContentLightLevelInfo */ @@ -237,20 +243,9 @@ obs_to_vt_contentlightlevelinfo(uint16_t hdr_nominal_peak_level) UInt8 bytes[sizeof(struct content_light_level_info)]; memcpy(bytes, &clli, sizeof(bytes)); - return CFDataCreate(NULL, bytes, sizeof(bytes)); + return CFDataCreate(kCFAllocatorDefault, bytes, sizeof(bytes)); } -#define STATUS_CHECK(c) \ - code = c; \ - if (code) { \ - log_osstatus(LOG_ERROR, enc, #c, code); \ - goto fail; \ - } - -#define SESSION_CHECK(x) \ - if ((code = (x)) != noErr) \ - return code; - static OSStatus session_set_prop_float(VTCompressionSessionRef session, CFStringRef key, float val) { @@ -290,7 +285,7 @@ static OSStatus session_set_prop(VTCompressionSessionRef session, static OSStatus session_set_bitrate(VTCompressionSessionRef session, const char *rate_control, int new_bitrate, float quality, bool limit_bitrate, - int max_bitrate, float max_bitrate_window) + int max_bitrate, double max_bitrate_window) { OSStatus code; @@ -304,11 +299,7 @@ static OSStatus session_set_bitrate(VTCompressionSessionRef session, if (__builtin_available(macOS 13.0, *)) { #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 130000 -#ifdef __aarch64__ - if (true) { -#else - if (os_get_emulation_status() == true) { -#endif + if (is_apple_silicon) { compressionPropertyKey = kVTCompressionPropertyKey_ConstantBitRate; can_limit_bitrate = false; @@ -332,15 +323,14 @@ static OSStatus session_set_bitrate(VTCompressionSessionRef session, kVTCompressionPropertyKey_AverageBitRate; can_limit_bitrate = true; } else if (strcmp(rate_control, "CRF") == 0) { -#ifdef __aarch64__ - if (true) { -#else - if (os_get_emulation_status() == true) { -#endif + if (is_apple_silicon) { compressionPropertyKey = kVTCompressionPropertyKey_Quality; - SESSION_CHECK(session_set_prop_float( - session, compressionPropertyKey, quality)); + code = session_set_prop_float( + session, compressionPropertyKey, quality); + if (code != noErr) { + return code; + } } else { VT_LOG(LOG_WARNING, "CRF support for VideoToolbox encoder requires Apple Silicon. " @@ -357,31 +347,34 @@ static OSStatus session_set_bitrate(VTCompressionSessionRef session, } if (compressionPropertyKey != kVTCompressionPropertyKey_Quality) { - SESSION_CHECK(session_set_prop_int( - session, compressionPropertyKey, new_bitrate * 1000)); + code = session_set_prop_int(session, compressionPropertyKey, + new_bitrate * 1000); + if (code != noErr) { + return code; + } } if (limit_bitrate && can_limit_bitrate) { - int32_t cpb_size = max_bitrate * 125 * max_bitrate_window; + double cpb_size = max_bitrate * 125 * max_bitrate_window; - CFNumberRef cf_cpb_size = - CFNumberCreate(NULL, kCFNumberIntType, &cpb_size); - CFNumberRef cf_cpb_window_s = CFNumberCreate( - NULL, kCFNumberFloatType, &max_bitrate_window); + CFNumberRef cf_cpb_size = CFNumberCreate( + kCFAllocatorDefault, kCFNumberIntType, &cpb_size); + CFNumberRef cf_cpb_window_size = + CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, + &max_bitrate_window); - CFMutableArrayRef rate_control = CFArrayCreateMutable( - kCFAllocatorDefault, 2, &kCFTypeArrayCallBacks); + CFTypeRef values[2] = {cf_cpb_size, cf_cpb_window_size}; - CFArrayAppendValue(rate_control, cf_cpb_size); - CFArrayAppendValue(rate_control, cf_cpb_window_s); + CFArrayRef rate_control_data = CFArrayCreate( + kCFAllocatorDefault, values, 2, &kCFTypeArrayCallBacks); code = session_set_prop( session, kVTCompressionPropertyKey_DataRateLimits, - rate_control); + rate_control_data); CFRelease(cf_cpb_size); - CFRelease(cf_cpb_window_s); - CFRelease(rate_control); + CFRelease(cf_cpb_window_size); + CFRelease(rate_control_data); if (code == kVTPropertyNotSupportedErr) { log_osstatus(LOG_WARNING, NULL, @@ -397,43 +390,73 @@ static OSStatus session_set_colorspace(VTCompressionSessionRef session, enum video_colorspace cs) { OSStatus code; - SESSION_CHECK(session_set_prop(session, - kVTCompressionPropertyKey_ColorPrimaries, - obs_to_vt_primaries(cs))); - SESSION_CHECK(session_set_prop( - session, kVTCompressionPropertyKey_TransferFunction, - obs_to_vt_transfer(cs))); - SESSION_CHECK(session_set_prop(session, - kVTCompressionPropertyKey_YCbCrMatrix, - obs_to_vt_colorspace(cs))); - const bool pq = cs == VIDEO_CS_2100_PQ; - const bool hlg = cs == VIDEO_CS_2100_HLG; - if (pq || hlg) { + + CFTypeRef keys[5] = {kVTCompressionPropertyKey_ColorPrimaries, + kVTCompressionPropertyKey_TransferFunction, + kVTCompressionPropertyKey_YCbCrMatrix, NULL, NULL}; + + CFTypeRef values[5] = {obs_to_vt_primaries(cs), obs_to_vt_transfer(cs), + obs_to_vt_colorspace(cs), NULL, NULL}; + + CFDataRef masteringDisplayColorVolume = NULL; + CFDataRef contentLightLevel = NULL; + + if (cs == VIDEO_CS_2100_PQ) { const uint16_t hdr_nominal_peak_level = - pq ? (uint16_t)obs_get_video_hdr_nominal_peak_level() - : (hlg ? 1000 : 0); - SESSION_CHECK(session_set_prop( - session, - kVTCompressionPropertyKey_MasteringDisplayColorVolume, - obs_to_vt_masteringdisplay(hdr_nominal_peak_level))); - SESSION_CHECK(session_set_prop( - session, - kVTCompressionPropertyKey_ContentLightLevelInfo, - obs_to_vt_contentlightlevelinfo( - hdr_nominal_peak_level))); + (uint16_t)obs_get_video_hdr_nominal_peak_level(); + + masteringDisplayColorVolume = + obs_to_vt_masteringdisplay(hdr_nominal_peak_level); + contentLightLevel = + obs_to_vt_contentlightlevelinfo(hdr_nominal_peak_level); + + keys[3] = kVTCompressionPropertyKey_MasteringDisplayColorVolume; + keys[4] = kVTCompressionPropertyKey_ContentLightLevelInfo; + values[3] = masteringDisplayColorVolume; + values[4] = contentLightLevel; + } else if (cs == VIDEO_CS_2100_HLG) { + masteringDisplayColorVolume = obs_to_vt_masteringdisplay(1000); + contentLightLevel = obs_to_vt_contentlightlevelinfo(1000); + + keys[3] = kVTCompressionPropertyKey_MasteringDisplayColorVolume; + keys[4] = kVTCompressionPropertyKey_ContentLightLevelInfo; + values[3] = masteringDisplayColorVolume; + values[4] = contentLightLevel; } - return noErr; -} + CFDictionaryRef session_properties = + CFDictionaryCreate(kCFAllocatorDefault, keys, values, 5, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + code = VTSessionSetProperties(session, session_properties); + + CFRelease(session_properties); + + if (masteringDisplayColorVolume != NULL) { + CFRelease(masteringDisplayColorVolume); + } + + if (contentLightLevel != NULL) { + CFRelease(contentLightLevel); + } -#undef SESSION_CHECK + return code; +} void sample_encoded_callback(void *data, void *source, OSStatus status, VTEncodeInfoFlags info_flags, CMSampleBufferRef buffer) { - UNUSED_PARAMETER(status); - UNUSED_PARAMETER(info_flags); + + if (status != noErr) { + log_osstatus(LOG_ERROR, NULL, "encoder callback", status); + return; + } + + if (info_flags == kVTEncodeInfo_FrameDropped) { + VT_LOG(LOG_INFO, "Frame dropped by encoder"); + } CMSimpleQueueRef queue = data; CVPixelBufferRef pixbuf = source; @@ -443,23 +466,26 @@ void sample_encoded_callback(void *data, void *source, OSStatus status, } CFRelease(pixbuf); } -#define ENCODER_ID kVTVideoEncoderSpecification_EncoderID -static inline CFMutableDictionaryRef -create_encoder_spec(const char *vt_encoder_id) -{ - CFMutableDictionaryRef encoder_spec = CFDictionaryCreateMutable( - kCFAllocatorDefault, 3, &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); +static inline CFDictionaryRef create_encoder_spec(const char *vt_encoder_id) +{ CFStringRef id = CFStringCreateWithFileSystemRepresentation(NULL, vt_encoder_id); - CFDictionaryAddValue(encoder_spec, ENCODER_ID, id); + + CFTypeRef keys[1] = {kVTVideoEncoderSpecification_EncoderID}; + CFTypeRef values[1] = {id}; + + CFDictionaryRef encoder_spec = + CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + CFRelease(id); return encoder_spec; } -static inline CFMutableDictionaryRef +static inline CFDictionaryRef create_prores_encoder_spec(CMVideoCodecType target_codec_type, bool hardware_accelerated) { @@ -481,34 +507,38 @@ create_prores_encoder_spec(CMVideoCodecType target_codec_type, } } - CFMutableDictionaryRef encoder_spec = CFDictionaryCreateMutable( - kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); + CFTypeRef keys[1] = {kVTVideoEncoderSpecification_EncoderID}; + CFTypeRef values[1] = {encoder_id}; - CFDictionaryAddValue(encoder_spec, ENCODER_ID, encoder_id); + CFDictionaryRef encoder_spec = + CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); return encoder_spec; } -#undef ENCODER_ID -static inline CFMutableDictionaryRef create_pixbuf_spec(struct vt_encoder *enc) +static inline CFDictionaryRef create_pixbuf_spec(struct vt_encoder *enc) { - CFMutableDictionaryRef pixbuf_spec = CFDictionaryCreateMutable( - kCFAllocatorDefault, 3, &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - CFNumberRef n = - CFNumberCreate(NULL, kCFNumberSInt32Type, &enc->vt_pix_fmt); - CFDictionaryAddValue(pixbuf_spec, kCVPixelBufferPixelFormatTypeKey, n); - CFRelease(n); - - n = CFNumberCreate(NULL, kCFNumberSInt32Type, &enc->width); - CFDictionaryAddValue(pixbuf_spec, kCVPixelBufferWidthKey, n); - CFRelease(n); - - n = CFNumberCreate(NULL, kCFNumberSInt32Type, &enc->height); - CFDictionaryAddValue(pixbuf_spec, kCVPixelBufferHeightKey, n); - CFRelease(n); + CFNumberRef PixelFormat = CFNumberCreate( + kCFAllocatorDefault, kCFNumberSInt32Type, &enc->vt_pix_fmt); + CFNumberRef Width = CFNumberCreate(kCFAllocatorDefault, + kCFNumberSInt32Type, &enc->width); + CFNumberRef Height = CFNumberCreate(kCFAllocatorDefault, + kCFNumberSInt32Type, &enc->height); + + CFTypeRef keys[3] = {kCVPixelBufferPixelFormatTypeKey, + kCVPixelBufferWidthKey, kCVPixelBufferHeightKey}; + CFTypeRef values[3] = {PixelFormat, Width, Height}; + + CFDictionaryRef pixbuf_spec = + CFDictionaryCreate(kCFAllocatorDefault, keys, values, 3, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + CFRelease(PixelFormat); + CFRelease(Width); + CFRelease(Height); return pixbuf_spec; } @@ -534,10 +564,16 @@ static bool create_encoder(struct vt_encoder *enc) CFDictionaryRef pixbuf_spec = create_pixbuf_spec(enc); - STATUS_CHECK(VTCompressionSessionCreate( - kCFAllocatorDefault, enc->width, enc->height, enc->codec_type, - encoder_spec, pixbuf_spec, NULL, &sample_encoded_callback, - enc->queue, &s)); + code = VTCompressionSessionCreate(kCFAllocatorDefault, enc->width, + enc->height, enc->codec_type, + encoder_spec, pixbuf_spec, NULL, + &sample_encoded_callback, enc->queue, + &s); + + if (code != noErr) { + log_osstatus(LOG_ERROR, enc, "VTCompressionSessionCreate", + code); + } CFRelease(encoder_spec); CFRelease(pixbuf_spec); @@ -571,27 +607,59 @@ static bool create_encoder(struct vt_encoder *enc) "keyframe interval might be incorrect", code); - STATUS_CHECK(session_set_prop_int( - s, kVTCompressionPropertyKey_MaxKeyFrameInterval, - enc->keyint * ((float)enc->fps_num / enc->fps_den))); - STATUS_CHECK(session_set_prop_float( - s, kVTCompressionPropertyKey_ExpectedFrameRate, - (float)enc->fps_num / enc->fps_den)); - STATUS_CHECK(session_set_prop( - s, kVTCompressionPropertyKey_AllowFrameReordering, - enc->bframes ? kCFBooleanTrue : kCFBooleanFalse)); + CFTypeRef session_keys[4] = { + kVTCompressionPropertyKey_MaxKeyFrameInterval, + kVTCompressionPropertyKey_ExpectedFrameRate, + kVTCompressionPropertyKey_AllowFrameReordering, + kVTCompressionPropertyKey_ProfileLevel}; + + float key_frame_interval = + enc->keyint * ((float)enc->fps_num / enc->fps_den); + float expected_framerate = (float)enc->fps_num / enc->fps_den; + CFNumberRef MaxKeyFrameInterval = + CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, + &key_frame_interval); + CFNumberRef ExpectedFrameRate = CFNumberCreate( + kCFAllocatorDefault, kCFNumberFloat32Type, + &expected_framerate); + CFTypeRef AllowFrameReordering = enc->bframes ? kCFBooleanTrue + : kCFBooleanFalse; video_t *video = obs_encoder_video(enc->encoder); const struct video_output_info *voi = video_output_get_info(video); - STATUS_CHECK(session_set_prop( - s, kVTCompressionPropertyKey_ProfileLevel, - obs_to_vt_profile(enc->codec_type, enc->profile, - voi->format))); - STATUS_CHECK(session_set_bitrate( - s, enc->rate_control, enc->bitrate, enc->quality, - enc->limit_bitrate, enc->rc_max_bitrate, - enc->rc_max_bitrate_window)); + CFTypeRef ProfileLevel = obs_to_vt_profile( + enc->codec_type, enc->profile, voi->format); + + CFTypeRef session_values[4] = {MaxKeyFrameInterval, + ExpectedFrameRate, + AllowFrameReordering, + ProfileLevel}; + + CFDictionaryRef session_properties = CFDictionaryCreate( + kCFAllocatorDefault, session_keys, session_values, 4, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + code = VTSessionSetProperties(s, session_properties); + + CFRelease(MaxKeyFrameInterval); + CFRelease(ExpectedFrameRate); + CFRelease(AllowFrameReordering); + CFRelease(ProfileLevel); + CFRelease(session_properties); + + if (code != noErr) { + return code; + } + + code = session_set_bitrate(s, enc->rate_control, enc->bitrate, + enc->quality, enc->limit_bitrate, + enc->rc_max_bitrate, + enc->rc_max_bitrate_window); + if (code != noErr) { + return code; + } } // This can fail depending on hardware configuration @@ -604,9 +672,15 @@ static bool create_encoder(struct vt_encoder *enc) "frame delay might be increased", code); - STATUS_CHECK(session_set_colorspace(s, enc->colorspace)); + code = session_set_colorspace(s, enc->colorspace); + if (code != noErr) { + return code; + } - STATUS_CHECK(VTCompressionSessionPrepareToEncodeFrames(s)); + code = VTCompressionSessionPrepareToEncodeFrames(s); + if (code != noErr) { + return code; + } enc->session = s; @@ -748,7 +822,8 @@ static bool update_params(struct vt_encoder *enc, obs_data_t *settings) enc->quality = ((float)obs_data_get_int(settings, "quality")) / 100; enc->profile = obs_data_get_string(settings, "profile"); enc->limit_bitrate = obs_data_get_bool(settings, "limit_bitrate"); - enc->rc_max_bitrate = obs_data_get_int(settings, "max_bitrate"); + enc->rc_max_bitrate = + (uint32_t)obs_data_get_int(settings, "max_bitrate"); enc->rc_max_bitrate_window = obs_data_get_double(settings, "max_bitrate_window"); enc->bframes = obs_data_get_bool(settings, "bframes"); @@ -793,7 +868,10 @@ static void *vt_create(obs_data_t *settings, obs_encoder_t *encoder) if (!update_params(enc, settings)) goto fail; - STATUS_CHECK(CMSimpleQueueCreate(NULL, 100, &enc->queue)); + code = CMSimpleQueueCreate(NULL, 100, &enc->queue); + if (code != noErr) { + goto fail; + } if (!create_encoder(enc)) goto fail; @@ -1092,7 +1170,10 @@ bool get_cached_pixel_buffer(struct vt_encoder *enc, CVPixelBufferRef *buf) return kCVReturnError; CVPixelBufferRef pixbuf; - STATUS_CHECK(CVPixelBufferPoolCreatePixelBuffer(NULL, pool, &pixbuf)); + code = CVPixelBufferPoolCreatePixelBuffer(NULL, pool, &pixbuf); + if (code != noErr) { + goto fail; + } // Why aren't these already set on the pixel buffer? // I would have expected pixel buffers from the session's @@ -1114,14 +1195,22 @@ bool get_cached_pixel_buffer(struct vt_encoder *enc, CVPixelBufferRef *buf) const uint16_t hdr_nominal_peak_level = pq ? (uint16_t)obs_get_video_hdr_nominal_peak_level() : (hlg ? 1000 : 0); + CFDataRef masteringDisplayColorVolume = + obs_to_vt_masteringdisplay(hdr_nominal_peak_level); + CFDataRef contentLightLevel = + obs_to_vt_contentlightlevelinfo(hdr_nominal_peak_level); + CVBufferSetAttachment( pixbuf, kCVImageBufferMasteringDisplayColorVolumeKey, - obs_to_vt_masteringdisplay(hdr_nominal_peak_level), - kCVAttachmentMode_ShouldPropagate); - CVBufferSetAttachment( - pixbuf, kCVImageBufferContentLightLevelInfoKey, - obs_to_vt_contentlightlevelinfo(hdr_nominal_peak_level), + masteringDisplayColorVolume, kCVAttachmentMode_ShouldPropagate); + CVBufferSetAttachment(pixbuf, + kCVImageBufferContentLightLevelInfoKey, + contentLightLevel, + kCVAttachmentMode_ShouldPropagate); + + CFRelease(masteringDisplayColorVolume); + CFRelease(contentLightLevel); } *buf = pixbuf; @@ -1149,7 +1238,10 @@ static bool vt_encode(void *data, struct encoder_frame *frame, goto fail; } - STATUS_CHECK(CVPixelBufferLockBaseAddress(pixbuf, 0)); + code = CVPixelBufferLockBaseAddress(pixbuf, 0); + if (code != noErr) { + goto fail; + } for (int i = 0; i < MAX_AV_PLANES; i++) { if (frame->data[i] == NULL) @@ -1168,10 +1260,16 @@ static bool vt_encode(void *data, struct encoder_frame *frame, } } - STATUS_CHECK(CVPixelBufferUnlockBaseAddress(pixbuf, 0)); + code = CVPixelBufferUnlockBaseAddress(pixbuf, 0); + if (code != noErr) { + goto fail; + } - STATUS_CHECK(VTCompressionSessionEncodeFrame(enc->session, pixbuf, pts, - dur, NULL, pixbuf, NULL)); + code = VTCompressionSessionEncodeFrame(enc->session, pixbuf, pts, dur, + NULL, pixbuf, NULL); + if (code != noErr) { + goto fail; + } CMSampleBufferRef buffer = (CMSampleBufferRef)CMSimpleQueueDequeue(enc->queue); @@ -1187,9 +1285,6 @@ static bool vt_encode(void *data, struct encoder_frame *frame, return false; } -#undef STATUS_CHECK -#undef CFNUM_INT - static bool vt_extra_data(void *data, uint8_t **extra_data, size_t *size) { struct vt_encoder *enc = (struct vt_encoder *)data; @@ -1222,17 +1317,6 @@ static const char *vt_getname(void *data) return type_data->disp_name; } -#define TEXT_BITRATE obs_module_text("Bitrate") -#define TEXT_QUALITY obs_module_text("Quality") -#define TEXT_USE_MAX_BITRATE obs_module_text("UseMaxBitrate") -#define TEXT_MAX_BITRATE obs_module_text("MaxBitrate") -#define TEXT_MAX_BITRATE_WINDOW obs_module_text("MaxBitrateWindow") -#define TEXT_KEYINT_SEC obs_module_text("KeyframeIntervalSec") -#define TEXT_PROFILE obs_module_text("Profile") -#define TEXT_BFRAMES obs_module_text("UseBFrames") -#define TEXT_RATE_CONTROL obs_module_text("RateControl") -#define TEXT_PRORES_CODEC obs_module_text("ProResCodec") - static bool rate_control_limit_bitrate_modified(obs_properties_t *ppts, obs_property_t *p, obs_data_t *settings) @@ -1268,69 +1352,72 @@ static bool rate_control_limit_bitrate_modified(obs_properties_t *ppts, return true; } -static obs_properties_t *vt_properties_h26x(void *unused, void *data) +static obs_properties_t *vt_properties_h26x(void *data __unused, + void *type_data) { - UNUSED_PARAMETER(unused); - struct vt_encoder_type_data *type_data = data; + struct vt_encoder_type_data *encoder_type_data = type_data; obs_properties_t *props = obs_properties_create(); obs_property_t *p; - p = obs_properties_add_list(props, "rate_control", TEXT_RATE_CONTROL, + p = obs_properties_add_list(props, "rate_control", + obs_module_text("RateControl"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); - if (__builtin_available(macOS 13.0, *)) - if (type_data->hardware_accelerated -#ifndef __aarch64__ - && (os_get_emulation_status() == true) -#endif - ) + if (__builtin_available(macOS 13.0, *)) { + if (encoder_type_data->hardware_accelerated && + is_apple_silicon) { obs_property_list_add_string(p, "CBR", "CBR"); + } + } + obs_property_list_add_string(p, "ABR", "ABR"); - if (type_data->hardware_accelerated -#ifndef __aarch64__ - && (os_get_emulation_status() == true) -#endif - ) + + if (encoder_type_data->hardware_accelerated && is_apple_silicon) { obs_property_list_add_string(p, "CRF", "CRF"); + } + obs_property_set_modified_callback(p, rate_control_limit_bitrate_modified); - p = obs_properties_add_int(props, "bitrate", TEXT_BITRATE, 50, 10000000, - 50); + p = obs_properties_add_int(props, "bitrate", obs_module_text("Bitrate"), + 50, 10000000, 50); obs_property_int_set_suffix(p, " Kbps"); - obs_properties_add_int_slider(props, "quality", TEXT_QUALITY, 0, 100, - 1); + obs_properties_add_int_slider(props, "quality", + obs_module_text("Quality"), 0, 100, 1); p = obs_properties_add_bool(props, "limit_bitrate", - TEXT_USE_MAX_BITRATE); + obs_module_text("UseMaxBitrate")); obs_property_set_modified_callback(p, rate_control_limit_bitrate_modified); - p = obs_properties_add_int(props, "max_bitrate", TEXT_MAX_BITRATE, 50, - 10000000, 50); + p = obs_properties_add_int(props, "max_bitrate", + obs_module_text("MaxBitrate"), 50, 10000000, + 50); obs_property_int_set_suffix(p, " Kbps"); p = obs_properties_add_float(props, "max_bitrate_window", - TEXT_MAX_BITRATE_WINDOW, 0.10f, 10.0f, - 0.25f); + obs_module_text("MaxBitrateWindow"), 0.10f, + 10.0f, 0.25f); obs_property_float_set_suffix(p, " s"); - p = obs_properties_add_int(props, "keyint_sec", TEXT_KEYINT_SEC, 0, 20, - 1); + p = obs_properties_add_int(props, "keyint_sec", + obs_module_text("KeyframeIntervalSec"), 0, + 20, 1); obs_property_int_set_suffix(p, " s"); - p = obs_properties_add_list(props, "profile", TEXT_PROFILE, + p = obs_properties_add_list(props, "profile", + obs_module_text("Profile"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); - if (type_data->codec_type == kCMVideoCodecType_H264) { + if (encoder_type_data->codec_type == kCMVideoCodecType_H264) { obs_property_list_add_string(p, "baseline", "baseline"); obs_property_list_add_string(p, "main", "main"); obs_property_list_add_string(p, "high", "high"); #ifdef ENABLE_HEVC - } else if (type_data->codec_type == kCMVideoCodecType_HEVC) { + } else if (encoder_type_data->codec_type == kCMVideoCodecType_HEVC) { obs_property_list_add_string(p, "main", "main"); obs_property_list_add_string(p, "main10", "main10"); if (__builtin_available(macOS 12.3, *)) { @@ -1340,27 +1427,29 @@ static obs_properties_t *vt_properties_h26x(void *unused, void *data) #endif } - obs_properties_add_bool(props, "bframes", TEXT_BFRAMES); + obs_properties_add_bool(props, "bframes", + obs_module_text("UseBFrames")); return props; } -static obs_properties_t *vt_properties_prores(void *unused, void *data) +static obs_properties_t *vt_properties_prores(void *data __unused, + void *type_data) { - UNUSED_PARAMETER(unused); - struct vt_encoder_type_data *type_data = data; + struct vt_encoder_type_data *encoder_type_data = type_data; obs_properties_t *props = obs_properties_create(); obs_property_t *p; - p = obs_properties_add_list(props, "codec_type", TEXT_PRORES_CODEC, + p = obs_properties_add_list(props, "codec_type", + obs_module_text("ProResCodec"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); uint32_t codec_availability_flags = 0; size_t size = 0; struct vt_prores_encoder_data *encoder_list = NULL; - if (type_data->hardware_accelerated) { + if (encoder_type_data->hardware_accelerated) { size = vt_prores_hardware_encoder_list.num; encoder_list = vt_prores_hardware_encoder_list.array; } else { @@ -1420,14 +1509,12 @@ static void vt_defaults(obs_data_t *settings, void *data) struct vt_encoder_type_data *type_data = data; obs_data_set_default_string(settings, "rate_control", "ABR"); - if (__builtin_available(macOS 13.0, *)) - if (type_data->hardware_accelerated -#ifndef __aarch64__ - && (os_get_emulation_status() == true) -#endif - ) + if (__builtin_available(macOS 13.0, *)) { + if (type_data->hardware_accelerated && is_apple_silicon) { obs_data_set_default_string(settings, "rate_control", "CBR"); + } + } obs_data_set_default_int(settings, "bitrate", 2500); obs_data_set_default_int(settings, "quality", 60); obs_data_set_default_bool(settings, "limit_bitrate", false); @@ -1473,11 +1560,10 @@ vt_add_prores_encoder_data_to_list(CFDictionaryRef encoder_dict, encoder_data->codec_type = codec_type; } -static CFComparisonResult -compare_encoder_list(const void *left_val, const void *right_val, void *unused) +static CFComparisonResult compare_encoder_list(const void *left_val, + const void *right_val, + void *context __unused) { - UNUSED_PARAMETER(unused); - CFDictionaryRef left = (CFDictionaryRef)left_val; CFDictionaryRef right = (CFDictionaryRef)right_val; @@ -1519,6 +1605,10 @@ bool obs_module_load(void) }); // The group dispatch keeps a reference until it's finished dispatch_release(queue); + +#ifndef __aarch64__ + is_apple_silicon = os_get_emulation_status(); +#endif return true; } @@ -1555,13 +1645,6 @@ void obs_module_post_load(void) CFDictionaryRef encoder_dict = CFArrayGetValueAtIndex(encoder_list, i); -#define VT_DICTSTR(key, name) \ - CFStringRef name##_ref = CFDictionaryGetValue(encoder_dict, key); \ - CFIndex name##_len = \ - CFStringGetMaximumSizeOfFileSystemRepresentation(name##_ref); \ - char *name = bzalloc(name##_len + 1); \ - CFStringGetFileSystemRepresentation(name##_ref, name, name##_len); - CMVideoCodecType codec_type = 0; { CFNumberRef codec_type_num = CFDictionaryGetValue( @@ -1602,8 +1685,23 @@ void obs_module_post_load(void) default: continue; } - VT_DICTSTR(kVTVideoEncoderList_EncoderID, id); - VT_DICTSTR(kVTVideoEncoderList_DisplayName, disp_name); + + CFStringRef EncoderID = CFDictionaryGetValue( + encoder_dict, kVTVideoEncoderList_EncoderID); + CFIndex id_len = + CFStringGetMaximumSizeOfFileSystemRepresentation( + EncoderID); + char *id = bzalloc(id_len + 1); + CFStringGetFileSystemRepresentation(EncoderID, id, id_len); + + CFStringRef DisplayName = CFDictionaryGetValue( + encoder_dict, kVTVideoEncoderList_DisplayName); + CFIndex disp_name_len = + CFStringGetMaximumSizeOfFileSystemRepresentation( + DisplayName); + char *disp_name = bzalloc(disp_name_len + 1); + CFStringGetFileSystemRepresentation(DisplayName, disp_name, + disp_name_len); CFBooleanRef hardware_ref = CFDictionaryGetValue( encoder_dict, @@ -1623,7 +1721,6 @@ void obs_module_post_load(void) info.type_data = type_data; obs_register_encoder(&info); -#undef VT_DICTSTR } CFRelease(encoder_list); From 63e0e4979881e3714b34d58a1c845b37c52a114d Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 22 Feb 2023 22:37:02 +0100 Subject: [PATCH 0224/2225] CI: Remove unit tests from macOS build scripts --- .github/workflows/main.yml | 4 ---- CI/include/Brewfile | 1 - CI/macos/02_build_obs.sh | 5 ----- 3 files changed, 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8b3e73c3573eab..26e510f72541ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -189,10 +189,6 @@ jobs: - name: 'Build OBS' run: CI/macos/02_build_obs.sh --codesign --architecture "${{ matrix.arch }}" - - name: 'Run tests' - if: ${{ success() && matrix.arch == 'x86_64' }} - run: cmake --build build -t test - - name: 'Create build artifact' if: ${{ success() && fromJSON(needs.config.outputs.create_artifacts) }} run: | diff --git a/CI/include/Brewfile b/CI/include/Brewfile index 56b1bfcb787fb0..a3dc3391eff3c0 100644 --- a/CI/include/Brewfile +++ b/CI/include/Brewfile @@ -2,6 +2,5 @@ brew "cmake" brew "ccache" brew "ninja" brew "freetype" -brew "cmocka" brew "swig" brew "coreutils" diff --git a/CI/macos/02_build_obs.sh b/CI/macos/02_build_obs.sh index 23c347ec325cd5..a2e7e8e98e265a 100755 --- a/CI/macos/02_build_obs.sh +++ b/CI/macos/02_build_obs.sh @@ -65,10 +65,6 @@ _configure_obs() { GENERATOR="Ninja" fi - if [ "${CI}" -a "${ARCH}" = "x86_64" ]; then - UNITTEST_OPTIONS="-DENABLE_UNIT_TESTS=ON" - fi - if [ "${SPARKLE_APPCAST_URL}" -a "${SPARKLE_PUBLIC_KEY}" ]; then SPARKLE_OPTIONS="-DSPARKLE_APPCAST_URL=\"${SPARKLE_APPCAST_URL}\" -DSPARKLE_PUBLIC_KEY=\"${SPARKLE_PUBLIC_KEY}\"" fi @@ -89,7 +85,6 @@ _configure_obs() { ${YOUTUBE_OPTIONS} \ ${TWITCH_OPTIONS} \ ${RESTREAM_OPTIONS} \ - ${UNITTEST_OPTIONS} \ ${SPARKLE_OPTIONS} \ ${CI:+-DBUILD_FOR_DISTRIBUTION=${BUILD_FOR_DISTRIBUTION} -DOBS_BUILD_NUMBER=${GITHUB_RUN_ID}} \ ${QUIET:+-Wno-deprecated -Wno-dev --log-level=ERROR} From 112ca44158ddc62cf500a2c9f68b9b7edafe9f47 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 22 Feb 2023 22:37:27 +0100 Subject: [PATCH 0225/2225] CI: Remove deprecated dependency installations via Homebrew Swig and Freetype are provided via obs-deps instead. --- CI/include/Brewfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/CI/include/Brewfile b/CI/include/Brewfile index a3dc3391eff3c0..ae198ab301afa9 100644 --- a/CI/include/Brewfile +++ b/CI/include/Brewfile @@ -1,6 +1,4 @@ brew "cmake" brew "ccache" brew "ninja" -brew "freetype" -brew "swig" brew "coreutils" From 76732846d7f626de7ce668045b3dd037036cada6 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 22 Feb 2023 21:43:32 +0100 Subject: [PATCH 0226/2225] libobs: Fix non-exhaustive switch statements New video formats introduced for ProRes 4444 encoding have not been implemented in function calls used for video decoding, which makes the switch statements non-exhaustive. This does not functionally change the status quo (decoding ProRes 4444 files could still be broken because libobs does not explicitly handle the colour format). --- libobs/obs-source.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 497dab62946cd0..fd6dd3cb11d13a 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -1638,6 +1638,11 @@ static inline enum convert_type get_convert_type(enum video_format format, case VIDEO_FORMAT_P010: return CONVERT_P010; + + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: + /* Unimplemented */ + break; } return CONVERT_NONE; @@ -2208,6 +2213,11 @@ static const char *select_conversion_technique(enum video_format format, else return "RGB_Limited"; break; + + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: + /* Unimplemented */ + break; } return NULL; } @@ -3375,6 +3385,11 @@ static void copy_frame_data(struct obs_source_frame *dst, copy_frame_data_plane(dst, src, 2, dst->height); copy_frame_data_plane(dst, src, 3, dst->height); break; + + case VIDEO_FORMAT_P216: + case VIDEO_FORMAT_P416: + /* Unimplemented */ + break; } } From 4ab9cd100594d16d179b31a909f837e44d178079 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 13 Sep 2022 15:17:16 -0300 Subject: [PATCH 0227/2225] plugins: Drop win-mf The win-mf plugin is deprecated, and disabled by default. Let's drop it entirely. --- plugins/CMakeLists.txt | 1 - plugins/win-mf/.clang-format | 3 - plugins/win-mf/CMakeLists.txt | 49 -- plugins/win-mf/data/locale/ar-SA.ini | 24 - plugins/win-mf/data/locale/ba-RU.ini | 12 - plugins/win-mf/data/locale/bg-BG.ini | 12 - plugins/win-mf/data/locale/bn-BD.ini | 26 - plugins/win-mf/data/locale/ca-ES.ini | 24 - plugins/win-mf/data/locale/cs-CZ.ini | 21 - plugins/win-mf/data/locale/da-DK.ini | 21 - plugins/win-mf/data/locale/de-DE.ini | 23 - plugins/win-mf/data/locale/el-GR.ini | 27 - plugins/win-mf/data/locale/en-US.ini | 29 - plugins/win-mf/data/locale/es-ES.ini | 24 - plugins/win-mf/data/locale/et-EE.ini | 27 - plugins/win-mf/data/locale/eu-ES.ini | 27 - plugins/win-mf/data/locale/fa-IR.ini | 27 - plugins/win-mf/data/locale/fi-FI.ini | 24 - plugins/win-mf/data/locale/fil-PH.ini | 26 - plugins/win-mf/data/locale/fr-FR.ini | 24 - plugins/win-mf/data/locale/gd-GB.ini | 26 - plugins/win-mf/data/locale/gl-ES.ini | 24 - plugins/win-mf/data/locale/he-IL.ini | 24 - plugins/win-mf/data/locale/hi-IN.ini | 24 - plugins/win-mf/data/locale/hr-HR.ini | 26 - plugins/win-mf/data/locale/hu-HU.ini | 24 - plugins/win-mf/data/locale/hy-AM.ini | 27 - plugins/win-mf/data/locale/id-ID.ini | 21 - plugins/win-mf/data/locale/it-IT.ini | 27 - plugins/win-mf/data/locale/ja-JP.ini | 27 - plugins/win-mf/data/locale/ka-GE.ini | 27 - plugins/win-mf/data/locale/kab-KAB.ini | 16 - plugins/win-mf/data/locale/kmr-TR.ini | 24 - plugins/win-mf/data/locale/ko-KR.ini | 24 - plugins/win-mf/data/locale/ms-MY.ini | 27 - plugins/win-mf/data/locale/nb-NO.ini | 23 - plugins/win-mf/data/locale/nl-NL.ini | 14 - plugins/win-mf/data/locale/nn-NO.ini | 2 - plugins/win-mf/data/locale/oc-FR.ini | 1 - plugins/win-mf/data/locale/pl-PL.ini | 24 - plugins/win-mf/data/locale/pt-BR.ini | 24 - plugins/win-mf/data/locale/pt-PT.ini | 24 - plugins/win-mf/data/locale/ro-RO.ini | 24 - plugins/win-mf/data/locale/ru-RU.ini | 27 - plugins/win-mf/data/locale/si-LK.ini | 25 - plugins/win-mf/data/locale/sk-SK.ini | 25 - plugins/win-mf/data/locale/sl-SI.ini | 27 - plugins/win-mf/data/locale/sr-CS.ini | 26 - plugins/win-mf/data/locale/sr-SP.ini | 26 - plugins/win-mf/data/locale/sv-SE.ini | 24 - plugins/win-mf/data/locale/ta-IN.ini | 12 - plugins/win-mf/data/locale/tl-PH.ini | 21 - plugins/win-mf/data/locale/tr-TR.ini | 26 - plugins/win-mf/data/locale/uk-UA.ini | 27 - plugins/win-mf/data/locale/vi-VN.ini | 21 - plugins/win-mf/data/locale/zh-CN.ini | 27 - plugins/win-mf/data/locale/zh-TW.ini | 27 - plugins/win-mf/mf-aac-encoder.cpp | 339 ---------- plugins/win-mf/mf-aac-encoder.hpp | 91 --- plugins/win-mf/mf-aac.cpp | 165 ----- plugins/win-mf/mf-common.cpp | 384 ----------- plugins/win-mf/mf-common.hpp | 61 -- plugins/win-mf/mf-config.hpp.in | 17 - plugins/win-mf/mf-encoder-descriptor.cpp | 194 ------ plugins/win-mf/mf-encoder-descriptor.hpp | 76 --- plugins/win-mf/mf-h264-encoder.cpp | 774 ----------------------- plugins/win-mf/mf-h264-encoder.hpp | 175 ----- plugins/win-mf/mf-h264.cpp | 555 ---------------- plugins/win-mf/mf-plugin.cpp | 39 -- 69 files changed, 4166 deletions(-) delete mode 100644 plugins/win-mf/.clang-format delete mode 100644 plugins/win-mf/CMakeLists.txt delete mode 100644 plugins/win-mf/data/locale/ar-SA.ini delete mode 100644 plugins/win-mf/data/locale/ba-RU.ini delete mode 100644 plugins/win-mf/data/locale/bg-BG.ini delete mode 100644 plugins/win-mf/data/locale/bn-BD.ini delete mode 100644 plugins/win-mf/data/locale/ca-ES.ini delete mode 100644 plugins/win-mf/data/locale/cs-CZ.ini delete mode 100644 plugins/win-mf/data/locale/da-DK.ini delete mode 100644 plugins/win-mf/data/locale/de-DE.ini delete mode 100644 plugins/win-mf/data/locale/el-GR.ini delete mode 100644 plugins/win-mf/data/locale/en-US.ini delete mode 100644 plugins/win-mf/data/locale/es-ES.ini delete mode 100644 plugins/win-mf/data/locale/et-EE.ini delete mode 100644 plugins/win-mf/data/locale/eu-ES.ini delete mode 100644 plugins/win-mf/data/locale/fa-IR.ini delete mode 100644 plugins/win-mf/data/locale/fi-FI.ini delete mode 100644 plugins/win-mf/data/locale/fil-PH.ini delete mode 100644 plugins/win-mf/data/locale/fr-FR.ini delete mode 100644 plugins/win-mf/data/locale/gd-GB.ini delete mode 100644 plugins/win-mf/data/locale/gl-ES.ini delete mode 100644 plugins/win-mf/data/locale/he-IL.ini delete mode 100644 plugins/win-mf/data/locale/hi-IN.ini delete mode 100644 plugins/win-mf/data/locale/hr-HR.ini delete mode 100644 plugins/win-mf/data/locale/hu-HU.ini delete mode 100644 plugins/win-mf/data/locale/hy-AM.ini delete mode 100644 plugins/win-mf/data/locale/id-ID.ini delete mode 100644 plugins/win-mf/data/locale/it-IT.ini delete mode 100644 plugins/win-mf/data/locale/ja-JP.ini delete mode 100644 plugins/win-mf/data/locale/ka-GE.ini delete mode 100644 plugins/win-mf/data/locale/kab-KAB.ini delete mode 100644 plugins/win-mf/data/locale/kmr-TR.ini delete mode 100644 plugins/win-mf/data/locale/ko-KR.ini delete mode 100644 plugins/win-mf/data/locale/ms-MY.ini delete mode 100644 plugins/win-mf/data/locale/nb-NO.ini delete mode 100644 plugins/win-mf/data/locale/nl-NL.ini delete mode 100644 plugins/win-mf/data/locale/nn-NO.ini delete mode 100644 plugins/win-mf/data/locale/oc-FR.ini delete mode 100644 plugins/win-mf/data/locale/pl-PL.ini delete mode 100644 plugins/win-mf/data/locale/pt-BR.ini delete mode 100644 plugins/win-mf/data/locale/pt-PT.ini delete mode 100644 plugins/win-mf/data/locale/ro-RO.ini delete mode 100644 plugins/win-mf/data/locale/ru-RU.ini delete mode 100644 plugins/win-mf/data/locale/si-LK.ini delete mode 100644 plugins/win-mf/data/locale/sk-SK.ini delete mode 100644 plugins/win-mf/data/locale/sl-SI.ini delete mode 100644 plugins/win-mf/data/locale/sr-CS.ini delete mode 100644 plugins/win-mf/data/locale/sr-SP.ini delete mode 100644 plugins/win-mf/data/locale/sv-SE.ini delete mode 100644 plugins/win-mf/data/locale/ta-IN.ini delete mode 100644 plugins/win-mf/data/locale/tl-PH.ini delete mode 100644 plugins/win-mf/data/locale/tr-TR.ini delete mode 100644 plugins/win-mf/data/locale/uk-UA.ini delete mode 100644 plugins/win-mf/data/locale/vi-VN.ini delete mode 100644 plugins/win-mf/data/locale/zh-CN.ini delete mode 100644 plugins/win-mf/data/locale/zh-TW.ini delete mode 100644 plugins/win-mf/mf-aac-encoder.cpp delete mode 100644 plugins/win-mf/mf-aac-encoder.hpp delete mode 100644 plugins/win-mf/mf-aac.cpp delete mode 100644 plugins/win-mf/mf-common.cpp delete mode 100644 plugins/win-mf/mf-common.hpp delete mode 100644 plugins/win-mf/mf-config.hpp.in delete mode 100644 plugins/win-mf/mf-encoder-descriptor.cpp delete mode 100644 plugins/win-mf/mf-encoder-descriptor.hpp delete mode 100644 plugins/win-mf/mf-h264-encoder.cpp delete mode 100644 plugins/win-mf/mf-h264-encoder.hpp delete mode 100644 plugins/win-mf/mf-h264.cpp delete mode 100644 plugins/win-mf/mf-plugin.cpp diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 84da8b30c3adfa..a9becf58f75894 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -20,7 +20,6 @@ if(OS_WINDOWS) add_subdirectory(win-dshow) add_subdirectory(win-capture) add_subdirectory(decklink) - add_subdirectory(win-mf) add_subdirectory(obs-qsv11) add_subdirectory(obs-text) add_subdirectory(vlc-video) diff --git a/plugins/win-mf/.clang-format b/plugins/win-mf/.clang-format deleted file mode 100644 index 6420a46881e054..00000000000000 --- a/plugins/win-mf/.clang-format +++ /dev/null @@ -1,3 +0,0 @@ -Language: Cpp -SortIncludes: false -DisableFormat: true diff --git a/plugins/win-mf/CMakeLists.txt b/plugins/win-mf/CMakeLists.txt deleted file mode 100644 index e08b20c939be13..00000000000000 --- a/plugins/win-mf/CMakeLists.txt +++ /dev/null @@ -1,49 +0,0 @@ -option(ENABLE_WINMF "Enable building with deprecated win-mf plugin" OFF) -mark_as_advanced(ENABLE_WINMF) - -project(win-mf) - -add_library(win-mf MODULE) -add_library(OBS::win-mf ALIAS win-mf) - -set(MODULE_DESCRIPTION "OBS Windows Media Foundations H.264/AAC encoder") -configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in - win-mf.rc) - -target_sources(win-mf PRIVATE win-mf.rc) - -if(ENABLE_WINMF) - target_sources( - win-mf - PRIVATE mf-plugin.cpp - mf-aac.cpp - mf-aac-encoder.cpp - mf-aac-encoder.hpp - mf-common.cpp - mf-common.hpp - mf-encoder-descriptor.cpp - mf-encoder-descriptor.hpp - mf-h264.cpp - mf-h264-encoder.cpp - mf-h264-encoder.hpp) - - target_link_libraries( - win-mf - PRIVATE d3d9 - dxva2 - uuid - mfplat - mfuuid - mf - wmcodecdspuuid) - - target_compile_definitions(win-mf PRIVATE ENABLE_WINMF) -else() - target_sources(win-mf PRIVATE mf-plugin.cpp win-mf.rc) -endif() - -target_link_libraries(win-mf PRIVATE OBS::libobs) - -set_target_properties(win-mf PROPERTIES FOLDER "plugins") - -setup_plugin_target(win-mf) diff --git a/plugins/win-mf/data/locale/ar-SA.ini b/plugins/win-mf/data/locale/ar-SA.ini deleted file mode 100644 index d72b1b4db59249..00000000000000 --- a/plugins/win-mf/data/locale/ar-SA.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="ترميز AAC لمؤسسة الوسائط" -Bitrate="معدّل البِت" -MF.H264.EncoderName="ترميز H264 لمؤسسة الوسائط" -MF.H264.Encoder="اسم أداة الترميز" -MF.H264.LowLatency="زمن تأخير منخفض (تعطيل إعادة ترتيب الإطارات)" -MF.H264.BFrames="عدد إطارات B المتتابعة" -MF.H264.CustomBufsize="استخدام حجم تخزين مؤَقَت مخصص" -MF.H264.BufferSize="حجم التخزين المؤَقَت" -MF.H264.CustomMaxBitrate="استخدام أعلى معدل نقل مخصص" -MF.H264.Bitrate="معدّل البِت" -MF.H264.MaxBitrate="أعلى معدل نقل" -MF.H264.KeyframeIntervalSec="الفاصل الزمني للإطار المفتاح (0=تلقائي)" -MF.H264.RateControl="التحكم بمعدل النقل" -MF.H264.CBR="CBR (معدل نقل ثابت)" -MF.H264.VBR="VBR (معدل نقل متغير)" -MF.H264.CQP="CQP (جودة ثابتة)" -MF.H264.MinQP="الحد الأدنى لجودة الصورة (QP)" -MF.H264.MaxQP="الحد الأعلى لجودة الصورة (QP)" -MF.H264.Profile="الملف الشخصي" -MF.H264.Advanced="متقدم" -MF.H264.EncoderSWMicrosoft="أداة ترميز مايكروسوفت H.264" -MF.H264.EncoderHWAMD="محرك ترميز فيديو H.264 من AMD (مؤسسة إعلامية)" -MF.H264.EncoderHWIntel="أداة ترميز إنتل Quick Sync H.264 (مؤسسة إعلامية)" -MF.H264.EncoderHWNVIDIA="أداة ترميز إنفيديا NVENC H.264 (مؤسسة إعلامية)" diff --git a/plugins/win-mf/data/locale/ba-RU.ini b/plugins/win-mf/data/locale/ba-RU.ini deleted file mode 100644 index 16d4210db9f9d6..00000000000000 --- a/plugins/win-mf/data/locale/ba-RU.ini +++ /dev/null @@ -1,12 +0,0 @@ -Bitrate="Битрейт" -MF.H264.Encoder="Билдәгәрткес исеме" -MF.H264.BufferSize="Буфер ҙурлығы" -MF.H264.Bitrate="Битрейт" -MF.H264.MaxBitrate="Максималь битрейт" -MF.H264.CBR="CBR (даими битрейт)" -MF.H264.VBR="VBR (үҙгәреүсән битрейт)" -MF.H264.MinQP="Минималь QP" -MF.H264.MaxQP="Максималь QP" -MF.H264.QPI="QP I-кадр" -MF.H264.QPP="QP P-кадр" -MF.H264.QPB="QP B-кадр" diff --git a/plugins/win-mf/data/locale/bg-BG.ini b/plugins/win-mf/data/locale/bg-BG.ini deleted file mode 100644 index 1b193e1656f9cb..00000000000000 --- a/plugins/win-mf/data/locale/bg-BG.ini +++ /dev/null @@ -1,12 +0,0 @@ -Bitrate="Битрейт" -MF.H264.Encoder="Име на енкодера" -MF.H264.BufferSize="Големина на буфера" -MF.H264.Bitrate="Битрейт" -MF.H264.MaxBitrate="Макс. битрейт" -MF.H264.KeyframeIntervalSec="Интервал между ключови кадри (0=автоматично)" -MF.H264.MinQP="Минимално QP" -MF.H264.MaxQP="Максимално QP" -MF.H264.Profile="Профил" -MF.H264.Advanced="Разширено" -MF.H264.EncoderSWMicrosoft="Кодер на софтуер на Майкрософт H.264" -MF.H264.EncoderHWNVIDIA="Кодиращо ус-тво NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/bn-BD.ini b/plugins/win-mf/data/locale/bn-BD.ini deleted file mode 100644 index 1e8e048266a8e3..00000000000000 --- a/plugins/win-mf/data/locale/bn-BD.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="মিডিয়া ফাউন্ডেশন AACএনকোডার" -Bitrate="বিটরেট" -MF.H264.EncoderName="Media Foundation H264 এনকোডার" -MF.H264.Encoder="এনকোডার নাম" -MF.H264.LowLatency="নিম্ন (Disable কাঠামো পুনরায় ক্রম) সুপ্ত" -MF.H264.BFrames="ধারাবাহিক বি-ফ্রেমের গণনা" -MF.H264.CustomBufsize="কৃত্রিম বাফার আকার ব্যবহার করুন" -MF.H264.BufferSize="বাফারের আয়তন" -MF.H264.CustomMaxBitrate="কাস্টম ব্যবহার করে সর্বাধিক বিটের হার।" -MF.H264.Bitrate="বিটরেট" -MF.H264.MaxBitrate="সর্বোচ্চ বিটরেট" -MF.H264.RateControl="হার নিয়ন্ত্রণ" -MF.H264.CBR="CBR (ক্রমাগত বিটের)" -MF.H264.VBR="VBR (পরিবর্তনশীল বিট-রেট)" -MF.H264.CQP="CQP (অপরিবর্তিত মান)" -MF.H264.MinQP="সর্বনিম্ন QP" -MF.H264.MaxQP="সর্বাধিক QP" -MF.H264.QPI="কিউপি আই-ফ্রেম" -MF.H264.QPP="কিউপি পি-ফ্রেম" -MF.H264.QPB="কিউপি বি-ফ্রেম" -MF.H264.Profile="প্রোফাইল" -MF.H264.Advanced="উন্নত" -MF.H264.EncoderSWMicrosoft="Microsoft সফটওয়্যার H.264 এনকোডার" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 এনকোডার (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 এনকোডার (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 এনকোডার (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ca-ES.ini b/plugins/win-mf/data/locale/ca-ES.ini deleted file mode 100644 index 87c9ce6bfd3fda..00000000000000 --- a/plugins/win-mf/data/locale/ca-ES.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificador Media Foundation AAC" -Bitrate="Taxa de bits" -MF.H264.EncoderName="Codificador H264 de Media Foundation" -MF.H264.Encoder="Nom del codificador" -MF.H264.LowLatency="Baixa latència (desactiva la reorganització de fotogrames)" -MF.H264.BFrames="Número de B-Frame consecutius" -MF.H264.CustomBufsize="Utilitza grandària de memòria cau personalitzada" -MF.H264.BufferSize="Mida de la memòria intermèdia" -MF.H264.CustomMaxBitrate="Utilitza grandària màxima de taxa de bits personalitzada" -MF.H264.Bitrate="Taxa de bits" -MF.H264.MaxBitrate="Taxa de bits màxima" -MF.H264.KeyframeIntervalSec="Interval de fotogrames clau (0=auto)" -MF.H264.RateControl="Control de la taxa" -MF.H264.CBR="CBR (Constant Bitrate, taxa de bits constant)" -MF.H264.VBR="CBR (Variable Bitrate, taxa de bits variable)" -MF.H264.CQP="CQP (Constant Quality, qualitat constant)" -MF.H264.MinQP="QP mínima" -MF.H264.MaxQP="QP màxima" -MF.H264.Profile="Perfil" -MF.H264.Advanced="Avançat" -MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software" -MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/cs-CZ.ini b/plugins/win-mf/data/locale/cs-CZ.ini deleted file mode 100644 index 64aa50bdb481b5..00000000000000 --- a/plugins/win-mf/data/locale/cs-CZ.ini +++ /dev/null @@ -1,21 +0,0 @@ -MFAACEnc="Enkodér Media Foundation AAC" -MF.H264.EncoderName="Enkodér Media Foundation H264" -MF.H264.Encoder="Název enkodéru" -MF.H264.LowLatency="Nízká odezva (zakázat přeřazování snímků)" -MF.H264.BFrames="Počet po sobě jdoucích B-snímků" -MF.H264.CustomBufsize="Použít vlastní velikost vyrovnávací paměti" -MF.H264.BufferSize="Velikost vyrovnávací paměti" -MF.H264.CustomMaxBitrate="Použít vlastní maximální bitrate" -MF.H264.MaxBitrate="Maximální bitrate" -MF.H264.KeyframeIntervalSec="Interval klíč. snímků (0=auto)" -MF.H264.RateControl="Řízení toku" -MF.H264.CBR="CBR (Konstantní bitrate)" -MF.H264.VBR="VBR (Měnící se snímkování)" -MF.H264.CQP="CQP (Konstantní kvalita)" -MF.H264.MinQP="Minimální QP" -MF.H264.MaxQP="Maximální QP" -MF.H264.QPI="QP I-snímku" -MF.H264.QPP="QP P-snímku" -MF.H264.QPB="QP B-snímku" -MF.H264.Profile="Profil" -MF.H264.Advanced="Rozšířené" diff --git a/plugins/win-mf/data/locale/da-DK.ini b/plugins/win-mf/data/locale/da-DK.ini deleted file mode 100644 index d4b1e542f91fb5..00000000000000 --- a/plugins/win-mf/data/locale/da-DK.ini +++ /dev/null @@ -1,21 +0,0 @@ -Bitrate="Bit-hastighed" -MF.H264.Encoder="Encodernavn" -MF.H264.LowLatency="Lav responstid (deaktiver billedomarrangering)" -MF.H264.BFrames="Efterfølgende B-frame antal" -MF.H264.CustomBufsize="Benyt tilpasset bufferstørrelse" -MF.H264.BufferSize="Bufferstørrelse" -MF.H264.CustomMaxBitrate="Benyt tilpasset maks. bit-hastighed" -MF.H264.Bitrate="Bit-hastighed" -MF.H264.MaxBitrate="Maks. bit-hastighed" -MF.H264.KeyframeIntervalSec="Keyframe-interval (0=auto)" -MF.H264.RateControl="Hastighedskontrol" -MF.H264.CBR="CBR (konstant bit-hastighed)" -MF.H264.VBR="VBR (variabel bit-hastighed)" -MF.H264.CQP="CQP (konstant kvalitet)" -MF.H264.MaxQP="Maksimum QP" -MF.H264.QPI="QP I-frame" -MF.H264.QPP="QP P-frame" -MF.H264.QPB="QP B-frame" -MF.H264.Profile="Profil" -MF.H264.Advanced="Advanceret" -MF.H264.EncoderSWMicrosoft="Microsoft software H.264 encoder" diff --git a/plugins/win-mf/data/locale/de-DE.ini b/plugins/win-mf/data/locale/de-DE.ini deleted file mode 100644 index 9b0df580ec1e08..00000000000000 --- a/plugins/win-mf/data/locale/de-DE.ini +++ /dev/null @@ -1,23 +0,0 @@ -MFAACEnc="Media-Foundation-AAC-Encoder" -MF.H264.EncoderName="Media-Foundation-H264-Encoder" -MF.H264.Encoder="Encodername" -MF.H264.LowLatency="Niedrige Latenz (deaktiviert Frame-Neuanordnung)" -MF.H264.BFrames="Konsekutive B-Frameanzahl" -MF.H264.CustomBufsize="Benutzerdefinierte Puffergröße verwenden" -MF.H264.BufferSize="Puffergröße" -MF.H264.CustomMaxBitrate="Benutzerdefinierte max. Bitrate verwenden" -MF.H264.MaxBitrate="Max. Bitrate" -MF.H264.KeyframeIntervalSec="Keyframeintervall (0 = automatisch)" -MF.H264.RateControl="Qualitätsregulierungsmethode" -MF.H264.CBR="CBR (konstante Bitrate)" -MF.H264.VBR="VBR (variable Bitrate)" -MF.H264.CQP="CQP (konstante Qualität)" -MF.H264.QPI="QP-I-Frame" -MF.H264.QPP="QP-P-Frame" -MF.H264.QPB="QP-B-Frame" -MF.H264.Profile="Profil" -MF.H264.Advanced="Erweitert" -MF.H264.EncoderSWMicrosoft="Microsoft-Software-H.264-Encoder" -MF.H264.EncoderHWAMD="AMD-Video-Coding-Engine-H.264-Encoder (Media Foundation)" -MF.H264.EncoderHWIntel="Intel-Quick-Sync-H.264-Encoder (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA-NVENC-H.264-Encoder (Media Foundation)" diff --git a/plugins/win-mf/data/locale/el-GR.ini b/plugins/win-mf/data/locale/el-GR.ini deleted file mode 100644 index 2bcaeaa07b60a3..00000000000000 --- a/plugins/win-mf/data/locale/el-GR.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC Κωδικοποιητής" -Bitrate="Ρυθμός μετάδοσης bit" -MF.H264.EncoderName="Media Foundation H264 Κωδικοποιητής" -MF.H264.Encoder="Όνομα κωδικοποιητή" -MF.H264.LowLatency="Χαμηλή Καθυστέρηση (Απενεργοποίηση αναδιευθέτησης καρέ)" -MF.H264.BFrames="Αριθμός συνεχόμενων B-πλαισίων" -MF.H264.CustomBufsize="Χρήση Προσαρμοσμένου Μεγέθους Buffer" -MF.H264.BufferSize="Μέγεθος buffer" -MF.H264.CustomMaxBitrate="Χρήση Προσαρμοσμένου Μέγιστου Ρυθμού μετάδοσης bit" -MF.H264.Bitrate="Ρυθμός μετάδοσης bit" -MF.H264.MaxBitrate="Μέγιστος ρυθμός μετάδοσης bit" -MF.H264.KeyframeIntervalSec="Διάστημα Πλαισίου Αναφοράς (0=αυτόματο)" -MF.H264.RateControl="Έλεγχος ρυθμού" -MF.H264.CBR="CBR (Σταθερός ρυθμός μετάδοσης bit)" -MF.H264.VBR="VBR (Μεταβλητός ρυθμός μετάδοσης bit)" -MF.H264.CQP="CQP (Σταθερή Ποιότητα)" -MF.H264.MinQP="Ελάχιστο QP" -MF.H264.MaxQP="Μέγιστο QP" -MF.H264.QPI="QP Ι-πλαίσιο" -MF.H264.QPP="QP Π-πλαίσιο" -MF.H264.QPB="QP Β-πλαίσιο" -MF.H264.Profile="Προφίλ" -MF.H264.Advanced="Σύνθετες επιλογές" -MF.H264.EncoderSWMicrosoft="H.264 Κωδικοποιητής Λογισμικού της Microsoft" -MF.H264.EncoderHWAMD="AMD κωδικοποίησης κινητήρα H.264 κωδικοποιητής βίντεο (υποδομή πολυμέσων)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 κωδικοποιητής (υποδομή πολυμέσων)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 κωδικοποιητής (υποδομή πολυμέσων)" diff --git a/plugins/win-mf/data/locale/en-US.ini b/plugins/win-mf/data/locale/en-US.ini deleted file mode 100644 index 1230cdc53dc450..00000000000000 --- a/plugins/win-mf/data/locale/en-US.ini +++ /dev/null @@ -1,29 +0,0 @@ -MFAACEnc="Media Foundation AAC Encoder" -Bitrate="Bitrate" - -MF.H264.EncoderName="Media Foundation H264 Encoder" -MF.H264.Encoder="Encoder Name" -MF.H264.LowLatency="Low Latency (Disable frame re-ordering)" -MF.H264.BFrames="Consecutive B-Frame count" -MF.H264.CustomBufsize="Use Custom Buffer Size" -MF.H264.BufferSize="Buffer Size" -MF.H264.CustomMaxBitrate="Use Custom Max Bitrate" -MF.H264.Bitrate="Bitrate" -MF.H264.MaxBitrate="Max Bitrate" -MF.H264.KeyframeIntervalSec="Keyframe Interval (0=auto)" -MF.H264.RateControl="Rate Control" -MF.H264.CBR="CBR (Constant Bitrate)" -MF.H264.VBR="VBR (Variable Bitrate)" -MF.H264.CQP="CQP (Constant Quality)" -MF.H264.MinQP="Minimum QP" -MF.H264.MaxQP="Maximum QP" -MF.H264.QPI="QP I-Frame" -MF.H264.QPP="QP P-Frame" -MF.H264.QPB="QP B-Frame" -MF.H264.Profile="Profile" -MF.H264.Advanced="Advanced" - -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)" diff --git a/plugins/win-mf/data/locale/es-ES.ini b/plugins/win-mf/data/locale/es-ES.ini deleted file mode 100644 index ce2fb5f43ff92d..00000000000000 --- a/plugins/win-mf/data/locale/es-ES.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificador AAC de Media Foundation" -Bitrate="Tasa de bits" -MF.H264.EncoderName="Codificador H264 de Media Foundation" -MF.H264.Encoder="Nombre de codificador" -MF.H264.LowLatency="Baja latencia (desactivar la reorganización de fotogramas)" -MF.H264.BFrames="Numero de B-Frame consecutivas" -MF.H264.CustomBufsize="Usar tamaño de caché personalizado" -MF.H264.BufferSize="Tamaño de búfer" -MF.H264.CustomMaxBitrate="Usar tamaño máximo de bitrate personalizado" -MF.H264.Bitrate="Tasa de bits" -MF.H264.MaxBitrate="Tasa de bits máxima" -MF.H264.KeyframeIntervalSec="Intervalo de fotogramas clave (0=auto)" -MF.H264.RateControl="Control de la frecuencia" -MF.H264.CBR="CBR (Bitrate constante)" -MF.H264.VBR="VBR (Bitrate Variable)" -MF.H264.CQP="CQP (Calidad Constante)" -MF.H264.MinQP="Mínimo QP" -MF.H264.MaxQP="Máximo QP" -MF.H264.Profile="Perfíl" -MF.H264.Advanced="Avanzado" -MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software" -MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/et-EE.ini b/plugins/win-mf/data/locale/et-EE.ini deleted file mode 100644 index 902883e20590a8..00000000000000 --- a/plugins/win-mf/data/locale/et-EE.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC kodeerija" -Bitrate="Bitikiirus" -MF.H264.EncoderName="Media Foundation H264 kodeerija" -MF.H264.Encoder="Kodeerija nimi" -MF.H264.LowLatency="Madal viivitus (Lülitab välja kaadri reorganiseerimise)" -MF.H264.BFrames="Järjestikuste B-kaadrite arv" -MF.H264.CustomBufsize="Kasuta kohandatud puhvri suurust" -MF.H264.BufferSize="Puhvri suurus" -MF.H264.CustomMaxBitrate="Kasuta kohandatud maksimaalset bitikiirust" -MF.H264.Bitrate="Bitikiirus" -MF.H264.MaxBitrate="Maksimaalne bitikiirus" -MF.H264.KeyframeIntervalSec="Võtmekaadri intervall (0=automaatne)" -MF.H264.RateControl="Bitrite kontroll" -MF.H264.CBR="CBR (Pidev bitikiirus)" -MF.H264.VBR="VBR (muutuv bitikiirus)" -MF.H264.CQP="CQP (pidev kvaliteet)" -MF.H264.MinQP="Miinimum QP" -MF.H264.MaxQP="Miinimum QP" -MF.H264.QPI="QP I-kaader" -MF.H264.QPP="QP P-kaader" -MF.H264.QPB="QP B-kaader" -MF.H264.Profile="Profiil" -MF.H264.Advanced="Täpsemad seaded" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodeerija" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodeerija (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodeerija (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodeerija (Media Foundation)" diff --git a/plugins/win-mf/data/locale/eu-ES.ini b/plugins/win-mf/data/locale/eu-ES.ini deleted file mode 100644 index 9bcfa56acb6f30..00000000000000 --- a/plugins/win-mf/data/locale/eu-ES.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC kodetzailea" -Bitrate="Bit-tasa" -MF.H264.EncoderName="Media Foundation H264 kodetzailea" -MF.H264.Encoder="Kodetzaile Izena" -MF.H264.LowLatency="Latentzia txikia (ezgaitu fotogramen berrordenatzea)" -MF.H264.BFrames="B-Frame kontaketa jarraia" -MF.H264.CustomBufsize="Erabili buffer tamaina pertsonalizatua" -MF.H264.BufferSize="Buffer tamaina" -MF.H264.CustomMaxBitrate="Erabili Max Bit-tasa pertsonalizatua" -MF.H264.Bitrate="Bit-tasa" -MF.H264.MaxBitrate="Max Bit-tasa" -MF.H264.KeyframeIntervalSec="Gako-fotogramen tartea (0=automatikoa)" -MF.H264.RateControl="Tasa kontrola" -MF.H264.CBR="CBR (Bit-tasa konstantea)" -MF.H264.VBR="VBR (Bit-tasa aldakorra)" -MF.H264.CQP="CQP (kalitate konstantea)" -MF.H264.MinQP="Gutxienezko QP" -MF.H264.MaxQP="Gehienezko QP" -MF.H264.QPI="QP I-Fotograma" -MF.H264.QPP="QP P-Fotograma" -MF.H264.QPB="QP B-Fotograma" -MF.H264.Profile="Profila" -MF.H264.Advanced="Aurreratua" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodetzailea" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 kodetzailea (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 kodetzailea (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 kodetzailea (Media Foundation)" diff --git a/plugins/win-mf/data/locale/fa-IR.ini b/plugins/win-mf/data/locale/fa-IR.ini deleted file mode 100644 index e03dc09e2b0562..00000000000000 --- a/plugins/win-mf/data/locale/fa-IR.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="واسط رمزگذار بنیاد AAC" -Bitrate="نرخ بیت" -MF.H264.EncoderName="واسط رمزگذار بنیاد H264" -MF.H264.Encoder="نام رمز گذار" -MF.H264.LowLatency="تأخیر کم (غیرفعال کردن سفارش مجدد فریم)" -MF.H264.BFrames="شمارش متوالی B-Frame" -MF.H264.CustomBufsize="استفاده از اندازه بافر سفارشی" -MF.H264.BufferSize="اندازه بافر" -MF.H264.CustomMaxBitrate="استفاده از سفارشی حداکثر میزان ارسال بیت" -MF.H264.Bitrate="نرخ بیت" -MF.H264.MaxBitrate="حداکثر میزان نرخ بیت" -MF.H264.KeyframeIntervalSec="فاصله فریم کلیدی (0=خودکار)" -MF.H264.RateControl="کنترل نرخ" -MF.H264.CBR="CBR (میزان ارسال بیت ثابت)" -MF.H264.VBR="VBR (سرعت بیت متغیر)" -MF.H264.CQP="CQP (ثابت کیفیت)" -MF.H264.MinQP="حداقل QP" -MF.H264.MaxQP="حداکثر QP" -MF.H264.QPI="فریم-l QP" -MF.H264.QPP="فریم P QP" -MF.H264.QPB="فریم QP B" -MF.H264.Profile="پروفایل" -MF.H264.Advanced="پیشرفته" -MF.H264.EncoderSWMicrosoft="مایکروسافت نرم افزار تخمین H.264" -MF.H264.EncoderHWAMD="رمزگذار موتور ویدئو AMD H.264 (بنیاد رسانه)" -MF.H264.EncoderHWIntel="اینتل سریع همگام سازی تخمین H.264 (رسانه بنیاد)" -MF.H264.EncoderHWNVIDIA="انویدیا NVENC H.264 رمزگذار (رسانه بنیاد)" diff --git a/plugins/win-mf/data/locale/fi-FI.ini b/plugins/win-mf/data/locale/fi-FI.ini deleted file mode 100644 index 1c116cbcbc6f67..00000000000000 --- a/plugins/win-mf/data/locale/fi-FI.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Media Foundation AAC-enkooderi" -Bitrate="Bittinopeus" -MF.H264.EncoderName="Media Foundation H264 enkooderi" -MF.H264.Encoder="Enkooderin nimi" -MF.H264.LowLatency="Matala viive (Poista ruutujen uudelleenjärjestely käytöstä)" -MF.H264.BFrames="Peräkkäisten B-ruutujen määrä" -MF.H264.CustomBufsize="Käytä valinnaista puskurin kokoa" -MF.H264.BufferSize="Puskurin koko" -MF.H264.CustomMaxBitrate="Käytä mukautettua maksimibittinopeutta" -MF.H264.Bitrate="Bittinopeus" -MF.H264.MaxBitrate="Maksimibittinopeus" -MF.H264.KeyframeIntervalSec="Avainruutujen väli (0=automaattinen)" -MF.H264.RateControl="Bittinopeuden säätely" -MF.H264.CBR="CBR (vakiobittinopeus)" -MF.H264.VBR="VBR (muuttuva bittinopeus)" -MF.H264.CQP="CQP (vakiolaatu)" -MF.H264.MinQP="QP-minimi" -MF.H264.MaxQP="QP-maksimi" -MF.H264.Profile="Profiili" -MF.H264.Advanced="Lisäasetukset" -MF.H264.EncoderSWMicrosoft="Microsoft H.264 ohjelmistopohjainen enkooderi" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkooderi (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkooderi (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkooderi (Media Foundation)" diff --git a/plugins/win-mf/data/locale/fil-PH.ini b/plugins/win-mf/data/locale/fil-PH.ini deleted file mode 100644 index cef4995ce02296..00000000000000 --- a/plugins/win-mf/data/locale/fil-PH.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Saligan ng Media AAC Enkoder" -Bitrate="Bitreyt" -MF.H264.EncoderName="Saligan ng Media H264 Encoder" -MF.H264.Encoder="Pangalan ng Encoder" -MF.H264.LowLatency="Mababang Pagwalang-kilos (Huwag paganahin sa muling pag-order ng frame)" -MF.H264.BFrames="Magkakasunod na pagbilang ng B-Frame" -MF.H264.CustomBufsize="Gamitin ang Pasadyang Sukat ng Buffer" -MF.H264.BufferSize="Sukat ng Buffer" -MF.H264.CustomMaxBitrate="Gamitin ang pasadyang Max Bitrate" -MF.H264.Bitrate="Bitreyt" -MF.H264.MaxBitrate="Max Bitreyt" -MF.H264.RateControl="Pagkontral ng Rate" -MF.H264.CBR="CBR (Patuloy na Bitrate)" -MF.H264.VBR="VBR (Baryante Bitrate)" -MF.H264.CQP="CQP (Patuloy na Kalidad)" -MF.H264.MinQP="Pinakamababang QP" -MF.H264.MaxQP="Pinakamataas QP" -MF.H264.QPI="QP Ay-Freym" -MF.H264.QPP="QP Pi-Freym" -MF.H264.QPB="QP Bi-Freym" -MF.H264.Profile="Propayl" -MF.H264.Advanced="Masulong" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Enkoder" -MF.H264.EncoderHWAMD="AMD Coding Video ng Makina H. 264 Encoder (Pundasyon ng Media)" -MF.H264.EncoderHWIntel="Mabilis na Intel Sync H.264 Encoder (Pundasyon ng Media)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Pundasyon ng Media)" diff --git a/plugins/win-mf/data/locale/fr-FR.ini b/plugins/win-mf/data/locale/fr-FR.ini deleted file mode 100644 index a06d4ec9b7628b..00000000000000 --- a/plugins/win-mf/data/locale/fr-FR.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Encodeur AAC Media Foundation" -Bitrate="Débit" -MF.H264.EncoderName="Encodeur H264 Media Foundation" -MF.H264.Encoder="Nom de l'encodeur" -MF.H264.LowLatency="Faible Latence (désactive la réorganisation des images)" -MF.H264.BFrames="Nombre de B-Frames consécutives" -MF.H264.CustomBufsize="Utiliser une taille de tampon personnalisée" -MF.H264.BufferSize="Taille du tampon" -MF.H264.CustomMaxBitrate="Utiliser un débit maximum personnalisé" -MF.H264.Bitrate="Débit" -MF.H264.MaxBitrate="Débit max." -MF.H264.KeyframeIntervalSec="Intervalle d'images clés (0 = auto)" -MF.H264.RateControl="Contrôle du débit" -MF.H264.CBR="CBR (débit constant)" -MF.H264.VBR="VBR (débit variable)" -MF.H264.CQP="CQP (qualité constante)" -MF.H264.MinQP="QP minimal" -MF.H264.MaxQP="QP maximal" -MF.H264.Profile="Profil" -MF.H264.Advanced="Options avancées" -MF.H264.EncoderSWMicrosoft="Encodeur logiciel Microsoft H.264" -MF.H264.EncoderHWAMD="Encodeur AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Encodeur Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Encodeur NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/gd-GB.ini b/plugins/win-mf/data/locale/gd-GB.ini deleted file mode 100644 index 0517a900fad95f..00000000000000 --- a/plugins/win-mf/data/locale/gd-GB.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Inneal-còdachaidh Media Foundation AAC" -Bitrate="Reat bhiodan" -MF.H264.EncoderName="Inneal-còdachaidh Media Foundation H264" -MF.H264.Encoder="Ainm an inneil-chòdachaidh" -MF.H264.LowLatency="Foillidheachd ìosal (ath-òrdachadh nam frèamaichean à comas)" -MF.H264.BFrames="Cunntas leantach nam frèamaichean-B" -MF.H264.CustomBufsize="Cleachd meud bufair gnàthaichte" -MF.H264.BufferSize="Meud a’ bhufair" -MF.H264.CustomMaxBitrate="Cleachd reat bhiodan as motha gnàthaichte" -MF.H264.Bitrate="Reat bhiodan" -MF.H264.MaxBitrate="Reat bhiodan as motha" -MF.H264.RateControl="Smachd air an reat" -MF.H264.CBR="CBR (reat bhiodan cunbhalach)" -MF.H264.VBR="VBR (reat bhiodan caochlaideach)" -MF.H264.CQP="CQP (càileachd chunbhalach)" -MF.H264.MinQP="QP as lugha" -MF.H264.MaxQP="QP as motha" -MF.H264.QPI="Frèam-I QP" -MF.H264.QPP="Frèam-P QP" -MF.H264.QPB="Frèam-B QP" -MF.H264.Profile="Pròifil" -MF.H264.Advanced="Adhartach" -MF.H264.EncoderSWMicrosoft="Inneal-còdachaidh bathair-bhog Microsoft H.264" -MF.H264.EncoderHWAMD="Inneal-còdachaidh AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Inneal-còdachaidh Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Inneal-còdachaidh NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/gl-ES.ini b/plugins/win-mf/data/locale/gl-ES.ini deleted file mode 100644 index f22560edf02e0b..00000000000000 --- a/plugins/win-mf/data/locale/gl-ES.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificador AAC de Media Foundation" -Bitrate="Taxa de bits" -MF.H264.EncoderName="Codificador H264 de Media Foundation" -MF.H264.Encoder="Nome do codificador" -MF.H264.LowLatency="Baixa latencia (desactivar a reorganización de fotogramas)" -MF.H264.BFrames="Numero de B-Frame consecutivos" -MF.H264.CustomBufsize="Utilizar tamaño personalizado da memoria temporal" -MF.H264.BufferSize="Tamaño da memoria temporal" -MF.H264.CustomMaxBitrate="Usar unha taxa de bits máxima personalizada" -MF.H264.Bitrate="Taxa de bits" -MF.H264.MaxBitrate="Taxa de bits máxima" -MF.H264.KeyframeIntervalSec="Intervalo de fotogramas clave (0=auto)" -MF.H264.RateControl="Control da taxa" -MF.H264.CBR="CBR (taxa de bits constante)" -MF.H264.VBR="VBR (taxa de bits variábel)" -MF.H264.CQP="CQP (calidade constante)" -MF.H264.MinQP="QP mínimo" -MF.H264.MaxQP="QP máximo" -MF.H264.Profile="Perfil" -MF.H264.Advanced="Avanzado" -MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software" -MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/he-IL.ini b/plugins/win-mf/data/locale/he-IL.ini deleted file mode 100644 index cd2451edaeb50a..00000000000000 --- a/plugins/win-mf/data/locale/he-IL.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="מקודד מדיה על בסיס AAC" -Bitrate="קצב נתונים" -MF.H264.EncoderName="מקודד מדיה על בסיס H264" -MF.H264.Encoder="שם מקודד" -MF.H264.LowLatency="השהיה נמוכה (ביטול מסגרת הזמנה-חדשה)" -MF.H264.BFrames="ספירה B-מסגרת רצופה" -MF.H264.CustomBufsize="השתמש בגודל מותאם אישית לאוגר" -MF.H264.BufferSize="גודל אוגר" -MF.H264.CustomMaxBitrate="שימוש בקצב נתונים מותאם אישית" -MF.H264.Bitrate="קצב נתונים" -MF.H264.MaxBitrate="קצב נתונים מרבי" -MF.H264.KeyframeIntervalSec="מרווח תמונות מפתח (0=אוטומטי)" -MF.H264.RateControl="בקרת קצב" -MF.H264.CBR="‏CBR (קצב נתונים קבוע)" -MF.H264.VBR="‏VBR (קצב נתונים משתנה)" -MF.H264.CQP="CQP(איכות קבועה)" -MF.H264.MinQP="מינימום QP" -MF.H264.MaxQP="מקסימום QP" -MF.H264.Profile="פרופיל" -MF.H264.Advanced="מתקדם" -MF.H264.EncoderSWMicrosoft="מקודד תוכנת מייקרוסופט H.264" -MF.H264.EncoderHWAMD="קידוד מנוע AMD H.264 מקודד (בסיס מדיה)" -MF.H264.EncoderHWIntel="סנכרון מהיר Intel H.264 מקודד (בסיס מדיה)" -MF.H264.EncoderHWNVIDIA="מקודד H.264 של NVENC מבית NVIDIA‏ (Media Foundation)" diff --git a/plugins/win-mf/data/locale/hi-IN.ini b/plugins/win-mf/data/locale/hi-IN.ini deleted file mode 100644 index 4c48cf0827902f..00000000000000 --- a/plugins/win-mf/data/locale/hi-IN.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Media Foundation AAC एनकोडर" -Bitrate="बिटरेट" -MF.H264.EncoderName="Media Foundation H264 एनकोडर" -MF.H264.Encoder="एनकोडर नाम" -MF.H264.LowLatency="कम विलंबता (फ़्रेम पुनः क्रमित करना अक्षम करें)" -MF.H264.BFrames="निरन्तर बी-फ़्रेम गणना" -MF.H264.CustomBufsize="निर्मित बफ़र आकार का प्रयोग करें" -MF.H264.BufferSize="बफ़र आकार" -MF.H264.CustomMaxBitrate="निर्मित महत्तम बिटरेट प्रयोग करें" -MF.H264.Bitrate="बिटरेट" -MF.H264.MaxBitrate="महत्तम बिटरेट" -MF.H264.KeyframeIntervalSec="कीफ़्रेम अंतराल (0=स्वतः)" -MF.H264.RateControl="दर नियंत्रण" -MF.H264.CBR="CBR (स्थिर बिटरेट)" -MF.H264.VBR="VBR (वैरिएबल बिटरेट)" -MF.H264.CQP="CQP (स्थिर गुणवत्ता)" -MF.H264.MinQP="न्यूनतम QP" -MF.H264.MaxQP="महत्तम QP" -MF.H264.Profile="प्रोफ़ाइल" -MF.H264.Advanced="उन्नत" -MF.H264.EncoderSWMicrosoft="माइक्रोसॉफ्ट सॉफ्टवेयर H.264 एनकोडर" -MF.H264.EncoderHWAMD="AMD वीडियो कोडिंग इंजन H.264 एनकोडर (मीडिया फाउंडेशन)" -MF.H264.EncoderHWIntel="इंटेल क्विक सिंक H.264 एनकोडर (मीडिया फाउंडेशन)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 एनकोडर (मीडिया फाउंडेशन)" diff --git a/plugins/win-mf/data/locale/hr-HR.ini b/plugins/win-mf/data/locale/hr-HR.ini deleted file mode 100644 index 1a3c8368f8d3bd..00000000000000 --- a/plugins/win-mf/data/locale/hr-HR.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Media Foundation AAC Enkoder" -Bitrate="Protok" -MF.H264.EncoderName="Media Foundation H264 enkoder" -MF.H264.Encoder="Ime enkodera" -MF.H264.LowLatency="Nisko kašnjenje (onemogući preraspodelu frejmova)" -MF.H264.BFrames="Broj uzastopnih B-frejmova" -MF.H264.CustomBufsize="Koristi posebnu veličinu bafera" -MF.H264.BufferSize="Veličina bafera" -MF.H264.CustomMaxBitrate="Koristi poseban maksimalni protok" -MF.H264.Bitrate="Protok" -MF.H264.MaxBitrate="Maksimalni protok" -MF.H264.RateControl="Kontrola protoka" -MF.H264.CBR="CBR (konstantni protok)" -MF.H264.VBR="VBR (promenjivi protok)" -MF.H264.CQP="CQP (konstantan kvalitet)" -MF.H264.MinQP="Minimalni QP" -MF.H264.MaxQP="Maksimalni QP" -MF.H264.QPI="QP I-frejm" -MF.H264.QPP="QP P-frejm" -MF.H264.QPB="QP B-frejm" -MF.H264.Profile="Profil" -MF.H264.Advanced="Napredno" -MF.H264.EncoderSWMicrosoft="Microsoft softverski H.264 enkoder" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkoder (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkoder (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkoder (Media Foundation)" diff --git a/plugins/win-mf/data/locale/hu-HU.ini b/plugins/win-mf/data/locale/hu-HU.ini deleted file mode 100644 index b86504feff3bb9..00000000000000 --- a/plugins/win-mf/data/locale/hu-HU.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Media Foundation AAC kódoló" -Bitrate="Bitsebesség" -MF.H264.EncoderName="Media Foundation H264 kódoló" -MF.H264.Encoder="Kódoló név" -MF.H264.LowLatency="Alacsony késleltetés (Kikapcsolt képkocka utórendszerezés)" -MF.H264.BFrames="Egymást követő B-Frame szám" -MF.H264.CustomBufsize="Egyéni pufferméret használata" -MF.H264.BufferSize="Pufferméret" -MF.H264.CustomMaxBitrate="Egyéni maximális bitsebesség használata" -MF.H264.Bitrate="Bitsebesség" -MF.H264.MaxBitrate="Max bitsebesség" -MF.H264.KeyframeIntervalSec="Kulcsképkockák időköze (0=automatikus)" -MF.H264.RateControl="Sebesség vezérlés" -MF.H264.CBR="CBR (állandó bitsebesség)" -MF.H264.VBR="VBR (változó bitsebesség)" -MF.H264.CQP="CQP (állandó minőség)" -MF.H264.MinQP="Minimális QP" -MF.H264.MaxQP="Maximális QP" -MF.H264.Profile="Profil" -MF.H264.Advanced="Haladó" -MF.H264.EncoderSWMicrosoft="Microsoft Szoftveres H.264 kódoló" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 kódoló (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 kódoló (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 kódoló (Media Foundation)" diff --git a/plugins/win-mf/data/locale/hy-AM.ini b/plugins/win-mf/data/locale/hy-AM.ini deleted file mode 100644 index a8bb9b9916ecd9..00000000000000 --- a/plugins/win-mf/data/locale/hy-AM.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC կոդավորիչ" -Bitrate="Բիթրեյթ" -MF.H264.EncoderName="Media Foundation H264 կոդավորիչ" -MF.H264.Encoder="Կոդավորի անունը" -MF.H264.LowLatency="Ցածր հետաձգում (անջատել շրջանակի վերաբաշխումը)" -MF.H264.BFrames="Հերթական B-շրջանակների քանակը" -MF.H264.CustomBufsize="Օգտագործել հատուկ բուֆերի չափը" -MF.H264.BufferSize="Բուֆերի չափը" -MF.H264.CustomMaxBitrate="Օգտագործեք հատուկ առավելագույն բիթային արագություն" -MF.H264.Bitrate="Բիթրեյթ" -MF.H264.MaxBitrate="Առավելագույն բիթրեյթ" -MF.H264.KeyframeIntervalSec="Հիմնական կադրերի ընդմիջում (0=ավտոմատ)" -MF.H264.RateControl="Բիթերի կառավարում" -MF.H264.CBR="CBR (մշտական ​​բիթրեյթ)" -MF.H264.VBR="VBR (փոփոխական բիթրեյթ)" -MF.H264.CQP="CQP (Մշտական ​​որակ)" -MF.H264.MinQP="Նվազագույն QP" -MF.H264.MaxQP="Առավելագույն QP" -MF.H264.QPI="QP I-կադր" -MF.H264.QPP="QP P-կադր" -MF.H264.QPB="QP B-կադր" -MF.H264.Profile="Պրոֆիլ" -MF.H264.Advanced="Ընդլայնված" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 կոդավորիչ" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 (Media Foundation) կոդավորիչ" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 (Media Foundation) կոդավորիչ" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 (Media Foundation) կոդավորիչ" diff --git a/plugins/win-mf/data/locale/id-ID.ini b/plugins/win-mf/data/locale/id-ID.ini deleted file mode 100644 index 0fedca444656d0..00000000000000 --- a/plugins/win-mf/data/locale/id-ID.ini +++ /dev/null @@ -1,21 +0,0 @@ -MFAACEnc="Enkoder AAC Media Foundation" -MF.H264.EncoderName="Enkoder H264 Media Foundation" -MF.H264.Encoder="Nama Enkoder" -MF.H264.LowLatency="Latensi Rendah (Nonaktifkan penyusunan ulang frame)" -MF.H264.BFrames="Hitungan B-Frame berturut-turut" -MF.H264.CustomBufsize="Gunakan Ukuran Buffer Yang Dapat Disesuaikan" -MF.H264.BufferSize="Ukuran Buffer" -MF.H264.CustomMaxBitrate="Gunakan Bitrate Maksimum Yang Dapat Disesuaikan" -MF.H264.MaxBitrate="Bitrate Maksimum" -MF.H264.KeyframeIntervalSec="Interval Keyframe (0=otomatis)" -MF.H264.RateControl="Kontrol Rate" -MF.H264.CBR="CBR (Bitrate Konstan)" -MF.H264.VBR="VBR (Bitrate Variabel)" -MF.H264.CQP="CQP (Kualitas Konstan)" -MF.H264.MaxQP="Maksimum QP" -MF.H264.Profile="Profil" -MF.H264.Advanced="Tingkat Lanjut" -MF.H264.EncoderSWMicrosoft="Enkoder Microsoft Software H.264" -MF.H264.EncoderHWAMD="Enkoder AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Enkoder Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Enkoder NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/it-IT.ini b/plugins/win-mf/data/locale/it-IT.ini deleted file mode 100644 index 997a4996a0a8e4..00000000000000 --- a/plugins/win-mf/data/locale/it-IT.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Codifica Media Foundation AAC" -Bitrate="Velocità in bit" -MF.H264.EncoderName="Codifica Media Foundation H264" -MF.H264.Encoder="Nome della codifica" -MF.H264.LowLatency="Bassa latenza (disattiva il riordinamento dei fotogrammi)" -MF.H264.BFrames="Numero dei B-Frame consecutivi" -MF.H264.CustomBufsize="Utilizza una dimensione personalizzata del buffer" -MF.H264.BufferSize="Dimensioni del buffer" -MF.H264.CustomMaxBitrate="Utilizza una velocità in bit massima personalizzata" -MF.H264.Bitrate="Velocità in bit" -MF.H264.MaxBitrate="Velocità in bit massima" -MF.H264.KeyframeIntervalSec="Intervallo fotogramma chiave (0=automatico)" -MF.H264.RateControl="Tipo di controllo della frequenza" -MF.H264.CBR="CBR (velocità in bit costante)" -MF.H264.VBR="VBR (velocità in bit variabile)" -MF.H264.CQP="CQP (qualità costante)" -MF.H264.MinQP="QP minimo" -MF.H264.MaxQP="QP massimo" -MF.H264.QPI="I-Frame QP" -MF.H264.QPP="P-Frame QP" -MF.H264.QPB="B-Frame QP" -MF.H264.Profile="Profilo" -MF.H264.Advanced="Avanzate" -MF.H264.EncoderSWMicrosoft="Codifica Microsoft Software H.264" -MF.H264.EncoderHWAMD="Codifica AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codifica Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codifica NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ja-JP.ini b/plugins/win-mf/data/locale/ja-JP.ini deleted file mode 100644 index bb2ea31f884ede..00000000000000 --- a/plugins/win-mf/data/locale/ja-JP.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC エンコーダ" -Bitrate="ビットレート" -MF.H264.EncoderName="Media Foundation H264 エンコーダ" -MF.H264.Encoder="エンコーダ名" -MF.H264.LowLatency="低遅延 (フレームの並べ替えを無効にする)" -MF.H264.BFrames="連続 B フレーム数" -MF.H264.CustomBufsize="特定バッファサイズを使用" -MF.H264.BufferSize="バッファサイズ" -MF.H264.CustomMaxBitrate="カスタム最大ビットレートを使用" -MF.H264.Bitrate="ビットレート" -MF.H264.MaxBitrate="最大ビットレート" -MF.H264.KeyframeIntervalSec="キーフレーム間隔 (0=自動)" -MF.H264.RateControl="レート制御" -MF.H264.CBR="CBR (固定ビットレート)" -MF.H264.VBR="VBR (可変ビットレート)" -MF.H264.CQP="CQP (固定品質)" -MF.H264.MinQP="最小 QP" -MF.H264.MaxQP="最大 QP" -MF.H264.QPI="QP I フレーム" -MF.H264.QPP="QP P フレーム" -MF.H264.QPB="QP B フレーム" -MF.H264.Profile="プロファイル" -MF.H264.Advanced="高度な設定" -MF.H264.EncoderSWMicrosoft="Microsoft ソフトウェア H.264 エンコーダ" -MF.H264.EncoderHWAMD="AMD ビデオ符号化エンジン H.264 エンコーダ (Media Foundation)" -MF.H264.EncoderHWIntel="インテル Quick Sync H.264 エンコーダ (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 エンコーダ (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ka-GE.ini b/plugins/win-mf/data/locale/ka-GE.ini deleted file mode 100644 index df26a396d43d63..00000000000000 --- a/plugins/win-mf/data/locale/ka-GE.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC დამშიფრავი" -Bitrate="ბიტური სიხშირე" -MF.H264.EncoderName="Media Foundation H264 დამშიფრავი" -MF.H264.Encoder="დამშიფრავის სახელი" -MF.H264.LowLatency="მცირე დაყოვნება (კადრის გადალაგების გათიშვა)" -MF.H264.BFrames="თანმიმდევრული B-კადრის რაოდენობა" -MF.H264.CustomBufsize="მომარაგების მითითებული ზომა" -MF.H264.BufferSize="მომარაგების ზომა" -MF.H264.CustomMaxBitrate="მითითებული დასაშვები ბიტური სიხშირე" -MF.H264.Bitrate="ბიტური სიხშირე" -MF.H264.MaxBitrate="უმაღლესი დასაშვები ბიტური სიხშირე" -MF.H264.KeyframeIntervalSec="საკვანძო კადრების დაშორება (0=თვითშერჩევა)" -MF.H264.RateControl="სიხშირის მართვა" -MF.H264.CBR="CBR (მუდმივი ბიტური სიხშირე)" -MF.H264.VBR="VBR (ცვლადი ბიტური სიხშირე)" -MF.H264.CQP="CQP (ხარისხის მუდმივი დონე)" -MF.H264.MinQP="უმცირესი QP" -MF.H264.MaxQP="უმაღლესი QP" -MF.H264.QPI="QP I-კადრი" -MF.H264.QPP="QP P-კადრი" -MF.H264.QPB="QP B-კადრი" -MF.H264.Profile="პროფილი" -MF.H264.Advanced="გაფართოებული" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 დამშიფრავი" -MF.H264.EncoderHWAMD="AMD Video Coding Engine (VCE) H.264 დამშიფრავი (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 დამშიფრავი (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 დამშიფრავი (Media Foundation)" diff --git a/plugins/win-mf/data/locale/kab-KAB.ini b/plugins/win-mf/data/locale/kab-KAB.ini deleted file mode 100644 index adb32fd05aab07..00000000000000 --- a/plugins/win-mf/data/locale/kab-KAB.ini +++ /dev/null @@ -1,16 +0,0 @@ -Bitrate="Aktum" -MF.H264.Encoder="Isem n usettengal" -MF.H264.CustomBufsize="Seqdec tiddi yugnen i tkatut n weḥraz" -MF.H264.BufferSize="Tiddi n tkatut n uḥraz" -MF.H264.CustomMaxBitrate="Seqdec aktum afellay yugnen" -MF.H264.Bitrate="Aktum" -MF.H264.MaxBitrate="Aktum afellay" -MF.H264.RateControl="Asenqed n uktum" -MF.H264.MinQP="QP adday" -MF.H264.MaxQP="QP afellay" -MF.H264.Profile="Amaɣnu" -MF.H264.Advanced="Anaẓi" -MF.H264.EncoderSWMicrosoft="Asettengal Microsoft Software H.264" -MF.H264.EncoderHWAMD="Asettengal AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Asettengal Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Asettengal NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/kmr-TR.ini b/plugins/win-mf/data/locale/kmr-TR.ini deleted file mode 100644 index 4b064bbc707bfd..00000000000000 --- a/plugins/win-mf/data/locale/kmr-TR.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Kodkerê Media Foundation AAC" -Bitrate="Rêjeya bitê " -MF.H264.EncoderName="Media Foundation H264 kodker" -MF.H264.Encoder="Navê kodker" -MF.H264.LowLatency="Derengmayîna kêm (Ji nû ve sazkirina çarçoveyê neçalak bike)" -MF.H264.BFrames="Hejmara B-Çarçoveya li pey hev" -MF.H264.CustomBufsize="Mezinahiya pêşbîra demkî ya kesanekirî bi kar bîne" -MF.H264.BufferSize="Mezinahiya pêşbîra demkî" -MF.H264.CustomMaxBitrate="Rêjeya bîtê herî bilind a kesanekirî bi kar bîne" -MF.H264.Bitrate="Rêjeya bitê " -MF.H264.MaxBitrate="Leza bit herî pir" -MF.H264.KeyframeIntervalSec="Dabeşkera demkî di navbera çarçoveyan de (0=xweber)" -MF.H264.RateControl="Kontrolkirina rêjeyê" -MF.H264.CBR="RBN (rêjeya bît a neguhêr )" -MF.H264.VBR="RBG (rêjeya bît a guhêrî)" -MF.H264.CQP="KD (kalîteya domdar)" -MF.H264.MinQP="Kêmtirîn qalîteya wêneyê" -MF.H264.MaxQP="Baştirîn qalîteya wêneyê" -MF.H264.Profile="Profîl" -MF.H264.Advanced="Pêşketî" -MF.H264.EncoderSWMicrosoft="Kodkerê Microsoft software H.264" -MF.H264.EncoderHWAMD="Kodkerê AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Kodkerê Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Kodkerê NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ko-KR.ini b/plugins/win-mf/data/locale/ko-KR.ini deleted file mode 100644 index f4db1e008d2933..00000000000000 --- a/plugins/win-mf/data/locale/ko-KR.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Media Foundation AAC 인코더" -Bitrate="비트레이트" -MF.H264.EncoderName="Media Foundation H264 인코더" -MF.H264.Encoder="인코더 이름" -MF.H264.LowLatency="낮은 지연 시간 (프레임 순서 바꾸기 비활성화)" -MF.H264.BFrames="연속 B-프레임 수" -MF.H264.CustomBufsize="사용자 지정 버퍼 크기 설정" -MF.H264.BufferSize="버퍼 크기" -MF.H264.CustomMaxBitrate="사용자 지정 최대 비트레이트 설정" -MF.H264.Bitrate="비트레이트" -MF.H264.MaxBitrate="최대 비트레이트" -MF.H264.KeyframeIntervalSec="키프레임 간격 (0=자동)" -MF.H264.RateControl="데이터율 제어" -MF.H264.CBR="CBR (고정 비트레이트)" -MF.H264.VBR="VBR (가변 비트레이트)" -MF.H264.CQP="CQP (고정 품질)" -MF.H264.MinQP="최소 QP" -MF.H264.MaxQP="최대 QP" -MF.H264.Profile="프로파일" -MF.H264.Advanced="고급" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 인코더" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 인코더 (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 인코더 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 인코더 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ms-MY.ini b/plugins/win-mf/data/locale/ms-MY.ini deleted file mode 100644 index 086c43058a04a1..00000000000000 --- a/plugins/win-mf/data/locale/ms-MY.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Pengekod AAC Media Foundation" -Bitrate="Kadar Bit" -MF.H264.EncoderName="Pengekod H264 Media Foundation" -MF.H264.Encoder="Nama Pengekod" -MF.H264.LowLatency="Kependaman Rendah (Lumpuh penertiban-semula bingkai)" -MF.H264.BFrames="Kiraan Bingkai-B berturutan" -MF.H264.CustomBufsize="Guna Saiz Penimbal Suai" -MF.H264.BufferSize="Saiz Penimbal" -MF.H264.CustomMaxBitrate="Guna Kadar Bit Maks. Suai" -MF.H264.Bitrate="Kadar Bit" -MF.H264.MaxBitrate="Kadar Bit Maks" -MF.H264.KeyframeIntervalSec="Sela Bingkai Kunci (0=auto)" -MF.H264.RateControl="Kawalan Kadar" -MF.H264.CBR="CBR (Kadar Bit Malar)" -MF.H264.VBR="VBR (Kadar Bit Boleh Ubah)" -MF.H264.CQP="CQP (Kualiti Malar)" -MF.H264.MinQP="QP Minimum" -MF.H264.MaxQP="QP Maksimum" -MF.H264.QPI="Bingkai-I QP" -MF.H264.QPP="Bingkai-P QP" -MF.H264.QPB="Bingkai-B QP" -MF.H264.Profile="Profil" -MF.H264.Advanced="Lanjutan" -MF.H264.EncoderSWMicrosoft="Pengekod H.264 Perisian Microsoft" -MF.H264.EncoderHWAMD="Pengekod H.264 Enjin Pengekodan Video AMD (Media Foundation)" -MF.H264.EncoderHWIntel="Pengekod H.264 Quick Sync Intel (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Pengekod H.264 NVENC NVIDIA (Media Foundation)" diff --git a/plugins/win-mf/data/locale/nb-NO.ini b/plugins/win-mf/data/locale/nb-NO.ini deleted file mode 100644 index 148593edb4d042..00000000000000 --- a/plugins/win-mf/data/locale/nb-NO.ini +++ /dev/null @@ -1,23 +0,0 @@ -MFAACEnc="Media Foundation AAC-koder" -MF.H264.EncoderName="Media Foundation H264-koder" -MF.H264.Encoder="Kodernavn" -MF.H264.LowLatency="Lav latens (Deaktiver bilderearrangering)" -MF.H264.BFrames="Antall påfølgende B-Frames" -MF.H264.CustomBufsize="Egendefinert bufferstørrelse" -MF.H264.BufferSize="Bufferstørrelse" -MF.H264.CustomMaxBitrate="Bruk tilpasset maks bithastighet" -MF.H264.Bitrate="Bithastighet" -MF.H264.MaxBitrate="Maks bithastighet" -MF.H264.RateControl="Hastighetskontroll" -MF.H264.CBR="CBR (konstant bithastighet)" -MF.H264.VBR="VBR (variabel bithastighet)" -MF.H264.CQP="CQP (konstant kvalitet)" -MF.H264.MinQP="Minste QP" -MF.H264.MaxQP="Største QP" -MF.H264.QPB="QP B-ramme" -MF.H264.Profile="Profil" -MF.H264.Advanced="Avansert" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264-koder" -MF.H264.EncoderHWAMD="AMD Video Codec Engine H.264-koder (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264-koder (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264-koder (Media Foundation)" diff --git a/plugins/win-mf/data/locale/nl-NL.ini b/plugins/win-mf/data/locale/nl-NL.ini deleted file mode 100644 index 901d5f6fd48024..00000000000000 --- a/plugins/win-mf/data/locale/nl-NL.ini +++ /dev/null @@ -1,14 +0,0 @@ -MF.H264.Encoder="Encodernaam" -MF.H264.LowLatency="Low Latency (Geen frames herschikken)" -MF.H264.BFrames="Aantal opeenvolgende B-Frames" -MF.H264.CustomBufsize="Aangepaste buffergrootte gebruiken" -MF.H264.BufferSize="Buffergrootte" -MF.H264.CustomMaxBitrate="Gebruik Aangepaste Max Bitrate" -MF.H264.KeyframeIntervalSec="Tijd tussen keyframes (0=auto)" -MF.H264.CBR="CBR (Constante Bitrate)" -MF.H264.VBR="VBR (Variabele Bitrate)" -MF.H264.CQP="CQP (Constante Kwaliteit)" -MF.H264.MinQP="Minimale QP" -MF.H264.MaxQP="Maximale QP" -MF.H264.Profile="Profiel" -MF.H264.Advanced="Geavanceerd" diff --git a/plugins/win-mf/data/locale/nn-NO.ini b/plugins/win-mf/data/locale/nn-NO.ini deleted file mode 100644 index dec935463638f0..00000000000000 --- a/plugins/win-mf/data/locale/nn-NO.ini +++ /dev/null @@ -1,2 +0,0 @@ -MF.H264.Profile="Profil" -MF.H264.Advanced="Avansert" diff --git a/plugins/win-mf/data/locale/oc-FR.ini b/plugins/win-mf/data/locale/oc-FR.ini deleted file mode 100644 index 6302faf874303e..00000000000000 --- a/plugins/win-mf/data/locale/oc-FR.ini +++ /dev/null @@ -1 +0,0 @@ -MF.H264.Profile="Perfil" diff --git a/plugins/win-mf/data/locale/pl-PL.ini b/plugins/win-mf/data/locale/pl-PL.ini deleted file mode 100644 index 94b5c09c4eceb5..00000000000000 --- a/plugins/win-mf/data/locale/pl-PL.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Enkoder Media Foundation AAC" -Bitrate="Przepływność (bitrate)" -MF.H264.EncoderName="Enkoder Media Foundation H264" -MF.H264.Encoder="Nazwa enkodera" -MF.H264.LowLatency="Niskie opóźnienie (wyłączony re-ordering klatek)" -MF.H264.BFrames="Liczba kolejnych ramek B-frame" -MF.H264.CustomBufsize="Użyj własnego rozmiaru bufora" -MF.H264.BufferSize="Rozmiar bufora" -MF.H264.CustomMaxBitrate="Użyj własnego maksymalnego rozmiaru bufora" -MF.H264.Bitrate="Przepływność (bitrate)" -MF.H264.MaxBitrate="Maksymalna przepływność (bitrate)" -MF.H264.KeyframeIntervalSec="Odstęp między klatkami kluczowymi (0=automatyczny)" -MF.H264.RateControl="Kontrola przepływności" -MF.H264.CBR="CBR (stała wartość przepływności)" -MF.H264.VBR="VBR (zmienna wartość przepływności)" -MF.H264.CQP="CQP (stała jakość)" -MF.H264.MinQP="Minimalna QP" -MF.H264.MaxQP="Maksymalna QP" -MF.H264.Profile="Profil" -MF.H264.Advanced="Zaawansowane" -MF.H264.EncoderSWMicrosoft="Enkoder Microsoft Software H.264" -MF.H264.EncoderHWAMD="Enkoder AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Enkoder Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Enkoder NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/pt-BR.ini b/plugins/win-mf/data/locale/pt-BR.ini deleted file mode 100644 index abea6813904c49..00000000000000 --- a/plugins/win-mf/data/locale/pt-BR.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificador AAC da Media Foundation" -Bitrate="Taxa de bits" -MF.H264.EncoderName="Codificador H264 da Media Foundation" -MF.H264.Encoder="Nome do Codificador" -MF.H264.LowLatency="Baixa latência (Desativar reordenação de quadros)" -MF.H264.BFrames="Contagem de B-Frame consecutiva" -MF.H264.CustomBufsize="Usar Tamado de Buffer Personalizado" -MF.H264.BufferSize="Tamanho do Buffer" -MF.H264.CustomMaxBitrate="Usar Taxa Máxima de Bits Personalizada" -MF.H264.Bitrate="Taxa de Bits" -MF.H264.MaxBitrate="Taxa de Bits Máxima" -MF.H264.KeyframeIntervalSec="Intervalo de Keyframe (0=auto)" -MF.H264.RateControl="Controle da Taxa de Bits" -MF.H264.CBR="CBR (Taxa de bits constante)" -MF.H264.VBR="VBR (Taxa de bits variável)" -MF.H264.CQP="CQP (Qualidade Constante)" -MF.H264.MinQP="Mínima QP" -MF.H264.MaxQP="Máxima QP" -MF.H264.Profile="Perfil" -MF.H264.Advanced="Avançado" -MF.H264.EncoderSWMicrosoft="Codificador H.264 da Microsoft" -MF.H264.EncoderHWAMD="Motor de Codificação de Vídeo H.264 AMD (Media Foundation)" -MF.H264.EncoderHWIntel="Codificador da Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificador da NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/pt-PT.ini b/plugins/win-mf/data/locale/pt-PT.ini deleted file mode 100644 index 5f07fac81958b0..00000000000000 --- a/plugins/win-mf/data/locale/pt-PT.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificador AAC da Media Foundation" -Bitrate="Taxa de bits" -MF.H264.EncoderName="Codificador H264 da Media Foundation" -MF.H264.Encoder="Nome do codificador" -MF.H264.LowLatency="Baixa latência (desativar reordenação de fotogramas)" -MF.H264.BFrames="Total de B-Frames consecutivas" -MF.H264.CustomBufsize="Utilizar tamanho personalizado de memória temporária" -MF.H264.BufferSize="Tamanho da memória temporária" -MF.H264.CustomMaxBitrate="Usar taxa de bits personalizada" -MF.H264.Bitrate="Taxa de bits" -MF.H264.MaxBitrate="Taxa de bits máxima" -MF.H264.KeyframeIntervalSec="Intervalo de fotogramas-chave ( 0=automático)" -MF.H264.RateControl="Controlo de taxa" -MF.H264.CBR="CBR (taxa de bits constante)" -MF.H264.VBR="VBR (taxa de bits variável)" -MF.H264.CQP="CQP (qualidade constante)" -MF.H264.MinQP="Mínimo de QP" -MF.H264.MaxQP="Máximo de QP" -MF.H264.Profile="Perfil" -MF.H264.Advanced="Avançado" -MF.H264.EncoderSWMicrosoft="Codificador H.264 da Microsoft Software" -MF.H264.EncoderHWAMD="Codificador da AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codificador da Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificador da NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ro-RO.ini b/plugins/win-mf/data/locale/ro-RO.ini deleted file mode 100644 index 2f3a75ae29e48b..00000000000000 --- a/plugins/win-mf/data/locale/ro-RO.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Codificator AAC Media Foundation" -Bitrate="Rată de biți" -MF.H264.EncoderName="Codificator H264 Media Foundation" -MF.H264.Encoder="Numele codificatorului" -MF.H264.LowLatency="Latență scăzută (Dezactivează reordonarea cadrelor)" -MF.H264.BFrames="Număr de B-Frame consecutive" -MF.H264.CustomBufsize="Folosește dimensiune personalizată pentru buffer" -MF.H264.BufferSize="Dimensiune pentru buffer" -MF.H264.CustomMaxBitrate="Folosește rată de biți maximă personalizată" -MF.H264.Bitrate="Rată de biți" -MF.H264.MaxBitrate="Rată de biți maximă" -MF.H264.KeyframeIntervalSec="Interval de cadre cheie (0=auto)" -MF.H264.RateControl="Controlul ratei" -MF.H264.CBR="CBR (Rată de biți constantă)" -MF.H264.VBR="VBR (Rată de biți variabilă)" -MF.H264.CQP="CQP (Calitate constantă)" -MF.H264.MinQP="QP minim" -MF.H264.MaxQP="QP maxim" -MF.H264.Profile="Profil" -MF.H264.Advanced="Avansat" -MF.H264.EncoderSWMicrosoft="Codificator software Microsoft H.264" -MF.H264.EncoderHWAMD="Codificator AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Codificator Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Codificator NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ru-RU.ini b/plugins/win-mf/data/locale/ru-RU.ini deleted file mode 100644 index 6e7a9b59da8463..00000000000000 --- a/plugins/win-mf/data/locale/ru-RU.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC кодировщик" -Bitrate="Битрейт" -MF.H264.EncoderName="Кодировщик Media Foundation H264" -MF.H264.Encoder="Имя кодировщика" -MF.H264.LowLatency="Низкая задержка (отключить перераспределение кадров)" -MF.H264.BFrames="Количество последовательных B-кадров" -MF.H264.CustomBufsize="Использовать пользовательский размер буфера" -MF.H264.BufferSize="Размер буфера" -MF.H264.CustomMaxBitrate="Использовать пользовательский максимальный битрейт" -MF.H264.Bitrate="Битрейт" -MF.H264.MaxBitrate="Максимальный битрейт" -MF.H264.KeyframeIntervalSec="Интервал ключевых кадров (0=авто)" -MF.H264.RateControl="Управление битрейтом" -MF.H264.CBR="CBR (постоянный битрейт)" -MF.H264.VBR="VBR (переменный битрейт)" -MF.H264.CQP="CQP (постоянное качество)" -MF.H264.MinQP="Минимальный QP" -MF.H264.MaxQP="Максимальный QP" -MF.H264.QPI="QP I-кадр" -MF.H264.QPP="QP P-кадр" -MF.H264.QPB="QP B-кадр" -MF.H264.Profile="Профиль" -MF.H264.Advanced="Расширенные параметры" -MF.H264.EncoderSWMicrosoft="Кодировщик Microsoft Software H.264" -MF.H264.EncoderHWAMD="Кодировщик AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Кодировщик Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Кодировщик NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/si-LK.ini b/plugins/win-mf/data/locale/si-LK.ini deleted file mode 100644 index ca317a8ed30a3e..00000000000000 --- a/plugins/win-mf/data/locale/si-LK.ini +++ /dev/null @@ -1,25 +0,0 @@ -MFAACEnc="මාධ්‍ය පදනම AAC ආකේතකය" -Bitrate="බිටුඅනුපා." -MF.H264.EncoderName="මාධ්‍ය පදනම H264 ආකේතකය" -MF.H264.Encoder="ආකේතකයේ නම" -MF.H264.LowLatency="අවම ගුප්තතාව (රාමු යළි පෙළගැස්ම නැවතීම)" -MF.H264.BFrames="අනුලෝම B-රාමු ගණන" -MF.H264.CustomBufsize="අභිරුචි අන්තරාචය ප්‍රමාණය" -MF.H264.BufferSize="අන්තරාචය තරම" -MF.H264.CustomMaxBitrate="අභිරුචි උප. බිටුඅනු. භාවිතය" -MF.H264.Bitrate="බිටුඅනුපා." -MF.H264.MaxBitrate="උපරිම බිටුඅනු." -MF.H264.RateControl="අනුපාත පාලනය" -MF.H264.CBR="CBR (නියත බිටුුඅනු.)" -MF.H264.CQP="CQP (නියත ගුණත්වය)" -MF.H264.MinQP="අවම QP" -MF.H264.MaxQP="උපරිම QP" -MF.H264.QPI="QP I-රාමු" -MF.H264.QPP="QP P-රාමු" -MF.H264.QPB="QP B-රාමු" -MF.H264.Profile="පැතිකඩ" -MF.H264.Advanced="වැඩිදුර" -MF.H264.EncoderSWMicrosoft="මයික්‍රොසොෆ්ට් මෘදුකාංග H.264 ආකේතකය" -MF.H264.EncoderHWAMD="AMD දෘශ්‍ය කේතන යන්ත්‍රය H.264 ආකේතකය (මාධ්‍ය පදනම)" -MF.H264.EncoderHWIntel="ඉන්ටෙල් කුයික් සයින් H.264 ආකේතකය (මාධ්‍ය පදනම)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 ආකේතකය (මාධ්‍ය පදනම)" diff --git a/plugins/win-mf/data/locale/sk-SK.ini b/plugins/win-mf/data/locale/sk-SK.ini deleted file mode 100644 index b1f31873df019a..00000000000000 --- a/plugins/win-mf/data/locale/sk-SK.ini +++ /dev/null @@ -1,25 +0,0 @@ -MFAACEnc="Media Foundation AAC Enkodér" -MF.H264.EncoderName="Media Foundation H264 Enkodér" -MF.H264.Encoder="Názov enkodéra" -MF.H264.LowLatency="Nízka odozva (zakázať preraďovanie snímok)" -MF.H264.BFrames="Počet po sebe idúcich B-snímok" -MF.H264.CustomBufsize="Použiť vlastnú veľkosť medzipamäte" -MF.H264.BufferSize="Veľkosť medzipamäte" -MF.H264.CustomMaxBitrate="Použiť vlastný maximálny bitrate" -MF.H264.MaxBitrate="Max. bitrate" -MF.H264.KeyframeIntervalSec="Interval kľúčových snímkov (0=automaticky)" -MF.H264.RateControl="Riadenie toku" -MF.H264.CBR="CBR (Konštantný Bitrate)" -MF.H264.VBR="VBR (Variabilný Bitrate)" -MF.H264.CQP="CQP (Konštantná kvalita)" -MF.H264.MinQP="Minimálne QP" -MF.H264.MaxQP="Minimálne QP" -MF.H264.QPI="QP I-snímka" -MF.H264.QPP="QP P-snímka" -MF.H264.QPB="QP B-snímka" -MF.H264.Profile="Profil" -MF.H264.Advanced="Rozšírené" -MF.H264.EncoderSWMicrosoft="Microsoft H.264 Softvérový Enkodér" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Enkodér (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Enkodér (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Enkodér (Media Foundation)" diff --git a/plugins/win-mf/data/locale/sl-SI.ini b/plugins/win-mf/data/locale/sl-SI.ini deleted file mode 100644 index 99c7bebdc029ae..00000000000000 --- a/plugins/win-mf/data/locale/sl-SI.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Kodirnik AAC Media Foundation" -Bitrate="Bitna hitrost" -MF.H264.EncoderName="Kodirnik H264 Media Foundation" -MF.H264.Encoder="Ime kodirnika" -MF.H264.LowLatency="Nizka zakasnitev (onemogoči prerazporejanje sličic)" -MF.H264.BFrames="Število zaporednih sličic B" -MF.H264.CustomBufsize="Uporabi velikost medpomnilnika po meri" -MF.H264.BufferSize="Velikost medpomnilnika" -MF.H264.CustomMaxBitrate="Uporabi največjo bitno hitrost po meri" -MF.H264.Bitrate="Bitna hitrost" -MF.H264.MaxBitrate="Največja bitna hitrost" -MF.H264.KeyframeIntervalSec="Razmik med ključnimi sličicami (0=samodejno)" -MF.H264.RateControl="Nadzor hitrosti" -MF.H264.CBR="Konstantna bitna hitrost" -MF.H264.VBR="Spremenljiva bitna hitrost" -MF.H264.CQP="CQP (konstantna kakovost)" -MF.H264.MinQP="Najmanjši QP" -MF.H264.MaxQP="Največji QP" -MF.H264.QPI="QP I-sličic" -MF.H264.QPP="QP sličic P" -MF.H264.QPB="QP sličic B" -MF.H264.Profile="Profil" -MF.H264.Advanced="Napredno" -MF.H264.EncoderSWMicrosoft="Microsoftov programski kodirnik H.264" -MF.H264.EncoderHWAMD="Kodirnik H.264 AMD Video Coding Engine (Media Foundation)" -MF.H264.EncoderHWIntel="Kodirnik H.264 Intel Quick Sync (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Kodirnik H.264 NVIDIA NVENC (Media Foundation)" diff --git a/plugins/win-mf/data/locale/sr-CS.ini b/plugins/win-mf/data/locale/sr-CS.ini deleted file mode 100644 index 1a3c8368f8d3bd..00000000000000 --- a/plugins/win-mf/data/locale/sr-CS.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Media Foundation AAC Enkoder" -Bitrate="Protok" -MF.H264.EncoderName="Media Foundation H264 enkoder" -MF.H264.Encoder="Ime enkodera" -MF.H264.LowLatency="Nisko kašnjenje (onemogući preraspodelu frejmova)" -MF.H264.BFrames="Broj uzastopnih B-frejmova" -MF.H264.CustomBufsize="Koristi posebnu veličinu bafera" -MF.H264.BufferSize="Veličina bafera" -MF.H264.CustomMaxBitrate="Koristi poseban maksimalni protok" -MF.H264.Bitrate="Protok" -MF.H264.MaxBitrate="Maksimalni protok" -MF.H264.RateControl="Kontrola protoka" -MF.H264.CBR="CBR (konstantni protok)" -MF.H264.VBR="VBR (promenjivi protok)" -MF.H264.CQP="CQP (konstantan kvalitet)" -MF.H264.MinQP="Minimalni QP" -MF.H264.MaxQP="Maksimalni QP" -MF.H264.QPI="QP I-frejm" -MF.H264.QPP="QP P-frejm" -MF.H264.QPB="QP B-frejm" -MF.H264.Profile="Profil" -MF.H264.Advanced="Napredno" -MF.H264.EncoderSWMicrosoft="Microsoft softverski H.264 enkoder" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkoder (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkoder (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkoder (Media Foundation)" diff --git a/plugins/win-mf/data/locale/sr-SP.ini b/plugins/win-mf/data/locale/sr-SP.ini deleted file mode 100644 index f8096b219251d9..00000000000000 --- a/plugins/win-mf/data/locale/sr-SP.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Media Foundation AAC Енкодер" -Bitrate="Проток" -MF.H264.EncoderName="Media Foundation H264 енкодер" -MF.H264.Encoder="Име енкодера" -MF.H264.LowLatency="Ниско кашњење (онемогући прерасподелу фрејмова)" -MF.H264.BFrames="Број узастопних Б-фрејмова" -MF.H264.CustomBufsize="Користи посебну величину бафера" -MF.H264.BufferSize="Величина бафера" -MF.H264.CustomMaxBitrate="Користи посебан максимални проток" -MF.H264.Bitrate="Проток" -MF.H264.MaxBitrate="Максимални проток" -MF.H264.RateControl="Контрола протока" -MF.H264.CBR="CBR (константни проток)" -MF.H264.VBR="VBR (промењиви проток)" -MF.H264.CQP="CQP (константан квалитет)" -MF.H264.MinQP="Минимални QP" -MF.H264.MaxQP="Максимални QP" -MF.H264.QPI="QP I-фрејм" -MF.H264.QPP="QP P-фрејм" -MF.H264.QPB="QP B-фрејм" -MF.H264.Profile="Профил" -MF.H264.Advanced="Напредно" -MF.H264.EncoderSWMicrosoft="Microsoft софтверски H.264 енкодер" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 енкодер (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 енкодер (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 енкодер (Media Foundation)" diff --git a/plugins/win-mf/data/locale/sv-SE.ini b/plugins/win-mf/data/locale/sv-SE.ini deleted file mode 100644 index fbd8eef44cef90..00000000000000 --- a/plugins/win-mf/data/locale/sv-SE.ini +++ /dev/null @@ -1,24 +0,0 @@ -MFAACEnc="Media Foundation AAC-kodare" -Bitrate="Bithastighet" -MF.H264.EncoderName="Media Foundation H264-kodare" -MF.H264.Encoder="Kodarnamn" -MF.H264.LowLatency="Låg latens (Avaktivera bildrute-platsförändring)" -MF.H264.BFrames="Antal efterföljande B-Frames" -MF.H264.CustomBufsize="Använd anpassad buffertstorlek" -MF.H264.BufferSize="Buffertstorlek" -MF.H264.CustomMaxBitrate="Använd anpassad maximal bithastighet" -MF.H264.Bitrate="Bithastighet" -MF.H264.MaxBitrate="Maximal bithastighet" -MF.H264.KeyframeIntervalSec="Intervall för keyframes (0=automatiskt)" -MF.H264.RateControl="Hastighetskontroll" -MF.H264.CBR="CBR (konstant bithastighet)" -MF.H264.VBR="VBR (varierande bithastighet)" -MF.H264.CQP="CQP (konstant kvalitet)" -MF.H264.MinQP="Minimal QP" -MF.H264.MaxQP="Maximal QP" -MF.H264.Profile="Profil" -MF.H264.Advanced="Avancerat" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264-kodare" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264-kodare (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264-kodare (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264-kodare (Media Foundation)" diff --git a/plugins/win-mf/data/locale/ta-IN.ini b/plugins/win-mf/data/locale/ta-IN.ini deleted file mode 100644 index 0b32c6db4d445a..00000000000000 --- a/plugins/win-mf/data/locale/ta-IN.ini +++ /dev/null @@ -1,12 +0,0 @@ -Bitrate="பிட்விகிதம்" -MF.H264.Encoder="குறியாக்கிப் பெயர்" -MF.H264.CustomBufsize="குறிப்பிட்ட பப்பர் அளவை பயன்படுத்தவும்" -MF.H264.BufferSize="பப்பர் அளவு" -MF.H264.CustomMaxBitrate="அதிகபட்ச பிட்விகித்தை உபயோகபடுத்தவும்" -MF.H264.Bitrate="பிட்விகிதம்" -MF.H264.MaxBitrate="அதிகபட்ச பிட்விகிதம்" -MF.H264.Profile="விவரம்" -MF.H264.EncoderSWMicrosoft="Microsoft மென்பொருள் H.264 குறியாக்கி" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 குறியாக்கி (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 குறியாக்கி(Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 குறியாக்கி (Media Foundation)" diff --git a/plugins/win-mf/data/locale/tl-PH.ini b/plugins/win-mf/data/locale/tl-PH.ini deleted file mode 100644 index ffe8a6bf00c0f8..00000000000000 --- a/plugins/win-mf/data/locale/tl-PH.ini +++ /dev/null @@ -1,21 +0,0 @@ -MFAACEnc="Ang Media Foundation AAC Encoder" -Bitrate="Ang Bitrate" -MF.H264.EncoderName="Ang Media Foundation H264 Encoder" -MF.H264.Encoder="Pangalan ng Encoder" -MF.H264.LowLatency="Mababang Latency (Hindi paganahin ang frame re-ordering)" -MF.H264.BFrames="Magkasunod na B-Frame na pagbilang" -MF.H264.CustomBufsize="Gumamit ng Custom Buffer Size" -MF.H264.BufferSize="Ang Buffer Size" -MF.H264.CustomMaxBitrate="Gumamit ng Custom Max Bitrate" -MF.H264.Bitrate="Ang Bitrate" -MF.H264.MaxBitrate="Ang pinakamataas na Bitrate" -MF.H264.RateControl="Ang Rate ng Kontrol" -MF.H264.CBR="Ang CBR (Constant Bitrate)" -MF.H264.VBR="Ang VBR (Variable Bitrate)" -MF.H264.CQP="Ang VBR (Variable Bitrate)" -MF.H264.MinQP="Pinakamaliit QP" -MF.H264.MaxQP="Pinakamataas QP" -MF.H264.QPI="Ang QP I-Frame" -MF.H264.QPP="Ang QP P-Frame" -MF.H264.QPB="Ang QP B-Frame" -MF.H264.Profile="Ang Profile" diff --git a/plugins/win-mf/data/locale/tr-TR.ini b/plugins/win-mf/data/locale/tr-TR.ini deleted file mode 100644 index 563d45618a8abf..00000000000000 --- a/plugins/win-mf/data/locale/tr-TR.ini +++ /dev/null @@ -1,26 +0,0 @@ -MFAACEnc="Medya Vakfı AAC Kodlayıcısı" -Bitrate="Bit hızı" -MF.H264.EncoderName="Medya Vakfı H264 Kodlayıcısı" -MF.H264.Encoder="Kodlayıcı Adı" -MF.H264.LowLatency="Düşük Gecikme (Kare yeniden sıralamasını devre dışı bırak)" -MF.H264.BFrames="Ardışık B-Kare sayısı" -MF.H264.CustomBufsize="İsteğe Bağlı Arabellek Boyutu Kullan" -MF.H264.BufferSize="Arabellek Boyutu" -MF.H264.CustomMaxBitrate="Özel Maksimum Bit Hızı Kullan" -MF.H264.Bitrate="Bit hızı" -MF.H264.MaxBitrate="Maksimum Bit Hızı" -MF.H264.KeyframeIntervalSec="Anahtar Kare Aralığı (0=otomatik)" -MF.H264.RateControl="Oran Kontrolü" -MF.H264.CBR="CBR (Sabit Bit Hızı)" -MF.H264.VBR="VBR (Değişken Bit Hızı)" -MF.H264.CQP="CQP (Sabit Kalite)" -MF.H264.MaxQP="Maksimum QP" -MF.H264.QPI="QP I-Kare" -MF.H264.QPP="QP P-Kare" -MF.H264.QPB="QP B-Kare" -MF.H264.Profile="Profil" -MF.H264.Advanced="Gelişmiş" -MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Kodlayıcısı" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodlayıcısı (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodlayıcısı (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodlayıcısı (Media Foundation)" diff --git a/plugins/win-mf/data/locale/uk-UA.ini b/plugins/win-mf/data/locale/uk-UA.ini deleted file mode 100644 index a0c8869792d8a6..00000000000000 --- a/plugins/win-mf/data/locale/uk-UA.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Кодувальник Media Foundation AAC" -Bitrate="Бітрейт" -MF.H264.EncoderName="Кодувальник Media Foundation H264" -MF.H264.Encoder="Назва кодувальника" -MF.H264.LowLatency="Низька затримка (вимикає перегрупування кадрів)" -MF.H264.BFrames="Кількість послідовних B-кадрів" -MF.H264.CustomBufsize="Настроюваний розмір буфера" -MF.H264.BufferSize="Розмір буфера" -MF.H264.CustomMaxBitrate="Використовувати настроюваний максимальний бітрейт" -MF.H264.Bitrate="Бітрейт" -MF.H264.MaxBitrate="Максимальний бітрейт" -MF.H264.KeyframeIntervalSec="Інтервал ключових кадрів (0=авто)" -MF.H264.RateControl="Керування бітрейтом" -MF.H264.CBR="CBR (постійний бітрейт)" -MF.H264.VBR="VBR (змінний бітрейт)" -MF.H264.CQP="CQP (фіксована якість)" -MF.H264.MinQP="Мінімальний QP" -MF.H264.MaxQP="Максимальний QP" -MF.H264.QPI="QP для I-кадрів" -MF.H264.QPP="QP для P-кадрів" -MF.H264.QPB="QP для B-кадрів" -MF.H264.Profile="Профіль" -MF.H264.Advanced="Розширені параметри" -MF.H264.EncoderSWMicrosoft="Кодувальник Microsoft Software H.264" -MF.H264.EncoderHWAMD="Кодувальник AMD Video Coding Engine H.264 (Media Foundation)" -MF.H264.EncoderHWIntel="Кодувальник Intel Quick Sync H.264 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="Кодувальник NVIDIA NVENC H.264 (Media Foundation)" diff --git a/plugins/win-mf/data/locale/vi-VN.ini b/plugins/win-mf/data/locale/vi-VN.ini deleted file mode 100644 index a206e43fbf434d..00000000000000 --- a/plugins/win-mf/data/locale/vi-VN.ini +++ /dev/null @@ -1,21 +0,0 @@ -MFAACEnc="Bộ biên mã AAC Media Foundation" -MF.H264.EncoderName="Bộ biên mã H264 Media Foundation" -MF.H264.Encoder="Tên bộ biên mã" -MF.H264.LowLatency="Độ trễ thấp (Tắt frame re-ordering)" -MF.H264.BFrames="Số khung B liên tục" -MF.H264.CustomBufsize="Sử dụng tùy chỉnh bộ đệm kích thước" -MF.H264.BufferSize="Kích cỡ bộ đệm" -MF.H264.CustomMaxBitrate="Sử dụng tùy chỉnh Bitrate cao nhất" -MF.H264.MaxBitrate="Bitrate Cao nhất" -MF.H264.KeyframeIntervalSec="Thời Gian Giữa Các Khung Chính (0=tự động)" -MF.H264.RateControl="Cách kiểm soát bitrate" -MF.H264.CBR="CBR (Bitrate cố định)" -MF.H264.VBR="VBR (Bitrate thay đổi được)" -MF.H264.CQP="CQP (Chất lượng cố định)" -MF.H264.MinQP="QP Thấp nhất" -MF.H264.MaxQP="QP Cao nhất" -MF.H264.Profile="Hồ sơ" -MF.H264.Advanced="Nâng cao" -MF.H264.EncoderSWMicrosoft="Bộ biên mã H.264 Microsoft Software" -MF.H264.EncoderHWAMD="Bộ biên mã H.264 AMD Video Coding Engine (Media Foundation)" -MF.H264.EncoderHWIntel="Bộ biên mã H.264 Intel Quick Sync (Media Foundation)" diff --git a/plugins/win-mf/data/locale/zh-CN.ini b/plugins/win-mf/data/locale/zh-CN.ini deleted file mode 100644 index fd410b3750c4ae..00000000000000 --- a/plugins/win-mf/data/locale/zh-CN.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="媒体基础 AAC 编码器" -Bitrate="码率" -MF.H264.EncoderName="媒体基础 H264 编码器" -MF.H264.Encoder="编码器名称" -MF.H264.LowLatency="低延迟 (禁用框架重新排序)" -MF.H264.BFrames="连续 B 帧数" -MF.H264.CustomBufsize="使用自定义缓存大小" -MF.H264.BufferSize="缓冲大小" -MF.H264.CustomMaxBitrate="使用自定义最大码率" -MF.H264.Bitrate="码率" -MF.H264.MaxBitrate="最大码率" -MF.H264.KeyframeIntervalSec="关键帧间隔(0=自动)" -MF.H264.RateControl="速率控制" -MF.H264.CBR="CBR (恒定码率)" -MF.H264.VBR="VBR (可变码率)" -MF.H264.CQP="CQP (恒定质量)" -MF.H264.MinQP="最低 QP" -MF.H264.MaxQP="最大的 QP" -MF.H264.QPI="QP I帧" -MF.H264.QPP="QP P帧" -MF.H264.QPB="QP B帧" -MF.H264.Profile="配置文件" -MF.H264.Advanced="高级" -MF.H264.EncoderSWMicrosoft="微软软件 H.264 编码器" -MF.H264.EncoderHWAMD="AMD 视频编码引擎 H.264 编码器 (媒体基金会)" -MF.H264.EncoderHWIntel="英特尔快速同步 H.264 编码器 (媒体基金会)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 编码器 (媒体基金会)" diff --git a/plugins/win-mf/data/locale/zh-TW.ini b/plugins/win-mf/data/locale/zh-TW.ini deleted file mode 100644 index 089fdb9cb16c26..00000000000000 --- a/plugins/win-mf/data/locale/zh-TW.ini +++ /dev/null @@ -1,27 +0,0 @@ -MFAACEnc="Media Foundation AAC 編碼器" -Bitrate="位元率" -MF.H264.EncoderName="Media Foundation H264 編碼器" -MF.H264.Encoder="編碼器名稱" -MF.H264.LowLatency="低延遲 (停用訊框重新排序)" -MF.H264.BFrames="連續 B 訊框數" -MF.H264.CustomBufsize="使用自訂的緩衝區大小" -MF.H264.BufferSize="緩衝區大小" -MF.H264.CustomMaxBitrate="使用自訂的最大位元率" -MF.H264.Bitrate="位元率" -MF.H264.MaxBitrate="最大位元率" -MF.H264.KeyframeIntervalSec="關鍵訊框間隔(0 = 自動)" -MF.H264.RateControl="位元率控制" -MF.H264.CBR="固定位元率 (CBR)" -MF.H264.VBR="可變位元率 (VBR)" -MF.H264.CQP="固定品質 (CQP)" -MF.H264.MinQP="最低 QP 值" -MF.H264.MaxQP="最大 QP 值" -MF.H264.QPI="I 訊框QP" -MF.H264.QPP="P 訊框QP" -MF.H264.QPB="B 訊框QP" -MF.H264.Profile="配置" -MF.H264.Advanced="進階" -MF.H264.EncoderSWMicrosoft="微軟 H.264 軟體編碼器" -MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 編碼器 (Media Foundation)" -MF.H264.EncoderHWIntel="Intel Quick Sync H.264 編碼器 (Media Foundation)" -MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 編碼器 (Media Foundation)" diff --git a/plugins/win-mf/mf-aac-encoder.cpp b/plugins/win-mf/mf-aac-encoder.cpp deleted file mode 100644 index 31363347cde8ce..00000000000000 --- a/plugins/win-mf/mf-aac-encoder.cpp +++ /dev/null @@ -1,339 +0,0 @@ -#include - -#include "mf-aac-encoder.hpp" - -#include -#include -#include -#include - -#define MF_LOG_AAC(level, format, ...) \ - MF_LOG_ENCODER("AAC", ObsEncoder(), level, format, ##__VA_ARGS__) - -#define MF_LOG_COM(msg, hr) MF_LOG_AAC(LOG_ERROR, \ - msg " failed, %S (0x%08lx)", \ - _com_error(hr).ErrorMessage(), hr) - -#define HRC(r) \ - if(FAILED(hr = (r))) { \ - MF_LOG_COM(#r, hr); \ - goto fail; \ - } - -using namespace MFAAC; - -#define CONST_ARRAY(name, ...) static const UINT32 name[] = { __VA_ARGS__ }; - -CONST_ARRAY(VALID_BITRATES, 96, 128, 160, 192); -CONST_ARRAY(VALID_CHANNELS, 1, 2); -CONST_ARRAY(VALID_BITS_PER_SAMPLE, 16); -CONST_ARRAY(VALID_SAMPLERATES, 44100, 48000 ); - -#undef CONST_ARRAY - -template -static UINT32 FindBestMatch(const UINT32 (&validValues)[N], UINT32 value) -{ - for (UINT32 val : validValues) { - if (val >= value) - return val; - } - - // Only downgrade if no values are better - return validValues[N - 1]; -} - -template -static bool IsValid(const UINT32 (&validValues)[N], UINT32 value) -{ - for (UINT32 val : validValues) { - if (val == value) - return true; - } - - return false; -}; - -UINT32 MFAAC::FindBestBitrateMatch(UINT32 value) -{ - return FindBestMatch(VALID_BITRATES, value); -} - -UINT32 MFAAC::FindBestChannelsMatch(UINT32 value) -{ - return FindBestMatch(VALID_CHANNELS, value); -} - -UINT32 MFAAC::FindBestBitsPerSampleMatch(UINT32 value) -{ - return FindBestMatch(VALID_BITS_PER_SAMPLE, value); -} - -UINT32 MFAAC::FindBestSamplerateMatch(UINT32 value) -{ - return FindBestMatch(VALID_SAMPLERATES, value); -} - -bool MFAAC::BitrateValid(UINT32 value) -{ - return IsValid(VALID_BITRATES, value); -} - -bool MFAAC::ChannelsValid(UINT32 value) -{ - return IsValid(VALID_CHANNELS, value); -} - -bool MFAAC::BitsPerSampleValid(UINT32 value) -{ - return IsValid(VALID_BITS_PER_SAMPLE, value); -} - -bool MFAAC::SamplerateValid(UINT32 value) -{ - return IsValid(VALID_SAMPLERATES, value); -} - -HRESULT MFAAC::Encoder::CreateMediaTypes(ComPtr &i, - ComPtr &o) -{ - HRESULT hr; - HRC(MFCreateMediaType(&i)); - HRC(MFCreateMediaType(&o)); - - HRC(i->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio)); - HRC(i->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM)); - HRC(i->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, bitsPerSample)); - HRC(i->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate)); - HRC(i->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, channels)); - - HRC(o->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio)); - HRC(o->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_AAC)); - HRC(o->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, bitsPerSample)); - HRC(o->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate)); - HRC(o->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, channels)); - HRC(o->SetUINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, - (bitrate * 1000) / 8)); - - return S_OK; -fail: - return hr; -} - -void MFAAC::Encoder::InitializeExtraData() -{ - UINT16 *extraData16 = (UINT16 *)extraData; - UINT16 profile = 2; //Low Complexity -#define SWAPU16(x) (x>>8) | (x<<8) - // Profile - // XXXX X... .... .... - *extraData16 = profile << 11; - // Sample Index (3=48, 4=44.1) - // .... .XXX X... .... - *extraData16 |= (sampleRate == 48000 ? 3 : 4) << 7; - // Channels - // .... .... .XXX X... - *extraData16 |= channels << 3; - *extraData16 = SWAPU16(*extraData16); - - extraData[2] = 0; -#undef SWAPU16 -} - -bool MFAAC::Encoder::Initialize() -{ - HRESULT hr; - - ComPtr transform_; - ComPtr inputType, outputType; - - if (!BitrateValid(bitrate)) { - MF_LOG_AAC(LOG_WARNING, "invalid bitrate (kbps) '%d'", bitrate); - return false; - } - if (!ChannelsValid(channels)) { - MF_LOG_AAC(LOG_WARNING, "invalid channel count '%d", channels); - return false; - } - if (!SamplerateValid(sampleRate)) { - MF_LOG_AAC(LOG_WARNING, "invalid sample rate (hz) '%d", - sampleRate); - return false; - } - if (!BitsPerSampleValid(bitsPerSample)) { - MF_LOG_AAC(LOG_WARNING, "invalid bits-per-sample (bits) '%d'", - bitsPerSample); - return false; - } - - InitializeExtraData(); - - HRC(CoCreateInstance(CLSID_AACMFTEncoder, NULL, CLSCTX_INPROC_SERVER, - IID_PPV_ARGS(&transform_))); - HRC(CreateMediaTypes(inputType, outputType)); - - HRC(transform_->SetInputType(0, inputType.Get(), 0)); - HRC(transform_->SetOutputType(0, outputType.Get(), 0)); - - HRC(transform_->ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING, - NULL)); - HRC(transform_->ProcessMessage(MFT_MESSAGE_NOTIFY_START_OF_STREAM, - NULL)); - - MF_LOG_AAC(LOG_INFO, "encoder created\n" - "\tbitrate: %d\n" - "\tchannels: %d\n" - "\tsample rate: %d\n" - "\tbits-per-sample: %d\n", - bitrate, channels, sampleRate, bitsPerSample); - - transform = transform_; - return true; - -fail: - return false; -} - -HRESULT MFAAC::Encoder::CreateEmptySample(ComPtr &sample, - ComPtr &buffer, DWORD length) -{ - HRESULT hr; - - HRC(MFCreateSample(&sample)); - HRC(MFCreateMemoryBuffer(length, &buffer)); - HRC(sample->AddBuffer(buffer.Get())); - return S_OK; - -fail: - return hr; -} - -HRESULT MFAAC::Encoder::EnsureCapacity(ComPtr &sample, DWORD length) -{ - HRESULT hr; - ComPtr buffer; - DWORD currentLength; - - if (!sample) { - HRC(CreateEmptySample(sample, buffer, length)); - } else { - HRC(sample->GetBufferByIndex(0, &buffer)); - } - - HRC(buffer->GetMaxLength(¤tLength)); - if (currentLength < length) { - HRC(sample->RemoveAllBuffers()); - HRC(MFCreateMemoryBuffer(length, &buffer)); - HRC(sample->AddBuffer(buffer)); - } else { - buffer->SetCurrentLength(0); - } - - packetBuffer.reserve(length); - - return S_OK; - -fail: - return hr; -} - -bool MFAAC::Encoder::ProcessInput(UINT8 *data, UINT32 data_length, - UINT64 pts, Status *status) -{ - HRESULT hr; - ComPtr sample; - ComPtr buffer; - BYTE *bufferData; - INT64 samplePts; - UINT32 samples; - UINT64 sampleDur; - - HRC(CreateEmptySample(sample, buffer, data_length)); - - HRC(buffer->Lock(&bufferData, NULL, NULL)); - memcpy(bufferData, data, data_length); - HRC(buffer->Unlock()); - HRC(buffer->SetCurrentLength(data_length)); - - samples = data_length / channels / (bitsPerSample / 8); - sampleDur = (UINT64)(((float) sampleRate / channels / samples) * 10000); - samplePts = pts / 100; - - HRC(sample->SetSampleTime(samplePts)); - HRC(sample->SetSampleDuration(sampleDur)); - - hr = transform->ProcessInput(0, sample, 0); - if (hr == MF_E_NOTACCEPTING) { - *status = NOT_ACCEPTING; - return true; - } else if (FAILED(hr)) { - MF_LOG_COM("process input", hr); - return false; - } - - *status = SUCCESS; - return true; - -fail: - *status = FAILURE; - return false; -} - -bool MFAAC::Encoder::ProcessOutput(UINT8 **data, UINT32 *dataLength, - UINT64 *pts, Status *status) -{ - HRESULT hr; - - DWORD outputFlags, outputStatus; - MFT_OUTPUT_STREAM_INFO outputInfo = {0}; - MFT_OUTPUT_DATA_BUFFER output = {0}; - ComPtr outputBuffer; - BYTE *bufferData; - DWORD bufferLength; - INT64 samplePts; - - HRC(transform->GetOutputStatus(&outputFlags)); - if (outputFlags != MFT_OUTPUT_STATUS_SAMPLE_READY) { - *status = NEED_MORE_INPUT; - return true; - } - - HRC(transform->GetOutputStreamInfo(0, &outputInfo)); - EnsureCapacity(outputSample, outputInfo.cbSize); - - output.pSample = outputSample.Get(); - - hr = transform->ProcessOutput(0, 1, &output, &outputStatus); - if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) { - *status = NEED_MORE_INPUT; - return true; - } else if (FAILED(hr)) { - MF_LOG_COM("process output", hr); - return false; - } - - HRC(outputSample->GetBufferByIndex(0, &outputBuffer)); - - HRC(outputBuffer->Lock(&bufferData, NULL, &bufferLength)); - packetBuffer.assign(bufferData, bufferData + bufferLength); - HRC(outputBuffer->Unlock()); - - HRC(outputSample->GetSampleTime(&samplePts)); - - *pts = samplePts * 100; - *data = &packetBuffer[0]; - *dataLength = bufferLength; - *status = SUCCESS; - return true; - -fail: - *status = FAILURE; - return false; -} - -bool MFAAC::Encoder::ExtraData(UINT8 **extraData_, UINT32 *extraDataLength) -{ - *extraData_ = extraData; - *extraDataLength = sizeof(extraData); - return true; -} diff --git a/plugins/win-mf/mf-aac-encoder.hpp b/plugins/win-mf/mf-aac-encoder.hpp deleted file mode 100644 index 5ca83371ebd8ea..00000000000000 --- a/plugins/win-mf/mf-aac-encoder.hpp +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once - -#define WIN32_MEAN_AND_LEAN -#include -#undef WIN32_MEAN_AND_LEAN - -#include -#include - -#include -#include - -#include - -#define MF_LOG(level, format, ...) \ - blog(level, "[Media Foundation encoder]: " format, ##__VA_ARGS__) -#define MF_LOG_ENCODER(format_name, encoder, level, format, ...) \ - blog(level, "[Media Foundation %s: '%s']: " format, \ - format_name, obs_encoder_get_name(encoder), \ - ##__VA_ARGS__) - -namespace MFAAC { - -enum Status { - FAILURE, - SUCCESS, - NOT_ACCEPTING, - NEED_MORE_INPUT -}; - -class Encoder { -public: - Encoder(const obs_encoder_t *encoder, UINT32 bitrate, UINT32 channels, - UINT32 sampleRate, UINT32 bitsPerSample) - : encoder(encoder), - bitrate(bitrate), - channels(channels), - sampleRate(sampleRate), - bitsPerSample(bitsPerSample) - {} - - Encoder& operator=(Encoder const&) = delete; - - bool Initialize(); - bool ProcessInput(UINT8 *data, UINT32 dataLength, - UINT64 pts, MFAAC::Status *status); - bool ProcessOutput(UINT8 **data, UINT32 *dataLength, - UINT64 *pts, MFAAC::Status *status); - bool ExtraData(UINT8 **extraData, UINT32 *extraDataLength); - - const obs_encoder_t *ObsEncoder() { return encoder; } - UINT32 Bitrate() { return bitrate; } - UINT32 Channels() { return channels; } - UINT32 SampleRate() { return sampleRate; } - UINT32 BitsPerSample() { return bitsPerSample; } - - static const UINT32 FrameSize = 1024; - -private: - void InitializeExtraData(); - HRESULT CreateMediaTypes(ComPtr &inputType, - ComPtr &outputType); - HRESULT EnsureCapacity(ComPtr &sample, DWORD length); - HRESULT CreateEmptySample(ComPtr &sample, - ComPtr &buffer, DWORD length); - -private: - const obs_encoder_t *encoder; - const UINT32 bitrate; - const UINT32 channels; - const UINT32 sampleRate; - const UINT32 bitsPerSample; - - ComPtr transform; - ComPtr outputSample; - std::vector packetBuffer; - UINT8 extraData[3]; -}; - -static const UINT32 FrameSize = 1024; - -UINT32 FindBestBitrateMatch(UINT32 value); -UINT32 FindBestChannelsMatch(UINT32 value); -UINT32 FindBestBitsPerSampleMatch(UINT32 value); -UINT32 FindBestSamplerateMatch(UINT32 value); -bool BitrateValid(UINT32 value); -bool ChannelsValid(UINT32 value); -bool BitsPerSampleValid(UINT32 value); -bool SamplerateValid(UINT32 value); - -} diff --git a/plugins/win-mf/mf-aac.cpp b/plugins/win-mf/mf-aac.cpp deleted file mode 100644 index e8de02f1e6405a..00000000000000 --- a/plugins/win-mf/mf-aac.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include - -#include - -#include "mf-aac-encoder.hpp" - -#include - -using namespace MFAAC; - -static const char *MFAAC_GetName(void*) -{ - return obs_module_text("MFAACEnc"); -} - -static obs_properties_t *MFAAC_GetProperties(void *) -{ - obs_properties_t *props = obs_properties_create(); - - obs_properties_add_int(props, "bitrate", - obs_module_text("Bitrate"), 96, 192, 32); - - return props; -} - -static void MFAAC_GetDefaults(obs_data_t *settings) -{ - obs_data_set_default_int(settings, "bitrate", 128); -} - -static void *MFAAC_Create(obs_data_t *settings, obs_encoder_t *encoder) -{ - UINT32 bitrate = (UINT32)obs_data_get_int(settings, "bitrate"); - if (!bitrate) { - MF_LOG_ENCODER("AAC", encoder, LOG_ERROR, - "Invalid bitrate specified"); - return NULL; - } - - audio_t *audio = obs_encoder_audio(encoder); - UINT32 channels = (UINT32)audio_output_get_channels(audio); - UINT32 sampleRate = audio_output_get_sample_rate(audio); - UINT32 bitsPerSample = 16; - - UINT32 recommendedSampleRate = FindBestSamplerateMatch(sampleRate); - if (recommendedSampleRate != sampleRate) { - MF_LOG_ENCODER("AAC", encoder, LOG_WARNING, - "unsupported sample rate; " - "resampling to best guess '%d' instead of '%d'", - recommendedSampleRate, sampleRate); - sampleRate = recommendedSampleRate; - } - - UINT32 recommendedBitRate = FindBestBitrateMatch(bitrate); - if (recommendedBitRate != bitrate) { - MF_LOG_ENCODER("AAC", encoder, LOG_WARNING, - "unsupported bitrate; " - "resampling to best guess '%d' instead of '%d'", - recommendedBitRate, bitrate); - bitrate = recommendedBitRate; - } - - std::unique_ptr enc(new Encoder(encoder, - bitrate, channels, sampleRate, bitsPerSample)); - - if (!enc->Initialize()) - return nullptr; - - return enc.release(); -} - -static void MFAAC_Destroy(void *data) -{ - Encoder *enc = static_cast(data); - delete enc; -} - -static bool MFAAC_Encode(void *data, struct encoder_frame *frame, - struct encoder_packet *packet, bool *received_packet) -{ - Encoder *enc = static_cast(data); - Status status; - - if (!enc->ProcessInput(frame->data[0], frame->linesize[0], frame->pts, - &status)) - return false; - - // This shouldn't happen since we drain right after - // we process input - if (status == NOT_ACCEPTING) - return false; - - UINT8 *outputData; - UINT32 outputDataLength; - UINT64 outputPts; - - if (!enc->ProcessOutput(&outputData, &outputDataLength, &outputPts, - &status)) - return false; - - // Needs more input, not a failure case - if (status == NEED_MORE_INPUT) - return true; - - packet->pts = outputPts; - packet->dts = outputPts; - packet->data = outputData; - packet->size = outputDataLength; - packet->type = OBS_ENCODER_AUDIO; - packet->timebase_num = 1; - packet->timebase_den = enc->SampleRate(); - - return *received_packet = true; -} - -static bool MFAAC_GetExtraData(void *data, uint8_t **extra_data, size_t *size) -{ - Encoder *enc = static_cast(data); - - UINT32 length; - if (enc->ExtraData(extra_data, &length)) { - *size = length; - return true; - } - return false; -} - -static void MFAAC_GetAudioInfo(void *, struct audio_convert_info *info) -{ - info->format = AUDIO_FORMAT_16BIT; - info->samples_per_sec = FindBestSamplerateMatch(info->samples_per_sec); -} - -static size_t MFAAC_GetFrameSize(void *) -{ - return Encoder::FrameSize; -} - -extern "C" void RegisterMFAACEncoder() -{ - if (!IsWindows8OrGreater()) { - MF_LOG(LOG_WARNING, "plugin is disabled for performance " - "reasons on Windows versions prior to 8"); - return; - } - - obs_encoder_info info = {}; - info.id = "mf_aac"; - info.type = OBS_ENCODER_AUDIO; - info.codec = "AAC"; - info.get_name = MFAAC_GetName; - info.create = MFAAC_Create; - info.destroy = MFAAC_Destroy; - info.encode = MFAAC_Encode; - info.get_frame_size = MFAAC_GetFrameSize; - info.get_defaults = MFAAC_GetDefaults; - info.get_properties = MFAAC_GetProperties; - info.get_extra_data = MFAAC_GetExtraData; - info.get_audio_info = MFAAC_GetAudioInfo; - - MF_LOG(LOG_DEBUG, "Adding Media Foundation AAC Encoder"); - - obs_register_encoder(&info); - -} diff --git a/plugins/win-mf/mf-common.cpp b/plugins/win-mf/mf-common.cpp deleted file mode 100644 index 389c92693dec3b..00000000000000 --- a/plugins/win-mf/mf-common.cpp +++ /dev/null @@ -1,384 +0,0 @@ -#include "mf-common.hpp" - -#include - -#include -#include -#include - -#include - -using namespace std; - -static void DBGMSG(PCWSTR format, ...) -{ - va_list args; - va_start(args, format); - - WCHAR msg[MAX_PATH]; - - if (SUCCEEDED(StringCbVPrintf(msg, sizeof(msg), format, args))) - { - char *cmsg; - os_wcs_to_utf8_ptr(msg, 0, &cmsg); - MF_LOG(LOG_INFO, "%s", cmsg); - bfree(cmsg); - } - va_end(args); -} - -#ifndef IF_EQUAL_RETURN -#define IF_EQUAL_RETURN(param, val) if(val == param) return L#val -#endif - -static LPCWSTR GetGUIDNameConst(const GUID& guid) -{ - IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_SUBTYPE); - IF_EQUAL_RETURN(guid, MF_MT_ALL_SAMPLES_INDEPENDENT); - IF_EQUAL_RETURN(guid, MF_MT_FIXED_SIZE_SAMPLES); - IF_EQUAL_RETURN(guid, MF_MT_COMPRESSED); - IF_EQUAL_RETURN(guid, MF_MT_SAMPLE_SIZE); - IF_EQUAL_RETURN(guid, MF_MT_WRAPPED_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_NUM_CHANNELS); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FLOAT_SAMPLES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_AVG_BYTES_PER_SECOND); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BLOCK_ALIGNMENT); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BITS_PER_SAMPLE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_VALID_BITS_PER_SAMPLE); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_BLOCK); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_CHANNEL_MASK); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FOLDDOWN_MATRIX); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKREF); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKTARGET); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGREF); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGTARGET); - IF_EQUAL_RETURN(guid, MF_MT_AUDIO_PREFER_WAVEFORMATEX); - IF_EQUAL_RETURN(guid, MF_MT_AAC_PAYLOAD_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_SIZE); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MAX); - IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MIN); - IF_EQUAL_RETURN(guid, MF_MT_PIXEL_ASPECT_RATIO); - IF_EQUAL_RETURN(guid, MF_MT_DRM_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_PAD_CONTROL_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_SOURCE_CONTENT_HINT); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_CHROMA_SITING); - IF_EQUAL_RETURN(guid, MF_MT_INTERLACE_MODE); - IF_EQUAL_RETURN(guid, MF_MT_TRANSFER_FUNCTION); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_PRIMARIES); - IF_EQUAL_RETURN(guid, MF_MT_CUSTOM_VIDEO_PRIMARIES); - IF_EQUAL_RETURN(guid, MF_MT_YUV_MATRIX); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_LIGHTING); - IF_EQUAL_RETURN(guid, MF_MT_VIDEO_NOMINAL_RANGE); - IF_EQUAL_RETURN(guid, MF_MT_GEOMETRIC_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_MINIMUM_DISPLAY_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_APERTURE); - IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_ENABLED); - IF_EQUAL_RETURN(guid, MF_MT_AVG_BITRATE); - IF_EQUAL_RETURN(guid, MF_MT_AVG_BIT_ERROR_RATE); - IF_EQUAL_RETURN(guid, MF_MT_MAX_KEYFRAME_SPACING); - IF_EQUAL_RETURN(guid, MF_MT_DEFAULT_STRIDE); - IF_EQUAL_RETURN(guid, MF_MT_PALETTE); - IF_EQUAL_RETURN(guid, MF_MT_USER_DATA); - IF_EQUAL_RETURN(guid, MF_MT_AM_FORMAT_TYPE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG_START_TIME_CODE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_PROFILE); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_LEVEL); - IF_EQUAL_RETURN(guid, MF_MT_MPEG2_FLAGS); - IF_EQUAL_RETURN(guid, MF_MT_MPEG_SEQUENCE_HEADER); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_0); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_0); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_1); - IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_1); - IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_SRC_PACK); - IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_CTRL_PACK); - IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_HEADER); - IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_FORMAT); - IF_EQUAL_RETURN(guid, MF_MT_IMAGE_LOSS_TOLERANT); - IF_EQUAL_RETURN(guid, MF_MT_MPEG4_SAMPLE_DESCRIPTION); - IF_EQUAL_RETURN(guid, MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY); - IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_4CC); - IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_WAVE_FORMAT_TAG); - - // Media types - - IF_EQUAL_RETURN(guid, MFMediaType_Audio); - IF_EQUAL_RETURN(guid, MFMediaType_Video); - IF_EQUAL_RETURN(guid, MFMediaType_Protected); - IF_EQUAL_RETURN(guid, MFMediaType_SAMI); - IF_EQUAL_RETURN(guid, MFMediaType_Script); - IF_EQUAL_RETURN(guid, MFMediaType_Image); - IF_EQUAL_RETURN(guid, MFMediaType_HTML); - IF_EQUAL_RETURN(guid, MFMediaType_Binary); - IF_EQUAL_RETURN(guid, MFMediaType_FileTransfer); - - IF_EQUAL_RETURN(guid, MFVideoFormat_AI44); // FCC('AI44') - IF_EQUAL_RETURN(guid, MFVideoFormat_ARGB32); // D3DFMT_A8R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_AYUV); // FCC('AYUV') - IF_EQUAL_RETURN(guid, MFVideoFormat_DV25); // FCC('dv25') - IF_EQUAL_RETURN(guid, MFVideoFormat_DV50); // FCC('dv50') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVH1); // FCC('dvh1') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVSD); // FCC('dvsd') - IF_EQUAL_RETURN(guid, MFVideoFormat_DVSL); // FCC('dvsl') - IF_EQUAL_RETURN(guid, MFVideoFormat_H264); // FCC('H264') - IF_EQUAL_RETURN(guid, MFVideoFormat_I420); // FCC('I420') - IF_EQUAL_RETURN(guid, MFVideoFormat_IYUV); // FCC('IYUV') - IF_EQUAL_RETURN(guid, MFVideoFormat_M4S2); // FCC('M4S2') - IF_EQUAL_RETURN(guid, MFVideoFormat_MJPG); - IF_EQUAL_RETURN(guid, MFVideoFormat_MP43); // FCC('MP43') - IF_EQUAL_RETURN(guid, MFVideoFormat_MP4S); // FCC('MP4S') - IF_EQUAL_RETURN(guid, MFVideoFormat_MP4V); // FCC('MP4V') - IF_EQUAL_RETURN(guid, MFVideoFormat_MPG1); // FCC('MPG1') - IF_EQUAL_RETURN(guid, MFVideoFormat_MSS1); // FCC('MSS1') - IF_EQUAL_RETURN(guid, MFVideoFormat_MSS2); // FCC('MSS2') - IF_EQUAL_RETURN(guid, MFVideoFormat_NV11); // FCC('NV11') - IF_EQUAL_RETURN(guid, MFVideoFormat_NV12); // FCC('NV12') - IF_EQUAL_RETURN(guid, MFVideoFormat_P010); // FCC('P010') - IF_EQUAL_RETURN(guid, MFVideoFormat_P016); // FCC('P016') - IF_EQUAL_RETURN(guid, MFVideoFormat_P210); // FCC('P210') - IF_EQUAL_RETURN(guid, MFVideoFormat_P216); // FCC('P216') - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB24); // D3DFMT_R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB32); // D3DFMT_X8R8G8B8 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB555); // D3DFMT_X1R5G5B5 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB565); // D3DFMT_R5G6B5 - IF_EQUAL_RETURN(guid, MFVideoFormat_RGB8); - IF_EQUAL_RETURN(guid, MFVideoFormat_UYVY); // FCC('UYVY') - IF_EQUAL_RETURN(guid, MFVideoFormat_v210); // FCC('v210') - IF_EQUAL_RETURN(guid, MFVideoFormat_v410); // FCC('v410') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV1); // FCC('WMV1') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV2); // FCC('WMV2') - IF_EQUAL_RETURN(guid, MFVideoFormat_WMV3); // FCC('WMV3') - IF_EQUAL_RETURN(guid, MFVideoFormat_WVC1); // FCC('WVC1') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y210); // FCC('Y210') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y216); // FCC('Y216') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y410); // FCC('Y410') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y416); // FCC('Y416') - IF_EQUAL_RETURN(guid, MFVideoFormat_Y41P); - IF_EQUAL_RETURN(guid, MFVideoFormat_Y41T); - IF_EQUAL_RETURN(guid, MFVideoFormat_YUY2); // FCC('YUY2') - IF_EQUAL_RETURN(guid, MFVideoFormat_YV12); // FCC('YV12') - IF_EQUAL_RETURN(guid, MFVideoFormat_YVYU); - - IF_EQUAL_RETURN(guid, MFAudioFormat_PCM); // WAVE_FORMAT_PCM - IF_EQUAL_RETURN(guid, MFAudioFormat_Float); // WAVE_FORMAT_IEEE_FLOAT - IF_EQUAL_RETURN(guid, MFAudioFormat_DTS); // WAVE_FORMAT_DTS - IF_EQUAL_RETURN(guid, MFAudioFormat_Dolby_AC3_SPDIF); // WAVE_FORMAT_DOLBY_AC3_SPDIF - IF_EQUAL_RETURN(guid, MFAudioFormat_DRM); // WAVE_FORMAT_DRM - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV8); // WAVE_FORMAT_WMAUDIO2 - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV9); // WAVE_FORMAT_WMAUDIO3 - IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudio_Lossless); // WAVE_FORMAT_WMAUDIO_LOSSLESS - IF_EQUAL_RETURN(guid, MFAudioFormat_WMASPDIF); // WAVE_FORMAT_WMASPDIF - IF_EQUAL_RETURN(guid, MFAudioFormat_MSP1); // WAVE_FORMAT_WMAVOICE9 - IF_EQUAL_RETURN(guid, MFAudioFormat_MP3); // WAVE_FORMAT_MPEGLAYER3 - IF_EQUAL_RETURN(guid, MFAudioFormat_MPEG); // WAVE_FORMAT_MPEG - IF_EQUAL_RETURN(guid, MFAudioFormat_AAC); // WAVE_FORMAT_MPEG_HEAAC - IF_EQUAL_RETURN(guid, MFAudioFormat_ADTS); // WAVE_FORMAT_MPEG_ADTS_AAC - - return NULL; -} - -static float OffsetToFloat(const MFOffset& offset) -{ - return offset.value + (static_cast(offset.fract) / 65536.0f); -} - -static HRESULT LogVideoArea(wstring &str, const PROPVARIANT& var) -{ - if (var.caub.cElems < sizeof(MFVideoArea)) { - return MF_E_BUFFERTOOSMALL; - } - - MFVideoArea *pArea = (MFVideoArea*)var.caub.pElems; - - str += L"("; - str += to_wstring(OffsetToFloat(pArea->OffsetX)); - str += L","; - str += to_wstring(OffsetToFloat(pArea->OffsetY)); - str += L") ("; - str += to_wstring(pArea->Area.cx); - str += L","; - str += to_wstring(pArea->Area.cy); - str += L")"; - return S_OK; -} - - -static HRESULT GetGUIDName(const GUID& guid, WCHAR **ppwsz) -{ - HRESULT hr = S_OK; - WCHAR *pName = NULL; - - LPCWSTR pcwsz = GetGUIDNameConst(guid); - if (pcwsz) { - size_t cchLength = 0; - - hr = StringCchLength(pcwsz, STRSAFE_MAX_CCH, &cchLength); - if (FAILED(hr)) { - goto done; - } - - pName = (WCHAR*)CoTaskMemAlloc((cchLength + 1) * sizeof(WCHAR)); - - if (pName == NULL) { - hr = E_OUTOFMEMORY; - goto done; - } - - hr = StringCchCopy(pName, cchLength + 1, pcwsz); - if (FAILED(hr)) { - goto done; - } - } else { - hr = StringFromCLSID(guid, &pName); - } - -done: - if (FAILED(hr)) { - *ppwsz = NULL; - CoTaskMemFree(pName); - } else { - *ppwsz = pName; - } - return hr; -} - -static void LogUINT32AsUINT64(wstring &str, const PROPVARIANT& var) -{ - UINT32 uHigh = 0, uLow = 0; - Unpack2UINT32AsUINT64(var.uhVal.QuadPart, &uHigh, &uLow); - str += to_wstring(uHigh); - str += L" x "; - str += to_wstring(uLow); -} - - -// Handle certain known special cases. -static HRESULT SpecialCaseAttributeValue(wstring &str, GUID guid, - const PROPVARIANT& var) -{ - if ((guid == MF_MT_FRAME_RATE) || (guid == MF_MT_FRAME_RATE_RANGE_MAX) || - (guid == MF_MT_FRAME_RATE_RANGE_MIN) || (guid == MF_MT_FRAME_SIZE) || - (guid == MF_MT_PIXEL_ASPECT_RATIO)) { - - // Attributes that contain two packed 32-bit values. - LogUINT32AsUINT64(str, var); - - } else if ((guid == MF_MT_GEOMETRIC_APERTURE) || - (guid == MF_MT_MINIMUM_DISPLAY_APERTURE) || - (guid == MF_MT_PAN_SCAN_APERTURE)) { - - // Attributes that an MFVideoArea structure. - return LogVideoArea(str, var); - - } else { - return S_FALSE; - } - return S_OK; -} - -static HRESULT LogAttributeValueByIndex(IMFAttributes *pAttr, DWORD index) -{ - wstring str; - - WCHAR *pGuidName = NULL; - WCHAR *pGuidValName = NULL; - - GUID guid = { 0 }; - - PROPVARIANT var; - PropVariantInit(&var); - - HRESULT hr = pAttr->GetItemByIndex(index, &guid, &var); - if (FAILED(hr)) { - goto done; - } - - hr = GetGUIDName(guid, &pGuidName); - if (FAILED(hr)) { - goto done; - } - - str += L" "; - str += pGuidName; - str += L": "; - - hr = SpecialCaseAttributeValue(str, guid, var); - if (FAILED(hr)) { - goto done; - } - if (hr == S_FALSE) { - switch (var.vt) { - case VT_UI4: - str += to_wstring(var.ulVal); - break; - - case VT_UI8: - str += to_wstring(var.uhVal.QuadPart); - break; - - case VT_R8: - str += to_wstring(var.dblVal); - break; - - case VT_CLSID: - hr = GetGUIDName(*var.puuid, &pGuidValName); - if (SUCCEEDED(hr)) - { - str += pGuidValName; - } - break; - - case VT_LPWSTR: - str += var.pwszVal; - break; - - case VT_VECTOR | VT_UI1: - str += L"<>"; - break; - - case VT_UNKNOWN: - str += L"IUnknown"; - break; - - default: - str += L"Unexpected attribute type (vt = "; - str += to_wstring(var.vt); - str += L")"; - break; - } - } - - DBGMSG(L"%s", str.c_str()); - -done: - CoTaskMemFree(pGuidName); - CoTaskMemFree(pGuidValName); - PropVariantClear(&var); - return hr; -} - -bool MF::LogMediaType(IMFMediaType *pType) -{ - UINT32 count = 0; - - HRESULT hr = pType->GetCount(&count); - if (FAILED(hr)) { - return false; - } - - if (count == 0) { - DBGMSG(L"Empty media type."); - } - - for (UINT32 i = 0; i < count; i++) { - hr = LogAttributeValueByIndex(pType, i); - if (FAILED(hr)) { - return false; - } - } - return true; -} diff --git a/plugins/win-mf/mf-common.hpp b/plugins/win-mf/mf-common.hpp deleted file mode 100644 index b753b934f31a86..00000000000000 --- a/plugins/win-mf/mf-common.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#include - -#include -#include -#include -#include - - -#ifndef MF_LOG -#define MF_LOG(level, format, ...) \ - blog(level, "[Media Foundation encoder]: " format, ##__VA_ARGS__) -#endif -#ifndef MF_LOG_ENCODER -#define MF_LOG_ENCODER(format_name, encoder, level, format, ...) \ - blog(level, "[Media Foundation %s: '%s']: " format, \ - format_name, obs_encoder_get_name(encoder), \ - ##__VA_ARGS__) -#endif - -#ifndef MF_LOG_COM -#define MF_LOG_COM(level, msg, hr) MF_LOG(level, \ - msg " failed, %S (0x%08lx)", \ - _com_error(hr).ErrorMessage(), hr) -#endif - -#ifndef HRC -#define HRC(r) \ - if(FAILED(hr = (r))) { \ - MF_LOG_COM(LOG_ERROR, #r, hr); \ - goto fail; \ - } -#endif - -#ifndef HR_CHECK -#define HR_CHECK(level, r) \ - if(FAILED(hr = (r))) { \ - MF_LOG_COM(level, #r, hr); \ - goto fail; \ - } -#endif - -#ifndef HRL -#define HRL(r) \ - if(FAILED(hr = (r))) \ - MF_LOG_COM(LOG_WARNING, #r, hr); -#endif - -namespace MF { - -enum Status { - FAILURE, - SUCCESS, - NOT_ACCEPTING, - NEED_MORE_INPUT -}; - -bool LogMediaType(IMFMediaType *mediaType); - -} diff --git a/plugins/win-mf/mf-config.hpp.in b/plugins/win-mf/mf-config.hpp.in deleted file mode 100644 index 3992708e3250ec..00000000000000 --- a/plugins/win-mf/mf-config.hpp.in +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef ON -#define ON 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef OFF -#define OFF 0 -#endif - -#define ENABLE_WINMF @ENABLE_WINMF@ diff --git a/plugins/win-mf/mf-encoder-descriptor.cpp b/plugins/win-mf/mf-encoder-descriptor.cpp deleted file mode 100644 index 2381bb67adca46..00000000000000 --- a/plugins/win-mf/mf-encoder-descriptor.cpp +++ /dev/null @@ -1,194 +0,0 @@ -#include -#include -#include -#include - -#include "mf-encoder-descriptor.hpp" - -using namespace MF; - -template class ComHeapPtr { - -protected: - T *ptr; - - inline void Kill() - { - if (ptr) - CoTaskMemFree(ptr); - } - - inline void Replace(T *p) - { - if (ptr != p) { - if (ptr) ptr->Kill(); - ptr = p; - } - } - -public: - inline ComHeapPtr() : ptr(nullptr) {} - inline ComHeapPtr(T *p) : ptr(p) {} - inline ComHeapPtr(const ComHeapPtr &c) = delete; - inline ComHeapPtr(ComHeapPtr &&c) = delete; - inline ~ComHeapPtr() { Kill(); } - - inline void Clear() - { - if (ptr) { - Kill(); - ptr = nullptr; - } - } - - inline ComPtr &operator=(T *p) - { - Replace(p); - return *this; - } - - inline T *Detach() - { - T *out = ptr; - ptr = nullptr; - return out; - } - - inline T **Assign() { Clear(); return &ptr; } - inline void Set(T *p) { Kill(); ptr = p; } - - inline T *Get() const { return ptr; } - - inline T **operator&() { return Assign(); } - - inline operator T*() const { return ptr; } - inline T *operator->() const { return ptr; } - - inline bool operator==(T *p) const { return ptr == p; } - inline bool operator!=(T *p) const { return ptr != p; } - - inline bool operator!() const { return !ptr; } -}; - -struct EncoderEntry { - const char *guid; - const char *name; - const char *id; - EncoderType type; - -} guidNameMap[] = { - { - "{6CA50344-051A-4DED-9779-A43305165E35}", - "MF.H264.EncoderSWMicrosoft", - "mf_h264_software", - EncoderType::H264_SOFTWARE - }, - { - "{ADC9BC80-0F41-46C6-AB75-D693D793597D}", - "MF.H264.EncoderHWAMD", - "mf_h264_vce", - EncoderType::H264_VCE, - }, - { - "{4BE8D3C0-0515-4A37-AD55-E4BAE19AF471}", - "MF.H264.EncoderHWIntel", - "mf_h264_qsv", - EncoderType::H264_QSV - }, - { - "{60F44560-5A20-4857-BFEF-D29773CB8040}", - "MF.H264.EncoderHWNVIDIA", - "mf_h264_nvenc", - EncoderType::H264_NVENC - } -}; - -static std::string MBSToString(wchar_t *mbs) -{ - char *cstr; - os_wcs_to_utf8_ptr(mbs, 0, &cstr); - std::string str = cstr; - bfree(cstr); - return str; -} - -static std::unique_ptr CreateDescriptor( - ComPtr activate) -{ - UINT32 flags; - if (FAILED(activate->GetUINT32(MF_TRANSFORM_FLAGS_Attribute, &flags))) - return nullptr; - - bool isAsync = !(flags & MFT_ENUM_FLAG_SYNCMFT); - isAsync |= !!(flags & MFT_ENUM_FLAG_ASYNCMFT); - bool isHardware = !!(flags & MFT_ENUM_FLAG_HARDWARE); - - GUID guid = {0}; - - if (FAILED(activate->GetGUID(MFT_TRANSFORM_CLSID_Attribute, &guid))) - return nullptr; - - ComHeapPtr guidW; - StringFromIID(guid, &guidW); - std::string guidString = MBSToString(guidW); - - auto pred = [guidString](const EncoderEntry &name) { - return guidString == name.guid; - }; - - EncoderEntry *entry = std::find_if(std::begin(guidNameMap), - std::end(guidNameMap), pred); - - std::unique_ptr descriptor(new EncoderDescriptor( - activate, entry->name, entry->id, guid, guidString, - isAsync, isHardware, entry->type)); - - return descriptor; -} - -std::vector> EncoderDescriptor::Enumerate() -{ - HRESULT hr; - UINT32 count = 0; - std::vector> descriptors; - - ComHeapPtr ppActivate; - - MFT_REGISTER_TYPE_INFO info = { MFMediaType_Video, MFVideoFormat_H264 }; - - UINT32 unFlags = 0; - - unFlags |= MFT_ENUM_FLAG_LOCALMFT; - unFlags |= MFT_ENUM_FLAG_TRANSCODE_ONLY; - - unFlags |= MFT_ENUM_FLAG_SYNCMFT; - unFlags |= MFT_ENUM_FLAG_ASYNCMFT; - unFlags |= MFT_ENUM_FLAG_HARDWARE; - - unFlags |= MFT_ENUM_FLAG_SORTANDFILTER; - - hr = MFTEnumEx(MFT_CATEGORY_VIDEO_ENCODER, - unFlags, - NULL, - &info, - &ppActivate, - &count); - - if (SUCCEEDED(hr) && count == 0) { - return descriptors; - } - - if (SUCCEEDED(hr)) { - for (decltype(count) i = 0; i < count; i++) { - auto p = std::move(CreateDescriptor(ppActivate[i])); - if (p) - descriptors.emplace_back(std::move(p)); - } - } - - for (UINT32 i = 0; i < count; i++) { - ppActivate[i]->Release(); - } - - return descriptors; -} diff --git a/plugins/win-mf/mf-encoder-descriptor.hpp b/plugins/win-mf/mf-encoder-descriptor.hpp deleted file mode 100644 index 5b3db86a66587d..00000000000000 --- a/plugins/win-mf/mf-encoder-descriptor.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once - -#define WIN32_MEAN_AND_LEAN -#include -#undef WIN32_MEAN_AND_LEAN - -#include -#include - -#include -#include - -#include - -namespace MF { - -enum class EncoderType { - H264_SOFTWARE, - H264_QSV, - H264_NVENC, - H264_VCE, -}; - -static const char *typeNames[] = { - "Software", - "Quicksync", - "NVENC", - "AMD VCE", -}; - -class EncoderDescriptor { -public: - static std::vector> EncoderDescriptor::Enumerate(); - -public: - EncoderDescriptor(ComPtr activate_, - const char *name_, - const char *id_, - GUID &guid_, - const std::string &guidString_, - bool isAsync_, - bool isHardware_, - EncoderType type_) - : activate (activate_), - name (name_), - id (id_), - guid (guid_), - guidString (guidString_), - isAsync (isAsync_), - isHardware (isHardware_), - type (type_) - {} - - EncoderDescriptor(const EncoderDescriptor &) = delete; - -public: - const char *Name() const { return name; } - const char *Id() const { return id; } - ComPtr &Activator() { return activate; } - GUID &Guid() { return guid; } - std::string GuidString() const { return guidString; } - bool Async() const { return isAsync; } - bool Hardware() const { return isHardware; } - EncoderType Type() const { return type; } - -private: - ComPtr activate; - const char *name; - const char *id; - GUID guid; - std::string guidString; - bool isAsync; - bool isHardware; - EncoderType type; -}; -}; diff --git a/plugins/win-mf/mf-h264-encoder.cpp b/plugins/win-mf/mf-h264-encoder.cpp deleted file mode 100644 index aef130121934e1..00000000000000 --- a/plugins/win-mf/mf-h264-encoder.cpp +++ /dev/null @@ -1,774 +0,0 @@ -#include -#include - -#include "mf-common.hpp" -#include "mf-h264-encoder.hpp" - -#include -#include - -using namespace MF; - -static eAVEncH264VProfile MapProfile(H264Profile profile) -{ - switch (profile) { - case H264ProfileBaseline: return eAVEncH264VProfile_Base; - case H264ProfileMain: return eAVEncH264VProfile_Main; - case H264ProfileHigh: return eAVEncH264VProfile_High; - default: return eAVEncH264VProfile_Base; - } -} - -static eAVEncCommonRateControlMode MapRateControl(H264RateControl rc) -{ - switch (rc) { - case H264RateControlCBR: - return eAVEncCommonRateControlMode_CBR; - case H264RateControlConstrainedVBR: - return eAVEncCommonRateControlMode_PeakConstrainedVBR; - case H264RateControlVBR: - return eAVEncCommonRateControlMode_UnconstrainedVBR; - case H264RateControlCQP: - return eAVEncCommonRateControlMode_Quality; - default: - return eAVEncCommonRateControlMode_CBR; - } -} - -static UINT32 MapQpToQuality(H264QP &qp) -{ - return 100 - (UINT32)floor(100.0 / 51.0 * qp.defaultQp + 0.5f); -} - -static bool ProcessNV12(std::function func, - UINT32 height) -{ - INT32 plane = 0; - - func(height, plane++); - func(height / 2, plane); - - return true; -} - -H264Encoder::H264Encoder(const obs_encoder_t *encoder, - std::shared_ptr descriptor, - UINT32 width, - UINT32 height, - UINT32 framerateNum, - UINT32 framerateDen, - H264Profile profile, - UINT32 bitrate) - : encoder(encoder), - descriptor(descriptor), - width(width), - height(height), - framerateNum(framerateNum), - framerateDen(framerateDen), - initialBitrate(bitrate), - profile(profile), - createOutputSample(false) -{} - -H264Encoder::~H264Encoder() -{ - HRESULT hr; - - if (!descriptor->Async() || !eventGenerator || !pendingRequests) - return; - - // Make sure all events have finished before releasing, and drain - // all output requests until it makes an input request. - // If you do not do this, you risk it releasing while there's still - // encoder activity, which can cause a crash with certain interfaces. - while (inputRequests == 0) { - hr = ProcessOutput(); - if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT && FAILED(hr)) { - MF_LOG_COM(LOG_ERROR, "H264Encoder::~H264Encoder: " - "ProcessOutput()", hr); - break; - } - - if (inputRequests == 0) - Sleep(1); - } -} - -HRESULT H264Encoder::CreateMediaTypes(ComPtr &i, - ComPtr &o) -{ - HRESULT hr; - HRC(MFCreateMediaType(&i)); - HRC(MFCreateMediaType(&o)); - - HRC(i->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video)); - HRC(i->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_NV12)); - HRC(MFSetAttributeSize(i, MF_MT_FRAME_SIZE, width, height)); - HRC(MFSetAttributeRatio(i, MF_MT_FRAME_RATE, framerateNum, - framerateDen)); - HRC(i->SetUINT32(MF_MT_INTERLACE_MODE, - MFVideoInterlaceMode::MFVideoInterlace_Progressive)); - HRC(MFSetAttributeRatio(i, MF_MT_PIXEL_ASPECT_RATIO, 1, 1)); - - HRC(o->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video)); - HRC(o->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264)); - HRC(MFSetAttributeSize(o, MF_MT_FRAME_SIZE, width, height)); - HRC(MFSetAttributeRatio(o, MF_MT_FRAME_RATE, framerateNum, - framerateDen)); - HRC(o->SetUINT32(MF_MT_AVG_BITRATE, initialBitrate * 1000)); - HRC(o->SetUINT32(MF_MT_INTERLACE_MODE, - MFVideoInterlaceMode::MFVideoInterlace_Progressive)); - HRC(MFSetAttributeRatio(o, MF_MT_PIXEL_ASPECT_RATIO, 1, 1)); - HRC(o->SetUINT32(MF_MT_MPEG2_LEVEL, (UINT32)-1)); - HRC(o->SetUINT32(MF_MT_MPEG2_PROFILE, MapProfile(profile))); - - return S_OK; - -fail: - return hr; -} - -HRESULT H264Encoder::DrainEvents() -{ - HRESULT hr; - while ((hr = DrainEvent(false)) == S_OK); - if (hr == MF_E_NO_EVENTS_AVAILABLE) - hr = S_OK; - return hr; -} - -HRESULT H264Encoder::DrainEvent(bool block) -{ - HRESULT hr, eventStatus; - ComPtr event; - MediaEventType type; - - hr = eventGenerator->GetEvent( - block ? 0 : MF_EVENT_FLAG_NO_WAIT, &event); - - if (hr != MF_E_NO_EVENTS_AVAILABLE && FAILED(hr)) - goto fail; - if (hr == MF_E_NO_EVENTS_AVAILABLE) - return hr; - - HRC(event->GetType(&type)); - HRC(event->GetStatus(&eventStatus)); - - if (SUCCEEDED(eventStatus)) { - if (type == METransformNeedInput) { - inputRequests++; - } - else if (type == METransformHaveOutput) { - outputRequests++; - } - } - - return S_OK; - -fail: - return hr; -} - -HRESULT H264Encoder::InitializeEventGenerator() -{ - HRESULT hr; - - HRC(transform->QueryInterface(&eventGenerator)); - - return S_OK; - -fail: - return hr; -} - -HRESULT H264Encoder::InitializeExtraData() -{ - HRESULT hr; - ComPtr inputType; - UINT32 headerSize; - - extraData.clear(); - - HRC(transform->GetOutputCurrentType(0, &inputType)); - - HRC(inputType->GetBlobSize(MF_MT_MPEG_SEQUENCE_HEADER, &headerSize)); - - extraData.resize(headerSize); - - HRC(inputType->GetBlob(MF_MT_MPEG_SEQUENCE_HEADER, extraData.data(), - headerSize, NULL)); - - return S_OK; - -fail: - return hr; -} - -static HRESULT SetCodecProperty(ComPtr &codecApi, GUID guid, - bool value) -{ - VARIANT v; - v.vt = VT_BOOL; - v.boolVal = value ? VARIANT_TRUE : VARIANT_FALSE; - return codecApi->SetValue(&guid, &v); -} - -static HRESULT SetCodecProperty(ComPtr &codecApi, GUID guid, - UINT32 value) -{ - VARIANT v; - v.vt = VT_UI4; - v.ulVal = value; - return codecApi->SetValue(&guid, &v); -} - -static HRESULT SetCodecProperty(ComPtr &codecApi, GUID guid, - UINT64 value) -{ - VARIANT v; - v.vt = VT_UI8; - v.ullVal = value; - return codecApi->SetValue(&guid, &v); -} - -bool H264Encoder::SetBitrate(UINT32 bitrate) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonMeanBitRate, - UINT32(bitrate * 1000))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetQP(H264QP &qp) -{ - HRESULT hr; - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonQuality, - UINT32(MapQpToQuality(qp)))); - HRL(SetCodecProperty(codecApi, - CODECAPI_AVEncVideoEncodeQP, - UINT64(qp.Pack(true)))); - HRL(SetCodecProperty(codecApi, - CODECAPI_AVEncVideoEncodeFrameTypeQP, - UINT64(qp.Pack(false)))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetMinQP(UINT32 minQp) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncVideoMinQP, - UINT32(minQp))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetMaxQP(UINT32 maxQp) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncVideoMaxQP, - UINT32(maxQp))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetRateControl(H264RateControl rateControl) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonRateControlMode, - UINT32(MapRateControl(rateControl)))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetKeyframeInterval(UINT32 seconds) -{ - HRESULT hr; - - if (codecApi) { - float gopSize = float(framerateNum) / framerateDen * seconds; - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncMPVGOPSize, - UINT32(gopSize))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetMaxBitrate(UINT32 maxBitrate) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonMaxBitRate, - UINT32(maxBitrate * 1000))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetLowLatency(bool lowLatency) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonLowLatency, - lowLatency)); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetBufferSize(UINT32 bufferSize) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncCommonBufferSize, - UINT32(bufferSize * 1000))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetBFrameCount(UINT32 bFrames) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncMPVDefaultBPictureCount, - UINT32(bFrames))); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::SetEntropyEncoding(H264EntropyEncoding entropyEncoding) -{ - HRESULT hr; - - if (codecApi) { - HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi, - CODECAPI_AVEncH264CABACEnable, - entropyEncoding == H264EntropyEncodingCABAC)); - } - - return true; - -fail: - return false; -} - -bool H264Encoder::Initialize(std::function func) -{ - ProfileScope("H264Encoder::Initialize"); - - HRESULT hr; - - ComPtr inputType, outputType; - ComPtr transformAttributes; - MFT_OUTPUT_STREAM_INFO streamInfo = {0}; - - HRC(CoCreateInstance(descriptor->Guid(), NULL, CLSCTX_INPROC_SERVER, - IID_PPV_ARGS(&transform))); - - HRC(CreateMediaTypes(inputType, outputType)); - - if (descriptor->Async()) { - HRC(transform->GetAttributes(&transformAttributes)); - HRC(transformAttributes->SetUINT32(MF_TRANSFORM_ASYNC_UNLOCK, - TRUE)); - } - - HRC(transform->QueryInterface(&codecApi)); - - if (func && !func()) { - MF_LOG(LOG_ERROR, "Failed setting custom properties"); - goto fail; - } - - MF_LOG(LOG_INFO, "Activating encoder: %s", - typeNames[(int)descriptor->Type()]); - - MF_LOG(LOG_INFO, " Setting output type to transform:"); - LogMediaType(outputType.Get()); - HRC(transform->SetOutputType(0, outputType.Get(), 0)); - - MF_LOG(LOG_INFO, " Setting input type to transform:"); - LogMediaType(inputType.Get()); - HRC(transform->SetInputType(0, inputType.Get(), 0)); - - HRC(transform->ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING, - NULL)); - - HRC(transform->ProcessMessage(MFT_MESSAGE_NOTIFY_START_OF_STREAM, - NULL)); - - if (descriptor->Async()) - HRC(InitializeEventGenerator()); - - HRC(transform->GetOutputStreamInfo(0, &streamInfo)); - createOutputSample = !(streamInfo.dwFlags & - (MFT_OUTPUT_STREAM_PROVIDES_SAMPLES | - MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES)); - - return true; - -fail: - return false; -} - -bool H264Encoder::ExtraData(UINT8 **data, UINT32 *dataLength) -{ - if (extraData.empty()) - return false; - - *data = extraData.data(); - *dataLength = (UINT32)extraData.size(); - - return true; -} - -HRESULT H264Encoder::CreateEmptySample(ComPtr &sample, - ComPtr &buffer, DWORD length) -{ - HRESULT hr; - - HRC(MFCreateSample(&sample)); - HRC(MFCreateMemoryBuffer(length, &buffer)); - HRC(sample->AddBuffer(buffer.Get())); - return S_OK; - -fail: - return hr; -} - -HRESULT H264Encoder::EnsureCapacity(ComPtr &sample, DWORD length) -{ - HRESULT hr; - ComPtr buffer; - DWORD currentLength; - - if (!sample) { - HRC(CreateEmptySample(sample, buffer, length)); - } - else { - HRC(sample->GetBufferByIndex(0, &buffer)); - } - - HRC(buffer->GetMaxLength(¤tLength)); - if (currentLength < length) { - HRC(sample->RemoveAllBuffers()); - HRC(MFCreateMemoryBuffer(length, &buffer)); - HRC(sample->AddBuffer(buffer)); - } - else { - buffer->SetCurrentLength(0); - } - - return S_OK; - -fail: - return hr; -} - -HRESULT H264Encoder::ProcessInput(ComPtr &sample) -{ - ProfileScope("H264Encoder::ProcessInput(sample)"); - - HRESULT hr = S_OK; - if (descriptor->Async()) { - if (inputRequests == 1 && inputSamples.empty()) { - inputRequests--; - return transform->ProcessInput(0, sample, 0); - } - - inputSamples.push(sample); - - while (inputRequests > 0) { - if (inputSamples.empty()) - return hr; - ComPtr queuedSample = inputSamples.front(); - inputSamples.pop(); - inputRequests--; - HRC(transform->ProcessInput(0, queuedSample, 0)); - } - } else { - return transform->ProcessInput(0, sample, 0); - } - -fail: - return hr; -} - -bool H264Encoder::ProcessInput(UINT8 **data, UINT32 *linesize, UINT64 pts, - Status *status) -{ - ProfileScope("H264Encoder::ProcessInput"); - - HRESULT hr; - ComPtr sample; - ComPtr buffer; - BYTE *bufferData; - UINT64 sampleDur; - UINT32 imageSize; - - HRC(MFCalculateImageSize(MFVideoFormat_NV12, width, height, &imageSize)); - - HRC(CreateEmptySample(sample, buffer, imageSize)); - - { - ProfileScope("H264EncoderCopyInputSample"); - - HRC(buffer->Lock(&bufferData, NULL, NULL)); - - ProcessNV12([&, this](DWORD height, int plane) { - MFCopyImage(bufferData, width, data[plane], - linesize[plane], width, height); - bufferData += width * height; - }, height); - } - - HRC(buffer->Unlock()); - HRC(buffer->SetCurrentLength(imageSize)); - - MFFrameRateToAverageTimePerFrame(framerateNum, framerateDen, &sampleDur); - - HRC(sample->SetSampleTime(pts * sampleDur)); - HRC(sample->SetSampleDuration(sampleDur)); - - if (descriptor->Async()) { - HRC(DrainEvents()); - - while (outputRequests > 0 && (hr = ProcessOutput()) == S_OK); - - if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT && FAILED(hr)) { - MF_LOG_COM(LOG_ERROR, "ProcessOutput()", hr); - goto fail; - } - - - while (inputRequests == 0) { - hr = DrainEvent(false); - if (hr == MF_E_NO_EVENTS_AVAILABLE) { - Sleep(1); - continue; - } - if (FAILED(hr)) { - MF_LOG_COM(LOG_ERROR, "DrainEvent()", hr); - goto fail; - } - if (outputRequests > 0) { - hr = ProcessOutput(); - if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT && - FAILED(hr)) - goto fail; - } - } - } - - HRC(ProcessInput(sample)); - - pendingRequests++; - - *status = SUCCESS; - return true; - -fail: - *status = FAILURE; - return false; -} - -HRESULT H264Encoder::ProcessOutput() -{ - HRESULT hr; - ComPtr sample; - MFT_OUTPUT_STREAM_INFO outputInfo = { 0 }; - - DWORD outputStatus = 0; - MFT_OUTPUT_DATA_BUFFER output = { 0 }; - ComPtr buffer; - BYTE *bufferData; - DWORD bufferLength; - INT64 samplePts; - INT64 sampleDts; - INT64 sampleDur; - std::unique_ptr> data(new std::vector()); - ComPtr type; - std::unique_ptr frame; - - if (descriptor->Async()) { - HRC(DrainEvents()); - - if (outputRequests == 0) - return S_OK; - - outputRequests--; - } - - if (createOutputSample) { - HRC(transform->GetOutputStreamInfo(0, &outputInfo)); - HRC(CreateEmptySample(sample, buffer, outputInfo.cbSize)); - output.pSample = sample; - } else { - output.pSample = NULL; - } - - while (true) { - hr = transform->ProcessOutput(0, 1, &output, - &outputStatus); - ComPtr events(output.pEvents); - - if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) - return hr; - - if (hr == MF_E_TRANSFORM_STREAM_CHANGE) { - HRC(transform->GetOutputAvailableType(0, 0, &type)); - HRC(transform->SetOutputType(0, type, 0)); - MF_LOG(LOG_INFO, "Updating output type to transform"); - LogMediaType(type); - if (descriptor->Async() && outputRequests > 0) { - outputRequests--; - continue; - } else { - return MF_E_TRANSFORM_NEED_MORE_INPUT; - } - } - - if (hr != S_OK) { - MF_LOG_COM(LOG_ERROR, "transform->ProcessOutput()", - hr); - return hr; - } - - break; - } - - if (!createOutputSample) - sample.Set(output.pSample); - - - HRC(sample->GetBufferByIndex(0, &buffer)); - - bool keyframe = !!MFGetAttributeUINT32(sample, - MFSampleExtension_CleanPoint, FALSE); - - HRC(buffer->Lock(&bufferData, NULL, &bufferLength)); - - if (keyframe && extraData.empty()) - HRC(InitializeExtraData()); - - data->reserve(bufferLength + extraData.size()); - - if (keyframe) - data->insert(data->end(), extraData.begin(), extraData.end()); - - data->insert(data->end(), &bufferData[0], &bufferData[bufferLength]); - HRC(buffer->Unlock()); - - HRC(sample->GetSampleDuration(&sampleDur)); - HRC(sample->GetSampleTime(&samplePts)); - - sampleDts = MFGetAttributeUINT64(sample, - MFSampleExtension_DecodeTimestamp, samplePts); - - frame.reset(new H264Frame(keyframe, - samplePts / sampleDur, - sampleDts / sampleDur, - std::move(data))); - - encodedFrames.push(std::move(frame)); - - return S_OK; - -fail: - return hr; -} - -bool H264Encoder::ProcessOutput(UINT8 **data, UINT32 *dataLength, - UINT64 *pts, UINT64 *dts, bool *keyframe, Status *status) -{ - ProfileScope("H264Encoder::ProcessOutput"); - - HRESULT hr; - - hr = ProcessOutput(); - - if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT || encodedFrames.empty()) { - *status = NEED_MORE_INPUT; - return true; - } - - if (FAILED(hr) && encodedFrames.empty()) { - *status = FAILURE; - return false; - } - - activeFrame = std::move(encodedFrames.front()); - encodedFrames.pop(); - - *data = activeFrame.get()->Data(); - *dataLength = activeFrame.get()->DataLength(); - *pts = activeFrame.get()->Pts(); - *dts = activeFrame.get()->Dts(); - *keyframe = activeFrame.get()->Keyframe(); - *status = SUCCESS; - - pendingRequests--; - - return true; -} diff --git a/plugins/win-mf/mf-h264-encoder.hpp b/plugins/win-mf/mf-h264-encoder.hpp deleted file mode 100644 index 67bc7241a9909b..00000000000000 --- a/plugins/win-mf/mf-h264-encoder.hpp +++ /dev/null @@ -1,175 +0,0 @@ -#pragma once - -#include - -#define WIN32_MEAN_AND_LEAN -#include -#undef WIN32_MEAN_AND_LEAN - -#include -#include - -#include - -#include -#include -#include -#include - -#include - -#include "mf-encoder-descriptor.hpp" -#include "mf-common.hpp" - -namespace MF { - enum H264Profile { - H264ProfileBaseline, - H264ProfileMain, - H264ProfileHigh - }; - - enum H264RateControl { - H264RateControlCBR, - H264RateControlConstrainedVBR, - H264RateControlVBR, - H264RateControlCQP - }; - - struct H264QP { - UINT16 defaultQp; - UINT16 i; - UINT16 p; - UINT16 b; - - UINT64 Pack(bool packDefault) { - int shift = packDefault ? 0 : 16; - UINT64 packedQp; - if (packDefault) - packedQp = defaultQp; - - packedQp |= i << shift; - shift += 16; - packedQp |= p << shift; - shift += 16; - packedQp |= b << shift; - - return packedQp; - } - }; - - enum H264EntropyEncoding { - H264EntropyEncodingCABLC, - H264EntropyEncodingCABAC - }; - - struct H264Frame { - public: - H264Frame(bool keyframe, UINT64 pts, UINT64 dts, - std::unique_ptr> data) - : keyframe(keyframe), pts(pts), dts(dts), - data(std::move(data)) - {} - bool Keyframe() { return keyframe; } - BYTE *Data() { return data.get()->data(); } - DWORD DataLength() { return (DWORD)data.get()->size(); } - INT64 Pts() { return pts; } - INT64 Dts() { return dts; } - - private: - H264Frame(H264Frame const&) = delete; - H264Frame& operator=(H264Frame const&) = delete; - private: - bool keyframe; - INT64 pts; - INT64 dts; - std::unique_ptr> data; - }; - - class H264Encoder { - public: - H264Encoder(const obs_encoder_t *encoder, - std::shared_ptr descriptor, - UINT32 width, - UINT32 height, - UINT32 framerateNum, - UINT32 framerateDen, - H264Profile profile, - UINT32 bitrate); - - ~H264Encoder(); - - bool Initialize(std::function func); - bool ProcessInput(UINT8 **data, UINT32 *linesize, UINT64 pts, - Status *status); - bool ProcessOutput(UINT8 **data, UINT32 *dataLength, - UINT64 *pts, UINT64 *dts, bool *keyframe, - Status *status); - bool ExtraData(UINT8 **data, UINT32 *dataLength); - - const obs_encoder_t *ObsEncoder() { return encoder; } - - public: - bool SetBitrate(UINT32 bitrate); - bool SetQP(H264QP &qp); - bool SetMaxBitrate(UINT32 maxBitrate); - bool SetRateControl(H264RateControl rateControl); - bool SetKeyframeInterval(UINT32 seconds); - bool SetLowLatency(bool lowLatency); - bool SetBufferSize(UINT32 bufferSize); - bool SetBFrameCount(UINT32 bFrames); - bool SetEntropyEncoding(H264EntropyEncoding entropyEncoding); - bool SetMinQP(UINT32 minQp); - bool SetMaxQP(UINT32 maxQp); - - private: - H264Encoder(H264Encoder const&) = delete; - H264Encoder& operator=(H264Encoder const&) = delete; - - private: - HRESULT InitializeEventGenerator(); - HRESULT InitializeExtraData(); - HRESULT CreateMediaTypes(ComPtr &inputType, - ComPtr &outputType); - HRESULT EnsureCapacity(ComPtr &sample, DWORD length); - HRESULT CreateEmptySample(ComPtr &sample, - ComPtr &buffer, DWORD length); - - HRESULT ProcessInput(ComPtr &sample); - HRESULT ProcessOutput(); - - HRESULT DrainEvent(bool block); - HRESULT DrainEvents(); - private: - const obs_encoder_t *encoder; - std::shared_ptr descriptor; - const UINT32 width; - const UINT32 height; - const UINT32 framerateNum; - const UINT32 framerateDen; - const UINT32 initialBitrate; - const H264Profile profile; - - bool createOutputSample; - ComPtr transform; - ComPtr codecApi; - - std::vector extraData; - - // The frame returned by ProcessOutput - // Valid until the next call to ProcessOutput - std::unique_ptr activeFrame; - - // Queued input samples that the encoder was not ready - // to process - std::queue> inputSamples; - - // Queued output samples that have not been returned from - // ProcessOutput yet - std::queue> encodedFrames; - - ComPtr eventGenerator; - std::atomic inputRequests = 0; - std::atomic outputRequests = 0; - std::atomic pendingRequests = 0; - }; -} diff --git a/plugins/win-mf/mf-h264.cpp b/plugins/win-mf/mf-h264.cpp deleted file mode 100644 index aecb1006d1aff0..00000000000000 --- a/plugins/win-mf/mf-h264.cpp +++ /dev/null @@ -1,555 +0,0 @@ -#include -#include - -#include -#include - -#include "mf-h264-encoder.hpp" -#include "mf-encoder-descriptor.hpp" -#include - -using namespace MF; - -struct MFH264_Encoder { - obs_encoder_t *encoder; - std::shared_ptr descriptor; - std::unique_ptr h264Encoder; - uint32_t width; - uint32_t height; - uint32_t framerateNum; - uint32_t framerateDen; - uint32_t keyint; - bool advanced; - uint32_t bitrate; - uint32_t maxBitrate; - bool useMaxBitrate; - uint32_t bufferSize; - bool useBufferSize; - H264Profile profile; - H264RateControl rateControl; - H264QP qp; - uint32_t minQp; - uint32_t maxQp; - bool lowLatency; - uint32_t bFrames; - - const char *profiler_encode = nullptr; -}; - -#define MFTEXT(x) obs_module_text("MF.H264." x) -#define TEXT_ADVANCED MFTEXT("Advanced") -#define TEXT_LOW_LAT MFTEXT("LowLatency") -#define TEXT_B_FRAMES MFTEXT("BFrames") -#define TEXT_BITRATE MFTEXT("Bitrate") -#define TEXT_CUSTOM_BUF MFTEXT("CustomBufsize") -#define TEXT_BUF_SIZE MFTEXT("BufferSize") -#define TEXT_USE_MAX_BITRATE MFTEXT("CustomMaxBitrate") -#define TEXT_MAX_BITRATE MFTEXT("MaxBitrate") -#define TEXT_KEYINT_SEC MFTEXT("KeyframeIntervalSec") -#define TEXT_RATE_CONTROL MFTEXT("RateControl") -#define TEXT_MIN_QP MFTEXT("MinQP") -#define TEXT_MAX_QP MFTEXT("MaxQP") -#define TEXT_QPI MFTEXT("QPI") -#define TEXT_QPP MFTEXT("QPP") -#define TEXT_QPB MFTEXT("QPB") -#define TEXT_PROFILE MFTEXT("Profile") -#define TEXT_CBR MFTEXT("CBR") -#define TEXT_VBR MFTEXT("VBR") -#define TEXT_CQP MFTEXT("CQP") - -#define MFP(x) "mf_h264_" ## x -#define MFP_USE_ADVANCED MFP("use_advanced") -#define MFP_USE_LOWLAT MFP("use_low_latency") -#define MFP_B_FRAMES MFP("b_frames") -#define MFP_BITRATE MFP("bitrate") -#define MFP_USE_BUF_SIZE MFP("use_buf_size") -#define MFP_BUF_SIZE MFP("buf_size") -#define MFP_USE_MAX_BITRATE MFP("use_max_bitrate") -#define MFP_MAX_BITRATE MFP("max_bitrate") -#define MFP_KEY_INT MFP("key_int") -#define MFP_RATE_CONTROL MFP("rate_control") -#define MFP_MIN_QP MFP("min_qp") -#define MFP_MAX_QP MFP("max_qp") -#define MFP_QP_I MFP("qp_i") -#define MFP_QP_P MFP("qp_p") -#define MFP_QP_B MFP("qp_b") -#define MFP_PROFILE MFP("profile") - -struct TypeData { - std::shared_ptr descriptor; - - inline TypeData(std::shared_ptr descriptor_) - : descriptor(descriptor_) - {} -}; - -static const char *MFH264_GetName(void *type_data) -{ - TypeData &typeData = *reinterpret_cast(type_data); - return obs_module_text(typeData.descriptor->Name()); -} - -static void set_visible(obs_properties_t *ppts, const char *name, bool visible) -{ - obs_property_t *p = obs_properties_get(ppts, name); - obs_property_set_visible(p, visible); -} - -static bool use_bufsize_modified(obs_properties_t *ppts, obs_property_t *p, - obs_data_t *settings) -{ - UNUSED_PARAMETER(p); - - bool use_bufsize = obs_data_get_bool(settings, MFP_USE_BUF_SIZE); - - set_visible(ppts, MFP_BUF_SIZE, use_bufsize); - - return true; -} - -static bool use_max_bitrate_modified(obs_properties_t *ppts, obs_property_t *p, - obs_data_t *settings) -{ - UNUSED_PARAMETER(p); - - bool advanced = obs_data_get_bool(settings, MFP_USE_ADVANCED); - bool use_max_bitrate = obs_data_get_bool(settings, MFP_USE_MAX_BITRATE); - - set_visible(ppts, MFP_MAX_BITRATE, advanced && use_max_bitrate); - - return true; -} - -static bool use_advanced_modified(obs_properties_t *ppts, obs_property_t *p, - obs_data_t *settings) -{ - UNUSED_PARAMETER(p); - - bool advanced = obs_data_get_bool(settings, MFP_USE_ADVANCED); - - set_visible(ppts, MFP_MIN_QP, advanced); - set_visible(ppts, MFP_MAX_QP, advanced); - set_visible(ppts, MFP_USE_LOWLAT, advanced); - set_visible(ppts, MFP_B_FRAMES, advanced); - - H264RateControl rateControl = (H264RateControl)obs_data_get_int( - settings, MFP_RATE_CONTROL); - - if (rateControl == H264RateControlCBR || - rateControl == H264RateControlVBR) { - set_visible(ppts, MFP_USE_MAX_BITRATE, advanced); - use_max_bitrate_modified(ppts, NULL, settings); - } - - return true; -} - -static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p, - obs_data_t *settings) -{ - UNUSED_PARAMETER(p); - - H264RateControl rateControl = (H264RateControl)obs_data_get_int( - settings, MFP_RATE_CONTROL); - - bool advanced = obs_data_get_bool(settings, MFP_USE_ADVANCED); - - set_visible(ppts, MFP_BITRATE, false); - set_visible(ppts, MFP_USE_BUF_SIZE, false); - set_visible(ppts, MFP_BUF_SIZE, false); - set_visible(ppts, MFP_USE_MAX_BITRATE, false); - set_visible(ppts, MFP_MAX_BITRATE, false); - set_visible(ppts, MFP_QP_I, false); - set_visible(ppts, MFP_QP_P, false); - set_visible(ppts, MFP_QP_B, false); - - switch (rateControl) { - case H264RateControlCBR: - use_bufsize_modified(ppts, NULL, settings); - use_max_bitrate_modified(ppts, NULL, settings); - - set_visible(ppts, MFP_BITRATE, true); - set_visible(ppts, MFP_USE_BUF_SIZE, true); - set_visible(ppts, MFP_USE_MAX_BITRATE, advanced); - - break; - case H264RateControlVBR: - use_bufsize_modified(ppts, NULL, settings); - use_max_bitrate_modified(ppts, NULL, settings); - - set_visible(ppts, MFP_BITRATE, true); - set_visible(ppts, MFP_USE_BUF_SIZE, true); - set_visible(ppts, MFP_USE_MAX_BITRATE, advanced); - - break; - case H264RateControlCQP: - set_visible(ppts, MFP_QP_I, true); - set_visible(ppts, MFP_QP_P, true); - set_visible(ppts, MFP_QP_B, true); - - break; - default: break; - } - - return true; -} - -static obs_properties_t *MFH264_GetProperties(void *) -{ - obs_properties_t *props = obs_properties_create(); - obs_property_t *p; - - obs_property_t *list = obs_properties_add_list(props, MFP_PROFILE, - TEXT_PROFILE, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); - - obs_property_list_add_int(list, "baseline", H264ProfileBaseline); - obs_property_list_add_int(list, "main", H264ProfileMain); - obs_property_list_add_int(list, "high", H264ProfileHigh); - - p = obs_properties_add_int(props, MFP_KEY_INT, TEXT_KEYINT_SEC, 0, 20, 1); - obs_property_int_set_suffix(p, " s"); - - list = obs_properties_add_list(props, MFP_RATE_CONTROL, - TEXT_RATE_CONTROL, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); - - obs_property_list_add_int(list, TEXT_CBR, H264RateControlCBR); - obs_property_list_add_int(list, TEXT_VBR, H264RateControlVBR); - obs_property_list_add_int(list, TEXT_CQP, H264RateControlCQP); - - obs_property_set_modified_callback(list, rate_control_modified); - - obs_properties_add_int(props, MFP_BITRATE, TEXT_BITRATE, 50, 10000000, - 1); - - p = obs_properties_add_bool(props, MFP_USE_BUF_SIZE, TEXT_CUSTOM_BUF); - obs_property_set_modified_callback(p, use_bufsize_modified); - obs_properties_add_int(props, MFP_BUF_SIZE, TEXT_BUF_SIZE, 0, - 10000000, 1); - - obs_properties_add_int(props, MFP_QP_I, TEXT_QPI, 0, 51, 1); - obs_properties_add_int(props, MFP_QP_P, TEXT_QPP, 0, 51, 1); - obs_properties_add_int(props, MFP_QP_B, TEXT_QPB, 0, 51, 1); - - p = obs_properties_add_bool(props, MFP_USE_ADVANCED, TEXT_ADVANCED); - obs_property_set_modified_callback(p, use_advanced_modified); - - p = obs_properties_add_bool(props, MFP_USE_MAX_BITRATE, - TEXT_USE_MAX_BITRATE); - obs_property_set_modified_callback(p, use_max_bitrate_modified); - obs_properties_add_int(props, MFP_MAX_BITRATE, TEXT_MAX_BITRATE, 50, - 10000000, 1); - - obs_properties_add_bool(props, MFP_USE_LOWLAT, TEXT_LOW_LAT); - obs_properties_add_int(props, MFP_B_FRAMES, TEXT_B_FRAMES, 0, 16, 1); - obs_properties_add_int(props, MFP_MIN_QP, TEXT_MIN_QP, 1, 51, 1); - obs_properties_add_int(props, MFP_MAX_QP, TEXT_MAX_QP, 1, 51, 1); - return props; -} - -static void MFH264_GetDefaults(obs_data_t *settings) -{ -#define PROP_DEF(x, y, z) obs_data_set_default_ ## x(settings, y, z) - PROP_DEF(int, MFP_BITRATE, 2500); - PROP_DEF(bool, MFP_USE_LOWLAT, true); - PROP_DEF(int, MFP_B_FRAMES, 2); - PROP_DEF(bool, MFP_USE_BUF_SIZE, false); - PROP_DEF(int, MFP_BUF_SIZE, 2500); - PROP_DEF(bool, MFP_USE_MAX_BITRATE, false); - PROP_DEF(int, MFP_MAX_BITRATE, 2500); - PROP_DEF(int, MFP_KEY_INT, 2); - PROP_DEF(int, MFP_RATE_CONTROL, H264RateControlCBR); - PROP_DEF(int, MFP_PROFILE, H264ProfileMain); - PROP_DEF(int, MFP_MIN_QP, 1); - PROP_DEF(int, MFP_MAX_QP, 51); - PROP_DEF(int, MFP_QP_I, 26); - PROP_DEF(int, MFP_QP_B, 26); - PROP_DEF(int, MFP_QP_P, 26); - PROP_DEF(bool, MFP_USE_ADVANCED, false); -#undef DEF -} - -static void UpdateParams(MFH264_Encoder *enc, obs_data_t *settings) -{ - video_t *video = obs_encoder_video(enc->encoder); - const struct video_output_info *voi = video_output_get_info(video); - TypeData &typeData = *reinterpret_cast( - obs_encoder_get_type_data(enc->encoder)); - - enc->width = (uint32_t)obs_encoder_get_width(enc->encoder); - enc->height = (uint32_t)obs_encoder_get_height(enc->encoder); - enc->framerateNum = voi->fps_num; - enc->framerateDen = voi->fps_den; - - enc->descriptor = typeData.descriptor; - -#define PROP_GET(x, y, z) (z)obs_data_get_ ## x(settings, y) - enc->profile = PROP_GET(int, MFP_PROFILE, H264Profile); - enc->rateControl = PROP_GET(int, MFP_RATE_CONTROL, H264RateControl); - enc->keyint = PROP_GET(int, MFP_KEY_INT, uint32_t); - enc->bitrate = PROP_GET(int, MFP_BITRATE, uint32_t); - enc->useBufferSize = PROP_GET(bool, MFP_USE_BUF_SIZE, bool); - enc->bufferSize = PROP_GET(int, MFP_BUF_SIZE, uint32_t); - enc->useMaxBitrate = PROP_GET(bool, MFP_USE_MAX_BITRATE, uint32_t); - enc->maxBitrate = PROP_GET(int, MFP_MAX_BITRATE, uint32_t); - enc->minQp = PROP_GET(int, MFP_MIN_QP, uint16_t); - enc->maxQp = PROP_GET(int, MFP_MAX_QP, uint16_t); - enc->qp.defaultQp = PROP_GET(int, MFP_QP_I, uint16_t); - enc->qp.i = PROP_GET(int, MFP_QP_I, uint16_t); - enc->qp.p = PROP_GET(int, MFP_QP_P, uint16_t); - enc->qp.b = PROP_GET(int, MFP_QP_B, uint16_t); - enc->lowLatency = PROP_GET(bool, MFP_USE_LOWLAT, bool); - enc->bFrames = PROP_GET(int, MFP_B_FRAMES, uint32_t); - enc->advanced = PROP_GET(bool, MFP_USE_ADVANCED, bool); -#undef PROP_GET -} - -#undef MFTEXT -#undef MFP - -static bool ApplyCBR(MFH264_Encoder *enc) -{ - enc->h264Encoder->SetBitrate(enc->bitrate); - - if (enc->useMaxBitrate) - enc->h264Encoder->SetMaxBitrate(enc->maxBitrate); - else - enc->h264Encoder->SetMaxBitrate(enc->bitrate); - - if (enc->useBufferSize) - enc->h264Encoder->SetBufferSize(enc->bufferSize); - - return true; -} - -static bool ApplyCVBR(MFH264_Encoder *enc) -{ - enc->h264Encoder->SetBitrate(enc->bitrate); - - if (enc->advanced && enc->useMaxBitrate) - enc->h264Encoder->SetMaxBitrate(enc->maxBitrate); - else - enc->h264Encoder->SetMaxBitrate(enc->bitrate); - - if (enc->useBufferSize) - enc->h264Encoder->SetBufferSize(enc->bufferSize); - - return true; -} - -static bool ApplyVBR(MFH264_Encoder *enc) -{ - enc->h264Encoder->SetBitrate(enc->bitrate); - - if (enc->useBufferSize) - enc->h264Encoder->SetBufferSize(enc->bufferSize); - - return true; -} - -static bool ApplyCQP(MFH264_Encoder *enc) -{ - enc->h264Encoder->SetQP(enc->qp); - - return true; -} - -static void *MFH264_Create(obs_data_t *settings, obs_encoder_t *encoder) -{ - ProfileScope("MFH264_Create"); - - std::unique_ptr enc(new MFH264_Encoder()); - enc->encoder = encoder; - - UpdateParams(enc.get(), settings); - - ProfileScope(enc->descriptor->Name()); - - enc->h264Encoder.reset(new H264Encoder(encoder, - enc->descriptor, - enc->width, - enc->height, - enc->framerateNum, - enc->framerateDen, - enc->profile, - enc->bitrate)); - - auto applySettings = [&]() { - enc.get()->h264Encoder->SetRateControl(enc->rateControl); - enc.get()->h264Encoder->SetKeyframeInterval(enc->keyint); - - enc.get()->h264Encoder->SetEntropyEncoding( - H264EntropyEncodingCABAC); - - if (enc->advanced) { - enc.get()->h264Encoder->SetLowLatency(enc->lowLatency); - enc.get()->h264Encoder->SetBFrameCount(enc->bFrames); - - enc.get()->h264Encoder->SetMinQP(enc->minQp); - enc.get()->h264Encoder->SetMaxQP(enc->maxQp); - } - - if (enc->rateControl == H264RateControlVBR && - enc->advanced && - enc->useMaxBitrate) - enc->rateControl = H264RateControlConstrainedVBR; - - - switch (enc->rateControl) { - case H264RateControlCBR: - return ApplyCBR(enc.get()); - case H264RateControlConstrainedVBR: - return ApplyCVBR(enc.get()); - case H264RateControlVBR: - return ApplyVBR(enc.get()); - case H264RateControlCQP: - return ApplyCQP(enc.get()); - default: return false; - } - }; - - if (!enc->h264Encoder->Initialize(applySettings)) - return nullptr; - - return enc.release(); -} - -static void MFH264_Destroy(void *data) -{ - MFH264_Encoder *enc = static_cast(data); - delete enc; -} - -static bool MFH264_Encode(void *data, struct encoder_frame *frame, - struct encoder_packet *packet, bool *received_packet) -{ - MFH264_Encoder *enc = static_cast(data); - Status status; - - if (!enc->profiler_encode) - enc->profiler_encode = profile_store_name( - obs_get_profiler_name_store(), - "MFH264_Encode(%s)", enc->descriptor->Name()); - - ProfileScope(enc->profiler_encode); - - *received_packet = false; - - if (!enc->h264Encoder->ProcessInput(frame->data, frame->linesize, - frame->pts, &status)) - return false; - - UINT8 *outputData; - UINT32 outputDataLength; - UINT64 outputPts; - UINT64 outputDts; - bool keyframe; - - if (!enc->h264Encoder->ProcessOutput(&outputData, &outputDataLength, - &outputPts, &outputDts, &keyframe, &status)) - return false; - - // Needs more input, not a failure case - if (status == NEED_MORE_INPUT) - return true; - - packet->type = OBS_ENCODER_VIDEO; - packet->pts = outputPts; - packet->dts = outputPts; - packet->data = outputData; - packet->size = outputDataLength; - packet->keyframe = keyframe; - - *received_packet = true; - return true; -} - -static bool MFH264_GetExtraData(void *data, uint8_t **extra_data, size_t *size) -{ - MFH264_Encoder *enc = static_cast(data); - - uint8_t *extraData; - UINT32 extraDataLength; - - if (!enc->h264Encoder->ExtraData(&extraData, &extraDataLength)) - return false; - - *extra_data = extraData; - *size = extraDataLength; - - return true; -} - -static bool MFH264_GetSEIData(void *data, uint8_t **sei_data, size_t *size) -{ - UNUSED_PARAMETER(data); - UNUSED_PARAMETER(sei_data); - UNUSED_PARAMETER(size); - - return false; -} - -static void MFH264_GetVideoInfo(void *, struct video_scale_info *info) -{ - info->format = VIDEO_FORMAT_NV12; -} - -static bool MFH264_Update(void *data, obs_data_t *settings) -{ - MFH264_Encoder *enc = static_cast(data); - - UpdateParams(enc, settings); - - enc->h264Encoder->SetBitrate(enc->bitrate); - enc->h264Encoder->SetQP(enc->qp); - - return true; -} - -static bool CanSpawnEncoder(std::shared_ptr descriptor) -{ - HRESULT hr; - ComPtr transform; - - hr = CoCreateInstance(descriptor->Guid(), nullptr, - CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&transform)); - return hr == S_OK; -} - -void RegisterMFH264Encoders() -{ - obs_encoder_info info = { 0 }; - info.type = OBS_ENCODER_VIDEO; - info.get_name = MFH264_GetName; - info.create = MFH264_Create; - info.destroy = MFH264_Destroy; - info.encode = MFH264_Encode; - info.update = MFH264_Update; - info.get_properties = MFH264_GetProperties; - info.get_defaults = MFH264_GetDefaults; - info.get_extra_data = MFH264_GetExtraData; - info.get_sei_data = MFH264_GetSEIData; - info.get_video_info = MFH264_GetVideoInfo; - info.codec = "h264"; - - auto encoders = EncoderDescriptor::Enumerate(); - for (auto e : encoders) { - /* ignore the software encoder due to the fact that we already - * have an objectively superior software encoder available */ - if (e->Type() == EncoderType::H264_SOFTWARE) - continue; - - /* certain encoders such as quicksync will be "available" but - * not usable with certain processors */ - if (!CanSpawnEncoder(e)) - continue; - - info.caps = OBS_ENCODER_CAP_DEPRECATED; - info.id = e->Id(); - info.type_data = new TypeData(e); - info.free_type_data = [] (void *type_data) { - delete reinterpret_cast(type_data); - }; - - obs_register_encoder(&info); - } -} diff --git a/plugins/win-mf/mf-plugin.cpp b/plugins/win-mf/mf-plugin.cpp deleted file mode 100644 index 578befe799e0e6..00000000000000 --- a/plugins/win-mf/mf-plugin.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include - -#ifdef ENABLE_WINMF -#include -#include "mf-common.hpp" - -extern "C" extern void RegisterMFAACEncoder(); -extern void RegisterMFH264Encoders(); -#endif - - -extern "C" bool obs_module_load(void) -{ -#ifdef ENABLE_WINMF - MFStartup(MF_VERSION, MFSTARTUP_FULL); - - RegisterMFAACEncoder(); - RegisterMFH264Encoders(); -#endif - - return true; -} - -extern "C" void obs_module_unload(void) -{ -#ifdef ENABLE_WINMF - MFShutdown(); -#endif -} - -OBS_DECLARE_MODULE() -MODULE_EXPORT const char *obs_module_description(void) -{ - return "Windows Media Foundations H.264/AAC encoder"; -} - -#ifdef ENABLE_WINMF -OBS_MODULE_USE_DEFAULT_LOCALE("win-mf", "en-US") -#endif From a1a98f9cfd15f4c74cf15ddf4ef65ca6058016de Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 13 Sep 2022 15:08:36 -0300 Subject: [PATCH 0228/2225] plugins: Drop win-ivcam Apparently this was a prototype from Intel that never really properly launched. Remove the plugin. --- UI/installer/mp-installer.nsi | 5 - UI/win-update/updater/updater.cpp | 13 +- plugins/CMakeLists.txt | 3 - plugins/win-ivcam/.clang-format | 3 - plugins/win-ivcam/CMakeLists.txt | 62 --- plugins/win-ivcam/realsense.cpp | 191 ------- plugins/win-ivcam/seg_library/Dependencies.h | 40 -- plugins/win-ivcam/seg_library/SegImage.cpp | 102 ---- plugins/win-ivcam/seg_library/SegImage.h | 66 --- plugins/win-ivcam/seg_library/SegServer.h | 71 --- .../win-ivcam/seg_library/SegServerImpl.cpp | 200 ------- plugins/win-ivcam/seg_library/SegServerImpl.h | 77 --- plugins/win-ivcam/seg_library/SegService.h | 34 -- plugins/win-ivcam/seg_library/SerServer.cpp | 39 -- plugins/win-ivcam/seg_service/CMakeLists.txt | 37 -- plugins/win-ivcam/seg_service/SegProc.cpp | 35 -- plugins/win-ivcam/seg_service/SegProc.h | 508 ------------------ plugins/win-ivcam/seg_service/SegProc.rgs | 16 - plugins/win-ivcam/seg_service/resource.h | 45 -- plugins/win-ivcam/seg_service/seg_service.cpp | 56 -- plugins/win-ivcam/seg_service/seg_service.idl | 69 --- plugins/win-ivcam/seg_service/seg_service.rc | Bin 6094 -> 0 bytes plugins/win-ivcam/seg_service/seg_service.rgs | 3 - plugins/win-ivcam/seg_service/stdafx.cpp | 32 -- plugins/win-ivcam/seg_service/stdafx.h | 52 -- plugins/win-ivcam/seg_service/targetver.h | 35 -- plugins/win-ivcam/seg_service/xdlldata.c | 44 -- plugins/win-ivcam/seg_service/xdlldata.h | 42 -- 28 files changed, 3 insertions(+), 1877 deletions(-) delete mode 100644 plugins/win-ivcam/.clang-format delete mode 100644 plugins/win-ivcam/CMakeLists.txt delete mode 100644 plugins/win-ivcam/realsense.cpp delete mode 100644 plugins/win-ivcam/seg_library/Dependencies.h delete mode 100644 plugins/win-ivcam/seg_library/SegImage.cpp delete mode 100644 plugins/win-ivcam/seg_library/SegImage.h delete mode 100644 plugins/win-ivcam/seg_library/SegServer.h delete mode 100644 plugins/win-ivcam/seg_library/SegServerImpl.cpp delete mode 100644 plugins/win-ivcam/seg_library/SegServerImpl.h delete mode 100644 plugins/win-ivcam/seg_library/SegService.h delete mode 100644 plugins/win-ivcam/seg_library/SerServer.cpp delete mode 100644 plugins/win-ivcam/seg_service/CMakeLists.txt delete mode 100644 plugins/win-ivcam/seg_service/SegProc.cpp delete mode 100644 plugins/win-ivcam/seg_service/SegProc.h delete mode 100644 plugins/win-ivcam/seg_service/SegProc.rgs delete mode 100644 plugins/win-ivcam/seg_service/resource.h delete mode 100644 plugins/win-ivcam/seg_service/seg_service.cpp delete mode 100644 plugins/win-ivcam/seg_service/seg_service.idl delete mode 100644 plugins/win-ivcam/seg_service/seg_service.rc delete mode 100644 plugins/win-ivcam/seg_service/seg_service.rgs delete mode 100644 plugins/win-ivcam/seg_service/stdafx.cpp delete mode 100644 plugins/win-ivcam/seg_service/stdafx.h delete mode 100644 plugins/win-ivcam/seg_service/targetver.h delete mode 100644 plugins/win-ivcam/seg_service/xdlldata.c delete mode 100644 plugins/win-ivcam/seg_service/xdlldata.h diff --git a/UI/installer/mp-installer.nsi b/UI/installer/mp-installer.nsi index ba6edc729f1c42..18b2f073250bdb 100644 --- a/UI/installer/mp-installer.nsi +++ b/UI/installer/mp-installer.nsi @@ -469,11 +469,6 @@ Section "un.${APPNAME} App Files" UninstallSection1 ${endif} SetShellVarContext current - IfFileExists "$INSTDIR\data\obs-plugins\win-ivcam\seg_service.exe" UnregisterSegService SkipUnreg - UnregisterSegService: - ExecWait '"$INSTDIR\data\obs-plugins\win-ivcam\seg_service.exe" /UnregServer' - SkipUnreg: - ; Clean up OBS Studio RMDir /r "$INSTDIR\bin" RMDir /r "$INSTDIR\data" diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index decfcf7ee716ef..79079dfd874ebf 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -676,20 +676,13 @@ static inline bool FileExists(const wchar_t *path) static bool NonCorePackageInstalled(const char *name) { - if (is32bit) { - if (strcmp(name, "obs-browser") == 0) { + if (strcmp(name, "obs-browser") == 0) { + if (is32bit) return FileExists( L"obs-plugins\\32bit\\obs-browser.dll"); - } else if (strcmp(name, "realsense") == 0) { - return FileExists(L"obs-plugins\\32bit\\win-ivcam.dll"); - } - } else { - if (strcmp(name, "obs-browser") == 0) { + else return FileExists( L"obs-plugins\\64bit\\obs-browser.dll"); - } else if (strcmp(name, "realsense") == 0) { - return FileExists(L"obs-plugins\\64bit\\win-ivcam.dll"); - } } return false; diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index a9becf58f75894..5541ed52f59c73 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -30,9 +30,6 @@ if(OS_WINDOWS) else() obs_status(WARNING "enc-amf plugin not found.") endif() - if(MSVC) - add_subdirectory(win-ivcam) - endif() check_obs_browser() elseif(OS_MACOS) diff --git a/plugins/win-ivcam/.clang-format b/plugins/win-ivcam/.clang-format deleted file mode 100644 index 6420a46881e054..00000000000000 --- a/plugins/win-ivcam/.clang-format +++ /dev/null @@ -1,3 +0,0 @@ -Language: Cpp -SortIncludes: false -DisableFormat: true diff --git a/plugins/win-ivcam/CMakeLists.txt b/plugins/win-ivcam/CMakeLists.txt deleted file mode 100644 index dc3853f5bd1630..00000000000000 --- a/plugins/win-ivcam/CMakeLists.txt +++ /dev/null @@ -1,62 +0,0 @@ -option(ENABLE_IVCAM "Enable building with Realsense camera support" OFF) - -if(NOT ENABLE_IVCAM) - obs_status(DISABLED "Realsense camera plugin support") - return() -endif() - -project(win-ivcam) - -find_package(RSSDK REQUIRED) - -if(NOT TARGET RSS::SDK) - obs_status(FATAL_ERROR "win-ivcam -> RSSDK not found.") -endif() - -include(IDLFileHelper) - -add_library(win-ivcam MODULE) -add_library(OBS::ivcam ALIAS win-ivcam) - -add_library(seglibrary INTERFACE) -add_library(Intel::seglibrary ALIAS seglibrary) - -add_idl_files(win-ivcam_seg_library_GENERATED_FILES seg_service/seg_service.idl) - -target_sources( - seglibrary - INTERFACE seg_library/Dependencies.h - seg_library/SerServer.cpp - seg_library/SegServer.h - seg_library/SegServerImpl.cpp - seg_library/SegServerImpl.h - seg_library/SegService.h - seg_library/SegImage.cpp - seg_library/SegImage.h - ${win-ivcam_seg_library_GENERATED_FILES}) - -set(MODULE_DESCRIPTION "OBS Intel(R) RealSense(TM) module") - -configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in - win-ivcam.rc) - -target_sources(win-ivcam PRIVATE realsense.cpp win-ivcam.rc) - -target_link_libraries(win-ivcam OBS::libobs Intel::seglibrary) - -get_target_property(_SEGLIBRARY_SOURCES INTEL::seglibrary INTERFACE_SOURCES) - -foreach(_SEGLIBRARY_SOURCE ${_SEGLIBRARY_SOURCES}) - get_filename_component(_EXT ${_SEGLIBRARY_SOURCE} EXT) - if(${_EXT} STREQUAL "hpp" OR ${_EXT} STREQUAL "h") - source_group("seg_library\\Header Files" FILES ${_SEGLIBRARY_SOURCE}) - elseif(${_EXT} STREQUAL "cpp" OR ${_EXT} STREQUAL "c") - source_group("seg_library\\Source Files" FILES ${_SEGLIBRARY_SOURCE}) - endif() -endforeach() - -if(CMAKE_SIZEOF_VOID_P EQUAL 4) - add_subdirectory(seg_service) -endif() - -setup_plugin_target(win-ivcam) diff --git a/plugins/win-ivcam/realsense.cpp b/plugins/win-ivcam/realsense.cpp deleted file mode 100644 index 83368bc61de76f..00000000000000 --- a/plugins/win-ivcam/realsense.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* -Copyright(c) 2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met : - -- Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation and / -or other materials provided with the distribution. -- Neither the name of Intel Corporation nor the names of its contributors may -be used to endorse or promote products derived from this software without -specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include "seg_library/SegService.h" - -using namespace std; - -#include -#include -#include - -#define do_log(level, format, ...) \ - blog(level, "[win-ivcam (%s): '%s'] " format, \ - __FUNCTION__, obs_source_get_name(source), \ - ##__VA_ARGS__) - -#define warn(format, ...) do_log(LOG_WARNING, format, ##__VA_ARGS__) -#define info(format, ...) do_log(LOG_INFO, format, ##__VA_ARGS__) -#define debug(format, ...) do_log(LOG_DEBUG, format, ##__VA_ARGS__) - -void TerminateProcessByName(wchar_t *procName) -{ - PROCESSENTRY32 entry; - entry.dwSize = sizeof(entry); - - HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); - BOOL hRes = Process32First(snapshot, &entry); - - while (hRes) { - if (wcscmp(entry.szExeFile, procName) == 0) { - HANDLE process = OpenProcess(PROCESS_TERMINATE, 0, - (DWORD)entry.th32ProcessID); - - if (process != NULL) { - TerminateProcess(process, 0); - CloseHandle(process); - } - } - hRes = Process32Next(snapshot, &entry); - } - CloseHandle(snapshot); -} - -struct IVCamSource { - SegServer* pSegServer; - obs_source_t *source; - thread camThread; - atomic stopThread = false; - - void IVCamSource::PushSegmentedFrameData(SegImage *segmented_image) - { - /*uint8_t* pix = (uint8_t*)segmented_image->GetData(); - if (pix != NULL) { - int pixels = segmented_image->Width() * - segmented_image->Height(); - - for (int i = 0; i < pixels; i++) { - if (pix[3]<100) { - pix[0] /= 3; pix[1] /= 2; pix[2] /= 3; - } - pix += 4; - } - }*/ - - obs_source_frame frame = {}; - frame.data[0] = (uint8_t*)segmented_image->GetData(); - frame.linesize[0] = segmented_image->Pitch(); - frame.format = VIDEO_FORMAT_BGRA; - frame.width = segmented_image->Width(); - frame.height = segmented_image->Height(); - frame.timestamp = os_gettime_ns(); - obs_source_output_video(source, &frame); - } - - void IVCamSource::CamThread() - { - pSegServer = SegServer::CreateServer(); - - if (!pSegServer) { - warn("SegServer::CreateServer failed\n"); - return; - } - - SegServer::ServiceStatus status = pSegServer->Init(); - - if (status != SegServer::ServiceStatus::SERVICE_NO_ERROR) { - warn("SegServer initialization error (%d)\n", status); - return; - } - - while (!stopThread) { - SegImage* image = nullptr; - SegServer::ServiceStatus error = - pSegServer->GetFrame(&image); - if (error != SegServer::ServiceStatus::SERVICE_NO_ERROR - || image->Width() == 0 - || image->Height() == 0) { - //warn("AcquireFrame failed (%d)\n", error); - continue; - } - - PushSegmentedFrameData(image); - - delete image; - } - - pSegServer->Stop(); - delete pSegServer; - } - - inline IVCamSource::IVCamSource(obs_source_t* source_) : - source(source_) - { - stopThread = false; - camThread = std::thread(&IVCamSource::CamThread, this); - } - - static void* IVCamSource::CreateIVCamSource(obs_data_t*, - obs_source_t *source) - { - //kill whatever is running just in case - TerminateProcessByName(L"seg_service.exe"); - return new IVCamSource(source); - } - - inline IVCamSource::~IVCamSource() - { - //done using it, kill the seg_service - stopThread = true; - if (camThread.joinable()) camThread.join(); - TerminateProcessByName(L"seg_service.exe"); - } -}; - -static const char *GetIVCamName(void*) -{ - return "Intel(R) RealSense(TM) 3D Camera GreenScreen"; -} - -static void DestroyIVCamSource(void *data) -{ - delete reinterpret_cast(data); -} - -OBS_DECLARE_MODULE() - -bool obs_module_load(void) -{ - obs_source_info info = {}; - info.id = "win-ivcam"; - info.type = OBS_SOURCE_TYPE_INPUT; - info.output_flags = OBS_SOURCE_ASYNC_VIDEO; - info.get_name = GetIVCamName; - info.create = IVCamSource::CreateIVCamSource; - info.destroy = DestroyIVCamSource; - info.icon_type = OBS_ICON_TYPE_CAMERA; - obs_register_source(&info); - return true; -} diff --git a/plugins/win-ivcam/seg_library/Dependencies.h b/plugins/win-ivcam/seg_library/Dependencies.h deleted file mode 100644 index 02a1ce7060cbbf..00000000000000 --- a/plugins/win-ivcam/seg_library/Dependencies.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef DEPENDENCIES_H_ -#define DEPENDENCIES_H_ - -// WinAPI section -#include - -// CRT section -#include -#include -#include -#include - -#endif // DEPENDENCIES_H_ \ No newline at end of file diff --git a/plugins/win-ivcam/seg_library/SegImage.cpp b/plugins/win-ivcam/seg_library/SegImage.cpp deleted file mode 100644 index e6ae0f02198250..00000000000000 --- a/plugins/win-ivcam/seg_library/SegImage.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "SegImage.h" - -SegImage::SegImage() - : m_width(0), m_height(0), m_pitch(0), m_data(nullptr), m_number(0), m_timestamp(0L) {} - -SegImage::SegImage(int width, int height, int pitch, void* data, long long timestamp, int number) - : m_width(width), m_height(height), m_pitch(pitch), m_data(new char[height*pitch]), m_timestamp(timestamp), m_number(number) -{ - memcpy_s(m_data, height*pitch, data, height*pitch); -} - -SegImage::SegImage(SegImage const& src) - : m_width(src.m_width), m_height(src.m_height), m_pitch(src.m_pitch), m_data(new char[src.m_height*src.m_pitch]), - m_timestamp(src.m_timestamp), m_number(src.m_number) -{ - memcpy_s(m_data, m_pitch*m_height, src.m_data, src.m_height*src.m_pitch); -} - -SegImage::~SegImage() -{ - delete[] m_data; -} - -SegImage& SegImage::operator=(const SegImage & src) -{ - if (this != &src) - { - m_width = src.m_width; - m_height = src.m_height; - m_pitch = src.m_pitch; - if (m_data) - { - delete[] m_data; - } - m_data = new char[m_height*m_pitch]; - m_timestamp = src.m_timestamp; - m_number = src.m_number; - memcpy_s(m_data, m_pitch*m_height, src.m_data, m_height*m_pitch); - } - return *this; -} - -int SegImage::Width() -{ - return m_width; -} - -int SegImage::Height() -{ - return m_height; -} - -int SegImage::Pitch() -{ - return m_pitch; -} - -long long SegImage::TimeStamp() -{ - return m_timestamp; -} - -int SegImage::Number() -{ - return m_number; -} - -SegPixel SegImage::Get(int i, int j) -{ - SegPixel result; - result.blue = (((char*)m_data) + j*m_pitch + i * 4)[0]; - result.green = (((char*)m_data) + j*m_pitch + i * 4)[1]; - result.red = (((char*)m_data) + j*m_pitch + i * 4)[2]; - return result; -} diff --git a/plugins/win-ivcam/seg_library/SegImage.h b/plugins/win-ivcam/seg_library/SegImage.h deleted file mode 100644 index 554bae3cd5358b..00000000000000 --- a/plugins/win-ivcam/seg_library/SegImage.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SEG_IMAGE_H_ -#define SEG_IMAGE_H_ - -#include "Dependencies.h" - -struct SegPixel -{ - unsigned char red; - unsigned char green; - unsigned char blue; -}; - -class SegImage -{ -private: - int m_width; - int m_height; - int m_pitch; - long long m_timestamp; - int m_number; - void* m_data; -public: - SegImage(); - SegImage(SegImage const& src); - SegImage(int width, int height, int pitch, void* data, long long timestamp, int number); - ~SegImage(); - - SegImage& operator=(const SegImage & src); - - int Width(); - int Height(); - int Pitch(); - long long TimeStamp(); - int Number(); - SegPixel Get(int i, int j); - void* GetData() { return m_data; }; -}; - -#endif // SEG_IMAGE_H_ diff --git a/plugins/win-ivcam/seg_library/SegServer.h b/plugins/win-ivcam/seg_library/SegServer.h deleted file mode 100644 index 2d792abc4e7109..00000000000000 --- a/plugins/win-ivcam/seg_library/SegServer.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SEG_SERVER_H_ -#define SEG_SERVER_H_ - -#include "Dependencies.h" -#include "SegImage.h" - -#define USE_DEFAULT_PROPERTY_VALUE -1 - -class SegServer -{ -public: - enum ServiceStatus - { - COM_LIB_INIT_ERROR = -1, - SERVICE_INIT_ERROR = -2, - SERVICE_REINIT_ERROR = -3, - SERVICE_FUNC_ERROR = -4, - SHARED_MEMORY_ERROR = -5, - ALLOCATION_FAILURE = -6, - SERVICE_NO_ERROR = 0, - SERVICE_NOT_READY = 1 - }; - - static SegServer* CreateServer(); - static SegServer* GetServerInstance(); - - virtual ServiceStatus Init() = 0; - virtual ServiceStatus Stop() = 0; - - virtual ServiceStatus GetFrame(SegImage** image) = 0; - - virtual void SetFps(int fps) = 0; - virtual int GetFps() = 0; - /** - @brief Set the IVCAM motion range trade off option, ranged from 0 (short range, better motion) to 100 (far range, long exposure). Custom property value used only with 60 fps profile - @param[in] value The motion range trade option. USE_DEFAULT_PROPERTY_VALUE to return default value - */ - virtual void SetIVCAMMotionRangeTradeOff(int value) = 0; - virtual int GetIVCAMMotionRangeTradeOff() = 0; - - virtual ~SegServer() {}; -}; - -#endif // SEG_SERVER_H_ diff --git a/plugins/win-ivcam/seg_library/SegServerImpl.cpp b/plugins/win-ivcam/seg_library/SegServerImpl.cpp deleted file mode 100644 index 3c6004dcb58c48..00000000000000 --- a/plugins/win-ivcam/seg_library/SegServerImpl.cpp +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "SegServerImpl.h" - -SegServerImpl* SegServerImpl::instance = nullptr; - -SegServerImpl::SegServerImpl() -{ - m_comInit = false; - m_serviceConnected = false; - m_sharedBuffer = NULL; -} - -SegServerImpl::~SegServerImpl() -{ - if (m_server) - { - m_server->Release(); - m_server = nullptr; - } - instance = nullptr; -}; - -SegServer* SegServerImpl::CreateServer() -{ - if (instance == nullptr) - { - instance = new SegServerImpl(); - return instance; - } - else - { - return nullptr; - } -} - -SegServer* SegServerImpl::GetServerInstance() -{ - return instance; -} - -SegServerImpl::ServiceStatus SegServerImpl::Init() -{ - if (m_comInit && m_serviceConnected) - return SERVICE_REINIT_ERROR; - GUID guid = { 0 }; - m_bufferName = new wchar_t[40](); - CoCreateGuid(&guid); - StringFromGUID2(guid, m_bufferName, 40); - if (!m_comInit) - { - HRESULT comInit = CoInitializeEx(0, COINIT_MULTITHREADED); - if (FAILED(comInit)) - { - comInit = CoInitialize(0); - if (FAILED(comInit)) - { - return COM_LIB_INIT_ERROR; - } - } - m_comInit = true; - } - - if (!m_serviceConnected) - { - HRESULT instanceCreate = CoCreateInstance(CLSID_SegProc, NULL, CLSCTX_LOCAL_SERVER, IID_ISegProc, (void**)&m_server); - if (FAILED(instanceCreate)) { - return SERVICE_INIT_ERROR; - } - - HRESULT serverInit = m_server->Init(m_bufferName); - if (FAILED(serverInit)) { - return SERVICE_INIT_ERROR; - } - m_serviceConnected = true; - } - return SERVICE_NO_ERROR; -} - -SegServerImpl::ServiceStatus SegServerImpl::Stop() -{ - HRESULT errCode = m_server->Stop(); - if (FAILED(errCode)) { - return SERVICE_FUNC_ERROR; - } - return SERVICE_NO_ERROR; -} - -void SegServerImpl::SetFps(int fps) -{ - m_server->SetFps(fps); -} - -int SegServerImpl::GetFps() -{ - int outFps = -1; - m_server->GetFps(&outFps); - return outFps; -} - -void SegServerImpl::SetIVCAMMotionRangeTradeOff(int value) -{ - m_server->SetIVCAMMotionRangeTradeOff(value); -} - -int SegServerImpl::GetIVCAMMotionRangeTradeOff() -{ - int outPropertyValue = -1; - m_server->GetIVCAMMotionRangeTradeOff(&outPropertyValue); - return outPropertyValue; -} - -SegServerImpl::ServiceStatus SegServerImpl::GetFrame(SegImage** image) -{ - ServiceStatus res = SERVICE_NO_ERROR; - int frameId = -1; - int bufferRealloc = -1; - int frameSize = -1; - if (FAILED(m_server->LockBuffer(&frameId, &frameSize, &bufferRealloc))) - { - return SHARED_MEMORY_ERROR; - } - if (bufferRealloc) - { - HANDLE hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, m_bufferName); - - if (hMapFile == NULL) - { - m_server->UnlockBuffer(); - return SHARED_MEMORY_ERROR; - } - - m_sharedBuffer = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, frameSize * 2); - - if (m_sharedBuffer == NULL) - { - CloseHandle(hMapFile); - m_server->UnlockBuffer(); - return SHARED_MEMORY_ERROR; - } - CloseHandle(hMapFile); - } - - if(m_sharedBuffer && frameId != -1 && frameSize != -1) - { - size_t offset = (size_t)frameId * frameSize; - //int width = ((int*)(m_sharedBuffer + offset))[0]; - //int height = ((int*)(m_sharedBuffer + offset))[1]; - //int pitch = ((int*)(m_sharedBuffer + offset))[2]; - FrameHeader* fhPtr = (FrameHeader*)(m_sharedBuffer + offset); - int width = fhPtr->width; - int height = fhPtr->height; - int pitch = fhPtr->pitch; - long long timestamp = fhPtr->timestamp; - int frameNumber = fhPtr->frameNumber; - void* data = (void*)(m_sharedBuffer + offset + sizeof(FrameHeader)); - SegImage* result = nullptr; - try - { - result = new SegImage(width, height, pitch, data, timestamp, frameNumber); - } - catch (std::bad_alloc &/*e*/) - { - res = ALLOCATION_FAILURE; - result = NULL; - } - *image = result; - } - else - { - res = SERVICE_NOT_READY; - } - m_server->UnlockBuffer(); - return res; -} diff --git a/plugins/win-ivcam/seg_library/SegServerImpl.h b/plugins/win-ivcam/seg_library/SegServerImpl.h deleted file mode 100644 index 1373ccbc28b710..00000000000000 --- a/plugins/win-ivcam/seg_library/SegServerImpl.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SEG_SERVER_IMPL_H_ -#define SEG_SERVER_IMPL_H_ - -#include "Dependencies.h" -#include "SegImage.h" -#include "SegServer.h" - -#include "seg_service.h" - -typedef struct -{ - int width; - int height; - int pitch; - long long timestamp; - int frameNumber; -} FrameHeader; - -class SegServerImpl : public SegServer -{ -private: - static SegServerImpl* instance; - ISegProc* m_server; - - bool m_comInit; - bool m_serviceConnected; - - LPWSTR m_bufferName; - LPCTSTR m_sharedBuffer; - - SegServerImpl(); - SegServerImpl(SegServerImpl const& src) = delete; - SegServerImpl& operator=(const SegServerImpl & src) = delete; - -public: - virtual ~SegServerImpl(); - static SegServer* CreateServer(); - static SegServer* GetServerInstance(); - - ServiceStatus Init(); - ServiceStatus Stop(); - void SetFps(int fps) override; - int GetFps() override; - void SetIVCAMMotionRangeTradeOff(int value) override; - int GetIVCAMMotionRangeTradeOff() override; - - ServiceStatus GetFrame(SegImage** image); -}; - -#endif // SEG_SERVER_IMPL_H_ diff --git a/plugins/win-ivcam/seg_library/SegService.h b/plugins/win-ivcam/seg_library/SegService.h deleted file mode 100644 index d374bb100dc974..00000000000000 --- a/plugins/win-ivcam/seg_library/SegService.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SEG_SERVICE_H_ -#define SEG_SERVICE_H_ - -#include "SegImage.h" -#include "SegServer.h" - -#endif // SEG_SERVICE_H_ diff --git a/plugins/win-ivcam/seg_library/SerServer.cpp b/plugins/win-ivcam/seg_library/SerServer.cpp deleted file mode 100644 index a7bc5cfbc55772..00000000000000 --- a/plugins/win-ivcam/seg_library/SerServer.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "SegServer.h" -#include "SegServerImpl.h" - -SegServer* SegServer::CreateServer() -{ - return SegServerImpl::CreateServer(); -} - -SegServer* SegServer::GetServerInstance() -{ - return SegServerImpl::GetServerInstance(); -} diff --git a/plugins/win-ivcam/seg_service/CMakeLists.txt b/plugins/win-ivcam/seg_service/CMakeLists.txt deleted file mode 100644 index f262f287010063..00000000000000 --- a/plugins/win-ivcam/seg_service/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -project(seg_service) - -find_package(RSSDK REQUIRED) - -if(NOT TARGET RSS::SDK) - message(FATAL_ERROR "OBS: - RSSDK not found") -endif() - -include(IDLFileHelper) - -add_executable(seg_service WIN32) - -target_sources( - seg_service - PRIVATE SegProc.rgs - seg_service.rgs - seg_service.cpp - SegProc.cpp - stdafx.cpp - seg_service.rc - resource.h - SegProc.h - stdafx.h - targetver.h - xdlldata.h) - -add_idl_files_with_tlb(seg_service_GENERATED_FILES seg_service.idl) - -get_target_property(_RSSSDK_INCLUDE_DIRECTORY RSS::SDK - INTERFACE_INCLUDE_DIRECTORIES) - -target_include_directories(seg_service PRIVATE ${_RSSSDK_INCLUDE_DIRECTORY}) - -if(MSVC) - target_compile_definitions(seg_service - PRIVATE "$,/MTd,/MT>") -endif() diff --git a/plugins/win-ivcam/seg_service/SegProc.cpp b/plugins/win-ivcam/seg_service/SegProc.cpp deleted file mode 100644 index 808a330a59b574..00000000000000 --- a/plugins/win-ivcam/seg_service/SegProc.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// SegProc.cpp : Implementation of CSegProc - -#include "stdafx.h" -#include "SegProc.h" - - -// CSegProc - diff --git a/plugins/win-ivcam/seg_service/SegProc.h b/plugins/win-ivcam/seg_service/SegProc.h deleted file mode 100644 index 92cffc1e6a6106..00000000000000 --- a/plugins/win-ivcam/seg_service/SegProc.h +++ /dev/null @@ -1,508 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// SegProc.h : Declaration of the CSegProc - -#pragma once -#include "resource.h" // main symbols -#include "seg_service.h" - -#include "pxcsession.h" -#include "pxcsensemanager.h" -#include "pxc3dseg.h" - -#include - -#include -#include -#include - -#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA) -#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms." -#endif - -using namespace ATL; - - -/* Number of milliseconds service waits for worker thread to start */ -#define START_TIMEOUT 2000 -#define USE_DEFAULT_PROPERTY_VALUE -1 - -// CSegProc - -typedef struct _frameHeader -{ - int width; - int height; - int pitch; - long long timestamp; - int frameNumber; -} FrameHeader; - -class ATL_NO_VTABLE CSegProc : - public CComObjectRootEx, - public CComCoClass, - public IDispatchImpl, - public PXCSenseManager::Handler -{ -private: - enum { - DEPTH_PROPERTY_NORMAL_MODE = 0x03, - DEPTH_PROPERTY_HDR_MODE = 0x200 - }; - // Service state section - HANDLE m_loopThreadHandle; - bool m_procRun; - HANDLE m_hStartedEvt; - - // Shared memory section - std::wstring m_bufferName; - HANDLE m_sharedBufferHandle; - LPCTSTR m_sharedBuffer; - bool m_bufferRealloc; - - // Frames section - int m_currentFrame; - int m_frameToRead; - size_t m_frameSize; - const static size_t headerSize = sizeof(FrameHeader); - CRITICAL_SECTION m_frameAccess[2]; - - // RSSDK section - PXCSenseManager* m_senseManager; - PXC3DSeg* m_segModule; - int m_fps; - int m_motionRangeTradeOff; - - bool m_processing; - bool m_isPause; - std::condition_variable m_cvPause; - std::mutex m_pauseMtx; - - pxcStatus PXCAPI OnModuleSetProfile(pxcUID /*mid*/, PXCBase* /*module*/) override - { - PXCCaptureManager* captureMgr = m_senseManager->QueryCaptureManager(); - if (!captureMgr || m_fps != 60) - return PXC_STATUS_NO_ERROR; - PXCCapture::Device* device = captureMgr->QueryDevice(); - PXCCapture::Device::PropertyInfo propInfo = device->QueryIVCAMMotionRangeTradeOffInfo(); - - int value = m_motionRangeTradeOff; - if (m_motionRangeTradeOff == USE_DEFAULT_PROPERTY_VALUE) - value = (int)propInfo.defaultValue; - - device->SetIVCAMMotionRangeTradeOff(value); - return PXC_STATUS_NO_ERROR; - } - - pxcStatus senseMgrInit() - { - pxcStatus status = PXC_STATUS_NO_ERROR; - status = m_senseManager->Enable3DSeg(nullptr); - if (status != PXC_STATUS_NO_ERROR) - return status; - m_segModule = m_senseManager->Query3DSeg(); - if (!m_segModule) - return PXC_STATUS_DATA_UNAVAILABLE; - - - - for (int i = 0; ; i++) { - pxcStatus status = PXC_STATUS_NO_ERROR; - PXCVideoModule::DataDesc currentProfile = {}; - status = m_segModule->QueryInstance()->QueryCaptureProfile(i, ¤tProfile); - if (status != PXC_STATUS_NO_ERROR) - return status; - if ((currentProfile.streams.depth.propertySet != DEPTH_PROPERTY_NORMAL_MODE) - || (currentProfile.streams.depth.options & PXCCapture::Device::STREAM_OPTION_DEPTH_CONFIDENCE)) { - continue; - } - - m_senseManager->QueryCaptureManager()->FilterByStreamProfiles(nullptr); - m_senseManager->QueryCaptureManager()->FilterByStreamProfiles(nullptr); - - m_senseManager->QueryCaptureManager()->FilterByStreamProfiles(PXCCapture::StreamType::STREAM_TYPE_COLOR, 0, 0, (pxcF32)m_fps); - m_senseManager->QueryCaptureManager()->FilterByStreamProfiles(PXCCapture::StreamType::STREAM_TYPE_DEPTH, 0, 0, (pxcF32)m_fps); - - status = m_senseManager->EnableStreams(¤tProfile); - if (status != PXC_STATUS_NO_ERROR) - return status; - status = m_senseManager->Init(this); - if (status == PXC_STATUS_NO_ERROR) { - m_isPause = false; - break; - } - else { - continue; - } - } - - return status; - } - - HRESULT reinit() - { - m_isPause = true; - //wait_for_end_processing - while (m_processing) - std::this_thread::yield(); - - std::unique_lock lck(m_pauseMtx); - m_senseManager->Close(); - - senseMgrInit(); - m_isPause = false; - m_cvPause.notify_one(); - return S_OK; - } - - /* ----------------------------------------------------------------- - * Modification by Jim - * - * To avoid linker issues with the RSSDK .lib files, load via - * LoadLibrary - * ----------------------------------------------------------------- */ - typedef int (WINAPI *PXCSessionCreateProc)(PXCSession **output); - - static HMODULE GetLib() - { - HMODULE lib = nullptr; - HKEY key = nullptr; - wchar_t path[1024]; - - LONG res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Intel\\RSSDK\\Dispatch", 0, KEY_QUERY_VALUE, &key); - if (res != ERROR_SUCCESS) { - res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Intel\\RSSDK\\v10\\Dispatch", 0, KEY_QUERY_VALUE, &key); - } - - if (res != ERROR_SUCCESS) - return nullptr; - - DWORD size = 1024; - res = RegQueryValueExW(key, L"Core", nullptr, nullptr, (LPBYTE)path, &size); - if (res == ERROR_SUCCESS) { - lib = LoadLibrary(path); - } - - RegCloseKey(key); - return lib; - } - - static PXCSenseManager* CreateSessionInstance() - { - static bool initialized = false; - static HMODULE lib = nullptr; - static PXCSessionCreateProc create = nullptr; - - if (!initialized) { - lib = GetLib(); - create = (PXCSessionCreateProc)GetProcAddress(lib, "PXCSession_Create"); - initialized = true; - } - - if (!lib || !create) - return nullptr; - - PXCSession *session = nullptr; - int test = create(&session); - if (test != 0 || !session) - return nullptr; - - PXCSenseManager *sm = session->CreateSenseManager(); - session->Release(); - return sm; - } - - /* ----------------------------------------------------------------- - * End Modification - * ----------------------------------------------------------------- */ - -public: - CSegProc() - : m_isPause(true) - , m_fps(0) - , m_processing(false) - , m_motionRangeTradeOff(USE_DEFAULT_PROPERTY_VALUE) - { - } - - DECLARE_REGISTRY_RESOURCEID(IDR_SEGPROC) - - DECLARE_NOT_AGGREGATABLE(CSegProc) - - BEGIN_COM_MAP(CSegProc) - COM_INTERFACE_ENTRY(ISegProc) - COM_INTERFACE_ENTRY(IDispatch) - END_COM_MAP() - - DECLARE_PROTECT_FINAL_CONSTRUCT() - - HRESULT FinalConstruct() - { - return S_OK; - } - - void FinalRelease() - { - } - - HRESULT STDMETHODCALLTYPE Init(LPCWSTR bufferName) - { - m_frameSize = 16; - m_frameToRead = -1; - - m_bufferName = bufferName; - - m_sharedBufferHandle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 2 * m_frameSize, m_bufferName.c_str()); - if (m_sharedBufferHandle == NULL) - return E_FAIL; - m_sharedBuffer = (LPTSTR)MapViewOfFile(m_sharedBufferHandle, FILE_MAP_ALL_ACCESS, 0, 0, 32); - if (m_sharedBuffer == NULL) - { - CloseHandle(m_sharedBufferHandle); - return E_FAIL; - } - m_procRun = false; - - /* ----------------------------------------------------------------- - * Modification by Jim - * - * To avoid linker issues with the RSSDK .lib files, load via - * LoadLibrary. - * ----------------------------------------------------------------- */ - m_senseManager = CreateSessionInstance(); - /* ----------------------------------------------------------------- - * End Modification - * ----------------------------------------------------------------- */ - if (!m_senseManager) - return E_FAIL; - - pxcStatus status = senseMgrInit(); - if (status < PXC_STATUS_NO_ERROR) - return E_FAIL; - - m_hStartedEvt = CreateEvent(NULL, FALSE, FALSE, TEXT("StartEvent")); - if (m_hStartedEvt == NULL) - { - return E_FAIL; - } - - if (m_procRun) - return E_FAIL; - m_loopThreadHandle = CreateThread(NULL, 0, &CSegProc::LoopStub, this, 0, NULL); - if (m_loopThreadHandle == NULL) - { - return E_OUTOFMEMORY; - } - /* Waiting thread for start */ - DWORD dwWaitResult = WaitForSingleObject(m_hStartedEvt, INFINITE); - switch (dwWaitResult) - { - case WAIT_OBJECT_0: - return S_OK; - } - return E_FAIL; - } - - static DWORD WINAPI LoopStub(LPVOID lpParam) - { - if (!lpParam) return (DWORD)-1; - return ((CSegProc*)lpParam)->Loop(NULL); - } - - DWORD WINAPI Loop(LPVOID /*lpParam*/) - { - static const int headerSize = sizeof(FrameHeader); - InitializeCriticalSection(&m_frameAccess[0]); - InitializeCriticalSection(&m_frameAccess[1]); - // Loop through frames - m_procRun = true; - SetEvent(m_hStartedEvt); - m_currentFrame = 0; - int frameCounter = 0; - while (m_procRun) - { - m_processing = false; - - if (m_isPause) - { - std::unique_lock lck(m_pauseMtx); - while (m_isPause) - m_cvPause.wait(lck); - } - - m_processing = true; - if (m_senseManager->AcquireFrame(true) != PXC_STATUS_NO_ERROR) - { - continue; - } - - EnterCriticalSection(&m_frameAccess[m_currentFrame]); - { - PXCImage* segImage = m_segModule->AcquireSegmentedImage(); - if (segImage) - { - PXCImage::ImageData segData; - ZeroMemory(&segData, sizeof(segData)); - pxcStatus sts = segImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PixelFormat::PIXEL_FORMAT_RGB32, &segData); - if (sts >= PXC_STATUS_NO_ERROR) - { - int newFrameSize = segData.pitches[0] * segImage->QueryInfo().height + headerSize; - if (newFrameSize != (int)m_frameSize) - { - EnterCriticalSection(&m_frameAccess[1 - m_currentFrame]); - ResizeBuffer(newFrameSize * 2); - m_frameSize = newFrameSize; - m_bufferRealloc = true; - LeaveCriticalSection(&m_frameAccess[1 - m_currentFrame]); - } - int offset = m_frameSize*m_currentFrame; - //((int*)m_sharedBuffer)[offset+0] = segImage->QueryInfo().width; - //((int*)m_sharedBuffer)[offset+1] = segImage->QueryInfo().height; - //((int*)m_sharedBuffer)[offset+2] = segData.pitches[0]; - char *ptr = ((char*)m_sharedBuffer) + offset; - PXCImage::ImageInfo info = segImage->QueryInfo(); - FrameHeader *fhPtr = (FrameHeader*)ptr; - fhPtr->width = info.width; - fhPtr->height = info.height; - fhPtr->pitch = segData.pitches[0]; - fhPtr->timestamp = segImage->QueryTimeStamp(); - fhPtr->frameNumber = frameCounter; - memcpy_s((void*)((char*)m_sharedBuffer + offset + headerSize), m_frameSize - headerSize, segData.planes[0], m_frameSize - headerSize); - segImage->ReleaseAccess(&segData); - } - segImage->Release(); - } - } - m_currentFrame = 1 - m_currentFrame; - LeaveCriticalSection(&m_frameAccess[m_currentFrame]); - - m_senseManager->ReleaseFrame(); - frameCounter++; - } - - DeleteCriticalSection(&m_frameAccess[0]); - DeleteCriticalSection(&m_frameAccess[1]); - - return 0; - } - - // Bad function for the reason of outside syncronization - HRESULT ResizeBuffer(size_t newSize) - { - UnmapViewOfFile(m_sharedBuffer); - CloseHandle(m_sharedBufferHandle); - m_sharedBufferHandle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, newSize, m_bufferName.c_str()); - - if (!m_sharedBufferHandle) - return E_ACCESSDENIED; - m_sharedBuffer = (LPTSTR)MapViewOfFile(m_sharedBufferHandle, FILE_MAP_ALL_ACCESS, 0, 0, newSize); - - if (!m_sharedBuffer) - { - CloseHandle(m_sharedBufferHandle); - return E_OUTOFMEMORY; - } - ZeroMemory((void*)m_sharedBuffer, newSize); - return S_OK; - } - - HRESULT STDMETHODCALLTYPE LockBuffer(int* frameId, int* frameSize, int* bufferRealloc) - { - if (!m_procRun || m_frameToRead != -1) - return E_FAIL; - m_frameToRead = 1 - m_currentFrame; - EnterCriticalSection(&m_frameAccess[m_frameToRead]); - *frameId = m_frameToRead; - if (m_bufferRealloc) - { - *bufferRealloc = (int)m_bufferRealloc; - m_bufferRealloc = false; - } - else - *bufferRealloc = false; - *frameSize = m_frameSize; - return S_OK; - } - - HRESULT STDMETHODCALLTYPE UnlockBuffer() - { - if (!m_procRun || m_frameToRead == -1) - { - return E_FAIL; - } - LeaveCriticalSection(&m_frameAccess[m_frameToRead]); - m_frameToRead = -1; - return S_OK; - } - - HRESULT STDMETHODCALLTYPE Stop() - { - if (!m_procRun) - { - return E_FAIL; - } - m_procRun = false; - WaitForSingleObject(m_loopThreadHandle, INFINITE); - m_senseManager->Close(); - return S_OK; - } - - HRESULT STDMETHODCALLTYPE SetFps(int fps) - { - if (m_fps == fps) - return S_OK; - m_fps = fps; - if (m_procRun) - return reinit(); - return S_OK; - } - - HRESULT STDMETHODCALLTYPE GetFps(int* fps) - { - *fps = m_fps; - return S_OK; - } - - HRESULT STDMETHODCALLTYPE SetIVCAMMotionRangeTradeOff(int value) - { - if (m_motionRangeTradeOff == value) - return S_OK; - m_motionRangeTradeOff = value; - if (m_procRun) - return reinit(); - return S_OK; - } - - HRESULT STDMETHODCALLTYPE GetIVCAMMotionRangeTradeOff(int* value) - { - *value = m_motionRangeTradeOff; - return S_OK; - } -}; - -OBJECT_ENTRY_AUTO(__uuidof(SegProc), CSegProc) diff --git a/plugins/win-ivcam/seg_service/SegProc.rgs b/plugins/win-ivcam/seg_service/SegProc.rgs deleted file mode 100644 index 6c8b66fdf394b0..00000000000000 --- a/plugins/win-ivcam/seg_service/SegProc.rgs +++ /dev/null @@ -1,16 +0,0 @@ -HKCR -{ - NoRemove CLSID - { - ForceRemove {66917998-CA70-42A6-B8AE-A3A5126123C7} = s 'SegProc Class' - { - ForceRemove Programmable - LocalServer32 = s '%MODULE%' - { - val ServerExecutable = s '%MODULE_RAW%' - } - TypeLib = s '{64BC16FD-9E3C-4904-B9BA-A360310BCFEC}' - Version = s '1.0' - } - } -} diff --git a/plugins/win-ivcam/seg_service/resource.h b/plugins/win-ivcam/seg_service/resource.h deleted file mode 100644 index e4ea7970d69d75..00000000000000 --- a/plugins/win-ivcam/seg_service/resource.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by seg_service.rc -// -#define IDS_PROJNAME 100 -#define IDR_SEG_SERVICE 101 -#define IDR_SEGPROC 106 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 201 -#define _APS_NEXT_COMMAND_VALUE 32768 -#define _APS_NEXT_CONTROL_VALUE 201 -#define _APS_NEXT_SYMED_VALUE 107 -#endif -#endif diff --git a/plugins/win-ivcam/seg_service/seg_service.cpp b/plugins/win-ivcam/seg_service/seg_service.cpp deleted file mode 100644 index a0f9a1eb9bd5ec..00000000000000 --- a/plugins/win-ivcam/seg_service/seg_service.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// seg_service.cpp : Implementation of WinMain - - -#include "stdafx.h" -#include "resource.h" -#include "seg_service.h" -#include "xdlldata.h" - -using namespace ATL; - - -class Cseg_serviceModule : public ATL::CAtlExeModuleT< Cseg_serviceModule > -{ -public : - DECLARE_LIBID(LIBID_seg_serviceLib) - DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SEG_SERVICE, "{B5EB3281-4ED1-4777-8ACD-99162EB15E81}") - }; - -Cseg_serviceModule _AtlModule; - - - -// -extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, - LPTSTR /*lpCmdLine*/, int nShowCmd) -{ - return _AtlModule.WinMain(nShowCmd); -} - diff --git a/plugins/win-ivcam/seg_service/seg_service.idl b/plugins/win-ivcam/seg_service/seg_service.idl deleted file mode 100644 index 7ff0b5b95dd19d..00000000000000 --- a/plugins/win-ivcam/seg_service/seg_service.idl +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// seg_service.idl : IDL source for seg_service -// - -// This file will be processed by the MIDL tool to -// produce the type library (seg_service.tlb) and marshalling code. - -import "oaidl.idl"; -import "ocidl.idl"; - -[ - object, - uuid(ADD60B51-95C7-4232-84B0-3CCBBEA7147C), - dual, - nonextensible, - pointer_default(unique) -] -interface ISegProc : IDispatch{ - HRESULT Init(LPCWSTR bufferName); - HRESULT Stop(); - HRESULT LockBuffer(int* frame, int* bufferRealloc, int* frameSize); - HRESULT SetFps(int fps); - HRESULT GetFps(int* fps); - HRESULT SetIVCAMMotionRangeTradeOff(int value); - HRESULT GetIVCAMMotionRangeTradeOff(int* value); - HRESULT UnlockBuffer(); -}; -[ - uuid(64BC16FD-9E3C-4904-B9BA-A360310BCFEC), - version(1.0), -] -library seg_serviceLib -{ - importlib("stdole2.tlb"); - [ - uuid(66917998-CA70-42A6-B8AE-A3A5126123C7) - ] - coclass SegProc - { - [default] interface ISegProc; - }; -}; - diff --git a/plugins/win-ivcam/seg_service/seg_service.rc b/plugins/win-ivcam/seg_service/seg_service.rc deleted file mode 100644 index 157522c746bb66c3bbb6488e1c7c9fc61d0e1dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6094 zcmdUzU2oz>6o$`rrTz!6bJJBi!Z4}bIU}c$MX3m^BbIyA{#{d3vU}|1UH_-Esh2gsvWyVVeF3h7u#7h7Z1=1xi6q?~ zINzk{=U{jDPpQ*JU}Xjx?y+hL4kG&wOwQKjP`S z^n1jTpX?2D33Nxb6k}$6)XC1Wjj!z{nggQqZCw-!h*hh%fzImUmFADoc-KWT^`g~N zof$6daFrcoKOdd6N^$QcdnhAq6AdqjK^NfKXQ)ips>~KU#8<`07#?+e6#aeVtfwi* z$k@v9bki%x9-yK_A1OlM975y;Qgk;$sV6Epn}15x5__Xxl})6XJ40WfH;t zFMEsc_8oWc$05!tA9RQ-=fstwoEaz2q4BhS0-l7i&Gd&k`rxO<6=%rjdA~zOJ?~a) zGHng1P=)iN4B5QTFh#1cb9J;-J~~6M(oBp5OMFE>ev5_fIN1a{&Cu4ISud|gel@q? z6-BN($)Ww|PISd@kyEy&Dw>Dc(2lU9s#fVBMs8KN57Y-U`y1R{(wi`@Y#TetRYly} zXZpI0%sJhI`&C8ZQC%%f^?pGoZMf!dD}hthz5{4=8%k(r4k_^~alc~p+I~mVs?mMD zr#q0MmQFEqSs+O1XR~t;+G*RdPYD&34~+m}tUNH`R<^>Uy%T&l|d} z?r$aS*@~O|NHPc1sF%m*m($OCcAO*UBN|wi>`>H46&|;-MRBi}V=Ak|g3Ze##W*rT ze~Tw=>Qvjtr6Q_^a8u++u~9xA$cvRFeAH5}L7k|GoJVXXZT3&|dcUR|ue+qGXnh?S zkY9rQ;VeCJ;()xKI6B`B$ih8*QBipPS?9MtzuvE})KmedE6B&?@bp@!wvO z#KjqpaD6dYmmuh7H|-mw3$1RPSw7c2=aQ_WoE|9D>h-o)h1P|t>29eVH&dPGWeL@O z-UdIju1SSeg$8epIve}AQ}mzuD*MZPDcDWhNvdFt&~AIj)Vke1T{xxM|NF&K_r=X$ eEURyZby+vu3xoD|Ta)!(GNTgEm-y%2N&f@d;o-di diff --git a/plugins/win-ivcam/seg_service/seg_service.rgs b/plugins/win-ivcam/seg_service/seg_service.rgs deleted file mode 100644 index e7d37400e19a24..00000000000000 --- a/plugins/win-ivcam/seg_service/seg_service.rgs +++ /dev/null @@ -1,3 +0,0 @@ -HKCR -{ -} diff --git a/plugins/win-ivcam/seg_service/stdafx.cpp b/plugins/win-ivcam/seg_service/stdafx.cpp deleted file mode 100644 index 2964428197f6ac..00000000000000 --- a/plugins/win-ivcam/seg_service/stdafx.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// stdafx.cpp : source file that includes just the standard includes -// seg_service.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" diff --git a/plugins/win-ivcam/seg_service/stdafx.h b/plugins/win-ivcam/seg_service/stdafx.h deleted file mode 100644 index 48d7dbfb741f4b..00000000000000 --- a/plugins/win-ivcam/seg_service/stdafx.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, -// but are changed infrequently - -#pragma once - -#ifndef STRICT -#define STRICT -#endif - -#include "targetver.h" - -#define _ATL_APARTMENT_THREADED - -#define _ATL_NO_AUTOMATIC_NAMESPACE - -#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit - - -#define ATL_NO_ASSERT_ON_DESTROY_NONEXISTENT_WINDOW - -#include "resource.h" -#include -#include -#include diff --git a/plugins/win-ivcam/seg_service/targetver.h b/plugins/win-ivcam/seg_service/targetver.h deleted file mode 100644 index dc445f096b8901..00000000000000 --- a/plugins/win-ivcam/seg_service/targetver.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#pragma once - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include diff --git a/plugins/win-ivcam/seg_service/xdlldata.c b/plugins/win-ivcam/seg_service/xdlldata.c deleted file mode 100644 index b1ed0761b1bebe..00000000000000 --- a/plugins/win-ivcam/seg_service/xdlldata.c +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -// wrapper for dlldata.c - -#ifdef _MERGE_PROXYSTUB // merge proxy stub DLL - -#define REGISTER_PROXY_DLL //DllRegisterServer, etc. - -#define _WIN32_WINNT 0x0500 //for WinNT 4.0 or Win95 with DCOM -#define USE_STUBLESS_PROXY //defined only with MIDL switch /Oicf - -#pragma comment(lib, "rpcns4.lib") -#pragma comment(lib, "rpcrt4.lib") - -#define ENTRY_PREFIX Prx - -#include "dlldata.c" -#include "seg_service_p.c" - -#endif //_MERGE_PROXYSTUB diff --git a/plugins/win-ivcam/seg_service/xdlldata.h b/plugins/win-ivcam/seg_service/xdlldata.h deleted file mode 100644 index 56b117ea8be292..00000000000000 --- a/plugins/win-ivcam/seg_service/xdlldata.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright (c) 2015-2016, Intel Corporation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Intel Corporation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#pragma once - -#ifdef _MERGE_PROXYSTUB - -extern "C" -{ -BOOL WINAPI PrxDllMain(HINSTANCE hInstance, DWORD dwReason, - LPVOID lpReserved); -STDAPI PrxDllCanUnloadNow(void); -STDAPI PrxDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv); -STDAPI PrxDllRegisterServer(void); -STDAPI PrxDllUnregisterServer(void); -} - -#endif From d405193aeb0e8f0e26147a63ad40484f8858c318 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Mon, 16 Jan 2023 17:12:02 +0100 Subject: [PATCH 0229/2225] UI: Only set portable mode variable if supported Previously, all the functions of portable mode wouldn't work if compiled without it, but the log still show it as enabled if the argument was set. This could lead to confusion. Additionally, we don't even show the option in the help string (--help), so it should just be a no-op. --- UI/obs-app.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 0deda133bd1c71..c6f9875e8fbbd7 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -3222,12 +3222,14 @@ int main(int argc, char *argv[]) obs_set_cmdline_args(argc, argv); for (int i = 1; i < argc; i++) { - if (arg_is(argv[i], "--portable", "-p")) { - portable_mode = true; - - } else if (arg_is(argv[i], "--multi", "-m")) { + if (arg_is(argv[i], "--multi", "-m")) { multi = true; +#if ALLOW_PORTABLE_MODE + } else if (arg_is(argv[i], "--portable", "-p")) { + portable_mode = true; + +#endif } else if (arg_is(argv[i], "--verbose", nullptr)) { log_verbose = true; From 5d0a1c0010f9bd3d89c8e986c3a69eed73191b2b Mon Sep 17 00:00:00 2001 From: gxalpha Date: Wed, 18 Jan 2023 11:30:35 +0100 Subject: [PATCH 0230/2225] UI: Don't load global plugins in portable mode Portable mode is meant to be separated from the rest of the system, and as such it doesn't make sense to load globally installed plugins there. On Windows, there currently are only two major plugins that install themselves there. Plugins installing themselves there is good, but it currently also means that even portable instances load them which can make testing and debugging in a clean environment annoying. --- UI/window-basic-main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 5f537befe3e6d7..effbbae98100e3 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -178,6 +178,9 @@ static void AddExtraModulePaths() data_path_with_module_suffix.c_str()); } + if (portable_mode) + return; + char base_module_dir[512]; #if defined(_WIN32) int ret = GetProgramDataPath(base_module_dir, sizeof(base_module_dir), From 2a2d8fc1bb2943d798aab3747b262b158aa9add2 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 24 Feb 2023 14:22:48 +0100 Subject: [PATCH 0231/2225] UI: Remove mf_aac references --- UI/audio-encoders.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/UI/audio-encoders.cpp b/UI/audio-encoders.cpp index 4423cd17e4fba0..109627fed5957e 100644 --- a/UI/audio-encoders.cpp +++ b/UI/audio-encoders.cpp @@ -139,7 +139,6 @@ static void PopulateBitrateMap() call_once(once, []() { const string encoders[] = { "ffmpeg_aac", - "mf_aac", "libfdk_aac", "CoreAudio_AAC", }; @@ -175,10 +174,6 @@ static void PopulateBitrateMap() if (strcmp(GetCodec(encoder.c_str()), "AAC") != 0) continue; - // disable mf_aac if audio output is not stereo nor mono - if (output_channels >= 3 && encoder == "mf_aac") - continue; - HandleEncoderProperties(encoder.c_str()); } From 8abc3528cf6d371184a0499cb4669afb019251ae Mon Sep 17 00:00:00 2001 From: columbarius Date: Fri, 11 Nov 2022 23:41:09 +0100 Subject: [PATCH 0232/2225] linux-pipewire: Read buffer transformation from PipeWire PipeWire allows since 0.3.62 [1] to attach metadata to a buffer describing a transformation of the buffercontent. Clients should then undo that transformation to import it correctly. We can enable this feature using macro guards and runtime server version checks on supported systems. [1] https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1423 --- plugins/linux-pipewire/pipewire.c | 147 ++++++++++++++++++++++++++---- 1 file changed, 130 insertions(+), 17 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 9b325d3985a4a6..444259b965c12e 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -30,11 +30,30 @@ #include #include #include +#include #include #include #include #include +#if !PW_CHECK_VERSION(0, 3, 62) +enum spa_meta_videotransform_value { + SPA_META_TRANSFORMATION_None = 0, /**< no transform */ + SPA_META_TRANSFORMATION_90, /**< 90 degree counter-clockwise */ + SPA_META_TRANSFORMATION_180, /**< 180 degree counter-clockwise */ + SPA_META_TRANSFORMATION_270, /**< 270 degree counter-clockwise */ + SPA_META_TRANSFORMATION_Flipped, /**< 180 degree flipped around the vertical axis. Equivalent + * to a reflexion through the vertical line splitting the + * bufffer in two equal sized parts */ + SPA_META_TRANSFORMATION_Flipped90, /**< flip then rotate around 90 degree counter-clockwise */ + SPA_META_TRANSFORMATION_Flipped180, /**< flip then rotate around 180 degree counter-clockwise */ + SPA_META_TRANSFORMATION_Flipped270, /**< flip then rotate around 270 degree counter-clockwise */ +}; + +#define SPA_META_VideoTransform 8 + +#endif + #define CURSOR_META_SIZE(width, height) \ (sizeof(struct spa_meta_cursor) + sizeof(struct spa_meta_bitmap) + \ width * height * 4) @@ -71,6 +90,8 @@ struct _obs_pipewire { struct spa_video_info format; + enum spa_meta_videotransform_value transform; + struct { bool valid; int x, y; @@ -454,6 +475,7 @@ static void on_process_cb(void *user_data) uint32_t drm_format; struct spa_meta_header *header; struct spa_meta_region *region; + struct spa_meta_videotransform *video_transform; struct spa_buffer *buffer; struct pw_buffer *b; bool swap_red_blue = false; @@ -605,6 +627,14 @@ static void on_process_cb(void *user_data) obs_pw->crop.valid = false; } + /* Video Transform */ + video_transform = spa_buffer_find_meta_data( + buffer, SPA_META_VideoTransform, sizeof(*video_transform)); + if (video_transform) + obs_pw->transform = video_transform->transform; + else + obs_pw->transform = SPA_META_TRANSFORMATION_None; + read_metadata: /* Cursor */ @@ -656,7 +686,8 @@ static void on_param_changed_cb(void *user_data, uint32_t id, { obs_pipewire *obs_pw = user_data; struct spa_pod_builder pod_builder; - const struct spa_pod *params[4]; + const struct spa_pod *params[5]; + uint32_t n_params = 0; uint32_t buffer_types; uint8_t params_buffer[1024]; int result; @@ -705,14 +736,14 @@ static void on_param_changed_cb(void *user_data, uint32_t id, /* Video crop */ pod_builder = SPA_POD_BUILDER_INIT(params_buffer, sizeof(params_buffer)); - params[0] = spa_pod_builder_add_object( + params[n_params++] = spa_pod_builder_add_object( &pod_builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, SPA_POD_Id(SPA_META_VideoCrop), SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_region))); /* Cursor */ - params[1] = spa_pod_builder_add_object( + params[n_params++] = spa_pod_builder_add_object( &pod_builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Cursor), SPA_PARAM_META_size, @@ -721,18 +752,29 @@ static void on_param_changed_cb(void *user_data, uint32_t id, CURSOR_META_SIZE(1024, 1024))); /* Buffer options */ - params[2] = spa_pod_builder_add_object( + params[n_params++] = spa_pod_builder_add_object( &pod_builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, SPA_PARAM_BUFFERS_dataType, SPA_POD_Int(buffer_types)); /* Meta header */ - params[3] = spa_pod_builder_add_object( + params[n_params++] = spa_pod_builder_add_object( &pod_builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Header), SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header))); - pw_stream_update_params(obs_pw->stream, params, 4); +#if PW_CHECK_VERSION(0, 3, 62) + if (check_pw_version(&obs_pw->server_version, 0, 3, 62)) { + /* Video transformation */ + params[n_params++] = spa_pod_builder_add_object( + &pod_builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, + SPA_PARAM_META_type, + SPA_POD_Id(SPA_META_VideoTransform), + SPA_PARAM_META_size, + SPA_POD_Int(sizeof(struct spa_meta_videotransform))); + } +#endif + pw_stream_update_params(obs_pw->stream, params, n_params); obs_pw->negotiated = true; } @@ -911,10 +953,20 @@ uint32_t obs_pipewire_get_width(obs_pipewire *obs_pw) if (!obs_pw->negotiated) return 0; - if (obs_pw->crop.valid) - return obs_pw->crop.width; - else - return obs_pw->format.info.raw.size.width; + switch (obs_pw->transform) { + case SPA_META_TRANSFORMATION_Flipped: + case SPA_META_TRANSFORMATION_None: + case SPA_META_TRANSFORMATION_Flipped180: + case SPA_META_TRANSFORMATION_180: + return obs_pw->crop.valid ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + case SPA_META_TRANSFORMATION_Flipped90: + case SPA_META_TRANSFORMATION_90: + case SPA_META_TRANSFORMATION_Flipped270: + case SPA_META_TRANSFORMATION_270: + return obs_pw->crop.valid ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + } } uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) @@ -922,14 +974,30 @@ uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) if (!obs_pw->negotiated) return 0; - if (obs_pw->crop.valid) - return obs_pw->crop.height; - else - return obs_pw->format.info.raw.size.height; + switch (obs_pw->transform) { + case SPA_META_TRANSFORMATION_Flipped: + case SPA_META_TRANSFORMATION_None: + case SPA_META_TRANSFORMATION_Flipped180: + case SPA_META_TRANSFORMATION_180: + return obs_pw->crop.valid ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + case SPA_META_TRANSFORMATION_Flipped90: + case SPA_META_TRANSFORMATION_90: + case SPA_META_TRANSFORMATION_Flipped270: + case SPA_META_TRANSFORMATION_270: + return obs_pw->crop.valid ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + } } void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) { + double rot = 0; + int flip = 0; + double offset_x = 0; + double offset_y = 0; + bool has_crop; + gs_eparam_t *image; if (!obs_pw->texture) @@ -938,13 +1006,58 @@ void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) image = gs_effect_get_param_by_name(effect, "image"); gs_effect_set_texture(image, obs_pw->texture); - if (has_effective_crop(obs_pw)) { - gs_draw_sprite_subregion(obs_pw->texture, 0, obs_pw->crop.x, + has_crop = has_effective_crop(obs_pw); + + switch (obs_pw->transform) { + case SPA_META_TRANSFORMATION_Flipped: + flip = GS_FLIP_U; + /* fallthrough */ + case SPA_META_TRANSFORMATION_None: + rot = 0; + break; + case SPA_META_TRANSFORMATION_Flipped90: + flip = GS_FLIP_V; + /* fallthrough */ + case SPA_META_TRANSFORMATION_90: + rot = 90; + offset_x = 0; + offset_y = has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + break; + case SPA_META_TRANSFORMATION_Flipped180: + flip = GS_FLIP_U; + /* fallthrough */ + case SPA_META_TRANSFORMATION_180: + rot = 180; + offset_x = has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + offset_y = has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + break; + case SPA_META_TRANSFORMATION_Flipped270: + flip = GS_FLIP_V; + /* fallthrough */ + case SPA_META_TRANSFORMATION_270: + rot = 270; + offset_x = has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + offset_y = 0; + break; + } + if (rot != 0) { + gs_matrix_push(); + gs_matrix_rotaa4f(0.0f, 0.0f, 1.0f, RAD(rot)); + gs_matrix_translate3f(-offset_x, -offset_y, 0.0f); + } + if (has_crop) { + gs_draw_sprite_subregion(obs_pw->texture, flip, obs_pw->crop.x, obs_pw->crop.y, obs_pw->crop.width, obs_pw->crop.height); } else { - gs_draw_sprite(obs_pw->texture, 0, 0, 0); + gs_draw_sprite(obs_pw->texture, flip, 0, 0); } + if (rot != 0) + gs_matrix_pop(); if (obs_pw->cursor.visible && obs_pw->cursor.valid && obs_pw->cursor.texture) { From 11e5afa2b2baaf8ca791fa895560d184c8531009 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 19 Feb 2023 21:38:09 +0100 Subject: [PATCH 0233/2225] UI: Support platform-specific WhatsNew entries --- UI/window-basic-main.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index effbbae98100e3..13db4a2b6aa75c 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2197,6 +2197,20 @@ void OBSBasic::ReceivedIntroJson(const QString &text) /* check to see if there's an info page for this version */ const Json::array &items = json.array_items(); for (const Json &item : items) { + if (item["os"].is_object()) { + Json::object platforms = item["os"].object_items(); +#ifdef _WIN32 + if (!platforms["windows"].bool_value()) + continue; +#elif defined(__APPLE__) + if (!platforms["macos"].bool_value()) + continue; +#else + if (!platforms["linux"].bool_value()) + continue; +#endif + } + const std::string &version = item["version"].string_value(); const std::string &url = item["url"].string_value(); int increment = item["increment"].int_value(); From bc9eee922e884f94f55b1139c6ebcc317382e878 Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sat, 18 Feb 2023 14:11:40 -0800 Subject: [PATCH 0234/2225] libobs: Fix pulseaudio monitoring, once and for all This makes multiple changes to resolve issues with monitoring. We have added a number of things over time to resolve various issues due to our misunderstanding of the pulse api and the explicitly wrong pulse api documentation. First is removing the prior stream write tracking. Write tracking was incorrect as pulse sends you the total number of bytes it wants written at that time and not a incremental, but also this write tracking is unhelpful since we can just let begin_write signal when we should stop writing. Second removing underflow tracking, this sort of worked to detect high latency sources like vlc which buffer ~1s of data before writing audio data. It worked because it would grow the buffer in PA until we could write enough data into it, but it didn't allow us to leverage that larger buffer because we never paused the PA stream. To solve the buffering/high latency issue instead start the PA stream corked and only uncork it once we have enough data to reach the targeted latency. We also check how much data we recieve from the source and if it appears to be high latency providing us with much more data than our target latency we increase the latency to match the source. Fixing the VLC source issue and resulting in a smooth start to audio instead of underruns while we play and increase latency. Finally add some handling for pulses incorrectly documented API. Notably that begin_write may request more or less data from you so handle both cases. And stop attempting to use attr.maxlength which is not updated after set_buffer_attr calls and was always -1, and tlength is just more appropriate. old mantis resulting in some changes, still fixed. https://obsproject.com/mantis/view.php?id=1076 fixes #7574 --- .../pulse/pulseaudio-output.c | 110 ++++++------------ 1 file changed, 38 insertions(+), 72 deletions(-) diff --git a/libobs/audio-monitoring/pulse/pulseaudio-output.c b/libobs/audio-monitoring/pulse/pulseaudio-output.c index de45c1b4fb8df0..ca05db516d58c5 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-output.c +++ b/libobs/audio-monitoring/pulse/pulseaudio-output.c @@ -20,7 +20,6 @@ struct audio_monitor { struct circlebuf new_data; audio_resampler_t *resampler; - size_t bytesRemaining; bool ignore; pthread_mutex_t playback_mutex; @@ -190,26 +189,51 @@ static void do_stream_write(void *param) PULSE_DATA(param); uint8_t *buffer = NULL; - while (data->new_data.size > 0 && data->bytesRemaining > 0) { - size_t bytesToFill = data->new_data.size; - if (data->bytesRemaining < bytesToFill) - bytesToFill = data->bytesRemaining; + pulseaudio_lock(); + pthread_mutex_lock(&data->playback_mutex); - pulseaudio_lock(); + // If we have grown a large buffer internally, grow the pulse buffer to match so we can write our data out. + if (data->new_data.size > data->attr.tlength * 2) { + data->attr.fragsize = (uint32_t)-1; + data->attr.maxlength = (uint32_t)-1; + data->attr.prebuf = (uint32_t)-1; + data->attr.minreq = (uint32_t)-1; + data->attr.tlength = data->new_data.size; + pa_stream_set_buffer_attr(data->stream, &data->attr, NULL, + NULL); + } + + // Buffer up enough data before we start playing. + if (pa_stream_is_corked(data->stream)) { + if (data->new_data.size >= data->attr.tlength) { + pa_stream_cork(data->stream, 0, NULL, NULL); + } else { + goto finish; + } + } + + while (data->new_data.size > 0) { + size_t bytesToFill = data->new_data.size; if (pa_stream_begin_write(data->stream, (void **)&buffer, - &bytesToFill)) { - pulseaudio_unlock(); - return; + &bytesToFill)) + goto finish; + + // PA may request we submit more or less data than we have. + // Wait for more data if we cannot perform a full write. + if (bytesToFill > data->new_data.size) { + pa_stream_cancel_write(data->stream); + goto finish; } circlebuf_pop_front(&data->new_data, buffer, bytesToFill); pa_stream_write(data->stream, buffer, bytesToFill, NULL, 0LL, PA_SEEK_RELATIVE); - pulseaudio_unlock(); - - data->bytesRemaining -= bytesToFill; } + +finish: + pthread_mutex_unlock(&data->playback_mutex); + pulseaudio_unlock(); } static void on_audio_playback(void *param, obs_source_t *source, @@ -258,50 +282,6 @@ static void on_audio_playback(void *param, obs_source_t *source, do_stream_write(param); } -static void pulseaudio_stream_write(pa_stream *p, size_t nbytes, void *userdata) -{ - UNUSED_PARAMETER(p); - PULSE_DATA(userdata); - - pthread_mutex_lock(&data->playback_mutex); - data->bytesRemaining += nbytes; - pthread_mutex_unlock(&data->playback_mutex); - - pulseaudio_signal(0); -} - -static void pulseaudio_underflow(pa_stream *p, void *userdata) -{ - UNUSED_PARAMETER(p); - PULSE_DATA(userdata); - - pa_sample_spec spec = {0}; - spec.format = data->format; - spec.rate = (uint32_t)data->samples_per_sec; - spec.channels = data->channels; - uint64_t latency = pa_bytes_to_usec(data->attr.tlength, &spec); - - pthread_mutex_lock(&data->playback_mutex); - if (obs_source_active(data->source) && latency < 1000000) { - data->attr.fragsize = (uint32_t)-1; - data->attr.maxlength = (uint32_t)-1; - data->attr.prebuf = (uint32_t)-1; - data->attr.minreq = (uint32_t)-1; - data->attr.tlength = (data->attr.tlength * 3) / 2; - pa_stream_set_buffer_attr(data->stream, &data->attr, NULL, - NULL); - data->bytesRemaining = data->attr.maxlength; - } - pthread_mutex_unlock(&data->playback_mutex); - - if (latency >= 1000000) { - blog(LOG_WARNING, "source monitor reached max latency %ldms", - latency / 1000); - } - - pulseaudio_signal(0); -} - static void pulseaudio_server_info(pa_context *c, const pa_server_info *i, void *userdata) { @@ -371,7 +351,6 @@ static void pulseaudio_stop_playback(struct audio_monitor *monitor) /* Remove the callbacks, to ensure we no longer try to do anything * with this stream object */ pulseaudio_write_callback(monitor->stream, NULL, NULL); - pulseaudio_set_underflow_callback(monitor->stream, NULL, NULL); /* Unreference the stream and drop it. PA will free it when it can. */ pulseaudio_lock(); @@ -489,13 +468,8 @@ static bool audio_monitor_init(struct audio_monitor *monitor, monitor->attr.tlength = pa_usec_to_bytes(25000, &spec); pa_stream_flags_t flags = PA_STREAM_INTERPOLATE_TIMING | - PA_STREAM_AUTO_TIMING_UPDATE; - - if (pthread_mutex_init(&monitor->playback_mutex, NULL) != 0) { - blog(LOG_WARNING, "%s: %s", __FUNCTION__, - "Failed to init mutex"); - return false; - } + PA_STREAM_AUTO_TIMING_UPDATE | + PA_STREAM_START_CORKED; int_fast32_t ret = pulseaudio_connect_playback( monitor->stream, monitor->device, &monitor->attr, flags); @@ -505,8 +479,6 @@ static bool audio_monitor_init(struct audio_monitor *monitor, return false; } - monitor->bytesRemaining = monitor->attr.maxlength; - blog(LOG_INFO, "Started Monitoring in '%s'", monitor->device); return true; } @@ -518,12 +490,6 @@ static void audio_monitor_init_final(struct audio_monitor *monitor) obs_source_add_audio_capture_callback(monitor->source, on_audio_playback, monitor); - - pulseaudio_write_callback(monitor->stream, pulseaudio_stream_write, - (void *)monitor); - - pulseaudio_set_underflow_callback(monitor->stream, pulseaudio_underflow, - (void *)monitor); } static inline void audio_monitor_free(struct audio_monitor *monitor) From c3543273e4f5c6c6ebf781158674916808788849 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 22 Feb 2023 14:42:31 +0100 Subject: [PATCH 0235/2225] UI: Defer creation of hotkey dupe icon until needed --- UI/hotkey-edit.cpp | 8 +++++++- UI/hotkey-edit.hpp | 3 +-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/UI/hotkey-edit.cpp b/UI/hotkey-edit.cpp index 8e20d1e61804bc..6379473ddf93ca 100644 --- a/UI/hotkey-edit.cpp +++ b/UI/hotkey-edit.cpp @@ -184,7 +184,13 @@ void OBSHotkeyEdit::ClearKey() void OBSHotkeyEdit::UpdateDuplicationState() { - if (dupeIcon && dupeIcon->isVisible() != hasDuplicate) { + if (!dupeIcon && !hasDuplicate) + return; + + if (!dupeIcon) + CreateDupeIcon(); + + if (dupeIcon->isVisible() != hasDuplicate) { dupeIcon->setVisible(hasDuplicate); update(); } diff --git a/UI/hotkey-edit.hpp b/UI/hotkey-edit.hpp index 73ad918dac189c..cd1e6b2cdee5de 100644 --- a/UI/hotkey-edit.hpp +++ b/UI/hotkey-edit.hpp @@ -74,7 +74,6 @@ class OBSHotkeyEdit : public QLineEdit { setAttribute(Qt::WA_InputMethodEnabled, false); setAttribute(Qt::WA_MacShowFocusRect, true); InitSignalHandler(); - CreateDupeIcon(); ResetKey(); } OBSHotkeyEdit(QWidget *parent = nullptr) @@ -102,7 +101,7 @@ class OBSHotkeyEdit : public QLineEdit { protected: OBSSignal layoutChanged; - QAction *dupeIcon; + QAction *dupeIcon = nullptr; void InitSignalHandler(); void CreateDupeIcon(); From af4012e1b1f3f1912e0cb030b5cf306a8d8638a7 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 22 Feb 2023 14:42:51 +0100 Subject: [PATCH 0236/2225] UI: Set QT_NO_SUBTRACTOPAQUESIBLINGS env var This speeds up drawing the hotkey list *significantly* and doesn't seem to break anything else. But it is kind of a hack. --- UI/obs-app.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index c6f9875e8fbbd7..9a21ef90a287ea 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -2329,6 +2329,13 @@ static int run_program(fstream &logFile, int argc, char *argv[]) #endif #endif + /* NOTE: This disables an optimisation in Qt that attempts to determine if + * any "siblings" intersect with a widget when determining the approximate + * visible/unobscured area. However, by Qt's own admission this is slow + * and in the case of OBS it significantly slows down lists with many + * elements (e.g. Hotkeys) and it is actually faster to disable it. */ + qputenv("QT_NO_SUBTRACTOPAQUESIBLINGS", "1"); + OBSApp program(argc, argv, profilerNameStore.get()); try { QAccessible::installFactory(accessibleFactory); From e5690a1f653d3036c2a918aaa55958237fb637d3 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 22 Feb 2023 17:26:24 +0100 Subject: [PATCH 0237/2225] UI: Use unordered_map for hotkey duplicate detection --- UI/window-basic-settings.cpp | 64 +++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index e1c5a32a44f8fe..fe38b3a7578608 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -4590,32 +4591,27 @@ void OBSBasicSettings::on_hotkeyFilterInput_KeyChanged( SearchHotkeys(ui->hotkeyFilterSearch->text(), combo); } -static bool MarkHotkeyConflicts(OBSHotkeyLabel *item1, OBSHotkeyLabel *item2) -{ - if (item1->pairPartner == item2) - return false; - - auto &edits1 = item1->widget->edits; - auto &edits2 = item2->widget->edits; - bool hasDupes = false; - - for (auto &edit1 : edits1) { - for (auto &edit2 : edits2) { - bool isDupe = - !obs_key_combination_is_empty(edit1->key) && - edit1->key == edit2->key; - - hasDupes |= isDupe; - edit1->hasDuplicate |= isDupe; - edit2->hasDuplicate |= isDupe; - } +namespace std { +template<> struct hash { + size_t operator()(obs_key_combination_t value) const + { + size_t h1 = hash{}(value.modifiers); + size_t h2 = hash{}(value.key); + // Same as boost::hash_combine() + h2 ^= h1 + 0x9e3779b9 + (h2 << 6) + (h2 >> 2); + return h2; } - - return hasDupes; }; +} bool OBSBasicSettings::ScanDuplicateHotkeys(QFormLayout *layout) { + typedef struct assignment { + OBSHotkeyLabel *label; + OBSHotkeyEdit *edit; + } assignment; + + unordered_map> assignments; vector items; bool hasDupes = false; @@ -4630,23 +4626,29 @@ bool OBSBasicSettings::ScanDuplicateHotkeys(QFormLayout *layout) items.push_back(item); - for (auto &edit : item->widget->edits) + for (auto &edit : item->widget->edits) { edit->hasDuplicate = false; - } - for (size_t i = 0; i < items.size(); i++) { - OBSHotkeyLabel *item1 = items[i]; + if (obs_key_combination_is_empty(edit->key)) + continue; - for (size_t j = i + 1; j < items.size(); j++) - hasDupes |= MarkHotkeyConflicts(item1, items[j]); - } + for (assignment &assign : assignments[edit->key]) { + if (item->pairPartner == assign.label) + continue; - for (auto *item : items) { - for (auto &edit : item->widget->edits) { - edit->UpdateDuplicationState(); + assign.edit->hasDuplicate = true; + edit->hasDuplicate = true; + hasDupes = true; + } + + assignments[edit->key].push_back({item, edit}); } } + for (auto *item : items) + for (auto &edit : item->widget->edits) + edit->UpdateDuplicationState(); + return hasDupes; } From d2dd917721b6301837405c1253afd56fd59d1c79 Mon Sep 17 00:00:00 2001 From: CodeYan01 <65320293+CodeYan01@users.noreply.github.com> Date: Wed, 22 Feb 2023 23:36:14 +0800 Subject: [PATCH 0238/2225] docs: Fix layout and typos --- docs/sphinx/reference-core.rst | 8 ++++---- docs/sphinx/reference-libobs-graphics-effects.rst | 2 +- docs/sphinx/reference-modules.rst | 2 +- docs/sphinx/reference-outputs.rst | 2 +- docs/sphinx/reference-properties.rst | 4 ++-- docs/sphinx/reference-scenes.rst | 7 ++++--- docs/sphinx/reference-sources.rst | 2 +- docs/sphinx/scripting.rst | 3 ++- libobs/obs-properties.h | 4 ++-- 9 files changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index ca4cf14fd92585..42ce3d46891f85 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -52,7 +52,7 @@ Initialization, Shutdown, and Information .. function:: void obs_set_locale(const char *locale) Sets a new locale to use for modules. This will call - obs_module_set_locale for each module with the new locale. + :c:func:`obs_module_set_locale()` for each module with the new locale. :param locale: The locale to use for modules @@ -67,8 +67,8 @@ Initialization, Shutdown, and Information .. function:: profiler_name_store_t *obs_get_profiler_name_store(void) :return: The profiler name store (see util/profiler.h) used by OBS, - which is either a name store passed to obs_startup, an - internal name store, or NULL in case obs_initialized() + which is either a name store passed to :c:func:`obs_startup()`, an + internal name store, or NULL in case :c:func:`obs_initialized()` returns false. --------------------- @@ -462,7 +462,7 @@ Video, Audio, and Graphics .. function:: gs_effect_t *obs_get_base_effect(enum obs_base_effect effect) - Returns a commoinly used base effect. + Returns a commonly used base effect. :param effect: | Can be one of the following values: | OBS_EFFECT_DEFAULT - RGB/YUV diff --git a/docs/sphinx/reference-libobs-graphics-effects.rst b/docs/sphinx/reference-libobs-graphics-effects.rst index b4db4e1ced4737..8fb86715b869b8 100644 --- a/docs/sphinx/reference-libobs-graphics-effects.rst +++ b/docs/sphinx/reference-libobs-graphics-effects.rst @@ -174,7 +174,7 @@ HLSL format. --------------------- -.. function:: gs_eparam_t *gs_param_get_annotation_by_name(const gs_eparam_t *pardam, const char *annotation) +.. function:: gs_eparam_t *gs_param_get_annotation_by_name(const gs_eparam_t *param, const char *annotation) Gets parameter of an effect by its name. diff --git a/docs/sphinx/reference-modules.rst b/docs/sphinx/reference-modules.rst index 36b7d7136fa269..acbfcd3d55781e 100644 --- a/docs/sphinx/reference-modules.rst +++ b/docs/sphinx/reference-modules.rst @@ -176,7 +176,7 @@ plugin modules. | MODULE_FILE_NOT_FOUND - The module was not found | MODULE_MISSING_EXPORTS - Required exports are missing | MODULE_INCOMPATIBLE_VER - Incompatible version - | MODULE_HARDCODED_SKIP - Skipped by harcoded rules + | MODULE_HARDCODED_SKIP - Skipped by hardcoded rules (e.g. obsolete obs-browser macOS plugin) --------------------- diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index 28dad380504df2..0cbe9f98865d2c 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -674,7 +674,7 @@ General Output Functions const char *obs_output_get_supported_audio_codecs(const obs_output_t *output) :return: Supported video/audio codecs of an encoded output, separated - by semicolen + by semicolon --------------------- diff --git a/docs/sphinx/reference-properties.rst b/docs/sphinx/reference-properties.rst index 8f469df00c011c..fc3c3e43cee7f1 100644 --- a/docs/sphinx/reference-properties.rst +++ b/docs/sphinx/reference-properties.rst @@ -162,7 +162,7 @@ Property Object Functions Adds a 'path' property. Can be a directory or a file. If target is a file path, the filters should be this format, separated by - double semi-colens, and extensions separated by space:: + double semicolons, and extensions separated by space:: "Example types 1 and 2 (*.ex1 *.ex2);;Example type 3 (*.ex3)" @@ -176,7 +176,7 @@ Property Object Functions :param filter: If type is a file path, then describes the file filter that the user can browse. Items are separated via - double semi-colens. If multiple file types in a + double semicolons. If multiple file types in a filter, separate with space. :param default_path: The default path to start in, or *NULL* :return: The property diff --git a/docs/sphinx/reference-scenes.rst b/docs/sphinx/reference-scenes.rst index 82a15ab3ad4d5d..359dfaa27273c2 100644 --- a/docs/sphinx/reference-scenes.rst +++ b/docs/sphinx/reference-scenes.rst @@ -129,11 +129,11 @@ Scene Signals **item_remove** (ptr scene, ptr item) - Called when a scene item has been removed from the scen. + Called when a scene item has been removed from the scene. **reorder** (ptr scene) - Called when scene items have been reoredered in the scene. + Called when scene items have been reordered in the scene. **refresh** (ptr scene) @@ -149,6 +149,7 @@ Scene Signals Called when a scene item has been locked or unlocked. **item_select** (ptr scene, ptr item) + **item_deselect** (ptr scene, ptr item) Called when a scene item has been selected/deselected. @@ -353,7 +354,7 @@ Scene Item Functions .. function:: obs_data_t *obs_scene_save_transform_states(obs_scene_t *scene, bool all_items) .. function:: void obs_scene_load_transform_states(const char *states) - Saves all the transformation states for the sceneitms in scene. When all_items is false, it + Saves all the transformation states for the sceneitems in scene. When all_items is false, it will only save selected items :return: Data containing transformation states for all* sceneitems in scene diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index b72e96b45e6e36..7f4caf2fb279ff 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -493,7 +493,7 @@ Source Definition Structure (obs_source_info) Called to get the current time of the media. -.. member:: void (*obs_source_info.media_set_time)(void *data, int64_t miliseconds) +.. member:: void (*obs_source_info.media_set_time)(void *data, int64_t milliseconds) Called to set the media time. diff --git a/docs/sphinx/scripting.rst b/docs/sphinx/scripting.rst index 75cefa031dbe26..62c8f3569c5e89 100644 --- a/docs/sphinx/scripting.rst +++ b/docs/sphinx/scripting.rst @@ -36,6 +36,7 @@ There are a number of global functions that scripts can optionally provide: .. py:function:: script_description() + Called to retrieve a description string to be displayed to the user in the Scripts window. @@ -119,7 +120,7 @@ without necessarily having to lock scripts/interpreters every frame. .. py:function:: timer_add(callback, milliseconds) - Adds an timer callback which triggers every *millseconds*. + Adds an timer callback which triggers every *milliseconds*. .. py:function:: timer_remove(callback) diff --git a/libobs/obs-properties.h b/libobs/obs-properties.h index 636616ebbf69b4..511deffe15008a 100644 --- a/libobs/obs-properties.h +++ b/libobs/obs-properties.h @@ -210,7 +210,7 @@ EXPORT obs_property_t *obs_properties_add_text(obs_properties_t *props, * Adds a 'path' property. Can be a directory or a file. * * If target is a file path, the filters should be this format, separated by - * double semi-colens, and extensions separated by space: + * double semicolons, and extensions separated by space: * "Example types 1 and 2 (*.ex1 *.ex2);;Example type 3 (*.ex3)" * * @param props Properties object @@ -219,7 +219,7 @@ EXPORT obs_property_t *obs_properties_add_text(obs_properties_t *props, * @param type Type of path (directory or file) * @param filter If type is a file path, then describes the file filter * that the user can browse. Items are separated via - * double semi-colens. If multiple file types in a + * double semicolons. If multiple file types in a * filter, separate with space. */ EXPORT obs_property_t * From dc5813c947736a5c192e759cdc44edb1bb564990 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 24 Feb 2023 10:39:31 -0500 Subject: [PATCH 0239/2225] libobs-d3d11: Log D3D11 adapter memory correctly DXGI_ADAPTER_DESC's DedicatedVideoMemory and SharedSystemMemory are unsigned long long int, but we were logging them as unsigned int. For GPUs with memory values higher than 4294967295, the logged value would roll over. Use %PRIu64 (%llu on VS2022) instead of %u in the log call. --- libobs-d3d11/d3d11-subsystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index bcaa922bb282a3..04f8c1120dde04 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -1342,9 +1342,9 @@ static inline void LogD3DAdapters() os_wcs_to_utf8(desc.Description, 0, name, sizeof(name)); blog(LOG_INFO, "\tAdapter %u: %s", i, name); - blog(LOG_INFO, "\t Dedicated VRAM: %u", + blog(LOG_INFO, "\t Dedicated VRAM: %" PRIu64, desc.DedicatedVideoMemory); - blog(LOG_INFO, "\t Shared VRAM: %u", + blog(LOG_INFO, "\t Shared VRAM: %" PRIu64, desc.SharedSystemMemory); blog(LOG_INFO, "\t PCI ID: %x:%x", desc.VendorId, desc.DeviceId); From 501a3e926d2e42dac1c53ae210240158b75576ec Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 22 Aug 2022 16:04:13 +0200 Subject: [PATCH 0240/2225] UI: Refactor Virtual Camera source selector dialog --- UI/CMakeLists.txt | 1 + UI/window-basic-main-outputs.cpp | 112 +++++++++++-- UI/window-basic-main-outputs.hpp | 8 + UI/window-basic-main-transitions.cpp | 14 +- UI/window-basic-main.cpp | 60 +++++-- UI/window-basic-main.hpp | 5 + UI/window-basic-vcam-config.cpp | 240 +++------------------------ UI/window-basic-vcam-config.hpp | 23 +-- UI/window-basic-vcam.hpp | 21 +++ 9 files changed, 235 insertions(+), 249 deletions(-) create mode 100644 UI/window-basic-vcam.hpp diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index c7083bb1f364d9..309fb8196acc5b 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -259,6 +259,7 @@ target_sources( window-basic-transform.cpp window-basic-transform.hpp window-basic-preview.hpp + window-basic-vcam.hpp window-basic-vcam-config.cpp window-basic-vcam-config.hpp window-dock.cpp diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index a4651673725db6..e84759cab2461d 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -181,7 +181,7 @@ static void OBSStopVirtualCam(void *data, calldata_t *params) Q_ARG(int, code)); obs_output_set_media(output->virtualCam, nullptr, nullptr); - OBSBasicVCamConfig::StopVideo(); + output->DestroyVirtualCamView(); } /* ------------------------------------------------------------------------ */ @@ -229,23 +229,30 @@ inline BasicOutputHandler::BasicOutputHandler(OBSBasic *main_) : main(main_) bool BasicOutputHandler::StartVirtualCam() { - if (main->vcamEnabled) { - video_t *video = OBSBasicVCamConfig::StartVideo(); - if (!video) - return false; + if (!main->vcamEnabled) + return false; - obs_output_set_media(virtualCam, video, obs_get_audio()); - if (!Active()) - SetupOutputs(); + if (!virtualCamView) + virtualCamView = obs_view_create(); - bool success = obs_output_start(virtualCam); + UpdateVirtualCamOutputSource(); - if (!success) - OBSBasicVCamConfig::StopVideo(); + if (!virtualCamVideo) { + virtualCamVideo = obs_view_add(virtualCamView); - return success; + if (!virtualCamVideo) + return false; } - return false; + + obs_output_set_media(virtualCam, virtualCamVideo, obs_get_audio()); + if (!Active()) + SetupOutputs(); + + bool success = obs_output_start(virtualCam); + if (!success) + DestroyVirtualCamView(); + + return success; } void BasicOutputHandler::StopVirtualCam() @@ -263,6 +270,85 @@ bool BasicOutputHandler::VirtualCamActive() const return false; } +void BasicOutputHandler::UpdateVirtualCamOutputSource() +{ + if (!main->vcamEnabled || !virtualCamView) + return; + + OBSSourceAutoRelease source; + + switch (main->vcamConfig.type) { + case VCamOutputType::InternalOutput: + switch (main->vcamConfig.internal) { + case VCamInternalType::Default: + source = obs_get_output_source(0); + break; + case VCamInternalType::Preview: + OBSSource s = main->GetCurrentSceneSource(); + obs_source_get_ref(s); + source = s.Get(); + break; + } + break; + case VCamOutputType::SceneOutput: + source = obs_get_source_by_name(main->vcamConfig.scene.c_str()); + break; + case VCamOutputType::SourceOutput: + OBSSource s = + obs_get_source_by_name(main->vcamConfig.source.c_str()); + + if (!vCamSourceScene) + vCamSourceScene = + obs_scene_create_private("vcam_source"); + source = obs_source_get_ref( + obs_scene_get_source(vCamSourceScene)); + + if (vCamSourceSceneItem && + (obs_sceneitem_get_source(vCamSourceSceneItem) != s)) { + obs_sceneitem_remove(vCamSourceSceneItem); + vCamSourceSceneItem = nullptr; + } + + if (!vCamSourceSceneItem) { + vCamSourceSceneItem = obs_scene_add(vCamSourceScene, s); + obs_source_release(s); + + obs_sceneitem_set_bounds_type(vCamSourceSceneItem, + OBS_BOUNDS_SCALE_INNER); + obs_sceneitem_set_bounds_alignment(vCamSourceSceneItem, + OBS_ALIGN_CENTER); + + const struct vec2 size = { + (float)obs_source_get_width(source), + (float)obs_source_get_height(source), + }; + obs_sceneitem_set_bounds(vCamSourceSceneItem, &size); + } + break; + } + + OBSSourceAutoRelease current = obs_view_get_source(virtualCamView, 0); + if (source != current) + obs_view_set_source(virtualCamView, 0, source); +} + +void BasicOutputHandler::DestroyVirtualCamView() +{ + obs_view_remove(virtualCamView); + obs_view_set_source(virtualCamView, 0, nullptr); + virtualCamVideo = nullptr; + + obs_view_destroy(virtualCamView); + virtualCamView = nullptr; + + if (!vCamSourceScene) + return; + + obs_scene_release(vCamSourceScene); + vCamSourceScene = nullptr; + vCamSourceSceneItem = nullptr; +} + /* ------------------------------------------------------------------------ */ struct SimpleOutput : BasicOutputHandler { diff --git a/UI/window-basic-main-outputs.hpp b/UI/window-basic-main-outputs.hpp index 88e5d962be34ad..fab2d3cfa4935b 100644 --- a/UI/window-basic-main-outputs.hpp +++ b/UI/window-basic-main-outputs.hpp @@ -16,6 +16,11 @@ struct BasicOutputHandler { bool virtualCamActive = false; OBSBasic *main; + obs_view_t *virtualCamView = nullptr; + video_t *virtualCamVideo = nullptr; + obs_scene_t *vCamSourceScene = nullptr; + obs_sceneitem_t *vCamSourceSceneItem = nullptr; + std::string outputType; std::string lastError; @@ -57,6 +62,9 @@ struct BasicOutputHandler { virtual void Update() = 0; virtual void SetupOutputs() = 0; + virtual void UpdateVirtualCamOutputSource(); + virtual void DestroyVirtualCamView(); + inline bool Active() const { return streamingActive || recordingActive || delayActive || diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 0d9b6d0013233d..89091a61b2033f 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -21,6 +21,7 @@ #include #include #include "window-basic-main.hpp" +#include "window-basic-main-outputs.hpp" #include "window-basic-vcam-config.hpp" #include "display-helpers.hpp" #include "window-namedialog.hpp" @@ -286,7 +287,8 @@ void OBSBasic::OverrideTransition(OBSSource transition) obs_transition_swap_end(transition, oldTransition); // Transition overrides don't raise an event so we need to call update directly - OBSBasicVCamConfig::UpdateOutputSource(); + if (vcamEnabled) + outputHandler->UpdateVirtualCamOutputSource(); } } @@ -428,6 +430,9 @@ void OBSBasic::SetTransition(OBSSource transition) ui->transitionRemove->setEnabled(configurable); ui->transitionProps->setEnabled(configurable); + if (vcamEnabled && vcamConfig.internal == VCamInternalType::Default) + outputHandler->UpdateVirtualCamOutputSource(); + if (api) api->on_event(OBS_FRONTEND_EVENT_TRANSITION_CHANGED); } @@ -695,6 +700,13 @@ void OBSBasic::SetCurrentScene(OBSSource scene, bool force) currentScene = itemScene.Get(); ui->scenes->setCurrentItem(item); ui->scenes->blockSignals(false); + + if (vcamEnabled && + vcamConfig.internal == + VCamInternalType::Preview) + outputHandler + ->UpdateVirtualCamOutputSource(); + if (api) api->on_event( OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 13db4a2b6aa75c..c0d770996957b4 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -763,8 +763,27 @@ void OBSBasic::Save(const char *file) obs_data_set_double(saveData, "scaling_off_y", ui->preview->GetScrollY()); - if (vcamEnabled) - OBSBasicVCamConfig::SaveData(saveData, true); + if (vcamEnabled) { + OBSDataAutoRelease obj = obs_data_create(); + + obs_data_set_int(obj, "type", (int)vcamConfig.type); + switch (vcamConfig.type) { + case VCamOutputType::InternalOutput: + obs_data_set_int(obj, "internal", + (int)vcamConfig.internal); + break; + case VCamOutputType::SceneOutput: + obs_data_set_string(obj, "scene", + vcamConfig.scene.c_str()); + break; + case VCamOutputType::SourceOutput: + obs_data_set_string(obj, "source", + vcamConfig.source.c_str()); + break; + } + + obs_data_set_obj(saveData, "virtual-camera", obj); + } if (api) { OBSDataAutoRelease moduleObj = obs_data_create(); @@ -1178,8 +1197,16 @@ void OBSBasic::LoadData(obs_data_t *data, const char *file) ui->preview->SetFixedScaling(fixedScaling); emit ui->preview->DisplayResized(); - if (vcamEnabled) - OBSBasicVCamConfig::SaveData(data, false); + if (vcamEnabled) { + OBSDataAutoRelease obj = + obs_data_get_obj(data, "virtual-camera"); + + vcamConfig.type = (VCamOutputType)obs_data_get_int(obj, "type"); + vcamConfig.internal = + (VCamInternalType)obs_data_get_int(obj, "internal"); + vcamConfig.scene = obs_data_get_string(obj, "scene"); + vcamConfig.source = obs_data_get_string(obj, "source"); + } /* ---------------------- */ @@ -1225,6 +1252,9 @@ void OBSBasic::LoadData(obs_data_t *data, const char *file) disableSaving--; + if (vcamEnabled && vcamConfig.internal == VCamInternalType::Preview) + outputHandler->UpdateVirtualCamOutputSource(); + if (api) { api->on_event(OBS_FRONTEND_EVENT_SCENE_CHANGED); api->on_event(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED); @@ -1696,8 +1726,6 @@ void OBSBasic::ReplayBufferClicked() void OBSBasic::AddVCamButton() { - OBSBasicVCamConfig::Init(); - vcamButton = new ControlsSplitButton( QTStr("Basic.Main.StartVirtualCam"), "vcamButton", &OBSBasic::VCamButtonClicked); @@ -2752,8 +2780,6 @@ OBSBasic::~OBSBasic() delete cef; cef = nullptr; #endif - - OBSBasicVCamConfig::DestroyView(); } void OBSBasic::SaveProjectNow() @@ -5098,6 +5124,9 @@ void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current, SetCurrentScene(source); + if (vcamEnabled && vcamConfig.internal == VCamInternalType::Preview) + outputHandler->UpdateVirtualCamOutputSource(); + if (api) api->on_event(OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED); @@ -7855,8 +7884,19 @@ void OBSBasic::VCamButtonClicked() void OBSBasic::VCamConfigButtonClicked() { - OBSBasicVCamConfig config(this); - config.exec(); + OBSBasicVCamConfig dialog(vcamConfig, this); + + connect(&dialog, &OBSBasicVCamConfig::Accepted, this, + &OBSBasic::UpdateVirtualCamConfig); + + dialog.exec(); +} + +void OBSBasic::UpdateVirtualCamConfig(const VCamConfig &config) +{ + vcamConfig = config; + + outputHandler->UpdateVirtualCamOutputSource(); } void OBSBasic::on_settingsButton_clicked() diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index fa0857056567b4..5b96acf625c41c 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -28,6 +28,7 @@ #include #include "window-main.hpp" #include "window-basic-interaction.hpp" +#include "window-basic-vcam.hpp" #include "window-basic-properties.hpp" #include "window-basic-transform.hpp" #include "window-basic-adv-audio.hpp" @@ -51,6 +52,7 @@ class QMessageBox; class QListWidgetItem; class VolControl; class OBSBasicStats; +class OBSBasicVCamConfig; #include "ui_OBSBasic.h" #include "ui_ColorSelect.h" @@ -309,6 +311,7 @@ class OBSBasic : public OBSMainWindow { QPointer vcamButton; bool vcamEnabled = false; + VCamConfig vcamConfig; QScopedPointer trayIcon; QPointer sysTrayStream; @@ -819,6 +822,8 @@ private slots: void LockVolumeControl(bool lock); void ResetProxyStyleSliders(); + void UpdateVirtualCamConfig(const VCamConfig &config); + private: /* OBS Callbacks */ static void SceneReordered(void *data, calldata_t *params); diff --git a/UI/window-basic-vcam-config.cpp b/UI/window-basic-vcam-config.cpp index 86bbd4db527757..cd3b2eca3290d0 100644 --- a/UI/window-basic-vcam-config.cpp +++ b/UI/window-basic-vcam-config.cpp @@ -5,43 +5,21 @@ #include #include -enum class VCamOutputType { - Internal, - Scene, - Source, -}; - -enum class VCamInternalType { - Default, - Preview, -}; - -struct VCamConfig { - VCamOutputType type = VCamOutputType::Internal; - VCamInternalType internal = VCamInternalType::Default; - std::string scene; - std::string source; -}; - -static VCamConfig *vCamConfig = nullptr; - -OBSBasicVCamConfig::OBSBasicVCamConfig(QWidget *parent) - : QDialog(parent), ui(new Ui::OBSBasicVCamConfig) +OBSBasicVCamConfig::OBSBasicVCamConfig(const VCamConfig &_config, + QWidget *parent) + : config(_config), QDialog(parent), ui(new Ui::OBSBasicVCamConfig) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); ui->setupUi(this); - auto type = (int)vCamConfig->type; - ui->outputType->setCurrentIndex(type); - OutputTypeChanged(type); - connect(ui->outputType, - static_cast( - &QComboBox::currentIndexChanged), - this, &OBSBasicVCamConfig::OutputTypeChanged); + ui->outputType->setCurrentIndex(config.type); + OutputTypeChanged(config.type); + connect(ui->outputType, SIGNAL(currentIndexChanged(int)), this, + SLOT(OutputTypeChanged(int))); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, - &OBSBasicVCamConfig::Save); + &OBSBasicVCamConfig::UpdateConfig); } void OBSBasicVCamConfig::OutputTypeChanged(int type) @@ -50,25 +28,25 @@ void OBSBasicVCamConfig::OutputTypeChanged(int type) list->clear(); switch ((VCamOutputType)type) { - case VCamOutputType::Internal: + case VCamOutputType::InternalOutput: list->addItem(QTStr("Basic.VCam.InternalDefault")); list->addItem(QTStr("Basic.VCam.InternalPreview")); - list->setCurrentIndex((int)vCamConfig->internal); + list->setCurrentIndex(config.internal); break; - case VCamOutputType::Scene: { + case VCamOutputType::SceneOutput: { // Scenes in default order BPtr scenes = obs_frontend_get_scene_names(); for (char **temp = scenes; *temp; temp++) { list->addItem(*temp); - if (vCamConfig->scene.compare(*temp) == 0) + if (config.scene.compare(*temp) == 0) list->setCurrentIndex(list->count() - 1); } break; } - case VCamOutputType::Source: { + case VCamOutputType::SourceOutput: { // Sources in alphabetical order std::vector sources; auto AddSource = [&](obs_source_t *source) { @@ -97,7 +75,7 @@ void OBSBasicVCamConfig::OutputTypeChanged(int type) for (auto &&source : sources) { list->addItem(source.c_str()); - if (vCamConfig->source == source) + if (config.source == source) list->setCurrentIndex(list->count() - 1); } break; @@ -105,193 +83,27 @@ void OBSBasicVCamConfig::OutputTypeChanged(int type) } } -void OBSBasicVCamConfig::Save() +void OBSBasicVCamConfig::UpdateConfig() { - auto type = (VCamOutputType)ui->outputType->currentIndex(); - auto out = ui->outputSelection; + VCamOutputType type = (VCamOutputType)ui->outputType->currentIndex(); switch (type) { - case VCamOutputType::Internal: - vCamConfig->internal = (VCamInternalType)out->currentIndex(); + case VCamOutputType::InternalOutput: + config.internal = + (VCamInternalType)ui->outputSelection->currentIndex(); break; - case VCamOutputType::Scene: - vCamConfig->scene = out->currentText().toStdString(); + case VCamOutputType::SceneOutput: + config.scene = ui->outputSelection->currentText().toStdString(); break; - case VCamOutputType::Source: - vCamConfig->source = out->currentText().toStdString(); + case VCamOutputType::SourceOutput: + config.source = + ui->outputSelection->currentText().toStdString(); break; default: // unknown value, don't save type return; } - vCamConfig->type = type; - - // If already running just update the source - if (obs_frontend_virtualcam_active()) - UpdateOutputSource(); -} - -void OBSBasicVCamConfig::SaveData(obs_data_t *data, bool saving) -{ - if (saving) { - OBSDataAutoRelease obj = obs_data_create(); - - obs_data_set_int(obj, "type", (int)vCamConfig->type); - obs_data_set_int(obj, "internal", (int)vCamConfig->internal); - obs_data_set_string(obj, "scene", vCamConfig->scene.c_str()); - obs_data_set_string(obj, "source", vCamConfig->source.c_str()); - - obs_data_set_obj(data, "virtual-camera", obj); - } else { - OBSDataAutoRelease obj = - obs_data_get_obj(data, "virtual-camera"); - - vCamConfig->type = - (VCamOutputType)obs_data_get_int(obj, "type"); - vCamConfig->internal = - (VCamInternalType)obs_data_get_int(obj, "internal"); - vCamConfig->scene = obs_data_get_string(obj, "scene"); - vCamConfig->source = obs_data_get_string(obj, "source"); - } -} - -static void EventCallback(enum obs_frontend_event event, void *) -{ - if (vCamConfig->type != VCamOutputType::Internal) - return; - - // Update output source if the preview scene changes - // or if the default transition is changed - switch (event) { - case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED: - if (vCamConfig->internal != VCamInternalType::Preview) - return; - break; - case OBS_FRONTEND_EVENT_TRANSITION_CHANGED: - if (vCamConfig->internal != VCamInternalType::Default) - return; - break; - default: - return; - } - - OBSBasicVCamConfig::UpdateOutputSource(); -} - -static auto staticConfig = VCamConfig{}; - -void OBSBasicVCamConfig::Init() -{ - if (vCamConfig) - return; - - vCamConfig = &staticConfig; - - obs_frontend_add_event_callback(EventCallback, nullptr); -} - -static obs_view_t *view = nullptr; -static video_t *video = nullptr; - -static obs_scene_t *sourceScene = nullptr; -static obs_sceneitem_t *sourceSceneItem = nullptr; - -video_t *OBSBasicVCamConfig::StartVideo() -{ - if (!view) - view = obs_view_create(); - - UpdateOutputSource(); - - if (!video) - video = obs_view_add(view); - return video; -} - -void OBSBasicVCamConfig::StopVideo() -{ - obs_view_remove(view); - obs_view_set_source(view, 0, nullptr); - video = nullptr; - - if (sourceScene) { - obs_scene_release(sourceScene); - sourceScene = nullptr; - sourceSceneItem = nullptr; - } -} - -void OBSBasicVCamConfig::DestroyView() -{ - StopVideo(); - obs_view_destroy(view); - view = nullptr; -} - -void OBSBasicVCamConfig::UpdateOutputSource() -{ - if (!view) - return; - - obs_source_t *source = nullptr; - - switch ((VCamOutputType)vCamConfig->type) { - case VCamOutputType::Internal: - switch (vCamConfig->internal) { - case VCamInternalType::Default: - source = obs_get_output_source(0); - break; - case VCamInternalType::Preview: - OBSSource s = OBSBasic::Get()->GetCurrentSceneSource(); - obs_source_get_ref(s); - source = s; - break; - } - break; - - case VCamOutputType::Scene: - source = obs_get_source_by_name(vCamConfig->scene.c_str()); - break; - - case VCamOutputType::Source: - auto rawSource = - obs_get_source_by_name(vCamConfig->source.c_str()); - if (!rawSource) - break; - - // Use a scene transform to fit the source size to the canvas - if (!sourceScene) - sourceScene = obs_scene_create_private(nullptr); - source = obs_source_get_ref(obs_scene_get_source(sourceScene)); - - if (sourceSceneItem) { - if (obs_sceneitem_get_source(sourceSceneItem) != - rawSource) { - obs_sceneitem_remove(sourceSceneItem); - sourceSceneItem = nullptr; - } - } - if (!sourceSceneItem) { - sourceSceneItem = obs_scene_add(sourceScene, rawSource); - obs_source_release(rawSource); - - obs_sceneitem_set_bounds_type(sourceSceneItem, - OBS_BOUNDS_SCALE_INNER); - obs_sceneitem_set_bounds_alignment(sourceSceneItem, - OBS_ALIGN_CENTER); - - const struct vec2 size = { - (float)obs_source_get_width(source), - (float)obs_source_get_height(source), - }; - obs_sceneitem_set_bounds(sourceSceneItem, &size); - } - break; - } + config.type = type; - auto current = obs_view_get_source(view, 0); - if (source != current) - obs_view_set_source(view, 0, source); - obs_source_release(source); - obs_source_release(current); + emit Accepted(config); } diff --git a/UI/window-basic-vcam-config.hpp b/UI/window-basic-vcam-config.hpp index 03cbdb0c9269b4..2c48b45be67d26 100644 --- a/UI/window-basic-vcam-config.hpp +++ b/UI/window-basic-vcam-config.hpp @@ -4,27 +4,28 @@ #include #include +#include "window-basic-vcam.hpp" + #include "ui_OBSBasicVCamConfig.h" +struct VCamConfig; + class OBSBasicVCamConfig : public QDialog { Q_OBJECT -public: - static void Init(); - - static video_t *StartVideo(); - static void StopVideo(); - static void DestroyView(); + VCamConfig config; - static void UpdateOutputSource(); - static void SaveData(obs_data_t *data, bool saving); - - explicit OBSBasicVCamConfig(QWidget *parent = 0); +public: + explicit OBSBasicVCamConfig(const VCamConfig &config, + QWidget *parent = 0); private slots: void OutputTypeChanged(int type); - void Save(); + void UpdateConfig(); private: std::unique_ptr ui; + +signals: + void Accepted(const VCamConfig &config); }; diff --git a/UI/window-basic-vcam.hpp b/UI/window-basic-vcam.hpp new file mode 100644 index 00000000000000..0b538006db9c92 --- /dev/null +++ b/UI/window-basic-vcam.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +enum VCamOutputType { + InternalOutput, + SceneOutput, + SourceOutput, +}; + +enum VCamInternalType { + Default, + Preview, +}; + +struct VCamConfig { + VCamOutputType type = VCamOutputType::InternalOutput; + VCamInternalType internal = VCamInternalType::Default; + std::string scene; + std::string source; +}; From 0f560a91364609a5ee795fa2f1ae1de5926857b3 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 12 Oct 2022 08:44:26 +0200 Subject: [PATCH 0241/2225] UI: Fix scene/source in virtual camera config if renamed --- UI/window-basic-main.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index c0d770996957b4..4079d597af996f 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3086,6 +3086,13 @@ void OBSBasic::RenameSources(OBSSource source, QString newName, projectors[i]->RenameProjector(prevName, newName); } + if (vcamConfig.type == VCamOutputType::SourceOutput && + prevName == QString::fromStdString(vcamConfig.source)) + vcamConfig.source = newName.toStdString(); + if (vcamConfig.type == VCamOutputType::SceneOutput && + prevName == QString::fromStdString(vcamConfig.scene)) + vcamConfig.scene = newName.toStdString(); + SaveProject(); obs_scene_t *scene = obs_scene_from_source(source); From 6734c9cbc82f3251bbd1321664da6fff575f78e7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 18 Jan 2023 12:01:26 +0100 Subject: [PATCH 0242/2225] UI: Stop virtual camera if active while exiting Avoid potential memory leaks and crashes. --- UI/window-basic-main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 4079d597af996f..1f3e84fe254aeb 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -4844,6 +4844,9 @@ void OBSBasic::closeEvent(QCloseEvent *event) closing = true; + if (outputHandler->VirtualCamActive()) + outputHandler->StopVirtualCam(); + if (introCheckThread) introCheckThread->wait(); if (whatsNewInitThread) From b0ebcff4e8f239024e595d31cbd2d9d445cae797 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 26 Feb 2023 02:49:22 +0100 Subject: [PATCH 0243/2225] CI: Stop pinning Xcode to 14.1 This was needed to get the macOS 13 SDK when Xcode 14.0 was the default. It no longer is (at the time of writing the default is 14.2), so we can (and probably should) stop pinning to the older 14.1 --- .github/workflows/main.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 26e510f72541ae..a9ed780b66aa72 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -163,9 +163,6 @@ jobs: echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT - - name: 'Switch to Xcode 14.1' - run: sudo xcode-select -switch /Applications/Xcode_14.1.app - - name: 'Install dependencies' env: RESTORED_VLC: ${{ steps.vlc-cache.outputs.cache-hit }} From 4bf14d09b496e35a7ff42bd1f0ad7ffa5f313738 Mon Sep 17 00:00:00 2001 From: Jim Date: Sat, 4 Feb 2023 01:33:40 -0800 Subject: [PATCH 0244/2225] obs-transitions: Add option to preload stinger video to RAM Stingers -- and especially track matte stingers -- are currently subject to real time decoding, which can be detrimental in a production environment where a stinger video may not be able to decode in a timely fashion. To remedy this, this change adds an option to fully decode stingers immediately and cache the decoded video/audio in RAM for playback to greatly improve stinger performance. --- deps/media-playback/CMakeLists.txt | 10 +- deps/media-playback/media-playback/cache.c | 698 ++++++++++++++++++ deps/media-playback/media-playback/cache.h | 81 ++ deps/media-playback/media-playback/decode.c | 1 + .../media-playback/media-playback.c | 144 ++++ .../media-playback/media-playback.h | 49 ++ deps/media-playback/media-playback/media.c | 104 ++- deps/media-playback/media-playback/media.h | 35 +- plugins/obs-ffmpeg/obs-ffmpeg-source.c | 116 ++- plugins/obs-transitions/data/locale/en-US.ini | 1 + plugins/obs-transitions/transition-stinger.c | 10 + 11 files changed, 1140 insertions(+), 109 deletions(-) create mode 100644 deps/media-playback/media-playback/cache.c create mode 100644 deps/media-playback/media-playback/cache.h create mode 100644 deps/media-playback/media-playback/media-playback.c create mode 100644 deps/media-playback/media-playback/media-playback.h diff --git a/deps/media-playback/CMakeLists.txt b/deps/media-playback/CMakeLists.txt index e97d3004c5ef19..729675306c087c 100644 --- a/deps/media-playback/CMakeLists.txt +++ b/deps/media-playback/CMakeLists.txt @@ -9,8 +9,14 @@ add_library(OBS::media-playback ALIAS media-playback) target_sources( media-playback - INTERFACE media-playback/media.c media-playback/media.h - media-playback/decode.c media-playback/decode.h + INTERFACE media-playback/media.c + media-playback/media.h + media-playback/cache.c + media-playback/cache.h + media-playback/decode.c + media-playback/decode.h + media-playback/media-playback.c + media-playback/media-playback.h media-playback/closest-format.h) target_link_libraries(media-playback INTERFACE FFmpeg::avcodec FFmpeg::avdevice diff --git a/deps/media-playback/media-playback/cache.c b/deps/media-playback/media-playback/cache.c new file mode 100644 index 00000000000000..3314ac075bae6e --- /dev/null +++ b/deps/media-playback/media-playback/cache.c @@ -0,0 +1,698 @@ +#include +#include + +#include "media-playback.h" +#include "cache.h" +#include "media.h" + +extern bool mp_media_init2(mp_media_t *m); +extern bool mp_media_prepare_frames(mp_media_t *m); +extern bool mp_media_eof(mp_media_t *m); +extern void mp_media_next_video(mp_media_t *m, bool preload); +extern void mp_media_next_audio(mp_media_t *m); +extern bool mp_media_reset(mp_media_t *m); + +static bool mp_cache_reset(mp_cache_t *c); + +static int64_t base_sys_ts = 0; + +#define v_eof(c) (c->cur_v_idx == c->video_frames.num) +#define a_eof(c) (c->cur_a_idx == c->audio_segments.num) + +static inline int64_t mp_cache_get_next_min_pts(mp_cache_t *c) +{ + int64_t min_next_ns = 0x7FFFFFFFFFFFFFFFLL; + + if (c->has_video && !v_eof(c)) { + min_next_ns = c->next_v_ts; + } + if (c->has_audio && !a_eof(c) && c->next_a_ts < min_next_ns) { + min_next_ns = c->next_a_ts; + } + + return min_next_ns; +} + +static inline int64_t mp_cache_get_base_pts(mp_cache_t *c) +{ + int64_t base_ts = 0; + + if (c->has_video && c->next_v_ts > base_ts) + base_ts = c->next_v_ts; + if (c->has_audio && c->next_a_ts > base_ts) + base_ts = c->next_a_ts; + + return base_ts; +} + +static void reset_ts(mp_cache_t *c) +{ + c->base_ts += mp_cache_get_base_pts(c); + c->play_sys_ts = (int64_t)os_gettime_ns(); + c->start_ts = c->next_pts_ns = mp_cache_get_next_min_pts(c); + c->next_ns = 0; +} + +static inline bool mp_cache_sleep(mp_cache_t *c) +{ + bool timeout = false; + + if (!c->next_ns) { + c->next_ns = os_gettime_ns(); + } else { + const uint64_t t = os_gettime_ns(); + if (c->next_ns > t) { + const uint32_t delta_ms = + (uint32_t)((c->next_ns - t + 500000) / 1000000); + if (delta_ms > 0) { + static const uint32_t timeout_ms = 200; + timeout = delta_ms > timeout_ms; + os_sleep_ms(timeout ? timeout_ms : delta_ms); + } + } + } + + return timeout; +} + +static bool mp_cache_eof(mp_cache_t *c) +{ + bool v_ended = !c->has_video || v_eof(c); + bool a_ended = !c->has_audio || a_eof(c); + bool eof = v_ended && a_ended; + + if (!eof) + return false; + + pthread_mutex_lock(&c->mutex); + if (!c->looping) { + c->active = false; + c->stopping = true; + } + pthread_mutex_unlock(&c->mutex); + + mp_cache_reset(c); + return true; +} + +bool mp_cache_decode(mp_cache_t *c) +{ + mp_media_t *m = &c->m; + bool success = false; + + m->full_decode = true; + + mp_media_reset(m); + + while (!mp_media_eof(m)) { + if (m->has_video) + mp_media_next_video(m, false); + if (m->has_audio) + mp_media_next_audio(m); + + if (!mp_media_prepare_frames(m)) + goto fail; + } + + success = true; + + c->start_time = c->m.fmt->start_time; + if (c->start_time == AV_NOPTS_VALUE) + c->start_time = 0; + +fail: + mp_media_free(m); + return success; +} + +static void seek_to(mp_cache_t *c, int64_t pos) +{ + size_t new_v_idx = 0; + size_t new_a_idx = 0; + + if (pos > c->media_duration) { + blog(LOG_WARNING, "MP: Invalid seek position"); + return; + } + + if (c->has_video) { + struct obs_source_frame *v; + + for (size_t i = 0; i < c->video_frames.num; i++) { + v = &c->video_frames.array[i]; + new_v_idx = i; + if ((int64_t)v->timestamp >= pos) { + break; + } + } + + size_t next_idx = new_v_idx + 1; + if (next_idx == c->video_frames.num) { + c->next_v_ts = + (int64_t)v->timestamp + c->final_v_duration; + } else { + struct obs_source_frame *next = + &c->video_frames.array[next_idx]; + c->next_v_ts = (int64_t)next->timestamp; + } + } + if (c->has_audio) { + struct obs_source_audio *a; + for (size_t i = 0; i < c->audio_segments.num; i++) { + a = &c->audio_segments.array[i]; + new_a_idx = i; + if ((int64_t)a->timestamp >= pos) { + break; + } + } + + size_t next_idx = new_a_idx + 1; + if (next_idx == c->audio_segments.num) { + c->next_a_ts = + (int64_t)a->timestamp + c->final_a_duration; + } else { + struct obs_source_audio *next = + &c->audio_segments.array[next_idx]; + c->next_a_ts = (int64_t)next->timestamp; + } + } + + c->cur_v_idx = c->next_v_idx = new_v_idx; + c->cur_a_idx = c->next_a_idx = new_a_idx; +} + +/* maximum timestamp variance in nanoseconds */ +#define MAX_TS_VAR 2000000000LL + +static inline bool mp_media_can_play_video(mp_cache_t *c) +{ + return !v_eof(c) && (c->next_v_ts <= c->next_pts_ns || + (c->next_v_ts - c->next_pts_ns > MAX_TS_VAR)); +} + +static inline bool mp_media_can_play_audio(mp_cache_t *c) +{ + return !a_eof(c) && (c->next_a_ts <= c->next_pts_ns || + (c->next_a_ts - c->next_pts_ns > MAX_TS_VAR)); +} + +static inline void calc_next_v_ts(mp_cache_t *c, struct obs_source_frame *frame) +{ + int64_t offset; + if (c->next_v_idx < c->video_frames.num) { + struct obs_source_frame *next = + &c->video_frames.array[c->next_v_idx]; + offset = (int64_t)(next->timestamp - frame->timestamp); + } else { + offset = c->final_v_duration; + } + + c->next_v_ts += offset; +} + +static inline void calc_next_a_ts(mp_cache_t *c, struct obs_source_audio *audio) +{ + int64_t offset; + if (c->next_a_idx < c->audio_segments.num) { + struct obs_source_audio *next = + &c->audio_segments.array[c->next_a_idx]; + offset = (int64_t)(next->timestamp - audio->timestamp); + } else { + offset = c->final_a_duration; + } + + c->next_a_ts += offset; +} + +static void mp_cache_next_video(mp_cache_t *c, bool preload) +{ + /* eof check */ + if (c->next_v_idx == c->video_frames.num) { + if (mp_media_can_play_video(c)) + c->cur_v_idx = c->next_v_idx; + return; + } + + struct obs_source_frame *frame = &c->video_frames.array[c->next_v_idx]; + struct obs_source_frame dup = *frame; + + dup.timestamp = c->base_ts + dup.timestamp - c->start_ts + + c->play_sys_ts - base_sys_ts; + + if (!preload) { + if (!mp_media_can_play_video(c)) + return; + + if (c->v_cb) + c->v_cb(c->opaque, &dup); + + if (c->cur_v_idx < c->next_v_idx) + ++c->cur_v_idx; + ++c->next_v_idx; + calc_next_v_ts(c, frame); + } else { + if (c->seek_next_ts && c->v_seek_cb) { + c->v_seek_cb(c->opaque, &dup); + } else if (!c->request_preload) { + c->v_preload_cb(c->opaque, &dup); + } + } +} + +static void mp_cache_next_audio(mp_cache_t *c) +{ + /* eof check */ + if (c->next_a_idx == c->video_frames.num) { + if (mp_media_can_play_audio(c)) + c->cur_a_idx = c->next_a_idx; + return; + } + + if (!mp_media_can_play_audio(c)) + return; + + struct obs_source_audio *audio = + &c->audio_segments.array[c->next_a_idx]; + struct obs_source_audio dup = *audio; + + dup.timestamp = c->base_ts + dup.timestamp - c->start_ts + + c->play_sys_ts - base_sys_ts; + if (c->a_cb) + c->a_cb(c->opaque, &dup); + + if (c->cur_a_idx < c->next_a_idx) + ++c->cur_a_idx; + ++c->next_a_idx; + calc_next_a_ts(c, audio); +} + +static bool mp_cache_reset(mp_cache_t *c) +{ + bool stopping; + bool active; + + int64_t next_ts = mp_cache_get_base_pts(c); + int64_t offset = next_ts - c->next_pts_ns; + int64_t start_time = c->start_time; + + c->eof = false; + c->base_ts += next_ts; + c->seek_next_ts = false; + + seek_to(c, start_time); + + pthread_mutex_lock(&c->mutex); + stopping = c->stopping; + active = c->active; + c->stopping = false; + pthread_mutex_unlock(&c->mutex); + + if (c->has_video) { + size_t next_idx = c->video_frames.num > 1 ? 1 : 0; + c->cur_v_idx = c->next_v_idx = 0; + c->next_v_ts = c->video_frames.array[next_idx].timestamp; + } + if (c->has_audio) { + size_t next_idx = c->audio_segments.num > 1 ? 1 : 0; + c->cur_a_idx = c->next_a_idx = 0; + c->next_a_ts = c->audio_segments.array[next_idx].timestamp; + } + + if (active) { + if (!c->play_sys_ts) + c->play_sys_ts = (int64_t)os_gettime_ns(); + c->start_ts = c->next_pts_ns = mp_cache_get_next_min_pts(c); + if (c->next_ns) + c->next_ns += offset; + } else { + c->start_ts = c->next_pts_ns = mp_cache_get_next_min_pts(c); + c->play_sys_ts = (int64_t)os_gettime_ns(); + c->next_ns = 0; + } + + c->pause = false; + + if (!active && c->v_preload_cb) + mp_cache_next_video(c, true); + if (stopping && c->stop_cb) + c->stop_cb(c->opaque); + return true; +} + +static void mp_cache_calc_next_ns(mp_cache_t *c) +{ + int64_t min_next_ns = mp_cache_get_next_min_pts(c); + int64_t delta = min_next_ns - c->next_pts_ns; + + if (c->seek_next_ts) { + delta = 0; + c->seek_next_ts = false; + } else { +#ifdef _DEBUG + assert(delta >= 0); +#endif + if (delta < 0) + delta = 0; + if (delta > 3000000000) + delta = 0; + } + + c->next_ns += delta; + c->next_pts_ns = min_next_ns; +} + +static inline bool mp_cache_thread(mp_cache_t *c) +{ + os_set_thread_name("mp_cache_thread"); + + if (!mp_cache_decode(c)) { + return false; + } + + for (;;) { + bool reset, kill, is_active, seek, pause, reset_time, + preload_frame; + int64_t seek_pos; + bool timeout = false; + + pthread_mutex_lock(&c->mutex); + is_active = c->active; + pause = c->pause; + pthread_mutex_unlock(&c->mutex); + + if (!is_active || pause) { + if (os_sem_wait(c->sem) < 0) + return false; + if (pause) + reset_ts(c); + } else { + timeout = mp_cache_sleep(c); + } + + pthread_mutex_lock(&c->mutex); + + reset = c->reset; + kill = c->kill; + c->reset = false; + c->kill = false; + + preload_frame = c->preload_frame; + pause = c->pause; + seek_pos = c->seek_pos; + seek = c->seek; + reset_time = c->reset_ts; + c->preload_frame = false; + c->seek = false; + c->reset_ts = false; + + pthread_mutex_unlock(&c->mutex); + + if (kill) { + break; + } + if (reset) { + mp_cache_reset(c); + continue; + } + + if (seek) { + c->seek_next_ts = true; + seek_to(c, seek_pos); + continue; + } + + if (reset_time) { + reset_ts(c); + continue; + } + + if (pause) + continue; + + if (preload_frame) + c->v_preload_cb(c->opaque, &c->video_frames.array[0]); + + /* frames are ready */ + if (is_active && !timeout) { + if (c->has_video) + mp_cache_next_video(c, false); + if (c->has_audio) + mp_cache_next_audio(c); + + if (mp_cache_eof(c)) + continue; + + mp_cache_calc_next_ns(c); + } + } + + return true; +} + +static void *mp_cache_thread_start(void *opaque) +{ + mp_cache_t *c = opaque; + + if (!mp_cache_thread(c)) { + if (c->stop_cb) { + c->stop_cb(c->opaque); + } + } + + return NULL; +} + +static void fill_video(void *data, struct obs_source_frame *frame) +{ + mp_cache_t *c = data; + struct obs_source_frame dup; + + obs_source_frame_init(&dup, frame->format, frame->width, frame->height); + obs_source_frame_copy(&dup, frame); + + dup.timestamp = frame->timestamp; + + c->final_v_duration = c->m.v.last_duration; + + da_push_back(c->video_frames, &dup); +} + +static void fill_audio(void *data, struct obs_source_audio *audio) +{ + mp_cache_t *c = data; + struct obs_source_audio dup = *audio; + + size_t size = + get_total_audio_size(dup.format, dup.speakers, dup.frames); + dup.data[0] = bmalloc(size); + + size_t planes = get_audio_planes(dup.format, dup.speakers); + if (planes > 1) { + size = get_audio_bytes_per_channel(dup.format) * dup.frames; + uint8_t *out = (uint8_t *)dup.data[0]; + + for (size_t i = 0; i < planes; i++) { + if (i > 0) + dup.data[i] = out; + + memcpy(out, audio->data[i], size); + out += size; + } + } else { + memcpy((uint8_t *)dup.data[0], audio->data[0], size); + } + + c->final_a_duration = c->m.a.last_duration; + + da_push_back(c->audio_segments, &dup); +} + +static inline bool mp_cache_init_internal(mp_cache_t *c, + const struct mp_media_info *info) +{ + if (pthread_mutex_init(&c->mutex, NULL) != 0) { + blog(LOG_WARNING, "MP: Failed to init mutex"); + return false; + } + if (os_sem_init(&c->sem, 0) != 0) { + blog(LOG_WARNING, "MP: Failed to init semaphore"); + return false; + } + + c->path = info->path ? bstrdup(info->path) : NULL; + c->format_name = info->format ? bstrdup(info->format) : NULL; + + if (pthread_create(&c->thread, NULL, mp_cache_thread_start, c) != 0) { + blog(LOG_WARNING, "MP: Could not create media thread"); + return false; + } + + c->thread_valid = true; + return true; +} + +bool mp_cache_init(mp_cache_t *c, const struct mp_media_info *info) +{ + struct mp_media_info info2 = *info; + + info2.opaque = c; + info2.v_cb = fill_video; + info2.a_cb = fill_audio; + info2.v_preload_cb = NULL; + info2.v_seek_cb = NULL; + info2.stop_cb = NULL; + info2.full_decode = true; + + mp_media_t *m = &c->m; + if (!mp_media_init(m, &info2)) { + mp_cache_free(c); + return false; + } + if (!mp_media_init2(m)) { + mp_cache_free(c); + return false; + } + + pthread_mutex_init_value(&c->mutex); + c->opaque = info->opaque; + c->v_cb = info->v_cb; + c->a_cb = info->a_cb; + c->stop_cb = info->stop_cb; + c->ffmpeg_options = info->ffmpeg_options; + c->v_seek_cb = info->v_seek_cb; + c->v_preload_cb = info->v_preload_cb; + c->request_preload = info->request_preload; + c->speed = info->speed; + c->media_duration = m->fmt->duration; + + c->has_video = m->has_video; + c->has_audio = m->has_audio; + + if (!base_sys_ts) + base_sys_ts = (int64_t)os_gettime_ns(); + + if (!mp_cache_init_internal(c, info)) { + mp_cache_free(c); + return false; + } + + return true; +} + +static void mp_kill_thread(mp_cache_t *c) +{ + if (c->thread_valid) { + pthread_mutex_lock(&c->mutex); + c->kill = true; + pthread_mutex_unlock(&c->mutex); + os_sem_post(c->sem); + + pthread_join(c->thread, NULL); + } +} + +void mp_cache_free(mp_cache_t *c) +{ + if (!c) + return; + + mp_cache_stop(c); + mp_kill_thread(c); + + if (c->m.fmt) + mp_media_free(&c->m); + + for (size_t i = 0; i < c->video_frames.num; i++) { + struct obs_source_frame *f = &c->video_frames.array[i]; + obs_source_frame_free(f); + } + for (size_t i = 0; i < c->audio_segments.num; i++) { + struct obs_source_audio *a = &c->audio_segments.array[i]; + bfree((void *)a->data[0]); + } + da_free(c->video_frames); + da_free(c->audio_segments); + + bfree(c->path); + bfree(c->format_name); + pthread_mutex_destroy(&c->mutex); + os_sem_destroy(c->sem); + memset(c, 0, sizeof(*c)); +} + +void mp_cache_play(mp_cache_t *c, bool loop) +{ + pthread_mutex_lock(&c->mutex); + + if (c->active) + c->reset = true; + + c->looping = loop; + c->active = true; + + pthread_mutex_unlock(&c->mutex); + + os_sem_post(c->sem); +} + +void mp_cache_play_pause(mp_cache_t *c, bool pause) +{ + pthread_mutex_lock(&c->mutex); + if (c->active) { + c->pause = pause; + c->reset_ts = !pause; + } + pthread_mutex_unlock(&c->mutex); + + os_sem_post(c->sem); +} + +void mp_cache_stop(mp_cache_t *c) +{ + pthread_mutex_lock(&c->mutex); + if (c->active) { + c->reset = true; + c->active = false; + c->stopping = true; + } + pthread_mutex_unlock(&c->mutex); + + os_sem_post(c->sem); +} + +void mp_cache_preload_frame(mp_cache_t *c) +{ + if (c->request_preload && c->thread_valid && c->v_preload_cb) { + pthread_mutex_lock(&c->mutex); + c->preload_frame = true; + pthread_mutex_unlock(&c->mutex); + os_sem_post(c->sem); + } +} + +int64_t mp_cache_get_current_time(mp_cache_t *c) +{ + return mp_cache_get_base_pts(c) * (int64_t)c->speed / 100000000LL; +} + +void mp_cache_seek(mp_cache_t *c, int64_t pos) +{ + pthread_mutex_lock(&c->mutex); + if (c->active) { + c->seek = true; + c->seek_pos = pos * 1000; + } + pthread_mutex_unlock(&c->mutex); + + os_sem_post(c->sem); +} + +int64_t mp_cache_get_frames(mp_cache_t *c) +{ + return c->video_frames.num; +} + +int64_t mp_cache_get_duration(mp_cache_t *c) +{ + return c->media_duration; +} diff --git a/deps/media-playback/media-playback/cache.h b/deps/media-playback/media-playback/cache.h new file mode 100644 index 00000000000000..d5ef506eacc410 --- /dev/null +++ b/deps/media-playback/media-playback/cache.h @@ -0,0 +1,81 @@ +#pragma once + +#include +#include +#include + +#include "media.h" + +struct mp_cache { + mp_video_cb v_preload_cb; + mp_video_cb v_seek_cb; + mp_stop_cb stop_cb; + mp_video_cb v_cb; + mp_audio_cb a_cb; + void *opaque; + bool request_preload; + bool has_video; + bool has_audio; + + char *path; + char *format_name; + char *ffmpeg_options; + int buffering; + int speed; + + pthread_mutex_t mutex; + os_sem_t *sem; + bool preload_frame; + bool stopping; + bool looping; + bool active; + bool reset; + bool kill; + + bool thread_valid; + pthread_t thread; + + DARRAY(struct obs_source_frame) video_frames; + DARRAY(struct obs_source_audio) audio_segments; + + size_t cur_v_idx; + size_t cur_a_idx; + size_t next_v_idx; + size_t next_a_idx; + int64_t next_v_ts; + int64_t next_a_ts; + + int64_t final_v_duration; + int64_t final_a_duration; + + int64_t play_sys_ts; + int64_t next_pts_ns; + uint64_t next_ns; + int64_t start_ts; + int64_t base_ts; + + bool pause; + bool reset_ts; + bool seek; + bool seek_next_ts; + bool eof; + int64_t seek_pos; + int64_t start_time; + int64_t media_duration; + + mp_media_t m; +}; + +typedef struct mp_cache mp_cache_t; + +extern bool mp_cache_init(mp_cache_t *c, const struct mp_media_info *info); +extern void mp_cache_free(mp_cache_t *c); + +extern void mp_cache_play(mp_cache_t *c, bool loop); +extern void mp_cache_play_pause(mp_cache_t *c, bool pause); +extern void mp_cache_stop(mp_cache_t *c); +extern void mp_cache_preload_frame(mp_cache_t *c); +extern int64_t mp_cache_get_current_time(mp_cache_t *c); +extern void mp_cache_seek(mp_cache_t *c, int64_t pos); +extern int64_t mp_cache_get_frames(mp_cache_t *c); +extern int64_t mp_cache_get_duration(mp_cache_t *c); diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index 08377ebe4814ac..05d6afcc649a20 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -16,6 +16,7 @@ #include "decode.h" +#include "media-playback.h" #include "media.h" #include diff --git a/deps/media-playback/media-playback/media-playback.c b/deps/media-playback/media-playback/media-playback.c new file mode 100644 index 00000000000000..2f6c57b61387ba --- /dev/null +++ b/deps/media-playback/media-playback/media-playback.c @@ -0,0 +1,144 @@ +#include "media-playback.h" +#include "media.h" +#include "cache.h" + +struct media_playback { + bool is_cached; + union { + mp_media_t media; + mp_cache_t cache; + }; +}; + +media_playback_t *media_playback_create(const struct mp_media_info *info) +{ + media_playback_t *mp = bzalloc(sizeof(*mp)); + mp->is_cached = info->is_local_file && info->full_decode; + + if ((mp->is_cached && !mp_cache_init(&mp->cache, info)) || + (!mp->is_cached && !mp_media_init(&mp->media, info))) { + bfree(mp); + return NULL; + } + + return mp; +} + +void media_playback_destroy(media_playback_t *mp) +{ + if (!mp) + return; + + if (mp->is_cached) + mp_cache_free(&mp->cache); + else + mp_media_free(&mp->media); + bfree(mp); +} + +void media_playback_play(media_playback_t *mp, bool looping, bool reconnecting) +{ + if (!mp) + return; + + if (mp->is_cached) + mp_cache_play(&mp->cache, looping); + else + mp_media_play(&mp->media, looping, reconnecting); +} + +void media_playback_play_pause(media_playback_t *mp, bool pause) +{ + if (!mp) + return; + + if (mp->is_cached) + mp_cache_play_pause(&mp->cache, pause); + else + mp_media_play_pause(&mp->media, pause); +} + +void media_playback_stop(media_playback_t *mp) +{ + if (!mp) + return; + + if (mp->is_cached) + mp_cache_stop(&mp->cache); + else + mp_media_stop(&mp->media); +} + +void media_playback_preload_frame(media_playback_t *mp) +{ + if (!mp) + return; + + if (mp->is_cached) + mp_cache_preload_frame(&mp->cache); + else + mp_media_preload_frame(&mp->media); +} + +int64_t media_playback_get_current_time(media_playback_t *mp) +{ + if (!mp) + return 0; + + if (mp->is_cached) + return mp_cache_get_current_time(&mp->cache); + else + return mp_media_get_current_time(&mp->media); +} + +void media_playback_seek(media_playback_t *mp, int64_t pos) +{ + if (mp->is_cached) + mp_cache_seek(&mp->cache, pos); + else + mp_media_seek(&mp->media, pos); +} + +int64_t media_playback_get_frames(media_playback_t *mp) +{ + if (!mp) + return 0; + + if (mp->is_cached) + return mp_cache_get_frames(&mp->cache); + else + return mp_media_get_frames(&mp->media); +} + +int64_t media_playback_get_duration(media_playback_t *mp) +{ + if (!mp) + return 0; + + if (mp->is_cached) + return mp_cache_get_duration(&mp->cache); + else + return mp_media_get_duration(&mp->media); +} + +bool media_playback_has_video(media_playback_t *mp) +{ + if (!mp) + return false; + + if (mp->is_cached) + return mp->cache.has_video; + else + return mp->media.has_video; +} + +bool media_playback_has_audio(media_playback_t *mp) +{ + if (!mp) + return false; + + if (mp->is_cached) + return mp->cache.has_audio; + else + return mp->media.has_audio; +} diff --git a/deps/media-playback/media-playback/media-playback.h b/deps/media-playback/media-playback/media-playback.h new file mode 100644 index 00000000000000..bbb07e495023e2 --- /dev/null +++ b/deps/media-playback/media-playback/media-playback.h @@ -0,0 +1,49 @@ +#pragma once + +#include + +struct media_playback; +typedef struct media_playback media_playback_t; + +typedef void (*mp_video_cb)(void *opaque, struct obs_source_frame *frame); +typedef void (*mp_audio_cb)(void *opaque, struct obs_source_audio *audio); +typedef void (*mp_stop_cb)(void *opaque); + +struct mp_media_info { + void *opaque; + + mp_video_cb v_cb; + mp_video_cb v_preload_cb; + mp_video_cb v_seek_cb; + mp_audio_cb a_cb; + mp_stop_cb stop_cb; + + const char *path; + const char *format; + char *ffmpeg_options; + int buffering; + int speed; + enum video_range_type force_range; + bool is_linear_alpha; + bool hardware_decoding; + bool is_local_file; + bool reconnecting; + bool request_preload; + bool full_decode; +}; + +extern media_playback_t * +media_playback_create(const struct mp_media_info *info); +extern void media_playback_destroy(media_playback_t *mp); + +extern void media_playback_play(media_playback_t *mp, bool looping, + bool reconnecting); +extern void media_playback_play_pause(media_playback_t *mp, bool pause); +extern void media_playback_stop(media_playback_t *mp); +extern void media_playback_preload_frame(media_playback_t *mp); +extern int64_t media_playback_get_current_time(media_playback_t *mp); +extern void media_playback_seek(media_playback_t *mp, int64_t pos); +extern int64_t media_playback_get_frames(media_playback_t *mp); +extern int64_t media_playback_get_duration(media_playback_t *mp); +extern bool media_playback_has_video(media_playback_t *mp); +extern bool media_playback_has_audio(media_playback_t *mp); diff --git a/deps/media-playback/media-playback/media.c b/deps/media-playback/media-playback/media.c index ea7b3b29ac90ad..14b80b9ed36486 100644 --- a/deps/media-playback/media-playback/media.c +++ b/deps/media-playback/media-playback/media.c @@ -14,11 +14,11 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include #include #include +#include "media-playback.h" #include "media.h" #include "closest-format.h" @@ -275,7 +275,7 @@ static bool mp_media_init_scaling(mp_media_t *m) return true; } -static bool mp_media_prepare_frames(mp_media_t *m) +bool mp_media_prepare_frames(mp_media_t *m) { bool actively_seeking = m->seek_next_ts && m->pause; @@ -344,11 +344,13 @@ static inline int64_t mp_media_get_base_pts(mp_media_t *m) static inline bool mp_media_can_play_frame(mp_media_t *m, struct mp_decode *d) { + if (m->full_decode) + return d->frame_ready; return d->frame_ready && (d->frame_pts <= m->next_pts_ns || (d->frame_pts - m->next_pts_ns > MAX_TS_VAR)); } -static void mp_media_next_audio(mp_media_t *m) +void mp_media_next_audio(mp_media_t *m) { struct mp_decode *d = &m->a; struct obs_source_audio audio = {0}; @@ -374,9 +376,10 @@ static void mp_media_next_audio(mp_media_t *m) audio.speakers = convert_speaker_layout(channels); audio.format = convert_sample_format(f->format); audio.frames = f->nb_samples; - - audio.timestamp = m->base_ts + d->frame_pts - m->start_ts + - m->play_sys_ts - base_sys_ts; + audio.timestamp = m->full_decode + ? d->frame_pts + : m->base_ts + d->frame_pts - m->start_ts + + m->play_sys_ts - base_sys_ts; if (audio.format == AUDIO_FORMAT_UNKNOWN) return; @@ -384,7 +387,7 @@ static void mp_media_next_audio(mp_media_t *m) m->a_cb(m->opaque, &audio); } -static void mp_media_next_video(mp_media_t *m, bool preload) +void mp_media_next_video(mp_media_t *m, bool preload) { struct mp_decode *d = &m->v; struct obs_source_frame *frame = &m->obsframe; @@ -462,8 +465,10 @@ static void mp_media_next_video(mp_media_t *m, bool preload) if (frame->format == VIDEO_FORMAT_NONE) return; - frame->timestamp = m->base_ts + d->frame_pts - m->start_ts + - m->play_sys_ts - base_sys_ts; + frame->timestamp = m->full_decode + ? d->frame_pts + : (m->base_ts + d->frame_pts - m->start_ts + + m->play_sys_ts - base_sys_ts); frame->width = f->width; frame->height = f->height; @@ -499,7 +504,7 @@ static void mp_media_next_video(mp_media_t *m, bool preload) if (preload) { if (m->seek_next_ts && m->v_seek_cb) { m->v_seek_cb(m->opaque, frame); - } else { + } else if (!m->request_preload) { m->v_preload_cb(m->opaque, frame); } } else { @@ -563,7 +568,7 @@ static void seek_to(mp_media_t *m, int64_t pos) mp_decode_flush(&m->a); } -static bool mp_media_reset(mp_media_t *m) +bool mp_media_reset(mp_media_t *m) { bool stopping; bool active; @@ -632,7 +637,7 @@ static inline bool mp_media_sleep(mp_media_t *m) return timeout; } -static inline bool mp_media_eof(mp_media_t *m) +bool mp_media_eof(mp_media_t *m) { bool v_ended = !m->has_video || !m->v.frame_ready; bool a_ended = !m->has_audio || !m->a.frame_ready; @@ -759,11 +764,19 @@ static void reset_ts(mp_media_t *m) m->next_ns = 0; } +bool mp_media_init2(mp_media_t *m) +{ + if (!init_avformat(m)) { + return false; + } + return true; +} + static inline bool mp_media_thread(mp_media_t *m) { os_set_thread_name("mp_media_thread"); - if (!init_avformat(m)) { + if (!mp_media_init2(m)) { return false; } if (!mp_media_reset(m)) { @@ -771,7 +784,8 @@ static inline bool mp_media_thread(mp_media_t *m) } for (;;) { - bool reset, kill, is_active, seek, pause, reset_time; + bool reset, kill, is_active, seek, pause, reset_time, + preload_frame; int64_t seek_pos; bool timeout = false; @@ -796,10 +810,12 @@ static inline bool mp_media_thread(mp_media_t *m) m->reset = false; m->kill = false; + preload_frame = m->preload_frame; pause = m->pause; seek_pos = m->seek_pos; seek = m->seek; reset_time = m->reset_ts; + m->preload_frame = false; m->seek = false; m->reset_ts = false; @@ -827,6 +843,9 @@ static inline bool mp_media_thread(mp_media_t *m) if (pause) continue; + if (preload_frame) + m->v_preload_cb(m->opaque, &m->obsframe); + /* frames are ready */ if (is_active && !timeout) { if (m->has_video) @@ -875,6 +894,9 @@ static inline bool mp_media_init_internal(mp_media_t *m, m->format_name = info->format ? bstrdup(info->format) : NULL; m->hw = info->hardware_decoding; + if (info->full_decode) + return true; + if (pthread_create(&m->thread, NULL, mp_media_thread_start, m) != 0) { blog(LOG_WARNING, "MP: Could not create media thread"); return false; @@ -899,6 +921,7 @@ bool mp_media_init(mp_media_t *media, const struct mp_media_info *info) media->is_linear_alpha = info->is_linear_alpha; media->buffering = info->buffering; media->speed = info->speed; + media->request_preload = info->request_preload; media->is_local_file = info->is_local_file; da_init(media->packet_pool); @@ -990,6 +1013,16 @@ void mp_media_play_pause(mp_media_t *m, bool pause) os_sem_post(m->sem); } +void mp_media_preload_frame(mp_media_t *m) +{ + if (m->request_preload && m->thread_valid && m->v_preload_cb) { + pthread_mutex_lock(&m->mutex); + m->preload_frame = true; + pthread_mutex_unlock(&m->mutex); + os_sem_post(m->sem); + } +} + void mp_media_stop(mp_media_t *m) { pthread_mutex_lock(&m->mutex); @@ -1003,12 +1036,51 @@ void mp_media_stop(mp_media_t *m) os_sem_post(m->sem); } -int64_t mp_get_current_time(mp_media_t *m) +int64_t mp_media_get_current_time(mp_media_t *m) { return mp_media_get_base_pts(m) * (int64_t)m->speed / 100000000LL; } -void mp_media_seek_to(mp_media_t *m, int64_t pos) +int64_t mp_media_get_frames(mp_media_t *m) +{ + int64_t frames = 0; + + if (!m->fmt) { + return 0; + } + + int video_stream_index = av_find_best_stream(m->fmt, AVMEDIA_TYPE_VIDEO, + -1, -1, NULL, 0); + + if (video_stream_index < 0) { + blog(LOG_WARNING, "MP: Getting number of frames failed: No " + "video stream in media file!"); + return 0; + } + + AVStream *stream = m->fmt->streams[video_stream_index]; + + if (stream->nb_frames > 0) { + frames = stream->nb_frames; + } else { + blog(LOG_DEBUG, "MP: nb_frames not set, estimating using frame " + "rate and duration"); + AVRational avg_frame_rate = stream->avg_frame_rate; + frames = (int64_t)ceil((double)m->fmt->duration / + (double)AV_TIME_BASE * + (double)avg_frame_rate.num / + (double)avg_frame_rate.den); + } + + return frames; +} + +int64_t mp_media_get_duration(mp_media_t *m) +{ + return m->fmt ? m->fmt->duration : 0; +} + +void mp_media_seek(mp_media_t *m, int64_t pos) { pthread_mutex_lock(&m->mutex); if (m->active) { diff --git a/deps/media-playback/media-playback/media.h b/deps/media-playback/media-playback/media.h index 4e6a9af54f6155..391f1831f8603f 100644 --- a/deps/media-playback/media-playback/media.h +++ b/deps/media-playback/media-playback/media.h @@ -38,10 +38,6 @@ extern "C" { #pragma warning(pop) #endif -typedef void (*mp_video_cb)(void *opaque, struct obs_source_frame *frame); -typedef void (*mp_audio_cb)(void *opaque, struct obs_source_audio *audio); -typedef void (*mp_stop_cb)(void *opaque); - struct mp_media { AVFormatContext *fmt; @@ -66,6 +62,7 @@ struct mp_media { DARRAY(AVPacket *) packet_pool; struct mp_decode v; struct mp_decode a; + bool request_preload; bool is_local_file; bool reconnecting; bool has_video; @@ -85,11 +82,13 @@ struct mp_media { uint64_t next_ns; int64_t start_ts; int64_t base_ts; + bool full_decode; uint64_t interrupt_poll_ts; pthread_mutex_t mutex; os_sem_t *sem; + bool preload_frame; bool stopping; bool looping; bool active; @@ -108,35 +107,17 @@ struct mp_media { typedef struct mp_media mp_media_t; -struct mp_media_info { - void *opaque; - - mp_video_cb v_cb; - mp_video_cb v_preload_cb; - mp_video_cb v_seek_cb; - mp_audio_cb a_cb; - mp_stop_cb stop_cb; - - const char *path; - const char *format; - char *ffmpeg_options; - int buffering; - int speed; - enum video_range_type force_range; - bool is_linear_alpha; - bool hardware_decoding; - bool is_local_file; - bool reconnecting; -}; - extern bool mp_media_init(mp_media_t *media, const struct mp_media_info *info); extern void mp_media_free(mp_media_t *media); extern void mp_media_play(mp_media_t *media, bool loop, bool reconnecting); extern void mp_media_stop(mp_media_t *media); extern void mp_media_play_pause(mp_media_t *media, bool pause); -extern int64_t mp_get_current_time(mp_media_t *m); -extern void mp_media_seek_to(mp_media_t *m, int64_t pos); +extern void mp_media_preload_frame(mp_media_t *media); +extern int64_t mp_media_get_current_time(mp_media_t *m); +extern int64_t mp_media_get_frames(mp_media_t *m); +extern int64_t mp_media_get_duration(mp_media_t *m); +extern void mp_media_seek(mp_media_t *m, int64_t pos); /* #define DETAILED_DEBUG_INFO */ diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-source.c b/plugins/obs-ffmpeg/obs-ffmpeg-source.c index 5233da0d6fb093..3a0aab63993835 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-source.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-source.c @@ -15,13 +15,14 @@ */ #include +#include #include #include #include "obs-ffmpeg-compat.h" #include "obs-ffmpeg-formats.h" -#include +#include #define FF_LOG_S(source, level, format, ...) \ blog(level, "[Media Source '%s']: " format, \ @@ -30,8 +31,7 @@ FF_LOG_S(s->source, level, format, ##__VA_ARGS__) struct ffmpeg_source { - mp_media_t media; - bool media_valid; + media_playback_t *media; bool destroy_media; enum video_range_type range; @@ -47,10 +47,12 @@ struct ffmpeg_source { bool is_looping; bool is_local_file; bool is_hw_decoding; + bool full_decode; bool is_clear_on_media_end; bool restart_on_activate; bool close_when_inactive; bool seekable; + bool is_stinger; pthread_t reconnect_thread; bool stop_reconnect; @@ -283,11 +285,11 @@ static void get_audio(void *opaque, struct obs_source_audio *a) static void media_stopped(void *opaque) { struct ffmpeg_source *s = opaque; - if (s->is_clear_on_media_end) { + if (s->is_clear_on_media_end && !s->is_stinger) { obs_source_output_video(s->source, NULL); } - if ((s->close_when_inactive || !s->is_local_file) && s->media_valid) + if ((s->close_when_inactive || !s->is_local_file) && s->media) s->destroy_media = true; set_media_state(s, OBS_MEDIA_STATE_ENDED); @@ -314,22 +316,24 @@ static void ffmpeg_source_open(struct ffmpeg_source *s) .ffmpeg_options = s->ffmpeg_options, .is_local_file = s->is_local_file || s->seekable, .reconnecting = s->reconnecting, + .request_preload = s->is_stinger, + .full_decode = s->full_decode, }; - s->media_valid = mp_media_init(&s->media, &info); + s->media = media_playback_create(&info); } } static void ffmpeg_source_start(struct ffmpeg_source *s) { - if (!s->media_valid) + if (!s->media) ffmpeg_source_open(s); - if (!s->media_valid) + if (!s->media) return; - mp_media_play(&s->media, s->is_looping, s->reconnecting); - if (s->is_local_file && s->media.has_video && + media_playback_play(s->media, s->is_looping, s->reconnecting); + if (s->is_local_file && media_playback_has_video(s->media) && (s->is_clear_on_media_end || s->is_looping)) obs_source_show_preloaded_video(s->source); else @@ -343,7 +347,7 @@ static void *ffmpeg_source_reconnect(void *data) struct ffmpeg_source *s = data; os_sleep_ms(s->reconnect_delay_sec * 1000); - if (s->stop_reconnect || s->media_valid) + if (s->stop_reconnect || s->media) goto finish; bool active = obs_source_active(s->source); @@ -364,9 +368,9 @@ static void ffmpeg_source_tick(void *data, float seconds) struct ffmpeg_source *s = data; if (s->destroy_media) { - if (s->media_valid) { - mp_media_free(&s->media); - s->media_valid = false; + if (s->media) { + media_playback_destroy(s->media); + s->media = NULL; } s->destroy_media = false; @@ -401,6 +405,7 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings) struct ffmpeg_source *s = data; bool is_local_file = obs_data_get_bool(settings, "is_local_file"); + bool is_stinger = obs_data_get_bool(settings, "is_stinger"); const char *input; const char *input_format; @@ -443,6 +448,7 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings) s->input = input ? bstrdup(input) : NULL; s->input_format = input_format ? bstrdup(input_format) : NULL; s->is_hw_decoding = obs_data_get_bool(settings, "hw_decode"); + s->full_decode = obs_data_get_bool(settings, "full_decode"); s->is_clear_on_media_end = obs_data_get_bool(settings, "clear_on_media_end"); s->restart_on_activate = @@ -457,13 +463,14 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings) s->is_local_file = is_local_file; s->seekable = obs_data_get_bool(settings, "seekable"); s->ffmpeg_options = ffmpeg_options ? bstrdup(ffmpeg_options) : NULL; + s->is_stinger = is_stinger; if (s->speed_percent < 1 || s->speed_percent > 200) s->speed_percent = 100; - if (s->media_valid) { - mp_media_free(&s->media); - s->media_valid = false; + if (s->media) { + media_playback_destroy(s->media); + s->media = NULL; } bool active = obs_source_active(s->source); @@ -501,12 +508,21 @@ static void restart_proc(void *data, calldata_t *cd) UNUSED_PARAMETER(cd); } +static void preload_first_frame_proc(void *data, calldata_t *cd) +{ + struct ffmpeg_source *s = data; + if (s->is_stinger) + obs_source_output_video(s->source, NULL); + media_playback_preload_frame(s->media); + UNUSED_PARAMETER(cd); +} + static void get_duration(void *data, calldata_t *cd) { struct ffmpeg_source *s = data; int64_t dur = 0; - if (s->media.fmt) - dur = s->media.fmt->duration; + if (s->media) + dur = media_playback_get_duration(s->media); calldata_set_int(cd, "duration", dur * 1000); } @@ -514,37 +530,7 @@ static void get_duration(void *data, calldata_t *cd) static void get_nb_frames(void *data, calldata_t *cd) { struct ffmpeg_source *s = data; - int64_t frames = 0; - - if (!s->media.fmt) { - calldata_set_int(cd, "num_frames", frames); - return; - } - - int video_stream_index = av_find_best_stream( - s->media.fmt, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0); - - if (video_stream_index < 0) { - FF_BLOG(LOG_WARNING, "Getting number of frames failed: No " - "video stream in media file!"); - calldata_set_int(cd, "num_frames", frames); - return; - } - - AVStream *stream = s->media.fmt->streams[video_stream_index]; - - if (stream->nb_frames > 0) { - frames = stream->nb_frames; - } else { - FF_BLOG(LOG_DEBUG, "nb_frames not set, estimating using frame " - "rate and duration"); - AVRational avg_frame_rate = stream->avg_frame_rate; - frames = (int64_t)ceil((double)s->media.fmt->duration / - (double)AV_TIME_BASE * - (double)avg_frame_rate.num / - (double)avg_frame_rate.den); - } - + int64_t frames = media_playback_get_frames(s->media); calldata_set_int(cd, "num_frames", frames); } @@ -622,6 +608,8 @@ static void *ffmpeg_source_create(obs_data_t *settings, obs_source_t *source) proc_handler_t *ph = obs_source_get_proc_handler(source); proc_handler_add(ph, "void restart()", restart_proc, s); + proc_handler_add(ph, "void preload_first_frame()", + preload_first_frame_proc, s); proc_handler_add(ph, "void get_duration(out int duration)", get_duration, s); proc_handler_add(ph, "void get_nb_frames(out int num_frames)", @@ -642,8 +630,8 @@ static void ffmpeg_source_destroy(void *data) if (s->reconnect_thread_valid) pthread_join(s->reconnect_thread, NULL); } - if (s->media_valid) - mp_media_free(&s->media); + if (s->media) + media_playback_destroy(s->media); bfree(s->input); bfree(s->input_format); @@ -664,8 +652,8 @@ static void ffmpeg_source_deactivate(void *data) struct ffmpeg_source *s = data; if (s->restart_on_activate) { - if (s->media_valid) { - mp_media_stop(&s->media); + if (s->media) { + media_playback_stop(s->media); if (s->is_clear_on_media_end) obs_source_output_video(s->source, NULL); @@ -677,13 +665,13 @@ static void ffmpeg_source_play_pause(void *data, bool pause) { struct ffmpeg_source *s = data; - if (!s->media_valid) + if (!s->media) ffmpeg_source_open(s); - if (!s->media_valid) + if (!s->media) return; - mp_media_play_pause(&s->media, pause); + media_playback_play_pause(s->media, pause); if (pause) { @@ -699,8 +687,8 @@ static void ffmpeg_source_stop(void *data) { struct ffmpeg_source *s = data; - if (s->media_valid) { - mp_media_stop(&s->media); + if (s->media) { + media_playback_stop(s->media); obs_source_output_video(s->source, NULL); set_media_state(s, OBS_MEDIA_STATE_STOPPED); } @@ -721,8 +709,8 @@ static int64_t ffmpeg_source_get_duration(void *data) struct ffmpeg_source *s = data; int64_t dur = 0; - if (s->media.fmt) - dur = s->media.fmt->duration / INT64_C(1000); + if (s->media) + dur = media_playback_get_duration(s->media) / INT64_C(1000); return dur; } @@ -731,17 +719,17 @@ static int64_t ffmpeg_source_get_time(void *data) { struct ffmpeg_source *s = data; - return mp_get_current_time(&s->media); + return media_playback_get_current_time(s->media); } static void ffmpeg_source_set_time(void *data, int64_t ms) { struct ffmpeg_source *s = data; - if (!s->media_valid) + if (!s->media) return; - mp_media_seek_to(&s->media, ms); + media_playback_seek(s->media, ms); } static enum obs_media_state ffmpeg_source_get_state(void *data) diff --git a/plugins/obs-transitions/data/locale/en-US.ini b/plugins/obs-transitions/data/locale/en-US.ini index 6f54882d2cd729..44a772337473e7 100644 --- a/plugins/obs-transitions/data/locale/en-US.ini +++ b/plugins/obs-transitions/data/locale/en-US.ini @@ -28,6 +28,7 @@ TrackMatteLayoutHorizontal="Same file, side-by-side (stinger on the left, track TrackMatteLayoutVertical="Same file, stacked (stinger on top, track matte at the bottom)" TrackMatteLayoutSeparateFile="Separate file (warning: matte can get out of sync)" TrackMatteLayoutMask="Mask only" +PreloadVideoToRam="Preload Video to RAM" AudioFadeStyle="Audio Fade Style" AudioFadeStyle.FadeOutFadeIn="Fade out to transition point then fade in" AudioFadeStyle.CrossFade="Crossfade" diff --git a/plugins/obs-transitions/transition-stinger.c b/plugins/obs-transitions/transition-stinger.c index 076e2a46fc7493..71ce6d54225fad 100644 --- a/plugins/obs-transitions/transition-stinger.c +++ b/plugins/obs-transitions/transition-stinger.c @@ -69,11 +69,14 @@ static void stinger_update(void *data, obs_data_t *settings) struct stinger_info *s = data; const char *path = obs_data_get_string(settings, "path"); bool hw_decode = obs_data_get_bool(settings, "hw_decode"); + bool preload = obs_data_get_bool(settings, "preload"); obs_data_t *media_settings = obs_data_create(); obs_data_set_string(media_settings, "local_file", path); obs_data_set_bool(media_settings, "hw_decode", hw_decode); obs_data_set_bool(media_settings, "looping", false); + obs_data_set_bool(media_settings, "full_decode", preload); + obs_data_set_bool(media_settings, "is_stinger", true); obs_source_release(s->media_source); struct dstr name; @@ -635,6 +638,11 @@ static void stinger_transition_stop(void *data) if (s->matte_source) obs_source_remove_active_child(s->source, s->matte_source); + proc_handler_t *ph = obs_source_get_proc_handler(s->media_source); + + calldata_t cd = {0}; + proc_handler_call(ph, "preload_first_frame", &cd); + s->transitioning = false; } @@ -742,6 +750,8 @@ static obs_properties_t *stinger_properties(void *data) OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_properties_add_bool(ppts, "hw_decode", obs_module_text("HardwareDecode")); + obs_properties_add_bool(ppts, "preload", + obs_module_text("PreloadVideoToRam")); obs_property_list_add_int(p, obs_module_text("TransitionPointTypeTime"), TIMING_TIME); obs_property_list_add_int( From 20a3ec4a2f86a990237fe92a26ae5ea8b8bf20eb Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 3 Jan 2023 15:50:08 +0800 Subject: [PATCH 0245/2225] libobs: Fix scene_audio_render() incorrectly mixing audio When the `pos` variable is non-zero, audio does not get mixed correctly. This is due to the fact that the `pos` variable was erroneously being applied to the input rather than the output. --- libobs/obs-scene.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index d2bceb14230f77..f5d05a367d971d 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -1363,9 +1363,9 @@ static void process_all_audio_actions(struct obs_scene_item *item, static void mix_audio_with_buf(float *p_out, float *p_in, float *buf_in, size_t pos, size_t count) { - register float *out = p_out; - register float *buf = buf_in + pos; - register float *in = p_in + pos; + register float *out = p_out + pos; + register float *buf = buf_in; + register float *in = p_in; register float *end = in + count; while (in < end) @@ -1375,8 +1375,8 @@ static void mix_audio_with_buf(float *p_out, float *p_in, float *buf_in, static inline void mix_audio(float *p_out, float *p_in, size_t pos, size_t count) { - register float *out = p_out; - register float *in = p_in + pos; + register float *out = p_out + pos; + register float *in = p_in; register float *end = in + count; while (in < end) From fea4a19c8b146d01a0357ba59a1e6003e7018264 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sun, 26 Feb 2023 03:27:38 +0100 Subject: [PATCH 0246/2225] obs-ffmpeg: Add full_decode to media source log This is an option that while very powerful also provides a footgun for users if they don't have enough memory. It will be helpful for support volunteers to be able to see if the option has been enabled. --- plugins/obs-ffmpeg/obs-ffmpeg-source.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-source.c b/plugins/obs-ffmpeg/obs-ffmpeg-source.c index 3a0aab63993835..7758b944dba1a7 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-source.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-source.c @@ -238,6 +238,7 @@ static void dump_source_info(struct ffmpeg_source *s, const char *input, "\tis_clear_on_media_end: %s\n" "\trestart_on_activate: %s\n" "\tclose_when_inactive: %s\n" + "\tfull_decode: %s\n" "\tffmpeg_options: %s", input ? input : "(null)", input_format ? input_format : "(null)", s->speed_percent, @@ -245,7 +246,8 @@ static void dump_source_info(struct ffmpeg_source *s, const char *input, s->is_hw_decoding ? "yes" : "no", s->is_clear_on_media_end ? "yes" : "no", s->restart_on_activate ? "yes" : "no", - s->close_when_inactive ? "yes" : "no", s->ffmpeg_options); + s->close_when_inactive ? "yes" : "no", + s->full_decode ? "yes" : "no", s->ffmpeg_options); } static void get_frame(void *opaque, struct obs_source_frame *f) From 953e0eda53eb46c61be9e5cb65ed76520942aa82 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sun, 26 Feb 2023 18:39:26 +0100 Subject: [PATCH 0247/2225] UI: Remove unused variable --- UI/audio-encoders.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/UI/audio-encoders.cpp b/UI/audio-encoders.cpp index 109627fed5957e..c03501e05d8117 100644 --- a/UI/audio-encoders.cpp +++ b/UI/audio-encoders.cpp @@ -147,7 +147,6 @@ static void PopulateBitrateMap() struct obs_audio_info aoi; obs_get_audio_info(&aoi); - uint32_t output_channels = get_audio_channels(aoi.speakers); HandleEncoderProperties(fallbackEncoder.c_str()); From 77e4c1c30547e62e126e093acce0f018b6f473e5 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 27 Feb 2023 08:47:00 +0100 Subject: [PATCH 0248/2225] cmake: Check if Sparkle options are non-empty --- UI/CMakeLists.txt | 2 +- cmake/Modules/ObsHelpers_macOS.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 309fb8196acc5b..d66e2c14ffff7c 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -446,7 +446,7 @@ elseif(OS_MACOS) update/shared-update.cpp update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) - if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) + if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) find_library(SPARKLE Sparkle) mark_as_advanced(SPARKLE) diff --git a/cmake/Modules/ObsHelpers_macOS.cmake b/cmake/Modules/ObsHelpers_macOS.cmake index 2154fd714b2333..3d4514bca2aa0f 100644 --- a/cmake/Modules/ObsHelpers_macOS.cmake +++ b/cmake/Modules/ObsHelpers_macOS.cmake @@ -354,7 +354,7 @@ function(setup_obs_bundle target) set(_CODESIGN_ENTITLEMENTS \"${CMAKE_SOURCE_DIR}/cmake/bundle/macOS\")" COMPONENT obs_resources) - if(DEFINED SPARKLE_APPCAST_URL AND DEFINED SPARKLE_PUBLIC_KEY) + if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) add_custom_command( TARGET ${target} POST_BUILD From a5468cfee0d203dcb2f87e99317d4181ca5cc6fa Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 23 Oct 2022 03:19:58 +0200 Subject: [PATCH 0249/2225] libobs: Make wcs<->utf8 conversion consistent On Windows NULL characters would be included in the output if insize is non-zero, but on *nix it would abort on the first NULL. --- libobs/util/utf8.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs/util/utf8.c b/libobs/util/utf8.c index 3f8aadfc77527d..a90618ac878d0e 100644 --- a/libobs/util/utf8.c +++ b/libobs/util/utf8.c @@ -146,7 +146,7 @@ size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out, wlim = out == NULL ? NULL : out + outsize; for (; p < lim; p += n) { - if (!*p) + if (!*p && insize == 0) break; if (utf8_forbidden(*p) != 0 && (flags & UTF8_IGNORE_ERROR) == 0) @@ -276,7 +276,7 @@ size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, total = 0; for (; w < wlim; w++) { - if (!*w) + if (!*w && insize == 0) break; if (wchar_forbidden(*w) != 0) { From 76058833031407e503925590b5f16a01a426108a Mon Sep 17 00:00:00 2001 From: CodeYan01 <65320293+CodeYan01@users.noreply.github.com> Date: Fri, 24 Feb 2023 20:11:37 +0800 Subject: [PATCH 0250/2225] docs: Clarify weak source releasing --- docs/sphinx/reference-sources.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index 7f4caf2fb279ff..38996da1c7f148 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -789,10 +789,11 @@ General Source Functions .. function:: obs_weak_source_t *obs_source_get_weak_source(obs_source_t *source) obs_source_t *obs_weak_source_get_source(obs_weak_source_t *weak) - These functions are used to get a weak reference from a strong source - reference, or a strong source reference from a weak reference. If + These functions are used to get an incremented weak reference from a strong source + reference, or an incremented strong source reference from a weak reference. If the source is destroyed, *obs_weak_source_get_source* will return - *NULL*. + *NULL*. Release with :c:func:`obs_weak_source_release()` or + :c:func:`obs_source_release()`, respectively. --------------------- From 8ac894a62b8833547b2654c6b8276ad4671b3595 Mon Sep 17 00:00:00 2001 From: CodeYan01 <65320293+CodeYan01@users.noreply.github.com> Date: Fri, 24 Feb 2023 21:19:03 +0800 Subject: [PATCH 0251/2225] docs: Link to obs_scene_from_source in enum_scenes Enumerating scenes but receiving an obs_source_t is confusing. --- docs/sphinx/reference-core.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index 42ce3d46891f85..ac0a69739ea343 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -284,7 +284,8 @@ Libobs Objects .. function:: void obs_enum_scenes(bool (*enum_proc)(void*, obs_source_t*), void *param) - Enumerates all scenes. + Enumerates all scenes. Use :c:func:`obs_scene_from_source()` if the scene is + needed as an :c:type:`obs_scene_t`. Callback function returns true to continue enumeration, or false to end enumeration. From b4fdf2a329e661a47b29a9699c089ded84c124f5 Mon Sep 17 00:00:00 2001 From: CodeYan01 <65320293+CodeYan01@users.noreply.github.com> Date: Sat, 25 Feb 2023 13:15:34 +0800 Subject: [PATCH 0252/2225] docs: Clarify enum_scenes order --- docs/sphinx/reference-core.rst | 4 +++- docs/sphinx/reference-frontend-api.rst | 6 ++++-- docs/sphinx/reference-scenes.rst | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index ac0a69739ea343..002a6d3b71ec87 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -285,7 +285,9 @@ Libobs Objects .. function:: void obs_enum_scenes(bool (*enum_proc)(void*, obs_source_t*), void *param) Enumerates all scenes. Use :c:func:`obs_scene_from_source()` if the scene is - needed as an :c:type:`obs_scene_t`. + needed as an :c:type:`obs_scene_t`. The order that they are enumerated should + not be relied on. If one intends to enumerate the scenes in the order + presented by the OBS Studio Frontend, use :c:func:`obs_frontend_get_scenes()`. Callback function returns true to continue enumeration, or false to end enumeration. diff --git a/docs/sphinx/reference-frontend-api.rst b/docs/sphinx/reference-frontend-api.rst index 47eb89cc7ed30c..b1dcc97b95fb0e 100644 --- a/docs/sphinx/reference-frontend-api.rst +++ b/docs/sphinx/reference-frontend-api.rst @@ -259,7 +259,8 @@ Functions :return: The scene name list, ending with NULL. The list is stored within one contiguous segment of memory, so freeing the returned pointer with :c:func:`bfree()` will free the entire - list. + list. The order is same as the way the frontend displays it in + the Scenes dock. --------------------------------------- @@ -268,7 +269,8 @@ Functions :param sources: Pointer to a :c:type:`obs_frontend_source_list` structure to receive the list of reference-incremented scenes. Release with - :c:func:`obs_frontend_source_list_free` + :c:func:`obs_frontend_source_list_free`. The order is same as + the way the frontend displays it in the Scenes dock. --------------------------------------- diff --git a/docs/sphinx/reference-scenes.rst b/docs/sphinx/reference-scenes.rst index 359dfaa27273c2..ae54cbeac98946 100644 --- a/docs/sphinx/reference-scenes.rst +++ b/docs/sphinx/reference-scenes.rst @@ -265,7 +265,8 @@ General Scene Functions .. function:: void obs_scene_enum_items(obs_scene_t *scene, bool (*callback)(obs_scene_t*, obs_sceneitem_t*, void*), void *param) - Enumerates scene items within a scene. + Enumerates scene items within a scene in order of the bottommost scene item + to the topmost scene item. Callback function returns true to continue enumeration, or false to end enumeration. From 22a98c279eb10b2d16c7137308aa2208bbefb1fa Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Wed, 1 Mar 2023 23:15:33 +0900 Subject: [PATCH 0253/2225] UI: Fix tabstops on settings dialog --- UI/forms/OBSBasicSettings.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 83d2076dea8772..4f7ff195e19be9 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -7550,9 +7550,10 @@ scrollArea_2 language theme + openStatsOnStartup + hideOBSFromCapture updateChannelBox enableAutoUpdates - openStatsOnStartup warnBeforeStreamStart warnBeforeStreamStop warnBeforeRecordStop @@ -7713,7 +7714,6 @@ enableLowLatencyMode browserHWAccel hotkeyFocusType - hideOBSFromCapture ignoreRecommended useStreamKeyAdv hotkeyFilterSearch From a9d3b9cbd1dbc2e702da7e45b3da3657a35a354c Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 27 Feb 2023 20:14:59 +0100 Subject: [PATCH 0254/2225] libobs: Clarify memalign ToDo item --- libobs/util/bmem.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libobs/util/bmem.c b/libobs/util/bmem.c index dbe6fce9d81552..814c9da946510c 100644 --- a/libobs/util/bmem.c +++ b/libobs/util/bmem.c @@ -28,7 +28,16 @@ #define ALIGNMENT 32 -/* TODO: use memalign for non-windows systems */ +/* + * Attention, intrepid adventurers, exploring the depths of the libobs code! + * + * There used to be a TODO comment here saying that we should use memalign on + * non-Windows platforms. However, since *nix/POSIX systems do not provide an + * aligned realloc(), this is currently not (easily) achievable. + * So while the use of posix_memalign()/memalign() would be a fairly trivial + * change, it would also ruin our memory alignment for some reallocated memory + * on those platforms. + */ #if defined(_WIN32) #define ALIGNED_MALLOC 1 #else From e23455dc74d27f6724288f8f0b19f4190b6a07df Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 1 Mar 2023 15:46:25 +0100 Subject: [PATCH 0255/2225] libobs: Fix device functions not marked as EXPORT As clang and gcc use "default" visibility (as in "not hidden") when no visibility is specified, all functions are implicitly exported. When changing default visibility to "hidden", the corresponding symbols are not exposed anymore and linking fails. This PR updates all functions signatures that were added in recent commits but not set to be EXPORTed. Also makes required OpenGL imports for texture sharing on macOS mandatory. --- libobs/graphics/device-exports.h | 12 ++++++++++++ libobs/graphics/graphics-imports.c | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libobs/graphics/device-exports.h b/libobs/graphics/device-exports.h index 4fcae2e6a9055e..bff578951149ee 100644 --- a/libobs/graphics/device-exports.h +++ b/libobs/graphics/device-exports.h @@ -177,6 +177,15 @@ EXPORT void device_debug_marker_begin(gs_device_t *device, const char *markername, const float color[4]); EXPORT void device_debug_marker_end(gs_device_t *device); +EXPORT bool device_is_monitor_hdr(gs_device_t *device, void *monitor); +EXPORT bool device_shared_texture_available(void); + +#ifdef __APPLE__ +EXPORT gs_texture_t *device_texture_create_from_iosurface(gs_device_t *device, + void *iosurf); +EXPORT gs_texture_t *device_texture_open_shared(gs_device_t *device, + uint32_t handle); +#endif #if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) @@ -196,6 +205,9 @@ EXPORT bool device_query_dmabuf_modifiers_for_format(gs_device_t *device, uint64_t **modifiers, size_t *n_modifiers); +EXPORT gs_texture_t *device_texture_create_from_pixmap( + gs_device_t *device, uint32_t width, uint32_t height, + enum gs_color_format color_format, uint32_t target, void *pixmap); #endif #ifdef __cplusplus diff --git a/libobs/graphics/graphics-imports.c b/libobs/graphics/graphics-imports.c index 00681680cf3933..93e9686c23f91f 100644 --- a/libobs/graphics/graphics-imports.c +++ b/libobs/graphics/graphics-imports.c @@ -204,9 +204,9 @@ bool load_graphics_imports(struct gs_exports *exports, void *module, /* OSX/Cocoa specific functions */ #ifdef __APPLE__ GRAPHICS_IMPORT(device_shared_texture_available); - GRAPHICS_IMPORT_OPTIONAL(device_texture_open_shared); - GRAPHICS_IMPORT_OPTIONAL(device_texture_create_from_iosurface); - GRAPHICS_IMPORT_OPTIONAL(gs_texture_rebind_iosurface); + GRAPHICS_IMPORT(device_texture_open_shared); + GRAPHICS_IMPORT(device_texture_create_from_iosurface); + GRAPHICS_IMPORT(gs_texture_rebind_iosurface); /* win32 specific functions */ #elif _WIN32 From 2b84155da42ff8dbf63e94c09c7d1748bb409949 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Wed, 1 Mar 2023 11:47:09 -0500 Subject: [PATCH 0256/2225] cmake: Remove FindRSSDK Follow-up to PR #7371 (commit a1a98f9cfd15f4c74cf15ddf4ef65ca6058016de). We forgot to remove the Finder that was only used for that plugin. Let's remove it now. --- cmake/Modules/FindRSSDK.cmake | 49 ----------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 cmake/Modules/FindRSSDK.cmake diff --git a/cmake/Modules/FindRSSDK.cmake b/cmake/Modules/FindRSSDK.cmake deleted file mode 100644 index 59e570f059303c..00000000000000 --- a/cmake/Modules/FindRSSDK.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# Once done these will be defined: -# -# RSSDK_FOUND RSSDK_INCLUDE_DIRS RSSDK_LIBRARIES -# -# For use in OBS: -# -# RSSDK_INCLUDE_DIR - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(_RSSDK_lib_dir "x64") -else() - set(_RSSDK_lib_dir "Win32") -endif() - -find_path( - RSSDK_INCLUDE_DIR - NAMES pxcsession.h - HINTS ENV RSSDK_DIR - PATH_SUFFIXES include) - -find_library( - RSSDK_LIB - NAMES libpxc - HINTS ENV RSSDK_DIR - PATH_SUFFIXES lib/${_RSSDK_lib_dir}) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(RSSDK DEFAULT_MSG RSSDK_LIB RSSDK_INCLUDE_DIR) -mark_as_advanced(RSSDK_INCLUDE_DIR RSSDK_LIB) - -if(RSSDK_FOUND) - set(RSSDK_INCLUDE_DIRS ${RSSDK_INCLUDE_DIR}) - set(RSSDK_LIBRARIES ${RSSDK_LIB}) - - if(NOT TARGET RSS::SDK) - if(IS_ABSOLUTE "${RSSDK_LIBRARIES}") - add_library(RSS:SDK UNKNOWN IMPORTED) - set_target_properties(RSS:SDK PROPERTIES IMPORTED_LOCATION - "${RSSDK_LIBRARIES}") - else() - add_library(RSS:SDK INTERFACE IMPORTED) - set_target_properties(RSS:SDK PROPERTIES IMPORTED_LIBNAME - "${RSSDK_LIBRARIES}") - endif() - - set_target_properties(RSS:SDK PROPERTIES INTERFACE_INCLUDE_DIRECTORIES - "${RSSDK_INCLUDE_DIRS}") - endif() -endif() From 2e79d4c902abf3e6bb4ad1b5bf779c0cc22a6fd0 Mon Sep 17 00:00:00 2001 From: pkv Date: Tue, 28 Feb 2023 17:28:38 +0100 Subject: [PATCH 0257/2225] obs-ffmpeg: Fix for FFmpeg 6 deprecating a flag Also modifies libobs & deps/media-playback. AV_CODEC_CAP_TRUNCATED was removed in avcodec 60 [1]. We ifdef the code depending on it to allow compilation. [1] avcodec: remove FF_API_FLAG_TRUNCATED https://github.com/FFmpeg/FFmpeg/commit/3ceffe783965767e62d59e8e68ecd265c98460ec Signed-off-by: pkv --- deps/media-playback/media-playback/decode.c | 2 ++ deps/media-playback/media-playback/decode.h | 2 ++ libobs/obs-ffmpeg-compat.h | 2 ++ plugins/obs-ffmpeg/obs-ffmpeg-compat.h | 2 ++ plugins/win-dshow/ffmpeg-decode.c | 2 ++ 5 files changed, 10 insertions(+) diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index 05d6afcc649a20..e1aa9aec0577be 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -230,8 +230,10 @@ bool mp_decode_init(mp_media_t *m, enum AVMediaType type, bool hw) d->in_frame = d->sw_frame; } +#if LIBAVCODEC_VERSION_MAJOR < 60 if (d->codec->capabilities & CODEC_CAP_TRUNC) d->decoder->flags |= CODEC_FLAG_TRUNC; +#endif d->orig_pkt = av_packet_alloc(); d->pkt = av_packet_alloc(); diff --git a/deps/media-playback/media-playback/decode.h b/deps/media-playback/media-playback/decode.h index 1ca271b419fbdb..6da34061b3dee3 100644 --- a/deps/media-playback/media-playback/decode.h +++ b/deps/media-playback/media-playback/decode.h @@ -37,8 +37,10 @@ extern "C" { #endif #if LIBAVCODEC_VERSION_MAJOR >= 58 +#if LIBAVCODEC_VERSION_MAJOR < 60 #define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED #define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#endif #else #define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED #define CODEC_FLAG_TRUNC CODEC_FLAG_TRUNCATED diff --git a/libobs/obs-ffmpeg-compat.h b/libobs/obs-ffmpeg-compat.h index c4e23b98512425..ad633521e3b0b8 100644 --- a/libobs/obs-ffmpeg-compat.h +++ b/libobs/obs-ffmpeg-compat.h @@ -23,8 +23,10 @@ #endif #if LIBAVCODEC_VERSION_MAJOR >= 58 +#if LIBAVCODEC_VERSION_MAJOR < 60 #define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED #define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#endif #define INPUT_BUFFER_PADDING_SIZE AV_INPUT_BUFFER_PADDING_SIZE #else #define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-compat.h b/plugins/obs-ffmpeg/obs-ffmpeg-compat.h index 181167aff383de..39efa00c774b3e 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-compat.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-compat.h @@ -27,8 +27,10 @@ #endif #if LIBAVCODEC_VERSION_MAJOR >= 58 +#if LIBAVCODEC_VERSION_MAJOR < 60 #define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED #define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#endif #define CODEC_FLAG_GLOBAL_H AV_CODEC_FLAG_GLOBAL_HEADER #else #define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED diff --git a/plugins/win-dshow/ffmpeg-decode.c b/plugins/win-dshow/ffmpeg-decode.c index d27c98441da153..49df62b7a79f25 100644 --- a/plugins/win-dshow/ffmpeg-decode.c +++ b/plugins/win-dshow/ffmpeg-decode.c @@ -105,8 +105,10 @@ int ffmpeg_decode_init(struct ffmpeg_decode *decode, enum AVCodecID id, return ret; } +#if LIBAVCODEC_VERSION_MAJOR < 60 if (decode->codec->capabilities & CODEC_CAP_TRUNC) decode->decoder->flags |= CODEC_FLAG_TRUNC; +#endif return 0; } From 19b6d79597b15511fa9c251aa7bdf0c1fdad69b5 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 18:59:02 +0100 Subject: [PATCH 0258/2225] win-capture: Fix possible macro redefinition --- plugins/win-capture/graphics-hook-ver.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/win-capture/graphics-hook-ver.h b/plugins/win-capture/graphics-hook-ver.h index f60a124477da66..62dbd1049ab3b8 100644 --- a/plugins/win-capture/graphics-hook-ver.h +++ b/plugins/win-capture/graphics-hook-ver.h @@ -15,7 +15,10 @@ #define HOOK_VER_MINOR 8 #define HOOK_VER_PATCH 0 +#ifndef STRINGIFY #define STRINGIFY(s) #s +#endif + #define MAKE_VERSION_NAME(major, minor, patch) \ STRINGIFY(major) "." STRINGIFY(minor) "." STRINGIFY(patch) ".0" #define HOOK_VERSION_NAME \ From 60844505d002bafcdc65226e2cb42fe87095b7f3 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 19:01:09 +0100 Subject: [PATCH 0259/2225] UI: Replace uses of token-pasting operator --- .../frontend-tools/captions-handler.hpp | 4 ++-- UI/window-basic-settings.cpp | 23 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/UI/frontend-plugins/frontend-tools/captions-handler.hpp b/UI/frontend-plugins/frontend-tools/captions-handler.hpp index a8fd1b3ddf679b..b728ef6418bca7 100644 --- a/UI/frontend-plugins/frontend-tools/captions-handler.hpp +++ b/UI/frontend-plugins/frontend-tools/captions-handler.hpp @@ -25,8 +25,8 @@ class resampler_obj { typedef std::function captions_cb; -#define captions_error(s) std::string(obs_module_text("Captions.Error."##s)) -#define CAPTIONS_ERROR_GENERIC_FAIL captions_error("GenericFail") +#define CAPTIONS_ERROR_GENERIC_FAIL \ + std::string(obs_module_text("Captions.Error.GenericFail")) /* ------------------------------------------------------------------------- */ diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index fe38b3a7578608..2305dee0e21c42 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -603,20 +603,21 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->hideOBSFromCapture = nullptr; } -#define PROCESS_PRIORITY(val) \ - { \ - "Basic.Settings.Advanced.General.ProcessPriority."##val, val \ - } - static struct ProcessPriority { const char *name; const char *val; - } processPriorities[] = {PROCESS_PRIORITY("High"), - PROCESS_PRIORITY("AboveNormal"), - PROCESS_PRIORITY("Normal"), - PROCESS_PRIORITY("BelowNormal"), - PROCESS_PRIORITY("Idle")}; -#undef PROCESS_PRIORITY + } processPriorities[] = { + {"Basic.Settings.Advanced.General.ProcessPriority.High", + "High"}, + {"Basic.Settings.Advanced.General.ProcessPriority.AboveNormal", + "AboveNormal"}, + {"Basic.Settings.Advanced.General.ProcessPriority.Normal", + "Normal"}, + {"Basic.Settings.Advanced.General.ProcessPriority.BelowNormal", + "BelowNormal"}, + {"Basic.Settings.Advanced.General.ProcessPriority.Idle", + "Idle"}, + }; for (ProcessPriority pri : processPriorities) ui->processPriority->addItem(QTStr(pri.name), pri.val); From f9cce334d2285040b3c66e8fdc9d70b3c5010d19 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 19:03:20 +0100 Subject: [PATCH 0260/2225] libobs: Add copy constructor for ComQIPtr --- libobs/util/windows/ComPtr.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libobs/util/windows/ComPtr.hpp b/libobs/util/windows/ComPtr.hpp index 5f9a4dbf18ed14..15c48bc156cef2 100644 --- a/libobs/util/windows/ComPtr.hpp +++ b/libobs/util/windows/ComPtr.hpp @@ -165,6 +165,12 @@ template class ComQIPtr : public ComPtr { unk->QueryInterface(__uuidof(T), (void **)&this->ptr); } + template inline ComQIPtr(const ComPtr &c) + { + this->ptr = nullptr; + c->QueryInterface(__uuidof(T), (void **)&this->ptr); + } + inline ComPtr &operator=(IUnknown *unk) { ComPtr::Clear(); From 2ac8ce8f651734275f39caeddfee6e6e36d99fa9 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 19:05:01 +0100 Subject: [PATCH 0261/2225] obs-ffmpeg: Fix __VA_ARGS__ for comma ellision --- plugins/obs-ffmpeg/jim-nvenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/jim-nvenc.c b/plugins/obs-ffmpeg/jim-nvenc.c index 41429fdc5030f1..c66b6a3ecc2dae 100644 --- a/plugins/obs-ffmpeg/jim-nvenc.c +++ b/plugins/obs-ffmpeg/jim-nvenc.c @@ -131,7 +131,7 @@ struct nv_bitstream { void *ptr; }; -#define NV_FAIL(format, ...) nv_fail(enc->encoder, format, __VA_ARGS__) +#define NV_FAIL(format, ...) nv_fail(enc->encoder, format, ##__VA_ARGS__) #define NV_FAILED(x) nv_failed(enc->encoder, x, __FUNCTION__, #x) static bool nv_bitstream_init(struct nvenc_data *enc, struct nv_bitstream *bs) From 3c924136741bc42ef85575f3fa40a7d71be7b463 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 19:09:04 +0100 Subject: [PATCH 0262/2225] win-dshow: Remove obsolete name in REGFILTERPINS --- plugins/win-dshow/virtualcam-module/virtualcam-module.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp b/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp index b3aa64d3e8c4e5..937fb57df63d6d 100644 --- a/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp +++ b/plugins/win-dshow/virtualcam-module/virtualcam-module.cpp @@ -6,9 +6,9 @@ static const REGPINTYPES AMSMediaTypesV = {&MEDIATYPE_Video, &MEDIASUBTYPE_NV12}; -static const REGFILTERPINS AMSPinVideo = {L"Output", false, true, - false, false, &CLSID_NULL, - nullptr, 1, &AMSMediaTypesV}; +static const REGFILTERPINS AMSPinVideo = {nullptr, false, true, + false, false, &CLSID_NULL, + nullptr, 1, &AMSMediaTypesV}; HINSTANCE dll_inst = nullptr; volatile long locks = 0; From 166dc4909dce683493791ae95441ec1359b22480 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 1 Mar 2023 19:25:01 +0100 Subject: [PATCH 0263/2225] enc-amf: Update submodule --- plugins/enc-amf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/enc-amf b/plugins/enc-amf index 3b09f2a5949caa..58b9ade6f53813 160000 --- a/plugins/enc-amf +++ b/plugins/enc-amf @@ -1 +1 @@ -Subproject commit 3b09f2a5949caaeaf9d225b2f68512508312b11b +Subproject commit 58b9ade6f53813b21224d4f58ffadd2aa5d7d39d From b7f6ae7d7bb4258b25e689fc462d6ebebb6f88af Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 28 Feb 2023 18:58:30 +0100 Subject: [PATCH 0264/2225] cmake: Enable stricter MSVC compiler options --- cmake/Modules/CompilerConfig.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index 7883efe62ad38d..31c88ad9266d95 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -68,7 +68,11 @@ if(OS_WINDOWS AND MSVC) /D_UNICODE /D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS - /utf-8) + /utf-8 + /permissive- + /Zc:__cplusplus + /Zc:preprocessor + /std:c17) add_link_options( "LINKER:/OPT:REF" From d15dce99d0d2f2db6a1e2808bc726f22095bef8e Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 22 Jan 2023 01:01:06 +0100 Subject: [PATCH 0265/2225] updater: Multi-threaded delta patching --- UI/win-update/updater/updater.cpp | 84 ++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 17 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 79079dfd874ebf..6da47d4140d69c 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -141,8 +141,8 @@ try { WinHandle hSrc; WinHandle hDest; - hSrc = CreateFile(src, GENERIC_READ, 0, nullptr, OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN, nullptr); + hSrc = CreateFile(src, GENERIC_READ, FILE_SHARE_READ, nullptr, + OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, nullptr); if (!hSrc.Valid()) throw LastError(); @@ -1137,6 +1137,69 @@ static bool UpdateFile(update_t &file) return true; } +queue> updateQueue; +static int lastPosition = 0; +static int installed = 0; +static bool updateThreadFailed = false; + +static bool UpdateWorker() +{ + unique_lock ulock(updateMutex, defer_lock); + + while (true) { + ulock.lock(); + + if (updateThreadFailed) + return false; + if (updateQueue.empty()) + break; + + auto update = updateQueue.front(); + updateQueue.pop(); + ulock.unlock(); + + if (!UpdateFile(update)) { + updateThreadFailed = true; + return false; + } else { + int position = (int)(((float)++installed / + (float)completedUpdates) * + 100.0f); + if (position > lastPosition) { + lastPosition = position; + SendDlgItemMessage(hwndMain, IDC_PROGRESS, + PBM_SETPOS, position, 0); + } + } + } + + return true; +} + +static bool RunUpdateWorkers(int num) +try { + for (update_t &update : updates) { + updateQueue.push(update); + } + + vector> thread_success_results; + thread_success_results.resize(num); + + for (future &result : thread_success_results) { + result = async(launch::async, UpdateWorker); + } + for (future &result : thread_success_results) { + if (!result.get()) { + return false; + } + } + + return true; + +} catch (...) { + return false; +} + #define PATCH_MANIFEST_URL \ L"https://obsproject.com/update_studio/getpatchmanifest" #define HASH_NULL L"0000000000000000000000000000000000000000" @@ -1659,21 +1722,8 @@ static bool Update(wchar_t *cmdLine) SendDlgItemMessage(hwndMain, IDC_PROGRESS, PBM_SETPOS, 0, 0); - for (update_t &update : updates) { - if (!UpdateFile(update)) { - return false; - } else { - updatesInstalled++; - int position = (int)(((float)updatesInstalled / - (float)completedUpdates) * - 100.0f); - if (position > lastPosition) { - lastPosition = position; - SendDlgItemMessage(hwndMain, IDC_PROGRESS, - PBM_SETPOS, position, 0); - } - } - } + if (!RunUpdateWorkers(4)) + return false; for (deletion_t &deletion : deletions) { if (!RenameRemovedFile(deletion)) { From 480a8700dac5dfd256663acd76c9ff618e2f7d76 Mon Sep 17 00:00:00 2001 From: Kevin Deng Date: Thu, 2 Mar 2023 06:13:38 +0800 Subject: [PATCH 0266/2225] rtmp-services: Update Mildom more_info_link (#8334) Co-authored-by: kevin.dww --- plugins/rtmp-services/data/services.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index f8973691943595..3acb4df04e09f2 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2312,7 +2312,7 @@ }, { "name": "Mildom", - "more_info_link": "https://www.mildom.com/course/pc", + "more_info_link": "https://support.mildom.com/hc/ja/articles/360056569954", "stream_key_link": "https://www.mildom.com/creator/live", "servers": [ { From 6e0f5dccb25ff77677c72be983396044faad628a Mon Sep 17 00:00:00 2001 From: Regan Black <56209925+one0ten@users.noreply.github.com> Date: Wed, 1 Mar 2023 15:15:25 -0700 Subject: [PATCH 0267/2225] rtmp-services: Update Switchboard Live Servers (#8180) Co-authored-by: Regan Baah --- plugins/rtmp-services/data/services.json | 46 ++++-------------------- 1 file changed, 6 insertions(+), 40 deletions(-) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 3acb4df04e09f2..d3b566271cee31 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -1107,51 +1107,17 @@ ], "servers": [ { - "name": "Global Zone (geo based)", - "url": "rtmp://ingest-global.switchboard.zone/live" - }, - { - "name": "US Zone (geo based)", - "url": "rtmp://ingest-us.switchboard.zone/live" - }, - { - "name": "US West", - "url": "rtmp://ingest-us-west.switchboard.zone/live" - }, - { - "name": "US East", - "url": "rtmp://ingest-us-east.switchboard.zone/live" - }, - { - "name": "US Central", - "url": "rtmp://ingest-us-central.switchboard.zone/live" - }, - { - "name": "South America", - "url": "rtmp://ingest-sa.switchboard.zone/live" - }, - { - "name": "EU (auto)", - "url": "rtmp://ingest-eu.switchboard.zone/live" - }, - { - "name": "Australia", - "url": "rtmp://ingest-au.switchboard.zone/live" + "name": "Global - Recommended", + "url": "rtmps://live.sb.zone:443/live" }, { - "name": "APAC (auto)", - "url": "rtmp://ingest-asia.switchboard.zone/live" - }, - { - "name": "UK", - "url": "rtmp://ingest-uk.switchboard.zone/live" - } + "name": "Global - Legacy", + "url": "rtmp://ingest-global.switchboard.zone/live" + } ], "recommended": { "keyint": 2, - "profile": "high", - "max audio bitrate": 160, - "max video bitrate": 6000 + "profile": "high" } }, { From 87b7f7785f26e0477333dd31275e203c111eb778 Mon Sep 17 00:00:00 2001 From: Tophicles Date: Wed, 1 Mar 2023 17:15:45 -0500 Subject: [PATCH 0268/2225] rtmp-services: Add LiveStreamerCafe (#8203) Incremented version number as requested. Co-authored-by: Kristopher Marentette --- plugins/rtmp-services/data/services.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index d3b566271cee31..c0494a943e43e9 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2489,6 +2489,21 @@ "recommended": { "keyint": 2 } + }, + { + "name": "Live Streamer Cafe", + "more_info_link": "https://livestreamercafe.com/help.php", + "stream_key_link": "https://livestreamercafe.com/profile.php", + "servers": [ + { + "name": "Live Streamer Cafe Server", + "url": "rtmp://tophicles.com/live" + } + ], + "recommended": { + "keyint": 2, + "max video bitrate": 6000 + } } ] } From 8fd694977872a32529b089aaa4f395aae5d0828a Mon Sep 17 00:00:00 2001 From: Stripchat <85170893+stripchat-dev@users.noreply.github.com> Date: Thu, 2 Mar 2023 00:16:01 +0200 Subject: [PATCH 0269/2225] rtmp-services: Update Stripchat streaming service (#8269) --- plugins/rtmp-services/data/package.json | 4 ++-- plugins/rtmp-services/data/services.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 6ff4cc6a917f21..4d3eb81ce163c7 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 218, + "version": 219, "files": [ { "name": "services.json", - "version": 218 + "version": 219 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index c0494a943e43e9..2ce4b69ac23673 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -878,7 +878,7 @@ "servers": [ { "name": "Auto", - "url": "rtmp://s-sd.doppiocdn.com/ext" + "url": "rtmp://live.doppiocdn.com/ext" } ], "recommended": { From 414937a9633ebc0f94126b5c95bfe1b6d14f1866 Mon Sep 17 00:00:00 2001 From: Albert <54241201+Be1erafon@users.noreply.github.com> Date: Thu, 2 Mar 2023 02:36:58 +0300 Subject: [PATCH 0270/2225] rtmp-services: Update Streamvi (#7921) Co-authored-by: Joel Bethke --- plugins/rtmp-services/data/services.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 2ce4b69ac23673..472cbff2c5ee55 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2325,12 +2325,16 @@ "url": "rtmp://live-default.streamvi.ru/live" }, { - "name": "Russia (Moscow)", + "name": "Russia: Moscow", "url": "rtmp://live-msk.streamvi.ru/live" }, { "name": "EU Central: Germany", - "url": "rtmp://live1.streamvi.ru/live" + "url": "rtmp://live-germany.streamvi.ru/live" + }, + { + "name": "Russia: Novosibirsk", + "url": "rtmp://live-novosib.streamvi.ru/live" } ] }, From f520b251fbb32cf3271fca4d676b3bf1cd98bd3e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Mar 2023 08:56:59 -0300 Subject: [PATCH 0271/2225] linux-pipewire: Demote yet another error to debug This was an oversight from commit be629b93c. --- plugins/linux-pipewire/pipewire.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 444259b965c12e..8b2c510a2dcf1b 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -550,7 +550,7 @@ static void on_process_cb(void *user_data) } if (corrupt) { - blog(LOG_ERROR, + blog(LOG_DEBUG, "[pipewire] buffer contains corrupted data"); goto read_metadata; } From 925888b76342bcbff81615bf870f49d69d8f39d5 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Mar 2023 08:57:50 -0300 Subject: [PATCH 0272/2225] linux-pipewire: Fix wrong error message In the non-DMA path, we are logging an error message saying that the DMA format is wrong. That's not the DMA format, it's the raw buffer format. Fix the message. --- plugins/linux-pipewire/pipewire.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 8b2c510a2dcf1b..12e15f411a7af8 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -581,7 +581,7 @@ static void on_process_cb(void *user_data) obs_pw->format.info.raw.format, NULL, &gs_format, &swap_red_blue)) { blog(LOG_ERROR, - "[pipewire] unsupported DMA buffer format: %d", + "[pipewire] unsupported buffer format: %d", obs_pw->format.info.raw.format); goto read_metadata; } From d68b061d572d2223737facc85913807a45eaf0e3 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Mar 2023 09:03:08 -0300 Subject: [PATCH 0273/2225] linux-pipewire: Adjust cosmetics Move code into auxiliary functions, to improve the legibility of the draw function. It also gets rid of these pesky switch fallthroughs. No functional changes. --- plugins/linux-pipewire/pipewire.c | 123 +++++++++++++++++++----------- 1 file changed, 77 insertions(+), 46 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 12e15f411a7af8..d9bf43f4f75297 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -181,6 +181,76 @@ static inline bool has_effective_crop(obs_pipewire *obs_pw) obs_pw->crop.height < obs_pw->format.info.raw.size.height); } +static int get_buffer_flip(obs_pipewire *obs_pw) +{ + int flip = 0; + + switch (obs_pw->transform) { + case SPA_META_TRANSFORMATION_Flipped: + case SPA_META_TRANSFORMATION_Flipped180: + flip = GS_FLIP_U; + break; + case SPA_META_TRANSFORMATION_Flipped90: + case SPA_META_TRANSFORMATION_Flipped270: + flip = GS_FLIP_V; + break; + case SPA_META_TRANSFORMATION_None: + case SPA_META_TRANSFORMATION_90: + case SPA_META_TRANSFORMATION_180: + case SPA_META_TRANSFORMATION_270: + break; + } + + return flip; +} + +static bool push_rotation(obs_pipewire *obs_pw) +{ + double offset_x = 0; + double offset_y = 0; + double rotation = 0; + bool has_crop; + + has_crop = has_effective_crop(obs_pw); + + switch (obs_pw->transform) { + case SPA_META_TRANSFORMATION_Flipped: + case SPA_META_TRANSFORMATION_None: + rotation = 0; + break; + case SPA_META_TRANSFORMATION_Flipped90: + case SPA_META_TRANSFORMATION_90: + rotation = 90; + offset_x = 0; + offset_y = has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + break; + case SPA_META_TRANSFORMATION_Flipped180: + case SPA_META_TRANSFORMATION_180: + rotation = 180; + offset_x = has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + offset_y = has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; + break; + case SPA_META_TRANSFORMATION_Flipped270: + case SPA_META_TRANSFORMATION_270: + rotation = 270; + offset_x = has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; + offset_y = 0; + break; + } + + if (rotation != 0) { + gs_matrix_push(); + gs_matrix_rotaa4f(0.0f, 0.0f, 1.0f, RAD(rotation)); + gs_matrix_translate3f(-offset_x, -offset_y, 0.0f); + } + + return rotation != 0; +} + static const struct { uint32_t spa_format; uint32_t drm_format; @@ -992,11 +1062,9 @@ uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) { - double rot = 0; - int flip = 0; - double offset_x = 0; - double offset_y = 0; + bool rotated; bool has_crop; + int flip = 0; gs_eparam_t *image; @@ -1008,47 +1076,9 @@ void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) has_crop = has_effective_crop(obs_pw); - switch (obs_pw->transform) { - case SPA_META_TRANSFORMATION_Flipped: - flip = GS_FLIP_U; - /* fallthrough */ - case SPA_META_TRANSFORMATION_None: - rot = 0; - break; - case SPA_META_TRANSFORMATION_Flipped90: - flip = GS_FLIP_V; - /* fallthrough */ - case SPA_META_TRANSFORMATION_90: - rot = 90; - offset_x = 0; - offset_y = has_crop ? obs_pw->crop.height - : obs_pw->format.info.raw.size.height; - break; - case SPA_META_TRANSFORMATION_Flipped180: - flip = GS_FLIP_U; - /* fallthrough */ - case SPA_META_TRANSFORMATION_180: - rot = 180; - offset_x = has_crop ? obs_pw->crop.width - : obs_pw->format.info.raw.size.width; - offset_y = has_crop ? obs_pw->crop.height - : obs_pw->format.info.raw.size.height; - break; - case SPA_META_TRANSFORMATION_Flipped270: - flip = GS_FLIP_V; - /* fallthrough */ - case SPA_META_TRANSFORMATION_270: - rot = 270; - offset_x = has_crop ? obs_pw->crop.width - : obs_pw->format.info.raw.size.width; - offset_y = 0; - break; - } - if (rot != 0) { - gs_matrix_push(); - gs_matrix_rotaa4f(0.0f, 0.0f, 1.0f, RAD(rot)); - gs_matrix_translate3f(-offset_x, -offset_y, 0.0f); - } + rotated = push_rotation(obs_pw); + + flip = get_buffer_flip(obs_pw); if (has_crop) { gs_draw_sprite_subregion(obs_pw->texture, flip, obs_pw->crop.x, obs_pw->crop.y, obs_pw->crop.width, @@ -1056,7 +1086,8 @@ void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) } else { gs_draw_sprite(obs_pw->texture, flip, 0, 0); } - if (rot != 0) + + if (rotated) gs_matrix_pop(); if (obs_pw->cursor.visible && obs_pw->cursor.valid && From 436787c1f4715f594d865b063ea1c88b10ffd39e Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Mar 2023 09:03:59 -0300 Subject: [PATCH 0274/2225] linux-pipewire: Check for effective crop region Some compositors send buffer crop information even when the crop matches the buffer size. It doesn't really matter in practice, but it's good hygiene to check for the effective crop instead of simply checking if crop exists. --- plugins/linux-pipewire/pipewire.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index d9bf43f4f75297..1329e7b51492f7 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -1020,43 +1020,51 @@ void obs_pipewire_hide(obs_pipewire *obs_pw) uint32_t obs_pipewire_get_width(obs_pipewire *obs_pw) { + bool has_crop; + if (!obs_pw->negotiated) return 0; + has_crop = has_effective_crop(obs_pw); + switch (obs_pw->transform) { case SPA_META_TRANSFORMATION_Flipped: case SPA_META_TRANSFORMATION_None: case SPA_META_TRANSFORMATION_Flipped180: case SPA_META_TRANSFORMATION_180: - return obs_pw->crop.valid ? obs_pw->crop.width - : obs_pw->format.info.raw.size.width; + return has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; case SPA_META_TRANSFORMATION_Flipped90: case SPA_META_TRANSFORMATION_90: case SPA_META_TRANSFORMATION_Flipped270: case SPA_META_TRANSFORMATION_270: - return obs_pw->crop.valid ? obs_pw->crop.height - : obs_pw->format.info.raw.size.height; + return has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; } } uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) { + bool has_crop; + if (!obs_pw->negotiated) return 0; + has_crop = has_effective_crop(obs_pw); + switch (obs_pw->transform) { case SPA_META_TRANSFORMATION_Flipped: case SPA_META_TRANSFORMATION_None: case SPA_META_TRANSFORMATION_Flipped180: case SPA_META_TRANSFORMATION_180: - return obs_pw->crop.valid ? obs_pw->crop.height - : obs_pw->format.info.raw.size.height; + return has_crop ? obs_pw->crop.height + : obs_pw->format.info.raw.size.height; case SPA_META_TRANSFORMATION_Flipped90: case SPA_META_TRANSFORMATION_90: case SPA_META_TRANSFORMATION_Flipped270: case SPA_META_TRANSFORMATION_270: - return obs_pw->crop.valid ? obs_pw->crop.width - : obs_pw->format.info.raw.size.width; + return has_crop ? obs_pw->crop.width + : obs_pw->format.info.raw.size.width; } } From f62f370eddeb87880fb4fa3947ccf766c343f7f4 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 1 Mar 2023 09:07:03 -0300 Subject: [PATCH 0275/2225] linux-pipewire: Remove unnecessary variable No functional changes. The code is just ever so slightly easier to read now. --- plugins/linux-pipewire/pipewire.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index 1329e7b51492f7..ada92cfe700073 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -1071,7 +1071,6 @@ uint32_t obs_pipewire_get_height(obs_pipewire *obs_pw) void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) { bool rotated; - bool has_crop; int flip = 0; gs_eparam_t *image; @@ -1082,12 +1081,10 @@ void obs_pipewire_video_render(obs_pipewire *obs_pw, gs_effect_t *effect) image = gs_effect_get_param_by_name(effect, "image"); gs_effect_set_texture(image, obs_pw->texture); - has_crop = has_effective_crop(obs_pw); - rotated = push_rotation(obs_pw); flip = get_buffer_flip(obs_pw); - if (has_crop) { + if (has_effective_crop(obs_pw)) { gs_draw_sprite_subregion(obs_pw->texture, flip, obs_pw->crop.x, obs_pw->crop.y, obs_pw->crop.width, obs_pw->crop.height); From 08733a0e1afe44d8f8313b00a9324fe725ae2a76 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 25 Jan 2023 04:18:29 +0100 Subject: [PATCH 0276/2225] updater: Remove 32-bit Support --- UI/win-update/updater/updater.cpp | 100 +++++------------------------- 1 file changed, 17 insertions(+), 83 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 6da47d4140d69c..3157095310fdb0 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -40,7 +40,6 @@ HCRYPTPROV hProvider = 0; static bool bExiting = false; static bool updateFailed = false; -static bool is32bit = false; static bool downloadThreadFailure = false; @@ -62,18 +61,14 @@ void FreeWinHttpHandle(HINTERNET handle) /* ----------------------------------------------------------------------- */ -static inline bool is_64bit_windows(void); - static inline bool HasVS2019Redist2() { wchar_t base[MAX_PATH]; wchar_t path[MAX_PATH]; WIN32_FIND_DATAW wfd; HANDLE handle; - int folder = (is32bit && is_64bit_windows()) ? CSIDL_SYSTEMX86 - : CSIDL_SYSTEM; - SHGetFolderPathW(NULL, folder, NULL, SHGFP_TYPE_CURRENT, base); + SHGetFolderPathW(NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT, base); #define check_dll_installed(dll) \ do { \ @@ -89,9 +84,7 @@ static inline bool HasVS2019Redist2() check_dll_installed(L"msvcp140"); check_dll_installed(L"vcruntime140"); - if (!is32bit) { - check_dll_installed(L"vcruntime140_1"); - } + check_dll_installed(L"vcruntime140_1"); #undef check_dll_installed @@ -558,7 +551,6 @@ static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) static bool WaitForOBS() { DWORD proc_ids[1024], needed, count; - const wchar_t *name = is32bit ? L"obs32" : L"obs64"; if (!EnumProcesses(proc_ids, sizeof(proc_ids), &needed)) { return true; @@ -569,7 +561,7 @@ static bool WaitForOBS() for (DWORD i = 0; i < count; i++) { DWORD id = proc_ids[i]; if (id != 0) { - switch (WaitIfOBS(id, name)) { + switch (WaitIfOBS(id, L"obs64")) { case WAITIFOBS_SUCCESS: return true; case WAITIFOBS_WRONG_PROCESS: @@ -676,39 +668,12 @@ static inline bool FileExists(const wchar_t *path) static bool NonCorePackageInstalled(const char *name) { - if (strcmp(name, "obs-browser") == 0) { - if (is32bit) - return FileExists( - L"obs-plugins\\32bit\\obs-browser.dll"); - else - return FileExists( - L"obs-plugins\\64bit\\obs-browser.dll"); - } + if (strcmp(name, "obs-browser") == 0) + return FileExists(L"obs-plugins\\64bit\\obs-browser.dll"); return false; } -static inline bool is_64bit_windows(void) -{ -#ifdef _WIN64 - return true; -#else - BOOL x86 = false; - bool success = !!IsWow64Process(GetCurrentProcess(), &x86); - return success && !!x86; -#endif -} - -static inline bool is_64bit_file(const char *file) -{ - if (!file) - return false; - - return strstr(file, "64bit") != nullptr || - strstr(file, "64.dll") != nullptr || - strstr(file, "64.exe") != nullptr; -} - #define UPDATE_URL L"https://cdn-fastly.obsproject.com/update_studio" static bool AddPackageUpdateFiles(const Json &root, size_t idx, @@ -719,8 +684,6 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, const Json &name = package["name"]; const Json &files = package["files"]; - bool isWin64 = is_64bit_windows(); - if (!files.is_array()) return true; if (!name.is_string()) @@ -757,15 +720,6 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, if (hashUTF8.size() != BLAKE2_HASH_LENGTH * 2) continue; - if (!isWin64 && is_64bit_file(fileUTF8.c_str())) - continue; - - /* ignore update files of opposite arch to reduce download */ - - if ((is32bit && fileUTF8.find("/64bit/") != string::npos) || - (!is32bit && fileUTF8.find("/32bit/") != string::npos)) - continue; - /* convert strings to wide */ wchar_t sourceURL[1024]; @@ -1241,19 +1195,14 @@ static bool UpdateVS2019Redists(const Json &root) /* ------------------------------------------ * * Download redist */ - Status(L"Downloading %s", L"Visual C++ 2019 Redistributable"); + Status(L"Downloading Visual C++ 2019 Redistributable"); - const wchar_t *file = (is32bit) ? L"VC_redist.x86.exe" - : L"VC_redist.x64.exe"; - - wstring sourceURL; - sourceURL += L"https://cdn-fastly.obsproject.com/downloads/"; - sourceURL += file; + wstring sourceURL = + L"https://cdn-fastly.obsproject.com/downloads/VC_redist.x64.exe"; wstring destPath; destPath += tempPath; - destPath += L"\\"; - destPath += file; + destPath += L"\\VC_redist.x64.exe"; if (!HTTPGetFile(hConnect, sourceURL.c_str(), destPath.c_str(), L"Accept-Encoding: gzip", &responseCode)) { @@ -1268,8 +1217,7 @@ static bool UpdateVS2019Redists(const Json &root) /* ------------------------------------------ * * Get expected hash */ - const char *which = is32bit ? "vc2019_redist_x86" : "vc2019_redist_x64"; - const Json &redistJson = root[which]; + const Json &redistJson = root["vc2019_redist_x64"]; if (!redistJson.is_string()) { Status(L"Update failed: Could not parse VC2019 redist json"); return false; @@ -1778,11 +1726,9 @@ static bool Update(wchar_t *cmdLine) StringCbCat(tmp2, sizeof(tmp2), L"32.dll\""); runcommand(tmp2); - if (is_64bit_windows()) { - StringCbCopy(tmp2, sizeof(tmp2), tmp); - StringCbCat(tmp2, sizeof(tmp2), L"64.dll\""); - runcommand(tmp2); - } + StringCbCopy(tmp2, sizeof(tmp2), tmp); + StringCbCat(tmp2, sizeof(tmp2), L"64.dll\""); + runcommand(tmp2); } /* ------------------------------------- * @@ -1872,26 +1818,15 @@ static void LaunchOBS(bool portable) GetCurrentDirectory(_countof(cwd) - 1, cwd); StringCbCopy(obsPath, sizeof(obsPath), cwd); - StringCbCat(obsPath, sizeof(obsPath), - is32bit ? L"\\bin\\32bit" : L"\\bin\\64bit"); + StringCbCat(obsPath, sizeof(obsPath), L"\\bin\\64bit"); SetCurrentDirectory(obsPath); StringCbCopy(newCwd, sizeof(newCwd), obsPath); - StringCbCat(obsPath, sizeof(obsPath), - is32bit ? L"\\obs32.exe" : L"\\obs64.exe"); + StringCbCat(obsPath, sizeof(obsPath), L"\\obs64.exe"); if (!FileExists(obsPath)) { - StringCbCopy(obsPath, sizeof(obsPath), cwd); - StringCbCat(obsPath, sizeof(obsPath), L"\\bin\\32bit"); - SetCurrentDirectory(obsPath); - StringCbCopy(newCwd, sizeof(newCwd), obsPath); - - StringCbCat(obsPath, sizeof(obsPath), L"\\obs32.exe"); - - if (!FileExists(obsPath)) { - /* TODO: give user a message maybe? */ - return; - } + /* TODO: give user a message maybe? */ + return; } SHELLEXECUTEINFO execInfo; @@ -2023,7 +1958,6 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) wchar_t newPath[MAX_PATH]; GetCurrentDirectoryW(_countof(cwd) - 1, cwd); - is32bit = wcsstr(cwd, L"bin\\32bit") != nullptr; bool isPortable = wcsstr(lpCmdLine, L"Portable") != nullptr || wcsstr(lpCmdLine, L"--portable") != nullptr; From 681014bec2c63adf6feba55621a8e3d1f4a64459 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Thu, 2 Mar 2023 13:24:39 -0500 Subject: [PATCH 0277/2225] rtmp-services: Fix whitespace issues in services.json * Remove trailing whitespace * Use spaces instead of tabs for indents --- plugins/rtmp-services/data/services.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 472cbff2c5ee55..c5cf4ceb190fff 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -1113,11 +1113,11 @@ { "name": "Global - Legacy", "url": "rtmp://ingest-global.switchboard.zone/live" - } + } ], "recommended": { "keyint": 2, - "profile": "high" + "profile": "high" } }, { @@ -2506,7 +2506,7 @@ ], "recommended": { "keyint": 2, - "max video bitrate": 6000 + "max video bitrate": 6000 } } ] From 5b193bca5577995ba10dcdb3b170e47f1b49ff97 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 2 Mar 2023 19:36:31 +0100 Subject: [PATCH 0278/2225] libobs/util: Fix typo in curl revocation support check --- libobs/util/curl/curl-helper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs/util/curl/curl-helper.h b/libobs/util/curl/curl-helper.h index aa5b77d0f25fe7..5f71a16d398655 100644 --- a/libobs/util/curl/curl-helper.h +++ b/libobs/util/curl/curl-helper.h @@ -20,7 +20,7 @@ #if defined(_WIN32) && LIBCURL_VERSION_NUM >= 0x072c00 -#ifdef CURLSSLOPT_REMOVE_BEST_EFFORT +#ifdef CURLSSLOPT_REVOKE_BEST_EFFORT #define CURL_OBS_REVOKE_SETTING CURLSSLOPT_REVOKE_BEST_EFFORT #else #define CURL_OBS_REVOKE_SETTING CURLSSLOPT_NO_REVOKE From d33abf68e5ac1f1c10e60c954e416c4199a08d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mico=20H=C3=A4s=C3=A4nen?= Date: Tue, 21 Feb 2023 20:04:04 +0200 Subject: [PATCH 0279/2225] rtmp-services: Add Enchant.events to service list --- plugins/rtmp-services/data/package.json | 4 ++-- plugins/rtmp-services/data/services.json | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 4d3eb81ce163c7..89e6d4f31d1c14 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 219, + "version": 220, "files": [ { "name": "services.json", - "version": 219 + "version": 220 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index c5cf4ceb190fff..c9f8391ddd722e 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2508,6 +2508,22 @@ "keyint": 2, "max video bitrate": 6000 } + }, + { + "name": "Enchant.events", + "more_info_link": "https://docs.enchant.events/knowledge-base-y4pOb", + "servers": [ + { + "name": "Primary RTMPS", + "url": "rtmps://stream.enchant.cloud:443/live" + } + ], + "recommended": { + "keyint": 2, + "profile": "high", + "max video bitrate": 9000, + "max audio bitrate": 192 + } } ] } From 05163718236256c5c2eb8614ea9863a630f58f31 Mon Sep 17 00:00:00 2001 From: Ricardo Tavares Date: Mon, 9 Jan 2023 14:17:34 +0000 Subject: [PATCH 0280/2225] deps/media-playback: Enable CUDA HW decoder --- deps/media-playback/media-playback/decode.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index e1aa9aec0577be..544795e6b2d6d2 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -26,10 +26,10 @@ #ifdef USE_NEW_HARDWARE_CODEC_METHOD enum AVHWDeviceType hw_priority[] = { - AV_HWDEVICE_TYPE_D3D11VA, AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_QSV, AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_NONE, + AV_HWDEVICE_TYPE_D3D11VA, AV_HWDEVICE_TYPE_DXVA2, + AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VAAPI, + AV_HWDEVICE_TYPE_VDPAU, AV_HWDEVICE_TYPE_QSV, + AV_HWDEVICE_TYPE_VIDEOTOOLBOX, AV_HWDEVICE_TYPE_NONE, }; static bool has_hw_type(const AVCodec *c, enum AVHWDeviceType type, From 8ba646c842e460680248a3633cae58d4ee7e757e Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 25 Jan 2023 07:45:42 +0100 Subject: [PATCH 0281/2225] updater: Check if awaited instance matches current install Also replaces any secondary usages of GetCurrentDirectory with cached static variable. Co-Authored-By: Richard Stanway --- UI/win-update/updater/updater.cpp | 32 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 3157095310fdb0..7c1d477bf89167 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -48,6 +48,7 @@ int completedFileSize = 0; static int completedUpdates = 0; static wchar_t tempPath[MAX_PATH]; +static wchar_t obs_base_directory[MAX_PATH]; struct LastError { DWORD code; @@ -516,6 +517,8 @@ static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) { wchar_t path[MAX_PATH]; wchar_t *name; + DWORD path_len = _countof(path); + *path = 0; WinHandle proc = OpenProcess(PROCESS_QUERY_INFORMATION | @@ -524,7 +527,12 @@ static inline DWORD WaitIfOBS(DWORD id, const wchar_t *expected) if (!proc.Valid()) return WAITIFOBS_WRONG_PROCESS; - if (!GetProcessImageFileName(proc, path, _countof(path))) + if (!QueryFullProcessImageNameW(proc, 0, path, &path_len)) + return WAITIFOBS_WRONG_PROCESS; + + // check it's actually our exe that's running + size_t len = wcslen(obs_base_directory); + if (wcsncmp(path, obs_base_directory, len)) return WAITIFOBS_WRONG_PROCESS; name = wcsrchr(path, L'\\'); @@ -1386,7 +1394,8 @@ static bool Update(wchar_t *cmdLine) lpAppDataPath[0] = 0; if (bIsPortable) { - GetCurrentDirectory(_countof(lpAppDataPath), lpAppDataPath); + StringCbCopy(lpAppDataPath, sizeof(lpAppDataPath), + obs_base_directory); StringCbCat(lpAppDataPath, sizeof(lpAppDataPath), L"\\config"); } else { if (!appdata.empty()) { @@ -1712,7 +1721,7 @@ static bool Update(wchar_t *cmdLine) SHGFP_TYPE_CURRENT, regsvr); StringCbCat(regsvr, sizeof(regsvr), L"\\regsvr32.exe"); - GetCurrentDirectoryW(_countof(src), src); + StringCbCopy(src, sizeof(src), obs_base_directory); StringCbCat(src, sizeof(src), L"\\data\\obs-plugins\\win-dshow\\"); @@ -1811,13 +1820,10 @@ static void CancelUpdate(bool quit) static void LaunchOBS(bool portable) { - wchar_t cwd[MAX_PATH]; wchar_t newCwd[MAX_PATH]; wchar_t obsPath[MAX_PATH]; - GetCurrentDirectory(_countof(cwd) - 1, cwd); - - StringCbCopy(obsPath, sizeof(obsPath), cwd); + StringCbCopy(obsPath, sizeof(obsPath), obs_base_directory); StringCbCat(obsPath, sizeof(obsPath), L"\\bin\\64bit"); SetCurrentDirectory(obsPath); StringCbCopy(newCwd, sizeof(newCwd), obsPath); @@ -1955,7 +1961,6 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) INITCOMMONCONTROLSEX icce; wchar_t cwd[MAX_PATH]; - wchar_t newPath[MAX_PATH]; GetCurrentDirectoryW(_countof(cwd) - 1, cwd); bool isPortable = wcsstr(lpCmdLine, L"Portable") != nullptr || @@ -1991,9 +1996,9 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) /* return code 1 = user wanted to launch OBS */ if (RestartAsAdmin(lpCmdLine, cwd) == 1) { StringCbCat(cwd, sizeof(cwd), L"\\..\\.."); - GetFullPathName(cwd, _countof(newPath), newPath, - nullptr); - SetCurrentDirectory(newPath); + GetFullPathName(cwd, _countof(obs_base_directory), + obs_base_directory, nullptr); + SetCurrentDirectory(obs_base_directory); LaunchOBS(isPortable); } @@ -2006,8 +2011,9 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) return 0; } else { StringCbCat(cwd, sizeof(cwd), L"\\..\\.."); - GetFullPathName(cwd, _countof(newPath), newPath, nullptr); - SetCurrentDirectory(newPath); + GetFullPathName(cwd, _countof(obs_base_directory), + obs_base_directory, nullptr); + SetCurrentDirectory(obs_base_directory); hinstMain = hInstance; From 0eb496e8cfb079c9ad9b964dd0a2b22707c712bb Mon Sep 17 00:00:00 2001 From: "Chris (Flaeri)" Date: Tue, 28 Feb 2023 12:12:31 +0000 Subject: [PATCH 0282/2225] libobs/media-io: Add color range and space to conversion By adding the range data we can get successful handling of full range color via custom FFmpeg output. Previously it would always default to 0 which would yield partial/limited output. Without the colorspace info the output file is correctly tagged, but not undergone the actual conversion. --- libobs/media-io/video-io.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libobs/media-io/video-io.c b/libobs/media-io/video-io.c index cc772650f83e0e..12241f7b5426ab 100644 --- a/libobs/media-io/video-io.c +++ b/libobs/media-io/video-io.c @@ -392,6 +392,8 @@ bool video_output_connect( input.conversion.format = video->info.format; input.conversion.width = video->info.width; input.conversion.height = video->info.height; + input.conversion.range = video->info.range; + input.conversion.colorspace = video->info.colorspace; } if (input.conversion.width == 0) From e7cd29bbe53b49bc14e4be9e8da5b24f087c4fe4 Mon Sep 17 00:00:00 2001 From: "Chris (Flaeri)" Date: Wed, 1 Mar 2023 21:31:37 +0000 Subject: [PATCH 0283/2225] obs-ffmpeg: Implement QVBR for AMF encoders Makes QVBR rate control usable. Fix wrong rate control check on line 1457. Switch from bitrate to CQ/QP value (no bitrate needed). --- plugins/obs-ffmpeg/texture-amf.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/obs-ffmpeg/texture-amf.cpp b/plugins/obs-ffmpeg/texture-amf.cpp index 7916cf85d6f603..f64f3275c6c8a3 100644 --- a/plugins/obs-ffmpeg/texture-amf.cpp +++ b/plugins/obs-ffmpeg/texture-amf.cpp @@ -1068,11 +1068,12 @@ static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p, { const char *rc = obs_data_get_string(settings, "rate_control"); bool cqp = astrcmpi(rc, "CQP") == 0; + bool qvbr = astrcmpi(rc, "QVBR") == 0; p = obs_properties_get(ppts, "bitrate"); - obs_property_set_visible(p, !cqp); + obs_property_set_visible(p, !cqp && !qvbr); p = obs_properties_get(ppts, "cqp"); - obs_property_set_visible(p, cqp); + obs_property_set_visible(p, cqp || qvbr); return true; } @@ -1225,7 +1226,8 @@ static inline int get_avc_profile(obs_data_t *settings) static void amf_avc_update_data(amf_base *enc, int rc, int64_t bitrate, int64_t qp) { - if (rc != AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP) { + if (rc != AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP && + rc != AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_QUALITY_VBR) { set_avc_property(enc, TARGET_BITRATE, bitrate); set_avc_property(enc, PEAK_BITRATE, bitrate); set_avc_property(enc, VBV_BUFFER_SIZE, bitrate); @@ -1237,6 +1239,7 @@ static void amf_avc_update_data(amf_base *enc, int rc, int64_t bitrate, set_avc_property(enc, QP_I, qp); set_avc_property(enc, QP_P, qp); set_avc_property(enc, QP_B, qp); + set_avc_property(enc, QVBR_QUALITY_LEVEL, qp); } } @@ -1544,7 +1547,8 @@ static inline int get_hevc_rate_control(const char *rc_str) static void amf_hevc_update_data(amf_base *enc, int rc, int64_t bitrate, int64_t qp) { - if (rc != AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP) { + if (rc != AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CONSTANT_QP && + rc != AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_QUALITY_VBR) { set_hevc_property(enc, TARGET_BITRATE, bitrate); set_hevc_property(enc, PEAK_BITRATE, bitrate); set_hevc_property(enc, VBV_BUFFER_SIZE, bitrate); @@ -1555,6 +1559,7 @@ static void amf_hevc_update_data(amf_base *enc, int rc, int64_t bitrate, } else { set_hevc_property(enc, QP_I, qp); set_hevc_property(enc, QP_P, qp); + set_hevc_property(enc, QVBR_QUALITY_LEVEL, qp); } } @@ -1896,7 +1901,8 @@ static inline int get_av1_profile(obs_data_t *settings) static void amf_av1_update_data(amf_base *enc, int rc, int64_t bitrate, int64_t cq_value) { - if (rc != AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_CONSTANT_QP) { + if (rc != AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_CONSTANT_QP && + rc != AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_QUALITY_VBR) { set_av1_property(enc, TARGET_BITRATE, bitrate); set_av1_property(enc, PEAK_BITRATE, bitrate); set_av1_property(enc, VBV_BUFFER_SIZE, bitrate); @@ -1910,6 +1916,7 @@ static void amf_av1_update_data(amf_base *enc, int rc, int64_t bitrate, } } else { int64_t qp = cq_value * 4; + set_av1_property(enc, QVBR_QUALITY_LEVEL, qp / 4); set_av1_property(enc, Q_INDEX_INTRA, qp); set_av1_property(enc, Q_INDEX_INTER, qp); } From 01786a3f11a57213f08fc6b39293756687cd10c7 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sat, 25 Feb 2023 16:33:54 +0100 Subject: [PATCH 0284/2225] libobs: Disable encoder scaling request if it matches output size It was possible to set the encoder to scale the video to the same size as the output, resulting in unnecessary passes through swscale and skipping hardware encoders. This was a common user error in Advanced Output mode where they would tick the rescale box but leave it at the same resolution as their main output. --- libobs/obs-encoder.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index 42b1519616e45f..8d8c8620c31bdf 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -694,6 +694,18 @@ void obs_encoder_set_scaled_size(obs_encoder_t *encoder, uint32_t width, return; } + const struct video_output_info *voi; + voi = video_output_get_info(encoder->media); + if (voi && voi->width == width && voi->height == height) { + blog(LOG_WARNING, + "encoder '%s': Scaled resolution " + "matches output resolution, scaling " + "disabled", + obs_encoder_get_name(encoder)); + encoder->scaled_width = encoder->scaled_height = 0; + return; + } + encoder->scaled_width = width; encoder->scaled_height = height; } From ffd6ae699c16ecec806d27b1a5606cf855ab56d3 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Mon, 27 Feb 2023 22:57:41 +0100 Subject: [PATCH 0285/2225] obs-transitions: Add long description for full decode option --- plugins/obs-transitions/data/locale/en-US.ini | 1 + plugins/obs-transitions/transition-stinger.c | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/obs-transitions/data/locale/en-US.ini b/plugins/obs-transitions/data/locale/en-US.ini index 44a772337473e7..c9c5653d18f4b2 100644 --- a/plugins/obs-transitions/data/locale/en-US.ini +++ b/plugins/obs-transitions/data/locale/en-US.ini @@ -29,6 +29,7 @@ TrackMatteLayoutVertical="Same file, stacked (stinger on top, track matte at the TrackMatteLayoutSeparateFile="Separate file (warning: matte can get out of sync)" TrackMatteLayoutMask="Mask only" PreloadVideoToRam="Preload Video to RAM" +PreloadVideoToRam.Description="Load the entire Stinger to RAM, avoiding real-time decoding during playback.\nRequires a lot of RAM (a typical 5 second 1080p60 video takes ~1 GB)." AudioFadeStyle="Audio Fade Style" AudioFadeStyle.FadeOutFadeIn="Fade out to transition point then fade in" AudioFadeStyle.CrossFade="Crossfade" diff --git a/plugins/obs-transitions/transition-stinger.c b/plugins/obs-transitions/transition-stinger.c index 71ce6d54225fad..e2a4f748d394af 100644 --- a/plugins/obs-transitions/transition-stinger.c +++ b/plugins/obs-transitions/transition-stinger.c @@ -748,10 +748,6 @@ static obs_properties_t *stinger_properties(void *data) obs_property_t *p = obs_properties_add_list( ppts, "tp_type", obs_module_text("TransitionPointType"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); - obs_properties_add_bool(ppts, "hw_decode", - obs_module_text("HardwareDecode")); - obs_properties_add_bool(ppts, "preload", - obs_module_text("PreloadVideoToRam")); obs_property_list_add_int(p, obs_module_text("TransitionPointTypeTime"), TIMING_TIME); obs_property_list_add_int( @@ -759,6 +755,13 @@ static obs_properties_t *stinger_properties(void *data) obs_property_set_modified_callback(p, transition_point_type_modified); + obs_properties_add_bool(ppts, "hw_decode", + obs_module_text("HardwareDecode")); + p = obs_properties_add_bool(ppts, "preload", + obs_module_text("PreloadVideoToRam")); + obs_property_set_long_description( + p, obs_module_text("PreloadVideoToRam.Description")); + obs_properties_add_int(ppts, "transition_point", obs_module_text("TransitionPoint"), 0, 120000, 1); From bb7ca3c2c31dd797b90e58c02ee80d58cd4e4636 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 27 Feb 2023 23:37:22 +0100 Subject: [PATCH 0286/2225] UI: Add mutex for writing to the log file fstream is not thread-safe and the act of writing the string and the newline are two separate operations which could execute concurrently in multiple threads, resulting in lines joining together followed by two newlines. Due to the presence of a static mutex, this also removes inline on the function. --- UI/obs-app.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 9a21ef90a287ea..666fc71a9a2dc6 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -277,14 +277,17 @@ string CurrentDateTimeString() return buf; } -static inline void LogString(fstream &logFile, const char *timeString, - char *str, int log_level) +static void LogString(fstream &logFile, const char *timeString, char *str, + int log_level) { + static mutex logfile_mutex; string msg; msg += timeString; msg += str; + logfile_mutex.lock(); logFile << msg << endl; + logfile_mutex.unlock(); if (!!obsLogViewer) QMetaObject::invokeMethod(obsLogViewer.data(), "AddLine", From 0fb89dc9a15cbb00c9690c4f58dfced558e9cda1 Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Thu, 2 Mar 2023 15:55:49 -0800 Subject: [PATCH 0287/2225] obs-ffmpeg: Fix crash during ratecontrol check When iterating over an array of structs we incorrectly check for a null pointer, but the actual sentinel value is the empty struct. --- plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c index f4dff74f76b056..9ae198eccc7187 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c @@ -186,11 +186,11 @@ static const rc_mode_t *get_rc_mode(const char *name) {.name = "CBR", .qp = false, .bitrate = true, .maxrate = false}, {.name = "CQP", .qp = true, .bitrate = false, .maxrate = false}, {.name = "VBR", .qp = false, .bitrate = true, .maxrate = true}, - NULL}; + {0}}; const rc_mode_t *rc_mode = RC_MODES; - while (!!rc_mode && strcmp(rc_mode->name, name) != 0) + while (!!rc_mode->name && strcmp(rc_mode->name, name) != 0) rc_mode++; return rc_mode ? rc_mode : RC_MODES; From 246826856992dadda5a4fb9864039b19a74bda35 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Fri, 3 Mar 2023 02:14:13 +0100 Subject: [PATCH 0288/2225] libobs: Hold async mutex when calling set_async_texture_size Calling set_async_texture_size without holding async_mutex is dangerous as cur_async_frame could be changed / freed by another thread. --- libobs/obs-source.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs/obs-source.c b/libobs/obs-source.c index fd6dd3cb11d13a..037c2668f16fd3 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -1225,11 +1225,11 @@ static void async_tick(obs_source_t *source) filter_frame(source, &source->prev_async_frame); filter_frame(source, &source->cur_async_frame); - pthread_mutex_unlock(&source->async_mutex); - if (source->cur_async_frame) source->async_update_texture = set_async_texture_size(source, source->cur_async_frame); + + pthread_mutex_unlock(&source->async_mutex); } void obs_source_video_tick(obs_source_t *source, float seconds) From dfc8c29cea7deeb589ded1ec4b543bb2695bc7b2 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Sat, 4 Mar 2023 18:31:58 -0500 Subject: [PATCH 0289/2225] CI: Update deps to 2023-03-04 release Notable changes: * deps.windows: Add Zstandard * deps.windows: Add nlohmann JSON * deps.windows: Add WebSocket++ * deps.windows: Add Asio * deps.windows: Add VLC * deps.macos: Add nlohmann JSON * deps.macos: Add WebSocket++ * deps.macos: Add Asio * deps.macos: Add Sparkle * deps.macos: Add VLC * deps.macos: Ready macOS deps for new CMake --- .github/workflows/main.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a9ed780b66aa72..5b2c3237b1e219 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,14 +19,14 @@ env: CEF_BUILD_VERSION_LINUX: '5060' CEF_BUILD_VERSION_WIN: '5060' QT_VERSION_MAC: '6.4.1' - QT_HASH_MAC_X86_64: 'c5ed7bc9f6e802910ec539066bcf0a8d64100fafce568071f264c88c22c5859b' - QT_HASH_MAC_ARM64: '1ce472fd1e28f947456b72b1d7ab929d6e93cb774c2928e22eca9bb751b12ccf' - QT_HASH_MAC_UNIVERSAL: '873f7c9c9f7fcee740a79c075b32a505c932c816d928807fa16f3439c610fbfd' + QT_HASH_MAC_X86_64: '602239df1f8e9a870082f12e216a881175210e3ee9400101d128f15dc5dc17d7' + QT_HASH_MAC_ARM64: '9fafa04fbe7a972628443aab4968fe319810f707d9f3766e6a32196bae1e0c91' + QT_HASH_MAC_UNIVERSAL: '6173e95742c83f90d5637d3483a68fb22c7313580bcbc0686fb6fd2e804c36c2' QT_VERSION_WIN: '6.3.1' - DEPS_VERSION_MAC: '2022-11-21' - DEPS_HASH_MAC_X86_64: 'ed0a145e88496f8975da14a07939dbe5633e60510aada34509a4aef64a66e438' - DEPS_HASH_MAC_ARM64: 'f397dc524e5ee7f85684f0b9661c45957446e28d166fcd6dfacf895c9d4d2521' - DEPS_VERSION_WIN: '2023-01-06' + DEPS_VERSION_MAC: '2023-03-04' + DEPS_HASH_MAC_X86_64: 'd7b61b54629f4372bc42285d2575b72ec2b73fce1c0a5b64bf1fa76c2b312ef5' + DEPS_HASH_MAC_ARM64: 'eb1c76c64f77ea864cf10a441b9589259444967c66ec0bd270d1b58e148df95c' + DEPS_VERSION_WIN: '2023-03-04' VLC_VERSION_MAC: '3.0.8' VLC_HASH_MAC: 'e0149ef4a20a19b9ecd87309c2d27787ee3f47dfd47c6639644bc1f6fd95bdf6' VLC_VERSION_WIN: '3.0.0-git' From a3defd4f58b2fde8060b4f75b1a5a5b5b44b591c Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 4 Mar 2023 00:57:58 -0600 Subject: [PATCH 0290/2225] UI: Fix spacing helpers when rotated and flipped If the scene item was rotated greater than 45 degrees, and flipped vertically or horizontally, the spacing helpers would be drawn incorrectly. This fixes the issue by checking the scale before the rotation, instead of after. --- UI/window-basic-preview.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index 7fb8bd5569e43b..40d6bc85bb32b5 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -2506,6 +2506,23 @@ void OBSBasicPreview::DrawSpacingHelpers() groupOti.pos.x, groupOti.pos.y, 0.0f); } + // Switch top/bottom or right/left if scale is negative + if (oti.scale.x < 0.0f) { + vec3 l = left; + vec3 r = right; + + vec3_copy(&left, &r); + vec3_copy(&right, &l); + } + + if (oti.scale.y < 0.0f) { + vec3 t = top; + vec3 b = bottom; + + vec3_copy(&top, &b); + vec3_copy(&bottom, &t); + } + if (rot >= HELPER_ROT_BREAKPONT) { for (float i = HELPER_ROT_BREAKPONT; i <= 360.0f; i += 90.0f) { if (rot < i) @@ -2539,23 +2556,6 @@ void OBSBasicPreview::DrawSpacingHelpers() } } - // Switch top/bottom or right/left if scale is negative - if (oti.scale.x < 0.0f) { - vec3 l = left; - vec3 r = right; - - vec3_copy(&left, &r); - vec3_copy(&right, &l); - } - - if (oti.scale.y < 0.0f) { - vec3 t = top; - vec3 b = bottom; - - vec3_copy(&top, &b); - vec3_copy(&bottom, &t); - } - // Get sides of box transform left = GetTransformedPos(left.x, left.y, boxTransform); right = GetTransformedPos(right.x, right.y, boxTransform); From 290c1569a93aabf1a0250aea56714c3de73b2e99 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 4 Mar 2023 01:43:09 -0600 Subject: [PATCH 0291/2225] UI: Don't hardcode properties label colors Makes the label have colors based on themes, instead of hard coding. --- UI/properties-view.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/UI/properties-view.cpp b/UI/properties-view.cpp index 524a2d2bb81fbd..3037cc943c45e2 100644 --- a/UI/properties-view.cpp +++ b/UI/properties-view.cpp @@ -1294,8 +1294,7 @@ static void UpdateFPSLabels(OBSFrameRatePropertyWidget *w) w->currentFPS->setHidden(true); w->timePerFrame->setHidden(true); if (!option) - w->warningLabel->setStyleSheet( - "QLabel { color: red; }"); + w->warningLabel->setObjectName("errorLabel"); return; } @@ -1305,9 +1304,9 @@ static void UpdateFPSLabels(OBSFrameRatePropertyWidget *w) media_frames_per_second match{}; if (!option && !matches_ranges(match, *valid_fps, w->fps_ranges, true)) - w->warningLabel->setStyleSheet("QLabel { color: red; }"); + w->warningLabel->setObjectName("errorLabel"); else - w->warningLabel->setStyleSheet(""); + w->warningLabel->setObjectName(""); auto convert_to_fps = media_frames_per_second_to_fps; auto convert_to_frame_interval = @@ -1520,8 +1519,8 @@ void OBSPropertiesView::AddProperty(obs_property_t *property, label = new QLabel(QT_UTF8(obs_property_description(property))); if (label) { - if (warning) //TODO: select color based on background color - label->setStyleSheet("QLabel { color: red; }"); + if (warning) + label->setObjectName("errorLabel"); if (minSize) { label->setMinimumWidth(minSize); From a0a23e8a18ffe95bd6bc7d9562f4c94f4621173c Mon Sep 17 00:00:00 2001 From: pkv Date: Tue, 28 Feb 2023 12:24:53 +0100 Subject: [PATCH 0292/2225] libobs: Fix leak with empty path in stats If the recording path is left empty in Settings, a leak can occur in window-basic-stats.cpp because a bmalloc is called for a size 1. This fixes the leak by checking against the path in the os_get_free_disk_space function. Signed-off-by: pkv --- libobs/util/platform-windows.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libobs/util/platform-windows.c b/libobs/util/platform-windows.c index 7a0dd75397abe1..c5f50f05ab633e 100644 --- a/libobs/util/platform-windows.c +++ b/libobs/util/platform-windows.c @@ -1469,7 +1469,8 @@ uint64_t os_get_proc_virtual_size(void) uint64_t os_get_free_disk_space(const char *dir) { wchar_t *wdir = NULL; - if (!os_utf8_to_wcs_ptr(dir, 0, &wdir)) + os_utf8_to_wcs_ptr(dir, 0, &wdir); + if (!wdir) return 0; ULARGE_INTEGER free; From 6e22af932d0c2cd961cc1ad390aa6650d9183d26 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 4 Mar 2023 03:52:21 -0600 Subject: [PATCH 0293/2225] UI: Fix preview disabled in studio mode If OBS is set to minimize to system tray on startup and studio mode is enabled, the preview would be disabled when showing OBS, if the preview in non studio mode was disabled. --- UI/window-basic-main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 1f3e84fe254aeb..dbd3431cc47f7c 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1941,6 +1941,10 @@ void OBSBasic::OBSInit() QMetaObject::invokeMethod(this, "EnablePreviewDisplay", Qt::QueuedConnection, Q_ARG(bool, previewEnabled)); + else if (!previewEnabled && IsPreviewProgramMode()) + QMetaObject::invokeMethod(this, "EnablePreviewDisplay", + Qt::QueuedConnection, + Q_ARG(bool, true)); RefreshSceneCollections(); RefreshProfiles(); From 03a94aee41245a4c064c7cd8d786ded04a59af41 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sat, 4 Mar 2023 06:07:41 -0600 Subject: [PATCH 0294/2225] UI: Fix wrong program scene if tbar is aborted The program scene would be incorrect if the tbar was released at its original position. --- UI/window-basic-main-transitions.cpp | 3 +-- UI/window-basic-main.hpp | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 89091a61b2033f..983bbc08829b02 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -309,8 +309,6 @@ void OBSBasic::TransitionToScene(OBSSource source, bool force, if (!scene) return; - OBSWeakSource lastProgramScene; - if (usingPreviewProgram) { if (!tBarActive) lastProgramScene = programScene; @@ -906,6 +904,7 @@ void OBSBasic::TBarReleased() tBar->blockSignals(false); tBarActive = false; EnableTransitionWidgets(true); + programScene = lastProgramScene; } tBar->clearFocus(); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 5b96acf625c41c..31e01bb3e3be80 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -497,6 +497,7 @@ class OBSBasic : public OBSMainWindow { OBSWeakSource lastScene; OBSWeakSource swapScene; OBSWeakSource programScene; + OBSWeakSource lastProgramScene; bool editPropertiesMode = false; bool sceneDuplicationMode = true; bool swapScenesMode = true; From b464ba812957080cbd137fbd120855b9f13cf84f Mon Sep 17 00:00:00 2001 From: cg2121 Date: Mon, 13 Feb 2023 16:14:57 -0600 Subject: [PATCH 0295/2225] UI: Set min/max zoom levels for preview Prevents the preview from zooming in or out too far. Min zoom: 10% Max zoom: 1000% --- UI/window-basic-preview.cpp | 2 ++ UI/window-basic-preview.hpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index 40d6bc85bb32b5..852d7d01339647 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -2255,6 +2255,8 @@ void OBSBasicPreview::ResetScrollingOffset() void OBSBasicPreview::SetScalingLevel(int32_t newScalingLevelVal) { + newScalingLevelVal = std::clamp(newScalingLevelVal, -MAX_SCALING_LEVEL, + MAX_SCALING_LEVEL); float newScalingAmountVal = pow(ZOOM_SENSITIVITY, float(newScalingLevelVal)); scalingLevel = newScalingLevelVal; diff --git a/UI/window-basic-preview.hpp b/UI/window-basic-preview.hpp index e6754179e5faad..51c0f851b5d2af 100644 --- a/UI/window-basic-preview.hpp +++ b/UI/window-basic-preview.hpp @@ -18,7 +18,9 @@ class QMouseEvent; #define ITEM_BOTTOM (1 << 3) #define ITEM_ROT (1 << 4) -#define ZOOM_SENSITIVITY 1.125f +#define MAX_SCALING_LEVEL 20 +#define MAX_SCALING_AMOUNT 10.0f +#define ZOOM_SENSITIVITY pow(MAX_SCALING_AMOUNT, 1.0f / MAX_SCALING_LEVEL) #define SPACER_LABEL_MARGIN 6.0f From 2eb10cd94e5c2f4a9cf3036ac780b6e447563268 Mon Sep 17 00:00:00 2001 From: shiina424 Date: Wed, 22 Feb 2023 21:33:39 +0900 Subject: [PATCH 0296/2225] UI: Fix disabled text color in dark theme --- UI/data/themes/Dark.qss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index 0c2626773991ab..02a603af9b2ab8 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -89,7 +89,7 @@ QWidget { /* Misc */ QWidget::disabled { - color: 2px solid palette(bright-text); + color: rgb(165,164,165); /* disabledText */ } QAbstractItemView, QStackedWidget#stackedMixerArea QWidget { From 0fe28e9cebaf0fb491745fb7b81f1dcd9875507d Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Tue, 7 Mar 2023 17:06:03 +0100 Subject: [PATCH 0297/2225] mac-syphon: Fix warnings in ObjC code for CMake rework Removes unused functions and explicitly casts higher-precision CoreFramework data types into lower precision obs-module types. --- plugins/mac-syphon/syphon.m | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/mac-syphon/syphon.m b/plugins/mac-syphon/syphon.m index 2dbb5fab164855..41a305acd46fb8 100644 --- a/plugins/mac-syphon/syphon.m +++ b/plugins/mac-syphon/syphon.m @@ -432,8 +432,6 @@ static inline void syphon_destroy_internal(syphon_t s) stop_listener(s->new_server_listener); stop_listener(s->retire_listener); - NSWorkspace *ws = [NSWorkspace sharedWorkspace]; - obs_enter_graphics(); stop_client(s); @@ -674,7 +672,7 @@ static inline void build_sprite(struct gs_vb_data *data, float fcx, float fcy, static inline void build_sprite_rect(struct gs_vb_data *data, float origin_x, float origin_y, float end_x, float end_y) { - build_sprite(data, fabs(end_x - origin_x), fabs(end_y - origin_y), + build_sprite(data, fabsf(end_x - origin_x), fabsf(end_y - origin_y), origin_x, end_x, origin_y, end_y); } @@ -694,8 +692,10 @@ static void syphon_video_tick(void *data, float seconds) obs_enter_graphics(); build_sprite_rect(gs_vertexbuffer_get_data(s->vertbuffer), - crop->origin.x, s->height - crop->origin.y, - s->width - crop->size.width, crop->size.height); + (float)crop->origin.x, + s->height - (float)crop->origin.y, + s->width - (float)crop->size.width, + (float)crop->size.height); obs_leave_graphics(); } @@ -730,8 +730,8 @@ static uint32_t syphon_get_width(void *data) syphon_t s = (syphon_t)data; if (!s->crop) return s->width; - int32_t width = - s->width - s->crop_rect.origin.x - s->crop_rect.size.width; + int32_t width = s->width - (int)s->crop_rect.origin.x - + (int)s->crop_rect.size.width; return MAX(0, width); } @@ -740,8 +740,8 @@ static uint32_t syphon_get_height(void *data) syphon_t s = (syphon_t)data; if (!s->crop) return s->height; - int32_t height = - s->height - s->crop_rect.origin.y - s->crop_rect.size.height; + int32_t height = s->height - (int)s->crop_rect.origin.y - + (int)s->crop_rect.size.height; return MAX(0, height); } From 78d195a5dfc635ae61e28a28c7f437bad3ce20de Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 23 Feb 2023 19:37:03 +0100 Subject: [PATCH 0298/2225] UI: Make T-Bar unclickable The T-Bar should only be draggable and not act on clicks. --- UI/slider-ignorewheel.cpp | 39 ++++++++++++++++++++++++++++ UI/slider-ignorewheel.hpp | 18 +++++++++++++ UI/window-basic-main-transitions.cpp | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/UI/slider-ignorewheel.cpp b/UI/slider-ignorewheel.cpp index 617f22003e82fc..5db4b0f45e4112 100644 --- a/UI/slider-ignorewheel.cpp +++ b/UI/slider-ignorewheel.cpp @@ -94,3 +94,42 @@ QAccessible::Role VolumeAccessibleInterface::role() const { return QAccessible::Role::Slider; } + +void SliderIgnoreClick::mousePressEvent(QMouseEvent *event) +{ + QStyleOptionSlider styleOption; + initStyleOption(&styleOption); + QRect handle = style()->subControlRect(QStyle::CC_Slider, &styleOption, + QStyle::SC_SliderHandle, this); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QPointF pointExact = event->position(); +#endif + if (handle.contains( +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QPoint(pointExact.x(), pointExact.y()) +#else + // Ubuntu 20.04. Sigh. + QPoint(event->x(), event->y()) +#endif + )) { + SliderIgnoreScroll::mousePressEvent(event); + dragging = true; + } else { + event->accept(); + } +} + +void SliderIgnoreClick::mouseReleaseEvent(QMouseEvent *event) +{ + dragging = false; + SliderIgnoreScroll::mouseReleaseEvent(event); +} + +void SliderIgnoreClick::mouseMoveEvent(QMouseEvent *event) +{ + if (dragging) { + SliderIgnoreScroll::mouseMoveEvent(event); + } else { + event->accept(); + } +} diff --git a/UI/slider-ignorewheel.hpp b/UI/slider-ignorewheel.hpp index 40d04487c7811c..2c996ac0f29c5a 100644 --- a/UI/slider-ignorewheel.hpp +++ b/UI/slider-ignorewheel.hpp @@ -5,6 +5,7 @@ #include #include #include +#include class SliderIgnoreScroll : public QSlider { Q_OBJECT @@ -49,3 +50,20 @@ class VolumeAccessibleInterface : public QAccessibleWidget { virtual QAccessible::Role role() const override; virtual QString text(QAccessible::Text t) const override; }; + +class SliderIgnoreClick : public SliderIgnoreScroll { +public: + inline SliderIgnoreClick(Qt::Orientation orientation, + QWidget *parent = nullptr) + : SliderIgnoreScroll(orientation, parent) + { + } + +protected: + virtual void mousePressEvent(QMouseEvent *event) override; + virtual void mouseReleaseEvent(QMouseEvent *event) override; + virtual void mouseMoveEvent(QMouseEvent *event) override; + +private: + bool dragging = false; +}; diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 983bbc08829b02..5a8272a0c5d5fc 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -797,7 +797,7 @@ void OBSBasic::CreateProgramOptions() mainButtonLayout->addWidget(transitionButton); mainButtonLayout->addWidget(configTransitions); - tBar = new SliderIgnoreScroll(Qt::Horizontal); + tBar = new SliderIgnoreClick(Qt::Horizontal); tBar->setMinimum(0); tBar->setMaximum(T_BAR_PRECISION - 1); From cb475718bde9e29e217ac8656b00e8b747285740 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 22 Nov 2022 10:24:33 +0100 Subject: [PATCH 0299/2225] CI: Create Sparkle appcast and deltas on tag --- .github/workflows/main.yml | 115 ++++++++++++++++++++++++++++++++ CI/macos/appcast_convert.py | 96 +++++++++++++++++++++++++++ CI/macos/appcast_download.py | 125 +++++++++++++++++++++++++++++++++++ 3 files changed, 336 insertions(+) create mode 100644 CI/macos/appcast_convert.py create mode 100644 CI/macos/appcast_download.py diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5b2c3237b1e219..d53532b77321c4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -444,6 +444,9 @@ jobs: env: HAVE_CODESIGN_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY != '' && secrets.MACOS_SIGNING_CERT != '' }} BUILD_FOR_DISTRIBUTION: 'ON' + HAVE_SPARKLE_KEY: ${{ secrets.SPARKLE_PRIVATE_KEY != '' }} + outputs: + run_sparkle: ${{ steps.sparkle_check.outputs.run_sparkle }} if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' }} strategy: matrix: @@ -461,6 +464,12 @@ jobs: run: | echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT + - name: 'Determine if Sparkle should run' + if: env.HAVE_CODESIGN_IDENTITY == 'true' + id: sparkle_check + run: | + echo 'run_sparkle=${{ env.HAVE_SPARKLE_KEY }}' >> $GITHUB_OUTPUT + - name: 'Download artifact' if: env.HAVE_CODESIGN_IDENTITY == 'true' uses: actions/download-artifact@v3 @@ -492,3 +501,109 @@ jobs: with: name: 'obs-studio-macos-${{ matrix.arch }}-notarized' path: '${{ github.workspace }}/${{ env.FILE_NAME }}' + + macos_sparkle: + name: '04 - macOS Sparkle Updates' + runs-on: [macos-12] + needs: [macos_release] + if: fromJSON(needs.macos_release.outputs.run_sparkle) + strategy: + matrix: + arch: ['x86_64', 'arm64'] + env: + SPARKLE_VERSION: '2.3.2' + SPARKLE_HASH: '2b3fe6918ca20a83729aad34f8f693a678b714a17d33b5f13ca2d25edfa7eed3' + defaults: + run: + shell: bash + steps: + - name: 'Checkout' + uses: actions/checkout@v3 + with: + path: 'repo' + ref: ${{ github.ref }} + + - name: 'Download artifact' + uses: actions/download-artifact@v3 + with: + name: 'obs-studio-macos-${{ matrix.arch }}-notarized' + path: 'artifacts' + + - name: 'Install Python requirements' + run: pip3 install requests xmltodict + + - name: 'Install Brew requirements' + run: brew install coreutils pandoc + + - name: 'Setup Sparkle' + run: | + curl -L "https://github.com/sparkle-project/Sparkle/releases/download/${{ env.SPARKLE_VERSION }}/Sparkle-${{ env.SPARKLE_VERSION }}.tar.xz" -o Sparkle.tar.xz + + if [[ '${{ env.SPARKLE_HASH }}' != "$(sha256sum Sparkle.tar.xz | cut -d " " -f 1)" ]]; then + echo "Sparkle download hash does not match!" + exit 1 + fi + + mkdir sparkle && cd sparkle + tar -xf ../Sparkle.tar.xz + + - name: 'Setup folder structure' + run: | + mkdir builds + mkdir -p output/appcasts/stable + mkdir -p output/sparkle_deltas/${{ matrix.arch }} + + - name: 'Determine branch and tag' + id: branch + run: | + pushd repo + + GIT_TAG="$(git describe --tags --abbrev=0)" + if [[ ${GIT_TAG} == *'beta'* || ${GIT_TAG} == *'rc'* ]]; then + echo "branch=beta" >> $GITHUB_OUTPUT + echo "deltas=0" >> $GITHUB_OUTPUT + else + echo "branch=stable" >> $GITHUB_OUTPUT + echo "deltas=1" >> $GITHUB_OUTPUT + fi + # Write tag description to file + git tag -l --format='%(contents)' ${GIT_TAG} >> ../notes.rst + + - name: 'Download existing Appcast and builds' + run: python3 repo/CI/macos/appcast_download.py --branch "${{ steps.branch.outputs.branch }}" --max-old-versions ${{ steps.branch.outputs.deltas }} + + - name: 'Prepare release notes' + run: | + # Insert underline at line 2 to turn first line into heading + sed -i '' '2i\'$'\n''###################################################' notes.rst + pandoc -f rst -t html notes.rst -o output/appcasts/notes_${{ steps.branch.outputs.branch }}.html + + - name: 'Setup Sparkle key' + run: echo -n "${{ secrets.SPARKLE_PRIVATE_KEY }}" >> eddsa_private.key + + - name: 'Generate Appcast' + run: | + mv artifacts/*.dmg builds/ + ./sparkle/bin/generate_appcast \ + --verbose \ + --ed-key-file ./eddsa_private.key \ + --download-url-prefix "https://cdn-fastly.obsproject.com/downloads/" \ + --full-release-notes-url "https://obsproject.com/osx_update/notes_${{ steps.branch.outputs.branch }}.html" \ + --maximum-versions 0 \ + --maximum-deltas ${{ steps.branch.outputs.deltas }} \ + --channel "${{ steps.branch.outputs.branch }}" builds/ + # Move deltas, if any + if compgen -G "builds/*.delta" > /dev/null; then + mv builds/*.delta output/sparkle_deltas/${{ matrix.arch }} + fi + # Move appcasts + mv builds/*.xml output/appcasts/ + + - name: 'Create 1.x Appcast' + run: python3 repo/CI/macos/appcast_convert.py + + - name: 'Upload Appcast and Deltas' + uses: actions/upload-artifact@v3 + with: + name: 'macos-sparkle-updates' + path: '${{ github.workspace }}/output' diff --git a/CI/macos/appcast_convert.py b/CI/macos/appcast_convert.py new file mode 100644 index 00000000000000..d47a55b08dc7bb --- /dev/null +++ b/CI/macos/appcast_convert.py @@ -0,0 +1,96 @@ +import os +from copy import deepcopy + +import xmltodict + + +DELTA_BASE_URL = "https://cdn-fastly.obsproject.com/downloads/sparkle_deltas" + + +def convert_appcast(filename): + print("Converting", filename) + in_path = os.path.join("output/appcasts", filename) + out_path = os.path.join("output/appcasts/stable", filename.replace("_v2", "")) + with open(in_path, "rb") as f: + xml_data = f.read() + if not xml_data: + return + + appcast = xmltodict.parse(xml_data, force_list=("item",)) + out_appcast = deepcopy(appcast) + + # Remove anything but stable channel items. + new_list = [] + for _item in appcast["rss"]["channel"]["item"]: + item = deepcopy(_item) + branch = item.pop("sparkle:channel", "stable") + if branch != "stable": + continue + # Remove delta information (incompatible with Sparkle 1.x) + item.pop("sparkle:deltas", None) + new_list.append(item) + + out_appcast["rss"]["channel"]["item"] = new_list + + with open(out_path, "wb") as f: + xmltodict.unparse(out_appcast, output=f, pretty=True) + + # Also create legacy appcast from x86 version. + if "x86" in filename: + out_path = os.path.join("output/appcasts/stable", "updates.xml") + with open(out_path, "wb") as f: + xmltodict.unparse(out_appcast, output=f, pretty=True) + + +def adjust_appcast(filename): + print("Adjusting", filename) + file_path = os.path.join("output/appcasts", filename) + with open(file_path, "rb") as f: + xml_data = f.read() + if not xml_data: + return + + arch = "arm64" if "arm64" in filename else "x86_64" + appcast = xmltodict.parse(xml_data, force_list=("item", "enclosure")) + + out_appcast = deepcopy(appcast) + out_appcast["rss"]["channel"]["title"] = "OBS Studio" + out_appcast["rss"]["channel"]["link"] = "https://obsproject.com/" + + new_list = [] + for _item in appcast["rss"]["channel"]["item"]: + item = deepcopy(_item) + # Fix changelog URL + # Sparkle doesn't allow us to specify the URL for a specific update, + # so we set the full release notes link instead and then rewrite the + # appcast. Yay. + if release_notes_link := item.pop("sparkle:fullReleaseNotesLink", None): + item["sparkle:releaseNotesLink"] = release_notes_link + + # If deltas exist, update their URLs to match server layout + # (generate_appcast doesn't allow this). + if deltas := item.get("sparkle:deltas", None): + for delta_item in deltas["enclosure"]: + delta_filename = delta_item["@url"].rpartition("/")[2] + delta_item["@url"] = f"{DELTA_BASE_URL}/{arch}/{delta_filename}" + + new_list.append(item) + + out_appcast["rss"]["channel"]["item"] = new_list + + with open(file_path, "wb") as f: + xmltodict.unparse(out_appcast, output=f, pretty=True) + + +if __name__ == "__main__": + for ac_file in os.listdir("output/appcasts"): + if ".xml" not in ac_file: + continue + if "v2" not in ac_file: + # generate_appcast may download legacy appcast files and update them as well. + # Those generated files are not backwards-compatible, so delete whatever v1 + # files it may have created and recreate them manually. + os.remove(os.path.join("output/appcasts", ac_file)) + continue + adjust_appcast(ac_file) + convert_appcast(ac_file) diff --git a/CI/macos/appcast_download.py b/CI/macos/appcast_download.py new file mode 100644 index 00000000000000..4bba55e563e746 --- /dev/null +++ b/CI/macos/appcast_download.py @@ -0,0 +1,125 @@ +import os +import sys +import plistlib +import glob +import subprocess +import argparse + +import requests +import xmltodict + + +def download_build(url): + print(f'Downloading build "{url}"...') + filename = url.rpartition("/")[2] + r = requests.get(url) + if r.status_code == 200: + with open(f"artifacts/{filename}", "wb") as f: + f.write(r.content) + else: + print(f"Build download failed, status code: {r.status_code}") + sys.exit(1) + + +def read_appcast(url): + print(f"Downloading feed {url} ...") + r = requests.get(url) + if r.status_code != 200: + print(f"Appcast download failed, status code: {r.status_code}") + sys.exit(1) + + filename = url.rpartition("/")[2] + with open(f"builds/{filename}", "wb") as f: + f.write(r.content) + + appcast = xmltodict.parse(r.content, force_list=("item",)) + + dl = 0 + for item in appcast["rss"]["channel"]["item"]: + channel = item.get("sparkle:channel", "stable") + if channel != target_branch: + continue + + if dl == max_old_vers: + break + download_build(item["enclosure"]["@url"]) + dl += 1 + + +def get_appcast_url(artifact_dir): + dmgs = glob.glob(artifact_dir + "/*.dmg") + if not dmgs: + raise ValueError("No artifacts!") + elif len(dmgs) > 1: + raise ValueError("Too many artifacts!") + + dmg = dmgs[0] + print(f"Mounting {dmg} ...") + out = subprocess.check_output( + [ + "hdiutil", + "attach", + "-readonly", + "-noverify", + "-noautoopen", + "-plist", + dmg, + ] + ) + d = plistlib.loads(out) + + mountpoint = "" + for item in d["system-entities"]: + if "mount-point" not in item: + continue + mountpoint = item["mount-point"] + break + + url = None + plist_files = glob.glob(mountpoint + "/*.app/Contents/Info.plist") + if plist_files: + plist_file = plist_files[0] + print(f"Reading plist {plist_file} ...") + plist = plistlib.load(open(plist_file, "rb")) + url = plist.get("SUFeedURL", None) + else: + print("No Plist file found!") + + print(f"Unmounting {mountpoint}") + subprocess.check_call(["hdiutil", "detach", mountpoint]) + return url + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "--artifacts-dir", + dest="artifacts", + action="store", + default="artifacts", + help="Folder containing artifact", + ) + parser.add_argument( + "--branch", + dest="branch", + action="store", + default="stable", + help="Channel/Branch", + ) + parser.add_argument( + "--max-old-versions", + dest="max_old_ver", + action="store", + type=int, + default=1, + help="Maximum old versions to download", + ) + args = parser.parse_args() + + target_branch = args.branch + max_old_vers = args.max_old_ver + url = get_appcast_url(args.artifacts) + if not url: + raise ValueError("Failed to get Sparkle URL from DMG!") + + read_appcast(url) From 6db418fb3fbf71e019539c2079be43a1162a9c24 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 3 Aug 2022 14:28:22 +0200 Subject: [PATCH 0300/2225] obs-ffmpeg: Replace external/AMF folder by obs-deps headers --- .../include/components/Ambisonic2SRenderer.h | 79 - .../AMF/include/components/AudioCapture.h | 86 - .../external/AMF/include/components/Capture.h | 198 -- .../AMF/include/components/ChromaKey.h | 76 - .../AMF/include/components/ColorSpace.h | 138 -- .../AMF/include/components/Component.h | 444 ---- .../AMF/include/components/ComponentCaps.h | 172 -- .../AMF/include/components/CursorCapture.h | 54 - .../AMF/include/components/DisplayCapture.h | 81 - .../include/components/FFMPEGAudioConverter.h | 62 - .../include/components/FFMPEGAudioDecoder.h | 68 - .../include/components/FFMPEGAudioEncoder.h | 66 - .../AMF/include/components/FFMPEGComponents.h | 54 - .../include/components/FFMPEGFileDemuxer.h | 66 - .../AMF/include/components/FFMPEGFileMuxer.h | 54 - .../include/components/FFMPEGVideoDecoder.h | 53 - .../AMF/include/components/HQScaler.h | 69 - .../AMF/include/components/MediaSource.h | 79 - .../AMF/include/components/PreAnalysis.h | 133 -- .../AMF/include/components/PreProcessing.h | 59 - .../AMF/include/components/SupportedCodecs.h | 61 - .../AMF/include/components/VQEnhancer.h | 48 - .../AMF/include/components/VideoCapture.h | 52 - .../AMF/include/components/VideoConverter.h | 121 - .../AMF/include/components/VideoDecoderUVD.h | 126 - .../AMF/include/components/VideoEncoderAV1.h | 300 --- .../AMF/include/components/VideoEncoderHEVC.h | 307 --- .../AMF/include/components/VideoEncoderVCE.h | 354 --- .../AMF/include/components/VideoStitch.h | 124 - .../AMF/include/components/ZCamLiveStream.h | 83 - .../external/AMF/include/core/AudioBuffer.h | 234 -- .../external/AMF/include/core/Buffer.h | 187 -- .../external/AMF/include/core/Compute.h | 302 --- .../AMF/include/core/ComputeFactory.h | 147 -- .../external/AMF/include/core/Context.h | 786 ------- .../external/AMF/include/core/CurrentTime.h | 52 - .../external/AMF/include/core/D3D12AMF.h | 49 - .../external/AMF/include/core/Data.h | 177 -- .../external/AMF/include/core/Debug.h | 78 - .../external/AMF/include/core/Dump.h | 112 - .../external/AMF/include/core/Factory.h | 133 -- .../external/AMF/include/core/Interface.h | 258 -- .../external/AMF/include/core/Plane.h | 112 - .../external/AMF/include/core/Platform.h | 546 ----- .../AMF/include/core/PropertyStorage.h | 275 --- .../AMF/include/core/PropertyStorageEx.h | 207 -- .../external/AMF/include/core/Result.h | 127 - .../external/AMF/include/core/Surface.h | 281 --- .../external/AMF/include/core/Trace.h | 183 -- .../external/AMF/include/core/Variant.h | 2082 ----------------- .../external/AMF/include/core/Version.h | 59 - .../external/AMF/include/core/VulkanAMF.h | 111 - .../obs-ffmpeg/obs-amf-test/CMakeLists.txt | 6 +- .../obs-ffmpeg/obs-amf-test/obs-amf-test.cpp | 10 +- plugins/obs-ffmpeg/texture-amf.cpp | 10 +- 55 files changed, 14 insertions(+), 10177 deletions(-) delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/Ambisonic2SRenderer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/AudioCapture.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/Capture.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/ChromaKey.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/ColorSpace.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/Component.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/ComponentCaps.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/CursorCapture.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/DisplayCapture.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioConverter.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioDecoder.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioEncoder.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGComponents.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileDemuxer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileMuxer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGVideoDecoder.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/MediaSource.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/PreAnalysis.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/PreProcessing.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoCapture.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoConverter.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/VideoStitch.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/components/ZCamLiveStream.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/AudioBuffer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Buffer.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Compute.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/ComputeFactory.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Context.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/CurrentTime.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Data.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Debug.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Dump.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Factory.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Interface.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Plane.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Platform.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorage.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorageEx.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Result.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Surface.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Trace.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Variant.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/Version.h delete mode 100644 plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/Ambisonic2SRenderer.h b/plugins/obs-ffmpeg/external/AMF/include/components/Ambisonic2SRenderer.h deleted file mode 100644 index 63ac79770626cf..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/Ambisonic2SRenderer.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// interface declaration; Ambisonic to Stereo Renderer -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_Ambisonic2SRenderer_h -#define AMF_Ambisonic2SRenderer_h -#pragma once - -#include "public/include/components/Component.h" - -#define AMFAmbisonic2SRendererHW L"AMFAmbisonic2SRenderer" - -enum AMF_AMBISONIC2SRENDERER_MODE_ENUM -{ - AMF_AMBISONIC2SRENDERER_MODE_SIMPLE = 0, - AMF_AMBISONIC2SRENDERER_MODE_HRTF_AMD0 = 1, - AMF_AMBISONIC2SRENDERER_MODE_HRTF_MIT1 = 2, -}; - - -// static properties -#define AMF_AMBISONIC2SRENDERER_IN_AUDIO_SAMPLE_RATE L"InSampleRate" // amf_int64 (default = 0) -#define AMF_AMBISONIC2SRENDERER_IN_AUDIO_CHANNELS L"InChannels" // amf_int64 (only = 4) -#define AMF_AMBISONIC2SRENDERER_IN_AUDIO_SAMPLE_FORMAT L"InSampleFormat" // amf_int64(AMF_AUDIO_FORMAT) (default = AMFAF_FLTP) - -#define AMF_AMBISONIC2SRENDERER_OUT_AUDIO_CHANNELS L"OutChannels" // amf_int64 (only = 2 - stereo) -#define AMF_AMBISONIC2SRENDERER_OUT_AUDIO_SAMPLE_FORMAT L"OutSampleFormat" // amf_int64(AMF_AUDIO_FORMAT) (only = AMFAF_FLTP) -#define AMF_AMBISONIC2SRENDERER_OUT_AUDIO_CHANNEL_LAYOUT L"OutChannelLayout" // amf_int64 (only = 3 - defalut stereo L R) - -#define AMF_AMBISONIC2SRENDERER_MODE L"StereoMode" //TODO: AMF_AMBISONIC2SRENDERER_MODE_ENUM(default=AMF_AMBISONIC2SRENDERER_MODE_HRTF) - - -// dynamic properties -#define AMF_AMBISONIC2SRENDERER_W L"w" //amf_int64 (default=0) -#define AMF_AMBISONIC2SRENDERER_X L"x" //amf_int64 (default=1) -#define AMF_AMBISONIC2SRENDERER_Y L"y" //amf_int64 (default=2) -#define AMF_AMBISONIC2SRENDERER_Z L"z" //amf_int64 (default=3) - -#define AMF_AMBISONIC2SRENDERER_THETA L"Theta" //double (default=0.0) -#define AMF_AMBISONIC2SRENDERER_PHI L"Phi" //double (default=0.0) -#define AMF_AMBISONIC2SRENDERER_RHO L"Rho" //double (default=0.0) - -extern "C" -{ - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentAmbisonic(amf::AMFContext* pContext, void* reserved, amf::AMFComponent** ppComponent); -} -#endif //#ifndef AMF_Ambisonic2SRenderer_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/AudioCapture.h b/plugins/obs-ffmpeg/external/AMF/include/components/AudioCapture.h deleted file mode 100644 index af5b4287689dd8..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/AudioCapture.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// Audio session interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_AudioCapture_h -#define AMF_AudioCapture_h - -#pragma once - -#include "Component.h" - -// Set to capture from either a microphone or desktop -#define AUDIOCAPTURE_SOURCE L"AudioCaptureSource" // amf_bool true for microphone, false for desktop; - -// In the case of capturing a microphone, the AUDIOCAPTURE_DEVICE_ACTIVE property -// can be set to -1 so that the active input devices are looked up. If the initialization -// is successful then the AUDIOCAPTURE_DEVICE_NAME and AUDIOCAPTURE_DEVICE_COUNT -// properties will be set. -#define AUDIOCAPTURE_DEVICE_ACTIVE L"AudioCaptureDeviceActive" // amf_int64 -#define AUDIOCAPTURE_DEVICE_COUNT L"AudioCaptureDeviceCount" // amf_int64 -#define AUDIOCAPTURE_DEVICE_NAME L"AudioCaptureDeviceName" // String - -// Codec used for audio capture -#define AUDIOCAPTURE_CODEC L"AudioCaptureCodec" // amf_int64, AV_CODEC_ID_PCM_F32LE -// Sample rate used for audio capture -#define AUDIOCAPTURE_SAMPLERATE L"AudioCaptureSampleRate" // amf_int64, 44100 in samples -// Sample count used for audio capture -#define AUDIOCAPTURE_SAMPLES L"AudioCaptureSampleCount" // amf_int64, 1024 -// Bitrate used for audio capture -#define AUDIOCAPTURE_BITRATE L"AudioCaptureBitRate" // amf_int64, in bits -// Channel count used for audio capture -#define AUDIOCAPTURE_CHANNELS L"AudioCaptureChannelCount" // amf_int64, 2 -// Channel layout used for audio capture -#define AUDIOCAPTURE_CHANNEL_LAYOUT L"AudioCaptureChannelLayout" // amf_int64, AMF_AUDIO_CHANNEL_LAYOUT -// Format used for audio capture -#define AUDIOCAPTURE_FORMAT L"AudioCaptureFormat" // amf_int64, AMFAF_U8 -// Block alignment -#define AUDIOCAPTURE_BLOCKALIGN L"AudioCaptureBlockAlign" // amf_int64, bytes -// Audio frame size -#define AUDIOCAPTURE_FRAMESIZE L"AudioCaptureFrameSize" // amf_int64, bytes -// Audio low latency state -#define AUDIOCAPTURE_LOWLATENCY L"AudioCaptureLowLatency" // amf_int64; - -// Optional interface that provides current time -#define AUDIOCAPTURE_CURRENT_TIME_INTERFACE L"CurrentTimeInterface" // interface to current time object - -extern "C" -{ - // Component that allows the recording of inputs such as microphones or the audio that is being - // rendered. The direction that is captured is controlled by the AUDIOCAPTURE_CAPTURE property - // - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentAudioCapture(amf::AMFContext* pContext, amf::AMFComponent** ppComponent); -} - -#endif // #ifndef AMF_AudioCapture_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/Capture.h b/plugins/obs-ffmpeg/external/AMF/include/components/Capture.h deleted file mode 100644 index 78fb12fcf8ba4c..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/Capture.h +++ /dev/null @@ -1,198 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// Capture interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef __Capture_h__ -#define __Capture_h__ -#pragma once - -#include "../../../public/include/components/Component.h" - -typedef enum AMF_CAPTURE_DEVICE_TYPE_ENUM -{ - AMF_CAPTURE_DEVICE_UNKNOWN = 0, - AMF_CAPTURE_DEVICE_MEDIAFOUNDATION = 1, - AMF_CAPTURE_DEVICE_WASAPI = 2, - AMF_CAPTURE_DEVICE_SDI = 3, - AMF_CAPTURE_DEVICE_SCREEN_DUPLICATION = 4, -} AMF_CAPTURE_DEVICE_TYPE_ENUM; - -// device properties -#define AMF_CAPTURE_DEVICE_TYPE L"DeviceType" // amf_int64( AMF_CAPTURE_DEVICE_TYPE_ENUM ) -#define AMF_CAPTURE_DEVICE_NAME L"DeviceName" // wchar_t* : name of the device - - - -#if defined(__cplusplus) -namespace amf -{ -#endif - - //---------------------------------------------------------------------------------------------- - // AMFCaptureDevice interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFCaptureDevice : public AMFComponentEx - { - public: - AMF_DECLARE_IID (0x5bfd1b17, 0x9f2a, 0x43c4, 0x9c, 0xdd, 0x2c, 0x3, 0x88, 0x43, 0xb5, 0xf3) - - virtual AMF_RESULT AMF_STD_CALL Start() = 0; - virtual AMF_RESULT AMF_STD_CALL Stop() = 0; - - // TODO add callback interface for disconnected / lost / changed device notification - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFCaptureDevicePtr; - //---------------------------------------------------------------------------------------------- -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFCaptureDevice, 0x5bfd1b17, 0x9f2a, 0x43c4, 0x9c, 0xdd, 0x2c, 0x3, 0x88, 0x43, 0xb5, 0xf3) - - typedef struct AMFCaptureDeviceVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFCaptureDevice* pThis); - amf_long (AMF_STD_CALL *Release)(AMFCaptureDevice* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFCaptureDevice* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFCaptureDevice* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFCaptureDevice* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFCaptureDevice* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFCaptureDevice* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFCaptureDevice* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFCaptureDevice* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFCaptureDevice* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFCaptureDevice* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFCaptureDevice* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFCaptureDevice* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFCaptureDevice* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - // AMFComponent interface - - AMF_RESULT (AMF_STD_CALL *Init)(AMFCaptureDevice* pThis, AMF_SURFACE_FORMAT format,amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *ReInit)(AMFCaptureDevice* pThis, amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *Drain)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *Flush)(AMFCaptureDevice* pThis); - - AMF_RESULT (AMF_STD_CALL *SubmitInput)(AMFCaptureDevice* pThis, AMFData* pData); - AMF_RESULT (AMF_STD_CALL *QueryOutput)(AMFCaptureDevice* pThis, AMFData** ppData); - AMFContext* (AMF_STD_CALL *GetContext)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *SetOutputDataAllocatorCB)(AMFCaptureDevice* pThis, AMFDataAllocatorCB* callback); - - AMF_RESULT (AMF_STD_CALL *GetCaps)(AMFCaptureDevice* pThis, AMFCaps** ppCaps); - AMF_RESULT (AMF_STD_CALL *Optimize)(AMFCaptureDevice* pThis, AMFComponentOptimizationCallback* pCallback); - - // AMFComponentEx interface - - amf_int32 (AMF_STD_CALL *GetInputCount)(AMFCaptureDevice* pThis); - amf_int32 (AMF_STD_CALL *GetOutputCount)(AMFCaptureDevice* pThis); - - AMF_RESULT (AMF_STD_CALL *GetInput)(AMFCaptureDevice* pThis, amf_int32 index, AMFInput** ppInput); - AMF_RESULT (AMF_STD_CALL *GetOutput)(AMFCaptureDevice* pThis, amf_int32 index, AMFOutput** ppOutput); - - // AMFCaptureDevice interface - - AMF_RESULT (AMF_STD_CALL *Start)(AMFCaptureDevice* pThis); - AMF_RESULT (AMF_STD_CALL *Stop)(AMFCaptureDevice* pThis); - - } AMFCaptureVtbl; - - struct AMFCapture - { - const AMFCaptureVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFCaptureManager interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFCaptureManager : public AMFInterface - { - public: - AMF_DECLARE_IID ( 0xf64d2f0d, 0xad16, 0x4ce7, 0x80, 0x5f, 0xa1, 0xe7, 0x3b, 0x0, 0xf4, 0x28) - - virtual AMF_RESULT AMF_STD_CALL Update() = 0; - virtual amf_int32 AMF_STD_CALL GetDeviceCount() = 0; - virtual AMF_RESULT AMF_STD_CALL GetDevice(amf_int32 index,AMFCaptureDevice **pDevice) = 0; - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFCaptureManagerPtr; - //---------------------------------------------------------------------------------------------- -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFCaptureManager, 0xf64d2f0d, 0xad16, 0x4ce7, 0x80, 0x5f, 0xa1, 0xe7, 0x3b, 0x0, 0xf4, 0x28) - - typedef struct AMFCaptureManagerVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFCaptureManager* pThis); - amf_long (AMF_STD_CALL *Release)(AMFCaptureManager* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFCaptureManager* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - - // AMFCaptureManager interface - AMF_RESULT (AMF_STD_CALL *Update)((AMFCaptureManager* pThis); - amf_int32 (AMF_STD_CALL *GetDeviceCount)(AMFCaptureManager* pThis); - AMF_RESULT (AMF_STD_CALL *GetDevice)(AMFCaptureManager* pThis, amf_int32 index,AMFCaptureDevice **pDevice); - - } AMFCaptureManagerVtbl; - - struct AMFCaptureManager - { - const AMFCaptureManagerVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) -} // namespace -#endif - -extern "C" -{ - AMF_RESULT AMF_CDECL_CALL AMFCreateCaptureManager(amf::AMFContext* pContext, amf::AMFCaptureManager** ppManager); -} - -#endif // __Capture_h__ \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/ChromaKey.h b/plugins/obs-ffmpeg/external/AMF/include/components/ChromaKey.h deleted file mode 100644 index 82b3516f38b272..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/ChromaKey.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// -/** - *************************************************************************************************** - * @file ChromaKey.h - * @brief AMFChromaKey interface declaration - *************************************************************************************************** - */ -#ifndef __AMFChromaKey_h__ -#define __AMFChromaKey_h__ -#pragma once - -#include "public/include/components/Component.h" - -#define AMFChromaKey L"AMFChromaKey" - -// static properties -#define AMF_CHROMAKEY_COLOR L"ChromaKeyColor" // amf_uint64 (default=0x992A1E), YUV Green key Color -#define AMF_CHROMAKEY_COLOR_EX L"ChromaKeyColorEX" // amf_uint64 (default=0), YUV Green key Color, secondary -#define AMF_CHROMAKEY_RANGE_MIN L"ChromaKeyRangeMin" // amf_uint64 (default=20) color tolerance low, 0~255 -#define AMF_CHROMAKEY_RANGE_MAX L"ChromaKeyRangeMax" // amf_uint64 (default=22) color tolerance high, 0~255 -#define AMF_CHROMAKEY_RANGE_EXT L"ChromaKeyRangeExt" // amf_uint64 (default=40) color tolerance extended, 0~255 -#define AMF_CHROMAKEY_SPILL_MODE L"ChromaKeySpillMode" // amf_uint64 (default=0) spill suppression mode -#define AMF_CHROMAKEY_RANGE_SPILL L"ChromaKeyRangeSpill" // amf_uint64 (default=5) spill suppression threshold -#define AMF_CHROMAKEY_LUMA_LOW L"ChromaKeyLumaLow" // amf_uint64 (default=16) minimum luma value for processing -#define AMF_CHROMAKEY_INPUT_COUNT L"InputCount" // amf_uint64 (default=2) number of inputs -#define AMF_CHROMAKEY_COLOR_POS L"KeyColorPos" // amf_uint64 (default=0) key color position from the surface -#define AMF_CHROMAKEY_OUT_FORMAT L"ChromaKeyOutFormat" // amf_uint64 (default=RGBA) output format -#define AMF_CHROMAKEY_MEMORY_TYPE L"ChromaKeyMemoryType" // amf_uint64 (default=DX11) mmeory type -#define AMF_CHROMAKEY_COLOR_ADJ L"ChromaKeyColorAdj" // amf_uint64 (default=0) endble color adjustment -#define AMF_CHROMAKEY_COLOR_ADJ_THRE L"ChromaKeyColorAdjThre" // amf_uint64 (default=0) color adjustment threshold -#define AMF_CHROMAKEY_COLOR_ADJ_THRE2 L"ChromaKeyColorAdjThre2" // amf_uint64 (default=0) color adjustment threshold -#define AMF_CHROMAKEY_BYPASS L"ChromaKeyBypass" // amf_uint64 (default=0) disable chromakey -#define AMF_CHROMAKEY_EDGE L"ChromaKeyEdge" // amf_uint64 (default=0) endble edge detection -#define AMF_CHROMAKEY_BOKEH L"ChromaKeyBokeh" // amf_uint64 (default=0) endble background bokeh -#define AMF_CHROMAKEY_BOKEH_RADIUS L"ChromaKeyBokehRadius" // amf_uint64 (default=7) background bokeh radius -#define AMF_CHROMAKEY_DEBUG L"ChromaKeyDebug" // amf_uint64 (default=0) endble debug mode - -#define AMF_CHROMAKEY_POSX L"ChromaKeyPosX" // amf_uint64 (default=0) positionX -#define AMF_CHROMAKEY_POSY L"ChromaKeyPosY" // amf_uint64 (default=0) positionY - -extern "C" -{ - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentChromaKey(amf::AMFContext* pContext, amf::AMFComponentEx** ppComponent); -} -#endif //#ifndef __AMFChromaKey_h__ diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/ColorSpace.h b/plugins/obs-ffmpeg/external/AMF/include/components/ColorSpace.h deleted file mode 100644 index fa6c752d4093e7..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/ColorSpace.h +++ /dev/null @@ -1,138 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// Color Spacedeclaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_ColorSpace_h -#define AMF_ColorSpace_h -#pragma once - -// YUV <--> RGB conversion matrix with range -typedef enum AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM -{ - AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN =-1, - AMF_VIDEO_CONVERTER_COLOR_PROFILE_601 = 0, // studio range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_709 = 1, // studio range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020 = 2, // studio range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_JPEG = 3, // full range 601 -// AMF_VIDEO_CONVERTER_COLOR_PROFILE_G22_BT709 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_709, -// AMF_VIDEO_CONVERTER_COLOR_PROFILE_G10_SCRGB = 4, -// AMF_VIDEO_CONVERTER_COLOR_PROFILE_G10_BT709 = 5, -// AMF_VIDEO_CONVERTER_COLOR_PROFILE_G10_BT2020 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_2020, -// AMF_VIDEO_CONVERTER_COLOR_PROFILE_G2084_BT2020 = 6, - AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_601 = AMF_VIDEO_CONVERTER_COLOR_PROFILE_JPEG, // full range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_709 = 7, // full range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_FULL_2020 = 8, // full range - AMF_VIDEO_CONVERTER_COLOR_PROFILE_COUNT -} AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM; - -typedef enum AMF_COLOR_PRIMARIES_ENUM // as in VUI color_primaries AVC and HEVC -{ - AMF_COLOR_PRIMARIES_UNDEFINED = 0, - AMF_COLOR_PRIMARIES_BT709 = 1, - AMF_COLOR_PRIMARIES_UNSPECIFIED = 2, - AMF_COLOR_PRIMARIES_RESERVED = 3, - AMF_COLOR_PRIMARIES_BT470M = 4, - AMF_COLOR_PRIMARIES_BT470BG = 5, - AMF_COLOR_PRIMARIES_SMPTE170M = 6, - AMF_COLOR_PRIMARIES_SMPTE240M = 7, - AMF_COLOR_PRIMARIES_FILM = 8, - AMF_COLOR_PRIMARIES_BT2020 = 9, - AMF_COLOR_PRIMARIES_SMPTE428 = 10, - AMF_COLOR_PRIMARIES_SMPTE431 = 11, - AMF_COLOR_PRIMARIES_SMPTE432 = 12, - AMF_COLOR_PRIMARIES_JEDEC_P22 = 22, - AMF_COLOR_PRIMARIES_CCCS = 1000, // Common Composition Color Space or scRGB -} AMF_COLOR_PRIMARIES_ENUM; - -typedef enum AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM // as in VUI transfer_characteristic AVC and HEVC -{ - AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED = 0, - AMF_COLOR_TRANSFER_CHARACTERISTIC_BT709 = 1, //BT709 - AMF_COLOR_TRANSFER_CHARACTERISTIC_UNSPECIFIED = 2, - AMF_COLOR_TRANSFER_CHARACTERISTIC_RESERVED = 3, - AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA22 = 4, //BT470_M - AMF_COLOR_TRANSFER_CHARACTERISTIC_GAMMA28 = 5, //BT470 - AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE170M = 6, //BT601 - AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE240M = 7, //SMPTE 240M - AMF_COLOR_TRANSFER_CHARACTERISTIC_LINEAR = 8, - AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG = 9, //LOG10 - AMF_COLOR_TRANSFER_CHARACTERISTIC_LOG_SQRT = 10,//LOG10 SQRT - AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_4 = 11, - AMF_COLOR_TRANSFER_CHARACTERISTIC_BT1361_ECG = 12, - AMF_COLOR_TRANSFER_CHARACTERISTIC_IEC61966_2_1 = 13, - AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_10 = 14, //BT709 - AMF_COLOR_TRANSFER_CHARACTERISTIC_BT2020_12 = 15, //BT709 - AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE2084 = 16, //PQ - AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE428 = 17, - AMF_COLOR_TRANSFER_CHARACTERISTIC_ARIB_STD_B67 = 18, //HLG -} AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM; - -typedef enum AMF_COLOR_BIT_DEPTH_ENUM -{ - AMF_COLOR_BIT_DEPTH_UNDEFINED = 0, - AMF_COLOR_BIT_DEPTH_8 = 8, - AMF_COLOR_BIT_DEPTH_10 = 10, -} AMF_COLOR_BIT_DEPTH_ENUM; - -typedef struct AMFHDRMetadata -{ - amf_uint16 redPrimary[2]; // normalized to 50000 - amf_uint16 greenPrimary[2]; // normalized to 50000 - amf_uint16 bluePrimary[2]; // normalized to 50000 - amf_uint16 whitePoint[2]; // normalized to 50000 - amf_uint32 maxMasteringLuminance; // normalized to 10000 - amf_uint32 minMasteringLuminance; // normalized to 10000 - amf_uint16 maxContentLightLevel; // nit value - amf_uint16 maxFrameAverageLightLevel; // nit value -} AMFHDRMetadata; - - -typedef enum AMF_COLOR_RANGE_ENUM -{ - AMF_COLOR_RANGE_UNDEFINED = 0, - AMF_COLOR_RANGE_STUDIO = 1, - AMF_COLOR_RANGE_FULL = 2, -} AMF_COLOR_RANGE_ENUM; - - -// these properties can be set on input or outout surface -// IDs are the same as in decoder properties -// can be used to dynamically pass color data between components: -// Decoder, Capture, Encoder. Presenter etc. -#define AMF_VIDEO_COLOR_TRANSFER_CHARACTERISTIC L"ColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 Section 7.2 See ColorSpace.h for enum -#define AMF_VIDEO_COLOR_PRIMARIES L"ColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 Section 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_COLOR_RANGE L"ColorRange" // amf_int64(AMF_COLOR_RANGE_ENUM) default = AMF_COLOR_RANGE_UNDEFINED -#define AMF_VIDEO_COLOR_HDR_METADATA L"HdrMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -#endif //#ifndef AMF_ColorSpace_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/Component.h b/plugins/obs-ffmpeg/external/AMF/include/components/Component.h deleted file mode 100644 index 5293b8f4e7ddfd..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/Component.h +++ /dev/null @@ -1,444 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/** - *************************************************************************************************** - * @file Component.h - * @brief AMFComponent interface declaration - *************************************************************************************************** - */ -#ifndef AMF_Component_h -#define AMF_Component_h -#pragma once - -#include "../core/Data.h" -#include "../core/PropertyStorageEx.h" -#include "../core/Surface.h" -#include "../core/Context.h" -#include "ComponentCaps.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // AMFDataAllocatorCB interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFDataAllocatorCB : public AMFInterface - { - public: - AMF_DECLARE_IID(0x4bf46198, 0x8b7b, 0x49d0, 0xaa, 0x72, 0x48, 0xd4, 0x7, 0xce, 0x24, 0xc5 ) - - virtual AMF_RESULT AMF_STD_CALL AllocBuffer(AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer) = 0; - virtual AMF_RESULT AMF_STD_CALL AllocSurface(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, - amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, AMFSurface** ppSurface) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFDataAllocatorCBPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFDataAllocatorCB, 0x4bf46198, 0x8b7b, 0x49d0, 0xaa, 0x72, 0x48, 0xd4, 0x7, 0xce, 0x24, 0xc5 ) - typedef struct AMFDataAllocatorCB AMFDataAllocatorCB; - - typedef struct AMFDataAllocatorCBVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFDataAllocatorCB* pThis); - amf_long (AMF_STD_CALL *Release)(AMFDataAllocatorCB* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFDataAllocatorCB* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - // AMFDataAllocatorCB interface - AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFDataAllocatorCB* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFDataAllocatorCB* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, - amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, AMFSurface** ppSurface); - } AMFDataAllocatorCBVtbl; - - struct AMFDataAllocatorCB - { - const AMFDataAllocatorCBVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComponentOptimizationCallback - { - public: - virtual AMF_RESULT AMF_STD_CALL OnComponentOptimizationProgress(amf_uint percent) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFComponentOptimizationCallback AMFComponentOptimizationCallback; - typedef struct AMFComponentOptimizationCallbackVtbl - { - // AMFDataAllocatorCB interface - AMF_RESULT (AMF_STD_CALL *OnComponentOptimizationProgress)(AMFComponentOptimizationCallback* pThis, amf_uint percent); - } AMFComponentOptimizationCallbackVtbl; - - struct AMFComponentOptimizationCallback - { - const AMFComponentOptimizationCallbackVtbl *pVtbl; - }; - -#endif //#if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMFComponent interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComponent : public AMFPropertyStorageEx - { - public: - AMF_DECLARE_IID(0x8b51e5e4, 0x455d, 0x4034, 0xa7, 0x46, 0xde, 0x1b, 0xed, 0xc3, 0xc4, 0x6) - - virtual AMF_RESULT AMF_STD_CALL Init(AMF_SURFACE_FORMAT format,amf_int32 width,amf_int32 height) = 0; - virtual AMF_RESULT AMF_STD_CALL ReInit(amf_int32 width,amf_int32 height) = 0; - virtual AMF_RESULT AMF_STD_CALL Terminate() = 0; - virtual AMF_RESULT AMF_STD_CALL Drain() = 0; - virtual AMF_RESULT AMF_STD_CALL Flush() = 0; - - virtual AMF_RESULT AMF_STD_CALL SubmitInput(AMFData* pData) = 0; - virtual AMF_RESULT AMF_STD_CALL QueryOutput(AMFData** ppData) = 0; - virtual AMFContext* AMF_STD_CALL GetContext() = 0; - virtual AMF_RESULT AMF_STD_CALL SetOutputDataAllocatorCB(AMFDataAllocatorCB* callback) = 0; - - virtual AMF_RESULT AMF_STD_CALL GetCaps(AMFCaps** ppCaps) = 0; - virtual AMF_RESULT AMF_STD_CALL Optimize(AMFComponentOptimizationCallback* pCallback) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComponentPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComponent, 0x8b51e5e4, 0x455d, 0x4034, 0xa7, 0x46, 0xde, 0x1b, 0xed, 0xc3, 0xc4, 0x6) - typedef struct AMFComponent AMFComponent; - - typedef struct AMFComponentVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComponent* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComponent* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComponent* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFComponent* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFComponent* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFComponent* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFComponent* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFComponent* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFComponent* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFComponent* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFComponent* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFComponent* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFComponent* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFComponent* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - // AMFComponent interface - - AMF_RESULT (AMF_STD_CALL *Init)(AMFComponent* pThis, AMF_SURFACE_FORMAT format,amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *ReInit)(AMFComponent* pThis, amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *Drain)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *Flush)(AMFComponent* pThis); - - AMF_RESULT (AMF_STD_CALL *SubmitInput)(AMFComponent* pThis, AMFData* pData); - AMF_RESULT (AMF_STD_CALL *QueryOutput)(AMFComponent* pThis, AMFData** ppData); - AMFContext* (AMF_STD_CALL *GetContext)(AMFComponent* pThis); - AMF_RESULT (AMF_STD_CALL *SetOutputDataAllocatorCB)(AMFComponent* pThis, AMFDataAllocatorCB* callback); - - AMF_RESULT (AMF_STD_CALL *GetCaps)(AMFComponent* pThis, AMFCaps** ppCaps); - AMF_RESULT (AMF_STD_CALL *Optimize)(AMFComponent* pThis, AMFComponentOptimizationCallback* pCallback); - } AMFComponentVtbl; - - struct AMFComponent - { - const AMFComponentVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMFInput interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFInput : public AMFPropertyStorageEx - { - public: - AMF_DECLARE_IID(0x1181eee7, 0x95f2, 0x434a, 0x9b, 0x96, 0xea, 0x55, 0xa, 0xa7, 0x84, 0x89) - - virtual AMF_RESULT AMF_STD_CALL SubmitInput(AMFData* pData) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFInputPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFInput, 0x1181eee7, 0x95f2, 0x434a, 0x9b, 0x96, 0xea, 0x55, 0xa, 0xa7, 0x84, 0x89) - typedef struct AMFInput AMFInput; - - typedef struct AMFInputVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFInput* pThis); - amf_long (AMF_STD_CALL *Release)(AMFInput* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFInput* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFInput* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFInput* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFInput* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFInput* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFInput* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFInput* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFInput* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFInput* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFInput* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFInput* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFInput* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFInput* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFInput* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFInput* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - // AMFInput interface - AMF_RESULT (AMF_STD_CALL *SubmitInput)(AMFInput* pThis, AMFData* pData); - - } AMFInputVtbl; - - struct AMFInput - { - const AMFInputVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFOutput interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFOutput : public AMFPropertyStorageEx - { - public: - AMF_DECLARE_IID(0x86a8a037, 0x912c, 0x4698, 0xb0, 0x46, 0x7, 0x5a, 0x1f, 0xac, 0x6b, 0x97) - - virtual AMF_RESULT AMF_STD_CALL QueryOutput(AMFData** ppData) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFOutputPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFOutput, 0x86a8a037, 0x912c, 0x4698, 0xb0, 0x46, 0x7, 0x5a, 0x1f, 0xac, 0x6b, 0x97) - typedef struct AMFOutput AMFOutput; - - typedef struct AMFOutputVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFOutput* pThis); - amf_long (AMF_STD_CALL *Release)(AMFOutput* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFOutput* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFOutput* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFOutput* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFOutput* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFOutput* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFOutput* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFOutput* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFOutput* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFOutput* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFOutput* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFOutput* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFOutput* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFOutput* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFOutput* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFOutput* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - // AMFOutput interface - AMF_RESULT (AMF_STD_CALL *QueryOutput)(AMFOutput* pThis, AMFData** ppData); - - } AMFOutputVtbl; - - struct AMFOutput - { - const AMFOutputVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMFComponent interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComponentEx : public AMFComponent - { - public: - AMF_DECLARE_IID(0xfda792af, 0x8712, 0x44df, 0x8e, 0xa0, 0xdf, 0xfa, 0xad, 0x2c, 0x80, 0x93) - - virtual amf_int32 AMF_STD_CALL GetInputCount() = 0; - virtual amf_int32 AMF_STD_CALL GetOutputCount() = 0; - - virtual AMF_RESULT AMF_STD_CALL GetInput(amf_int32 index, AMFInput** ppInput) = 0; - virtual AMF_RESULT AMF_STD_CALL GetOutput(amf_int32 index, AMFOutput** ppOutput) = 0; - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComponentExPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComponentEx, 0xfda792af, 0x8712, 0x44df, 0x8e, 0xa0, 0xdf, 0xfa, 0xad, 0x2c, 0x80, 0x93) - typedef struct AMFComponentEx AMFComponentEx; - - typedef struct AMFComponentExVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComponentEx* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComponentEx* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComponentEx* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFComponentEx* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFComponentEx* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFComponentEx* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFComponentEx* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFComponentEx* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFComponentEx* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFComponentEx* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFComponentEx* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFComponentEx* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFComponentEx* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFComponentEx* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - // AMFComponent interface - - AMF_RESULT (AMF_STD_CALL *Init)(AMFComponentEx* pThis, AMF_SURFACE_FORMAT format,amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *ReInit)(AMFComponentEx* pThis, amf_int32 width,amf_int32 height); - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *Drain)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *Flush)(AMFComponentEx* pThis); - - AMF_RESULT (AMF_STD_CALL *SubmitInput)(AMFComponentEx* pThis, AMFData* pData); - AMF_RESULT (AMF_STD_CALL *QueryOutput)(AMFComponentEx* pThis, AMFData** ppData); - AMFContext* (AMF_STD_CALL *GetContext)(AMFComponentEx* pThis); - AMF_RESULT (AMF_STD_CALL *SetOutputDataAllocatorCB)(AMFComponentEx* pThis, AMFDataAllocatorCB* callback); - - AMF_RESULT (AMF_STD_CALL *GetCaps)(AMFComponentEx* pThis, AMFCaps** ppCaps); - AMF_RESULT (AMF_STD_CALL *Optimize)(AMFComponentEx* pThis, AMFComponentOptimizationCallback* pCallback); - - // AMFComponentEx interface - - amf_int32 (AMF_STD_CALL *GetInputCount)(AMFComponentEx* pThis); - amf_int32 (AMF_STD_CALL *GetOutputCount)(AMFComponentEx* pThis); - - AMF_RESULT (AMF_STD_CALL *GetInput)(AMFComponentEx* pThis, amf_int32 index, AMFInput** ppInput); - AMF_RESULT (AMF_STD_CALL *GetOutput)(AMFComponentEx* pThis, amf_int32 index, AMFOutput** ppOutput); - - - } AMFComponentExVtbl; - - struct AMFComponentEx - { - const AMFComponentExVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - -#if defined(__cplusplus) -} // namespace -#endif - -typedef enum AMF_STREAM_TYPE_ENUM -{ - AMF_STREAM_UNKNOWN = 0, - AMF_STREAM_VIDEO = 1, - AMF_STREAM_AUDIO = 2, - AMF_STREAM_DATA = 3, -} AMF_STREAM_TYPE_ENUM; - -typedef enum AMF_STREAM_CODEC_ID_ENUM // matched codecs from VideoDecoxcderUVD.h -{ - AMF_STREAM_CODEC_ID_UNKNOWN = 0, - AMF_STREAM_CODEC_ID_MPEG2 = 1, // AMFVideoDecoderUVD_MPEG2 - AMF_STREAM_CODEC_ID_MPEG4 = 2, // AMFVideoDecoderUVD_MPEG4 - AMF_STREAM_CODEC_ID_WMV3 = 3, // AMFVideoDecoderUVD_WMV3 - AMF_STREAM_CODEC_ID_VC1 = 4, // AMFVideoDecoderUVD_VC1 - AMF_STREAM_CODEC_ID_H264_AVC = 5, // AMFVideoDecoderUVD_H264_AVC - AMF_STREAM_CODEC_ID_H264_MVC = 6, // AMFVideoDecoderUVD_H264_MVC - AMF_STREAM_CODEC_ID_H264_SVC = 7, // AMFVideoDecoderUVD_H264_SVC - AMF_STREAM_CODEC_ID_MJPEG = 8, // AMFVideoDecoderUVD_MJPEG - AMF_STREAM_CODEC_ID_H265_HEVC = 9, // AMFVideoDecoderHW_H265_HEVC - AMF_STREAM_CODEC_ID_H265_MAIN10 = 10, // AMFVideoDecoderHW_H265_MAIN10 - AMF_STREAM_CODEC_ID_VP9 = 11, // AMFVideoDecoderHW_VP9 - AMF_STREAM_CODEC_ID_VP9_10BIT = 12, // AMFVideoDecoderHW_VP9_10BIT - AMF_STREAM_CODEC_ID_AV1 = 13, // AMFVideoDecoderHW_AV1 - AMF_STREAM_CODEC_ID_AV1_12BIT = 14, // AMFVideoDecoderHW_AV1_12BIT -} AMF_STREAM_CODEC_ID_ENUM; - -// common stream properties -#define AMF_STREAM_TYPE L"StreamType" // amf_int64( AMF_STREAM_TYPE_ENUM ) -#define AMF_STREAM_ENABLED L"Enabled" // bool( default = false ) -#define AMF_STREAM_CODEC_ID L"CodecID" // amf_int64(Video: AMF_STREAM_CODEC_ID_ENUM, Audio: AVCodecID) (default = 0 - uncompressed) -#define AMF_STREAM_BIT_RATE L"BitRate" // amf_int64 (default = codec->bit_rate) -#define AMF_STREAM_EXTRA_DATA L"ExtraData" // interface to AMFBuffer - as is from FFMPEG - -// video stream properties -#define AMF_STREAM_VIDEO_MEMORY_TYPE L"VideoMemoryType" // amf_int64(AMF_MEMORY_TYPE); default = AMF_MEMORY_DX11 -#define AMF_STREAM_VIDEO_FORMAT L"VideoFormat" // amf_int64(AMF_SURFACE_FORMAT); default = AMF_SURFACE_NV12 (used if AMF_STREAM_CODEC_ID == 0) -#define AMF_STREAM_VIDEO_FRAME_RATE L"VideoFrameRate" // AMFRate; default = (30,1) - video frame rate -#define AMF_STREAM_VIDEO_FRAME_SIZE L"VideoFrameSize" // AMFSize; default = (1920,1080) - video frame rate -#define AMF_STREAM_VIDEO_SURFACE_POOL L"VideoSurfacePool" // amf_int64; default = 5, number of allocated output surfaces -//TODO support interlaced frames - -// audio stream properties -#define AMF_STREAM_AUDIO_FORMAT L"AudioFormat" // amf_int64(AMF_AUDIO_FORMAT); default = AMFAF_S16 -#define AMF_STREAM_AUDIO_SAMPLE_RATE L"AudioSampleRate" // amf_int64; default = 48000 -#define AMF_STREAM_AUDIO_CHANNELS L"AudioChannels" // amf_int64; default = 2 -#define AMF_STREAM_AUDIO_CHANNEL_LAYOUT L"AudioChannelLayout" // amf_int64 (default = codec->channel_layout) -#define AMF_STREAM_AUDIO_BLOCK_ALIGN L"AudioBlockAlign" // amf_int64 (default = codec->block_align) -#define AMF_STREAM_AUDIO_FRAME_SIZE L"AudioFrameSize" // amf_int64 (default = codec->frame_size) - - -#endif //#ifndef AMF_Component_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/ComponentCaps.h b/plugins/obs-ffmpeg/external/AMF/include/components/ComponentCaps.h deleted file mode 100644 index 48197670dac9d4..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/ComponentCaps.h +++ /dev/null @@ -1,172 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_ComponentCaps_h -#define AMF_ComponentCaps_h - -#pragma once - -#include "../core/Interface.h" -#include "../core/PropertyStorage.h" -#include "../core/Surface.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - typedef enum AMF_ACCELERATION_TYPE - { - AMF_ACCEL_NOT_SUPPORTED = -1, - AMF_ACCEL_HARDWARE, - AMF_ACCEL_GPU, - AMF_ACCEL_SOFTWARE - } AMF_ACCELERATION_TYPE; - //---------------------------------------------------------------------------------------------- - // AMFIOCaps interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFIOCaps : public AMFInterface - { - public: - // Get supported resolution ranges in pixels/lines: - virtual void AMF_STD_CALL GetWidthRange(amf_int32* minWidth, amf_int32* maxWidth) const = 0; - virtual void AMF_STD_CALL GetHeightRange(amf_int32* minHeight, amf_int32* maxHeight) const = 0; - - // Get memory alignment in lines: Vertical aligmnent should be multiples of this number - virtual amf_int32 AMF_STD_CALL GetVertAlign() const = 0; - - // Enumerate supported surface pixel formats - virtual amf_int32 AMF_STD_CALL GetNumOfFormats() const = 0; - virtual AMF_RESULT AMF_STD_CALL GetFormatAt(amf_int32 index, AMF_SURFACE_FORMAT* format, amf_bool* native) const = 0; - - // Enumerate supported memory types - virtual amf_int32 AMF_STD_CALL GetNumOfMemoryTypes() const = 0; - virtual AMF_RESULT AMF_STD_CALL GetMemoryTypeAt(amf_int32 index, AMF_MEMORY_TYPE* memType, amf_bool* native) const = 0; - - virtual amf_bool AMF_STD_CALL IsInterlacedSupported() const = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFIOCapsPtr; -#else // #if defined(__cplusplus) - typedef struct AMFIOCaps AMFIOCaps; - - typedef struct AMFIOCapsVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFIOCaps* pThis); - amf_long (AMF_STD_CALL *Release)(AMFIOCaps* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFIOCaps* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFIOCaps interface - // Get supported resolution ranges in pixels/lines: - void (AMF_STD_CALL *GetWidthRange)(AMFIOCaps* pThis, amf_int32* minWidth, amf_int32* maxWidth); - void (AMF_STD_CALL *GetHeightRange)(AMFIOCaps* pThis, amf_int32* minHeight, amf_int32* maxHeight); - - // Get memory alignment in lines: Vertical aligmnent should be multiples of this number - amf_int32 (AMF_STD_CALL *GetVertAlign)(AMFIOCaps* pThis); - - // Enumerate supported surface pixel formats - amf_int32 (AMF_STD_CALL *GetNumOfFormats)(AMFIOCaps* pThis); - AMF_RESULT (AMF_STD_CALL *GetFormatAt)(AMFIOCaps* pThis, amf_int32 index, AMF_SURFACE_FORMAT* format, amf_bool* native); - - // Enumerate supported memory types - amf_int32 (AMF_STD_CALL *GetNumOfMemoryTypes)(AMFIOCaps* pThis); - AMF_RESULT (AMF_STD_CALL *GetMemoryTypeAt)(AMFIOCaps* pThis, amf_int32 index, AMF_MEMORY_TYPE* memType, amf_bool* native); - - amf_bool (AMF_STD_CALL *IsInterlacedSupported)(AMFIOCaps* pThis); - } AMFIOCapsVtbl; - - struct AMFIOCaps - { - const AMFIOCapsVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFCaps interface - base interface for every h/w module supported by Capability Manager - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFCaps : public AMFPropertyStorage - { - public: - virtual AMF_ACCELERATION_TYPE AMF_STD_CALL GetAccelerationType() const = 0; - virtual AMF_RESULT AMF_STD_CALL GetInputCaps(AMFIOCaps** input) = 0; - virtual AMF_RESULT AMF_STD_CALL GetOutputCaps(AMFIOCaps** output) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFCapsPtr; -#else // #if defined(__cplusplus) - typedef struct AMFCaps AMFCaps; - - typedef struct AMFCapsVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFCaps* pThis); - amf_long (AMF_STD_CALL *Release)(AMFCaps* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFCaps* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFCaps* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFCaps* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFCaps* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFCaps* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFCaps* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFCaps* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFCaps* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFCaps* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFCaps* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFCaps* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFCaps interface - - AMF_ACCELERATION_TYPE (AMF_STD_CALL *GetAccelerationType)(AMFCaps* pThis); - AMF_RESULT (AMF_STD_CALL *GetInputCaps)(AMFCaps* pThis, AMFIOCaps** input); - AMF_RESULT (AMF_STD_CALL *GetOutputCaps)(AMFCaps* pThis, AMFIOCaps** output); - } AMFCapsVtbl; - - struct AMFCaps - { - const AMFCapsVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) -} -#endif - -#endif //#ifndef AMF_ComponentCaps_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/CursorCapture.h b/plugins/obs-ffmpeg/external/AMF/include/components/CursorCapture.h deleted file mode 100644 index e21c169098b7ea..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/CursorCapture.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// Cursor capture interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_CursorCapture_h -#define AMF_CursorCapture_h -#pragma once - -namespace amf -{ - class AMFCursorCapture : public AMFInterface - { - public: - AMF_DECLARE_IID(0x166efa1a, 0x19b8, 0x42f2, 0x86, 0x0f, 0x56, 0x69, 0xca, 0x7a, 0x85, 0x4c) - virtual AMF_RESULT AMF_STD_CALL AcquireCursor(amf::AMFSurface** pSurface) = 0; - virtual AMF_RESULT AMF_STD_CALL Reset() = 0; - }; - - typedef AMFInterfacePtr_T AMFCursorCapturePtr; -} - -#endif // #ifndef AMF_CursorCapture_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/DisplayCapture.h b/plugins/obs-ffmpeg/external/AMF/include/components/DisplayCapture.h deleted file mode 100644 index 30820d6aab5d8c..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/DisplayCapture.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// Desktop duplication interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_DisplayCapture_h -#define AMF_DisplayCapture_h -#pragma once - -#include "Component.h" - -extern "C" -{ - // To create capture component with Desktop Duplication API use this function - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentDisplayCapture(amf::AMFContext* pContext, void* reserved, amf::AMFComponent** ppComponent); -} - -// To create AMD Direct Capture component use this component ID with AMFFactory::CreateComponent() -#define AMFDisplayCapture L"AMFDisplayCapture" - -// Static properties -// -typedef enum AMF_DISPLAYCAPTURE_MODE_ENUM -{ - AMF_DISPLAYCAPTURE_MODE_KEEP_FRAMERATE = 0, // capture component maintains the frame rate and returns current visible surface - AMF_DISPLAYCAPTURE_MODE_WAIT_FOR_PRESENT = 1, // capture component waits for flip (present) event - AMF_DISPLAYCAPTURE_MODE_GET_CURRENT_SURFACE = 2, // returns current visible surface immediately -} AMF_DISPLAYCAPTURE_MODE_ENUM; - - -#define AMF_DISPLAYCAPTURE_MONITOR_INDEX L"MonitorIndex" // amf_int64, default = 0, Index of the display monitor; is determined by using EnumAdapters() in DXGI. -#define AMF_DISPLAYCAPTURE_MODE L"CaptureMode" // amf_int64(AMF_DISPLAYCAPTURE_MODE_ENUM), default = AMF_DISPLAYCAPTURE_MODE_FRAMERATE, controls wait logic -#define AMF_DISPLAYCAPTURE_FRAMERATE L"FrameRate" // AMFRate, default = (0, 1) Capture framerate, if 0 - capture rate will be driven by flip event from fullscreen app or DWM -#define AMF_DISPLAYCAPTURE_CURRENT_TIME_INTERFACE L"CurrentTimeInterface" // AMFInterface(AMFCurrentTime) Optional interface object for providing timestamps. -#define AMF_DISPLAYCAPTURE_FORMAT L"CurrentFormat" // amf_int64(AMF_SURFACE_FORMAT) Capture format - read-only -#define AMF_DISPLAYCAPTURE_RESOLUTION L"Resolution" // AMFSize - screen resolution - read-only -#define AMF_DISPLAYCAPTURE_DUPLICATEOUTPUT L"DuplicateOutput" // amf_bool, default = false, output AMF surface is a copy of captured -#define AMF_DISPLAYCAPTURE_DESKTOP_RECT L"DesktopRect" // AMFRect - rect of the capture desktop - read-only -#define AMF_DISPLAYCAPTURE_ENABLE_DIRTY_RECTS L"EnableDirtyRects" // amf_bool, default = false, enable dirty rectangles attached to output as AMF_DISPLAYCAPTURE_DIRTY_RECTS -#define AMF_DISPLAYCAPTURE_DRAW_DIRTY_RECTS L"DrawDirtyRects" // amf_bool, default = false, copies capture output and draws dirty rectangles with red - for debugging only -#define AMF_DISPLAYCAPTURE_ROTATION L"Rotation" // amf_int64(AMF_ROTATION_ENUM); default = AMF_ROTATION_NONE, monitor rotation state - -// Properties that can be set on output AMFSurface -#define AMF_DISPLAYCAPTURE_DIRTY_RECTS L"DirtyRects" // AMFInterface*(AMFBuffer*) - array of AMFRect(s) -#define AMF_DISPLAYCAPTURE_FRAME_INDEX L"FrameIndex" // amf_int64; default = 0, index of presented frame since capture started -#define AMF_DISPLAYCAPTURE_FRAME_FLIP_TIMESTAMP L"FlipTimesamp" // amf_int64; default = 0, flip timestmap of presented frame -// see Surface.h -//#define AMF_SURFACE_ROTATION L"Rotation" // amf_int64(AMF_ROTATION_ENUM); default = AMF_ROTATION_NONE, can be set on surfaces - the same value as AMF_DISPLAYCAPTURE_ROTATION - -#endif // #ifndef AMF_DisplayCapture_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioConverter.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioConverter.h deleted file mode 100644 index 5ce79cab608fbc..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioConverter.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// AMFFAudioConverterFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_AudioConverterFFMPEG_h -#define AMF_AudioConverterFFMPEG_h - -#pragma once - - -#define FFMPEG_AUDIO_CONVERTER L"AudioConverterFFMPEG" - - -#define AUDIO_CONVERTER_IN_AUDIO_BIT_RATE L"In_BitRate" // amf_int64 (default = 128000) -#define AUDIO_CONVERTER_IN_AUDIO_SAMPLE_RATE L"In_SampleRate" // amf_int64 (default = 0) -#define AUDIO_CONVERTER_IN_AUDIO_CHANNELS L"In_Channels" // amf_int64 (default = 2) -#define AUDIO_CONVERTER_IN_AUDIO_SAMPLE_FORMAT L"In_SampleFormat" // amf_int64 (default = AMFAF_UNKNOWN) (AMF_AUDIO_FORMAT) -#define AUDIO_CONVERTER_IN_AUDIO_CHANNEL_LAYOUT L"In_ChannelLayout" // amf_int64 (default = 0) -#define AUDIO_CONVERTER_IN_AUDIO_BLOCK_ALIGN L"In_BlockAlign" // amf_int64 (default = 0) - -#define AUDIO_CONVERTER_OUT_AUDIO_BIT_RATE L"Out_BitRate" // amf_int64 (default = 128000) -#define AUDIO_CONVERTER_OUT_AUDIO_SAMPLE_RATE L"Out_SampleRate" // amf_int64 (default = 0) -#define AUDIO_CONVERTER_OUT_AUDIO_CHANNELS L"Out_Channels" // amf_int64 (default = 2) -#define AUDIO_CONVERTER_OUT_AUDIO_SAMPLE_FORMAT L"Out_SampleFormat" // amf_int64 (default = AMFAF_UNKNOWN) (AMF_AUDIO_FORMAT) -#define AUDIO_CONVERTER_OUT_AUDIO_CHANNEL_LAYOUT L"Out_ChannelLayout" // amf_int64 (default = 0) -#define AUDIO_CONVERTER_OUT_AUDIO_BLOCK_ALIGN L"Out_BlockAlign" // amf_int64 (default = 0) - - - -#endif //#ifndef AMF_AudioConverterFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioDecoder.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioDecoder.h deleted file mode 100644 index e0c324c6b9c9d9..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioDecoder.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// AudioDecoderFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_AudioDecoderFFMPEG_h -#define AMF_AudioDecoderFFMPEG_h - -#pragma once - - -#define FFMPEG_AUDIO_DECODER L"AudioDecoderFFMPEG" - - -#define AUDIO_DECODER_ENABLE_DEBUGGING L"EnableDebug" // bool (default = false) - trace some debug information if set to true -#define AUDIO_DECODER_ENABLE_DECODING L"EnableDecoding" // bool (default = true) - if false, component will not decode anything - -#define AUDIO_DECODER_IN_AUDIO_CODEC_ID L"In_CodecID" // amf_int64 (default = AV_CODEC_ID_NONE) - FFMPEG codec ID -#define AUDIO_DECODER_IN_AUDIO_BIT_RATE L"In_BitRate" // amf_int64 (default = 128000) -#define AUDIO_DECODER_IN_AUDIO_EXTRA_DATA L"In_ExtraData" // interface to AMFBuffer -#define AUDIO_DECODER_IN_AUDIO_SAMPLE_RATE L"In_SampleRate" // amf_int64 (default = 0) -#define AUDIO_DECODER_IN_AUDIO_CHANNELS L"In_Channels" // amf_int64 (default = 2) -#define AUDIO_DECODER_IN_AUDIO_SAMPLE_FORMAT L"In_SampleFormat" // amf_int64 (default = AMFAF_UNKNOWN) (AMF_AUDIO_FORMAT) -#define AUDIO_DECODER_IN_AUDIO_CHANNEL_LAYOUT L"In_ChannelLayout" // amf_int64 (default = 0) -#define AUDIO_DECODER_IN_AUDIO_BLOCK_ALIGN L"In_BlockAlign" // amf_int64 (default = 0) -#define AUDIO_DECODER_IN_AUDIO_FRAME_SIZE L"In_FrameSize" // amf_int64 (default = 0) -#define AUDIO_DECODER_IN_AUDIO_SEEK_POSITION L"In_SeekPosition" // amf_int64 (default = 0) - -#define AUDIO_DECODER_OUT_AUDIO_BIT_RATE L"Out_BitRate" // amf_int64 (default = 128000) -#define AUDIO_DECODER_OUT_AUDIO_SAMPLE_RATE L"Out_SampleRate" // amf_int64 (default = 0) -#define AUDIO_DECODER_OUT_AUDIO_CHANNELS L"Out_Channels" // amf_int64 (default = 2) -#define AUDIO_DECODER_OUT_AUDIO_SAMPLE_FORMAT L"Out_SampleFormat" // amf_int64 (default = AMFAF_UNKNOWN) (AMF_AUDIO_FORMAT) -#define AUDIO_DECODER_OUT_AUDIO_CHANNEL_LAYOUT L"Out_ChannelLayout" // amf_int64 (default = 0) -#define AUDIO_DECODER_OUT_AUDIO_BLOCK_ALIGN L"Out_BlockAlign" // amf_int64 (default = 0) - - - -#endif //#ifndef AMF_AudioDecoderFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioEncoder.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioEncoder.h deleted file mode 100644 index 872080b1931958..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGAudioEncoder.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// AudioEncoderFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_AudioEncoderFFMPEG_h -#define AMF_AudioEncoderFFMPEG_h - -#pragma once - - -#define FFMPEG_AUDIO_ENCODER L"AudioEncoderFFMPEG" - - -#define AUDIO_ENCODER_ENABLE_DEBUGGING L"EnableDebug" // bool (default = false) - trace some debug information if set to true -#define AUDIO_ENCODER_ENABLE_ENCODING L"EnableEncoding" // bool (default = true) - if false, component will not encode anything -#define AUDIO_ENCODER_AUDIO_CODEC_ID L"CodecID" // amf_int64 (default = AV_CODEC_ID_NONE) - FFMPEG codec ID - -#define AUDIO_ENCODER_IN_AUDIO_SAMPLE_RATE L"In_SampleRate" // amf_int64 (default = 44100) -#define AUDIO_ENCODER_IN_AUDIO_CHANNELS L"In_Channels" // amf_int64 (default = 2) -#define AUDIO_ENCODER_IN_AUDIO_SAMPLE_FORMAT L"In_SampleFormat" // amf_int64 (default = AMFAF_S16) (AMF_AUDIO_FORMAT) -#define AUDIO_ENCODER_IN_AUDIO_CHANNEL_LAYOUT L"In_ChannelLayout" // amf_int64 (default = 3) -#define AUDIO_ENCODER_IN_AUDIO_BLOCK_ALIGN L"In_BlockAlign" // amf_int64 (default = 0) - -#define AUDIO_ENCODER_OUT_AUDIO_BIT_RATE L"Out_BitRate" // amf_int64 (default = 128000) -#define AUDIO_ENCODER_OUT_AUDIO_EXTRA_DATA L"Out_ExtraData" // interface to AMFBuffer -#define AUDIO_ENCODER_OUT_AUDIO_SAMPLE_RATE L"Out_SampleRate" // amf_int64 (default = 44100) -#define AUDIO_ENCODER_OUT_AUDIO_CHANNELS L"Out_Channels" // amf_int64 (default = 2) -#define AUDIO_ENCODER_OUT_AUDIO_SAMPLE_FORMAT L"Out_SampleFormat" // amf_int64 (default = AMFAF_S16) (AMF_AUDIO_FORMAT) -#define AUDIO_ENCODER_OUT_AUDIO_CHANNEL_LAYOUT L"Out_ChannelLayout" // amf_int64 (default = 0) -#define AUDIO_ENCODER_OUT_AUDIO_BLOCK_ALIGN L"Out_BlockAlign" // amf_int64 (default = 0) -#define AUDIO_ENCODER_OUT_AUDIO_FRAME_SIZE L"Out_FrameSize" // amf_int64 (default = 0) - - - -#endif //#ifndef AMF_AudioEncoderFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGComponents.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGComponents.h deleted file mode 100644 index a3fbaff2b01d4d..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGComponents.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// FFMPEG components definitions -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_ComponentsFFMPEG_h -#define AMF_ComponentsFFMPEG_h - -#pragma once - - -#if defined(_WIN32) - #if defined(_M_AMD64) - #define FFMPEG_DLL_NAME L"amf-component-ffmpeg64.dll" - #else - #define FFMPEG_DLL_NAME L"amf-component-ffmpeg32.dll" - #endif -#elif defined(__linux) - #define FFMPEG_DLL_NAME L"amf-component-ffmpeg.so" -#endif - - -#endif //#ifndef AMF_ComponentsFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileDemuxer.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileDemuxer.h deleted file mode 100644 index 60fd2934a91bba..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileDemuxer.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// DemuxerFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_FileDemuxerFFMPEG_h -#define AMF_FileDemuxerFFMPEG_h - -#pragma once - -#define FFMPEG_DEMUXER L"DemuxerFFMPEG" - - -// component properties -#define FFMPEG_DEMUXER_PATH L"Path" // string - the file to open -#define FFMPEG_DEMUXER_URL L"Url" // string - the stream url to open -#define FFMPEG_DEMUXER_START_FRAME L"StartFrame" // amf_int64 (default = 0) -#define FFMPEG_DEMUXER_FRAME_COUNT L"FramesNumber" // amf_int64 (default = 0) -#define FFMPEG_DEMUXER_DURATION L"Duration" // amf_int64 (default = 0) -#define FFMPEG_DEMUXER_CHECK_MVC L"CheckMVC" // bool (default = true) -//#define FFMPEG_DEMUXER_SYNC_AV L"SyncAV" // bool (default = false) -#define FFMPEG_DEMUXER_INDIVIDUAL_STREAM_MODE L"StreamMode" // bool (default = true) -#define FFMPEG_DEMUXER_LISTEN L"Listen" // bool (default = false) - -// for common, video and audio properties see Component.h - - -// video stream properties -#define FFMPEG_DEMUXER_VIDEO_PIXEL_ASPECT_RATIO L"PixelAspectRatio" // double (default = calculated) -#define FFMPEG_DEMUXER_VIDEO_CODEC L"FFmpegCodec" // enum (from source) - - -// buffer properties -#define FFMPEG_DEMUXER_BUFFER_TYPE L"BufferType" // amf_int64 ( AMF_STREAM_TYPE_ENUM ) -#define FFMPEG_DEMUXER_BUFFER_STREAM_INDEX L"BufferStreamIndexType" // amf_int64 ( stream index ) -#endif //#ifndef AMF_FileDemuxerFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileMuxer.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileMuxer.h deleted file mode 100644 index a44676095e68bf..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGFileMuxer.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// MuxerFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_FileMuxerFFMPEG_h -#define AMF_FileMuxerFFMPEG_h - -#pragma once - -#define FFMPEG_MUXER L"MuxerFFMPEG" - - -// component properties -#define FFMPEG_MUXER_PATH L"Path" // string - the file to open -#define FFMPEG_MUXER_URL L"Url" // string - the stream url to open -#define FFMPEG_MUXER_LISTEN L"Listen" // bool (default = false) -#define FFMPEG_MUXER_ENABLE_VIDEO L"EnableVideo" // bool (default = true) -#define FFMPEG_MUXER_ENABLE_AUDIO L"EnableAudio" // bool (default = false) -#define FFMPEG_MUXER_CURRENT_TIME_INTERFACE L"CurrentTimeInterface" -#define FFMPEG_MUXER_VIDEO_ROTATION L"VideoRotation" // amf_int64 (0, 90, 180, 270, default = 0) -#define FFMPEG_MUXER_USAGE_IS_TRIM L"UsageIsTrim" // bool (default = false) - -#endif //#ifndef AMF_FileMuxerFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGVideoDecoder.h b/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGVideoDecoder.h deleted file mode 100644 index c844145d814c42..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/FFMPEGVideoDecoder.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// VideoDecoderFFMPEG interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_VideoDecoderFFMPEG_h -#define AMF_VideoDecoderFFMPEG_h - -#pragma once - -#define FFMPEG_VIDEO_DECODER L"VideoDecoderFFMPEG" - -#define VIDEO_DECODER_ENABLE_DECODING L"EnableDecoding" // bool (default = true) - if false, component will not decode anything -#define VIDEO_DECODER_CODEC_ID L"CodecID" // amf_int64 (AMF_STREAM_CODEC_ID_ENUM) codec ID -#define VIDEO_DECODER_EXTRA_DATA L"ExtraData" // interface to AMFBuffer -#define VIDEO_DECODER_RESOLUTION L"Resolution" // AMFSize -#define VIDEO_DECODER_BITRATE L"BitRate" // amf_int64 (default = 0) -#define VIDEO_DECODER_FRAMERATE L"FrameRate" // AMFRate -#define VIDEO_DECODER_SEEK_POSITION L"SeekPosition" // amf_int64 (default = 0) - -#define VIDEO_DECODER_COLOR_TRANSFER_CHARACTERISTIC L"ColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 - -#endif //#ifndef AMF_VideoDecoderFFMPEG_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h b/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h deleted file mode 100644 index 251723e033c14f..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/HQScaler.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMFHQScaler_h -#define AMFHQScaler_h - -#pragma once - -#define AMFHQScaler L"AMFHQScaler" - - -// various types of algorithms supported by the high-quality scaler -enum AMF_HQ_SCALER_ALGORITHM_ENUM -{ - AMF_HQ_SCALER_ALGORITHM_BILINEAR = 0, - AMF_HQ_SCALER_ALGORITHM_BICUBIC = 1, - AMF_HQ_SCALER_ALGORITHM_FSR = 2, // deprecated - AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_0 = 2, - AMF_HQ_SCALER_ALGORITHM_POINT = 3, - AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_1 = 4, - -}; - - -// PA object properties -#define AMF_HQ_SCALER_ALGORITHM L"HQScalerAlgorithm" // amf_int64(AMF_HQ_SCALER_ALGORITHM_ENUM) (Bi-linear, Bi-cubic, RCAS, Auto)" - determines which scaling algorithm will be used - // auto will chose best option between algorithms available -#define AMF_HQ_SCALER_ENGINE_TYPE L"HQScalerEngineType" // AMF_MEMORY_TYPE (DX11, DX12, OPENCL, VULKAN default : DX11)" - determines how the object is initialized and what kernels to use - -#define AMF_HQ_SCALER_OUTPUT_SIZE L"HQSOutputSize" // AMFSize - output scaling width/hieight - -#define AMF_HQ_SCALER_KEEP_ASPECT_RATIO L"KeepAspectRatio" // bool (default=false) Keep aspect ratio if scaling. -#define AMF_HQ_SCALER_FILL L"Fill" // bool (default=false) fill area out of ROI. -#define AMF_HQ_SCALER_FILL_COLOR L"FillColor" // AMFColor -#define AMF_HQ_SCALER_FROM_SRGB L"FromSRGB" // bool (default=true) Convert to SRGB. - -#define AMF_HQ_SCALER_SHARPNESS L"HQScalerSharpness" // Float in the range of [0.0, 2.0] -#define AMF_HQ_SCALER_FRAME_RATE L"HQScalerFrameRate" // Frame rate (off, 15, 30, 60) - -#endif //#ifndef AMFHQScaler_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/MediaSource.h b/plugins/obs-ffmpeg/external/AMF/include/components/MediaSource.h deleted file mode 100644 index 1afdb6745ef69b..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/MediaSource.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_MediaSource_h -#define AMF_MediaSource_h - -#pragma once - -#include "public/include/core/Interface.h" - -namespace amf -{ - enum AMF_SEEK_TYPE - { - AMF_SEEK_PREV = 0, // nearest packet before pts - AMF_SEEK_NEXT = 1, // nearest packet after pts - AMF_SEEK_PREV_KEYFRAME = 2, // nearest keyframe packet before pts - AMF_SEEK_NEXT_KEYFRAME = 3, // nearest keyframe packet after pts - }; - - //---------------------------------------------------------------------------------------------- - // media source interface. - //---------------------------------------------------------------------------------------------- - class AMFMediaSource : public AMFInterface - { - public: - AMF_DECLARE_IID(0xb367695a, 0xdbd0, 0x4430, 0x95, 0x3b, 0xbc, 0x7d, 0xbd, 0x2a, 0xa7, 0x66) - - // interface - virtual AMF_RESULT AMF_STD_CALL Seek(amf_pts pos, AMF_SEEK_TYPE seekType, amf_int32 whichStream) = 0; - virtual amf_pts AMF_STD_CALL GetPosition() = 0; - virtual amf_pts AMF_STD_CALL GetDuration() = 0; - - virtual void AMF_STD_CALL SetMinPosition(amf_pts pts) = 0; - virtual amf_pts AMF_STD_CALL GetMinPosition() = 0; - virtual void AMF_STD_CALL SetMaxPosition(amf_pts pts) = 0; - virtual amf_pts AMF_STD_CALL GetMaxPosition() = 0; - - virtual amf_uint64 AMF_STD_CALL GetFrameFromPts(amf_pts pts) = 0; - virtual amf_pts AMF_STD_CALL GetPtsFromFrame(amf_uint64 frame) = 0; - - virtual bool AMF_STD_CALL SupportFramesAccess() = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFMediaSourcePtr; -} //namespace amf - -#endif //#ifndef AMF_MediaSource_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/PreAnalysis.h b/plugins/obs-ffmpeg/external/AMF/include/components/PreAnalysis.h deleted file mode 100644 index 51e8da662fb291..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/PreAnalysis.h +++ /dev/null @@ -1,133 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2019 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMFPreAnalysis_h -#define AMFPreAnalysis_h - -#pragma once - -#define AMFPreAnalysis L"AMFPreAnalysis" - - - -enum AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_ENUM -{ - AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_LOW = 0, - AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_MEDIUM = 1, - AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_HIGH = 2 -}; - - -enum AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_ENUM -{ - AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_LOW = 0, - AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_MEDIUM = 1, - AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_HIGH = 2 -}; - - -enum AMF_PA_ACTIVITY_TYPE_ENUM -{ - AMF_PA_ACTIVITY_Y = 0, - AMF_PA_ACTIVITY_YUV = 1 -}; - - -enum AMF_PA_CAQ_STRENGTH_ENUM -{ - AMF_PA_CAQ_STRENGTH_LOW = 0, - AMF_PA_CAQ_STRENGTH_MEDIUM = 1, - AMF_PA_CAQ_STRENGTH_HIGH = 2 -}; - -// Perceptual adaptive quantization mode -enum AMF_PA_PAQ_MODE_ENUM -{ - AMF_PA_PAQ_MODE_NONE = 0, - AMF_PA_PAQ_MODE_CAQ = 1 -}; - -// Temporal adaptive quantization mode -enum AMF_PA_TAQ_MODE_ENUM -{ - AMF_PA_TAQ_MODE_NONE = 0, - AMF_PA_TAQ_MODE_1 = 1, - AMF_PA_TAQ_MODE_2 = 2 -}; - -enum AMF_PA_HIGH_MOTION_QUALITY_BOOST_MODE_ENUM -{ - AMF_PA_HIGH_MOTION_QUALITY_BOOST_MODE_NONE = 0, //default - AMF_PA_HIGH_MOTION_QUALITY_BOOST_MODE_AUTO = 1 -}; - - -// PA object properties -#define AMF_PA_ENGINE_TYPE L"PAEngineType" // AMF_MEMORY_TYPE (Host, DX11, OpenCL, Vulkan, Auto default : UNKNOWN (Auto))" - determines how the object is initialized and what kernels to use - // by default it is Auto (DX11, OpenCL and Vulkan are currently available) - -#define AMF_PA_SCENE_CHANGE_DETECTION_ENABLE L"PASceneChangeDetectionEnable" // bool (default : True) - Enable Scene Change Detection GPU algorithm -#define AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY L"PASceneChangeDetectionSensitivity" // AMF_PA_SCENE_CHANGE_DETECTION_SENSITIVITY_ENUM (default : Medium) - Scene Change Detection Sensitivity -#define AMF_PA_STATIC_SCENE_DETECTION_ENABLE L"PAStaticSceneDetectionEnable" // bool (default : False) - Enable Skip Detection GPU algorithm -#define AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY L"PAStaticSceneDetectionSensitivity" // AMF_PA_STATIC_SCENE_DETECTION_SENSITIVITY_ENUM (default : High) - Allowable absolute difference between pixels (sample counts) -#define AMF_PA_FRAME_SAD_ENABLE L"PAFrameSadEnable" // bool (default : True) - Enable Frame SAD algorithm -#define AMF_PA_ACTIVITY_TYPE L"PAActivityType" // AMF_PA_ACTIVITY_TYPE_ENUM (default : Calculate on Y) - Block activity calculation mode -#define AMF_PA_LTR_ENABLE L"PALongTermReferenceEnable" // bool (default : False) - Enable Automatic Long Term Reference frame management -#define AMF_PA_LOOKAHEAD_BUFFER_DEPTH L"PALookAheadBufferDepth" // amf_uint64 (default : 0) Values: [0, MAX_LOOKAHEAD_DEPTH] - PA lookahead buffer size -#define AMF_PA_PAQ_MODE L"PAPerceptualAQMode" // AMF_PA_PAQ_MODE_ENUM (default : AMF_PA_PAQ_MODE_NONE) - Perceptual AQ mode -#define AMF_PA_TAQ_MODE L"PATemporalAQMode" // AMF_PA_TAQ_MODE_ENUM (default: AMF_PA_TAQ_MODE_NONE) - Temporal AQ mode -#define AMF_PA_HIGH_MOTION_QUALITY_BOOST_MODE L"PAHighMotionQualityBoostMode" // AMF_PA_HIGH_MOTION_QUALITY_BOOST_MODE_ENUM (default: None) - High motion quality boost mode - -/////////////////////////////////////////// -// the following properties are available -// only through the Encoder - trying to -// access/set them when PA is standalone -// will fail - - -#define AMF_PA_INITIAL_QP_AFTER_SCENE_CHANGE L"PAInitialQPAfterSceneChange" // amf_uint64 (default : 0) Values: [0, 51] - Base QP to be used immediately after scene change. If this value is not set, PA will choose a proper QP value -#define AMF_PA_MAX_QP_BEFORE_FORCE_SKIP L"PAMaxQPBeforeForceSkip" // amf_uint64 (default : 35) Values: [0, 51] - When a static scene is detected, a skip frame is inserted only if the previous encoded frame average QP <= this value - - -#define AMF_PA_CAQ_STRENGTH L"PACAQStrength" // AMF_PA_CAQ_STRENGTH_ENUM (default : Medium) - Content Adaptive Quantization (CAQ) strength - - - - -////////////////////////////////////////////////// -// properties set by PA on output buffer interface -#define AMF_PA_ACTIVITY_MAP L"PAActivityMap" // AMFInterface* -> AMFSurface*; Values: int32 - When PA is standalone, there will be a 2D Activity map generated for each frame -#define AMF_PA_SCENE_CHANGE_DETECT L"PASceneChangeDetect" // bool - True/False - available if AMF_PA_SCENE_CHANGE_DETECTION_ENABLE was set to True -#define AMF_PA_STATIC_SCENE_DETECT L"PAStaticSceneDetect" // bool - True/False - available if AMF_PA_STATIC_SCENE_DETECTION_ENABLE was set to True - - -#endif //#ifndef AMFPreAnalysis_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/PreProcessing.h b/plugins/obs-ffmpeg/external/AMF/include/components/PreProcessing.h deleted file mode 100644 index ab59d826b7155e..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/PreProcessing.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMFPreProcessing_h -#define AMFPreProcessing_h - -#pragma once - -#define AMFPreProcessing L"AMFPreProcessing" - - -// Pre-processing object properties -#define AMF_PP_ENGINE_TYPE L"PPEngineType" // AMF_MEMORY_TYPE (Host, DX11, OPENCL, Auto default : OPENCL) - determines how the object is initialized and what kernels to use - // by default it is OpenCL (Host, DX11 and OpenCL are currently available) -// add a property that will determine the output format -// by default we output in the same format as input -// but in some cases we might need to change the output -// format to be different than input -#define AMF_PP_OUTPUT_MEMORY_TYPE L"PPOutputFormat" // AMF_MEMORY_TYPE (Host, DX11, OPENCL default : Unknown) - determines format of frame going out - - -#define AMF_PP_ADAPTIVE_FILTER_STRENGTH L"PPAdaptiveFilterStrength" // int (default : 4) - strength: 0 - 10: the higher the value, the stronger the filtering -#define AMF_PP_ADAPTIVE_FILTER_SENSITIVITY L"PPAdaptiveFilterSensitivity" // int (default : 4) - sensitivity: 0 - 10: the lower the value, the more sensitive to edge (preserve more details) - -// Encoder parameters used for adaptive filtering -#define AMF_PP_TARGET_BITRATE L"PPTargetBitrate" // int64 (default: 2000000) - target bit rate -#define AMF_PP_FRAME_RATE L"PPFrameRate" // AMFRate (default: 30, 1) - frame rate -#define AMF_PP_ADAPTIVE_FILTER_ENABLE L"PPAdaptiveFilterEnable" // bool (default: false) - turn on/off adaptive filtering - -#endif //#ifndef AMFPreProcessing_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h b/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h deleted file mode 100644 index efdd9705371bc3..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/SupportedCodecs.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// An interface available on some components to provide information on supported input and output codecs -//------------------------------------------------------------------------------------------------- -#ifndef AMF_SupportedCodecs_h -#define AMF_SupportedCodecs_h - -#pragma once - -#include "public/include/core/Interface.h" - -//properties on the returned AMFPropertyStorage -#define SUPPORTEDCODEC_ID L"CodecId" //amf_int64 -#define SUPPORTEDCODEC_SAMPLERATE L"SampleRate" //amf_int32 - -namespace amf -{ - class AMFSupportedCodecs : public AMFInterface - { - public: - AMF_DECLARE_IID(0xc1003a83, 0x7934, 0x408a, 0x95, 0x5b, 0xc4, 0xdd, 0x85, 0x9d, 0xf5, 0x61) - - //call with increasing values until it returns AMF_OUT_OF_RANGE - virtual AMF_RESULT AMF_STD_CALL GetInputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0; - virtual AMF_RESULT AMF_STD_CALL GetOutputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0; - }; - typedef AMFInterfacePtr_T AMFSupportedCodecsPtr; -} - -#endif \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h b/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h deleted file mode 100644 index 6d3468ab80a5b7..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VQEnhancer.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMFVQEnhancer_h -#define AMFVQEnhancer_h - -#pragma once - -#define VE_FCR_DEFAULT_ATTENUATION 0.1 - -#define AMFVQEnhancer L"AMFVQEnhancer" - -#define AMF_VIDEO_ENHANCER_ENGINE_TYPE L"AMF_VIDEI_ENHANCER_ENGINE_TYPE" // AMF_MEMORY_TYPE (DX11, DX12, OPENCL, VULKAN default : DX11)" - determines how the object is initialized and what kernels to use -#define AMF_VIDEO_ENHANCER_OUTPUT_SIZE L"AMF_VIDEO_ENHANCER_OUTPUT_SIZE" // AMFSize -#define AMF_VE_FCR_ATTENUATION L"AMF_VE_FCR_ATTENUATION" // Float in the range of [0.02, 0.4], default : 0.1 -#define AMF_VE_FCR_RADIUS L"AMF_VE_FCR_RADIUS" // int in the range of [1, 4] -#define AMF_VE_FCR_SPLIT_VIEW L"AMF_VE_FCR_SPLIT_VIEW" // FCR View split window - -#endif //#ifndef AMFVQEnhancer_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoCapture.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoCapture.h deleted file mode 100644 index db0f6c0b23fc0f..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoCapture.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// ZCamLive interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_VideoCapture_h -#define AMF_VideoCapture_h - -#pragma once - -#define VIDEOCAP_DEVICE_COUNT L"VideoCapDeviceCount" // amf_int64, (default=2), number of video capture devices -#define VIDEOCAP_DEVICE_NAME L"VideoCapDeviceName" // WString, (default=""), name of the video capture device -#define VIDEOCAP_DEVICE_ACTIVE L"VideoCapDeviceActive" // WString, (default=""), name of the selected video capture device - -#define VIDEOCAP_CODEC L"CodecID" // WString (default = "AMFVideoDecoderUVD_H264_AVC"), UVD codec ID -#define VIDEOCAP_FRAMESIZE L"FrameSize" // AMFSize, (default=AMFConstructSize(1920, 1080)), frame size in pixels - -extern "C" -{ - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentVideoCapture(amf::AMFContext* pContext, amf::AMFComponentEx** ppComponent); -} -#endif // AMF_VideoCapture_h \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoConverter.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoConverter.h deleted file mode 100644 index ed8559a206aed4..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoConverter.h +++ /dev/null @@ -1,121 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// AMFFVideoConverter interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_VideoConverter_h -#define AMF_VideoConverter_h -#pragma once - -#include "Component.h" -#include "ColorSpace.h" - -#define AMFVideoConverter L"AMFVideoConverter" - -enum AMF_VIDEO_CONVERTER_SCALE_ENUM -{ - AMF_VIDEO_CONVERTER_SCALE_INVALID = -1, - AMF_VIDEO_CONVERTER_SCALE_BILINEAR = 0, - AMF_VIDEO_CONVERTER_SCALE_BICUBIC = 1 -}; - -enum AMF_VIDEO_CONVERTER_TONEMAPPING_ENUM -{ - AMF_VIDEO_CONVERTER_TONEMAPPING_COPY = 0, - AMF_VIDEO_CONVERTER_TONEMAPPING_AMD = 1, - AMF_VIDEO_CONVERTER_TONEMAPPING_LINEAR = 2, - AMF_VIDEO_CONVERTER_TONEMAPPING_GAMMA = 3, - AMF_VIDEO_CONVERTER_TONEMAPPING_REINHARD = 4, - AMF_VIDEO_CONVERTER_TONEMAPPING_2390 = 5, -}; - - - -#define AMF_VIDEO_CONVERTER_OUTPUT_FORMAT L"OutputFormat" // Values : AMF_SURFACE_NV12 or AMF_SURFACE_BGRA or AMF_SURFACE_YUV420P -#define AMF_VIDEO_CONVERTER_MEMORY_TYPE L"MemoryType" // Values : AMF_MEMORY_DX11 or AMF_MEMORY_DX9 or AMF_MEMORY_UNKNOWN (get from input type) -#define AMF_VIDEO_CONVERTER_COMPUTE_DEVICE L"ComputeDevice" // Values : AMF_MEMORY_COMPUTE_FOR_DX9 enumeration - -#define AMF_VIDEO_CONVERTER_OUTPUT_SIZE L"OutputSize" // AMFSize (default=0,0) width in pixels. default means no scaling -#define AMF_VIDEO_CONVERTER_OUTPUT_RECT L"OutputRect" // AMFRect (default=0, 0, 0, 0) rectangle in pixels. default means no rect -#define AMF_VIDEO_CONVERTER_SCALE L"ScaleType" // amf_int64(AMF_VIDEO_CONVERTER_SCALE_ENUM); default = AMF_VIDEO_CONVERTER_SCALE_BILINEAR -#define AMF_VIDEO_CONVERTER_FORCE_OUTPUT_SURFACE_SIZE L"ForceOutputSurfaceSize" // bool (default=false) Force output size from output surface - -#define AMF_VIDEO_CONVERTER_KEEP_ASPECT_RATIO L"KeepAspectRatio" // bool (default=false) Keep aspect ratio if scaling. -#define AMF_VIDEO_CONVERTER_FILL L"Fill" // bool (default=false) fill area out of ROI. -#define AMF_VIDEO_CONVERTER_FILL_COLOR L"FillColor" // AMFColor - -//------------------------------------------------------------------------------------------------- -// SDR color conversion -//------------------------------------------------------------------------------------------------- -#define AMF_VIDEO_CONVERTER_COLOR_PROFILE L"ColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO -#define AMF_VIDEO_CONVERTER_LINEAR_RGB L"LinearRGB" // bool (default=false) Convert to/from linear RGB instead of sRGB using AMF_VIDEO_DECODER_COLOR_TRANSFER_CHARACTERISTIC or by default AMF_VIDEO_CONVERTER_TRANSFER_CHARACTERISTIC - -//------------------------------------------------------------------------------------------------- -// HDR color conversion -//------------------------------------------------------------------------------------------------- -// AMF_VIDEO_CONVERTER_COLOR_PROFILE is used to define color space conversion - -// HDR data - can be set on converter or respectively on input and output surfaces (output surface via custom allocator) -// if present, HDR_METADATA primary color overwrites COLOR_PRIMARIES - -// these properties can be set on converter component to configure input and output -// these properties overwrite properties set on surface - see below -#define AMF_VIDEO_CONVERTER_INPUT_TRANSFER_CHARACTERISTIC L"InputTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See ColorSpace.h for enum -#define AMF_VIDEO_CONVERTER_INPUT_COLOR_PRIMARIES L"InputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_CONVERTER_INPUT_COLOR_RANGE L"InputColorRange" // amf_int64(AMF_COLOR_RANGE_ENUM) default = AMF_COLOR_RANGE_UNDEFINED -#define AMF_VIDEO_CONVERTER_INPUT_HDR_METADATA L"InputHdrMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL -#define AMF_VIDEO_CONVERTER_INPUT_TONEMAPPING L"InputTonemapping" // amf_int64(AMF_VIDEO_CONVERTER_TONEMAPPING_ENUM) default = AMF_VIDEO_CONVERTER_TONEMAPPING_LINEAR - -#define AMF_VIDEO_CONVERTER_OUTPUT_TRANSFER_CHARACTERISTIC L"OutputTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See ColorSpace.h for enum -#define AMF_VIDEO_CONVERTER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_CONVERTER_OUTPUT_COLOR_RANGE L"OutputColorRange" // amf_int64(AMF_COLOR_RANGE_ENUM) default = AMF_COLOR_RANGE_UNDEFINED -#define AMF_VIDEO_CONVERTER_OUTPUT_HDR_METADATA L"OutputHdrMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL -#define AMF_VIDEO_CONVERTER_OUTPUT_TONEMAPPING L"OutputTonemapping" // amf_int64(AMF_VIDEO_CONVERTER_TONEMAPPING_ENUM) default = AMF_VIDEO_CONVERTER_TONEMAPPING_AMD - -// these properties can be set on input or outout surface See ColorSpace.h -// the same as decoder properties set on input surface - see below -//#define AMF_VIDEO_COLOR_TRANSFER_CHARACTERISTIC L"ColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See ColorSpace.h for enum -//#define AMF_VIDEO_COLOR_PRIMARIES L"ColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum -//#define AMF_VIDEO_COLOR_RANGE L"ColorRange" // amf_int64(AMF_COLOR_RANGE_ENUM) default = AMF_COLOR_RANGE_UNDEFINED -//#define AMF_VIDEO_COLOR_HDR_METADATA L"HdrMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -// If decoder properties can be set on input see VideoDecoder.h -// AMF_VIDEO_DECODER_COLOR_TRANSFER_CHARACTERISTIC -// AMF_VIDEO_DECODER_COLOR_PRIMARIES -// AMF_VIDEO_DECODER_COLOR_RANGE -// AMF_VIDEO_DECODER_HDR_METADATA - -#define AMF_VIDEO_CONVERTER_USE_DECODER_HDR_METADATA L"UseDecoderHDRMetadata" // bool (default=true) enables use of decoder / surface input color properties above - - -#endif //#ifndef AMF_VideoConverter_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h deleted file mode 100644 index c01b26994ad8c4..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoDecoderUVD.h +++ /dev/null @@ -1,126 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// VideoDecoderUVD interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_VideoDecoderUVD_h -#define AMF_VideoDecoderUVD_h -#pragma once - -#include "Component.h" -#include "ColorSpace.h" - -#define AMFVideoDecoderUVD_MPEG2 L"AMFVideoDecoderUVD_MPEG2" -#define AMFVideoDecoderUVD_MPEG4 L"AMFVideoDecoderUVD_MPEG4" -#define AMFVideoDecoderUVD_WMV3 L"AMFVideoDecoderUVD_WMV3" -#define AMFVideoDecoderUVD_VC1 L"AMFVideoDecoderUVD_VC1" -#define AMFVideoDecoderUVD_H264_AVC L"AMFVideoDecoderUVD_H264_AVC" -#define AMFVideoDecoderUVD_H264_MVC L"AMFVideoDecoderUVD_H264_MVC" -#define AMFVideoDecoderUVD_H264_SVC L"AMFVideoDecoderUVD_H264_SVC" -#define AMFVideoDecoderUVD_MJPEG L"AMFVideoDecoderUVD_MJPEG" -#define AMFVideoDecoderHW_H265_HEVC L"AMFVideoDecoderHW_H265_HEVC" -#define AMFVideoDecoderHW_H265_MAIN10 L"AMFVideoDecoderHW_H265_MAIN10" -#define AMFVideoDecoderHW_VP9 L"AMFVideoDecoderHW_VP9" -#define AMFVideoDecoderHW_VP9_10BIT L"AMFVideoDecoderHW_VP9_10BIT" -#define AMFVideoDecoderHW_AV1 L"AMFVideoDecoderHW_AV1" -#define AMFVideoDecoderHW_AV1_12BIT L"AMFVideoDecoderHW_AV1_12BIT" - -enum AMF_VIDEO_DECODER_MODE_ENUM -{ - AMF_VIDEO_DECODER_MODE_REGULAR = 0, // DPB delay is based on number of reference frames + 1 (from SPS) - AMF_VIDEO_DECODER_MODE_COMPLIANT, // DPB delay is based on profile - up to 16 - AMF_VIDEO_DECODER_MODE_LOW_LATENCY, // DPB delay is 0. Expect stream with no reordering in P-Frames or B-Frames. B-frames can be present as long as they do not introduce any frame re-ordering -}; -enum AMF_TIMESTAMP_MODE_ENUM -{ - AMF_TS_PRESENTATION = 0, // default. decoder will preserve timestamps from input to output - AMF_TS_SORT, // decoder will resort PTS list - AMF_TS_DECODE // timestamps reflect decode order - decoder will reuse them -}; - -#define AMF_VIDEO_DECODER_SURFACE_COPY L"SurfaceCopy" // amf_bool; default = false; return output surfaces as a copy -#define AMF_VIDEO_DECODER_EXTRADATA L"ExtraData" // AMFInterface* -> AMFBuffer* - AVCC - size length + SPS/PPS; or as Annex B. Optional if stream is Annex B -#define AMF_VIDEO_DECODER_FRAME_RATE L"FrameRate" // amf_double; default = 0.0, optional property to restore duration in the output if needed -#define AMF_TIMESTAMP_MODE L"TimestampMode" // amf_int64(AMF_TIMESTAMP_MODE_ENUM) - default AMF_TS_PRESENTATION - how input timestamps are treated - -// dynamic/adaptive resolution change -#define AMF_VIDEO_DECODER_ADAPTIVE_RESOLUTION_CHANGE L"AdaptiveResolutionChange" // amf_bool; default = false; reuse allocated surfaces if new resolution is smaller -#define AMF_VIDEO_DECODER_ALLOC_SIZE L"AllocSize" // AMFSize; default (1920,1088); size of allocated surface if AdaptiveResolutionChange is true -#define AMF_VIDEO_DECODER_CURRENT_SIZE L"CurrentSize" // AMFSize; default = (0,0); current size of the video - -// reference frame management -#define AMF_VIDEO_DECODER_REORDER_MODE L"ReorderMode" // amf_int64(AMF_VIDEO_DECODER_MODE_ENUM); default = AMF_VIDEO_DECODER_MODE_REGULAR; defines number of surfaces in DPB list. -#define AMF_VIDEO_DECODER_SURFACE_POOL_SIZE L"SurfacePoolSize" // amf_int64; number of surfaces in the decode pool = DPB list size + number of surfaces for presentation -#define AMF_VIDEO_DECODER_DPB_SIZE L"DPBSize" // amf_int64; minimum number of surfaces for reordering - -#define AMF_VIDEO_DECODER_DEFAULT_SURFACES_FOR_TRANSIT 5 // if AMF_VIDEO_DECODER_SURFACE_POOL_SIZE is 0 , AMF_VIDEO_DECODER_SURFACE_POOL_SIZE=AMF_VIDEO_DECODER_DEFAULT_SURFACES_FOR_TRANSIT+AMF_VIDEO_DECODER_DPB_SIZE - -// Decoder capabilities - exposed in AMFCaps interface -#define AMF_VIDEO_DECODER_CAP_NUM_OF_STREAMS L"NumOfStreams" // amf_int64; maximum number of decode streams supported - - -// metadata information: can be set on output surface - -// Properties could be set on surface based on HDR SEI or VUI header -#define AMF_VIDEO_DECODER_COLOR_TRANSFER_CHARACTERISTIC L"ColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 -#define AMF_VIDEO_DECODER_COLOR_PRIMARIES L"ColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 -#define AMF_VIDEO_DECODER_HDR_METADATA L"HdrMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -/////// AMF_VIDEO_DECODER_FULL_RANGE_COLOR deprecated, use AMF_VIDEO_DECODER_COLOR_RANGE -#define AMF_VIDEO_DECODER_FULL_RANGE_COLOR L"FullRangeColor" // bool; default = false; false = studio range, true = full range -/////// -#define AMF_VIDEO_DECODER_COLOR_RANGE L"ColorRange" // amf_int64(AMF_COLOR_RANGE_ENUM) default = AMF_COLOR_RANGE_UNDEFINED - -// can be set on output surface if YUV outout or on component to overwrite VUI -#define AMF_VIDEO_DECODER_COLOR_PROFILE L"ColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO - -// properties to be set on decoder if internal converter is used -#define AMF_VIDEO_DECODER_OUTPUT_TRANSFER_CHARACTERISTIC L"OutColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_DECODER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_DECODER_OUTPUT_HDR_METADATA L"OutHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -#define AMF_VIDEO_DECODER_LOW_LATENCY L"LowLatencyDecode" // amf_bool; default = false; true = low latency decode, false = regular decode - -#if defined(__ANDROID__) -#define AMF_VIDEO_DECODER_NATIVEWINDOW L"AndroidNativeWindow" // amf_int64; default = 0; pointer to native window -#endif //__ANDROID__ - - -#if defined(__APPLE__) -#define AMF_VIDEO_DECODER_NATIVEWINDOW L"AppleNativeWindow" // amf_int64; default = 0; pointer to native window -#endif //__APPLE__ - -#define AMF_VIDEO_DECODER_ENABLE_SMART_ACCESS_VIDEO L"EnableDecoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature -#define AMF_VIDEO_DECODER_SKIP_TRANSFER_SMART_ACCESS_VIDEO L"SkipTransferSmartAccessVideo" // amf_bool; default = false; true = keeps output on GPU where it ran - -#endif //#ifndef AMF_VideoDecoderUVD_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h deleted file mode 100644 index 0111f66c83cfae..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderAV1.h +++ /dev/null @@ -1,300 +0,0 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// VideoEncoderHW_AV1 interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_VideoEncoderAV1_h -#define AMF_VideoEncoderAV1_h -#pragma once - -#include "Component.h" -#include "ColorSpace.h" -#include "PreAnalysis.h" - -#define AMFVideoEncoder_AV1 L"AMFVideoEncoderHW_AV1" - -enum AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_NONE = 0, // No encoding latency requirement. Encoder will balance encoding time and power consumption. - AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_POWER_SAVING_REAL_TIME = 1, // Try the best to finish encoding a frame within 1/framerate sec. This mode may cause more power consumption - AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_REAL_TIME = 2, // Try the best to finish encoding a frame within 1/(2 x framerate) sec. This mode will cause more power consumption than POWER_SAVING_REAL_TIME - AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_LOWEST_LATENCY = 3 // Encoding as fast as possible. This mode causes highest power consumption. -}; - -enum AMF_VIDEO_ENCODER_AV1_USAGE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_USAGE_TRANSCODING = 0, - AMF_VIDEO_ENCODER_AV1_USAGE_LOW_LATENCY = 1 -}; - -enum AMF_VIDEO_ENCODER_AV1_PROFILE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_PROFILE_MAIN = 1 -}; - -enum AMF_VIDEO_ENCODER_AV1_LEVEL_ENUM -{ - AMF_VIDEO_ENCODER_AV1_LEVEL_2_0 = 0, - AMF_VIDEO_ENCODER_AV1_LEVEL_2_1 = 1, - AMF_VIDEO_ENCODER_AV1_LEVEL_2_2 = 2, - AMF_VIDEO_ENCODER_AV1_LEVEL_2_3 = 3, - AMF_VIDEO_ENCODER_AV1_LEVEL_3_0 = 4, - AMF_VIDEO_ENCODER_AV1_LEVEL_3_1 = 5, - AMF_VIDEO_ENCODER_AV1_LEVEL_3_2 = 6, - AMF_VIDEO_ENCODER_AV1_LEVEL_3_3 = 7, - AMF_VIDEO_ENCODER_AV1_LEVEL_4_0 = 8, - AMF_VIDEO_ENCODER_AV1_LEVEL_4_1 = 9, - AMF_VIDEO_ENCODER_AV1_LEVEL_4_2 = 10, - AMF_VIDEO_ENCODER_AV1_LEVEL_4_3 = 11, - AMF_VIDEO_ENCODER_AV1_LEVEL_5_0 = 12, - AMF_VIDEO_ENCODER_AV1_LEVEL_5_1 = 13, - AMF_VIDEO_ENCODER_AV1_LEVEL_5_2 = 14, - AMF_VIDEO_ENCODER_AV1_LEVEL_5_3 = 15, - AMF_VIDEO_ENCODER_AV1_LEVEL_6_0 = 16, - AMF_VIDEO_ENCODER_AV1_LEVEL_6_1 = 17, - AMF_VIDEO_ENCODER_AV1_LEVEL_6_2 = 18, - AMF_VIDEO_ENCODER_AV1_LEVEL_6_3 = 19, - AMF_VIDEO_ENCODER_AV1_LEVEL_7_0 = 20, - AMF_VIDEO_ENCODER_AV1_LEVEL_7_1 = 21, - AMF_VIDEO_ENCODER_AV1_LEVEL_7_2 = 22, - AMF_VIDEO_ENCODER_AV1_LEVEL_7_3 = 23 -}; - -enum AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_ENUM -{ - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_UNKNOWN = -1, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_CONSTANT_QP = 0, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR = 1, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR = 2, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_CBR = 3, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_QUALITY_VBR = 4, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_HIGH_QUALITY_VBR = 5, - AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR = 6 -}; - -enum AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_64X16_ONLY = 1, - AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_64X16_1080P_CODED_1082 = 2, - AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_NO_RESTRICTIONS = 3 -}; - -enum AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_NONE = 0, - AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_KEY = 1, - AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_INTRA_ONLY = 2, - AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_SWITCH = 3, - AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_SHOW_EXISTING = 4 -}; - -enum AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_KEY = 0, - AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_INTRA_ONLY = 1, - AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_INTER = 2, - AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_SWITCH = 3, - AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_SHOW_EXISTING = 4 -}; - -enum AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM -{ - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_HIGH_QUALITY = 0, - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY = 30, - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_BALANCED = 70, - AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_SPEED = 100 -}; - -enum AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_NONE = 0, - AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_GOP_ALIGNED = 1, - AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_KEY_FRAME_ALIGNED = 2 -}; - -enum AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE_NONE = 0, - AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE_FIXED_INTERVAL = 1 -}; - -enum AMF_VIDEO_ENCODER_AV1_CDEF_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_CDEF_DISABLE = 0, - AMF_VIDEO_ENCODER_AV1_CDEF_ENABLE_DEFAULT = 1 -}; - -enum AMF_VIDEO_ENCODER_AV1_CDF_FRAME_END_UPDATE_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_CDF_FRAME_END_UPDATE_MODE_DISABLE = 0, - AMF_VIDEO_ENCODER_AV1_CDF_FRAME_END_UPDATE_MODE_ENABLE_DEFAULT = 1 -}; - -enum AMF_VIDEO_ENCODER_AV1_AQ_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_AQ_MODE_NONE = 0, - AMF_VIDEO_ENCODER_AV1_AQ_MODE_CAQ = 1 // Content adaptive quantization mode -}; - -enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__DISABLED = 0, - AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__GOP_ALIGNED = 1, - AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__CONTINUOUS = 2 -}; -enum AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM -{ - AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED = 0, - AMF_VIDEO_ENCODER_AV1_LTR_MODE_KEEP_UNUSED = 1 -}; - - -// *** Static properties - can be set only before Init() *** - -// Encoder Engine Settings -#define AMF_VIDEO_ENCODER_AV1_ENCODER_INSTANCE_INDEX L"Av1EncoderInstanceIndex" // amf_int64; default = 0; selected HW instance idx. The number of instances is queried by using AMF_VIDEO_ENCODER_AV1_CAP_NUM_OF_HW_INSTANCES -#define AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE L"Av1EncodingLatencyMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM); default = depends on USAGE; The encoding latency mode. -#define AMF_VIDEO_ENCODER_AV1_QUERY_TIMEOUT L"Av1QueryTimeout" // amf_int64; default = 0 (no wait); timeout for QueryOutput call in ms. - -// Usage Settings -#define AMF_VIDEO_ENCODER_AV1_USAGE L"Av1Usage" // amf_int64(AMF_VIDEO_ENCODER_AV1_USAGE_ENUM); default = N/A; Encoder usage. fully configures parameter set. - -// Session Configuration -#define AMF_VIDEO_ENCODER_AV1_FRAMESIZE L"Av1FrameSize" // AMFSize; default = 0,0; Frame size -#define AMF_VIDEO_ENCODER_AV1_COLOR_BIT_DEPTH L"Av1ColorBitDepth" // amf_int64(AMF_COLOR_BIT_DEPTH_ENUM); default = AMF_COLOR_BIT_DEPTH_8 -#define AMF_VIDEO_ENCODER_AV1_PROFILE L"Av1Profile" // amf_int64(AMF_VIDEO_ENCODER_AV1_PROFILE_ENUM) ; default = depends on USAGE; the codec profile of the coded bitstream -#define AMF_VIDEO_ENCODER_AV1_LEVEL L"Av1Level" // amf_int64 (AMF_VIDEO_ENCODER_AV1_LEVEL_ENUM); default = depends on USAGE; the codec level of the coded bitstream -#define AMF_VIDEO_ENCODER_AV1_TILES_PER_FRAME L"Av1NumTilesPerFrame" // amf_int64; default = 1; Number of tiles Per Frame. This is treated as suggestion. The actual number of tiles might be different due to compliance or encoder limitation. -#define AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET L"Av1QualityPreset" // amf_int64(AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset - -// Codec Configuration -#define AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS L"Av1ScreenContentTools" // bool; default = depends on USAGE; If true, allow enabling screen content tools by AMF_VIDEO_ENCODER_AV1_PALETTE_MODE and AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV; if false, all screen content tools are disabled. -#define AMF_VIDEO_ENCODER_AV1_ORDER_HINT L"Av1OrderHint" // bool; default = depends on USAGE; If true, code order hint; if false, don't code order hint -#define AMF_VIDEO_ENCODER_AV1_FRAME_ID L"Av1FrameId" // bool; default = depends on USAGE; If true, code frame id; if false, don't code frame id -#define AMF_VIDEO_ENCODER_AV1_TILE_GROUP_OBU L"Av1TileGroupObu" // bool; default = depends on USAGE; If true, code FrameHeaderObu + TileGroupObu and each TileGroupObu contains one tile; if false, code FrameObu. -#define AMF_VIDEO_ENCODER_AV1_CDEF_MODE L"Av1CdefMode" // amd_int64(AMF_VIDEO_ENCODER_AV1_CDEF_MODE_ENUM); default = depends on USAGE; Cdef mode -#define AMF_VIDEO_ENCODER_AV1_ERROR_RESILIENT_MODE L"Av1ErrorResilientMode" // bool; default = depends on USAGE; If true, enable error resilient mode; if false, disable error resilient mode - -// Rate Control and Quality Enhancement -#define AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD L"Av1RateControlMethod" // amf_int64(AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_ENUM); default = depends on USAGE; Rate Control Method -#define AMF_VIDEO_ENCODER_AV1_QVBR_QUALITY_LEVEL L"Av1QvbrQualityLevel" // amf_int64; default = 23; QVBR quality level; range = 1-51 -#define AMF_VIDEO_ENCODER_AV1_INITIAL_VBV_BUFFER_FULLNESS L"Av1InitialVBVBufferFullness" // amf_int64; default = depends on USAGE; Initial VBV Buffer Fullness 0=0% 64=100% - -// Alignment Mode Configuration -#define AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE L"Av1AlignmentMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM); default = AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_64X16_ONLY; Alignment Mode. - -#define AMF_VIDEO_ENCODER_AV1_PRE_ANALYSIS_ENABLE L"Av1EnablePreAnalysis" // bool; default = depends on USAGE; If true, enables the pre-analysis module. Refer to AMF Video PreAnalysis API reference for more details. If false, disable the pre-analysis module. -#define AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_PREENCODE L"Av1RateControlPreEncode" // bool; default = depends on USAGE; If true, enables pre-encode assist in rate control; if false, disables pre-encode assist in rate control. -#define AMF_VIDEO_ENCODER_AV1_HIGH_MOTION_QUALITY_BOOST L"Av1HighMotionQualityBoost" // bool; default = depends on USAGE; If true, enable high motion quality boost mode; if false, disable high motion quality boost mode. -#define AMF_VIDEO_ENCODER_AV1_AQ_MODE L"Av1AQMode" // amd_int64(AMF_VIDEO_ENCODER_AV1_AQ_MODE_ENUM); default = depends on USAGE; AQ mode - -// Picture Management Configuration -#define AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS L"Av1MaxNumOfTemporalLayers" // amf_int64; default = depends on USAGE; Max number of temporal layers might be enabled. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS -#define AMF_VIDEO_ENCODER_AV1_MAX_LTR_FRAMES L"Av1MaxNumLTRFrames" // amf_int64; default = depends on USAGE; Max number of LTR frames. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES -#define AMF_VIDEO_ENCODER_AV1_LTR_MODE L"Av1LTRMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_AV1_FORCE_LTR_REFERENCE_BITFIELD) -#define AMF_VIDEO_ENCODER_AV1_MAX_NUM_REFRAMES L"Av1MaxNumRefFrames" // amf_int64; default = 1; Maximum number of reference frames - -// color conversion -#define AMF_VIDEO_ENCODER_AV1_INPUT_HDR_METADATA L"Av1InHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -// Miscellaneous -#define AMF_VIDEO_ENCODER_AV1_EXTRA_DATA L"Av1ExtraData" // AMFInterface* - > AMFBuffer*; buffer to retrieve coded sequence header - - -// *** Dynamic properties - can be set anytime *** - -// Codec Configuration -#define AMF_VIDEO_ENCODER_AV1_PALETTE_MODE L"Av1PaletteMode" // bool; default = depends on USAGE; If true, enable palette mode; if false, disable palette mode. Valid only when AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS is true. -#define AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV L"Av1ForceIntegerMv" // bool; default = depends on USAGE; If true, enable force integer MV; if false, disable force integer MV. Valid only when AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS is true. -#define AMF_VIDEO_ENCODER_AV1_CDF_UPDATE L"Av1CdfUpdate" // bool; default = depends on USAGE; If true, enable CDF update; if false, disable CDF update. -#define AMF_VIDEO_ENCODER_AV1_CDF_FRAME_END_UPDATE_MODE L"Av1CdfFrameEndUpdateMode" // amd_int64(AMF_VIDEO_ENCODER_AV1_CDF_FRAME_END_UPDATE_MODE_ENUM); default = depends on USAGE; CDF frame end update mode - - -// Rate Control and Quality Enhancement -#define AMF_VIDEO_ENCODER_AV1_VBV_BUFFER_SIZE L"Av1VBVBufferSize" // amf_int64; default = depends on USAGE; VBV Buffer Size in bits -#define AMF_VIDEO_ENCODER_AV1_FRAMERATE L"Av1FrameRate" // AMFRate; default = depends on usage; Frame Rate -#define AMF_VIDEO_ENCODER_AV1_ENFORCE_HRD L"Av1EnforceHRD" // bool; default = depends on USAGE; If true, enforce HRD; if false, HRD is not enforced. -#define AMF_VIDEO_ENCODER_AV1_FILLER_DATA L"Av1FillerData" // bool; default = depends on USAGE; If true, code filler data when needed; if false, don't code filler data. -#define AMF_VIDEO_ENCODER_AV1_TARGET_BITRATE L"Av1TargetBitrate" // amf_int64; default = depends on USAGE; Target bit rate in bits -#define AMF_VIDEO_ENCODER_AV1_PEAK_BITRATE L"Av1PeakBitrate" // amf_int64; default = depends on USAGE; Peak bit rate in bits - -#define AMF_VIDEO_ENCODER_AV1_MAX_COMPRESSED_FRAME_SIZE L"Av1MaxCompressedFrameSize" // amf_int64; default = 0; Max compressed frame Size in bits. 0 - no limit -#define AMF_VIDEO_ENCODER_AV1_MIN_Q_INDEX_INTRA L"Av1MinQIndex_Intra" // amf_int64; default = depends on USAGE; Min QIndex for intra frames; range = 0-255 -#define AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTRA L"Av1MaxQIndex_Intra" // amf_int64; default = depends on USAGE; Max QIndex for intra frames; range = 0-255 -#define AMF_VIDEO_ENCODER_AV1_MIN_Q_INDEX_INTER L"Av1MinQIndex_Inter" // amf_int64; default = depends on USAGE; Min QIndex for inter frames; range = 0-255 -#define AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTER L"Av1MaxQIndex_Inter" // amf_int64; default = depends on USAGE; Max QIndex for inter frames; range = 0-255 - -#define AMF_VIDEO_ENCODER_AV1_Q_INDEX_INTRA L"Av1QIndex_Intra" // amf_int64; default = depends on USAGE; intra-frame QIndex; range = 0-255 -#define AMF_VIDEO_ENCODER_AV1_Q_INDEX_INTER L"Av1QIndex_Inter" // amf_int64; default = depends on USAGE; inter-frame QIndex; range = 0-255 - -#define AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_SKIP_FRAME L"Av1RateControlSkipFrameEnable" // bool; default = depends on USAGE; If true, rate control may code skip frame when needed; if false, rate control will not code skip frame. - - -// Picture Management Configuration -#define AMF_VIDEO_ENCODER_AV1_GOP_SIZE L"Av1GOPSize" // amf_int64; default = depends on USAGE; GOP Size (distance between automatically inserted key frames). If 0, key frame will be inserted at first frame only. Note that GOP may be interrupted by AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE. -#define AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE L"Av1HeaderInsertionMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_HEADER_INSERTION_MODE_ENUM); default = depends on USAGE; sequence header insertion mode -#define AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE L"Av1SwitchFrameInsertionMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE_ENUM); default = depends on USAGE; switch frame insertin mode -#define AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INTERVAL L"Av1SwitchFrameInterval" // amf_int64; default = depends on USAGE; the interval between two inserted switch frames. Valid only when AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE is AMF_VIDEO_ENCODER_AV1_SWITCH_FRAME_INSERTION_MODE_FIXED_INTERVAL. -#define AMF_VIDEO_ENCODER_AV1_NUM_TEMPORAL_LAYERS L"Av1NumTemporalLayers" // amf_int64; default = depends on USAGE; Number of temporal layers. Can be changed at any time but the change is only applied when encoding next base layer frame. - -#define AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE L"Av1IntraRefreshMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM); default AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__DISABLED -#define AMF_VIDEO_ENCODER_AV1_INTRAREFRESH_STRIPES L"Av1IntraRefreshNumOfStripes" // amf_int64; default = N/A; Valid only when intra refresh is enabled. - -// color conversion -#define AMF_VIDEO_ENCODER_AV1_INPUT_COLOR_PROFILE L"Av1InputColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_AV1_INPUT_TRANSFER_CHARACTERISTIC L"Av1InputColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 section 7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_AV1_INPUT_COLOR_PRIMARIES L"Av1InputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 section 7.1 See ColorSpace.h for enum - -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PROFILE L"Av1OutputColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_TRANSFER_CHARACTERISTIC L"Av1OutputColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 ?7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_COLOR_PRIMARIES L"Av1OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 section 7.1 See ColorSpace.h for enum - - -// Frame encode parameters -#define AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE L"Av1ForceFrameType" // amf_int64(AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_ENUM); default = AMF_VIDEO_ENCODER_AV1_FORCE_FRAME_TYPE_NONE; generate particular frame type -#define AMF_VIDEO_ENCODER_AV1_FORCE_INSERT_SEQUENCE_HEADER L"Av1ForceInsertSequenceHeader" // bool; default = false; If true, force insert sequence header with current frame; -#define AMF_VIDEO_ENCODER_AV1_MARK_CURRENT_WITH_LTR_INDEX L"Av1MarkCurrentWithLTRIndex" // amf_int64; default = N/A; Mark current frame with LTR index -#define AMF_VIDEO_ENCODER_AV1_FORCE_LTR_REFERENCE_BITFIELD L"Av1ForceLTRReferenceBitfield" // amf_int64; default = 0; force LTR bit-field -#define AMF_VIDEO_ENCODER_AV1_ROI_DATA L"Av1ROIData" // 2D AMFSurface, surface format: AMF_SURFACE_GRAY32 - -// Encode output parameters -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE L"Av1OutputFrameType" // amf_int64(AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_ENUM); default = N/A -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_MARKED_LTR_INDEX L"Av1MarkedLTRIndex" // amf_int64; default = N/A; Marked LTR index -#define AMF_VIDEO_ENCODER_AV1_OUTPUT_REFERENCED_LTR_INDEX_BITFIELD L"Av1ReferencedLTRIndexBitfield" // amf_int64; default = N/A; referenced LTR bit-field - -// AV1 Encoder capabilities - exposed in AMFCaps interface -#define AMF_VIDEO_ENCODER_AV1_CAP_NUM_OF_HW_INSTANCES L"Av1CapNumOfHwInstances" // amf_int64; default = N/A; number of HW encoder instances -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_THROUGHPUT L"Av1CapMaxThroughput" // amf_int64; default = N/A; MAX throughput for AV1 encoder in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_AV1_CAP_REQUESTED_THROUGHPUT L"Av1CapRequestedThroughput" // amf_int64; default = N/A; Currently total requested throughput for AV1 encode in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_AV1_CAP_COLOR_CONVERSION L"Av1CapColorConversion" // amf_int64(AMF_ACCELERATION_TYPE); default = N/A; type of supported color conversion. default AMF_ACCEL_GPU -#define AMF_VIDEO_ENCODER_AV1_CAP_PRE_ANALYSIS L"Av1PreAnalysis" // amf_bool - pre analysis module is available for AV1 UVE encoder, n/a for the other encoders -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_BITRATE L"Av1MaxBitrate" // amf_int64; default = N/A; Maximum bit rate in bits -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_PROFILE L"Av1MaxProfile" // amf_int64(AMF_VIDEO_ENCODER_AV1_PROFILE_ENUM); default = N/A; max value of code profile -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_LEVEL L"Av1MaxLevel" // amf_int64(AMF_VIDEO_ENCODER_AV1_LEVEL_ENUM); default = N/A; max value of codec level -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS L"Av1CapMaxNumTemporalLayers" // amf_int64; default = N/A; The cap of maximum number of temporal layers -#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES L"Av1CapMaxNumLTRFrames" // amf_int64; default = N/A; The cap of maximum number of LTR frames. This value is calculated based on current value of AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS. - -#define AMF_VIDEO_ENCODER_AV1_ENABLE_SMART_ACCESS_VIDEO L"Av1EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature - -#endif //#ifndef AMF_VideoEncoderAV1_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h deleted file mode 100644 index 848c85aa857b1b..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderHEVC.h +++ /dev/null @@ -1,307 +0,0 @@ -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// VideoEncoderHW_HEVC interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_VideoEncoderHEVC_h -#define AMF_VideoEncoderHEVC_h -#pragma once - -#include "Component.h" -#include "ColorSpace.h" -#include "PreAnalysis.h" - -#define AMFVideoEncoder_HEVC L"AMFVideoEncoderHW_HEVC" - -enum AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCONDING = 0, // kept for backwards compatability - AMF_VIDEO_ENCODER_HEVC_USAGE_TRANSCODING = 0, // fixed typo - AMF_VIDEO_ENCODER_HEVC_USAGE_ULTRA_LOW_LATENCY, - AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY, - AMF_VIDEO_ENCODER_HEVC_USAGE_WEBCAM, - AMF_VIDEO_ENCODER_HEVC_USAGE_HIGH_QUALITY, - AMF_VIDEO_ENCODER_HEVC_USAGE_LOW_LATENCY_HIGH_QUALITY -}; - -enum AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN = 1, - AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN_10 = 2 -}; - -enum AMF_VIDEO_ENCODER_HEVC_TIER_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_TIER_MAIN = 0, - AMF_VIDEO_ENCODER_HEVC_TIER_HIGH = 1 -}; - -enum AMF_VIDEO_ENCODER_LEVEL_ENUM -{ - AMF_LEVEL_1 = 30, - AMF_LEVEL_2 = 60, - AMF_LEVEL_2_1 = 63, - AMF_LEVEL_3 = 90, - AMF_LEVEL_3_1 = 93, - AMF_LEVEL_4 = 120, - AMF_LEVEL_4_1 = 123, - AMF_LEVEL_5 = 150, - AMF_LEVEL_5_1 = 153, - AMF_LEVEL_5_2 = 156, - AMF_LEVEL_6 = 180, - AMF_LEVEL_6_1 = 183, - AMF_LEVEL_6_2 = 186 -}; - -enum AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_UNKNOWN = -1, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CONSTANT_QP = 0, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_CBR, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_QUALITY_VBR, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_VBR, - AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR -}; - -enum AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE = 0, - AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_SKIP, - AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_IDR, - AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_I, - AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_P -}; - -enum AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_IDR, - AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I, - AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_P -}; - -enum AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_QUALITY = 0, - AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_BALANCED = 5, - AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_SPEED = 10 -}; - -enum AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_NONE = 0, - AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_GOP_ALIGNED, - AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_IDR_ALIGNED -}; - -enum AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE_OFF = 0, - AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE_ON -}; - -enum AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE -{ - AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE_STUDIO = 0, - AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE_FULL = 1 -}; - -enum AMF_VIDEO_ENCODER_HEVC_LTR_MODE_ENUM -{ - AMF_VIDEO_ENCODER_HEVC_LTR_MODE_RESET_UNUSED = 0, - AMF_VIDEO_ENCODER_HEVC_LTR_MODE_KEEP_UNUSED -}; - -// Static properties - can be set before Init() -#define AMF_VIDEO_ENCODER_HEVC_INSTANCE_INDEX L"HevcEncoderInstance" // amf_int64; selected instance idx -#define AMF_VIDEO_ENCODER_HEVC_FRAMESIZE L"HevcFrameSize" // AMFSize; default = 0,0; Frame size - -#define AMF_VIDEO_ENCODER_HEVC_USAGE L"HevcUsage" // amf_int64(AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM); default = N/A; Encoder usage type. fully configures parameter set. -#define AMF_VIDEO_ENCODER_HEVC_PROFILE L"HevcProfile" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM) ; default = AMF_VIDEO_ENCODER_HEVC_PROFILE_MAIN; -#define AMF_VIDEO_ENCODER_HEVC_TIER L"HevcTier" // amf_int64(AMF_VIDEO_ENCODER_HEVC_TIER_ENUM) ; default = AMF_VIDEO_ENCODER_HEVC_TIER_MAIN; -#define AMF_VIDEO_ENCODER_HEVC_PROFILE_LEVEL L"HevcProfileLevel" // amf_int64 (AMF_VIDEO_ENCODER_LEVEL_ENUM, default depends on HW capabilities); -#define AMF_VIDEO_ENCODER_HEVC_MAX_LTR_FRAMES L"HevcMaxOfLTRFrames" // amf_int64; default = 0; Max number of LTR frames -#define AMF_VIDEO_ENCODER_HEVC_LTR_MODE L"HevcLTRMode" // amf_int64(AMF_VIDEO_ENCODER_HEVC_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_HEVC_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_HEVC_FORCE_LTR_REFERENCE_BITFIELD) -#define AMF_VIDEO_ENCODER_HEVC_MAX_NUM_REFRAMES L"HevcMaxNumRefFrames" // amf_int64; default = 1; Maximum number of reference frames -#define AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET L"HevcQualityPreset" // amf_int64(AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset -#define AMF_VIDEO_ENCODER_HEVC_EXTRADATA L"HevcExtraData" // AMFInterface* - > AMFBuffer*; SPS/PPS buffer - read-only -#define AMF_VIDEO_ENCODER_HEVC_ASPECT_RATIO L"HevcAspectRatio" // AMFRatio; default = 1, 1 -#define AMF_VIDEO_ENCODER_HEVC_LOWLATENCY_MODE L"LowLatencyInternal" // bool; default = false, enables low latency mode -#define AMF_VIDEO_ENCODER_HEVC_PRE_ANALYSIS_ENABLE L"HevcEnablePreAnalysis" // bool; default = false; enables the pre-analysis module. Currently only works in AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR mode. Refer to AMF Video PreAnalysis API reference for more details. -#define AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE L"HevcNominalRange" // amf_int64(AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE); default = amf_int64(AMF_VIDEO_ENCODER_HEVC_NOMINAL_RANGE_STUDIO); property is bool but amf_int64 also works for backward compatibility. -#define AMF_VIDEO_ENCODER_HEVC_MAX_NUM_TEMPORAL_LAYERS L"HevcMaxNumOfTemporalLayers" // amf_int64; default = 1; Max number of temporal layers. - -// Picture control properties -#define AMF_VIDEO_ENCODER_HEVC_NUM_GOPS_PER_IDR L"HevcGOPSPerIDR" // amf_int64; default = 1; The frequency to insert IDR as start of a GOP. 0 means no IDR will be inserted. -#define AMF_VIDEO_ENCODER_HEVC_GOP_SIZE L"HevcGOPSize" // amf_int64; default = 60; GOP Size, in frames -#define AMF_VIDEO_ENCODER_HEVC_DE_BLOCKING_FILTER_DISABLE L"HevcDeBlockingFilter" // bool; default = depends on USAGE; De-blocking Filter -#define AMF_VIDEO_ENCODER_HEVC_SLICES_PER_FRAME L"HevcSlicesPerFrame" // amf_int64; default = 1; Number of slices Per Frame -#define AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE L"HevcHeaderInsertionMode" // amf_int64(AMF_VIDEO_ENCODER_HEVC_HEADER_INSERTION_MODE_ENUM); default = NONE -#define AMF_VIDEO_ENCODER_HEVC_INTRA_REFRESH_NUM_CTBS_PER_SLOT L"HevcIntraRefreshCTBsNumberPerSlot" // amf_int64; default = depends on USAGE; Intra Refresh CTBs Number Per Slot in 64x64 CTB - -// Rate control properties -#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD L"HevcRateControlMethod" // amf_int64(AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM); default = depends on USAGE; Rate Control Method -#define AMF_VIDEO_ENCODER_HEVC_QVBR_QUALITY_LEVEL L"HevcQvbrQualityLevel" // amf_int64; default = 23; QVBR quality level; range = 1-51 -#define AMF_VIDEO_ENCODER_HEVC_VBV_BUFFER_SIZE L"HevcVBVBufferSize" // amf_int64; default = depends on USAGE; VBV Buffer Size in bits -#define AMF_VIDEO_ENCODER_HEVC_INITIAL_VBV_BUFFER_FULLNESS L"HevcInitialVBVBufferFullness" // amf_int64; default = 64; Initial VBV Buffer Fullness 0=0% 64=100% -#define AMF_VIDEO_ENCODER_HEVC_ENABLE_VBAQ L"HevcEnableVBAQ" // // bool; default = depends on USAGE; Enable auto VBAQ -#define AMF_VIDEO_ENCODER_HEVC_HIGH_MOTION_QUALITY_BOOST_ENABLE L"HevcHighMotionQualityBoostEnable"// bool; default = depends on USAGE; Enable High motion quality boost mode - -#define AMF_VIDEO_ENCODER_HEVC_PREENCODE_ENABLE L"HevcRateControlPreAnalysisEnable" // bool; default = depends on USAGE; enables pre-encode assisted rate control -#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_PREANALYSIS_ENABLE L"HevcRateControlPreAnalysisEnable" // bool; default = depends on USAGE; enables pre-encode assisted rate control. Deprecated, please use AMF_VIDEO_ENCODER_PREENCODE_ENABLE instead. -#ifdef _MSC_VER - #ifndef __clang__ - #pragma deprecated("AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_PREANALYSIS_ENABLE") - #endif -#endif - -// Motion estimation -#define AMF_VIDEO_ENCODER_HEVC_MOTION_HALF_PIXEL L"HevcHalfPixel" // bool; default= true; Half Pixel -#define AMF_VIDEO_ENCODER_HEVC_MOTION_QUARTERPIXEL L"HevcQuarterPixel" // bool; default= true; Quarter Pixel - -// color conversion -#define AMF_VIDEO_ENCODER_HEVC_COLOR_BIT_DEPTH L"HevcColorBitDepth" // amf_int64(AMF_COLOR_BIT_DEPTH_ENUM); default = AMF_COLOR_BIT_DEPTH_8 - -#define AMF_VIDEO_ENCODER_HEVC_INPUT_COLOR_PROFILE L"HevcInColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_HEVC_INPUT_TRANSFER_CHARACTERISTIC L"HevcInColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 section 7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_HEVC_INPUT_COLOR_PRIMARIES L"HevcInColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 section 7.1 See ColorSpace.h for enum - -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PROFILE L"HevcOutColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_TRANSFER_CHARACTERISTIC L"HevcOutColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 ?7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_COLOR_PRIMARIES L"HevcOutColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 section 7.1 See ColorSpace.h for enum - -// Dynamic properties - can be set at any time - -// Rate control properties -#define AMF_VIDEO_ENCODER_HEVC_FRAMERATE L"HevcFrameRate" // AMFRate; default = depends on usage; Frame Rate - -#define AMF_VIDEO_ENCODER_HEVC_ENFORCE_HRD L"HevcEnforceHRD" // bool; default = depends on USAGE; Enforce HRD -#define AMF_VIDEO_ENCODER_HEVC_FILLER_DATA_ENABLE L"HevcFillerDataEnable" // bool; default = depends on USAGE; Enforce HRD -#define AMF_VIDEO_ENCODER_HEVC_TARGET_BITRATE L"HevcTargetBitrate" // amf_int64; default = depends on USAGE; Target bit rate in bits -#define AMF_VIDEO_ENCODER_HEVC_PEAK_BITRATE L"HevcPeakBitrate" // amf_int64; default = depends on USAGE; Peak bit rate in bits - -#define AMF_VIDEO_ENCODER_HEVC_MAX_AU_SIZE L"HevcMaxAUSize" // amf_int64; default = 60; Max AU Size in bits - -#define AMF_VIDEO_ENCODER_HEVC_MIN_QP_I L"HevcMinQP_I" // amf_int64; default = depends on USAGE; Min QP; range = -#define AMF_VIDEO_ENCODER_HEVC_MAX_QP_I L"HevcMaxQP_I" // amf_int64; default = depends on USAGE; Max QP; range = -#define AMF_VIDEO_ENCODER_HEVC_MIN_QP_P L"HevcMinQP_P" // amf_int64; default = depends on USAGE; Min QP; range = -#define AMF_VIDEO_ENCODER_HEVC_MAX_QP_P L"HevcMaxQP_P" // amf_int64; default = depends on USAGE; Max QP; range = - -#define AMF_VIDEO_ENCODER_HEVC_QP_I L"HevcQP_I" // amf_int64; default = 26; P-frame QP; range = 0-51 -#define AMF_VIDEO_ENCODER_HEVC_QP_P L"HevcQP_P" // amf_int64; default = 26; P-frame QP; range = 0-51 - -#define AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_SKIP_FRAME_ENABLE L"HevcRateControlSkipFrameEnable" // bool; default = depends on USAGE; Rate Control Based Frame Skip - -// color conversion -#define AMF_VIDEO_ENCODER_HEVC_INPUT_HDR_METADATA L"HevcInHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL -//#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_HDR_METADATA L"HevcOutHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -// SVC -#define AMF_VIDEO_ENCODER_HEVC_NUM_TEMPORAL_LAYERS L"HevcNumOfTemporalLayers" // amf_int64; default = 1; Number of temporal layers. Can be changed at any time but the change is only applied when encoding next base layer frame. - -// DPB management -#define AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE L"HevcPicTransferMode" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE_ENUM); default = AMF_VIDEO_ENCODER_HEVC_PICTURE_TRANSFER_MODE_OFF - whether to exchange reference/reconstructed pic between encoder and application - -// misc -#define AMF_VIDEO_ENCODER_HEVC_QUERY_TIMEOUT L"HevcQueryTimeout" // amf_int64; default = 0 (no wait); timeout for QueryOutput call in ms. - -// Per-submittion properties - can be set on input surface interface -#define AMF_VIDEO_ENCODER_HEVC_END_OF_SEQUENCE L"HevcEndOfSequence" // bool; default = false; generate end of sequence -#define AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE L"HevcForcePictureType" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_ENUM); default = AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE; generate particular picture type -#define AMF_VIDEO_ENCODER_HEVC_INSERT_AUD L"HevcInsertAUD" // bool; default = false; insert AUD -#define AMF_VIDEO_ENCODER_HEVC_INSERT_HEADER L"HevcInsertHeader" // bool; default = false; insert header(SPS, PPS, VPS) - -#define AMF_VIDEO_ENCODER_HEVC_MARK_CURRENT_WITH_LTR_INDEX L"HevcMarkCurrentWithLTRIndex" // amf_int64; default = N/A; Mark current frame with LTR index -#define AMF_VIDEO_ENCODER_HEVC_FORCE_LTR_REFERENCE_BITFIELD L"HevcForceLTRReferenceBitfield"// amf_int64; default = 0; force LTR bit-field -#define AMF_VIDEO_ENCODER_HEVC_ROI_DATA L"HevcROIData" // 2D AMFSurface, surface format: AMF_SURFACE_GRAY32 -#define AMF_VIDEO_ENCODER_HEVC_REFERENCE_PICTURE L"HevcReferencePicture" // AMFInterface(AMFSurface); surface used for frame injection -#define AMF_VIDEO_ENCODER_HEVC_PSNR_FEEDBACK L"HevcPSNRFeedback" // amf_bool; default = false; Signal encoder to calculate PSNR score -#define AMF_VIDEO_ENCODER_HEVC_SSIM_FEEDBACK L"HevcSSIMFeedback" // amf_bool; default = false; Signal encoder to calculate SSIM score -#define AMF_VIDEO_ENCODER_HEVC_STATISTICS_FEEDBACK L"HevcStatisticsFeedback" // amf_bool; default = false; Signal encoder to collect and feedback encoder statistics -#define AMF_VIDEO_ENCODER_HEVC_BLOCK_QP_FEEDBACK L"HevcBlockQpFeedback" // amf_bool; default = false; Signal encoder to collect and feedback block level QP values - -// Properties set by encoder on output buffer interface -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE L"HevcOutputDataType" // amf_int64(AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM); default = N/A -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_MARKED_LTR_INDEX L"HevcMarkedLTRIndex" // amf_int64; default = -1; Marked LTR index -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_REFERENCED_LTR_INDEX_BITFIELD L"HevcReferencedLTRIndexBitfield"// amf_int64; default = 0; referenced LTR bit-field -#define AMF_VIDEO_ENCODER_HEVC_OUTPUT_TEMPORAL_LAYER L"HevcOutputTemporalLayer" // amf_int64; Temporal layer -#define AMF_VIDEO_ENCODER_HEVC_RECONSTRUCTED_PICTURE L"HevcReconstructedPicture" // AMFInterface(AMFSurface); returns reconstructed picture as an AMFSurface attached to the output buffer as property AMF_VIDEO_ENCODER_RECONSTRUCTED_PICTURE of AMFInterface type -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PSNR_Y L"PSNRY" // double; PSNR Y -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PSNR_U L"PSNRU" // double; PSNR U -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PSNR_V L"PSNRV" // double; PSNR V -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PSNR_ALL L"PSNRALL" // double; PSNR All -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SSIM_Y L"SSIMY" // double; SSIM Y -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SSIM_U L"SSIMU" // double; SSIM U -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SSIM_V L"SSIMV" // double; SSIM V -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SSIM_ALL L"SSIMALL" // double; SSIM ALL - - // Encoder statistics feedback -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_FRAME_QP L"HevcStatisticsFeedbackFrameQP" // amf_int64; Rate control base frame/initial QP -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_AVERAGE_QP L"HevcStatisticsFeedbackAvgQP" // amf_int64; Average QP of all encoded CTBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped CTBs. -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_MAX_QP L"HevcStatisticsFeedbackMaxQP" // amf_int64; Max QP among all encoded CTBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped CTBs. -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_MIN_QP L"HevcStatisticsFeedbackMinQP" // amf_int64; Min QP among all encoded CTBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped CTBs. -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PIX_NUM_INTRA L"HevcStatisticsFeedbackPixNumIntra" // amf_int64; Number of the intra encoded pixels -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PIX_NUM_INTER L"HevcStatisticsFeedbackPixNumInter" // amf_int64; Number of the inter encoded pixels -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_PIX_NUM_SKIP L"HevcStatisticsFeedbackPixNumSkip" // amf_int64; Number of the skip mode pixels -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_BITCOUNT_RESIDUAL L"HevcStatisticsFeedbackBitcountResidual" // amf_int64; The bit count that corresponds to residual data -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_BITCOUNT_MOTION L"HevcStatisticsFeedbackBitcountMotion" // amf_int64; The bit count that corresponds to motion vectors -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_BITCOUNT_INTER L"HevcStatisticsFeedbackBitcountInter" // amf_int64; The bit count that are assigned to inter CTBs -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_BITCOUNT_INTRA L"HevcStatisticsFeedbackBitcountIntra" // amf_int64; The bit count that are assigned to intra CTBs -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_BITCOUNT_ALL_MINUS_HEADER L"HevcStatisticsFeedbackBitcountAllMinusHeader" // amf_int64; The bit count of the bitstream excluding header -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_MV_X L"HevcStatisticsFeedbackMvX" // amf_int64; Accumulated absolute values of horizontal MV's -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_MV_Y L"HevcStatisticsFeedbackMvY" // amf_int64; Accumulated absolute values of vertical MV's -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_RD_COST_FINAL L"HevcStatisticsFeedbackRdCostFinal" // amf_int64; Frame level final RD cost for full encoding -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_RD_COST_INTRA L"HevcStatisticsFeedbackRdCostIntra" // amf_int64; Frame level intra RD cost for full encoding -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_RD_COST_INTER L"HevcStatisticsFeedbackRdCostInter" // amf_int64; Frame level inter RD cost for full encoding -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SAD_FINAL L"HevcStatisticsFeedbackSadFinal" // amf_int64; Frame level final SAD for full encoding -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SAD_INTRA L"HevcStatisticsFeedbackSadIntra" // amf_int64; Frame level intra SAD for full encoding -#define AMF_VIDEO_ENCODER_HEVC_STATISTIC_SAD_INTER L"HevcStatisticsFeedbackSadInter" // amf_int64; Frame level inter SAD for full encoding - - // Encoder block level feedback -#define AMF_VIDEO_ENCODER_HEVC_BLOCK_QP_MAP L"HevcBlockQpMap" // AMFInterface(AMFSurface); AMFSurface of format AMF_SURFACE_GRAY32 containing block level QP values - -// HEVC Encoder capabilities - exposed in AMFCaps interface -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_BITRATE L"HevcMaxBitrate" // amf_int64; Maximum bit rate in bits -#define AMF_VIDEO_ENCODER_HEVC_CAP_NUM_OF_STREAMS L"HevcNumOfStreams" // amf_int64; maximum number of encode streams supported -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_PROFILE L"HevcMaxProfile" // amf_int64(AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM) -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_TIER L"HevcMaxTier" // amf_int64(AMF_VIDEO_ENCODER_HEVC_TIER_ENUM) maximum profile tier -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_LEVEL L"HevcMaxLevel" // amf_int64 maximum profile level -#define AMF_VIDEO_ENCODER_HEVC_CAP_MIN_REFERENCE_FRAMES L"HevcMinReferenceFrames" // amf_int64 minimum number of reference frames -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_REFERENCE_FRAMES L"HevcMaxReferenceFrames" // amf_int64 maximum number of reference frames -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_TEMPORAL_LAYERS L"HevcMaxTemporalLayers" // amf_int64 maximum number of temporal layers -#define AMF_VIDEO_ENCODER_HEVC_CAP_NUM_OF_HW_INSTANCES L"HevcNumOfHwInstances" // amf_int64 number of HW encoder instances -#define AMF_VIDEO_ENCODER_HEVC_CAP_COLOR_CONVERSION L"HevcColorConversion" // amf_int64(AMF_ACCELERATION_TYPE) - type of supported color conversion. default AMF_ACCEL_GPU -#define AMF_VIDEO_ENCODER_HEVC_CAP_PRE_ANALYSIS L"HevcPreAnalysis" // amf_bool - pre analysis module is available for HEVC UVE encoder, n/a for the other encoders -#define AMF_VIDEO_ENCODER_HEVC_CAP_ROI L"HevcROIMap" // amf_bool - ROI map support is available for HEVC UVE encoder, n/a for the other encoders -#define AMF_VIDEO_ENCODER_HEVC_CAP_MAX_THROUGHPUT L"HevcMaxThroughput" // amf_int64 - MAX throughput for HEVC encoder in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_HEVC_CAP_REQUESTED_THROUGHPUT L"HevcRequestedThroughput" // amf_int64 - Currently total requested throughput for HEVC encode in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_CAPS_HEVC_QUERY_TIMEOUT_SUPPORT L"HevcQueryTimeoutSupport" // amf_bool - Timeout supported for QueryOutout call - -// properties set on AMFComponent to control component creation -#define AMF_VIDEO_ENCODER_HEVC_MEMORY_TYPE L"HevcEncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_UNKNOWN (auto) - -#define AMF_VIDEO_ENCODER_HEVC_ENABLE_SMART_ACCESS_VIDEO L"HevcEnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature - -#endif //#ifndef AMF_VideoEncoderHEVC_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h deleted file mode 100644 index ba0387e45a9c16..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoEncoderVCE.h +++ /dev/null @@ -1,354 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// AMFVideoEncoderHW_AVC interface declaration -//------------------------------------------------------------------------------------------------- - -#ifndef AMF_VideoEncoderVCE_h -#define AMF_VideoEncoderVCE_h -#pragma once - -#include "Component.h" -#include "ColorSpace.h" -#include "PreAnalysis.h" - -#define AMFVideoEncoderVCE_AVC L"AMFVideoEncoderVCE_AVC" -#define AMFVideoEncoderVCE_SVC L"AMFVideoEncoderVCE_SVC" - -enum AMF_VIDEO_ENCODER_USAGE_ENUM -{ - AMF_VIDEO_ENCODER_USAGE_TRANSCONDING = 0, // kept for backwards compatability - AMF_VIDEO_ENCODER_USAGE_TRANSCODING = 0, // fixed typo - AMF_VIDEO_ENCODER_USAGE_ULTRA_LOW_LATENCY, - AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY, - AMF_VIDEO_ENCODER_USAGE_WEBCAM, - AMF_VIDEO_ENCODER_USAGE_HIGH_QUALITY, - AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY_HIGH_QUALITY -}; - -enum AMF_VIDEO_ENCODER_PROFILE_ENUM -{ - AMF_VIDEO_ENCODER_PROFILE_UNKNOWN = 0, - AMF_VIDEO_ENCODER_PROFILE_BASELINE = 66, - AMF_VIDEO_ENCODER_PROFILE_MAIN = 77, - AMF_VIDEO_ENCODER_PROFILE_HIGH = 100, - AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_BASELINE = 256, - AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH = 257 -}; - -enum AMF_VIDEO_ENCODER_H264_LEVEL_ENUM -{ - AMF_H264_LEVEL__1 = 10, - AMF_H264_LEVEL__1_1 = 11, - AMF_H264_LEVEL__1_2 = 12, - AMF_H264_LEVEL__1_3 = 13, - AMF_H264_LEVEL__2 = 20, - AMF_H264_LEVEL__2_1 = 21, - AMF_H264_LEVEL__2_2 = 22, - AMF_H264_LEVEL__3 = 30, - AMF_H264_LEVEL__3_1 = 31, - AMF_H264_LEVEL__3_2 = 32, - AMF_H264_LEVEL__4 = 40, - AMF_H264_LEVEL__4_1 = 41, - AMF_H264_LEVEL__4_2 = 42, - AMF_H264_LEVEL__5 = 50, - AMF_H264_LEVEL__5_1 = 51, - AMF_H264_LEVEL__5_2 = 52, - AMF_H264_LEVEL__6 = 60, - AMF_H264_LEVEL__6_1 = 61, - AMF_H264_LEVEL__6_2 = 62 -}; - -enum AMF_VIDEO_ENCODER_SCANTYPE_ENUM -{ - AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE = 0, - AMF_VIDEO_ENCODER_SCANTYPE_INTERLACED -}; - -enum AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM -{ - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_UNKNOWN = -1, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP = 0, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CBR, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_LATENCY_CONSTRAINED_VBR, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_QUALITY_VBR, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_HIGH_QUALITY_VBR, - AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_HIGH_QUALITY_CBR -}; - -enum AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM -{ - AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED = 0, - AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED, - AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY -}; - -enum AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_ENUM -{ - AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_NONE = 0, - AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_FRAME, - AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_TOP_FIELD, - AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_BOTTOM_FIELD -}; - -enum AMF_VIDEO_ENCODER_PICTURE_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE = 0, - AMF_VIDEO_ENCODER_PICTURE_TYPE_SKIP, - AMF_VIDEO_ENCODER_PICTURE_TYPE_IDR, - AMF_VIDEO_ENCODER_PICTURE_TYPE_I, - AMF_VIDEO_ENCODER_PICTURE_TYPE_P, - AMF_VIDEO_ENCODER_PICTURE_TYPE_B -}; - -enum AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_ENUM -{ - AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_IDR, - AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_I, - AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_P, - AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_B -}; - -enum AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM -{ - AMF_VIDEO_ENCODER_PREENCODE_DISABLED = 0, - AMF_VIDEO_ENCODER_PREENCODE_ENABLED = 1, -}; - -enum AMF_VIDEO_ENCODER_CODING_ENUM -{ - AMF_VIDEO_ENCODER_UNDEFINED = 0, // BASELINE = CALV; MAIN, HIGH = CABAC - AMF_VIDEO_ENCODER_CABAC, - AMF_VIDEO_ENCODER_CALV, - -}; - -enum AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE_ENUM -{ - AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE_OFF = 0, - AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE_ON -}; - -enum AMF_VIDEO_ENCODER_LTR_MODE_ENUM -{ - AMF_VIDEO_ENCODER_LTR_MODE_RESET_UNUSED = 0, - AMF_VIDEO_ENCODER_LTR_MODE_KEEP_UNUSED -}; - - -// Static properties - can be set before Init() -#define AMF_VIDEO_ENCODER_INSTANCE_INDEX L"EncoderInstance" // amf_int64; selected HW instance idx -#define AMF_VIDEO_ENCODER_FRAMESIZE L"FrameSize" // AMFSize; default = 0,0; Frame size - -#define AMF_VIDEO_ENCODER_EXTRADATA L"ExtraData" // AMFInterface* - > AMFBuffer*; SPS/PPS buffer in Annex B format - read-only -#define AMF_VIDEO_ENCODER_USAGE L"Usage" // amf_int64(AMF_VIDEO_ENCODER_USAGE_ENUM); default = N/A; Encoder usage type. fully configures parameter set. -#define AMF_VIDEO_ENCODER_PROFILE L"Profile" // amf_int64(AMF_VIDEO_ENCODER_PROFILE_ENUM) ; default = AMF_VIDEO_ENCODER_PROFILE_MAIN; H264 profile -#define AMF_VIDEO_ENCODER_PROFILE_LEVEL L"ProfileLevel" // amf_int64(AMF_VIDEO_ENCODER_H264_LEVEL_ENUM); default = AMF_H264_LEVEL__4_2; H264 level -#define AMF_VIDEO_ENCODER_MAX_LTR_FRAMES L"MaxOfLTRFrames" // amf_int64; default = 0; Max number of LTR frames -#define AMF_VIDEO_ENCODER_LTR_MODE L"LTRMode" // amf_int64(AMF_VIDEO_ENCODER_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_FORCE_LTR_REFERENCE_BITFIELD) -#define AMF_VIDEO_ENCODER_SCANTYPE L"ScanType" // amf_int64(AMF_VIDEO_ENCODER_SCANTYPE_ENUM); default = AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE; indicates input stream type -#define AMF_VIDEO_ENCODER_MAX_NUM_REFRAMES L"MaxNumRefFrames" // amf_int64; Maximum number of reference frames -#define AMF_VIDEO_ENCODER_MAX_CONSECUTIVE_BPICTURES L"MaxConsecutiveBPictures" // amf_int64; Maximum number of consecutive B Pictures -#define AMF_VIDEO_ENCODER_ADAPTIVE_MINIGOP L"AdaptiveMiniGOP" // bool; default = false; Disable/Enable Adaptive MiniGOP -#define AMF_VIDEO_ENCODER_ASPECT_RATIO L"AspectRatio" // AMFRatio; default = 1, 1 -#define AMF_VIDEO_ENCODER_FULL_RANGE_COLOR L"FullRangeColor" // bool; default = false; inidicates that YUV input is (0,255) -#define AMF_VIDEO_ENCODER_LOWLATENCY_MODE L"LowLatencyInternal" // bool; default = false, enables low latency mode and POC mode 2 in the encoder -#define AMF_VIDEO_ENCODER_PRE_ANALYSIS_ENABLE L"EnablePreAnalysis" // bool; default = false; enables the pre-analysis module. Currently only works in AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_PEAK_CONSTRAINED_VBR mode. Refer to AMF Video PreAnalysis API reference for more details. -#define AMF_VIDEO_ENCODER_PREENCODE_ENABLE L"RateControlPreanalysisEnable" // amf_int64(AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM); default = AMF_VIDEO_ENCODER_PREENCODE_DISABLED; enables pre-encode assisted rate control -#define AMF_VIDEO_ENCODER_RATE_CONTROL_PREANALYSIS_ENABLE L"RateControlPreanalysisEnable" // amf_int64(AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM); default = AMF_VIDEO_ENCODER_PREENCODE_DISABLED; enables pre-encode assisted rate control. Deprecated, please use AMF_VIDEO_ENCODER_PREENCODE_ENABLE instead. -#define AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD L"RateControlMethod" // amf_int64(AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM); default = depends on USAGE; Rate Control Method -#define AMF_VIDEO_ENCODER_QVBR_QUALITY_LEVEL L"QvbrQualityLevel" // amf_int64; default = 23; QVBR quality level; range = 1-51 -#define AMF_VIDEO_ENCODER_MAX_NUM_TEMPORAL_LAYERS L"MaxNumOfTemporalLayers" // amf_int64; default = 1; Max number of temporal layers. -#if !defined(__GNUC__) && !defined(__clang__) - #pragma deprecated("AMF_VIDEO_ENCODER_RATE_CONTROL_PREANALYSIS_ENABLE") -#endif - - - // Quality preset property -#define AMF_VIDEO_ENCODER_QUALITY_PRESET L"QualityPreset" // amf_int64(AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset - - // color conversion -#define AMF_VIDEO_ENCODER_COLOR_BIT_DEPTH L"ColorBitDepth" // amf_int64(AMF_COLOR_BIT_DEPTH_ENUM); default = AMF_COLOR_BIT_DEPTH_8 - -#define AMF_VIDEO_ENCODER_INPUT_COLOR_PROFILE L"InColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_INPUT_TRANSFER_CHARACTERISTIC L"InColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 ?7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_INPUT_COLOR_PRIMARIES L"InColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 Section 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_ENCODER_INPUT_HDR_METADATA L"InHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - -#define AMF_VIDEO_ENCODER_OUTPUT_COLOR_PROFILE L"OutColorProfile" // amf_int64(AMF_VIDEO_CONVERTER_COLOR_PROFILE_ENUM); default = AMF_VIDEO_CONVERTER_COLOR_PROFILE_UNKNOWN - mean AUTO by size -#define AMF_VIDEO_ENCODER_OUTPUT_TRANSFER_CHARACTERISTIC L"OutColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 Section 7.2 See VideoDecoderUVD.h for enum -#define AMF_VIDEO_ENCODER_OUTPUT_COLOR_PRIMARIES L"OutColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 Section 7.1 See ColorSpace.h for enum -#define AMF_VIDEO_ENCODER_OUTPUT_HDR_METADATA L"OutHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL - - -// Dynamic properties - can be set at any time - // Rate control properties -#define AMF_VIDEO_ENCODER_FRAMERATE L"FrameRate" // AMFRate; default = depends on usage; Frame Rate -#define AMF_VIDEO_ENCODER_B_PIC_DELTA_QP L"BPicturesDeltaQP" // amf_int64; default = depends on USAGE; B-picture Delta -#define AMF_VIDEO_ENCODER_REF_B_PIC_DELTA_QP L"ReferenceBPicturesDeltaQP"// amf_int64; default = depends on USAGE; Reference B-picture Delta - -#define AMF_VIDEO_ENCODER_ENFORCE_HRD L"EnforceHRD" // bool; default = depends on USAGE; Enforce HRD -#define AMF_VIDEO_ENCODER_FILLER_DATA_ENABLE L"FillerDataEnable" // bool; default = false; Filler Data Enable -#define AMF_VIDEO_ENCODER_ENABLE_VBAQ L"EnableVBAQ" // bool; default = depends on USAGE; Enable VBAQ -#define AMF_VIDEO_ENCODER_HIGH_MOTION_QUALITY_BOOST_ENABLE L"HighMotionQualityBoostEnable"// bool; default = depends on USAGE; Enable High motion quality boost mode - - -#define AMF_VIDEO_ENCODER_VBV_BUFFER_SIZE L"VBVBufferSize" // amf_int64; default = depends on USAGE; VBV Buffer Size in bits -#define AMF_VIDEO_ENCODER_INITIAL_VBV_BUFFER_FULLNESS L"InitialVBVBufferFullness" // amf_int64; default = 64; Initial VBV Buffer Fullness 0=0% 64=100% - -#define AMF_VIDEO_ENCODER_MAX_AU_SIZE L"MaxAUSize" // amf_int64; default = 0; Max AU Size in bits - -#define AMF_VIDEO_ENCODER_MIN_QP L"MinQP" // amf_int64; default = depends on USAGE; Min QP; range = 0-51 -#define AMF_VIDEO_ENCODER_MAX_QP L"MaxQP" // amf_int64; default = depends on USAGE; Max QP; range = 0-51 -#define AMF_VIDEO_ENCODER_QP_I L"QPI" // amf_int64; default = 22; I-frame QP; range = 0-51 -#define AMF_VIDEO_ENCODER_QP_P L"QPP" // amf_int64; default = 22; P-frame QP; range = 0-51 -#define AMF_VIDEO_ENCODER_QP_B L"QPB" // amf_int64; default = 22; B-frame QP; range = 0-51 -#define AMF_VIDEO_ENCODER_TARGET_BITRATE L"TargetBitrate" // amf_int64; default = depends on USAGE; Target bit rate in bits -#define AMF_VIDEO_ENCODER_PEAK_BITRATE L"PeakBitrate" // amf_int64; default = depends on USAGE; Peak bit rate in bits -#define AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE L"RateControlSkipFrameEnable" // bool; default = depends on USAGE; Rate Control Based Frame Skip - - // Picture control properties -#define AMF_VIDEO_ENCODER_HEADER_INSERTION_SPACING L"HeaderInsertionSpacing" // amf_int64; default = depends on USAGE; Header Insertion Spacing; range 0-1000 -#define AMF_VIDEO_ENCODER_B_PIC_PATTERN L"BPicturesPattern" // amf_int64; default = 3; B-picture Pattern (number of B-Frames) -#define AMF_VIDEO_ENCODER_DE_BLOCKING_FILTER L"DeBlockingFilter" // bool; default = depends on USAGE; De-blocking Filter -#define AMF_VIDEO_ENCODER_B_REFERENCE_ENABLE L"BReferenceEnable" // bool; default = true; Enable Refrence to B-frames -#define AMF_VIDEO_ENCODER_IDR_PERIOD L"IDRPeriod" // amf_int64; default = depends on USAGE; IDR Period in frames -#define AMF_VIDEO_ENCODER_INTRA_REFRESH_NUM_MBS_PER_SLOT L"IntraRefreshMBsNumberPerSlot" // amf_int64; default = depends on USAGE; Intra Refresh MBs Number Per Slot in Macroblocks -#define AMF_VIDEO_ENCODER_SLICES_PER_FRAME L"SlicesPerFrame" // amf_int64; default = 1; Number of slices Per Frame -#define AMF_VIDEO_ENCODER_CABAC_ENABLE L"CABACEnable" // amf_int64(AMF_VIDEO_ENCODER_CODING_ENUM) default = AMF_VIDEO_ENCODER_UNDEFINED - - // Motion estimation -#define AMF_VIDEO_ENCODER_MOTION_HALF_PIXEL L"HalfPixel" // bool; default= true; Half Pixel -#define AMF_VIDEO_ENCODER_MOTION_QUARTERPIXEL L"QuarterPixel" // bool; default= true; Quarter Pixel - - // SVC -#define AMF_VIDEO_ENCODER_NUM_TEMPORAL_ENHANCMENT_LAYERS L"NumOfTemporalEnhancmentLayers" // amf_int64; default = 1; range = 1-MaxTemporalLayers; Number of temporal Layers (SVC) - - - // DPB management -#define AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE L"PicTransferMode" // amf_int64(AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE_ENUM); default = AMF_VIDEO_ENCODER_PICTURE_TRANSFER_MODE_OFF - whether to exchange reference/reconstructed pic between encoder and application - // misc -#define AMF_VIDEO_ENCODER_QUERY_TIMEOUT L"QueryTimeout" // amf_int64; default = 0 (no wait); timeout for QueryOutput call in ms. - -// Per-submittion properties - can be set on input surface interface -#define AMF_VIDEO_ENCODER_END_OF_SEQUENCE L"EndOfSequence" // bool; default = false; generate end of sequence -#define AMF_VIDEO_ENCODER_END_OF_STREAM L"EndOfStream" // bool; default = false; generate end of stream -#define AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE L"ForcePictureType" // amf_int64(AMF_VIDEO_ENCODER_PICTURE_TYPE_ENUM); default = AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE; generate particular picture type -#define AMF_VIDEO_ENCODER_INSERT_AUD L"InsertAUD" // bool; default = false; insert AUD -#define AMF_VIDEO_ENCODER_INSERT_SPS L"InsertSPS" // bool; default = false; insert SPS -#define AMF_VIDEO_ENCODER_INSERT_PPS L"InsertPPS" // bool; default = false; insert PPS -#define AMF_VIDEO_ENCODER_PICTURE_STRUCTURE L"PictureStructure" // amf_int64(AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_ENUM); default = AMF_VIDEO_ENCODER_PICTURE_STRUCTURE_FRAME; indicate picture type -#define AMF_VIDEO_ENCODER_MARK_CURRENT_WITH_LTR_INDEX L"MarkCurrentWithLTRIndex" // //amf_int64; default = N/A; Mark current frame with LTR index -#define AMF_VIDEO_ENCODER_FORCE_LTR_REFERENCE_BITFIELD L"ForceLTRReferenceBitfield"// amf_int64; default = 0; force LTR bit-field -#define AMF_VIDEO_ENCODER_ROI_DATA L"ROIData" // 2D AMFSurface, surface format: AMF_SURFACE_GRAY32 -#define AMF_VIDEO_ENCODER_REFERENCE_PICTURE L"ReferencePicture" // AMFInterface(AMFSurface); surface used for frame injection -#define AMF_VIDEO_ENCODER_PSNR_FEEDBACK L"PSNRFeedback" // amf_bool; default = false; Signal encoder to calculate PSNR score -#define AMF_VIDEO_ENCODER_SSIM_FEEDBACK L"SSIMFeedback" // amf_bool; default = false; Signal encoder to calculate SSIM score -#define AMF_VIDEO_ENCODER_STATISTICS_FEEDBACK L"StatisticsFeedback" // amf_bool; default = false; Signal encoder to collect and feedback statistics -#define AMF_VIDEO_ENCODER_BLOCK_QP_FEEDBACK L"BlockQpFeedback" // amf_bool; default = false; Signal encoder to collect and feedback block level QP values - - -// properties set by encoder on output buffer interface -#define AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE L"OutputDataType" // amf_int64(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_ENUM); default = N/A -#define AMF_VIDEO_ENCODER_OUTPUT_MARKED_LTR_INDEX L"MarkedLTRIndex" //amf_int64; default = -1; Marked LTR index -#define AMF_VIDEO_ENCODER_OUTPUT_REFERENCED_LTR_INDEX_BITFIELD L"ReferencedLTRIndexBitfield" // amf_int64; default = 0; referenced LTR bit-field -#define AMF_VIDEO_ENCODER_OUTPUT_TEMPORAL_LAYER L"OutputTemporalLayer" // amf_int64; Temporal layer -#define AMF_VIDEO_ENCODER_PRESENTATION_TIME_STAMP L"PresentationTimeStamp" // amf_int64; Presentation time stamp (PTS) -#define AMF_VIDEO_ENCODER_RECONSTRUCTED_PICTURE L"ReconstructedPicture" // AMFInterface(AMFSurface); returns reconstructed picture as an AMFSurface attached to the output buffer as property AMF_VIDEO_ENCODER_RECONSTRUCTED_PICTURE of AMFInterface type -#define AMF_VIDEO_ENCODER_STATISTIC_PSNR_Y L"PSNRY" // double; PSNR Y -#define AMF_VIDEO_ENCODER_STATISTIC_PSNR_U L"PSNRU" // double; PSNR U -#define AMF_VIDEO_ENCODER_STATISTIC_PSNR_V L"PSNRV" // double; PSNR V -#define AMF_VIDEO_ENCODER_STATISTIC_PSNR_ALL L"PSNRALL" // double; PSNR All -#define AMF_VIDEO_ENCODER_STATISTIC_SSIM_Y L"SSIMY" // double; SSIM Y -#define AMF_VIDEO_ENCODER_STATISTIC_SSIM_U L"SSIMU" // double; SSIM U -#define AMF_VIDEO_ENCODER_STATISTIC_SSIM_V L"SSIMV" // double; SSIM V -#define AMF_VIDEO_ENCODER_STATISTIC_SSIM_ALL L"SSIMALL" // double; SSIM ALL - - // Encoder statistics feedback -#define AMF_VIDEO_ENCODER_STATISTIC_FRAME_QP L"StatisticsFeedbackFrameQP" // amf_int64; Rate control base frame/initial QP -#define AMF_VIDEO_ENCODER_STATISTIC_AVERAGE_QP L"StatisticsFeedbackAvgQP" // amf_int64; Average calculated QP of all encoded MBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped MBs. -#define AMF_VIDEO_ENCODER_STATISTIC_MAX_QP L"StatisticsFeedbackMaxQP" // amf_int64; Max calculated QP among all encoded MBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped MBs. -#define AMF_VIDEO_ENCODER_STATISTIC_MIN_QP L"StatisticsFeedbackMinQP" // amf_int64; Min calculated QP among all encoded MBs in a picture. Value may be different from the one reported by bitstream analyzer when there are skipped MBs. -#define AMF_VIDEO_ENCODER_STATISTIC_PIX_NUM_INTRA L"StatisticsFeedbackPixNumIntra" // amf_int64; Number of the intra encoded pixels -#define AMF_VIDEO_ENCODER_STATISTIC_PIX_NUM_INTER L"StatisticsFeedbackPixNumInter" // amf_int64; Number of the inter encoded pixels -#define AMF_VIDEO_ENCODER_STATISTIC_PIX_NUM_SKIP L"StatisticsFeedbackPixNumSkip" // amf_int64; Number of the skip mode pixels -#define AMF_VIDEO_ENCODER_STATISTIC_BITCOUNT_RESIDUAL L"StatisticsFeedbackBitcountResidual" // amf_int64; The bit count that corresponds to residual data -#define AMF_VIDEO_ENCODER_STATISTIC_BITCOUNT_MOTION L"StatisticsFeedbackBitcountMotion" // amf_int64; The bit count that corresponds to motion vectors -#define AMF_VIDEO_ENCODER_STATISTIC_BITCOUNT_INTER L"StatisticsFeedbackBitcountInter" // amf_int64; The bit count that are assigned to inter MBs -#define AMF_VIDEO_ENCODER_STATISTIC_BITCOUNT_INTRA L"StatisticsFeedbackBitcountIntra" // amf_int64; The bit count that are assigned to intra MBs -#define AMF_VIDEO_ENCODER_STATISTIC_BITCOUNT_ALL_MINUS_HEADER L"StatisticsFeedbackBitcountAllMinusHeader" // amf_int64; The bit count of the bitstream excluding header -#define AMF_VIDEO_ENCODER_STATISTIC_MV_X L"StatisticsFeedbackMvX" // amf_int64; Accumulated absolute values of horizontal MV's -#define AMF_VIDEO_ENCODER_STATISTIC_MV_Y L"StatisticsFeedbackMvY" // amf_int64; Accumulated absolute values of vertical MV's -#define AMF_VIDEO_ENCODER_STATISTIC_RD_COST_FINAL L"StatisticsFeedbackRdCostFinal" // amf_int64; Frame level final RD cost for full encoding -#define AMF_VIDEO_ENCODER_STATISTIC_RD_COST_INTRA L"StatisticsFeedbackRdCostIntra" // amf_int64; Frame level intra RD cost for full encoding -#define AMF_VIDEO_ENCODER_STATISTIC_RD_COST_INTER L"StatisticsFeedbackRdCostInter" // amf_int64; Frame level inter RD cost for full encoding -#define AMF_VIDEO_ENCODER_STATISTIC_SATD_FINAL L"StatisticsFeedbackSatdFinal" // amf_int64; Frame level final SATD for full encoding -#define AMF_VIDEO_ENCODER_STATISTIC_SATD_INTRA L"StatisticsFeedbackSatdIntra" // amf_int64; Frame level intra SATD for full encoding -#define AMF_VIDEO_ENCODER_STATISTIC_SATD_INTER L"StatisticsFeedbackSatdInter" // amf_int64; Frame level inter SATD for full encoding - - // Encoder block level feedback -#define AMF_VIDEO_ENCODER_BLOCK_QP_MAP L"BlockQpMap" // AMFInterface(AMFSurface); AMFSurface of format AMF_SURFACE_GRAY32 containing block level QP values - -#define AMF_VIDEO_ENCODER_HDCP_COUNTER L"HDCPCounter" // const void* - -// Properties for multi-instance cloud gaming -#define AMF_VIDEO_ENCODER_MAX_INSTANCES L"EncoderMaxInstances" // deprecated. amf_int64; default = 1; max number of encoder instances -#define AMF_VIDEO_ENCODER_MULTI_INSTANCE_MODE L"MultiInstanceMode" // deprecated. bool; default = false; -#define AMF_VIDEO_ENCODER_CURRENT_QUEUE L"MultiInstanceCurrentQueue"// deprecated. amf_int64; default = 0; - - -// VCE Encoder capabilities - exposed in AMFCaps interface -#define AMF_VIDEO_ENCODER_CAP_MAX_BITRATE L"MaxBitrate" // amf_int64; Maximum bit rate in bits -#define AMF_VIDEO_ENCODER_CAP_NUM_OF_STREAMS L"NumOfStreams" // amf_int64; maximum number of encode streams supported -#define AMF_VIDEO_ENCODER_CAP_MAX_PROFILE L"MaxProfile" // AMF_VIDEO_ENCODER_PROFILE_ENUM -#define AMF_VIDEO_ENCODER_CAP_MAX_LEVEL L"MaxLevel" // amf_int64 maximum profile level -#define AMF_VIDEO_ENCODER_CAP_BFRAMES L"BFrames" // bool is B-Frames supported -#define AMF_VIDEO_ENCODER_CAP_MIN_REFERENCE_FRAMES L"MinReferenceFrames" // amf_int64 minimum number of reference frames -#define AMF_VIDEO_ENCODER_CAP_MAX_REFERENCE_FRAMES L"MaxReferenceFrames" // amf_int64 maximum number of reference frames -#define AMF_VIDEO_ENCODER_CAP_MAX_TEMPORAL_LAYERS L"MaxTemporalLayers" // amf_int64 maximum number of temporal layers -#define AMF_VIDEO_ENCODER_CAP_FIXED_SLICE_MODE L"FixedSliceMode" // bool is fixed slice mode supported -#define AMF_VIDEO_ENCODER_CAP_NUM_OF_HW_INSTANCES L"NumOfHwInstances" // amf_int64 number of HW encoder instances -#define AMF_VIDEO_ENCODER_CAP_COLOR_CONVERSION L"ColorConversion" // amf_int64(AMF_ACCELERATION_TYPE) - type of supported color conversion. default AMF_ACCEL_GPU -#define AMF_VIDEO_ENCODER_CAP_PRE_ANALYSIS L"PreAnalysis" // amf_bool - pre analysis module is available for H264 UVE encoder, n/a for the other encoders -#define AMF_VIDEO_ENCODER_CAP_ROI L"ROIMap" // amf_bool - ROI map support is available for H264 UVE encoder, n/a for the other encoders -#define AMF_VIDEO_ENCODER_CAP_MAX_THROUGHPUT L"MaxThroughput" // amf_int64 - MAX throughput for H264 encoder in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_CAP_REQUESTED_THROUGHPUT L"RequestedThroughput" // amf_int64 - Currently total requested throughput for H264 encoder in MB (16 x 16 pixel) -#define AMF_VIDEO_ENCODER_CAPS_QUERY_TIMEOUT_SUPPORT L"QueryTimeoutSupport" // amf_bool - Timeout supported for QueryOutout call - -// properties set on AMFComponent to control component creation -#define AMF_VIDEO_ENCODER_MEMORY_TYPE L"EncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_VULKAN or AMF_MEMORY_UNKNOWN (auto) - -#define AMF_VIDEO_ENCODER_ENABLE_SMART_ACCESS_VIDEO L"EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature - -#endif //#ifndef AMF_VideoEncoderVCE_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/VideoStitch.h b/plugins/obs-ffmpeg/external/AMF/include/components/VideoStitch.h deleted file mode 100644 index 0ae2af5275e761..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/VideoStitch.h +++ /dev/null @@ -1,124 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/** - *************************************************************************************************** - * @file VideoStitch.h - * @brief AMFVideoStitch interface declaration - *************************************************************************************************** - */ -#ifndef AMF_VideoStitch_h -#define AMF_VideoStitch_h -#pragma once - -#include "public/include/components/Component.h" - -#define AMFVideoStitch L"AMFVideoStitch" //Component name - -// static properties -#define AMF_VIDEO_STITCH_OUTPUT_FORMAT L"OutputFormat" // Values, AMF_SURFACE_BGRA or AMF_SURFACE_RGBA -#define AMF_VIDEO_STITCH_MEMORY_TYPE L"MemoryType" // Values, only AMF_MEMORY_DX11 is supported for now. -#define AMF_VIDEO_STITCH_OUTPUT_SIZE L"OutputSize" // AMFSize, (width, height) in pixels. default= (0,0), will be the same size as input. -#define AMF_VIDEO_STITCH_INPUTCOUNT L"InputCount" // amf_uint64, number of camera inputs. - -// individual camera direction and location -#define AMF_VIDEO_CAMERA_ANGLE_PITCH L"CameraPitch" // double, in radians, default = 0, camera pitch orientation -#define AMF_VIDEO_CAMERA_ANGLE_YAW L"CameraYaw" // double, in radians, default = 0, camera yaw orientation -#define AMF_VIDEO_CAMERA_ANGLE_ROLL L"CameraRoll" // double, in radians, default = 0, camera roll orientation - -#define AMF_VIDEO_CAMERA_OFFSET_X L"CameraOffsetX" // double, in pixels, default = 0, X offset of camera center of the lens from the center of the rig. -#define AMF_VIDEO_CAMERA_OFFSET_Y L"CameraOffsetY" // double, in pixels, default = 0, Y offset of camera center of the lens from the center of the rig. -#define AMF_VIDEO_CAMERA_OFFSET_Z L"CameraOffsetZ" // double, in pixels, default = 0, Z offset of camera center of the lens from the center of the rig. -#define AMF_VIDEO_CAMERA_HFOV L"CameraHFOV" // double, in radians, default = PI, - horizontal field of view -#define AMF_VIDEO_CAMERA_SCALE L"CameraScale" // double, default = 1, scale coeff - -// lens correction parameters -#define AMF_VIDEO_STITCH_LENS_CORR_K1 L"LensK1" // double, default = 0. -#define AMF_VIDEO_STITCH_LENS_CORR_K2 L"LensK2" // double, default = 0. -#define AMF_VIDEO_STITCH_LENS_CORR_K3 L"LensK3" // double, default = 0. -#define AMF_VIDEO_STITCH_LENS_CORR_OFFX L"LensOffX" // double, default = 0. -#define AMF_VIDEO_STITCH_LENS_CORR_OFFY L"LensOffY" // double, default = 0. -#define AMF_VIDEO_STITCH_CROP L"Crop" //AMFRect, in pixels default = (0,0,0,0). - -#define AMF_VIDEO_STITCH_LENS_MODE L"LensMode" // Values, AMF_VIDEO_STITCH_LENS_CORR_MODE_ENUM, (default = AMF_VIDEO_STITCH_LENS_CORR_MODE_RADIAL) - -#define AMF_VIDEO_STITCH_OUTPUT_MODE L"OutputMode" // AMF_VIDEO_STITCH_OUTPUT_MODE_ENUM (default=AMF_VIDEO_STITCH_OUTPUT_MODE_PREVIEW) -#define AMF_VIDEO_STITCH_COMBINED_SOURCE L"CombinedSource" // bool, (default=false) video sources are combined in one stream - -#define AMF_VIDEO_STITCH_COMPUTE_DEVICE L"ComputeDevice" // amf_int64(AMF_MEMORY_TYPE) Values, AMF_MEMORY_DX11, AMF_MEMORY_COMPUTE_FOR_DX11, AMF_MEMORY_OPENCL - -//for debug -#define AMF_VIDEO_STITCH_WIRE_RENDER L"Wire" // bool (default=false) reder wireframe - -//view angle -#define AMF_VIDEO_STITCH_VIEW_ROTATE_X L"AngleX" // double, in radians, default = 0 - delta from current position / automatilcally reset to 0 inside SetProperty() call -#define AMF_VIDEO_STITCH_VIEW_ROTATE_Y L"AngleY" // double, in radians, default = 0 - delta from current position / automatilcally reset to 0 inside SetProperty() call -#define AMF_VIDEO_STITCH_VIEW_ROTATE_Z L"AngleZ" // double, in radians, default = 0 - delta from current position / automatilcally reset to 0 inside SetProperty() call - -#define AMF_VIDEO_STITCH_COLOR_BALANCE L"ColorBalance" // bool (default=true) enables color balance - -//lens mode -enum AMF_VIDEO_STITCH_LENS_ENUM -{ - AMF_VIDEO_STITCH_LENS_RECTILINEAR = 0, //rect linear lens - AMF_VIDEO_STITCH_LENS_FISHEYE_FULLFRAME = 1, //fisheye full frame - AMF_VIDEO_STITCH_LENS_FISHEYE_CIRCULAR = 2, //fisheye, circular -}; - -//Output Mode -enum AMF_VIDEO_STITCH_OUTPUT_MODE_ENUM -{ - AMF_VIDEO_STITCH_OUTPUT_MODE_PREVIEW = 0, //preview mode - AMF_VIDEO_STITCH_OUTPUT_MODE_EQUIRECTANGULAR = 1, //equirectangular mode - AMF_VIDEO_STITCH_OUTPUT_MODE_CUBEMAP = 2, //cubemap mode - AMF_VIDEO_STITCH_OUTPUT_MODE_LAST = AMF_VIDEO_STITCH_OUTPUT_MODE_CUBEMAP, -}; - -//audio mode -enum AMF_VIDEO_STITCH_AUDIO_MODE_ENUM -{ - AMF_VIDEO_STITCH_AUDIO_MODE_NONE = 0, //no audio - AMF_VIDEO_STITCH_AUDIO_MODE_VIDEO = 1, //using audio from video stream - AMF_VIDEO_STITCH_AUDIO_MODE_FILE = 2, //using audio from file - AMF_VIDEO_STITCH_AUDIO_MODE_CAPTURE = 3, //using audio from capture device - AMF_VIDEO_STITCH_AUDIO_MODE_INVALID = -1, //invalid -}; - - -#if defined(_M_AMD64) - #define STITCH_DLL_NAME L"amf-stitch-64.dll" -#else - #define STITCH_DLL_NAME L"amf-stitch-32.dll" -#endif - -#endif //#ifndef AMF_VideoStitch_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/components/ZCamLiveStream.h b/plugins/obs-ffmpeg/external/AMF/include/components/ZCamLiveStream.h deleted file mode 100644 index 7f4a6bbee8a2ed..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/components/ZCamLiveStream.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -//------------------------------------------------------------------------------------------------- -// ZCamLive interface declaration -//------------------------------------------------------------------------------------------------- -#ifndef AMF_ZCamLiveStream_h -#define AMF_ZCamLiveStream_h - -#pragma once -#define ZCAMLIVE_STREAMCOUNT L"StreamCount" // amf_int64 (default = 4), number of streams -#define ZCAMLIVE_VIDEO_FRAMESIZE L"FrameSize" // AMFSize (default = AMFConstructSize(2704, 1520)), frame size -#define ZCAMLIVE_VIDEO_FRAMERATE L"FrameRate" // AMFRate (default = 30.0), video frame rate -#define ZCAMLIVE_VIDEO_BIT_RATE L"BitRate" // amf_int64 (default = 3000000), video bitrate -#define ZCAMLIVE_STREAM_ACTIVE_CAMERA L"ActiveCamera" // amf_int64 (default = -1, all the cameras), the index of the camera to capture -#define ZCAMLIVE_STREAM_FRAMECOUNT L"FrameCount" // amf_int64 (default = 0), number of frames captured -#define ZCAMLIVE_CODEC_ID L"CodecID" // WString (default = "AMFVideoDecoderUVD_H264_AVC"), UVD codec ID -#define ZCAMLIVE_VIDEO_MODE L"VideoMode" // Enum (default = 0, 2K7P30), ZCam mode -#define ZCAMLIVE_AUDIO_MODE L"AudioMode" // Enum (default = 0, Silent) - Audio mode -#define ZCAMLIVE_LOWLATENCY L"LowLatency" // amf_int64 (default = 1, LowLatency), low latency flag -#define ZCAMLIVE_IP_0 L"ZCamIP_00" // WString, IP address of the #1 stream, default "10.98.32.1" -#define ZCAMLIVE_IP_1 L"ZCamIP_01" // WString, IP address of the #2 stream, default "10.98.32.2" -#define ZCAMLIVE_IP_2 L"ZCamIP_02" // WString, IP address of the #3 stream, default "10.98.32.3" -#define ZCAMLIVE_IP_3 L"ZCamIP_03" // WString, IP address of the #4 stream, default "10.98.32.4" - -//Camera live capture Mode -enum CAMLIVE_MODE_ENUM -{ - CAMLIVE_MODE_ZCAM_1080P24 = 0, //1920x1080, 24FPS - CAMLIVE_MODE_ZCAM_1080P30, //1920x1080, 30FPS - CAMLIVE_MODE_ZCAM_1080P60, //1920x1080, 60FPS - CAMLIVE_MODE_ZCAM_2K7P24, //2704x1520, 24FPS - CAMLIVE_MODE_ZCAM_2K7P30, //2704x1520, 24FPS - CAMLIVE_MODE_ZCAM_2K7P60, //2704x1520, 24FPS - CAMLIVE_MODE_ZCAM_2544P24, //3392x2544, 24FPS - CAMLIVE_MODE_ZCAM_2544P30, //3392x2544, 24FPS - CAMLIVE_MODE_ZCAM_2544P60, //3392x2544, 24FPS - CAMLIVE_MODE_THETAS, //Ricoh TheataS - CAMLIVE_MODE_THETAV, //Ricoh TheataV - CAMLIVE_MODE_INVALID = -1, -}; - -enum CAM_AUDIO_MODE_ENUM -{ - CAM_AUDIO_MODE_NONE = 0, //None - CAM_AUDIO_MODE_SILENT, //Silent audio - CAM_AUDIO_MODE_CAMERA //Capture from camera, not supported yet -}; - -extern "C" -{ - AMF_RESULT AMF_CDECL_CALL AMFCreateComponentZCamLiveStream(amf::AMFContext* pContext, amf::AMFComponentEx** ppComponent); -} -#endif // AMF_ZCamLiveStream_h \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/AudioBuffer.h b/plugins/obs-ffmpeg/external/AMF/include/core/AudioBuffer.h deleted file mode 100644 index 5f07dc4723fe35..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/AudioBuffer.h +++ /dev/null @@ -1,234 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_AudioBuffer_h -#define AMF_AudioBuffer_h -#pragma once - -#include "Data.h" -#if defined(_MSC_VER) - #pragma warning( push ) - #pragma warning(disable : 4263) - #pragma warning(disable : 4264) -#endif -#if defined(__cplusplus) -namespace amf -{ -#endif - typedef enum AMF_AUDIO_FORMAT - { - AMFAF_UNKNOWN =-1, - AMFAF_U8 = 0, // amf_uint8 - AMFAF_S16 = 1, // amf_int16 - AMFAF_S32 = 2, // amf_int32 - AMFAF_FLT = 3, // amf_float - AMFAF_DBL = 4, // amf_double - - AMFAF_U8P = 5, // amf_uint8 - AMFAF_S16P = 6, // amf_int16 - AMFAF_S32P = 7, // amf_int32 - AMFAF_FLTP = 8, // amf_float - AMFAF_DBLP = 9, // amf_double - AMFAF_FIRST = AMFAF_U8, - AMFAF_LAST = AMFAF_DBLP, - } AMF_AUDIO_FORMAT; - - typedef enum AMF_AUDIO_CHANNEL_LAYOUT - { - AMFACL_SPEAKER_FRONT_LEFT = 0x1, - AMFACL_SPEAKER_FRONT_RIGHT = 0x2, - AMFACL_SPEAKER_FRONT_CENTER = 0x4, - AMFACL_SPEAKER_LOW_FREQUENCY = 0x8, - AMFACL_SPEAKER_BACK_LEFT = 0x10, - AMFACL_SPEAKER_BACK_RIGHT = 0x20, - AMFACL_SPEAKER_FRONT_LEFT_OF_CENTER = 0x40, - AMFACL_SPEAKER_FRONT_RIGHT_OF_CENTER = 0x80, - AMFACL_SPEAKER_BACK_CENTER = 0x100, - AMFACL_SPEAKER_SIDE_LEFT = 0x200, - AMFACL_SPEAKER_SIDE_RIGHT = 0x400, - AMFACL_SPEAKER_TOP_CENTER = 0x800, - AMFACL_SPEAKER_TOP_FRONT_LEFT = 0x1000, - AMFACL_SPEAKER_TOP_FRONT_CENTER = 0x2000, - AMFACL_SPEAKER_TOP_FRONT_RIGHT = 0x4000, - AMFACL_SPEAKER_TOP_BACK_LEFT = 0x8000, - AMFACL_SPEAKER_TOP_BACK_CENTER = 0x10000, - AMFACL_SPEAKER_TOP_BACK_RIGHT = 0x20000 - } AMF_AUDIO_CHANNEL_LAYOUT; - - // get the most common layout for a given number of speakers - inline int GetDefaultChannelLayout(int channels) - { - switch (channels) - { - case 1: - return (AMFACL_SPEAKER_FRONT_CENTER); - case 2: - return (AMFACL_SPEAKER_FRONT_LEFT | AMFACL_SPEAKER_FRONT_RIGHT); - case 4: - return (AMFACL_SPEAKER_FRONT_LEFT | AMFACL_SPEAKER_FRONT_RIGHT | AMFACL_SPEAKER_BACK_LEFT | AMFACL_SPEAKER_BACK_RIGHT); - case 6: - return (AMFACL_SPEAKER_FRONT_LEFT | AMFACL_SPEAKER_FRONT_RIGHT | AMFACL_SPEAKER_FRONT_CENTER | AMFACL_SPEAKER_LOW_FREQUENCY | AMFACL_SPEAKER_BACK_LEFT | AMFACL_SPEAKER_BACK_RIGHT); - case 8: - return (AMFACL_SPEAKER_FRONT_LEFT | AMFACL_SPEAKER_FRONT_RIGHT | AMFACL_SPEAKER_FRONT_CENTER | AMFACL_SPEAKER_LOW_FREQUENCY | AMFACL_SPEAKER_BACK_LEFT | AMFACL_SPEAKER_BACK_RIGHT | AMFACL_SPEAKER_FRONT_LEFT_OF_CENTER | AMFACL_SPEAKER_FRONT_RIGHT_OF_CENTER); - } - - return AMFACL_SPEAKER_FRONT_LEFT | AMFACL_SPEAKER_FRONT_RIGHT; - } - - //---------------------------------------------------------------------------------------------- - // AMFAudioBufferObserver interface - callback - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMFAudioBuffer; - class AMF_NO_VTABLE AMFAudioBufferObserver - { - public: - virtual void AMF_STD_CALL OnBufferDataRelease(AMFAudioBuffer* pBuffer) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFAudioBuffer AMFAudioBuffer; - typedef struct AMFAudioBufferObserver AMFAudioBufferObserver; - typedef struct AMFAudioBufferObserverVtbl - { - void (AMF_STD_CALL *OnBufferDataRelease)(AMFAudioBufferObserver* pThis, AMFAudioBuffer* pBuffer); - } AMFAudioBufferObserverVtbl; - - struct AMFAudioBufferObserver - { - const AMFAudioBufferObserverVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AudioBuffer interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFAudioBuffer : public AMFData - { - public: - AMF_DECLARE_IID(0x2212ff8, 0x6107, 0x430b, 0xb6, 0x3c, 0xc7, 0xe5, 0x40, 0xe5, 0xf8, 0xeb) - - virtual amf_int32 AMF_STD_CALL GetSampleCount() = 0; - virtual amf_int32 AMF_STD_CALL GetSampleRate() = 0; - virtual amf_int32 AMF_STD_CALL GetChannelCount() = 0; - virtual AMF_AUDIO_FORMAT AMF_STD_CALL GetSampleFormat() = 0; - virtual amf_int32 AMF_STD_CALL GetSampleSize() = 0; - virtual amf_uint32 AMF_STD_CALL GetChannelLayout() = 0; - virtual void* AMF_STD_CALL GetNative() = 0; - virtual amf_size AMF_STD_CALL GetSize() = 0; - - // Observer management -#ifdef __clang__ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Woverloaded-virtual" -#endif - virtual void AMF_STD_CALL AddObserver(AMFAudioBufferObserver* pObserver) = 0; - virtual void AMF_STD_CALL RemoveObserver(AMFAudioBufferObserver* pObserver) = 0; -#ifdef __clang__ - #pragma clang diagnostic pop -#endif - - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFAudioBufferPtr; - //---------------------------------------------------------------------------------------------- -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFAudioBuffer, 0x2212ff8, 0x6107, 0x430b, 0xb6, 0x3c, 0xc7, 0xe5, 0x40, 0xe5, 0xf8, 0xeb) - - typedef struct AMFAudioBufferVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFAudioBuffer* pThis); - amf_long (AMF_STD_CALL *Release)(AMFAudioBuffer* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFAudioBuffer* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFAudioBuffer* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFAudioBuffer* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFAudioBuffer* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFAudioBuffer* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFAudioBuffer* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFAudioBuffer* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFAudioBuffer* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFAudioBuffer* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFAudioBuffer* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFAudioBuffer* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFData interface - - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryType)(AMFAudioBuffer* pThis); - - AMF_RESULT (AMF_STD_CALL *Duplicate)(AMFAudioBuffer* pThis, AMF_MEMORY_TYPE type, AMFData** ppData); - AMF_RESULT (AMF_STD_CALL *Convert)(AMFAudioBuffer* pThis, AMF_MEMORY_TYPE type); // optimal interop if possilble. Copy through host memory if needed - AMF_RESULT (AMF_STD_CALL *Interop)(AMFAudioBuffer* pThis, AMF_MEMORY_TYPE type); // only optimal interop if possilble. No copy through host memory for GPU objects - - AMF_DATA_TYPE (AMF_STD_CALL *GetDataType)(AMFAudioBuffer* pThis); - - amf_bool (AMF_STD_CALL *IsReusable)(AMFAudioBuffer* pThis); - - void (AMF_STD_CALL *SetPts)(AMFAudioBuffer* pThis, amf_pts pts); - amf_pts (AMF_STD_CALL *GetPts)(AMFAudioBuffer* pThis); - void (AMF_STD_CALL *SetDuration)(AMFAudioBuffer* pThis, amf_pts duration); - amf_pts (AMF_STD_CALL *GetDuration)(AMFAudioBuffer* pThis); - - // AMFAudioBuffer interface - - amf_int32 (AMF_STD_CALL *GetSampleCount)(AMFAudioBuffer* pThis); - amf_int32 (AMF_STD_CALL *GetSampleRate)(AMFAudioBuffer* pThis); - amf_int32 (AMF_STD_CALL *GetChannelCount)(AMFAudioBuffer* pThis); - AMF_AUDIO_FORMAT (AMF_STD_CALL *GetSampleFormat)(AMFAudioBuffer* pThis); - amf_int32 (AMF_STD_CALL *GetSampleSize)(AMFAudioBuffer* pThis); - amf_uint32 (AMF_STD_CALL *GetChannelLayout)(AMFAudioBuffer* pThis); - void* (AMF_STD_CALL *GetNative)(AMFAudioBuffer* pThis); - amf_size (AMF_STD_CALL *GetSize)(AMFAudioBuffer* pThis); - - // Observer management - void (AMF_STD_CALL *AddObserver_AudioBuffer)(AMFAudioBuffer* pThis, AMFAudioBufferObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver_AudioBuffer)(AMFAudioBuffer* pThis, AMFAudioBufferObserver* pObserver); - - } AMFAudioBufferVtbl; - - struct AMFAudioBuffer - { - const AMFAudioBufferVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) -} // namespace -#endif -#if defined(_MSC_VER) - #pragma warning( pop ) -#endif -#endif //#ifndef AMF_AudioBuffer_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Buffer.h b/plugins/obs-ffmpeg/external/AMF/include/core/Buffer.h deleted file mode 100644 index 15c2907813befe..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Buffer.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Buffer_h -#define AMF_Buffer_h -#pragma once - -#include "Data.h" - -#if defined(_MSC_VER) - #pragma warning( push ) - #pragma warning(disable : 4263) - #pragma warning(disable : 4264) -#endif -#if defined(__cplusplus) -namespace amf -{ -#endif - - //---------------------------------------------------------------------------------------------- - // AMF_BUFFER_USAGE translates to D3D11_BIND_FLAG or VkBufferUsageFlagBits - // bit mask - //---------------------------------------------------------------------------------------------- - typedef enum AMF_BUFFER_USAGE_BITS - { // D3D11 D3D12 Vulkan - AMF_BUFFER_USAGE_DEFAULT = 0x80000000, // D3D11_USAGE_STAGING, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT - AMF_BUFFER_USAGE_NONE = 0x00000000, // 0 , D3D12_RESOURCE_FLAG_NONE, 0 - AMF_BUFFER_USAGE_CONSTANT = 0x00000001, // D3D11_BIND_CONSTANT_BUFFER, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT - AMF_BUFFER_USAGE_SHADER_RESOURCE = 0x00000002, // D3D11_BIND_SHADER_RESOURCE, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT - AMF_BUFFER_USAGE_UNORDERED_ACCESS = 0x00000004, // D3D11_BIND_UNORDERED_ACCESS, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT - AMF_BUFFER_USAGE_TRANSFER_SRC = 0x00000008, // VK_BUFFER_USAGE_TRANSFER_SRC_BIT - AMF_BUFFER_USAGE_TRANSFER_DST = 0x00000010, // VK_BUFFER_USAGE_TRANSFER_DST_BIT - } AMF_BUFFER_USAGE_BITS; - typedef amf_flags AMF_BUFFER_USAGE; - //---------------------------------------------------------------------------------------------- - - - //---------------------------------------------------------------------------------------------- - // AMFBufferObserver interface - callback - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMFBuffer; - class AMF_NO_VTABLE AMFBufferObserver - { - public: - virtual void AMF_STD_CALL OnBufferDataRelease(AMFBuffer* pBuffer) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFBuffer AMFBuffer; - typedef struct AMFBufferObserver AMFBufferObserver; - - typedef struct AMFBufferObserverVtbl - { - void (AMF_STD_CALL *OnBufferDataRelease)(AMFBufferObserver* pThis, AMFBuffer* pBuffer); - } AMFBufferObserverVtbl; - - struct AMFBufferObserver - { - const AMFBufferObserverVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFBuffer interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFBuffer : public AMFData - { - public: - AMF_DECLARE_IID(0xb04b7248, 0xb6f0, 0x4321, 0xb6, 0x91, 0xba, 0xa4, 0x74, 0xf, 0x9f, 0xcb) - - virtual AMF_RESULT AMF_STD_CALL SetSize(amf_size newSize) = 0; - virtual amf_size AMF_STD_CALL GetSize() = 0; - virtual void* AMF_STD_CALL GetNative() = 0; - - // Observer management -#ifdef __clang__ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Woverloaded-virtual" -#endif - virtual void AMF_STD_CALL AddObserver(AMFBufferObserver* pObserver) = 0; - virtual void AMF_STD_CALL RemoveObserver(AMFBufferObserver* pObserver) = 0; -#ifdef __clang__ - #pragma clang diagnostic pop -#endif - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFBufferPtr; - //---------------------------------------------------------------------------------------------- - -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFBuffer, 0xb04b7248, 0xb6f0, 0x4321, 0xb6, 0x91, 0xba, 0xa4, 0x74, 0xf, 0x9f, 0xcb) - - typedef struct AMFBufferVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFBuffer* pThis); - amf_long (AMF_STD_CALL *Release)(AMFBuffer* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFBuffer* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFBuffer* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFBuffer* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFBuffer* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFBuffer* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFBuffer* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFBuffer* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFBuffer* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFBuffer* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFBuffer* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFBuffer* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFData interface - - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryType)(AMFBuffer* pThis); - - AMF_RESULT (AMF_STD_CALL *Duplicate)(AMFBuffer* pThis, AMF_MEMORY_TYPE type, AMFData** ppData); - AMF_RESULT (AMF_STD_CALL *Convert)(AMFBuffer* pThis, AMF_MEMORY_TYPE type); // optimal interop if possilble. Copy through host memory if needed - AMF_RESULT (AMF_STD_CALL *Interop)(AMFBuffer* pThis, AMF_MEMORY_TYPE type); // only optimal interop if possilble. No copy through host memory for GPU objects - - AMF_DATA_TYPE (AMF_STD_CALL *GetDataType)(AMFBuffer* pThis); - - amf_bool (AMF_STD_CALL *IsReusable)(AMFBuffer* pThis); - - void (AMF_STD_CALL *SetPts)(AMFBuffer* pThis, amf_pts pts); - amf_pts (AMF_STD_CALL *GetPts)(AMFBuffer* pThis); - void (AMF_STD_CALL *SetDuration)(AMFBuffer* pThis, amf_pts duration); - amf_pts (AMF_STD_CALL *GetDuration)(AMFBuffer* pThis); - - // AMFBuffer interface - - AMF_RESULT (AMF_STD_CALL *SetSize)(AMFBuffer* pThis, amf_size newSize); - amf_size (AMF_STD_CALL *GetSize)(AMFBuffer* pThis); - void* (AMF_STD_CALL *GetNative)(AMFBuffer* pThis); - - // Observer management - void (AMF_STD_CALL *AddObserver_Buffer)(AMFBuffer* pThis, AMFBufferObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver_Buffer)(AMFBuffer* pThis, AMFBufferObserver* pObserver); - - } AMFBufferVtbl; - - struct AMFBuffer - { - const AMFBufferVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) -} // namespace -#endif -#if defined(_MSC_VER) - #pragma warning( pop ) -#endif -#endif //#ifndef AMF_Buffer_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Compute.h b/plugins/obs-ffmpeg/external/AMF/include/core/Compute.h deleted file mode 100644 index bc34749f9ffc1e..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Compute.h +++ /dev/null @@ -1,302 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/** - *************************************************************************************************** - * @file Compute.h - * @brief AMFCompute interface declaration - *************************************************************************************************** - */ -#ifndef AMF_Compute_h -#define AMF_Compute_h -#pragma once - -#include "Buffer.h" -#include "Surface.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - typedef amf_uint64 AMF_KERNEL_ID; - - //---------------------------------------------------------------------------------------------- - // enumerations for plane conversion - //---------------------------------------------------------------------------------------------- - typedef enum AMF_CHANNEL_ORDER - { - AMF_CHANNEL_ORDER_INVALID = 0, - AMF_CHANNEL_ORDER_R = 1, - AMF_CHANNEL_ORDER_RG = 2, - AMF_CHANNEL_ORDER_BGRA = 3, - AMF_CHANNEL_ORDER_RGBA = 4, - AMF_CHANNEL_ORDER_ARGB = 5, - AMF_CHANNEL_ORDER_YUY2 = 6, - } AMF_CHANNEL_ORDER; - //---------------------------------------------------------------------------------------------- - typedef enum AMF_CHANNEL_TYPE - { - AMF_CHANNEL_INVALID = 0, - AMF_CHANNEL_UNSIGNED_INT8 = 1, - AMF_CHANNEL_UNSIGNED_INT32 = 2, - AMF_CHANNEL_UNORM_INT8 = 3, - AMF_CHANNEL_UNORM_INT16 = 4, - AMF_CHANNEL_SNORM_INT16 = 5, - AMF_CHANNEL_FLOAT = 6, - AMF_CHANNEL_FLOAT16 = 7, - AMF_CHANNEL_UNSIGNED_INT16 = 8, - AMF_CHANNEL_UNORM_INT_101010 = 9, -} AMF_CHANNEL_TYPE; - //---------------------------------------------------------------------------------------------- -#define AMF_STRUCTURED_BUFFER_FORMAT L"StructuredBufferFormat" // amf_int64(AMF_CHANNEL_TYPE), default - AMF_CHANNEL_UNSIGNED_INT32; to be set on AMFBuffer objects -#if defined(_WIN32) - AMF_WEAK GUID AMFStructuredBufferFormatGUID = { 0x90c5d674, 0xe90, 0x4181, {0xbd, 0xef, 0x26, 0x13, 0xc1, 0xdf, 0xa3, 0xbd} }; // UINT(DXGI_FORMAT), default - DXGI_FORMAT_R32_UINT; to be set on ID3D11Buffer or ID3D11Texture2D objects when used natively -#endif - //---------------------------------------------------------------------------------------------- - // enumeration argument type - //---------------------------------------------------------------------------------------------- - typedef enum AMF_ARGUMENT_ACCESS_TYPE - { - AMF_ARGUMENT_ACCESS_READ = 0, - AMF_ARGUMENT_ACCESS_WRITE = 1, - AMF_ARGUMENT_ACCESS_READWRITE = 2, - AMF_ARGUMENT_ACCESS_READWRITE_MASK = 0xFFFF, - //Sampler parameters - AMF_ARGUMENT_SAMPLER_LINEAR = 0x10000000, - AMF_ARGUMENT_SAMPLER_NORM_COORD = 0x20000000, - AMF_ARGUMENT_SAMPLER_POINT = 0x40000000, - AMF_ARGUMENT_SAMPLER_MASK = 0xFFFF0000, - } AMF_ARGUMENT_ACCESS_TYPE; - //---------------------------------------------------------------------------------------------- - // AMFComputeKernel interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComputeKernel : public AMFInterface - { - public: - AMF_DECLARE_IID(0x94815701, 0x6c84, 0x4ba6, 0xa9, 0xfe, 0xe9, 0xad, 0x40, 0xf8, 0x8, 0x8) - - virtual void* AMF_STD_CALL GetNative() = 0; - virtual const wchar_t* AMF_STD_CALL GetIDName() = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgPlaneNative(amf_size index, void* pPlane, AMF_ARGUMENT_ACCESS_TYPE eAccess) = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgBufferNative(amf_size index, void* pBuffer, AMF_ARGUMENT_ACCESS_TYPE eAccess) = 0; - - virtual AMF_RESULT AMF_STD_CALL SetArgPlane(amf_size index, AMFPlane* pPlane, AMF_ARGUMENT_ACCESS_TYPE eAccess) = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgBuffer(amf_size index, AMFBuffer* pBuffer, AMF_ARGUMENT_ACCESS_TYPE eAccess) = 0; - - virtual AMF_RESULT AMF_STD_CALL SetArgInt32(amf_size index, amf_int32 data) = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgInt64(amf_size index, amf_int64 data) = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgFloat(amf_size index, amf_float data) = 0; - virtual AMF_RESULT AMF_STD_CALL SetArgBlob(amf_size index, amf_size dataSize, const void* pData) = 0; - - virtual AMF_RESULT AMF_STD_CALL GetCompileWorkgroupSize(amf_size workgroupSize[3]) = 0; - - virtual AMF_RESULT AMF_STD_CALL Enqueue(amf_size dimension, amf_size globalOffset[3], amf_size globalSize[3], amf_size localSize[3]) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComputeKernelPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComputeKernel, 0x94815701, 0x6c84, 0x4ba6, 0xa9, 0xfe, 0xe9, 0xad, 0x40, 0xf8, 0x8, 0x8) - typedef struct AMFComputeKernel AMFComputeKernel; - - typedef struct AMFComputeKernelVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComputeKernel* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComputeKernel* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComputeKernel* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFComputeKernel interface - - } AMFComputeKernelVtbl; - - struct AMFComputeKernel - { - const AMFComputeKernelVtbl *pVtbl; - }; - -#endif //#if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFComputeSyncPoint interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComputeSyncPoint : public AMFInterface - { - public: - AMF_DECLARE_IID(0x66f33fe6, 0xaae, 0x4e65, 0xba, 0x3, 0xea, 0x8b, 0xa3, 0x60, 0x11, 0x2) - - virtual amf_bool AMF_STD_CALL IsCompleted() = 0; - virtual void AMF_STD_CALL Wait() = 0; - }; - typedef AMFInterfacePtr_T AMFComputeSyncPointPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComputeSyncPoint, 0x66f33fe6, 0xaae, 0x4e65, 0xba, 0x3, 0xea, 0x8b, 0xa3, 0x60, 0x11, 0x2) - typedef struct AMFComputeSyncPoint AMFComputeSyncPoint; - - typedef struct AMFComputeSyncPointVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComputeSyncPoint* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComputeSyncPoint* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComputeSyncPoint* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFComputeSyncPoint interface - amf_bool (AMF_STD_CALL *IsCompleted)(AMFComputeSyncPoint* pThis); - void (AMF_STD_CALL *Wait)(AMFComputeSyncPoint* pThis); - - } AMFComputeSyncPointVtbl; - - struct AMFComputeSyncPoint - { - const AMFComputeSyncPointVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFCompute interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFCompute : public AMFInterface - { - public: - AMF_DECLARE_IID(0x3846233a, 0x3f43, 0x443f, 0x8a, 0x45, 0x75, 0x22, 0x11, 0xa9, 0xfb, 0xd5) - - virtual AMF_MEMORY_TYPE AMF_STD_CALL GetMemoryType() = 0; - - virtual void* AMF_STD_CALL GetNativeContext() = 0; - virtual void* AMF_STD_CALL GetNativeDeviceID() = 0; - virtual void* AMF_STD_CALL GetNativeCommandQueue() = 0; - - virtual AMF_RESULT AMF_STD_CALL GetKernel(AMF_KERNEL_ID kernelID, AMFComputeKernel** kernel) = 0; - - virtual AMF_RESULT AMF_STD_CALL PutSyncPoint(AMFComputeSyncPoint** ppSyncPoint) = 0; - virtual AMF_RESULT AMF_STD_CALL FinishQueue() = 0; - virtual AMF_RESULT AMF_STD_CALL FlushQueue() = 0; - - virtual AMF_RESULT AMF_STD_CALL FillPlane(AMFPlane *pPlane, const amf_size origin[3], const amf_size region[3], const void* pColor) = 0; - virtual AMF_RESULT AMF_STD_CALL FillBuffer(AMFBuffer* pBuffer, amf_size dstOffset, amf_size dstSize, const void* pSourcePattern, amf_size patternSize) = 0; - virtual AMF_RESULT AMF_STD_CALL ConvertPlaneToBuffer(AMFPlane *pSrcPlane, AMFBuffer** ppDstBuffer) = 0; - - virtual AMF_RESULT AMF_STD_CALL CopyBuffer(AMFBuffer* pSrcBuffer, amf_size srcOffset, amf_size size, AMFBuffer* pDstBuffer, amf_size dstOffset) = 0; - virtual AMF_RESULT AMF_STD_CALL CopyPlane(AMFPlane *pSrcPlane, const amf_size srcOrigin[3], const amf_size region[3], AMFPlane *pDstPlane, const amf_size dstOrigin[3]) = 0; - - virtual AMF_RESULT AMF_STD_CALL CopyBufferToHost(AMFBuffer* pSrcBuffer, amf_size srcOffset, amf_size size, void* pDest, amf_bool blocking) = 0; - virtual AMF_RESULT AMF_STD_CALL CopyBufferFromHost(const void* pSource, amf_size size, AMFBuffer* pDstBuffer, amf_size dstOffsetInBytes, amf_bool blocking) = 0; - - virtual AMF_RESULT AMF_STD_CALL CopyPlaneToHost(AMFPlane *pSrcPlane, const amf_size origin[3], const amf_size region[3], void* pDest, amf_size dstPitch, amf_bool blocking) = 0; - virtual AMF_RESULT AMF_STD_CALL CopyPlaneFromHost(void* pSource, const amf_size origin[3], const amf_size region[3], amf_size srcPitch, AMFPlane *pDstPlane, amf_bool blocking) = 0; - - virtual AMF_RESULT AMF_STD_CALL ConvertPlaneToPlane(AMFPlane* pSrcPlane, AMFPlane** ppDstPlane, AMF_CHANNEL_ORDER order, AMF_CHANNEL_TYPE type) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComputePtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFCompute, 0x3846233a, 0x3f43, 0x443f, 0x8a, 0x45, 0x75, 0x22, 0x11, 0xa9, 0xfb, 0xd5) - typedef struct AMFCompute AMFCompute; - - typedef struct AMFComputeVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFCompute* pThis); - amf_long (AMF_STD_CALL *Release)(AMFCompute* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFCompute* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFCompute interface - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryType)(AMFCompute* pThis); - void* (AMF_STD_CALL *GetNativeContext)(AMFCompute* pThis); - void* (AMF_STD_CALL *GetNativeDeviceID)(AMFCompute* pThis); - void* (AMF_STD_CALL *GetNativeCommandQueue)(AMFCompute* pThis); - AMF_RESULT (AMF_STD_CALL *GetKernel)(AMFCompute* pThis, AMF_KERNEL_ID kernelID, AMFComputeKernel** kernel); - AMF_RESULT (AMF_STD_CALL *PutSyncPoint)(AMFCompute* pThis, AMFComputeSyncPoint** ppSyncPoint); - AMF_RESULT (AMF_STD_CALL *FinishQueue)(AMFCompute* pThis); - AMF_RESULT (AMF_STD_CALL *FlushQueue)(AMFCompute* pThis); - AMF_RESULT (AMF_STD_CALL *FillPlane)(AMFCompute* pThis, AMFPlane *pPlane, const amf_size origin[3], const amf_size region[3], const void* pColor); - AMF_RESULT (AMF_STD_CALL *FillBuffer)(AMFCompute* pThis, AMFBuffer* pBuffer, amf_size dstOffset, amf_size dstSize, const void* pSourcePattern, amf_size patternSize); - AMF_RESULT (AMF_STD_CALL *ConvertPlaneToBuffer)(AMFCompute* pThis, AMFPlane *pSrcPlane, AMFBuffer** ppDstBuffer); - AMF_RESULT (AMF_STD_CALL *CopyBuffer)(AMFCompute* pThis, AMFBuffer* pSrcBuffer, amf_size srcOffset, amf_size size, AMFBuffer* pDstBuffer, amf_size dstOffset); - AMF_RESULT (AMF_STD_CALL *CopyPlane)(AMFCompute* pThis, AMFPlane *pSrcPlane, const amf_size srcOrigin[3], const amf_size region[3], AMFPlane *pDstPlane, const amf_size dstOrigin[3]); - AMF_RESULT (AMF_STD_CALL *CopyBufferToHost)(AMFCompute* pThis, AMFBuffer* pSrcBuffer, amf_size srcOffset, amf_size size, void* pDest, amf_bool blocking); - AMF_RESULT (AMF_STD_CALL *CopyBufferFromHost)(AMFCompute* pThis, const void* pSource, amf_size size, AMFBuffer* pDstBuffer, amf_size dstOffsetInBytes, amf_bool blocking); - AMF_RESULT (AMF_STD_CALL *CopyPlaneToHost)(AMFCompute* pThis, AMFPlane *pSrcPlane, const amf_size origin[3], const amf_size region[3], void* pDest, amf_size dstPitch, amf_bool blocking); - AMF_RESULT (AMF_STD_CALL *CopyPlaneFromHost)(AMFCompute* pThis, void* pSource, const amf_size origin[3], const amf_size region[3], amf_size srcPitch, AMFPlane *pDstPlane, amf_bool blocking); - AMF_RESULT (AMF_STD_CALL *ConvertPlaneToPlane)(AMFCompute* pThis, AMFPlane* pSrcPlane, AMFPlane** ppDstPlane, AMF_CHANNEL_ORDER order, AMF_CHANNEL_TYPE type); - } AMFComputeVtbl; - - struct AMFCompute - { - const AMFComputeVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFPrograms interface - singleton - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFPrograms - { - public: - virtual AMF_RESULT AMF_STD_CALL RegisterKernelSourceFile(AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, const wchar_t* filepath, const char* options) = 0; - virtual AMF_RESULT AMF_STD_CALL RegisterKernelSource(AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options) = 0; - virtual AMF_RESULT AMF_STD_CALL RegisterKernelBinary(AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options) = 0; - virtual AMF_RESULT AMF_STD_CALL RegisterKernelSource1(AMF_MEMORY_TYPE eMemoryType, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options) = 0; - virtual AMF_RESULT AMF_STD_CALL RegisterKernelBinary1(AMF_MEMORY_TYPE eMemoryType, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFPrograms AMFPrograms; - typedef struct AMFProgramsVtbl - { - AMF_RESULT (AMF_STD_CALL *RegisterKernelSourceFile)(AMFPrograms* pThis, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, const wchar_t* filepath, const char* options); - AMF_RESULT (AMF_STD_CALL *RegisterKernelSource)(AMFPrograms* pThis, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options); - AMF_RESULT (AMF_STD_CALL *RegisterKernelBinary)(AMFPrograms* pThis, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options); - AMF_RESULT (AMF_STD_CALL *RegisterKernelSource1)(AMFPrograms* pThis, AMF_MEMORY_TYPE eMemoryType, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options); - AMF_RESULT (AMF_STD_CALL *RegisterKernelBinary1)(AMFPrograms* pThis, AMF_MEMORY_TYPE eMemoryType, AMF_KERNEL_ID* pKernelID, const wchar_t* kernelid_name, const char* kernelName, amf_size dataSize, const amf_uint8* data, const char* options); - } AMFProgramsVtbl; - - struct AMFPrograms - { - const AMFProgramsVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - -#if defined(__cplusplus) -} // namespace amf -#endif - -#endif // AMF_Compute_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/ComputeFactory.h b/plugins/obs-ffmpeg/external/AMF/include/core/ComputeFactory.h deleted file mode 100644 index e335ee31c0dec4..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/ComputeFactory.h +++ /dev/null @@ -1,147 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_ComputeFactory_h -#define AMF_ComputeFactory_h -#pragma once - -#include "Compute.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif -// compute device audio capabilities accessed via GetProperties() from AMFComputeDevice -#define AMF_DEVICE_NAME L"DeviceName" // char*, string, device name -#define AMF_DRIVER_VERSION_NAME L"DriverVersion" // char*, string, driver version -#define AMF_AUDIO_CONVOLUTION_MAX_STREAMS L"ConvolutionMaxStreams" // amf_int64, maximum number of audio streams supported in realtime -#define AMF_AUDIO_CONVOLUTION_LENGTH L"ConvolutionLength" // amf_int64, length of convolution in samples -#define AMF_AUDIO_CONVOLUTION_BUFFER_SIZE L"ConvolutionBufferSize" // amf_int64, buffer size in samples -#define AMF_AUDIO_CONVOLUTION_SAMPLE_RATE L"ConvolutionSampleRate" // amf_int64, sample rate - -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComputeDevice : public AMFPropertyStorage - { - public: - AMF_DECLARE_IID(0xb79d7cf6, 0x2c5c, 0x4deb, 0xb8, 0x96, 0xa2, 0x9e, 0xbe, 0xa6, 0xe3, 0x97) - - virtual void* AMF_STD_CALL GetNativePlatform() = 0; - virtual void* AMF_STD_CALL GetNativeDeviceID() = 0; - virtual void* AMF_STD_CALL GetNativeContext() = 0; - - virtual AMF_RESULT AMF_STD_CALL CreateCompute(void *reserved, AMFCompute **ppCompute) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateComputeEx(void* pCommandQueue, AMFCompute **ppCompute) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComputeDevicePtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComputeDevice, 0xb79d7cf6, 0x2c5c, 0x4deb, 0xb8, 0x96, 0xa2, 0x9e, 0xbe, 0xa6, 0xe3, 0x97) - typedef struct AMFComputeDevice AMFComputeDevice; - - typedef struct AMFComputeDeviceVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComputeDevice* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComputeDevice* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComputeDevice* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFComputeDevice* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFComputeDevice* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFComputeDevice* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFComputeDevice* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFComputeDevice* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFComputeDevice* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFComputeDevice* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFComputeDevice* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFComputeDevice* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFComputeDevice* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFComputeDevice interface - void* (AMF_STD_CALL *GetNativePlatform)(AMFComputeDevice* pThis); - void* (AMF_STD_CALL *GetNativeDeviceID)(AMFComputeDevice* pThis); - void* (AMF_STD_CALL *GetNativeContext)(AMFComputeDevice* pThis); - - AMF_RESULT (AMF_STD_CALL *CreateCompute)(AMFComputeDevice* pThis, void *reserved, AMFCompute **ppCompute); - AMF_RESULT (AMF_STD_CALL *CreateComputeEx)(AMFComputeDevice* pThis, void* pCommandQueue, AMFCompute **ppCompute); - - } AMFComputeDeviceVtbl; - - struct AMFComputeDevice - { - const AMFComputeDeviceVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFComputeFactory : public AMFInterface - { - public: - AMF_DECLARE_IID(0xe3c24bd7, 0x2d83, 0x416c, 0x8c, 0x4e, 0xfd, 0x13, 0xca, 0x86, 0xf4, 0xd0) - - virtual amf_int32 AMF_STD_CALL GetDeviceCount() = 0; - virtual AMF_RESULT AMF_STD_CALL GetDeviceAt(amf_int32 index, AMFComputeDevice **ppDevice) = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFComputeFactoryPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFComputeFactory, 0xe3c24bd7, 0x2d83, 0x416c, 0x8c, 0x4e, 0xfd, 0x13, 0xca, 0x86, 0xf4, 0xd0) - typedef struct AMFComputeFactory AMFComputeFactory; - - typedef struct AMFComputeFactoryVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFComputeFactory* pThis); - amf_long (AMF_STD_CALL *Release)(AMFComputeFactory* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFComputeFactory* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFComputeFactory interface - amf_int32 (AMF_STD_CALL *GetDeviceCount)(AMFComputeFactory* pThis); - AMF_RESULT (AMF_STD_CALL *GetDeviceAt)(AMFComputeFactory* pThis, amf_int32 index, AMFComputeDevice **ppDevice); - } AMFComputeFactoryVtbl; - - struct AMFComputeFactory - { - const AMFComputeFactoryVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) -} // namespace amf -#endif - -#endif // AMF_ComputeFactory_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Context.h b/plugins/obs-ffmpeg/external/AMF/include/core/Context.h deleted file mode 100644 index 3555f0803cc202..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Context.h +++ /dev/null @@ -1,786 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Context_h -#define AMF_Context_h -#pragma once - -#include "Buffer.h" -#include "AudioBuffer.h" -#include "Surface.h" -#include "Compute.h" -#include "ComputeFactory.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // AMFContext interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFContext : public AMFPropertyStorage - { - public: - AMF_DECLARE_IID(0xa76a13f0, 0xd80e, 0x4fcc, 0xb5, 0x8, 0x65, 0xd0, 0xb5, 0x2e, 0xd9, 0xee) - - // Cleanup - virtual AMF_RESULT AMF_STD_CALL Terminate() = 0; - - // DX9 - virtual AMF_RESULT AMF_STD_CALL InitDX9(void* pDX9Device) = 0; - virtual void* AMF_STD_CALL GetDX9Device(AMF_DX_VERSION dxVersionRequired = AMF_DX9) = 0; - virtual AMF_RESULT AMF_STD_CALL LockDX9() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockDX9() = 0; - class AMFDX9Locker; - - // DX11 - virtual AMF_RESULT AMF_STD_CALL InitDX11(void* pDX11Device, AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0; - virtual void* AMF_STD_CALL GetDX11Device(AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0; - virtual AMF_RESULT AMF_STD_CALL LockDX11() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockDX11() = 0; - class AMFDX11Locker; - - // OpenCL - virtual AMF_RESULT AMF_STD_CALL InitOpenCL(void* pCommandQueue = NULL) = 0; - virtual void* AMF_STD_CALL GetOpenCLContext() = 0; - virtual void* AMF_STD_CALL GetOpenCLCommandQueue() = 0; - virtual void* AMF_STD_CALL GetOpenCLDeviceID() = 0; - virtual AMF_RESULT AMF_STD_CALL GetOpenCLComputeFactory(AMFComputeFactory **ppFactory) = 0; // advanced compute - multiple queries - virtual AMF_RESULT AMF_STD_CALL InitOpenCLEx(AMFComputeDevice *pDevice) = 0; - virtual AMF_RESULT AMF_STD_CALL LockOpenCL() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockOpenCL() = 0; - class AMFOpenCLLocker; - - // OpenGL - virtual AMF_RESULT AMF_STD_CALL InitOpenGL(amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC) = 0; - virtual amf_handle AMF_STD_CALL GetOpenGLContext() = 0; - virtual amf_handle AMF_STD_CALL GetOpenGLDrawable() = 0; - virtual AMF_RESULT AMF_STD_CALL LockOpenGL() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockOpenGL() = 0; - class AMFOpenGLLocker; - - // XV - Linux - virtual AMF_RESULT AMF_STD_CALL InitXV(void* pXVDevice) = 0; - virtual void* AMF_STD_CALL GetXVDevice() = 0; - virtual AMF_RESULT AMF_STD_CALL LockXV() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockXV() = 0; - class AMFXVLocker; - - // Gralloc - Android - virtual AMF_RESULT AMF_STD_CALL InitGralloc(void* pGrallocDevice) = 0; - virtual void* AMF_STD_CALL GetGrallocDevice() = 0; - virtual AMF_RESULT AMF_STD_CALL LockGralloc() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockGralloc() = 0; - class AMFGrallocLocker; - - // Allocation - virtual AMF_RESULT AMF_STD_CALL AllocBuffer(AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer) = 0; - virtual AMF_RESULT AMF_STD_CALL AllocSurface(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface) = 0; - virtual AMF_RESULT AMF_STD_CALL AllocAudioBuffer(AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels, - AMFAudioBuffer** ppAudioBuffer) = 0; - - // Wrap existing objects - virtual AMF_RESULT AMF_STD_CALL CreateBufferFromHostNative(void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromHostNative(AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX9Native(void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX11Native(void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromOpenGLNative(AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromGrallocNative(amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromOpenCLNative(AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateBufferFromOpenCLNative(void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer) = 0; - - // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported - virtual AMF_RESULT AMF_STD_CALL GetCompute(AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute) = 0; - }; - - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFContextPtr; - - //---------------------------------------------------------------------------------------------- - // AMFContext1 interface - //---------------------------------------------------------------------------------------------- - - class AMF_NO_VTABLE AMFContext1 : public AMFContext - { - public: - AMF_DECLARE_IID(0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46) - - virtual AMF_RESULT AMF_STD_CALL CreateBufferFromDX11Native(void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; - - virtual AMF_RESULT AMF_STD_CALL AllocBufferEx(AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer) = 0; - virtual AMF_RESULT AMF_STD_CALL AllocSurfaceEx(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface) = 0; - - // Vulkan - Windows, Linux - virtual AMF_RESULT AMF_STD_CALL InitVulkan(void* pVulkanDevice) = 0; - virtual void* AMF_STD_CALL GetVulkanDevice() = 0; - virtual AMF_RESULT AMF_STD_CALL LockVulkan() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockVulkan() = 0; - - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromVulkanNative(void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateBufferFromVulkanNative(void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL GetVulkanDeviceExtensions(amf_size *pCount, const char **ppExtensions) = 0; - - - class AMFVulkanLocker; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFContext1Ptr; - - class AMF_NO_VTABLE AMFContext2 : public AMFContext1 - { - public: - AMF_DECLARE_IID(0x726241d3, 0xbd46, 0x4e90, 0x99, 0x68, 0x93, 0xe0, 0x7e, 0xa2, 0x98, 0x4d) - - // DX12 - virtual AMF_RESULT AMF_STD_CALL InitDX12(void* pDX11Device, AMF_DX_VERSION dxVersionRequired = AMF_DX12) = 0; - virtual void* AMF_STD_CALL GetDX12Device(AMF_DX_VERSION dxVersionRequired = AMF_DX12) = 0; - virtual AMF_RESULT AMF_STD_CALL LockDX12() = 0; - virtual AMF_RESULT AMF_STD_CALL UnlockDX12() = 0; - virtual AMF_RESULT AMF_STD_CALL CreateSurfaceFromDX12Native(void* pResourceTexture, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateBufferFromDX12Native(void* pResourceBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; - - class AMFDX12Locker; - }; - typedef AMFInterfacePtr_T AMFContext2Ptr; -#else - typedef struct AMFContext AMFContext; - AMF_DECLARE_IID(AMFContext, 0xa76a13f0, 0xd80e, 0x4fcc, 0xb5, 0x8, 0x65, 0xd0, 0xb5, 0x2e, 0xd9, 0xee) - - typedef struct AMFContextVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFContext* pThis); - amf_long (AMF_STD_CALL *Release)(AMFContext* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFInterface AMFPropertyStorage - - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFContext* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFContext* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFContext* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFContext interface - - // Cleanup - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext* pThis); - - // DX9 - AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext* pThis, void* pDX9Device); - void* (AMF_STD_CALL *GetDX9Device)(AMFContext* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext* pThis); - // DX11 - AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired); - void* (AMF_STD_CALL *GetDX11Device)(AMFContext* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext* pThis); - - // OpenCL - AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext* pThis, void* pCommandQueue); - void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext* pThis); - void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext* pThis); - void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries - AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext* pThis, AMFComputeDevice *pDevice); - AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext* pThis); - - // OpenGL - AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC); - amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext* pThis); - amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext* pThis); - // XV - Linux - AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext* pThis, void* pXVDevice); - void* (AMF_STD_CALL *GetXVDevice)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext* pThis); - - // Gralloc - Android - AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext* pThis, void* pGrallocDevice); - void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext* pThis); - // Allocation - AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface); - AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels, - AMFAudioBuffer** ppAudioBuffer); - - // Wrap existing objects - AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer); - - // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported - AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute); - - } AMFContextVtbl; - - struct AMFContext - { - const AMFContextVtbl *pVtbl; - }; - - - typedef struct AMFContext1 AMFContext1; - AMF_DECLARE_IID(AMFContext1, 0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46) - - typedef struct AMFContext1Vtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFContext1* pThis); - amf_long (AMF_STD_CALL *Release)(AMFContext1* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext1* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFInterface AMFPropertyStorage - - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext1* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext1* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFContext1* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext1* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext1* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext1* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFContext1* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFContext1* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFContext interface - - // Cleanup - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext1* pThis); - - // DX9 - AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext1* pThis, void* pDX9Device); - void* (AMF_STD_CALL *GetDX9Device)(AMFContext1* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext1* pThis); - // DX11 - AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext1* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired); - void* (AMF_STD_CALL *GetDX11Device)(AMFContext1* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext1* pThis); - - // OpenCL - AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext1* pThis, void* pCommandQueue); - void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext1* pThis); - void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext1* pThis); - void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext1* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries - AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext1* pThis, AMFComputeDevice *pDevice); - AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext1* pThis); - - // OpenGL - AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext1* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC); - amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext1* pThis); - amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext1* pThis); - // XV - Linux - AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext1* pThis, void* pXVDevice); - void* (AMF_STD_CALL *GetXVDevice)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext1* pThis); - - // Gralloc - Android - AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext1* pThis, void* pGrallocDevice); - void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext1* pThis); - // Allocation - AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext1* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface); - AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels, - AMFAudioBuffer** ppAudioBuffer); - - // Wrap existing objects - AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext1* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext1* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext1* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext1* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext1* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes, - AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext1* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer); - - // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported - AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext1* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute); - - // AMFContext1 interface - - AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX11Native)(AMFContext1* pThis, void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *AllocBufferEx)(AMFContext1* pThis, AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurfaceEx)(AMFContext1* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface); - - // Vulkan - Windows, Linux - AMF_RESULT (AMF_STD_CALL *InitVulkan)(AMFContext1* pThis, void* pVulkanDevice); - void* (AMF_STD_CALL *GetVulkanDevice)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *LockVulkan)(AMFContext1* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockVulkan)(AMFContext1* pThis); - - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromVulkanNative)(AMFContext1* pThis, void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromVulkanNative)(AMFContext1* pThis, void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *GetVulkanDeviceExtensions)(AMFContext1* pThis, amf_size *pCount, const char **ppExtensions); - - } AMFContext1Vtbl; - - struct AMFContext1 - { - const AMFContext1Vtbl *pVtbl; - }; - - typedef struct AMFContext2 AMFContext2; - AMF_DECLARE_IID(AMFContext2, 0xd9e9f868, 0x6220, 0x44c6, 0xa2, 0x2f, 0x7c, 0xd6, 0xda, 0xc6, 0x86, 0x46) - - typedef struct AMFContext2Vtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFContext2* pThis); - amf_long (AMF_STD_CALL *Release)(AMFContext2* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFContext2* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFInterface AMFPropertyStorage - - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFContext2* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFContext2* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFContext2* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFContext2* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFContext2* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFContext2* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFContext2* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFContext2* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFContext interface - - // Cleanup - AMF_RESULT (AMF_STD_CALL *Terminate)(AMFContext2* pThis); - - // DX9 - AMF_RESULT (AMF_STD_CALL *InitDX9)(AMFContext2* pThis, void* pDX9Device); - void* (AMF_STD_CALL *GetDX9Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX9)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX9)(AMFContext2* pThis); - // DX11 - AMF_RESULT (AMF_STD_CALL *InitDX11)(AMFContext2* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired); - void* (AMF_STD_CALL *GetDX11Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX11)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX11)(AMFContext2* pThis); - - // OpenCL - AMF_RESULT (AMF_STD_CALL *InitOpenCL)(AMFContext2* pThis, void* pCommandQueue); - void* (AMF_STD_CALL *GetOpenCLContext)(AMFContext2* pThis); - void* (AMF_STD_CALL *GetOpenCLCommandQueue)(AMFContext2* pThis); - void* (AMF_STD_CALL *GetOpenCLDeviceID)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *GetOpenCLComputeFactory)(AMFContext2* pThis, AMFComputeFactory **ppFactory); // advanced compute - multiple queries - AMF_RESULT (AMF_STD_CALL *InitOpenCLEx)(AMFContext2* pThis, AMFComputeDevice *pDevice); - AMF_RESULT (AMF_STD_CALL *LockOpenCL)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenCL)(AMFContext2* pThis); - - // OpenGL - AMF_RESULT (AMF_STD_CALL *InitOpenGL)(AMFContext2* pThis, amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC); - amf_handle (AMF_STD_CALL *GetOpenGLContext)(AMFContext2* pThis); - amf_handle (AMF_STD_CALL *GetOpenGLDrawable)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *LockOpenGL)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockOpenGL)(AMFContext2* pThis); - // XV - Linux - AMF_RESULT (AMF_STD_CALL *InitXV)(AMFContext2* pThis, void* pXVDevice); - void* (AMF_STD_CALL *GetXVDevice)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *LockXV)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockXV)(AMFContext2* pThis); - - // Gralloc - Android - AMF_RESULT (AMF_STD_CALL *InitGralloc)(AMFContext2* pThis, void* pGrallocDevice); - void* (AMF_STD_CALL *GetGrallocDevice)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *LockGralloc)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockGralloc)(AMFContext2* pThis); - // Allocation - AMF_RESULT (AMF_STD_CALL *AllocBuffer)(AMFContext2* pThis, AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurface)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface); - AMF_RESULT (AMF_STD_CALL *AllocAudioBuffer)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_AUDIO_FORMAT format, amf_int32 samples, amf_int32 sampleRate, amf_int32 channels, AMFAudioBuffer** ppAudioBuffer); - - // Wrap existing objects - AMF_RESULT (AMF_STD_CALL *CreateBufferFromHostNative)(AMFContext2* pThis, void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromHostNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData,AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX9Native)(AMFContext2* pThis, void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX11Native)(AMFContext2* pThis, void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenGLNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromGrallocNative)(AMFContext2* pThis, amf_handle hGrallocSurface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromOpenCLNative)(AMFContext2* pThis, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, void** pClPlanes, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromOpenCLNative)(AMFContext2* pThis, void* pCLBuffer, amf_size size, AMFBuffer** ppBuffer); - - // Access to AMFCompute interface - AMF_MEMORY_OPENCL, AMF_MEMORY_COMPUTE_FOR_DX9, AMF_MEMORY_COMPUTE_FOR_DX11 are currently supported - AMF_RESULT (AMF_STD_CALL *GetCompute)(AMFContext2* pThis, AMF_MEMORY_TYPE eMemType, AMFCompute** ppCompute); - - // AMFContext1 interface - - AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX11Native)(AMFContext2* pThis, void* pHostBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *AllocBufferEx)(AMFContext2* pThis, AMF_MEMORY_TYPE type, amf_size size, AMF_BUFFER_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFBuffer** ppBuffer); - AMF_RESULT (AMF_STD_CALL *AllocSurfaceEx)(AMFContext2* pThis, AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMF_SURFACE_USAGE usage, AMF_MEMORY_CPU_ACCESS access, AMFSurface** ppSurface); - - // Vulkan - Windows, Linux - AMF_RESULT (AMF_STD_CALL *InitVulkan)(AMFContext2* pThis, void* pVulkanDevice); - void* (AMF_STD_CALL *GetVulkanDevice)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *LockVulkan)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockVulkan)(AMFContext2* pThis); - - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromVulkanNative)(AMFContext2* pThis, void* pVulkanImage, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromVulkanNative)(AMFContext2* pThis, void* pVulkanBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *GetVulkanDeviceExtensions)(AMFContext2* pThis, amf_size *pCount, const char **ppExtensions); - - // AMFContext2 interface - AMF_RESULT (AMF_STD_CALL *InitDX12)(AMFContext2* pThis, void* pDX11Device, AMF_DX_VERSION dxVersionRequired); - void* (AMF_STD_CALL *GetDX12Device)(AMFContext2* pThis, AMF_DX_VERSION dxVersionRequired); - AMF_RESULT (AMF_STD_CALL *LockDX12)(AMFContext2* pThis); - AMF_RESULT (AMF_STD_CALL *UnlockDX12)(AMFContext2* pThis); - - AMF_RESULT (AMF_STD_CALL *CreateSurfaceFromDX12Native)(AMFContext2* pThis, void* pResourceTexture, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver); - AMF_RESULT (AMF_STD_CALL *CreateBufferFromDX12Native)(AMFContext2* pThis, void* pResourceBuffer, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver); - - - } AMFContext2Vtbl; - - struct AMFContext2 - { - const AMFContext2Vtbl *pVtbl; - }; -#endif - -#if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // Lockers - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFDX9Locker - { - public: - AMFDX9Locker() : m_Context(NULL) - {} - AMFDX9Locker(AMFContext* resources) : m_Context(NULL) - { - Lock(resources); - } - ~AMFDX9Locker() - { - if(m_Context != NULL) - { - m_Context->UnlockDX9(); - } - } - void Lock(AMFContext* resources) - { - if(m_Context != NULL) - { - m_Context->UnlockDX9(); - } - m_Context = resources; - if(m_Context != NULL) - { - m_Context->LockDX9(); - } - } - protected: - AMFContext* m_Context; - - private: - AMFDX9Locker(const AMFDX9Locker&); - AMFDX9Locker& operator=(const AMFDX9Locker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFDX11Locker - { - public: - AMFDX11Locker() : m_Context(NULL) - {} - AMFDX11Locker(AMFContext* resources) : m_Context(NULL) - { - Lock(resources); - } - ~AMFDX11Locker() - { - if(m_Context != NULL) - { - m_Context->UnlockDX11(); - } - } - void Lock(AMFContext* resources) - { - if(m_Context != NULL) - { - m_Context->UnlockDX11(); - } - m_Context = resources; - if(m_Context != NULL) - { - m_Context->LockDX11(); - } - } - protected: - AMFContext* m_Context; - - private: - AMFDX11Locker(const AMFDX11Locker&); - AMFDX11Locker& operator=(const AMFDX11Locker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFOpenCLLocker - { - public: - AMFOpenCLLocker() : m_Context(NULL) - {} - AMFOpenCLLocker(AMFContext* resources) : m_Context(NULL) - { - Lock(resources); - } - ~AMFOpenCLLocker() - { - if(m_Context != NULL) - { - m_Context->UnlockOpenCL(); - } - } - void Lock(AMFContext* resources) - { - if(m_Context != NULL) - { - m_Context->UnlockOpenCL(); - } - m_Context = resources; - if(m_Context != NULL) - { - m_Context->LockOpenCL(); - } - } - protected: - AMFContext* m_Context; - private: - AMFOpenCLLocker(const AMFOpenCLLocker&); - AMFOpenCLLocker& operator=(const AMFOpenCLLocker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFOpenGLLocker - { - public: - AMFOpenGLLocker(AMFContext* pContext) : m_pContext(pContext), - m_GLLocked(false) - { - if(m_pContext != NULL) - { - if(m_pContext->LockOpenGL() == AMF_OK) - { - m_GLLocked = true; - } - } - } - ~AMFOpenGLLocker() - { - if(m_GLLocked) - { - m_pContext->UnlockOpenGL(); - } - } - private: - AMFContext* m_pContext; - amf_bool m_GLLocked; ///< AMFOpenGLLocker can be called when OpenGL is not initialized yet - ///< in this case don't call UnlockOpenGL - AMFOpenGLLocker(const AMFOpenGLLocker&); - AMFOpenGLLocker& operator=(const AMFOpenGLLocker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFXVLocker - { - public: - AMFXVLocker() : m_pContext(NULL) - {} - AMFXVLocker(AMFContext* pContext) : m_pContext(NULL) - { - Lock(pContext); - } - ~AMFXVLocker() - { - if(m_pContext != NULL) - { - m_pContext->UnlockXV(); - } - } - void Lock(AMFContext* pContext) - { - if((pContext != NULL) && (pContext->GetXVDevice() != NULL)) - { - m_pContext = pContext; - m_pContext->LockXV(); - } - } - protected: - AMFContext* m_pContext; - private: - AMFXVLocker(const AMFXVLocker&); - AMFXVLocker& operator=(const AMFXVLocker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext::AMFGrallocLocker - { - public: - AMFGrallocLocker() : m_pContext(NULL) - {} - AMFGrallocLocker(AMFContext* pContext) : m_pContext(NULL) - { - Lock(pContext); - } - ~AMFGrallocLocker() - { - if(m_pContext != NULL) - { - m_pContext->UnlockGralloc(); - } - } - void Lock(AMFContext* pContext) - { - if((pContext != NULL) && (pContext->GetGrallocDevice() != NULL)) - { - m_pContext = pContext; - m_pContext->LockGralloc(); - } - } - protected: - AMFContext* m_pContext; - private: - AMFGrallocLocker(const AMFGrallocLocker&); - AMFGrallocLocker& operator=(const AMFGrallocLocker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext1::AMFVulkanLocker - { - public: - AMFVulkanLocker() : m_pContext(NULL) - {} - AMFVulkanLocker(AMFContext1* pContext) : m_pContext(NULL) - { - Lock(pContext); - } - ~AMFVulkanLocker() - { - if(m_pContext != NULL) - { - m_pContext->UnlockVulkan(); - } - } - void Lock(AMFContext1* pContext) - { - if((pContext != NULL) && (pContext->GetVulkanDevice() != NULL)) - { - m_pContext = pContext; - m_pContext->LockVulkan(); - } - } - protected: - AMFContext1* m_pContext; - private: - AMFVulkanLocker(const AMFVulkanLocker&); - AMFVulkanLocker& operator=(const AMFVulkanLocker&); - }; - //---------------------------------------------------------------------------------------------- - class AMFContext2::AMFDX12Locker - { - public: - AMFDX12Locker() : m_Context(NULL) - {} - AMFDX12Locker(AMFContext2* resources) : m_Context(NULL) - { - Lock(resources); - } - ~AMFDX12Locker() - { - if (m_Context != NULL) - { - m_Context->UnlockDX12(); - } - } - void Lock(AMFContext2* resources) - { - if (m_Context != NULL) - { - m_Context->UnlockDX12(); - } - m_Context = resources; - if (m_Context != NULL) - { - m_Context->LockDX12(); - } - } - protected: - AMFContext2* m_Context; - - private: - AMFDX12Locker(const AMFDX12Locker&); - AMFDX12Locker& operator=(const AMFDX12Locker&); - }; - //---------------------------------------------------------------------------------------------- - //---------------------------------------------------------------------------------------------- - //---------------------------------------------------------------------------------------------- -#endif -#if defined(__cplusplus) -} -#endif -enum AMF_CONTEXT_DEVICETYPE_ENUM -{ - AMF_CONTEXT_DEVICE_TYPE_GPU = 0, - AMF_CONTEXT_DEVICE_TYPE_CPU -}; -#define AMF_CONTEXT_DEVICE_TYPE L"AMF_Context_DeviceType" //Value type: amf_int64; Values : AMF_CONTEXT_DEVICE_TYPE_GPU for GPU (default) , AMF_CONTEXT_DEVICE_TYPE_CPU for CPU. -#endif //#ifndef AMF_Context_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/CurrentTime.h b/plugins/obs-ffmpeg/external/AMF/include/core/CurrentTime.h deleted file mode 100644 index dcbc35466a1ad6..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/CurrentTime.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_CurrentTime_h -#define AMF_CurrentTime_h - -#include "Platform.h" -#include "Interface.h" - -namespace amf -{ - // Current time interface class. This interface object can be passed - // as a property to components requiring synchronized timing. The - // implementation is: - // - first call to Get() starts time and returns 0 - // - subsequent calls to Get() returns values relative to 0 - // - Reset() puts time back at 0 at next Get() call - // - class AMF_NO_VTABLE AMFCurrentTime : public AMFInterface - { - public: - virtual amf_pts AMF_STD_CALL Get() = 0; - - virtual void AMF_STD_CALL Reset() = 0; - }; - - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFCurrentTimePtr; - //----------------------------------------------------------------------------------------------} -} -#endif // AMF_CurrentTime_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h b/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h deleted file mode 100644 index 37956b4c5ff666..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/D3D12AMF.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef __D3D12AMF_h__ -#define __D3D12AMF_h__ -#pragma once -#include "Platform.h" -#if defined(_WIN32)||(defined(__linux) && defined(AMF_WSL)) -// syncronization properties set via SetPrivateData() -AMF_WEAK GUID AMFResourceStateGUID = { 0x452da9bf, 0x4ad7, 0x47a5, { 0xa6, 0x9b, 0x96, 0xd3, 0x23, 0x76, 0xf2, 0xf3 } }; // Current resource state value (D3D12_RESOURCE_STATES ), sizeof(UINT), set on ID3D12Resource -AMF_WEAK GUID AMFFenceGUID = { 0x910a7928, 0x57bd, 0x4b04, { 0x91, 0xa3, 0xe7, 0xb8, 0x04, 0x12, 0xcd, 0xa5 } }; // IUnknown (ID3D12Fence), set on ID3D12Resource syncronization fence for this resource -AMF_WEAK GUID AMFFenceValueGUID = { 0x62a693d3, 0xbb4a, 0x46c9, { 0xa5, 0x04, 0x9a, 0x8e, 0x97, 0xbf, 0xf0, 0x56 } }; // The last value to wait on the fence from AMFFenceGUID; sizeof(UINT64), set on ID3D12Fence - -AMF_WEAK GUID AMFFenceD3D11GUID = { 0xdffdf6e0, 0x85e0, 0x4645, { 0x9d, 0x7, 0xe6, 0x4a, 0x19, 0x6b, 0xc9, 0xbf } }; // IUnknown (ID3D11Fence) OpenSharedFence for interop -AMF_WEAK GUID AMFFenceValueD3D11GUID = { 0x86581b71, 0x699f, 0x484b, { 0xb8, 0x75, 0x24, 0xda, 0x49, 0x8a, 0x74, 0xcf } }; // last value to wait on in d3d11 -AMF_WEAK GUID AMFSharedHandleFenceGUID = { 0xca60dcc8, 0x76d1, 0x4088, 0xad, 0xd, 0x97, 0x71, 0xe7, 0xb0, 0x92, 0x49 }; // ID3D12Fence shared handle for D3D11 interop - -#endif - -#endif // __D3D12AMF_h__ \ No newline at end of file diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Data.h b/plugins/obs-ffmpeg/external/AMF/include/core/Data.h deleted file mode 100644 index f32055a5105885..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Data.h +++ /dev/null @@ -1,177 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Data_h -#define AMF_Data_h -#pragma once - -#include "PropertyStorage.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - typedef enum AMF_DATA_TYPE - { - AMF_DATA_BUFFER = 0, - AMF_DATA_SURFACE = 1, - AMF_DATA_AUDIO_BUFFER = 2, - AMF_DATA_USER = 1000, - // all extensions will be AMF_DATA_USER+i - } AMF_DATA_TYPE; - //---------------------------------------------------------------------------------------------- - typedef enum AMF_MEMORY_TYPE - { - AMF_MEMORY_UNKNOWN = 0, - AMF_MEMORY_HOST = 1, - AMF_MEMORY_DX9 = 2, - AMF_MEMORY_DX11 = 3, - AMF_MEMORY_OPENCL = 4, - AMF_MEMORY_OPENGL = 5, - AMF_MEMORY_XV = 6, - AMF_MEMORY_GRALLOC = 7, - AMF_MEMORY_COMPUTE_FOR_DX9 = 8, // deprecated, the same as AMF_MEMORY_OPENCL - AMF_MEMORY_COMPUTE_FOR_DX11 = 9, // deprecated, the same as AMF_MEMORY_OPENCL - AMF_MEMORY_VULKAN = 10, - AMF_MEMORY_DX12 = 11, - } AMF_MEMORY_TYPE; - - //---------------------------------------------------------------------------------------------- - typedef enum AMF_DX_VERSION - { - AMF_DX9 = 90, - AMF_DX9_EX = 91, - AMF_DX11_0 = 110, - AMF_DX11_1 = 111, - AMF_DX12 = 120, - } AMF_DX_VERSION; - - //---------------------------------------------------------------------------------------------- - // AMF_MEMORY_CPU_ACCESS translates to D3D11_CPU_ACCESS_FLAG or VkImageUsageFlags - // bit mask - //---------------------------------------------------------------------------------------------- - typedef enum AMF_MEMORY_CPU_ACCESS_BITS - { // D3D11 D3D12 Vulkan - AMF_MEMORY_CPU_DEFAULT = 0x80000000, // 0 , D3D12_HEAP_TYPE_DEFAULT , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT - AMF_MEMORY_CPU_NONE = 0x00000000, // 0 , D3D12_HEAP_TYPE_DEFAULT , - AMF_MEMORY_CPU_READ = 0x00000001, // D3D11_CPU_ACCESS_READ , D3D12_HEAP_TYPE_READBACK, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT - AMF_MEMORY_CPU_WRITE = 0x00000002, // D3D11_CPU_ACCESS_WRITE, D3D12_HEAP_TYPE_UPLOAD , VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT - AMF_MEMORY_CPU_LOCAL = 0x00000004, // , D3D12_HEAP_TYPE_DEFAULT , VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT - AMF_MEMORY_CPU_PINNED = 0x00000008, // , , VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR - } AMF_MEMORY_CPU_ACCESS_BITS; - typedef amf_flags AMF_MEMORY_CPU_ACCESS; - //---------------------------------------------------------------------------------------------- - // AMFData interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFData : public AMFPropertyStorage - { - public: - AMF_DECLARE_IID(0xa1159bf6, 0x9104, 0x4107, 0x8e, 0xaa, 0xc5, 0x3d, 0x5d, 0xba, 0xc5, 0x11) - - virtual AMF_MEMORY_TYPE AMF_STD_CALL GetMemoryType() = 0; - - virtual AMF_RESULT AMF_STD_CALL Duplicate(AMF_MEMORY_TYPE type, AMFData** ppData) = 0; - virtual AMF_RESULT AMF_STD_CALL Convert(AMF_MEMORY_TYPE type) = 0; // optimal interop if possilble. Copy through host memory if needed - virtual AMF_RESULT AMF_STD_CALL Interop(AMF_MEMORY_TYPE type) = 0; // only optimal interop if possilble. No copy through host memory for GPU objects - - virtual AMF_DATA_TYPE AMF_STD_CALL GetDataType() = 0; - - virtual amf_bool AMF_STD_CALL IsReusable() = 0; - - virtual void AMF_STD_CALL SetPts(amf_pts pts) = 0; - virtual amf_pts AMF_STD_CALL GetPts() = 0; - virtual void AMF_STD_CALL SetDuration(amf_pts duration) = 0; - virtual amf_pts AMF_STD_CALL GetDuration() = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFDataPtr; - //---------------------------------------------------------------------------------------------- - -#else // #if defined(__cplusplus) - typedef struct AMFData AMFData; - AMF_DECLARE_IID(AMFData, 0xa1159bf6, 0x9104, 0x4107, 0x8e, 0xaa, 0xc5, 0x3d, 0x5d, 0xba, 0xc5, 0x11) - - typedef struct AMFDataVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFData* pThis); - amf_long (AMF_STD_CALL *Release)(AMFData* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFData* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFData* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFData* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFData* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFData* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFData* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFData* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFData* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFData* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFData* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFData* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFData interface - - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryType)(AMFData* pThis); - - AMF_RESULT (AMF_STD_CALL *Duplicate)(AMFData* pThis, AMF_MEMORY_TYPE type, AMFData** ppData); - AMF_RESULT (AMF_STD_CALL *Convert)(AMFData* pThis, AMF_MEMORY_TYPE type); // optimal interop if possilble. Copy through host memory if needed - AMF_RESULT (AMF_STD_CALL *Interop)(AMFData* pThis, AMF_MEMORY_TYPE type); // only optimal interop if possilble. No copy through host memory for GPU objects - - AMF_DATA_TYPE (AMF_STD_CALL *GetDataType)(AMFData* pThis); - - amf_bool (AMF_STD_CALL *IsReusable)(AMFData* pThis); - - void (AMF_STD_CALL *SetPts)(AMFData* pThis, amf_pts pts); - amf_pts (AMF_STD_CALL *GetPts)(AMFData* pThis); - void (AMF_STD_CALL *SetDuration)(AMFData* pThis, amf_pts duration); - amf_pts (AMF_STD_CALL *GetDuration)(AMFData* pThis); - - } AMFDataVtbl; - - struct AMFData - { - const AMFDataVtbl *pVtbl; - }; - - -#endif // #if defined(__cplusplus) - -#if defined(__cplusplus) -} // namespace -#endif - -#endif //#ifndef AMF_Data_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Debug.h b/plugins/obs-ffmpeg/external/AMF/include/core/Debug.h deleted file mode 100644 index 40610b01ce3a27..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Debug.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Debug_h -#define AMF_Debug_h -#pragma once - -#include "Platform.h" -#include "Result.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // AMFDebug interface - singleton - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFDebug - { - public: - virtual void AMF_STD_CALL EnablePerformanceMonitor(amf_bool enable) = 0; - virtual amf_bool AMF_STD_CALL PerformanceMonitorEnabled() = 0; - virtual void AMF_STD_CALL AssertsEnable(amf_bool enable) = 0; - virtual amf_bool AMF_STD_CALL AssertsEnabled() = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFDebug AMFDebug; - typedef struct AMFDebugVtbl - { - // AMFDebug interface - void (AMF_STD_CALL *EnablePerformanceMonitor)(AMFDebug* pThis, amf_bool enable); - amf_bool (AMF_STD_CALL *PerformanceMonitorEnabled)(AMFDebug* pThis); - void (AMF_STD_CALL *AssertsEnable)(AMFDebug* pThis, amf_bool enable); - amf_bool (AMF_STD_CALL *AssertsEnabled)(AMFDebug* pThis); - } AMFDebugVtbl; - - struct AMFDebug - { - const AMFDebugVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) -} -#endif - -#endif // AMF_Debug_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Dump.h b/plugins/obs-ffmpeg/external/AMF/include/core/Dump.h deleted file mode 100644 index b8c27446a2a5f8..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Dump.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Dump_h -#define AMF_Dump_h -#pragma once - -#include "Platform.h" -#include "Result.h" -#include "Interface.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFDump : public AMFInterface - { - public: - AMF_DECLARE_IID(0x75366ad4, 0x504c, 0x430b, 0xbb, 0xe2, 0xad, 0x21, 0x82, 0x8, 0xf, 0x72); - - - virtual const wchar_t* AMF_STD_CALL GetDumpBasePath() const = 0; // Get application dump base path - virtual AMF_RESULT AMF_STD_CALL SetDumpBasePath(const wchar_t* path) = 0; // Set application dump base path - - // Enable/disable input and/or output stream dumps - virtual bool AMF_STD_CALL IsInputDumpEnabled() const = 0; - virtual AMF_RESULT AMF_STD_CALL EnableInputDump(bool enabled) = 0; - virtual const wchar_t* AMF_STD_CALL GetInputDumpFullName() const = 0; // Get full name of dump file - - // Enable/disable input and/or output stream dumps - virtual bool AMF_STD_CALL IsOutputDumpEnabled() const = 0; - virtual AMF_RESULT AMF_STD_CALL EnableOutputDump(bool enabled) = 0; - virtual const wchar_t* AMF_STD_CALL GetOutputDumpFullName() const = 0; // Get full name of dump file - - // When enabled, each new application session will create a subfolder with a time stamp in the base path tree (disabled by default) - virtual bool AMF_STD_CALL IsPerSessionDumpEnabled() const = 0; - virtual void AMF_STD_CALL EnablePerSessionDump(bool enabled) = 0; - }; - typedef AMFInterfacePtr_T AMFDumpPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFDump, 0x75366ad4, 0x504c, 0x430b, 0xbb, 0xe2, 0xad, 0x21, 0x82, 0x8, 0xf, 0x72); - typedef struct AMFDump AMFDump; - - typedef struct AMFDumpVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFDump* pThis); - amf_long (AMF_STD_CALL *Release)(AMFDump* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFDump* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFDump interface - const wchar_t* (AMF_STD_CALL *GetDumpBasePath)(AMFDump* pThis) const; // Get application dump base path - AMF_RESULT (AMF_STD_CALL *SetDumpBasePath)(AMFDump* pThis, const wchar_t* path); // Set application dump base path - - // Enable/disable input and/or output stream dumps - bool (AMF_STD_CALL *IsInputDumpEnabled)(AMFDump* pThis) const; - AMF_RESULT (AMF_STD_CALL *EnableInputDump)(AMFDump* pThis, bool enabled); - const wchar_t* (AMF_STD_CALL *GetInputDumpFullName)(AMFDump* pThis) const; // Get full name of dump file - - // Enable/disable input and/or output stream dumps - bool (AMF_STD_CALL *IsOutputDumpEnabled)(AMFDump* pThis) const; - AMF_RESULT (AMF_STD_CALL *EnableOutputDump)(AMFDump* pThis, bool enabled); - const wchar_t* (AMF_STD_CALL *GetOutputDumpFullName)(AMFDump* pThis) const; // Get full name of dump file - - // When enabled, each new application session will create a subfolder with a time stamp in the base path tree (disabled by default) - bool (AMF_STD_CALL *IsPerSessionDumpEnabled)(AMFDump* pThis) const; - void (AMF_STD_CALL *EnablePerSessionDump)(AMFDump* pThis, bool enabled); - - } AMFDumpVtbl; - - struct AMFDump - { - const AMFDumpVtbl *pVtbl; - }; - - -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) -} // namespace -#endif - -#endif //AMF_Dump_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h b/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h deleted file mode 100644 index 8f4795e5ae06ee..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Factory.h +++ /dev/null @@ -1,133 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Factory_h -#define AMF_Factory_h -#pragma once - -#include "Platform.h" -#include "Version.h" -#include "Result.h" -#include "Context.h" -#include "Debug.h" -#include "Trace.h" -#include "Compute.h" - -#include "../components/Component.h" - -#if defined(__cplusplus) - -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // AMFFactory interface - singleton - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFFactory - { - public: - virtual AMF_RESULT AMF_STD_CALL CreateContext(AMFContext** ppContext) = 0; - virtual AMF_RESULT AMF_STD_CALL CreateComponent(AMFContext* pContext, const wchar_t* id, AMFComponent** ppComponent) = 0; - virtual AMF_RESULT AMF_STD_CALL SetCacheFolder(const wchar_t* path) = 0; - virtual const wchar_t* AMF_STD_CALL GetCacheFolder() = 0; - virtual AMF_RESULT AMF_STD_CALL GetDebug(AMFDebug** ppDebug) = 0; - virtual AMF_RESULT AMF_STD_CALL GetTrace(AMFTrace** ppTrace) = 0; - virtual AMF_RESULT AMF_STD_CALL GetPrograms(AMFPrograms** ppPrograms) = 0; - }; -#else - typedef struct AMFFactory AMFFactory; - - typedef struct AMFFactoryVtbl - { - AMF_RESULT (AMF_STD_CALL *CreateContext)(AMFFactory* pThis, AMFContext** ppContext); - AMF_RESULT (AMF_STD_CALL *CreateComponent)(AMFFactory* pThis, AMFContext* pContext, const wchar_t* id, AMFComponent** ppComponent); - AMF_RESULT (AMF_STD_CALL *SetCacheFolder)(AMFFactory* pThis, const wchar_t* path); - const wchar_t* (AMF_STD_CALL *GetCacheFolder)(AMFFactory* pThis); - AMF_RESULT (AMF_STD_CALL *GetDebug)(AMFFactory* pThis, AMFDebug** ppDebug); - AMF_RESULT (AMF_STD_CALL *GetTrace)(AMFFactory* pThis, AMFTrace** ppTrace); - AMF_RESULT (AMF_STD_CALL *GetPrograms)(AMFFactory* pThis, AMFPrograms** ppPrograms); - } AMFFactoryVtbl; - - struct AMFFactory - { - const AMFFactoryVtbl *pVtbl; - }; - -#endif -#if defined(__cplusplus) -} -#endif - -//---------------------------------------------------------------------------------------------- -// DLL entry points -//---------------------------------------------------------------------------------------------- - -#define AMF_INIT_FUNCTION_NAME "AMFInit" -#define AMF_QUERY_VERSION_FUNCTION_NAME "AMFQueryVersion" - -#if defined(__cplusplus) -extern "C" -{ - typedef AMF_RESULT (AMF_CDECL_CALL *AMFInit_Fn)(amf_uint64 version, amf::AMFFactory **ppFactory); - typedef AMF_RESULT (AMF_CDECL_CALL *AMFQueryVersion_Fn)(amf_uint64 *pVersion); -} -#else - typedef AMF_RESULT (AMF_CDECL_CALL *AMFInit_Fn)(amf_uint64 version, AMFFactory **ppFactory); - typedef AMF_RESULT (AMF_CDECL_CALL *AMFQueryVersion_Fn)(amf_uint64 *pVersion); -#endif - -#if defined(_WIN32) - #if defined(_M_AMD64) - #define AMF_DLL_NAME L"amfrt64.dll" - #define AMF_DLL_NAMEA "amfrt64.dll" -#else - #define AMF_DLL_NAME L"amfrt32.dll" - #define AMF_DLL_NAMEA "amfrt32.dll" - #endif -#elif defined(__ANDROID__) && !defined(AMF_ANDROID_ENCODER) - #define AMF_DLL_NAME L"libamf.so" - #define AMF_DLL_NAMEA "libamf.so" -#elif defined(__APPLE__) - #define AMF_DLL_NAME L"libamfrt.framework/libamfrt" - #define AMF_DLL_NAMEA "libamfrt.framework/libamfrt" -#elif defined(__linux__) - #if defined(__x86_64__) || defined(__aarch64__) - #define AMF_DLL_NAME L"libamfrt64.so.1" - #define AMF_DLL_NAMEA "libamfrt64.so.1" - #else - #define AMF_DLL_NAME L"libamfrt32.so.1" - #define AMF_DLL_NAMEA "libamfrt32.so.1" - #endif -#endif -//---------------------------------------------------------------------------------------------- -#endif // AMF_Factory_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Interface.h b/plugins/obs-ffmpeg/external/AMF/include/core/Interface.h deleted file mode 100644 index 9ac7e41165f9c1..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Interface.h +++ /dev/null @@ -1,258 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Interface_h -#define AMF_Interface_h -#pragma once - -#include "Result.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif -#if defined(__cplusplus) - #define AMF_DECLARE_IID(_data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48) \ - static AMF_INLINE const amf::AMFGuid IID() \ - { \ - amf::AMFGuid uid = {_data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48}; \ - return uid; \ - } -#else -#define AMF_DECLARE_IID(name, _data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48) \ - AMF_INLINE static const AMFGuid IID_##name(void) \ - { \ - AMFGuid uid = {_data1, _data2, _data3, _data41, _data42, _data43, _data44, _data45, _data46, _data47, _data48}; \ - return uid; \ - } -#endif - - //------------------------------------------------------------------------ - // AMFInterface interface - base class for all AMF interfaces - //------------------------------------------------------------------------ -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFInterface - { - public: - AMF_DECLARE_IID(0x9d872f34, 0x90dc, 0x4b93, 0xb6, 0xb2, 0x6c, 0xa3, 0x7c, 0x85, 0x25, 0xdb) - - virtual amf_long AMF_STD_CALL Acquire() = 0; - virtual amf_long AMF_STD_CALL Release() = 0; - virtual AMF_RESULT AMF_STD_CALL QueryInterface(const AMFGuid& interfaceID, void** ppInterface) = 0; - }; -#else - AMF_DECLARE_IID(AMFInterface, 0x9d872f34, 0x90dc, 0x4b93, 0xb6, 0xb2, 0x6c, 0xa3, 0x7c, 0x85, 0x25, 0xdb) - typedef struct AMFInterface AMFInterface; - - typedef struct AMFInterfaceVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFInterface* pThis); - amf_long (AMF_STD_CALL *Release)(AMFInterface* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFInterface* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - } AMFInterfaceVtbl; - - struct AMFInterface - { - const AMFInterfaceVtbl *pVtbl; - }; -#endif - //------------------------------------------------------------------------ - // template for AMF smart pointer - //------------------------------------------------------------------------ -#if defined(__cplusplus) - template - class AMFInterfacePtr_T - { - private: - _Interf* m_pInterf; - - void InternalAcquire() - { - if(m_pInterf != NULL) - { - m_pInterf->Acquire(); - } - } - void InternalRelease() - { - if(m_pInterf != NULL) - { - m_pInterf->Release(); - } - } - public: - AMFInterfacePtr_T() : m_pInterf(NULL) - {} - - AMFInterfacePtr_T(const AMFInterfacePtr_T<_Interf>& p) : m_pInterf(p.m_pInterf) - { - InternalAcquire(); - } - - AMFInterfacePtr_T(_Interf* pInterface) : m_pInterf(pInterface) - { - InternalAcquire(); - } - - template - explicit AMFInterfacePtr_T(const AMFInterfacePtr_T<_OtherInterf>& cp) : m_pInterf(NULL) - { - void* pInterf = NULL; - if((cp == NULL) || (cp->QueryInterface(_Interf::IID(), &pInterf) != AMF_OK)) - { - pInterf = NULL; - } - m_pInterf = static_cast<_Interf*>(pInterf); - } - - template - explicit AMFInterfacePtr_T(_OtherInterf* cp) : m_pInterf(NULL) - { - void* pInterf = NULL; - if((cp == NULL) || (cp->QueryInterface(_Interf::IID(), &pInterf) != AMF_OK)) - { - pInterf = NULL; - } - m_pInterf = static_cast<_Interf*>(pInterf); - } - - ~AMFInterfacePtr_T() - { - InternalRelease(); - } - - AMFInterfacePtr_T& operator=(_Interf* pInterface) - { - if(m_pInterf != pInterface) - { - _Interf* pOldInterface = m_pInterf; - m_pInterf = pInterface; - InternalAcquire(); - if(pOldInterface != NULL) - { - pOldInterface->Release(); - } - } - return *this; - } - - AMFInterfacePtr_T& operator=(const AMFInterfacePtr_T<_Interf>& cp) - { - return operator=(cp.m_pInterf); - } - - void Attach(_Interf* pInterface) - { - InternalRelease(); - m_pInterf = pInterface; - } - - _Interf* Detach() - { - _Interf* const pOld = m_pInterf; - m_pInterf = NULL; - return pOld; - } - void Release() - { - InternalRelease(); - m_pInterf = NULL; - } - - operator _Interf*() const - { - return m_pInterf; - } - - _Interf& operator*() const - { - return *m_pInterf; - } - - // Returns the address of the interface pointer contained in this - // class. This is required for initializing from C-style factory function to - // avoid getting an incorrect ref count at the beginning. - - _Interf** operator&() - { - InternalRelease(); - m_pInterf = 0; - return &m_pInterf; - } - - _Interf* operator->() const - { - return m_pInterf; - } - - bool operator==(const AMFInterfacePtr_T<_Interf>& p) - { - return (m_pInterf == p.m_pInterf); - } - - bool operator==(_Interf* p) - { - return (m_pInterf == p); - } - - bool operator!=(const AMFInterfacePtr_T<_Interf>& p) - { - return !(operator==(p)); - } - bool operator!=(_Interf* p) - { - return !(operator==(p)); - } - - _Interf* GetPtr() - { - return m_pInterf; - } - - const _Interf* GetPtr() const - { - return m_pInterf; - } - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFInterfacePtr; - //---------------------------------------------------------------------------------------------- -#endif - -#if defined(__cplusplus) -} -#endif - -#endif //#ifndef AMF_Interface_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Plane.h b/plugins/obs-ffmpeg/external/AMF/include/core/Plane.h deleted file mode 100644 index 6d3e9f946e9c40..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Plane.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Plane_h -#define AMF_Plane_h -#pragma once - -#include "Interface.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //--------------------------------------------------------------------------------------------- - typedef enum AMF_PLANE_TYPE - { - AMF_PLANE_UNKNOWN = 0, - AMF_PLANE_PACKED = 1, // for all packed formats: BGRA, YUY2, etc - AMF_PLANE_Y = 2, - AMF_PLANE_UV = 3, - AMF_PLANE_U = 4, - AMF_PLANE_V = 5, - } AMF_PLANE_TYPE; - //--------------------------------------------------------------------------------------------- - // AMFPlane interface - //--------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFPlane : public AMFInterface - { - public: - AMF_DECLARE_IID(0xbede1aa6, 0xd8fa, 0x4625, 0x94, 0x65, 0x6c, 0x82, 0xc4, 0x37, 0x71, 0x2e) - - virtual AMF_PLANE_TYPE AMF_STD_CALL GetType() = 0; - virtual void* AMF_STD_CALL GetNative() = 0; - virtual amf_int32 AMF_STD_CALL GetPixelSizeInBytes() = 0; - virtual amf_int32 AMF_STD_CALL GetOffsetX() = 0; - virtual amf_int32 AMF_STD_CALL GetOffsetY() = 0; - virtual amf_int32 AMF_STD_CALL GetWidth() = 0; - virtual amf_int32 AMF_STD_CALL GetHeight() = 0; - virtual amf_int32 AMF_STD_CALL GetHPitch() = 0; - virtual amf_int32 AMF_STD_CALL GetVPitch() = 0; - virtual bool AMF_STD_CALL IsTiled() = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFPlanePtr; - //---------------------------------------------------------------------------------------------- -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFPlane, 0xbede1aa6, 0xd8fa, 0x4625, 0x94, 0x65, 0x6c, 0x82, 0xc4, 0x37, 0x71, 0x2e) - typedef struct AMFPlane AMFPlane; - typedef struct AMFPlaneVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFPlane* pThis); - amf_long (AMF_STD_CALL *Release)(AMFPlane* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFPlane* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPlane interface - AMF_PLANE_TYPE (AMF_STD_CALL *GetType)(AMFPlane* pThis); - void* (AMF_STD_CALL *GetNative)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetPixelSizeInBytes)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetOffsetX)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetOffsetY)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetWidth)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetHeight)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetHPitch)(AMFPlane* pThis); - amf_int32 (AMF_STD_CALL *GetVPitch)(AMFPlane* pThis); - amf_bool (AMF_STD_CALL *IsTiled)(AMFPlane* pThis); - - } AMFPlaneVtbl; - - struct AMFPlane - { - const AMFPlaneVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - -#if defined(__cplusplus) -} // namespace amf -#endif - -#endif //#ifndef AMF_Plane_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h b/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h deleted file mode 100644 index 3ead3aed4e7e53..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Platform.h +++ /dev/null @@ -1,546 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Platform_h -#define AMF_Platform_h -#pragma once - -//---------------------------------------------------------------------------------------------- -// export declaration -//---------------------------------------------------------------------------------------------- -#if defined(_WIN32) - #if defined(AMF_CORE_STATIC) - #define AMF_CORE_LINK - #else - #if defined(AMF_CORE_EXPORTS) - #define AMF_CORE_LINK __declspec(dllexport) - #else - #define AMF_CORE_LINK __declspec(dllimport) - #endif - #endif -#elif defined(__linux) - #if defined(AMF_CORE_EXPORTS) - #define AMF_CORE_LINK __attribute__((visibility("default"))) - #else - #define AMF_CORE_LINK - #endif -#else - #define AMF_CORE_LINK -#endif // #ifdef _WIN32 - -#define AMF_MACRO_STRING2(x) #x -#define AMF_MACRO_STRING(x) AMF_MACRO_STRING2(x) - -#define AMF_TODO(_todo) (__FILE__ "(" AMF_MACRO_STRING(__LINE__) "): TODO: "_todo) - - - #if defined(__GNUC__) || defined(__clang__) - #define AMF_ALIGN(n) __attribute__((aligned(n))) - #elif defined(_MSC_VER) || defined(__INTEL_COMPILER) - #define AMF_ALIGN(n) __declspec(align(n)) - #else - #define AMF_ALIGN(n) -// #error Need to define AMF_ALIGN - #endif - -#ifndef _WIN32 -typedef signed int HRESULT; -#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) -#define FAILED(hr) (((HRESULT)(hr)) < 0) -#endif - -#include -#include -#include - -#if defined(_WIN32) - - -#ifndef NOMINMAX -#define NOMINMAX -#endif - #define AMF_STD_CALL __stdcall - #define AMF_CDECL_CALL __cdecl - #define AMF_FAST_CALL __fastcall -#if defined(__GNUC__) || defined(__clang__) - #define AMF_INLINE inline - #define AMF_FORCEINLINE inline -#else - #define AMF_INLINE __inline - #define AMF_FORCEINLINE __forceinline -#endif - #define AMF_NO_VTABLE __declspec(novtable) - - #define AMFPRId64 "I64d" - #define LPRId64 L"I64d" - - #define AMFPRIud64 "Iu64d" - #define LPRIud64 L"Iu64d" - - #define AMFPRIx64 "I64x" - #define LPRIx64 L"I64x" - -#else // !WIN32 - Linux and Mac - - #define AMF_STD_CALL - #define AMF_CDECL_CALL - #define AMF_FAST_CALL -#if defined(__GNUC__) || defined(__clang__) - #define AMF_INLINE inline - #define AMF_FORCEINLINE inline -#else - #define AMF_INLINE __inline__ - #define AMF_FORCEINLINE __inline__ -#endif - #define AMF_NO_VTABLE - - #if !defined(AMFPRId64) - #define AMFPRId64 "lld" - #define LPRId64 L"lld" - - #define AMFPRIud64 "ulld" - #define LPRIud64 L"ulld" - - #define AMFPRIx64 "llx" - #define LPRIx64 L"llx" - #endif - -#endif // WIN32 - - -#if defined(_WIN32) -#define AMF_WEAK __declspec( selectany ) -#elif defined (__GNUC__) || defined (__GCC__) || defined(__clang__)//GCC or CLANG -#define AMF_WEAK __attribute__((weak)) -#endif - -#define amf_countof(x) (sizeof(x) / sizeof(x[0])) - -//------------------------------------------------------------------------------------------------- -// basic data types -//------------------------------------------------------------------------------------------------- -typedef int64_t amf_int64; -typedef int32_t amf_int32; -typedef int16_t amf_int16; -typedef int8_t amf_int8; - -typedef uint64_t amf_uint64; -typedef uint32_t amf_uint32; -typedef uint16_t amf_uint16; -typedef uint8_t amf_uint8; -typedef size_t amf_size; - -typedef void* amf_handle; -typedef double amf_double; -typedef float amf_float; - -typedef void amf_void; - -#if defined(__cplusplus) -typedef bool amf_bool; -#else -typedef amf_uint8 amf_bool; -#define true 1 -#define false 0 -#endif - -typedef long amf_long; -typedef int amf_int; -typedef unsigned long amf_ulong; -typedef unsigned int amf_uint; - -typedef amf_int64 amf_pts; // in 100 nanosecs - -typedef amf_uint32 amf_flags; - -#define AMF_SECOND 10000000L // 1 second in 100 nanoseconds -#define AMF_MILLISECOND (AMF_SECOND / 1000) -#define AMF_MICROSECOND (AMF_MILLISECOND / 1000) - -#define AMF_MIN(a, b) ((a) < (b) ? (a) : (b)) -#define AMF_MAX(a, b) ((a) > (b) ? (a) : (b)) -#define AMF_CLAMP(x, a, b) (AMF_MIN(AMF_MAX(x, a), b)) - -#define AMF_BITS_PER_BYTE 8 - -#if defined(_WIN32) - #define PATH_SEPARATOR_WSTR L"\\" - #define PATH_SEPARATOR_WCHAR L'\\' -#elif defined(__linux) || defined(__APPLE__) // Linux & Apple - #define PATH_SEPARATOR_WSTR L"/" - #define PATH_SEPARATOR_WCHAR L'/' -#endif - -typedef struct AMFRect -{ - amf_int32 left; - amf_int32 top; - amf_int32 right; - amf_int32 bottom; -#if defined(__cplusplus) - bool operator==(const AMFRect& other) const - { - return left == other.left && top == other.top && right == other.right && bottom == other.bottom; - } - AMF_INLINE bool operator!=(const AMFRect& other) const { return !operator==(other); } - amf_int32 Width() const { return right - left; } - amf_int32 Height() const { return bottom - top; } -#endif -} AMFRect; - -static AMF_INLINE struct AMFRect AMFConstructRect(amf_int32 left, amf_int32 top, amf_int32 right, amf_int32 bottom) -{ - struct AMFRect object = {left, top, right, bottom}; - return object; -} - -typedef struct AMFSize -{ - amf_int32 width; - amf_int32 height; -#if defined(__cplusplus) - bool operator==(const AMFSize& other) const - { - return width == other.width && height == other.height; - } - AMF_INLINE bool operator!=(const AMFSize& other) const { return !operator==(other); } -#endif -} AMFSize; - -static AMF_INLINE struct AMFSize AMFConstructSize(amf_int32 width, amf_int32 height) -{ - struct AMFSize object = {width, height}; - return object; -} - -typedef struct AMFPoint -{ - amf_int32 x; - amf_int32 y; -#if defined(__cplusplus) - bool operator==(const AMFPoint& other) const - { - return x == other.x && y == other.y; - } - AMF_INLINE bool operator!=(const AMFPoint& other) const { return !operator==(other); } -#endif -} AMFPoint; - -static AMF_INLINE struct AMFPoint AMFConstructPoint(amf_int32 x, amf_int32 y) -{ - struct AMFPoint object = { x, y }; - return object; -} - -typedef struct AMFFloatPoint2D -{ - amf_float x; - amf_float y; -#if defined(__cplusplus) - bool operator==(const AMFFloatPoint2D& other) const - { - return x == other.x && y == other.y; - } - AMF_INLINE bool operator!=(const AMFFloatPoint2D& other) const { return !operator==(other); } -#endif -} AMFFloatPoint2D; - -static AMF_INLINE struct AMFFloatPoint2D AMFConstructFloatPoint2D(amf_float x, amf_float y) -{ - struct AMFFloatPoint2D object = {x, y}; - return object; -} -typedef struct AMFFloatSize -{ - amf_float width; - amf_float height; -#if defined(__cplusplus) - bool operator==(const AMFFloatSize& other) const - { - return width == other.width && height == other.height; - } - AMF_INLINE bool operator!=(const AMFFloatSize& other) const { return !operator==(other); } -#endif -} AMFFloatSize; - -static AMF_INLINE struct AMFFloatSize AMFConstructFloatSize(amf_float w, amf_float h) -{ - struct AMFFloatSize object = { w, h }; - return object; -} - - -typedef struct AMFFloatPoint3D -{ - amf_float x; - amf_float y; - amf_float z; -#if defined(__cplusplus) - bool operator==(const AMFFloatPoint3D& other) const - { - return x == other.x && y == other.y && z == other.z; - } - AMF_INLINE bool operator!=(const AMFFloatPoint3D& other) const { return !operator==(other); } -#endif -} AMFFloatPoint3D; - -static AMF_INLINE struct AMFFloatPoint3D AMFConstructFloatPoint3D(amf_float x, amf_float y, amf_float z) -{ - struct AMFFloatPoint3D object = { x, y, z }; - return object; -} - -typedef struct AMFFloatVector4D -{ - amf_float x; - amf_float y; - amf_float z; - amf_float w; -#if defined(__cplusplus) - bool operator==(const AMFFloatVector4D& other) const - { - return x == other.x && y == other.y && z == other.z && w == other.w; - } - AMF_INLINE bool operator!=(const AMFFloatVector4D& other) const { return !operator==(other); } -#endif -} AMFFloatVector4D; - -static AMF_INLINE struct AMFFloatVector4D AMFConstructFloatVector4D(amf_float x, amf_float y, amf_float z, amf_float w) -{ - struct AMFFloatVector4D object = { x, y, z, w }; - return object; -} - - -typedef struct AMFRate -{ - amf_uint32 num; - amf_uint32 den; -#if defined(__cplusplus) - bool operator==(const AMFRate& other) const - { - return num == other.num && den == other.den; - } - AMF_INLINE bool operator!=(const AMFRate& other) const { return !operator==(other); } -#endif -} AMFRate; - -static AMF_INLINE struct AMFRate AMFConstructRate(amf_uint32 num, amf_uint32 den) -{ - struct AMFRate object = {num, den}; - return object; -} - -typedef struct AMFRatio -{ - amf_uint32 num; - amf_uint32 den; -#if defined(__cplusplus) - bool operator==(const AMFRatio& other) const - { - return num == other.num && den == other.den; - } - AMF_INLINE bool operator!=(const AMFRatio& other) const { return !operator==(other); } -#endif -} AMFRatio; - -static AMF_INLINE struct AMFRatio AMFConstructRatio(amf_uint32 num, amf_uint32 den) -{ - struct AMFRatio object = {num, den}; - return object; -} - -#pragma pack(push, 1) -#if defined(_MSC_VER) - #pragma warning( push ) - #pragma warning(disable : 4200) - #pragma warning(disable : 4201) -#endif - -typedef struct AMFColor -{ - union - { - struct - { - amf_uint8 r; - amf_uint8 g; - amf_uint8 b; - amf_uint8 a; - }; - amf_uint32 rgba; - }; -#if defined(__cplusplus) - bool operator==(const AMFColor& other) const - { - return r == other.r && g == other.g && b == other.b && a == other.a; - } - AMF_INLINE bool operator!=(const AMFColor& other) const { return !operator==(other); } -#endif -} AMFColor; -#if defined(_MSC_VER) - #pragma warning( pop ) -#endif -#pragma pack(pop) - - -static AMF_INLINE struct AMFColor AMFConstructColor(amf_uint8 r, amf_uint8 g, amf_uint8 b, amf_uint8 a) -{ - struct AMFColor object; - object.r = r; - object.g = g; - object.b = b; - object.a = a; - return object; -} - -#if defined(_WIN32) - #include - - #if defined(__cplusplus) - extern "C" - { - #endif - // allocator - static AMF_INLINE void* AMF_CDECL_CALL amf_variant_alloc(amf_size count) - { - return CoTaskMemAlloc(count); - } - static AMF_INLINE void AMF_CDECL_CALL amf_variant_free(void* ptr) - { - CoTaskMemFree(ptr); - } - #if defined(__cplusplus) - } - #endif - -#else // defined(_WIN32) - #include - #if defined(__cplusplus) - extern "C" - { - #endif - // allocator - static AMF_INLINE void* AMF_CDECL_CALL amf_variant_alloc(amf_size count) - { - return malloc(count); - } - static AMF_INLINE void AMF_CDECL_CALL amf_variant_free(void* ptr) - { - free(ptr); - } - #if defined(__cplusplus) - } - #endif -#endif // defined(_WIN32) - - -#if defined(__cplusplus) -namespace amf -{ -#endif - typedef struct AMFGuid - { - amf_uint32 data1; - amf_uint16 data2; - amf_uint16 data3; - amf_uint8 data41; - amf_uint8 data42; - amf_uint8 data43; - amf_uint8 data44; - amf_uint8 data45; - amf_uint8 data46; - amf_uint8 data47; - amf_uint8 data48; -#if defined(__cplusplus) - AMFGuid(amf_uint32 _data1, amf_uint16 _data2, amf_uint16 _data3, - amf_uint8 _data41, amf_uint8 _data42, amf_uint8 _data43, amf_uint8 _data44, - amf_uint8 _data45, amf_uint8 _data46, amf_uint8 _data47, amf_uint8 _data48) - : data1 (_data1), - data2 (_data2), - data3 (_data3), - data41(_data41), - data42(_data42), - data43(_data43), - data44(_data44), - data45(_data45), - data46(_data46), - data47(_data47), - data48(_data48) - {} - - bool operator==(const AMFGuid& other) const - { - return - data1 == other.data1 && - data2 == other.data2 && - data3 == other.data3 && - data41 == other.data41 && - data42 == other.data42 && - data43 == other.data43 && - data44 == other.data44 && - data45 == other.data45 && - data46 == other.data46 && - data47 == other.data47 && - data48 == other.data48; - } - AMF_INLINE bool operator!=(const AMFGuid& other) const { return !operator==(other); } -#endif - } AMFGuid; - -#if defined(__cplusplus) - static AMF_INLINE bool AMFCompareGUIDs(const AMFGuid& guid1, const AMFGuid& guid2) - { - return guid1 == guid2; - } -#else - static AMF_INLINE amf_bool AMFCompareGUIDs(const struct AMFGuid guid1, const struct AMFGuid guid2) - { - return memcmp(&guid1, &guid2, sizeof(guid1)) == 0; - } -#endif -#if defined(__cplusplus) -} -#endif - -#if defined(__APPLE__) -//#include - -#define media_status_t int -#define ANativeWindow void -#define JNIEnv void -#define jobject int -#define JavaVM void - -#endif - -#endif //#ifndef AMF_Platform_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorage.h b/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorage.h deleted file mode 100644 index 9fb87bec0273de..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorage.h +++ /dev/null @@ -1,275 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_PropertyStorage_h -#define AMF_PropertyStorage_h -#pragma once - -#include "Variant.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // AMFPropertyStorageObserver interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - - class AMF_NO_VTABLE AMFPropertyStorageObserver - { - public: - virtual void AMF_STD_CALL OnPropertyChanged(const wchar_t* name) = 0; - }; -#else //#if defined(__cplusplus) - typedef struct AMFPropertyStorageObserver AMFPropertyStorageObserver; - typedef struct AMFPropertyStorageObserverVtbl - { - void (AMF_STD_CALL *OnPropertyChanged)(AMFPropertyStorageObserver *pThis, const wchar_t* name); - } AMFPropertyStorageObserverVtbl; - - struct AMFPropertyStorageObserver - { - const AMFPropertyStorageObserverVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMFPropertyStorage interface - //---------------------------------------------------------------------------------------------- - class AMF_NO_VTABLE AMFPropertyStorage : public AMFInterface - { - public: - AMF_DECLARE_IID(0xc7cec05b, 0xcfb9, 0x48af, 0xac, 0xe3, 0xf6, 0x8d, 0xf8, 0x39, 0x5f, 0xe3) - - virtual AMF_RESULT AMF_STD_CALL SetProperty(const wchar_t* name, AMFVariantStruct value) = 0; - virtual AMF_RESULT AMF_STD_CALL GetProperty(const wchar_t* name, AMFVariantStruct* pValue) const = 0; - - virtual amf_bool AMF_STD_CALL HasProperty(const wchar_t* name) const = 0; - virtual amf_size AMF_STD_CALL GetPropertyCount() const = 0; - virtual AMF_RESULT AMF_STD_CALL GetPropertyAt(amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue) const = 0; - - virtual AMF_RESULT AMF_STD_CALL Clear() = 0; - virtual AMF_RESULT AMF_STD_CALL AddTo(AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep) const= 0; - virtual AMF_RESULT AMF_STD_CALL CopyTo(AMFPropertyStorage* pDest, amf_bool deep) const = 0; - - virtual void AMF_STD_CALL AddObserver(AMFPropertyStorageObserver* pObserver) = 0; - virtual void AMF_STD_CALL RemoveObserver(AMFPropertyStorageObserver* pObserver) = 0; - - template - AMF_RESULT AMF_STD_CALL SetProperty(const wchar_t* name, const _T& value); - template - AMF_RESULT AMF_STD_CALL GetProperty(const wchar_t* name, _T* pValue) const; - template - AMF_RESULT AMF_STD_CALL GetPropertyString(const wchar_t* name, _T* pValue) const; - template - AMF_RESULT AMF_STD_CALL GetPropertyWString(const wchar_t* name, _T* pValue) const; - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFPropertyStoragePtr; - //---------------------------------------------------------------------------------------------- - -#else // #if defined(__cplusplus) - typedef struct AMFPropertyStorage AMFPropertyStorage; - AMF_DECLARE_IID(AMFPropertyStorage, 0xc7cec05b, 0xcfb9, 0x48af, 0xac, 0xe3, 0xf6, 0x8d, 0xf8, 0x39, 0x5f, 0xe3) - - typedef struct AMFPropertyStorageVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFPropertyStorage* pThis); - amf_long (AMF_STD_CALL *Release)(AMFPropertyStorage* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFPropertyStorage* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFPropertyStorage* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFPropertyStorage* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFPropertyStorage* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFPropertyStorage* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFPropertyStorage* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFPropertyStorage* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFPropertyStorage* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFPropertyStorage* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFPropertyStorage* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFPropertyStorage* pThis, AMFPropertyStorageObserver* pObserver); - - } AMFPropertyStorageVtbl; - - struct AMFPropertyStorage - { - const AMFPropertyStorageVtbl *pVtbl; - }; - - #define AMF_ASSIGN_PROPERTY_DATA(res, varType, pThis, name, val ) \ - { \ - AMFVariantStruct var = {0}; \ - AMFVariantAssign##varType(&var, val); \ - res = pThis->pVtbl->SetProperty(pThis, name, var ); \ - } - - #define AMF_QUERY_INTERFACE(res, from, InterfaceTypeTo, to) \ - { \ - AMFGuid guid_##InterfaceTypeTo = IID_##InterfaceTypeTo(); \ - res = from->pVtbl->QueryInterface(from, &guid_##InterfaceTypeTo, (void**)&to); \ - } - - #define AMF_ASSIGN_PROPERTY_INTERFACE(res, pThis, name, val) \ - { \ - AMFInterface *amf_interface; \ - AMFVariantStruct var; \ - res = AMFVariantInit(&var); \ - if (res == AMF_OK) \ - { \ - AMF_QUERY_INTERFACE(res, val, AMFInterface, amf_interface)\ - if (res == AMF_OK) \ - { \ - res = AMFVariantAssignInterface(&var, amf_interface); \ - amf_interface->pVtbl->Release(amf_interface); \ - if (res == AMF_OK) \ - { \ - res = pThis->pVtbl->SetProperty(pThis, name, var); \ - } \ - } \ - AMFVariantClear(&var); \ - } \ - } - - #define AMF_GET_PROPERTY_INTERFACE(res, pThis, name, TargetType, val) \ - { \ - AMFVariantStruct var; \ - res = AMFVariantInit(&var); \ - if (res != AMF_OK) \ - { \ - res = pThis->pVtbl->GetProperty(pThis, name, &var); \ - if (res == AMF_OK) \ - { \ - if (var.type == AMF_VARIANT_INTERFACE && AMFVariantInterface(&var)) \ - { \ - AMF_QUERY_INTERFACE(res, AMFVariantInterface(&var), TargetType, val); \ - } \ - else \ - { \ - res = AMF_INVALID_DATA_TYPE; \ - } \ - } \ - } \ - AMFVariantClear(&var); \ - } - - #define AMF_ASSIGN_PROPERTY_TYPE(res, varType, dataType , pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, varType, pThis, name, (dataType)val) - - #define AMF_ASSIGN_PROPERTY_INT64(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_TYPE(res, Int64, amf_int64, pThis, name, val) - #define AMF_ASSIGN_PROPERTY_DOUBLE(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_TYPE(res, Double, amf_double, pThis, name, val) - #define AMF_ASSIGN_PROPERTY_BOOL(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_TYPE(res, Bool, amf_bool, pThis, name, val) - #define AMF_ASSIGN_PROPERTY_RECT(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Rect, pThis, name, &val) - #define AMF_ASSIGN_PROPERTY_SIZE(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Size, pThis, name, &val) - #define AMF_ASSIGN_PROPERTY_POINT(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Point, pThis, name, &val) - #define AMF_ASSIGN_PROPERTY_RATE(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Rate, pThis, name, &val) - #define AMF_ASSIGN_PROPERTY_RATIO(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Ratio, pThis, name, &val) - #define AMF_ASSIGN_PROPERTY_COLOR(res, pThis, name, val ) AMF_ASSIGN_PROPERTY_DATA(res, Color, pThis, name, &val) - -#endif // #if defined(__cplusplus) - - -#if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // template methods implementations - //---------------------------------------------------------------------------------------------- - template inline - AMF_RESULT AMF_STD_CALL AMFPropertyStorage::SetProperty(const wchar_t* name, const _T& value) - { - AMF_RESULT err = SetProperty(name, static_cast(AMFVariant(value))); - return err; - } - //---------------------------------------------------------------------------------------------- - template inline - AMF_RESULT AMF_STD_CALL AMFPropertyStorage::GetProperty(const wchar_t* name, _T* pValue) const - { - AMFVariant var; - AMF_RESULT err = GetProperty(name, static_cast(&var)); - if(err == AMF_OK) - { - *pValue = static_cast<_T>(var); - } - return err; - } - //---------------------------------------------------------------------------------------------- - template inline - AMF_RESULT AMF_STD_CALL AMFPropertyStorage::GetPropertyString(const wchar_t* name, _T* pValue) const - { - AMFVariant var; - AMF_RESULT err = GetProperty(name, static_cast(&var)); - if(err == AMF_OK) - { - *pValue = var.ToString().c_str(); - } - return err; - } - //---------------------------------------------------------------------------------------------- - template inline - AMF_RESULT AMF_STD_CALL AMFPropertyStorage::GetPropertyWString(const wchar_t* name, _T* pValue) const - { - AMFVariant var; - AMF_RESULT err = GetProperty(name, static_cast(&var)); - if(err == AMF_OK) - { - *pValue = var.ToWString().c_str(); - } - return err; - } - //---------------------------------------------------------------------------------------------- - template<> inline - AMF_RESULT AMF_STD_CALL AMFPropertyStorage::GetProperty(const wchar_t* name, - AMFInterface** ppValue) const - { - AMFVariant var; - AMF_RESULT err = GetProperty(name, static_cast(&var)); - if(err == AMF_OK) - { - *ppValue = static_cast(var); - } - if(*ppValue) - { - (*ppValue)->Acquire(); - } - return err; - } -#endif // #if defined(__cplusplus) - -#if defined(__cplusplus) -} //namespace amf -#endif - -#endif // #ifndef AMF_PropertyStorage_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorageEx.h b/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorageEx.h deleted file mode 100644 index 94ccd1ea9b4d92..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/PropertyStorageEx.h +++ /dev/null @@ -1,207 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_PropertyStorageEx_h -#define AMF_PropertyStorageEx_h -#pragma once - -#include "PropertyStorage.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - typedef enum AMF_PROPERTY_CONTENT_ENUM - { - AMF_PROPERTY_CONTENT_DEFAULT = 0, - AMF_PROPERTY_CONTENT_XML, // m_eType is AMF_VARIANT_STRING - - AMF_PROPERTY_CONTENT_FILE_OPEN_PATH, // m_eType AMF_VARIANT_WSTRING - AMF_PROPERTY_CONTENT_FILE_SAVE_PATH, // m_eType AMF_VARIANT_WSTRING - - AMF_PROPERTY_CONTENT_INTEGER_ARRAY, // m_eType AMF_VARIANT_INTERFACE - AMF_PROPERTY_CONTENT_FLOAT_ARRAY // m_eType AMF_VARIANT_INTERFACE - } AMF_PROPERTY_CONTENT_ENUM; - //---------------------------------------------------------------------------------------------- - typedef enum AMF_PROPERTY_ACCESS_TYPE - { - AMF_PROPERTY_ACCESS_PRIVATE = 0, - AMF_PROPERTY_ACCESS_READ = 0x1, - AMF_PROPERTY_ACCESS_WRITE = 0x2, - AMF_PROPERTY_ACCESS_READ_WRITE = (AMF_PROPERTY_ACCESS_READ | AMF_PROPERTY_ACCESS_WRITE), - AMF_PROPERTY_ACCESS_WRITE_RUNTIME = 0x4, - AMF_PROPERTY_ACCESS_FULL = 0xFF, - AMF_PROPERTY_ACCESS_NON_PERSISTANT = 0x4000, - AMF_PROPERTY_ACCESS_NON_PERSISTANT_READ = (AMF_PROPERTY_ACCESS_NON_PERSISTANT | AMF_PROPERTY_ACCESS_READ), - AMF_PROPERTY_ACCESS_NON_PERSISTANT_READ_WRITE = (AMF_PROPERTY_ACCESS_NON_PERSISTANT | AMF_PROPERTY_ACCESS_READ_WRITE), - AMF_PROPERTY_ACCESS_NON_PERSISTANT_FULL = (AMF_PROPERTY_ACCESS_NON_PERSISTANT | AMF_PROPERTY_ACCESS_FULL), - AMF_PROPERTY_ACCESS_INVALID = 0x8000 - } AMF_PROPERTY_ACCESS_TYPE; - - //---------------------------------------------------------------------------------------------- - typedef struct AMFEnumDescriptionEntry - { - amf_int value; - const wchar_t* name; - } AMFEnumDescriptionEntry; - //---------------------------------------------------------------------------------------------- - typedef amf_uint32 AMF_PROPERTY_CONTENT_TYPE; - - typedef struct AMFPropertyInfo - { - const wchar_t* name; - const wchar_t* desc; - AMF_VARIANT_TYPE type; - AMF_PROPERTY_CONTENT_TYPE contentType; - - AMFVariantStruct defaultValue; - AMFVariantStruct minValue; - AMFVariantStruct maxValue; - AMF_PROPERTY_ACCESS_TYPE accessType; - const AMFEnumDescriptionEntry* pEnumDescription; - -#if defined(__cplusplus) - AMFPropertyInfo() : - name(NULL), - desc(NULL), - type(), - contentType(), - defaultValue(), - minValue(), - maxValue(), - accessType(AMF_PROPERTY_ACCESS_FULL), - pEnumDescription(NULL) - {} - AMFPropertyInfo(const AMFPropertyInfo& propery) : name(propery.name), - desc(propery.desc), - type(propery.type), - contentType(propery.contentType), - defaultValue(propery.defaultValue), - minValue(propery.minValue), - maxValue(propery.maxValue), - accessType(propery.accessType), - pEnumDescription(propery.pEnumDescription) - {} - virtual ~AMFPropertyInfo(){} - - amf_bool AMF_STD_CALL AllowedRead() const - { - return (accessType & AMF_PROPERTY_ACCESS_READ) != 0; - } - amf_bool AMF_STD_CALL AllowedWrite() const - { - return (accessType & AMF_PROPERTY_ACCESS_WRITE) != 0; - } - amf_bool AMF_STD_CALL AllowedChangeInRuntime() const - { - return (accessType & AMF_PROPERTY_ACCESS_WRITE_RUNTIME) != 0; - } - - AMFPropertyInfo& operator=(const AMFPropertyInfo& propery) - { - name = propery.name; - desc = propery.desc; - type = propery.type; - contentType = propery.contentType; - defaultValue = propery.defaultValue; - minValue = propery.minValue; - maxValue = propery.maxValue; - accessType = propery.accessType; - pEnumDescription = propery.pEnumDescription; - - return *this; - } -#endif // #if defined(__cplusplus) - } AMFPropertyInfo; - //---------------------------------------------------------------------------------------------- - // AMFPropertyStorageEx interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFPropertyStorageEx : public AMFPropertyStorage - { - public: - AMF_DECLARE_IID(0x16b8958d, 0xe943, 0x4a33, 0xa3, 0x5a, 0x88, 0x5a, 0xd8, 0x28, 0xf2, 0x67) - - virtual amf_size AMF_STD_CALL GetPropertiesInfoCount() const = 0; - virtual AMF_RESULT AMF_STD_CALL GetPropertyInfo(amf_size index, const AMFPropertyInfo** ppInfo) const = 0; - virtual AMF_RESULT AMF_STD_CALL GetPropertyInfo(const wchar_t* name, const AMFPropertyInfo** ppInfo) const = 0; - virtual AMF_RESULT AMF_STD_CALL ValidateProperty(const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated) const = 0; - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFPropertyStorageExPtr; -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFPropertyStorageEx, 0x16b8958d, 0xe943, 0x4a33, 0xa3, 0x5a, 0x88, 0x5a, 0xd8, 0x28, 0xf2, 0x67) - typedef struct AMFPropertyStorageEx AMFPropertyStorageEx; - - typedef struct AMFPropertyStorageExVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFPropertyStorageEx* pThis); - amf_long (AMF_STD_CALL *Release)(AMFPropertyStorageEx* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFPropertyStorageEx* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFPropertyStorageEx* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFPropertyStorageEx* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFPropertyStorageEx* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFPropertyStorageEx* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFPropertyStorageEx* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFPropertyStorageEx* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFPropertyStorageEx* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFPropertyStorageEx* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFPropertyStorageEx* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFPropertyStorageEx* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFPropertyStorageEx interface - - amf_size (AMF_STD_CALL *GetPropertiesInfoCount)(AMFPropertyStorageEx* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfoAt)(AMFPropertyStorageEx* pThis, amf_size index, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *GetPropertyInfo)(AMFPropertyStorageEx* pThis, const wchar_t* name, const AMFPropertyInfo** ppInfo); - AMF_RESULT (AMF_STD_CALL *ValidateProperty)(AMFPropertyStorageEx* pThis, const wchar_t* name, AMFVariantStruct value, AMFVariantStruct* pOutValidated); - - } AMFPropertyStorageExVtbl; - - struct AMFPropertyStorageEx - { - const AMFPropertyStorageExVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) -} //namespace amf -#endif - - -#endif //#ifndef AMF_PropertyStorageEx_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Result.h b/plugins/obs-ffmpeg/external/AMF/include/core/Result.h deleted file mode 100644 index cf84bed730d4e9..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Result.h +++ /dev/null @@ -1,127 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Result_h -#define AMF_Result_h -#pragma once - -#include "Platform.h" - -//---------------------------------------------------------------------------------------------- -// result codes -//---------------------------------------------------------------------------------------------- - -typedef enum AMF_RESULT -{ - AMF_OK = 0, - AMF_FAIL , - -// common errors - AMF_UNEXPECTED , - - AMF_ACCESS_DENIED , - AMF_INVALID_ARG , - AMF_OUT_OF_RANGE , - - AMF_OUT_OF_MEMORY , - AMF_INVALID_POINTER , - - AMF_NO_INTERFACE , - AMF_NOT_IMPLEMENTED , - AMF_NOT_SUPPORTED , - AMF_NOT_FOUND , - - AMF_ALREADY_INITIALIZED , - AMF_NOT_INITIALIZED , - - AMF_INVALID_FORMAT ,// invalid data format - - AMF_WRONG_STATE , - AMF_FILE_NOT_OPEN ,// cannot open file - -// device common codes - AMF_NO_DEVICE , - -// device directx - AMF_DIRECTX_FAILED , -// device opencl - AMF_OPENCL_FAILED , -// device opengl - AMF_GLX_FAILED ,//failed to use GLX -// device XV - AMF_XV_FAILED , //failed to use Xv extension -// device alsa - AMF_ALSA_FAILED ,//failed to use ALSA - -// component common codes - - //result codes - AMF_EOF , - AMF_REPEAT , - AMF_INPUT_FULL ,//returned by AMFComponent::SubmitInput if input queue is full - AMF_RESOLUTION_CHANGED ,//resolution changed client needs to Drain/Terminate/Init - AMF_RESOLUTION_UPDATED ,//resolution changed in adaptive mode. New ROI will be set on output on newly decoded frames - - //error codes - AMF_INVALID_DATA_TYPE ,//invalid data type - AMF_INVALID_RESOLUTION ,//invalid resolution (width or height) - AMF_CODEC_NOT_SUPPORTED ,//codec not supported - AMF_SURFACE_FORMAT_NOT_SUPPORTED ,//surface format not supported - AMF_SURFACE_MUST_BE_SHARED ,//surface should be shared (DX11: (MiscFlags & D3D11_RESOURCE_MISC_SHARED) == 0, DX9: No shared handle found) - -// component video decoder - AMF_DECODER_NOT_PRESENT ,//failed to create the decoder - AMF_DECODER_SURFACE_ALLOCATION_FAILED ,//failed to create the surface for decoding - AMF_DECODER_NO_FREE_SURFACES , - -// component video encoder - AMF_ENCODER_NOT_PRESENT ,//failed to create the encoder - -// component video processor - -// component video conveter - -// component dem - AMF_DEM_ERROR , - AMF_DEM_PROPERTY_READONLY , - AMF_DEM_REMOTE_DISPLAY_CREATE_FAILED , - AMF_DEM_START_ENCODING_FAILED , - AMF_DEM_QUERY_OUTPUT_FAILED , - -// component TAN - AMF_TAN_CLIPPING_WAS_REQUIRED , // Resulting data was truncated to meet output type's value limits. - AMF_TAN_UNSUPPORTED_VERSION , // Not supported version requested, solely for TANCreateContext(). - - AMF_NEED_MORE_INPUT ,//returned by AMFComponent::SubmitInput did not produce a buffer because more input submissions are required. -} AMF_RESULT; - -#endif //#ifndef AMF_Result_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h b/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h deleted file mode 100644 index 3013af040c0f79..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Surface.h +++ /dev/null @@ -1,281 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Surface_h -#define AMF_Surface_h -#pragma once - -#include "Data.h" -#include "Plane.h" - -#if defined(_MSC_VER) - #pragma warning( push ) - #pragma warning(disable : 4263) - #pragma warning(disable : 4264) -#endif -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - typedef enum AMF_SURFACE_FORMAT - { - AMF_SURFACE_UNKNOWN = 0, - AMF_SURFACE_NV12, ///< 1 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 8 bit per component - AMF_SURFACE_YV12, ///< 2 - planar 4:2:0 Y width x height + V width/2 x height/2 + U width/2 x height/2 - 8 bit per component - AMF_SURFACE_BGRA, ///< 3 - packed 4:4:4 - 8 bit per component - AMF_SURFACE_ARGB, ///< 4 - packed 4:4:4 - 8 bit per component - AMF_SURFACE_RGBA, ///< 5 - packed 4:4:4 - 8 bit per component - AMF_SURFACE_GRAY8, ///< 6 - single component - 8 bit - AMF_SURFACE_YUV420P, ///< 7 - planar 4:2:0 Y width x height + U width/2 x height/2 + V width/2 x height/2 - 8 bit per component - AMF_SURFACE_U8V8, ///< 8 - packed double component - 8 bit per component - AMF_SURFACE_YUY2, ///< 9 - packed 4:2:2 Byte 0=8-bit Y'0; Byte 1=8-bit Cb; Byte 2=8-bit Y'1; Byte 3=8-bit Cr - AMF_SURFACE_P010, ///< 10 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 10 bit per component (16 allocated, upper 10 bits are used) - AMF_SURFACE_RGBA_F16, ///< 11 - packed 4:4:4 - 16 bit per component float - AMF_SURFACE_UYVY, ///< 12 - packed 4:2:2 the similar to YUY2 but Y and UV swapped: Byte 0=8-bit Cb; Byte 1=8-bit Y'0; Byte 2=8-bit Cr Byte 3=8-bit Y'1; (used the same DX/CL/Vulkan storage as YUY2) - AMF_SURFACE_R10G10B10A2, ///< 13 - packed 4:4:4 to 4 bytes, 10 bit per RGB component, 2 bits per A - AMF_SURFACE_Y210, ///< 14 - packed 4:2:2 - Word 0=10-bit Y'0; Word 1=10-bit Cb; Word 2=10-bit Y'1; Word 3=10-bit Cr - AMF_SURFACE_AYUV, ///< 15 - packed 4:4:4 - 8 bit per component YUVA - AMF_SURFACE_Y410, ///< 16 - packed 4:4:4 - 10 bit per YUV component, 2 bits per A, AVYU - AMF_SURFACE_Y416, ///< 16 - packed 4:4:4 - 16 bit per component 4 bytes, AVYU - AMF_SURFACE_GRAY32, ///< 17 - single component - 32 bit - AMF_SURFACE_P012, ///< 18 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 12 bit per component (16 allocated, upper 12 bits are used) - AMF_SURFACE_P016, ///< 19 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 16 bit per component (16 allocated, all bits are used) - - AMF_SURFACE_FIRST = AMF_SURFACE_NV12, - AMF_SURFACE_LAST = AMF_SURFACE_P016 - } AMF_SURFACE_FORMAT; - //---------------------------------------------------------------------------------------------- - // AMF_SURFACE_USAGE translates to D3D11_BIND_FLAG or VkImageUsageFlags - // bit mask - //---------------------------------------------------------------------------------------------- - typedef enum AMF_SURFACE_USAGE_BITS - { // D3D11 D3D12 Vulkan - AMF_SURFACE_USAGE_DEFAULT = 0x80000000, // will apply default D3D12_RESOURCE_FLAG_NONE VK_IMAGE_USAGE_TRANSFER_SRC_BIT| VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT - AMF_SURFACE_USAGE_NONE = 0x00000000, // 0, D3D12_RESOURCE_FLAG_NONE, 0 - AMF_SURFACE_USAGE_SHADER_RESOURCE = 0x00000001, // D3D11_BIND_SHADER_RESOURCE, D3D12_RESOURCE_FLAG_NONE VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT - AMF_SURFACE_USAGE_RENDER_TARGET = 0x00000002, // D3D11_BIND_RENDER_TARGET, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT - AMF_SURFACE_USAGE_UNORDERED_ACCESS = 0x00000004, // D3D11_BIND_UNORDERED_ACCESS, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT - AMF_SURFACE_USAGE_TRANSFER_SRC = 0x00000008, // D3D12_RESOURCE_FLAG_NONE VK_IMAGE_USAGE_TRANSFER_SRC_BIT - AMF_SURFACE_USAGE_TRANSFER_DST = 0x00000010, // D3D12_RESOURCE_FLAG_NONE VK_IMAGE_USAGE_TRANSFER_DST_BIT - AMF_SURFACE_USAGE_LINEAR = 0x00000020 - } AMF_SURFACE_USAGE_BITS; - typedef amf_flags AMF_SURFACE_USAGE; - //---------------------------------------------------------------------------------------------- - -#if defined(_WIN32) - AMF_WEAK GUID AMFFormatGUID = { 0x8cd592d0, 0x8063, 0x4af8, {0xa7, 0xd0, 0x32, 0x5b, 0xc5, 0xf7, 0x48, 0xab}}; // UINT(AMF_SURFACE_FORMAT), default - AMF_SURFACE_UNKNOWN; to be set on ID3D11Texture2D objects when used natively (i.e. force UYVY on DXGI_FORMAT_YUY2 texture) -#endif - - //---------------------------------------------------------------------------------------------- - // frame type - //---------------------------------------------------------------------------------------------- - typedef enum AMF_FRAME_TYPE - { - // flags - AMF_FRAME_STEREO_FLAG = 0x10000000, - AMF_FRAME_LEFT_FLAG = AMF_FRAME_STEREO_FLAG | 0x20000000, - AMF_FRAME_RIGHT_FLAG = AMF_FRAME_STEREO_FLAG | 0x40000000, - AMF_FRAME_BOTH_FLAG = AMF_FRAME_LEFT_FLAG | AMF_FRAME_RIGHT_FLAG, - AMF_FRAME_INTERLEAVED_FLAG = 0x01000000, - AMF_FRAME_FIELD_FLAG = 0x02000000, - AMF_FRAME_EVEN_FLAG = 0x04000000, - AMF_FRAME_ODD_FLAG = 0x08000000, - - // values - AMF_FRAME_UNKNOWN =-1, - AMF_FRAME_PROGRESSIVE = 0, - - AMF_FRAME_INTERLEAVED_EVEN_FIRST = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_EVEN_FLAG, - AMF_FRAME_INTERLEAVED_ODD_FIRST = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_ODD_FLAG, - AMF_FRAME_FIELD_SINGLE_EVEN = AMF_FRAME_FIELD_FLAG | AMF_FRAME_EVEN_FLAG, - AMF_FRAME_FIELD_SINGLE_ODD = AMF_FRAME_FIELD_FLAG | AMF_FRAME_ODD_FLAG, - - AMF_FRAME_STEREO_LEFT = AMF_FRAME_LEFT_FLAG, - AMF_FRAME_STEREO_RIGHT = AMF_FRAME_RIGHT_FLAG, - AMF_FRAME_STEREO_BOTH = AMF_FRAME_BOTH_FLAG, - - AMF_FRAME_INTERLEAVED_EVEN_FIRST_STEREO_LEFT = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_EVEN_FLAG | AMF_FRAME_LEFT_FLAG, - AMF_FRAME_INTERLEAVED_EVEN_FIRST_STEREO_RIGHT = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_EVEN_FLAG | AMF_FRAME_RIGHT_FLAG, - AMF_FRAME_INTERLEAVED_EVEN_FIRST_STEREO_BOTH = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_EVEN_FLAG | AMF_FRAME_BOTH_FLAG, - - AMF_FRAME_INTERLEAVED_ODD_FIRST_STEREO_LEFT = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_ODD_FLAG | AMF_FRAME_LEFT_FLAG, - AMF_FRAME_INTERLEAVED_ODD_FIRST_STEREO_RIGHT = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_ODD_FLAG | AMF_FRAME_RIGHT_FLAG, - AMF_FRAME_INTERLEAVED_ODD_FIRST_STEREO_BOTH = AMF_FRAME_INTERLEAVED_FLAG | AMF_FRAME_ODD_FLAG | AMF_FRAME_BOTH_FLAG, - } AMF_FRAME_TYPE; - - typedef enum AMF_ROTATION_ENUM - { - AMF_ROTATION_NONE = 0, - AMF_ROTATION_90 = 1, - AMF_ROTATION_180 = 2, - AMF_ROTATION_270 = 3, - } AMF_ROTATION_ENUM; - - #define AMF_SURFACE_ROTATION L"Rotation" // amf_int64(AMF_ROTATION_ENUM); default = AMF_ROTATION_NONE, can be set on surfaces - - //---------------------------------------------------------------------------------------------- - // AMFSurfaceObserver interface - callback; is called before internal release resources. - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMFSurface; - class AMF_NO_VTABLE AMFSurfaceObserver - { - public: - virtual void AMF_STD_CALL OnSurfaceDataRelease(AMFSurface* pSurface) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFSurface AMFSurface; - typedef struct AMFSurfaceObserver AMFSurfaceObserver; - - typedef struct AMFSurfaceObserverVtbl - { - void (AMF_STD_CALL *OnSurfaceDataRelease)(AMFSurfaceObserver* pThis, AMFSurface* pSurface); - } AMFSurfaceObserverVtbl; - - struct AMFSurfaceObserver - { - const AMFSurfaceObserverVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFSurface interface - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFSurface : public AMFData - { - public: - AMF_DECLARE_IID(0x3075dbe3, 0x8718, 0x4cfa, 0x86, 0xfb, 0x21, 0x14, 0xc0, 0xa5, 0xa4, 0x51) - - virtual AMF_SURFACE_FORMAT AMF_STD_CALL GetFormat() = 0; - - // do not store planes outside. should be used together with Surface - virtual amf_size AMF_STD_CALL GetPlanesCount() = 0; - virtual AMFPlane* AMF_STD_CALL GetPlaneAt(amf_size index) = 0; - virtual AMFPlane* AMF_STD_CALL GetPlane(AMF_PLANE_TYPE type) = 0; - - virtual AMF_FRAME_TYPE AMF_STD_CALL GetFrameType() = 0; - virtual void AMF_STD_CALL SetFrameType(AMF_FRAME_TYPE type) = 0; - - virtual AMF_RESULT AMF_STD_CALL SetCrop(amf_int32 x,amf_int32 y, amf_int32 width, amf_int32 height) = 0; - virtual AMF_RESULT AMF_STD_CALL CopySurfaceRegion(AMFSurface* pDest, amf_int32 dstX, amf_int32 dstY, amf_int32 srcX, amf_int32 srcY, amf_int32 width, amf_int32 height) = 0; - - // Observer management -#ifdef __clang__ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Woverloaded-virtual" -#endif - virtual void AMF_STD_CALL AddObserver(AMFSurfaceObserver* pObserver) = 0; - virtual void AMF_STD_CALL RemoveObserver(AMFSurfaceObserver* pObserver) = 0; -#ifdef __clang__ - #pragma clang diagnostic pop -#endif - - }; - //---------------------------------------------------------------------------------------------- - // smart pointer - //---------------------------------------------------------------------------------------------- - typedef AMFInterfacePtr_T AMFSurfacePtr; - //---------------------------------------------------------------------------------------------- -#else // #if defined(__cplusplus) - AMF_DECLARE_IID(AMFSurface, 0x3075dbe3, 0x8718, 0x4cfa, 0x86, 0xfb, 0x21, 0x14, 0xc0, 0xa5, 0xa4, 0x51) - typedef struct AMFSurfaceVtbl - { - // AMFInterface interface - amf_long (AMF_STD_CALL *Acquire)(AMFSurface* pThis); - amf_long (AMF_STD_CALL *Release)(AMFSurface* pThis); - enum AMF_RESULT (AMF_STD_CALL *QueryInterface)(AMFSurface* pThis, const struct AMFGuid *interfaceID, void** ppInterface); - - // AMFPropertyStorage interface - AMF_RESULT (AMF_STD_CALL *SetProperty)(AMFSurface* pThis, const wchar_t* name, AMFVariantStruct value); - AMF_RESULT (AMF_STD_CALL *GetProperty)(AMFSurface* pThis, const wchar_t* name, AMFVariantStruct* pValue); - amf_bool (AMF_STD_CALL *HasProperty)(AMFSurface* pThis, const wchar_t* name); - amf_size (AMF_STD_CALL *GetPropertyCount)(AMFSurface* pThis); - AMF_RESULT (AMF_STD_CALL *GetPropertyAt)(AMFSurface* pThis, amf_size index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue); - AMF_RESULT (AMF_STD_CALL *Clear)(AMFSurface* pThis); - AMF_RESULT (AMF_STD_CALL *AddTo)(AMFSurface* pThis, AMFPropertyStorage* pDest, amf_bool overwrite, amf_bool deep); - AMF_RESULT (AMF_STD_CALL *CopyTo)(AMFSurface* pThis, AMFPropertyStorage* pDest, amf_bool deep); - void (AMF_STD_CALL *AddObserver)(AMFSurface* pThis, AMFPropertyStorageObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver)(AMFSurface* pThis, AMFPropertyStorageObserver* pObserver); - - // AMFData interface - - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryType)(AMFSurface* pThis); - - AMF_RESULT (AMF_STD_CALL *Duplicate)(AMFSurface* pThis, AMF_MEMORY_TYPE type, AMFData** ppData); - AMF_RESULT (AMF_STD_CALL *Convert)(AMFSurface* pThis, AMF_MEMORY_TYPE type); // optimal interop if possilble. Copy through host memory if needed - AMF_RESULT (AMF_STD_CALL *Interop)(AMFSurface* pThis, AMF_MEMORY_TYPE type); // only optimal interop if possilble. No copy through host memory for GPU objects - - AMF_DATA_TYPE (AMF_STD_CALL *GetDataType)(AMFSurface* pThis); - - amf_bool (AMF_STD_CALL *IsReusable)(AMFSurface* pThis); - - void (AMF_STD_CALL *SetPts)(AMFSurface* pThis, amf_pts pts); - amf_pts (AMF_STD_CALL *GetPts)(AMFSurface* pThis); - void (AMF_STD_CALL *SetDuration)(AMFSurface* pThis, amf_pts duration); - amf_pts (AMF_STD_CALL *GetDuration)(AMFSurface* pThis); - - // AMFSurface interface - - AMF_SURFACE_FORMAT (AMF_STD_CALL *GetFormat)(AMFSurface* pThis); - - // do not store planes outside. should be used together with Surface - amf_size (AMF_STD_CALL *GetPlanesCount)(AMFSurface* pThis); - AMFPlane* (AMF_STD_CALL *GetPlaneAt)(AMFSurface* pThis, amf_size index); - AMFPlane* (AMF_STD_CALL *GetPlane)(AMFSurface* pThis, AMF_PLANE_TYPE type); - - AMF_FRAME_TYPE (AMF_STD_CALL *GetFrameType)(AMFSurface* pThis); - void (AMF_STD_CALL *SetFrameType)(AMFSurface* pThis, AMF_FRAME_TYPE type); - - AMF_RESULT (AMF_STD_CALL *SetCrop)(AMFSurface* pThis, amf_int32 x,amf_int32 y, amf_int32 width, amf_int32 height); - AMF_RESULT (AMF_STD_CALL *CopySurfaceRegion)(AMFSurface* pThis, AMFSurface* pDest, amf_int32 dstX, amf_int32 dstY, amf_int32 srcX, amf_int32 srcY, amf_int32 width, amf_int32 height); - - - // Observer management - void (AMF_STD_CALL *AddObserver_Surface)(AMFSurface* pThis, AMFSurfaceObserver* pObserver); - void (AMF_STD_CALL *RemoveObserver_Surface)(AMFSurface* pThis, AMFSurfaceObserver* pObserver); - - } AMFSurfaceVtbl; - - struct AMFSurface - { - const AMFSurfaceVtbl *pVtbl; - }; -#endif // #if defined(__cplusplus) -#if defined(__cplusplus) -} -#endif -#if defined(_MSC_VER) - #pragma warning( pop ) -#endif -#endif //#ifndef AMF_Surface_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Trace.h b/plugins/obs-ffmpeg/external/AMF/include/core/Trace.h deleted file mode 100644 index 69b80739487b03..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Trace.h +++ /dev/null @@ -1,183 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Trace_h -#define AMF_Trace_h -#pragma once - -#include "Platform.h" -#include "Result.h" -#include "Surface.h" -#include "AudioBuffer.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // trace levels - //---------------------------------------------------------------------------------------------- - #define AMF_TRACE_ERROR 0 - #define AMF_TRACE_WARNING 1 - #define AMF_TRACE_INFO 2 // default in sdk - #define AMF_TRACE_DEBUG 3 - #define AMF_TRACE_TRACE 4 - - #define AMF_TRACE_TEST 5 - #define AMF_TRACE_NOLOG 100 - - //---------------------------------------------------------------------------------------------- - // available trace writers - //---------------------------------------------------------------------------------------------- - #define AMF_TRACE_WRITER_CONSOLE L"Console" - #define AMF_TRACE_WRITER_DEBUG_OUTPUT L"DebugOutput" - #define AMF_TRACE_WRITER_FILE L"File" - - //---------------------------------------------------------------------------------------------- - // AMFTraceWriter interface - callback - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFTraceWriter - { - public: - virtual void AMF_CDECL_CALL Write(const wchar_t* scope, const wchar_t* message) = 0; - virtual void AMF_CDECL_CALL Flush() = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFTraceWriter AMFTraceWriter; - - typedef struct AMFTraceWriterVtbl - { - // AMFTraceWriter interface - void (AMF_CDECL_CALL *Write)(AMFTraceWriter* pThis, const wchar_t* scope, const wchar_t* message); - void (AMF_CDECL_CALL *Flush)(AMFTraceWriter* pThis); - } AMFTraceWriterVtbl; - - struct AMFTraceWriter - { - const AMFTraceWriterVtbl *pVtbl; - }; - -#endif // #if defined(__cplusplus) - - //---------------------------------------------------------------------------------------------- - // AMFTrace interface - singleton - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - class AMF_NO_VTABLE AMFTrace - { - public: - virtual void AMF_STD_CALL TraceW(const wchar_t* src_path, amf_int32 line, amf_int32 level, const wchar_t* scope,amf_int32 countArgs, const wchar_t* format, ...) = 0; - virtual void AMF_STD_CALL Trace(const wchar_t* src_path, amf_int32 line, amf_int32 level, const wchar_t* scope, const wchar_t* message, va_list* pArglist) = 0; - - virtual amf_int32 AMF_STD_CALL SetGlobalLevel(amf_int32 level) = 0; - virtual amf_int32 AMF_STD_CALL GetGlobalLevel() = 0; - - virtual amf_bool AMF_STD_CALL EnableWriter(const wchar_t* writerID, bool enable) = 0; - virtual amf_bool AMF_STD_CALL WriterEnabled(const wchar_t* writerID) = 0; - virtual AMF_RESULT AMF_STD_CALL TraceEnableAsync(amf_bool enable) = 0; - virtual AMF_RESULT AMF_STD_CALL TraceFlush() = 0; - virtual AMF_RESULT AMF_STD_CALL SetPath(const wchar_t* path) = 0; - virtual AMF_RESULT AMF_STD_CALL GetPath(wchar_t* path, amf_size* pSize) = 0; - virtual amf_int32 AMF_STD_CALL SetWriterLevel(const wchar_t* writerID, amf_int32 level) = 0; - virtual amf_int32 AMF_STD_CALL GetWriterLevel(const wchar_t* writerID) = 0; - virtual amf_int32 AMF_STD_CALL SetWriterLevelForScope(const wchar_t* writerID, const wchar_t* scope, amf_int32 level) = 0; - virtual amf_int32 AMF_STD_CALL GetWriterLevelForScope(const wchar_t* writerID, const wchar_t* scope) = 0; - - virtual amf_int32 AMF_STD_CALL GetIndentation() = 0; - virtual void AMF_STD_CALL Indent(amf_int32 addIndent) = 0; - - virtual void AMF_STD_CALL RegisterWriter(const wchar_t* writerID, AMFTraceWriter* pWriter, amf_bool enable) = 0; - virtual void AMF_STD_CALL UnregisterWriter(const wchar_t* writerID) = 0; - - virtual const wchar_t* AMF_STD_CALL GetResultText(AMF_RESULT res) = 0; - virtual const wchar_t* AMF_STD_CALL SurfaceGetFormatName(const AMF_SURFACE_FORMAT eSurfaceFormat) = 0; - virtual AMF_SURFACE_FORMAT AMF_STD_CALL SurfaceGetFormatByName(const wchar_t* name) = 0; - - virtual const wchar_t* AMF_STD_CALL GetMemoryTypeName(const AMF_MEMORY_TYPE memoryType) = 0; - virtual AMF_MEMORY_TYPE AMF_STD_CALL GetMemoryTypeByName(const wchar_t* name) = 0; - - virtual const wchar_t* AMF_STD_CALL GetSampleFormatName(const AMF_AUDIO_FORMAT eFormat) = 0; - virtual AMF_AUDIO_FORMAT AMF_STD_CALL GetSampleFormatByName(const wchar_t* name) = 0; - }; -#else // #if defined(__cplusplus) - typedef struct AMFTrace AMFTrace; - - typedef struct AMFTraceVtbl - { - // AMFTrace interface - void (AMF_STD_CALL *TraceW)(AMFTrace* pThis, const wchar_t* src_path, amf_int32 line, amf_int32 level, const wchar_t* scope,amf_int32 countArgs, const wchar_t* format, ...); - void (AMF_STD_CALL *Trace)(AMFTrace* pThis, const wchar_t* src_path, amf_int32 line, amf_int32 level, const wchar_t* scope, const wchar_t* message, va_list* pArglist); - - amf_int32 (AMF_STD_CALL *SetGlobalLevel)(AMFTrace* pThis, amf_int32 level); - amf_int32 (AMF_STD_CALL *GetGlobalLevel)(AMFTrace* pThis); - - amf_bool (AMF_STD_CALL *EnableWriter)(AMFTrace* pThis, const wchar_t* writerID, amf_bool enable); - amf_bool (AMF_STD_CALL *WriterEnabled)(AMFTrace* pThis, const wchar_t* writerID); - AMF_RESULT (AMF_STD_CALL *TraceEnableAsync)(AMFTrace* pThis, amf_bool enable); - AMF_RESULT (AMF_STD_CALL *TraceFlush)(AMFTrace* pThis); - AMF_RESULT (AMF_STD_CALL *SetPath)(AMFTrace* pThis, const wchar_t* path); - AMF_RESULT (AMF_STD_CALL *GetPath)(AMFTrace* pThis, wchar_t* path, amf_size* pSize); - amf_int32 (AMF_STD_CALL *SetWriterLevel)(AMFTrace* pThis, const wchar_t* writerID, amf_int32 level); - amf_int32 (AMF_STD_CALL *GetWriterLevel)(AMFTrace* pThis, const wchar_t* writerID); - amf_int32 (AMF_STD_CALL *SetWriterLevelForScope)(AMFTrace* pThis, const wchar_t* writerID, const wchar_t* scope, amf_int32 level); - amf_int32 (AMF_STD_CALL *GetWriterLevelForScope)(AMFTrace* pThis, const wchar_t* writerID, const wchar_t* scope); - - amf_int32 (AMF_STD_CALL *GetIndentation)(AMFTrace* pThis); - void (AMF_STD_CALL *Indent)(AMFTrace* pThis, amf_int32 addIndent); - - void (AMF_STD_CALL *RegisterWriter)(AMFTrace* pThis, const wchar_t* writerID, AMFTraceWriter* pWriter, amf_bool enable); - void (AMF_STD_CALL *UnregisterWriter)(AMFTrace* pThis, const wchar_t* writerID); - - const wchar_t* (AMF_STD_CALL *GetResultText)(AMFTrace* pThis, AMF_RESULT res); - const wchar_t* (AMF_STD_CALL *SurfaceGetFormatName)(AMFTrace* pThis, const AMF_SURFACE_FORMAT eSurfaceFormat); - AMF_SURFACE_FORMAT (AMF_STD_CALL *SurfaceGetFormatByName)(AMFTrace* pThis, const wchar_t* name); - - const wchar_t* (AMF_STD_CALL *GetMemoryTypeName)(AMFTrace* pThis, const AMF_MEMORY_TYPE memoryType); - AMF_MEMORY_TYPE (AMF_STD_CALL *GetMemoryTypeByName)(AMFTrace* pThis, const wchar_t* name); - - const wchar_t* (AMF_STD_CALL *GetSampleFormatName)(AMFTrace* pThis, const AMF_AUDIO_FORMAT eFormat); - AMF_AUDIO_FORMAT (AMF_STD_CALL *GetSampleFormatByName)(AMFTrace* pThis, const wchar_t* name); - } AMFTraceVtbl; - - struct AMFTrace - { - const AMFTraceVtbl *pVtbl; - }; - -#endif -#if defined(__cplusplus) -} -#endif - - -#endif // AMF_Trace_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h b/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h deleted file mode 100644 index 859146439fc088..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Variant.h +++ /dev/null @@ -1,2082 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef AMF_Variant_h -#define AMF_Variant_h -#pragma once -#if defined(_MSC_VER) - #pragma warning(disable: 4996) -#endif - -#include "Interface.h" -#include -#include -#include - -#if defined(__cplusplus) -namespace amf -{ -#endif - //---------------------------------------------------------------------------------------------- - // variant types - //---------------------------------------------------------------------------------------------- - typedef enum AMF_VARIANT_TYPE - { - AMF_VARIANT_EMPTY = 0, - - AMF_VARIANT_BOOL = 1, - AMF_VARIANT_INT64 = 2, - AMF_VARIANT_DOUBLE = 3, - - AMF_VARIANT_RECT = 4, - AMF_VARIANT_SIZE = 5, - AMF_VARIANT_POINT = 6, - AMF_VARIANT_RATE = 7, - AMF_VARIANT_RATIO = 8, - AMF_VARIANT_COLOR = 9, - - AMF_VARIANT_STRING = 10, // value is char* - AMF_VARIANT_WSTRING = 11, // value is wchar_t* - AMF_VARIANT_INTERFACE = 12, // value is AMFInterface* - AMF_VARIANT_FLOAT = 13, - - AMF_VARIANT_FLOAT_SIZE = 14, - AMF_VARIANT_FLOAT_POINT2D = 15, - AMF_VARIANT_FLOAT_POINT3D = 16, - AMF_VARIANT_FLOAT_VECTOR4D = 17 - } AMF_VARIANT_TYPE; - //---------------------------------------------------------------------------------------------- - // variant struct - //---------------------------------------------------------------------------------------------- - typedef struct AMFVariantStruct - { - AMF_VARIANT_TYPE type; - union - { - amf_bool boolValue; - amf_int64 int64Value; - amf_double doubleValue; - char* stringValue; - wchar_t* wstringValue; - AMFInterface* pInterface; - struct AMFRect rectValue; - struct AMFSize sizeValue; - struct AMFPoint pointValue; - struct AMFRate rateValue; - struct AMFRatio ratioValue; - struct AMFColor colorValue; - amf_float floatValue; - struct AMFFloatSize floatSizeValue; - struct AMFFloatPoint2D floatPoint2DValue; - struct AMFFloatPoint3D floatPoint3DValue; - struct AMFFloatVector4D floatVector4DValue; - }; - } AMFVariantStruct; - //---------------------------------------------------------------------------------------------- - // variant accessors - //---------------------------------------------------------------------------------------------- - - static AMF_INLINE AMF_VARIANT_TYPE AMF_STD_CALL AMFVariantGetType(const AMFVariantStruct* _variant) { return (_variant)->type; } -#if defined(__cplusplus) - static AMF_INLINE AMF_VARIANT_TYPE& AMF_STD_CALL AMFVariantGetType(AMFVariantStruct* _variant) { return (_variant)->type; } -#endif - static AMF_INLINE amf_bool AMF_STD_CALL AMFVariantGetBool(const AMFVariantStruct* _variant) { return (_variant)->boolValue; } - static AMF_INLINE amf_int64 AMF_STD_CALL AMFVariantGetInt64(const AMFVariantStruct* _variant) { return (_variant)->int64Value; } - static AMF_INLINE amf_double AMF_STD_CALL AMFVariantGetDouble(const AMFVariantStruct* _variant) { return (_variant)->doubleValue; } - static AMF_INLINE amf_float AMF_STD_CALL AMFVariantGetFloat(const AMFVariantStruct* _variant) { return (_variant)->floatValue; } - static AMF_INLINE const char* AMF_STD_CALL AMFVariantGetString(const AMFVariantStruct* _variant) { return (_variant)->stringValue; } - static AMF_INLINE const wchar_t* AMF_STD_CALL AMFVariantGetWString(const AMFVariantStruct* _variant) { return (_variant)->wstringValue; } -#if defined(__cplusplus) - static AMF_INLINE const AMFInterface* AMF_STD_CALL AMFVariantGetInterface(const AMFVariantStruct* _variant) { return (_variant)->pInterface; } -#endif - static AMF_INLINE AMFInterface* AMF_STD_CALL AMFVariantGetInterface(AMFVariantStruct* _variant) { return (_variant)->pInterface; } - -#if defined(__cplusplus) - static AMF_INLINE const AMFRect & AMF_STD_CALL AMFVariantGetRect (const AMFVariantStruct* _variant) { return (_variant)->rectValue; } - static AMF_INLINE const AMFSize & AMF_STD_CALL AMFVariantGetSize (const AMFVariantStruct* _variant) { return (_variant)->sizeValue; } - static AMF_INLINE const AMFPoint& AMF_STD_CALL AMFVariantGetPoint(const AMFVariantStruct* _variant) { return (_variant)->pointValue; } - static AMF_INLINE const AMFFloatSize& AMF_STD_CALL AMFVariantGetFloatSize(const AMFVariantStruct* _variant) { return (_variant)->floatSizeValue; } - static AMF_INLINE const AMFFloatPoint2D& AMF_STD_CALL AMFVariantGetFloatPoint2D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint2DValue; } - static AMF_INLINE const AMFFloatPoint3D& AMF_STD_CALL AMFVariantGetFloatPoint3D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint3DValue; } - static AMF_INLINE const AMFFloatVector4D& AMF_STD_CALL AMFVariantGetFloatVector4D(const AMFVariantStruct* _variant) { return (_variant)->floatVector4DValue; } - static AMF_INLINE const AMFRate & AMF_STD_CALL AMFVariantGetRate (const AMFVariantStruct* _variant) { return (_variant)->rateValue; } - static AMF_INLINE const AMFRatio& AMF_STD_CALL AMFVariantGetRatio(const AMFVariantStruct* _variant) { return (_variant)->ratioValue; } - static AMF_INLINE const AMFColor& AMF_STD_CALL AMFVariantGetColor(const AMFVariantStruct* _variant) { return (_variant)->colorValue; } -#else // #if defined(__cplusplus) - static AMF_INLINE const AMFRect AMF_STD_CALL AMFVariantGetRect (const AMFVariantStruct* _variant) { return (_variant)->rectValue; } - static AMF_INLINE const AMFSize AMF_STD_CALL AMFVariantGetSize (const AMFVariantStruct* _variant) { return (_variant)->sizeValue; } - static AMF_INLINE const AMFPoint AMF_STD_CALL AMFVariantGetPoint(const AMFVariantStruct* _variant) { return (_variant)->pointValue; } - static AMF_INLINE const AMFFloatSize AMF_STD_CALL AMFVariantGetFloatSize(const AMFVariantStruct* _variant) { return (_variant)->floatSizeValue; } - static AMF_INLINE const AMFFloatPoint2D AMF_STD_CALL AMFVariantGetFloatPoint2D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint2DValue; } - static AMF_INLINE const AMFFloatPoint3D AMF_STD_CALL AMFVariantGetFloatPoint3D(const AMFVariantStruct* _variant) { return (_variant)->floatPoint3DValue; } - static AMF_INLINE const AMFFloatVector4D AMF_STD_CALL AMFVariantGetFloatVector4D(const AMFVariantStruct* _variant) { return (_variant)->floatVector4DValue; } - static AMF_INLINE const AMFRate AMF_STD_CALL AMFVariantGetRate (const AMFVariantStruct* _variant) { return (_variant)->rateValue; } - static AMF_INLINE const AMFRatio AMF_STD_CALL AMFVariantGetRatio(const AMFVariantStruct* _variant) { return (_variant)->ratioValue; } - static AMF_INLINE const AMFColor AMF_STD_CALL AMFVariantGetColor(const AMFVariantStruct* _variant) { return (_variant)->colorValue; } -#endif // #if defined(__cplusplus) - - - #define AMFVariantEmpty(_variant) 0 - #define AMFVariantBool(_variant) (_variant)->boolValue - #define AMFVariantInt64(_variant) (_variant)->int64Value - #define AMFVariantDouble(_variant) (_variant)->doubleValue - #define AMFVariantFloat(_variant) (_variant)->floatValue - - #define AMFVariantRect(_variant) (_variant)->rectValue - #define AMFVariantSize(_variant) (_variant)->sizeValue - #define AMFVariantPoint(_variant) (_variant)->pointValue - #define AMFVariantFloatSize(_variant) (_variant)->floatSizeValue - #define AMFVariantFloatPoint2D(_variant) (_variant)->floatPoint2DValue - #define AMFVariantFloatPoint3D(_variant) (_variant)->floatPoint3DValue - #define AMFVariantFloatVector4D(_variant) (_variant)->floatVector4DValue - #define AMFVariantRate(_variant) (_variant)->rateValue - #define AMFVariantRatio(_variant) (_variant)->ratioValue - #define AMFVariantColor(_variant) (_variant)->colorValue - - #define AMFVariantString(_variant) (_variant)->stringValue - #define AMFVariantWString(_variant) (_variant)->wstringValue - #define AMFVariantInterface(_variant) (_variant)->pInterface - //---------------------------------------------------------------------------------------------- - // variant hleper functions - //---------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantInit(AMFVariantStruct* pVariant); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantClear(AMFVariantStruct* pVariant); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantCompare(const AMFVariantStruct* pFirst, const AMFVariantStruct* pSecond, amf_bool* equal); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantCopy(AMFVariantStruct* pDest, const AMFVariantStruct* pSrc); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignBool(AMFVariantStruct* pDest, amf_bool value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignInt64(AMFVariantStruct* pDest, amf_int64 value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignDouble(AMFVariantStruct* pDest, amf_double value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloat(AMFVariantStruct* pDest, amf_float value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignString(AMFVariantStruct* pDest, const char* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignWString(AMFVariantStruct* pDest, const wchar_t* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignInterface(AMFVariantStruct* pDest, AMFInterface* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRect(AMFVariantStruct* pDest, const AMFRect* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignSize(AMFVariantStruct* pDest, const AMFSize* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignPoint(AMFVariantStruct* pDest, const AMFPoint* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatSize(AMFVariantStruct* pDest, const AMFFloatSize* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint2D(AMFVariantStruct* pDest, const AMFFloatPoint2D* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint3D(AMFVariantStruct* pDest, const AMFFloatPoint3D* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatVector4D(AMFVariantStruct* pDest, const AMFFloatVector4D* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRate(AMFVariantStruct* pDest, const AMFRate* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRatio(AMFVariantStruct* pDest, const AMFRatio* value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignColor(AMFVariantStruct* pDest, const AMFColor* value); - -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRect(AMFVariantStruct* pDest, const AMFRect& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignSize(AMFVariantStruct* pDest, const AMFSize& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignPoint(AMFVariantStruct* pDest, const AMFPoint& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatSize(AMFVariantStruct* pDest, const AMFFloatSize& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint2D(AMFVariantStruct* pDest, const AMFFloatPoint2D& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint3D(AMFVariantStruct* pDest, const AMFFloatPoint3D& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatVector4D(AMFVariantStruct* pDest, const AMFFloatVector4D& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRate(AMFVariantStruct* pDest, const AMFRate& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRatio(AMFVariantStruct* pDest, const AMFRatio& value); - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignColor(AMFVariantStruct* pDest, const AMFColor& value); - - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantChangeType(AMFVariantStruct* pDest, const AMFVariantStruct* pSrc, AMF_VARIANT_TYPE newType); -#endif - static AMF_INLINE char* AMF_CDECL_CALL AMFVariantDuplicateString(const char* from); - static AMF_INLINE void AMF_CDECL_CALL AMFVariantFreeString(char* from); - static AMF_INLINE wchar_t* AMF_CDECL_CALL AMFVariantDuplicateWString(const wchar_t* from); - static AMF_INLINE void AMF_CDECL_CALL AMFVariantFreeWString(wchar_t* from); - -#if defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMF_INLINE Variant helper class - //---------------------------------------------------------------------------------------------- - class AMFVariant : public AMFVariantStruct - { - public: - class String; - class WString; - - public: - AMFVariant() { AMFVariantInit(this); } - explicit AMFVariant(const AMFVariantStruct& other) { AMFVariantInit(this); AMFVariantCopy(this, const_cast(&other)); } - - explicit AMFVariant(const AMFVariantStruct* pOther); - template - explicit AMFVariant(const AMFInterfacePtr_T& pValue); - - AMFVariant(const AMFVariant& other) { AMFVariantInit(this); AMFVariantCopy(this, const_cast(static_cast(&other))); } - - explicit AMF_INLINE AMFVariant(amf_bool value) { AMFVariantInit(this); AMFVariantAssignBool(this, value); } - explicit AMF_INLINE AMFVariant(amf_int64 value) { AMFVariantInit(this); AMFVariantAssignInt64(this, value); } - explicit AMF_INLINE AMFVariant(amf_uint64 value) { AMFVariantInit(this); AMFVariantAssignInt64(this, (amf_int64)value); } - explicit AMF_INLINE AMFVariant(amf_int32 value) { AMFVariantInit(this); AMFVariantAssignInt64(this, value); } - explicit AMF_INLINE AMFVariant(amf_uint32 value) { AMFVariantInit(this); AMFVariantAssignInt64(this, value); } - explicit AMF_INLINE AMFVariant(amf_double value) { AMFVariantInit(this); AMFVariantAssignDouble(this, value); } - explicit AMF_INLINE AMFVariant(amf_float value) { AMFVariantInit(this); AMFVariantAssignFloat(this, value); } - explicit AMF_INLINE AMFVariant(const AMFRect & value) { AMFVariantInit(this); AMFVariantAssignRect(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFSize & value) { AMFVariantInit(this); AMFVariantAssignSize(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFPoint& value) { AMFVariantInit(this); AMFVariantAssignPoint(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFFloatSize& value) { AMFVariantInit(this); AMFVariantAssignFloatSize(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFFloatPoint2D& value) { AMFVariantInit(this); AMFVariantAssignFloatPoint2D(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFFloatPoint3D& value) { AMFVariantInit(this); AMFVariantAssignFloatPoint3D(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFFloatVector4D& value) { AMFVariantInit(this); AMFVariantAssignFloatVector4D(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFRate & value) { AMFVariantInit(this); AMFVariantAssignRate(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFRatio& value) { AMFVariantInit(this); AMFVariantAssignRatio(this, &value); } - explicit AMF_INLINE AMFVariant(const AMFColor& value) { AMFVariantInit(this); AMFVariantAssignColor(this, &value); } - explicit AMF_INLINE AMFVariant(const char* value) { AMFVariantInit(this); AMFVariantAssignString(this, value); } - explicit AMF_INLINE AMFVariant(const wchar_t* value) { AMFVariantInit(this); AMFVariantAssignWString(this, value); } - explicit AMF_INLINE AMFVariant(AMFInterface* pValue) { AMFVariantInit(this); AMFVariantAssignInterface(this, pValue); } - - ~AMFVariant() { AMFVariantClear(this); } - - AMFVariant& operator=(const AMFVariantStruct& other); - AMFVariant& operator=(const AMFVariantStruct* pOther); - AMFVariant& operator=(const AMFVariant& other); - - AMFVariant& operator=(amf_bool value) { AMFVariantAssignBool(this, value); return *this;} - AMFVariant& operator=(amf_int64 value) { AMFVariantAssignInt64(this, value); return *this;} - AMFVariant& operator=(amf_uint64 value) { AMFVariantAssignInt64(this, (amf_int64)value); return *this;} - AMFVariant& operator=(amf_int32 value) { AMFVariantAssignInt64(this, value); return *this;} - AMFVariant& operator=(amf_uint32 value) { AMFVariantAssignInt64(this, value); return *this;} - AMFVariant& operator=(amf_double value) { AMFVariantAssignDouble(this, value); return *this;} - AMFVariant& operator=(amf_float value) { AMFVariantAssignFloat(this, value); return *this; } - AMFVariant& operator=(const AMFRect & value) { AMFVariantAssignRect(this, &value); return *this;} - AMFVariant& operator=(const AMFSize & value) { AMFVariantAssignSize(this, &value); return *this;} - AMFVariant& operator=(const AMFPoint& value) { AMFVariantAssignPoint(this, &value); return *this;} - AMFVariant& operator=(const AMFFloatSize& value) { AMFVariantAssignFloatSize(this, &value); return *this; } - AMFVariant& operator=(const AMFFloatPoint2D& value) { AMFVariantAssignFloatPoint2D(this, &value); return *this; } - AMFVariant& operator=(const AMFFloatPoint3D& value) { AMFVariantAssignFloatPoint3D(this, &value); return *this; } - AMFVariant& operator=(const AMFFloatVector4D& value) { AMFVariantAssignFloatVector4D(this, &value); return *this; } - AMFVariant& operator=(const AMFRate & value) { AMFVariantAssignRate(this, &value); return *this;} - AMFVariant& operator=(const AMFRatio& value) { AMFVariantAssignRatio(this, &value); return *this;} - AMFVariant& operator=(const AMFColor& value) { AMFVariantAssignColor(this, &value); return *this;} - AMFVariant& operator=(const char* value) { AMFVariantAssignString(this, value); return *this;} - AMFVariant& operator=(const wchar_t* value) { AMFVariantAssignWString(this, value); return *this;} - AMFVariant& operator=(AMFInterface* value) { AMFVariantAssignInterface(this, value); return *this;} - - template AMFVariant& operator=(const AMFInterfacePtr_T& value); - - operator amf_bool() const { return ToBool(); } - operator amf_int64() const { return ToInt64(); } - operator amf_uint64() const { return ToUInt64(); } - operator amf_int32() const { return ToInt32(); } - operator amf_uint32() const { return ToUInt32(); } - operator amf_double() const { return ToDouble(); } - operator amf_float() const { return ToFloat(); } - operator AMFRect () const { return ToRect (); } - operator AMFSize () const { return ToSize (); } - operator AMFPoint() const { return ToPoint(); } - operator AMFFloatSize() const { return ToFloatSize(); } - operator AMFFloatPoint2D() const { return ToFloatPoint2D(); } - operator AMFFloatPoint3D() const { return ToFloatPoint3D(); } - operator AMFFloatVector4D() const { return ToFloatVector4D(); } - operator AMFRate () const { return ToRate (); } - operator AMFRatio() const { return ToRatio(); } - operator AMFColor() const { return ToColor(); } - operator AMFInterface*() const { return ToInterface(); } - - AMF_INLINE amf_bool ToBool() const { return Empty() ? false : GetValue(AMFVariantGetBool); } - AMF_INLINE amf_int64 ToInt64() const { return Empty() ? 0 : GetValue(AMFVariantGetInt64); } - AMF_INLINE amf_uint64 ToUInt64() const { return Empty() ? 0 : GetValue(AMFVariantGetInt64); } - AMF_INLINE amf_int32 ToInt32() const { return Empty() ? 0 : GetValue(AMFVariantGetInt64); } - AMF_INLINE amf_uint32 ToUInt32() const { return Empty() ? 0 : GetValue(AMFVariantGetInt64); } - AMF_INLINE amf_double ToDouble() const { return Empty() ? 0 : GetValue(AMFVariantGetDouble); } - AMF_INLINE amf_float ToFloat() const { return Empty() ? 0 : GetValue(AMFVariantGetFloat); } - AMF_INLINE AMFRect ToRect () const { return Empty() ? AMFRect() : GetValue(AMFVariantGetRect); } - AMF_INLINE AMFSize ToSize () const { return Empty() ? AMFSize() : GetValue(AMFVariantGetSize); } - AMF_INLINE AMFPoint ToPoint() const { return Empty() ? AMFPoint() : GetValue(AMFVariantGetPoint); } - AMF_INLINE AMFFloatSize ToFloatSize() const { return Empty() ? AMFFloatSize() : GetValue(AMFVariantGetFloatSize); } - AMF_INLINE AMFFloatPoint2D ToFloatPoint2D() const { return Empty() ? AMFFloatPoint2D() : GetValue(AMFVariantGetFloatPoint2D); } - AMF_INLINE AMFFloatPoint3D ToFloatPoint3D() const { return Empty() ? AMFFloatPoint3D() : GetValue(AMFVariantGetFloatPoint3D); } - AMF_INLINE AMFFloatVector4D ToFloatVector4D() const { return Empty() ? AMFFloatVector4D() : GetValue(AMFVariantGetFloatVector4D); } - AMF_INLINE AMFRate ToRate () const { return Empty() ? AMFRate() : GetValue(AMFVariantGetRate); } - AMF_INLINE AMFRatio ToRatio() const { return Empty() ? AMFRatio() : GetValue(AMFVariantGetRatio); } - AMF_INLINE AMFColor ToColor() const { return Empty() ? AMFColor() : GetValue(AMFVariantGetColor); } - AMF_INLINE AMFInterface* ToInterface() const { return AMFVariantGetType(this) == AMF_VARIANT_INTERFACE ? this->pInterface : NULL; } - AMF_INLINE String ToString() const; - AMF_INLINE WString ToWString() const; - - bool operator==(const AMFVariantStruct& other) const; - bool operator==(const AMFVariantStruct* pOther) const; - - bool operator!=(const AMFVariantStruct& other) const; - bool operator!=(const AMFVariantStruct* pOther) const; - - void Clear() { AMFVariantClear(this); } - - void Attach(AMFVariantStruct& variant); - AMFVariantStruct Detach(); - - AMFVariantStruct& GetVariant(); - - void ChangeType(AMF_VARIANT_TYPE type, const AMFVariant* pSrc = NULL); - - bool Empty() const; - private: - template - ReturnType GetValue(Getter getter) const; - }; - //---------------------------------------------------------------------------------------------- - // helper String class - //---------------------------------------------------------------------------------------------- - class AMFVariant::String - { - friend class AMFVariant; - private: - void Free() - { - if (m_Str != NULL) - { - AMFVariantFreeString(m_Str); - m_Str = NULL; - } - } - public: - String() :m_Str(NULL){} - String(const char* str) : m_Str(NULL) - { - m_Str = AMFVariantDuplicateString(str); - } - String(const String& p_other) : m_Str(NULL) - { - operator=(p_other); - } - -#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600) -#pragma warning (push) -#pragma warning (disable : 26439) //This kind of function may not throw. Declare it 'noexcept'. - String(String&& p_other) : m_Str(NULL) - { - operator=(p_other); - } -#endif - ~String() - { - Free(); - } - - char& operator[](size_t index) - { - if (index >= size()) - { - resize(index); - } - return m_Str[index]; - } - - String& operator=(const String& p_other) - { - Free(); - m_Str = AMFVariantDuplicateString(p_other.m_Str); - return *this; - } -#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600) - String& operator=(String&& p_other) - { - Free(); - m_Str = p_other.m_Str; - p_other.m_Str = NULL; // Transfer the ownership - return *this; - } -#endif - bool operator==(const String& p_other) const - { - if (m_Str == NULL && p_other.m_Str == NULL) - { - return true; - } - else if ((m_Str == NULL && p_other.m_Str != NULL) || (m_Str != NULL && p_other.m_Str == NULL)) - { - return false; - } - return strcmp(c_str(), p_other.c_str()) == 0; - } - const char* c_str() const { return m_Str; } - size_t size() const - { - if(m_Str == NULL) - { - return 0; - } - return (size_t)strlen(m_Str); - } - - AMF_INLINE size_t length() const { return size(); } - - void resize(size_t sizeAlloc) - { - if(sizeAlloc == 0) - { - Free(); - return; - } - char* str = (char*)amf_variant_alloc(sizeof(char)*(sizeAlloc + 1)); - if(m_Str != NULL) - { - size_t copySize = sizeAlloc; - if(copySize > size()) - { - copySize = size(); - } - memcpy(str, m_Str, copySize * sizeof(char)); - Free(); - str[sizeAlloc] = 0; - } - m_Str = str; - } - private: - char* m_Str; - }; - //---------------------------------------------------------------------------------------------- - // helper WString class - //---------------------------------------------------------------------------------------------- - class AMFVariant::WString - { - friend class AMFVariant; - private: - void Free() - { - if (m_Str != NULL) - { - AMFVariantFreeWString(m_Str); - m_Str = NULL; - } - } - public: - WString() :m_Str(NULL){} - WString(const wchar_t* str) : m_Str(NULL) - { - m_Str = AMFVariantDuplicateWString(str); - } - WString(const WString& p_other) : m_Str(NULL) - { - operator=(p_other); - } -#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600) - WString(WString&& p_other) : m_Str(NULL) - { - operator=(p_other); - } -#endif - ~WString() - { - Free(); - } - - WString& operator=(const WString& p_other) - { - Free(); - m_Str = AMFVariantDuplicateWString(p_other.m_Str); - return *this; - } -#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600) - WString& operator=(WString&& p_other) - { - Free(); - m_Str = p_other.m_Str; - p_other.m_Str = NULL; // Transfer the ownership - return *this; - } -#pragma warning (pop) -#endif - wchar_t& operator[](size_t index) - { - if (index >= size()) - { - resize(index); - } - return m_Str[index]; - } - - bool operator==(const WString& p_other) const - { - if (m_Str == NULL && p_other.m_Str == NULL) - { - return true; - } - else if ((m_Str == NULL && p_other.m_Str != NULL) || (m_Str != NULL && p_other.m_Str == NULL)) - { - return false; - } - return wcscmp(c_str(), p_other.c_str()) == 0; - } - - const wchar_t* c_str() const { return m_Str; } - size_t size() const - { - if(m_Str == NULL) - { - return 0; - } - return (size_t)wcslen(m_Str); - } - - AMF_INLINE size_t length() const { return size(); } - - void resize(size_t sizeAlloc) - { - if(sizeAlloc == 0) - { - Free(); - return; - } - wchar_t* str = (wchar_t*)amf_variant_alloc(sizeof(wchar_t)*(sizeAlloc + 1)); - if(m_Str != NULL) - { - size_t copySize = sizeAlloc; - if(copySize > size()) - { - copySize = size(); - } - memcpy(str, m_Str, copySize * sizeof(wchar_t)); - Free(); - str[sizeAlloc] = 0; - } - m_Str = str; - } - private: - wchar_t* m_Str; - }; - //------------------------------------------------------------------------------------------------- - AMFVariant::String AMFVariant::ToString() const - { - String temp = GetValue(AMFVariantGetString); - return String(temp.c_str()); - } - //------------------------------------------------------------------------------------------------- - AMFVariant::WString AMFVariant::ToWString() const - { - WString temp = GetValue(AMFVariantGetWString); - return WString(temp.c_str()); - } -#endif // defined(__cplusplus) - //---------------------------------------------------------------------------------------------- - // AMF_INLINE implementation of helper functions - //---------------------------------------------------------------------------------------------- - #define AMF_VARIANT_RETURN_IF_INVALID_POINTER(p) \ - { \ - if(p == NULL) \ - { \ - return AMF_INVALID_POINTER; \ - } \ - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantInit(AMFVariantStruct* pVariant) - { - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pVariant); - pVariant->type = AMF_VARIANT_EMPTY; - return AMF_OK; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantClear(AMFVariantStruct* pVariant) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pVariant); - - switch(AMFVariantGetType(pVariant)) - { - case AMF_VARIANT_STRING: - amf_variant_free(AMFVariantString(pVariant)); - pVariant->type = AMF_VARIANT_EMPTY; - break; - - case AMF_VARIANT_WSTRING: - amf_variant_free(AMFVariantWString(pVariant)); - pVariant->type = AMF_VARIANT_EMPTY; - break; - - case AMF_VARIANT_INTERFACE: - if(AMFVariantInterface(pVariant) != NULL) - { -#if defined(__cplusplus) - AMFVariantInterface(pVariant)->Release(); -#else - AMFVariantInterface(pVariant)->pVtbl->Release(AMFVariantInterface(pVariant)); -#endif - AMFVariantInterface(pVariant) = NULL; - } - pVariant->type = AMF_VARIANT_EMPTY; - break; - - default: - pVariant->type = AMF_VARIANT_EMPTY; - break; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantCompare(const AMFVariantStruct* pFirst, const AMFVariantStruct* pSecond, amf_bool* bEqual) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pFirst); - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pSecond); - - if(pFirst == pSecond) - { - *bEqual = true; - } - else if(AMFVariantGetType(pFirst) != AMFVariantGetType(pSecond)) - { - *bEqual = false; - } - else - { - switch(AMFVariantGetType(pFirst)) - { - case AMF_VARIANT_EMPTY: - *bEqual = true; - break; - case AMF_VARIANT_BOOL: - *bEqual = AMFVariantGetBool(pFirst) == AMFVariantBool(pSecond); - break; - case AMF_VARIANT_INT64: - *bEqual = AMFVariantGetInt64(pFirst) == AMFVariantInt64(pSecond); - break; - case AMF_VARIANT_DOUBLE: - *bEqual = AMFVariantGetDouble(pFirst) == AMFVariantDouble(pSecond); - break; - case AMF_VARIANT_FLOAT: - *bEqual = AMFVariantGetFloat(pFirst) == AMFVariantFloat(pSecond); - break; - case AMF_VARIANT_RECT: -#if defined(__cplusplus) - *bEqual = AMFVariantGetRect(pFirst) == AMFVariantGetRect(pSecond); -#else - *bEqual = memcmp(&pFirst->rectValue, &pSecond->rectValue, sizeof(AMFRect)) == 0; -#endif - break; - case AMF_VARIANT_SIZE: -#if defined(__cplusplus) - *bEqual = AMFVariantGetSize(pFirst) == AMFVariantGetSize(pSecond); -#else - *bEqual = memcmp(&pFirst->sizeValue, &pSecond->sizeValue, sizeof(AMFSize)) == 0; -#endif - break; - case AMF_VARIANT_POINT: -#if defined(__cplusplus) - *bEqual = AMFVariantGetPoint(pFirst) == AMFVariantGetPoint(pSecond); -#else - *bEqual = memcmp(&pFirst->pointValue, &pSecond->pointValue, sizeof(AMFPoint)) == 0; -#endif - break; - case AMF_VARIANT_FLOAT_SIZE: -#if defined(__cplusplus) - *bEqual = AMFVariantGetFloatSize(pFirst) == AMFVariantGetFloatSize(pSecond); -#else - *bEqual = memcmp(&pFirst->floatSizeValue, &pSecond->floatSizeValue, sizeof(AMFFloatPoint2D)) == 0; -#endif - break; - case AMF_VARIANT_FLOAT_POINT2D: -#if defined(__cplusplus) - *bEqual = AMFVariantGetFloatPoint2D(pFirst) == AMFVariantGetFloatPoint2D(pSecond); -#else - *bEqual = memcmp(&pFirst->floatPoint2DValue, &pSecond->floatPoint2DValue, sizeof(AMFFloatPoint2D)) == 0; -#endif - break; - case AMF_VARIANT_FLOAT_POINT3D: -#if defined(__cplusplus) - *bEqual = AMFVariantGetFloatPoint3D(pFirst) == AMFVariantGetFloatPoint3D(pSecond); -#else - *bEqual = memcmp(&pFirst->floatPoint3DValue, &pSecond->floatPoint3DValue, sizeof(AMFFloatPoint3D)) == 0; -#endif - break; - case AMF_VARIANT_FLOAT_VECTOR4D: -#if defined(__cplusplus) - *bEqual = AMFVariantGetFloatVector4D(pFirst) == AMFVariantGetFloatVector4D(pSecond); -#else - *bEqual = memcmp(&pFirst->floatVector4DValue, &pSecond->floatVector4DValue, sizeof(AMFFloatPoint3D)) == 0; -#endif - break; - case AMF_VARIANT_RATE: -#if defined(__cplusplus) - *bEqual = AMFVariantGetRate(pFirst) == AMFVariantGetRate(pSecond); -#else - *bEqual = memcmp(&pFirst->rateValue, &pSecond->rateValue, sizeof(AMFRate)) == 0; -#endif - break; - case AMF_VARIANT_RATIO: -#if defined(__cplusplus) - *bEqual = AMFVariantGetRatio(pFirst) == AMFVariantGetRatio(pSecond); -#else - *bEqual = memcmp(&pFirst->ratioValue, &pSecond->ratioValue, sizeof(AMFRatio)) == 0; -#endif - break; - case AMF_VARIANT_COLOR: -#if defined(__cplusplus) - *bEqual = AMFVariantGetColor(pFirst) == AMFVariantGetColor(pSecond); -#else - *bEqual = memcmp(&pFirst->colorValue, &pSecond->colorValue, sizeof(AMFColor)) == 0; -#endif - break; - case AMF_VARIANT_STRING: - *bEqual = strcmp(AMFVariantString(pFirst), AMFVariantString(pSecond)) == 0; - break; - case AMF_VARIANT_WSTRING: - *bEqual = wcscmp(AMFVariantWString(pFirst), AMFVariantWString(pSecond)) == 0; - break; - case AMF_VARIANT_INTERFACE: - *bEqual = AMFVariantInterface(pFirst) == AMFVariantInterface(pSecond); - break; - default: - errRet = AMF_INVALID_ARG; - break; - } - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantCopy(AMFVariantStruct* pDest, const AMFVariantStruct* pSrc) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pSrc); - if(pDest != pSrc) - { - switch(AMFVariantGetType(pSrc)) - { - case AMF_VARIANT_EMPTY: - errRet = AMFVariantInit(pDest); - break; - case AMF_VARIANT_BOOL: - errRet = AMFVariantAssignBool(pDest, AMFVariantBool(pSrc)); - break; - case AMF_VARIANT_INT64: - errRet = AMFVariantAssignInt64(pDest, AMFVariantInt64(pSrc)); - break; - case AMF_VARIANT_DOUBLE: - errRet = AMFVariantAssignDouble(pDest, AMFVariantDouble(pSrc)); - break; - case AMF_VARIANT_FLOAT: - errRet = AMFVariantAssignFloat(pDest, AMFVariantFloat(pSrc)); - break; - case AMF_VARIANT_RECT: - errRet = AMFVariantAssignRect(pDest, &pSrc->rectValue); - break; - case AMF_VARIANT_SIZE: - errRet = AMFVariantAssignSize(pDest, &pSrc->sizeValue); - break; - case AMF_VARIANT_POINT: - errRet = AMFVariantAssignPoint(pDest, &pSrc->pointValue); - break; - case AMF_VARIANT_FLOAT_SIZE: - errRet = AMFVariantAssignFloatSize(pDest, &pSrc->floatSizeValue); - break; - case AMF_VARIANT_FLOAT_POINT2D: - errRet = AMFVariantAssignFloatPoint2D(pDest, &pSrc->floatPoint2DValue); - break; - case AMF_VARIANT_FLOAT_POINT3D: - errRet = AMFVariantAssignFloatPoint3D(pDest, &pSrc->floatPoint3DValue); - break; - case AMF_VARIANT_FLOAT_VECTOR4D: - errRet = AMFVariantAssignFloatVector4D(pDest, &pSrc->floatVector4DValue); - break; - case AMF_VARIANT_RATE: - errRet = AMFVariantAssignRate(pDest, &pSrc->rateValue); - break; - case AMF_VARIANT_RATIO: - errRet = AMFVariantAssignRatio(pDest, &pSrc->ratioValue); - break; - case AMF_VARIANT_COLOR: - errRet = AMFVariantAssignColor(pDest, &pSrc->colorValue); - break; - case AMF_VARIANT_STRING: - errRet = AMFVariantAssignString(pDest, AMFVariantString(pSrc)); - break; - case AMF_VARIANT_WSTRING: - errRet = AMFVariantAssignWString(pDest, AMFVariantWString(pSrc)); - break; - case AMF_VARIANT_INTERFACE: - errRet = AMFVariantAssignInterface(pDest, AMFVariantInterface(pSrc)); - break; - default: - errRet = AMF_INVALID_ARG; - break; - } - } - return errRet; - } - #define AMFVariantTypeEmpty AMF_VARIANT_EMPTY - - #define AMFVariantTypeBool AMF_VARIANT_BOOL - #define AMFVariantTypeInt64 AMF_VARIANT_INT64 - #define AMFVariantTypeDouble AMF_VARIANT_DOUBLE - #define AMFVariantTypeFloat AMF_VARIANT_FLOAT - - #define AMFVariantTypeRect AMF_VARIANT_RECT - #define AMFVariantTypeSize AMF_VARIANT_SIZE - #define AMFVariantTypePoint AMF_VARIANT_POINT - #define AMFVariantTypeFloatPoint2D AMF_VARIANT_FLOAT_POINT2D - #define AMFVariantTypeFloatPoint3D AMF_VARIANT_FLOAT_POINT3D - #define AMFVariantTypeFloatVector4D AMF_VARIANT_FLOAT_VECTOR4D - - #define AMFVariantTypeRate AMF_VARIANT_RATE - #define AMFVariantTypeRatio AMF_VARIANT_RATIO - #define AMFVariantTypeColor AMF_VARIANT_COLOR - - #define AMFVariantTypeString AMF_VARIANT_STRING - #define AMFVariantTypeWString AMF_VARIANT_WSTRING - #define AMFVariantTypeInterface AMF_VARIANT_INTERFACE - -#if defined(__cplusplus) - - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignString(AMFVariantStruct* pDest, const AMFVariant::String& value) - { - return AMFVariantAssignString(pDest, value.c_str()); - } - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignWString(AMFVariantStruct* pDest, const AMFVariant::WString& value) - { - return AMFVariantAssignWString(pDest, value.c_str()); - } - - static AMF_INLINE amf_bool AMFConvertEmptyToBool(void*, AMF_RESULT& res) { res = AMF_OK; return false; } - static AMF_INLINE amf_int64 AMFConvertEmptyToInt64(void*, AMF_RESULT& res) {res = AMF_OK; return 0; } - static AMF_INLINE amf_double AMFConvertEmptyToDouble(void*, AMF_RESULT& res) {res = AMF_OK; return 0; } - static AMF_INLINE amf_float AMFConvertEmptyToFloat(void*, AMF_RESULT& res) { res = AMF_OK; return 0; } - - - static AMF_INLINE AMFVariant::String AMFConvertEmptyToString(void*, AMF_RESULT& res) {res = AMF_OK; return ""; } - static AMF_INLINE AMFVariant::WString AMFConvertEmptyToWString(void*, AMF_RESULT& res) {res = AMF_OK; return L""; } - static AMF_INLINE amf_int64 AMFConvertBoolToInt64(bool value, AMF_RESULT& res){res = AMF_OK; return value ? 1 : 0;} - static AMF_INLINE amf_double AMFConvertBoolToDouble(bool value, AMF_RESULT& res){res = AMF_OK; return value ? 1.0 : 0.0;} - static AMF_INLINE amf_float AMFConvertBoolToFloat(bool value, AMF_RESULT& res) { res = AMF_OK; return value ? 1.0f : 0.0f; } - static AMF_INLINE AMFVariant::String AMFConvertBoolToString(bool value, AMF_RESULT& res){res = AMF_OK; return value ? "true" : "false";} - static AMF_INLINE AMFVariant::WString AMFConvertBoolToWString(bool value, AMF_RESULT& res){res = AMF_OK; return value ? L"true" : L"false";} - static AMF_INLINE bool AMFConvertInt64ToBool(amf_int64 value, AMF_RESULT& res){res = AMF_OK;return value != 0;} - static AMF_INLINE amf_double AMFConvertInt64ToDouble(amf_int64 value, AMF_RESULT& res){res = AMF_OK;return (amf_double)value;} - static AMF_INLINE amf_float AMFConvertInt64ToFloat(amf_int64 value, AMF_RESULT& res) { res = AMF_OK; return (amf_float)value; } - static AMF_INLINE AMFVariant::String AMFConvertInt64ToString(amf_int64 value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%" AMFPRId64, (long long)value); - return buff; - } - static AMF_INLINE AMFVariant::WString AMFConvertInt64ToWString(amf_int64 value, AMF_RESULT& res) - { - res = AMF_OK; - wchar_t buff[0xFF]; - swprintf(buff, 0xFF, L"%" LPRId64, (long long)value); - return buff; - } - - static AMF_INLINE bool AMFConvertDoubleToBool(amf_double value, AMF_RESULT& res){res = AMF_OK;return value != 0;} - static AMF_INLINE bool AMFConvertFloatToBool(amf_float value, AMF_RESULT& res) { res = AMF_OK; return value != 0; } - static AMF_INLINE amf_int64 AMFConvertDoubleToInt64(amf_double value, AMF_RESULT& res){res = AMF_OK;return amf_int64(value);} - static AMF_INLINE amf_int64 AMFConvertFloatToInt64(amf_float value, AMF_RESULT& res) { res = AMF_OK; return amf_int64(value); } - static AMF_INLINE AMFVariant::String AMFConvertDoubleToString(amf_double value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%lf", value); - return buff; - } - static AMF_INLINE AMFVariant::String AMFConvertFloatToString(amf_float value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%f", value); - return buff; - } - static AMF_INLINE AMFVariant::WString AMFConvertDoubleToWString(amf_double value, AMF_RESULT& res) - { - res = AMF_OK; - wchar_t buff[0xFF]; - swprintf(buff, 0xFF, L"%lf", value); - return buff; - } - static AMF_INLINE AMFVariant::WString AMFConvertFloatToWString(amf_float value, AMF_RESULT& res) - { - res = AMF_OK; - wchar_t buff[0xFF]; - swprintf(buff, 0xFF, L"%f", value); - return buff; - } - - static AMF_INLINE bool AMFConvertStringToBool(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFVariant::String tmp = value; - if(( tmp == "true") || ( tmp == "True") || ( tmp == "TRUE") || ( tmp == "1") ) - { - return true; - } - else - { - if(( tmp == "false") || ( tmp == "False") || ( tmp == "FALSE") || ( tmp == "0") ) - { - return false; - } - } - res = AMF_INVALID_ARG; - return false; - } - - static AMF_INLINE amf_int64 AMFConvertStringToInt64(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - long long tmp = 0; - int readElements = 0; - - if(value.size() > 2 && ( value.c_str()[0] == '0') && ( value.c_str()[1] == 'x') ) - { - readElements = sscanf(value.c_str(), "0x%" AMFPRIx64, &tmp); - } - else if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%" AMFPRId64, &tmp); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return 0; - } - - static AMF_INLINE amf_double AMFConvertStringToDouble(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - amf_double tmp = 0; - int readElements = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%lf", &tmp); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return 0; - } - static AMF_INLINE amf_float AMFConvertStringToFloat(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - amf_float tmp = 0; - int readElements = 0; - if (value.size() > 0) - { - readElements = sscanf(value.c_str(), "%f", &tmp); - } - if (readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return 0; - } - - static AMF_INLINE AMFVariant::WString AMFConvertStringToWString(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; -// return amf_from_utf8_to_unicode(value); - AMFVariant::WString result; - if(0 == value.size()) - { - return result; - } - const char* pUtf8Buff = value.c_str(); - -#if defined(_WIN32) - _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); - int UnicodeBuffSize = ::MultiByteToWideChar(CP_UTF8, 0, pUtf8Buff, -1, NULL, 0); - if(0 == UnicodeBuffSize) - { - return result; - } - UnicodeBuffSize += 8; // get some extra space - result.resize(UnicodeBuffSize); - UnicodeBuffSize = ::MultiByteToWideChar(CP_UTF8, 0, pUtf8Buff, -1, (LPWSTR)result.c_str(), UnicodeBuffSize); - UnicodeBuffSize--; - -#elif defined(__ANDROID__) - // on android mbstowcs cannot be used to define length - char* old_locale = setlocale(LC_CTYPE, "en_US.UTF8"); - - mbstate_t mbs; - mbrlen(NULL, 0, &mbs); - int len = value.size(); - const char* pt = pUtf8Buff; - int UnicodeBuffSize = 0; - while(len > 0) - { - size_t length = mbrlen (pt, len, &mbs); //MM TODO Android always return 1 - if((length == 0) || (length > len)) - { - break; - } - UnicodeBuffSize++; - len -= length; - pt += length; - } - UnicodeBuffSize += 8; // get some extra space - result.resize(UnicodeBuffSize); - - mbrlen (NULL, 0, &mbs); - len = value.size(); - pt = pUtf8Buff; - UnicodeBuffSize = 0; - while(len > 0) - { - size_t length = mbrlen (pt, len, &mbs); - if((length == 0) || (length > len)) - { - break; - } - mbrtowc(&((wchar_t*)(result.c_str()))[UnicodeBuffSize], pt, length, &mbs); //MM TODO Android always return 1 char - UnicodeBuffSize++; - len -= length; - pt += length; - } - setlocale(LC_CTYPE, old_locale); - - #else - char* old_locale = setlocale(LC_CTYPE, "en_US.UTF8"); - size_t UnicodeBuffSize = mbstowcs(NULL, pUtf8Buff, 0); - if(0 == UnicodeBuffSize) - { - return result; - } - UnicodeBuffSize += 8; // get some extra space - result.resize(UnicodeBuffSize); - UnicodeBuffSize = mbstowcs((wchar_t*)result.c_str(), pUtf8Buff, UnicodeBuffSize + 1); - setlocale(LC_CTYPE, old_locale); -#endif - result.resize(UnicodeBuffSize); - return result; - } - static AMF_INLINE AMFVariant::String AMFConvertWStringToString(const AMFVariant::WString& value, AMF_RESULT& res) - { - res = AMF_OK; -// return amf_from_unicode_to_utf8(value); - AMFVariant::String result; - if(0 == value.size()) - { - return result; - } - - const wchar_t* pwBuff = value.c_str(); - -#if defined(_WIN32) - _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); - int Utf8BuffSize = ::WideCharToMultiByte(CP_UTF8, 0, pwBuff, -1, NULL, 0, NULL, NULL); - if(0 == Utf8BuffSize) - { - return result; - } - Utf8BuffSize += 8; // get some extra space - result.resize(Utf8BuffSize); - Utf8BuffSize = ::WideCharToMultiByte(CP_UTF8, 0, pwBuff, -1, (LPSTR)result.c_str(), Utf8BuffSize, NULL, NULL); - Utf8BuffSize--; -#elif defined(__ANDROID__) - char* old_locale = setlocale(LC_CTYPE, "en_US.UTF8"); - int Utf8BuffSize = value.length(); - if(0 == Utf8BuffSize) - { - return result; - } - Utf8BuffSize += 8; // get some extra space - result.resize(Utf8BuffSize); - - mbstate_t mbs; - mbrlen(NULL, 0, &mbs); - - Utf8BuffSize = 0; - for( int i = 0; i < value.length(); i++) - { - //MM TODO Android - not implemented - //int written = wcrtomb(&result[Utf8BuffSize], pwBuff[i], &mbs); - ((char*)(result.c_str()))[Utf8BuffSize] = (char)(pwBuff[i]); - int written = 1; - // temp replacement - Utf8BuffSize += written; - } - setlocale(LC_CTYPE, old_locale); - -#else - char* old_locale = setlocale(LC_CTYPE, "en_US.UTF8"); - size_t Utf8BuffSize = wcstombs(NULL, pwBuff, 0); - if(0 == Utf8BuffSize) - { - return result; - } - Utf8BuffSize += 8; // get some extra space - result.resize(Utf8BuffSize); - Utf8BuffSize = wcstombs((char*)result.c_str(), pwBuff, Utf8BuffSize + 1); - - setlocale(LC_CTYPE, old_locale); -#endif - result.resize(Utf8BuffSize); - return result; - } - - - static AMF_INLINE bool AMFConvertWStringToBool(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToBool(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE amf_int64 AMFConvertWStringToInt64(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToInt64(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE amf_double AMFConvertWStringToDouble(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToDouble(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE amf_float AMFConvertWStringToFloat(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToFloat(AMFConvertWStringToString(value, res), res); - } - - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertRectToString(const AMFRect& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%d,%d,%d,%d", value.left, value.top, value.right, value.bottom); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertSizeToString(const AMFSize& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%d,%d", value.width, value.height); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertPointToString(const AMFPoint& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%d,%d", value.x, value.y); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertFloatSizeToString(const AMFFloatSize& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%f,%f", value.width, value.height); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertFloatPoint2DToString(const AMFFloatPoint2D& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%f,%f", value.x, value.y); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertFloatPoint3DToString(const AMFFloatPoint3D& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%f,%f,%f", value.x, value.y, value.z); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertFloatVector4DToString(const AMFFloatVector4D& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%f,%f,%f,%f", value.x, value.y, value.z, value.w); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertRateToString(const AMFRate& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%u,%u", value.num, value.den); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertRatioToString(const AMFRatio& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%u,%u", value.num, value.den); - return buff; - } - static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertColorToString(const AMFColor& value, AMF_RESULT& res) - { - res = AMF_OK; - char buff[0xFF]; - sprintf(buff, "%u,%u,%u,%u", value.r, value.g, value.b, value.a); - return buff; - } - - static AMF_INLINE AMFRect AMF_STD_CALL AMFConvertStringToRect(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFRect tmp = {}; - int readElements = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%d,%d,%d,%d", &tmp.left, &tmp.top, &tmp.right, &tmp.bottom); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - - static AMF_INLINE AMFSize AMF_STD_CALL AMFConvertStringToSize(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFSize tmp = {}; - int readElements = 0; - if(value.size() > 0) - { - if(strchr(value.c_str(), ',') != nullptr) - { - readElements = sscanf(value.c_str(), "%d,%d", &tmp.width, &tmp.height); - } - else if (strchr(value.c_str(), 'x') != nullptr) - { - readElements = sscanf(value.c_str(), "%dx%d", &tmp.width, &tmp.height); - } - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFPoint AMF_STD_CALL AMFConvertStringToPoint(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFPoint tmp = {}; - int readElements = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%d,%d", &tmp.x, &tmp.y); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFFloatSize AMF_STD_CALL AMFConvertStringToFloatSize(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFFloatSize tmp = {}; - int readElements = 0; - if (value.size() > 0) - { - readElements = sscanf(value.c_str(), "%f,%f", &tmp.width, &tmp.height); - } - if (readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFFloatPoint2D AMF_STD_CALL AMFConvertStringToFloatPoint2D(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFFloatPoint2D tmp = {}; - int readElements = 0; - if (value.size() > 0) - { - readElements = sscanf(value.c_str(), "%f,%f", &tmp.x, &tmp.y); - } - if (readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFFloatPoint3D AMF_STD_CALL AMFConvertStringToFloatPoint3D(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFFloatPoint3D tmp = {}; - int readElements = 0; - if (value.size() > 0) - { - readElements = sscanf(value.c_str(), "%f,%f,%f", &tmp.x, &tmp.y, &tmp.z); - } - if (readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFFloatVector4D AMF_STD_CALL AMFConvertStringToFloatVector4D(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFFloatVector4D tmp = {}; - int readElements = 0; - if (value.size() > 0) - { - readElements = sscanf(value.c_str(), "%f,%f,%f,%f", &tmp.x, &tmp.y, &tmp.z, &tmp.w); - } - if (readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFRate AMF_STD_CALL AMFConvertStringToRate(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFRate tmp = {}; - int readElements = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFRatio AMF_STD_CALL AMFConvertStringToRatio(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - AMFRatio tmp = {}; - int readElements = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den); - } - if(readElements) - { - return tmp; - } - res = AMF_INVALID_ARG; - return tmp; - } - static AMF_INLINE AMFColor AMF_STD_CALL AMFConvertStringToColor(const AMFVariant::String& value, AMF_RESULT& res) - { - res = AMF_OK; - int readElements = 0; - amf_uint32 r = 0; - amf_uint32 g = 0; - amf_uint32 b = 0; - amf_uint32 a = 0; - if(value.size() > 0) - { - readElements = sscanf(value.c_str(), "%u,%u,%u,%u", &r, &g, &b, &a); - } - if(readElements) - { - return AMFConstructColor((amf_uint8)r, (amf_uint8)g, (amf_uint8)b, (amf_uint8)a); - } - res = AMF_INVALID_ARG; - return AMFConstructColor(0, 0, 0, 255); - } -/////////////////////// - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertRectToWString(const AMFRect& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertRectToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertSizeToWString(const AMFSize& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertSizeToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertPointToWString(const AMFPoint& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertPointToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertFloatSizeToWString(const AMFFloatSize& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertFloatSizeToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertFloatPoint2DToWString(const AMFFloatPoint2D& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertFloatPoint2DToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertFloatPoint3DToWString(const AMFFloatPoint3D& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertFloatPoint3DToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertFloatVector4DToWString(const AMFFloatVector4D& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertFloatVector4DToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertRateToWString(const AMFRate& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertRateToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertRatioToWString(const AMFRatio& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertRatioToString(value, res), res); - } - static AMF_INLINE AMFVariant::WString AMF_STD_CALL AMFConvertColorToWString(const AMFColor& value, AMF_RESULT& res) - { - return AMFConvertStringToWString(AMFConvertColorToString(value, res), res); - } - - static AMF_INLINE AMFRect AMF_STD_CALL AMFConvertWStringToRect(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToRect(AMFConvertWStringToString(value, res), res); - } - - static AMF_INLINE AMFSize AMF_STD_CALL AMFConvertWStringToSize(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToSize(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFPoint AMF_STD_CALL AMFConvertWStringToPoint(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToPoint(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFFloatSize AMF_STD_CALL AMFConvertWStringToFloatSize(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToFloatSize(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFFloatPoint2D AMF_STD_CALL AMFConvertWStringToFloatPoint2D(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToFloatPoint2D(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFFloatPoint3D AMF_STD_CALL AMFConvertWStringToFloatPoint3D(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToFloatPoint3D(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFFloatVector4D AMF_STD_CALL AMFConvertWStringToFloatVector4D(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToFloatVector4D(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFRate AMF_STD_CALL AMFConvertWStringToRate(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToRate(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFRatio AMF_STD_CALL AMFConvertWStringToRatio(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToRatio(AMFConvertWStringToString(value, res), res); - } - static AMF_INLINE AMFColor AMF_STD_CALL AMFConvertWStringToColor(const AMFVariant::WString& value, AMF_RESULT& res) - { - return AMFConvertStringToColor(AMFConvertWStringToString(value, res), res); - } - - //------------------------------------------------------------------------------------------------- - #define AMFConvertTool(srcType, dstType)\ - if(AMFVariantGetType(pSrc) == AMFVariantType##srcType && newType == AMFVariantType##dstType)\ - {\ - AMF_RESULT res = AMF_OK;\ - AMFVariantAssign##dstType(pDest, AMFConvert##srcType##To##dstType(AMFVariant##srcType(pSrc), res));\ - return res;\ - }\ - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantChangeType(AMFVariantStruct* pDest, const AMFVariantStruct* pSrc, AMF_VARIANT_TYPE newType) - { - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - if(pSrc == 0) - { - pSrc = pDest; - } - - if(AMFVariantGetType(pSrc) == newType) - { - if(pDest == pSrc) - { - return AMF_OK; - } - return AMFVariantCopy(pDest, pSrc); - } - AMFVariantClear(pDest); - - AMFConvertTool(Empty, Bool); - AMFConvertTool(Empty, Int64); - AMFConvertTool(Empty, Double); - AMFConvertTool(Empty, Float); - AMFConvertTool(Empty, String); - AMFConvertTool(Empty, WString); - - AMFConvertTool(Bool, Int64); - AMFConvertTool(Bool, Double); - AMFConvertTool(Bool, Float); - AMFConvertTool(Bool, String); - AMFConvertTool(Bool, WString); - - AMFConvertTool(Int64, Bool); - AMFConvertTool(Int64, Double); - AMFConvertTool(Int64, Float); - AMFConvertTool(Int64, String); - AMFConvertTool(Int64, WString); - - AMFConvertTool(Double, Bool); - AMFConvertTool(Double, Int64); - AMFConvertTool(Double, String); - AMFConvertTool(Double, String); - - AMFConvertTool(Float, Bool); - AMFConvertTool(Float, Int64); - AMFConvertTool(Float, String); - AMFConvertTool(Float, String); - - AMFConvertTool(String, Bool); - AMFConvertTool(String, Int64); - AMFConvertTool(String, Double); - AMFConvertTool(String, Float); - AMFConvertTool(String, WString); - - AMFConvertTool(WString, Bool); - AMFConvertTool(WString, Int64); - AMFConvertTool(WString, Double); - AMFConvertTool(WString, Float); - AMFConvertTool(WString, String); - - AMFConvertTool(String, Rect); - AMFConvertTool(String, Size); - AMFConvertTool(String, Point); - AMFConvertTool(String, Rate); - AMFConvertTool(String, Ratio); - AMFConvertTool(String, Color); - - AMFConvertTool(Rect , String); - AMFConvertTool(Size , String); - AMFConvertTool(Point, String); - AMFConvertTool(Rate , String); - AMFConvertTool(Ratio, String); - AMFConvertTool(Color, String); - - AMFConvertTool(WString, Rect); - AMFConvertTool(WString, Size); - AMFConvertTool(WString, Point); - AMFConvertTool(WString, Rate); - AMFConvertTool(WString, Ratio); - AMFConvertTool(WString, Color); - - AMFConvertTool(Rect , WString); - AMFConvertTool(Size , WString); - AMFConvertTool(Point, WString); - AMFConvertTool(Rate , WString); - AMFConvertTool(Ratio, WString); - AMFConvertTool(Color, WString); - - return AMF_INVALID_ARG; - } -#endif // #if defined(__cplusplus) - - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignBool(AMFVariantStruct* pDest, amf_bool value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_BOOL; - AMFVariantBool(pDest) = value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignInt64(AMFVariantStruct* pDest, amf_int64 value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_INT64; - AMFVariantInt64(pDest) = value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignDouble(AMFVariantStruct* pDest, amf_double value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_DOUBLE; - AMFVariantDouble(pDest) = value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloat(AMFVariantStruct* pDest, amf_float value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if (errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_FLOAT; - AMFVariantFloat(pDest) = value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignString(AMFVariantStruct* pDest, const char* pValue) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - const size_t size = (strlen(pValue) + 1); - pDest->type = AMF_VARIANT_STRING; - AMFVariantString(pDest) = (char*)amf_variant_alloc(size * sizeof(char)); - if(AMFVariantString(pDest)) - { - memcpy(AMFVariantString(pDest), pValue, size * sizeof(char)); - } - else - { - errRet = AMF_OUT_OF_MEMORY; - } - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignWString(AMFVariantStruct* pDest, const wchar_t* pValue) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - const size_t size = (wcslen(pValue) + 1); - pDest->type = AMF_VARIANT_WSTRING; - AMFVariantWString(pDest) = (wchar_t*)amf_variant_alloc(size * sizeof(wchar_t)); - if(AMFVariantWString(pDest)) - { - memcpy(AMFVariantWString(pDest), pValue, size * sizeof(wchar_t)); - } - else - { - errRet = AMF_OUT_OF_MEMORY; - } - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignInterface(AMFVariantStruct* pDest, AMFInterface* pValue) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - //AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue);//can be NULL - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_INTERFACE; - AMFVariantInterface(pDest) = pValue; - if(AMFVariantInterface(pDest)) - { -#if defined(__cplusplus) - AMFVariantInterface(pDest)->Acquire(); -#else - AMFVariantInterface(pDest)->pVtbl->Acquire(AMFVariantInterface(pDest)); -#endif - } - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRect(AMFVariantStruct* pDest, const AMFRect& value) - { - return AMFVariantAssignRect(pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRect (AMFVariantStruct* pDest, const AMFRect* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_RECT; - AMFVariantRect(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignSize (AMFVariantStruct* pDest, const AMFSize& value) - { - return AMFVariantAssignSize (pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignSize (AMFVariantStruct* pDest, const AMFSize* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_SIZE; - AMFVariantSize(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignPoint(AMFVariantStruct* pDest, const AMFPoint& value) - { - return AMFVariantAssignPoint(pDest, &value); - } - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatSize(AMFVariantStruct* pDest, const AMFFloatSize& value) - { - return AMFVariantAssignFloatSize(pDest, &value); - } - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint2D(AMFVariantStruct* pDest, const AMFFloatPoint2D& value) - { - return AMFVariantAssignFloatPoint2D(pDest, &value); - } - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint3D(AMFVariantStruct* pDest, const AMFFloatPoint3D& value) - { - return AMFVariantAssignFloatPoint3D(pDest, &value); - } - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatVector4D(AMFVariantStruct* pDest, const AMFFloatVector4D& value) - { - return AMFVariantAssignFloatVector4D(pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignPoint(AMFVariantStruct* pDest, const AMFPoint* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_POINT; - AMFVariantPoint(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatSize(AMFVariantStruct* pDest, const AMFFloatSize* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if (errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_FLOAT_SIZE; - AMFVariantFloatSize(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint2D(AMFVariantStruct* pDest, const AMFFloatPoint2D* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if (errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_FLOAT_POINT2D; - AMFVariantFloatPoint2D(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatPoint3D(AMFVariantStruct* pDest, const AMFFloatPoint3D* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if (errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_FLOAT_POINT3D; - AMFVariantFloatPoint3D(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignFloatVector4D(AMFVariantStruct* pDest, const AMFFloatVector4D* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if (errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_FLOAT_VECTOR4D; - AMFVariantFloatVector4D(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRate (AMFVariantStruct* pDest, const AMFRate& value) - { - return AMFVariantAssignRate (pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRate (AMFVariantStruct* pDest, const AMFRate* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_RATE; - AMFVariantRate(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRatio(AMFVariantStruct* pDest, const AMFRatio& value) - { - return AMFVariantAssignRatio(pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignRatio(AMFVariantStruct* pDest, const AMFRatio* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_RATIO; - AMFVariantRatio(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignColor(AMFVariantStruct* pDest, const AMFColor& value) - { - return AMFVariantAssignColor(pDest, &value); - } -#endif - //------------------------------------------------------------------------------------------------- - static AMF_INLINE AMF_RESULT AMF_CDECL_CALL AMFVariantAssignColor(AMFVariantStruct* pDest, const AMFColor* value) - { - AMF_RESULT errRet = AMF_OK; - AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest); - - errRet = AMFVariantInit(pDest); - if(errRet == AMF_OK) - { - pDest->type = AMF_VARIANT_COLOR; - AMFVariantColor(pDest) = *value; - } - return errRet; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE char* AMF_CDECL_CALL AMFVariantDuplicateString(const char* from) - { - char* ret = 0; - if(from) - { - ret = (char*)amf_variant_alloc(sizeof(char)*(strlen(from) + 1)); - if(ret) - { - strcpy(ret, from); - } - } - return ret; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE void AMF_CDECL_CALL AMFVariantFreeString(char* from) - { - amf_variant_free(from); - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE wchar_t* AMF_CDECL_CALL AMFVariantDuplicateWString(const wchar_t* from) - { - wchar_t* ret = 0; - if(from) - { - ret = (wchar_t*)amf_variant_alloc(sizeof(wchar_t)*(wcslen(from) + 1)); - if(ret) - { - wcscpy(ret, from); - } - } - return ret; - } - //------------------------------------------------------------------------------------------------- - static AMF_INLINE void AMF_CDECL_CALL AMFVariantFreeWString(wchar_t* from) - { - amf_variant_free(from); - } - //---------------------------------------------------------------------------------------------- - // AMF_INLINE implementation of AMFVariant class - //---------------------------------------------------------------------------------------------- -#if defined(__cplusplus) - AMF_INLINE AMFVariant::AMFVariant(const AMFVariantStruct* pOther) - { - AMFVariantInit(this); - if(pOther != NULL) - { - AMFVariantCopy(this, const_cast(pOther)); - } - } - //------------------------------------------------------------------------------------------------- - template - AMFVariant::AMFVariant(const AMFInterfacePtr_T& pValue) - { - AMFVariantInit(this); - AMFVariantAssignInterface(this, pValue); - } - //------------------------------------------------------------------------------------------------- - template - ReturnType AMFVariant::GetValue(Getter getter) const - { - ReturnType str = ReturnType(); - if(AMFVariantGetType(this) == variantType) - { - str = static_cast(getter(this)); - } - else - { - AMFVariant varDest; - varDest.ChangeType(variantType, this); - if(varDest.type != AMF_VARIANT_EMPTY) - { - str = static_cast(getter(&varDest)); - } - } - return str; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariantStruct& other) - { - AMFVariantClear(this); - AMFVariantCopy(this, const_cast(&other)); - return *this; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariantStruct* pOther) - { - if(pOther != NULL) - { - AMFVariantClear(this); - AMFVariantCopy(this, const_cast(pOther)); - } - return *this; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariant& other) - { - AMFVariantClear(this); - AMFVariantCopy(this, - const_cast(static_cast(&other))); - return *this; - } - //------------------------------------------------------------------------------------------------- - template - AMFVariant& AMFVariant::operator=(const AMFInterfacePtr_T& value) - { - AMFVariantClear(this); - AMFVariantAssignInterface(this, value); - return *this; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE bool AMFVariant::operator==(const AMFVariantStruct& other) const - { - return *this == &other; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE bool AMFVariant::operator==(const AMFVariantStruct* pOther) const - { - //TODO: double check - amf_bool ret = false; - if(pOther == NULL) - { - ret = false; - } - else - { - AMFVariantCompare(this, pOther, &ret); - } - return ret; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE bool AMFVariant::operator!=(const AMFVariantStruct& other) const - { - return !(*this == &other); - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE bool AMFVariant::operator!=(const AMFVariantStruct* pOther) const - { - return !(*this == pOther); - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE void AMFVariant::Attach(AMFVariantStruct& variant) - { - Clear(); - memcpy(this, &variant, sizeof(variant)); - AMFVariantGetType(&variant) = AMF_VARIANT_EMPTY; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE AMFVariantStruct AMFVariant::Detach() - { - AMFVariantStruct varResult = *this; - AMFVariantGetType(this) = AMF_VARIANT_EMPTY; - return varResult; - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE AMFVariantStruct& AMFVariant::GetVariant() - { - return *static_cast(this); - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE void AMFVariant::ChangeType(AMF_VARIANT_TYPE newType, const AMFVariant* pSrc) - { - AMFVariantChangeType(this, pSrc, newType); - } - //------------------------------------------------------------------------------------------------- - AMF_INLINE bool AMFVariant::Empty() const - { - return type == AMF_VARIANT_EMPTY; - } - //------------------------------------------------------------------------------------------------- -#endif // #if defined(__cplusplus) - -#if defined(__cplusplus) -} //namespace amf -#endif - -#endif //#ifndef AMF_Variant_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/Version.h b/plugins/obs-ffmpeg/external/AMF/include/core/Version.h deleted file mode 100644 index 102587bb66e476..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/Version.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -/** -*************************************************************************************************** -* @file Version.h -* @brief Version declaration -*************************************************************************************************** -*/ -#ifndef AMF_Version_h -#define AMF_Version_h -#pragma once - -#include "Platform.h" - -#define AMF_MAKE_FULL_VERSION(VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE, VERSION_BUILD_NUM) ( ((amf_uint64)(VERSION_MAJOR) << 48ull) | ((amf_uint64)(VERSION_MINOR) << 32ull) | ((amf_uint64)(VERSION_RELEASE) << 16ull) | (amf_uint64)(VERSION_BUILD_NUM)) - -#define AMF_GET_MAJOR_VERSION(x) ((x >> 48ull) & 0xFFFF) -#define AMF_GET_MINOR_VERSION(x) ((x >> 32ull) & 0xFFFF) -#define AMF_GET_SUBMINOR_VERSION(x) ((x >> 16ull) & 0xFFFF) -#define AMF_GET_BUILD_VERSION(x) ((x >> 0ull) & 0xFFFF) - -#define AMF_VERSION_MAJOR 1 -#define AMF_VERSION_MINOR 4 -#define AMF_VERSION_RELEASE 29 -#define AMF_VERSION_BUILD_NUM 0 - -#define AMF_FULL_VERSION AMF_MAKE_FULL_VERSION(AMF_VERSION_MAJOR, AMF_VERSION_MINOR, AMF_VERSION_RELEASE, AMF_VERSION_BUILD_NUM) - -#endif //#ifndef AMF_Version_h diff --git a/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h b/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h deleted file mode 100644 index 188e36c703fba1..00000000000000 --- a/plugins/obs-ffmpeg/external/AMF/include/core/VulkanAMF.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// Notice Regarding Standards. AMD does not provide a license or sublicense to -// any Intellectual Property Rights relating to any standards, including but not -// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4; -// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3 -// (collectively, the "Media Technologies"). For clarity, you will pay any -// royalties due for such third party technologies, which may include the Media -// Technologies that are owed as a result of AMD providing the Software to you. -// -// MIT license -// -// Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#ifndef __VulkanAMF_h__ -#define __VulkanAMF_h__ -#pragma once -#include "Platform.h" - -#include "vulkan/vulkan.h" - -#if defined(__cplusplus) -namespace amf -{ -#endif - typedef struct AMFVulkanDevice - { - amf_size cbSizeof; // sizeof(AMFVulkanDevice) - void* pNext; // reserved for extensions - VkInstance hInstance; - VkPhysicalDevice hPhysicalDevice; - VkDevice hDevice; - } AMFVulkanDevice; - - typedef struct AMFVulkanSync - { - amf_size cbSizeof; // sizeof(AMFVulkanSync) - void* pNext; // reserved for extensions - VkSemaphore hSemaphore; // VkSemaphore; can be nullptr - bool bSubmitted; // if true - wait for hSemaphore. re-submit hSemaphore if not synced by other ways and set to true - VkFence hFence; // To sync on CPU; can be nullptr. Submitted in vkQueueSubmit. If waited for hFence, null it, do not delete or reset. - } AMFVulkanSync; - - typedef struct AMFVulkanBuffer - { - amf_size cbSizeof; // sizeof(AMFVulkanBuffer) - void* pNext; // reserved for extensions - VkBuffer hBuffer; - VkDeviceMemory hMemory; - amf_int64 iSize; - amf_int64 iAllocatedSize; // for reuse - amf_uint32 eAccessFlags; // VkAccessFlagBits - amf_uint32 eUsage; // AMF_BUFFER_USAGE - amf_uint32 eAccess; // AMF_MEMORY_CPU_ACCESS - AMFVulkanSync Sync; - } AMFVulkanBuffer; - - typedef struct AMFVulkanSurface - { - amf_size cbSizeof; // sizeof(AMFVulkanSurface) - void* pNext; // reserved for extensions - // surface properties - VkImage hImage; // vulkan native image for which the surface is created - VkDeviceMemory hMemory; // memory for hImage, can be nullptr - amf_int64 iSize; // memory size - amf_uint32 eFormat; // VkFormat - amf_int32 iWidth; // image width - amf_int32 iHeight; // image height - amf_uint32 eCurrentLayout; // VkImageLayout - amf_uint32 eUsage; // AMF_SURFACE_USAGE - amf_uint32 eAccess; // AMF_MEMORY_CPU_ACCESS - AMFVulkanSync Sync; // To sync on GPU - } AMFVulkanSurface; - - typedef struct AMFVulkanView - { - amf_size cbSizeof; // sizeof(AMFVulkanView) - void* pNext; // reserved for extensions - // surface properties - AMFVulkanSurface *pSurface; - VkImageView hView; - amf_int32 iPlaneWidth; - amf_int32 iPlaneHeight; - amf_int32 iPlaneWidthPitch; - amf_int32 iPlaneHeightPitch; - } AMFVulkanView; - -#define AMF_CONTEXT_VULKAN_COMPUTE_QUEUE L"VulkanComputeQueue" // amf_int64; default=0; Compute queue index in range [0, (VkQueueFamilyProperties.queueCount-1)] of the compute queue family. - -#if defined(__cplusplus) -} // namespace amf -#endif -#endif // __VulkanAMF_h__ diff --git a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt index 85347e73dfeaf0..7ecb4e89d2f70c 100644 --- a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt +++ b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt @@ -1,8 +1,10 @@ project(obs-amf-test) -include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/libobs) - add_executable(obs-amf-test) + +target_include_directories(obs-amf-test PRIVATE ${CMAKE_SOURCE_DIR}/libobs + ${CMAKE_PREFIX_PATH}/include) + target_sources(obs-amf-test PRIVATE obs-amf-test.cpp) target_link_libraries(obs-amf-test d3d11 dxgi dxguid) diff --git a/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp b/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp index cf8f882f566811..f67a2232221a4a 100644 --- a/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp +++ b/plugins/obs-ffmpeg/obs-amf-test/obs-amf-test.cpp @@ -1,8 +1,8 @@ -#include "../external/AMF/include/core/Factory.h" -#include "../external/AMF/include/core/Trace.h" -#include "../external/AMF/include/components/VideoEncoderVCE.h" -#include "../external/AMF/include/components/VideoEncoderHEVC.h" -#include "../external/AMF/include/components/VideoEncoderAV1.h" +#include +#include +#include +#include +#include #include diff --git a/plugins/obs-ffmpeg/texture-amf.cpp b/plugins/obs-ffmpeg/texture-amf.cpp index f64f3275c6c8a3..28094b1d80b9aa 100644 --- a/plugins/obs-ffmpeg/texture-amf.cpp +++ b/plugins/obs-ffmpeg/texture-amf.cpp @@ -14,11 +14,11 @@ #include #include -#include "external/AMF/include/components/VideoEncoderHEVC.h" -#include "external/AMF/include/components/VideoEncoderVCE.h" -#include "external/AMF/include/components/VideoEncoderAV1.h" -#include "external/AMF/include/core/Factory.h" -#include "external/AMF/include/core/Trace.h" +#include +#include +#include +#include +#include #include #include From f4e90a5bd71c4d53f68c3cd42563340248057dcb Mon Sep 17 00:00:00 2001 From: tytan652 Date: Tue, 17 Jan 2023 15:08:45 +0100 Subject: [PATCH 0301/2225] obs-ffmpeg,cmake: Add a finder for AMF headers --- cmake/Modules/FindAMF.cmake | 98 +++++++++++++++++++ plugins/obs-ffmpeg/CMakeLists.txt | 3 + .../obs-ffmpeg/obs-amf-test/CMakeLists.txt | 7 +- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 cmake/Modules/FindAMF.cmake diff --git a/cmake/Modules/FindAMF.cmake b/cmake/Modules/FindAMF.cmake new file mode 100644 index 00000000000000..46852f293bbc0a --- /dev/null +++ b/cmake/Modules/FindAMF.cmake @@ -0,0 +1,98 @@ +#[=======================================================================[.rst +FindAMF +---------- + +FindModule for AMF and associated headers + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``AMF::AMF``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``AMF_FOUND`` + True, if headers were found. +``AMF_VERSION`` + Detected version of found AMF headers. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``AMF_INCLUDE_DIR`` + Directory containing ``AMF/core/Factory.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_path( + AMF_INCLUDE_DIR + NAMES AMF/core/Factory.h + PATHS /usr/include /usr/local/include + DOC "AMF include directory") + +if(EXISTS "${AMF_INCLUDE_DIR}/AMF/core/Version.h") + file(STRINGS "${AMF_INCLUDE_DIR}/AMF/core/Version.h" _version_string + REGEX "^.*VERSION_(MAJOR|MINOR|RELEASE|BUILD_NUM)[ \t]+[0-9]+[ \t]*$") + + string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major + "${_version_string}") + string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor + "${_version_string}") + string(REGEX REPLACE ".*VERSION_RELEASE[ \t]+([0-9]+).*" "\\1" + _version_release "${_version_string}") + + set(AMF_VERSION "${_version_major}.${_version_minor}.${_version_release}") + unset(_version_major) + unset(_version_minor) + unset(_version_release) +else() + if(NOT AMF_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find AMF version.") + endif() + set(AMF_VERSION 0.0.0) +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(AMF_ERROR_REASON + "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(AMF_ERROR_REASON + "Ensure AMF headers are available in local library paths.") +endif() + +find_package_handle_standard_args( + AMF + REQUIRED_VARS AMF_INCLUDE_DIR + VERSION_VAR AMF_VERSION REASON_FAILURE_MESSAGE "${AMF_ERROR_REASON}") +mark_as_advanced(AMF_INCLUDE_DIR) +unset(AMF_ERROR_REASON) + +if(AMF_FOUND) + if(NOT TARGET AMF::AMF) + add_library(AMF::AMF INTERFACE IMPORTED) + set_target_properties(AMF::AMF PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${AMF_INCLUDE_DIR}") + endif() +endif() + +include(FeatureSummary) +set_package_properties( + AMF PROPERTIES + URL "https://github.com/GPUOpen-LibrariesAndSDKs/AMF" + DESCRIPTION + "AMF is a light-weight, portable multimedia framework that abstracts away most of the platform and API-specific details and allows for easy implementation of multimedia applications using a variety of technologies, such as DirectX 11, OpenGL, and OpenCL and facilitates an efficient interop between them." +) diff --git a/plugins/obs-ffmpeg/CMakeLists.txt b/plugins/obs-ffmpeg/CMakeLists.txt index ea92d3f9dfcd6a..04dc78a74027d4 100644 --- a/plugins/obs-ffmpeg/CMakeLists.txt +++ b/plugins/obs-ffmpeg/CMakeLists.txt @@ -92,12 +92,15 @@ set_target_properties(obs-ffmpeg PROPERTIES FOLDER "plugins/obs-ffmpeg" PREFIX "") if(OS_WINDOWS) + find_package(AMF 1.4.29 REQUIRED) + add_subdirectory(obs-amf-test) add_subdirectory(obs-nvenc-test) if(MSVC) target_link_libraries(obs-ffmpeg PRIVATE OBS::w32-pthreads) endif() + target_link_libraries(obs-ffmpeg PRIVATE AMF::AMF) set(MODULE_DESCRIPTION "OBS FFmpeg module") configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in diff --git a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt index 7ecb4e89d2f70c..e00cef1cf1d8ac 100644 --- a/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt +++ b/plugins/obs-ffmpeg/obs-amf-test/CMakeLists.txt @@ -2,11 +2,12 @@ project(obs-amf-test) add_executable(obs-amf-test) -target_include_directories(obs-amf-test PRIVATE ${CMAKE_SOURCE_DIR}/libobs - ${CMAKE_PREFIX_PATH}/include) +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) +target_link_libraries(obs-amf-test d3d11 dxgi dxguid AMF::AMF) set_target_properties(obs-amf-test PROPERTIES FOLDER "plugins/obs-ffmpeg") From 787c5f67a88ca3043112c6239732c13418c86ae2 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Mar 2023 12:34:54 +0100 Subject: [PATCH 0302/2225] updater: Add Zstandard for compressed downloads Using zstd reduces the download size for updates by about 2/3. --- UI/win-update/updater/CMakeLists.txt | 13 ++++- UI/win-update/updater/patch.cpp | 71 ++++++++++++++++++++++++++++ UI/win-update/updater/updater.cpp | 48 +++++++++++++++++-- UI/win-update/updater/updater.hpp | 14 ++++++ 4 files changed, 140 insertions(+), 6 deletions(-) diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index 64672fae394181..cad418b000b7c5 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -12,6 +12,8 @@ if(NOT DEFINED STATIC_ZLIB_PATH OR "${STATIC_ZLIB_PATH}" STREQUAL "") return() endif() +find_package(zstd) + add_executable(updater WIN32) target_sources( @@ -40,7 +42,14 @@ if(MSVC) target_compile_options(updater PRIVATE "/utf-8") endif() -target_link_libraries(updater PRIVATE OBS::blake2 OBS::lzma ${STATIC_ZLIB_PATH} - comctl32 shell32 winhttp) +target_link_libraries( + updater + PRIVATE OBS::blake2 + OBS::lzma + zstd::libzstd_static + ${STATIC_ZLIB_PATH} + comctl32 + shell32 + winhttp) set_target_properties(updater PROPERTIES FOLDER "frontend") diff --git a/UI/win-update/updater/patch.cpp b/UI/win-update/updater/patch.cpp index b42c95f263b6d3..7c034e152da50b 100644 --- a/UI/win-update/updater/patch.cpp +++ b/UI/win-update/updater/patch.cpp @@ -318,3 +318,74 @@ try { } catch (int code) { return code; } + +int DecompressFile(ZSTD_DCtx *ctx, const wchar_t *tempFile, size_t newSize) +try { + WinHandle hTemp; + + hTemp = CreateFile(tempFile, GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, + nullptr); + if (!hTemp.Valid()) + throw int(GetLastError()); + + /* --------------------------------- * + * read compressed data */ + + DWORD read; + DWORD compressedFileSize; + + compressedFileSize = GetFileSize(hTemp, nullptr); + if (compressedFileSize == INVALID_FILE_SIZE) + throw int(GetLastError()); + + vector oldData; + try { + oldData.resize(compressedFileSize); + } catch (...) { + throw int(-1); + } + + if (!ReadFile(hTemp, &oldData[0], compressedFileSize, &read, nullptr)) + throw int(GetLastError()); + if (read != compressedFileSize) + throw int(-1); + + /* --------------------------------- * + * decompress data */ + + vector newData; + try { + newData.resize((size_t)newSize); + } catch (...) { + throw int(-1); + } + + size_t result = ZSTD_decompressDCtx(ctx, &newData[0], newData.size(), + oldData.data(), oldData.size()); + + if (result != newSize) + throw int(-9); + if (ZSTD_isError(result)) + throw int(-10); + + /* --------------------------------- * + * overwrite temp file with new data */ + + hTemp = nullptr; + hTemp = CreateFile(tempFile, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, + 0, nullptr); + if (!hTemp.Valid()) + throw int(GetLastError()); + + bool success; + DWORD written; + + success = !!WriteFile(hTemp, newData.data(), (DWORD)newSize, &written, + nullptr); + if (!success || written != newSize) + throw int(GetLastError()); + + return 0; +} catch (int code) { + return code; +} diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 7c1d477bf89167..d735b26911328b 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -262,6 +262,7 @@ struct update_t { state_t state = STATE_INVALID; bool has_hash = false; bool patchable = false; + bool compressed = false; inline update_t() {} inline update_t(const update_t &from) @@ -274,7 +275,8 @@ struct update_t { fileSize(from.fileSize), state(from.state), has_hash(from.has_hash), - patchable(from.patchable) + patchable(from.patchable), + compressed(from.compressed) { memcpy(hash, from.hash, sizeof(hash)); memcpy(downloadhash, from.downloadhash, sizeof(downloadhash)); @@ -291,7 +293,8 @@ struct update_t { fileSize(from.fileSize), state(from.state), has_hash(from.has_hash), - patchable(from.patchable) + patchable(from.patchable), + compressed(from.compressed) { from.state = STATE_INVALID; @@ -330,6 +333,7 @@ struct update_t { state = from.state; has_hash = from.has_hash; patchable = from.patchable; + compressed = from.compressed; memcpy(hash, from.hash, sizeof(hash)); memcpy(downloadhash, from.downloadhash, sizeof(downloadhash)); @@ -399,6 +403,8 @@ bool DownloadWorkerThread() return false; } + ZSTDDCtx zCtx; + for (;;) { bool foundWork = false; @@ -470,6 +476,20 @@ bool DownloadWorkerThread() return 1; } + if (update.compressed && !update.patchable) { + int res = DecompressFile( + zCtx, update.tempPath.c_str(), + update.fileSize); + if (res) { + downloadThreadFailure = true; + DeleteFile(update.tempPath.c_str()); + Status(L"Update failed: Decompression " + L"failed on %s (error code %d)", + update.outputPath.c_str(), res); + return 1; + } + } + ulock.lock(); update.state = STATE_DOWNLOADED; @@ -712,6 +732,7 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, const Json &file = files[j]; const Json &fileName = file["name"]; const Json &hash = file["hash"]; + const Json &dlHash = file["compressed_hash"]; const Json &size = file["size"]; if (!fileName.is_string()) @@ -723,22 +744,33 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, const string &fileUTF8 = fileName.string_value(); const string &hashUTF8 = hash.string_value(); + const string &dlHashUTF8 = dlHash.string_value(); int fileSize = size.int_value(); if (hashUTF8.size() != BLAKE2_HASH_LENGTH * 2) continue; + /* The download hash may not exist if a file is uncompressed */ + + bool compressed = false; + if (dlHashUTF8.size() == BLAKE2_HASH_LENGTH * 2) + compressed = true; + /* convert strings to wide */ wchar_t sourceURL[1024]; wchar_t updateFileName[MAX_PATH]; wchar_t updateHashStr[BLAKE2_HASH_STR_LENGTH]; + wchar_t downloadHashStr[BLAKE2_HASH_STR_LENGTH]; wchar_t tempFilePath[MAX_PATH]; if (!UTF8ToWideBuf(updateFileName, fileUTF8.c_str())) continue; if (!UTF8ToWideBuf(updateHashStr, hashUTF8.c_str())) continue; + if (compressed && + !UTF8ToWideBuf(downloadHashStr, dlHashUTF8.c_str())) + continue; /* make sure paths are safe */ @@ -783,9 +815,17 @@ static bool AddPackageUpdateFiles(const Json &root, size_t idx, update.packageName = packageName; update.state = STATE_PENDING_DOWNLOAD; update.patchable = false; + update.compressed = compressed; + + StringToHash(updateHashStr, update.hash); - StringToHash(updateHashStr, update.downloadhash); - memcpy(update.hash, update.downloadhash, sizeof(update.hash)); + if (compressed) { + update.sourceURL += L".zst"; + StringToHash(downloadHashStr, update.downloadhash); + } else { + memcpy(update.downloadhash, update.hash, + sizeof(update.downloadhash)); + } update.has_hash = has_hash; if (has_hash) diff --git a/UI/win-update/updater/updater.hpp b/UI/win-update/updater/updater.hpp index 8d1adaec11409a..5458d6dd0384ce 100644 --- a/UI/win-update/updater/updater.hpp +++ b/UI/win-update/updater/updater.hpp @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -91,6 +92,7 @@ void StringToHash(const wchar_t *in, BYTE *out); bool CalculateFileHash(const wchar_t *path, BYTE *hash); int ApplyPatch(LPCTSTR patchFile, LPCTSTR targetFile); +int DecompressFile(ZSTD_DCtx *ctx, LPCTSTR tempFile, size_t newSize); extern HWND hwndMain; extern HCRYPTPROV hProvider; @@ -109,3 +111,15 @@ typedef struct { void FreeWinHttpHandle(HINTERNET handle); using HttpHandle = CustomHandle; + +/* ------------------------------------------------------------------------ */ + +class ZSTDDCtx { + ZSTD_DCtx *ctx = nullptr; + +public: + inline ZSTDDCtx() { ctx = ZSTD_createDCtx(); } + inline ~ZSTDDCtx() { ZSTD_freeDCtx(ctx); } + inline operator ZSTD_DCtx *() const { return ctx; } + inline ZSTD_DCtx *get() const { return ctx; } +}; From f29e1fdee46b99703e5990c5cdc53a5d02182aa4 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Mar 2023 12:37:02 +0100 Subject: [PATCH 0303/2225] updater: Switch to Zstandard for delta updates zstd is faster, less resource intensive, and produces smaller files than bsdiff + LZMA. Overall, it's a significant improvement for our workflow. --- UI/win-update/updater/CMakeLists.txt | 10 +- UI/win-update/updater/patch.cpp | 203 ++++----------------------- UI/win-update/updater/updater.cpp | 10 +- UI/win-update/updater/updater.hpp | 2 +- 4 files changed, 39 insertions(+), 186 deletions(-) diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index cad418b000b7c5..457705421015af 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -43,13 +43,7 @@ if(MSVC) endif() target_link_libraries( - updater - PRIVATE OBS::blake2 - OBS::lzma - zstd::libzstd_static - ${STATIC_ZLIB_PATH} - comctl32 - shell32 - winhttp) + updater PRIVATE OBS::blake2 zstd::libzstd_static ${STATIC_ZLIB_PATH} comctl32 + shell32 winhttp) set_target_properties(updater PROPERTIES FOLDER "frontend") diff --git a/UI/win-update/updater/patch.cpp b/UI/win-update/updater/patch.cpp index 7c034e152da50b..c2cd70631ea0aa 100644 --- a/UI/win-update/updater/patch.cpp +++ b/UI/win-update/updater/patch.cpp @@ -19,69 +19,8 @@ #include #include -#ifdef _MSC_VER -#define restrict __restrict -#include -#undef restrict -#else -#include -#endif - using namespace std; -#define MAX_BUF_SIZE 262144 -#define READ_BUF_SIZE 32768 - -/* ------------------------------------------------------------------------ */ - -class LZMAStream { - lzma_stream strm = {}; - bool initialized = false; - -public: - inline ~LZMAStream() - { - if (initialized) { - lzma_end(&strm); - } - } - - inline bool init_decoder() - { - lzma_ret ret = lzma_stream_decoder(&strm, 200 * 1024 * 1024, 0); - initialized = (ret == LZMA_OK); - return initialized; - } - - inline operator lzma_stream *() { return &strm; } - inline bool operator!() const { return !initialized; } - - inline lzma_stream *get() { return &strm; } -}; - -class File { - FILE *f = nullptr; - -public: - inline ~File() - { - if (f) - fclose(f); - } - - inline FILE **operator&() { return &f; } - inline operator FILE *() const { return f; } - inline bool operator!() const { return !f; } -}; - -/* ------------------------------------------------------------------------ */ - -struct bspatch_stream { - void *opaque; - int (*read)(const struct bspatch_stream *stream, void *buffer, - int length); -}; - /* ------------------------------------------------------------------------ */ static int64_t offtin(const uint8_t *buf) @@ -112,112 +51,15 @@ static int64_t offtin(const uint8_t *buf) /* ------------------------------------------------------------------------ */ -static int bspatch(const uint8_t *old, int64_t oldsize, uint8_t *newp, - int64_t newsize, struct bspatch_stream *stream) -{ - uint8_t buf[8]; - int64_t oldpos, newpos; - int64_t ctrl[3]; - int64_t i; - - oldpos = 0; - newpos = 0; - while (newpos < newsize) { - /* Read control data */ - for (i = 0; i <= 2; i++) { - if (stream->read(stream, buf, 8)) - return -1; - ctrl[i] = offtin(buf); - }; - - /* Sanity-check */ - if (newpos + ctrl[0] > newsize) - return -1; - - /* Read diff string */ - if (stream->read(stream, newp + newpos, (int)ctrl[0])) - return -1; - - /* Add old data to diff string */ - for (i = 0; i < ctrl[0]; i++) - if ((oldpos + i >= 0) && (oldpos + i < oldsize)) - newp[newpos + i] += old[oldpos + i]; - - /* Adjust pointers */ - newpos += ctrl[0]; - oldpos += ctrl[0]; - - /* Sanity-check */ - if (newpos + ctrl[1] > newsize) - return -1; - - /* Read extra string */ - if (stream->read(stream, newp + newpos, (int)ctrl[1])) - return -1; - - /* Adjust pointers */ - newpos += ctrl[1]; - oldpos += ctrl[2]; - }; - - return 0; -} - -/* ------------------------------------------------------------------------ */ - -struct patch_data { - HANDLE h; - lzma_stream *strm; - uint8_t buf[READ_BUF_SIZE]; -}; - -static int read_lzma(const struct bspatch_stream *stream, void *buffer, int len) -{ - if (!len) - return 0; - - patch_data *data = (patch_data *)stream->opaque; - HANDLE h = data->h; - lzma_stream *strm = data->strm; - - strm->avail_out = (size_t)len; - strm->next_out = (uint8_t *)buffer; - - for (;;) { - if (strm->avail_in == 0) { - DWORD read_size; - if (!ReadFile(h, data->buf, READ_BUF_SIZE, &read_size, - nullptr)) - return -1; - if (read_size == 0) - return -1; - - strm->avail_in = (size_t)read_size; - strm->next_in = data->buf; - } - - lzma_ret ret = lzma_code(strm, LZMA_RUN); - if (ret == LZMA_STREAM_END) - return 0; - if (ret != LZMA_OK) - return -1; - if (strm->avail_out == 0) - break; - } - - return 0; -} - -int ApplyPatch(const wchar_t *patchFile, const wchar_t *targetFile) +int ApplyPatch(ZSTD_DCtx *zstdCtx, const wchar_t *patchFile, + const wchar_t *targetFile) try { uint8_t header[24]; int64_t newsize; - struct bspatch_stream stream; bool success; WinHandle hPatch; WinHandle hTarget; - LZMAStream strm; /* --------------------------------- * * open patch and file to patch */ @@ -236,9 +78,15 @@ try { * read patch header */ DWORD read; + DWORD patchFileSize; + + patchFileSize = GetFileSize(hPatch, nullptr); + if (patchFileSize == INVALID_FILE_SIZE) + throw int(GetLastError()); + success = !!ReadFile(hPatch, header, sizeof(header), &read, nullptr); if (success && read == sizeof(header)) { - if (memcmp(header, "JIMSLEY/BSDIFF43", 16)) + if (memcmp(header, "BOUF//ZSTD//DICT", 16)) throw int(-4); } else { throw int(GetLastError()); @@ -258,6 +106,23 @@ try { throw int(-1); } + /* --------------------------------- * + * read remainder of patch file */ + + vector patchData; + try { + patchData.resize(patchFileSize - sizeof(header)); + } catch (...) { + throw int(-1); + } + + if (!ReadFile(hPatch, &patchData[0], patchFileSize - sizeof(header), + &read, nullptr)) + throw int(GetLastError()); + + if (read != (patchFileSize - sizeof(header))) + throw int(-1); + /* --------------------------------- * * read old file */ @@ -282,19 +147,11 @@ try { /* --------------------------------- * * patch to new file data */ - if (!strm.init_decoder()) - throw int(-10); - - patch_data data; - data.h = hPatch; - data.strm = strm.get(); - - stream.read = read_lzma; - stream.opaque = &data; + size_t result = ZSTD_decompress_usingDict( + zstdCtx, &newData[0], newData.size(), patchData.data(), + patchData.size(), oldData.data(), oldData.size()); - int ret = bspatch(oldData.data(), oldData.size(), newData.data(), - newData.size(), &stream); - if (ret != 0) + if (result != newsize || ZSTD_isError(result)) throw int(-9); /* --------------------------------- * diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index d735b26911328b..0337b69e6f2b72 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -992,7 +992,7 @@ static bool MoveInUseFileAway(update_t &file) return false; } -static bool UpdateFile(update_t &file) +static bool UpdateFile(ZSTD_DCtx *ctx, update_t &file) { wchar_t oldFileRenamedPath[MAX_PATH]; @@ -1049,7 +1049,7 @@ static bool UpdateFile(update_t &file) retryAfterMovingFile: if (file.patchable) { - error_code = ApplyPatch(file.tempPath.c_str(), + error_code = ApplyPatch(ctx, file.tempPath.c_str(), file.outputPath.c_str()); installed_ok = (error_code == 0); @@ -1099,9 +1099,10 @@ static bool UpdateFile(update_t &file) L"programs and try again.", curFileName); } else { + DWORD err = GetLastError(); Status(L"Update failed: Couldn't update %s " L"(error %d)", - curFileName, GetLastError()); + curFileName, err ? err : error_code); } file.state = STATE_INSTALL_FAILED; @@ -1147,6 +1148,7 @@ static bool updateThreadFailed = false; static bool UpdateWorker() { unique_lock ulock(updateMutex, defer_lock); + ZSTDDCtx zCtx; while (true) { ulock.lock(); @@ -1160,7 +1162,7 @@ static bool UpdateWorker() updateQueue.pop(); ulock.unlock(); - if (!UpdateFile(update)) { + if (!UpdateFile(zCtx, update)) { updateThreadFailed = true; return false; } else { diff --git a/UI/win-update/updater/updater.hpp b/UI/win-update/updater/updater.hpp index 5458d6dd0384ce..694b1aaeaa1563 100644 --- a/UI/win-update/updater/updater.hpp +++ b/UI/win-update/updater/updater.hpp @@ -91,7 +91,7 @@ void StringToHash(const wchar_t *in, BYTE *out); bool CalculateFileHash(const wchar_t *path, BYTE *hash); -int ApplyPatch(LPCTSTR patchFile, LPCTSTR targetFile); +int ApplyPatch(ZSTD_DCtx *ctx, LPCTSTR patchFile, LPCTSTR targetFile); int DecompressFile(ZSTD_DCtx *ctx, LPCTSTR tempFile, size_t newSize); extern HWND hwndMain; From 3eff81207eebfa00f20f2d1f7b8f60d840f372f2 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 17 Jan 2023 04:40:30 +0100 Subject: [PATCH 0304/2225] deps: Remove lzma --- deps/CMakeLists.txt | 2 - deps/lzma/.clang-format | 3 - deps/lzma/CMakeLists.txt | 112 -- deps/lzma/common/common_w32res.rc | 50 - deps/lzma/common/mythread.h | 42 - deps/lzma/common/sysdefs.h | 199 --- deps/lzma/common/tuklib_common.h | 71 - deps/lzma/common/tuklib_config.h | 7 - deps/lzma/common/tuklib_cpucores.c | 62 - deps/lzma/common/tuklib_cpucores.h | 23 - deps/lzma/common/tuklib_exit.c | 57 - deps/lzma/common/tuklib_exit.h | 25 - deps/lzma/common/tuklib_gettext.h | 44 - deps/lzma/common/tuklib_integer.h | 523 ------- deps/lzma/common/tuklib_mbstr.h | 66 - deps/lzma/common/tuklib_mbstr_fw.c | 31 - deps/lzma/common/tuklib_mbstr_width.c | 64 - deps/lzma/common/tuklib_open_stdxxx.c | 57 - deps/lzma/common/tuklib_open_stdxxx.h | 23 - deps/lzma/common/tuklib_physmem.c | 196 --- deps/lzma/common/tuklib_physmem.h | 28 - deps/lzma/common/tuklib_progname.c | 50 - deps/lzma/common/tuklib_progname.h | 32 - deps/lzma/config.h | 415 ------ deps/lzma/liblzma/api/lzma.h | 314 ----- deps/lzma/liblzma/api/lzma/base.h | 601 -------- deps/lzma/liblzma/api/lzma/bcj.h | 90 -- deps/lzma/liblzma/api/lzma/block.h | 533 ------- deps/lzma/liblzma/api/lzma/check.h | 150 -- deps/lzma/liblzma/api/lzma/container.h | 424 ------ deps/lzma/liblzma/api/lzma/delta.h | 77 - deps/lzma/liblzma/api/lzma/filter.h | 424 ------ deps/lzma/liblzma/api/lzma/hardware.h | 50 - deps/lzma/liblzma/api/lzma/index.h | 683 --------- deps/lzma/liblzma/api/lzma/index_hash.h | 107 -- deps/lzma/liblzma/api/lzma/lzma.h | 420 ------ deps/lzma/liblzma/api/lzma/stream_flags.h | 223 --- deps/lzma/liblzma/api/lzma/version.h | 121 -- deps/lzma/liblzma/api/lzma/vli.h | 168 --- deps/lzma/liblzma/check/Makefile.inc | 51 - deps/lzma/liblzma/check/check.c | 174 --- deps/lzma/liblzma/check/check.h | 95 -- deps/lzma/liblzma/check/crc32_fast.c | 82 -- deps/lzma/liblzma/check/crc32_small.c | 61 - deps/lzma/liblzma/check/crc32_table.c | 19 - deps/lzma/liblzma/check/crc32_table_be.h | 525 ------- deps/lzma/liblzma/check/crc32_table_le.h | 525 ------- deps/lzma/liblzma/check/crc32_tablegen.c | 117 -- deps/lzma/liblzma/check/crc32_x86.S | 304 ---- deps/lzma/liblzma/check/crc64_fast.c | 72 - deps/lzma/liblzma/check/crc64_small.c | 53 - deps/lzma/liblzma/check/crc64_table.c | 19 - deps/lzma/liblzma/check/crc64_table_be.h | 521 ------- deps/lzma/liblzma/check/crc64_table_le.h | 521 ------- deps/lzma/liblzma/check/crc64_tablegen.c | 88 -- deps/lzma/liblzma/check/crc64_x86.S | 287 ---- deps/lzma/liblzma/check/crc_macros.h | 30 - deps/lzma/liblzma/check/sha256.c | 200 --- deps/lzma/liblzma/common/alone_decoder.c | 238 ---- deps/lzma/liblzma/common/alone_decoder.h | 23 - deps/lzma/liblzma/common/alone_encoder.c | 157 --- deps/lzma/liblzma/common/auto_decoder.c | 186 --- .../liblzma/common/block_buffer_decoder.c | 80 -- .../liblzma/common/block_buffer_encoder.c | 305 ---- deps/lzma/liblzma/common/block_decoder.c | 242 ---- deps/lzma/liblzma/common/block_decoder.h | 22 - deps/lzma/liblzma/common/block_encoder.c | 217 --- deps/lzma/liblzma/common/block_encoder.h | 47 - .../liblzma/common/block_header_decoder.c | 116 -- .../liblzma/common/block_header_encoder.c | 132 -- deps/lzma/liblzma/common/block_util.c | 90 -- deps/lzma/liblzma/common/common.c | 388 ----- deps/lzma/liblzma/common/common.h | 284 ---- .../lzma/liblzma/common/easy_buffer_encoder.c | 27 - .../liblzma/common/easy_decoder_memusage.c | 24 - deps/lzma/liblzma/common/easy_encoder.c | 25 - .../liblzma/common/easy_encoder_memusage.c | 24 - deps/lzma/liblzma/common/easy_preset.c | 27 - deps/lzma/liblzma/common/easy_preset.h | 32 - .../liblzma/common/filter_buffer_decoder.c | 87 -- .../liblzma/common/filter_buffer_encoder.c | 54 - deps/lzma/liblzma/common/filter_common.c | 337 ----- deps/lzma/liblzma/common/filter_common.h | 48 - deps/lzma/liblzma/common/filter_decoder.c | 183 --- deps/lzma/liblzma/common/filter_decoder.h | 23 - deps/lzma/liblzma/common/filter_encoder.c | 288 ---- deps/lzma/liblzma/common/filter_encoder.h | 27 - .../liblzma/common/filter_flags_decoder.c | 46 - .../liblzma/common/filter_flags_encoder.c | 56 - deps/lzma/liblzma/common/hardware_physmem.c | 25 - deps/lzma/liblzma/common/index.c | 1244 ----------------- deps/lzma/liblzma/common/index.h | 73 - deps/lzma/liblzma/common/index_decoder.c | 345 ----- deps/lzma/liblzma/common/index_encoder.c | 254 ---- deps/lzma/liblzma/common/index_encoder.h | 23 - deps/lzma/liblzma/common/index_hash.c | 332 ----- .../liblzma/common/stream_buffer_decoder.c | 91 -- .../liblzma/common/stream_buffer_encoder.c | 140 -- deps/lzma/liblzma/common/stream_decoder.c | 451 ------ deps/lzma/liblzma/common/stream_decoder.h | 21 - deps/lzma/liblzma/common/stream_encoder.c | 331 ----- deps/lzma/liblzma/common/stream_encoder.h | 23 - .../lzma/liblzma/common/stream_flags_common.c | 47 - .../lzma/liblzma/common/stream_flags_common.h | 33 - .../liblzma/common/stream_flags_decoder.c | 82 -- .../liblzma/common/stream_flags_encoder.c | 86 -- deps/lzma/liblzma/common/vli_decoder.c | 86 -- deps/lzma/liblzma/common/vli_encoder.c | 69 - deps/lzma/liblzma/common/vli_size.c | 30 - deps/lzma/liblzma/delta/Makefile.inc | 23 - deps/lzma/liblzma/delta/delta_common.c | 70 - deps/lzma/liblzma/delta/delta_common.h | 20 - deps/lzma/liblzma/delta/delta_decoder.c | 76 - deps/lzma/liblzma/delta/delta_decoder.h | 25 - deps/lzma/liblzma/delta/delta_encoder.c | 121 -- deps/lzma/liblzma/delta/delta_encoder.h | 23 - deps/lzma/liblzma/delta/delta_private.h | 37 - deps/lzma/liblzma/lz/Makefile.inc | 22 - deps/lzma/liblzma/lz/lz_decoder.c | 300 ---- deps/lzma/liblzma/lz/lz_decoder.h | 234 ---- deps/lzma/liblzma/lz/lz_encoder.c | 583 -------- deps/lzma/liblzma/lz/lz_encoder.h | 328 ----- deps/lzma/liblzma/lz/lz_encoder_hash.h | 108 -- deps/lzma/liblzma/lz/lz_encoder_hash_table.h | 68 - deps/lzma/liblzma/lz/lz_encoder_mf.c | 753 ---------- deps/lzma/liblzma/lzma/fastpos.h | 140 -- deps/lzma/liblzma/lzma/fastpos_table.c | 519 ------- deps/lzma/liblzma/lzma/fastpos_tablegen.c | 56 - deps/lzma/liblzma/lzma/lzma2_decoder.c | 304 ---- deps/lzma/liblzma/lzma/lzma2_decoder.h | 28 - deps/lzma/liblzma/lzma/lzma2_encoder.c | 393 ------ deps/lzma/liblzma/lzma/lzma2_encoder.h | 41 - deps/lzma/liblzma/lzma/lzma_common.h | 223 --- deps/lzma/liblzma/lzma/lzma_decoder.c | 1057 -------------- deps/lzma/liblzma/lzma/lzma_decoder.h | 52 - deps/lzma/liblzma/lzma/lzma_encoder.c | 675 --------- deps/lzma/liblzma/lzma/lzma_encoder.h | 54 - .../liblzma/lzma/lzma_encoder_optimum_fast.c | 179 --- .../lzma/lzma_encoder_optimum_normal.c | 868 ------------ deps/lzma/liblzma/lzma/lzma_encoder_presets.c | 63 - deps/lzma/liblzma/lzma/lzma_encoder_private.h | 148 -- deps/lzma/liblzma/rangecoder/Makefile.inc | 21 - deps/lzma/liblzma/rangecoder/price.h | 92 -- deps/lzma/liblzma/rangecoder/price_table.c | 22 - deps/lzma/liblzma/rangecoder/price_tablegen.c | 87 -- deps/lzma/liblzma/rangecoder/range_common.h | 73 - deps/lzma/liblzma/rangecoder/range_decoder.h | 179 --- deps/lzma/liblzma/rangecoder/range_encoder.h | 231 --- deps/lzma/liblzma/simple/Makefile.inc | 47 - deps/lzma/liblzma/simple/arm.c | 69 - deps/lzma/liblzma/simple/armthumb.c | 74 - deps/lzma/liblzma/simple/ia64.c | 110 -- deps/lzma/liblzma/simple/powerpc.c | 73 - deps/lzma/liblzma/simple/simple_coder.c | 277 ---- deps/lzma/liblzma/simple/simple_coder.h | 60 - deps/lzma/liblzma/simple/simple_decoder.c | 40 - deps/lzma/liblzma/simple/simple_decoder.h | 22 - deps/lzma/liblzma/simple/simple_encoder.c | 38 - deps/lzma/liblzma/simple/simple_encoder.h | 23 - deps/lzma/liblzma/simple/simple_private.h | 75 - deps/lzma/liblzma/simple/sparc.c | 81 -- deps/lzma/liblzma/simple/x86.c | 154 -- deps/lzma/version.h | 8 - 163 files changed, 27379 deletions(-) delete mode 100644 deps/lzma/.clang-format delete mode 100644 deps/lzma/CMakeLists.txt delete mode 100644 deps/lzma/common/common_w32res.rc delete mode 100644 deps/lzma/common/mythread.h delete mode 100644 deps/lzma/common/sysdefs.h delete mode 100644 deps/lzma/common/tuklib_common.h delete mode 100644 deps/lzma/common/tuklib_config.h delete mode 100644 deps/lzma/common/tuklib_cpucores.c delete mode 100644 deps/lzma/common/tuklib_cpucores.h delete mode 100644 deps/lzma/common/tuklib_exit.c delete mode 100644 deps/lzma/common/tuklib_exit.h delete mode 100644 deps/lzma/common/tuklib_gettext.h delete mode 100644 deps/lzma/common/tuklib_integer.h delete mode 100644 deps/lzma/common/tuklib_mbstr.h delete mode 100644 deps/lzma/common/tuklib_mbstr_fw.c delete mode 100644 deps/lzma/common/tuklib_mbstr_width.c delete mode 100644 deps/lzma/common/tuklib_open_stdxxx.c delete mode 100644 deps/lzma/common/tuklib_open_stdxxx.h delete mode 100644 deps/lzma/common/tuklib_physmem.c delete mode 100644 deps/lzma/common/tuklib_physmem.h delete mode 100644 deps/lzma/common/tuklib_progname.c delete mode 100644 deps/lzma/common/tuklib_progname.h delete mode 100644 deps/lzma/config.h delete mode 100644 deps/lzma/liblzma/api/lzma.h delete mode 100644 deps/lzma/liblzma/api/lzma/base.h delete mode 100644 deps/lzma/liblzma/api/lzma/bcj.h delete mode 100644 deps/lzma/liblzma/api/lzma/block.h delete mode 100644 deps/lzma/liblzma/api/lzma/check.h delete mode 100644 deps/lzma/liblzma/api/lzma/container.h delete mode 100644 deps/lzma/liblzma/api/lzma/delta.h delete mode 100644 deps/lzma/liblzma/api/lzma/filter.h delete mode 100644 deps/lzma/liblzma/api/lzma/hardware.h delete mode 100644 deps/lzma/liblzma/api/lzma/index.h delete mode 100644 deps/lzma/liblzma/api/lzma/index_hash.h delete mode 100644 deps/lzma/liblzma/api/lzma/lzma.h delete mode 100644 deps/lzma/liblzma/api/lzma/stream_flags.h delete mode 100644 deps/lzma/liblzma/api/lzma/version.h delete mode 100644 deps/lzma/liblzma/api/lzma/vli.h delete mode 100644 deps/lzma/liblzma/check/Makefile.inc delete mode 100644 deps/lzma/liblzma/check/check.c delete mode 100644 deps/lzma/liblzma/check/check.h delete mode 100644 deps/lzma/liblzma/check/crc32_fast.c delete mode 100644 deps/lzma/liblzma/check/crc32_small.c delete mode 100644 deps/lzma/liblzma/check/crc32_table.c delete mode 100644 deps/lzma/liblzma/check/crc32_table_be.h delete mode 100644 deps/lzma/liblzma/check/crc32_table_le.h delete mode 100644 deps/lzma/liblzma/check/crc32_tablegen.c delete mode 100644 deps/lzma/liblzma/check/crc32_x86.S delete mode 100644 deps/lzma/liblzma/check/crc64_fast.c delete mode 100644 deps/lzma/liblzma/check/crc64_small.c delete mode 100644 deps/lzma/liblzma/check/crc64_table.c delete mode 100644 deps/lzma/liblzma/check/crc64_table_be.h delete mode 100644 deps/lzma/liblzma/check/crc64_table_le.h delete mode 100644 deps/lzma/liblzma/check/crc64_tablegen.c delete mode 100644 deps/lzma/liblzma/check/crc64_x86.S delete mode 100644 deps/lzma/liblzma/check/crc_macros.h delete mode 100644 deps/lzma/liblzma/check/sha256.c delete mode 100644 deps/lzma/liblzma/common/alone_decoder.c delete mode 100644 deps/lzma/liblzma/common/alone_decoder.h delete mode 100644 deps/lzma/liblzma/common/alone_encoder.c delete mode 100644 deps/lzma/liblzma/common/auto_decoder.c delete mode 100644 deps/lzma/liblzma/common/block_buffer_decoder.c delete mode 100644 deps/lzma/liblzma/common/block_buffer_encoder.c delete mode 100644 deps/lzma/liblzma/common/block_decoder.c delete mode 100644 deps/lzma/liblzma/common/block_decoder.h delete mode 100644 deps/lzma/liblzma/common/block_encoder.c delete mode 100644 deps/lzma/liblzma/common/block_encoder.h delete mode 100644 deps/lzma/liblzma/common/block_header_decoder.c delete mode 100644 deps/lzma/liblzma/common/block_header_encoder.c delete mode 100644 deps/lzma/liblzma/common/block_util.c delete mode 100644 deps/lzma/liblzma/common/common.c delete mode 100644 deps/lzma/liblzma/common/common.h delete mode 100644 deps/lzma/liblzma/common/easy_buffer_encoder.c delete mode 100644 deps/lzma/liblzma/common/easy_decoder_memusage.c delete mode 100644 deps/lzma/liblzma/common/easy_encoder.c delete mode 100644 deps/lzma/liblzma/common/easy_encoder_memusage.c delete mode 100644 deps/lzma/liblzma/common/easy_preset.c delete mode 100644 deps/lzma/liblzma/common/easy_preset.h delete mode 100644 deps/lzma/liblzma/common/filter_buffer_decoder.c delete mode 100644 deps/lzma/liblzma/common/filter_buffer_encoder.c delete mode 100644 deps/lzma/liblzma/common/filter_common.c delete mode 100644 deps/lzma/liblzma/common/filter_common.h delete mode 100644 deps/lzma/liblzma/common/filter_decoder.c delete mode 100644 deps/lzma/liblzma/common/filter_decoder.h delete mode 100644 deps/lzma/liblzma/common/filter_encoder.c delete mode 100644 deps/lzma/liblzma/common/filter_encoder.h delete mode 100644 deps/lzma/liblzma/common/filter_flags_decoder.c delete mode 100644 deps/lzma/liblzma/common/filter_flags_encoder.c delete mode 100644 deps/lzma/liblzma/common/hardware_physmem.c delete mode 100644 deps/lzma/liblzma/common/index.c delete mode 100644 deps/lzma/liblzma/common/index.h delete mode 100644 deps/lzma/liblzma/common/index_decoder.c delete mode 100644 deps/lzma/liblzma/common/index_encoder.c delete mode 100644 deps/lzma/liblzma/common/index_encoder.h delete mode 100644 deps/lzma/liblzma/common/index_hash.c delete mode 100644 deps/lzma/liblzma/common/stream_buffer_decoder.c delete mode 100644 deps/lzma/liblzma/common/stream_buffer_encoder.c delete mode 100644 deps/lzma/liblzma/common/stream_decoder.c delete mode 100644 deps/lzma/liblzma/common/stream_decoder.h delete mode 100644 deps/lzma/liblzma/common/stream_encoder.c delete mode 100644 deps/lzma/liblzma/common/stream_encoder.h delete mode 100644 deps/lzma/liblzma/common/stream_flags_common.c delete mode 100644 deps/lzma/liblzma/common/stream_flags_common.h delete mode 100644 deps/lzma/liblzma/common/stream_flags_decoder.c delete mode 100644 deps/lzma/liblzma/common/stream_flags_encoder.c delete mode 100644 deps/lzma/liblzma/common/vli_decoder.c delete mode 100644 deps/lzma/liblzma/common/vli_encoder.c delete mode 100644 deps/lzma/liblzma/common/vli_size.c delete mode 100644 deps/lzma/liblzma/delta/Makefile.inc delete mode 100644 deps/lzma/liblzma/delta/delta_common.c delete mode 100644 deps/lzma/liblzma/delta/delta_common.h delete mode 100644 deps/lzma/liblzma/delta/delta_decoder.c delete mode 100644 deps/lzma/liblzma/delta/delta_decoder.h delete mode 100644 deps/lzma/liblzma/delta/delta_encoder.c delete mode 100644 deps/lzma/liblzma/delta/delta_encoder.h delete mode 100644 deps/lzma/liblzma/delta/delta_private.h delete mode 100644 deps/lzma/liblzma/lz/Makefile.inc delete mode 100644 deps/lzma/liblzma/lz/lz_decoder.c delete mode 100644 deps/lzma/liblzma/lz/lz_decoder.h delete mode 100644 deps/lzma/liblzma/lz/lz_encoder.c delete mode 100644 deps/lzma/liblzma/lz/lz_encoder.h delete mode 100644 deps/lzma/liblzma/lz/lz_encoder_hash.h delete mode 100644 deps/lzma/liblzma/lz/lz_encoder_hash_table.h delete mode 100644 deps/lzma/liblzma/lz/lz_encoder_mf.c delete mode 100644 deps/lzma/liblzma/lzma/fastpos.h delete mode 100644 deps/lzma/liblzma/lzma/fastpos_table.c delete mode 100644 deps/lzma/liblzma/lzma/fastpos_tablegen.c delete mode 100644 deps/lzma/liblzma/lzma/lzma2_decoder.c delete mode 100644 deps/lzma/liblzma/lzma/lzma2_decoder.h delete mode 100644 deps/lzma/liblzma/lzma/lzma2_encoder.c delete mode 100644 deps/lzma/liblzma/lzma/lzma2_encoder.h delete mode 100644 deps/lzma/liblzma/lzma/lzma_common.h delete mode 100644 deps/lzma/liblzma/lzma/lzma_decoder.c delete mode 100644 deps/lzma/liblzma/lzma/lzma_decoder.h delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder.c delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder.h delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder_optimum_fast.c delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder_optimum_normal.c delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder_presets.c delete mode 100644 deps/lzma/liblzma/lzma/lzma_encoder_private.h delete mode 100644 deps/lzma/liblzma/rangecoder/Makefile.inc delete mode 100644 deps/lzma/liblzma/rangecoder/price.h delete mode 100644 deps/lzma/liblzma/rangecoder/price_table.c delete mode 100644 deps/lzma/liblzma/rangecoder/price_tablegen.c delete mode 100644 deps/lzma/liblzma/rangecoder/range_common.h delete mode 100644 deps/lzma/liblzma/rangecoder/range_decoder.h delete mode 100644 deps/lzma/liblzma/rangecoder/range_encoder.h delete mode 100644 deps/lzma/liblzma/simple/Makefile.inc delete mode 100644 deps/lzma/liblzma/simple/arm.c delete mode 100644 deps/lzma/liblzma/simple/armthumb.c delete mode 100644 deps/lzma/liblzma/simple/ia64.c delete mode 100644 deps/lzma/liblzma/simple/powerpc.c delete mode 100644 deps/lzma/liblzma/simple/simple_coder.c delete mode 100644 deps/lzma/liblzma/simple/simple_coder.h delete mode 100644 deps/lzma/liblzma/simple/simple_decoder.c delete mode 100644 deps/lzma/liblzma/simple/simple_decoder.h delete mode 100644 deps/lzma/liblzma/simple/simple_encoder.c delete mode 100644 deps/lzma/liblzma/simple/simple_encoder.h delete mode 100644 deps/lzma/liblzma/simple/simple_private.h delete mode 100644 deps/lzma/liblzma/simple/sparc.c delete mode 100644 deps/lzma/liblzma/simple/x86.c delete mode 100644 deps/lzma/version.h diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 0766bdb3760905..f8a741046b9885 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -3,8 +3,6 @@ if(OS_WINDOWS) add_subdirectory(w32-pthreads) endif() add_subdirectory(ipc-util) - - add_subdirectory(lzma) endif() add_subdirectory(blake2) diff --git a/deps/lzma/.clang-format b/deps/lzma/.clang-format deleted file mode 100644 index 6420a46881e054..00000000000000 --- a/deps/lzma/.clang-format +++ /dev/null @@ -1,3 +0,0 @@ -Language: Cpp -SortIncludes: false -DisableFormat: true diff --git a/deps/lzma/CMakeLists.txt b/deps/lzma/CMakeLists.txt deleted file mode 100644 index 87b433379f44e2..00000000000000 --- a/deps/lzma/CMakeLists.txt +++ /dev/null @@ -1,112 +0,0 @@ -project(lzma) - -add_library(lzma STATIC) -add_library(OBS::lzma ALIAS lzma) - -target_sources(lzma PRIVATE config.h) - -target_sources( - lzma - PRIVATE liblzma/check/check.c liblzma/check/crc32_table.c - liblzma/check/crc32_fast.c liblzma/check/crc64_table.c - liblzma/check/crc64_fast.c liblzma/check/sha256.c) - -target_sources( - lzma - PRIVATE liblzma/common/common.c - liblzma/common/block_util.c - liblzma/common/easy_preset.c - liblzma/common/filter_common.c - liblzma/common/hardware_physmem.c - liblzma/common/index.c - liblzma/common/stream_flags_common.c - liblzma/common/vli_size.c - liblzma/common/alone_encoder.c - liblzma/common/block_buffer_encoder.c - liblzma/common/block_encoder.c - liblzma/common/block_header_encoder.c - liblzma/common/easy_buffer_encoder.c - liblzma/common/easy_encoder.c - liblzma/common/easy_encoder_memusage.c - liblzma/common/filter_buffer_encoder.c - liblzma/common/filter_encoder.c - liblzma/common/filter_flags_encoder.c - liblzma/common/index_encoder.c - liblzma/common/stream_buffer_encoder.c - liblzma/common/stream_encoder.c - liblzma/common/stream_flags_encoder.c - liblzma/common/vli_encoder.c - liblzma/common/alone_decoder.c - liblzma/common/auto_decoder.c - liblzma/common/block_buffer_decoder.c - liblzma/common/block_decoder.c - liblzma/common/block_header_decoder.c - liblzma/common/easy_decoder_memusage.c - liblzma/common/filter_buffer_decoder.c - liblzma/common/filter_decoder.c - liblzma/common/filter_flags_decoder.c - liblzma/common/index_decoder.c - liblzma/common/index_hash.c - liblzma/common/stream_buffer_decoder.c - liblzma/common/stream_decoder.c - liblzma/common/stream_flags_decoder.c - liblzma/common/vli_decoder.c) - -target_sources( - lzma PRIVATE liblzma/delta/delta_common.c liblzma/delta/delta_encoder.c - liblzma/delta/delta_decoder.c) - -target_sources( - lzma - PRIVATE liblzma/lzma/lzma_encoder.c - liblzma/lzma/lzma_encoder_presets.c - liblzma/lzma/lzma_encoder_optimum_fast.c - liblzma/lzma/lzma_encoder_optimum_normal.c - liblzma/lzma/fastpos_table.c - liblzma/lzma/lzma_decoder.c - liblzma/lzma/lzma2_encoder.c - liblzma/lzma/lzma2_decoder.c) - -target_sources(lzma PRIVATE liblzma/lz/lz_encoder.c liblzma/lz/lz_encoder_mf.c - liblzma/lz/lz_decoder.c) - -target_sources(lzma PRIVATE liblzma/rangecoder/price_table.c) - -target_sources( - lzma - PRIVATE liblzma/simple/simple_coder.c - liblzma/simple/simple_encoder.c - liblzma/simple/simple_decoder.c - liblzma/simple/arm.c - liblzma/simple/armthumb.c - liblzma/simple/ia64.c - liblzma/simple/powerpc.c - liblzma/simple/sparc.c - liblzma/simple/x86.c) - -target_compile_definitions(lzma PRIVATE HAVE_CONFIG_H - TUKLIB_SYMBOL_PREFIX=lzma_) - -target_include_directories( - lzma - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/common - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/check - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/common - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/delta - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/lz - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/lzma - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/rangecoder - ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/simple - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/liblzma/api) - -if(OS_WINDOWS) - if(MSVC) - target_compile_options(lzma PRIVATE "$,/MTd,/MT>" /Zl - /wd4244 /wd4267) - endif() - - target_compile_definitions(lzma PRIVATE inline=_inline restrict=__restrict) -endif() - -set_target_properties(lzma PROPERTIES FOLDER "deps") diff --git a/deps/lzma/common/common_w32res.rc b/deps/lzma/common/common_w32res.rc deleted file mode 100644 index fdb88d184ac882..00000000000000 --- a/deps/lzma/common/common_w32res.rc +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#include -#include "config.h" -#define LZMA_H_INTERNAL -#define LZMA_H_INTERNAL_RC -#include "lzma/version.h" - -#ifndef MY_BUILD -# define MY_BUILD 0 -#endif -#define MY_VERSION LZMA_VERSION_MAJOR,LZMA_VERSION_MINOR,LZMA_VERSION_PATCH,MY_BUILD - -#define MY_FILENAME MY_NAME MY_SUFFIX -#define MY_COMPANY "The Tukaani Project " -#define MY_PRODUCT PACKAGE_NAME " <" PACKAGE_URL ">" - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -VS_VERSION_INFO VERSIONINFO - FILEVERSION MY_VERSION - PRODUCTVERSION MY_VERSION - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_NT_WINDOWS32 - FILETYPE MY_TYPE - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", MY_COMPANY - VALUE "FileDescription", MY_DESC - VALUE "FileVersion", LZMA_VERSION_STRING - VALUE "InternalName", MY_NAME - VALUE "OriginalFilename", MY_FILENAME - VALUE "ProductName", MY_PRODUCT - VALUE "ProductVersion", LZMA_VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/deps/lzma/common/mythread.h b/deps/lzma/common/mythread.h deleted file mode 100644 index 476c2fc9e103da..00000000000000 --- a/deps/lzma/common/mythread.h +++ /dev/null @@ -1,42 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file mythread.h -/// \brief Wrappers for threads -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "sysdefs.h" - - -#ifdef HAVE_PTHREAD -# include - -# define mythread_once(func) \ - do { \ - static pthread_once_t once_ = PTHREAD_ONCE_INIT; \ - pthread_once(&once_, &func); \ - } while (0) - -# define mythread_sigmask(how, set, oset) \ - pthread_sigmask(how, set, oset) - -#else - -# define mythread_once(func) \ - do { \ - static bool once_ = false; \ - if (!once_) { \ - func(); \ - once_ = true; \ - } \ - } while (0) - -# define mythread_sigmask(how, set, oset) \ - sigprocmask(how, set, oset) - -#endif diff --git a/deps/lzma/common/sysdefs.h b/deps/lzma/common/sysdefs.h deleted file mode 100644 index 6b823bd6522fb2..00000000000000 --- a/deps/lzma/common/sysdefs.h +++ /dev/null @@ -1,199 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sysdefs.h -/// \brief Common includes, definitions, system-specific things etc. -/// -/// This file is used also by the lzma command line tool, that's why this -/// file is separate from common.h. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SYSDEFS_H -#define LZMA_SYSDEFS_H - -////////////// -// Includes // -////////////// - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if defined(_MSC_VER) && _MSC_VER >= 1400 -# define VC_EXTRALEAN -# include -# include -# undef VC_EXTRALEAN -#endif - -// Get standard-compliant stdio functions under MinGW and MinGW-w64. -#ifdef __MINGW32__ -# define __USE_MINGW_ANSI_STDIO 1 -#endif - -// size_t and NULL -#include - -#ifdef HAVE_INTTYPES_H -# include -#endif - -// C99 says that inttypes.h always includes stdint.h, but some systems -// don't do that, and require including stdint.h separately. -#ifdef HAVE_STDINT_H -# include -#endif - -// Some pre-C99 systems have SIZE_MAX in limits.h instead of stdint.h. The -// limits are also used to figure out some macros missing from pre-C99 systems. -#ifdef HAVE_LIMITS_H -# include -#endif - -// Be more compatible with systems that have non-conforming inttypes.h. -// We assume that int is 32-bit and that long is either 32-bit or 64-bit. -// Full Autoconf test could be more correct, but this should work well enough. -// Note that this duplicates some code from lzma.h, but this is better since -// we can work without inttypes.h thanks to Autoconf tests. -#ifndef UINT32_C -# if UINT_MAX != 4294967295U -# error UINT32_C is not defined and unsigned int is not 32-bit. -# endif -# define UINT32_C(n) n ## U -#endif -#ifndef UINT32_MAX -# define UINT32_MAX UINT32_C(4294967295) -#endif -#ifndef PRIu32 -# define PRIu32 "u" -#endif -#ifndef PRIx32 -# define PRIx32 "x" -#endif -#ifndef PRIX32 -# define PRIX32 "X" -#endif - -#if ULONG_MAX == 4294967295UL -# ifndef UINT64_C -# define UINT64_C(n) n ## ULL -# endif -# ifndef PRIu64 -# define PRIu64 "llu" -# endif -# ifndef PRIx64 -# define PRIx64 "llx" -# endif -# ifndef PRIX64 -# define PRIX64 "llX" -# endif -#else -# ifndef UINT64_C -# define UINT64_C(n) n ## UL -# endif -# ifndef PRIu64 -# define PRIu64 "lu" -# endif -# ifndef PRIx64 -# define PRIx64 "lx" -# endif -# ifndef PRIX64 -# define PRIX64 "lX" -# endif -#endif -#ifndef UINT64_MAX -# define UINT64_MAX UINT64_C(18446744073709551615) -#endif - -// Incorrect(?) SIZE_MAX: -// - Interix headers typedef size_t to unsigned long, -// but a few lines later define SIZE_MAX to INT32_MAX. -// - SCO OpenServer (x86) headers typedef size_t to unsigned int -// but define SIZE_MAX to INT32_MAX. -#if defined(__INTERIX) || defined(_SCO_DS) -# undef SIZE_MAX -#endif - -// The code currently assumes that size_t is either 32-bit or 64-bit. -#ifndef SIZE_MAX -# if SIZEOF_SIZE_T == 4 -# define SIZE_MAX UINT32_MAX -# elif SIZEOF_SIZE_T == 8 -# define SIZE_MAX UINT64_MAX -# else -# error size_t is not 32-bit or 64-bit -# endif -#endif -#if SIZE_MAX != UINT32_MAX && SIZE_MAX != UINT64_MAX -# error size_t is not 32-bit or 64-bit -#endif - -#include -#include - -// Pre-C99 systems lack stdbool.h. All the code in LZMA Utils must be written -// so that it works with fake bool type, for example: -// -// bool foo = (flags & 0x100) != 0; -// bool bar = !!(flags & 0x100); -// -// This works with the real C99 bool but breaks with fake bool: -// -// bool baz = (flags & 0x100); -// -#ifdef HAVE_STDBOOL_H -# include -#else -# if ! HAVE__BOOL -typedef unsigned char _Bool; -# endif -# define bool _Bool -# define false 0 -# define true 1 -# define __bool_true_false_are_defined 1 -#endif - -// string.h should be enough but let's include strings.h and memory.h too if -// they exists, since that shouldn't do any harm, but may improve portability. -#ifdef HAVE_STRING_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_MEMORY_H -# include -#endif - - -//////////// -// Macros // -//////////// - -#undef memzero -#define memzero(s, n) memset(s, 0, n) - -// NOTE: Avoid using MIN() and MAX(), because even conditionally defining -// those macros can cause some portability trouble, since on some systems -// the system headers insist defining their own versions. -#define my_min(x, y) ((x) < (y) ? (x) : (y)) -#define my_max(x, y) ((x) > (y) ? (x) : (y)) - -#ifndef ARRAY_SIZE -# define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - -#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4 -# define lzma_attr_alloc_size(x) __attribute__((__alloc_size__(x))) -#else -# define lzma_attr_alloc_size(x) -#endif - -#endif diff --git a/deps/lzma/common/tuklib_common.h b/deps/lzma/common/tuklib_common.h deleted file mode 100644 index 31fbab58b0050b..00000000000000 --- a/deps/lzma/common/tuklib_common.h +++ /dev/null @@ -1,71 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_common.h -/// \brief Common definitions for tuklib modules -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_COMMON_H -#define TUKLIB_COMMON_H - -// The config file may be replaced by a package-specific file. -// It should include at least stddef.h, inttypes.h, and limits.h. -#include "tuklib_config.h" - -// TUKLIB_SYMBOL_PREFIX is prefixed to all symbols exported by -// the tuklib modules. If you use a tuklib module in a library, -// you should use TUKLIB_SYMBOL_PREFIX to make sure that there -// are no symbol conflicts in case someone links your library -// into application that also uses the same tuklib module. -#ifndef TUKLIB_SYMBOL_PREFIX -# define TUKLIB_SYMBOL_PREFIX -#endif - -#define TUKLIB_CAT_X(a, b) a ## b -#define TUKLIB_CAT(a, b) TUKLIB_CAT_X(a, b) - -#ifndef TUKLIB_SYMBOL -# define TUKLIB_SYMBOL(sym) TUKLIB_CAT(TUKLIB_SYMBOL_PREFIX, sym) -#endif - -#ifndef TUKLIB_DECLS_BEGIN -# ifdef __cplusplus -# define TUKLIB_DECLS_BEGIN extern "C" { -# else -# define TUKLIB_DECLS_BEGIN -# endif -#endif - -#ifndef TUKLIB_DECLS_END -# ifdef __cplusplus -# define TUKLIB_DECLS_END } -# else -# define TUKLIB_DECLS_END -# endif -#endif - -#if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define TUKLIB_GNUC_REQ(major, minor) \ - ((__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)) \ - || __GNUC__ > (major)) -#else -# define TUKLIB_GNUC_REQ(major, minor) 0 -#endif - -#if TUKLIB_GNUC_REQ(2, 5) -# define tuklib_attr_noreturn __attribute__((__noreturn__)) -#else -# define tuklib_attr_noreturn -#endif - -#if (defined(_WIN32) && !defined(__CYGWIN__)) \ - || defined(__OS2__) || defined(__MSDOS__) -# define TUKLIB_DOSLIKE 1 -#endif - -#endif diff --git a/deps/lzma/common/tuklib_config.h b/deps/lzma/common/tuklib_config.h deleted file mode 100644 index 549cb24d77381f..00000000000000 --- a/deps/lzma/common/tuklib_config.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef HAVE_CONFIG_H -# include "sysdefs.h" -#else -# include -# include -# include -#endif diff --git a/deps/lzma/common/tuklib_cpucores.c b/deps/lzma/common/tuklib_cpucores.c deleted file mode 100644 index 1da13df7f5f673..00000000000000 --- a/deps/lzma/common/tuklib_cpucores.c +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_cpucores.c -/// \brief Get the number of CPU cores online -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_cpucores.h" - -#if defined(TUKLIB_CPUCORES_SYSCTL) -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# include - -#elif defined(TUKLIB_CPUCORES_SYSCONF) -# include - -// HP-UX -#elif defined(TUKLIB_CPUCORES_PSTAT_GETDYNAMIC) -# include -# include -#endif - - -extern uint32_t -tuklib_cpucores(void) -{ - uint32_t ret = 0; - -#if defined(TUKLIB_CPUCORES_SYSCTL) - int name[2] = { CTL_HW, HW_NCPU }; - int cpus; - size_t cpus_size = sizeof(cpus); - if (sysctl(name, 2, &cpus, &cpus_size, NULL, 0) != -1 - && cpus_size == sizeof(cpus) && cpus > 0) - ret = cpus; - -#elif defined(TUKLIB_CPUCORES_SYSCONF) -# ifdef _SC_NPROCESSORS_ONLN - // Most systems - const long cpus = sysconf(_SC_NPROCESSORS_ONLN); -# else - // IRIX - const long cpus = sysconf(_SC_NPROC_ONLN); -# endif - if (cpus > 0) - ret = cpus; - -#elif defined(TUKLIB_CPUCORES_PSTAT_GETDYNAMIC) - struct pst_dynamic pst; - if (pstat_getdynamic(&pst, sizeof(pst), 1, 0) != -1) - ret = pst.psd_proc_cnt; -#endif - - return ret; -} diff --git a/deps/lzma/common/tuklib_cpucores.h b/deps/lzma/common/tuklib_cpucores.h deleted file mode 100644 index be1ce1c175ae45..00000000000000 --- a/deps/lzma/common/tuklib_cpucores.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_cpucores.h -/// \brief Get the number of CPU cores online -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_CPUCORES_H -#define TUKLIB_CPUCORES_H - -#include "tuklib_common.h" -TUKLIB_DECLS_BEGIN - -#define tuklib_cpucores TUKLIB_SYMBOL(tuklib_cpucores) -extern uint32_t tuklib_cpucores(void); - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/common/tuklib_exit.c b/deps/lzma/common/tuklib_exit.c deleted file mode 100644 index c393be64d7544c..00000000000000 --- a/deps/lzma/common/tuklib_exit.c +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_exit.c -/// \brief Close stdout and stderr, and exit -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_common.h" - -#include -#include - -#include "tuklib_gettext.h" -#include "tuklib_progname.h" -#include "tuklib_exit.h" - - -extern void -tuklib_exit(int status, int err_status, int show_error) -{ - if (status != err_status) { - // Close stdout. If something goes wrong, - // print an error message to stderr. - const int ferror_err = ferror(stdout); - const int fclose_err = fclose(stdout); - if (ferror_err || fclose_err) { - status = err_status; - - // If it was fclose() that failed, we have the reason - // in errno. If only ferror() indicated an error, - // we have no idea what the reason was. - if (show_error) - fprintf(stderr, "%s: %s: %s\n", progname, - _("Writing to standard " - "output failed"), - fclose_err ? strerror(errno) - : _("Unknown error")); - } - } - - if (status != err_status) { - // Close stderr. If something goes wrong, there's - // nothing where we could print an error message. - // Just set the exit status. - const int ferror_err = ferror(stderr); - const int fclose_err = fclose(stderr); - if (fclose_err || ferror_err) - status = err_status; - } - - exit(status); -} diff --git a/deps/lzma/common/tuklib_exit.h b/deps/lzma/common/tuklib_exit.h deleted file mode 100644 index b11776f0e5bfec..00000000000000 --- a/deps/lzma/common/tuklib_exit.h +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_exit.h -/// \brief Close stdout and stderr, and exit -/// \note Requires tuklib_progname and tuklib_gettext modules -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_EXIT_H -#define TUKLIB_EXIT_H - -#include "tuklib_common.h" -TUKLIB_DECLS_BEGIN - -#define tuklib_exit TUKLIB_SYMBOL(tuklib_exit) -extern void tuklib_exit(int status, int err_status, int show_error) - tuklib_attr_noreturn; - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/common/tuklib_gettext.h b/deps/lzma/common/tuklib_gettext.h deleted file mode 100644 index ff189040712536..00000000000000 --- a/deps/lzma/common/tuklib_gettext.h +++ /dev/null @@ -1,44 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_gettext.h -/// \brief Wrapper for gettext and friends -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_GETTEXT_H -#define TUKLIB_GETTEXT_H - -#include "tuklib_common.h" -#include - -#ifndef TUKLIB_GETTEXT -# ifdef ENABLE_NLS -# define TUKLIB_GETTEXT 1 -# else -# define TUKLIB_GETTEXT 0 -# endif -#endif - -#if TUKLIB_GETTEXT -# include -# define tuklib_gettext_init(package, localedir) \ - do { \ - setlocale(LC_ALL, ""); \ - bindtextdomain(package, localedir); \ - textdomain(package); \ - } while (0) -# define _(msgid) gettext(msgid) -#else -# define tuklib_gettext_init(package, localedir) \ - setlocale(LC_ALL, "") -# define _(msgid) (msgid) -# define ngettext(msgid1, msgid2, n) ((n) == 1 ? (msgid1) : (msgid2)) -#endif -#define N_(msgid) msgid - -#endif diff --git a/deps/lzma/common/tuklib_integer.h b/deps/lzma/common/tuklib_integer.h deleted file mode 100644 index e6daa772d58812..00000000000000 --- a/deps/lzma/common/tuklib_integer.h +++ /dev/null @@ -1,523 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_integer.h -/// \brief Various integer and bit operations -/// -/// This file provides macros or functions to do some basic integer and bit -/// operations. -/// -/// Endianness related integer operations (XX = 16, 32, or 64; Y = b or l): -/// - Byte swapping: bswapXX(num) -/// - Byte order conversions to/from native: convXXYe(num) -/// - Aligned reads: readXXYe(ptr) -/// - Aligned writes: writeXXYe(ptr, num) -/// - Unaligned reads (16/32-bit only): unaligned_readXXYe(ptr) -/// - Unaligned writes (16/32-bit only): unaligned_writeXXYe(ptr, num) -/// -/// Since they can macros, the arguments should have no side effects since -/// they may be evaluated more than once. -/// -/// \todo PowerPC and possibly some other architectures support -/// byte swapping load and store instructions. This file -/// doesn't take advantage of those instructions. -/// -/// Bit scan operations for non-zero 32-bit integers: -/// - Bit scan reverse (find highest non-zero bit): bsr32(num) -/// - Count leading zeros: clz32(num) -/// - Count trailing zeros: ctz32(num) -/// - Bit scan forward (simply an alias for ctz32()): bsf32(num) -/// -/// The above bit scan operations return 0-31. If num is zero, -/// the result is undefined. -// -// Authors: Lasse Collin -// Joachim Henke -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_INTEGER_H -#define TUKLIB_INTEGER_H - -#include "tuklib_common.h" - - -//////////////////////////////////////// -// Operating system specific features // -//////////////////////////////////////// - -#if defined(HAVE_BYTESWAP_H) - // glibc, uClibc, dietlibc -# include -# ifdef HAVE_BSWAP_16 -# define bswap16(num) bswap_16(num) -# endif -# ifdef HAVE_BSWAP_32 -# define bswap32(num) bswap_32(num) -# endif -# ifdef HAVE_BSWAP_64 -# define bswap64(num) bswap_64(num) -# endif - -#elif defined(HAVE_SYS_ENDIAN_H) - // *BSDs and Darwin -# include - -#elif defined(HAVE_SYS_BYTEORDER_H) - // Solaris -# include -# ifdef BSWAP_16 -# define bswap16(num) BSWAP_16(num) -# endif -# ifdef BSWAP_32 -# define bswap32(num) BSWAP_32(num) -# endif -# ifdef BSWAP_64 -# define bswap64(num) BSWAP_64(num) -# endif -# ifdef BE_16 -# define conv16be(num) BE_16(num) -# endif -# ifdef BE_32 -# define conv32be(num) BE_32(num) -# endif -# ifdef BE_64 -# define conv64be(num) BE_64(num) -# endif -# ifdef LE_16 -# define conv16le(num) LE_16(num) -# endif -# ifdef LE_32 -# define conv32le(num) LE_32(num) -# endif -# ifdef LE_64 -# define conv64le(num) LE_64(num) -# endif -#endif - - -/////////////////// -// Byte swapping // -/////////////////// - -#ifndef bswap16 -# define bswap16(num) \ - (((uint16_t)(num) << 8) | ((uint16_t)(num) >> 8)) -#endif - -#ifndef bswap32 -# define bswap32(num) \ - ( (((uint32_t)(num) << 24) ) \ - | (((uint32_t)(num) << 8) & UINT32_C(0x00FF0000)) \ - | (((uint32_t)(num) >> 8) & UINT32_C(0x0000FF00)) \ - | (((uint32_t)(num) >> 24) ) ) -#endif - -#ifndef bswap64 -# define bswap64(num) \ - ( (((uint64_t)(num) << 56) ) \ - | (((uint64_t)(num) << 40) & UINT64_C(0x00FF000000000000)) \ - | (((uint64_t)(num) << 24) & UINT64_C(0x0000FF0000000000)) \ - | (((uint64_t)(num) << 8) & UINT64_C(0x000000FF00000000)) \ - | (((uint64_t)(num) >> 8) & UINT64_C(0x00000000FF000000)) \ - | (((uint64_t)(num) >> 24) & UINT64_C(0x0000000000FF0000)) \ - | (((uint64_t)(num) >> 40) & UINT64_C(0x000000000000FF00)) \ - | (((uint64_t)(num) >> 56) ) ) -#endif - -// Define conversion macros using the basic byte swapping macros. -#ifdef WORDS_BIGENDIAN -# ifndef conv16be -# define conv16be(num) ((uint16_t)(num)) -# endif -# ifndef conv32be -# define conv32be(num) ((uint32_t)(num)) -# endif -# ifndef conv64be -# define conv64be(num) ((uint64_t)(num)) -# endif -# ifndef conv16le -# define conv16le(num) bswap16(num) -# endif -# ifndef conv32le -# define conv32le(num) bswap32(num) -# endif -# ifndef conv64le -# define conv64le(num) bswap64(num) -# endif -#else -# ifndef conv16be -# define conv16be(num) bswap16(num) -# endif -# ifndef conv32be -# define conv32be(num) bswap32(num) -# endif -# ifndef conv64be -# define conv64be(num) bswap64(num) -# endif -# ifndef conv16le -# define conv16le(num) ((uint16_t)(num)) -# endif -# ifndef conv32le -# define conv32le(num) ((uint32_t)(num)) -# endif -# ifndef conv64le -# define conv64le(num) ((uint64_t)(num)) -# endif -#endif - - -////////////////////////////// -// Aligned reads and writes // -////////////////////////////// - -static inline uint16_t -read16be(const uint8_t *buf) -{ - uint16_t num = *(const uint16_t *)buf; - return conv16be(num); -} - - -static inline uint16_t -read16le(const uint8_t *buf) -{ - uint16_t num = *(const uint16_t *)buf; - return conv16le(num); -} - - -static inline uint32_t -read32be(const uint8_t *buf) -{ - uint32_t num = *(const uint32_t *)buf; - return conv32be(num); -} - - -static inline uint32_t -read32le(const uint8_t *buf) -{ - uint32_t num = *(const uint32_t *)buf; - return conv32le(num); -} - - -static inline uint64_t -read64be(const uint8_t *buf) -{ - uint64_t num = *(const uint64_t *)buf; - return conv64be(num); -} - - -static inline uint64_t -read64le(const uint8_t *buf) -{ - uint64_t num = *(const uint64_t *)buf; - return conv64le(num); -} - - -// NOTE: Possible byte swapping must be done in a macro to allow GCC -// to optimize byte swapping of constants when using glibc's or *BSD's -// byte swapping macros. The actual write is done in an inline function -// to make type checking of the buf pointer possible similarly to readXXYe() -// functions. - -#define write16be(buf, num) write16ne((buf), conv16be(num)) -#define write16le(buf, num) write16ne((buf), conv16le(num)) -#define write32be(buf, num) write32ne((buf), conv32be(num)) -#define write32le(buf, num) write32ne((buf), conv32le(num)) -#define write64be(buf, num) write64ne((buf), conv64be(num)) -#define write64le(buf, num) write64ne((buf), conv64le(num)) - - -static inline void -write16ne(uint8_t *buf, uint16_t num) -{ - *(uint16_t *)buf = num; - return; -} - - -static inline void -write32ne(uint8_t *buf, uint32_t num) -{ - *(uint32_t *)buf = num; - return; -} - - -static inline void -write64ne(uint8_t *buf, uint64_t num) -{ - *(uint64_t *)buf = num; - return; -} - - -//////////////////////////////// -// Unaligned reads and writes // -//////////////////////////////// - -// NOTE: TUKLIB_FAST_UNALIGNED_ACCESS indicates only support for 16-bit and -// 32-bit unaligned integer loads and stores. It's possible that 64-bit -// unaligned access doesn't work or is slower than byte-by-byte access. -// Since unaligned 64-bit is probably not needed as often as 16-bit or -// 32-bit, we simply don't support 64-bit unaligned access for now. -#ifdef TUKLIB_FAST_UNALIGNED_ACCESS -# define unaligned_read16be read16be -# define unaligned_read16le read16le -# define unaligned_read32be read32be -# define unaligned_read32le read32le -# define unaligned_write16be write16be -# define unaligned_write16le write16le -# define unaligned_write32be write32be -# define unaligned_write32le write32le - -#else - -static inline uint16_t -unaligned_read16be(const uint8_t *buf) -{ - uint16_t num = ((uint16_t)buf[0] << 8) | (uint16_t)buf[1]; - return num; -} - - -static inline uint16_t -unaligned_read16le(const uint8_t *buf) -{ - uint16_t num = ((uint16_t)buf[0]) | ((uint16_t)buf[1] << 8); - return num; -} - - -static inline uint32_t -unaligned_read32be(const uint8_t *buf) -{ - uint32_t num = (uint32_t)buf[0] << 24; - num |= (uint32_t)buf[1] << 16; - num |= (uint32_t)buf[2] << 8; - num |= (uint32_t)buf[3]; - return num; -} - - -static inline uint32_t -unaligned_read32le(const uint8_t *buf) -{ - uint32_t num = (uint32_t)buf[0]; - num |= (uint32_t)buf[1] << 8; - num |= (uint32_t)buf[2] << 16; - num |= (uint32_t)buf[3] << 24; - return num; -} - - -static inline void -unaligned_write16be(uint8_t *buf, uint16_t num) -{ - buf[0] = num >> 8; - buf[1] = num; - return; -} - - -static inline void -unaligned_write16le(uint8_t *buf, uint16_t num) -{ - buf[0] = num; - buf[1] = num >> 8; - return; -} - - -static inline void -unaligned_write32be(uint8_t *buf, uint32_t num) -{ - buf[0] = num >> 24; - buf[1] = num >> 16; - buf[2] = num >> 8; - buf[3] = num; - return; -} - - -static inline void -unaligned_write32le(uint8_t *buf, uint32_t num) -{ - buf[0] = num; - buf[1] = num >> 8; - buf[2] = num >> 16; - buf[3] = num >> 24; - return; -} - -#endif - - -static inline uint32_t -bsr32(uint32_t n) -{ - // Check for ICC first, since it tends to define __GNUC__ too. -#if defined(__INTEL_COMPILER) - return _bit_scan_reverse(n); - -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX - // GCC >= 3.4 has __builtin_clz(), which gives good results on - // multiple architectures. On x86, __builtin_clz() ^ 31U becomes - // either plain BSR (so the XOR gets optimized away) or LZCNT and - // XOR (if -march indicates that SSE4a instructions are supported). - return __builtin_clz(n) ^ 31U; - -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) - uint32_t i; - __asm__("bsrl %1, %0" : "=r" (i) : "rm" (n)); - return i; - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - // MSVC isn't supported by tuklib, but since this code exists, - // it doesn't hurt to have it here anyway. - uint32_t i; - _BitScanReverse((DWORD *)&i, n); - return i; - -#else - uint32_t i = 31; - - if ((n & UINT32_C(0xFFFF0000)) == 0) { - n <<= 16; - i = 15; - } - - if ((n & UINT32_C(0xFF000000)) == 0) { - n <<= 8; - i -= 8; - } - - if ((n & UINT32_C(0xF0000000)) == 0) { - n <<= 4; - i -= 4; - } - - if ((n & UINT32_C(0xC0000000)) == 0) { - n <<= 2; - i -= 2; - } - - if ((n & UINT32_C(0x80000000)) == 0) - --i; - - return i; -#endif -} - - -static inline uint32_t -clz32(uint32_t n) -{ -#if defined(__INTEL_COMPILER) - return _bit_scan_reverse(n) ^ 31U; - -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX - return __builtin_clz(n); - -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) - uint32_t i; - __asm__("bsrl %1, %0\n\t" - "xorl $31, %0" - : "=r" (i) : "rm" (n)); - return i; - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - uint32_t i; - _BitScanReverse((DWORD *)&i, n); - return i ^ 31U; - -#else - uint32_t i = 0; - - if ((n & UINT32_C(0xFFFF0000)) == 0) { - n <<= 16; - i = 16; - } - - if ((n & UINT32_C(0xFF000000)) == 0) { - n <<= 8; - i += 8; - } - - if ((n & UINT32_C(0xF0000000)) == 0) { - n <<= 4; - i += 4; - } - - if ((n & UINT32_C(0xC0000000)) == 0) { - n <<= 2; - i += 2; - } - - if ((n & UINT32_C(0x80000000)) == 0) - ++i; - - return i; -#endif -} - - -static inline uint32_t -ctz32(uint32_t n) -{ -#if defined(__INTEL_COMPILER) - return _bit_scan_forward(n); - -#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX >= UINT32_MAX - return __builtin_ctz(n); - -#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) - uint32_t i; - __asm__("bsfl %1, %0" : "=r" (i) : "rm" (n)); - return i; - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - uint32_t i; - _BitScanForward((DWORD *)&i, n); - return i; - -#else - uint32_t i = 0; - - if ((n & UINT32_C(0x0000FFFF)) == 0) { - n >>= 16; - i = 16; - } - - if ((n & UINT32_C(0x000000FF)) == 0) { - n >>= 8; - i += 8; - } - - if ((n & UINT32_C(0x0000000F)) == 0) { - n >>= 4; - i += 4; - } - - if ((n & UINT32_C(0x00000003)) == 0) { - n >>= 2; - i += 2; - } - - if ((n & UINT32_C(0x00000001)) == 0) - ++i; - - return i; -#endif -} - -#define bsf32 ctz32 - -#endif diff --git a/deps/lzma/common/tuklib_mbstr.h b/deps/lzma/common/tuklib_mbstr.h deleted file mode 100644 index 9f3583551806a4..00000000000000 --- a/deps/lzma/common/tuklib_mbstr.h +++ /dev/null @@ -1,66 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_mstr.h -/// \brief Utility functions for handling multibyte strings -/// -/// If not enough multibyte string support is available in the C library, -/// these functions keep working with the assumption that all strings -/// are in a single-byte character set without combining characters, e.g. -/// US-ASCII or ISO-8859-*. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_MBSTR_H -#define TUKLIB_MBSTR_H - -#include "tuklib_common.h" -TUKLIB_DECLS_BEGIN - -#define tuklib_mbstr_width TUKLIB_SYMBOL(tuklib_mbstr_width) -extern size_t tuklib_mbstr_width(const char *str, size_t *bytes); -///< -/// \brief Get the number of columns needed for the multibyte string -/// -/// This is somewhat similar to wcswidth() but works on multibyte strings. -/// -/// \param str String whose width is to be calculated. If the -/// current locale uses a multibyte character set -/// that has shift states, the string must begin -/// and end in the initial shift state. -/// \param bytes If this is not NULL, *bytes is set to the -/// value returned by strlen(str) (even if an -/// error occurs when calculating the width). -/// -/// \return On success, the number of columns needed to display the -/// string e.g. in a terminal emulator is returned. On error, -/// (size_t)-1 is returned. Possible errors include invalid, -/// partial, or non-printable multibyte character in str, or -/// that str doesn't end in the initial shift state. - -#define tuklib_mbstr_fw TUKLIB_SYMBOL(tuklib_mbstr_fw) -extern int tuklib_mbstr_fw(const char *str, int columns_min); -///< -/// \brief Get the field width for printf() e.g. to align table columns -/// -/// Printing simple tables to a terminal can be done using the field field -/// feature in the printf() format string, but it works only with single-byte -/// character sets. To do the same with multibyte strings, tuklib_mbstr_fw() -/// can be used to calculate appropriate field width. -/// -/// The behavior of this function is undefined, if -/// - str is NULL or not terminated with '\0'; -/// - columns_min <= 0; or -/// - the calculated field width exceeds INT_MAX. -/// -/// \return If tuklib_mbstr_width(str, NULL) fails, -1 is returned. -/// If str needs more columns than columns_min, zero is returned. -/// Otherwise a positive integer is returned, which can be -/// used as the field width, e.g. printf("%*s", fw, str). - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/common/tuklib_mbstr_fw.c b/deps/lzma/common/tuklib_mbstr_fw.c deleted file mode 100644 index 978a3fe10d9318..00000000000000 --- a/deps/lzma/common/tuklib_mbstr_fw.c +++ /dev/null @@ -1,31 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_mstr_fw.c -/// \brief Get the field width for printf() e.g. to align table columns -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_mbstr.h" - - -extern int -tuklib_mbstr_fw(const char *str, int columns_min) -{ - size_t len; - const size_t width = tuklib_mbstr_width(str, &len); - if (width == (size_t)-1) - return -1; - - if (width > (size_t)columns_min) - return 0; - - if (width < (size_t)columns_min) - len += (size_t)columns_min - width; - - return len; -} diff --git a/deps/lzma/common/tuklib_mbstr_width.c b/deps/lzma/common/tuklib_mbstr_width.c deleted file mode 100644 index 3c38990f460827..00000000000000 --- a/deps/lzma/common/tuklib_mbstr_width.c +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_mstr_width.c -/// \brief Calculate width of a multibyte string -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_mbstr.h" - -#if defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH) -# include -#endif - - -extern size_t -tuklib_mbstr_width(const char *str, size_t *bytes) -{ - const size_t len = strlen(str); - if (bytes != NULL) - *bytes = len; - -#if !(defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH)) - // In single-byte mode, the width of the string is the same - // as its length. - return len; - -#else - mbstate_t state; - memset(&state, 0, sizeof(state)); - - size_t width = 0; - size_t i = 0; - - // Convert one multibyte character at a time to wchar_t - // and get its width using wcwidth(). - while (i < len) { - wchar_t wc; - const size_t ret = mbrtowc(&wc, str + i, len - i, &state); - if (ret < 1 || ret > len) - return (size_t)-1; - - i += ret; - - const int wc_width = wcwidth(wc); - if (wc_width < 0) - return (size_t)-1; - - width += wc_width; - } - - // Require that the string ends in the initial shift state. - // This way the caller can be combine the string with other - // strings without needing to worry about the shift states. - if (!mbsinit(&state)) - return (size_t)-1; - - return width; -#endif -} diff --git a/deps/lzma/common/tuklib_open_stdxxx.c b/deps/lzma/common/tuklib_open_stdxxx.c deleted file mode 100644 index 26702a6afab003..00000000000000 --- a/deps/lzma/common/tuklib_open_stdxxx.c +++ /dev/null @@ -1,57 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_open_stdxxx.c -/// \brief Make sure that file descriptors 0, 1, and 2 are open -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_open_stdxxx.h" - -#ifndef TUKLIB_DOSLIKE -# include -# include -# include -# include -#endif - - -extern void -tuklib_open_stdxxx(int err_status) -{ -#ifdef TUKLIB_DOSLIKE - // Do nothing, just silence warnings. - (void)err_status; - -#else - for (int i = 0; i <= 2; ++i) { - // We use fcntl() to check if the file descriptor is open. - if (fcntl(i, F_GETFD) == -1 && errno == EBADF) { - // With stdin, we could use /dev/full so that - // writing to stdin would fail. However, /dev/full - // is Linux specific, and if the program tries to - // write to stdin, there's already a problem anyway. - const int fd = open("/dev/null", O_NOCTTY - | (i == 0 ? O_WRONLY : O_RDONLY)); - - if (fd != i) { - if (fd != -1) - (void)close(fd); - - // Something went wrong. Exit with the - // exit status we were given. Don't try - // to print an error message, since stderr - // may very well be non-existent. This - // error should be extremely rare. - exit(err_status); - } - } - } -#endif - - return; -} diff --git a/deps/lzma/common/tuklib_open_stdxxx.h b/deps/lzma/common/tuklib_open_stdxxx.h deleted file mode 100644 index b91161609ee6d5..00000000000000 --- a/deps/lzma/common/tuklib_open_stdxxx.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_open_stdxxx.h -/// \brief Make sure that file descriptors 0, 1, and 2 are open -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_OPEN_STDXXX_H -#define TUKLIB_OPEN_STDXXX_H - -#include "tuklib_common.h" -TUKLIB_DECLS_BEGIN - -#define tuklib_open_stdxx TUKLIB_SYMBOL(tuklib_open_stdxxx) -extern void tuklib_open_stdxxx(int err_status); - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/common/tuklib_physmem.c b/deps/lzma/common/tuklib_physmem.c deleted file mode 100644 index 623b6e70b7f28c..00000000000000 --- a/deps/lzma/common/tuklib_physmem.c +++ /dev/null @@ -1,196 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_physmem.c -/// \brief Get the amount of physical memory -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_physmem.h" - -// We want to use Windows-specific code on Cygwin, which also has memory -// information available via sysconf(), but on Cygwin 1.5 and older it -// gives wrong results (from our point of view). -#if defined(_WIN32) || defined(__CYGWIN__) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0500 -# endif -# include - -#elif defined(__OS2__) -# define INCL_DOSMISC -# include - -#elif defined(__DJGPP__) -# include - -#elif defined(__VMS) -# include -# include -# include - -// AIX -#elif defined(TUKLIB_PHYSMEM_AIX) -# include - -#elif defined(TUKLIB_PHYSMEM_SYSCONF) -# include - -#elif defined(TUKLIB_PHYSMEM_SYSCTL) -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# include - -// Tru64 -#elif defined(TUKLIB_PHYSMEM_GETSYSINFO) -# include -# include - -// HP-UX -#elif defined(TUKLIB_PHYSMEM_PSTAT_GETSTATIC) -# include -# include - -// IRIX -#elif defined(TUKLIB_PHYSMEM_GETINVENT_R) -# include - -// This sysinfo() is Linux-specific. -#elif defined(TUKLIB_PHYSMEM_SYSINFO) -# include -#endif - - -extern uint64_t -tuklib_physmem(void) -{ - uint64_t ret = 0; - -#if defined(_WIN32) || defined(__CYGWIN__) - if ((GetVersion() & 0xFF) >= 5) { - // Windows 2000 and later have GlobalMemoryStatusEx() which - // supports reporting values greater than 4 GiB. To keep the - // code working also on older Windows versions, use - // GlobalMemoryStatusEx() conditionally. - HMODULE kernel32 = GetModuleHandle("kernel32.dll"); - if (kernel32 != NULL) { - BOOL (WINAPI *gmse)(LPMEMORYSTATUSEX) = GetProcAddress( - kernel32, "GlobalMemoryStatusEx"); - if (gmse != NULL) { - MEMORYSTATUSEX meminfo; - meminfo.dwLength = sizeof(meminfo); - if (gmse(&meminfo)) - ret = meminfo.ullTotalPhys; - } - } - } - - if (ret == 0) { - // GlobalMemoryStatus() is supported by Windows 95 and later, - // so it is fine to link against it unconditionally. Note that - // GlobalMemoryStatus() has no return value. - MEMORYSTATUS meminfo; - meminfo.dwLength = sizeof(meminfo); - GlobalMemoryStatus(&meminfo); - ret = meminfo.dwTotalPhys; - } - -#elif defined(__OS2__) - unsigned long mem; - if (DosQuerySysInfo(QSV_TOTPHYSMEM, QSV_TOTPHYSMEM, - &mem, sizeof(mem)) == 0) - ret = mem; - -#elif defined(__DJGPP__) - __dpmi_free_mem_info meminfo; - if (__dpmi_get_free_memory_information(&meminfo) == 0 - && meminfo.total_number_of_physical_pages - != (unsigned long)-1) - ret = (uint64_t)meminfo.total_number_of_physical_pages * 4096; - -#elif defined(__VMS) - int vms_mem; - int val = SYI$_MEMSIZE; - if (LIB$GETSYI(&val, &vms_mem, 0, 0, 0, 0) == SS$_NORMAL) - ret = (uint64_t)vms_mem * 8192; - -#elif defined(TUKLIB_PHYSMEM_AIX) - ret = _system_configuration.physmem; - -#elif defined(TUKLIB_PHYSMEM_SYSCONF) - const long pagesize = sysconf(_SC_PAGESIZE); - const long pages = sysconf(_SC_PHYS_PAGES); - if (pagesize != -1 && pages != -1) - // According to docs, pagesize * pages can overflow. - // Simple case is 32-bit box with 4 GiB or more RAM, - // which may report exactly 4 GiB of RAM, and "long" - // being 32-bit will overflow. Casting to uint64_t - // hopefully avoids overflows in the near future. - ret = (uint64_t)pagesize * (uint64_t)pages; - -#elif defined(TUKLIB_PHYSMEM_SYSCTL) - int name[2] = { - CTL_HW, -#ifdef HW_PHYSMEM64 - HW_PHYSMEM64 -#else - HW_PHYSMEM -#endif - }; - union { - uint32_t u32; - uint64_t u64; - } mem; - size_t mem_ptr_size = sizeof(mem.u64); - if (sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, 0) != -1) { - // IIRC, 64-bit "return value" is possible on some 64-bit - // BSD systems even with HW_PHYSMEM (instead of HW_PHYSMEM64), - // so support both. - if (mem_ptr_size == sizeof(mem.u64)) - ret = mem.u64; - else if (mem_ptr_size == sizeof(mem.u32)) - ret = mem.u32; - } - -#elif defined(TUKLIB_PHYSMEM_GETSYSINFO) - // Docs are unclear if "start" is needed, but it doesn't hurt - // much to have it. - int memkb; - int start = 0; - if (getsysinfo(GSI_PHYSMEM, (caddr_t)&memkb, sizeof(memkb), &start) - != -1) - ret = (uint64_t)memkb * 1024; - -#elif defined(TUKLIB_PHYSMEM_PSTAT_GETSTATIC) - struct pst_static pst; - if (pstat_getstatic(&pst, sizeof(pst), 1, 0) != -1) - ret = (uint64_t)pst.physical_memory * (uint64_t)pst.page_size; - -#elif defined(TUKLIB_PHYSMEM_GETINVENT_R) - inv_state_t *st = NULL; - if (setinvent_r(&st) != -1) { - inventory_t *i; - while ((i = getinvent_r(st)) != NULL) { - if (i->inv_class == INV_MEMORY - && i->inv_type == INV_MAIN_MB) { - ret = (uint64_t)i->inv_state << 20; - break; - } - } - - endinvent_r(st); - } - -#elif defined(TUKLIB_PHYSMEM_SYSINFO) - struct sysinfo si; - if (sysinfo(&si) == 0) - ret = (uint64_t)si.totalram * si.mem_unit; -#endif - - return ret; -} diff --git a/deps/lzma/common/tuklib_physmem.h b/deps/lzma/common/tuklib_physmem.h deleted file mode 100644 index 09e2a51338ae79..00000000000000 --- a/deps/lzma/common/tuklib_physmem.h +++ /dev/null @@ -1,28 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_physmem.h -/// \brief Get the amount of physical memory -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_PHYSMEM_H -#define TUKLIB_PHYSMEM_H - -#include "tuklib_common.h" -TUKLIB_DECLS_BEGIN - -#define tuklib_physmem TUKLIB_SYMBOL(tuklib_physmem) -extern uint64_t tuklib_physmem(void); -///< -/// \brief Get the amount of physical memory in bytes -/// -/// \return Amount of physical memory in bytes. On error, zero is -/// returned. - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/common/tuklib_progname.c b/deps/lzma/common/tuklib_progname.c deleted file mode 100644 index 7cb7e203dd9d2b..00000000000000 --- a/deps/lzma/common/tuklib_progname.c +++ /dev/null @@ -1,50 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_progname.c -/// \brief Program name to be displayed in messages -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "tuklib_progname.h" -#include - - -#if !HAVE_DECL_PROGRAM_INVOCATION_NAME -char *progname = NULL; -#endif - - -extern void -tuklib_progname_init(char **argv) -{ -#ifdef TUKLIB_DOSLIKE - // On these systems, argv[0] always has the full path and .exe - // suffix even if the user just types the plain program name. - // We modify argv[0] to make it nicer to read. - - // Strip the leading path. - char *p = argv[0] + strlen(argv[0]); - while (argv[0] < p && p[-1] != '/' && p[-1] != '\\') - --p; - - argv[0] = p; - - // Strip the .exe suffix. - p = strrchr(p, '.'); - if (p != NULL) - *p = '\0'; - - // Make it lowercase. - for (p = argv[0]; *p != '\0'; ++p) - if (*p >= 'A' && *p <= 'Z') - *p = *p - 'A' + 'a'; -#endif - - progname = argv[0]; - return; -} diff --git a/deps/lzma/common/tuklib_progname.h b/deps/lzma/common/tuklib_progname.h deleted file mode 100644 index 791b12517e59c9..00000000000000 --- a/deps/lzma/common/tuklib_progname.h +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file tuklib_progname.h -/// \brief Program name to be displayed in messages -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef TUKLIB_PROGNAME_H -#define TUKLIB_PROGNAME_H - -#include "tuklib_common.h" -#include - -TUKLIB_DECLS_BEGIN - -#if HAVE_DECL_PROGRAM_INVOCATION_NAME -# define progname program_invocation_name -#else -# define progname TUKLIB_SYMBOL(tuklib_progname) - extern char *progname; -#endif - -#define tuklib_progname_init TUKLIB_SYMBOL(tuklib_progname_init) -extern void tuklib_progname_init(char **argv); - -TUKLIB_DECLS_END -#endif diff --git a/deps/lzma/config.h b/deps/lzma/config.h deleted file mode 100644 index 59c1f30b0ad12d..00000000000000 --- a/deps/lzma/config.h +++ /dev/null @@ -1,415 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* How many MiB of RAM to assume if the real amount cannot be determined. */ -#define ASSUME_RAM 128 - -/* Define to 1 if translation of program messages to the user's native -language is requested. */ -/* #undef ENABLE_NLS */ - -/* Define to 1 if bswap_16 is available. */ -/* #undef HAVE_BSWAP_16 */ - -/* Define to 1 if bswap_32 is available. */ -/* #undef HAVE_BSWAP_32 */ - -/* Define to 1 if bswap_64 is available. */ -/* #undef HAVE_BSWAP_64 */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_BYTESWAP_H */ - -/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the -CoreFoundation framework. */ -/* #undef HAVE_CFLOCALECOPYCURRENT */ - -/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in -the CoreFoundation framework. */ -/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ - -/* Define to 1 if crc32 integrity check is enabled. */ -#define HAVE_CHECK_CRC32 1 - -/* Define to 1 if crc64 integrity check is enabled. */ -#define HAVE_CHECK_CRC64 1 - -/* Define to 1 if sha256 integrity check is enabled. */ -#define HAVE_CHECK_SHA256 1 - -/* Define if the GNU dcgettext() function is already present or preinstalled. -*/ -/* #undef HAVE_DCGETTEXT */ - -/* Define to 1 if you have the declaration of `program_invocation_name', and -to 0 if you don't. */ -#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0 - -/* Define to 1 if arm decoder is enabled. */ -#define HAVE_DECODER_ARM 1 - -/* Define to 1 if armthumb decoder is enabled. */ -#define HAVE_DECODER_ARMTHUMB 1 - -/* Define to 1 if delta decoder is enabled. */ -#define HAVE_DECODER_DELTA 1 - -/* Define to 1 if ia64 decoder is enabled. */ -#define HAVE_DECODER_IA64 1 - -/* Define to 1 if lzma1 decoder is enabled. */ -#define HAVE_DECODER_LZMA1 1 - -/* Define to 1 if lzma2 decoder is enabled. */ -#define HAVE_DECODER_LZMA2 1 - -/* Define to 1 if powerpc decoder is enabled. */ -#define HAVE_DECODER_POWERPC 1 - -/* Define to 1 if sparc decoder is enabled. */ -#define HAVE_DECODER_SPARC 1 - -/* Define to 1 if x86 decoder is enabled. */ -#define HAVE_DECODER_X86 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if arm encoder is enabled. */ -#define HAVE_ENCODER_ARM 1 - -/* Define to 1 if armthumb encoder is enabled. */ -#define HAVE_ENCODER_ARMTHUMB 1 - -/* Define to 1 if delta encoder is enabled. */ -#define HAVE_ENCODER_DELTA 1 - -/* Define to 1 if ia64 encoder is enabled. */ -#define HAVE_ENCODER_IA64 1 - -/* Define to 1 if lzma1 encoder is enabled. */ -#define HAVE_ENCODER_LZMA1 1 - -/* Define to 1 if lzma2 encoder is enabled. */ -#define HAVE_ENCODER_LZMA2 1 - -/* Define to 1 if powerpc encoder is enabled. */ -#define HAVE_ENCODER_POWERPC 1 - -/* Define to 1 if sparc encoder is enabled. */ -#define HAVE_ENCODER_SPARC 1 - -/* Define to 1 if x86 encoder is enabled. */ -#define HAVE_ENCODER_X86 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the `futimens' function. */ -/* #undef HAVE_FUTIMENS */ - -/* Define to 1 if you have the `futimes' function. */ -/* #undef HAVE_FUTIMES */ - -/* Define to 1 if you have the `futimesat' function. */ -/* #undef HAVE_FUTIMESAT */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_GETOPT_H */ - -/* Define to 1 if you have the `getopt_long' function. */ -/* #undef HAVE_GETOPT_LONG */ - -/* Define if the GNU gettext() function is already present or preinstalled. */ -/* #undef HAVE_GETTEXT */ - -/* Define if you have the iconv() function and it works. */ -#define HAVE_ICONV 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if mbrtowc and mbstate_t are properly declared. */ -#define HAVE_MBRTOWC 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 to enable bt2 match finder. */ -#define HAVE_MF_BT2 1 - -/* Define to 1 to enable bt3 match finder. */ -#define HAVE_MF_BT3 1 - -/* Define to 1 to enable bt4 match finder. */ -#define HAVE_MF_BT4 1 - -/* Define to 1 to enable hc3 match finder. */ -#define HAVE_MF_HC3 1 - -/* Define to 1 to enable hc4 match finder. */ -#define HAVE_MF_HC4 1 - -/* Define to 1 if getopt.h declares extern int optreset. */ -/* #undef HAVE_OPTRESET */ - -/* Define if you have POSIX threads libraries and header files. */ -/* #undef HAVE_PTHREAD */ - -/* Have PTHREAD_PRIO_INHERIT. */ -/* #undef HAVE_PTHREAD_PRIO_INHERIT */ - -/* Define to 1 if optimizing for size. */ -/* #undef HAVE_SMALL */ - -/* Define to 1 if stdbool.h conforms to C99. */ -#define HAVE_STDBOOL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRINGS_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if `st_atimensec' is a member of `struct stat'. */ -/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */ - -/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ -/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC */ - -/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ -/* #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC */ - -/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ -/* #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC */ - -/* Define to 1 if `st_uatime' is a member of `struct stat'. */ -/* #undef HAVE_STRUCT_STAT_ST_UATIME */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_BYTEORDER_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_ENDIAN_H */ - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if the system has the type `uintptr_t'. */ -#define HAVE_UINTPTR_T 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `utime' function. */ -#define HAVE_UTIME 1 - -/* Define to 1 if you have the `utimes' function. */ -/* #undef HAVE_UTIMES */ - -/* Define to 1 or 0, depending whether the compiler supports simple visibility -declarations. */ -#define HAVE_VISIBILITY 1 - -/* Define to 1 if you have the `wcwidth' function. */ -/* #undef HAVE_WCWIDTH */ - -/* Define to 1 if the system has the type `_Bool'. */ -#define HAVE__BOOL 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. -*/ -#define LT_OBJDIR ".libs/" - -/* Name of package */ -#define PACKAGE "xz" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "XZ Utils" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "xz" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "http://tukaani.org/xz/" - -/* Define to necessary symbol if this constant uses a non-standard name on -your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* The size of `size_t', as computed by sizeof. */ -#define SIZEOF_SIZE_T 4 - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if the number of available CPU cores can be detected with -pstat_getdynamic(). */ -/* #undef TUKLIB_CPUCORES_PSTAT_GETDYNAMIC */ - -/* Define to 1 if the number of available CPU cores can be detected with -sysconf(_SC_NPROCESSORS_ONLN) or sysconf(_SC_NPROC_ONLN). */ -/* #undef TUKLIB_CPUCORES_SYSCONF */ - -/* Define to 1 if the number of available CPU cores can be detected with -sysctl(). */ -/* #undef TUKLIB_CPUCORES_SYSCTL */ - -/* Define to 1 if the system supports fast unaligned access to 16-bit and -32-bit integers. */ -#define TUKLIB_FAST_UNALIGNED_ACCESS 1 - -/* Define to 1 if the amount of physical memory can be detected with -_system_configuration.physmem. */ -/* #undef TUKLIB_PHYSMEM_AIX */ - -/* Define to 1 if the amount of physical memory can be detected with -getinvent_r(). */ -/* #undef TUKLIB_PHYSMEM_GETINVENT_R */ - -/* Define to 1 if the amount of physical memory can be detected with -getsysinfo(). */ -/* #undef TUKLIB_PHYSMEM_GETSYSINFO */ - -/* Define to 1 if the amount of physical memory can be detected with -pstat_getstatic(). */ -/* #undef TUKLIB_PHYSMEM_PSTAT_GETSTATIC */ - -/* Define to 1 if the amount of physical memory can be detected with -sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES). */ -/* #undef TUKLIB_PHYSMEM_SYSCONF */ - -/* Define to 1 if the amount of physical memory can be detected with sysctl(). -*/ -/* #undef TUKLIB_PHYSMEM_SYSCTL */ - -/* Define to 1 if the amount of physical memory can be detected with Linux -sysinfo(). */ -/* #undef TUKLIB_PHYSMEM_SYSINFO */ - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# define _ALL_SOURCE 1 -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS 1 -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# define _TANDEM_SOURCE 1 -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif - -#include "version.h" - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most -significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#define _FILE_OFFSET_BITS 64 - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -/* Define to 1 if on MINIX. */ -/* #undef _MINIX */ - -/* Define to 2 if the system does not provide POSIX.1 features except with -this defined. */ -/* #undef _POSIX_1_SOURCE */ - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -/* #undef _POSIX_SOURCE */ - -/* Define for Solaris 2.5.1 so the uint32_t typedef from , -, or is not used. If the typedef were allowed, the -#define below would cause a syntax error. */ -/* #undef _UINT32_T */ - -/* Define for Solaris 2.5.1 so the uint64_t typedef from , -, or is not used. If the typedef were allowed, the -#define below would cause a syntax error. */ -/* #undef _UINT64_T */ - -/* Define for Solaris 2.5.1 so the uint8_t typedef from , -, or is not used. If the typedef were allowed, the -#define below would cause a syntax error. */ -/* #undef _UINT8_T */ - -/* Define to rpl_ if the getopt replacement functions and variables should be -used. */ -/* #undef __GETOPT_PREFIX */ - -/* Define to the type of a signed integer type of width exactly 32 bits if -such a type exists and the standard includes do not define it. */ -/* #undef int32_t */ - -/* Define to the type of a signed integer type of width exactly 64 bits if -such a type exists and the standard includes do not define it. */ -/* #undef int64_t */ - -/* Define to the type of an unsigned integer type of width exactly 16 bits if -such a type exists and the standard includes do not define it. */ -/* #undef uint16_t */ - -/* Define to the type of an unsigned integer type of width exactly 32 bits if -such a type exists and the standard includes do not define it. */ -/* #undef uint32_t */ - -/* Define to the type of an unsigned integer type of width exactly 64 bits if -such a type exists and the standard includes do not define it. */ -/* #undef uint64_t */ - -/* Define to the type of an unsigned integer type of width exactly 8 bits if -such a type exists and the standard includes do not define it. */ -/* #undef uint8_t */ - -/* Define to the type of an unsigned integer type wide enough to hold a -pointer, if such a type exists, and if the system does not define it. */ -/* #undef uintptr_t */ \ No newline at end of file diff --git a/deps/lzma/liblzma/api/lzma.h b/deps/lzma/liblzma/api/lzma.h deleted file mode 100644 index 05e78416b010e6..00000000000000 --- a/deps/lzma/liblzma/api/lzma.h +++ /dev/null @@ -1,314 +0,0 @@ -/** - * \file api/lzma.h - * \brief The public API of liblzma data compression library - * - * liblzma is a public domain general-purpose data compression library with - * a zlib-like API. The native file format is .xz, but also the old .lzma - * format and raw (no headers) streams are supported. Multiple compression - * algorithms (filters) are supported. Currently LZMA2 is the primary filter. - * - * liblzma is part of XZ Utils . XZ Utils includes - * a gzip-like command line tool named xz and some other tools. XZ Utils - * is developed and maintained by Lasse Collin. - * - * Major parts of liblzma are based on Igor Pavlov's public domain LZMA SDK - * . - * - * The SHA-256 implementation is based on the public domain code found from - * 7-Zip , which has a modified version of the public - * domain SHA-256 code found from Crypto++ . - * The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - */ - -#ifndef LZMA_H -#define LZMA_H - -/***************************** - * Required standard headers * - *****************************/ - -/* - * liblzma API headers need some standard types and macros. To allow - * including lzma.h without requiring the application to include other - * headers first, lzma.h includes the required standard headers unless - * they already seem to be included already or if LZMA_MANUAL_HEADERS - * has been defined. - * - * Here's what types and macros are needed and from which headers: - * - stddef.h: size_t, NULL - * - stdint.h: uint8_t, uint32_t, uint64_t, UINT32_C(n), uint64_C(n), - * UINT32_MAX, UINT64_MAX - * - * However, inttypes.h is a little more portable than stdint.h, although - * inttypes.h declares some unneeded things compared to plain stdint.h. - * - * The hacks below aren't perfect, specifically they assume that inttypes.h - * exists and that it typedefs at least uint8_t, uint32_t, and uint64_t, - * and that, in case of incomplete inttypes.h, unsigned int is 32-bit. - * If the application already takes care of setting up all the types and - * macros properly (for example by using gnulib's stdint.h or inttypes.h), - * we try to detect that the macros are already defined and don't include - * inttypes.h here again. However, you may define LZMA_MANUAL_HEADERS to - * force this file to never include any system headers. - * - * Some could argue that liblzma API should provide all the required types, - * for example lzma_uint64, LZMA_UINT64_C(n), and LZMA_UINT64_MAX. This was - * seen as an unnecessary mess, since most systems already provide all the - * necessary types and macros in the standard headers. - * - * Note that liblzma API still has lzma_bool, because using stdbool.h would - * break C89 and C++ programs on many systems. sizeof(bool) in C99 isn't - * necessarily the same as sizeof(bool) in C++. - */ - -#ifndef LZMA_MANUAL_HEADERS - /* - * I suppose this works portably also in C++. Note that in C++, - * we need to get size_t into the global namespace. - */ -# include - - /* - * Skip inttypes.h if we already have all the required macros. If we - * have the macros, we assume that we have the matching typedefs too. - */ -# if !defined(UINT32_C) || !defined(UINT64_C) \ - || !defined(UINT32_MAX) || !defined(UINT64_MAX) - /* - * MSVC has no C99 support, and thus it cannot be used to - * compile liblzma. The liblzma API has to still be usable - * from MSVC, so we need to define the required standard - * integer types here. - */ -# if defined(_WIN32) && defined(_MSC_VER) - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - typedef unsigned __int64 uint64_t; -# else - /* Use the standard inttypes.h. */ -# ifdef __cplusplus - /* - * C99 sections 7.18.2 and 7.18.4 specify - * that C++ implementations define the limit - * and constant macros only if specifically - * requested. Note that if you want the - * format macros (PRIu64 etc.) too, you need - * to define __STDC_FORMAT_MACROS before - * including lzma.h, since re-including - * inttypes.h with __STDC_FORMAT_MACROS - * defined doesn't necessarily work. - */ -# ifndef __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS 1 -# endif -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# endif - -# include -# endif - - /* - * Some old systems have only the typedefs in inttypes.h, and - * lack all the macros. For those systems, we need a few more - * hacks. We assume that unsigned int is 32-bit and unsigned - * long is either 32-bit or 64-bit. If these hacks aren't - * enough, the application has to setup the types manually - * before including lzma.h. - */ -# ifndef UINT32_C -# if defined(_WIN32) && defined(_MSC_VER) -# define UINT32_C(n) n ## UI32 -# else -# define UINT32_C(n) n ## U -# endif -# endif - -# ifndef UINT64_C -# if defined(_WIN32) && defined(_MSC_VER) -# define UINT64_C(n) n ## UI64 -# else - /* Get ULONG_MAX. */ -# include -# if ULONG_MAX == 4294967295UL -# define UINT64_C(n) n ## ULL -# else -# define UINT64_C(n) n ## UL -# endif -# endif -# endif - -# ifndef UINT32_MAX -# define UINT32_MAX (UINT32_C(4294967295)) -# endif - -# ifndef UINT64_MAX -# define UINT64_MAX (UINT64_C(18446744073709551615)) -# endif -# endif -#endif /* ifdef LZMA_MANUAL_HEADERS */ - - -/****************** - * LZMA_API macro * - ******************/ - -/* - * Some systems require that the functions and function pointers are - * declared specially in the headers. LZMA_API_IMPORT is for importing - * symbols and LZMA_API_CALL is to specify the calling convention. - * - * By default it is assumed that the application will link dynamically - * against liblzma. #define LZMA_API_STATIC in your application if you - * want to link against static liblzma. If you don't care about portability - * to operating systems like Windows, or at least don't care about linking - * against static liblzma on them, don't worry about LZMA_API_STATIC. That - * is, most developers will never need to use LZMA_API_STATIC. - * - * The GCC variants are a special case on Windows (Cygwin and MinGW). - * We rely on GCC doing the right thing with its auto-import feature, - * and thus don't use __declspec(dllimport). This way developers don't - * need to worry about LZMA_API_STATIC. Also the calling convention is - * omitted on Cygwin but not on MinGW. - */ -#ifndef LZMA_API_IMPORT -# define LZMA_API_STATIC -# if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__GNUC__) -# define LZMA_API_IMPORT __declspec(dllimport) -# else -# define LZMA_API_IMPORT -# endif -#endif - -#ifndef LZMA_API_CALL -# if defined(_WIN32) && !defined(__CYGWIN__) -# define LZMA_API_CALL __cdecl -# else -# define LZMA_API_CALL -# endif -#endif - -#ifndef LZMA_API -# define LZMA_API(type) LZMA_API_IMPORT type LZMA_API_CALL -#endif - - -/*********** - * nothrow * - ***********/ - -/* - * None of the functions in liblzma may throw an exception. Even - * the functions that use callback functions won't throw exceptions, - * because liblzma would break if a callback function threw an exception. - */ -#ifndef lzma_nothrow -# if defined(__cplusplus) -# define lzma_nothrow throw() -# elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) -# define lzma_nothrow __attribute__((__nothrow__)) -# else -# define lzma_nothrow -# endif -#endif - - -/******************** - * GNU C extensions * - ********************/ - -/* - * GNU C extensions are used conditionally in the public API. It doesn't - * break anything if these are sometimes enabled and sometimes not, only - * affects warnings and optimizations. - */ -#if __GNUC__ >= 3 -# ifndef lzma_attribute -# define lzma_attribute(attr) __attribute__(attr) -# endif - - /* warn_unused_result was added in GCC 3.4. */ -# ifndef lzma_attr_warn_unused_result -# if __GNUC__ == 3 && __GNUC_MINOR__ < 4 -# define lzma_attr_warn_unused_result -# endif -# endif - -#else -# ifndef lzma_attribute -# define lzma_attribute(attr) -# endif -#endif - - -#ifndef lzma_attr_pure -# define lzma_attr_pure lzma_attribute((__pure__)) -#endif - -#ifndef lzma_attr_const -# define lzma_attr_const lzma_attribute((__const__)) -#endif - -#ifndef lzma_attr_warn_unused_result -# define lzma_attr_warn_unused_result \ - lzma_attribute((__warn_unused_result__)) -#endif - - -/************** - * Subheaders * - **************/ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Subheaders check that this is defined. It is to prevent including - * them directly from applications. - */ -#define LZMA_H_INTERNAL 1 - -/* Basic features */ -#include "lzma/version.h" -#include "lzma/base.h" -#include "lzma/vli.h" -#include "lzma/check.h" - -/* Filters */ -#include "lzma/filter.h" -#include "lzma/bcj.h" -#include "lzma/delta.h" -#include "lzma/lzma.h" - -/* Container formats */ -#include "lzma/container.h" - -/* Advanced features */ -#include "lzma/stream_flags.h" -#include "lzma/block.h" -#include "lzma/index.h" -#include "lzma/index_hash.h" - -/* Hardware information */ -#include "lzma/hardware.h" - -/* - * All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications - * re-including the subheaders. - */ -#undef LZMA_H_INTERNAL - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef LZMA_H */ diff --git a/deps/lzma/liblzma/api/lzma/base.h b/deps/lzma/liblzma/api/lzma/base.h deleted file mode 100644 index 43dde8d60f3d75..00000000000000 --- a/deps/lzma/liblzma/api/lzma/base.h +++ /dev/null @@ -1,601 +0,0 @@ -/** - * \file lzma/base.h - * \brief Data types and functions used in many places in liblzma API - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Boolean - * - * This is here because C89 doesn't have stdbool.h. To set a value for - * variables having type lzma_bool, you can use - * - C99's `true' and `false' from stdbool.h; - * - C++'s internal `true' and `false'; or - * - integers one (true) and zero (false). - */ -typedef unsigned char lzma_bool; - - -/** - * \brief Type of reserved enumeration variable in structures - * - * To avoid breaking library ABI when new features are added, several - * structures contain extra variables that may be used in future. Since - * sizeof(enum) can be different than sizeof(int), and sizeof(enum) may - * even vary depending on the range of enumeration constants, we specify - * a separate type to be used for reserved enumeration variables. All - * enumeration constants in liblzma API will be non-negative and less - * than 128, which should guarantee that the ABI won't break even when - * new constants are added to existing enumerations. - */ -typedef enum { - LZMA_RESERVED_ENUM = 0 -} lzma_reserved_enum; - - -/** - * \brief Return values used by several functions in liblzma - * - * Check the descriptions of specific functions to find out which return - * values they can return. With some functions the return values may have - * more specific meanings than described here; those differences are - * described per-function basis. - */ -typedef enum { - LZMA_OK = 0, - /**< - * \brief Operation completed successfully - */ - - LZMA_STREAM_END = 1, - /**< - * \brief End of stream was reached - * - * In encoder, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or - * LZMA_FINISH was finished. In decoder, this indicates - * that all the data was successfully decoded. - * - * In all cases, when LZMA_STREAM_END is returned, the last - * output bytes should be picked from strm->next_out. - */ - - LZMA_NO_CHECK = 2, - /**< - * \brief Input stream has no integrity check - * - * This return value can be returned only if the - * LZMA_TELL_NO_CHECK flag was used when initializing - * the decoder. LZMA_NO_CHECK is just a warning, and - * the decoding can be continued normally. - * - * It is possible to call lzma_get_check() immediately after - * lzma_code has returned LZMA_NO_CHECK. The result will - * naturally be LZMA_CHECK_NONE, but the possibility to call - * lzma_get_check() may be convenient in some applications. - */ - - LZMA_UNSUPPORTED_CHECK = 3, - /**< - * \brief Cannot calculate the integrity check - * - * The usage of this return value is different in encoders - * and decoders. - * - * Encoders can return this value only from the initialization - * function. If initialization fails with this value, the - * encoding cannot be done, because there's no way to produce - * output with the correct integrity check. - * - * Decoders can return this value only from lzma_code() and - * only if the LZMA_TELL_UNSUPPORTED_CHECK flag was used when - * initializing the decoder. The decoding can still be - * continued normally even if the check type is unsupported, - * but naturally the check will not be validated, and possible - * errors may go undetected. - * - * With decoder, it is possible to call lzma_get_check() - * immediately after lzma_code() has returned - * LZMA_UNSUPPORTED_CHECK. This way it is possible to find - * out what the unsupported Check ID was. - */ - - LZMA_GET_CHECK = 4, - /**< - * \brief Integrity check type is now available - * - * This value can be returned only by the lzma_code() function - * and only if the decoder was initialized with the - * LZMA_TELL_ANY_CHECK flag. LZMA_GET_CHECK tells the - * application that it may now call lzma_get_check() to find - * out the Check ID. This can be used, for example, to - * implement a decoder that accepts only files that have - * strong enough integrity check. - */ - - LZMA_MEM_ERROR = 5, - /**< - * \brief Cannot allocate memory - * - * Memory allocation failed, or the size of the allocation - * would be greater than SIZE_MAX. - * - * Due to internal implementation reasons, the coding cannot - * be continued even if more memory were made available after - * LZMA_MEM_ERROR. - */ - - LZMA_MEMLIMIT_ERROR = 6, - /** - * \brief Memory usage limit was reached - * - * Decoder would need more memory than allowed by the - * specified memory usage limit. To continue decoding, - * the memory usage limit has to be increased with - * lzma_memlimit_set(). - */ - - LZMA_FORMAT_ERROR = 7, - /**< - * \brief File format not recognized - * - * The decoder did not recognize the input as supported file - * format. This error can occur, for example, when trying to - * decode .lzma format file with lzma_stream_decoder, - * because lzma_stream_decoder accepts only the .xz format. - */ - - LZMA_OPTIONS_ERROR = 8, - /**< - * \brief Invalid or unsupported options - * - * Invalid or unsupported options, for example - * - unsupported filter(s) or filter options; or - * - reserved bits set in headers (decoder only). - * - * Rebuilding liblzma with more features enabled, or - * upgrading to a newer version of liblzma may help. - */ - - LZMA_DATA_ERROR = 9, - /**< - * \brief Data is corrupt - * - * The usage of this return value is different in encoders - * and decoders. In both encoder and decoder, the coding - * cannot continue after this error. - * - * Encoders return this if size limits of the target file - * format would be exceeded. These limits are huge, thus - * getting this error from an encoder is mostly theoretical. - * For example, the maximum compressed and uncompressed - * size of a .xz Stream is roughly 8 EiB (2^63 bytes). - * - * Decoders return this error if the input data is corrupt. - * This can mean, for example, invalid CRC32 in headers - * or invalid check of uncompressed data. - */ - - LZMA_BUF_ERROR = 10, - /**< - * \brief No progress is possible - * - * This error code is returned when the coder cannot consume - * any new input and produce any new output. The most common - * reason for this error is that the input stream being - * decoded is truncated or corrupt. - * - * This error is not fatal. Coding can be continued normally - * by providing more input and/or more output space, if - * possible. - * - * Typically the first call to lzma_code() that can do no - * progress returns LZMA_OK instead of LZMA_BUF_ERROR. Only - * the second consecutive call doing no progress will return - * LZMA_BUF_ERROR. This is intentional. - * - * With zlib, Z_BUF_ERROR may be returned even if the - * application is doing nothing wrong, so apps will need - * to handle Z_BUF_ERROR specially. The above hack - * guarantees that liblzma never returns LZMA_BUF_ERROR - * to properly written applications unless the input file - * is truncated or corrupt. This should simplify the - * applications a little. - */ - - LZMA_PROG_ERROR = 11, - /**< - * \brief Programming error - * - * This indicates that the arguments given to the function are - * invalid or the internal state of the decoder is corrupt. - * - Function arguments are invalid or the structures - * pointed by the argument pointers are invalid - * e.g. if strm->next_out has been set to NULL and - * strm->avail_out > 0 when calling lzma_code(). - * - lzma_* functions have been called in wrong order - * e.g. lzma_code() was called right after lzma_end(). - * - If errors occur randomly, the reason might be flaky - * hardware. - * - * If you think that your code is correct, this error code - * can be a sign of a bug in liblzma. See the documentation - * how to report bugs. - */ -} lzma_ret; - - -/** - * \brief The `action' argument for lzma_code() - * - * After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, or LZMA_FINISH, - * the same `action' must is used until lzma_code() returns LZMA_STREAM_END. - * Also, the amount of input (that is, strm->avail_in) must not be modified - * by the application until lzma_code() returns LZMA_STREAM_END. Changing the - * `action' or modifying the amount of input will make lzma_code() return - * LZMA_PROG_ERROR. - */ -typedef enum { - LZMA_RUN = 0, - /**< - * \brief Continue coding - * - * Encoder: Encode as much input as possible. Some internal - * buffering will probably be done (depends on the filter - * chain in use), which causes latency: the input used won't - * usually be decodeable from the output of the same - * lzma_code() call. - * - * Decoder: Decode as much input as possible and produce as - * much output as possible. - */ - - LZMA_SYNC_FLUSH = 1, - /**< - * \brief Make all the input available at output - * - * Normally the encoder introduces some latency. - * LZMA_SYNC_FLUSH forces all the buffered data to be - * available at output without resetting the internal - * state of the encoder. This way it is possible to use - * compressed stream for example for communication over - * network. - * - * Only some filters support LZMA_SYNC_FLUSH. Trying to use - * LZMA_SYNC_FLUSH with filters that don't support it will - * make lzma_code() return LZMA_OPTIONS_ERROR. For example, - * LZMA1 doesn't support LZMA_SYNC_FLUSH but LZMA2 does. - * - * Using LZMA_SYNC_FLUSH very often can dramatically reduce - * the compression ratio. With some filters (for example, - * LZMA2), fine-tuning the compression options may help - * mitigate this problem significantly (for example, - * match finder with LZMA2). - * - * Decoders don't support LZMA_SYNC_FLUSH. - */ - - LZMA_FULL_FLUSH = 2, - /**< - * \brief Finish encoding of the current Block - * - * All the input data going to the current Block must have - * been given to the encoder (the last bytes can still be - * pending in* next_in). Call lzma_code() with LZMA_FULL_FLUSH - * until it returns LZMA_STREAM_END. Then continue normally - * with LZMA_RUN or finish the Stream with LZMA_FINISH. - * - * This action is currently supported only by Stream encoder - * and easy encoder (which uses Stream encoder). If there is - * no unfinished Block, no empty Block is created. - */ - - LZMA_FINISH = 3 - /**< - * \brief Finish the coding operation - * - * All the input data must have been given to the encoder - * (the last bytes can still be pending in next_in). - * Call lzma_code() with LZMA_FINISH until it returns - * LZMA_STREAM_END. Once LZMA_FINISH has been used, - * the amount of input must no longer be changed by - * the application. - * - * When decoding, using LZMA_FINISH is optional unless the - * LZMA_CONCATENATED flag was used when the decoder was - * initialized. When LZMA_CONCATENATED was not used, the only - * effect of LZMA_FINISH is that the amount of input must not - * be changed just like in the encoder. - */ -} lzma_action; - - -/** - * \brief Custom functions for memory handling - * - * A pointer to lzma_allocator may be passed via lzma_stream structure - * to liblzma, and some advanced functions take a pointer to lzma_allocator - * as a separate function argument. The library will use the functions - * specified in lzma_allocator for memory handling instead of the default - * malloc() and free(). C++ users should note that the custom memory - * handling functions must not throw exceptions. - * - * liblzma doesn't make an internal copy of lzma_allocator. Thus, it is - * OK to change these function pointers in the middle of the coding - * process, but obviously it must be done carefully to make sure that the - * replacement `free' can deallocate memory allocated by the earlier - * `alloc' function(s). - */ -typedef struct { - /** - * \brief Pointer to a custom memory allocation function - * - * If you don't want a custom allocator, but still want - * custom free(), set this to NULL and liblzma will use - * the standard malloc(). - * - * \param opaque lzma_allocator.opaque (see below) - * \param nmemb Number of elements like in calloc(). liblzma - * will always set nmemb to 1, so it is safe to - * ignore nmemb in a custom allocator if you like. - * The nmemb argument exists only for - * compatibility with zlib and libbzip2. - * \param size Size of an element in bytes. - * liblzma never sets this to zero. - * - * \return Pointer to the beginning of a memory block of - * `size' bytes, or NULL if allocation fails - * for some reason. When allocation fails, functions - * of liblzma return LZMA_MEM_ERROR. - * - * The allocator should not waste time zeroing the allocated buffers. - * This is not only about speed, but also memory usage, since the - * operating system kernel doesn't necessarily allocate the requested - * memory in physical memory until it is actually used. With small - * input files, liblzma may actually need only a fraction of the - * memory that it requested for allocation. - * - * \note LZMA_MEM_ERROR is also used when the size of the - * allocation would be greater than SIZE_MAX. Thus, - * don't assume that the custom allocator must have - * returned NULL if some function from liblzma - * returns LZMA_MEM_ERROR. - */ - void *(LZMA_API_CALL *alloc)(void *opaque, size_t nmemb, size_t size); - - /** - * \brief Pointer to a custom memory freeing function - * - * If you don't want a custom freeing function, but still - * want a custom allocator, set this to NULL and liblzma - * will use the standard free(). - * - * \param opaque lzma_allocator.opaque (see below) - * \param ptr Pointer returned by lzma_allocator.alloc(), - * or when it is set to NULL, a pointer returned - * by the standard malloc(). - */ - void (LZMA_API_CALL *free)(void *opaque, void *ptr); - - /** - * \brief Pointer passed to .alloc() and .free() - * - * opaque is passed as the first argument to lzma_allocator.alloc() - * and lzma_allocator.free(). This intended to ease implementing - * custom memory allocation functions for use with liblzma. - * - * If you don't need this, you should set this to NULL. - */ - void *opaque; - -} lzma_allocator; - - -/** - * \brief Internal data structure - * - * The contents of this structure is not visible outside the library. - */ -typedef struct lzma_internal_s lzma_internal; - - -/** - * \brief Passing data to and from liblzma - * - * The lzma_stream structure is used for - * - passing pointers to input and output buffers to liblzma; - * - defining custom memory hander functions; and - * - holding a pointer to coder-specific internal data structures. - * - * Typical usage: - * - * - After allocating lzma_stream (on stack or with malloc()), it must be - * initialized to LZMA_STREAM_INIT (see LZMA_STREAM_INIT for details). - * - * - Initialize a coder to the lzma_stream, for example by using - * lzma_easy_encoder() or lzma_auto_decoder(). Some notes: - * - In contrast to zlib, strm->next_in and strm->next_out are - * ignored by all initialization functions, thus it is safe - * to not initialize them yet. - * - The initialization functions always set strm->total_in and - * strm->total_out to zero. - * - If the initialization function fails, no memory is left allocated - * that would require freeing with lzma_end() even if some memory was - * associated with the lzma_stream structure when the initialization - * function was called. - * - * - Use lzma_code() to do the actual work. - * - * - Once the coding has been finished, the existing lzma_stream can be - * reused. It is OK to reuse lzma_stream with different initialization - * function without calling lzma_end() first. Old allocations are - * automatically freed. - * - * - Finally, use lzma_end() to free the allocated memory. lzma_end() never - * frees the lzma_stream structure itself. - * - * Application may modify the values of total_in and total_out as it wants. - * They are updated by liblzma to match the amount of data read and - * written, but aren't used for anything else. - */ -typedef struct { - const uint8_t *next_in; /**< Pointer to the next input byte. */ - size_t avail_in; /**< Number of available input bytes in next_in. */ - uint64_t total_in; /**< Total number of bytes read by liblzma. */ - - uint8_t *next_out; /**< Pointer to the next output position. */ - size_t avail_out; /**< Amount of free space in next_out. */ - uint64_t total_out; /**< Total number of bytes written by liblzma. */ - - /** - * \brief Custom memory allocation functions - * - * In most cases this is NULL which makes liblzma use - * the standard malloc() and free(). - */ - lzma_allocator *allocator; - - /** Internal state is not visible to applications. */ - lzma_internal *internal; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. Excluding the initialization of this structure, - * you should not touch these, because the names of these variables - * may change. - */ - void *reserved_ptr1; - void *reserved_ptr2; - void *reserved_ptr3; - void *reserved_ptr4; - uint64_t reserved_int1; - uint64_t reserved_int2; - size_t reserved_int3; - size_t reserved_int4; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - -} lzma_stream; - - -/** - * \brief Initialization for lzma_stream - * - * When you declare an instance of lzma_stream, you can immediately - * initialize it so that initialization functions know that no memory - * has been allocated yet: - * - * lzma_stream strm = LZMA_STREAM_INIT; - * - * If you need to initialize a dynamically allocated lzma_stream, you can use - * memset(strm_pointer, 0, sizeof(lzma_stream)). Strictly speaking, this - * violates the C standard since NULL may have different internal - * representation than zero, but it should be portable enough in practice. - * Anyway, for maximum portability, you can use something like this: - * - * lzma_stream tmp = LZMA_STREAM_INIT; - * *strm = tmp; - */ -#define LZMA_STREAM_INIT \ - { NULL, 0, 0, NULL, 0, 0, NULL, NULL, \ - NULL, NULL, NULL, NULL, 0, 0, 0, 0, \ - LZMA_RESERVED_ENUM, LZMA_RESERVED_ENUM } - - -/** - * \brief Encode or decode data - * - * Once the lzma_stream has been successfully initialized (e.g. with - * lzma_stream_encoder()), the actual encoding or decoding is done - * using this function. The application has to update strm->next_in, - * strm->avail_in, strm->next_out, and strm->avail_out to pass input - * to and get output from liblzma. - * - * See the description of the coder-specific initialization function to find - * out what `action' values are supported by the coder. - */ -extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Free memory allocated for the coder data structures - * - * \param strm Pointer to lzma_stream that is at least initialized - * with LZMA_STREAM_INIT. - * - * After lzma_end(strm), strm->internal is guaranteed to be NULL. No other - * members of the lzma_stream structure are touched. - * - * \note zlib indicates an error if application end()s unfinished - * stream structure. liblzma doesn't do this, and assumes that - * application knows what it is doing. - */ -extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow; - - -/** - * \brief Get the memory usage of decoder filter chain - * - * This function is currently supported only when *strm has been initialized - * with a function that takes a memlimit argument. With other functions, you - * should use e.g. lzma_raw_encoder_memusage() or lzma_raw_decoder_memusage() - * to estimate the memory requirements. - * - * This function is useful e.g. after LZMA_MEMLIMIT_ERROR to find out how big - * the memory usage limit should have been to decode the input. Note that - * this may give misleading information if decoding .xz Streams that have - * multiple Blocks, because each Block can have different memory requirements. - * - * \return How much memory is currently allocated for the filter - * decoders. If no filter chain is currently allocated, - * some non-zero value is still returned, which is less than - * or equal to what any filter chain would indicate as its - * memory requirement. - * - * If this function isn't supported by *strm or some other error - * occurs, zero is returned. - */ -extern LZMA_API(uint64_t) lzma_memusage(const lzma_stream *strm) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the current memory usage limit - * - * This function is supported only when *strm has been initialized with - * a function that takes a memlimit argument. - * - * \return On success, the current memory usage limit is returned - * (always non-zero). On error, zero is returned. - */ -extern LZMA_API(uint64_t) lzma_memlimit_get(const lzma_stream *strm) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Set the memory usage limit - * - * This function is supported only when *strm has been initialized with - * a function that takes a memlimit argument. - * - * \return - LZMA_OK: New memory usage limit successfully set. - * - LZMA_MEMLIMIT_ERROR: The new limit is too small. - * The limit was not changed. - * - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't - * support memory usage limit or memlimit was zero. - */ -extern LZMA_API(lzma_ret) lzma_memlimit_set( - lzma_stream *strm, uint64_t memlimit) lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/bcj.h b/deps/lzma/liblzma/api/lzma/bcj.h deleted file mode 100644 index 8e37538ad4af53..00000000000000 --- a/deps/lzma/liblzma/api/lzma/bcj.h +++ /dev/null @@ -1,90 +0,0 @@ -/** - * \file lzma/bcj.h - * \brief Branch/Call/Jump conversion filters - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/* Filter IDs for lzma_filter.id */ - -#define LZMA_FILTER_X86 LZMA_VLI_C(0x04) - /**< - * Filter for x86 binaries - */ - -#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05) - /**< - * Filter for Big endian PowerPC binaries - */ - -#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06) - /**< - * Filter for IA-64 (Itanium) binaries. - */ - -#define LZMA_FILTER_ARM LZMA_VLI_C(0x07) - /**< - * Filter for ARM binaries. - */ - -#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08) - /**< - * Filter for ARM-Thumb binaries. - */ - -#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09) - /**< - * Filter for SPARC binaries. - */ - - -/** - * \brief Options for BCJ filters - * - * The BCJ filters never change the size of the data. Specifying options - * for them is optional: if pointer to options is NULL, default value is - * used. You probably never need to specify options to BCJ filters, so just - * set the options pointer to NULL and be happy. - * - * If options with non-default values have been specified when encoding, - * the same options must also be specified when decoding. - * - * \note At the moment, none of the BCJ filters support - * LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified, - * LZMA_OPTIONS_ERROR will be returned. If there is need, - * partial support for LZMA_SYNC_FLUSH can be added in future. - * Partial means that flushing would be possible only at - * offsets that are multiple of 2, 4, or 16 depending on - * the filter, except x86 which cannot be made to support - * LZMA_SYNC_FLUSH predictably. - */ -typedef struct { - /** - * \brief Start offset for conversions - * - * This setting is useful only when the same filter is used - * _separately_ for multiple sections of the same executable file, - * and the sections contain cross-section branch/call/jump - * instructions. In that case it is beneficial to set the start - * offset of the non-first sections so that the relative addresses - * of the cross-section branch/call/jump instructions will use the - * same absolute addresses as in the first section. - * - * When the pointer to options is NULL, the default value (zero) - * is used. - */ - uint32_t start_offset; - -} lzma_options_bcj; diff --git a/deps/lzma/liblzma/api/lzma/block.h b/deps/lzma/liblzma/api/lzma/block.h deleted file mode 100644 index e6710a7bc816d1..00000000000000 --- a/deps/lzma/liblzma/api/lzma/block.h +++ /dev/null @@ -1,533 +0,0 @@ -/** - * \file lzma/block.h - * \brief .xz Block handling - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Options for the Block and Block Header encoders and decoders - * - * Different Block handling functions use different parts of this structure. - * Some read some members, other functions write, and some do both. Only the - * members listed for reading need to be initialized when the specified - * functions are called. The members marked for writing will be assigned - * new values at some point either by calling the given function or by - * later calls to lzma_code(). - */ -typedef struct { - /** - * \brief Block format version - * - * To prevent API and ABI breakages if new features are needed in - * the Block field, a version number is used to indicate which - * fields in this structure are in use. For now, version must always - * be zero. With non-zero version, most Block related functions will - * return LZMA_OPTIONS_ERROR. - * - * Read by: - * - All functions that take pointer to lzma_block as argument, - * including lzma_block_header_decode(). - * - * Written by: - * - lzma_block_header_decode() - */ - uint32_t version; - - /** - * \brief Size of the Block Header field - * - * This is always a multiple of four. - * - * Read by: - * - lzma_block_header_encode() - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_size() - * - lzma_block_buffer_encode() - */ - uint32_t header_size; -# define LZMA_BLOCK_HEADER_SIZE_MIN 8 -# define LZMA_BLOCK_HEADER_SIZE_MAX 1024 - - /** - * \brief Type of integrity Check - * - * The Check ID is not stored into the Block Header, thus its value - * must be provided also when decoding. - * - * Read by: - * - lzma_block_header_encode() - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_check check; - - /** - * \brief Size of the Compressed Data in bytes - * - * Encoding: If this is not LZMA_VLI_UNKNOWN, Block Header encoder - * will store this value to the Block Header. Block encoder doesn't - * care about this value, but will set it once the encoding has been - * finished. - * - * Decoding: If this is not LZMA_VLI_UNKNOWN, Block decoder will - * verify that the size of the Compressed Data field matches - * compressed_size. - * - * Usually you don't know this value when encoding in streamed mode, - * and thus cannot write this field into the Block Header. - * - * In non-streamed mode you can reserve space for this field before - * encoding the actual Block. After encoding the data, finish the - * Block by encoding the Block Header. Steps in detail: - * - * - Set compressed_size to some big enough value. If you don't know - * better, use LZMA_VLI_MAX, but remember that bigger values take - * more space in Block Header. - * - * - Call lzma_block_header_size() to see how much space you need to - * reserve for the Block Header. - * - * - Encode the Block using lzma_block_encoder() and lzma_code(). - * It sets compressed_size to the correct value. - * - * - Use lzma_block_header_encode() to encode the Block Header. - * Because space was reserved in the first step, you don't need - * to call lzma_block_header_size() anymore, because due to - * reserving, header_size has to be big enough. If it is "too big", - * lzma_block_header_encode() will add enough Header Padding to - * make Block Header to match the size specified by header_size. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_compressed_size() - * - lzma_block_unpadded_size() - * - lzma_block_total_size() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode() - * - lzma_block_compressed_size() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_vli compressed_size; - - /** - * \brief Uncompressed Size in bytes - * - * This is handled very similarly to compressed_size above. - * - * uncompressed_size is needed by fewer functions than - * compressed_size. This is because uncompressed_size isn't - * needed to validate that Block stays within proper limits. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_decoder() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - lzma_vli uncompressed_size; - - /** - * \brief Array of filters - * - * There can be 1-4 filters. The end of the array is marked with - * .id = LZMA_VLI_UNKNOWN. - * - * Read by: - * - lzma_block_header_size() - * - lzma_block_header_encode() - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - * - * Written by: - * - lzma_block_header_decode(): Note that this does NOT free() - * the old filter options structures. All unused filters[] will - * have .id == LZMA_VLI_UNKNOWN and .options == NULL. If - * decoding fails, all filters[] are guaranteed to be - * LZMA_VLI_UNKNOWN and NULL. - * - * \note Because of the array is terminated with - * .id = LZMA_VLI_UNKNOWN, the actual array must - * have LZMA_FILTERS_MAX + 1 members or the Block - * Header decoder will overflow the buffer. - */ - lzma_filter *filters; - - /** - * \brief Raw value stored in the Check field - * - * After successful coding, the first lzma_check_size(check) bytes - * of this array contain the raw value stored in the Check field. - * - * Note that CRC32 and CRC64 are stored in little endian byte order. - * Take it into account if you display the Check values to the user. - * - * Written by: - * - lzma_block_encoder() - * - lzma_block_decoder() - * - lzma_block_buffer_encode() - * - lzma_block_buffer_decode() - */ - uint8_t raw_check[LZMA_CHECK_SIZE_MAX]; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * with the currently supported options, so it is safe to leave these - * uninitialized. - */ - void *reserved_ptr1; - void *reserved_ptr2; - void *reserved_ptr3; - uint32_t reserved_int1; - uint32_t reserved_int2; - lzma_vli reserved_int3; - lzma_vli reserved_int4; - lzma_vli reserved_int5; - lzma_vli reserved_int6; - lzma_vli reserved_int7; - lzma_vli reserved_int8; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - lzma_bool reserved_bool1; - lzma_bool reserved_bool2; - lzma_bool reserved_bool3; - lzma_bool reserved_bool4; - lzma_bool reserved_bool5; - lzma_bool reserved_bool6; - lzma_bool reserved_bool7; - lzma_bool reserved_bool8; - -} lzma_block; - - -/** - * \brief Decode the Block Header Size field - * - * To decode Block Header using lzma_block_header_decode(), the size of the - * Block Header has to be known and stored into lzma_block.header_size. - * The size can be calculated from the first byte of a Block using this macro. - * Note that if the first byte is 0x00, it indicates beginning of Index; use - * this macro only when the byte is not 0x00. - * - * There is no encoding macro, because Block Header encoder is enough for that. - */ -#define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4) - - -/** - * \brief Calculate Block Header Size - * - * Calculate the minimum size needed for the Block Header field using the - * settings specified in the lzma_block structure. Note that it is OK to - * increase the calculated header_size value as long as it is a multiple of - * four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size - * just means that lzma_block_header_encode() will add Header Padding. - * - * \return - LZMA_OK: Size calculated successfully and stored to - * block->header_size. - * - LZMA_OPTIONS_ERROR: Unsupported version, filters or - * filter options. - * - LZMA_PROG_ERROR: Invalid values like compressed_size == 0. - * - * \note This doesn't check that all the options are valid i.e. this - * may return LZMA_OK even if lzma_block_header_encode() or - * lzma_block_encoder() would fail. If you want to validate the - * filter chain, consider using lzma_memlimit_encoder() which as - * a side-effect validates the filter chain. - */ -extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Block Header - * - * The caller must have calculated the size of the Block Header already with - * lzma_block_header_size(). If a value larger than the one calculated by - * lzma_block_header_size() is used, the Block Header will be padded to the - * specified size. - * - * \param out Beginning of the output buffer. This must be - * at least block->header_size bytes. - * \param block Block options to be encoded. - * - * \return - LZMA_OK: Encoding was successful. block->header_size - * bytes were written to output buffer. - * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. - * - LZMA_PROG_ERROR: Invalid arguments, for example - * block->header_size is invalid or block->filters is NULL. - */ -extern LZMA_API(lzma_ret) lzma_block_header_encode( - const lzma_block *block, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Block Header - * - * block->version should be set to the highest value supported by the - * application; currently the only possible version is zero. This function - * will set version to the lowest value that still supports all the features - * required by the Block Header. - * - * The size of the Block Header must have already been decoded with - * lzma_block_header_size_decode() macro and stored to block->header_size. - * - * The integrity check type from Stream Header must have been stored - * to block->check. - * - * block->filters must have been allocated, but they don't need to be - * initialized (possible existing filter options are not freed). - * - * \param block Destination for Block options. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() (and also free() - * if an error occurs). - * \param in Beginning of the input buffer. This must be - * at least block->header_size bytes. - * - * \return - LZMA_OK: Decoding was successful. block->header_size - * bytes were read from the input buffer. - * - LZMA_OPTIONS_ERROR: The Block Header specifies some - * unsupported options such as unsupported filters. This can - * happen also if block->version was set to a too low value - * compared to what would be required to properly represent - * the information stored in the Block Header. - * - LZMA_DATA_ERROR: Block Header is corrupt, for example, - * the CRC32 doesn't match. - * - LZMA_PROG_ERROR: Invalid arguments, for example - * block->header_size is invalid or block->filters is NULL. - */ -extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block, - lzma_allocator *allocator, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Validate and set Compressed Size according to Unpadded Size - * - * Block Header stores Compressed Size, but Index has Unpadded Size. If the - * application has already parsed the Index and is now decoding Blocks, - * it can calculate Compressed Size from Unpadded Size. This function does - * exactly that with error checking: - * - * - Compressed Size calculated from Unpadded Size must be positive integer, - * that is, Unpadded Size must be big enough that after Block Header and - * Check fields there's still at least one byte for Compressed Size. - * - * - If Compressed Size was present in Block Header, the new value - * calculated from Unpadded Size is compared against the value - * from Block Header. - * - * \note This function must be called _after_ decoding the Block Header - * field so that it can properly validate Compressed Size if it - * was present in Block Header. - * - * \return - LZMA_OK: block->compressed_size was set successfully. - * - LZMA_DATA_ERROR: unpadded_size is too small compared to - * block->header_size and lzma_check_size(block->check). - * - LZMA_PROG_ERROR: Some values are invalid. For example, - * block->header_size must be a multiple of four and - * between 8 and 1024 inclusive. - */ -extern LZMA_API(lzma_ret) lzma_block_compressed_size( - lzma_block *block, lzma_vli unpadded_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate Unpadded Size - * - * The Index field stores Unpadded Size and Uncompressed Size. The latter - * can be taken directly from the lzma_block structure after coding a Block, - * but Unpadded Size needs to be calculated from Block Header Size, - * Compressed Size, and size of the Check field. This is where this function - * is needed. - * - * \return Unpadded Size on success, or zero on error. - */ -extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate the total encoded size of a Block - * - * This is equivalent to lzma_block_unpadded_size() except that the returned - * value includes the size of the Block Padding field. - * - * \return On success, total encoded size of the Block. On error, - * zero is returned. - */ -extern LZMA_API(lzma_vli) lzma_block_total_size(const lzma_block *block) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize .xz Block encoder - * - * Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the - * filter chain supports it), and LZMA_FINISH. - * - * \return - LZMA_OK: All good, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_UNSUPPORTED_CHECK: block->check specifies a Check ID - * that is not supported by this buid of liblzma. Initializing - * the encoder failed. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_encoder( - lzma_stream *strm, lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .xz Block decoder - * - * Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using - * LZMA_FINISH is not required. It is supported only for convenience. - * - * \return - LZMA_OK: All good, continue with lzma_code(). - * - LZMA_UNSUPPORTED_CHECK: Initialization was successful, but - * the given Check ID is not supported, thus Check will be - * ignored. - * - LZMA_PROG_ERROR - * - LZMA_MEM_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_decoder( - lzma_stream *strm, lzma_block *block) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate maximum output size for single-call Block encoding - * - * This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks. - * See the documentation of lzma_stream_buffer_bound(). - */ -extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size) - lzma_nothrow; - - -/** - * \brief Single-call .xz Block encoder - * - * In contrast to the multi-call encoder initialized with - * lzma_block_encoder(), this function encodes also the Block Header. This - * is required to make it possible to write appropriate Block Header also - * in case the data isn't compressible, and different filter chain has to be - * used to encode the data in uncompressed form using uncompressed chunks - * of the LZMA2 filter. - * - * When the data isn't compressible, header_size, compressed_size, and - * uncompressed_size are set just like when the data was compressible, but - * it is possible that header_size is too small to hold the filter chain - * specified in block->filters, because that isn't necessarily the filter - * chain that was actually used to encode the data. lzma_block_unpadded_size() - * still works normally, because it doesn't read the filters array. - * - * \param block Block options: block->version, block->check, - * and block->filters must have been initialized. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_UNSUPPORTED_CHECK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_buffer_encode( - lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Block decoder - * - * This is single-call equivalent of lzma_block_decoder(), and requires that - * the caller has already decoded Block Header and checked its memory usage. - * - * \param block Block options just like with lzma_block_decoder(). - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_OPTIONS_ERROR - * - LZMA_DATA_ERROR - * - LZMA_MEM_ERROR - * - LZMA_BUF_ERROR: Output buffer was too small. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_block_buffer_decode( - lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/check.h b/deps/lzma/liblzma/api/lzma/check.h deleted file mode 100644 index 6a243db0d7943a..00000000000000 --- a/deps/lzma/liblzma/api/lzma/check.h +++ /dev/null @@ -1,150 +0,0 @@ -/** - * \file lzma/check.h - * \brief Integrity checks - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Type of the integrity check (Check ID) - * - * The .xz format supports multiple types of checks that are calculated - * from the uncompressed data. They vary in both speed and ability to - * detect errors. - */ -typedef enum { - LZMA_CHECK_NONE = 0, - /**< - * No Check is calculated. - * - * Size of the Check field: 0 bytes - */ - - LZMA_CHECK_CRC32 = 1, - /**< - * CRC32 using the polynomial from the IEEE 802.3 standard - * - * Size of the Check field: 4 bytes - */ - - LZMA_CHECK_CRC64 = 4, - /**< - * CRC64 using the polynomial from the ECMA-182 standard - * - * Size of the Check field: 8 bytes - */ - - LZMA_CHECK_SHA256 = 10 - /**< - * SHA-256 - * - * Size of the Check field: 32 bytes - */ -} lzma_check; - - -/** - * \brief Maximum valid Check ID - * - * The .xz file format specification specifies 16 Check IDs (0-15). Some - * of them are only reserved, that is, no actual Check algorithm has been - * assigned. When decoding, liblzma still accepts unknown Check IDs for - * future compatibility. If a valid but unsupported Check ID is detected, - * liblzma can indicate a warning; see the flags LZMA_TELL_NO_CHECK, - * LZMA_TELL_UNSUPPORTED_CHECK, and LZMA_TELL_ANY_CHECK in container.h. - */ -#define LZMA_CHECK_ID_MAX 15 - - -/** - * \brief Test if the given Check ID is supported - * - * Return true if the given Check ID is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * is not in the range [0, 15]; in that case the return value is always false. - * - * You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always - * supported (even if liblzma is built with limited features). - */ -extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Get the size of the Check field with the given Check ID - * - * Although not all Check IDs have a check algorithm associated, the size of - * every Check is already frozen. This function returns the size (in bytes) of - * the Check field with the specified Check ID. The values are: - * { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 } - * - * If the argument is not in the range [0, 15], UINT32_MAX is returned. - */ -extern LZMA_API(uint32_t) lzma_check_size(lzma_check check) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Maximum size of a Check field - */ -#define LZMA_CHECK_SIZE_MAX 64 - - -/** - * \brief Calculate CRC32 - * - * Calculate CRC32 using the polynomial from the IEEE 802.3 standard. - * - * \param buf Pointer to the input buffer - * \param size Size of the input buffer - * \param crc Previously returned CRC value. This is used to - * calculate the CRC of a big buffer in smaller chunks. - * Set to zero when starting a new calculation. - * - * \return Updated CRC value, which can be passed to this function - * again to continue CRC calculation. - */ -extern LZMA_API(uint32_t) lzma_crc32( - const uint8_t *buf, size_t size, uint32_t crc) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate CRC64 - * - * Calculate CRC64 using the polynomial from the ECMA-182 standard. - * - * This function is used similarly to lzma_crc32(). See its documentation. - */ -extern LZMA_API(uint64_t) lzma_crc64( - const uint8_t *buf, size_t size, uint64_t crc) - lzma_nothrow lzma_attr_pure; - - -/* - * SHA-256 functions are currently not exported to public API. - * Contact Lasse Collin if you think it should be. - */ - - -/** - * \brief Get the type of the integrity check - * - * This function can be called only immediately after lzma_code() has - * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK. - * Calling this function in any other situation has undefined behavior. - */ -extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm) - lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/container.h b/deps/lzma/liblzma/api/lzma/container.h deleted file mode 100644 index 7a9ffc64578874..00000000000000 --- a/deps/lzma/liblzma/api/lzma/container.h +++ /dev/null @@ -1,424 +0,0 @@ -/** - * \file lzma/container.h - * \brief File formats - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/************ - * Encoding * - ************/ - -/** - * \brief Default compression preset - * - * It's not straightforward to recommend a default preset, because in some - * cases keeping the resource usage relatively low is more important that - * getting the maximum compression ratio. - */ -#define LZMA_PRESET_DEFAULT UINT32_C(6) - - -/** - * \brief Mask for preset level - * - * This is useful only if you need to extract the level from the preset - * variable. That should be rare. - */ -#define LZMA_PRESET_LEVEL_MASK UINT32_C(0x1F) - - -/* - * Preset flags - * - * Currently only one flag is defined. - */ - -/** - * \brief Extreme compression preset - * - * This flag modifies the preset to make the encoding significantly slower - * while improving the compression ratio only marginally. This is useful - * when you don't mind wasting time to get as small result as possible. - * - * This flag doesn't affect the memory usage requirements of the decoder (at - * least not significantly). The memory usage of the encoder may be increased - * a little but only at the lowest preset levels (0-3). - */ -#define LZMA_PRESET_EXTREME (UINT32_C(1) << 31) - - -/** - * \brief Calculate approximate memory usage of easy encoder - * - * This function is a wrapper for lzma_raw_encoder_memusage(). - * - * \param preset Compression preset (level and possible flags) - * - * \return Number of bytes of memory required for the given - * preset when encoding. If an error occurs, for example - * due to unsupported preset, UINT64_MAX is returned. - */ -extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate approximate decoder memory usage of a preset - * - * This function is a wrapper for lzma_raw_decoder_memusage(). - * - * \param preset Compression preset (level and possible flags) - * - * \return Number of bytes of memory required to decompress a file - * that was compressed using the given preset. If an error - * occurs, for example due to unsupported preset, UINT64_MAX - * is returned. - */ -extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize .xz Stream encoder using a preset number - * - * This function is intended for those who just want to use the basic features - * if liblzma (that is, most developers out there). - * - * \param strm Pointer to lzma_stream that is at least initialized - * with LZMA_STREAM_INIT. - * \param preset Compression preset to use. A preset consist of level - * number and zero or more flags. Usually flags aren't - * used, so preset is simply a number [0, 9] which match - * the options -0 ... -9 of the xz command line tool. - * Additional flags can be be set using bitwise-or with - * the preset level number, e.g. 6 | LZMA_PRESET_EXTREME. - * \param check Integrity check type to use. See check.h for available - * checks. The xz command line tool defaults to - * LZMA_CHECK_CRC64, which is a good choice if you are - * unsure. LZMA_CHECK_CRC32 is good too as long as the - * uncompressed file is not many gigabytes. - * - * \return - LZMA_OK: Initialization succeeded. Use lzma_code() to - * encode your data. - * - LZMA_MEM_ERROR: Memory allocation failed. - * - LZMA_OPTIONS_ERROR: The given compression preset is not - * supported by this build of liblzma. - * - LZMA_UNSUPPORTED_CHECK: The given check type is not - * supported by this liblzma build. - * - LZMA_PROG_ERROR: One or more of the parameters have values - * that will never be valid. For example, strm == NULL. - * - * If initialization fails (return value is not LZMA_OK), all the memory - * allocated for *strm by liblzma is always freed. Thus, there is no need - * to call lzma_end() after failed initialization. - * - * If initialization succeeds, use lzma_code() to do the actual encoding. - * Valid values for `action' (the second argument of lzma_code()) are - * LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future, - * there may be compression levels or flags that don't support LZMA_SYNC_FLUSH. - */ -extern LZMA_API(lzma_ret) lzma_easy_encoder( - lzma_stream *strm, uint32_t preset, lzma_check check) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Stream encoding using a preset number - * - * The maximum required output buffer size can be calculated with - * lzma_stream_buffer_bound(). - * - * \param preset Compression preset to use. See the description - * in lzma_easy_encoder(). - * \param check Type of the integrity check to calculate from - * uncompressed data. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_UNSUPPORTED_CHECK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_easy_buffer_encode( - uint32_t preset, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Initialize .xz Stream encoder using a custom filter chain - * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for - * more information. - * \param check Type of the integrity check to calculate from - * uncompressed data. - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR - * - LZMA_UNSUPPORTED_CHECK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_encoder(lzma_stream *strm, - const lzma_filter *filters, lzma_check check) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .lzma encoder (legacy file format) - * - * The .lzma format is sometimes called the LZMA_Alone format, which is the - * reason for the name of this function. The .lzma format supports only the - * LZMA1 filter. There is no support for integrity checks like CRC32. - * - * Use this function if and only if you need to create files readable by - * legacy LZMA tools such as LZMA Utils 4.32.x. Moving to the .xz format - * is strongly recommended. - * - * The valid action values for lzma_code() are LZMA_RUN and LZMA_FINISH. - * No kind of flushing is supported, because the file format doesn't make - * it possible. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_alone_encoder( - lzma_stream *strm, const lzma_options_lzma *options) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Calculate output buffer size for single-call Stream encoder - * - * When trying to compress uncompressible data, the encoded size will be - * slightly bigger than the input data. This function calculates how much - * output buffer space is required to be sure that lzma_stream_buffer_encode() - * doesn't return LZMA_BUF_ERROR. - * - * The calculated value is not exact, but it is guaranteed to be big enough. - * The actual maximum output space required may be slightly smaller (up to - * about 100 bytes). This should not be a problem in practice. - * - * If the calculated maximum size doesn't fit into size_t or would make the - * Stream grow past LZMA_VLI_MAX (which should never happen in practice), - * zero is returned to indicate the error. - * - * \note The limit calculated by this function applies only to - * single-call encoding. Multi-call encoding may (and probably - * will) have larger maximum expansion when encoding - * uncompressible data. Currently there is no function to - * calculate the maximum expansion of multi-call encoding. - */ -extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size) - lzma_nothrow; - - -/** - * \brief Single-call .xz Stream encoder - * - * \param filters Array of filters. This must be terminated with - * filters[n].id = LZMA_VLI_UNKNOWN. See filter.h - * for more information. - * \param check Type of the integrity check to calculate from - * uncompressed data. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_UNSUPPORTED_CHECK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_buffer_encode( - lzma_filter *filters, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/************ - * Decoding * - ************/ - -/** - * This flag makes lzma_code() return LZMA_NO_CHECK if the input stream - * being decoded has no integrity check. Note that when used with - * lzma_auto_decoder(), all .lzma files will trigger LZMA_NO_CHECK - * if LZMA_TELL_NO_CHECK is used. - */ -#define LZMA_TELL_NO_CHECK UINT32_C(0x01) - - -/** - * This flag makes lzma_code() return LZMA_UNSUPPORTED_CHECK if the input - * stream has an integrity check, but the type of the integrity check is not - * supported by this liblzma version or build. Such files can still be - * decoded, but the integrity check cannot be verified. - */ -#define LZMA_TELL_UNSUPPORTED_CHECK UINT32_C(0x02) - - -/** - * This flag makes lzma_code() return LZMA_GET_CHECK as soon as the type - * of the integrity check is known. The type can then be got with - * lzma_get_check(). - */ -#define LZMA_TELL_ANY_CHECK UINT32_C(0x04) - - -/** - * This flag enables decoding of concatenated files with file formats that - * allow concatenating compressed files as is. From the formats currently - * supported by liblzma, only the .xz format allows concatenated files. - * Concatenated files are not allowed with the legacy .lzma format. - * - * This flag also affects the usage of the `action' argument for lzma_code(). - * When LZMA_CONCATENATED is used, lzma_code() won't return LZMA_STREAM_END - * unless LZMA_FINISH is used as `action'. Thus, the application has to set - * LZMA_FINISH in the same way as it does when encoding. - * - * If LZMA_CONCATENATED is not used, the decoders still accept LZMA_FINISH - * as `action' for lzma_code(), but the usage of LZMA_FINISH isn't required. - */ -#define LZMA_CONCATENATED UINT32_C(0x08) - - -/** - * \brief Initialize .xz Stream decoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param memlimit Memory usage limit as bytes. Use UINT64_MAX - * to effectively disable the limiter. - * \param flags Bitwise-or of zero or more of the decoder flags: - * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_TELL_ANY_CHECK, LZMA_CONCATENATED - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR: Cannot allocate memory. - * - LZMA_OPTIONS_ERROR: Unsupported flags - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_decoder( - lzma_stream *strm, uint64_t memlimit, uint32_t flags) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode .xz Streams and .lzma files with autodetection - * - * This decoder autodetects between the .xz and .lzma file formats, and - * calls lzma_stream_decoder() or lzma_alone_decoder() once the type - * of the input file has been detected. - * - * \param strm Pointer to properly prepared lzma_stream - * \param memlimit Memory usage limit as bytes. Use UINT64_MAX - * to effectively disable the limiter. - * \param flags Bitwise-or of flags, or zero for no flags. - * - * \return - LZMA_OK: Initialization was successful. - * - LZMA_MEM_ERROR: Cannot allocate memory. - * - LZMA_OPTIONS_ERROR: Unsupported flags - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_auto_decoder( - lzma_stream *strm, uint64_t memlimit, uint32_t flags) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .lzma decoder (legacy file format) - * - * Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. - * There is no need to use LZMA_FINISH, but allowing it may simplify - * certain types of applications. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_alone_decoder( - lzma_stream *strm, uint64_t memlimit) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Stream decoder - * - * \param memlimit Pointer to how much memory the decoder is allowed - * to allocate. The value pointed by this pointer is - * modified if and only if LZMA_MEMLIMIT_ERROR is - * returned. - * \param flags Bitwise-or of zero or more of the decoder flags: - * LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, - * LZMA_CONCATENATED. Note that LZMA_TELL_ANY_CHECK - * is not allowed and will return LZMA_PROG_ERROR. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if decoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_DATA_ERROR - * - LZMA_NO_CHECK: This can be returned only if using - * the LZMA_TELL_NO_CHECK flag. - * - LZMA_UNSUPPORTED_CHECK: This can be returned only if using - * the LZMA_TELL_UNSUPPORTED_CHECK flag. - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. - * The minimum required memlimit value was stored to *memlimit. - * - LZMA_BUF_ERROR: Output buffer was too small. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_stream_buffer_decode( - uint64_t *memlimit, uint32_t flags, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; diff --git a/deps/lzma/liblzma/api/lzma/delta.h b/deps/lzma/liblzma/api/lzma/delta.h deleted file mode 100644 index 592fc4f8496ac6..00000000000000 --- a/deps/lzma/liblzma/api/lzma/delta.h +++ /dev/null @@ -1,77 +0,0 @@ -/** - * \file lzma/delta.h - * \brief Delta filter - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Filter ID - * - * Filter ID of the Delta filter. This is used as lzma_filter.id. - */ -#define LZMA_FILTER_DELTA LZMA_VLI_C(0x03) - - -/** - * \brief Type of the delta calculation - * - * Currently only byte-wise delta is supported. Other possible types could - * be, for example, delta of 16/32/64-bit little/big endian integers, but - * these are not currently planned since byte-wise delta is almost as good. - */ -typedef enum { - LZMA_DELTA_TYPE_BYTE -} lzma_delta_type; - - -/** - * \brief Options for the Delta filter - * - * These options are needed by both encoder and decoder. - */ -typedef struct { - /** For now, this must always be LZMA_DELTA_TYPE_BYTE. */ - lzma_delta_type type; - - /** - * \brief Delta distance - * - * With the only currently supported type, LZMA_DELTA_TYPE_BYTE, - * the distance is as bytes. - * - * Examples: - * - 16-bit stereo audio: distance = 4 bytes - * - 24-bit RGB image data: distance = 3 bytes - */ - uint32_t dist; -# define LZMA_DELTA_DIST_MIN 1 -# define LZMA_DELTA_DIST_MAX 256 - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these - * uninitialized. - */ - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; - uint32_t reserved_int4; - void *reserved_ptr1; - void *reserved_ptr2; - -} lzma_options_delta; diff --git a/deps/lzma/liblzma/api/lzma/filter.h b/deps/lzma/liblzma/api/lzma/filter.h deleted file mode 100644 index e0bc163ad35acb..00000000000000 --- a/deps/lzma/liblzma/api/lzma/filter.h +++ /dev/null @@ -1,424 +0,0 @@ -/** - * \file lzma/filter.h - * \brief Common filter related types and functions - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Maximum number of filters in a chain - * - * A filter chain can have 1-4 filters, of which three are allowed to change - * the size of the data. Usually only one or two filters are needed. - */ -#define LZMA_FILTERS_MAX 4 - - -/** - * \brief Filter options - * - * This structure is used to pass Filter ID and a pointer filter's - * options to liblzma. A few functions work with a single lzma_filter - * structure, while most functions expect a filter chain. - * - * A filter chain is indicated with an array of lzma_filter structures. - * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter - * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to - * be able to hold any arbitrary filter chain. This is important when - * using lzma_block_header_decode() from block.h, because too small - * array would make liblzma write past the end of the filters array. - */ -typedef struct { - /** - * \brief Filter ID - * - * Use constants whose name begin with `LZMA_FILTER_' to specify - * different filters. In an array of lzma_filter structures, use - * LZMA_VLI_UNKNOWN to indicate end of filters. - * - * \note This is not an enum, because on some systems enums - * cannot be 64-bit. - */ - lzma_vli id; - - /** - * \brief Pointer to filter-specific options structure - * - * If the filter doesn't need options, set this to NULL. If id is - * set to LZMA_VLI_UNKNOWN, options is ignored, and thus - * doesn't need be initialized. - */ - void *options; - -} lzma_filter; - - -/** - * \brief Test if the given Filter ID is supported for encoding - * - * Return true if the give Filter ID is supported for encoding by this - * liblzma build. Otherwise false is returned. - * - * There is no way to list which filters are available in this particular - * liblzma version and build. It would be useless, because the application - * couldn't know what kind of options the filter would need. - */ -extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Test if the given Filter ID is supported for decoding - * - * Return true if the give Filter ID is supported for decoding by this - * liblzma build. Otherwise false is returned. - */ -extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Copy the filters array - * - * Copy the Filter IDs and filter-specific options from src to dest. - * Up to LZMA_FILTERS_MAX filters are copied, plus the terminating - * .id == LZMA_VLI_UNKNOWN. Thus, dest should have at least - * LZMA_FILTERS_MAX + 1 elements space unless the caller knows that - * src is smaller than that. - * - * Unless the filter-specific options is NULL, the Filter ID has to be - * supported by liblzma, because liblzma needs to know the size of every - * filter-specific options structure. The filter-specific options are not - * validated. If options is NULL, any unsupported Filter IDs are copied - * without returning an error. - * - * Old filter-specific options in dest are not freed, so dest doesn't - * need to be initialized by the caller in any way. - * - * If an error occurs, memory possibly already allocated by this function - * is always freed. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options - * is not NULL. - * - LZMA_PROG_ERROR: src or dest is NULL. - */ -extern LZMA_API(lzma_ret) lzma_filters_copy(const lzma_filter *src, - lzma_filter *dest, lzma_allocator *allocator) lzma_nothrow; - - -/** - * \brief Calculate approximate memory requirements for raw encoder - * - * This function can be used to calculate the memory requirements for - * Block and Stream encoders too because Block and Stream encoders don't - * need significantly more memory than raw encoder. - * - * \param filters Array of filters terminated with - * .id == LZMA_VLI_UNKNOWN. - * - * \return Number of bytes of memory required for the given - * filter chain when encoding. If an error occurs, - * for example due to unsupported filter chain, - * UINT64_MAX is returned. - */ -extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Calculate approximate memory requirements for raw decoder - * - * This function can be used to calculate the memory requirements for - * Block and Stream decoders too because Block and Stream decoders don't - * need significantly more memory than raw decoder. - * - * \param filters Array of filters terminated with - * .id == LZMA_VLI_UNKNOWN. - * - * \return Number of bytes of memory required for the given - * filter chain when decoding. If an error occurs, - * for example due to unsupported filter chain, - * UINT64_MAX is returned. - */ -extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize raw encoder - * - * This function may be useful when implementing custom file formats. - * - * \param strm Pointer to properly prepared lzma_stream - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * - * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the - * filter chain supports it), or LZMA_FINISH. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_raw_encoder( - lzma_stream *strm, const lzma_filter *filters) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize raw decoder - * - * The initialization of raw decoder goes similarly to raw encoder. - * - * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using - * LZMA_FINISH is not required, it is supported just for convenience. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_raw_decoder( - lzma_stream *strm, const lzma_filter *filters) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Update the filter chain in the encoder - * - * This function is for advanced users only. This function has two slightly - * different purposes: - * - * - After LZMA_FULL_FLUSH when using Stream encoder: Set a new filter - * chain, which will be used starting from the next Block. - * - * - After LZMA_SYNC_FLUSH using Raw, Block, or Stream encoder: Change - * the filter-specific options in the middle of encoding. The actual - * filters in the chain (Filter IDs) cannot be changed. In the future, - * it might become possible to change the filter options without - * using LZMA_SYNC_FLUSH. - * - * While rarely useful, this function may be called also when no data has - * been compressed yet. In that case, this function will behave as if - * LZMA_FULL_FLUSH (Stream encoder) or LZMA_SYNC_FLUSH (Raw or Block - * encoder) had been used right before calling this function. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_filters_update( - lzma_stream *strm, const lzma_filter *filters) lzma_nothrow; - - -/** - * \brief Single-call raw encoder - * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_size Size of the input buffer - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Not enough output buffer space. - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - * - * \note There is no function to calculate how big output buffer - * would surely be big enough. (lzma_stream_buffer_bound() - * works only for lzma_stream_buffer_encode(); raw encoder - * won't necessarily meet that bound.) - */ -extern LZMA_API(lzma_ret) lzma_raw_buffer_encode( - const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, uint8_t *out, - size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Single-call raw decoder - * - * \param filters Array of lzma_filter structures. The end of the - * array must be marked with .id = LZMA_VLI_UNKNOWN. - * \param allocator lzma_allocator for custom allocator functions. - * Set to NULL to use malloc() and free(). - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - */ -extern LZMA_API(lzma_ret) lzma_raw_buffer_decode( - const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Get the size of the Filter Properties field - * - * This function may be useful when implementing custom file formats - * using the raw encoder and decoder. - * - * \param size Pointer to uint32_t to hold the size of the properties - * \param filter Filter ID and options (the size of the properties may - * vary depending on the options) - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - * - * \note This function validates the Filter ID, but does not - * necessarily validate the options. Thus, it is possible - * that this returns LZMA_OK while the following call to - * lzma_properties_encode() returns LZMA_OPTIONS_ERROR. - */ -extern LZMA_API(lzma_ret) lzma_properties_size( - uint32_t *size, const lzma_filter *filter) lzma_nothrow; - - -/** - * \brief Encode the Filter Properties field - * - * \param filter Filter ID and options - * \param props Buffer to hold the encoded options. The size of - * buffer must have been already determined with - * lzma_properties_size(). - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_PROG_ERROR - * - * \note Even this function won't validate more options than actually - * necessary. Thus, it is possible that encoding the properties - * succeeds but using the same options to initialize the encoder - * will fail. - * - * \note If lzma_properties_size() indicated that the size - * of the Filter Properties field is zero, calling - * lzma_properties_encode() is not required, but it - * won't do any harm either. - */ -extern LZMA_API(lzma_ret) lzma_properties_encode( - const lzma_filter *filter, uint8_t *props) lzma_nothrow; - - -/** - * \brief Decode the Filter Properties field - * - * \param filter filter->id must have been set to the correct - * Filter ID. filter->options doesn't need to be - * initialized (it's not freed by this function). The - * decoded options will be stored to filter->options. - * filter->options is set to NULL if there are no - * properties or if an error occurs. - * \param allocator Custom memory allocator used to allocate the - * options. Set to NULL to use the default malloc(), - * and in case of an error, also free(). - * \param props Input buffer containing the properties. - * \param props_size Size of the properties. This must be the exact - * size; giving too much or too little input will - * return LZMA_OPTIONS_ERROR. - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - */ -extern LZMA_API(lzma_ret) lzma_properties_decode( - lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) lzma_nothrow; - - -/** - * \brief Calculate encoded size of a Filter Flags field - * - * Knowing the size of Filter Flags is useful to know when allocating - * memory to hold the encoded Filter Flags. - * - * \param size Pointer to integer to hold the calculated size - * \param filter Filter ID and associated options whose encoded - * size is to be calculated - * - * \return - LZMA_OK: *size set successfully. Note that this doesn't - * guarantee that filter->options is valid, thus - * lzma_filter_flags_encode() may still fail. - * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options. - * - LZMA_PROG_ERROR: Invalid options - * - * \note If you need to calculate size of List of Filter Flags, - * you need to loop over every lzma_filter entry. - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_size( - uint32_t *size, const lzma_filter *filter) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Filter Flags into given buffer - * - * In contrast to some functions, this doesn't allocate the needed buffer. - * This is due to how this function is used internally by liblzma. - * - * \param filter Filter ID and options to be encoded - * \param out Beginning of the output buffer - * \param out_pos out[*out_pos] is the next write position. This - * is updated by the encoder. - * \param out_size out[out_size] is the first byte to not write. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: Invalid or unsupported options. - * - LZMA_PROG_ERROR: Invalid options or not enough output - * buffer space (you should have checked it with - * lzma_filter_flags_size()). - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filter, - uint8_t *out, size_t *out_pos, size_t out_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Filter Flags from given buffer - * - * The decoded result is stored into *filter. The old value of - * filter->options is not free()d. - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_filter_flags_decode( - lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow lzma_attr_warn_unused_result; diff --git a/deps/lzma/liblzma/api/lzma/hardware.h b/deps/lzma/liblzma/api/lzma/hardware.h deleted file mode 100644 index e7dd03c3e8ddb9..00000000000000 --- a/deps/lzma/liblzma/api/lzma/hardware.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * \file lzma/hardware.h - * \brief Hardware information - * - * Since liblzma can consume a lot of system resources, it also provides - * ways to limit the resource usage. Applications linking against liblzma - * need to do the actual decisions how much resources to let liblzma to use. - * To ease making these decisions, liblzma provides functions to find out - * the relevant capabilities of the underlaying hardware. Currently there - * is only a function to find out the amount of RAM, but in the future there - * will be also a function to detect how many concurrent threads the system - * can run. - * - * \note On some operating systems, these function may temporarily - * load a shared library or open file descriptor(s) to find out - * the requested hardware information. Unless the application - * assumes that specific file descriptors are not touched by - * other threads, this should have no effect on thread safety. - * Possible operations involving file descriptors will restart - * the syscalls if they return EINTR. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Get the total amount of physical memory (RAM) in bytes - * - * This function may be useful when determining a reasonable memory - * usage limit for decompressing or how much memory it is OK to use - * for compressing. - * - * \return On success, the total amount of physical memory in bytes - * is returned. If the amount of RAM cannot be determined, - * zero is returned. This can happen if an error occurs - * or if there is no code in liblzma to detect the amount - * of RAM on the specific operating system. - */ -extern LZMA_API(uint64_t) lzma_physmem(void) lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/index.h b/deps/lzma/liblzma/api/lzma/index.h deleted file mode 100644 index dd92cd504b389b..00000000000000 --- a/deps/lzma/liblzma/api/lzma/index.h +++ /dev/null @@ -1,683 +0,0 @@ -/** - * \file lzma/index.h - * \brief Handling of .xz Index and related information - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Opaque data type to hold the Index(es) and other information - * - * lzma_index often holds just one .xz Index and possibly the Stream Flags - * of the same Stream and size of the Stream Padding field. However, - * multiple lzma_indexes can be concatenated with lzma_index_cat() and then - * there may be information about multiple Streams in the same lzma_index. - * - * Notes about thread safety: Only one thread may modify lzma_index at - * a time. All functions that take non-const pointer to lzma_index - * modify it. As long as no thread is modifying the lzma_index, getting - * information from the same lzma_index can be done from multiple threads - * at the same time with functions that take a const pointer to - * lzma_index or use lzma_index_iter. The same iterator must be used - * only by one thread at a time, of course, but there can be as many - * iterators for the same lzma_index as needed. - */ -typedef struct lzma_index_s lzma_index; - - -/** - * \brief Iterator to get information about Blocks and Streams - */ -typedef struct { - struct { - /** - * \brief Pointer to Stream Flags - * - * This is NULL if Stream Flags have not been set for - * this Stream with lzma_index_stream_flags(). - */ - const lzma_stream_flags *flags; - - const void *reserved_ptr1; - const void *reserved_ptr2; - const void *reserved_ptr3; - - /** - * \brief Stream number in the lzma_index - * - * The first Stream is 1. - */ - lzma_vli number; - - /** - * \brief Number of Blocks in the Stream - * - * If this is zero, the block structure below has - * undefined values. - */ - lzma_vli block_count; - - /** - * \brief Compressed start offset of this Stream - * - * The offset is relative to the beginning of the lzma_index - * (i.e. usually the beginning of the .xz file). - */ - lzma_vli compressed_offset; - - /** - * \brief Uncompressed start offset of this Stream - * - * The offset is relative to the beginning of the lzma_index - * (i.e. usually the beginning of the .xz file). - */ - lzma_vli uncompressed_offset; - - /** - * \brief Compressed size of this Stream - * - * This includes all headers except the possible - * Stream Padding after this Stream. - */ - lzma_vli compressed_size; - - /** - * \brief Uncompressed size of this Stream - */ - lzma_vli uncompressed_size; - - /** - * \brief Size of Stream Padding after this Stream - * - * If it hasn't been set with lzma_index_stream_padding(), - * this defaults to zero. Stream Padding is always - * a multiple of four bytes. - */ - lzma_vli padding; - - lzma_vli reserved_vli1; - lzma_vli reserved_vli2; - lzma_vli reserved_vli3; - lzma_vli reserved_vli4; - } stream; - - struct { - /** - * \brief Block number in the file - * - * The first Block is 1. - */ - lzma_vli number_in_file; - - /** - * \brief Compressed start offset of this Block - * - * This offset is relative to the beginning of the - * lzma_index (i.e. usually the beginning of the .xz file). - * Normally this is where you should seek in the .xz file - * to start decompressing this Block. - */ - lzma_vli compressed_file_offset; - - /** - * \brief Uncompressed start offset of this Block - * - * This offset is relative to the beginning of the lzma_index - * (i.e. usually the beginning of the .xz file). - * - * When doing random-access reading, it is possible that - * the target offset is not exactly at Block boundary. One - * will need to compare the target offset against - * uncompressed_file_offset or uncompressed_stream_offset, - * and possibly decode and throw away some amount of data - * before reaching the target offset. - */ - lzma_vli uncompressed_file_offset; - - /** - * \brief Block number in this Stream - * - * The first Block is 1. - */ - lzma_vli number_in_stream; - - /** - * \brief Compressed start offset of this Block - * - * This offset is relative to the beginning of the Stream - * containing this Block. - */ - lzma_vli compressed_stream_offset; - - /** - * \brief Uncompressed start offset of this Block - * - * This offset is relative to the beginning of the Stream - * containing this Block. - */ - lzma_vli uncompressed_stream_offset; - - /** - * \brief Uncompressed size of this Block - * - * You should pass this to the Block decoder if you will - * decode this Block. It will allow the Block decoder to - * validate the uncompressed size. - */ - lzma_vli uncompressed_size; - - /** - * \brief Unpadded size of this Block - * - * You should pass this to the Block decoder if you will - * decode this Block. It will allow the Block decoder to - * validate the unpadded size. - */ - lzma_vli unpadded_size; - - /** - * \brief Total compressed size - * - * This includes all headers and padding in this Block. - * This is useful if you need to know how many bytes - * the Block decoder will actually read. - */ - lzma_vli total_size; - - lzma_vli reserved_vli1; - lzma_vli reserved_vli2; - lzma_vli reserved_vli3; - lzma_vli reserved_vli4; - - const void *reserved_ptr1; - const void *reserved_ptr2; - const void *reserved_ptr3; - const void *reserved_ptr4; - } block; - - /* - * Internal data which is used to store the state of the iterator. - * The exact format may vary between liblzma versions, so don't - * touch these in any way. - */ - union { - const void *p; - size_t s; - lzma_vli v; - } internal[6]; -} lzma_index_iter; - - -/** - * \brief Operation mode for lzma_index_iter_next() - */ -typedef enum { - LZMA_INDEX_ITER_ANY = 0, - /**< - * \brief Get the next Block or Stream - * - * Go to the next Block if the current Stream has at least - * one Block left. Otherwise go to the next Stream even if - * it has no Blocks. If the Stream has no Blocks - * (lzma_index_iter.stream.block_count == 0), - * lzma_index_iter.block will have undefined values. - */ - - LZMA_INDEX_ITER_STREAM = 1, - /**< - * \brief Get the next Stream - * - * Go to the next Stream even if the current Stream has - * unread Blocks left. If the next Stream has at least one - * Block, the iterator will point to the first Block. - * If there are no Blocks, lzma_index_iter.block will have - * undefined values. - */ - - LZMA_INDEX_ITER_BLOCK = 2, - /**< - * \brief Get the next Block - * - * Go to the next Block if the current Stream has at least - * one Block left. If the current Stream has no Blocks left, - * the next Stream with at least one Block is located and - * the iterator will be made to point to the first Block of - * that Stream. - */ - - LZMA_INDEX_ITER_NONEMPTY_BLOCK = 3 - /**< - * \brief Get the next non-empty Block - * - * This is like LZMA_INDEX_ITER_BLOCK except that it will - * skip Blocks whose Uncompressed Size is zero. - */ - -} lzma_index_iter_mode; - - -/** - * \brief Calculate memory usage of lzma_index - * - * On disk, the size of the Index field depends on both the number of Records - * stored and how big values the Records store (due to variable-length integer - * encoding). When the Index is kept in lzma_index structure, the memory usage - * depends only on the number of Records/Blocks stored in the Index(es), and - * in case of concatenated lzma_indexes, the number of Streams. The size in - * RAM is almost always significantly bigger than in the encoded form on disk. - * - * This function calculates an approximate amount of memory needed hold - * the given number of Streams and Blocks in lzma_index structure. This - * value may vary between CPU architectures and also between liblzma versions - * if the internal implementation is modified. - */ -extern LZMA_API(uint64_t) lzma_index_memusage( - lzma_vli streams, lzma_vli blocks) lzma_nothrow; - - -/** - * \brief Calculate the memory usage of an existing lzma_index - * - * This is a shorthand for lzma_index_memusage(lzma_index_stream_count(i), - * lzma_index_block_count(i)). - */ -extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i) - lzma_nothrow; - - -/** - * \brief Allocate and initialize a new lzma_index structure - * - * \return On success, a pointer to an empty initialized lzma_index is - * returned. If allocation fails, NULL is returned. - */ -extern LZMA_API(lzma_index *) lzma_index_init(lzma_allocator *allocator) - lzma_nothrow; - - -/** - * \brief Deallocate lzma_index - * - * If i is NULL, this does nothing. - */ -extern LZMA_API(void) lzma_index_end(lzma_index *i, lzma_allocator *allocator) - lzma_nothrow; - - -/** - * \brief Add a new Block to lzma_index - * - * \param i Pointer to a lzma_index structure - * \param allocator Pointer to lzma_allocator, or NULL to - * use malloc() - * \param unpadded_size Unpadded Size of a Block. This can be - * calculated with lzma_block_unpadded_size() - * after encoding or decoding the Block. - * \param uncompressed_size Uncompressed Size of a Block. This can be - * taken directly from lzma_block structure - * after encoding or decoding the Block. - * - * Appending a new Block does not invalidate iterators. For example, - * if an iterator was pointing to the end of the lzma_index, after - * lzma_index_append() it is possible to read the next Block with - * an existing iterator. - * - * \return - LZMA_OK - * - LZMA_MEM_ERROR - * - LZMA_DATA_ERROR: Compressed or uncompressed size of the - * Stream or size of the Index field would grow too big. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_append( - lzma_index *i, lzma_allocator *allocator, - lzma_vli unpadded_size, lzma_vli uncompressed_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Set the Stream Flags - * - * Set the Stream Flags of the last (and typically the only) Stream - * in lzma_index. This can be useful when reading information from the - * lzma_index, because to decode Blocks, knowing the integrity check type - * is needed. - * - * The given Stream Flags are copied into internal preallocated structure - * in the lzma_index, thus the caller doesn't need to keep the *stream_flags - * available after calling this function. - * - * \return - LZMA_OK - * - LZMA_OPTIONS_ERROR: Unsupported stream_flags->version. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_stream_flags( - lzma_index *i, const lzma_stream_flags *stream_flags) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Get the types of integrity Checks - * - * If lzma_index_stream_flags() is used to set the Stream Flags for - * every Stream, lzma_index_checks() can be used to get a bitmask to - * indicate which Check types have been used. It can be useful e.g. if - * showing the Check types to the user. - * - * The bitmask is 1 << check_id, e.g. CRC32 is 1 << 1 and SHA-256 is 1 << 10. - */ -extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Set the amount of Stream Padding - * - * Set the amount of Stream Padding of the last (and typically the only) - * Stream in the lzma_index. This is needed when planning to do random-access - * reading within multiple concatenated Streams. - * - * By default, the amount of Stream Padding is assumed to be zero bytes. - * - * \return - LZMA_OK - * - LZMA_DATA_ERROR: The file size would grow too big. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_stream_padding( - lzma_index *i, lzma_vli stream_padding) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Get the number of Streams - */ -extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the number of Blocks - * - * This returns the total number of Blocks in lzma_index. To get number - * of Blocks in individual Streams, use lzma_index_iter. - */ -extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the size of the Index field as bytes - * - * This is needed to verify the Backward Size field in the Stream Footer. - */ -extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the Stream - * - * If multiple lzma_indexes have been combined, this works as if the Blocks - * were in a single Stream. This is useful if you are going to combine - * Blocks from multiple Streams into a single new Stream. - */ -extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the Blocks - * - * This doesn't include the Stream Header, Stream Footer, Stream Padding, - * or Index fields. - */ -extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the total size of the file - * - * When no lzma_indexes have been combined with lzma_index_cat() and there is - * no Stream Padding, this function is identical to lzma_index_stream_size(). - * If multiple lzma_indexes have been combined, this includes also the headers - * of each separate Stream and the possible Stream Padding fields. - */ -extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Get the uncompressed size of the file - */ -extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i) - lzma_nothrow lzma_attr_pure; - - -/** - * \brief Initialize an iterator - * - * \param iter Pointer to a lzma_index_iter structure - * \param i lzma_index to which the iterator will be associated - * - * This function associates the iterator with the given lzma_index, and calls - * lzma_index_iter_rewind() on the iterator. - * - * This function doesn't allocate any memory, thus there is no - * lzma_index_iter_end(). The iterator is valid as long as the - * associated lzma_index is valid, that is, until lzma_index_end() or - * using it as source in lzma_index_cat(). Specifically, lzma_index doesn't - * become invalid if new Blocks are added to it with lzma_index_append() or - * if it is used as the destination in lzma_index_cat(). - * - * It is safe to make copies of an initialized lzma_index_iter, for example, - * to easily restart reading at some particular position. - */ -extern LZMA_API(void) lzma_index_iter_init( - lzma_index_iter *iter, const lzma_index *i) lzma_nothrow; - - -/** - * \brief Rewind the iterator - * - * Rewind the iterator so that next call to lzma_index_iter_next() will - * return the first Block or Stream. - */ -extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter) - lzma_nothrow; - - -/** - * \brief Get the next Block or Stream - * - * \param iter Iterator initialized with lzma_index_iter_init() - * \param mode Specify what kind of information the caller wants - * to get. See lzma_index_iter_mode for details. - * - * \return If next Block or Stream matching the mode was found, *iter - * is updated and this function returns false. If no Block or - * Stream matching the mode is found, *iter is not modified - * and this function returns true. If mode is set to an unknown - * value, *iter is not modified and this function returns true. - */ -extern LZMA_API(lzma_bool) lzma_index_iter_next( - lzma_index_iter *iter, lzma_index_iter_mode mode) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Locate a Block - * - * If it is possible to seek in the .xz file, it is possible to parse - * the Index field(s) and use lzma_index_iter_locate() to do random-access - * reading with granularity of Block size. - * - * \param iter Iterator that was earlier initialized with - * lzma_index_iter_init(). - * \param target Uncompressed target offset which the caller would - * like to locate from the Stream - * - * If the target is smaller than the uncompressed size of the Stream (can be - * checked with lzma_index_uncompressed_size()): - * - Information about the Stream and Block containing the requested - * uncompressed offset is stored into *iter. - * - Internal state of the iterator is adjusted so that - * lzma_index_iter_next() can be used to read subsequent Blocks or Streams. - * - This function returns false. - * - * If target is greater than the uncompressed size of the Stream, *iter - * is not modified, and this function returns true. - */ -extern LZMA_API(lzma_bool) lzma_index_iter_locate( - lzma_index_iter *iter, lzma_vli target) lzma_nothrow; - - -/** - * \brief Concatenate lzma_indexes - * - * Concatenating lzma_indexes is useful when doing random-access reading in - * multi-Stream .xz file, or when combining multiple Streams into single - * Stream. - * - * \param dest lzma_index after which src is appended - * \param src lzma_index to be appended after dest. If this - * function succeeds, the memory allocated for src - * is freed or moved to be part of dest, and all - * iterators pointing to src will become invalid. - * \param allocator Custom memory allocator; can be NULL to use - * malloc() and free(). - * - * \return - LZMA_OK: lzma_indexes were concatenated successfully. - * src is now a dangling pointer. - * - LZMA_DATA_ERROR: *dest would grow too big. - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_cat( - lzma_index *restrict dest, lzma_index *restrict src, - lzma_allocator *allocator) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Duplicate lzma_index - * - * \return A copy of the lzma_index, or NULL if memory allocation failed. - */ -extern LZMA_API(lzma_index *) lzma_index_dup( - const lzma_index *i, lzma_allocator *allocator) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .xz Index encoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param i Pointer to lzma_index which should be encoded. - * - * The valid `action' values for lzma_code() are LZMA_RUN and LZMA_FINISH. - * It is enough to use only one of them (you can choose freely; use LZMA_RUN - * to support liblzma versions older than 5.0.0). - * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_encoder( - lzma_stream *strm, const lzma_index *i) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Initialize .xz Index decoder - * - * \param strm Pointer to properly prepared lzma_stream - * \param i The decoded Index will be made available via - * this pointer. Initially this function will - * set *i to NULL (the old value is ignored). If - * decoding succeeds (lzma_code() returns - * LZMA_STREAM_END), *i will be set to point - * to a new lzma_index, which the application - * has to later free with lzma_index_end(). - * \param memlimit How much memory the resulting lzma_index is - * allowed to require. - * - * The valid `action' values for lzma_code() are LZMA_RUN and LZMA_FINISH. - * It is enough to use only one of them (you can choose freely; use LZMA_RUN - * to support liblzma versions older than 5.0.0). - * - * \return - LZMA_OK: Initialization succeeded, continue with lzma_code(). - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_decoder( - lzma_stream *strm, lzma_index **i, uint64_t memlimit) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Single-call .xz Index encoder - * - * \param i lzma_index to be encoded - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * *out_pos is updated only if encoding succeeds. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_BUF_ERROR: Output buffer is too small. Use - * lzma_index_size() to find out how much output - * space is needed. - * - LZMA_PROG_ERROR - * - * \note This function doesn't take allocator argument since all - * the internal data is allocated on stack. - */ -extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i, - uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow; - - -/** - * \brief Single-call .xz Index decoder - * - * \param i If decoding succeeds, *i will point to a new - * lzma_index, which the application has to - * later free with lzma_index_end(). If an error - * occurs, *i will be NULL. The old value of *i - * is always ignored and thus doesn't need to be - * initialized by the caller. - * \param memlimit Pointer to how much memory the resulting - * lzma_index is allowed to require. The value - * pointed by this pointer is modified if and only - * if LZMA_MEMLIMIT_ERROR is returned. - * \param allocator Pointer to lzma_allocator, or NULL to use malloc() - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * *in_pos is updated only if decoding succeeds. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_MEM_ERROR - * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. - * The minimum required memlimit value was stored to *memlimit. - * - LZMA_DATA_ERROR - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i, - uint64_t *memlimit, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/index_hash.h b/deps/lzma/liblzma/api/lzma/index_hash.h deleted file mode 100644 index fa2e048d552db3..00000000000000 --- a/deps/lzma/liblzma/api/lzma/index_hash.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * \file lzma/index_hash.h - * \brief Validate Index by using a hash function - * - * Hashing makes it possible to use constant amount of memory to validate - * Index of arbitrary size. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - -/** - * \brief Opaque data type to hold the Index hash - */ -typedef struct lzma_index_hash_s lzma_index_hash; - - -/** - * \brief Allocate and initialize a new lzma_index_hash structure - * - * If index_hash is NULL, a new lzma_index_hash structure is allocated, - * initialized, and a pointer to it returned. If allocation fails, NULL - * is returned. - * - * If index_hash is non-NULL, it is reinitialized and the same pointer - * returned. In this case, return value cannot be NULL or a different - * pointer than the index_hash that was given as an argument. - */ -extern LZMA_API(lzma_index_hash *) lzma_index_hash_init( - lzma_index_hash *index_hash, lzma_allocator *allocator) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Deallocate lzma_index_hash structure - */ -extern LZMA_API(void) lzma_index_hash_end( - lzma_index_hash *index_hash, lzma_allocator *allocator) - lzma_nothrow; - - -/** - * \brief Add a new Record to an Index hash - * - * \param index Pointer to a lzma_index_hash structure - * \param unpadded_size Unpadded Size of a Block - * \param uncompressed_size Uncompressed Size of a Block - * - * \return - LZMA_OK - * - LZMA_DATA_ERROR: Compressed or uncompressed size of the - * Stream or size of the Index field would grow too big. - * - LZMA_PROG_ERROR: Invalid arguments or this function is being - * used when lzma_index_hash_decode() has already been used. - */ -extern LZMA_API(lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash, - lzma_vli unpadded_size, lzma_vli uncompressed_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode and validate the Index field - * - * After telling the sizes of all Blocks with lzma_index_hash_append(), - * the actual Index field is decoded with this function. Specifically, - * once decoding of the Index field has been started, no more Records - * can be added using lzma_index_hash_append(). - * - * This function doesn't use lzma_stream structure to pass the input data. - * Instead, the input buffer is specified using three arguments. This is - * because it matches better the internal APIs of liblzma. - * - * \param index_hash Pointer to a lzma_index_hash structure - * \param in Pointer to the beginning of the input buffer - * \param in_pos in[*in_pos] is the next byte to process - * \param in_size in[in_size] is the first byte not to process - * - * \return - LZMA_OK: So far good, but more input is needed. - * - LZMA_STREAM_END: Index decoded successfully and it matches - * the Records given with lzma_index_hash_append(). - * - LZMA_DATA_ERROR: Index is corrupt or doesn't match the - * information given with lzma_index_hash_append(). - * - LZMA_BUF_ERROR: Cannot progress because *in_pos >= in_size. - * - LZMA_PROG_ERROR - */ -extern LZMA_API(lzma_ret) lzma_index_hash_decode(lzma_index_hash *index_hash, - const uint8_t *in, size_t *in_pos, size_t in_size) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Get the size of the Index field as bytes - * - * This is needed to verify the Backward Size field in the Stream Footer. - */ -extern LZMA_API(lzma_vli) lzma_index_hash_size( - const lzma_index_hash *index_hash) - lzma_nothrow lzma_attr_pure; diff --git a/deps/lzma/liblzma/api/lzma/lzma.h b/deps/lzma/liblzma/api/lzma/lzma.h deleted file mode 100644 index 3f8e095f70e8dd..00000000000000 --- a/deps/lzma/liblzma/api/lzma/lzma.h +++ /dev/null @@ -1,420 +0,0 @@ -/** - * \file lzma/lzma.h - * \brief LZMA1 and LZMA2 filters - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief LZMA1 Filter ID - * - * LZMA1 is the very same thing as what was called just LZMA in LZMA Utils, - * 7-Zip, and LZMA SDK. It's called LZMA1 here to prevent developers from - * accidentally using LZMA when they actually want LZMA2. - * - * LZMA1 shouldn't be used for new applications unless you _really_ know - * what you are doing. LZMA2 is almost always a better choice. - */ -#define LZMA_FILTER_LZMA1 LZMA_VLI_C(0x4000000000000001) - -/** - * \brief LZMA2 Filter ID - * - * Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds - * support for LZMA_SYNC_FLUSH, uncompressed chunks (smaller expansion - * when trying to compress uncompressible data), possibility to change - * lc/lp/pb in the middle of encoding, and some other internal improvements. - */ -#define LZMA_FILTER_LZMA2 LZMA_VLI_C(0x21) - - -/** - * \brief Match finders - * - * Match finder has major effect on both speed and compression ratio. - * Usually hash chains are faster than binary trees. - * - * If you will use LZMA_SYNC_FLUSH often, the hash chains may be a better - * choice, because binary trees get much higher compression ratio penalty - * with LZMA_SYNC_FLUSH. - * - * The memory usage formulas are only rough estimates, which are closest to - * reality when dict_size is a power of two. The formulas are more complex - * in reality, and can also change a little between liblzma versions. Use - * lzma_raw_encoder_memusage() to get more accurate estimate of memory usage. - */ -typedef enum { - LZMA_MF_HC3 = 0x03, - /**< - * \brief Hash Chain with 2- and 3-byte hashing - * - * Minimum nice_len: 3 - * - * Memory usage: - * - dict_size <= 16 MiB: dict_size * 7.5 - * - dict_size > 16 MiB: dict_size * 5.5 + 64 MiB - */ - - LZMA_MF_HC4 = 0x04, - /**< - * \brief Hash Chain with 2-, 3-, and 4-byte hashing - * - * Minimum nice_len: 4 - * - * Memory usage: - * - dict_size <= 32 MiB: dict_size * 7.5 - * - dict_size > 32 MiB: dict_size * 6.5 - */ - - LZMA_MF_BT2 = 0x12, - /**< - * \brief Binary Tree with 2-byte hashing - * - * Minimum nice_len: 2 - * - * Memory usage: dict_size * 9.5 - */ - - LZMA_MF_BT3 = 0x13, - /**< - * \brief Binary Tree with 2- and 3-byte hashing - * - * Minimum nice_len: 3 - * - * Memory usage: - * - dict_size <= 16 MiB: dict_size * 11.5 - * - dict_size > 16 MiB: dict_size * 9.5 + 64 MiB - */ - - LZMA_MF_BT4 = 0x14 - /**< - * \brief Binary Tree with 2-, 3-, and 4-byte hashing - * - * Minimum nice_len: 4 - * - * Memory usage: - * - dict_size <= 32 MiB: dict_size * 11.5 - * - dict_size > 32 MiB: dict_size * 10.5 - */ -} lzma_match_finder; - - -/** - * \brief Test if given match finder is supported - * - * Return true if the given match finder is supported by this liblzma build. - * Otherwise false is returned. It is safe to call this with a value that - * isn't listed in lzma_match_finder enumeration; the return value will be - * false. - * - * There is no way to list which match finders are available in this - * particular liblzma version and build. It would be useless, because - * a new match finder, which the application developer wasn't aware, - * could require giving additional options to the encoder that the older - * match finders don't need. - */ -extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Compression modes - * - * This selects the function used to analyze the data produced by the match - * finder. - */ -typedef enum { - LZMA_MODE_FAST = 1, - /**< - * \brief Fast compression - * - * Fast mode is usually at its best when combined with - * a hash chain match finder. - */ - - LZMA_MODE_NORMAL = 2 - /**< - * \brief Normal compression - * - * This is usually notably slower than fast mode. Use this - * together with binary tree match finders to expose the - * full potential of the LZMA1 or LZMA2 encoder. - */ -} lzma_mode; - - -/** - * \brief Test if given compression mode is supported - * - * Return true if the given compression mode is supported by this liblzma - * build. Otherwise false is returned. It is safe to call this with a value - * that isn't listed in lzma_mode enumeration; the return value will be false. - * - * There is no way to list which modes are available in this particular - * liblzma version and build. It would be useless, because a new compression - * mode, which the application developer wasn't aware, could require giving - * additional options to the encoder that the older modes don't need. - */ -extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Options specific to the LZMA1 and LZMA2 filters - * - * Since LZMA1 and LZMA2 share most of the code, it's simplest to share - * the options structure too. For encoding, all but the reserved variables - * need to be initialized unless specifically mentioned otherwise. - * lzma_lzma_preset() can be used to get a good starting point. - * - * For raw decoding, both LZMA1 and LZMA2 need dict_size, preset_dict, and - * preset_dict_size (if preset_dict != NULL). LZMA1 needs also lc, lp, and pb. - */ -typedef struct { - /** - * \brief Dictionary size in bytes - * - * Dictionary size indicates how many bytes of the recently processed - * uncompressed data is kept in memory. One method to reduce size of - * the uncompressed data is to store distance-length pairs, which - * indicate what data to repeat from the dictionary buffer. Thus, - * the bigger the dictionary, the better the compression ratio - * usually is. - * - * Maximum size of the dictionary depends on multiple things: - * - Memory usage limit - * - Available address space (not a problem on 64-bit systems) - * - Selected match finder (encoder only) - * - * Currently the maximum dictionary size for encoding is 1.5 GiB - * (i.e. (UINT32_C(1) << 30) + (UINT32_C(1) << 29)) even on 64-bit - * systems for certain match finder implementation reasons. In the - * future, there may be match finders that support bigger - * dictionaries. - * - * Decoder already supports dictionaries up to 4 GiB - 1 B (i.e. - * UINT32_MAX), so increasing the maximum dictionary size of the - * encoder won't cause problems for old decoders. - * - * Because extremely small dictionaries sizes would have unneeded - * overhead in the decoder, the minimum dictionary size is 4096 bytes. - * - * \note When decoding, too big dictionary does no other harm - * than wasting memory. - */ - uint32_t dict_size; -# define LZMA_DICT_SIZE_MIN UINT32_C(4096) -# define LZMA_DICT_SIZE_DEFAULT (UINT32_C(1) << 23) - - /** - * \brief Pointer to an initial dictionary - * - * It is possible to initialize the LZ77 history window using - * a preset dictionary. It is useful when compressing many - * similar, relatively small chunks of data independently from - * each other. The preset dictionary should contain typical - * strings that occur in the files being compressed. The most - * probable strings should be near the end of the preset dictionary. - * - * This feature should be used only in special situations. For - * now, it works correctly only with raw encoding and decoding. - * Currently none of the container formats supported by - * liblzma allow preset dictionary when decoding, thus if - * you create a .xz or .lzma file with preset dictionary, it - * cannot be decoded with the regular decoder functions. In the - * future, the .xz format will likely get support for preset - * dictionary though. - */ - const uint8_t *preset_dict; - - /** - * \brief Size of the preset dictionary - * - * Specifies the size of the preset dictionary. If the size is - * bigger than dict_size, only the last dict_size bytes are - * processed. - * - * This variable is read only when preset_dict is not NULL. - * If preset_dict is not NULL but preset_dict_size is zero, - * no preset dictionary is used (identical to only setting - * preset_dict to NULL). - */ - uint32_t preset_dict_size; - - /** - * \brief Number of literal context bits - * - * How many of the highest bits of the previous uncompressed - * eight-bit byte (also known as `literal') are taken into - * account when predicting the bits of the next literal. - * - * E.g. in typical English text, an upper-case letter is - * often followed by a lower-case letter, and a lower-case - * letter is usually followed by another lower-case letter. - * In the US-ASCII character set, the highest three bits are 010 - * for upper-case letters and 011 for lower-case letters. - * When lc is at least 3, the literal coding can take advantage of - * this property in the uncompressed data. - * - * There is a limit that applies to literal context bits and literal - * position bits together: lc + lp <= 4. Without this limit the - * decoding could become very slow, which could have security related - * results in some cases like email servers doing virus scanning. - * This limit also simplifies the internal implementation in liblzma. - * - * There may be LZMA1 streams that have lc + lp > 4 (maximum possible - * lc would be 8). It is not possible to decode such streams with - * liblzma. - */ - uint32_t lc; -# define LZMA_LCLP_MIN 0 -# define LZMA_LCLP_MAX 4 -# define LZMA_LC_DEFAULT 3 - - /** - * \brief Number of literal position bits - * - * lp affects what kind of alignment in the uncompressed data is - * assumed when encoding literals. A literal is a single 8-bit byte. - * See pb below for more information about alignment. - */ - uint32_t lp; -# define LZMA_LP_DEFAULT 0 - - /** - * \brief Number of position bits - * - * pb affects what kind of alignment in the uncompressed data is - * assumed in general. The default means four-byte alignment - * (2^ pb =2^2=4), which is often a good choice when there's - * no better guess. - * - * When the aligment is known, setting pb accordingly may reduce - * the file size a little. E.g. with text files having one-byte - * alignment (US-ASCII, ISO-8859-*, UTF-8), setting pb=0 can - * improve compression slightly. For UTF-16 text, pb=1 is a good - * choice. If the alignment is an odd number like 3 bytes, pb=0 - * might be the best choice. - * - * Even though the assumed alignment can be adjusted with pb and - * lp, LZMA1 and LZMA2 still slightly favor 16-byte alignment. - * It might be worth taking into account when designing file formats - * that are likely to be often compressed with LZMA1 or LZMA2. - */ - uint32_t pb; -# define LZMA_PB_MIN 0 -# define LZMA_PB_MAX 4 -# define LZMA_PB_DEFAULT 2 - - /** Compression mode */ - lzma_mode mode; - - /** - * \brief Nice length of a match - * - * This determines how many bytes the encoder compares from the match - * candidates when looking for the best match. Once a match of at - * least nice_len bytes long is found, the encoder stops looking for - * better candidates and encodes the match. (Naturally, if the found - * match is actually longer than nice_len, the actual length is - * encoded; it's not truncated to nice_len.) - * - * Bigger values usually increase the compression ratio and - * compression time. For most files, 32 to 128 is a good value, - * which gives very good compression ratio at good speed. - * - * The exact minimum value depends on the match finder. The maximum - * is 273, which is the maximum length of a match that LZMA1 and - * LZMA2 can encode. - */ - uint32_t nice_len; - - /** Match finder ID */ - lzma_match_finder mf; - - /** - * \brief Maximum search depth in the match finder - * - * For every input byte, match finder searches through the hash chain - * or binary tree in a loop, each iteration going one step deeper in - * the chain or tree. The searching stops if - * - a match of at least nice_len bytes long is found; - * - all match candidates from the hash chain or binary tree have - * been checked; or - * - maximum search depth is reached. - * - * Maximum search depth is needed to prevent the match finder from - * wasting too much time in case there are lots of short match - * candidates. On the other hand, stopping the search before all - * candidates have been checked can reduce compression ratio. - * - * Setting depth to zero tells liblzma to use an automatic default - * value, that depends on the selected match finder and nice_len. - * The default is in the range [4, 200] or so (it may vary between - * liblzma versions). - * - * Using a bigger depth value than the default can increase - * compression ratio in some cases. There is no strict maximum value, - * but high values (thousands or millions) should be used with care: - * the encoder could remain fast enough with typical input, but - * malicious input could cause the match finder to slow down - * dramatically, possibly creating a denial of service attack. - */ - uint32_t depth; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the names - * of these variables may change. These are and will never be used - * with the currently supported options, so it is safe to leave these - * uninitialized. - */ - uint32_t reserved_int1; - uint32_t reserved_int2; - uint32_t reserved_int3; - uint32_t reserved_int4; - uint32_t reserved_int5; - uint32_t reserved_int6; - uint32_t reserved_int7; - uint32_t reserved_int8; - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - void *reserved_ptr1; - void *reserved_ptr2; - -} lzma_options_lzma; - - -/** - * \brief Set a compression preset to lzma_options_lzma structure - * - * 0 is the fastest and 9 is the slowest. These match the switches -0 .. -9 - * of the xz command line tool. In addition, it is possible to bitwise-or - * flags to the preset. Currently only LZMA_PRESET_EXTREME is supported. - * The flags are defined in container.h, because the flags are used also - * with lzma_easy_encoder(). - * - * The preset values are subject to changes between liblzma versions. - * - * This function is available only if LZMA1 or LZMA2 encoder has been enabled - * when building liblzma. - * - * \return On success, false is returned. If the preset is not - * supported, true is returned. - */ -extern LZMA_API(lzma_bool) lzma_lzma_preset( - lzma_options_lzma *options, uint32_t preset) lzma_nothrow; diff --git a/deps/lzma/liblzma/api/lzma/stream_flags.h b/deps/lzma/liblzma/api/lzma/stream_flags.h deleted file mode 100644 index bbdd408263ea29..00000000000000 --- a/deps/lzma/liblzma/api/lzma/stream_flags.h +++ /dev/null @@ -1,223 +0,0 @@ -/** - * \file lzma/stream_flags.h - * \brief .xz Stream Header and Stream Footer encoder and decoder - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Size of Stream Header and Stream Footer - * - * Stream Header and Stream Footer have the same size and they are not - * going to change even if a newer version of the .xz file format is - * developed in future. - */ -#define LZMA_STREAM_HEADER_SIZE 12 - - -/** - * \brief Options for encoding/decoding Stream Header and Stream Footer - */ -typedef struct { - /** - * \brief Stream Flags format version - * - * To prevent API and ABI breakages if new features are needed in - * Stream Header or Stream Footer, a version number is used to - * indicate which fields in this structure are in use. For now, - * version must always be zero. With non-zero version, the - * lzma_stream_header_encode() and lzma_stream_footer_encode() - * will return LZMA_OPTIONS_ERROR. - * - * lzma_stream_header_decode() and lzma_stream_footer_decode() - * will always set this to the lowest value that supports all the - * features indicated by the Stream Flags field. The application - * must check that the version number set by the decoding functions - * is supported by the application. Otherwise it is possible that - * the application will decode the Stream incorrectly. - */ - uint32_t version; - - /** - * \brief Backward Size - * - * Backward Size must be a multiple of four bytes. In this Stream - * format version, Backward Size is the size of the Index field. - * - * Backward Size isn't actually part of the Stream Flags field, but - * it is convenient to include in this structure anyway. Backward - * Size is present only in the Stream Footer. There is no need to - * initialize backward_size when encoding Stream Header. - * - * lzma_stream_header_decode() always sets backward_size to - * LZMA_VLI_UNKNOWN so that it is convenient to use - * lzma_stream_flags_compare() when both Stream Header and Stream - * Footer have been decoded. - */ - lzma_vli backward_size; -# define LZMA_BACKWARD_SIZE_MIN 4 -# define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34) - - /** - * \brief Check ID - * - * This indicates the type of the integrity check calculated from - * uncompressed data. - */ - lzma_check check; - - /* - * Reserved space to allow possible future extensions without - * breaking the ABI. You should not touch these, because the - * names of these variables may change. - * - * (We will never be able to use all of these since Stream Flags - * is just two bytes plus Backward Size of four bytes. But it's - * nice to have the proper types when they are needed.) - */ - lzma_reserved_enum reserved_enum1; - lzma_reserved_enum reserved_enum2; - lzma_reserved_enum reserved_enum3; - lzma_reserved_enum reserved_enum4; - lzma_bool reserved_bool1; - lzma_bool reserved_bool2; - lzma_bool reserved_bool3; - lzma_bool reserved_bool4; - lzma_bool reserved_bool5; - lzma_bool reserved_bool6; - lzma_bool reserved_bool7; - lzma_bool reserved_bool8; - uint32_t reserved_int1; - uint32_t reserved_int2; - -} lzma_stream_flags; - - -/** - * \brief Encode Stream Header - * - * \param options Stream Header options to be encoded. - * options->backward_size is ignored and doesn't - * need to be initialized. - * \param out Beginning of the output buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: options->version is not supported by - * this liblzma version. - * - LZMA_PROG_ERROR: Invalid options. - */ -extern LZMA_API(lzma_ret) lzma_stream_header_encode( - const lzma_stream_flags *options, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Encode Stream Footer - * - * \param options Stream Footer options to be encoded. - * \param out Beginning of the output buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Encoding was successful. - * - LZMA_OPTIONS_ERROR: options->version is not supported by - * this liblzma version. - * - LZMA_PROG_ERROR: Invalid options. - */ -extern LZMA_API(lzma_ret) lzma_stream_footer_encode( - const lzma_stream_flags *options, uint8_t *out) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Stream Header - * - * \param options Target for the decoded Stream Header options. - * \param in Beginning of the input buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to - * help comparing Stream Flags from Stream Header and Stream Footer with - * lzma_stream_flags_compare(). - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given - * buffer cannot be Stream Header. - * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header - * is corrupt. - * - LZMA_OPTIONS_ERROR: Unsupported options are present - * in the header. - * - * \note When decoding .xz files that contain multiple Streams, it may - * make sense to print "file format not recognized" only if - * decoding of the Stream Header of the _first_ Stream gives - * LZMA_FORMAT_ERROR. If non-first Stream Header gives - * LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is - * probably more appropriate. - * - * For example, Stream decoder in liblzma uses LZMA_DATA_ERROR if - * LZMA_FORMAT_ERROR is returned by lzma_stream_header_decode() - * when decoding non-first Stream. - */ -extern LZMA_API(lzma_ret) lzma_stream_header_decode( - lzma_stream_flags *options, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Decode Stream Footer - * - * \param options Target for the decoded Stream Header options. - * \param in Beginning of the input buffer of - * LZMA_STREAM_HEADER_SIZE bytes. - * - * \return - LZMA_OK: Decoding was successful. - * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given - * buffer cannot be Stream Footer. - * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer - * is corrupt. - * - LZMA_OPTIONS_ERROR: Unsupported options are present - * in Stream Footer. - * - * \note If Stream Header was already decoded successfully, but - * decoding Stream Footer returns LZMA_FORMAT_ERROR, the - * application should probably report some other error message - * than "file format not recognized", since the file more likely - * is corrupt (possibly truncated). Stream decoder in liblzma - * uses LZMA_DATA_ERROR in this situation. - */ -extern LZMA_API(lzma_ret) lzma_stream_footer_decode( - lzma_stream_flags *options, const uint8_t *in) - lzma_nothrow lzma_attr_warn_unused_result; - - -/** - * \brief Compare two lzma_stream_flags structures - * - * backward_size values are compared only if both are not - * LZMA_VLI_UNKNOWN. - * - * \return - LZMA_OK: Both are equal. If either had backward_size set - * to LZMA_VLI_UNKNOWN, backward_size values were not - * compared or validated. - * - LZMA_DATA_ERROR: The structures differ. - * - LZMA_OPTIONS_ERROR: version in either structure is greater - * than the maximum supported version (currently zero). - * - LZMA_PROG_ERROR: Invalid value, e.g. invalid check or - * backward_size. - */ -extern LZMA_API(lzma_ret) lzma_stream_flags_compare( - const lzma_stream_flags *a, const lzma_stream_flags *b) - lzma_nothrow lzma_attr_pure; diff --git a/deps/lzma/liblzma/api/lzma/version.h b/deps/lzma/liblzma/api/lzma/version.h deleted file mode 100644 index beec18e204405e..00000000000000 --- a/deps/lzma/liblzma/api/lzma/version.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * \file lzma/version.h - * \brief Version number - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/* - * Version number split into components - */ -#define LZMA_VERSION_MAJOR 5 -#define LZMA_VERSION_MINOR 0 -#define LZMA_VERSION_PATCH 7 -#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE - -#ifndef LZMA_VERSION_COMMIT -# define LZMA_VERSION_COMMIT "" -#endif - - -/* - * Map symbolic stability levels to integers. - */ -#define LZMA_VERSION_STABILITY_ALPHA 0 -#define LZMA_VERSION_STABILITY_BETA 1 -#define LZMA_VERSION_STABILITY_STABLE 2 - - -/** - * \brief Compile-time version number - * - * The version number is of format xyyyzzzs where - * - x = major - * - yyy = minor - * - zzz = revision - * - s indicates stability: 0 = alpha, 1 = beta, 2 = stable - * - * The same xyyyzzz triplet is never reused with different stability levels. - * For example, if 5.1.0alpha has been released, there will never be 5.1.0beta - * or 5.1.0 stable. - * - * \note The version number of liblzma has nothing to with - * the version number of Igor Pavlov's LZMA SDK. - */ -#define LZMA_VERSION (LZMA_VERSION_MAJOR * UINT32_C(10000000) \ - + LZMA_VERSION_MINOR * UINT32_C(10000) \ - + LZMA_VERSION_PATCH * UINT32_C(10) \ - + LZMA_VERSION_STABILITY) - - -/* - * Macros to construct the compile-time version string - */ -#if LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_ALPHA -# define LZMA_VERSION_STABILITY_STRING "alpha" -#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_BETA -# define LZMA_VERSION_STABILITY_STRING "beta" -#elif LZMA_VERSION_STABILITY == LZMA_VERSION_STABILITY_STABLE -# define LZMA_VERSION_STABILITY_STRING "" -#else -# error Incorrect LZMA_VERSION_STABILITY -#endif - -#define LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) \ - #major "." #minor "." #patch stability commit - -#define LZMA_VERSION_STRING_C(major, minor, patch, stability, commit) \ - LZMA_VERSION_STRING_C_(major, minor, patch, stability, commit) - - -/** - * \brief Compile-time version as a string - * - * This can be for example "4.999.5alpha", "4.999.8beta", or "5.0.0" (stable - * versions don't have any "stable" suffix). In future, a snapshot built - * from source code repository may include an additional suffix, for example - * "4.999.8beta-21-g1d92". The commit ID won't be available in numeric form - * in LZMA_VERSION macro. - */ -#define LZMA_VERSION_STRING LZMA_VERSION_STRING_C( \ - LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, \ - LZMA_VERSION_PATCH, LZMA_VERSION_STABILITY_STRING, \ - LZMA_VERSION_COMMIT) - - -/* #ifndef is needed for use with windres (MinGW or Cygwin). */ -#ifndef LZMA_H_INTERNAL_RC - -/** - * \brief Run-time version number as an integer - * - * Return the value of LZMA_VERSION macro at the compile time of liblzma. - * This allows the application to compare if it was built against the same, - * older, or newer version of liblzma that is currently running. - */ -extern LZMA_API(uint32_t) lzma_version_number(void) - lzma_nothrow lzma_attr_const; - - -/** - * \brief Run-time version as a string - * - * This function may be useful if you want to display which version of - * liblzma your application is currently using. - */ -extern LZMA_API(const char *) lzma_version_string(void) - lzma_nothrow lzma_attr_const; - -#endif diff --git a/deps/lzma/liblzma/api/lzma/vli.h b/deps/lzma/liblzma/api/lzma/vli.h deleted file mode 100644 index 3cdb234ecfe6b3..00000000000000 --- a/deps/lzma/liblzma/api/lzma/vli.h +++ /dev/null @@ -1,168 +0,0 @@ -/** - * \file lzma/vli.h - * \brief Variable-length integer handling - * - * In the .xz format, most integers are encoded in a variable-length - * representation, which is sometimes called little endian base-128 encoding. - * This saves space when smaller values are more likely than bigger values. - * - * The encoding scheme encodes seven bits to every byte, using minimum - * number of bytes required to represent the given value. Encodings that use - * non-minimum number of bytes are invalid, thus every integer has exactly - * one encoded representation. The maximum number of bits in a VLI is 63, - * thus the vli argument must be less than or equal to UINT64_MAX / 2. You - * should use LZMA_VLI_MAX for clarity. - */ - -/* - * Author: Lasse Collin - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * See ../lzma.h for information about liblzma as a whole. - */ - -#ifndef LZMA_H_INTERNAL -# error Never include this file directly. Use instead. -#endif - - -/** - * \brief Maximum supported value of a variable-length integer - */ -#define LZMA_VLI_MAX (UINT64_MAX / 2) - -/** - * \brief VLI value to denote that the value is unknown - */ -#define LZMA_VLI_UNKNOWN UINT64_MAX - -/** - * \brief Maximum supported encoded length of variable length integers - */ -#define LZMA_VLI_BYTES_MAX 9 - -/** - * \brief VLI constant suffix - */ -#define LZMA_VLI_C(n) UINT64_C(n) - - -/** - * \brief Variable-length integer type - * - * Valid VLI values are in the range [0, LZMA_VLI_MAX]. Unknown value is - * indicated with LZMA_VLI_UNKNOWN, which is the maximum value of the - * underlaying integer type. - * - * lzma_vli will be uint64_t for the foreseeable future. If a bigger size - * is needed in the future, it is guaranteed that 2 * LZMA_VLI_MAX will - * not overflow lzma_vli. This simplifies integer overflow detection. - */ -typedef uint64_t lzma_vli; - - -/** - * \brief Validate a variable-length integer - * - * This is useful to test that application has given acceptable values - * for example in the uncompressed_size and compressed_size variables. - * - * \return True if the integer is representable as VLI or if it - * indicates unknown value. - */ -#define lzma_vli_is_valid(vli) \ - ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) - - -/** - * \brief Encode a variable-length integer - * - * This function has two modes: single-call and multi-call. Single-call mode - * encodes the whole integer at once; it is an error if the output buffer is - * too small. Multi-call mode saves the position in *vli_pos, and thus it is - * possible to continue encoding if the buffer becomes full before the whole - * integer has been encoded. - * - * \param vli Integer to be encoded - * \param vli_pos How many VLI-encoded bytes have already been written - * out. When starting to encode a new integer in - * multi-call mode, *vli_pos must be set to zero. - * To use single-call encoding, set vli_pos to NULL. - * \param out Beginning of the output buffer - * \param out_pos The next byte will be written to out[*out_pos]. - * \param out_size Size of the out buffer; the first byte into - * which no data is written to is out[out_size]. - * - * \return Slightly different return values are used in multi-call and - * single-call modes. - * - * Single-call (vli_pos == NULL): - * - LZMA_OK: Integer successfully encoded. - * - LZMA_PROG_ERROR: Arguments are not sane. This can be due - * to too little output space; single-call mode doesn't use - * LZMA_BUF_ERROR, since the application should have checked - * the encoded size with lzma_vli_size(). - * - * Multi-call (vli_pos != NULL): - * - LZMA_OK: So far all OK, but the integer is not - * completely written out yet. - * - LZMA_STREAM_END: Integer successfully encoded. - * - LZMA_BUF_ERROR: No output space was provided. - * - LZMA_PROG_ERROR: Arguments are not sane. - */ -extern LZMA_API(lzma_ret) lzma_vli_encode(lzma_vli vli, size_t *vli_pos, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) lzma_nothrow; - - -/** - * \brief Decode a variable-length integer - * - * Like lzma_vli_encode(), this function has single-call and multi-call modes. - * - * \param vli Pointer to decoded integer. The decoder will - * initialize it to zero when *vli_pos == 0, so - * application isn't required to initialize *vli. - * \param vli_pos How many bytes have already been decoded. When - * starting to decode a new integer in multi-call - * mode, *vli_pos must be initialized to zero. To - * use single-call decoding, set vli_pos to NULL. - * \param in Beginning of the input buffer - * \param in_pos The next byte will be read from in[*in_pos]. - * \param in_size Size of the input buffer; the first byte that - * won't be read is in[in_size]. - * - * \return Slightly different return values are used in multi-call and - * single-call modes. - * - * Single-call (vli_pos == NULL): - * - LZMA_OK: Integer successfully decoded. - * - LZMA_DATA_ERROR: Integer is corrupt. This includes hitting - * the end of the input buffer before the whole integer was - * decoded; providing no input at all will use LZMA_DATA_ERROR. - * - LZMA_PROG_ERROR: Arguments are not sane. - * - * Multi-call (vli_pos != NULL): - * - LZMA_OK: So far all OK, but the integer is not - * completely decoded yet. - * - LZMA_STREAM_END: Integer successfully decoded. - * - LZMA_DATA_ERROR: Integer is corrupt. - * - LZMA_BUF_ERROR: No input was provided. - * - LZMA_PROG_ERROR: Arguments are not sane. - */ -extern LZMA_API(lzma_ret) lzma_vli_decode(lzma_vli *restrict vli, - size_t *vli_pos, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size) - lzma_nothrow; - - -/** - * \brief Get the number of bytes required to encode a VLI - * - * \return Number of bytes on success (1-9). If vli isn't valid, - * zero is returned. - */ -extern LZMA_API(uint32_t) lzma_vli_size(lzma_vli vli) - lzma_nothrow lzma_attr_pure; diff --git a/deps/lzma/liblzma/check/Makefile.inc b/deps/lzma/liblzma/check/Makefile.inc deleted file mode 100644 index e4067a9cbcb5b4..00000000000000 --- a/deps/lzma/liblzma/check/Makefile.inc +++ /dev/null @@ -1,51 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST += \ - check/crc32_tablegen.c \ - check/crc64_tablegen.c - -liblzma_la_SOURCES += \ - check/check.c \ - check/check.h \ - check/crc_macros.h - -if COND_CHECK_CRC32 -if COND_SMALL -liblzma_la_SOURCES += check/crc32_small.c -else -liblzma_la_SOURCES += \ - check/crc32_table.c \ - check/crc32_table_le.h \ - check/crc32_table_be.h -if COND_ASM_X86 -liblzma_la_SOURCES += check/crc32_x86.S -else -liblzma_la_SOURCES += check/crc32_fast.c -endif -endif -endif - -if COND_CHECK_CRC64 -if COND_SMALL -liblzma_la_SOURCES += check/crc64_small.c -else -liblzma_la_SOURCES += \ - check/crc64_table.c \ - check/crc64_table_le.h \ - check/crc64_table_be.h -if COND_ASM_X86 -liblzma_la_SOURCES += check/crc64_x86.S -else -liblzma_la_SOURCES += check/crc64_fast.c -endif -endif -endif - -if COND_CHECK_SHA256 -liblzma_la_SOURCES += check/sha256.c -endif diff --git a/deps/lzma/liblzma/check/check.c b/deps/lzma/liblzma/check/check.c deleted file mode 100644 index 428ddaeb77981d..00000000000000 --- a/deps/lzma/liblzma/check/check.c +++ /dev/null @@ -1,174 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file check.c -/// \brief Single API to access different integrity checks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -extern LZMA_API(lzma_bool) -lzma_check_is_supported(lzma_check type) -{ - if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) - return false; - - static const lzma_bool available_checks[LZMA_CHECK_ID_MAX + 1] = { - true, // LZMA_CHECK_NONE - -#ifdef HAVE_CHECK_CRC32 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - -#ifdef HAVE_CHECK_CRC64 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - -#ifdef HAVE_CHECK_SHA256 - true, -#else - false, -#endif - - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - false, // Reserved - }; - - return available_checks[(unsigned int)(type)]; -} - - -extern LZMA_API(uint32_t) -lzma_check_size(lzma_check type) -{ - if ((unsigned int)(type) > LZMA_CHECK_ID_MAX) - return UINT32_MAX; - - // See file-format.txt section 2.1.1.2. - static const uint8_t check_sizes[LZMA_CHECK_ID_MAX + 1] = { - 0, - 4, 4, 4, - 8, 8, 8, - 16, 16, 16, - 32, 32, 32, - 64, 64, 64 - }; - - return check_sizes[(unsigned int)(type)]; -} - - -extern void -lzma_check_init(lzma_check_state *check, lzma_check type) -{ - switch (type) { - case LZMA_CHECK_NONE: - break; - -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->state.crc32 = 0; - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->state.crc64 = 0; - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_init(check); - break; -#endif - - default: - break; - } - - return; -} - - -extern void -lzma_check_update(lzma_check_state *check, lzma_check type, - const uint8_t *buf, size_t size) -{ - switch (type) { -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->state.crc32 = lzma_crc32(buf, size, check->state.crc32); - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->state.crc64 = lzma_crc64(buf, size, check->state.crc64); - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_update(buf, size, check); - break; -#endif - - default: - break; - } - - return; -} - - -extern void -lzma_check_finish(lzma_check_state *check, lzma_check type) -{ - switch (type) { -#ifdef HAVE_CHECK_CRC32 - case LZMA_CHECK_CRC32: - check->buffer.u32[0] = conv32le(check->state.crc32); - break; -#endif - -#ifdef HAVE_CHECK_CRC64 - case LZMA_CHECK_CRC64: - check->buffer.u64[0] = conv64le(check->state.crc64); - break; -#endif - -#ifdef HAVE_CHECK_SHA256 - case LZMA_CHECK_SHA256: - lzma_sha256_finish(check); - break; -#endif - - default: - break; - } - - return; -} diff --git a/deps/lzma/liblzma/check/check.h b/deps/lzma/liblzma/check/check.h deleted file mode 100644 index e100d2b85303a3..00000000000000 --- a/deps/lzma/liblzma/check/check.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file check.h -/// \brief Internal API to different integrity check functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_CHECK_H -#define LZMA_CHECK_H - -#include "common.h" - - -// Index hashing needs the best possible hash function (preferably -// a cryptographic hash) for maximum reliability. -#if defined(HAVE_CHECK_SHA256) -# define LZMA_CHECK_BEST LZMA_CHECK_SHA256 -#elif defined(HAVE_CHECK_CRC64) -# define LZMA_CHECK_BEST LZMA_CHECK_CRC64 -#else -# define LZMA_CHECK_BEST LZMA_CHECK_CRC32 -#endif - - -/// \brief Structure to hold internal state of the check being calculated -/// -/// \note This is not in the public API because this structure may -/// change in future if new integrity check algorithms are added. -typedef struct { - /// Buffer to hold the final result and a temporary buffer for SHA256. - union { - uint8_t u8[64]; - uint32_t u32[16]; - uint64_t u64[8]; - } buffer; - - /// Check-specific data - union { - uint32_t crc32; - uint64_t crc64; - - struct { - /// Internal state - uint32_t state[8]; - - /// Size of the message excluding padding - uint64_t size; - } sha256; - } state; - -} lzma_check_state; - - -/// lzma_crc32_table[0] is needed by LZ encoder so we need to keep -/// the array two-dimensional. -#ifdef HAVE_SMALL -extern uint32_t lzma_crc32_table[1][256]; -extern void lzma_crc32_init(void); -#else -extern const uint32_t lzma_crc32_table[8][256]; -extern const uint64_t lzma_crc64_table[4][256]; -#endif - - -/// \brief Initialize *check depending on type -/// -/// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not -/// supported by the current version or build of liblzma. -/// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX. -extern void lzma_check_init(lzma_check_state *check, lzma_check type); - -/// Update the check state -extern void lzma_check_update(lzma_check_state *check, lzma_check type, - const uint8_t *buf, size_t size); - -/// Finish the check calculation and store the result to check->buffer.u8. -extern void lzma_check_finish(lzma_check_state *check, lzma_check type); - - -/// Prepare SHA-256 state for new input. -extern void lzma_sha256_init(lzma_check_state *check); - -/// Update the SHA-256 hash state -extern void lzma_sha256_update( - const uint8_t *buf, size_t size, lzma_check_state *check); - -/// Finish the SHA-256 calculation and store the result to check->buffer.u8. -extern void lzma_sha256_finish(lzma_check_state *check); - -#endif diff --git a/deps/lzma/liblzma/check/crc32_fast.c b/deps/lzma/liblzma/check/crc32_fast.c deleted file mode 100644 index 3de02638d77632..00000000000000 --- a/deps/lzma/liblzma/check/crc32_fast.c +++ /dev/null @@ -1,82 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32.c -/// \brief CRC32 calculation -/// -/// Calculate the CRC32 using the slice-by-eight algorithm. -/// It is explained in this document: -/// http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf -/// The code in this file is not the same as in Intel's paper, but -/// the basic principle is identical. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" -#include "crc_macros.h" - - -// If you make any changes, do some benchmarking! Seemingly unrelated -// changes can very easily ruin the performance (and very probably is -// very compiler dependent). -extern LZMA_API(uint32_t) -lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) -{ - crc = ~crc; - -#ifdef WORDS_BIGENDIAN - crc = bswap32(crc); -#endif - - if (size > 8) { - // Fix the alignment, if needed. The if statement above - // ensures that this won't read past the end of buf[]. - while ((uintptr_t)(buf) & 7) { - crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); - --size; - } - - // Calculate the position where to stop. - const uint8_t *const limit = buf + (size & ~(size_t)(7)); - - // Calculate how many bytes must be calculated separately - // before returning the result. - size &= (size_t)(7); - - // Calculate the CRC32 using the slice-by-eight algorithm. - while (buf < limit) { - crc ^= *(const uint32_t *)(buf); - buf += 4; - - crc = lzma_crc32_table[7][A(crc)] - ^ lzma_crc32_table[6][B(crc)] - ^ lzma_crc32_table[5][C(crc)] - ^ lzma_crc32_table[4][D(crc)]; - - const uint32_t tmp = *(const uint32_t *)(buf); - buf += 4; - - // At least with some compilers, it is critical for - // performance, that the crc variable is XORed - // between the two table-lookup pairs. - crc = lzma_crc32_table[3][A(tmp)] - ^ lzma_crc32_table[2][B(tmp)] - ^ crc - ^ lzma_crc32_table[1][C(tmp)] - ^ lzma_crc32_table[0][D(tmp)]; - } - } - - while (size-- != 0) - crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc); - -#ifdef WORDS_BIGENDIAN - crc = bswap32(crc); -#endif - - return ~crc; -} diff --git a/deps/lzma/liblzma/check/crc32_small.c b/deps/lzma/liblzma/check/crc32_small.c deleted file mode 100644 index 5f8a32868782dc..00000000000000 --- a/deps/lzma/liblzma/check/crc32_small.c +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_small.c -/// \brief CRC32 calculation (size-optimized) -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -uint32_t lzma_crc32_table[1][256]; - - -static void -crc32_init(void) -{ - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - for (size_t b = 0; b < 256; ++b) { - uint32_t r = b; - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - lzma_crc32_table[0][b] = r; - } - - return; -} - - -extern void -lzma_crc32_init(void) -{ - mythread_once(crc32_init); - return; -} - - -extern LZMA_API(uint32_t) -lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc) -{ - lzma_crc32_init(); - - crc = ~crc; - - while (size != 0) { - crc = lzma_crc32_table[0][*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); - --size; - } - - return ~crc; -} diff --git a/deps/lzma/liblzma/check/crc32_table.c b/deps/lzma/liblzma/check/crc32_table.c deleted file mode 100644 index 368874eb79d487..00000000000000 --- a/deps/lzma/liblzma/check/crc32_table.c +++ /dev/null @@ -1,19 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_table.c -/// \brief Precalculated CRC32 table with correct endianness -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - -#ifdef WORDS_BIGENDIAN -# include "crc32_table_be.h" -#else -# include "crc32_table_le.h" -#endif diff --git a/deps/lzma/liblzma/check/crc32_table_be.h b/deps/lzma/liblzma/check/crc32_table_be.h deleted file mode 100644 index c483cb670dcbbf..00000000000000 --- a/deps/lzma/liblzma/check/crc32_table_be.h +++ /dev/null @@ -1,525 +0,0 @@ -/* This file has been automatically generated by crc32_tablegen.c. */ - -const uint32_t lzma_crc32_table[8][256] = { - { - 0x00000000, 0x96300777, 0x2C610EEE, 0xBA510999, - 0x19C46D07, 0x8FF46A70, 0x35A563E9, 0xA395649E, - 0x3288DB0E, 0xA4B8DC79, 0x1EE9D5E0, 0x88D9D297, - 0x2B4CB609, 0xBD7CB17E, 0x072DB8E7, 0x911DBF90, - 0x6410B71D, 0xF220B06A, 0x4871B9F3, 0xDE41BE84, - 0x7DD4DA1A, 0xEBE4DD6D, 0x51B5D4F4, 0xC785D383, - 0x56986C13, 0xC0A86B64, 0x7AF962FD, 0xECC9658A, - 0x4F5C0114, 0xD96C0663, 0x633D0FFA, 0xF50D088D, - 0xC8206E3B, 0x5E10694C, 0xE44160D5, 0x727167A2, - 0xD1E4033C, 0x47D4044B, 0xFD850DD2, 0x6BB50AA5, - 0xFAA8B535, 0x6C98B242, 0xD6C9BBDB, 0x40F9BCAC, - 0xE36CD832, 0x755CDF45, 0xCF0DD6DC, 0x593DD1AB, - 0xAC30D926, 0x3A00DE51, 0x8051D7C8, 0x1661D0BF, - 0xB5F4B421, 0x23C4B356, 0x9995BACF, 0x0FA5BDB8, - 0x9EB80228, 0x0888055F, 0xB2D90CC6, 0x24E90BB1, - 0x877C6F2F, 0x114C6858, 0xAB1D61C1, 0x3D2D66B6, - 0x9041DC76, 0x0671DB01, 0xBC20D298, 0x2A10D5EF, - 0x8985B171, 0x1FB5B606, 0xA5E4BF9F, 0x33D4B8E8, - 0xA2C90778, 0x34F9000F, 0x8EA80996, 0x18980EE1, - 0xBB0D6A7F, 0x2D3D6D08, 0x976C6491, 0x015C63E6, - 0xF4516B6B, 0x62616C1C, 0xD8306585, 0x4E0062F2, - 0xED95066C, 0x7BA5011B, 0xC1F40882, 0x57C40FF5, - 0xC6D9B065, 0x50E9B712, 0xEAB8BE8B, 0x7C88B9FC, - 0xDF1DDD62, 0x492DDA15, 0xF37CD38C, 0x654CD4FB, - 0x5861B24D, 0xCE51B53A, 0x7400BCA3, 0xE230BBD4, - 0x41A5DF4A, 0xD795D83D, 0x6DC4D1A4, 0xFBF4D6D3, - 0x6AE96943, 0xFCD96E34, 0x468867AD, 0xD0B860DA, - 0x732D0444, 0xE51D0333, 0x5F4C0AAA, 0xC97C0DDD, - 0x3C710550, 0xAA410227, 0x10100BBE, 0x86200CC9, - 0x25B56857, 0xB3856F20, 0x09D466B9, 0x9FE461CE, - 0x0EF9DE5E, 0x98C9D929, 0x2298D0B0, 0xB4A8D7C7, - 0x173DB359, 0x810DB42E, 0x3B5CBDB7, 0xAD6CBAC0, - 0x2083B8ED, 0xB6B3BF9A, 0x0CE2B603, 0x9AD2B174, - 0x3947D5EA, 0xAF77D29D, 0x1526DB04, 0x8316DC73, - 0x120B63E3, 0x843B6494, 0x3E6A6D0D, 0xA85A6A7A, - 0x0BCF0EE4, 0x9DFF0993, 0x27AE000A, 0xB19E077D, - 0x44930FF0, 0xD2A30887, 0x68F2011E, 0xFEC20669, - 0x5D5762F7, 0xCB676580, 0x71366C19, 0xE7066B6E, - 0x761BD4FE, 0xE02BD389, 0x5A7ADA10, 0xCC4ADD67, - 0x6FDFB9F9, 0xF9EFBE8E, 0x43BEB717, 0xD58EB060, - 0xE8A3D6D6, 0x7E93D1A1, 0xC4C2D838, 0x52F2DF4F, - 0xF167BBD1, 0x6757BCA6, 0xDD06B53F, 0x4B36B248, - 0xDA2B0DD8, 0x4C1B0AAF, 0xF64A0336, 0x607A0441, - 0xC3EF60DF, 0x55DF67A8, 0xEF8E6E31, 0x79BE6946, - 0x8CB361CB, 0x1A8366BC, 0xA0D26F25, 0x36E26852, - 0x95770CCC, 0x03470BBB, 0xB9160222, 0x2F260555, - 0xBE3BBAC5, 0x280BBDB2, 0x925AB42B, 0x046AB35C, - 0xA7FFD7C2, 0x31CFD0B5, 0x8B9ED92C, 0x1DAEDE5B, - 0xB0C2649B, 0x26F263EC, 0x9CA36A75, 0x0A936D02, - 0xA906099C, 0x3F360EEB, 0x85670772, 0x13570005, - 0x824ABF95, 0x147AB8E2, 0xAE2BB17B, 0x381BB60C, - 0x9B8ED292, 0x0DBED5E5, 0xB7EFDC7C, 0x21DFDB0B, - 0xD4D2D386, 0x42E2D4F1, 0xF8B3DD68, 0x6E83DA1F, - 0xCD16BE81, 0x5B26B9F6, 0xE177B06F, 0x7747B718, - 0xE65A0888, 0x706A0FFF, 0xCA3B0666, 0x5C0B0111, - 0xFF9E658F, 0x69AE62F8, 0xD3FF6B61, 0x45CF6C16, - 0x78E20AA0, 0xEED20DD7, 0x5483044E, 0xC2B30339, - 0x612667A7, 0xF71660D0, 0x4D476949, 0xDB776E3E, - 0x4A6AD1AE, 0xDC5AD6D9, 0x660BDF40, 0xF03BD837, - 0x53AEBCA9, 0xC59EBBDE, 0x7FCFB247, 0xE9FFB530, - 0x1CF2BDBD, 0x8AC2BACA, 0x3093B353, 0xA6A3B424, - 0x0536D0BA, 0x9306D7CD, 0x2957DE54, 0xBF67D923, - 0x2E7A66B3, 0xB84A61C4, 0x021B685D, 0x942B6F2A, - 0x37BE0BB4, 0xA18E0CC3, 0x1BDF055A, 0x8DEF022D - }, { - 0x00000000, 0x41311B19, 0x82623632, 0xC3532D2B, - 0x04C56C64, 0x45F4777D, 0x86A75A56, 0xC796414F, - 0x088AD9C8, 0x49BBC2D1, 0x8AE8EFFA, 0xCBD9F4E3, - 0x0C4FB5AC, 0x4D7EAEB5, 0x8E2D839E, 0xCF1C9887, - 0x5112C24A, 0x1023D953, 0xD370F478, 0x9241EF61, - 0x55D7AE2E, 0x14E6B537, 0xD7B5981C, 0x96848305, - 0x59981B82, 0x18A9009B, 0xDBFA2DB0, 0x9ACB36A9, - 0x5D5D77E6, 0x1C6C6CFF, 0xDF3F41D4, 0x9E0E5ACD, - 0xA2248495, 0xE3159F8C, 0x2046B2A7, 0x6177A9BE, - 0xA6E1E8F1, 0xE7D0F3E8, 0x2483DEC3, 0x65B2C5DA, - 0xAAAE5D5D, 0xEB9F4644, 0x28CC6B6F, 0x69FD7076, - 0xAE6B3139, 0xEF5A2A20, 0x2C09070B, 0x6D381C12, - 0xF33646DF, 0xB2075DC6, 0x715470ED, 0x30656BF4, - 0xF7F32ABB, 0xB6C231A2, 0x75911C89, 0x34A00790, - 0xFBBC9F17, 0xBA8D840E, 0x79DEA925, 0x38EFB23C, - 0xFF79F373, 0xBE48E86A, 0x7D1BC541, 0x3C2ADE58, - 0x054F79F0, 0x447E62E9, 0x872D4FC2, 0xC61C54DB, - 0x018A1594, 0x40BB0E8D, 0x83E823A6, 0xC2D938BF, - 0x0DC5A038, 0x4CF4BB21, 0x8FA7960A, 0xCE968D13, - 0x0900CC5C, 0x4831D745, 0x8B62FA6E, 0xCA53E177, - 0x545DBBBA, 0x156CA0A3, 0xD63F8D88, 0x970E9691, - 0x5098D7DE, 0x11A9CCC7, 0xD2FAE1EC, 0x93CBFAF5, - 0x5CD76272, 0x1DE6796B, 0xDEB55440, 0x9F844F59, - 0x58120E16, 0x1923150F, 0xDA703824, 0x9B41233D, - 0xA76BFD65, 0xE65AE67C, 0x2509CB57, 0x6438D04E, - 0xA3AE9101, 0xE29F8A18, 0x21CCA733, 0x60FDBC2A, - 0xAFE124AD, 0xEED03FB4, 0x2D83129F, 0x6CB20986, - 0xAB2448C9, 0xEA1553D0, 0x29467EFB, 0x687765E2, - 0xF6793F2F, 0xB7482436, 0x741B091D, 0x352A1204, - 0xF2BC534B, 0xB38D4852, 0x70DE6579, 0x31EF7E60, - 0xFEF3E6E7, 0xBFC2FDFE, 0x7C91D0D5, 0x3DA0CBCC, - 0xFA368A83, 0xBB07919A, 0x7854BCB1, 0x3965A7A8, - 0x4B98833B, 0x0AA99822, 0xC9FAB509, 0x88CBAE10, - 0x4F5DEF5F, 0x0E6CF446, 0xCD3FD96D, 0x8C0EC274, - 0x43125AF3, 0x022341EA, 0xC1706CC1, 0x804177D8, - 0x47D73697, 0x06E62D8E, 0xC5B500A5, 0x84841BBC, - 0x1A8A4171, 0x5BBB5A68, 0x98E87743, 0xD9D96C5A, - 0x1E4F2D15, 0x5F7E360C, 0x9C2D1B27, 0xDD1C003E, - 0x120098B9, 0x533183A0, 0x9062AE8B, 0xD153B592, - 0x16C5F4DD, 0x57F4EFC4, 0x94A7C2EF, 0xD596D9F6, - 0xE9BC07AE, 0xA88D1CB7, 0x6BDE319C, 0x2AEF2A85, - 0xED796BCA, 0xAC4870D3, 0x6F1B5DF8, 0x2E2A46E1, - 0xE136DE66, 0xA007C57F, 0x6354E854, 0x2265F34D, - 0xE5F3B202, 0xA4C2A91B, 0x67918430, 0x26A09F29, - 0xB8AEC5E4, 0xF99FDEFD, 0x3ACCF3D6, 0x7BFDE8CF, - 0xBC6BA980, 0xFD5AB299, 0x3E099FB2, 0x7F3884AB, - 0xB0241C2C, 0xF1150735, 0x32462A1E, 0x73773107, - 0xB4E17048, 0xF5D06B51, 0x3683467A, 0x77B25D63, - 0x4ED7FACB, 0x0FE6E1D2, 0xCCB5CCF9, 0x8D84D7E0, - 0x4A1296AF, 0x0B238DB6, 0xC870A09D, 0x8941BB84, - 0x465D2303, 0x076C381A, 0xC43F1531, 0x850E0E28, - 0x42984F67, 0x03A9547E, 0xC0FA7955, 0x81CB624C, - 0x1FC53881, 0x5EF42398, 0x9DA70EB3, 0xDC9615AA, - 0x1B0054E5, 0x5A314FFC, 0x996262D7, 0xD85379CE, - 0x174FE149, 0x567EFA50, 0x952DD77B, 0xD41CCC62, - 0x138A8D2D, 0x52BB9634, 0x91E8BB1F, 0xD0D9A006, - 0xECF37E5E, 0xADC26547, 0x6E91486C, 0x2FA05375, - 0xE836123A, 0xA9070923, 0x6A542408, 0x2B653F11, - 0xE479A796, 0xA548BC8F, 0x661B91A4, 0x272A8ABD, - 0xE0BCCBF2, 0xA18DD0EB, 0x62DEFDC0, 0x23EFE6D9, - 0xBDE1BC14, 0xFCD0A70D, 0x3F838A26, 0x7EB2913F, - 0xB924D070, 0xF815CB69, 0x3B46E642, 0x7A77FD5B, - 0xB56B65DC, 0xF45A7EC5, 0x370953EE, 0x763848F7, - 0xB1AE09B8, 0xF09F12A1, 0x33CC3F8A, 0x72FD2493 - }, { - 0x00000000, 0x376AC201, 0x6ED48403, 0x59BE4602, - 0xDCA80907, 0xEBC2CB06, 0xB27C8D04, 0x85164F05, - 0xB851130E, 0x8F3BD10F, 0xD685970D, 0xE1EF550C, - 0x64F91A09, 0x5393D808, 0x0A2D9E0A, 0x3D475C0B, - 0x70A3261C, 0x47C9E41D, 0x1E77A21F, 0x291D601E, - 0xAC0B2F1B, 0x9B61ED1A, 0xC2DFAB18, 0xF5B56919, - 0xC8F23512, 0xFF98F713, 0xA626B111, 0x914C7310, - 0x145A3C15, 0x2330FE14, 0x7A8EB816, 0x4DE47A17, - 0xE0464D38, 0xD72C8F39, 0x8E92C93B, 0xB9F80B3A, - 0x3CEE443F, 0x0B84863E, 0x523AC03C, 0x6550023D, - 0x58175E36, 0x6F7D9C37, 0x36C3DA35, 0x01A91834, - 0x84BF5731, 0xB3D59530, 0xEA6BD332, 0xDD011133, - 0x90E56B24, 0xA78FA925, 0xFE31EF27, 0xC95B2D26, - 0x4C4D6223, 0x7B27A022, 0x2299E620, 0x15F32421, - 0x28B4782A, 0x1FDEBA2B, 0x4660FC29, 0x710A3E28, - 0xF41C712D, 0xC376B32C, 0x9AC8F52E, 0xADA2372F, - 0xC08D9A70, 0xF7E75871, 0xAE591E73, 0x9933DC72, - 0x1C259377, 0x2B4F5176, 0x72F11774, 0x459BD575, - 0x78DC897E, 0x4FB64B7F, 0x16080D7D, 0x2162CF7C, - 0xA4748079, 0x931E4278, 0xCAA0047A, 0xFDCAC67B, - 0xB02EBC6C, 0x87447E6D, 0xDEFA386F, 0xE990FA6E, - 0x6C86B56B, 0x5BEC776A, 0x02523168, 0x3538F369, - 0x087FAF62, 0x3F156D63, 0x66AB2B61, 0x51C1E960, - 0xD4D7A665, 0xE3BD6464, 0xBA032266, 0x8D69E067, - 0x20CBD748, 0x17A11549, 0x4E1F534B, 0x7975914A, - 0xFC63DE4F, 0xCB091C4E, 0x92B75A4C, 0xA5DD984D, - 0x989AC446, 0xAFF00647, 0xF64E4045, 0xC1248244, - 0x4432CD41, 0x73580F40, 0x2AE64942, 0x1D8C8B43, - 0x5068F154, 0x67023355, 0x3EBC7557, 0x09D6B756, - 0x8CC0F853, 0xBBAA3A52, 0xE2147C50, 0xD57EBE51, - 0xE839E25A, 0xDF53205B, 0x86ED6659, 0xB187A458, - 0x3491EB5D, 0x03FB295C, 0x5A456F5E, 0x6D2FAD5F, - 0x801B35E1, 0xB771F7E0, 0xEECFB1E2, 0xD9A573E3, - 0x5CB33CE6, 0x6BD9FEE7, 0x3267B8E5, 0x050D7AE4, - 0x384A26EF, 0x0F20E4EE, 0x569EA2EC, 0x61F460ED, - 0xE4E22FE8, 0xD388EDE9, 0x8A36ABEB, 0xBD5C69EA, - 0xF0B813FD, 0xC7D2D1FC, 0x9E6C97FE, 0xA90655FF, - 0x2C101AFA, 0x1B7AD8FB, 0x42C49EF9, 0x75AE5CF8, - 0x48E900F3, 0x7F83C2F2, 0x263D84F0, 0x115746F1, - 0x944109F4, 0xA32BCBF5, 0xFA958DF7, 0xCDFF4FF6, - 0x605D78D9, 0x5737BAD8, 0x0E89FCDA, 0x39E33EDB, - 0xBCF571DE, 0x8B9FB3DF, 0xD221F5DD, 0xE54B37DC, - 0xD80C6BD7, 0xEF66A9D6, 0xB6D8EFD4, 0x81B22DD5, - 0x04A462D0, 0x33CEA0D1, 0x6A70E6D3, 0x5D1A24D2, - 0x10FE5EC5, 0x27949CC4, 0x7E2ADAC6, 0x494018C7, - 0xCC5657C2, 0xFB3C95C3, 0xA282D3C1, 0x95E811C0, - 0xA8AF4DCB, 0x9FC58FCA, 0xC67BC9C8, 0xF1110BC9, - 0x740744CC, 0x436D86CD, 0x1AD3C0CF, 0x2DB902CE, - 0x4096AF91, 0x77FC6D90, 0x2E422B92, 0x1928E993, - 0x9C3EA696, 0xAB546497, 0xF2EA2295, 0xC580E094, - 0xF8C7BC9F, 0xCFAD7E9E, 0x9613389C, 0xA179FA9D, - 0x246FB598, 0x13057799, 0x4ABB319B, 0x7DD1F39A, - 0x3035898D, 0x075F4B8C, 0x5EE10D8E, 0x698BCF8F, - 0xEC9D808A, 0xDBF7428B, 0x82490489, 0xB523C688, - 0x88649A83, 0xBF0E5882, 0xE6B01E80, 0xD1DADC81, - 0x54CC9384, 0x63A65185, 0x3A181787, 0x0D72D586, - 0xA0D0E2A9, 0x97BA20A8, 0xCE0466AA, 0xF96EA4AB, - 0x7C78EBAE, 0x4B1229AF, 0x12AC6FAD, 0x25C6ADAC, - 0x1881F1A7, 0x2FEB33A6, 0x765575A4, 0x413FB7A5, - 0xC429F8A0, 0xF3433AA1, 0xAAFD7CA3, 0x9D97BEA2, - 0xD073C4B5, 0xE71906B4, 0xBEA740B6, 0x89CD82B7, - 0x0CDBCDB2, 0x3BB10FB3, 0x620F49B1, 0x55658BB0, - 0x6822D7BB, 0x5F4815BA, 0x06F653B8, 0x319C91B9, - 0xB48ADEBC, 0x83E01CBD, 0xDA5E5ABF, 0xED3498BE - }, { - 0x00000000, 0x6567BCB8, 0x8BC809AA, 0xEEAFB512, - 0x5797628F, 0x32F0DE37, 0xDC5F6B25, 0xB938D79D, - 0xEF28B4C5, 0x8A4F087D, 0x64E0BD6F, 0x018701D7, - 0xB8BFD64A, 0xDDD86AF2, 0x3377DFE0, 0x56106358, - 0x9F571950, 0xFA30A5E8, 0x149F10FA, 0x71F8AC42, - 0xC8C07BDF, 0xADA7C767, 0x43087275, 0x266FCECD, - 0x707FAD95, 0x1518112D, 0xFBB7A43F, 0x9ED01887, - 0x27E8CF1A, 0x428F73A2, 0xAC20C6B0, 0xC9477A08, - 0x3EAF32A0, 0x5BC88E18, 0xB5673B0A, 0xD00087B2, - 0x6938502F, 0x0C5FEC97, 0xE2F05985, 0x8797E53D, - 0xD1878665, 0xB4E03ADD, 0x5A4F8FCF, 0x3F283377, - 0x8610E4EA, 0xE3775852, 0x0DD8ED40, 0x68BF51F8, - 0xA1F82BF0, 0xC49F9748, 0x2A30225A, 0x4F579EE2, - 0xF66F497F, 0x9308F5C7, 0x7DA740D5, 0x18C0FC6D, - 0x4ED09F35, 0x2BB7238D, 0xC518969F, 0xA07F2A27, - 0x1947FDBA, 0x7C204102, 0x928FF410, 0xF7E848A8, - 0x3D58149B, 0x583FA823, 0xB6901D31, 0xD3F7A189, - 0x6ACF7614, 0x0FA8CAAC, 0xE1077FBE, 0x8460C306, - 0xD270A05E, 0xB7171CE6, 0x59B8A9F4, 0x3CDF154C, - 0x85E7C2D1, 0xE0807E69, 0x0E2FCB7B, 0x6B4877C3, - 0xA20F0DCB, 0xC768B173, 0x29C70461, 0x4CA0B8D9, - 0xF5986F44, 0x90FFD3FC, 0x7E5066EE, 0x1B37DA56, - 0x4D27B90E, 0x284005B6, 0xC6EFB0A4, 0xA3880C1C, - 0x1AB0DB81, 0x7FD76739, 0x9178D22B, 0xF41F6E93, - 0x03F7263B, 0x66909A83, 0x883F2F91, 0xED589329, - 0x546044B4, 0x3107F80C, 0xDFA84D1E, 0xBACFF1A6, - 0xECDF92FE, 0x89B82E46, 0x67179B54, 0x027027EC, - 0xBB48F071, 0xDE2F4CC9, 0x3080F9DB, 0x55E74563, - 0x9CA03F6B, 0xF9C783D3, 0x176836C1, 0x720F8A79, - 0xCB375DE4, 0xAE50E15C, 0x40FF544E, 0x2598E8F6, - 0x73888BAE, 0x16EF3716, 0xF8408204, 0x9D273EBC, - 0x241FE921, 0x41785599, 0xAFD7E08B, 0xCAB05C33, - 0x3BB659ED, 0x5ED1E555, 0xB07E5047, 0xD519ECFF, - 0x6C213B62, 0x094687DA, 0xE7E932C8, 0x828E8E70, - 0xD49EED28, 0xB1F95190, 0x5F56E482, 0x3A31583A, - 0x83098FA7, 0xE66E331F, 0x08C1860D, 0x6DA63AB5, - 0xA4E140BD, 0xC186FC05, 0x2F294917, 0x4A4EF5AF, - 0xF3762232, 0x96119E8A, 0x78BE2B98, 0x1DD99720, - 0x4BC9F478, 0x2EAE48C0, 0xC001FDD2, 0xA566416A, - 0x1C5E96F7, 0x79392A4F, 0x97969F5D, 0xF2F123E5, - 0x05196B4D, 0x607ED7F5, 0x8ED162E7, 0xEBB6DE5F, - 0x528E09C2, 0x37E9B57A, 0xD9460068, 0xBC21BCD0, - 0xEA31DF88, 0x8F566330, 0x61F9D622, 0x049E6A9A, - 0xBDA6BD07, 0xD8C101BF, 0x366EB4AD, 0x53090815, - 0x9A4E721D, 0xFF29CEA5, 0x11867BB7, 0x74E1C70F, - 0xCDD91092, 0xA8BEAC2A, 0x46111938, 0x2376A580, - 0x7566C6D8, 0x10017A60, 0xFEAECF72, 0x9BC973CA, - 0x22F1A457, 0x479618EF, 0xA939ADFD, 0xCC5E1145, - 0x06EE4D76, 0x6389F1CE, 0x8D2644DC, 0xE841F864, - 0x51792FF9, 0x341E9341, 0xDAB12653, 0xBFD69AEB, - 0xE9C6F9B3, 0x8CA1450B, 0x620EF019, 0x07694CA1, - 0xBE519B3C, 0xDB362784, 0x35999296, 0x50FE2E2E, - 0x99B95426, 0xFCDEE89E, 0x12715D8C, 0x7716E134, - 0xCE2E36A9, 0xAB498A11, 0x45E63F03, 0x208183BB, - 0x7691E0E3, 0x13F65C5B, 0xFD59E949, 0x983E55F1, - 0x2106826C, 0x44613ED4, 0xAACE8BC6, 0xCFA9377E, - 0x38417FD6, 0x5D26C36E, 0xB389767C, 0xD6EECAC4, - 0x6FD61D59, 0x0AB1A1E1, 0xE41E14F3, 0x8179A84B, - 0xD769CB13, 0xB20E77AB, 0x5CA1C2B9, 0x39C67E01, - 0x80FEA99C, 0xE5991524, 0x0B36A036, 0x6E511C8E, - 0xA7166686, 0xC271DA3E, 0x2CDE6F2C, 0x49B9D394, - 0xF0810409, 0x95E6B8B1, 0x7B490DA3, 0x1E2EB11B, - 0x483ED243, 0x2D596EFB, 0xC3F6DBE9, 0xA6916751, - 0x1FA9B0CC, 0x7ACE0C74, 0x9461B966, 0xF10605DE - }, { - 0x00000000, 0xB029603D, 0x6053C07A, 0xD07AA047, - 0xC0A680F5, 0x708FE0C8, 0xA0F5408F, 0x10DC20B2, - 0xC14B7030, 0x7162100D, 0xA118B04A, 0x1131D077, - 0x01EDF0C5, 0xB1C490F8, 0x61BE30BF, 0xD1975082, - 0x8297E060, 0x32BE805D, 0xE2C4201A, 0x52ED4027, - 0x42316095, 0xF21800A8, 0x2262A0EF, 0x924BC0D2, - 0x43DC9050, 0xF3F5F06D, 0x238F502A, 0x93A63017, - 0x837A10A5, 0x33537098, 0xE329D0DF, 0x5300B0E2, - 0x042FC1C1, 0xB406A1FC, 0x647C01BB, 0xD4556186, - 0xC4894134, 0x74A02109, 0xA4DA814E, 0x14F3E173, - 0xC564B1F1, 0x754DD1CC, 0xA537718B, 0x151E11B6, - 0x05C23104, 0xB5EB5139, 0x6591F17E, 0xD5B89143, - 0x86B821A1, 0x3691419C, 0xE6EBE1DB, 0x56C281E6, - 0x461EA154, 0xF637C169, 0x264D612E, 0x96640113, - 0x47F35191, 0xF7DA31AC, 0x27A091EB, 0x9789F1D6, - 0x8755D164, 0x377CB159, 0xE706111E, 0x572F7123, - 0x4958F358, 0xF9719365, 0x290B3322, 0x9922531F, - 0x89FE73AD, 0x39D71390, 0xE9ADB3D7, 0x5984D3EA, - 0x88138368, 0x383AE355, 0xE8404312, 0x5869232F, - 0x48B5039D, 0xF89C63A0, 0x28E6C3E7, 0x98CFA3DA, - 0xCBCF1338, 0x7BE67305, 0xAB9CD342, 0x1BB5B37F, - 0x0B6993CD, 0xBB40F3F0, 0x6B3A53B7, 0xDB13338A, - 0x0A846308, 0xBAAD0335, 0x6AD7A372, 0xDAFEC34F, - 0xCA22E3FD, 0x7A0B83C0, 0xAA712387, 0x1A5843BA, - 0x4D773299, 0xFD5E52A4, 0x2D24F2E3, 0x9D0D92DE, - 0x8DD1B26C, 0x3DF8D251, 0xED827216, 0x5DAB122B, - 0x8C3C42A9, 0x3C152294, 0xEC6F82D3, 0x5C46E2EE, - 0x4C9AC25C, 0xFCB3A261, 0x2CC90226, 0x9CE0621B, - 0xCFE0D2F9, 0x7FC9B2C4, 0xAFB31283, 0x1F9A72BE, - 0x0F46520C, 0xBF6F3231, 0x6F159276, 0xDF3CF24B, - 0x0EABA2C9, 0xBE82C2F4, 0x6EF862B3, 0xDED1028E, - 0xCE0D223C, 0x7E244201, 0xAE5EE246, 0x1E77827B, - 0x92B0E6B1, 0x2299868C, 0xF2E326CB, 0x42CA46F6, - 0x52166644, 0xE23F0679, 0x3245A63E, 0x826CC603, - 0x53FB9681, 0xE3D2F6BC, 0x33A856FB, 0x838136C6, - 0x935D1674, 0x23747649, 0xF30ED60E, 0x4327B633, - 0x102706D1, 0xA00E66EC, 0x7074C6AB, 0xC05DA696, - 0xD0818624, 0x60A8E619, 0xB0D2465E, 0x00FB2663, - 0xD16C76E1, 0x614516DC, 0xB13FB69B, 0x0116D6A6, - 0x11CAF614, 0xA1E39629, 0x7199366E, 0xC1B05653, - 0x969F2770, 0x26B6474D, 0xF6CCE70A, 0x46E58737, - 0x5639A785, 0xE610C7B8, 0x366A67FF, 0x864307C2, - 0x57D45740, 0xE7FD377D, 0x3787973A, 0x87AEF707, - 0x9772D7B5, 0x275BB788, 0xF72117CF, 0x470877F2, - 0x1408C710, 0xA421A72D, 0x745B076A, 0xC4726757, - 0xD4AE47E5, 0x648727D8, 0xB4FD879F, 0x04D4E7A2, - 0xD543B720, 0x656AD71D, 0xB510775A, 0x05391767, - 0x15E537D5, 0xA5CC57E8, 0x75B6F7AF, 0xC59F9792, - 0xDBE815E9, 0x6BC175D4, 0xBBBBD593, 0x0B92B5AE, - 0x1B4E951C, 0xAB67F521, 0x7B1D5566, 0xCB34355B, - 0x1AA365D9, 0xAA8A05E4, 0x7AF0A5A3, 0xCAD9C59E, - 0xDA05E52C, 0x6A2C8511, 0xBA562556, 0x0A7F456B, - 0x597FF589, 0xE95695B4, 0x392C35F3, 0x890555CE, - 0x99D9757C, 0x29F01541, 0xF98AB506, 0x49A3D53B, - 0x983485B9, 0x281DE584, 0xF86745C3, 0x484E25FE, - 0x5892054C, 0xE8BB6571, 0x38C1C536, 0x88E8A50B, - 0xDFC7D428, 0x6FEEB415, 0xBF941452, 0x0FBD746F, - 0x1F6154DD, 0xAF4834E0, 0x7F3294A7, 0xCF1BF49A, - 0x1E8CA418, 0xAEA5C425, 0x7EDF6462, 0xCEF6045F, - 0xDE2A24ED, 0x6E0344D0, 0xBE79E497, 0x0E5084AA, - 0x5D503448, 0xED795475, 0x3D03F432, 0x8D2A940F, - 0x9DF6B4BD, 0x2DDFD480, 0xFDA574C7, 0x4D8C14FA, - 0x9C1B4478, 0x2C322445, 0xFC488402, 0x4C61E43F, - 0x5CBDC48D, 0xEC94A4B0, 0x3CEE04F7, 0x8CC764CA - }, { - 0x00000000, 0xA5D35CCB, 0x0BA1C84D, 0xAE729486, - 0x1642919B, 0xB391CD50, 0x1DE359D6, 0xB830051D, - 0x6D8253EC, 0xC8510F27, 0x66239BA1, 0xC3F0C76A, - 0x7BC0C277, 0xDE139EBC, 0x70610A3A, 0xD5B256F1, - 0x9B02D603, 0x3ED18AC8, 0x90A31E4E, 0x35704285, - 0x8D404798, 0x28931B53, 0x86E18FD5, 0x2332D31E, - 0xF68085EF, 0x5353D924, 0xFD214DA2, 0x58F21169, - 0xE0C21474, 0x451148BF, 0xEB63DC39, 0x4EB080F2, - 0x3605AC07, 0x93D6F0CC, 0x3DA4644A, 0x98773881, - 0x20473D9C, 0x85946157, 0x2BE6F5D1, 0x8E35A91A, - 0x5B87FFEB, 0xFE54A320, 0x502637A6, 0xF5F56B6D, - 0x4DC56E70, 0xE81632BB, 0x4664A63D, 0xE3B7FAF6, - 0xAD077A04, 0x08D426CF, 0xA6A6B249, 0x0375EE82, - 0xBB45EB9F, 0x1E96B754, 0xB0E423D2, 0x15377F19, - 0xC08529E8, 0x65567523, 0xCB24E1A5, 0x6EF7BD6E, - 0xD6C7B873, 0x7314E4B8, 0xDD66703E, 0x78B52CF5, - 0x6C0A580F, 0xC9D904C4, 0x67AB9042, 0xC278CC89, - 0x7A48C994, 0xDF9B955F, 0x71E901D9, 0xD43A5D12, - 0x01880BE3, 0xA45B5728, 0x0A29C3AE, 0xAFFA9F65, - 0x17CA9A78, 0xB219C6B3, 0x1C6B5235, 0xB9B80EFE, - 0xF7088E0C, 0x52DBD2C7, 0xFCA94641, 0x597A1A8A, - 0xE14A1F97, 0x4499435C, 0xEAEBD7DA, 0x4F388B11, - 0x9A8ADDE0, 0x3F59812B, 0x912B15AD, 0x34F84966, - 0x8CC84C7B, 0x291B10B0, 0x87698436, 0x22BAD8FD, - 0x5A0FF408, 0xFFDCA8C3, 0x51AE3C45, 0xF47D608E, - 0x4C4D6593, 0xE99E3958, 0x47ECADDE, 0xE23FF115, - 0x378DA7E4, 0x925EFB2F, 0x3C2C6FA9, 0x99FF3362, - 0x21CF367F, 0x841C6AB4, 0x2A6EFE32, 0x8FBDA2F9, - 0xC10D220B, 0x64DE7EC0, 0xCAACEA46, 0x6F7FB68D, - 0xD74FB390, 0x729CEF5B, 0xDCEE7BDD, 0x793D2716, - 0xAC8F71E7, 0x095C2D2C, 0xA72EB9AA, 0x02FDE561, - 0xBACDE07C, 0x1F1EBCB7, 0xB16C2831, 0x14BF74FA, - 0xD814B01E, 0x7DC7ECD5, 0xD3B57853, 0x76662498, - 0xCE562185, 0x6B857D4E, 0xC5F7E9C8, 0x6024B503, - 0xB596E3F2, 0x1045BF39, 0xBE372BBF, 0x1BE47774, - 0xA3D47269, 0x06072EA2, 0xA875BA24, 0x0DA6E6EF, - 0x4316661D, 0xE6C53AD6, 0x48B7AE50, 0xED64F29B, - 0x5554F786, 0xF087AB4D, 0x5EF53FCB, 0xFB266300, - 0x2E9435F1, 0x8B47693A, 0x2535FDBC, 0x80E6A177, - 0x38D6A46A, 0x9D05F8A1, 0x33776C27, 0x96A430EC, - 0xEE111C19, 0x4BC240D2, 0xE5B0D454, 0x4063889F, - 0xF8538D82, 0x5D80D149, 0xF3F245CF, 0x56211904, - 0x83934FF5, 0x2640133E, 0x883287B8, 0x2DE1DB73, - 0x95D1DE6E, 0x300282A5, 0x9E701623, 0x3BA34AE8, - 0x7513CA1A, 0xD0C096D1, 0x7EB20257, 0xDB615E9C, - 0x63515B81, 0xC682074A, 0x68F093CC, 0xCD23CF07, - 0x189199F6, 0xBD42C53D, 0x133051BB, 0xB6E30D70, - 0x0ED3086D, 0xAB0054A6, 0x0572C020, 0xA0A19CEB, - 0xB41EE811, 0x11CDB4DA, 0xBFBF205C, 0x1A6C7C97, - 0xA25C798A, 0x078F2541, 0xA9FDB1C7, 0x0C2EED0C, - 0xD99CBBFD, 0x7C4FE736, 0xD23D73B0, 0x77EE2F7B, - 0xCFDE2A66, 0x6A0D76AD, 0xC47FE22B, 0x61ACBEE0, - 0x2F1C3E12, 0x8ACF62D9, 0x24BDF65F, 0x816EAA94, - 0x395EAF89, 0x9C8DF342, 0x32FF67C4, 0x972C3B0F, - 0x429E6DFE, 0xE74D3135, 0x493FA5B3, 0xECECF978, - 0x54DCFC65, 0xF10FA0AE, 0x5F7D3428, 0xFAAE68E3, - 0x821B4416, 0x27C818DD, 0x89BA8C5B, 0x2C69D090, - 0x9459D58D, 0x318A8946, 0x9FF81DC0, 0x3A2B410B, - 0xEF9917FA, 0x4A4A4B31, 0xE438DFB7, 0x41EB837C, - 0xF9DB8661, 0x5C08DAAA, 0xF27A4E2C, 0x57A912E7, - 0x19199215, 0xBCCACEDE, 0x12B85A58, 0xB76B0693, - 0x0F5B038E, 0xAA885F45, 0x04FACBC3, 0xA1299708, - 0x749BC1F9, 0xD1489D32, 0x7F3A09B4, 0xDAE9557F, - 0x62D95062, 0xC70A0CA9, 0x6978982F, 0xCCABC4E4 - }, { - 0x00000000, 0xB40B77A6, 0x29119F97, 0x9D1AE831, - 0x13244FF4, 0xA72F3852, 0x3A35D063, 0x8E3EA7C5, - 0x674EEF33, 0xD3459895, 0x4E5F70A4, 0xFA540702, - 0x746AA0C7, 0xC061D761, 0x5D7B3F50, 0xE97048F6, - 0xCE9CDE67, 0x7A97A9C1, 0xE78D41F0, 0x53863656, - 0xDDB89193, 0x69B3E635, 0xF4A90E04, 0x40A279A2, - 0xA9D23154, 0x1DD946F2, 0x80C3AEC3, 0x34C8D965, - 0xBAF67EA0, 0x0EFD0906, 0x93E7E137, 0x27EC9691, - 0x9C39BDCF, 0x2832CA69, 0xB5282258, 0x012355FE, - 0x8F1DF23B, 0x3B16859D, 0xA60C6DAC, 0x12071A0A, - 0xFB7752FC, 0x4F7C255A, 0xD266CD6B, 0x666DBACD, - 0xE8531D08, 0x5C586AAE, 0xC142829F, 0x7549F539, - 0x52A563A8, 0xE6AE140E, 0x7BB4FC3F, 0xCFBF8B99, - 0x41812C5C, 0xF58A5BFA, 0x6890B3CB, 0xDC9BC46D, - 0x35EB8C9B, 0x81E0FB3D, 0x1CFA130C, 0xA8F164AA, - 0x26CFC36F, 0x92C4B4C9, 0x0FDE5CF8, 0xBBD52B5E, - 0x79750B44, 0xCD7E7CE2, 0x506494D3, 0xE46FE375, - 0x6A5144B0, 0xDE5A3316, 0x4340DB27, 0xF74BAC81, - 0x1E3BE477, 0xAA3093D1, 0x372A7BE0, 0x83210C46, - 0x0D1FAB83, 0xB914DC25, 0x240E3414, 0x900543B2, - 0xB7E9D523, 0x03E2A285, 0x9EF84AB4, 0x2AF33D12, - 0xA4CD9AD7, 0x10C6ED71, 0x8DDC0540, 0x39D772E6, - 0xD0A73A10, 0x64AC4DB6, 0xF9B6A587, 0x4DBDD221, - 0xC38375E4, 0x77880242, 0xEA92EA73, 0x5E999DD5, - 0xE54CB68B, 0x5147C12D, 0xCC5D291C, 0x78565EBA, - 0xF668F97F, 0x42638ED9, 0xDF7966E8, 0x6B72114E, - 0x820259B8, 0x36092E1E, 0xAB13C62F, 0x1F18B189, - 0x9126164C, 0x252D61EA, 0xB83789DB, 0x0C3CFE7D, - 0x2BD068EC, 0x9FDB1F4A, 0x02C1F77B, 0xB6CA80DD, - 0x38F42718, 0x8CFF50BE, 0x11E5B88F, 0xA5EECF29, - 0x4C9E87DF, 0xF895F079, 0x658F1848, 0xD1846FEE, - 0x5FBAC82B, 0xEBB1BF8D, 0x76AB57BC, 0xC2A0201A, - 0xF2EA1688, 0x46E1612E, 0xDBFB891F, 0x6FF0FEB9, - 0xE1CE597C, 0x55C52EDA, 0xC8DFC6EB, 0x7CD4B14D, - 0x95A4F9BB, 0x21AF8E1D, 0xBCB5662C, 0x08BE118A, - 0x8680B64F, 0x328BC1E9, 0xAF9129D8, 0x1B9A5E7E, - 0x3C76C8EF, 0x887DBF49, 0x15675778, 0xA16C20DE, - 0x2F52871B, 0x9B59F0BD, 0x0643188C, 0xB2486F2A, - 0x5B3827DC, 0xEF33507A, 0x7229B84B, 0xC622CFED, - 0x481C6828, 0xFC171F8E, 0x610DF7BF, 0xD5068019, - 0x6ED3AB47, 0xDAD8DCE1, 0x47C234D0, 0xF3C94376, - 0x7DF7E4B3, 0xC9FC9315, 0x54E67B24, 0xE0ED0C82, - 0x099D4474, 0xBD9633D2, 0x208CDBE3, 0x9487AC45, - 0x1AB90B80, 0xAEB27C26, 0x33A89417, 0x87A3E3B1, - 0xA04F7520, 0x14440286, 0x895EEAB7, 0x3D559D11, - 0xB36B3AD4, 0x07604D72, 0x9A7AA543, 0x2E71D2E5, - 0xC7019A13, 0x730AEDB5, 0xEE100584, 0x5A1B7222, - 0xD425D5E7, 0x602EA241, 0xFD344A70, 0x493F3DD6, - 0x8B9F1DCC, 0x3F946A6A, 0xA28E825B, 0x1685F5FD, - 0x98BB5238, 0x2CB0259E, 0xB1AACDAF, 0x05A1BA09, - 0xECD1F2FF, 0x58DA8559, 0xC5C06D68, 0x71CB1ACE, - 0xFFF5BD0B, 0x4BFECAAD, 0xD6E4229C, 0x62EF553A, - 0x4503C3AB, 0xF108B40D, 0x6C125C3C, 0xD8192B9A, - 0x56278C5F, 0xE22CFBF9, 0x7F3613C8, 0xCB3D646E, - 0x224D2C98, 0x96465B3E, 0x0B5CB30F, 0xBF57C4A9, - 0x3169636C, 0x856214CA, 0x1878FCFB, 0xAC738B5D, - 0x17A6A003, 0xA3ADD7A5, 0x3EB73F94, 0x8ABC4832, - 0x0482EFF7, 0xB0899851, 0x2D937060, 0x999807C6, - 0x70E84F30, 0xC4E33896, 0x59F9D0A7, 0xEDF2A701, - 0x63CC00C4, 0xD7C77762, 0x4ADD9F53, 0xFED6E8F5, - 0xD93A7E64, 0x6D3109C2, 0xF02BE1F3, 0x44209655, - 0xCA1E3190, 0x7E154636, 0xE30FAE07, 0x5704D9A1, - 0xBE749157, 0x0A7FE6F1, 0x97650EC0, 0x236E7966, - 0xAD50DEA3, 0x195BA905, 0x84414134, 0x304A3692 - }, { - 0x00000000, 0x9E00AACC, 0x7D072542, 0xE3078F8E, - 0xFA0E4A84, 0x640EE048, 0x87096FC6, 0x1909C50A, - 0xB51BE5D3, 0x2B1B4F1F, 0xC81CC091, 0x561C6A5D, - 0x4F15AF57, 0xD115059B, 0x32128A15, 0xAC1220D9, - 0x2B31BB7C, 0xB53111B0, 0x56369E3E, 0xC83634F2, - 0xD13FF1F8, 0x4F3F5B34, 0xAC38D4BA, 0x32387E76, - 0x9E2A5EAF, 0x002AF463, 0xE32D7BED, 0x7D2DD121, - 0x6424142B, 0xFA24BEE7, 0x19233169, 0x87239BA5, - 0x566276F9, 0xC862DC35, 0x2B6553BB, 0xB565F977, - 0xAC6C3C7D, 0x326C96B1, 0xD16B193F, 0x4F6BB3F3, - 0xE379932A, 0x7D7939E6, 0x9E7EB668, 0x007E1CA4, - 0x1977D9AE, 0x87777362, 0x6470FCEC, 0xFA705620, - 0x7D53CD85, 0xE3536749, 0x0054E8C7, 0x9E54420B, - 0x875D8701, 0x195D2DCD, 0xFA5AA243, 0x645A088F, - 0xC8482856, 0x5648829A, 0xB54F0D14, 0x2B4FA7D8, - 0x324662D2, 0xAC46C81E, 0x4F414790, 0xD141ED5C, - 0xEDC29D29, 0x73C237E5, 0x90C5B86B, 0x0EC512A7, - 0x17CCD7AD, 0x89CC7D61, 0x6ACBF2EF, 0xF4CB5823, - 0x58D978FA, 0xC6D9D236, 0x25DE5DB8, 0xBBDEF774, - 0xA2D7327E, 0x3CD798B2, 0xDFD0173C, 0x41D0BDF0, - 0xC6F32655, 0x58F38C99, 0xBBF40317, 0x25F4A9DB, - 0x3CFD6CD1, 0xA2FDC61D, 0x41FA4993, 0xDFFAE35F, - 0x73E8C386, 0xEDE8694A, 0x0EEFE6C4, 0x90EF4C08, - 0x89E68902, 0x17E623CE, 0xF4E1AC40, 0x6AE1068C, - 0xBBA0EBD0, 0x25A0411C, 0xC6A7CE92, 0x58A7645E, - 0x41AEA154, 0xDFAE0B98, 0x3CA98416, 0xA2A92EDA, - 0x0EBB0E03, 0x90BBA4CF, 0x73BC2B41, 0xEDBC818D, - 0xF4B54487, 0x6AB5EE4B, 0x89B261C5, 0x17B2CB09, - 0x909150AC, 0x0E91FA60, 0xED9675EE, 0x7396DF22, - 0x6A9F1A28, 0xF49FB0E4, 0x17983F6A, 0x899895A6, - 0x258AB57F, 0xBB8A1FB3, 0x588D903D, 0xC68D3AF1, - 0xDF84FFFB, 0x41845537, 0xA283DAB9, 0x3C837075, - 0xDA853B53, 0x4485919F, 0xA7821E11, 0x3982B4DD, - 0x208B71D7, 0xBE8BDB1B, 0x5D8C5495, 0xC38CFE59, - 0x6F9EDE80, 0xF19E744C, 0x1299FBC2, 0x8C99510E, - 0x95909404, 0x0B903EC8, 0xE897B146, 0x76971B8A, - 0xF1B4802F, 0x6FB42AE3, 0x8CB3A56D, 0x12B30FA1, - 0x0BBACAAB, 0x95BA6067, 0x76BDEFE9, 0xE8BD4525, - 0x44AF65FC, 0xDAAFCF30, 0x39A840BE, 0xA7A8EA72, - 0xBEA12F78, 0x20A185B4, 0xC3A60A3A, 0x5DA6A0F6, - 0x8CE74DAA, 0x12E7E766, 0xF1E068E8, 0x6FE0C224, - 0x76E9072E, 0xE8E9ADE2, 0x0BEE226C, 0x95EE88A0, - 0x39FCA879, 0xA7FC02B5, 0x44FB8D3B, 0xDAFB27F7, - 0xC3F2E2FD, 0x5DF24831, 0xBEF5C7BF, 0x20F56D73, - 0xA7D6F6D6, 0x39D65C1A, 0xDAD1D394, 0x44D17958, - 0x5DD8BC52, 0xC3D8169E, 0x20DF9910, 0xBEDF33DC, - 0x12CD1305, 0x8CCDB9C9, 0x6FCA3647, 0xF1CA9C8B, - 0xE8C35981, 0x76C3F34D, 0x95C47CC3, 0x0BC4D60F, - 0x3747A67A, 0xA9470CB6, 0x4A408338, 0xD44029F4, - 0xCD49ECFE, 0x53494632, 0xB04EC9BC, 0x2E4E6370, - 0x825C43A9, 0x1C5CE965, 0xFF5B66EB, 0x615BCC27, - 0x7852092D, 0xE652A3E1, 0x05552C6F, 0x9B5586A3, - 0x1C761D06, 0x8276B7CA, 0x61713844, 0xFF719288, - 0xE6785782, 0x7878FD4E, 0x9B7F72C0, 0x057FD80C, - 0xA96DF8D5, 0x376D5219, 0xD46ADD97, 0x4A6A775B, - 0x5363B251, 0xCD63189D, 0x2E649713, 0xB0643DDF, - 0x6125D083, 0xFF257A4F, 0x1C22F5C1, 0x82225F0D, - 0x9B2B9A07, 0x052B30CB, 0xE62CBF45, 0x782C1589, - 0xD43E3550, 0x4A3E9F9C, 0xA9391012, 0x3739BADE, - 0x2E307FD4, 0xB030D518, 0x53375A96, 0xCD37F05A, - 0x4A146BFF, 0xD414C133, 0x37134EBD, 0xA913E471, - 0xB01A217B, 0x2E1A8BB7, 0xCD1D0439, 0x531DAEF5, - 0xFF0F8E2C, 0x610F24E0, 0x8208AB6E, 0x1C0801A2, - 0x0501C4A8, 0x9B016E64, 0x7806E1EA, 0xE6064B26 - } -}; diff --git a/deps/lzma/liblzma/check/crc32_table_le.h b/deps/lzma/liblzma/check/crc32_table_le.h deleted file mode 100644 index 25f4fc44353746..00000000000000 --- a/deps/lzma/liblzma/check/crc32_table_le.h +++ /dev/null @@ -1,525 +0,0 @@ -/* This file has been automatically generated by crc32_tablegen.c. */ - -const uint32_t lzma_crc32_table[8][256] = { - { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, - 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, - 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, - 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, - 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, - 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, - 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, - 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, - 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, - 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, - 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, - 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, - 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, - 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, - 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, - 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, - 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, - 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, - 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, - 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, - 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, - 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, - 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, - 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, - 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D - }, { - 0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, - 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, - 0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, - 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, - 0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, - 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, - 0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, - 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, - 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, - 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, - 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, - 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D, - 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, - 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034, - 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, - 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C, - 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, - 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2, - 0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, - 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, - 0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, - 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, - 0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, - 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, - 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, - 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, - 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, - 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, - 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, - 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31, - 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, - 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539, - 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, - 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C, - 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, - 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484, - 0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, - 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, - 0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, - 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, - 0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, - 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, - 0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, - 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, - 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, - 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, - 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, - 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277, - 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, - 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189, - 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, - 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81, - 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, - 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8, - 0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, - 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, - 0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, - 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, - 0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, - 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, - 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, - 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, - 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, - 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72 - }, { - 0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, - 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, - 0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, - 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, - 0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, - 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, - 0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, - 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, - 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, - 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, - 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, - 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD, - 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, - 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315, - 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, - 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD, - 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, - 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45, - 0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, - 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, - 0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, - 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, - 0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, - 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, - 0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, - 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, - 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, - 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, - 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, - 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5, - 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, - 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D, - 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, - 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05, - 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, - 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD, - 0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, - 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, - 0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, - 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, - 0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, - 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, - 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, - 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, - 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, - 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, - 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, - 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D, - 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, - 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5, - 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, - 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D, - 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, - 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5, - 0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, - 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, - 0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, - 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, - 0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, - 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, - 0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, - 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, - 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, - 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED - }, { - 0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, - 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, - 0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, - 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, - 0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, - 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, - 0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, - 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, - 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, - 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, - 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, - 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68, - 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, - 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018, - 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, - 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7, - 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, - 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084, - 0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, - 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, - 0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, - 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, - 0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, - 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, - 0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, - 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, - 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, - 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, - 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, - 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825, - 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, - 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA, - 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, - 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82, - 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, - 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D, - 0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, - 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, - 0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, - 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, - 0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, - 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, - 0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, - 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, - 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, - 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, - 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, - 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC, - 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, - 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF, - 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, - 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50, - 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, - 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120, - 0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, - 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, - 0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, - 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, - 0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, - 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, - 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, - 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, - 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, - 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1 - }, { - 0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, - 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, - 0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, - 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, - 0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, - 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, - 0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, - 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, - 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, - 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, - 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, - 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5, - 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, - 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496, - 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, - 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57, - 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, - 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459, - 0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, - 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, - 0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, - 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, - 0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, - 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, - 0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, - 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, - 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, - 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, - 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, - 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF, - 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, - 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E, - 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, - 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82, - 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, - 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743, - 0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, - 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, - 0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, - 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, - 0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, - 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, - 0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, - 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, - 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, - 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, - 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, - 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5, - 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, - 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB, - 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, - 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A, - 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, - 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349, - 0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, - 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, - 0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, - 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, - 0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, - 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, - 0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, - 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, - 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, - 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C - }, { - 0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, - 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, - 0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, - 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, - 0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, - 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, - 0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, - 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, - 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, - 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, - 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, - 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, - 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, - 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715, - 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, - 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578, - 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, - 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4, - 0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, - 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, - 0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, - 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, - 0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, - 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, - 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, - 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, - 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, - 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, - 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, - 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, - 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, - 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14, - 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, - 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460, - 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, - 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D, - 0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, - 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, - 0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, - 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, - 0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, - 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, - 0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, - 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, - 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, - 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, - 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, - 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0, - 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, - 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C, - 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, - 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61, - 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, - 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97, - 0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, - 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, - 0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, - 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, - 0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, - 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, - 0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, - 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, - 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, - 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC - }, { - 0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, - 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, - 0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, - 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, - 0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, - 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, - 0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, - 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, - 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, - 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, - 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, - 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975, - 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, - 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC, - 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, - 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB, - 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, - 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7, - 0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, - 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, - 0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, - 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, - 0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, - 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, - 0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, - 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, - 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, - 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, - 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, - 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, - 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, - 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2, - 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, - 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C, - 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, - 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B, - 0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, - 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, - 0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, - 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, - 0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, - 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, - 0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, - 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, - 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, - 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, - 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, - 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49, - 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, - 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105, - 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, - 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62, - 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, - 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB, - 0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, - 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, - 0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, - 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, - 0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, - 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, - 0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, - 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, - 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, - 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30 - }, { - 0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, - 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, - 0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, - 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, - 0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, - 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, - 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, - 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, - 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, - 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, - 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, - 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA, - 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, - 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64, - 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, - 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1, - 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, - 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4, - 0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, - 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, - 0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, - 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, - 0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, - 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, - 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, - 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, - 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, - 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, - 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, - 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889, - 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, - 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C, - 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, - 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3, - 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, - 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776, - 0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, - 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, - 0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, - 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, - 0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, - 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, - 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, - 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, - 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, - 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, - 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, - 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B, - 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, - 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E, - 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, - 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B, - 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, - 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05, - 0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, - 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, - 0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, - 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, - 0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, - 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, - 0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, - 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, - 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, - 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6 - } -}; diff --git a/deps/lzma/liblzma/check/crc32_tablegen.c b/deps/lzma/liblzma/check/crc32_tablegen.c deleted file mode 100644 index 31a4d2751db297..00000000000000 --- a/deps/lzma/liblzma/check/crc32_tablegen.c +++ /dev/null @@ -1,117 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc32_tablegen.c -/// \brief Generate crc32_table_le.h and crc32_table_be.h -/// -/// Compiling: gcc -std=c99 -o crc32_tablegen crc32_tablegen.c -/// Add -DWORDS_BIGENDIAN to generate big endian table. -/// Add -DLZ_HASH_TABLE to generate lz_encoder_hash_table.h (little endian). -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include "../../common/tuklib_integer.h" - - -static uint32_t crc32_table[8][256]; - - -static void -init_crc32_table(void) -{ - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint32_t r = s == 0 ? b : crc32_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - crc32_table[s][b] = r; - } - } - -#ifdef WORDS_BIGENDIAN - for (size_t s = 0; s < 8; ++s) - for (size_t b = 0; b < 256; ++b) - crc32_table[s][b] = bswap32(crc32_table[s][b]); -#endif - - return; -} - - -static void -print_crc32_table(void) -{ - printf("/* This file has been automatically generated by " - "crc32_tablegen.c. */\n\n" - "const uint32_t lzma_crc32_table[8][256] = {\n\t{"); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - if ((b % 4) == 0) - printf("\n\t\t"); - - printf("0x%08" PRIX32, crc32_table[s][b]); - - if (b != 255) - printf(",%s", (b+1) % 4 == 0 ? "" : " "); - } - - if (s == 7) - printf("\n\t}\n};\n"); - else - printf("\n\t}, {"); - } - - return; -} - - -static void -print_lz_table(void) -{ - printf("/* This file has been automatically generated by " - "crc32_tablegen.c. */\n\n" - "const uint32_t lzma_lz_hash_table[256] = {"); - - for (size_t b = 0; b < 256; ++b) { - if ((b % 4) == 0) - printf("\n\t"); - - printf("0x%08" PRIX32, crc32_table[0][b]); - - if (b != 255) - printf(",%s", (b+1) % 4 == 0 ? "" : " "); - } - - printf("\n};\n"); - - return; -} - - -int -main(void) -{ - init_crc32_table(); - -#ifdef LZ_HASH_TABLE - print_lz_table(); -#else - print_crc32_table(); -#endif - - return 0; -} diff --git a/deps/lzma/liblzma/check/crc32_x86.S b/deps/lzma/liblzma/check/crc32_x86.S deleted file mode 100644 index 1ef7f7e37ae933..00000000000000 --- a/deps/lzma/liblzma/check/crc32_x86.S +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Speed-optimized CRC32 using slicing-by-eight algorithm - * - * This uses only i386 instructions, but it is optimized for i686 and later - * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). For i586 - * (e.g. Pentium), slicing-by-four would be better, and even the C version - * of slicing-by-eight built with gcc -march=i586 tends to be a little bit - * better than this. Very few probably run this code on i586 or older x86 - * so this shouldn't be a problem in practice. - * - * Authors: Igor Pavlov (original version) - * Lasse Collin (AT&T syntax, PIC support, better portability) - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * This code needs lzma_crc32_table, which can be created using the - * following C code: - -uint32_t lzma_crc32_table[8][256]; - -void -init_table(void) -{ - // IEEE-802.3 - static const uint32_t poly32 = UINT32_C(0xEDB88320); - - // Castagnoli - // static const uint32_t poly32 = UINT32_C(0x82F63B78); - - // Koopman - // static const uint32_t poly32 = UINT32_C(0xEB31D82E); - - for (size_t s = 0; s < 8; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint32_t r = s == 0 ? b : lzma_crc32_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly32; - else - r >>= 1; - } - - lzma_crc32_table[s][b] = r; - } - } -} - - * The prototype of the CRC32 function: - * extern uint32_t lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc); - */ - -/* - * On some systems, the functions need to be prefixed. The prefix is - * usually an underscore. - */ -#ifndef __USER_LABEL_PREFIX__ -# define __USER_LABEL_PREFIX__ -#endif -#define MAKE_SYM_CAT(prefix, sym) prefix ## sym -#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) -#define LZMA_CRC32 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32) -#define LZMA_CRC32_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc32_table) - -/* - * Solaris assembler doesn't have .p2align, and Darwin uses .align - * differently than GNU/Linux and Solaris. - */ -#if defined(__APPLE__) || defined(__MSDOS__) -# define ALIGN(pow2, abs) .align pow2 -#else -# define ALIGN(pow2, abs) .align abs -#endif - - .text - .globl LZMA_CRC32 - -#if !defined(__APPLE__) && !defined(_WIN32) && !defined(__CYGWIN__) \ - && !defined(__MSDOS__) - .type LZMA_CRC32, @function -#endif - - ALIGN(4, 16) -LZMA_CRC32: - /* - * Register usage: - * %eax crc - * %esi buf - * %edi size or buf + size - * %ebx lzma_crc32_table - * %ebp Table index - * %ecx Temporary - * %edx Temporary - */ - pushl %ebx - pushl %esi - pushl %edi - pushl %ebp - movl 0x14(%esp), %esi /* buf */ - movl 0x18(%esp), %edi /* size */ - movl 0x1C(%esp), %eax /* crc */ - - /* - * Store the address of lzma_crc32_table to %ebx. This is needed to - * get position-independent code (PIC). - * - * The PIC macro is defined by libtool, while __PIC__ is defined - * by GCC but only on some systems. Testing for both makes it simpler - * to test this code without libtool, and keeps the code working also - * when built with libtool but using something else than GCC. - * - * I understood that libtool may define PIC on Windows even though - * the code in Windows DLLs is not PIC in sense that it is in ELF - * binaries, so we need a separate check to always use the non-PIC - * code on Windows. - */ -#if (!defined(PIC) && !defined(__PIC__)) \ - || (defined(_WIN32) || defined(__CYGWIN__)) - /* Not PIC */ - movl $ LZMA_CRC32_TABLE, %ebx -#elif defined(__APPLE__) - /* Mach-O */ - call .L_get_pc -.L_pic: - leal .L_lzma_crc32_table$non_lazy_ptr-.L_pic(%ebx), %ebx - movl (%ebx), %ebx -#else - /* ELF */ - call .L_get_pc - addl $_GLOBAL_OFFSET_TABLE_, %ebx - movl LZMA_CRC32_TABLE@GOT(%ebx), %ebx -#endif - - /* Complement the initial value. */ - notl %eax - - ALIGN(4, 16) -.L_align: - /* - * Check if there is enough input to use slicing-by-eight. - * We need 16 bytes, because the loop pre-reads eight bytes. - */ - cmpl $16, %edi - jb .L_rest - - /* Check if we have reached alignment of eight bytes. */ - testl $7, %esi - jz .L_slice - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrl $8, %eax - xorl (%ebx, %ebp, 4), %eax - decl %edi - jmp .L_align - - ALIGN(2, 4) -.L_slice: - /* - * If we get here, there's at least 16 bytes of aligned input - * available. Make %edi multiple of eight bytes. Store the possible - * remainder over the "size" variable in the argument stack. - */ - movl %edi, 0x18(%esp) - andl $-8, %edi - subl %edi, 0x18(%esp) - - /* - * Let %edi be buf + size - 8 while running the main loop. This way - * we can compare for equality to determine when exit the loop. - */ - addl %esi, %edi - subl $8, %edi - - /* Read in the first eight aligned bytes. */ - xorl (%esi), %eax - movl 4(%esi), %ecx - movzbl %cl, %ebp - -.L_loop: - movl 0x0C00(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl 0x0800(%ebx, %ebp, 4), %edx - shrl $16, %ecx - xorl 8(%esi), %edx - movzbl %cl, %ebp - xorl 0x0400(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl (%ebx, %ebp, 4), %edx - movzbl %al, %ebp - - /* - * Read the next four bytes, for which the CRC is calculated - * on the next interation of the loop. - */ - movl 12(%esi), %ecx - - xorl 0x1C00(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - shrl $16, %eax - xorl 0x1800(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - movzbl %al, %eax - movl 0x1400(%ebx, %eax, 4), %eax - addl $8, %esi - xorl %edx, %eax - xorl 0x1000(%ebx, %ebp, 4), %eax - - /* Check for end of aligned input. */ - cmpl %edi, %esi - movzbl %cl, %ebp - jne .L_loop - - /* - * Process the remaining eight bytes, which we have already - * copied to %ecx and %edx. - */ - movl 0x0C00(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl 0x0800(%ebx, %ebp, 4), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0400(%ebx, %ebp, 4), %edx - movzbl %ch, %ebp - xorl (%ebx, %ebp, 4), %edx - movzbl %al, %ebp - - xorl 0x1C00(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - shrl $16, %eax - xorl 0x1800(%ebx, %ebp, 4), %edx - movzbl %ah, %ebp - movzbl %al, %eax - movl 0x1400(%ebx, %eax, 4), %eax - addl $8, %esi - xorl %edx, %eax - xorl 0x1000(%ebx, %ebp, 4), %eax - - /* Copy the number of remaining bytes to %edi. */ - movl 0x18(%esp), %edi - -.L_rest: - /* Check for end of input. */ - testl %edi, %edi - jz .L_return - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrl $8, %eax - xorl (%ebx, %ebp, 4), %eax - decl %edi - jmp .L_rest - -.L_return: - /* Complement the final value. */ - notl %eax - - popl %ebp - popl %edi - popl %esi - popl %ebx - ret - -#if defined(PIC) || defined(__PIC__) - ALIGN(4, 16) -.L_get_pc: - movl (%esp), %ebx - ret -#endif - -#if defined(__APPLE__) && (defined(PIC) || defined(__PIC__)) - /* Mach-O PIC */ - .section __IMPORT,__pointers,non_lazy_symbol_pointers -.L_lzma_crc32_table$non_lazy_ptr: - .indirect_symbol LZMA_CRC32_TABLE - .long 0 - -#elif defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT - /* This is equivalent of __declspec(dllexport). */ - .section .drectve - .ascii " -export:lzma_crc32" -# endif - -#elif !defined(__MSDOS__) - /* ELF */ - .size LZMA_CRC32, .-LZMA_CRC32 -#endif - -/* - * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when - * we are using GNU assembler. - */ -#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__)) - .section .note.GNU-stack,"",@progbits -#endif diff --git a/deps/lzma/liblzma/check/crc64_fast.c b/deps/lzma/liblzma/check/crc64_fast.c deleted file mode 100644 index 52af29ed48d80b..00000000000000 --- a/deps/lzma/liblzma/check/crc64_fast.c +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64.c -/// \brief CRC64 calculation -/// -/// Calculate the CRC64 using the slice-by-four algorithm. This is the same -/// idea that is used in crc32_fast.c, but for CRC64 we use only four tables -/// instead of eight to avoid increasing CPU cache usage. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" -#include "crc_macros.h" - - -#ifdef WORDS_BIGENDIAN -# define A1(x) ((x) >> 56) -#else -# define A1 A -#endif - - -// See the comments in crc32_fast.c. They aren't duplicated here. -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) -{ - crc = ~crc; - -#ifdef WORDS_BIGENDIAN - crc = bswap64(crc); -#endif - - if (size > 4) { - while ((uintptr_t)(buf) & 3) { - crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); - --size; - } - - const uint8_t *const limit = buf + (size & ~(size_t)(3)); - size &= (size_t)(3); - - while (buf < limit) { -#ifdef WORDS_BIGENDIAN - const uint32_t tmp = (crc >> 32) - ^ *(const uint32_t *)(buf); -#else - const uint32_t tmp = crc ^ *(const uint32_t *)(buf); -#endif - buf += 4; - - crc = lzma_crc64_table[3][A(tmp)] - ^ lzma_crc64_table[2][B(tmp)] - ^ S32(crc) - ^ lzma_crc64_table[1][C(tmp)] - ^ lzma_crc64_table[0][D(tmp)]; - } - } - - while (size-- != 0) - crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc); - -#ifdef WORDS_BIGENDIAN - crc = bswap64(crc); -#endif - - return ~crc; -} diff --git a/deps/lzma/liblzma/check/crc64_small.c b/deps/lzma/liblzma/check/crc64_small.c deleted file mode 100644 index 55d72316bce753..00000000000000 --- a/deps/lzma/liblzma/check/crc64_small.c +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_small.c -/// \brief CRC64 calculation (size-optimized) -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "check.h" - - -static uint64_t crc64_table[256]; - - -static void -crc64_init(void) -{ - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t b = 0; b < 256; ++b) { - uint64_t r = b; - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - crc64_table[b] = r; - } - - return; -} - - -extern LZMA_API(uint64_t) -lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc) -{ - mythread_once(crc64_init); - - crc = ~crc; - - while (size != 0) { - crc = crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); - --size; - } - - return ~crc; -} diff --git a/deps/lzma/liblzma/check/crc64_table.c b/deps/lzma/liblzma/check/crc64_table.c deleted file mode 100644 index 1fbcd94703c77f..00000000000000 --- a/deps/lzma/liblzma/check/crc64_table.c +++ /dev/null @@ -1,19 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_table.c -/// \brief Precalculated CRC64 table with correct endianness -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - -#ifdef WORDS_BIGENDIAN -# include "crc64_table_be.h" -#else -# include "crc64_table_le.h" -#endif diff --git a/deps/lzma/liblzma/check/crc64_table_be.h b/deps/lzma/liblzma/check/crc64_table_be.h deleted file mode 100644 index ea074f397a70bc..00000000000000 --- a/deps/lzma/liblzma/check/crc64_table_be.h +++ /dev/null @@ -1,521 +0,0 @@ -/* This file has been automatically generated by crc64_tablegen.c. */ - -const uint64_t lzma_crc64_table[4][256] = { - { - UINT64_C(0x0000000000000000), UINT64_C(0x6F5FA703BE4C2EB3), - UINT64_C(0x5BA040A8573684F4), UINT64_C(0x34FFE7ABE97AAA47), - UINT64_C(0x335E8FFF84C3D07B), UINT64_C(0x5C0128FC3A8FFEC8), - UINT64_C(0x68FECF57D3F5548F), UINT64_C(0x07A168546DB97A3C), - UINT64_C(0x66BC1EFF0987A1F7), UINT64_C(0x09E3B9FCB7CB8F44), - UINT64_C(0x3D1C5E575EB12503), UINT64_C(0x5243F954E0FD0BB0), - UINT64_C(0x55E291008D44718C), UINT64_C(0x3ABD360333085F3F), - UINT64_C(0x0E42D1A8DA72F578), UINT64_C(0x611D76AB643EDBCB), - UINT64_C(0x4966335138A19B7D), UINT64_C(0x2639945286EDB5CE), - UINT64_C(0x12C673F96F971F89), UINT64_C(0x7D99D4FAD1DB313A), - UINT64_C(0x7A38BCAEBC624B06), UINT64_C(0x15671BAD022E65B5), - UINT64_C(0x2198FC06EB54CFF2), UINT64_C(0x4EC75B055518E141), - UINT64_C(0x2FDA2DAE31263A8A), UINT64_C(0x40858AAD8F6A1439), - UINT64_C(0x747A6D066610BE7E), UINT64_C(0x1B25CA05D85C90CD), - UINT64_C(0x1C84A251B5E5EAF1), UINT64_C(0x73DB05520BA9C442), - UINT64_C(0x4724E2F9E2D36E05), UINT64_C(0x287B45FA5C9F40B6), - UINT64_C(0x92CC66A2704237FB), UINT64_C(0xFD93C1A1CE0E1948), - UINT64_C(0xC96C260A2774B30F), UINT64_C(0xA633810999389DBC), - UINT64_C(0xA192E95DF481E780), UINT64_C(0xCECD4E5E4ACDC933), - UINT64_C(0xFA32A9F5A3B76374), UINT64_C(0x956D0EF61DFB4DC7), - UINT64_C(0xF470785D79C5960C), UINT64_C(0x9B2FDF5EC789B8BF), - UINT64_C(0xAFD038F52EF312F8), UINT64_C(0xC08F9FF690BF3C4B), - UINT64_C(0xC72EF7A2FD064677), UINT64_C(0xA87150A1434A68C4), - UINT64_C(0x9C8EB70AAA30C283), UINT64_C(0xF3D11009147CEC30), - UINT64_C(0xDBAA55F348E3AC86), UINT64_C(0xB4F5F2F0F6AF8235), - UINT64_C(0x800A155B1FD52872), UINT64_C(0xEF55B258A19906C1), - UINT64_C(0xE8F4DA0CCC207CFD), UINT64_C(0x87AB7D0F726C524E), - UINT64_C(0xB3549AA49B16F809), UINT64_C(0xDC0B3DA7255AD6BA), - UINT64_C(0xBD164B0C41640D71), UINT64_C(0xD249EC0FFF2823C2), - UINT64_C(0xE6B60BA416528985), UINT64_C(0x89E9ACA7A81EA736), - UINT64_C(0x8E48C4F3C5A7DD0A), UINT64_C(0xE11763F07BEBF3B9), - UINT64_C(0xD5E8845B929159FE), UINT64_C(0xBAB723582CDD774D), - UINT64_C(0xA187C3EBCA2BB664), UINT64_C(0xCED864E8746798D7), - UINT64_C(0xFA2783439D1D3290), UINT64_C(0x9578244023511C23), - UINT64_C(0x92D94C144EE8661F), UINT64_C(0xFD86EB17F0A448AC), - UINT64_C(0xC9790CBC19DEE2EB), UINT64_C(0xA626ABBFA792CC58), - UINT64_C(0xC73BDD14C3AC1793), UINT64_C(0xA8647A177DE03920), - UINT64_C(0x9C9B9DBC949A9367), UINT64_C(0xF3C43ABF2AD6BDD4), - UINT64_C(0xF46552EB476FC7E8), UINT64_C(0x9B3AF5E8F923E95B), - UINT64_C(0xAFC512431059431C), UINT64_C(0xC09AB540AE156DAF), - UINT64_C(0xE8E1F0BAF28A2D19), UINT64_C(0x87BE57B94CC603AA), - UINT64_C(0xB341B012A5BCA9ED), UINT64_C(0xDC1E17111BF0875E), - UINT64_C(0xDBBF7F457649FD62), UINT64_C(0xB4E0D846C805D3D1), - UINT64_C(0x801F3FED217F7996), UINT64_C(0xEF4098EE9F335725), - UINT64_C(0x8E5DEE45FB0D8CEE), UINT64_C(0xE10249464541A25D), - UINT64_C(0xD5FDAEEDAC3B081A), UINT64_C(0xBAA209EE127726A9), - UINT64_C(0xBD0361BA7FCE5C95), UINT64_C(0xD25CC6B9C1827226), - UINT64_C(0xE6A3211228F8D861), UINT64_C(0x89FC861196B4F6D2), - UINT64_C(0x334BA549BA69819F), UINT64_C(0x5C14024A0425AF2C), - UINT64_C(0x68EBE5E1ED5F056B), UINT64_C(0x07B442E253132BD8), - UINT64_C(0x00152AB63EAA51E4), UINT64_C(0x6F4A8DB580E67F57), - UINT64_C(0x5BB56A1E699CD510), UINT64_C(0x34EACD1DD7D0FBA3), - UINT64_C(0x55F7BBB6B3EE2068), UINT64_C(0x3AA81CB50DA20EDB), - UINT64_C(0x0E57FB1EE4D8A49C), UINT64_C(0x61085C1D5A948A2F), - UINT64_C(0x66A93449372DF013), UINT64_C(0x09F6934A8961DEA0), - UINT64_C(0x3D0974E1601B74E7), UINT64_C(0x5256D3E2DE575A54), - UINT64_C(0x7A2D961882C81AE2), UINT64_C(0x1572311B3C843451), - UINT64_C(0x218DD6B0D5FE9E16), UINT64_C(0x4ED271B36BB2B0A5), - UINT64_C(0x497319E7060BCA99), UINT64_C(0x262CBEE4B847E42A), - UINT64_C(0x12D3594F513D4E6D), UINT64_C(0x7D8CFE4CEF7160DE), - UINT64_C(0x1C9188E78B4FBB15), UINT64_C(0x73CE2FE4350395A6), - UINT64_C(0x4731C84FDC793FE1), UINT64_C(0x286E6F4C62351152), - UINT64_C(0x2FCF07180F8C6B6E), UINT64_C(0x4090A01BB1C045DD), - UINT64_C(0x746F47B058BAEF9A), UINT64_C(0x1B30E0B3E6F6C129), - UINT64_C(0x420F87D795576CC9), UINT64_C(0x2D5020D42B1B427A), - UINT64_C(0x19AFC77FC261E83D), UINT64_C(0x76F0607C7C2DC68E), - UINT64_C(0x715108281194BCB2), UINT64_C(0x1E0EAF2BAFD89201), - UINT64_C(0x2AF1488046A23846), UINT64_C(0x45AEEF83F8EE16F5), - UINT64_C(0x24B399289CD0CD3E), UINT64_C(0x4BEC3E2B229CE38D), - UINT64_C(0x7F13D980CBE649CA), UINT64_C(0x104C7E8375AA6779), - UINT64_C(0x17ED16D718131D45), UINT64_C(0x78B2B1D4A65F33F6), - UINT64_C(0x4C4D567F4F2599B1), UINT64_C(0x2312F17CF169B702), - UINT64_C(0x0B69B486ADF6F7B4), UINT64_C(0x6436138513BAD907), - UINT64_C(0x50C9F42EFAC07340), UINT64_C(0x3F96532D448C5DF3), - UINT64_C(0x38373B79293527CF), UINT64_C(0x57689C7A9779097C), - UINT64_C(0x63977BD17E03A33B), UINT64_C(0x0CC8DCD2C04F8D88), - UINT64_C(0x6DD5AA79A4715643), UINT64_C(0x028A0D7A1A3D78F0), - UINT64_C(0x3675EAD1F347D2B7), UINT64_C(0x592A4DD24D0BFC04), - UINT64_C(0x5E8B258620B28638), UINT64_C(0x31D482859EFEA88B), - UINT64_C(0x052B652E778402CC), UINT64_C(0x6A74C22DC9C82C7F), - UINT64_C(0xD0C3E175E5155B32), UINT64_C(0xBF9C46765B597581), - UINT64_C(0x8B63A1DDB223DFC6), UINT64_C(0xE43C06DE0C6FF175), - UINT64_C(0xE39D6E8A61D68B49), UINT64_C(0x8CC2C989DF9AA5FA), - UINT64_C(0xB83D2E2236E00FBD), UINT64_C(0xD762892188AC210E), - UINT64_C(0xB67FFF8AEC92FAC5), UINT64_C(0xD920588952DED476), - UINT64_C(0xEDDFBF22BBA47E31), UINT64_C(0x8280182105E85082), - UINT64_C(0x8521707568512ABE), UINT64_C(0xEA7ED776D61D040D), - UINT64_C(0xDE8130DD3F67AE4A), UINT64_C(0xB1DE97DE812B80F9), - UINT64_C(0x99A5D224DDB4C04F), UINT64_C(0xF6FA752763F8EEFC), - UINT64_C(0xC205928C8A8244BB), UINT64_C(0xAD5A358F34CE6A08), - UINT64_C(0xAAFB5DDB59771034), UINT64_C(0xC5A4FAD8E73B3E87), - UINT64_C(0xF15B1D730E4194C0), UINT64_C(0x9E04BA70B00DBA73), - UINT64_C(0xFF19CCDBD43361B8), UINT64_C(0x90466BD86A7F4F0B), - UINT64_C(0xA4B98C738305E54C), UINT64_C(0xCBE62B703D49CBFF), - UINT64_C(0xCC47432450F0B1C3), UINT64_C(0xA318E427EEBC9F70), - UINT64_C(0x97E7038C07C63537), UINT64_C(0xF8B8A48FB98A1B84), - UINT64_C(0xE388443C5F7CDAAD), UINT64_C(0x8CD7E33FE130F41E), - UINT64_C(0xB8280494084A5E59), UINT64_C(0xD777A397B60670EA), - UINT64_C(0xD0D6CBC3DBBF0AD6), UINT64_C(0xBF896CC065F32465), - UINT64_C(0x8B768B6B8C898E22), UINT64_C(0xE4292C6832C5A091), - UINT64_C(0x85345AC356FB7B5A), UINT64_C(0xEA6BFDC0E8B755E9), - UINT64_C(0xDE941A6B01CDFFAE), UINT64_C(0xB1CBBD68BF81D11D), - UINT64_C(0xB66AD53CD238AB21), UINT64_C(0xD935723F6C748592), - UINT64_C(0xEDCA9594850E2FD5), UINT64_C(0x829532973B420166), - UINT64_C(0xAAEE776D67DD41D0), UINT64_C(0xC5B1D06ED9916F63), - UINT64_C(0xF14E37C530EBC524), UINT64_C(0x9E1190C68EA7EB97), - UINT64_C(0x99B0F892E31E91AB), UINT64_C(0xF6EF5F915D52BF18), - UINT64_C(0xC210B83AB428155F), UINT64_C(0xAD4F1F390A643BEC), - UINT64_C(0xCC5269926E5AE027), UINT64_C(0xA30DCE91D016CE94), - UINT64_C(0x97F2293A396C64D3), UINT64_C(0xF8AD8E3987204A60), - UINT64_C(0xFF0CE66DEA99305C), UINT64_C(0x9053416E54D51EEF), - UINT64_C(0xA4ACA6C5BDAFB4A8), UINT64_C(0xCBF301C603E39A1B), - UINT64_C(0x7144229E2F3EED56), UINT64_C(0x1E1B859D9172C3E5), - UINT64_C(0x2AE46236780869A2), UINT64_C(0x45BBC535C6444711), - UINT64_C(0x421AAD61ABFD3D2D), UINT64_C(0x2D450A6215B1139E), - UINT64_C(0x19BAEDC9FCCBB9D9), UINT64_C(0x76E54ACA4287976A), - UINT64_C(0x17F83C6126B94CA1), UINT64_C(0x78A79B6298F56212), - UINT64_C(0x4C587CC9718FC855), UINT64_C(0x2307DBCACFC3E6E6), - UINT64_C(0x24A6B39EA27A9CDA), UINT64_C(0x4BF9149D1C36B269), - UINT64_C(0x7F06F336F54C182E), UINT64_C(0x105954354B00369D), - UINT64_C(0x382211CF179F762B), UINT64_C(0x577DB6CCA9D35898), - UINT64_C(0x6382516740A9F2DF), UINT64_C(0x0CDDF664FEE5DC6C), - UINT64_C(0x0B7C9E30935CA650), UINT64_C(0x642339332D1088E3), - UINT64_C(0x50DCDE98C46A22A4), UINT64_C(0x3F83799B7A260C17), - UINT64_C(0x5E9E0F301E18D7DC), UINT64_C(0x31C1A833A054F96F), - UINT64_C(0x053E4F98492E5328), UINT64_C(0x6A61E89BF7627D9B), - UINT64_C(0x6DC080CF9ADB07A7), UINT64_C(0x029F27CC24972914), - UINT64_C(0x3660C067CDED8353), UINT64_C(0x593F676473A1ADE0) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x0DF1D05C9279E954), - UINT64_C(0x1AE2A1B924F3D2A9), UINT64_C(0x171371E5B68A3BFD), - UINT64_C(0xB1DA4DDC62497DC1), UINT64_C(0xBC2B9D80F0309495), - UINT64_C(0xAB38EC6546BAAF68), UINT64_C(0xA6C93C39D4C3463C), - UINT64_C(0xE7AB9517EE3D2210), UINT64_C(0xEA5A454B7C44CB44), - UINT64_C(0xFD4934AECACEF0B9), UINT64_C(0xF0B8E4F258B719ED), - UINT64_C(0x5671D8CB8C745FD1), UINT64_C(0x5B8008971E0DB685), - UINT64_C(0x4C937972A8878D78), UINT64_C(0x4162A92E3AFE642C), - UINT64_C(0xCE572B2FDC7B4420), UINT64_C(0xC3A6FB734E02AD74), - UINT64_C(0xD4B58A96F8889689), UINT64_C(0xD9445ACA6AF17FDD), - UINT64_C(0x7F8D66F3BE3239E1), UINT64_C(0x727CB6AF2C4BD0B5), - UINT64_C(0x656FC74A9AC1EB48), UINT64_C(0x689E171608B8021C), - UINT64_C(0x29FCBE3832466630), UINT64_C(0x240D6E64A03F8F64), - UINT64_C(0x331E1F8116B5B499), UINT64_C(0x3EEFCFDD84CC5DCD), - UINT64_C(0x9826F3E4500F1BF1), UINT64_C(0x95D723B8C276F2A5), - UINT64_C(0x82C4525D74FCC958), UINT64_C(0x8F358201E685200C), - UINT64_C(0x9CAF565EB8F78840), UINT64_C(0x915E86022A8E6114), - UINT64_C(0x864DF7E79C045AE9), UINT64_C(0x8BBC27BB0E7DB3BD), - UINT64_C(0x2D751B82DABEF581), UINT64_C(0x2084CBDE48C71CD5), - UINT64_C(0x3797BA3BFE4D2728), UINT64_C(0x3A666A676C34CE7C), - UINT64_C(0x7B04C34956CAAA50), UINT64_C(0x76F51315C4B34304), - UINT64_C(0x61E662F0723978F9), UINT64_C(0x6C17B2ACE04091AD), - UINT64_C(0xCADE8E953483D791), UINT64_C(0xC72F5EC9A6FA3EC5), - UINT64_C(0xD03C2F2C10700538), UINT64_C(0xDDCDFF708209EC6C), - UINT64_C(0x52F87D71648CCC60), UINT64_C(0x5F09AD2DF6F52534), - UINT64_C(0x481ADCC8407F1EC9), UINT64_C(0x45EB0C94D206F79D), - UINT64_C(0xE32230AD06C5B1A1), UINT64_C(0xEED3E0F194BC58F5), - UINT64_C(0xF9C0911422366308), UINT64_C(0xF4314148B04F8A5C), - UINT64_C(0xB553E8668AB1EE70), UINT64_C(0xB8A2383A18C80724), - UINT64_C(0xAFB149DFAE423CD9), UINT64_C(0xA24099833C3BD58D), - UINT64_C(0x0489A5BAE8F893B1), UINT64_C(0x097875E67A817AE5), - UINT64_C(0x1E6B0403CC0B4118), UINT64_C(0x139AD45F5E72A84C), - UINT64_C(0x385FADBC70EF1181), UINT64_C(0x35AE7DE0E296F8D5), - UINT64_C(0x22BD0C05541CC328), UINT64_C(0x2F4CDC59C6652A7C), - UINT64_C(0x8985E06012A66C40), UINT64_C(0x8474303C80DF8514), - UINT64_C(0x936741D93655BEE9), UINT64_C(0x9E969185A42C57BD), - UINT64_C(0xDFF438AB9ED23391), UINT64_C(0xD205E8F70CABDAC5), - UINT64_C(0xC5169912BA21E138), UINT64_C(0xC8E7494E2858086C), - UINT64_C(0x6E2E7577FC9B4E50), UINT64_C(0x63DFA52B6EE2A704), - UINT64_C(0x74CCD4CED8689CF9), UINT64_C(0x793D04924A1175AD), - UINT64_C(0xF6088693AC9455A1), UINT64_C(0xFBF956CF3EEDBCF5), - UINT64_C(0xECEA272A88678708), UINT64_C(0xE11BF7761A1E6E5C), - UINT64_C(0x47D2CB4FCEDD2860), UINT64_C(0x4A231B135CA4C134), - UINT64_C(0x5D306AF6EA2EFAC9), UINT64_C(0x50C1BAAA7857139D), - UINT64_C(0x11A3138442A977B1), UINT64_C(0x1C52C3D8D0D09EE5), - UINT64_C(0x0B41B23D665AA518), UINT64_C(0x06B06261F4234C4C), - UINT64_C(0xA0795E5820E00A70), UINT64_C(0xAD888E04B299E324), - UINT64_C(0xBA9BFFE10413D8D9), UINT64_C(0xB76A2FBD966A318D), - UINT64_C(0xA4F0FBE2C81899C1), UINT64_C(0xA9012BBE5A617095), - UINT64_C(0xBE125A5BECEB4B68), UINT64_C(0xB3E38A077E92A23C), - UINT64_C(0x152AB63EAA51E400), UINT64_C(0x18DB666238280D54), - UINT64_C(0x0FC817878EA236A9), UINT64_C(0x0239C7DB1CDBDFFD), - UINT64_C(0x435B6EF52625BBD1), UINT64_C(0x4EAABEA9B45C5285), - UINT64_C(0x59B9CF4C02D66978), UINT64_C(0x54481F1090AF802C), - UINT64_C(0xF2812329446CC610), UINT64_C(0xFF70F375D6152F44), - UINT64_C(0xE8638290609F14B9), UINT64_C(0xE59252CCF2E6FDED), - UINT64_C(0x6AA7D0CD1463DDE1), UINT64_C(0x67560091861A34B5), - UINT64_C(0x7045717430900F48), UINT64_C(0x7DB4A128A2E9E61C), - UINT64_C(0xDB7D9D11762AA020), UINT64_C(0xD68C4D4DE4534974), - UINT64_C(0xC19F3CA852D97289), UINT64_C(0xCC6EECF4C0A09BDD), - UINT64_C(0x8D0C45DAFA5EFFF1), UINT64_C(0x80FD9586682716A5), - UINT64_C(0x97EEE463DEAD2D58), UINT64_C(0x9A1F343F4CD4C40C), - UINT64_C(0x3CD6080698178230), UINT64_C(0x3127D85A0A6E6B64), - UINT64_C(0x2634A9BFBCE45099), UINT64_C(0x2BC579E32E9DB9CD), - UINT64_C(0xF5A054D6CA71FB90), UINT64_C(0xF851848A580812C4), - UINT64_C(0xEF42F56FEE822939), UINT64_C(0xE2B325337CFBC06D), - UINT64_C(0x447A190AA8388651), UINT64_C(0x498BC9563A416F05), - UINT64_C(0x5E98B8B38CCB54F8), UINT64_C(0x536968EF1EB2BDAC), - UINT64_C(0x120BC1C1244CD980), UINT64_C(0x1FFA119DB63530D4), - UINT64_C(0x08E9607800BF0B29), UINT64_C(0x0518B02492C6E27D), - UINT64_C(0xA3D18C1D4605A441), UINT64_C(0xAE205C41D47C4D15), - UINT64_C(0xB9332DA462F676E8), UINT64_C(0xB4C2FDF8F08F9FBC), - UINT64_C(0x3BF77FF9160ABFB0), UINT64_C(0x3606AFA5847356E4), - UINT64_C(0x2115DE4032F96D19), UINT64_C(0x2CE40E1CA080844D), - UINT64_C(0x8A2D32257443C271), UINT64_C(0x87DCE279E63A2B25), - UINT64_C(0x90CF939C50B010D8), UINT64_C(0x9D3E43C0C2C9F98C), - UINT64_C(0xDC5CEAEEF8379DA0), UINT64_C(0xD1AD3AB26A4E74F4), - UINT64_C(0xC6BE4B57DCC44F09), UINT64_C(0xCB4F9B0B4EBDA65D), - UINT64_C(0x6D86A7329A7EE061), UINT64_C(0x6077776E08070935), - UINT64_C(0x7764068BBE8D32C8), UINT64_C(0x7A95D6D72CF4DB9C), - UINT64_C(0x690F0288728673D0), UINT64_C(0x64FED2D4E0FF9A84), - UINT64_C(0x73EDA3315675A179), UINT64_C(0x7E1C736DC40C482D), - UINT64_C(0xD8D54F5410CF0E11), UINT64_C(0xD5249F0882B6E745), - UINT64_C(0xC237EEED343CDCB8), UINT64_C(0xCFC63EB1A64535EC), - UINT64_C(0x8EA4979F9CBB51C0), UINT64_C(0x835547C30EC2B894), - UINT64_C(0x94463626B8488369), UINT64_C(0x99B7E67A2A316A3D), - UINT64_C(0x3F7EDA43FEF22C01), UINT64_C(0x328F0A1F6C8BC555), - UINT64_C(0x259C7BFADA01FEA8), UINT64_C(0x286DABA6487817FC), - UINT64_C(0xA75829A7AEFD37F0), UINT64_C(0xAAA9F9FB3C84DEA4), - UINT64_C(0xBDBA881E8A0EE559), UINT64_C(0xB04B584218770C0D), - UINT64_C(0x1682647BCCB44A31), UINT64_C(0x1B73B4275ECDA365), - UINT64_C(0x0C60C5C2E8479898), UINT64_C(0x0191159E7A3E71CC), - UINT64_C(0x40F3BCB040C015E0), UINT64_C(0x4D026CECD2B9FCB4), - UINT64_C(0x5A111D096433C749), UINT64_C(0x57E0CD55F64A2E1D), - UINT64_C(0xF129F16C22896821), UINT64_C(0xFCD82130B0F08175), - UINT64_C(0xEBCB50D5067ABA88), UINT64_C(0xE63A8089940353DC), - UINT64_C(0xCDFFF96ABA9EEA11), UINT64_C(0xC00E293628E70345), - UINT64_C(0xD71D58D39E6D38B8), UINT64_C(0xDAEC888F0C14D1EC), - UINT64_C(0x7C25B4B6D8D797D0), UINT64_C(0x71D464EA4AAE7E84), - UINT64_C(0x66C7150FFC244579), UINT64_C(0x6B36C5536E5DAC2D), - UINT64_C(0x2A546C7D54A3C801), UINT64_C(0x27A5BC21C6DA2155), - UINT64_C(0x30B6CDC470501AA8), UINT64_C(0x3D471D98E229F3FC), - UINT64_C(0x9B8E21A136EAB5C0), UINT64_C(0x967FF1FDA4935C94), - UINT64_C(0x816C801812196769), UINT64_C(0x8C9D504480608E3D), - UINT64_C(0x03A8D24566E5AE31), UINT64_C(0x0E590219F49C4765), - UINT64_C(0x194A73FC42167C98), UINT64_C(0x14BBA3A0D06F95CC), - UINT64_C(0xB2729F9904ACD3F0), UINT64_C(0xBF834FC596D53AA4), - UINT64_C(0xA8903E20205F0159), UINT64_C(0xA561EE7CB226E80D), - UINT64_C(0xE403475288D88C21), UINT64_C(0xE9F2970E1AA16575), - UINT64_C(0xFEE1E6EBAC2B5E88), UINT64_C(0xF31036B73E52B7DC), - UINT64_C(0x55D90A8EEA91F1E0), UINT64_C(0x5828DAD278E818B4), - UINT64_C(0x4F3BAB37CE622349), UINT64_C(0x42CA7B6B5C1BCA1D), - UINT64_C(0x5150AF3402696251), UINT64_C(0x5CA17F6890108B05), - UINT64_C(0x4BB20E8D269AB0F8), UINT64_C(0x4643DED1B4E359AC), - UINT64_C(0xE08AE2E860201F90), UINT64_C(0xED7B32B4F259F6C4), - UINT64_C(0xFA68435144D3CD39), UINT64_C(0xF799930DD6AA246D), - UINT64_C(0xB6FB3A23EC544041), UINT64_C(0xBB0AEA7F7E2DA915), - UINT64_C(0xAC199B9AC8A792E8), UINT64_C(0xA1E84BC65ADE7BBC), - UINT64_C(0x072177FF8E1D3D80), UINT64_C(0x0AD0A7A31C64D4D4), - UINT64_C(0x1DC3D646AAEEEF29), UINT64_C(0x1032061A3897067D), - UINT64_C(0x9F07841BDE122671), UINT64_C(0x92F654474C6BCF25), - UINT64_C(0x85E525A2FAE1F4D8), UINT64_C(0x8814F5FE68981D8C), - UINT64_C(0x2EDDC9C7BC5B5BB0), UINT64_C(0x232C199B2E22B2E4), - UINT64_C(0x343F687E98A88919), UINT64_C(0x39CEB8220AD1604D), - UINT64_C(0x78AC110C302F0461), UINT64_C(0x755DC150A256ED35), - UINT64_C(0x624EB0B514DCD6C8), UINT64_C(0x6FBF60E986A53F9C), - UINT64_C(0xC9765CD0526679A0), UINT64_C(0xC4878C8CC01F90F4), - UINT64_C(0xD394FD697695AB09), UINT64_C(0xDE652D35E4EC425D) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0xCB6D6A914AE10B3F), - UINT64_C(0x96DBD42295C2177E), UINT64_C(0x5DB6BEB3DF231C41), - UINT64_C(0x2CB7A9452A852FFC), UINT64_C(0xE7DAC3D4606424C3), - UINT64_C(0xBA6C7D67BF473882), UINT64_C(0x710117F6F5A633BD), - UINT64_C(0xDD705D247FA5876A), UINT64_C(0x161D37B535448C55), - UINT64_C(0x4BAB8906EA679014), UINT64_C(0x80C6E397A0869B2B), - UINT64_C(0xF1C7F4615520A896), UINT64_C(0x3AAA9EF01FC1A3A9), - UINT64_C(0x671C2043C0E2BFE8), UINT64_C(0xAC714AD28A03B4D7), - UINT64_C(0xBAE1BA48FE4A0FD5), UINT64_C(0x718CD0D9B4AB04EA), - UINT64_C(0x2C3A6E6A6B8818AB), UINT64_C(0xE75704FB21691394), - UINT64_C(0x9656130DD4CF2029), UINT64_C(0x5D3B799C9E2E2B16), - UINT64_C(0x008DC72F410D3757), UINT64_C(0xCBE0ADBE0BEC3C68), - UINT64_C(0x6791E76C81EF88BF), UINT64_C(0xACFC8DFDCB0E8380), - UINT64_C(0xF14A334E142D9FC1), UINT64_C(0x3A2759DF5ECC94FE), - UINT64_C(0x4B264E29AB6AA743), UINT64_C(0x804B24B8E18BAC7C), - UINT64_C(0xDDFD9A0B3EA8B03D), UINT64_C(0x1690F09A7449BB02), - UINT64_C(0xF1DD7B3ED73AC638), UINT64_C(0x3AB011AF9DDBCD07), - UINT64_C(0x6706AF1C42F8D146), UINT64_C(0xAC6BC58D0819DA79), - UINT64_C(0xDD6AD27BFDBFE9C4), UINT64_C(0x1607B8EAB75EE2FB), - UINT64_C(0x4BB10659687DFEBA), UINT64_C(0x80DC6CC8229CF585), - UINT64_C(0x2CAD261AA89F4152), UINT64_C(0xE7C04C8BE27E4A6D), - UINT64_C(0xBA76F2383D5D562C), UINT64_C(0x711B98A977BC5D13), - UINT64_C(0x001A8F5F821A6EAE), UINT64_C(0xCB77E5CEC8FB6591), - UINT64_C(0x96C15B7D17D879D0), UINT64_C(0x5DAC31EC5D3972EF), - UINT64_C(0x4B3CC1762970C9ED), UINT64_C(0x8051ABE76391C2D2), - UINT64_C(0xDDE71554BCB2DE93), UINT64_C(0x168A7FC5F653D5AC), - UINT64_C(0x678B683303F5E611), UINT64_C(0xACE602A24914ED2E), - UINT64_C(0xF150BC119637F16F), UINT64_C(0x3A3DD680DCD6FA50), - UINT64_C(0x964C9C5256D54E87), UINT64_C(0x5D21F6C31C3445B8), - UINT64_C(0x00974870C31759F9), UINT64_C(0xCBFA22E189F652C6), - UINT64_C(0xBAFB35177C50617B), UINT64_C(0x71965F8636B16A44), - UINT64_C(0x2C20E135E9927605), UINT64_C(0xE74D8BA4A3737D3A), - UINT64_C(0xE2BBF77CAE758C71), UINT64_C(0x29D69DEDE494874E), - UINT64_C(0x7460235E3BB79B0F), UINT64_C(0xBF0D49CF71569030), - UINT64_C(0xCE0C5E3984F0A38D), UINT64_C(0x056134A8CE11A8B2), - UINT64_C(0x58D78A1B1132B4F3), UINT64_C(0x93BAE08A5BD3BFCC), - UINT64_C(0x3FCBAA58D1D00B1B), UINT64_C(0xF4A6C0C99B310024), - UINT64_C(0xA9107E7A44121C65), UINT64_C(0x627D14EB0EF3175A), - UINT64_C(0x137C031DFB5524E7), UINT64_C(0xD811698CB1B42FD8), - UINT64_C(0x85A7D73F6E973399), UINT64_C(0x4ECABDAE247638A6), - UINT64_C(0x585A4D34503F83A4), UINT64_C(0x933727A51ADE889B), - UINT64_C(0xCE819916C5FD94DA), UINT64_C(0x05ECF3878F1C9FE5), - UINT64_C(0x74EDE4717ABAAC58), UINT64_C(0xBF808EE0305BA767), - UINT64_C(0xE2363053EF78BB26), UINT64_C(0x295B5AC2A599B019), - UINT64_C(0x852A10102F9A04CE), UINT64_C(0x4E477A81657B0FF1), - UINT64_C(0x13F1C432BA5813B0), UINT64_C(0xD89CAEA3F0B9188F), - UINT64_C(0xA99DB955051F2B32), UINT64_C(0x62F0D3C44FFE200D), - UINT64_C(0x3F466D7790DD3C4C), UINT64_C(0xF42B07E6DA3C3773), - UINT64_C(0x13668C42794F4A49), UINT64_C(0xD80BE6D333AE4176), - UINT64_C(0x85BD5860EC8D5D37), UINT64_C(0x4ED032F1A66C5608), - UINT64_C(0x3FD1250753CA65B5), UINT64_C(0xF4BC4F96192B6E8A), - UINT64_C(0xA90AF125C60872CB), UINT64_C(0x62679BB48CE979F4), - UINT64_C(0xCE16D16606EACD23), UINT64_C(0x057BBBF74C0BC61C), - UINT64_C(0x58CD05449328DA5D), UINT64_C(0x93A06FD5D9C9D162), - UINT64_C(0xE2A178232C6FE2DF), UINT64_C(0x29CC12B2668EE9E0), - UINT64_C(0x747AAC01B9ADF5A1), UINT64_C(0xBF17C690F34CFE9E), - UINT64_C(0xA987360A8705459C), UINT64_C(0x62EA5C9BCDE44EA3), - UINT64_C(0x3F5CE22812C752E2), UINT64_C(0xF43188B9582659DD), - UINT64_C(0x85309F4FAD806A60), UINT64_C(0x4E5DF5DEE761615F), - UINT64_C(0x13EB4B6D38427D1E), UINT64_C(0xD88621FC72A37621), - UINT64_C(0x74F76B2EF8A0C2F6), UINT64_C(0xBF9A01BFB241C9C9), - UINT64_C(0xE22CBF0C6D62D588), UINT64_C(0x2941D59D2783DEB7), - UINT64_C(0x5840C26BD225ED0A), UINT64_C(0x932DA8FA98C4E635), - UINT64_C(0xCE9B164947E7FA74), UINT64_C(0x05F67CD80D06F14B), - UINT64_C(0xC477EFF95CEB18E3), UINT64_C(0x0F1A8568160A13DC), - UINT64_C(0x52AC3BDBC9290F9D), UINT64_C(0x99C1514A83C804A2), - UINT64_C(0xE8C046BC766E371F), UINT64_C(0x23AD2C2D3C8F3C20), - UINT64_C(0x7E1B929EE3AC2061), UINT64_C(0xB576F80FA94D2B5E), - UINT64_C(0x1907B2DD234E9F89), UINT64_C(0xD26AD84C69AF94B6), - UINT64_C(0x8FDC66FFB68C88F7), UINT64_C(0x44B10C6EFC6D83C8), - UINT64_C(0x35B01B9809CBB075), UINT64_C(0xFEDD7109432ABB4A), - UINT64_C(0xA36BCFBA9C09A70B), UINT64_C(0x6806A52BD6E8AC34), - UINT64_C(0x7E9655B1A2A11736), UINT64_C(0xB5FB3F20E8401C09), - UINT64_C(0xE84D819337630048), UINT64_C(0x2320EB027D820B77), - UINT64_C(0x5221FCF4882438CA), UINT64_C(0x994C9665C2C533F5), - UINT64_C(0xC4FA28D61DE62FB4), UINT64_C(0x0F9742475707248B), - UINT64_C(0xA3E60895DD04905C), UINT64_C(0x688B620497E59B63), - UINT64_C(0x353DDCB748C68722), UINT64_C(0xFE50B62602278C1D), - UINT64_C(0x8F51A1D0F781BFA0), UINT64_C(0x443CCB41BD60B49F), - UINT64_C(0x198A75F26243A8DE), UINT64_C(0xD2E71F6328A2A3E1), - UINT64_C(0x35AA94C78BD1DEDB), UINT64_C(0xFEC7FE56C130D5E4), - UINT64_C(0xA37140E51E13C9A5), UINT64_C(0x681C2A7454F2C29A), - UINT64_C(0x191D3D82A154F127), UINT64_C(0xD2705713EBB5FA18), - UINT64_C(0x8FC6E9A03496E659), UINT64_C(0x44AB83317E77ED66), - UINT64_C(0xE8DAC9E3F47459B1), UINT64_C(0x23B7A372BE95528E), - UINT64_C(0x7E011DC161B64ECF), UINT64_C(0xB56C77502B5745F0), - UINT64_C(0xC46D60A6DEF1764D), UINT64_C(0x0F000A3794107D72), - UINT64_C(0x52B6B4844B336133), UINT64_C(0x99DBDE1501D26A0C), - UINT64_C(0x8F4B2E8F759BD10E), UINT64_C(0x4426441E3F7ADA31), - UINT64_C(0x1990FAADE059C670), UINT64_C(0xD2FD903CAAB8CD4F), - UINT64_C(0xA3FC87CA5F1EFEF2), UINT64_C(0x6891ED5B15FFF5CD), - UINT64_C(0x352753E8CADCE98C), UINT64_C(0xFE4A3979803DE2B3), - UINT64_C(0x523B73AB0A3E5664), UINT64_C(0x9956193A40DF5D5B), - UINT64_C(0xC4E0A7899FFC411A), UINT64_C(0x0F8DCD18D51D4A25), - UINT64_C(0x7E8CDAEE20BB7998), UINT64_C(0xB5E1B07F6A5A72A7), - UINT64_C(0xE8570ECCB5796EE6), UINT64_C(0x233A645DFF9865D9), - UINT64_C(0x26CC1885F29E9492), UINT64_C(0xEDA17214B87F9FAD), - UINT64_C(0xB017CCA7675C83EC), UINT64_C(0x7B7AA6362DBD88D3), - UINT64_C(0x0A7BB1C0D81BBB6E), UINT64_C(0xC116DB5192FAB051), - UINT64_C(0x9CA065E24DD9AC10), UINT64_C(0x57CD0F730738A72F), - UINT64_C(0xFBBC45A18D3B13F8), UINT64_C(0x30D12F30C7DA18C7), - UINT64_C(0x6D67918318F90486), UINT64_C(0xA60AFB1252180FB9), - UINT64_C(0xD70BECE4A7BE3C04), UINT64_C(0x1C668675ED5F373B), - UINT64_C(0x41D038C6327C2B7A), UINT64_C(0x8ABD5257789D2045), - UINT64_C(0x9C2DA2CD0CD49B47), UINT64_C(0x5740C85C46359078), - UINT64_C(0x0AF676EF99168C39), UINT64_C(0xC19B1C7ED3F78706), - UINT64_C(0xB09A0B882651B4BB), UINT64_C(0x7BF761196CB0BF84), - UINT64_C(0x2641DFAAB393A3C5), UINT64_C(0xED2CB53BF972A8FA), - UINT64_C(0x415DFFE973711C2D), UINT64_C(0x8A30957839901712), - UINT64_C(0xD7862BCBE6B30B53), UINT64_C(0x1CEB415AAC52006C), - UINT64_C(0x6DEA56AC59F433D1), UINT64_C(0xA6873C3D131538EE), - UINT64_C(0xFB31828ECC3624AF), UINT64_C(0x305CE81F86D72F90), - UINT64_C(0xD71163BB25A452AA), UINT64_C(0x1C7C092A6F455995), - UINT64_C(0x41CAB799B06645D4), UINT64_C(0x8AA7DD08FA874EEB), - UINT64_C(0xFBA6CAFE0F217D56), UINT64_C(0x30CBA06F45C07669), - UINT64_C(0x6D7D1EDC9AE36A28), UINT64_C(0xA610744DD0026117), - UINT64_C(0x0A613E9F5A01D5C0), UINT64_C(0xC10C540E10E0DEFF), - UINT64_C(0x9CBAEABDCFC3C2BE), UINT64_C(0x57D7802C8522C981), - UINT64_C(0x26D697DA7084FA3C), UINT64_C(0xEDBBFD4B3A65F103), - UINT64_C(0xB00D43F8E546ED42), UINT64_C(0x7B602969AFA7E67D), - UINT64_C(0x6DF0D9F3DBEE5D7F), UINT64_C(0xA69DB362910F5640), - UINT64_C(0xFB2B0DD14E2C4A01), UINT64_C(0x3046674004CD413E), - UINT64_C(0x414770B6F16B7283), UINT64_C(0x8A2A1A27BB8A79BC), - UINT64_C(0xD79CA49464A965FD), UINT64_C(0x1CF1CE052E486EC2), - UINT64_C(0xB08084D7A44BDA15), UINT64_C(0x7BEDEE46EEAAD12A), - UINT64_C(0x265B50F53189CD6B), UINT64_C(0xED363A647B68C654), - UINT64_C(0x9C372D928ECEF5E9), UINT64_C(0x575A4703C42FFED6), - UINT64_C(0x0AECF9B01B0CE297), UINT64_C(0xC181932151EDE9A8) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0xDCA12C225E8AEE1D), - UINT64_C(0xB8435944BC14DD3B), UINT64_C(0x64E27566E29E3326), - UINT64_C(0x7087B2887829BA77), UINT64_C(0xAC269EAA26A3546A), - UINT64_C(0xC8C4EBCCC43D674C), UINT64_C(0x1465C7EE9AB78951), - UINT64_C(0xE00E6511F15274EF), UINT64_C(0x3CAF4933AFD89AF2), - UINT64_C(0x584D3C554D46A9D4), UINT64_C(0x84EC107713CC47C9), - UINT64_C(0x9089D799897BCE98), UINT64_C(0x4C28FBBBD7F12085), - UINT64_C(0x28CA8EDD356F13A3), UINT64_C(0xF46BA2FF6BE5FDBE), - UINT64_C(0x4503C48DC90A304C), UINT64_C(0x99A2E8AF9780DE51), - UINT64_C(0xFD409DC9751EED77), UINT64_C(0x21E1B1EB2B94036A), - UINT64_C(0x35847605B1238A3B), UINT64_C(0xE9255A27EFA96426), - UINT64_C(0x8DC72F410D375700), UINT64_C(0x5166036353BDB91D), - UINT64_C(0xA50DA19C385844A3), UINT64_C(0x79AC8DBE66D2AABE), - UINT64_C(0x1D4EF8D8844C9998), UINT64_C(0xC1EFD4FADAC67785), - UINT64_C(0xD58A13144071FED4), UINT64_C(0x092B3F361EFB10C9), - UINT64_C(0x6DC94A50FC6523EF), UINT64_C(0xB1686672A2EFCDF2), - UINT64_C(0x8A06881B93156098), UINT64_C(0x56A7A439CD9F8E85), - UINT64_C(0x3245D15F2F01BDA3), UINT64_C(0xEEE4FD7D718B53BE), - UINT64_C(0xFA813A93EB3CDAEF), UINT64_C(0x262016B1B5B634F2), - UINT64_C(0x42C263D7572807D4), UINT64_C(0x9E634FF509A2E9C9), - UINT64_C(0x6A08ED0A62471477), UINT64_C(0xB6A9C1283CCDFA6A), - UINT64_C(0xD24BB44EDE53C94C), UINT64_C(0x0EEA986C80D92751), - UINT64_C(0x1A8F5F821A6EAE00), UINT64_C(0xC62E73A044E4401D), - UINT64_C(0xA2CC06C6A67A733B), UINT64_C(0x7E6D2AE4F8F09D26), - UINT64_C(0xCF054C965A1F50D4), UINT64_C(0x13A460B40495BEC9), - UINT64_C(0x774615D2E60B8DEF), UINT64_C(0xABE739F0B88163F2), - UINT64_C(0xBF82FE1E2236EAA3), UINT64_C(0x6323D23C7CBC04BE), - UINT64_C(0x07C1A75A9E223798), UINT64_C(0xDB608B78C0A8D985), - UINT64_C(0x2F0B2987AB4D243B), UINT64_C(0xF3AA05A5F5C7CA26), - UINT64_C(0x974870C31759F900), UINT64_C(0x4BE95CE149D3171D), - UINT64_C(0x5F8C9B0FD3649E4C), UINT64_C(0x832DB72D8DEE7051), - UINT64_C(0xE7CFC24B6F704377), UINT64_C(0x3B6EEE6931FAAD6A), - UINT64_C(0x91131E980D8418A2), UINT64_C(0x4DB232BA530EF6BF), - UINT64_C(0x295047DCB190C599), UINT64_C(0xF5F16BFEEF1A2B84), - UINT64_C(0xE194AC1075ADA2D5), UINT64_C(0x3D3580322B274CC8), - UINT64_C(0x59D7F554C9B97FEE), UINT64_C(0x8576D976973391F3), - UINT64_C(0x711D7B89FCD66C4D), UINT64_C(0xADBC57ABA25C8250), - UINT64_C(0xC95E22CD40C2B176), UINT64_C(0x15FF0EEF1E485F6B), - UINT64_C(0x019AC90184FFD63A), UINT64_C(0xDD3BE523DA753827), - UINT64_C(0xB9D9904538EB0B01), UINT64_C(0x6578BC676661E51C), - UINT64_C(0xD410DA15C48E28EE), UINT64_C(0x08B1F6379A04C6F3), - UINT64_C(0x6C538351789AF5D5), UINT64_C(0xB0F2AF7326101BC8), - UINT64_C(0xA497689DBCA79299), UINT64_C(0x783644BFE22D7C84), - UINT64_C(0x1CD431D900B34FA2), UINT64_C(0xC0751DFB5E39A1BF), - UINT64_C(0x341EBF0435DC5C01), UINT64_C(0xE8BF93266B56B21C), - UINT64_C(0x8C5DE64089C8813A), UINT64_C(0x50FCCA62D7426F27), - UINT64_C(0x44990D8C4DF5E676), UINT64_C(0x983821AE137F086B), - UINT64_C(0xFCDA54C8F1E13B4D), UINT64_C(0x207B78EAAF6BD550), - UINT64_C(0x1B1596839E91783A), UINT64_C(0xC7B4BAA1C01B9627), - UINT64_C(0xA356CFC72285A501), UINT64_C(0x7FF7E3E57C0F4B1C), - UINT64_C(0x6B92240BE6B8C24D), UINT64_C(0xB7330829B8322C50), - UINT64_C(0xD3D17D4F5AAC1F76), UINT64_C(0x0F70516D0426F16B), - UINT64_C(0xFB1BF3926FC30CD5), UINT64_C(0x27BADFB03149E2C8), - UINT64_C(0x4358AAD6D3D7D1EE), UINT64_C(0x9FF986F48D5D3FF3), - UINT64_C(0x8B9C411A17EAB6A2), UINT64_C(0x573D6D38496058BF), - UINT64_C(0x33DF185EABFE6B99), UINT64_C(0xEF7E347CF5748584), - UINT64_C(0x5E16520E579B4876), UINT64_C(0x82B77E2C0911A66B), - UINT64_C(0xE6550B4AEB8F954D), UINT64_C(0x3AF42768B5057B50), - UINT64_C(0x2E91E0862FB2F201), UINT64_C(0xF230CCA471381C1C), - UINT64_C(0x96D2B9C293A62F3A), UINT64_C(0x4A7395E0CD2CC127), - UINT64_C(0xBE18371FA6C93C99), UINT64_C(0x62B91B3DF843D284), - UINT64_C(0x065B6E5B1ADDE1A2), UINT64_C(0xDAFA427944570FBF), - UINT64_C(0xCE9F8597DEE086EE), UINT64_C(0x123EA9B5806A68F3), - UINT64_C(0x76DCDCD362F45BD5), UINT64_C(0xAA7DF0F13C7EB5C8), - UINT64_C(0xA739329F30A7E9D6), UINT64_C(0x7B981EBD6E2D07CB), - UINT64_C(0x1F7A6BDB8CB334ED), UINT64_C(0xC3DB47F9D239DAF0), - UINT64_C(0xD7BE8017488E53A1), UINT64_C(0x0B1FAC351604BDBC), - UINT64_C(0x6FFDD953F49A8E9A), UINT64_C(0xB35CF571AA106087), - UINT64_C(0x4737578EC1F59D39), UINT64_C(0x9B967BAC9F7F7324), - UINT64_C(0xFF740ECA7DE14002), UINT64_C(0x23D522E8236BAE1F), - UINT64_C(0x37B0E506B9DC274E), UINT64_C(0xEB11C924E756C953), - UINT64_C(0x8FF3BC4205C8FA75), UINT64_C(0x535290605B421468), - UINT64_C(0xE23AF612F9ADD99A), UINT64_C(0x3E9BDA30A7273787), - UINT64_C(0x5A79AF5645B904A1), UINT64_C(0x86D883741B33EABC), - UINT64_C(0x92BD449A818463ED), UINT64_C(0x4E1C68B8DF0E8DF0), - UINT64_C(0x2AFE1DDE3D90BED6), UINT64_C(0xF65F31FC631A50CB), - UINT64_C(0x0234930308FFAD75), UINT64_C(0xDE95BF2156754368), - UINT64_C(0xBA77CA47B4EB704E), UINT64_C(0x66D6E665EA619E53), - UINT64_C(0x72B3218B70D61702), UINT64_C(0xAE120DA92E5CF91F), - UINT64_C(0xCAF078CFCCC2CA39), UINT64_C(0x165154ED92482424), - UINT64_C(0x2D3FBA84A3B2894E), UINT64_C(0xF19E96A6FD386753), - UINT64_C(0x957CE3C01FA65475), UINT64_C(0x49DDCFE2412CBA68), - UINT64_C(0x5DB8080CDB9B3339), UINT64_C(0x8119242E8511DD24), - UINT64_C(0xE5FB5148678FEE02), UINT64_C(0x395A7D6A3905001F), - UINT64_C(0xCD31DF9552E0FDA1), UINT64_C(0x1190F3B70C6A13BC), - UINT64_C(0x757286D1EEF4209A), UINT64_C(0xA9D3AAF3B07ECE87), - UINT64_C(0xBDB66D1D2AC947D6), UINT64_C(0x6117413F7443A9CB), - UINT64_C(0x05F5345996DD9AED), UINT64_C(0xD954187BC85774F0), - UINT64_C(0x683C7E096AB8B902), UINT64_C(0xB49D522B3432571F), - UINT64_C(0xD07F274DD6AC6439), UINT64_C(0x0CDE0B6F88268A24), - UINT64_C(0x18BBCC8112910375), UINT64_C(0xC41AE0A34C1BED68), - UINT64_C(0xA0F895C5AE85DE4E), UINT64_C(0x7C59B9E7F00F3053), - UINT64_C(0x88321B189BEACDED), UINT64_C(0x5493373AC56023F0), - UINT64_C(0x3071425C27FE10D6), UINT64_C(0xECD06E7E7974FECB), - UINT64_C(0xF8B5A990E3C3779A), UINT64_C(0x241485B2BD499987), - UINT64_C(0x40F6F0D45FD7AAA1), UINT64_C(0x9C57DCF6015D44BC), - UINT64_C(0x362A2C073D23F174), UINT64_C(0xEA8B002563A91F69), - UINT64_C(0x8E69754381372C4F), UINT64_C(0x52C85961DFBDC252), - UINT64_C(0x46AD9E8F450A4B03), UINT64_C(0x9A0CB2AD1B80A51E), - UINT64_C(0xFEEEC7CBF91E9638), UINT64_C(0x224FEBE9A7947825), - UINT64_C(0xD6244916CC71859B), UINT64_C(0x0A85653492FB6B86), - UINT64_C(0x6E671052706558A0), UINT64_C(0xB2C63C702EEFB6BD), - UINT64_C(0xA6A3FB9EB4583FEC), UINT64_C(0x7A02D7BCEAD2D1F1), - UINT64_C(0x1EE0A2DA084CE2D7), UINT64_C(0xC2418EF856C60CCA), - UINT64_C(0x7329E88AF429C138), UINT64_C(0xAF88C4A8AAA32F25), - UINT64_C(0xCB6AB1CE483D1C03), UINT64_C(0x17CB9DEC16B7F21E), - UINT64_C(0x03AE5A028C007B4F), UINT64_C(0xDF0F7620D28A9552), - UINT64_C(0xBBED03463014A674), UINT64_C(0x674C2F646E9E4869), - UINT64_C(0x93278D9B057BB5D7), UINT64_C(0x4F86A1B95BF15BCA), - UINT64_C(0x2B64D4DFB96F68EC), UINT64_C(0xF7C5F8FDE7E586F1), - UINT64_C(0xE3A03F137D520FA0), UINT64_C(0x3F01133123D8E1BD), - UINT64_C(0x5BE36657C146D29B), UINT64_C(0x87424A759FCC3C86), - UINT64_C(0xBC2CA41CAE3691EC), UINT64_C(0x608D883EF0BC7FF1), - UINT64_C(0x046FFD5812224CD7), UINT64_C(0xD8CED17A4CA8A2CA), - UINT64_C(0xCCAB1694D61F2B9B), UINT64_C(0x100A3AB68895C586), - UINT64_C(0x74E84FD06A0BF6A0), UINT64_C(0xA84963F2348118BD), - UINT64_C(0x5C22C10D5F64E503), UINT64_C(0x8083ED2F01EE0B1E), - UINT64_C(0xE4619849E3703838), UINT64_C(0x38C0B46BBDFAD625), - UINT64_C(0x2CA57385274D5F74), UINT64_C(0xF0045FA779C7B169), - UINT64_C(0x94E62AC19B59824F), UINT64_C(0x484706E3C5D36C52), - UINT64_C(0xF92F6091673CA1A0), UINT64_C(0x258E4CB339B64FBD), - UINT64_C(0x416C39D5DB287C9B), UINT64_C(0x9DCD15F785A29286), - UINT64_C(0x89A8D2191F151BD7), UINT64_C(0x5509FE3B419FF5CA), - UINT64_C(0x31EB8B5DA301C6EC), UINT64_C(0xED4AA77FFD8B28F1), - UINT64_C(0x19210580966ED54F), UINT64_C(0xC58029A2C8E43B52), - UINT64_C(0xA1625CC42A7A0874), UINT64_C(0x7DC370E674F0E669), - UINT64_C(0x69A6B708EE476F38), UINT64_C(0xB5079B2AB0CD8125), - UINT64_C(0xD1E5EE4C5253B203), UINT64_C(0x0D44C26E0CD95C1E) - } -}; diff --git a/deps/lzma/liblzma/check/crc64_table_le.h b/deps/lzma/liblzma/check/crc64_table_le.h deleted file mode 100644 index 1196b31e13236f..00000000000000 --- a/deps/lzma/liblzma/check/crc64_table_le.h +++ /dev/null @@ -1,521 +0,0 @@ -/* This file has been automatically generated by crc64_tablegen.c. */ - -const uint64_t lzma_crc64_table[4][256] = { - { - UINT64_C(0x0000000000000000), UINT64_C(0xB32E4CBE03A75F6F), - UINT64_C(0xF4843657A840A05B), UINT64_C(0x47AA7AE9ABE7FF34), - UINT64_C(0x7BD0C384FF8F5E33), UINT64_C(0xC8FE8F3AFC28015C), - UINT64_C(0x8F54F5D357CFFE68), UINT64_C(0x3C7AB96D5468A107), - UINT64_C(0xF7A18709FF1EBC66), UINT64_C(0x448FCBB7FCB9E309), - UINT64_C(0x0325B15E575E1C3D), UINT64_C(0xB00BFDE054F94352), - UINT64_C(0x8C71448D0091E255), UINT64_C(0x3F5F08330336BD3A), - UINT64_C(0x78F572DAA8D1420E), UINT64_C(0xCBDB3E64AB761D61), - UINT64_C(0x7D9BA13851336649), UINT64_C(0xCEB5ED8652943926), - UINT64_C(0x891F976FF973C612), UINT64_C(0x3A31DBD1FAD4997D), - UINT64_C(0x064B62BCAEBC387A), UINT64_C(0xB5652E02AD1B6715), - UINT64_C(0xF2CF54EB06FC9821), UINT64_C(0x41E11855055BC74E), - UINT64_C(0x8A3A2631AE2DDA2F), UINT64_C(0x39146A8FAD8A8540), - UINT64_C(0x7EBE1066066D7A74), UINT64_C(0xCD905CD805CA251B), - UINT64_C(0xF1EAE5B551A2841C), UINT64_C(0x42C4A90B5205DB73), - UINT64_C(0x056ED3E2F9E22447), UINT64_C(0xB6409F5CFA457B28), - UINT64_C(0xFB374270A266CC92), UINT64_C(0x48190ECEA1C193FD), - UINT64_C(0x0FB374270A266CC9), UINT64_C(0xBC9D3899098133A6), - UINT64_C(0x80E781F45DE992A1), UINT64_C(0x33C9CD4A5E4ECDCE), - UINT64_C(0x7463B7A3F5A932FA), UINT64_C(0xC74DFB1DF60E6D95), - UINT64_C(0x0C96C5795D7870F4), UINT64_C(0xBFB889C75EDF2F9B), - UINT64_C(0xF812F32EF538D0AF), UINT64_C(0x4B3CBF90F69F8FC0), - UINT64_C(0x774606FDA2F72EC7), UINT64_C(0xC4684A43A15071A8), - UINT64_C(0x83C230AA0AB78E9C), UINT64_C(0x30EC7C140910D1F3), - UINT64_C(0x86ACE348F355AADB), UINT64_C(0x3582AFF6F0F2F5B4), - UINT64_C(0x7228D51F5B150A80), UINT64_C(0xC10699A158B255EF), - UINT64_C(0xFD7C20CC0CDAF4E8), UINT64_C(0x4E526C720F7DAB87), - UINT64_C(0x09F8169BA49A54B3), UINT64_C(0xBAD65A25A73D0BDC), - UINT64_C(0x710D64410C4B16BD), UINT64_C(0xC22328FF0FEC49D2), - UINT64_C(0x85895216A40BB6E6), UINT64_C(0x36A71EA8A7ACE989), - UINT64_C(0x0ADDA7C5F3C4488E), UINT64_C(0xB9F3EB7BF06317E1), - UINT64_C(0xFE5991925B84E8D5), UINT64_C(0x4D77DD2C5823B7BA), - UINT64_C(0x64B62BCAEBC387A1), UINT64_C(0xD7986774E864D8CE), - UINT64_C(0x90321D9D438327FA), UINT64_C(0x231C512340247895), - UINT64_C(0x1F66E84E144CD992), UINT64_C(0xAC48A4F017EB86FD), - UINT64_C(0xEBE2DE19BC0C79C9), UINT64_C(0x58CC92A7BFAB26A6), - UINT64_C(0x9317ACC314DD3BC7), UINT64_C(0x2039E07D177A64A8), - UINT64_C(0x67939A94BC9D9B9C), UINT64_C(0xD4BDD62ABF3AC4F3), - UINT64_C(0xE8C76F47EB5265F4), UINT64_C(0x5BE923F9E8F53A9B), - UINT64_C(0x1C4359104312C5AF), UINT64_C(0xAF6D15AE40B59AC0), - UINT64_C(0x192D8AF2BAF0E1E8), UINT64_C(0xAA03C64CB957BE87), - UINT64_C(0xEDA9BCA512B041B3), UINT64_C(0x5E87F01B11171EDC), - UINT64_C(0x62FD4976457FBFDB), UINT64_C(0xD1D305C846D8E0B4), - UINT64_C(0x96797F21ED3F1F80), UINT64_C(0x2557339FEE9840EF), - UINT64_C(0xEE8C0DFB45EE5D8E), UINT64_C(0x5DA24145464902E1), - UINT64_C(0x1A083BACEDAEFDD5), UINT64_C(0xA9267712EE09A2BA), - UINT64_C(0x955CCE7FBA6103BD), UINT64_C(0x267282C1B9C65CD2), - UINT64_C(0x61D8F8281221A3E6), UINT64_C(0xD2F6B4961186FC89), - UINT64_C(0x9F8169BA49A54B33), UINT64_C(0x2CAF25044A02145C), - UINT64_C(0x6B055FEDE1E5EB68), UINT64_C(0xD82B1353E242B407), - UINT64_C(0xE451AA3EB62A1500), UINT64_C(0x577FE680B58D4A6F), - UINT64_C(0x10D59C691E6AB55B), UINT64_C(0xA3FBD0D71DCDEA34), - UINT64_C(0x6820EEB3B6BBF755), UINT64_C(0xDB0EA20DB51CA83A), - UINT64_C(0x9CA4D8E41EFB570E), UINT64_C(0x2F8A945A1D5C0861), - UINT64_C(0x13F02D374934A966), UINT64_C(0xA0DE61894A93F609), - UINT64_C(0xE7741B60E174093D), UINT64_C(0x545A57DEE2D35652), - UINT64_C(0xE21AC88218962D7A), UINT64_C(0x5134843C1B317215), - UINT64_C(0x169EFED5B0D68D21), UINT64_C(0xA5B0B26BB371D24E), - UINT64_C(0x99CA0B06E7197349), UINT64_C(0x2AE447B8E4BE2C26), - UINT64_C(0x6D4E3D514F59D312), UINT64_C(0xDE6071EF4CFE8C7D), - UINT64_C(0x15BB4F8BE788911C), UINT64_C(0xA6950335E42FCE73), - UINT64_C(0xE13F79DC4FC83147), UINT64_C(0x521135624C6F6E28), - UINT64_C(0x6E6B8C0F1807CF2F), UINT64_C(0xDD45C0B11BA09040), - UINT64_C(0x9AEFBA58B0476F74), UINT64_C(0x29C1F6E6B3E0301B), - UINT64_C(0xC96C5795D7870F42), UINT64_C(0x7A421B2BD420502D), - UINT64_C(0x3DE861C27FC7AF19), UINT64_C(0x8EC62D7C7C60F076), - UINT64_C(0xB2BC941128085171), UINT64_C(0x0192D8AF2BAF0E1E), - UINT64_C(0x4638A2468048F12A), UINT64_C(0xF516EEF883EFAE45), - UINT64_C(0x3ECDD09C2899B324), UINT64_C(0x8DE39C222B3EEC4B), - UINT64_C(0xCA49E6CB80D9137F), UINT64_C(0x7967AA75837E4C10), - UINT64_C(0x451D1318D716ED17), UINT64_C(0xF6335FA6D4B1B278), - UINT64_C(0xB199254F7F564D4C), UINT64_C(0x02B769F17CF11223), - UINT64_C(0xB4F7F6AD86B4690B), UINT64_C(0x07D9BA1385133664), - UINT64_C(0x4073C0FA2EF4C950), UINT64_C(0xF35D8C442D53963F), - UINT64_C(0xCF273529793B3738), UINT64_C(0x7C0979977A9C6857), - UINT64_C(0x3BA3037ED17B9763), UINT64_C(0x888D4FC0D2DCC80C), - UINT64_C(0x435671A479AAD56D), UINT64_C(0xF0783D1A7A0D8A02), - UINT64_C(0xB7D247F3D1EA7536), UINT64_C(0x04FC0B4DD24D2A59), - UINT64_C(0x3886B22086258B5E), UINT64_C(0x8BA8FE9E8582D431), - UINT64_C(0xCC0284772E652B05), UINT64_C(0x7F2CC8C92DC2746A), - UINT64_C(0x325B15E575E1C3D0), UINT64_C(0x8175595B76469CBF), - UINT64_C(0xC6DF23B2DDA1638B), UINT64_C(0x75F16F0CDE063CE4), - UINT64_C(0x498BD6618A6E9DE3), UINT64_C(0xFAA59ADF89C9C28C), - UINT64_C(0xBD0FE036222E3DB8), UINT64_C(0x0E21AC88218962D7), - UINT64_C(0xC5FA92EC8AFF7FB6), UINT64_C(0x76D4DE52895820D9), - UINT64_C(0x317EA4BB22BFDFED), UINT64_C(0x8250E80521188082), - UINT64_C(0xBE2A516875702185), UINT64_C(0x0D041DD676D77EEA), - UINT64_C(0x4AAE673FDD3081DE), UINT64_C(0xF9802B81DE97DEB1), - UINT64_C(0x4FC0B4DD24D2A599), UINT64_C(0xFCEEF8632775FAF6), - UINT64_C(0xBB44828A8C9205C2), UINT64_C(0x086ACE348F355AAD), - UINT64_C(0x34107759DB5DFBAA), UINT64_C(0x873E3BE7D8FAA4C5), - UINT64_C(0xC094410E731D5BF1), UINT64_C(0x73BA0DB070BA049E), - UINT64_C(0xB86133D4DBCC19FF), UINT64_C(0x0B4F7F6AD86B4690), - UINT64_C(0x4CE50583738CB9A4), UINT64_C(0xFFCB493D702BE6CB), - UINT64_C(0xC3B1F050244347CC), UINT64_C(0x709FBCEE27E418A3), - UINT64_C(0x3735C6078C03E797), UINT64_C(0x841B8AB98FA4B8F8), - UINT64_C(0xADDA7C5F3C4488E3), UINT64_C(0x1EF430E13FE3D78C), - UINT64_C(0x595E4A08940428B8), UINT64_C(0xEA7006B697A377D7), - UINT64_C(0xD60ABFDBC3CBD6D0), UINT64_C(0x6524F365C06C89BF), - UINT64_C(0x228E898C6B8B768B), UINT64_C(0x91A0C532682C29E4), - UINT64_C(0x5A7BFB56C35A3485), UINT64_C(0xE955B7E8C0FD6BEA), - UINT64_C(0xAEFFCD016B1A94DE), UINT64_C(0x1DD181BF68BDCBB1), - UINT64_C(0x21AB38D23CD56AB6), UINT64_C(0x9285746C3F7235D9), - UINT64_C(0xD52F0E859495CAED), UINT64_C(0x6601423B97329582), - UINT64_C(0xD041DD676D77EEAA), UINT64_C(0x636F91D96ED0B1C5), - UINT64_C(0x24C5EB30C5374EF1), UINT64_C(0x97EBA78EC690119E), - UINT64_C(0xAB911EE392F8B099), UINT64_C(0x18BF525D915FEFF6), - UINT64_C(0x5F1528B43AB810C2), UINT64_C(0xEC3B640A391F4FAD), - UINT64_C(0x27E05A6E926952CC), UINT64_C(0x94CE16D091CE0DA3), - UINT64_C(0xD3646C393A29F297), UINT64_C(0x604A2087398EADF8), - UINT64_C(0x5C3099EA6DE60CFF), UINT64_C(0xEF1ED5546E415390), - UINT64_C(0xA8B4AFBDC5A6ACA4), UINT64_C(0x1B9AE303C601F3CB), - UINT64_C(0x56ED3E2F9E224471), UINT64_C(0xE5C372919D851B1E), - UINT64_C(0xA26908783662E42A), UINT64_C(0x114744C635C5BB45), - UINT64_C(0x2D3DFDAB61AD1A42), UINT64_C(0x9E13B115620A452D), - UINT64_C(0xD9B9CBFCC9EDBA19), UINT64_C(0x6A978742CA4AE576), - UINT64_C(0xA14CB926613CF817), UINT64_C(0x1262F598629BA778), - UINT64_C(0x55C88F71C97C584C), UINT64_C(0xE6E6C3CFCADB0723), - UINT64_C(0xDA9C7AA29EB3A624), UINT64_C(0x69B2361C9D14F94B), - UINT64_C(0x2E184CF536F3067F), UINT64_C(0x9D36004B35545910), - UINT64_C(0x2B769F17CF112238), UINT64_C(0x9858D3A9CCB67D57), - UINT64_C(0xDFF2A94067518263), UINT64_C(0x6CDCE5FE64F6DD0C), - UINT64_C(0x50A65C93309E7C0B), UINT64_C(0xE388102D33392364), - UINT64_C(0xA4226AC498DEDC50), UINT64_C(0x170C267A9B79833F), - UINT64_C(0xDCD7181E300F9E5E), UINT64_C(0x6FF954A033A8C131), - UINT64_C(0x28532E49984F3E05), UINT64_C(0x9B7D62F79BE8616A), - UINT64_C(0xA707DB9ACF80C06D), UINT64_C(0x14299724CC279F02), - UINT64_C(0x5383EDCD67C06036), UINT64_C(0xE0ADA17364673F59) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x54E979925CD0F10D), - UINT64_C(0xA9D2F324B9A1E21A), UINT64_C(0xFD3B8AB6E5711317), - UINT64_C(0xC17D4962DC4DDAB1), UINT64_C(0x959430F0809D2BBC), - UINT64_C(0x68AFBA4665EC38AB), UINT64_C(0x3C46C3D4393CC9A6), - UINT64_C(0x10223DEE1795ABE7), UINT64_C(0x44CB447C4B455AEA), - UINT64_C(0xB9F0CECAAE3449FD), UINT64_C(0xED19B758F2E4B8F0), - UINT64_C(0xD15F748CCBD87156), UINT64_C(0x85B60D1E9708805B), - UINT64_C(0x788D87A87279934C), UINT64_C(0x2C64FE3A2EA96241), - UINT64_C(0x20447BDC2F2B57CE), UINT64_C(0x74AD024E73FBA6C3), - UINT64_C(0x899688F8968AB5D4), UINT64_C(0xDD7FF16ACA5A44D9), - UINT64_C(0xE13932BEF3668D7F), UINT64_C(0xB5D04B2CAFB67C72), - UINT64_C(0x48EBC19A4AC76F65), UINT64_C(0x1C02B80816179E68), - UINT64_C(0x3066463238BEFC29), UINT64_C(0x648F3FA0646E0D24), - UINT64_C(0x99B4B516811F1E33), UINT64_C(0xCD5DCC84DDCFEF3E), - UINT64_C(0xF11B0F50E4F32698), UINT64_C(0xA5F276C2B823D795), - UINT64_C(0x58C9FC745D52C482), UINT64_C(0x0C2085E60182358F), - UINT64_C(0x4088F7B85E56AF9C), UINT64_C(0x14618E2A02865E91), - UINT64_C(0xE95A049CE7F74D86), UINT64_C(0xBDB37D0EBB27BC8B), - UINT64_C(0x81F5BEDA821B752D), UINT64_C(0xD51CC748DECB8420), - UINT64_C(0x28274DFE3BBA9737), UINT64_C(0x7CCE346C676A663A), - UINT64_C(0x50AACA5649C3047B), UINT64_C(0x0443B3C41513F576), - UINT64_C(0xF9783972F062E661), UINT64_C(0xAD9140E0ACB2176C), - UINT64_C(0x91D78334958EDECA), UINT64_C(0xC53EFAA6C95E2FC7), - UINT64_C(0x380570102C2F3CD0), UINT64_C(0x6CEC098270FFCDDD), - UINT64_C(0x60CC8C64717DF852), UINT64_C(0x3425F5F62DAD095F), - UINT64_C(0xC91E7F40C8DC1A48), UINT64_C(0x9DF706D2940CEB45), - UINT64_C(0xA1B1C506AD3022E3), UINT64_C(0xF558BC94F1E0D3EE), - UINT64_C(0x086336221491C0F9), UINT64_C(0x5C8A4FB0484131F4), - UINT64_C(0x70EEB18A66E853B5), UINT64_C(0x2407C8183A38A2B8), - UINT64_C(0xD93C42AEDF49B1AF), UINT64_C(0x8DD53B3C839940A2), - UINT64_C(0xB193F8E8BAA58904), UINT64_C(0xE57A817AE6757809), - UINT64_C(0x18410BCC03046B1E), UINT64_C(0x4CA8725E5FD49A13), - UINT64_C(0x8111EF70BCAD5F38), UINT64_C(0xD5F896E2E07DAE35), - UINT64_C(0x28C31C54050CBD22), UINT64_C(0x7C2A65C659DC4C2F), - UINT64_C(0x406CA61260E08589), UINT64_C(0x1485DF803C307484), - UINT64_C(0xE9BE5536D9416793), UINT64_C(0xBD572CA48591969E), - UINT64_C(0x9133D29EAB38F4DF), UINT64_C(0xC5DAAB0CF7E805D2), - UINT64_C(0x38E121BA129916C5), UINT64_C(0x6C0858284E49E7C8), - UINT64_C(0x504E9BFC77752E6E), UINT64_C(0x04A7E26E2BA5DF63), - UINT64_C(0xF99C68D8CED4CC74), UINT64_C(0xAD75114A92043D79), - UINT64_C(0xA15594AC938608F6), UINT64_C(0xF5BCED3ECF56F9FB), - UINT64_C(0x088767882A27EAEC), UINT64_C(0x5C6E1E1A76F71BE1), - UINT64_C(0x6028DDCE4FCBD247), UINT64_C(0x34C1A45C131B234A), - UINT64_C(0xC9FA2EEAF66A305D), UINT64_C(0x9D135778AABAC150), - UINT64_C(0xB177A9428413A311), UINT64_C(0xE59ED0D0D8C3521C), - UINT64_C(0x18A55A663DB2410B), UINT64_C(0x4C4C23F46162B006), - UINT64_C(0x700AE020585E79A0), UINT64_C(0x24E399B2048E88AD), - UINT64_C(0xD9D81304E1FF9BBA), UINT64_C(0x8D316A96BD2F6AB7), - UINT64_C(0xC19918C8E2FBF0A4), UINT64_C(0x9570615ABE2B01A9), - UINT64_C(0x684BEBEC5B5A12BE), UINT64_C(0x3CA2927E078AE3B3), - UINT64_C(0x00E451AA3EB62A15), UINT64_C(0x540D28386266DB18), - UINT64_C(0xA936A28E8717C80F), UINT64_C(0xFDDFDB1CDBC73902), - UINT64_C(0xD1BB2526F56E5B43), UINT64_C(0x85525CB4A9BEAA4E), - UINT64_C(0x7869D6024CCFB959), UINT64_C(0x2C80AF90101F4854), - UINT64_C(0x10C66C44292381F2), UINT64_C(0x442F15D675F370FF), - UINT64_C(0xB9149F60908263E8), UINT64_C(0xEDFDE6F2CC5292E5), - UINT64_C(0xE1DD6314CDD0A76A), UINT64_C(0xB5341A8691005667), - UINT64_C(0x480F903074714570), UINT64_C(0x1CE6E9A228A1B47D), - UINT64_C(0x20A02A76119D7DDB), UINT64_C(0x744953E44D4D8CD6), - UINT64_C(0x8972D952A83C9FC1), UINT64_C(0xDD9BA0C0F4EC6ECC), - UINT64_C(0xF1FF5EFADA450C8D), UINT64_C(0xA51627688695FD80), - UINT64_C(0x582DADDE63E4EE97), UINT64_C(0x0CC4D44C3F341F9A), - UINT64_C(0x308217980608D63C), UINT64_C(0x646B6E0A5AD82731), - UINT64_C(0x9950E4BCBFA93426), UINT64_C(0xCDB99D2EE379C52B), - UINT64_C(0x90FB71CAD654A0F5), UINT64_C(0xC41208588A8451F8), - UINT64_C(0x392982EE6FF542EF), UINT64_C(0x6DC0FB7C3325B3E2), - UINT64_C(0x518638A80A197A44), UINT64_C(0x056F413A56C98B49), - UINT64_C(0xF854CB8CB3B8985E), UINT64_C(0xACBDB21EEF686953), - UINT64_C(0x80D94C24C1C10B12), UINT64_C(0xD43035B69D11FA1F), - UINT64_C(0x290BBF007860E908), UINT64_C(0x7DE2C69224B01805), - UINT64_C(0x41A405461D8CD1A3), UINT64_C(0x154D7CD4415C20AE), - UINT64_C(0xE876F662A42D33B9), UINT64_C(0xBC9F8FF0F8FDC2B4), - UINT64_C(0xB0BF0A16F97FF73B), UINT64_C(0xE4567384A5AF0636), - UINT64_C(0x196DF93240DE1521), UINT64_C(0x4D8480A01C0EE42C), - UINT64_C(0x71C2437425322D8A), UINT64_C(0x252B3AE679E2DC87), - UINT64_C(0xD810B0509C93CF90), UINT64_C(0x8CF9C9C2C0433E9D), - UINT64_C(0xA09D37F8EEEA5CDC), UINT64_C(0xF4744E6AB23AADD1), - UINT64_C(0x094FC4DC574BBEC6), UINT64_C(0x5DA6BD4E0B9B4FCB), - UINT64_C(0x61E07E9A32A7866D), UINT64_C(0x350907086E777760), - UINT64_C(0xC8328DBE8B066477), UINT64_C(0x9CDBF42CD7D6957A), - UINT64_C(0xD073867288020F69), UINT64_C(0x849AFFE0D4D2FE64), - UINT64_C(0x79A1755631A3ED73), UINT64_C(0x2D480CC46D731C7E), - UINT64_C(0x110ECF10544FD5D8), UINT64_C(0x45E7B682089F24D5), - UINT64_C(0xB8DC3C34EDEE37C2), UINT64_C(0xEC3545A6B13EC6CF), - UINT64_C(0xC051BB9C9F97A48E), UINT64_C(0x94B8C20EC3475583), - UINT64_C(0x698348B826364694), UINT64_C(0x3D6A312A7AE6B799), - UINT64_C(0x012CF2FE43DA7E3F), UINT64_C(0x55C58B6C1F0A8F32), - UINT64_C(0xA8FE01DAFA7B9C25), UINT64_C(0xFC177848A6AB6D28), - UINT64_C(0xF037FDAEA72958A7), UINT64_C(0xA4DE843CFBF9A9AA), - UINT64_C(0x59E50E8A1E88BABD), UINT64_C(0x0D0C771842584BB0), - UINT64_C(0x314AB4CC7B648216), UINT64_C(0x65A3CD5E27B4731B), - UINT64_C(0x989847E8C2C5600C), UINT64_C(0xCC713E7A9E159101), - UINT64_C(0xE015C040B0BCF340), UINT64_C(0xB4FCB9D2EC6C024D), - UINT64_C(0x49C73364091D115A), UINT64_C(0x1D2E4AF655CDE057), - UINT64_C(0x216889226CF129F1), UINT64_C(0x7581F0B03021D8FC), - UINT64_C(0x88BA7A06D550CBEB), UINT64_C(0xDC53039489803AE6), - UINT64_C(0x11EA9EBA6AF9FFCD), UINT64_C(0x4503E72836290EC0), - UINT64_C(0xB8386D9ED3581DD7), UINT64_C(0xECD1140C8F88ECDA), - UINT64_C(0xD097D7D8B6B4257C), UINT64_C(0x847EAE4AEA64D471), - UINT64_C(0x794524FC0F15C766), UINT64_C(0x2DAC5D6E53C5366B), - UINT64_C(0x01C8A3547D6C542A), UINT64_C(0x5521DAC621BCA527), - UINT64_C(0xA81A5070C4CDB630), UINT64_C(0xFCF329E2981D473D), - UINT64_C(0xC0B5EA36A1218E9B), UINT64_C(0x945C93A4FDF17F96), - UINT64_C(0x6967191218806C81), UINT64_C(0x3D8E608044509D8C), - UINT64_C(0x31AEE56645D2A803), UINT64_C(0x65479CF41902590E), - UINT64_C(0x987C1642FC734A19), UINT64_C(0xCC956FD0A0A3BB14), - UINT64_C(0xF0D3AC04999F72B2), UINT64_C(0xA43AD596C54F83BF), - UINT64_C(0x59015F20203E90A8), UINT64_C(0x0DE826B27CEE61A5), - UINT64_C(0x218CD888524703E4), UINT64_C(0x7565A11A0E97F2E9), - UINT64_C(0x885E2BACEBE6E1FE), UINT64_C(0xDCB7523EB73610F3), - UINT64_C(0xE0F191EA8E0AD955), UINT64_C(0xB418E878D2DA2858), - UINT64_C(0x492362CE37AB3B4F), UINT64_C(0x1DCA1B5C6B7BCA42), - UINT64_C(0x5162690234AF5051), UINT64_C(0x058B1090687FA15C), - UINT64_C(0xF8B09A268D0EB24B), UINT64_C(0xAC59E3B4D1DE4346), - UINT64_C(0x901F2060E8E28AE0), UINT64_C(0xC4F659F2B4327BED), - UINT64_C(0x39CDD344514368FA), UINT64_C(0x6D24AAD60D9399F7), - UINT64_C(0x414054EC233AFBB6), UINT64_C(0x15A92D7E7FEA0ABB), - UINT64_C(0xE892A7C89A9B19AC), UINT64_C(0xBC7BDE5AC64BE8A1), - UINT64_C(0x803D1D8EFF772107), UINT64_C(0xD4D4641CA3A7D00A), - UINT64_C(0x29EFEEAA46D6C31D), UINT64_C(0x7D0697381A063210), - UINT64_C(0x712612DE1B84079F), UINT64_C(0x25CF6B4C4754F692), - UINT64_C(0xD8F4E1FAA225E585), UINT64_C(0x8C1D9868FEF51488), - UINT64_C(0xB05B5BBCC7C9DD2E), UINT64_C(0xE4B2222E9B192C23), - UINT64_C(0x1989A8987E683F34), UINT64_C(0x4D60D10A22B8CE39), - UINT64_C(0x61042F300C11AC78), UINT64_C(0x35ED56A250C15D75), - UINT64_C(0xC8D6DC14B5B04E62), UINT64_C(0x9C3FA586E960BF6F), - UINT64_C(0xA0796652D05C76C9), UINT64_C(0xF4901FC08C8C87C4), - UINT64_C(0x09AB957669FD94D3), UINT64_C(0x5D42ECE4352D65DE) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x3F0BE14A916A6DCB), - UINT64_C(0x7E17C29522D4DB96), UINT64_C(0x411C23DFB3BEB65D), - UINT64_C(0xFC2F852A45A9B72C), UINT64_C(0xC3246460D4C3DAE7), - UINT64_C(0x823847BF677D6CBA), UINT64_C(0xBD33A6F5F6170171), - UINT64_C(0x6A87A57F245D70DD), UINT64_C(0x558C4435B5371D16), - UINT64_C(0x149067EA0689AB4B), UINT64_C(0x2B9B86A097E3C680), - UINT64_C(0x96A8205561F4C7F1), UINT64_C(0xA9A3C11FF09EAA3A), - UINT64_C(0xE8BFE2C043201C67), UINT64_C(0xD7B4038AD24A71AC), - UINT64_C(0xD50F4AFE48BAE1BA), UINT64_C(0xEA04ABB4D9D08C71), - UINT64_C(0xAB18886B6A6E3A2C), UINT64_C(0x94136921FB0457E7), - UINT64_C(0x2920CFD40D135696), UINT64_C(0x162B2E9E9C793B5D), - UINT64_C(0x57370D412FC78D00), UINT64_C(0x683CEC0BBEADE0CB), - UINT64_C(0xBF88EF816CE79167), UINT64_C(0x80830ECBFD8DFCAC), - UINT64_C(0xC19F2D144E334AF1), UINT64_C(0xFE94CC5EDF59273A), - UINT64_C(0x43A76AAB294E264B), UINT64_C(0x7CAC8BE1B8244B80), - UINT64_C(0x3DB0A83E0B9AFDDD), UINT64_C(0x02BB49749AF09016), - UINT64_C(0x38C63AD73E7BDDF1), UINT64_C(0x07CDDB9DAF11B03A), - UINT64_C(0x46D1F8421CAF0667), UINT64_C(0x79DA19088DC56BAC), - UINT64_C(0xC4E9BFFD7BD26ADD), UINT64_C(0xFBE25EB7EAB80716), - UINT64_C(0xBAFE7D685906B14B), UINT64_C(0x85F59C22C86CDC80), - UINT64_C(0x52419FA81A26AD2C), UINT64_C(0x6D4A7EE28B4CC0E7), - UINT64_C(0x2C565D3D38F276BA), UINT64_C(0x135DBC77A9981B71), - UINT64_C(0xAE6E1A825F8F1A00), UINT64_C(0x9165FBC8CEE577CB), - UINT64_C(0xD079D8177D5BC196), UINT64_C(0xEF72395DEC31AC5D), - UINT64_C(0xEDC9702976C13C4B), UINT64_C(0xD2C29163E7AB5180), - UINT64_C(0x93DEB2BC5415E7DD), UINT64_C(0xACD553F6C57F8A16), - UINT64_C(0x11E6F50333688B67), UINT64_C(0x2EED1449A202E6AC), - UINT64_C(0x6FF1379611BC50F1), UINT64_C(0x50FAD6DC80D63D3A), - UINT64_C(0x874ED556529C4C96), UINT64_C(0xB845341CC3F6215D), - UINT64_C(0xF95917C370489700), UINT64_C(0xC652F689E122FACB), - UINT64_C(0x7B61507C1735FBBA), UINT64_C(0x446AB136865F9671), - UINT64_C(0x057692E935E1202C), UINT64_C(0x3A7D73A3A48B4DE7), - UINT64_C(0x718C75AE7CF7BBE2), UINT64_C(0x4E8794E4ED9DD629), - UINT64_C(0x0F9BB73B5E236074), UINT64_C(0x30905671CF490DBF), - UINT64_C(0x8DA3F084395E0CCE), UINT64_C(0xB2A811CEA8346105), - UINT64_C(0xF3B432111B8AD758), UINT64_C(0xCCBFD35B8AE0BA93), - UINT64_C(0x1B0BD0D158AACB3F), UINT64_C(0x2400319BC9C0A6F4), - UINT64_C(0x651C12447A7E10A9), UINT64_C(0x5A17F30EEB147D62), - UINT64_C(0xE72455FB1D037C13), UINT64_C(0xD82FB4B18C6911D8), - UINT64_C(0x9933976E3FD7A785), UINT64_C(0xA6387624AEBDCA4E), - UINT64_C(0xA4833F50344D5A58), UINT64_C(0x9B88DE1AA5273793), - UINT64_C(0xDA94FDC5169981CE), UINT64_C(0xE59F1C8F87F3EC05), - UINT64_C(0x58ACBA7A71E4ED74), UINT64_C(0x67A75B30E08E80BF), - UINT64_C(0x26BB78EF533036E2), UINT64_C(0x19B099A5C25A5B29), - UINT64_C(0xCE049A2F10102A85), UINT64_C(0xF10F7B65817A474E), - UINT64_C(0xB01358BA32C4F113), UINT64_C(0x8F18B9F0A3AE9CD8), - UINT64_C(0x322B1F0555B99DA9), UINT64_C(0x0D20FE4FC4D3F062), - UINT64_C(0x4C3CDD90776D463F), UINT64_C(0x73373CDAE6072BF4), - UINT64_C(0x494A4F79428C6613), UINT64_C(0x7641AE33D3E60BD8), - UINT64_C(0x375D8DEC6058BD85), UINT64_C(0x08566CA6F132D04E), - UINT64_C(0xB565CA530725D13F), UINT64_C(0x8A6E2B19964FBCF4), - UINT64_C(0xCB7208C625F10AA9), UINT64_C(0xF479E98CB49B6762), - UINT64_C(0x23CDEA0666D116CE), UINT64_C(0x1CC60B4CF7BB7B05), - UINT64_C(0x5DDA28934405CD58), UINT64_C(0x62D1C9D9D56FA093), - UINT64_C(0xDFE26F2C2378A1E2), UINT64_C(0xE0E98E66B212CC29), - UINT64_C(0xA1F5ADB901AC7A74), UINT64_C(0x9EFE4CF390C617BF), - UINT64_C(0x9C4505870A3687A9), UINT64_C(0xA34EE4CD9B5CEA62), - UINT64_C(0xE252C71228E25C3F), UINT64_C(0xDD592658B98831F4), - UINT64_C(0x606A80AD4F9F3085), UINT64_C(0x5F6161E7DEF55D4E), - UINT64_C(0x1E7D42386D4BEB13), UINT64_C(0x2176A372FC2186D8), - UINT64_C(0xF6C2A0F82E6BF774), UINT64_C(0xC9C941B2BF019ABF), - UINT64_C(0x88D5626D0CBF2CE2), UINT64_C(0xB7DE83279DD54129), - UINT64_C(0x0AED25D26BC24058), UINT64_C(0x35E6C498FAA82D93), - UINT64_C(0x74FAE74749169BCE), UINT64_C(0x4BF1060DD87CF605), - UINT64_C(0xE318EB5CF9EF77C4), UINT64_C(0xDC130A1668851A0F), - UINT64_C(0x9D0F29C9DB3BAC52), UINT64_C(0xA204C8834A51C199), - UINT64_C(0x1F376E76BC46C0E8), UINT64_C(0x203C8F3C2D2CAD23), - UINT64_C(0x6120ACE39E921B7E), UINT64_C(0x5E2B4DA90FF876B5), - UINT64_C(0x899F4E23DDB20719), UINT64_C(0xB694AF694CD86AD2), - UINT64_C(0xF7888CB6FF66DC8F), UINT64_C(0xC8836DFC6E0CB144), - UINT64_C(0x75B0CB09981BB035), UINT64_C(0x4ABB2A430971DDFE), - UINT64_C(0x0BA7099CBACF6BA3), UINT64_C(0x34ACE8D62BA50668), - UINT64_C(0x3617A1A2B155967E), UINT64_C(0x091C40E8203FFBB5), - UINT64_C(0x4800633793814DE8), UINT64_C(0x770B827D02EB2023), - UINT64_C(0xCA382488F4FC2152), UINT64_C(0xF533C5C265964C99), - UINT64_C(0xB42FE61DD628FAC4), UINT64_C(0x8B2407574742970F), - UINT64_C(0x5C9004DD9508E6A3), UINT64_C(0x639BE59704628B68), - UINT64_C(0x2287C648B7DC3D35), UINT64_C(0x1D8C270226B650FE), - UINT64_C(0xA0BF81F7D0A1518F), UINT64_C(0x9FB460BD41CB3C44), - UINT64_C(0xDEA84362F2758A19), UINT64_C(0xE1A3A228631FE7D2), - UINT64_C(0xDBDED18BC794AA35), UINT64_C(0xE4D530C156FEC7FE), - UINT64_C(0xA5C9131EE54071A3), UINT64_C(0x9AC2F254742A1C68), - UINT64_C(0x27F154A1823D1D19), UINT64_C(0x18FAB5EB135770D2), - UINT64_C(0x59E69634A0E9C68F), UINT64_C(0x66ED777E3183AB44), - UINT64_C(0xB15974F4E3C9DAE8), UINT64_C(0x8E5295BE72A3B723), - UINT64_C(0xCF4EB661C11D017E), UINT64_C(0xF045572B50776CB5), - UINT64_C(0x4D76F1DEA6606DC4), UINT64_C(0x727D1094370A000F), - UINT64_C(0x3361334B84B4B652), UINT64_C(0x0C6AD20115DEDB99), - UINT64_C(0x0ED19B758F2E4B8F), UINT64_C(0x31DA7A3F1E442644), - UINT64_C(0x70C659E0ADFA9019), UINT64_C(0x4FCDB8AA3C90FDD2), - UINT64_C(0xF2FE1E5FCA87FCA3), UINT64_C(0xCDF5FF155BED9168), - UINT64_C(0x8CE9DCCAE8532735), UINT64_C(0xB3E23D8079394AFE), - UINT64_C(0x64563E0AAB733B52), UINT64_C(0x5B5DDF403A195699), - UINT64_C(0x1A41FC9F89A7E0C4), UINT64_C(0x254A1DD518CD8D0F), - UINT64_C(0x9879BB20EEDA8C7E), UINT64_C(0xA7725A6A7FB0E1B5), - UINT64_C(0xE66E79B5CC0E57E8), UINT64_C(0xD96598FF5D643A23), - UINT64_C(0x92949EF28518CC26), UINT64_C(0xAD9F7FB81472A1ED), - UINT64_C(0xEC835C67A7CC17B0), UINT64_C(0xD388BD2D36A67A7B), - UINT64_C(0x6EBB1BD8C0B17B0A), UINT64_C(0x51B0FA9251DB16C1), - UINT64_C(0x10ACD94DE265A09C), UINT64_C(0x2FA73807730FCD57), - UINT64_C(0xF8133B8DA145BCFB), UINT64_C(0xC718DAC7302FD130), - UINT64_C(0x8604F9188391676D), UINT64_C(0xB90F185212FB0AA6), - UINT64_C(0x043CBEA7E4EC0BD7), UINT64_C(0x3B375FED7586661C), - UINT64_C(0x7A2B7C32C638D041), UINT64_C(0x45209D785752BD8A), - UINT64_C(0x479BD40CCDA22D9C), UINT64_C(0x789035465CC84057), - UINT64_C(0x398C1699EF76F60A), UINT64_C(0x0687F7D37E1C9BC1), - UINT64_C(0xBBB45126880B9AB0), UINT64_C(0x84BFB06C1961F77B), - UINT64_C(0xC5A393B3AADF4126), UINT64_C(0xFAA872F93BB52CED), - UINT64_C(0x2D1C7173E9FF5D41), UINT64_C(0x121790397895308A), - UINT64_C(0x530BB3E6CB2B86D7), UINT64_C(0x6C0052AC5A41EB1C), - UINT64_C(0xD133F459AC56EA6D), UINT64_C(0xEE3815133D3C87A6), - UINT64_C(0xAF2436CC8E8231FB), UINT64_C(0x902FD7861FE85C30), - UINT64_C(0xAA52A425BB6311D7), UINT64_C(0x9559456F2A097C1C), - UINT64_C(0xD44566B099B7CA41), UINT64_C(0xEB4E87FA08DDA78A), - UINT64_C(0x567D210FFECAA6FB), UINT64_C(0x6976C0456FA0CB30), - UINT64_C(0x286AE39ADC1E7D6D), UINT64_C(0x176102D04D7410A6), - UINT64_C(0xC0D5015A9F3E610A), UINT64_C(0xFFDEE0100E540CC1), - UINT64_C(0xBEC2C3CFBDEABA9C), UINT64_C(0x81C922852C80D757), - UINT64_C(0x3CFA8470DA97D626), UINT64_C(0x03F1653A4BFDBBED), - UINT64_C(0x42ED46E5F8430DB0), UINT64_C(0x7DE6A7AF6929607B), - UINT64_C(0x7F5DEEDBF3D9F06D), UINT64_C(0x40560F9162B39DA6), - UINT64_C(0x014A2C4ED10D2BFB), UINT64_C(0x3E41CD0440674630), - UINT64_C(0x83726BF1B6704741), UINT64_C(0xBC798ABB271A2A8A), - UINT64_C(0xFD65A96494A49CD7), UINT64_C(0xC26E482E05CEF11C), - UINT64_C(0x15DA4BA4D78480B0), UINT64_C(0x2AD1AAEE46EEED7B), - UINT64_C(0x6BCD8931F5505B26), UINT64_C(0x54C6687B643A36ED), - UINT64_C(0xE9F5CE8E922D379C), UINT64_C(0xD6FE2FC403475A57), - UINT64_C(0x97E20C1BB0F9EC0A), UINT64_C(0xA8E9ED51219381C1) - }, { - UINT64_C(0x0000000000000000), UINT64_C(0x1DEE8A5E222CA1DC), - UINT64_C(0x3BDD14BC445943B8), UINT64_C(0x26339EE26675E264), - UINT64_C(0x77BA297888B28770), UINT64_C(0x6A54A326AA9E26AC), - UINT64_C(0x4C673DC4CCEBC4C8), UINT64_C(0x5189B79AEEC76514), - UINT64_C(0xEF7452F111650EE0), UINT64_C(0xF29AD8AF3349AF3C), - UINT64_C(0xD4A9464D553C4D58), UINT64_C(0xC947CC137710EC84), - UINT64_C(0x98CE7B8999D78990), UINT64_C(0x8520F1D7BBFB284C), - UINT64_C(0xA3136F35DD8ECA28), UINT64_C(0xBEFDE56BFFA26BF4), - UINT64_C(0x4C300AC98DC40345), UINT64_C(0x51DE8097AFE8A299), - UINT64_C(0x77ED1E75C99D40FD), UINT64_C(0x6A03942BEBB1E121), - UINT64_C(0x3B8A23B105768435), UINT64_C(0x2664A9EF275A25E9), - UINT64_C(0x0057370D412FC78D), UINT64_C(0x1DB9BD5363036651), - UINT64_C(0xA34458389CA10DA5), UINT64_C(0xBEAAD266BE8DAC79), - UINT64_C(0x98994C84D8F84E1D), UINT64_C(0x8577C6DAFAD4EFC1), - UINT64_C(0xD4FE714014138AD5), UINT64_C(0xC910FB1E363F2B09), - UINT64_C(0xEF2365FC504AC96D), UINT64_C(0xF2CDEFA2726668B1), - UINT64_C(0x986015931B88068A), UINT64_C(0x858E9FCD39A4A756), - UINT64_C(0xA3BD012F5FD14532), UINT64_C(0xBE538B717DFDE4EE), - UINT64_C(0xEFDA3CEB933A81FA), UINT64_C(0xF234B6B5B1162026), - UINT64_C(0xD4072857D763C242), UINT64_C(0xC9E9A209F54F639E), - UINT64_C(0x771447620AED086A), UINT64_C(0x6AFACD3C28C1A9B6), - UINT64_C(0x4CC953DE4EB44BD2), UINT64_C(0x5127D9806C98EA0E), - UINT64_C(0x00AE6E1A825F8F1A), UINT64_C(0x1D40E444A0732EC6), - UINT64_C(0x3B737AA6C606CCA2), UINT64_C(0x269DF0F8E42A6D7E), - UINT64_C(0xD4501F5A964C05CF), UINT64_C(0xC9BE9504B460A413), - UINT64_C(0xEF8D0BE6D2154677), UINT64_C(0xF26381B8F039E7AB), - UINT64_C(0xA3EA36221EFE82BF), UINT64_C(0xBE04BC7C3CD22363), - UINT64_C(0x9837229E5AA7C107), UINT64_C(0x85D9A8C0788B60DB), - UINT64_C(0x3B244DAB87290B2F), UINT64_C(0x26CAC7F5A505AAF3), - UINT64_C(0x00F95917C3704897), UINT64_C(0x1D17D349E15CE94B), - UINT64_C(0x4C9E64D30F9B8C5F), UINT64_C(0x5170EE8D2DB72D83), - UINT64_C(0x7743706F4BC2CFE7), UINT64_C(0x6AADFA3169EE6E3B), - UINT64_C(0xA218840D981E1391), UINT64_C(0xBFF60E53BA32B24D), - UINT64_C(0x99C590B1DC475029), UINT64_C(0x842B1AEFFE6BF1F5), - UINT64_C(0xD5A2AD7510AC94E1), UINT64_C(0xC84C272B3280353D), - UINT64_C(0xEE7FB9C954F5D759), UINT64_C(0xF391339776D97685), - UINT64_C(0x4D6CD6FC897B1D71), UINT64_C(0x50825CA2AB57BCAD), - UINT64_C(0x76B1C240CD225EC9), UINT64_C(0x6B5F481EEF0EFF15), - UINT64_C(0x3AD6FF8401C99A01), UINT64_C(0x273875DA23E53BDD), - UINT64_C(0x010BEB384590D9B9), UINT64_C(0x1CE5616667BC7865), - UINT64_C(0xEE288EC415DA10D4), UINT64_C(0xF3C6049A37F6B108), - UINT64_C(0xD5F59A785183536C), UINT64_C(0xC81B102673AFF2B0), - UINT64_C(0x9992A7BC9D6897A4), UINT64_C(0x847C2DE2BF443678), - UINT64_C(0xA24FB300D931D41C), UINT64_C(0xBFA1395EFB1D75C0), - UINT64_C(0x015CDC3504BF1E34), UINT64_C(0x1CB2566B2693BFE8), - UINT64_C(0x3A81C88940E65D8C), UINT64_C(0x276F42D762CAFC50), - UINT64_C(0x76E6F54D8C0D9944), UINT64_C(0x6B087F13AE213898), - UINT64_C(0x4D3BE1F1C854DAFC), UINT64_C(0x50D56BAFEA787B20), - UINT64_C(0x3A78919E8396151B), UINT64_C(0x27961BC0A1BAB4C7), - UINT64_C(0x01A58522C7CF56A3), UINT64_C(0x1C4B0F7CE5E3F77F), - UINT64_C(0x4DC2B8E60B24926B), UINT64_C(0x502C32B8290833B7), - UINT64_C(0x761FAC5A4F7DD1D3), UINT64_C(0x6BF126046D51700F), - UINT64_C(0xD50CC36F92F31BFB), UINT64_C(0xC8E24931B0DFBA27), - UINT64_C(0xEED1D7D3D6AA5843), UINT64_C(0xF33F5D8DF486F99F), - UINT64_C(0xA2B6EA171A419C8B), UINT64_C(0xBF586049386D3D57), - UINT64_C(0x996BFEAB5E18DF33), UINT64_C(0x848574F57C347EEF), - UINT64_C(0x76489B570E52165E), UINT64_C(0x6BA611092C7EB782), - UINT64_C(0x4D958FEB4A0B55E6), UINT64_C(0x507B05B56827F43A), - UINT64_C(0x01F2B22F86E0912E), UINT64_C(0x1C1C3871A4CC30F2), - UINT64_C(0x3A2FA693C2B9D296), UINT64_C(0x27C12CCDE095734A), - UINT64_C(0x993CC9A61F3718BE), UINT64_C(0x84D243F83D1BB962), - UINT64_C(0xA2E1DD1A5B6E5B06), UINT64_C(0xBF0F57447942FADA), - UINT64_C(0xEE86E0DE97859FCE), UINT64_C(0xF3686A80B5A93E12), - UINT64_C(0xD55BF462D3DCDC76), UINT64_C(0xC8B57E3CF1F07DAA), - UINT64_C(0xD6E9A7309F3239A7), UINT64_C(0xCB072D6EBD1E987B), - UINT64_C(0xED34B38CDB6B7A1F), UINT64_C(0xF0DA39D2F947DBC3), - UINT64_C(0xA1538E481780BED7), UINT64_C(0xBCBD041635AC1F0B), - UINT64_C(0x9A8E9AF453D9FD6F), UINT64_C(0x876010AA71F55CB3), - UINT64_C(0x399DF5C18E573747), UINT64_C(0x24737F9FAC7B969B), - UINT64_C(0x0240E17DCA0E74FF), UINT64_C(0x1FAE6B23E822D523), - UINT64_C(0x4E27DCB906E5B037), UINT64_C(0x53C956E724C911EB), - UINT64_C(0x75FAC80542BCF38F), UINT64_C(0x6814425B60905253), - UINT64_C(0x9AD9ADF912F63AE2), UINT64_C(0x873727A730DA9B3E), - UINT64_C(0xA104B94556AF795A), UINT64_C(0xBCEA331B7483D886), - UINT64_C(0xED6384819A44BD92), UINT64_C(0xF08D0EDFB8681C4E), - UINT64_C(0xD6BE903DDE1DFE2A), UINT64_C(0xCB501A63FC315FF6), - UINT64_C(0x75ADFF0803933402), UINT64_C(0x6843755621BF95DE), - UINT64_C(0x4E70EBB447CA77BA), UINT64_C(0x539E61EA65E6D666), - UINT64_C(0x0217D6708B21B372), UINT64_C(0x1FF95C2EA90D12AE), - UINT64_C(0x39CAC2CCCF78F0CA), UINT64_C(0x24244892ED545116), - UINT64_C(0x4E89B2A384BA3F2D), UINT64_C(0x536738FDA6969EF1), - UINT64_C(0x7554A61FC0E37C95), UINT64_C(0x68BA2C41E2CFDD49), - UINT64_C(0x39339BDB0C08B85D), UINT64_C(0x24DD11852E241981), - UINT64_C(0x02EE8F674851FBE5), UINT64_C(0x1F0005396A7D5A39), - UINT64_C(0xA1FDE05295DF31CD), UINT64_C(0xBC136A0CB7F39011), - UINT64_C(0x9A20F4EED1867275), UINT64_C(0x87CE7EB0F3AAD3A9), - UINT64_C(0xD647C92A1D6DB6BD), UINT64_C(0xCBA943743F411761), - UINT64_C(0xED9ADD965934F505), UINT64_C(0xF07457C87B1854D9), - UINT64_C(0x02B9B86A097E3C68), UINT64_C(0x1F5732342B529DB4), - UINT64_C(0x3964ACD64D277FD0), UINT64_C(0x248A26886F0BDE0C), - UINT64_C(0x7503911281CCBB18), UINT64_C(0x68ED1B4CA3E01AC4), - UINT64_C(0x4EDE85AEC595F8A0), UINT64_C(0x53300FF0E7B9597C), - UINT64_C(0xEDCDEA9B181B3288), UINT64_C(0xF02360C53A379354), - UINT64_C(0xD610FE275C427130), UINT64_C(0xCBFE74797E6ED0EC), - UINT64_C(0x9A77C3E390A9B5F8), UINT64_C(0x879949BDB2851424), - UINT64_C(0xA1AAD75FD4F0F640), UINT64_C(0xBC445D01F6DC579C), - UINT64_C(0x74F1233D072C2A36), UINT64_C(0x691FA96325008BEA), - UINT64_C(0x4F2C37814375698E), UINT64_C(0x52C2BDDF6159C852), - UINT64_C(0x034B0A458F9EAD46), UINT64_C(0x1EA5801BADB20C9A), - UINT64_C(0x38961EF9CBC7EEFE), UINT64_C(0x257894A7E9EB4F22), - UINT64_C(0x9B8571CC164924D6), UINT64_C(0x866BFB923465850A), - UINT64_C(0xA05865705210676E), UINT64_C(0xBDB6EF2E703CC6B2), - UINT64_C(0xEC3F58B49EFBA3A6), UINT64_C(0xF1D1D2EABCD7027A), - UINT64_C(0xD7E24C08DAA2E01E), UINT64_C(0xCA0CC656F88E41C2), - UINT64_C(0x38C129F48AE82973), UINT64_C(0x252FA3AAA8C488AF), - UINT64_C(0x031C3D48CEB16ACB), UINT64_C(0x1EF2B716EC9DCB17), - UINT64_C(0x4F7B008C025AAE03), UINT64_C(0x52958AD220760FDF), - UINT64_C(0x74A614304603EDBB), UINT64_C(0x69489E6E642F4C67), - UINT64_C(0xD7B57B059B8D2793), UINT64_C(0xCA5BF15BB9A1864F), - UINT64_C(0xEC686FB9DFD4642B), UINT64_C(0xF186E5E7FDF8C5F7), - UINT64_C(0xA00F527D133FA0E3), UINT64_C(0xBDE1D8233113013F), - UINT64_C(0x9BD246C15766E35B), UINT64_C(0x863CCC9F754A4287), - UINT64_C(0xEC9136AE1CA42CBC), UINT64_C(0xF17FBCF03E888D60), - UINT64_C(0xD74C221258FD6F04), UINT64_C(0xCAA2A84C7AD1CED8), - UINT64_C(0x9B2B1FD69416ABCC), UINT64_C(0x86C59588B63A0A10), - UINT64_C(0xA0F60B6AD04FE874), UINT64_C(0xBD188134F26349A8), - UINT64_C(0x03E5645F0DC1225C), UINT64_C(0x1E0BEE012FED8380), - UINT64_C(0x383870E3499861E4), UINT64_C(0x25D6FABD6BB4C038), - UINT64_C(0x745F4D278573A52C), UINT64_C(0x69B1C779A75F04F0), - UINT64_C(0x4F82599BC12AE694), UINT64_C(0x526CD3C5E3064748), - UINT64_C(0xA0A13C6791602FF9), UINT64_C(0xBD4FB639B34C8E25), - UINT64_C(0x9B7C28DBD5396C41), UINT64_C(0x8692A285F715CD9D), - UINT64_C(0xD71B151F19D2A889), UINT64_C(0xCAF59F413BFE0955), - UINT64_C(0xECC601A35D8BEB31), UINT64_C(0xF1288BFD7FA74AED), - UINT64_C(0x4FD56E9680052119), UINT64_C(0x523BE4C8A22980C5), - UINT64_C(0x74087A2AC45C62A1), UINT64_C(0x69E6F074E670C37D), - UINT64_C(0x386F47EE08B7A669), UINT64_C(0x2581CDB02A9B07B5), - UINT64_C(0x03B253524CEEE5D1), UINT64_C(0x1E5CD90C6EC2440D) - } -}; diff --git a/deps/lzma/liblzma/check/crc64_tablegen.c b/deps/lzma/liblzma/check/crc64_tablegen.c deleted file mode 100644 index fddaa7ed1400ce..00000000000000 --- a/deps/lzma/liblzma/check/crc64_tablegen.c +++ /dev/null @@ -1,88 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc64_tablegen.c -/// \brief Generate crc64_table_le.h and crc64_table_be.h -/// -/// Compiling: gcc -std=c99 -o crc64_tablegen crc64_tablegen.c -/// Add -DWORDS_BIGENDIAN to generate big endian table. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include "../../common/tuklib_integer.h" - - -static uint64_t crc64_table[4][256]; - - -extern void -init_crc64_table(void) -{ - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint64_t r = s == 0 ? b : crc64_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - crc64_table[s][b] = r; - } - } - -#ifdef WORDS_BIGENDIAN - for (size_t s = 0; s < 4; ++s) - for (size_t b = 0; b < 256; ++b) - crc64_table[s][b] = bswap64(crc64_table[s][b]); -#endif - - return; -} - - -static void -print_crc64_table(void) -{ - printf("/* This file has been automatically generated by " - "crc64_tablegen.c. */\n\n" - "const uint64_t lzma_crc64_table[4][256] = {\n\t{"); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - if ((b % 2) == 0) - printf("\n\t\t"); - - printf("UINT64_C(0x%016" PRIX64 ")", - crc64_table[s][b]); - - if (b != 255) - printf(",%s", (b+1) % 2 == 0 ? "" : " "); - } - - if (s == 3) - printf("\n\t}\n};\n"); - else - printf("\n\t}, {"); - } - - return; -} - - -int -main(void) -{ - init_crc64_table(); - print_crc64_table(); - return 0; -} diff --git a/deps/lzma/liblzma/check/crc64_x86.S b/deps/lzma/liblzma/check/crc64_x86.S deleted file mode 100644 index 81e06261e0f2e7..00000000000000 --- a/deps/lzma/liblzma/check/crc64_x86.S +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Speed-optimized CRC64 using slicing-by-four algorithm - * - * This uses only i386 instructions, but it is optimized for i686 and later - * (including e.g. Pentium II/III/IV, Athlon XP, and Core 2). - * - * Authors: Igor Pavlov (original CRC32 assembly code) - * Lasse Collin (CRC64 adaptation of the modified CRC32 code) - * - * This file has been put into the public domain. - * You can do whatever you want with this file. - * - * This code needs lzma_crc64_table, which can be created using the - * following C code: - -uint64_t lzma_crc64_table[4][256]; - -void -init_table(void) -{ - // ECMA-182 - static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42); - - for (size_t s = 0; s < 4; ++s) { - for (size_t b = 0; b < 256; ++b) { - uint64_t r = s == 0 ? b : lzma_crc64_table[s - 1][b]; - - for (size_t i = 0; i < 8; ++i) { - if (r & 1) - r = (r >> 1) ^ poly64; - else - r >>= 1; - } - - lzma_crc64_table[s][b] = r; - } - } -} - - * The prototype of the CRC64 function: - * extern uint64_t lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc); - */ - -/* - * On some systems, the functions need to be prefixed. The prefix is - * usually an underscore. - */ -#ifndef __USER_LABEL_PREFIX__ -# define __USER_LABEL_PREFIX__ -#endif -#define MAKE_SYM_CAT(prefix, sym) prefix ## sym -#define MAKE_SYM(prefix, sym) MAKE_SYM_CAT(prefix, sym) -#define LZMA_CRC64 MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64) -#define LZMA_CRC64_TABLE MAKE_SYM(__USER_LABEL_PREFIX__, lzma_crc64_table) - -/* - * Solaris assembler doesn't have .p2align, and Darwin uses .align - * differently than GNU/Linux and Solaris. - */ -#if defined(__APPLE__) || defined(__MSDOS__) -# define ALIGN(pow2, abs) .align pow2 -#else -# define ALIGN(pow2, abs) .align abs -#endif - - .text - .globl LZMA_CRC64 - -#if !defined(__APPLE__) && !defined(_WIN32) && !defined(__CYGWIN__) \ - && !defined(__MSDOS__) - .type LZMA_CRC64, @function -#endif - - ALIGN(4, 16) -LZMA_CRC64: - /* - * Register usage: - * %eax crc LSB - * %edx crc MSB - * %esi buf - * %edi size or buf + size - * %ebx lzma_crc64_table - * %ebp Table index - * %ecx Temporary - */ - pushl %ebx - pushl %esi - pushl %edi - pushl %ebp - movl 0x14(%esp), %esi /* buf */ - movl 0x18(%esp), %edi /* size */ - movl 0x1C(%esp), %eax /* crc LSB */ - movl 0x20(%esp), %edx /* crc MSB */ - - /* - * Store the address of lzma_crc64_table to %ebx. This is needed to - * get position-independent code (PIC). - * - * The PIC macro is defined by libtool, while __PIC__ is defined - * by GCC but only on some systems. Testing for both makes it simpler - * to test this code without libtool, and keeps the code working also - * when built with libtool but using something else than GCC. - * - * I understood that libtool may define PIC on Windows even though - * the code in Windows DLLs is not PIC in sense that it is in ELF - * binaries, so we need a separate check to always use the non-PIC - * code on Windows. - */ -#if (!defined(PIC) && !defined(__PIC__)) \ - || (defined(_WIN32) || defined(__CYGWIN__)) - /* Not PIC */ - movl $ LZMA_CRC64_TABLE, %ebx -#elif defined(__APPLE__) - /* Mach-O */ - call .L_get_pc -.L_pic: - leal .L_lzma_crc64_table$non_lazy_ptr-.L_pic(%ebx), %ebx - movl (%ebx), %ebx -#else - /* ELF */ - call .L_get_pc - addl $_GLOBAL_OFFSET_TABLE_, %ebx - movl LZMA_CRC64_TABLE@GOT(%ebx), %ebx -#endif - - /* Complement the initial value. */ - notl %eax - notl %edx - -.L_align: - /* - * Check if there is enough input to use slicing-by-four. - * We need eight bytes, because the loop pre-reads four bytes. - */ - cmpl $8, %edi - jb .L_rest - - /* Check if we have reached alignment of four bytes. */ - testl $3, %esi - jz .L_slice - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrdl $8, %edx, %eax - xorl (%ebx, %ebp, 8), %eax - shrl $8, %edx - xorl 4(%ebx, %ebp, 8), %edx - decl %edi - jmp .L_align - -.L_slice: - /* - * If we get here, there's at least eight bytes of aligned input - * available. Make %edi multiple of four bytes. Store the possible - * remainder over the "size" variable in the argument stack. - */ - movl %edi, 0x18(%esp) - andl $-4, %edi - subl %edi, 0x18(%esp) - - /* - * Let %edi be buf + size - 4 while running the main loop. This way - * we can compare for equality to determine when exit the loop. - */ - addl %esi, %edi - subl $4, %edi - - /* Read in the first four aligned bytes. */ - movl (%esi), %ecx - -.L_loop: - xorl %eax, %ecx - movzbl %cl, %ebp - movl 0x1800(%ebx, %ebp, 8), %eax - xorl %edx, %eax - movl 0x1804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - xorl 0x1000(%ebx, %ebp, 8), %eax - xorl 0x1004(%ebx, %ebp, 8), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0800(%ebx, %ebp, 8), %eax - xorl 0x0804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - addl $4, %esi - xorl (%ebx, %ebp, 8), %eax - xorl 4(%ebx, %ebp, 8), %edx - - /* Check for end of aligned input. */ - cmpl %edi, %esi - - /* - * Copy the next input byte to %ecx. It is slightly faster to - * read it here than at the top of the loop. - */ - movl (%esi), %ecx - jb .L_loop - - /* - * Process the remaining four bytes, which we have already - * copied to %ecx. - */ - xorl %eax, %ecx - movzbl %cl, %ebp - movl 0x1800(%ebx, %ebp, 8), %eax - xorl %edx, %eax - movl 0x1804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - xorl 0x1000(%ebx, %ebp, 8), %eax - xorl 0x1004(%ebx, %ebp, 8), %edx - shrl $16, %ecx - movzbl %cl, %ebp - xorl 0x0800(%ebx, %ebp, 8), %eax - xorl 0x0804(%ebx, %ebp, 8), %edx - movzbl %ch, %ebp - addl $4, %esi - xorl (%ebx, %ebp, 8), %eax - xorl 4(%ebx, %ebp, 8), %edx - - /* Copy the number of remaining bytes to %edi. */ - movl 0x18(%esp), %edi - -.L_rest: - /* Check for end of input. */ - testl %edi, %edi - jz .L_return - - /* Calculate CRC of the next input byte. */ - movzbl (%esi), %ebp - incl %esi - movzbl %al, %ecx - xorl %ecx, %ebp - shrdl $8, %edx, %eax - xorl (%ebx, %ebp, 8), %eax - shrl $8, %edx - xorl 4(%ebx, %ebp, 8), %edx - decl %edi - jmp .L_rest - -.L_return: - /* Complement the final value. */ - notl %eax - notl %edx - - popl %ebp - popl %edi - popl %esi - popl %ebx - ret - -#if defined(PIC) || defined(__PIC__) - ALIGN(4, 16) -.L_get_pc: - movl (%esp), %ebx - ret -#endif - -#if defined(__APPLE__) && (defined(PIC) || defined(__PIC__)) - /* Mach-O PIC */ - .section __IMPORT,__pointers,non_lazy_symbol_pointers -.L_lzma_crc64_table$non_lazy_ptr: - .indirect_symbol LZMA_CRC64_TABLE - .long 0 - -#elif defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT - /* This is equivalent of __declspec(dllexport). */ - .section .drectve - .ascii " -export:lzma_crc64" -# endif - -#elif !defined(__MSDOS__) - /* ELF */ - .size LZMA_CRC64, .-LZMA_CRC64 -#endif - -/* - * This is needed to support non-executable stack. It's ugly to - * use __linux__ here, but I don't know a way to detect when - * we are using GNU assembler. - */ -#if defined(__ELF__) && (defined(__FreeBSD__) || defined(__linux__)) - .section .note.GNU-stack,"",@progbits -#endif diff --git a/deps/lzma/liblzma/check/crc_macros.h b/deps/lzma/liblzma/check/crc_macros.h deleted file mode 100644 index a7c21b765dca90..00000000000000 --- a/deps/lzma/liblzma/check/crc_macros.h +++ /dev/null @@ -1,30 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file crc_macros.h -/// \brief Some endian-dependent macros for CRC32 and CRC64 -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifdef WORDS_BIGENDIAN -# define A(x) ((x) >> 24) -# define B(x) (((x) >> 16) & 0xFF) -# define C(x) (((x) >> 8) & 0xFF) -# define D(x) ((x) & 0xFF) - -# define S8(x) ((x) << 8) -# define S32(x) ((x) << 32) - -#else -# define A(x) ((x) & 0xFF) -# define B(x) (((x) >> 8) & 0xFF) -# define C(x) (((x) >> 16) & 0xFF) -# define D(x) ((x) >> 24) - -# define S8(x) ((x) >> 8) -# define S32(x) ((x) >> 32) -#endif diff --git a/deps/lzma/liblzma/check/sha256.c b/deps/lzma/liblzma/check/sha256.c deleted file mode 100644 index f2cc0d71ac6379..00000000000000 --- a/deps/lzma/liblzma/check/sha256.c +++ /dev/null @@ -1,200 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sha256.c -/// \brief SHA-256 -/// -/// \todo Crypto++ has x86 ASM optimizations. They use SSE so if they -/// are imported to liblzma, SSE instructions need to be used -/// conditionally to keep the code working on older boxes. -// -// This code is based on the code found from 7-Zip, which has a modified -// version of the SHA-256 found from Crypto++ . -// The code was modified a little to fit into liblzma. -// -// Authors: Kevin Springle -// Wei Dai -// Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -// Avoid bogus warnings in transform(). -#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) || __GNUC__ > 4 -# pragma GCC diagnostic ignored "-Wuninitialized" -#endif - -#include "check.h" - -// At least on x86, GCC is able to optimize this to a rotate instruction. -#define rotr_32(num, amount) ((num) >> (amount) | (num) << (32 - (amount))) - -#define blk0(i) (W[i] = data[i]) -#define blk2(i) (W[i & 15] += s1(W[(i - 2) & 15]) + W[(i - 7) & 15] \ - + s0(W[(i - 15) & 15])) - -#define Ch(x, y, z) (z ^ (x & (y ^ z))) -#define Maj(x, y, z) ((x & y) | (z & (x | y))) - -#define a(i) T[(0 - i) & 7] -#define b(i) T[(1 - i) & 7] -#define c(i) T[(2 - i) & 7] -#define d(i) T[(3 - i) & 7] -#define e(i) T[(4 - i) & 7] -#define f(i) T[(5 - i) & 7] -#define g(i) T[(6 - i) & 7] -#define h(i) T[(7 - i) & 7] - -#define R(i) \ - h(i) += S1(e(i)) + Ch(e(i), f(i), g(i)) + SHA256_K[i + j] \ - + (j ? blk2(i) : blk0(i)); \ - d(i) += h(i); \ - h(i) += S0(a(i)) + Maj(a(i), b(i), c(i)) - -#define S0(x) (rotr_32(x, 2) ^ rotr_32(x, 13) ^ rotr_32(x, 22)) -#define S1(x) (rotr_32(x, 6) ^ rotr_32(x, 11) ^ rotr_32(x, 25)) -#define s0(x) (rotr_32(x, 7) ^ rotr_32(x, 18) ^ (x >> 3)) -#define s1(x) (rotr_32(x, 17) ^ rotr_32(x, 19) ^ (x >> 10)) - - -static const uint32_t SHA256_K[64] = { - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, -}; - - -static void -transform(uint32_t state[8], const uint32_t data[16]) -{ - uint32_t W[16]; - uint32_t T[8]; - - // Copy state[] to working vars. - memcpy(T, state, sizeof(T)); - - // 64 operations, partially loop unrolled - for (unsigned int j = 0; j < 64; j += 16) { - R( 0); R( 1); R( 2); R( 3); - R( 4); R( 5); R( 6); R( 7); - R( 8); R( 9); R(10); R(11); - R(12); R(13); R(14); R(15); - } - - // Add the working vars back into state[]. - state[0] += a(0); - state[1] += b(0); - state[2] += c(0); - state[3] += d(0); - state[4] += e(0); - state[5] += f(0); - state[6] += g(0); - state[7] += h(0); -} - - -static void -process(lzma_check_state *check) -{ -#ifdef WORDS_BIGENDIAN - transform(check->state.sha256.state, check->buffer.u32); - -#else - uint32_t data[16]; - - for (size_t i = 0; i < 16; ++i) - data[i] = bswap32(check->buffer.u32[i]); - - transform(check->state.sha256.state, data); -#endif - - return; -} - - -extern void -lzma_sha256_init(lzma_check_state *check) -{ - static const uint32_t s[8] = { - 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, - 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19, - }; - - memcpy(check->state.sha256.state, s, sizeof(s)); - check->state.sha256.size = 0; - - return; -} - - -extern void -lzma_sha256_update(const uint8_t *buf, size_t size, lzma_check_state *check) -{ - // Copy the input data into a properly aligned temporary buffer. - // This way we can be called with arbitrarily sized buffers - // (no need to be multiple of 64 bytes), and the code works also - // on architectures that don't allow unaligned memory access. - while (size > 0) { - const size_t copy_start = check->state.sha256.size & 0x3F; - size_t copy_size = 64 - copy_start; - if (copy_size > size) - copy_size = size; - - memcpy(check->buffer.u8 + copy_start, buf, copy_size); - - buf += copy_size; - size -= copy_size; - check->state.sha256.size += copy_size; - - if ((check->state.sha256.size & 0x3F) == 0) - process(check); - } - - return; -} - - -extern void -lzma_sha256_finish(lzma_check_state *check) -{ - // Add padding as described in RFC 3174 (it describes SHA-1 but - // the same padding style is used for SHA-256 too). - size_t pos = check->state.sha256.size & 0x3F; - check->buffer.u8[pos++] = 0x80; - - while (pos != 64 - 8) { - if (pos == 64) { - process(check); - pos = 0; - } - - check->buffer.u8[pos++] = 0x00; - } - - // Convert the message size from bytes to bits. - check->state.sha256.size *= 8; - - check->buffer.u64[(64 - 8) / 8] = conv64be(check->state.sha256.size); - - process(check); - - for (size_t i = 0; i < 8; ++i) - check->buffer.u32[i] = conv32be(check->state.sha256.state[i]); - - return; -} diff --git a/deps/lzma/liblzma/common/alone_decoder.c b/deps/lzma/liblzma/common/alone_decoder.c deleted file mode 100644 index c25112e6875f5e..00000000000000 --- a/deps/lzma/liblzma/common/alone_decoder.c +++ /dev/null @@ -1,238 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.c -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "alone_decoder.h" -#include "lzma_decoder.h" -#include "lz_decoder.h" - - -struct lzma_coder_s { - lzma_next_coder next; - - enum { - SEQ_PROPERTIES, - SEQ_DICTIONARY_SIZE, - SEQ_UNCOMPRESSED_SIZE, - SEQ_CODER_INIT, - SEQ_CODE, - } sequence; - - /// If true, reject files that are unlikely to be .lzma files. - /// If false, more non-.lzma files get accepted and will give - /// LZMA_DATA_ERROR either immediately or after a few output bytes. - bool picky; - - /// Position in the header fields - size_t pos; - - /// Uncompressed size decoded from the header - lzma_vli uncompressed_size; - - /// Memory usage limit - uint64_t memlimit; - - /// Amount of memory actually needed (only an estimate) - uint64_t memusage; - - /// Options decoded from the header needed to initialize - /// the LZMA decoder - lzma_options_lzma options; -}; - - -static lzma_ret -alone_decode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((__unused__)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - while (*out_pos < out_size - && (coder->sequence == SEQ_CODE || *in_pos < in_size)) - switch (coder->sequence) { - case SEQ_PROPERTIES: - if (lzma_lzma_lclppb_decode(&coder->options, in[*in_pos])) - return LZMA_FORMAT_ERROR; - - coder->sequence = SEQ_DICTIONARY_SIZE; - ++*in_pos; - break; - - case SEQ_DICTIONARY_SIZE: - coder->options.dict_size - |= (size_t)(in[*in_pos]) << (coder->pos * 8); - - if (++coder->pos == 4) { - if (coder->picky && coder->options.dict_size - != UINT32_MAX) { - // A hack to ditch tons of false positives: - // We allow only dictionary sizes that are - // 2^n or 2^n + 2^(n-1). LZMA_Alone created - // only files with 2^n, but accepts any - // dictionary size. - uint32_t d = coder->options.dict_size - 1; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - ++d; - - if (d != coder->options.dict_size) - return LZMA_FORMAT_ERROR; - } - - coder->pos = 0; - coder->sequence = SEQ_UNCOMPRESSED_SIZE; - } - - ++*in_pos; - break; - - case SEQ_UNCOMPRESSED_SIZE: - coder->uncompressed_size - |= (lzma_vli)(in[*in_pos]) << (coder->pos * 8); - ++*in_pos; - if (++coder->pos < 8) - break; - - // Another hack to ditch false positives: Assume that - // if the uncompressed size is known, it must be less - // than 256 GiB. - if (coder->picky - && coder->uncompressed_size != LZMA_VLI_UNKNOWN - && coder->uncompressed_size - >= (LZMA_VLI_C(1) << 38)) - return LZMA_FORMAT_ERROR; - - // Calculate the memory usage so that it is ready - // for SEQ_CODER_INIT. - coder->memusage = lzma_lzma_decoder_memusage(&coder->options) - + LZMA_MEMUSAGE_BASE; - - coder->pos = 0; - coder->sequence = SEQ_CODER_INIT; - - // Fall through - - case SEQ_CODER_INIT: { - if (coder->memusage > coder->memlimit) - return LZMA_MEMLIMIT_ERROR; - - lzma_filter_info filters[2] = { - { - .init = &lzma_lzma_decoder_init, - .options = &coder->options, - }, { - .init = NULL, - } - }; - - const lzma_ret ret = lzma_next_filter_init(&coder->next, - allocator, filters); - if (ret != LZMA_OK) - return ret; - - // Use a hack to set the uncompressed size. - lzma_lz_decoder_uncompressed(coder->next.coder, - coder->uncompressed_size); - - coder->sequence = SEQ_CODE; - break; - } - - case SEQ_CODE: { - return coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - } - - default: - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -alone_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -alone_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - *memusage = coder->memusage; - *old_memlimit = coder->memlimit; - - if (new_memlimit != 0) { - if (new_memlimit < coder->memusage) - return LZMA_MEMLIMIT_ERROR; - - coder->memlimit = new_memlimit; - } - - return LZMA_OK; -} - - -extern lzma_ret -lzma_alone_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, bool picky) -{ - lzma_next_coder_init(&lzma_alone_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &alone_decode; - next->end = &alone_decoder_end; - next->memconfig = &alone_decoder_memconfig; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - next->coder->sequence = SEQ_PROPERTIES; - next->coder->picky = picky; - next->coder->pos = 0; - next->coder->options.dict_size = 0; - next->coder->options.preset_dict = NULL; - next->coder->options.preset_dict_size = 0; - next->coder->uncompressed_size = 0; - next->coder->memlimit = memlimit; - next->coder->memusage = LZMA_MEMUSAGE_BASE; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_alone_decoder(lzma_stream *strm, uint64_t memlimit) -{ - lzma_next_strm_init(lzma_alone_decoder_init, strm, memlimit, false); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/alone_decoder.h b/deps/lzma/liblzma/common/alone_decoder.h deleted file mode 100644 index f666fc3823e1c5..00000000000000 --- a/deps/lzma/liblzma/common/alone_decoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.h -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_ALONE_DECODER_H -#define LZMA_ALONE_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_alone_decoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, bool picky); - -#endif diff --git a/deps/lzma/liblzma/common/alone_encoder.c b/deps/lzma/liblzma/common/alone_encoder.c deleted file mode 100644 index eb1697e9975395..00000000000000 --- a/deps/lzma/liblzma/common/alone_encoder.c +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file alone_decoder.c -/// \brief Decoder for LZMA_Alone files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "lzma_encoder.h" - - -#define ALONE_HEADER_SIZE (1 + 4 + 8) - - -struct lzma_coder_s { - lzma_next_coder next; - - enum { - SEQ_HEADER, - SEQ_CODE, - } sequence; - - size_t header_pos; - uint8_t header[ALONE_HEADER_SIZE]; -}; - - -static lzma_ret -alone_encode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((__unused__)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_HEADER: - lzma_bufcpy(coder->header, &coder->header_pos, - ALONE_HEADER_SIZE, - out, out_pos, out_size); - if (coder->header_pos < ALONE_HEADER_SIZE) - return LZMA_OK; - - coder->sequence = SEQ_CODE; - break; - - case SEQ_CODE: - return coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -alone_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -// At least for now, this is not used by any internal function. -static lzma_ret -alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_options_lzma *options) -{ - lzma_next_coder_init(&alone_encoder_init, next, allocator); - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &alone_encode; - next->end = &alone_encoder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_HEADER; - next->coder->header_pos = 0; - - // Encode the header: - // - Properties (1 byte) - if (lzma_lzma_lclppb_encode(options, next->coder->header)) - return LZMA_OPTIONS_ERROR; - - // - Dictionary size (4 bytes) - if (options->dict_size < LZMA_DICT_SIZE_MIN) - return LZMA_OPTIONS_ERROR; - - // Round up to the next 2^n or 2^n + 2^(n - 1) depending on which - // one is the next unless it is UINT32_MAX. While the header would - // allow any 32-bit integer, we do this to keep the decoder of liblzma - // accepting the resulting files. - uint32_t d = options->dict_size - 1; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - if (d != UINT32_MAX) - ++d; - - unaligned_write32le(next->coder->header + 1, d); - - // - Uncompressed size (always unknown and using EOPM) - memset(next->coder->header + 1 + 4, 0xFF, 8); - - // Initialize the LZMA encoder. - const lzma_filter_info filters[2] = { - { - .init = &lzma_lzma_encoder_init, - .options = (void *)(options), - }, { - .init = NULL, - } - }; - - return lzma_next_filter_init(&next->coder->next, allocator, filters); -} - - -/* -extern lzma_ret -lzma_alone_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_options_alone *options) -{ - lzma_next_coder_init(&alone_encoder_init, next, allocator, options); -} -*/ - - -extern LZMA_API(lzma_ret) -lzma_alone_encoder(lzma_stream *strm, const lzma_options_lzma *options) -{ - lzma_next_strm_init(alone_encoder_init, strm, options); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/auto_decoder.c b/deps/lzma/liblzma/common/auto_decoder.c deleted file mode 100644 index 35c895fd14c28f..00000000000000 --- a/deps/lzma/liblzma/common/auto_decoder.c +++ /dev/null @@ -1,186 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file auto_decoder.c -/// \brief Autodetect between .xz Stream and .lzma (LZMA_Alone) formats -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" -#include "alone_decoder.h" - - -struct lzma_coder_s { - /// Stream decoder or LZMA_Alone decoder - lzma_next_coder next; - - uint64_t memlimit; - uint32_t flags; - - enum { - SEQ_INIT, - SEQ_CODE, - SEQ_FINISH, - } sequence; -}; - - -static lzma_ret -auto_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - switch (coder->sequence) { - case SEQ_INIT: - if (*in_pos >= in_size) - return LZMA_OK; - - // Update the sequence now, because we want to continue from - // SEQ_CODE even if we return some LZMA_*_CHECK. - coder->sequence = SEQ_CODE; - - // Detect the file format. For now this is simple, since if - // it doesn't start with 0xFD (the first magic byte of the - // new format), it has to be LZMA_Alone, or something that - // we don't support at all. - if (in[*in_pos] == 0xFD) { - return_if_error(lzma_stream_decoder_init( - &coder->next, allocator, - coder->memlimit, coder->flags)); - } else { - return_if_error(lzma_alone_decoder_init(&coder->next, - allocator, coder->memlimit, true)); - - // If the application wants to know about missing - // integrity check or about the check in general, we - // need to handle it here, because LZMA_Alone decoder - // doesn't accept any flags. - if (coder->flags & LZMA_TELL_NO_CHECK) - return LZMA_NO_CHECK; - - if (coder->flags & LZMA_TELL_ANY_CHECK) - return LZMA_GET_CHECK; - } - - // Fall through - - case SEQ_CODE: { - const lzma_ret ret = coder->next.code( - coder->next.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - if (ret != LZMA_STREAM_END - || (coder->flags & LZMA_CONCATENATED) == 0) - return ret; - - coder->sequence = SEQ_FINISH; - } - - // Fall through - - case SEQ_FINISH: - // When LZMA_DECODE_CONCATENATED was used and we were decoding - // LZMA_Alone file, we need to check check that there is no - // trailing garbage and wait for LZMA_FINISH. - if (*in_pos < in_size) - return LZMA_DATA_ERROR; - - return action == LZMA_FINISH ? LZMA_STREAM_END : LZMA_OK; - - default: - assert(0); - return LZMA_PROG_ERROR; - } -} - - -static void -auto_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_check -auto_decoder_get_check(const lzma_coder *coder) -{ - // It is LZMA_Alone if get_check is NULL. - return coder->next.get_check == NULL ? LZMA_CHECK_NONE - : coder->next.get_check(coder->next.coder); -} - - -static lzma_ret -auto_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - lzma_ret ret; - - if (coder->next.memconfig != NULL) { - ret = coder->next.memconfig(coder->next.coder, - memusage, old_memlimit, new_memlimit); - assert(*old_memlimit == coder->memlimit); - } else { - // No coder is configured yet. Use the base value as - // the current memory usage. - *memusage = LZMA_MEMUSAGE_BASE; - *old_memlimit = coder->memlimit; - ret = LZMA_OK; - } - - if (ret == LZMA_OK && new_memlimit != 0) - coder->memlimit = new_memlimit; - - return ret; -} - - -static lzma_ret -auto_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, uint32_t flags) -{ - lzma_next_coder_init(&auto_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (flags & ~LZMA_SUPPORTED_FLAGS) - return LZMA_OPTIONS_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &auto_decode; - next->end = &auto_decoder_end; - next->get_check = &auto_decoder_get_check; - next->memconfig = &auto_decoder_memconfig; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - next->coder->memlimit = memlimit; - next->coder->flags = flags; - next->coder->sequence = SEQ_INIT; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_auto_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) -{ - lzma_next_strm_init(auto_decoder_init, strm, memlimit, flags); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_buffer_decoder.c b/deps/lzma/liblzma/common/block_buffer_decoder.c deleted file mode 100644 index ff27a11ccfe65d..00000000000000 --- a/deps/lzma/liblzma/common/block_buffer_decoder.c +++ /dev/null @@ -1,80 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_buffer_decoder.c -/// \brief Single-call .xz Block decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_block_buffer_decode(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - if (in_pos == NULL || (in == NULL && *in_pos != in_size) - || *in_pos > in_size || out_pos == NULL - || (out == NULL && *out_pos != out_size) - || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the Block decoder. - lzma_next_coder block_decoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_block_decoder_init( - &block_decoder, allocator, block); - - if (ret == LZMA_OK) { - // Save the positions so that we can restore them in case - // an error occurs. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding. - ret = block_decoder.code(block_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size - || *out_pos == out_size); - - // If all the input was consumed, then the - // input is truncated, even if the output - // buffer is also full. This is because - // processing the last byte of the Block - // never produces output. - // - // NOTE: This assumption may break when new - // filters are added, if the end marker of - // the filter doesn't consume at least one - // complete byte. - if (*in_pos == in_size) - ret = LZMA_DATA_ERROR; - else - ret = LZMA_BUF_ERROR; - } - - // Restore the positions. - *in_pos = in_start; - *out_pos = out_start; - } - } - - // Free the decoder memory. This needs to be done even if - // initialization fails, because the internal API doesn't - // require the initialization function to free its memory on error. - lzma_next_end(&block_decoder, allocator); - - return ret; -} diff --git a/deps/lzma/liblzma/common/block_buffer_encoder.c b/deps/lzma/liblzma/common/block_buffer_encoder.c deleted file mode 100644 index 519c6a684d768d..00000000000000 --- a/deps/lzma/liblzma/common/block_buffer_encoder.c +++ /dev/null @@ -1,305 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_buffer_encoder.c -/// \brief Single-call .xz Block encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_encoder.h" -#include "filter_encoder.h" -#include "lzma2_encoder.h" -#include "check.h" - - -/// Estimate the maximum size of the Block Header and Check fields for -/// a Block that uses LZMA2 uncompressed chunks. We could use -/// lzma_block_header_size() but this is simpler. -/// -/// Block Header Size + Block Flags + Compressed Size -/// + Uncompressed Size + Filter Flags for LZMA2 + CRC32 + Check -/// and round up to the next multiple of four to take Header Padding -/// into account. -#define HEADERS_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 3 + 4 \ - + LZMA_CHECK_SIZE_MAX + 3) & ~3) - - -static lzma_vli -lzma2_bound(lzma_vli uncompressed_size) -{ - // Prevent integer overflow in overhead calculation. - if (uncompressed_size > COMPRESSED_SIZE_MAX) - return 0; - - // Calculate the exact overhead of the LZMA2 headers: Round - // uncompressed_size up to the next multiple of LZMA2_CHUNK_MAX, - // multiply by the size of per-chunk header, and add one byte for - // the end marker. - const lzma_vli overhead = ((uncompressed_size + LZMA2_CHUNK_MAX - 1) - / LZMA2_CHUNK_MAX) - * LZMA2_HEADER_UNCOMPRESSED + 1; - - // Catch the possible integer overflow. - if (COMPRESSED_SIZE_MAX - overhead < uncompressed_size) - return 0; - - return uncompressed_size + overhead; -} - - -extern LZMA_API(size_t) -lzma_block_buffer_bound(size_t uncompressed_size) -{ - // For now, if the data doesn't compress, we always use uncompressed - // chunks of LZMA2. In future we may use Subblock filter too, but - // but for simplicity we probably will still use the same bound - // calculation even though Subblock filter would have slightly less - // overhead. - lzma_vli lzma2_size = lzma2_bound(uncompressed_size); - if (lzma2_size == 0) - return 0; - - // Take Block Padding into account. - lzma2_size = (lzma2_size + 3) & ~LZMA_VLI_C(3); - -#if SIZE_MAX < LZMA_VLI_MAX - // Catch the possible integer overflow on 32-bit systems. There's no - // overflow on 64-bit systems, because lzma2_bound() already takes - // into account the size of the headers in the Block. - if (SIZE_MAX - HEADERS_BOUND < lzma2_size) - return 0; -#endif - - return HEADERS_BOUND + lzma2_size; -} - - -static lzma_ret -block_encode_uncompressed(lzma_block *block, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // TODO: Figure out if the last filter is LZMA2 or Subblock and use - // that filter to encode the uncompressed chunks. - - // Use LZMA2 uncompressed chunks. We wouldn't need a dictionary at - // all, but LZMA2 always requires a dictionary, so use the minimum - // value to minimize memory usage of the decoder. - lzma_options_lzma lzma2 = { - .dict_size = LZMA_DICT_SIZE_MIN, - }; - - lzma_filter filters[2]; - filters[0].id = LZMA_FILTER_LZMA2; - filters[0].options = &lzma2; - filters[1].id = LZMA_VLI_UNKNOWN; - - // Set the above filter options to *block temporarily so that we can - // encode the Block Header. - lzma_filter *filters_orig = block->filters; - block->filters = filters; - - if (lzma_block_header_size(block) != LZMA_OK) { - block->filters = filters_orig; - return LZMA_PROG_ERROR; - } - - // Check that there's enough output space. The caller has already - // set block->compressed_size to what lzma2_bound() has returned, - // so we can reuse that value. We know that compressed_size is a - // known valid VLI and header_size is a small value so their sum - // will never overflow. - assert(block->compressed_size == lzma2_bound(in_size)); - if (out_size - *out_pos - < block->header_size + block->compressed_size) { - block->filters = filters_orig; - return LZMA_BUF_ERROR; - } - - if (lzma_block_header_encode(block, out + *out_pos) != LZMA_OK) { - block->filters = filters_orig; - return LZMA_PROG_ERROR; - } - - block->filters = filters_orig; - *out_pos += block->header_size; - - // Encode the data using LZMA2 uncompressed chunks. - size_t in_pos = 0; - uint8_t control = 0x01; // Dictionary reset - - while (in_pos < in_size) { - // Control byte: Indicate uncompressed chunk, of which - // the first resets the dictionary. - out[(*out_pos)++] = control; - control = 0x02; // No dictionary reset - - // Size of the uncompressed chunk - const size_t copy_size - = my_min(in_size - in_pos, LZMA2_CHUNK_MAX); - out[(*out_pos)++] = (copy_size - 1) >> 8; - out[(*out_pos)++] = (copy_size - 1) & 0xFF; - - // The actual data - assert(*out_pos + copy_size <= out_size); - memcpy(out + *out_pos, in + in_pos, copy_size); - - in_pos += copy_size; - *out_pos += copy_size; - } - - // End marker - out[(*out_pos)++] = 0x00; - assert(*out_pos <= out_size); - - return LZMA_OK; -} - - -static lzma_ret -block_encode_normal(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Find out the size of the Block Header. - block->compressed_size = lzma2_bound(in_size); - if (block->compressed_size == 0) - return LZMA_DATA_ERROR; - - block->uncompressed_size = in_size; - return_if_error(lzma_block_header_size(block)); - - // Reserve space for the Block Header and skip it for now. - if (out_size - *out_pos <= block->header_size) - return LZMA_BUF_ERROR; - - const size_t out_start = *out_pos; - *out_pos += block->header_size; - - // Limit out_size so that we stop encoding if the output would grow - // bigger than what uncompressed Block would be. - if (out_size - *out_pos > block->compressed_size) - out_size = *out_pos + block->compressed_size; - - // TODO: In many common cases this could be optimized to use - // significantly less memory. - lzma_next_coder raw_encoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_raw_encoder_init( - &raw_encoder, allocator, block->filters); - - if (ret == LZMA_OK) { - size_t in_pos = 0; - ret = raw_encoder.code(raw_encoder.coder, allocator, - in, &in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - } - - // NOTE: This needs to be run even if lzma_raw_encoder_init() failed. - lzma_next_end(&raw_encoder, allocator); - - if (ret == LZMA_STREAM_END) { - // Compression was successful. Write the Block Header. - block->compressed_size - = *out_pos - (out_start + block->header_size); - ret = lzma_block_header_encode(block, out + out_start); - if (ret != LZMA_OK) - ret = LZMA_PROG_ERROR; - - } else if (ret == LZMA_OK) { - // Output buffer became full. - ret = LZMA_BUF_ERROR; - } - - // Reset *out_pos if something went wrong. - if (ret != LZMA_OK) - *out_pos = out_start; - - return ret; -} - - -extern LZMA_API(lzma_ret) -lzma_block_buffer_encode(lzma_block *block, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Validate the arguments. - if (block == NULL || (in == NULL && in_size != 0) || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // The contents of the structure may depend on the version so - // check the version before validating the contents of *block. - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - if ((unsigned int)(block->check) > LZMA_CHECK_ID_MAX - || block->filters == NULL) - return LZMA_PROG_ERROR; - - if (!lzma_check_is_supported(block->check)) - return LZMA_UNSUPPORTED_CHECK; - - // Size of a Block has to be a multiple of four, so limit the size - // here already. This way we don't need to check it again when adding - // Block Padding. - out_size -= (out_size - *out_pos) & 3; - - // Get the size of the Check field. - const size_t check_size = lzma_check_size(block->check); - assert(check_size != UINT32_MAX); - - // Reserve space for the Check field. - if (out_size - *out_pos <= check_size) - return LZMA_BUF_ERROR; - - out_size -= check_size; - - // Do the actual compression. - const lzma_ret ret = block_encode_normal(block, allocator, - in, in_size, out, out_pos, out_size); - if (ret != LZMA_OK) { - // If the error was something else than output buffer - // becoming full, return the error now. - if (ret != LZMA_BUF_ERROR) - return ret; - - // The data was uncompressible (at least with the options - // given to us) or the output buffer was too small. Use the - // uncompressed chunks of LZMA2 to wrap the data into a valid - // Block. If we haven't been given enough output space, even - // this may fail. - return_if_error(block_encode_uncompressed(block, in, in_size, - out, out_pos, out_size)); - } - - assert(*out_pos <= out_size); - - // Block Padding. No buffer overflow here, because we already adjusted - // out_size so that (out_size - out_start) is a multiple of four. - // Thus, if the buffer is full, the loop body can never run. - for (size_t i = (size_t)(block->compressed_size); i & 3; ++i) { - assert(*out_pos < out_size); - out[(*out_pos)++] = 0x00; - } - - // If there's no Check field, we are done now. - if (check_size > 0) { - // Calculate the integrity check. We reserved space for - // the Check field earlier so we don't need to check for - // available output space here. - lzma_check_state check; - lzma_check_init(&check, block->check); - lzma_check_update(&check, block->check, in, in_size); - lzma_check_finish(&check, block->check); - - memcpy(block->raw_check, check.buffer.u8, check_size); - memcpy(out + *out_pos, check.buffer.u8, check_size); - *out_pos += check_size; - } - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_decoder.c b/deps/lzma/liblzma/common/block_decoder.c deleted file mode 100644 index a3ce6f49500ca9..00000000000000 --- a/deps/lzma/liblzma/common/block_decoder.c +++ /dev/null @@ -1,242 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_decoder.c -/// \brief Decodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_decoder.h" -#include "filter_decoder.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_CODE, - SEQ_PADDING, - SEQ_CHECK, - } sequence; - - /// The filters in the chain; initialized with lzma_raw_decoder_init(). - lzma_next_coder next; - - /// Decoding options; we also write Compressed Size and Uncompressed - /// Size back to this structure when the decoding has been finished. - lzma_block *block; - - /// Compressed Size calculated while decoding - lzma_vli compressed_size; - - /// Uncompressed Size calculated while decoding - lzma_vli uncompressed_size; - - /// Maximum allowed Compressed Size; this takes into account the - /// size of the Block Header and Check fields when Compressed Size - /// is unknown. - lzma_vli compressed_limit; - - /// Position when reading the Check field - size_t check_pos; - - /// Check of the uncompressed data - lzma_check_state check; -}; - - -static inline bool -update_size(lzma_vli *size, lzma_vli add, lzma_vli limit) -{ - if (limit > LZMA_VLI_MAX) - limit = LZMA_VLI_MAX; - - if (limit < *size || limit - *size < add) - return true; - - *size += add; - - return false; -} - - -static inline bool -is_size_valid(lzma_vli size, lzma_vli reference) -{ - return reference == LZMA_VLI_UNKNOWN || reference == size; -} - - -static lzma_ret -block_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - switch (coder->sequence) { - case SEQ_CODE: { - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - const size_t in_used = *in_pos - in_start; - const size_t out_used = *out_pos - out_start; - - // NOTE: We compare to compressed_limit here, which prevents - // the total size of the Block growing past LZMA_VLI_MAX. - if (update_size(&coder->compressed_size, in_used, - coder->compressed_limit) - || update_size(&coder->uncompressed_size, - out_used, - coder->block->uncompressed_size)) - return LZMA_DATA_ERROR; - - lzma_check_update(&coder->check, coder->block->check, - out + out_start, out_used); - - if (ret != LZMA_STREAM_END) - return ret; - - // Compressed and Uncompressed Sizes are now at their final - // values. Verify that they match the values given to us. - if (!is_size_valid(coder->compressed_size, - coder->block->compressed_size) - || !is_size_valid(coder->uncompressed_size, - coder->block->uncompressed_size)) - return LZMA_DATA_ERROR; - - // Copy the values into coder->block. The caller - // may use this information to construct Index. - coder->block->compressed_size = coder->compressed_size; - coder->block->uncompressed_size = coder->uncompressed_size; - - coder->sequence = SEQ_PADDING; - } - - // Fall through - - case SEQ_PADDING: - // Compressed Data is padded to a multiple of four bytes. - while (coder->compressed_size & 3) { - if (*in_pos >= in_size) - return LZMA_OK; - - // We use compressed_size here just get the Padding - // right. The actual Compressed Size was stored to - // coder->block already, and won't be modified by - // us anymore. - ++coder->compressed_size; - - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - } - - if (coder->block->check == LZMA_CHECK_NONE) - return LZMA_STREAM_END; - - lzma_check_finish(&coder->check, coder->block->check); - coder->sequence = SEQ_CHECK; - - // Fall through - - case SEQ_CHECK: { - const size_t check_size = lzma_check_size(coder->block->check); - lzma_bufcpy(in, in_pos, in_size, coder->block->raw_check, - &coder->check_pos, check_size); - if (coder->check_pos < check_size) - return LZMA_OK; - - // Validate the Check only if we support it. - // coder->check.buffer may be uninitialized - // when the Check ID is not supported. - if (lzma_check_is_supported(coder->block->check) - && memcmp(coder->block->raw_check, - coder->check.buffer.u8, - check_size) != 0) - return LZMA_DATA_ERROR; - - return LZMA_STREAM_END; - } - } - - return LZMA_PROG_ERROR; -} - - -static void -block_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_block_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_block *block) -{ - lzma_next_coder_init(&lzma_block_decoder_init, next, allocator); - - // Validate the options. lzma_block_unpadded_size() does that for us - // except for Uncompressed Size and filters. Filters are validated - // by the raw decoder. - if (lzma_block_unpadded_size(block) == 0 - || !lzma_vli_is_valid(block->uncompressed_size)) - return LZMA_PROG_ERROR; - - // Allocate and initialize *next->coder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &block_decode; - next->end = &block_decoder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_CODE; - next->coder->block = block; - next->coder->compressed_size = 0; - next->coder->uncompressed_size = 0; - - // If Compressed Size is not known, we calculate the maximum allowed - // value so that encoded size of the Block (including Block Padding) - // is still a valid VLI and a multiple of four. - next->coder->compressed_limit - = block->compressed_size == LZMA_VLI_UNKNOWN - ? (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) - - block->header_size - - lzma_check_size(block->check) - : block->compressed_size; - - // Initialize the check. It's caller's problem if the Check ID is not - // supported, and the Block decoder cannot verify the Check field. - // Caller can test lzma_check_is_supported(block->check). - next->coder->check_pos = 0; - lzma_check_init(&next->coder->check, block->check); - - // Initialize the filter chain. - return lzma_raw_decoder_init(&next->coder->next, allocator, - block->filters); -} - - -extern LZMA_API(lzma_ret) -lzma_block_decoder(lzma_stream *strm, lzma_block *block) -{ - lzma_next_strm_init(lzma_block_decoder_init, strm, block); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_decoder.h b/deps/lzma/liblzma/common/block_decoder.h deleted file mode 100644 index 7da9df63f767a8..00000000000000 --- a/deps/lzma/liblzma/common/block_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_decoder.h -/// \brief Decodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BLOCK_DECODER_H -#define LZMA_BLOCK_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_block_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, lzma_block *block); - -#endif diff --git a/deps/lzma/liblzma/common/block_encoder.c b/deps/lzma/liblzma/common/block_encoder.c deleted file mode 100644 index 1eeb502b7f83e2..00000000000000 --- a/deps/lzma/liblzma/common/block_encoder.c +++ /dev/null @@ -1,217 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_encoder.c -/// \brief Encodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "block_encoder.h" -#include "filter_encoder.h" -#include "check.h" - - -struct lzma_coder_s { - /// The filters in the chain; initialized with lzma_raw_decoder_init(). - lzma_next_coder next; - - /// Encoding options; we also write Unpadded Size, Compressed Size, - /// and Uncompressed Size back to this structure when the encoding - /// has been finished. - lzma_block *block; - - enum { - SEQ_CODE, - SEQ_PADDING, - SEQ_CHECK, - } sequence; - - /// Compressed Size calculated while encoding - lzma_vli compressed_size; - - /// Uncompressed Size calculated while encoding - lzma_vli uncompressed_size; - - /// Position in the Check field - size_t pos; - - /// Check of the uncompressed data - lzma_check_state check; -}; - - -static lzma_ret -block_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // Check that our amount of input stays in proper limits. - if (LZMA_VLI_MAX - coder->uncompressed_size < in_size - *in_pos) - return LZMA_DATA_ERROR; - - switch (coder->sequence) { - case SEQ_CODE: { - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, - allocator, in, in_pos, in_size, - out, out_pos, out_size, action); - - const size_t in_used = *in_pos - in_start; - const size_t out_used = *out_pos - out_start; - - if (COMPRESSED_SIZE_MAX - coder->compressed_size < out_used) - return LZMA_DATA_ERROR; - - coder->compressed_size += out_used; - - // No need to check for overflow because we have already - // checked it at the beginning of this function. - coder->uncompressed_size += in_used; - - lzma_check_update(&coder->check, coder->block->check, - in + in_start, in_used); - - if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) - return ret; - - assert(*in_pos == in_size); - assert(action == LZMA_FINISH); - - // Copy the values into coder->block. The caller - // may use this information to construct Index. - coder->block->compressed_size = coder->compressed_size; - coder->block->uncompressed_size = coder->uncompressed_size; - - coder->sequence = SEQ_PADDING; - } - - // Fall through - - case SEQ_PADDING: - // Pad Compressed Data to a multiple of four bytes. We can - // use coder->compressed_size for this since we don't need - // it for anything else anymore. - while (coder->compressed_size & 3) { - if (*out_pos >= out_size) - return LZMA_OK; - - out[*out_pos] = 0x00; - ++*out_pos; - ++coder->compressed_size; - } - - if (coder->block->check == LZMA_CHECK_NONE) - return LZMA_STREAM_END; - - lzma_check_finish(&coder->check, coder->block->check); - - coder->sequence = SEQ_CHECK; - - // Fall through - - case SEQ_CHECK: { - const size_t check_size = lzma_check_size(coder->block->check); - lzma_bufcpy(coder->check.buffer.u8, &coder->pos, check_size, - out, out_pos, out_size); - if (coder->pos < check_size) - return LZMA_OK; - - memcpy(coder->block->raw_check, coder->check.buffer.u8, - check_size); - return LZMA_STREAM_END; - } - } - - return LZMA_PROG_ERROR; -} - - -static void -block_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -block_encoder_update(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters lzma_attribute((__unused__)), - const lzma_filter *reversed_filters) -{ - if (coder->sequence != SEQ_CODE) - return LZMA_PROG_ERROR; - - return lzma_next_filter_update( - &coder->next, allocator, reversed_filters); -} - - -extern lzma_ret -lzma_block_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_block *block) -{ - lzma_next_coder_init(&lzma_block_encoder_init, next, allocator); - - if (block == NULL) - return LZMA_PROG_ERROR; - - // The contents of the structure may depend on the version so - // check the version first. - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - // If the Check ID is not supported, we cannot calculate the check and - // thus not create a proper Block. - if ((unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - if (!lzma_check_is_supported(block->check)) - return LZMA_UNSUPPORTED_CHECK; - - // Allocate and initialize *next->coder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &block_encode; - next->end = &block_encoder_end; - next->update = &block_encoder_update; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Basic initializations - next->coder->sequence = SEQ_CODE; - next->coder->block = block; - next->coder->compressed_size = 0; - next->coder->uncompressed_size = 0; - next->coder->pos = 0; - - // Initialize the check - lzma_check_init(&next->coder->check, block->check); - - // Initialize the requested filters. - return lzma_raw_encoder_init(&next->coder->next, allocator, - block->filters); -} - - -extern LZMA_API(lzma_ret) -lzma_block_encoder(lzma_stream *strm, lzma_block *block) -{ - lzma_next_strm_init(lzma_block_encoder_init, strm, block); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_encoder.h b/deps/lzma/liblzma/common/block_encoder.h deleted file mode 100644 index b9eff0be273682..00000000000000 --- a/deps/lzma/liblzma/common/block_encoder.h +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_encoder.h -/// \brief Encodes .xz Blocks -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_BLOCK_ENCODER_H -#define LZMA_BLOCK_ENCODER_H - -#include "common.h" - - -/// \brief Biggest Compressed Size value that the Block encoder supports -/// -/// The maximum size of a single Block is limited by the maximum size of -/// a Stream, which in theory is 2^63 - 3 bytes (i.e. LZMA_VLI_MAX - 3). -/// While the size is really big and no one should hit it in practice, we -/// take it into account in some places anyway to catch some errors e.g. if -/// application passes insanely big value to some function. -/// -/// We could take into account the headers etc. to determine the exact -/// maximum size of the Compressed Data field, but the complexity would give -/// us nothing useful. Instead, limit the size of Compressed Data so that -/// even with biggest possible Block Header and Check fields the total -/// encoded size of the Block stays as a valid VLI. This doesn't guarantee -/// that the size of the Stream doesn't grow too big, but that problem is -/// taken care outside the Block handling code. -/// -/// ~LZMA_VLI_C(3) is to guarantee that if we need padding at the end of -/// the Compressed Data field, it will still stay in the proper limit. -/// -/// This constant is in this file because it is needed in both -/// block_encoder.c and block_buffer_encoder.c. -#define COMPRESSED_SIZE_MAX ((LZMA_VLI_MAX - LZMA_BLOCK_HEADER_SIZE_MAX \ - - LZMA_CHECK_SIZE_MAX) & ~LZMA_VLI_C(3)) - - -extern lzma_ret lzma_block_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, lzma_block *block); - -#endif diff --git a/deps/lzma/liblzma/common/block_header_decoder.c b/deps/lzma/liblzma/common/block_header_decoder.c deleted file mode 100644 index 2c9573ee204cae..00000000000000 --- a/deps/lzma/liblzma/common/block_header_decoder.c +++ /dev/null @@ -1,116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header_decoder.c -/// \brief Decodes Block Header from .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "check.h" - - -static void -free_properties(lzma_block *block, lzma_allocator *allocator) -{ - // Free allocated filter options. The last array member is not - // touched after the initialization in the beginning of - // lzma_block_header_decode(), so we don't need to touch that here. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) { - lzma_free(block->filters[i].options, allocator); - block->filters[i].id = LZMA_VLI_UNKNOWN; - block->filters[i].options = NULL; - } - - return; -} - - -extern LZMA_API(lzma_ret) -lzma_block_header_decode(lzma_block *block, - lzma_allocator *allocator, const uint8_t *in) -{ - // NOTE: We consider the header to be corrupt not only when the - // CRC32 doesn't match, but also when variable-length integers - // are invalid or over 63 bits, or if the header is too small - // to contain the claimed information. - - // Initialize the filter options array. This way the caller can - // safely free() the options even if an error occurs in this function. - for (size_t i = 0; i <= LZMA_FILTERS_MAX; ++i) { - block->filters[i].id = LZMA_VLI_UNKNOWN; - block->filters[i].options = NULL; - } - - // Always zero for now. - block->version = 0; - - // Validate Block Header Size and Check type. The caller must have - // already set these, so it is a programming error if this test fails. - if (lzma_block_header_size_decode(in[0]) != block->header_size - || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - // Exclude the CRC32 field. - const size_t in_size = block->header_size - 4; - - // Verify CRC32 - if (lzma_crc32(in, in_size, 0) != unaligned_read32le(in + in_size)) - return LZMA_DATA_ERROR; - - // Check for unsupported flags. - if (in[1] & 0x3C) - return LZMA_OPTIONS_ERROR; - - // Start after the Block Header Size and Block Flags fields. - size_t in_pos = 2; - - // Compressed Size - if (in[1] & 0x40) { - return_if_error(lzma_vli_decode(&block->compressed_size, - NULL, in, &in_pos, in_size)); - - // Validate Compressed Size. This checks that it isn't zero - // and that the total size of the Block is a valid VLI. - if (lzma_block_unpadded_size(block) == 0) - return LZMA_DATA_ERROR; - } else { - block->compressed_size = LZMA_VLI_UNKNOWN; - } - - // Uncompressed Size - if (in[1] & 0x80) - return_if_error(lzma_vli_decode(&block->uncompressed_size, - NULL, in, &in_pos, in_size)); - else - block->uncompressed_size = LZMA_VLI_UNKNOWN; - - // Filter Flags - const size_t filter_count = (in[1] & 3) + 1; - for (size_t i = 0; i < filter_count; ++i) { - const lzma_ret ret = lzma_filter_flags_decode( - &block->filters[i], allocator, - in, &in_pos, in_size); - if (ret != LZMA_OK) { - free_properties(block, allocator); - return ret; - } - } - - // Padding - while (in_pos < in_size) { - if (in[in_pos++] != 0x00) { - free_properties(block, allocator); - - // Possibly some new field present so use - // LZMA_OPTIONS_ERROR instead of LZMA_DATA_ERROR. - return LZMA_OPTIONS_ERROR; - } - } - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_header_encoder.c b/deps/lzma/liblzma/common/block_header_encoder.c deleted file mode 100644 index 707dd0cb14a22b..00000000000000 --- a/deps/lzma/liblzma/common/block_header_encoder.c +++ /dev/null @@ -1,132 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header_encoder.c -/// \brief Encodes Block Header for .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "check.h" - - -extern LZMA_API(lzma_ret) -lzma_block_header_size(lzma_block *block) -{ - if (block->version != 0) - return LZMA_OPTIONS_ERROR; - - // Block Header Size + Block Flags + CRC32. - uint32_t size = 1 + 1 + 4; - - // Compressed Size - if (block->compressed_size != LZMA_VLI_UNKNOWN) { - const uint32_t add = lzma_vli_size(block->compressed_size); - if (add == 0 || block->compressed_size == 0) - return LZMA_PROG_ERROR; - - size += add; - } - - // Uncompressed Size - if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { - const uint32_t add = lzma_vli_size(block->uncompressed_size); - if (add == 0) - return LZMA_PROG_ERROR; - - size += add; - } - - // List of Filter Flags - if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - for (size_t i = 0; block->filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - // Don't allow too many filters. - if (i == LZMA_FILTERS_MAX) - return LZMA_PROG_ERROR; - - uint32_t add; - return_if_error(lzma_filter_flags_size(&add, - block->filters + i)); - - size += add; - } - - // Pad to a multiple of four bytes. - block->header_size = (size + 3) & ~UINT32_C(3); - - // NOTE: We don't verify that the encoded size of the Block stays - // within limits. This is because it is possible that we are called - // with exaggerated Compressed Size (e.g. LZMA_VLI_MAX) to reserve - // space for Block Header, and later called again with lower, - // real values. - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_block_header_encode(const lzma_block *block, uint8_t *out) -{ - // Validate everything but filters. - if (lzma_block_unpadded_size(block) == 0 - || !lzma_vli_is_valid(block->uncompressed_size)) - return LZMA_PROG_ERROR; - - // Indicate the size of the buffer _excluding_ the CRC32 field. - const size_t out_size = block->header_size - 4; - - // Store the Block Header Size. - out[0] = out_size / 4; - - // We write Block Flags in pieces. - out[1] = 0x00; - size_t out_pos = 2; - - // Compressed Size - if (block->compressed_size != LZMA_VLI_UNKNOWN) { - return_if_error(lzma_vli_encode(block->compressed_size, NULL, - out, &out_pos, out_size)); - - out[1] |= 0x40; - } - - // Uncompressed Size - if (block->uncompressed_size != LZMA_VLI_UNKNOWN) { - return_if_error(lzma_vli_encode(block->uncompressed_size, NULL, - out, &out_pos, out_size)); - - out[1] |= 0x80; - } - - // Filter Flags - if (block->filters == NULL || block->filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - size_t filter_count = 0; - do { - // There can be a maximum of four filters. - if (filter_count == LZMA_FILTERS_MAX) - return LZMA_PROG_ERROR; - - return_if_error(lzma_filter_flags_encode( - block->filters + filter_count, - out, &out_pos, out_size)); - - } while (block->filters[++filter_count].id != LZMA_VLI_UNKNOWN); - - out[1] |= filter_count - 1; - - // Padding - memzero(out + out_pos, out_size - out_pos); - - // CRC32 - unaligned_write32le(out + out_size, lzma_crc32(out, out_size, 0)); - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/block_util.c b/deps/lzma/liblzma/common/block_util.c deleted file mode 100644 index 62c934547c9e5a..00000000000000 --- a/deps/lzma/liblzma/common/block_util.c +++ /dev/null @@ -1,90 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file block_header.c -/// \brief Utility functions to handle lzma_block -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "index.h" - - -extern LZMA_API(lzma_ret) -lzma_block_compressed_size(lzma_block *block, lzma_vli unpadded_size) -{ - // Validate everything but Uncompressed Size and filters. - if (lzma_block_unpadded_size(block) == 0) - return LZMA_PROG_ERROR; - - const uint32_t container_size = block->header_size - + lzma_check_size(block->check); - - // Validate that Compressed Size will be greater than zero. - if (unpadded_size <= container_size) - return LZMA_DATA_ERROR; - - // Calculate what Compressed Size is supposed to be. - // If Compressed Size was present in Block Header, - // compare that the new value matches it. - const lzma_vli compressed_size = unpadded_size - container_size; - if (block->compressed_size != LZMA_VLI_UNKNOWN - && block->compressed_size != compressed_size) - return LZMA_DATA_ERROR; - - block->compressed_size = compressed_size; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_vli) -lzma_block_unpadded_size(const lzma_block *block) -{ - // Validate the values that we are interested in i.e. all but - // Uncompressed Size and the filters. - // - // NOTE: This function is used for validation too, so it is - // essential that these checks are always done even if - // Compressed Size is unknown. - if (block == NULL || block->version != 0 - || block->header_size < LZMA_BLOCK_HEADER_SIZE_MIN - || block->header_size > LZMA_BLOCK_HEADER_SIZE_MAX - || (block->header_size & 3) - || !lzma_vli_is_valid(block->compressed_size) - || block->compressed_size == 0 - || (unsigned int)(block->check) > LZMA_CHECK_ID_MAX) - return 0; - - // If Compressed Size is unknown, return that we cannot know - // size of the Block either. - if (block->compressed_size == LZMA_VLI_UNKNOWN) - return LZMA_VLI_UNKNOWN; - - // Calculate Unpadded Size and validate it. - const lzma_vli unpadded_size = block->compressed_size - + block->header_size - + lzma_check_size(block->check); - - assert(unpadded_size >= UNPADDED_SIZE_MIN); - if (unpadded_size > UNPADDED_SIZE_MAX) - return 0; - - return unpadded_size; -} - - -extern LZMA_API(lzma_vli) -lzma_block_total_size(const lzma_block *block) -{ - lzma_vli unpadded_size = lzma_block_unpadded_size(block); - - if (unpadded_size != LZMA_VLI_UNKNOWN) - unpadded_size = vli_ceil4(unpadded_size); - - return unpadded_size; -} diff --git a/deps/lzma/liblzma/common/common.c b/deps/lzma/liblzma/common/common.c deleted file mode 100644 index b9e386027368c7..00000000000000 --- a/deps/lzma/liblzma/common/common.c +++ /dev/null @@ -1,388 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file common.h -/// \brief Common functions needed in many places in liblzma -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -///////////// -// Version // -///////////// - -extern LZMA_API(uint32_t) -lzma_version_number(void) -{ - return LZMA_VERSION; -} - - -extern LZMA_API(const char *) -lzma_version_string(void) -{ - return LZMA_VERSION_STRING; -} - - -/////////////////////// -// Memory allocation // -/////////////////////// - -extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) -lzma_alloc(size_t size, lzma_allocator *allocator) -{ - // Some malloc() variants return NULL if called with size == 0. - if (size == 0) - size = 1; - - void *ptr; - - if (allocator != NULL && allocator->alloc != NULL) - ptr = allocator->alloc(allocator->opaque, 1, size); - else - ptr = malloc(size); - - return ptr; -} - - -extern void -lzma_free(void *ptr, lzma_allocator *allocator) -{ - if (allocator != NULL && allocator->free != NULL) - allocator->free(allocator->opaque, ptr); - else - free(ptr); - - return; -} - - -////////// -// Misc // -////////// - -extern size_t -lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size) -{ - const size_t in_avail = in_size - *in_pos; - const size_t out_avail = out_size - *out_pos; - const size_t copy_size = my_min(in_avail, out_avail); - - memcpy(out + *out_pos, in + *in_pos, copy_size); - - *in_pos += copy_size; - *out_pos += copy_size; - - return copy_size; -} - - -extern lzma_ret -lzma_next_filter_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - lzma_next_coder_init(filters[0].init, next, allocator); - next->id = filters[0].id; - return filters[0].init == NULL - ? LZMA_OK : filters[0].init(next, allocator, filters); -} - - -extern lzma_ret -lzma_next_filter_update(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *reversed_filters) -{ - // Check that the application isn't trying to change the Filter ID. - // End of filters is indicated with LZMA_VLI_UNKNOWN in both - // reversed_filters[0].id and next->id. - if (reversed_filters[0].id != next->id) - return LZMA_PROG_ERROR; - - if (reversed_filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_OK; - - assert(next->update != NULL); - return next->update(next->coder, allocator, NULL, reversed_filters); -} - - -extern void -lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator) -{ - if (next->init != (uintptr_t)(NULL)) { - // To avoid tiny end functions that simply call - // lzma_free(coder, allocator), we allow leaving next->end - // NULL and call lzma_free() here. - if (next->end != NULL) - next->end(next->coder, allocator); - else - lzma_free(next->coder, allocator); - - // Reset the variables so the we don't accidentally think - // that it is an already initialized coder. - *next = LZMA_NEXT_CODER_INIT; - } - - return; -} - - -////////////////////////////////////// -// External to internal API wrapper // -////////////////////////////////////// - -extern lzma_ret -lzma_strm_init(lzma_stream *strm) -{ - if (strm == NULL) - return LZMA_PROG_ERROR; - - if (strm->internal == NULL) { - strm->internal = lzma_alloc(sizeof(lzma_internal), - strm->allocator); - if (strm->internal == NULL) - return LZMA_MEM_ERROR; - - strm->internal->next = LZMA_NEXT_CODER_INIT; - } - - strm->internal->supported_actions[LZMA_RUN] = false; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = false; - strm->internal->supported_actions[LZMA_FULL_FLUSH] = false; - strm->internal->supported_actions[LZMA_FINISH] = false; - strm->internal->sequence = ISEQ_RUN; - strm->internal->allow_buf_error = false; - - strm->total_in = 0; - strm->total_out = 0; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_code(lzma_stream *strm, lzma_action action) -{ - // Sanity checks - if ((strm->next_in == NULL && strm->avail_in != 0) - || (strm->next_out == NULL && strm->avail_out != 0) - || strm->internal == NULL - || strm->internal->next.code == NULL - || (unsigned int)(action) > LZMA_FINISH - || !strm->internal->supported_actions[action]) - return LZMA_PROG_ERROR; - - // Check if unsupported members have been set to non-zero or non-NULL, - // which would indicate that some new feature is wanted. - if (strm->reserved_ptr1 != NULL - || strm->reserved_ptr2 != NULL - || strm->reserved_ptr3 != NULL - || strm->reserved_ptr4 != NULL - || strm->reserved_int1 != 0 - || strm->reserved_int2 != 0 - || strm->reserved_int3 != 0 - || strm->reserved_int4 != 0 - || strm->reserved_enum1 != LZMA_RESERVED_ENUM - || strm->reserved_enum2 != LZMA_RESERVED_ENUM) - return LZMA_OPTIONS_ERROR; - - switch (strm->internal->sequence) { - case ISEQ_RUN: - switch (action) { - case LZMA_RUN: - break; - - case LZMA_SYNC_FLUSH: - strm->internal->sequence = ISEQ_SYNC_FLUSH; - break; - - case LZMA_FULL_FLUSH: - strm->internal->sequence = ISEQ_FULL_FLUSH; - break; - - case LZMA_FINISH: - strm->internal->sequence = ISEQ_FINISH; - break; - } - - break; - - case ISEQ_SYNC_FLUSH: - // The same action must be used until we return - // LZMA_STREAM_END, and the amount of input must not change. - if (action != LZMA_SYNC_FLUSH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_FULL_FLUSH: - if (action != LZMA_FULL_FLUSH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_FINISH: - if (action != LZMA_FINISH - || strm->internal->avail_in != strm->avail_in) - return LZMA_PROG_ERROR; - - break; - - case ISEQ_END: - return LZMA_STREAM_END; - - case ISEQ_ERROR: - default: - return LZMA_PROG_ERROR; - } - - size_t in_pos = 0; - size_t out_pos = 0; - lzma_ret ret = strm->internal->next.code( - strm->internal->next.coder, strm->allocator, - strm->next_in, &in_pos, strm->avail_in, - strm->next_out, &out_pos, strm->avail_out, action); - - strm->next_in += in_pos; - strm->avail_in -= in_pos; - strm->total_in += in_pos; - - strm->next_out += out_pos; - strm->avail_out -= out_pos; - strm->total_out += out_pos; - - strm->internal->avail_in = strm->avail_in; - - switch (ret) { - case LZMA_OK: - // Don't return LZMA_BUF_ERROR when it happens the first time. - // This is to avoid returning LZMA_BUF_ERROR when avail_out - // was zero but still there was no more data left to written - // to next_out. - if (out_pos == 0 && in_pos == 0) { - if (strm->internal->allow_buf_error) - ret = LZMA_BUF_ERROR; - else - strm->internal->allow_buf_error = true; - } else { - strm->internal->allow_buf_error = false; - } - break; - - case LZMA_STREAM_END: - if (strm->internal->sequence == ISEQ_SYNC_FLUSH - || strm->internal->sequence == ISEQ_FULL_FLUSH) - strm->internal->sequence = ISEQ_RUN; - else - strm->internal->sequence = ISEQ_END; - - // Fall through - - case LZMA_NO_CHECK: - case LZMA_UNSUPPORTED_CHECK: - case LZMA_GET_CHECK: - case LZMA_MEMLIMIT_ERROR: - // Something else than LZMA_OK, but not a fatal error, - // that is, coding may be continued (except if ISEQ_END). - strm->internal->allow_buf_error = false; - break; - - default: - // All the other errors are fatal; coding cannot be continued. - assert(ret != LZMA_BUF_ERROR); - strm->internal->sequence = ISEQ_ERROR; - break; - } - - return ret; -} - - -extern LZMA_API(void) -lzma_end(lzma_stream *strm) -{ - if (strm != NULL && strm->internal != NULL) { - lzma_next_end(&strm->internal->next, strm->allocator); - lzma_free(strm->internal, strm->allocator); - strm->internal = NULL; - } - - return; -} - - -extern LZMA_API(lzma_check) -lzma_get_check(const lzma_stream *strm) -{ - // Return LZMA_CHECK_NONE if we cannot know the check type. - // It's a bug in the application if this happens. - if (strm->internal->next.get_check == NULL) - return LZMA_CHECK_NONE; - - return strm->internal->next.get_check(strm->internal->next.coder); -} - - -extern LZMA_API(uint64_t) -lzma_memusage(const lzma_stream *strm) -{ - uint64_t memusage; - uint64_t old_memlimit; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL - || strm->internal->next.memconfig( - strm->internal->next.coder, - &memusage, &old_memlimit, 0) != LZMA_OK) - return 0; - - return memusage; -} - - -extern LZMA_API(uint64_t) -lzma_memlimit_get(const lzma_stream *strm) -{ - uint64_t old_memlimit; - uint64_t memusage; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL - || strm->internal->next.memconfig( - strm->internal->next.coder, - &memusage, &old_memlimit, 0) != LZMA_OK) - return 0; - - return old_memlimit; -} - - -extern LZMA_API(lzma_ret) -lzma_memlimit_set(lzma_stream *strm, uint64_t new_memlimit) -{ - // Dummy variables to simplify memconfig functions - uint64_t old_memlimit; - uint64_t memusage; - - if (strm == NULL || strm->internal == NULL - || strm->internal->next.memconfig == NULL) - return LZMA_PROG_ERROR; - - if (new_memlimit != 0 && new_memlimit < LZMA_MEMUSAGE_BASE) - return LZMA_MEMLIMIT_ERROR; - - return strm->internal->next.memconfig(strm->internal->next.coder, - &memusage, &old_memlimit, new_memlimit); -} diff --git a/deps/lzma/liblzma/common/common.h b/deps/lzma/liblzma/common/common.h deleted file mode 100644 index 45aba4f06b2709..00000000000000 --- a/deps/lzma/liblzma/common/common.h +++ /dev/null @@ -1,284 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file common.h -/// \brief Definitions common to the whole liblzma library -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_COMMON_H -#define LZMA_COMMON_H - -#include "sysdefs.h" -#include "mythread.h" -#include "tuklib_integer.h" - -#if defined(_WIN32) || defined(__CYGWIN__) -# ifdef DLL_EXPORT -# define LZMA_API_EXPORT __declspec(dllexport) -# else -# define LZMA_API_EXPORT -# endif -// Don't use ifdef or defined() below. -#elif HAVE_VISIBILITY -# define LZMA_API_EXPORT __attribute__((__visibility__("default"))) -#else -# define LZMA_API_EXPORT -#endif - -#define LZMA_API(type) LZMA_API_EXPORT type LZMA_API_CALL - -#include "lzma.h" - -// These allow helping the compiler in some often-executed branches, whose -// result is almost always the same. -#ifdef __GNUC__ -# define likely(expr) __builtin_expect(expr, true) -# define unlikely(expr) __builtin_expect(expr, false) -#else -# define likely(expr) (expr) -# define unlikely(expr) (expr) -#endif - - -/// Size of temporary buffers needed in some filters -#define LZMA_BUFFER_SIZE 4096 - - -/// Starting value for memory usage estimates. Instead of calculating size -/// of _every_ structure and taking into account malloc() overhead etc., we -/// add a base size to all memory usage estimates. It's not very accurate -/// but should be easily good enough. -#define LZMA_MEMUSAGE_BASE (UINT64_C(1) << 15) - -/// Start of internal Filter ID space. These IDs must never be used -/// in Streams. -#define LZMA_FILTER_RESERVED_START (LZMA_VLI_C(1) << 62) - - -/// Supported flags that can be passed to lzma_stream_decoder() -/// or lzma_auto_decoder(). -#define LZMA_SUPPORTED_FLAGS \ - ( LZMA_TELL_NO_CHECK \ - | LZMA_TELL_UNSUPPORTED_CHECK \ - | LZMA_TELL_ANY_CHECK \ - | LZMA_CONCATENATED ) - - -/// Type of encoder/decoder specific data; the actual structure is defined -/// differently in different coders. -typedef struct lzma_coder_s lzma_coder; - -typedef struct lzma_next_coder_s lzma_next_coder; - -typedef struct lzma_filter_info_s lzma_filter_info; - - -/// Type of a function used to initialize a filter encoder or decoder -typedef lzma_ret (*lzma_init_function)( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters); - -/// Type of a function to do some kind of coding work (filters, Stream, -/// Block encoders/decoders etc.). Some special coders use don't use both -/// input and output buffers, but for simplicity they still use this same -/// function prototype. -typedef lzma_ret (*lzma_code_function)( - lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action); - -/// Type of a function to free the memory allocated for the coder -typedef void (*lzma_end_function)( - lzma_coder *coder, lzma_allocator *allocator); - - -/// Raw coder validates and converts an array of lzma_filter structures to -/// an array of lzma_filter_info structures. This array is used with -/// lzma_next_filter_init to initialize the filter chain. -struct lzma_filter_info_s { - /// Filter ID. This is used only by the encoder - /// with lzma_filters_update(). - lzma_vli id; - - /// Pointer to function used to initialize the filter. - /// This is NULL to indicate end of array. - lzma_init_function init; - - /// Pointer to filter's options structure - void *options; -}; - - -/// Hold data and function pointers of the next filter in the chain. -struct lzma_next_coder_s { - /// Pointer to coder-specific data - lzma_coder *coder; - - /// Filter ID. This is LZMA_VLI_UNKNOWN when this structure doesn't - /// point to a filter coder. - lzma_vli id; - - /// "Pointer" to init function. This is never called here. - /// We need only to detect if we are initializing a coder - /// that was allocated earlier. See lzma_next_coder_init and - /// lzma_next_strm_init macros in this file. - uintptr_t init; - - /// Pointer to function to do the actual coding - lzma_code_function code; - - /// Pointer to function to free lzma_next_coder.coder. This can - /// be NULL; in that case, lzma_free is called to free - /// lzma_next_coder.coder. - lzma_end_function end; - - /// Pointer to function to return the type of the integrity check. - /// Most coders won't support this. - lzma_check (*get_check)(const lzma_coder *coder); - - /// Pointer to function to get and/or change the memory usage limit. - /// If new_memlimit == 0, the limit is not changed. - lzma_ret (*memconfig)(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit); - - /// Update the filter-specific options or the whole filter chain - /// in the encoder. - lzma_ret (*update)(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters, - const lzma_filter *reversed_filters); -}; - - -/// Macro to initialize lzma_next_coder structure -#define LZMA_NEXT_CODER_INIT \ - (lzma_next_coder){ \ - .coder = NULL, \ - .init = (uintptr_t)(NULL), \ - .id = LZMA_VLI_UNKNOWN, \ - .code = NULL, \ - .end = NULL, \ - .get_check = NULL, \ - .memconfig = NULL, \ - .update = NULL, \ - } - - -/// Internal data for lzma_strm_init, lzma_code, and lzma_end. A pointer to -/// this is stored in lzma_stream. -struct lzma_internal_s { - /// The actual coder that should do something useful - lzma_next_coder next; - - /// Track the state of the coder. This is used to validate arguments - /// so that the actual coders can rely on e.g. that LZMA_SYNC_FLUSH - /// is used on every call to lzma_code until next.code has returned - /// LZMA_STREAM_END. - enum { - ISEQ_RUN, - ISEQ_SYNC_FLUSH, - ISEQ_FULL_FLUSH, - ISEQ_FINISH, - ISEQ_END, - ISEQ_ERROR, - } sequence; - - /// A copy of lzma_stream avail_in. This is used to verify that the - /// amount of input doesn't change once e.g. LZMA_FINISH has been - /// used. - size_t avail_in; - - /// Indicates which lzma_action values are allowed by next.code. - bool supported_actions[4]; - - /// If true, lzma_code will return LZMA_BUF_ERROR if no progress was - /// made (no input consumed and no output produced by next.code). - bool allow_buf_error; -}; - - -/// Allocates memory -extern void *lzma_alloc(size_t size, lzma_allocator *allocator) - lzma_attribute((__malloc__)) lzma_attr_alloc_size(1); - -/// Frees memory -extern void lzma_free(void *ptr, lzma_allocator *allocator); - - -/// Allocates strm->internal if it is NULL, and initializes *strm and -/// strm->internal. This function is only called via lzma_next_strm_init macro. -extern lzma_ret lzma_strm_init(lzma_stream *strm); - -/// Initializes the next filter in the chain, if any. This takes care of -/// freeing the memory of previously initialized filter if it is different -/// than the filter being initialized now. This way the actual filter -/// initialization functions don't need to use lzma_next_coder_init macro. -extern lzma_ret lzma_next_filter_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -/// Update the next filter in the chain, if any. This checks that -/// the application is not trying to change the Filter IDs. -extern lzma_ret lzma_next_filter_update( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *reversed_filters); - -/// Frees the memory allocated for next->coder either using next->end or, -/// if next->end is NULL, using lzma_free. -extern void lzma_next_end(lzma_next_coder *next, lzma_allocator *allocator); - - -/// Copy as much data as possible from in[] to out[] and update *in_pos -/// and *out_pos accordingly. Returns the number of bytes copied. -extern size_t lzma_bufcpy(const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size); - - -/// \brief Return if expression doesn't evaluate to LZMA_OK -/// -/// There are several situations where we want to return immediately -/// with the value of expr if it isn't LZMA_OK. This macro shortens -/// the code a little. -#define return_if_error(expr) \ -do { \ - const lzma_ret ret_ = (expr); \ - if (ret_ != LZMA_OK) \ - return ret_; \ -} while (0) - - -/// If next isn't already initialized, free the previous coder. Then mark -/// that next is _possibly_ initialized for the coder using this macro. -/// "Possibly" means that if e.g. allocation of next->coder fails, the -/// structure isn't actually initialized for this coder, but leaving -/// next->init to func is still OK. -#define lzma_next_coder_init(func, next, allocator) \ -do { \ - if ((uintptr_t)(func) != (next)->init) \ - lzma_next_end(next, allocator); \ - (next)->init = (uintptr_t)(func); \ -} while (0) - - -/// Initializes lzma_strm and calls func() to initialize strm->internal->next. -/// (The function being called will use lzma_next_coder_init()). If -/// initialization fails, memory that wasn't freed by func() is freed -/// along strm->internal. -#define lzma_next_strm_init(func, strm, ...) \ -do { \ - return_if_error(lzma_strm_init(strm)); \ - const lzma_ret ret_ = func(&(strm)->internal->next, \ - (strm)->allocator, __VA_ARGS__); \ - if (ret_ != LZMA_OK) { \ - lzma_end(strm); \ - return ret_; \ - } \ -} while (0) - -#endif diff --git a/deps/lzma/liblzma/common/easy_buffer_encoder.c b/deps/lzma/liblzma/common/easy_buffer_encoder.c deleted file mode 100644 index c4be34ccfa2734..00000000000000 --- a/deps/lzma/liblzma/common/easy_buffer_encoder.c +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_buffer_encoder.c -/// \brief Easy single-call .xz Stream encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(lzma_ret) -lzma_easy_buffer_encode(uint32_t preset, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return LZMA_OPTIONS_ERROR; - - return lzma_stream_buffer_encode(opt_easy.filters, check, - allocator, in, in_size, out, out_pos, out_size); -} diff --git a/deps/lzma/liblzma/common/easy_decoder_memusage.c b/deps/lzma/liblzma/common/easy_decoder_memusage.c deleted file mode 100644 index 20bcd5b717588c..00000000000000 --- a/deps/lzma/liblzma/common/easy_decoder_memusage.c +++ /dev/null @@ -1,24 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_decoder_memusage.c -/// \brief Decoder memory usage calculation to match easy encoder presets -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(uint64_t) -lzma_easy_decoder_memusage(uint32_t preset) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return UINT32_MAX; - - return lzma_raw_decoder_memusage(opt_easy.filters); -} diff --git a/deps/lzma/liblzma/common/easy_encoder.c b/deps/lzma/liblzma/common/easy_encoder.c deleted file mode 100644 index d13ccd7351f153..00000000000000 --- a/deps/lzma/liblzma/common/easy_encoder.c +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_encoder.c -/// \brief Easy .xz Stream encoder initialization -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" -#include "stream_encoder.h" - - -extern LZMA_API(lzma_ret) -lzma_easy_encoder(lzma_stream *strm, uint32_t preset, lzma_check check) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return LZMA_OPTIONS_ERROR; - - return lzma_stream_encoder(strm, opt_easy.filters, check); -} diff --git a/deps/lzma/liblzma/common/easy_encoder_memusage.c b/deps/lzma/liblzma/common/easy_encoder_memusage.c deleted file mode 100644 index e910575842332a..00000000000000 --- a/deps/lzma/liblzma/common/easy_encoder_memusage.c +++ /dev/null @@ -1,24 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_encoder_memusage.c -/// \brief Easy .xz Stream encoder memory usage calculation -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern LZMA_API(uint64_t) -lzma_easy_encoder_memusage(uint32_t preset) -{ - lzma_options_easy opt_easy; - if (lzma_easy_preset(&opt_easy, preset)) - return UINT32_MAX; - - return lzma_raw_encoder_memusage(opt_easy.filters); -} diff --git a/deps/lzma/liblzma/common/easy_preset.c b/deps/lzma/liblzma/common/easy_preset.c deleted file mode 100644 index 2f9859860ad78e..00000000000000 --- a/deps/lzma/liblzma/common/easy_preset.c +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_preset.c -/// \brief Preset handling for easy encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "easy_preset.h" - - -extern bool -lzma_easy_preset(lzma_options_easy *opt_easy, uint32_t preset) -{ - if (lzma_lzma_preset(&opt_easy->opt_lzma, preset)) - return true; - - opt_easy->filters[0].id = LZMA_FILTER_LZMA2; - opt_easy->filters[0].options = &opt_easy->opt_lzma; - opt_easy->filters[1].id = LZMA_VLI_UNKNOWN; - - return false; -} diff --git a/deps/lzma/liblzma/common/easy_preset.h b/deps/lzma/liblzma/common/easy_preset.h deleted file mode 100644 index 382ade89406680..00000000000000 --- a/deps/lzma/liblzma/common/easy_preset.h +++ /dev/null @@ -1,32 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file easy_preset.h -/// \brief Preset handling for easy encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -typedef struct { - /// We need to keep the filters array available in case - /// LZMA_FULL_FLUSH is used. - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - - /// Options for LZMA2 - lzma_options_lzma opt_lzma; - - // Options for more filters can be added later, so this struct - // is not ready to be put into the public API. - -} lzma_options_easy; - - -/// Set *easy to the settings given by the preset. Returns true on error, -/// false on success. -extern bool lzma_easy_preset(lzma_options_easy *easy, uint32_t preset); diff --git a/deps/lzma/liblzma/common/filter_buffer_decoder.c b/deps/lzma/liblzma/common/filter_buffer_decoder.c deleted file mode 100644 index 2d35ef8e0af468..00000000000000 --- a/deps/lzma/liblzma/common/filter_buffer_decoder.c +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_buffer_decoder.c -/// \brief Single-call raw decoding -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_raw_buffer_decode(const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Validate what isn't validated later in filter_common.c. - if (in == NULL || in_pos == NULL || *in_pos > in_size || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the decoer. - lzma_next_coder next = LZMA_NEXT_CODER_INIT; - return_if_error(lzma_raw_decoder_init(&next, allocator, filters)); - - // Store the positions so that we can restore them if something - // goes wrong. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding and free decoder's memory. - lzma_ret ret = next.code(next.coder, allocator, in, in_pos, in_size, - out, out_pos, out_size, LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size || *out_pos == out_size); - - if (*in_pos != in_size) { - // Since input wasn't consumed completely, - // the output buffer became full and is - // too small. - ret = LZMA_BUF_ERROR; - - } else if (*out_pos != out_size) { - // Since output didn't became full, the input - // has to be truncated. - ret = LZMA_DATA_ERROR; - - } else { - // All the input was consumed and output - // buffer is full. Now we don't immediately - // know the reason for the error. Try - // decoding one more byte. If it succeeds, - // then the output buffer was too small. If - // we cannot get a new output byte, the input - // is truncated. - uint8_t tmp[1]; - size_t tmp_pos = 0; - (void)next.code(next.coder, allocator, - in, in_pos, in_size, - tmp, &tmp_pos, 1, LZMA_FINISH); - - if (tmp_pos == 1) - ret = LZMA_BUF_ERROR; - else - ret = LZMA_DATA_ERROR; - } - } - - // Restore the positions. - *in_pos = in_start; - *out_pos = out_start; - } - - lzma_next_end(&next, allocator); - - return ret; -} diff --git a/deps/lzma/liblzma/common/filter_buffer_encoder.c b/deps/lzma/liblzma/common/filter_buffer_encoder.c deleted file mode 100644 index 646e1b30374e6b..00000000000000 --- a/deps/lzma/liblzma/common/filter_buffer_encoder.c +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_buffer_encoder.c -/// \brief Single-call raw encoding -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" - - -extern LZMA_API(lzma_ret) -lzma_raw_buffer_encode(const lzma_filter *filters, lzma_allocator *allocator, - const uint8_t *in, size_t in_size, uint8_t *out, - size_t *out_pos, size_t out_size) -{ - // Validate what isn't validated later in filter_common.c. - if ((in == NULL && in_size != 0) || out == NULL - || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Initialize the encoder - lzma_next_coder next = LZMA_NEXT_CODER_INIT; - return_if_error(lzma_raw_encoder_init(&next, allocator, filters)); - - // Store the output position so that we can restore it if - // something goes wrong. - const size_t out_start = *out_pos; - - // Do the actual encoding and free coder's memory. - size_t in_pos = 0; - lzma_ret ret = next.code(next.coder, allocator, in, &in_pos, in_size, - out, out_pos, out_size, LZMA_FINISH); - lzma_next_end(&next, allocator); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - if (ret == LZMA_OK) { - // Output buffer was too small. - assert(*out_pos == out_size); - ret = LZMA_BUF_ERROR; - } - - // Restore the output position. - *out_pos = out_start; - } - - return ret; -} diff --git a/deps/lzma/liblzma/common/filter_common.c b/deps/lzma/liblzma/common/filter_common.c deleted file mode 100644 index 7c95b05f2a3f7e..00000000000000 --- a/deps/lzma/liblzma/common/filter_common.c +++ /dev/null @@ -1,337 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_common.c -/// \brief Filter-specific stuff common for both encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_common.h" - - -static const struct { - /// Filter ID - lzma_vli id; - - /// Size of the filter-specific options structure - size_t options_size; - - /// True if it is OK to use this filter as non-last filter in - /// the chain. - bool non_last_ok; - - /// True if it is OK to use this filter as the last filter in - /// the chain. - bool last_ok; - - /// True if the filter may change the size of the data (that is, the - /// amount of encoded output can be different than the amount of - /// uncompressed input). - bool changes_size; - -} features[] = { -#if defined (HAVE_ENCODER_LZMA1) || defined(HAVE_DECODER_LZMA1) - { - .id = LZMA_FILTER_LZMA1, - .options_size = sizeof(lzma_options_lzma), - .non_last_ok = false, - .last_ok = true, - .changes_size = true, - }, -#endif -#if defined(HAVE_ENCODER_LZMA2) || defined(HAVE_DECODER_LZMA2) - { - .id = LZMA_FILTER_LZMA2, - .options_size = sizeof(lzma_options_lzma), - .non_last_ok = false, - .last_ok = true, - .changes_size = true, - }, -#endif -#if defined(HAVE_ENCODER_X86) || defined(HAVE_DECODER_X86) - { - .id = LZMA_FILTER_X86, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_POWERPC) || defined(HAVE_DECODER_POWERPC) - { - .id = LZMA_FILTER_POWERPC, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_IA64) || defined(HAVE_DECODER_IA64) - { - .id = LZMA_FILTER_IA64, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_ARM) || defined(HAVE_DECODER_ARM) - { - .id = LZMA_FILTER_ARM, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_ARMTHUMB) || defined(HAVE_DECODER_ARMTHUMB) - { - .id = LZMA_FILTER_ARMTHUMB, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_SPARC) || defined(HAVE_DECODER_SPARC) - { - .id = LZMA_FILTER_SPARC, - .options_size = sizeof(lzma_options_bcj), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif -#if defined(HAVE_ENCODER_DELTA) || defined(HAVE_DECODER_DELTA) - { - .id = LZMA_FILTER_DELTA, - .options_size = sizeof(lzma_options_delta), - .non_last_ok = true, - .last_ok = false, - .changes_size = false, - }, -#endif - { - .id = LZMA_VLI_UNKNOWN - } -}; - - -extern LZMA_API(lzma_ret) -lzma_filters_copy(const lzma_filter *src, lzma_filter *dest, - lzma_allocator *allocator) -{ - if (src == NULL || dest == NULL) - return LZMA_PROG_ERROR; - - lzma_ret ret; - size_t i; - for (i = 0; src[i].id != LZMA_VLI_UNKNOWN; ++i) { - // There must be a maximum of four filters plus - // the array terminator. - if (i == LZMA_FILTERS_MAX) { - ret = LZMA_OPTIONS_ERROR; - goto error; - } - - dest[i].id = src[i].id; - - if (src[i].options == NULL) { - dest[i].options = NULL; - } else { - // See if the filter is supported only when the - // options is not NULL. This might be convenient - // sometimes if the app is actually copying only - // a partial filter chain with a place holder ID. - // - // When options is not NULL, the Filter ID must be - // supported by us, because otherwise we don't know - // how big the options are. - size_t j; - for (j = 0; src[i].id != features[j].id; ++j) { - if (features[j].id == LZMA_VLI_UNKNOWN) { - ret = LZMA_OPTIONS_ERROR; - goto error; - } - } - - // Allocate and copy the options. - dest[i].options = lzma_alloc(features[j].options_size, - allocator); - if (dest[i].options == NULL) { - ret = LZMA_MEM_ERROR; - goto error; - } - - memcpy(dest[i].options, src[i].options, - features[j].options_size); - } - } - - // Terminate the filter array. - assert(i <= LZMA_FILTERS_MAX + 1); - dest[i].id = LZMA_VLI_UNKNOWN; - dest[i].options = NULL; - - return LZMA_OK; - -error: - // Free the options which we have already allocated. - while (i-- > 0) { - lzma_free(dest[i].options, allocator); - dest[i].options = NULL; - } - - return ret; -} - - -static lzma_ret -validate_chain(const lzma_filter *filters, size_t *count) -{ - // There must be at least one filter. - if (filters == NULL || filters[0].id == LZMA_VLI_UNKNOWN) - return LZMA_PROG_ERROR; - - // Number of non-last filters that may change the size of the data - // significantly (that is, more than 1-2 % or so). - size_t changes_size_count = 0; - - // True if it is OK to add a new filter after the current filter. - bool non_last_ok = true; - - // True if the last filter in the given chain is actually usable as - // the last filter. Only filters that support embedding End of Payload - // Marker can be used as the last filter in the chain. - bool last_ok = false; - - size_t i = 0; - do { - size_t j; - for (j = 0; filters[i].id != features[j].id; ++j) - if (features[j].id == LZMA_VLI_UNKNOWN) - return LZMA_OPTIONS_ERROR; - - // If the previous filter in the chain cannot be a non-last - // filter, the chain is invalid. - if (!non_last_ok) - return LZMA_OPTIONS_ERROR; - - non_last_ok = features[j].non_last_ok; - last_ok = features[j].last_ok; - changes_size_count += features[j].changes_size; - - } while (filters[++i].id != LZMA_VLI_UNKNOWN); - - // There must be 1-4 filters. The last filter must be usable as - // the last filter in the chain. A maximum of three filters are - // allowed to change the size of the data. - if (i > LZMA_FILTERS_MAX || !last_ok || changes_size_count > 3) - return LZMA_OPTIONS_ERROR; - - *count = i; - return LZMA_OK; -} - - -extern lzma_ret -lzma_raw_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options, - lzma_filter_find coder_find, bool is_encoder) -{ - // Do some basic validation and get the number of filters. - size_t count; - return_if_error(validate_chain(options, &count)); - - // Set the filter functions and copy the options pointer. - lzma_filter_info filters[LZMA_FILTERS_MAX + 1]; - if (is_encoder) { - for (size_t i = 0; i < count; ++i) { - // The order of the filters is reversed in the - // encoder. It allows more efficient handling - // of the uncompressed data. - const size_t j = count - i - 1; - - const lzma_filter_coder *const fc - = coder_find(options[i].id); - if (fc == NULL || fc->init == NULL) - return LZMA_OPTIONS_ERROR; - - filters[j].id = options[i].id; - filters[j].init = fc->init; - filters[j].options = options[i].options; - } - } else { - for (size_t i = 0; i < count; ++i) { - const lzma_filter_coder *const fc - = coder_find(options[i].id); - if (fc == NULL || fc->init == NULL) - return LZMA_OPTIONS_ERROR; - - filters[i].id = options[i].id; - filters[i].init = fc->init; - filters[i].options = options[i].options; - } - } - - // Terminate the array. - filters[count].id = LZMA_VLI_UNKNOWN; - filters[count].init = NULL; - - // Initialize the filters. - const lzma_ret ret = lzma_next_filter_init(next, allocator, filters); - if (ret != LZMA_OK) - lzma_next_end(next, allocator); - - return ret; -} - - -extern uint64_t -lzma_raw_coder_memusage(lzma_filter_find coder_find, - const lzma_filter *filters) -{ - // The chain has to have at least one filter. - { - size_t tmp; - if (validate_chain(filters, &tmp) != LZMA_OK) - return UINT64_MAX; - } - - uint64_t total = 0; - size_t i = 0; - - do { - const lzma_filter_coder *const fc - = coder_find(filters[i].id); - if (fc == NULL) - return UINT64_MAX; // Unsupported Filter ID - - if (fc->memusage == NULL) { - // This filter doesn't have a function to calculate - // the memory usage and validate the options. Such - // filters need only little memory, so we use 1 KiB - // as a good estimate. They also accept all possible - // options, so there's no need to worry about lack - // of validation. - total += 1024; - } else { - // Call the filter-specific memory usage calculation - // function. - const uint64_t usage - = fc->memusage(filters[i].options); - if (usage == UINT64_MAX) - return UINT64_MAX; // Invalid options - - total += usage; - } - } while (filters[++i].id != LZMA_VLI_UNKNOWN); - - // Add some fixed amount of extra. It's to compensate memory usage - // of Stream, Block etc. coders, malloc() overhead, stack etc. - return total + LZMA_MEMUSAGE_BASE; -} diff --git a/deps/lzma/liblzma/common/filter_common.h b/deps/lzma/liblzma/common/filter_common.h deleted file mode 100644 index cd61fc0724f33b..00000000000000 --- a/deps/lzma/liblzma/common/filter_common.h +++ /dev/null @@ -1,48 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_common.c -/// \brief Filter-specific stuff common for both encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_COMMON_H -#define LZMA_FILTER_COMMON_H - -#include "common.h" - - -/// Both lzma_filter_encoder and lzma_filter_decoder begin with these members. -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - -} lzma_filter_coder; - - -typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id); - - -extern lzma_ret lzma_raw_coder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, - lzma_filter_find coder_find, bool is_encoder); - - -extern uint64_t lzma_raw_coder_memusage(lzma_filter_find coder_find, - const lzma_filter *filters); - - -#endif diff --git a/deps/lzma/liblzma/common/filter_decoder.c b/deps/lzma/liblzma/common/filter_decoder.c deleted file mode 100644 index 1ebbe2afef0cb9..00000000000000 --- a/deps/lzma/liblzma/common/filter_decoder.c +++ /dev/null @@ -1,183 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" -#include "filter_common.h" -#include "lzma_decoder.h" -#include "lzma2_decoder.h" -#include "simple_decoder.h" -#include "delta_decoder.h" - - -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - - /// Decodes Filter Properties. - /// - /// \return - LZMA_OK: Properties decoded successfully. - /// - LZMA_OPTIONS_ERROR: Unsupported properties - /// - LZMA_MEM_ERROR: Memory allocation failed. - lzma_ret (*props_decode)(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -} lzma_filter_decoder; - - -static const lzma_filter_decoder decoders[] = { -#ifdef HAVE_DECODER_LZMA1 - { - .id = LZMA_FILTER_LZMA1, - .init = &lzma_lzma_decoder_init, - .memusage = &lzma_lzma_decoder_memusage, - .props_decode = &lzma_lzma_props_decode, - }, -#endif -#ifdef HAVE_DECODER_LZMA2 - { - .id = LZMA_FILTER_LZMA2, - .init = &lzma_lzma2_decoder_init, - .memusage = &lzma_lzma2_decoder_memusage, - .props_decode = &lzma_lzma2_props_decode, - }, -#endif -#ifdef HAVE_DECODER_X86 - { - .id = LZMA_FILTER_X86, - .init = &lzma_simple_x86_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_POWERPC - { - .id = LZMA_FILTER_POWERPC, - .init = &lzma_simple_powerpc_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_IA64 - { - .id = LZMA_FILTER_IA64, - .init = &lzma_simple_ia64_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_ARM - { - .id = LZMA_FILTER_ARM, - .init = &lzma_simple_arm_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_ARMTHUMB - { - .id = LZMA_FILTER_ARMTHUMB, - .init = &lzma_simple_armthumb_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_SPARC - { - .id = LZMA_FILTER_SPARC, - .init = &lzma_simple_sparc_decoder_init, - .memusage = NULL, - .props_decode = &lzma_simple_props_decode, - }, -#endif -#ifdef HAVE_DECODER_DELTA - { - .id = LZMA_FILTER_DELTA, - .init = &lzma_delta_decoder_init, - .memusage = &lzma_delta_coder_memusage, - .props_decode = &lzma_delta_props_decode, - }, -#endif -}; - - -static const lzma_filter_decoder * -decoder_find(lzma_vli id) -{ - for (size_t i = 0; i < ARRAY_SIZE(decoders); ++i) - if (decoders[i].id == id) - return decoders + i; - - return NULL; -} - - -extern LZMA_API(lzma_bool) -lzma_filter_decoder_is_supported(lzma_vli id) -{ - return decoder_find(id) != NULL; -} - - -extern lzma_ret -lzma_raw_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options) -{ - return lzma_raw_coder_init(next, allocator, - options, (lzma_filter_find)(&decoder_find), false); -} - - -extern LZMA_API(lzma_ret) -lzma_raw_decoder(lzma_stream *strm, const lzma_filter *options) -{ - lzma_next_strm_init(lzma_raw_decoder_init, strm, options); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(uint64_t) -lzma_raw_decoder_memusage(const lzma_filter *filters) -{ - return lzma_raw_coder_memusage( - (lzma_filter_find)(&decoder_find), filters); -} - - -extern LZMA_API(lzma_ret) -lzma_properties_decode(lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - // Make it always NULL so that the caller can always safely free() it. - filter->options = NULL; - - const lzma_filter_decoder *const fd = decoder_find(filter->id); - if (fd == NULL) - return LZMA_OPTIONS_ERROR; - - if (fd->props_decode == NULL) - return props_size == 0 ? LZMA_OK : LZMA_OPTIONS_ERROR; - - return fd->props_decode( - &filter->options, allocator, props, props_size); -} diff --git a/deps/lzma/liblzma/common/filter_decoder.h b/deps/lzma/liblzma/common/filter_decoder.h deleted file mode 100644 index d5c68bdd4a6880..00000000000000 --- a/deps/lzma/liblzma/common/filter_decoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_DECODER_H -#define LZMA_FILTER_DECODER_H - -#include "common.h" - - -extern lzma_ret lzma_raw_decoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options); - -#endif diff --git a/deps/lzma/liblzma/common/filter_encoder.c b/deps/lzma/liblzma/common/filter_encoder.c deleted file mode 100644 index 635d81223472e8..00000000000000 --- a/deps/lzma/liblzma/common/filter_encoder.c +++ /dev/null @@ -1,288 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_decoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" -#include "filter_common.h" -#include "lzma_encoder.h" -#include "lzma2_encoder.h" -#include "simple_encoder.h" -#include "delta_encoder.h" - - -typedef struct { - /// Filter ID - lzma_vli id; - - /// Initializes the filter encoder and calls lzma_next_filter_init() - /// for filters + 1. - lzma_init_function init; - - /// Calculates memory usage of the encoder. If the options are - /// invalid, UINT64_MAX is returned. - uint64_t (*memusage)(const void *options); - - /// Calculates the minimum sane size for Blocks (or other types of - /// chunks) to which the input data can be split to make - /// multithreaded encoding possible. If this is NULL, it is assumed - /// that the encoder is fast enough with single thread. - lzma_vli (*chunk_size)(const void *options); - - /// Tells the size of the Filter Properties field. If options are - /// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed - /// is used. - lzma_ret (*props_size_get)(uint32_t *size, const void *options); - uint32_t props_size_fixed; - - /// Encodes Filter Properties. - /// - /// \return - LZMA_OK: Properties encoded successfully. - /// - LZMA_OPTIONS_ERROR: Unsupported options - /// - LZMA_PROG_ERROR: Invalid options or not enough - /// output space - lzma_ret (*props_encode)(const void *options, uint8_t *out); - -} lzma_filter_encoder; - - -static const lzma_filter_encoder encoders[] = { -#ifdef HAVE_ENCODER_LZMA1 - { - .id = LZMA_FILTER_LZMA1, - .init = &lzma_lzma_encoder_init, - .memusage = &lzma_lzma_encoder_memusage, - .chunk_size = NULL, // FIXME - .props_size_get = NULL, - .props_size_fixed = 5, - .props_encode = &lzma_lzma_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_LZMA2 - { - .id = LZMA_FILTER_LZMA2, - .init = &lzma_lzma2_encoder_init, - .memusage = &lzma_lzma2_encoder_memusage, - .chunk_size = NULL, // FIXME - .props_size_get = NULL, - .props_size_fixed = 1, - .props_encode = &lzma_lzma2_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_X86 - { - .id = LZMA_FILTER_X86, - .init = &lzma_simple_x86_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_POWERPC - { - .id = LZMA_FILTER_POWERPC, - .init = &lzma_simple_powerpc_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_IA64 - { - .id = LZMA_FILTER_IA64, - .init = &lzma_simple_ia64_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_ARM - { - .id = LZMA_FILTER_ARM, - .init = &lzma_simple_arm_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_ARMTHUMB - { - .id = LZMA_FILTER_ARMTHUMB, - .init = &lzma_simple_armthumb_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_SPARC - { - .id = LZMA_FILTER_SPARC, - .init = &lzma_simple_sparc_encoder_init, - .memusage = NULL, - .chunk_size = NULL, - .props_size_get = &lzma_simple_props_size, - .props_encode = &lzma_simple_props_encode, - }, -#endif -#ifdef HAVE_ENCODER_DELTA - { - .id = LZMA_FILTER_DELTA, - .init = &lzma_delta_encoder_init, - .memusage = &lzma_delta_coder_memusage, - .chunk_size = NULL, - .props_size_get = NULL, - .props_size_fixed = 1, - .props_encode = &lzma_delta_props_encode, - }, -#endif -}; - - -static const lzma_filter_encoder * -encoder_find(lzma_vli id) -{ - for (size_t i = 0; i < ARRAY_SIZE(encoders); ++i) - if (encoders[i].id == id) - return encoders + i; - - return NULL; -} - - -extern LZMA_API(lzma_bool) -lzma_filter_encoder_is_supported(lzma_vli id) -{ - return encoder_find(id) != NULL; -} - - -extern LZMA_API(lzma_ret) -lzma_filters_update(lzma_stream *strm, const lzma_filter *filters) -{ - if (strm->internal->next.update == NULL) - return LZMA_PROG_ERROR; - - // Validate the filter chain. - if (lzma_raw_encoder_memusage(filters) == UINT64_MAX) - return LZMA_OPTIONS_ERROR; - - // The actual filter chain in the encoder is reversed. Some things - // still want the normal order chain, so we provide both. - size_t count = 1; - while (filters[count].id != LZMA_VLI_UNKNOWN) - ++count; - - lzma_filter reversed_filters[LZMA_FILTERS_MAX + 1]; - for (size_t i = 0; i < count; ++i) - reversed_filters[count - i - 1] = filters[i]; - - reversed_filters[count].id = LZMA_VLI_UNKNOWN; - - return strm->internal->next.update(strm->internal->next.coder, - strm->allocator, filters, reversed_filters); -} - - -extern lzma_ret -lzma_raw_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *options) -{ - return lzma_raw_coder_init(next, allocator, - options, (lzma_filter_find)(&encoder_find), true); -} - - -extern LZMA_API(lzma_ret) -lzma_raw_encoder(lzma_stream *strm, const lzma_filter *options) -{ - lzma_next_strm_init(lzma_raw_coder_init, strm, options, - (lzma_filter_find)(&encoder_find), true); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(uint64_t) -lzma_raw_encoder_memusage(const lzma_filter *filters) -{ - return lzma_raw_coder_memusage( - (lzma_filter_find)(&encoder_find), filters); -} - - -/* -extern LZMA_API(lzma_vli) -lzma_chunk_size(const lzma_filter *filters) -{ - lzma_vli max = 0; - - for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { - const lzma_filter_encoder *const fe - = encoder_find(filters[i].id); - if (fe->chunk_size != NULL) { - const lzma_vli size - = fe->chunk_size(filters[i].options); - if (size == LZMA_VLI_UNKNOWN) - return LZMA_VLI_UNKNOWN; - - if (size > max) - max = size; - } - } - - return max; -} -*/ - - -extern LZMA_API(lzma_ret) -lzma_properties_size(uint32_t *size, const lzma_filter *filter) -{ - const lzma_filter_encoder *const fe = encoder_find(filter->id); - if (fe == NULL) { - // Unknown filter - if the Filter ID is a proper VLI, - // return LZMA_OPTIONS_ERROR instead of LZMA_PROG_ERROR, - // because it's possible that we just don't have support - // compiled in for the requested filter. - return filter->id <= LZMA_VLI_MAX - ? LZMA_OPTIONS_ERROR : LZMA_PROG_ERROR; - } - - if (fe->props_size_get == NULL) { - // No props_size_get() function, use props_size_fixed. - *size = fe->props_size_fixed; - return LZMA_OK; - } - - return fe->props_size_get(size, filter->options); -} - - -extern LZMA_API(lzma_ret) -lzma_properties_encode(const lzma_filter *filter, uint8_t *props) -{ - const lzma_filter_encoder *const fe = encoder_find(filter->id); - if (fe == NULL) - return LZMA_PROG_ERROR; - - if (fe->props_encode == NULL) - return LZMA_OK; - - return fe->props_encode(filter->options, props); -} diff --git a/deps/lzma/liblzma/common/filter_encoder.h b/deps/lzma/liblzma/common/filter_encoder.h deleted file mode 100644 index 5bc137f6458462..00000000000000 --- a/deps/lzma/liblzma/common/filter_encoder.h +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_encoder.c -/// \brief Filter ID mapping to filter-specific functions -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FILTER_ENCODER_H -#define LZMA_FILTER_ENCODER_H - -#include "common.h" - - -// FIXME: Might become a part of the public API once finished. -// extern lzma_vli lzma_chunk_size(const lzma_filter *filters); - - -extern lzma_ret lzma_raw_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters); - -#endif diff --git a/deps/lzma/liblzma/common/filter_flags_decoder.c b/deps/lzma/liblzma/common/filter_flags_decoder.c deleted file mode 100644 index caae10ce79a00f..00000000000000 --- a/deps/lzma/liblzma/common/filter_flags_decoder.c +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_flags_decoder.c -/// \brief Decodes a Filter Flags field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_decode( - lzma_filter *filter, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) -{ - // Set the pointer to NULL so the caller can always safely free it. - filter->options = NULL; - - // Filter ID - return_if_error(lzma_vli_decode(&filter->id, NULL, - in, in_pos, in_size)); - - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_DATA_ERROR; - - // Size of Properties - lzma_vli props_size; - return_if_error(lzma_vli_decode(&props_size, NULL, - in, in_pos, in_size)); - - // Filter Properties - if (in_size - *in_pos < props_size) - return LZMA_DATA_ERROR; - - const lzma_ret ret = lzma_properties_decode( - filter, allocator, in + *in_pos, props_size); - - *in_pos += props_size; - - return ret; -} diff --git a/deps/lzma/liblzma/common/filter_flags_encoder.c b/deps/lzma/liblzma/common/filter_flags_encoder.c deleted file mode 100644 index d110566de99fc0..00000000000000 --- a/deps/lzma/liblzma/common/filter_flags_encoder.c +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file filter_flags_encoder.c -/// \brief Decodes a Filter Flags field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "filter_encoder.h" - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_size(uint32_t *size, const lzma_filter *filter) -{ - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_PROG_ERROR; - - return_if_error(lzma_properties_size(size, filter)); - - *size += lzma_vli_size(filter->id) + lzma_vli_size(*size); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_filter_flags_encode(const lzma_filter *filter, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Filter ID - if (filter->id >= LZMA_FILTER_RESERVED_START) - return LZMA_PROG_ERROR; - - return_if_error(lzma_vli_encode(filter->id, NULL, - out, out_pos, out_size)); - - // Size of Properties - uint32_t props_size; - return_if_error(lzma_properties_size(&props_size, filter)); - return_if_error(lzma_vli_encode(props_size, NULL, - out, out_pos, out_size)); - - // Filter Properties - if (out_size - *out_pos < props_size) - return LZMA_PROG_ERROR; - - return_if_error(lzma_properties_encode(filter, out + *out_pos)); - - *out_pos += props_size; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/hardware_physmem.c b/deps/lzma/liblzma/common/hardware_physmem.c deleted file mode 100644 index 7405b658af7648..00000000000000 --- a/deps/lzma/liblzma/common/hardware_physmem.c +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file hardware_physmem.c -/// \brief Get the total amount of physical memory (RAM) -// -// Author: Jonathan Nieder -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - -#include "tuklib_physmem.h" - - -extern LZMA_API(uint64_t) -lzma_physmem(void) -{ - // It is simpler to make lzma_physmem() a wrapper for - // tuklib_physmem() than to hack appropriate symbol visiblity - // support for the tuklib modules. - return tuklib_physmem(); -} diff --git a/deps/lzma/liblzma/common/index.c b/deps/lzma/liblzma/common/index.c deleted file mode 100644 index 9af4bc19d1b540..00000000000000 --- a/deps/lzma/liblzma/common/index.c +++ /dev/null @@ -1,1244 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index.c -/// \brief Handling of .xz Indexes and some other Stream information -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" -#include "stream_flags_common.h" - - -/// \brief How many Records to allocate at once -/// -/// This should be big enough to avoid making lots of tiny allocations -/// but small enough to avoid too much unused memory at once. -#define INDEX_GROUP_SIZE 512 - - -/// \brief How many Records can be allocated at once at maximum -#define PREALLOC_MAX ((SIZE_MAX - sizeof(index_group)) / sizeof(index_record)) - - -/// \brief Base structure for index_stream and index_group structures -typedef struct index_tree_node_s index_tree_node; -struct index_tree_node_s { - /// Uncompressed start offset of this Stream (relative to the - /// beginning of the file) or Block (relative to the beginning - /// of the Stream) - lzma_vli uncompressed_base; - - /// Compressed start offset of this Stream or Block - lzma_vli compressed_base; - - index_tree_node *parent; - index_tree_node *left; - index_tree_node *right; -}; - - -/// \brief AVL tree to hold index_stream or index_group structures -typedef struct { - /// Root node - index_tree_node *root; - - /// Leftmost node. Since the tree will be filled sequentially, - /// this won't change after the first node has been added to - /// the tree. - index_tree_node *leftmost; - - /// The rightmost node in the tree. Since the tree is filled - /// sequentially, this is always the node where to add the new data. - index_tree_node *rightmost; - - /// Number of nodes in the tree - uint32_t count; - -} index_tree; - - -typedef struct { - lzma_vli uncompressed_sum; - lzma_vli unpadded_sum; -} index_record; - - -typedef struct { - /// Every Record group is part of index_stream.groups tree. - index_tree_node node; - - /// Number of Blocks in this Stream before this group. - lzma_vli number_base; - - /// Number of Records that can be put in records[]. - size_t allocated; - - /// Index of the last Record in use. - size_t last; - - /// The sizes in this array are stored as cumulative sums relative - /// to the beginning of the Stream. This makes it possible to - /// use binary search in lzma_index_locate(). - /// - /// Note that the cumulative summing is done specially for - /// unpadded_sum: The previous value is rounded up to the next - /// multiple of four before adding the Unpadded Size of the new - /// Block. The total encoded size of the Blocks in the Stream - /// is records[last].unpadded_sum in the last Record group of - /// the Stream. - /// - /// For example, if the Unpadded Sizes are 39, 57, and 81, the - /// stored values are 39, 97 (40 + 57), and 181 (100 + 181). - /// The total encoded size of these Blocks is 184. - /// - /// This is a flexible array, because it makes easy to optimize - /// memory usage in case someone concatenates many Streams that - /// have only one or few Blocks. - index_record records[]; - -} index_group; - - -typedef struct { - /// Every index_stream is a node in the tree of Sreams. - index_tree_node node; - - /// Number of this Stream (first one is 1) - uint32_t number; - - /// Total number of Blocks before this Stream - lzma_vli block_number_base; - - /// Record groups of this Stream are stored in a tree. - /// It's a T-tree with AVL-tree balancing. There are - /// INDEX_GROUP_SIZE Records per node by default. - /// This keeps the number of memory allocations reasonable - /// and finding a Record is fast. - index_tree groups; - - /// Number of Records in this Stream - lzma_vli record_count; - - /// Size of the List of Records field in this Stream. This is used - /// together with record_count to calculate the size of the Index - /// field and thus the total size of the Stream. - lzma_vli index_list_size; - - /// Stream Flags of this Stream. This is meaningful only if - /// the Stream Flags have been told us with lzma_index_stream_flags(). - /// Initially stream_flags.version is set to UINT32_MAX to indicate - /// that the Stream Flags are unknown. - lzma_stream_flags stream_flags; - - /// Amount of Stream Padding after this Stream. This defaults to - /// zero and can be set with lzma_index_stream_padding(). - lzma_vli stream_padding; - -} index_stream; - - -struct lzma_index_s { - /// AVL-tree containing the Stream(s). Often there is just one - /// Stream, but using a tree keeps lookups fast even when there - /// are many concatenated Streams. - index_tree streams; - - /// Uncompressed size of all the Blocks in the Stream(s) - lzma_vli uncompressed_size; - - /// Total size of all the Blocks in the Stream(s) - lzma_vli total_size; - - /// Total number of Records in all Streams in this lzma_index - lzma_vli record_count; - - /// Size of the List of Records field if all the Streams in this - /// lzma_index were packed into a single Stream (makes it simpler to - /// take many .xz files and combine them into a single Stream). - /// - /// This value together with record_count is needed to calculate - /// Backward Size that is stored into Stream Footer. - lzma_vli index_list_size; - - /// How many Records to allocate at once in lzma_index_append(). - /// This defaults to INDEX_GROUP_SIZE but can be overriden with - /// lzma_index_prealloc(). - size_t prealloc; - - /// Bitmask indicating what integrity check types have been used - /// as set by lzma_index_stream_flags(). The bit of the last Stream - /// is not included here, since it is possible to change it by - /// calling lzma_index_stream_flags() again. - uint32_t checks; -}; - - -static void -index_tree_init(index_tree *tree) -{ - tree->root = NULL; - tree->leftmost = NULL; - tree->rightmost = NULL; - tree->count = 0; - return; -} - - -/// Helper for index_tree_end() -static void -index_tree_node_end(index_tree_node *node, lzma_allocator *allocator, - void (*free_func)(void *node, lzma_allocator *allocator)) -{ - // The tree won't ever be very huge, so recursion should be fine. - // 20 levels in the tree is likely quite a lot already in practice. - if (node->left != NULL) - index_tree_node_end(node->left, allocator, free_func); - - if (node->right != NULL) - index_tree_node_end(node->right, allocator, free_func); - - if (free_func != NULL) - free_func(node, allocator); - - lzma_free(node, allocator); - return; -} - - -/// Free the meory allocated for a tree. If free_func is not NULL, -/// it is called on each node before freeing the node. This is used -/// to free the Record groups from each index_stream before freeing -/// the index_stream itself. -static void -index_tree_end(index_tree *tree, lzma_allocator *allocator, - void (*free_func)(void *node, lzma_allocator *allocator)) -{ - if (tree->root != NULL) - index_tree_node_end(tree->root, allocator, free_func); - - return; -} - - -/// Add a new node to the tree. node->uncompressed_base and -/// node->compressed_base must have been set by the caller already. -static void -index_tree_append(index_tree *tree, index_tree_node *node) -{ - node->parent = tree->rightmost; - node->left = NULL; - node->right = NULL; - - ++tree->count; - - // Handle the special case of adding the first node. - if (tree->root == NULL) { - tree->root = node; - tree->leftmost = node; - tree->rightmost = node; - return; - } - - // The tree is always filled sequentially. - assert(tree->rightmost->uncompressed_base <= node->uncompressed_base); - assert(tree->rightmost->compressed_base < node->compressed_base); - - // Add the new node after the rightmost node. It's the correct - // place due to the reason above. - tree->rightmost->right = node; - tree->rightmost = node; - - // Balance the AVL-tree if needed. We don't need to keep the balance - // factors in nodes, because we always fill the tree sequentially, - // and thus know the state of the tree just by looking at the node - // count. From the node count we can calculate how many steps to go - // up in the tree to find the rotation root. - uint32_t up = tree->count ^ (UINT32_C(1) << bsr32(tree->count)); - if (up != 0) { - // Locate the root node for the rotation. - up = ctz32(tree->count) + 2; - do { - node = node->parent; - } while (--up > 0); - - // Rotate left using node as the rotation root. - index_tree_node *pivot = node->right; - - if (node->parent == NULL) { - tree->root = pivot; - } else { - assert(node->parent->right == node); - node->parent->right = pivot; - } - - pivot->parent = node->parent; - - node->right = pivot->left; - if (node->right != NULL) - node->right->parent = node; - - pivot->left = node; - node->parent = pivot; - } - - return; -} - - -/// Get the next node in the tree. Return NULL if there are no more nodes. -static void * -index_tree_next(const index_tree_node *node) -{ - if (node->right != NULL) { - node = node->right; - while (node->left != NULL) - node = node->left; - - return (void *)(node); - } - - while (node->parent != NULL && node->parent->right == node) - node = node->parent; - - return (void *)(node->parent); -} - - -/// Locate a node that contains the given uncompressed offset. It is -/// caller's job to check that target is not bigger than the uncompressed -/// size of the tree (the last node would be returned in that case still). -static void * -index_tree_locate(const index_tree *tree, lzma_vli target) -{ - const index_tree_node *result = NULL; - const index_tree_node *node = tree->root; - - assert(tree->leftmost == NULL - || tree->leftmost->uncompressed_base == 0); - - // Consecutive nodes may have the same uncompressed_base. - // We must pick the rightmost one. - while (node != NULL) { - if (node->uncompressed_base > target) { - node = node->left; - } else { - result = node; - node = node->right; - } - } - - return (void *)(result); -} - - -/// Allocate and initialize a new Stream using the given base offsets. -static index_stream * -index_stream_init(lzma_vli compressed_base, lzma_vli uncompressed_base, - lzma_vli stream_number, lzma_vli block_number_base, - lzma_allocator *allocator) -{ - index_stream *s = lzma_alloc(sizeof(index_stream), allocator); - if (s == NULL) - return NULL; - - s->node.uncompressed_base = uncompressed_base; - s->node.compressed_base = compressed_base; - s->node.parent = NULL; - s->node.left = NULL; - s->node.right = NULL; - - s->number = stream_number; - s->block_number_base = block_number_base; - - index_tree_init(&s->groups); - - s->record_count = 0; - s->index_list_size = 0; - s->stream_flags.version = UINT32_MAX; - s->stream_padding = 0; - - return s; -} - - -/// Free the memory allocated for a Stream and its Record groups. -static void -index_stream_end(void *node, lzma_allocator *allocator) -{ - index_stream *s = node; - index_tree_end(&s->groups, allocator, NULL); - return; -} - - -static lzma_index * -index_init_plain(lzma_allocator *allocator) -{ - lzma_index *i = lzma_alloc(sizeof(lzma_index), allocator); - if (i != NULL) { - index_tree_init(&i->streams); - i->uncompressed_size = 0; - i->total_size = 0; - i->record_count = 0; - i->index_list_size = 0; - i->prealloc = INDEX_GROUP_SIZE; - i->checks = 0; - } - - return i; -} - - -extern LZMA_API(lzma_index *) -lzma_index_init(lzma_allocator *allocator) -{ - lzma_index *i = index_init_plain(allocator); - if (i == NULL) - return NULL; - - index_stream *s = index_stream_init(0, 0, 1, 0, allocator); - if (s == NULL) { - lzma_free(i, allocator); - return NULL; - } - - index_tree_append(&i->streams, &s->node); - - return i; -} - - -extern LZMA_API(void) -lzma_index_end(lzma_index *i, lzma_allocator *allocator) -{ - // NOTE: If you modify this function, check also the bottom - // of lzma_index_cat(). - if (i != NULL) { - index_tree_end(&i->streams, allocator, &index_stream_end); - lzma_free(i, allocator); - } - - return; -} - - -extern void -lzma_index_prealloc(lzma_index *i, lzma_vli records) -{ - if (records > PREALLOC_MAX) - records = PREALLOC_MAX; - - i->prealloc = (size_t)(records); - return; -} - - -extern LZMA_API(uint64_t) -lzma_index_memusage(lzma_vli streams, lzma_vli blocks) -{ - // This calculates an upper bound that is only a little bit - // bigger than the exact maximum memory usage with the given - // parameters. - - // Typical malloc() overhead is 2 * sizeof(void *) but we take - // a little bit extra just in case. Using LZMA_MEMUSAGE_BASE - // instead would give too inaccurate estimate. - const size_t alloc_overhead = 4 * sizeof(void *); - - // Amount of memory needed for each Stream base structures. - // We assume that every Stream has at least one Block and - // thus at least one group. - const size_t stream_base = sizeof(index_stream) - + sizeof(index_group) + 2 * alloc_overhead; - - // Amount of memory needed per group. - const size_t group_base = sizeof(index_group) - + INDEX_GROUP_SIZE * sizeof(index_record) - + alloc_overhead; - - // Number of groups. There may actually be more, but that overhead - // has been taken into account in stream_base already. - const lzma_vli groups - = (blocks + INDEX_GROUP_SIZE - 1) / INDEX_GROUP_SIZE; - - // Memory used by index_stream and index_group structures. - const uint64_t streams_mem = streams * stream_base; - const uint64_t groups_mem = groups * group_base; - - // Memory used by the base structure. - const uint64_t index_base = sizeof(lzma_index) + alloc_overhead; - - // Validate the arguments and catch integer overflows. - // Maximum number of Streams is "only" UINT32_MAX, because - // that limit is used by the tree containing the Streams. - const uint64_t limit = UINT64_MAX - index_base; - if (streams == 0 || streams > UINT32_MAX || blocks > LZMA_VLI_MAX - || streams > limit / stream_base - || groups > limit / group_base - || limit - streams_mem < groups_mem) - return UINT64_MAX; - - return index_base + streams_mem + groups_mem; -} - - -extern LZMA_API(uint64_t) -lzma_index_memused(const lzma_index *i) -{ - return lzma_index_memusage(i->streams.count, i->record_count); -} - - -extern LZMA_API(lzma_vli) -lzma_index_block_count(const lzma_index *i) -{ - return i->record_count; -} - - -extern LZMA_API(lzma_vli) -lzma_index_stream_count(const lzma_index *i) -{ - return i->streams.count; -} - - -extern LZMA_API(lzma_vli) -lzma_index_size(const lzma_index *i) -{ - return index_size(i->record_count, i->index_list_size); -} - - -extern LZMA_API(lzma_vli) -lzma_index_total_size(const lzma_index *i) -{ - return i->total_size; -} - - -extern LZMA_API(lzma_vli) -lzma_index_stream_size(const lzma_index *i) -{ - // Stream Header + Blocks + Index + Stream Footer - return LZMA_STREAM_HEADER_SIZE + i->total_size - + index_size(i->record_count, i->index_list_size) - + LZMA_STREAM_HEADER_SIZE; -} - - -static lzma_vli -index_file_size(lzma_vli compressed_base, lzma_vli unpadded_sum, - lzma_vli record_count, lzma_vli index_list_size, - lzma_vli stream_padding) -{ - // Earlier Streams and Stream Paddings + Stream Header - // + Blocks + Index + Stream Footer + Stream Padding - // - // This might go over LZMA_VLI_MAX due to too big unpadded_sum - // when this function is used in lzma_index_append(). - lzma_vli file_size = compressed_base + 2 * LZMA_STREAM_HEADER_SIZE - + stream_padding + vli_ceil4(unpadded_sum); - if (file_size > LZMA_VLI_MAX) - return LZMA_VLI_UNKNOWN; - - // The same applies here. - file_size += index_size(record_count, index_list_size); - if (file_size > LZMA_VLI_MAX) - return LZMA_VLI_UNKNOWN; - - return file_size; -} - - -extern LZMA_API(lzma_vli) -lzma_index_file_size(const lzma_index *i) -{ - const index_stream *s = (const index_stream *)(i->streams.rightmost); - const index_group *g = (const index_group *)(s->groups.rightmost); - return index_file_size(s->node.compressed_base, - g == NULL ? 0 : g->records[g->last].unpadded_sum, - s->record_count, s->index_list_size, - s->stream_padding); -} - - -extern LZMA_API(lzma_vli) -lzma_index_uncompressed_size(const lzma_index *i) -{ - return i->uncompressed_size; -} - - -extern LZMA_API(uint32_t) -lzma_index_checks(const lzma_index *i) -{ - uint32_t checks = i->checks; - - // Get the type of the Check of the last Stream too. - const index_stream *s = (const index_stream *)(i->streams.rightmost); - if (s->stream_flags.version != UINT32_MAX) - checks |= UINT32_C(1) << s->stream_flags.check; - - return checks; -} - - -extern uint32_t -lzma_index_padding_size(const lzma_index *i) -{ - return (LZMA_VLI_C(4) - index_size_unpadded( - i->record_count, i->index_list_size)) & 3; -} - - -extern LZMA_API(lzma_ret) -lzma_index_stream_flags(lzma_index *i, const lzma_stream_flags *stream_flags) -{ - if (i == NULL || stream_flags == NULL) - return LZMA_PROG_ERROR; - - // Validate the Stream Flags. - return_if_error(lzma_stream_flags_compare( - stream_flags, stream_flags)); - - index_stream *s = (index_stream *)(i->streams.rightmost); - s->stream_flags = *stream_flags; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_stream_padding(lzma_index *i, lzma_vli stream_padding) -{ - if (i == NULL || stream_padding > LZMA_VLI_MAX - || (stream_padding & 3) != 0) - return LZMA_PROG_ERROR; - - index_stream *s = (index_stream *)(i->streams.rightmost); - - // Check that the new value won't make the file grow too big. - const lzma_vli old_stream_padding = s->stream_padding; - s->stream_padding = 0; - if (lzma_index_file_size(i) + stream_padding > LZMA_VLI_MAX) { - s->stream_padding = old_stream_padding; - return LZMA_DATA_ERROR; - } - - s->stream_padding = stream_padding; - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_append(lzma_index *i, lzma_allocator *allocator, - lzma_vli unpadded_size, lzma_vli uncompressed_size) -{ - // Validate. - if (i == NULL || unpadded_size < UNPADDED_SIZE_MIN - || unpadded_size > UNPADDED_SIZE_MAX - || uncompressed_size > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - index_stream *s = (index_stream *)(i->streams.rightmost); - index_group *g = (index_group *)(s->groups.rightmost); - - const lzma_vli compressed_base = g == NULL ? 0 - : vli_ceil4(g->records[g->last].unpadded_sum); - const lzma_vli uncompressed_base = g == NULL ? 0 - : g->records[g->last].uncompressed_sum; - const uint32_t index_list_size_add = lzma_vli_size(unpadded_size) - + lzma_vli_size(uncompressed_size); - - // Check that the file size will stay within limits. - if (index_file_size(s->node.compressed_base, - compressed_base + unpadded_size, s->record_count + 1, - s->index_list_size + index_list_size_add, - s->stream_padding) == LZMA_VLI_UNKNOWN) - return LZMA_DATA_ERROR; - - // The size of the Index field must not exceed the maximum value - // that can be stored in the Backward Size field. - if (index_size(i->record_count + 1, - i->index_list_size + index_list_size_add) - > LZMA_BACKWARD_SIZE_MAX) - return LZMA_DATA_ERROR; - - if (g != NULL && g->last + 1 < g->allocated) { - // There is space in the last group at least for one Record. - ++g->last; - } else { - // We need to allocate a new group. - g = lzma_alloc(sizeof(index_group) - + i->prealloc * sizeof(index_record), - allocator); - if (g == NULL) - return LZMA_MEM_ERROR; - - g->last = 0; - g->allocated = i->prealloc; - - // Reset prealloc so that if the application happens to - // add new Records, the allocation size will be sane. - i->prealloc = INDEX_GROUP_SIZE; - - // Set the start offsets of this group. - g->node.uncompressed_base = uncompressed_base; - g->node.compressed_base = compressed_base; - g->number_base = s->record_count + 1; - - // Add the new group to the Stream. - index_tree_append(&s->groups, &g->node); - } - - // Add the new Record to the group. - g->records[g->last].uncompressed_sum - = uncompressed_base + uncompressed_size; - g->records[g->last].unpadded_sum - = compressed_base + unpadded_size; - - // Update the totals. - ++s->record_count; - s->index_list_size += index_list_size_add; - - i->total_size += vli_ceil4(unpadded_size); - i->uncompressed_size += uncompressed_size; - ++i->record_count; - i->index_list_size += index_list_size_add; - - return LZMA_OK; -} - - -/// Structure to pass info to index_cat_helper() -typedef struct { - /// Uncompressed size of the destination - lzma_vli uncompressed_size; - - /// Compressed file size of the destination - lzma_vli file_size; - - /// Same as above but for Block numbers - lzma_vli block_number_add; - - /// Number of Streams that were in the destination index before we - /// started appending new Streams from the source index. This is - /// used to fix the Stream numbering. - uint32_t stream_number_add; - - /// Destination index' Stream tree - index_tree *streams; - -} index_cat_info; - - -/// Add the Stream nodes from the source index to dest using recursion. -/// Simplest iterative traversal of the source tree wouldn't work, because -/// we update the pointers in nodes when moving them to the destination tree. -static void -index_cat_helper(const index_cat_info *info, index_stream *this) -{ - index_stream *left = (index_stream *)(this->node.left); - index_stream *right = (index_stream *)(this->node.right); - - if (left != NULL) - index_cat_helper(info, left); - - this->node.uncompressed_base += info->uncompressed_size; - this->node.compressed_base += info->file_size; - this->number += info->stream_number_add; - this->block_number_base += info->block_number_add; - index_tree_append(info->streams, &this->node); - - if (right != NULL) - index_cat_helper(info, right); - - return; -} - - -extern LZMA_API(lzma_ret) -lzma_index_cat(lzma_index *restrict dest, lzma_index *restrict src, - lzma_allocator *allocator) -{ - const lzma_vli dest_file_size = lzma_index_file_size(dest); - - // Check that we don't exceed the file size limits. - if (dest_file_size + lzma_index_file_size(src) > LZMA_VLI_MAX - || dest->uncompressed_size + src->uncompressed_size - > LZMA_VLI_MAX) - return LZMA_DATA_ERROR; - - // Check that the encoded size of the combined lzma_indexes stays - // within limits. In theory, this should be done only if we know - // that the user plans to actually combine the Streams and thus - // construct a single Index (probably rare). However, exceeding - // this limit is quite theoretical, so we do this check always - // to simplify things elsewhere. - { - const lzma_vli dest_size = index_size_unpadded( - dest->record_count, dest->index_list_size); - const lzma_vli src_size = index_size_unpadded( - src->record_count, src->index_list_size); - if (vli_ceil4(dest_size + src_size) > LZMA_BACKWARD_SIZE_MAX) - return LZMA_DATA_ERROR; - } - - // Optimize the last group to minimize memory usage. Allocation has - // to be done before modifying dest or src. - { - index_stream *s = (index_stream *)(dest->streams.rightmost); - index_group *g = (index_group *)(s->groups.rightmost); - if (g != NULL && g->last + 1 < g->allocated) { - assert(g->node.left == NULL); - assert(g->node.right == NULL); - - index_group *newg = lzma_alloc(sizeof(index_group) - + (g->last + 1) - * sizeof(index_record), - allocator); - if (newg == NULL) - return LZMA_MEM_ERROR; - - newg->node = g->node; - newg->allocated = g->last + 1; - newg->last = g->last; - newg->number_base = g->number_base; - - memcpy(newg->records, g->records, newg->allocated - * sizeof(index_record)); - - if (g->node.parent != NULL) { - assert(g->node.parent->right == &g->node); - g->node.parent->right = &newg->node; - } - - if (s->groups.leftmost == &g->node) { - assert(s->groups.root == &g->node); - s->groups.leftmost = &newg->node; - s->groups.root = &newg->node; - } - - if (s->groups.rightmost == &g->node) - s->groups.rightmost = &newg->node; - - lzma_free(g, allocator); - } - } - - // Add all the Streams from src to dest. Update the base offsets - // of each Stream from src. - const index_cat_info info = { - .uncompressed_size = dest->uncompressed_size, - .file_size = dest_file_size, - .stream_number_add = dest->streams.count, - .block_number_add = dest->record_count, - .streams = &dest->streams, - }; - index_cat_helper(&info, (index_stream *)(src->streams.root)); - - // Update info about all the combined Streams. - dest->uncompressed_size += src->uncompressed_size; - dest->total_size += src->total_size; - dest->record_count += src->record_count; - dest->index_list_size += src->index_list_size; - dest->checks = lzma_index_checks(dest) | src->checks; - - // There's nothing else left in src than the base structure. - lzma_free(src, allocator); - - return LZMA_OK; -} - - -/// Duplicate an index_stream. -static index_stream * -index_dup_stream(const index_stream *src, lzma_allocator *allocator) -{ - // Catch a somewhat theoretical integer overflow. - if (src->record_count > PREALLOC_MAX) - return NULL; - - // Allocate and initialize a new Stream. - index_stream *dest = index_stream_init(src->node.compressed_base, - src->node.uncompressed_base, src->number, - src->block_number_base, allocator); - - // Return immediately if allocation failed or if there are - // no groups to duplicate. - if (dest == NULL || src->groups.leftmost == NULL) - return dest; - - // Copy the overall information. - dest->record_count = src->record_count; - dest->index_list_size = src->index_list_size; - dest->stream_flags = src->stream_flags; - dest->stream_padding = src->stream_padding; - - // Allocate memory for the Records. We put all the Records into - // a single group. It's simplest and also tends to make - // lzma_index_locate() a little bit faster with very big Indexes. - index_group *destg = lzma_alloc(sizeof(index_group) - + src->record_count * sizeof(index_record), - allocator); - if (destg == NULL) { - index_stream_end(dest, allocator); - return NULL; - } - - // Initialize destg. - destg->node.uncompressed_base = 0; - destg->node.compressed_base = 0; - destg->number_base = 1; - destg->allocated = src->record_count; - destg->last = src->record_count - 1; - - // Go through all the groups in src and copy the Records into destg. - const index_group *srcg = (const index_group *)(src->groups.leftmost); - size_t i = 0; - do { - memcpy(destg->records + i, srcg->records, - (srcg->last + 1) * sizeof(index_record)); - i += srcg->last + 1; - srcg = index_tree_next(&srcg->node); - } while (srcg != NULL); - - assert(i == destg->allocated); - - // Add the group to the new Stream. - index_tree_append(&dest->groups, &destg->node); - - return dest; -} - - -extern LZMA_API(lzma_index *) -lzma_index_dup(const lzma_index *src, lzma_allocator *allocator) -{ - // Allocate the base structure (no initial Stream). - lzma_index *dest = index_init_plain(allocator); - if (dest == NULL) - return NULL; - - // Copy the totals. - dest->uncompressed_size = src->uncompressed_size; - dest->total_size = src->total_size; - dest->record_count = src->record_count; - dest->index_list_size = src->index_list_size; - - // Copy the Streams and the groups in them. - const index_stream *srcstream - = (const index_stream *)(src->streams.leftmost); - do { - index_stream *deststream = index_dup_stream( - srcstream, allocator); - if (deststream == NULL) { - lzma_index_end(dest, allocator); - return NULL; - } - - index_tree_append(&dest->streams, &deststream->node); - - srcstream = index_tree_next(&srcstream->node); - } while (srcstream != NULL); - - return dest; -} - - -/// Indexing for lzma_index_iter.internal[] -enum { - ITER_INDEX, - ITER_STREAM, - ITER_GROUP, - ITER_RECORD, - ITER_METHOD, -}; - - -/// Values for lzma_index_iter.internal[ITER_METHOD].s -enum { - ITER_METHOD_NORMAL, - ITER_METHOD_NEXT, - ITER_METHOD_LEFTMOST, -}; - - -static void -iter_set_info(lzma_index_iter *iter) -{ - const lzma_index *i = iter->internal[ITER_INDEX].p; - const index_stream *stream = iter->internal[ITER_STREAM].p; - const index_group *group = iter->internal[ITER_GROUP].p; - const size_t record = iter->internal[ITER_RECORD].s; - - // lzma_index_iter.internal must not contain a pointer to the last - // group in the index, because that may be reallocated by - // lzma_index_cat(). - if (group == NULL) { - // There are no groups. - assert(stream->groups.root == NULL); - iter->internal[ITER_METHOD].s = ITER_METHOD_LEFTMOST; - - } else if (i->streams.rightmost != &stream->node - || stream->groups.rightmost != &group->node) { - // The group is not not the last group in the index. - iter->internal[ITER_METHOD].s = ITER_METHOD_NORMAL; - - } else if (stream->groups.leftmost != &group->node) { - // The group isn't the only group in the Stream, thus we - // know that it must have a parent group i.e. it's not - // the root node. - assert(stream->groups.root != &group->node); - assert(group->node.parent->right == &group->node); - iter->internal[ITER_METHOD].s = ITER_METHOD_NEXT; - iter->internal[ITER_GROUP].p = group->node.parent; - - } else { - // The Stream has only one group. - assert(stream->groups.root == &group->node); - assert(group->node.parent == NULL); - iter->internal[ITER_METHOD].s = ITER_METHOD_LEFTMOST; - iter->internal[ITER_GROUP].p = NULL; - } - - iter->stream.number = stream->number; - iter->stream.block_count = stream->record_count; - iter->stream.compressed_offset = stream->node.compressed_base; - iter->stream.uncompressed_offset = stream->node.uncompressed_base; - - // iter->stream.flags will be NULL if the Stream Flags haven't been - // set with lzma_index_stream_flags(). - iter->stream.flags = stream->stream_flags.version == UINT32_MAX - ? NULL : &stream->stream_flags; - iter->stream.padding = stream->stream_padding; - - if (stream->groups.rightmost == NULL) { - // Stream has no Blocks. - iter->stream.compressed_size = index_size(0, 0) - + 2 * LZMA_STREAM_HEADER_SIZE; - iter->stream.uncompressed_size = 0; - } else { - const index_group *g = (const index_group *)( - stream->groups.rightmost); - - // Stream Header + Stream Footer + Index + Blocks - iter->stream.compressed_size = 2 * LZMA_STREAM_HEADER_SIZE - + index_size(stream->record_count, - stream->index_list_size) - + vli_ceil4(g->records[g->last].unpadded_sum); - iter->stream.uncompressed_size - = g->records[g->last].uncompressed_sum; - } - - if (group != NULL) { - iter->block.number_in_stream = group->number_base + record; - iter->block.number_in_file = iter->block.number_in_stream - + stream->block_number_base; - - iter->block.compressed_stream_offset - = record == 0 ? group->node.compressed_base - : vli_ceil4(group->records[ - record - 1].unpadded_sum); - iter->block.uncompressed_stream_offset - = record == 0 ? group->node.uncompressed_base - : group->records[record - 1].uncompressed_sum; - - iter->block.uncompressed_size - = group->records[record].uncompressed_sum - - iter->block.uncompressed_stream_offset; - iter->block.unpadded_size - = group->records[record].unpadded_sum - - iter->block.compressed_stream_offset; - iter->block.total_size = vli_ceil4(iter->block.unpadded_size); - - iter->block.compressed_stream_offset - += LZMA_STREAM_HEADER_SIZE; - - iter->block.compressed_file_offset - = iter->block.compressed_stream_offset - + iter->stream.compressed_offset; - iter->block.uncompressed_file_offset - = iter->block.uncompressed_stream_offset - + iter->stream.uncompressed_offset; - } - - return; -} - - -extern LZMA_API(void) -lzma_index_iter_init(lzma_index_iter *iter, const lzma_index *i) -{ - iter->internal[ITER_INDEX].p = i; - lzma_index_iter_rewind(iter); - return; -} - - -extern LZMA_API(void) -lzma_index_iter_rewind(lzma_index_iter *iter) -{ - iter->internal[ITER_STREAM].p = NULL; - iter->internal[ITER_GROUP].p = NULL; - iter->internal[ITER_RECORD].s = 0; - iter->internal[ITER_METHOD].s = ITER_METHOD_NORMAL; - return; -} - - -extern LZMA_API(lzma_bool) -lzma_index_iter_next(lzma_index_iter *iter, lzma_index_iter_mode mode) -{ - // Catch unsupported mode values. - if ((unsigned int)(mode) > LZMA_INDEX_ITER_NONEMPTY_BLOCK) - return true; - - const lzma_index *i = iter->internal[ITER_INDEX].p; - const index_stream *stream = iter->internal[ITER_STREAM].p; - const index_group *group = NULL; - size_t record = iter->internal[ITER_RECORD].s; - - // If we are being asked for the next Stream, leave group to NULL - // so that the rest of the this function thinks that this Stream - // has no groups and will thus go to the next Stream. - if (mode != LZMA_INDEX_ITER_STREAM) { - // Get the pointer to the current group. See iter_set_inf() - // for explanation. - switch (iter->internal[ITER_METHOD].s) { - case ITER_METHOD_NORMAL: - group = iter->internal[ITER_GROUP].p; - break; - - case ITER_METHOD_NEXT: - group = index_tree_next(iter->internal[ITER_GROUP].p); - break; - - case ITER_METHOD_LEFTMOST: - group = (const index_group *)( - stream->groups.leftmost); - break; - } - } - -again: - if (stream == NULL) { - // We at the beginning of the lzma_index. - // Locate the first Stream. - stream = (const index_stream *)(i->streams.leftmost); - if (mode >= LZMA_INDEX_ITER_BLOCK) { - // Since we are being asked to return information - // about the first a Block, skip Streams that have - // no Blocks. - while (stream->groups.leftmost == NULL) { - stream = index_tree_next(&stream->node); - if (stream == NULL) - return true; - } - } - - // Start from the first Record in the Stream. - group = (const index_group *)(stream->groups.leftmost); - record = 0; - - } else if (group != NULL && record < group->last) { - // The next Record is in the same group. - ++record; - - } else { - // This group has no more Records or this Stream has - // no Blocks at all. - record = 0; - - // If group is not NULL, this Stream has at least one Block - // and thus at least one group. Find the next group. - if (group != NULL) - group = index_tree_next(&group->node); - - if (group == NULL) { - // This Stream has no more Records. Find the next - // Stream. If we are being asked to return information - // about a Block, we skip empty Streams. - do { - stream = index_tree_next(&stream->node); - if (stream == NULL) - return true; - } while (mode >= LZMA_INDEX_ITER_BLOCK - && stream->groups.leftmost == NULL); - - group = (const index_group *)( - stream->groups.leftmost); - } - } - - if (mode == LZMA_INDEX_ITER_NONEMPTY_BLOCK) { - // We need to look for the next Block again if this Block - // is empty. - if (record == 0) { - if (group->node.uncompressed_base - == group->records[0].uncompressed_sum) - goto again; - } else if (group->records[record - 1].uncompressed_sum - == group->records[record].uncompressed_sum) { - goto again; - } - } - - iter->internal[ITER_STREAM].p = stream; - iter->internal[ITER_GROUP].p = group; - iter->internal[ITER_RECORD].s = record; - - iter_set_info(iter); - - return false; -} - - -extern LZMA_API(lzma_bool) -lzma_index_iter_locate(lzma_index_iter *iter, lzma_vli target) -{ - const lzma_index *i = iter->internal[ITER_INDEX].p; - - // If the target is past the end of the file, return immediately. - if (i->uncompressed_size <= target) - return true; - - // Locate the Stream containing the target offset. - const index_stream *stream = index_tree_locate(&i->streams, target); - assert(stream != NULL); - target -= stream->node.uncompressed_base; - - // Locate the group containing the target offset. - const index_group *group = index_tree_locate(&stream->groups, target); - assert(group != NULL); - - // Use binary search to locate the exact Record. It is the first - // Record whose uncompressed_sum is greater than target. - // This is because we want the rightmost Record that fullfills the - // search criterion. It is possible that there are empty Blocks; - // we don't want to return them. - size_t left = 0; - size_t right = group->last; - - while (left < right) { - const size_t pos = left + (right - left) / 2; - if (group->records[pos].uncompressed_sum <= target) - left = pos + 1; - else - right = pos; - } - - iter->internal[ITER_STREAM].p = stream; - iter->internal[ITER_GROUP].p = group; - iter->internal[ITER_RECORD].s = left; - - iter_set_info(iter); - - return false; -} diff --git a/deps/lzma/liblzma/common/index.h b/deps/lzma/liblzma/common/index.h deleted file mode 100644 index 64e97247dd33a6..00000000000000 --- a/deps/lzma/liblzma/common/index.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index.h -/// \brief Handling of Index -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_INDEX_H -#define LZMA_INDEX_H - -#include "common.h" - - -/// Minimum Unpadded Size -#define UNPADDED_SIZE_MIN LZMA_VLI_C(5) - -/// Maximum Unpadded Size -#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) - - -/// Get the size of the Index Padding field. This is needed by Index encoder -/// and decoder, but applications should have no use for this. -extern uint32_t lzma_index_padding_size(const lzma_index *i); - - -/// Set for how many Records to allocate memory the next time -/// lzma_index_append() needs to allocate space for a new Record. -/// This is used only by the Index decoder. -extern void lzma_index_prealloc(lzma_index *i, lzma_vli records); - - -/// Round the variable-length integer to the next multiple of four. -static inline lzma_vli -vli_ceil4(lzma_vli vli) -{ - assert(vli <= LZMA_VLI_MAX); - return (vli + 3) & ~LZMA_VLI_C(3); -} - - -/// Calculate the size of the Index field excluding Index Padding -static inline lzma_vli -index_size_unpadded(lzma_vli count, lzma_vli index_list_size) -{ - // Index Indicator + Number of Records + List of Records + CRC32 - return 1 + lzma_vli_size(count) + index_list_size + 4; -} - - -/// Calculate the size of the Index field including Index Padding -static inline lzma_vli -index_size(lzma_vli count, lzma_vli index_list_size) -{ - return vli_ceil4(index_size_unpadded(count, index_list_size)); -} - - -/// Calculate the total size of the Stream -static inline lzma_vli -index_stream_size(lzma_vli blocks_size, - lzma_vli count, lzma_vli index_list_size) -{ - return LZMA_STREAM_HEADER_SIZE + blocks_size - + index_size(count, index_list_size) - + LZMA_STREAM_HEADER_SIZE; -} - -#endif diff --git a/deps/lzma/liblzma/common/index_decoder.c b/deps/lzma/liblzma/common/index_decoder.c deleted file mode 100644 index 83c8a3af1db8d2..00000000000000 --- a/deps/lzma/liblzma/common/index_decoder.c +++ /dev/null @@ -1,345 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_decoder.c -/// \brief Decodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_INDICATOR, - SEQ_COUNT, - SEQ_MEMUSAGE, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_PADDING_INIT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Memory usage limit - uint64_t memlimit; - - /// Target Index - lzma_index *index; - - /// Pointer give by the application, which is set after - /// successful decoding. - lzma_index **index_ptr; - - /// Number of Records left to decode. - lzma_vli count; - - /// The most recent Unpadded Size field - lzma_vli unpadded_size; - - /// The most recent Uncompressed Size field - lzma_vli uncompressed_size; - - /// Position in integers - size_t pos; - - /// CRC32 of the List of Records field - uint32_t crc32; -}; - - -static lzma_ret -index_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, - uint8_t *restrict out lzma_attribute((__unused__)), - size_t *restrict out_pos lzma_attribute((__unused__)), - size_t out_size lzma_attribute((__unused__)), - lzma_action action lzma_attribute((__unused__))) -{ - // Similar optimization as in index_encoder.c - const size_t in_start = *in_pos; - lzma_ret ret = LZMA_OK; - - while (*in_pos < in_size) - switch (coder->sequence) { - case SEQ_INDICATOR: - // Return LZMA_DATA_ERROR instead of e.g. LZMA_PROG_ERROR or - // LZMA_FORMAT_ERROR, because a typical usage case for Index - // decoder is when parsing the Stream backwards. If seeking - // backward from the Stream Footer gives us something that - // doesn't begin with Index Indicator, the file is considered - // corrupt, not "programming error" or "unrecognized file - // format". One could argue that the application should - // verify the Index Indicator before trying to decode the - // Index, but well, I suppose it is simpler this way. - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: - ret = lzma_vli_decode(&coder->count, &coder->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - coder->pos = 0; - coder->sequence = SEQ_MEMUSAGE; - - // Fall through - - case SEQ_MEMUSAGE: - if (lzma_index_memusage(1, coder->count) > coder->memlimit) { - ret = LZMA_MEMLIMIT_ERROR; - goto out; - } - - // Tell the Index handling code how many Records this - // Index has to allow it to allocate memory more efficiently. - lzma_index_prealloc(coder->index, coder->count); - - ret = LZMA_OK; - coder->sequence = coder->count == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - break; - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - lzma_vli *size = coder->sequence == SEQ_UNPADDED - ? &coder->unpadded_size - : &coder->uncompressed_size; - - ret = lzma_vli_decode(size, &coder->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - - if (coder->sequence == SEQ_UNPADDED) { - // Validate that encoded Unpadded Size isn't too small - // or too big. - if (coder->unpadded_size < UNPADDED_SIZE_MIN - || coder->unpadded_size - > UNPADDED_SIZE_MAX) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_UNCOMPRESSED; - } else { - // Add the decoded Record to the Index. - return_if_error(lzma_index_append( - coder->index, allocator, - coder->unpadded_size, - coder->uncompressed_size)); - - // Check if this was the last Record. - coder->sequence = --coder->count == 0 - ? SEQ_PADDING_INIT - : SEQ_UNPADDED; - } - - break; - } - - case SEQ_PADDING_INIT: - coder->pos = lzma_index_padding_size(coder->index); - coder->sequence = SEQ_PADDING; - - // Fall through - - case SEQ_PADDING: - if (coder->pos > 0) { - --coder->pos; - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - break; - } - - // Finish the CRC32 calculation. - coder->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, coder->crc32); - - coder->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - do { - if (*in_pos == in_size) - return LZMA_OK; - - if (((coder->crc32 >> (coder->pos * 8)) & 0xFF) - != in[(*in_pos)++]) - return LZMA_DATA_ERROR; - - } while (++coder->pos < 4); - - // Decoding was successful, now we can let the application - // see the decoded Index. - *coder->index_ptr = coder->index; - - // Make index NULL so we don't free it unintentionally. - coder->index = NULL; - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32, - coder->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, coder->crc32); - - return ret; -} - - -static void -index_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_index_end(coder->index, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -index_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - *memusage = lzma_index_memusage(1, coder->count); - *old_memlimit = coder->memlimit; - - if (new_memlimit != 0) { - if (new_memlimit < *memusage) - return LZMA_MEMLIMIT_ERROR; - - coder->memlimit = new_memlimit; - } - - return LZMA_OK; -} - - -static lzma_ret -index_decoder_reset(lzma_coder *coder, lzma_allocator *allocator, - lzma_index **i, uint64_t memlimit) -{ - // Remember the pointer given by the application. We will set it - // to point to the decoded Index only if decoding is successful. - // Before that, keep it NULL so that applications can always safely - // pass it to lzma_index_end() no matter did decoding succeed or not. - coder->index_ptr = i; - *i = NULL; - - // We always allocate a new lzma_index. - coder->index = lzma_index_init(allocator); - if (coder->index == NULL) - return LZMA_MEM_ERROR; - - // Initialize the rest. - coder->sequence = SEQ_INDICATOR; - coder->memlimit = memlimit; - coder->count = 0; // Needs to be initialized due to _memconfig(). - coder->pos = 0; - coder->crc32 = 0; - - return LZMA_OK; -} - - -static lzma_ret -index_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - lzma_index **i, uint64_t memlimit) -{ - lzma_next_coder_init(&index_decoder_init, next, allocator); - - if (i == NULL || memlimit == 0) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &index_decode; - next->end = &index_decoder_end; - next->memconfig = &index_decoder_memconfig; - next->coder->index = NULL; - } else { - lzma_index_end(next->coder->index, allocator); - } - - return index_decoder_reset(next->coder, allocator, i, memlimit); -} - - -extern LZMA_API(lzma_ret) -lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) -{ - lzma_next_strm_init(index_decoder_init, strm, i, memlimit); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_buffer_decode( - lzma_index **i, uint64_t *memlimit, lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size) -{ - // Sanity checks - if (i == NULL || memlimit == NULL - || in == NULL || in_pos == NULL || *in_pos > in_size) - return LZMA_PROG_ERROR; - - // Initialize the decoder. - lzma_coder coder; - return_if_error(index_decoder_reset(&coder, allocator, i, *memlimit)); - - // Store the input start position so that we can restore it in case - // of an error. - const size_t in_start = *in_pos; - - // Do the actual decoding. - lzma_ret ret = index_decode(&coder, allocator, in, in_pos, in_size, - NULL, NULL, 0, LZMA_RUN); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // Something went wrong, free the Index structure and restore - // the input position. - lzma_index_end(coder.index, allocator); - *in_pos = in_start; - - if (ret == LZMA_OK) { - // The input is truncated or otherwise corrupt. - // Use LZMA_DATA_ERROR instead of LZMA_BUF_ERROR - // like lzma_vli_decode() does in single-call mode. - ret = LZMA_DATA_ERROR; - - } else if (ret == LZMA_MEMLIMIT_ERROR) { - // Tell the caller how much memory would have - // been needed. - *memlimit = lzma_index_memusage(1, coder.count); - } - } - - return ret; -} diff --git a/deps/lzma/liblzma/common/index_encoder.c b/deps/lzma/liblzma/common/index_encoder.c deleted file mode 100644 index 45919f094c4242..00000000000000 --- a/deps/lzma/liblzma/common/index_encoder.c +++ /dev/null @@ -1,254 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_encoder.c -/// \brief Encodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index_encoder.h" -#include "index.h" -#include "check.h" - - -struct lzma_coder_s { - enum { - SEQ_INDICATOR, - SEQ_COUNT, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_NEXT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Index being encoded - const lzma_index *index; - - /// Iterator for the Index being encoded - lzma_index_iter iter; - - /// Position in integers - size_t pos; - - /// CRC32 of the List of Records field - uint32_t crc32; -}; - - -static lzma_ret -index_encode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((__unused__)), - const uint8_t *restrict in lzma_attribute((__unused__)), - size_t *restrict in_pos lzma_attribute((__unused__)), - size_t in_size lzma_attribute((__unused__)), - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, - lzma_action action lzma_attribute((__unused__))) -{ - // Position where to start calculating CRC32. The idea is that we - // need to call lzma_crc32() only once per call to index_encode(). - const size_t out_start = *out_pos; - - // Return value to use if we return at the end of this function. - // We use "goto out" to jump out of the while-switch construct - // instead of returning directly, because that way we don't need - // to copypaste the lzma_crc32() call to many places. - lzma_ret ret = LZMA_OK; - - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_INDICATOR: - out[*out_pos] = 0x00; - ++*out_pos; - coder->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: { - const lzma_vli count = lzma_index_block_count(coder->index); - ret = lzma_vli_encode(count, &coder->pos, - out, out_pos, out_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - coder->sequence = SEQ_NEXT; - break; - } - - case SEQ_NEXT: - if (lzma_index_iter_next( - &coder->iter, LZMA_INDEX_ITER_BLOCK)) { - // Get the size of the Index Padding field. - coder->pos = lzma_index_padding_size(coder->index); - assert(coder->pos <= 3); - coder->sequence = SEQ_PADDING; - break; - } - - coder->sequence = SEQ_UNPADDED; - - // Fall through - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - const lzma_vli size = coder->sequence == SEQ_UNPADDED - ? coder->iter.block.unpadded_size - : coder->iter.block.uncompressed_size; - - ret = lzma_vli_encode(size, &coder->pos, - out, out_pos, out_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - coder->pos = 0; - - // Advance to SEQ_UNCOMPRESSED or SEQ_NEXT. - ++coder->sequence; - break; - } - - case SEQ_PADDING: - if (coder->pos > 0) { - --coder->pos; - out[(*out_pos)++] = 0x00; - break; - } - - // Finish the CRC32 calculation. - coder->crc32 = lzma_crc32(out + out_start, - *out_pos - out_start, coder->crc32); - - coder->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - // We don't use the main loop, because we don't want - // coder->crc32 to be touched anymore. - do { - if (*out_pos == out_size) - return LZMA_OK; - - out[*out_pos] = (coder->crc32 >> (coder->pos * 8)) - & 0xFF; - ++*out_pos; - - } while (++coder->pos < 4); - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32. - coder->crc32 = lzma_crc32(out + out_start, - *out_pos - out_start, coder->crc32); - - return ret; -} - - -static void -index_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_free(coder, allocator); - return; -} - - -static void -index_encoder_reset(lzma_coder *coder, const lzma_index *i) -{ - lzma_index_iter_init(&coder->iter, i); - - coder->sequence = SEQ_INDICATOR; - coder->index = i; - coder->pos = 0; - coder->crc32 = 0; - - return; -} - - -extern lzma_ret -lzma_index_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_index *i) -{ - lzma_next_coder_init(&lzma_index_encoder_init, next, allocator); - - if (i == NULL) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &index_encode; - next->end = &index_encoder_end; - } - - index_encoder_reset(next->coder, i); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_encoder(lzma_stream *strm, const lzma_index *i) -{ - lzma_next_strm_init(lzma_index_encoder_init, strm, i); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_buffer_encode(const lzma_index *i, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Validate the arguments. - if (i == NULL || out == NULL || out_pos == NULL || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Don't try to encode if there's not enough output space. - if (out_size - *out_pos < lzma_index_size(i)) - return LZMA_BUF_ERROR; - - // The Index encoder needs just one small data structure so we can - // allocate it on stack. - lzma_coder coder; - index_encoder_reset(&coder, i); - - // Do the actual encoding. This should never fail, but store - // the original *out_pos just in case. - const size_t out_start = *out_pos; - lzma_ret ret = index_encode(&coder, NULL, NULL, NULL, 0, - out, out_pos, out_size, LZMA_RUN); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // We should never get here, but just in case, restore the - // output position and set the error accordingly if something - // goes wrong and debugging isn't enabled. - assert(0); - *out_pos = out_start; - ret = LZMA_PROG_ERROR; - } - - return ret; -} diff --git a/deps/lzma/liblzma/common/index_encoder.h b/deps/lzma/liblzma/common/index_encoder.h deleted file mode 100644 index a13c94dcd07711..00000000000000 --- a/deps/lzma/liblzma/common/index_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_encoder.h -/// \brief Encodes the Index field -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_INDEX_ENCODER_H -#define LZMA_INDEX_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_index_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_index *i); - - -#endif diff --git a/deps/lzma/liblzma/common/index_hash.c b/deps/lzma/liblzma/common/index_hash.c deleted file mode 100644 index e3e9386ae8e3ba..00000000000000 --- a/deps/lzma/liblzma/common/index_hash.c +++ /dev/null @@ -1,332 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file index_hash.c -/// \brief Validates Index by using a hash function -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" -#include "index.h" -#include "check.h" - - -typedef struct { - /// Sum of the Block sizes (including Block Padding) - lzma_vli blocks_size; - - /// Sum of the Uncompressed Size fields - lzma_vli uncompressed_size; - - /// Number of Records - lzma_vli count; - - /// Size of the List of Index Records as bytes - lzma_vli index_list_size; - - /// Check calculated from Unpadded Sizes and Uncompressed Sizes. - lzma_check_state check; - -} lzma_index_hash_info; - - -struct lzma_index_hash_s { - enum { - SEQ_BLOCK, - SEQ_COUNT, - SEQ_UNPADDED, - SEQ_UNCOMPRESSED, - SEQ_PADDING_INIT, - SEQ_PADDING, - SEQ_CRC32, - } sequence; - - /// Information collected while decoding the actual Blocks. - lzma_index_hash_info blocks; - - /// Information collected from the Index field. - lzma_index_hash_info records; - - /// Number of Records not fully decoded - lzma_vli remaining; - - /// Unpadded Size currently being read from an Index Record. - lzma_vli unpadded_size; - - /// Uncompressed Size currently being read from an Index Record. - lzma_vli uncompressed_size; - - /// Position in variable-length integers when decoding them from - /// the List of Records. - size_t pos; - - /// CRC32 of the Index - uint32_t crc32; -}; - - -extern LZMA_API(lzma_index_hash *) -lzma_index_hash_init(lzma_index_hash *index_hash, lzma_allocator *allocator) -{ - if (index_hash == NULL) { - index_hash = lzma_alloc(sizeof(lzma_index_hash), allocator); - if (index_hash == NULL) - return NULL; - } - - index_hash->sequence = SEQ_BLOCK; - index_hash->blocks.blocks_size = 0; - index_hash->blocks.uncompressed_size = 0; - index_hash->blocks.count = 0; - index_hash->blocks.index_list_size = 0; - index_hash->records.blocks_size = 0; - index_hash->records.uncompressed_size = 0; - index_hash->records.count = 0; - index_hash->records.index_list_size = 0; - index_hash->unpadded_size = 0; - index_hash->uncompressed_size = 0; - index_hash->pos = 0; - index_hash->crc32 = 0; - - // These cannot fail because LZMA_CHECK_BEST is known to be supported. - (void)lzma_check_init(&index_hash->blocks.check, LZMA_CHECK_BEST); - (void)lzma_check_init(&index_hash->records.check, LZMA_CHECK_BEST); - - return index_hash; -} - - -extern LZMA_API(void) -lzma_index_hash_end(lzma_index_hash *index_hash, lzma_allocator *allocator) -{ - lzma_free(index_hash, allocator); - return; -} - - -extern LZMA_API(lzma_vli) -lzma_index_hash_size(const lzma_index_hash *index_hash) -{ - // Get the size of the Index from ->blocks instead of ->records for - // cases where application wants to know the Index Size before - // decoding the Index. - return index_size(index_hash->blocks.count, - index_hash->blocks.index_list_size); -} - - -/// Updates the sizes and the hash without any validation. -static lzma_ret -hash_append(lzma_index_hash_info *info, lzma_vli unpadded_size, - lzma_vli uncompressed_size) -{ - info->blocks_size += vli_ceil4(unpadded_size); - info->uncompressed_size += uncompressed_size; - info->index_list_size += lzma_vli_size(unpadded_size) - + lzma_vli_size(uncompressed_size); - ++info->count; - - const lzma_vli sizes[2] = { unpadded_size, uncompressed_size }; - lzma_check_update(&info->check, LZMA_CHECK_BEST, - (const uint8_t *)(sizes), sizeof(sizes)); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_hash_append(lzma_index_hash *index_hash, lzma_vli unpadded_size, - lzma_vli uncompressed_size) -{ - // Validate the arguments. - if (index_hash->sequence != SEQ_BLOCK - || unpadded_size < UNPADDED_SIZE_MIN - || unpadded_size > UNPADDED_SIZE_MAX - || uncompressed_size > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // Update the hash. - return_if_error(hash_append(&index_hash->blocks, - unpadded_size, uncompressed_size)); - - // Validate the properties of *info are still in allowed limits. - if (index_hash->blocks.blocks_size > LZMA_VLI_MAX - || index_hash->blocks.uncompressed_size > LZMA_VLI_MAX - || index_size(index_hash->blocks.count, - index_hash->blocks.index_list_size) - > LZMA_BACKWARD_SIZE_MAX - || index_stream_size(index_hash->blocks.blocks_size, - index_hash->blocks.count, - index_hash->blocks.index_list_size) - > LZMA_VLI_MAX) - return LZMA_DATA_ERROR; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in, - size_t *in_pos, size_t in_size) -{ - // Catch zero input buffer here, because in contrast to Index encoder - // and decoder functions, applications call this function directly - // instead of via lzma_code(), which does the buffer checking. - if (*in_pos >= in_size) - return LZMA_BUF_ERROR; - - // NOTE: This function has many similarities to index_encode() and - // index_decode() functions found from index_encoder.c and - // index_decoder.c. See the comments especially in index_encoder.c. - const size_t in_start = *in_pos; - lzma_ret ret = LZMA_OK; - - while (*in_pos < in_size) - switch (index_hash->sequence) { - case SEQ_BLOCK: - // Check the Index Indicator is present. - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - index_hash->sequence = SEQ_COUNT; - break; - - case SEQ_COUNT: { - ret = lzma_vli_decode(&index_hash->remaining, - &index_hash->pos, in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - // The count must match the count of the Blocks decoded. - if (index_hash->remaining != index_hash->blocks.count) - return LZMA_DATA_ERROR; - - ret = LZMA_OK; - index_hash->pos = 0; - - // Handle the special case when there are no Blocks. - index_hash->sequence = index_hash->remaining == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - break; - } - - case SEQ_UNPADDED: - case SEQ_UNCOMPRESSED: { - lzma_vli *size = index_hash->sequence == SEQ_UNPADDED - ? &index_hash->unpadded_size - : &index_hash->uncompressed_size; - - ret = lzma_vli_decode(size, &index_hash->pos, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - goto out; - - ret = LZMA_OK; - index_hash->pos = 0; - - if (index_hash->sequence == SEQ_UNPADDED) { - if (index_hash->unpadded_size < UNPADDED_SIZE_MIN - || index_hash->unpadded_size - > UNPADDED_SIZE_MAX) - return LZMA_DATA_ERROR; - - index_hash->sequence = SEQ_UNCOMPRESSED; - } else { - // Update the hash. - return_if_error(hash_append(&index_hash->records, - index_hash->unpadded_size, - index_hash->uncompressed_size)); - - // Verify that we don't go over the known sizes. Note - // that this validation is simpler than the one used - // in lzma_index_hash_append(), because here we know - // that values in index_hash->blocks are already - // validated and we are fine as long as we don't - // exceed them in index_hash->records. - if (index_hash->blocks.blocks_size - < index_hash->records.blocks_size - || index_hash->blocks.uncompressed_size - < index_hash->records.uncompressed_size - || index_hash->blocks.index_list_size - < index_hash->records.index_list_size) - return LZMA_DATA_ERROR; - - // Check if this was the last Record. - index_hash->sequence = --index_hash->remaining == 0 - ? SEQ_PADDING_INIT : SEQ_UNPADDED; - } - - break; - } - - case SEQ_PADDING_INIT: - index_hash->pos = (LZMA_VLI_C(4) - index_size_unpadded( - index_hash->records.count, - index_hash->records.index_list_size)) & 3; - index_hash->sequence = SEQ_PADDING; - - // Fall through - - case SEQ_PADDING: - if (index_hash->pos > 0) { - --index_hash->pos; - if (in[(*in_pos)++] != 0x00) - return LZMA_DATA_ERROR; - - break; - } - - // Compare the sizes. - if (index_hash->blocks.blocks_size - != index_hash->records.blocks_size - || index_hash->blocks.uncompressed_size - != index_hash->records.uncompressed_size - || index_hash->blocks.index_list_size - != index_hash->records.index_list_size) - return LZMA_DATA_ERROR; - - // Finish the hashes and compare them. - lzma_check_finish(&index_hash->blocks.check, LZMA_CHECK_BEST); - lzma_check_finish(&index_hash->records.check, LZMA_CHECK_BEST); - if (memcmp(index_hash->blocks.check.buffer.u8, - index_hash->records.check.buffer.u8, - lzma_check_size(LZMA_CHECK_BEST)) != 0) - return LZMA_DATA_ERROR; - - // Finish the CRC32 calculation. - index_hash->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, index_hash->crc32); - - index_hash->sequence = SEQ_CRC32; - - // Fall through - - case SEQ_CRC32: - do { - if (*in_pos == in_size) - return LZMA_OK; - - if (((index_hash->crc32 >> (index_hash->pos * 8)) - & 0xFF) != in[(*in_pos)++]) - return LZMA_DATA_ERROR; - - } while (++index_hash->pos < 4); - - return LZMA_STREAM_END; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - -out: - // Update the CRC32, - index_hash->crc32 = lzma_crc32(in + in_start, - *in_pos - in_start, index_hash->crc32); - - return ret; -} diff --git a/deps/lzma/liblzma/common/stream_buffer_decoder.c b/deps/lzma/liblzma/common/stream_buffer_decoder.c deleted file mode 100644 index ae753155180dbe..00000000000000 --- a/deps/lzma/liblzma/common/stream_buffer_decoder.c +++ /dev/null @@ -1,91 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_buffer_decoder.c -/// \brief Single-call .xz Stream decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" - - -extern LZMA_API(lzma_ret) -lzma_stream_buffer_decode(uint64_t *memlimit, uint32_t flags, - lzma_allocator *allocator, - const uint8_t *in, size_t *in_pos, size_t in_size, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - // Sanity checks - if (in_pos == NULL || (in == NULL && *in_pos != in_size) - || *in_pos > in_size || out_pos == NULL - || (out == NULL && *out_pos != out_size) - || *out_pos > out_size) - return LZMA_PROG_ERROR; - - // Catch flags that are not allowed in buffer-to-buffer decoding. - if (flags & LZMA_TELL_ANY_CHECK) - return LZMA_PROG_ERROR; - - // Initialize the Stream decoder. - // TODO: We need something to tell the decoder that it can use the - // output buffer as workspace, and thus save significant amount of RAM. - lzma_next_coder stream_decoder = LZMA_NEXT_CODER_INIT; - lzma_ret ret = lzma_stream_decoder_init( - &stream_decoder, allocator, *memlimit, flags); - - if (ret == LZMA_OK) { - // Save the positions so that we can restore them in case - // an error occurs. - const size_t in_start = *in_pos; - const size_t out_start = *out_pos; - - // Do the actual decoding. - ret = stream_decoder.code(stream_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - LZMA_FINISH); - - if (ret == LZMA_STREAM_END) { - ret = LZMA_OK; - } else { - // Something went wrong, restore the positions. - *in_pos = in_start; - *out_pos = out_start; - - if (ret == LZMA_OK) { - // Either the input was truncated or the - // output buffer was too small. - assert(*in_pos == in_size - || *out_pos == out_size); - - // If all the input was consumed, then the - // input is truncated, even if the output - // buffer is also full. This is because - // processing the last byte of the Stream - // never produces output. - if (*in_pos == in_size) - ret = LZMA_DATA_ERROR; - else - ret = LZMA_BUF_ERROR; - - } else if (ret == LZMA_MEMLIMIT_ERROR) { - // Let the caller know how much memory would - // have been needed. - uint64_t memusage; - (void)stream_decoder.memconfig( - stream_decoder.coder, - memlimit, &memusage, 0); - } - } - } - - // Free the decoder memory. This needs to be done even if - // initialization fails, because the internal API doesn't - // require the initialization function to free its memory on error. - lzma_next_end(&stream_decoder, allocator); - - return ret; -} diff --git a/deps/lzma/liblzma/common/stream_buffer_encoder.c b/deps/lzma/liblzma/common/stream_buffer_encoder.c deleted file mode 100644 index 2450ee2e1fa0a9..00000000000000 --- a/deps/lzma/liblzma/common/stream_buffer_encoder.c +++ /dev/null @@ -1,140 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_buffer_encoder.c -/// \brief Single-call .xz Stream encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "index.h" - - -/// Maximum size of Index that has exactly one Record. -/// Index Indicator + Number of Records + Record + CRC32 rounded up to -/// the next multiple of four. -#define INDEX_BOUND ((1 + 1 + 2 * LZMA_VLI_BYTES_MAX + 4 + 3) & ~3) - -/// Stream Header, Stream Footer, and Index -#define HEADERS_BOUND (2 * LZMA_STREAM_HEADER_SIZE + INDEX_BOUND) - - -extern LZMA_API(size_t) -lzma_stream_buffer_bound(size_t uncompressed_size) -{ - // Get the maximum possible size of a Block. - const size_t block_bound = lzma_block_buffer_bound(uncompressed_size); - if (block_bound == 0) - return 0; - - // Catch the possible integer overflow and also prevent the size of - // the Stream exceeding LZMA_VLI_MAX (theoretically possible on - // 64-bit systems). - if (my_min(SIZE_MAX, LZMA_VLI_MAX) - block_bound < HEADERS_BOUND) - return 0; - - return block_bound + HEADERS_BOUND; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_buffer_encode(lzma_filter *filters, lzma_check check, - lzma_allocator *allocator, const uint8_t *in, size_t in_size, - uint8_t *out, size_t *out_pos_ptr, size_t out_size) -{ - // Sanity checks - if (filters == NULL || (unsigned int)(check) > LZMA_CHECK_ID_MAX - || (in == NULL && in_size != 0) || out == NULL - || out_pos_ptr == NULL || *out_pos_ptr > out_size) - return LZMA_PROG_ERROR; - - if (!lzma_check_is_supported(check)) - return LZMA_UNSUPPORTED_CHECK; - - // Note for the paranoids: Index encoder prevents the Stream from - // getting too big and still being accepted with LZMA_OK, and Block - // encoder catches if the input is too big. So we don't need to - // separately check if the buffers are too big. - - // Use a local copy. We update *out_pos_ptr only if everything - // succeeds. - size_t out_pos = *out_pos_ptr; - - // Check that there's enough space for both Stream Header and - // Stream Footer. - if (out_size - out_pos <= 2 * LZMA_STREAM_HEADER_SIZE) - return LZMA_BUF_ERROR; - - // Reserve space for Stream Footer so we don't need to check for - // available space again before encoding Stream Footer. - out_size -= LZMA_STREAM_HEADER_SIZE; - - // Encode the Stream Header. - lzma_stream_flags stream_flags = { - .version = 0, - .check = check, - }; - - if (lzma_stream_header_encode(&stream_flags, out + out_pos) - != LZMA_OK) - return LZMA_PROG_ERROR; - - out_pos += LZMA_STREAM_HEADER_SIZE; - - // Encode a Block but only if there is at least one byte of input. - lzma_block block = { - .version = 0, - .check = check, - .filters = filters, - }; - - if (in_size > 0) - return_if_error(lzma_block_buffer_encode(&block, allocator, - in, in_size, out, &out_pos, out_size)); - - // Index - { - // Create an Index. It will have one Record if there was - // at least one byte of input to encode. Otherwise the - // Index will be empty. - lzma_index *i = lzma_index_init(allocator); - if (i == NULL) - return LZMA_MEM_ERROR; - - lzma_ret ret = LZMA_OK; - - if (in_size > 0) - ret = lzma_index_append(i, allocator, - lzma_block_unpadded_size(&block), - block.uncompressed_size); - - // If adding the Record was successful, encode the Index - // and get its size which will be stored into Stream Footer. - if (ret == LZMA_OK) { - ret = lzma_index_buffer_encode( - i, out, &out_pos, out_size); - - stream_flags.backward_size = lzma_index_size(i); - } - - lzma_index_end(i, allocator); - - if (ret != LZMA_OK) - return ret; - } - - // Stream Footer. We have already reserved space for this. - if (lzma_stream_footer_encode(&stream_flags, out + out_pos) - != LZMA_OK) - return LZMA_PROG_ERROR; - - out_pos += LZMA_STREAM_HEADER_SIZE; - - // Everything went fine, make the new output position available - // to the application. - *out_pos_ptr = out_pos; - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/stream_decoder.c b/deps/lzma/liblzma/common/stream_decoder.c deleted file mode 100644 index 37ea71edbd714d..00000000000000 --- a/deps/lzma/liblzma/common/stream_decoder.c +++ /dev/null @@ -1,451 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_decoder.c -/// \brief Decodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_decoder.h" -#include "block_decoder.h" - - -struct lzma_coder_s { - enum { - SEQ_STREAM_HEADER, - SEQ_BLOCK_HEADER, - SEQ_BLOCK, - SEQ_INDEX, - SEQ_STREAM_FOOTER, - SEQ_STREAM_PADDING, - } sequence; - - /// Block or Metadata decoder. This takes little memory and the same - /// data structure can be used to decode every Block Header, so it's - /// a good idea to have a separate lzma_next_coder structure for it. - lzma_next_coder block_decoder; - - /// Block options decoded by the Block Header decoder and used by - /// the Block decoder. - lzma_block block_options; - - /// Stream Flags from Stream Header - lzma_stream_flags stream_flags; - - /// Index is hashed so that it can be compared to the sizes of Blocks - /// with O(1) memory usage. - lzma_index_hash *index_hash; - - /// Memory usage limit - uint64_t memlimit; - - /// Amount of memory actually needed (only an estimate) - uint64_t memusage; - - /// If true, LZMA_NO_CHECK is returned if the Stream has - /// no integrity check. - bool tell_no_check; - - /// If true, LZMA_UNSUPPORTED_CHECK is returned if the Stream has - /// an integrity check that isn't supported by this liblzma build. - bool tell_unsupported_check; - - /// If true, LZMA_GET_CHECK is returned after decoding Stream Header. - bool tell_any_check; - - /// If true, we will decode concatenated Streams that possibly have - /// Stream Padding between or after them. LZMA_STREAM_END is returned - /// once the application isn't giving us any new input, and we aren't - /// in the middle of a Stream, and possible Stream Padding is a - /// multiple of four bytes. - bool concatenated; - - /// When decoding concatenated Streams, this is true as long as we - /// are decoding the first Stream. This is needed to avoid misleading - /// LZMA_FORMAT_ERROR in case the later Streams don't have valid magic - /// bytes. - bool first_stream; - - /// Write position in buffer[] and position in Stream Padding - size_t pos; - - /// Buffer to hold Stream Header, Block Header, and Stream Footer. - /// Block Header has biggest maximum size. - uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; -}; - - -static lzma_ret -stream_decoder_reset(lzma_coder *coder, lzma_allocator *allocator) -{ - // Initialize the Index hash used to verify the Index. - coder->index_hash = lzma_index_hash_init(coder->index_hash, allocator); - if (coder->index_hash == NULL) - return LZMA_MEM_ERROR; - - // Reset the rest of the variables. - coder->sequence = SEQ_STREAM_HEADER; - coder->pos = 0; - - return LZMA_OK; -} - - -static lzma_ret -stream_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // When decoding the actual Block, it may be able to produce more - // output even if we don't give it any new input. - while (true) - switch (coder->sequence) { - case SEQ_STREAM_HEADER: { - // Copy the Stream Header to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - LZMA_STREAM_HEADER_SIZE); - - // Return if we didn't get the whole Stream Header yet. - if (coder->pos < LZMA_STREAM_HEADER_SIZE) - return LZMA_OK; - - coder->pos = 0; - - // Decode the Stream Header. - const lzma_ret ret = lzma_stream_header_decode( - &coder->stream_flags, coder->buffer); - if (ret != LZMA_OK) - return ret == LZMA_FORMAT_ERROR && !coder->first_stream - ? LZMA_DATA_ERROR : ret; - - // If we are decoding concatenated Streams, and the later - // Streams have invalid Header Magic Bytes, we give - // LZMA_DATA_ERROR instead of LZMA_FORMAT_ERROR. - coder->first_stream = false; - - // Copy the type of the Check so that Block Header and Block - // decoders see it. - coder->block_options.check = coder->stream_flags.check; - - // Even if we return LZMA_*_CHECK below, we want - // to continue from Block Header decoding. - coder->sequence = SEQ_BLOCK_HEADER; - - // Detect if there's no integrity check or if it is - // unsupported if those were requested by the application. - if (coder->tell_no_check && coder->stream_flags.check - == LZMA_CHECK_NONE) - return LZMA_NO_CHECK; - - if (coder->tell_unsupported_check - && !lzma_check_is_supported( - coder->stream_flags.check)) - return LZMA_UNSUPPORTED_CHECK; - - if (coder->tell_any_check) - return LZMA_GET_CHECK; - } - - // Fall through - - case SEQ_BLOCK_HEADER: { - if (*in_pos >= in_size) - return LZMA_OK; - - if (coder->pos == 0) { - // Detect if it's Index. - if (in[*in_pos] == 0x00) { - coder->sequence = SEQ_INDEX; - break; - } - - // Calculate the size of the Block Header. Note that - // Block Header decoder wants to see this byte too - // so don't advance *in_pos. - coder->block_options.header_size - = lzma_block_header_size_decode( - in[*in_pos]); - } - - // Copy the Block Header to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - coder->block_options.header_size); - - // Return if we didn't get the whole Block Header yet. - if (coder->pos < coder->block_options.header_size) - return LZMA_OK; - - coder->pos = 0; - - // Version 0 is currently the only possible version. - coder->block_options.version = 0; - - // Set up a buffer to hold the filter chain. Block Header - // decoder will initialize all members of this array so - // we don't need to do it here. - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - coder->block_options.filters = filters; - - // Decode the Block Header. - return_if_error(lzma_block_header_decode(&coder->block_options, - allocator, coder->buffer)); - - // Check the memory usage limit. - const uint64_t memusage = lzma_raw_decoder_memusage(filters); - lzma_ret ret; - - if (memusage == UINT64_MAX) { - // One or more unknown Filter IDs. - ret = LZMA_OPTIONS_ERROR; - } else { - // Now we can set coder->memusage since we know that - // the filter chain is valid. We don't want - // lzma_memusage() to return UINT64_MAX in case of - // invalid filter chain. - coder->memusage = memusage; - - if (memusage > coder->memlimit) { - // The chain would need too much memory. - ret = LZMA_MEMLIMIT_ERROR; - } else { - // Memory usage is OK. - // Initialize the Block decoder. - ret = lzma_block_decoder_init( - &coder->block_decoder, - allocator, - &coder->block_options); - } - } - - // Free the allocated filter options since they are needed - // only to initialize the Block decoder. - for (size_t i = 0; i < LZMA_FILTERS_MAX; ++i) - lzma_free(filters[i].options, allocator); - - coder->block_options.filters = NULL; - - // Check if memory usage calculation and Block enocoder - // initialization succeeded. - if (ret != LZMA_OK) - return ret; - - coder->sequence = SEQ_BLOCK; - } - - // Fall through - - case SEQ_BLOCK: { - const lzma_ret ret = coder->block_decoder.code( - coder->block_decoder.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - if (ret != LZMA_STREAM_END) - return ret; - - // Block decoded successfully. Add the new size pair to - // the Index hash. - return_if_error(lzma_index_hash_append(coder->index_hash, - lzma_block_unpadded_size( - &coder->block_options), - coder->block_options.uncompressed_size)); - - coder->sequence = SEQ_BLOCK_HEADER; - break; - } - - case SEQ_INDEX: { - // If we don't have any input, don't call - // lzma_index_hash_decode() since it would return - // LZMA_BUF_ERROR, which we must not do here. - if (*in_pos >= in_size) - return LZMA_OK; - - // Decode the Index and compare it to the hash calculated - // from the sizes of the Blocks (if any). - const lzma_ret ret = lzma_index_hash_decode(coder->index_hash, - in, in_pos, in_size); - if (ret != LZMA_STREAM_END) - return ret; - - coder->sequence = SEQ_STREAM_FOOTER; - } - - // Fall through - - case SEQ_STREAM_FOOTER: { - // Copy the Stream Footer to the internal buffer. - lzma_bufcpy(in, in_pos, in_size, coder->buffer, &coder->pos, - LZMA_STREAM_HEADER_SIZE); - - // Return if we didn't get the whole Stream Footer yet. - if (coder->pos < LZMA_STREAM_HEADER_SIZE) - return LZMA_OK; - - coder->pos = 0; - - // Decode the Stream Footer. The decoder gives - // LZMA_FORMAT_ERROR if the magic bytes don't match, - // so convert that return code to LZMA_DATA_ERROR. - lzma_stream_flags footer_flags; - const lzma_ret ret = lzma_stream_footer_decode( - &footer_flags, coder->buffer); - if (ret != LZMA_OK) - return ret == LZMA_FORMAT_ERROR - ? LZMA_DATA_ERROR : ret; - - // Check that Index Size stored in the Stream Footer matches - // the real size of the Index field. - if (lzma_index_hash_size(coder->index_hash) - != footer_flags.backward_size) - return LZMA_DATA_ERROR; - - // Compare that the Stream Flags fields are identical in - // both Stream Header and Stream Footer. - return_if_error(lzma_stream_flags_compare( - &coder->stream_flags, &footer_flags)); - - if (!coder->concatenated) - return LZMA_STREAM_END; - - coder->sequence = SEQ_STREAM_PADDING; - } - - // Fall through - - case SEQ_STREAM_PADDING: - assert(coder->concatenated); - - // Skip over possible Stream Padding. - while (true) { - if (*in_pos >= in_size) { - // Unless LZMA_FINISH was used, we cannot - // know if there's more input coming later. - if (action != LZMA_FINISH) - return LZMA_OK; - - // Stream Padding must be a multiple of - // four bytes. - return coder->pos == 0 - ? LZMA_STREAM_END - : LZMA_DATA_ERROR; - } - - // If the byte is not zero, it probably indicates - // beginning of a new Stream (or the file is corrupt). - if (in[*in_pos] != 0x00) - break; - - ++*in_pos; - coder->pos = (coder->pos + 1) & 3; - } - - // Stream Padding must be a multiple of four bytes (empty - // Stream Padding is OK). - if (coder->pos != 0) { - ++*in_pos; - return LZMA_DATA_ERROR; - } - - // Prepare to decode the next Stream. - return_if_error(stream_decoder_reset(coder, allocator)); - break; - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - // Never reached -} - - -static void -stream_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->block_decoder, allocator); - lzma_index_hash_end(coder->index_hash, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_check -stream_decoder_get_check(const lzma_coder *coder) -{ - return coder->stream_flags.check; -} - - -static lzma_ret -stream_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, - uint64_t *old_memlimit, uint64_t new_memlimit) -{ - *memusage = coder->memusage; - *old_memlimit = coder->memlimit; - - if (new_memlimit != 0) { - if (new_memlimit < coder->memusage) - return LZMA_MEMLIMIT_ERROR; - - coder->memlimit = new_memlimit; - } - - return LZMA_OK; -} - - -extern lzma_ret -lzma_stream_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - uint64_t memlimit, uint32_t flags) -{ - lzma_next_coder_init(&lzma_stream_decoder_init, next, allocator); - - if (memlimit == 0) - return LZMA_PROG_ERROR; - - if (flags & ~LZMA_SUPPORTED_FLAGS) - return LZMA_OPTIONS_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &stream_decode; - next->end = &stream_decoder_end; - next->get_check = &stream_decoder_get_check; - next->memconfig = &stream_decoder_memconfig; - - next->coder->block_decoder = LZMA_NEXT_CODER_INIT; - next->coder->index_hash = NULL; - } - - next->coder->memlimit = memlimit; - next->coder->memusage = LZMA_MEMUSAGE_BASE; - next->coder->tell_no_check = (flags & LZMA_TELL_NO_CHECK) != 0; - next->coder->tell_unsupported_check - = (flags & LZMA_TELL_UNSUPPORTED_CHECK) != 0; - next->coder->tell_any_check = (flags & LZMA_TELL_ANY_CHECK) != 0; - next->coder->concatenated = (flags & LZMA_CONCATENATED) != 0; - next->coder->first_stream = true; - - return stream_decoder_reset(next->coder, allocator); -} - - -extern LZMA_API(lzma_ret) -lzma_stream_decoder(lzma_stream *strm, uint64_t memlimit, uint32_t flags) -{ - lzma_next_strm_init(lzma_stream_decoder_init, strm, memlimit, flags); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/stream_decoder.h b/deps/lzma/liblzma/common/stream_decoder.h deleted file mode 100644 index e54ac28f44a58c..00000000000000 --- a/deps/lzma/liblzma/common/stream_decoder.h +++ /dev/null @@ -1,21 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_decoder.h -/// \brief Decodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_DECODER_H -#define LZMA_STREAM_DECODER_H - -#include "common.h" - -extern lzma_ret lzma_stream_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, uint64_t memlimit, uint32_t flags); - -#endif diff --git a/deps/lzma/liblzma/common/stream_encoder.c b/deps/lzma/liblzma/common/stream_encoder.c deleted file mode 100644 index 97a7a23a8135c3..00000000000000 --- a/deps/lzma/liblzma/common/stream_encoder.c +++ /dev/null @@ -1,331 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_encoder.c -/// \brief Encodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_encoder.h" -#include "block_encoder.h" -#include "index_encoder.h" - - -struct lzma_coder_s { - enum { - SEQ_STREAM_HEADER, - SEQ_BLOCK_INIT, - SEQ_BLOCK_HEADER, - SEQ_BLOCK_ENCODE, - SEQ_INDEX_ENCODE, - SEQ_STREAM_FOOTER, - } sequence; - - /// True if Block encoder has been initialized by - /// lzma_stream_encoder_init() or stream_encoder_update() - /// and thus doesn't need to be initialized in stream_encode(). - bool block_encoder_is_initialized; - - /// Block - lzma_next_coder block_encoder; - - /// Options for the Block encoder - lzma_block block_options; - - /// The filter chain currently in use - lzma_filter filters[LZMA_FILTERS_MAX + 1]; - - /// Index encoder. This is separate from Block encoder, because this - /// doesn't take much memory, and when encoding multiple Streams - /// with the same encoding options we avoid reallocating memory. - lzma_next_coder index_encoder; - - /// Index to hold sizes of the Blocks - lzma_index *index; - - /// Read position in buffer[] - size_t buffer_pos; - - /// Total number of bytes in buffer[] - size_t buffer_size; - - /// Buffer to hold Stream Header, Block Header, and Stream Footer. - /// Block Header has biggest maximum size. - uint8_t buffer[LZMA_BLOCK_HEADER_SIZE_MAX]; -}; - - -static lzma_ret -block_encoder_init(lzma_coder *coder, lzma_allocator *allocator) -{ - // Prepare the Block options. Even though Block encoder doesn't need - // compressed_size, uncompressed_size, and header_size to be - // initialized, it is a good idea to do it here, because this way - // we catch if someone gave us Filter ID that cannot be used in - // Blocks/Streams. - coder->block_options.compressed_size = LZMA_VLI_UNKNOWN; - coder->block_options.uncompressed_size = LZMA_VLI_UNKNOWN; - - return_if_error(lzma_block_header_size(&coder->block_options)); - - // Initialize the actual Block encoder. - return lzma_block_encoder_init(&coder->block_encoder, allocator, - &coder->block_options); -} - - -static lzma_ret -stream_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // Main loop - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_STREAM_HEADER: - case SEQ_BLOCK_HEADER: - case SEQ_STREAM_FOOTER: - lzma_bufcpy(coder->buffer, &coder->buffer_pos, - coder->buffer_size, out, out_pos, out_size); - if (coder->buffer_pos < coder->buffer_size) - return LZMA_OK; - - if (coder->sequence == SEQ_STREAM_FOOTER) - return LZMA_STREAM_END; - - coder->buffer_pos = 0; - ++coder->sequence; - break; - - case SEQ_BLOCK_INIT: { - if (*in_pos == in_size) { - // If we are requested to flush or finish the current - // Block, return LZMA_STREAM_END immediately since - // there's nothing to do. - if (action != LZMA_FINISH) - return action == LZMA_RUN - ? LZMA_OK : LZMA_STREAM_END; - - // The application had used LZMA_FULL_FLUSH to finish - // the previous Block, but now wants to finish without - // encoding new data, or it is simply creating an - // empty Stream with no Blocks. - // - // Initialize the Index encoder, and continue to - // actually encoding the Index. - return_if_error(lzma_index_encoder_init( - &coder->index_encoder, allocator, - coder->index)); - coder->sequence = SEQ_INDEX_ENCODE; - break; - } - - // Initialize the Block encoder unless it was already - // initialized by lzma_stream_encoder_init() or - // stream_encoder_update(). - if (!coder->block_encoder_is_initialized) - return_if_error(block_encoder_init(coder, allocator)); - - // Make it false so that we don't skip the initialization - // with the next Block. - coder->block_encoder_is_initialized = false; - - // Encode the Block Header. This shouldn't fail since we have - // already initialized the Block encoder. - if (lzma_block_header_encode(&coder->block_options, - coder->buffer) != LZMA_OK) - return LZMA_PROG_ERROR; - - coder->buffer_size = coder->block_options.header_size; - coder->sequence = SEQ_BLOCK_HEADER; - break; - } - - case SEQ_BLOCK_ENCODE: { - static const lzma_action convert[4] = { - LZMA_RUN, - LZMA_SYNC_FLUSH, - LZMA_FINISH, - LZMA_FINISH, - }; - - const lzma_ret ret = coder->block_encoder.code( - coder->block_encoder.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, convert[action]); - if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH) - return ret; - - // Add a new Index Record. - const lzma_vli unpadded_size = lzma_block_unpadded_size( - &coder->block_options); - assert(unpadded_size != 0); - return_if_error(lzma_index_append(coder->index, allocator, - unpadded_size, - coder->block_options.uncompressed_size)); - - coder->sequence = SEQ_BLOCK_INIT; - break; - } - - case SEQ_INDEX_ENCODE: { - // Call the Index encoder. It doesn't take any input, so - // those pointers can be NULL. - const lzma_ret ret = coder->index_encoder.code( - coder->index_encoder.coder, allocator, - NULL, NULL, 0, - out, out_pos, out_size, LZMA_RUN); - if (ret != LZMA_STREAM_END) - return ret; - - // Encode the Stream Footer into coder->buffer. - const lzma_stream_flags stream_flags = { - .version = 0, - .backward_size = lzma_index_size(coder->index), - .check = coder->block_options.check, - }; - - if (lzma_stream_footer_encode(&stream_flags, coder->buffer) - != LZMA_OK) - return LZMA_PROG_ERROR; - - coder->buffer_size = LZMA_STREAM_HEADER_SIZE; - coder->sequence = SEQ_STREAM_FOOTER; - break; - } - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -stream_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->block_encoder, allocator); - lzma_next_end(&coder->index_encoder, allocator); - lzma_index_end(coder->index, allocator); - - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); - - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -stream_encoder_update(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters, - const lzma_filter *reversed_filters) -{ - if (coder->sequence <= SEQ_BLOCK_INIT) { - // There is no incomplete Block waiting to be finished, - // thus we can change the whole filter chain. Start by - // trying to initialize the Block encoder with the new - // chain. This way we detect if the chain is valid. - coder->block_encoder_is_initialized = false; - coder->block_options.filters = (lzma_filter *)(filters); - const lzma_ret ret = block_encoder_init(coder, allocator); - coder->block_options.filters = coder->filters; - if (ret != LZMA_OK) - return ret; - - coder->block_encoder_is_initialized = true; - - } else if (coder->sequence <= SEQ_BLOCK_ENCODE) { - // We are in the middle of a Block. Try to update only - // the filter-specific options. - return_if_error(coder->block_encoder.update( - coder->block_encoder.coder, allocator, - filters, reversed_filters)); - } else { - // Trying to update the filter chain when we are already - // encoding Index or Stream Footer. - return LZMA_PROG_ERROR; - } - - // Free the copy of the old chain and make a copy of the new chain. - for (size_t i = 0; coder->filters[i].id != LZMA_VLI_UNKNOWN; ++i) - lzma_free(coder->filters[i].options, allocator); - - return lzma_filters_copy(filters, coder->filters, allocator); -} - - -extern lzma_ret -lzma_stream_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, lzma_check check) -{ - lzma_next_coder_init(&lzma_stream_encoder_init, next, allocator); - - if (filters == NULL) - return LZMA_PROG_ERROR; - - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &stream_encode; - next->end = &stream_encoder_end; - next->update = &stream_encoder_update; - - next->coder->filters[0].id = LZMA_VLI_UNKNOWN; - next->coder->block_encoder = LZMA_NEXT_CODER_INIT; - next->coder->index_encoder = LZMA_NEXT_CODER_INIT; - next->coder->index = NULL; - } - - // Basic initializations - next->coder->sequence = SEQ_STREAM_HEADER; - next->coder->block_options.version = 0; - next->coder->block_options.check = check; - - // Initialize the Index - lzma_index_end(next->coder->index, allocator); - next->coder->index = lzma_index_init(allocator); - if (next->coder->index == NULL) - return LZMA_MEM_ERROR; - - // Encode the Stream Header - lzma_stream_flags stream_flags = { - .version = 0, - .check = check, - }; - return_if_error(lzma_stream_header_encode( - &stream_flags, next->coder->buffer)); - - next->coder->buffer_pos = 0; - next->coder->buffer_size = LZMA_STREAM_HEADER_SIZE; - - // Initialize the Block encoder. This way we detect unsupported - // filter chains when initializing the Stream encoder instead of - // giving an error after Stream Header has already written out. - return stream_encoder_update( - next->coder, allocator, filters, NULL); -} - - -extern LZMA_API(lzma_ret) -lzma_stream_encoder(lzma_stream *strm, - const lzma_filter *filters, lzma_check check) -{ - lzma_next_strm_init(lzma_stream_encoder_init, strm, filters, check); - - strm->internal->supported_actions[LZMA_RUN] = true; - strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true; - strm->internal->supported_actions[LZMA_FULL_FLUSH] = true; - strm->internal->supported_actions[LZMA_FINISH] = true; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/stream_encoder.h b/deps/lzma/liblzma/common/stream_encoder.h deleted file mode 100644 index 46a7aed72eaa30..00000000000000 --- a/deps/lzma/liblzma/common/stream_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_encoder.h -/// \brief Encodes .xz Streams -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_ENCODER_H -#define LZMA_STREAM_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_stream_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter *filters, lzma_check check); - -#endif diff --git a/deps/lzma/liblzma/common/stream_flags_common.c b/deps/lzma/liblzma/common/stream_flags_common.c deleted file mode 100644 index fbe8eb8abda217..00000000000000 --- a/deps/lzma/liblzma/common/stream_flags_common.c +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_common.c -/// \brief Common stuff for Stream flags coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -const uint8_t lzma_header_magic[6] = { 0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00 }; -const uint8_t lzma_footer_magic[2] = { 0x59, 0x5A }; - - -extern LZMA_API(lzma_ret) -lzma_stream_flags_compare( - const lzma_stream_flags *a, const lzma_stream_flags *b) -{ - // We can compare only version 0 structures. - if (a->version != 0 || b->version != 0) - return LZMA_OPTIONS_ERROR; - - // Check type - if ((unsigned int)(a->check) > LZMA_CHECK_ID_MAX - || (unsigned int)(b->check) > LZMA_CHECK_ID_MAX) - return LZMA_PROG_ERROR; - - if (a->check != b->check) - return LZMA_DATA_ERROR; - - // Backward Sizes are compared only if they are known in both. - if (a->backward_size != LZMA_VLI_UNKNOWN - && b->backward_size != LZMA_VLI_UNKNOWN) { - if (!is_backward_size_valid(a) || !is_backward_size_valid(b)) - return LZMA_PROG_ERROR; - - if (a->backward_size != b->backward_size) - return LZMA_DATA_ERROR; - } - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/stream_flags_common.h b/deps/lzma/liblzma/common/stream_flags_common.h deleted file mode 100644 index 9f3122a3b1e574..00000000000000 --- a/deps/lzma/liblzma/common/stream_flags_common.h +++ /dev/null @@ -1,33 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_common.h -/// \brief Common stuff for Stream flags coders -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_STREAM_FLAGS_COMMON_H -#define LZMA_STREAM_FLAGS_COMMON_H - -#include "common.h" - -/// Size of the Stream Flags field -#define LZMA_STREAM_FLAGS_SIZE 2 - -extern const uint8_t lzma_header_magic[6]; -extern const uint8_t lzma_footer_magic[2]; - - -static inline bool -is_backward_size_valid(const lzma_stream_flags *options) -{ - return options->backward_size >= LZMA_BACKWARD_SIZE_MIN - && options->backward_size <= LZMA_BACKWARD_SIZE_MAX - && (options->backward_size & 3) == 0; -} - -#endif diff --git a/deps/lzma/liblzma/common/stream_flags_decoder.c b/deps/lzma/liblzma/common/stream_flags_decoder.c deleted file mode 100644 index 1bc2f97c5190ea..00000000000000 --- a/deps/lzma/liblzma/common/stream_flags_decoder.c +++ /dev/null @@ -1,82 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_decoder.c -/// \brief Decodes Stream Header and Stream Footer from .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -static bool -stream_flags_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Reserved bits must be unset. - if (in[0] != 0x00 || (in[1] & 0xF0)) - return true; - - options->version = 0; - options->check = in[1] & 0x0F; - - return false; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_header_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Magic - if (memcmp(in, lzma_header_magic, sizeof(lzma_header_magic)) != 0) - return LZMA_FORMAT_ERROR; - - // Verify the CRC32 so we can distinguish between corrupt - // and unsupported files. - const uint32_t crc = lzma_crc32(in + sizeof(lzma_header_magic), - LZMA_STREAM_FLAGS_SIZE, 0); - if (crc != unaligned_read32le(in + sizeof(lzma_header_magic) - + LZMA_STREAM_FLAGS_SIZE)) - return LZMA_DATA_ERROR; - - // Stream Flags - if (stream_flags_decode(options, in + sizeof(lzma_header_magic))) - return LZMA_OPTIONS_ERROR; - - // Set Backward Size to indicate unknown value. That way - // lzma_stream_flags_compare() can be used to compare Stream Header - // and Stream Footer while keeping it useful also for comparing - // two Stream Footers. - options->backward_size = LZMA_VLI_UNKNOWN; - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_footer_decode(lzma_stream_flags *options, const uint8_t *in) -{ - // Magic - if (memcmp(in + sizeof(uint32_t) * 2 + LZMA_STREAM_FLAGS_SIZE, - lzma_footer_magic, sizeof(lzma_footer_magic)) != 0) - return LZMA_FORMAT_ERROR; - - // CRC32 - const uint32_t crc = lzma_crc32(in + sizeof(uint32_t), - sizeof(uint32_t) + LZMA_STREAM_FLAGS_SIZE, 0); - if (crc != unaligned_read32le(in)) - return LZMA_DATA_ERROR; - - // Stream Flags - if (stream_flags_decode(options, in + sizeof(uint32_t) * 2)) - return LZMA_OPTIONS_ERROR; - - // Backward Size - options->backward_size = unaligned_read32le(in + sizeof(uint32_t)); - options->backward_size = (options->backward_size + 1) * 4; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/stream_flags_encoder.c b/deps/lzma/liblzma/common/stream_flags_encoder.c deleted file mode 100644 index 4e717159f1e7f1..00000000000000 --- a/deps/lzma/liblzma/common/stream_flags_encoder.c +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file stream_flags_encoder.c -/// \brief Encodes Stream Header and Stream Footer for .xz files -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "stream_flags_common.h" - - -static bool -stream_flags_encode(const lzma_stream_flags *options, uint8_t *out) -{ - if ((unsigned int)(options->check) > LZMA_CHECK_ID_MAX) - return true; - - out[0] = 0x00; - out[1] = options->check; - - return false; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_header_encode(const lzma_stream_flags *options, uint8_t *out) -{ - assert(sizeof(lzma_header_magic) + LZMA_STREAM_FLAGS_SIZE - + 4 == LZMA_STREAM_HEADER_SIZE); - - if (options->version != 0) - return LZMA_OPTIONS_ERROR; - - // Magic - memcpy(out, lzma_header_magic, sizeof(lzma_header_magic)); - - // Stream Flags - if (stream_flags_encode(options, out + sizeof(lzma_header_magic))) - return LZMA_PROG_ERROR; - - // CRC32 of the Stream Header - const uint32_t crc = lzma_crc32(out + sizeof(lzma_header_magic), - LZMA_STREAM_FLAGS_SIZE, 0); - - unaligned_write32le(out + sizeof(lzma_header_magic) - + LZMA_STREAM_FLAGS_SIZE, crc); - - return LZMA_OK; -} - - -extern LZMA_API(lzma_ret) -lzma_stream_footer_encode(const lzma_stream_flags *options, uint8_t *out) -{ - assert(2 * 4 + LZMA_STREAM_FLAGS_SIZE + sizeof(lzma_footer_magic) - == LZMA_STREAM_HEADER_SIZE); - - if (options->version != 0) - return LZMA_OPTIONS_ERROR; - - // Backward Size - if (!is_backward_size_valid(options)) - return LZMA_PROG_ERROR; - - unaligned_write32le(out + 4, options->backward_size / 4 - 1); - - // Stream Flags - if (stream_flags_encode(options, out + 2 * 4)) - return LZMA_PROG_ERROR; - - // CRC32 - const uint32_t crc = lzma_crc32( - out + 4, 4 + LZMA_STREAM_FLAGS_SIZE, 0); - - unaligned_write32le(out, crc); - - // Magic - memcpy(out + 2 * 4 + LZMA_STREAM_FLAGS_SIZE, - lzma_footer_magic, sizeof(lzma_footer_magic)); - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/vli_decoder.c b/deps/lzma/liblzma/common/vli_decoder.c deleted file mode 100644 index c181828bf5644c..00000000000000 --- a/deps/lzma/liblzma/common/vli_decoder.c +++ /dev/null @@ -1,86 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_decoder.c -/// \brief Decodes variable-length integers -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_ret) -lzma_vli_decode(lzma_vli *restrict vli, size_t *vli_pos, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size) -{ - // If we haven't been given vli_pos, work in single-call mode. - size_t vli_pos_internal = 0; - if (vli_pos == NULL) { - vli_pos = &vli_pos_internal; - *vli = 0; - - // If there's no input, use LZMA_DATA_ERROR. This way it is - // easy to decode VLIs from buffers that have known size, - // and get the correct error code in case the buffer is - // too short. - if (*in_pos >= in_size) - return LZMA_DATA_ERROR; - - } else { - // Initialize *vli when starting to decode a new integer. - if (*vli_pos == 0) - *vli = 0; - - // Validate the arguments. - if (*vli_pos >= LZMA_VLI_BYTES_MAX - || (*vli >> (*vli_pos * 7)) != 0) - return LZMA_PROG_ERROR;; - - if (*in_pos >= in_size) - return LZMA_BUF_ERROR; - } - - do { - // Read the next byte. Use a temporary variable so that we - // can update *in_pos immediately. - const uint8_t byte = in[*in_pos]; - ++*in_pos; - - // Add the newly read byte to *vli. - *vli += (lzma_vli)(byte & 0x7F) << (*vli_pos * 7); - ++*vli_pos; - - // Check if this is the last byte of a multibyte integer. - if ((byte & 0x80) == 0) { - // We don't allow using variable-length integers as - // padding i.e. the encoding must use the most the - // compact form. - if (byte == 0x00 && *vli_pos > 1) - return LZMA_DATA_ERROR; - - return vli_pos == &vli_pos_internal - ? LZMA_OK : LZMA_STREAM_END; - } - - // There is at least one more byte coming. If we have already - // read maximum number of bytes, the integer is considered - // corrupt. - // - // If we need bigger integers in future, old versions liblzma - // will confusingly indicate the file being corrupt istead of - // unsupported. I suppose it's still better this way, because - // in the foreseeable future (writing this in 2008) the only - // reason why files would appear having over 63-bit integers - // is that the files are simply corrupt. - if (*vli_pos == LZMA_VLI_BYTES_MAX) - return LZMA_DATA_ERROR; - - } while (*in_pos < in_size); - - return vli_pos == &vli_pos_internal ? LZMA_DATA_ERROR : LZMA_OK; -} diff --git a/deps/lzma/liblzma/common/vli_encoder.c b/deps/lzma/liblzma/common/vli_encoder.c deleted file mode 100644 index f8642694e29109..00000000000000 --- a/deps/lzma/liblzma/common/vli_encoder.c +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_encoder.c -/// \brief Encodes variable-length integers -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_ret) -lzma_vli_encode(lzma_vli vli, size_t *vli_pos, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - // If we haven't been given vli_pos, work in single-call mode. - size_t vli_pos_internal = 0; - if (vli_pos == NULL) { - vli_pos = &vli_pos_internal; - - // In single-call mode, we expect that the caller has - // reserved enough output space. - if (*out_pos >= out_size) - return LZMA_PROG_ERROR; - } else { - // This never happens when we are called by liblzma, but - // may happen if called directly from an application. - if (*out_pos >= out_size) - return LZMA_BUF_ERROR; - } - - // Validate the arguments. - if (*vli_pos >= LZMA_VLI_BYTES_MAX || vli > LZMA_VLI_MAX) - return LZMA_PROG_ERROR; - - // Shift vli so that the next bits to encode are the lowest. In - // single-call mode this never changes vli since *vli_pos is zero. - vli >>= *vli_pos * 7; - - // Write the non-last bytes in a loop. - while (vli >= 0x80) { - // We don't need *vli_pos during this function call anymore, - // but update it here so that it is ready if we need to - // return before the whole integer has been decoded. - ++*vli_pos; - assert(*vli_pos < LZMA_VLI_BYTES_MAX); - - // Write the next byte. - out[*out_pos] = (uint8_t)(vli) | 0x80; - vli >>= 7; - - if (++*out_pos == out_size) - return vli_pos == &vli_pos_internal - ? LZMA_PROG_ERROR : LZMA_OK; - } - - // Write the last byte. - out[*out_pos] = (uint8_t)(vli); - ++*out_pos; - ++*vli_pos; - - return vli_pos == &vli_pos_internal ? LZMA_OK : LZMA_STREAM_END; - -} diff --git a/deps/lzma/liblzma/common/vli_size.c b/deps/lzma/liblzma/common/vli_size.c deleted file mode 100644 index ec1b4fa488b6af..00000000000000 --- a/deps/lzma/liblzma/common/vli_size.c +++ /dev/null @@ -1,30 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file vli_size.c -/// \brief Calculates the encoded size of a variable-length integer -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(uint32_t) -lzma_vli_size(lzma_vli vli) -{ - if (vli > LZMA_VLI_MAX) - return 0; - - uint32_t i = 0; - do { - vli >>= 7; - ++i; - } while (vli != 0); - - assert(i <= LZMA_VLI_BYTES_MAX); - return i; -} diff --git a/deps/lzma/liblzma/delta/Makefile.inc b/deps/lzma/liblzma/delta/Makefile.inc deleted file mode 100644 index c7739b44223ace..00000000000000 --- a/deps/lzma/liblzma/delta/Makefile.inc +++ /dev/null @@ -1,23 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -liblzma_la_SOURCES += \ - delta/delta_common.c \ - delta/delta_common.h \ - delta/delta_private.h - -if COND_ENCODER_DELTA -liblzma_la_SOURCES += \ - delta/delta_encoder.c \ - delta/delta_encoder.h -endif - -if COND_DECODER_DELTA -liblzma_la_SOURCES += \ - delta/delta_decoder.c \ - delta/delta_decoder.h -endif diff --git a/deps/lzma/liblzma/delta/delta_common.c b/deps/lzma/liblzma/delta/delta_common.c deleted file mode 100644 index 930ad215131ca9..00000000000000 --- a/deps/lzma/liblzma/delta/delta_common.c +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_common.c -/// \brief Common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_common.h" -#include "delta_private.h" - - -static void -delta_coder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_delta_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - // Allocate memory for the decoder if needed. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - // End function is the same for encoder and decoder. - next->end = &delta_coder_end; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Validate the options. - if (lzma_delta_coder_memusage(filters[0].options) == UINT64_MAX) - return LZMA_OPTIONS_ERROR; - - // Set the delta distance. - const lzma_options_delta *opt = filters[0].options; - next->coder->distance = opt->dist; - - // Initialize the rest of the variables. - next->coder->pos = 0; - memzero(next->coder->history, LZMA_DELTA_DIST_MAX); - - // Initialize the next decoder in the chain, if any. - return lzma_next_filter_init(&next->coder->next, - allocator, filters + 1); -} - - -extern uint64_t -lzma_delta_coder_memusage(const void *options) -{ - const lzma_options_delta *opt = options; - - if (opt == NULL || opt->type != LZMA_DELTA_TYPE_BYTE - || opt->dist < LZMA_DELTA_DIST_MIN - || opt->dist > LZMA_DELTA_DIST_MAX) - return UINT64_MAX; - - return sizeof(lzma_coder); -} diff --git a/deps/lzma/liblzma/delta/delta_common.h b/deps/lzma/liblzma/delta/delta_common.h deleted file mode 100644 index 7e7e1baaf68079..00000000000000 --- a/deps/lzma/liblzma/delta/delta_common.h +++ /dev/null @@ -1,20 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_common.h -/// \brief Common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_COMMON_H -#define LZMA_DELTA_COMMON_H - -#include "common.h" - -extern uint64_t lzma_delta_coder_memusage(const void *options); - -#endif diff --git a/deps/lzma/liblzma/delta/delta_decoder.c b/deps/lzma/liblzma/delta/delta_decoder.c deleted file mode 100644 index 2cf60d5bdc7cf3..00000000000000 --- a/deps/lzma/liblzma/delta/delta_decoder.c +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_decoder.c -/// \brief Delta filter decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_decoder.h" -#include "delta_private.h" - - -static void -decode_buffer(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - buffer[i] += coder->history[(distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = buffer[i]; - } -} - - -static lzma_ret -delta_decode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - assert(coder->next.code != NULL); - - const size_t out_start = *out_pos; - - const lzma_ret ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - decode_buffer(coder, out + out_start, *out_pos - out_start); - - return ret; -} - - -extern lzma_ret -lzma_delta_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - next->code = &delta_decode; - return lzma_delta_coder_init(next, allocator, filters); -} - - -extern lzma_ret -lzma_delta_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 1) - return LZMA_OPTIONS_ERROR; - - lzma_options_delta *opt - = lzma_alloc(sizeof(lzma_options_delta), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - opt->type = LZMA_DELTA_TYPE_BYTE; - opt->dist = props[0] + 1; - - *options = opt; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/delta/delta_decoder.h b/deps/lzma/liblzma/delta/delta_decoder.h deleted file mode 100644 index ae89acc59f8cb8..00000000000000 --- a/deps/lzma/liblzma/delta/delta_decoder.h +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_decoder.h -/// \brief Delta filter decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_DECODER_H -#define LZMA_DELTA_DECODER_H - -#include "delta_common.h" - -extern lzma_ret lzma_delta_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_delta_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/deps/lzma/liblzma/delta/delta_encoder.c b/deps/lzma/liblzma/delta/delta_encoder.c deleted file mode 100644 index 15c7951e104a56..00000000000000 --- a/deps/lzma/liblzma/delta/delta_encoder.c +++ /dev/null @@ -1,121 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_encoder.c -/// \brief Delta filter encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "delta_encoder.h" -#include "delta_private.h" - - -/// Copies and encodes the data at the same time. This is used when Delta -/// is the first filter in the chain (and thus the last filter in the -/// encoder's filter stack). -static void -copy_and_encode(lzma_coder *coder, - const uint8_t *restrict in, uint8_t *restrict out, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - const uint8_t tmp = coder->history[ - (distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = in[i]; - out[i] = in[i] - tmp; - } -} - - -/// Encodes the data in place. This is used when we are the last filter -/// in the chain (and thus non-last filter in the encoder's filter stack). -static void -encode_in_place(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t distance = coder->distance; - - for (size_t i = 0; i < size; ++i) { - const uint8_t tmp = coder->history[ - (distance + coder->pos) & 0xFF]; - coder->history[coder->pos-- & 0xFF] = buffer[i]; - buffer[i] -= tmp; - } -} - - -static lzma_ret -delta_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - lzma_ret ret; - - if (coder->next.code == NULL) { - const size_t in_avail = in_size - *in_pos; - const size_t out_avail = out_size - *out_pos; - const size_t size = my_min(in_avail, out_avail); - - copy_and_encode(coder, in + *in_pos, out + *out_pos, size); - - *in_pos += size; - *out_pos += size; - - ret = action != LZMA_RUN && *in_pos == in_size - ? LZMA_STREAM_END : LZMA_OK; - - } else { - const size_t out_start = *out_pos; - - ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, out, out_pos, out_size, - action); - - encode_in_place(coder, out + out_start, *out_pos - out_start); - } - - return ret; -} - - -static lzma_ret -delta_encoder_update(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters_null lzma_attribute((__unused__)), - const lzma_filter *reversed_filters) -{ - // Delta doesn't and will never support changing the options in - // the middle of encoding. If the app tries to change them, we - // simply ignore them. - return lzma_next_filter_update( - &coder->next, allocator, reversed_filters + 1); -} - - -extern lzma_ret -lzma_delta_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - next->code = &delta_encode; - next->update = &delta_encoder_update; - return lzma_delta_coder_init(next, allocator, filters); -} - - -extern lzma_ret -lzma_delta_props_encode(const void *options, uint8_t *out) -{ - // The caller must have already validated the options, so it's - // LZMA_PROG_ERROR if they are invalid. - if (lzma_delta_coder_memusage(options) == UINT64_MAX) - return LZMA_PROG_ERROR; - - const lzma_options_delta *opt = options; - out[0] = opt->dist - LZMA_DELTA_DIST_MIN; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/delta/delta_encoder.h b/deps/lzma/liblzma/delta/delta_encoder.h deleted file mode 100644 index a447862f205bce..00000000000000 --- a/deps/lzma/liblzma/delta/delta_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_encoder.h -/// \brief Delta filter encoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_ENCODER_H -#define LZMA_DELTA_ENCODER_H - -#include "delta_common.h" - -extern lzma_ret lzma_delta_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_delta_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/deps/lzma/liblzma/delta/delta_private.h b/deps/lzma/liblzma/delta/delta_private.h deleted file mode 100644 index 62b7fed86e45fe..00000000000000 --- a/deps/lzma/liblzma/delta/delta_private.h +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file delta_private.h -/// \brief Private common stuff for Delta encoder and decoder -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_DELTA_PRIVATE_H -#define LZMA_DELTA_PRIVATE_H - -#include "delta_common.h" - -struct lzma_coder_s { - /// Next coder in the chain - lzma_next_coder next; - - /// Delta distance - size_t distance; - - /// Position in history[] - uint8_t pos; - - /// Buffer to hold history of the original data - uint8_t history[LZMA_DELTA_DIST_MAX]; -}; - - -extern lzma_ret lzma_delta_coder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters); - -#endif diff --git a/deps/lzma/liblzma/lz/Makefile.inc b/deps/lzma/liblzma/lz/Makefile.inc deleted file mode 100644 index 75742a84bf88b0..00000000000000 --- a/deps/lzma/liblzma/lz/Makefile.inc +++ /dev/null @@ -1,22 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -if COND_ENCODER_LZ -liblzma_la_SOURCES += \ - lz/lz_encoder.c \ - lz/lz_encoder.h \ - lz/lz_encoder_hash.h \ - lz/lz_encoder_hash_table.h \ - lz/lz_encoder_mf.c -endif - - -if COND_DECODER_LZ -liblzma_la_SOURCES += \ - lz/lz_decoder.c \ - lz/lz_decoder.h -endif diff --git a/deps/lzma/liblzma/lz/lz_decoder.c b/deps/lzma/liblzma/lz/lz_decoder.c deleted file mode 100644 index d74085cf44719a..00000000000000 --- a/deps/lzma/liblzma/lz/lz_decoder.c +++ /dev/null @@ -1,300 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_decoder.c -/// \brief LZ out window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -// liblzma supports multiple LZ77-based filters. The LZ part is shared -// between these filters. The LZ code takes care of dictionary handling -// and passing the data between filters in the chain. The filter-specific -// part decodes from the input buffer to the dictionary. - - -#include "lz_decoder.h" - - -struct lzma_coder_s { - /// Dictionary (history buffer) - lzma_dict dict; - - /// The actual LZ-based decoder e.g. LZMA - lzma_lz_decoder lz; - - /// Next filter in the chain, if any. Note that LZMA and LZMA2 are - /// only allowed as the last filter, but the long-range filter in - /// future can be in the middle of the chain. - lzma_next_coder next; - - /// True if the next filter in the chain has returned LZMA_STREAM_END. - bool next_finished; - - /// True if the LZ decoder (e.g. LZMA) has detected end of payload - /// marker. This may become true before next_finished becomes true. - bool this_finished; - - /// Temporary buffer needed when the LZ-based filter is not the last - /// filter in the chain. The output of the next filter is first - /// decoded into buffer[], which is then used as input for the actual - /// LZ-based decoder. - struct { - size_t pos; - size_t size; - uint8_t buffer[LZMA_BUFFER_SIZE]; - } temp; -}; - - -static void -lz_decoder_reset(lzma_coder *coder) -{ - coder->dict.pos = 0; - coder->dict.full = 0; - coder->dict.buf[coder->dict.size - 1] = '\0'; - coder->dict.need_reset = false; - return; -} - - -static lzma_ret -decode_buffer(lzma_coder *coder, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size) -{ - while (true) { - // Wrap the dictionary if needed. - if (coder->dict.pos == coder->dict.size) - coder->dict.pos = 0; - - // Store the current dictionary position. It is needed to know - // where to start copying to the out[] buffer. - const size_t dict_start = coder->dict.pos; - - // Calculate how much we allow coder->lz.code() to decode. - // It must not decode past the end of the dictionary - // buffer, and we don't want it to decode more than is - // actually needed to fill the out[] buffer. - coder->dict.limit = coder->dict.pos - + my_min(out_size - *out_pos, - coder->dict.size - coder->dict.pos); - - // Call the coder->lz.code() to do the actual decoding. - const lzma_ret ret = coder->lz.code( - coder->lz.coder, &coder->dict, - in, in_pos, in_size); - - // Copy the decoded data from the dictionary to the out[] - // buffer. - const size_t copy_size = coder->dict.pos - dict_start; - assert(copy_size <= out_size - *out_pos); - memcpy(out + *out_pos, coder->dict.buf + dict_start, - copy_size); - *out_pos += copy_size; - - // Reset the dictionary if so requested by coder->lz.code(). - if (coder->dict.need_reset) { - lz_decoder_reset(coder); - - // Since we reset dictionary, we don't check if - // dictionary became full. - if (ret != LZMA_OK || *out_pos == out_size) - return ret; - } else { - // Return if everything got decoded or an error - // occurred, or if there's no more data to decode. - // - // Note that detecting if there's something to decode - // is done by looking if dictionary become full - // instead of looking if *in_pos == in_size. This - // is because it is possible that all the input was - // consumed already but some data is pending to be - // written to the dictionary. - if (ret != LZMA_OK || *out_pos == out_size - || coder->dict.pos < coder->dict.size) - return ret; - } - } -} - - -static lzma_ret -lz_decode(lzma_coder *coder, - lzma_allocator *allocator lzma_attribute((__unused__)), - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - lzma_action action) -{ - if (coder->next.code == NULL) - return decode_buffer(coder, in, in_pos, in_size, - out, out_pos, out_size); - - // We aren't the last coder in the chain, we need to decode - // our input to a temporary buffer. - while (*out_pos < out_size) { - // Fill the temporary buffer if it is empty. - if (!coder->next_finished - && coder->temp.pos == coder->temp.size) { - coder->temp.pos = 0; - coder->temp.size = 0; - - const lzma_ret ret = coder->next.code( - coder->next.coder, - allocator, in, in_pos, in_size, - coder->temp.buffer, &coder->temp.size, - LZMA_BUFFER_SIZE, action); - - if (ret == LZMA_STREAM_END) - coder->next_finished = true; - else if (ret != LZMA_OK || coder->temp.size == 0) - return ret; - } - - if (coder->this_finished) { - if (coder->temp.size != 0) - return LZMA_DATA_ERROR; - - if (coder->next_finished) - return LZMA_STREAM_END; - - return LZMA_OK; - } - - const lzma_ret ret = decode_buffer(coder, coder->temp.buffer, - &coder->temp.pos, coder->temp.size, - out, out_pos, out_size); - - if (ret == LZMA_STREAM_END) - coder->this_finished = true; - else if (ret != LZMA_OK) - return ret; - else if (coder->next_finished && *out_pos < out_size) - return LZMA_DATA_ERROR; - } - - return LZMA_OK; -} - - -static void -lz_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder->dict.buf, allocator); - - if (coder->lz.end != NULL) - coder->lz.end(coder->lz.coder, allocator); - else - lzma_free(coder->lz.coder, allocator); - - lzma_free(coder, allocator); - return; -} - - -extern lzma_ret -lzma_lz_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_decoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)) -{ - // Allocate the base structure if it isn't already allocated. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &lz_decode; - next->end = &lz_decoder_end; - - next->coder->dict.buf = NULL; - next->coder->dict.size = 0; - next->coder->lz = LZMA_LZ_DECODER_INIT; - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Allocate and initialize the LZ-based decoder. It will also give - // us the dictionary size. - lzma_lz_options lz_options; - return_if_error(lz_init(&next->coder->lz, allocator, - filters[0].options, &lz_options)); - - // If the dictionary size is very small, increase it to 4096 bytes. - // This is to prevent constant wrapping of the dictionary, which - // would slow things down. The downside is that since we don't check - // separately for the real dictionary size, we may happily accept - // corrupt files. - if (lz_options.dict_size < 4096) - lz_options.dict_size = 4096; - - // Make dictionary size a multipe of 16. Some LZ-based decoders like - // LZMA use the lowest bits lzma_dict.pos to know the alignment of the - // data. Aligned buffer is also good when memcpying from the - // dictionary to the output buffer, since applications are - // recommended to give aligned buffers to liblzma. - // - // Avoid integer overflow. - if (lz_options.dict_size > SIZE_MAX - 15) - return LZMA_MEM_ERROR; - - lz_options.dict_size = (lz_options.dict_size + 15) & ~((size_t)(15)); - - // Allocate and initialize the dictionary. - if (next->coder->dict.size != lz_options.dict_size) { - lzma_free(next->coder->dict.buf, allocator); - next->coder->dict.buf - = lzma_alloc(lz_options.dict_size, allocator); - if (next->coder->dict.buf == NULL) - return LZMA_MEM_ERROR; - - next->coder->dict.size = lz_options.dict_size; - } - - lz_decoder_reset(next->coder); - - // Use the preset dictionary if it was given to us. - if (lz_options.preset_dict != NULL - && lz_options.preset_dict_size > 0) { - // If the preset dictionary is bigger than the actual - // dictionary, copy only the tail. - const size_t copy_size = my_min(lz_options.preset_dict_size, - lz_options.dict_size); - const size_t offset = lz_options.preset_dict_size - copy_size; - memcpy(next->coder->dict.buf, lz_options.preset_dict + offset, - copy_size); - next->coder->dict.pos = copy_size; - next->coder->dict.full = copy_size; - } - - // Miscellaneous initializations - next->coder->next_finished = false; - next->coder->this_finished = false; - next->coder->temp.pos = 0; - next->coder->temp.size = 0; - - // Initialize the next filter in the chain, if any. - return lzma_next_filter_init(&next->coder->next, allocator, - filters + 1); -} - - -extern uint64_t -lzma_lz_decoder_memusage(size_t dictionary_size) -{ - return sizeof(lzma_coder) + (uint64_t)(dictionary_size); -} - - -extern void -lzma_lz_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) -{ - coder->lz.set_uncompressed(coder->lz.coder, uncompressed_size); -} diff --git a/deps/lzma/liblzma/lz/lz_decoder.h b/deps/lzma/liblzma/lz/lz_decoder.h deleted file mode 100644 index 7266e803165f16..00000000000000 --- a/deps/lzma/liblzma/lz/lz_decoder.h +++ /dev/null @@ -1,234 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_decoder.h -/// \brief LZ out window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_DECODER_H -#define LZMA_LZ_DECODER_H - -#include "common.h" - - -typedef struct { - /// Pointer to the dictionary buffer. It can be an allocated buffer - /// internal to liblzma, or it can a be a buffer given by the - /// application when in single-call mode (not implemented yet). - uint8_t *buf; - - /// Write position in dictionary. The next byte will be written to - /// buf[pos]. - size_t pos; - - /// Indicates how full the dictionary is. This is used by - /// dict_is_distance_valid() to detect corrupt files that would - /// read beyond the beginning of the dictionary. - size_t full; - - /// Write limit - size_t limit; - - /// Size of the dictionary - size_t size; - - /// True when dictionary should be reset before decoding more data. - bool need_reset; - -} lzma_dict; - - -typedef struct { - size_t dict_size; - const uint8_t *preset_dict; - size_t preset_dict_size; -} lzma_lz_options; - - -typedef struct { - /// Data specific to the LZ-based decoder - lzma_coder *coder; - - /// Function to decode from in[] to *dict - lzma_ret (*code)(lzma_coder *restrict coder, - lzma_dict *restrict dict, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size); - - void (*reset)(lzma_coder *coder, const void *options); - - /// Set the uncompressed size - void (*set_uncompressed)(lzma_coder *coder, - lzma_vli uncompressed_size); - - /// Free allocated resources - void (*end)(lzma_coder *coder, lzma_allocator *allocator); - -} lzma_lz_decoder; - - -#define LZMA_LZ_DECODER_INIT \ - (lzma_lz_decoder){ \ - .coder = NULL, \ - .code = NULL, \ - .reset = NULL, \ - .set_uncompressed = NULL, \ - .end = NULL, \ - } - - -extern lzma_ret lzma_lz_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_decoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)); - -extern uint64_t lzma_lz_decoder_memusage(size_t dictionary_size); - -extern void lzma_lz_decoder_uncompressed( - lzma_coder *coder, lzma_vli uncompressed_size); - - -////////////////////// -// Inline functions // -////////////////////// - -/// Get a byte from the history buffer. -static inline uint8_t -dict_get(const lzma_dict *const dict, const uint32_t distance) -{ - return dict->buf[dict->pos - distance - 1 - + (distance < dict->pos ? 0 : dict->size)]; -} - - -/// Test if dictionary is empty. -static inline bool -dict_is_empty(const lzma_dict *const dict) -{ - return dict->full == 0; -} - - -/// Validate the match distance -static inline bool -dict_is_distance_valid(const lzma_dict *const dict, const size_t distance) -{ - return dict->full > distance; -} - - -/// Repeat *len bytes at distance. -static inline bool -dict_repeat(lzma_dict *dict, uint32_t distance, uint32_t *len) -{ - // Don't write past the end of the dictionary. - const size_t dict_avail = dict->limit - dict->pos; - uint32_t left = my_min(dict_avail, *len); - *len -= left; - - // Repeat a block of data from the history. Because memcpy() is faster - // than copying byte by byte in a loop, the copying process gets split - // into three cases. - if (distance < left) { - // Source and target areas overlap, thus we can't use - // memcpy() nor even memmove() safely. - do { - dict->buf[dict->pos] = dict_get(dict, distance); - ++dict->pos; - } while (--left > 0); - - } else if (distance < dict->pos) { - // The easiest and fastest case - memcpy(dict->buf + dict->pos, - dict->buf + dict->pos - distance - 1, - left); - dict->pos += left; - - } else { - // The bigger the dictionary, the more rare this - // case occurs. We need to "wrap" the dict, thus - // we might need two memcpy() to copy all the data. - assert(dict->full == dict->size); - const uint32_t copy_pos - = dict->pos - distance - 1 + dict->size; - uint32_t copy_size = dict->size - copy_pos; - - if (copy_size < left) { - memmove(dict->buf + dict->pos, dict->buf + copy_pos, - copy_size); - dict->pos += copy_size; - copy_size = left - copy_size; - memcpy(dict->buf + dict->pos, dict->buf, copy_size); - dict->pos += copy_size; - } else { - memmove(dict->buf + dict->pos, dict->buf + copy_pos, - left); - dict->pos += left; - } - } - - // Update how full the dictionary is. - if (dict->full < dict->pos) - dict->full = dict->pos; - - return unlikely(*len != 0); -} - - -/// Puts one byte into the dictionary. Returns true if the dictionary was -/// already full and the byte couldn't be added. -static inline bool -dict_put(lzma_dict *dict, uint8_t byte) -{ - if (unlikely(dict->pos == dict->limit)) - return true; - - dict->buf[dict->pos++] = byte; - - if (dict->pos > dict->full) - dict->full = dict->pos; - - return false; -} - - -/// Copies arbitrary amount of data into the dictionary. -static inline void -dict_write(lzma_dict *restrict dict, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size, - size_t *restrict left) -{ - // NOTE: If we are being given more data than the size of the - // dictionary, it could be possible to optimize the LZ decoder - // so that not everything needs to go through the dictionary. - // This shouldn't be very common thing in practice though, and - // the slowdown of one extra memcpy() isn't bad compared to how - // much time it would have taken if the data were compressed. - - if (in_size - *in_pos > *left) - in_size = *in_pos + *left; - - *left -= lzma_bufcpy(in, in_pos, in_size, - dict->buf, &dict->pos, dict->limit); - - if (dict->pos > dict->full) - dict->full = dict->pos; - - return; -} - - -static inline void -dict_reset(lzma_dict *dict) -{ - dict->need_reset = true; - return; -} - -#endif diff --git a/deps/lzma/liblzma/lz/lz_encoder.c b/deps/lzma/liblzma/lz/lz_encoder.c deleted file mode 100644 index e2406965882c27..00000000000000 --- a/deps/lzma/liblzma/lz/lz_encoder.c +++ /dev/null @@ -1,583 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder.c -/// \brief LZ in window -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lz_encoder_hash.h" - -// See lz_encoder_hash.h. This is a bit hackish but avoids making -// endianness a conditional in makefiles. -#if defined(WORDS_BIGENDIAN) && !defined(HAVE_SMALL) -# include "lz_encoder_hash_table.h" -#endif - - -struct lzma_coder_s { - /// LZ-based encoder e.g. LZMA - lzma_lz_encoder lz; - - /// History buffer and match finder - lzma_mf mf; - - /// Next coder in the chain - lzma_next_coder next; -}; - - -/// \brief Moves the data in the input window to free space for new data -/// -/// mf->buffer is a sliding input window, which keeps mf->keep_size_before -/// bytes of input history available all the time. Now and then we need to -/// "slide" the buffer to make space for the new data to the end of the -/// buffer. At the same time, data older than keep_size_before is dropped. -/// -static void -move_window(lzma_mf *mf) -{ - // Align the move to a multiple of 16 bytes. Some LZ-based encoders - // like LZMA use the lowest bits of mf->read_pos to know the - // alignment of the uncompressed data. We also get better speed - // for memmove() with aligned buffers. - assert(mf->read_pos > mf->keep_size_before); - const uint32_t move_offset - = (mf->read_pos - mf->keep_size_before) & ~UINT32_C(15); - - assert(mf->write_pos > move_offset); - const size_t move_size = mf->write_pos - move_offset; - - assert(move_offset + move_size <= mf->size); - - memmove(mf->buffer, mf->buffer + move_offset, move_size); - - mf->offset += move_offset; - mf->read_pos -= move_offset; - mf->read_limit -= move_offset; - mf->write_pos -= move_offset; - - return; -} - - -/// \brief Tries to fill the input window (mf->buffer) -/// -/// If we are the last encoder in the chain, our input data is in in[]. -/// Otherwise we call the next filter in the chain to process in[] and -/// write its output to mf->buffer. -/// -/// This function must not be called once it has returned LZMA_STREAM_END. -/// -static lzma_ret -fill_window(lzma_coder *coder, lzma_allocator *allocator, const uint8_t *in, - size_t *in_pos, size_t in_size, lzma_action action) -{ - assert(coder->mf.read_pos <= coder->mf.write_pos); - - // Move the sliding window if needed. - if (coder->mf.read_pos >= coder->mf.size - coder->mf.keep_size_after) - move_window(&coder->mf); - - // Maybe this is ugly, but lzma_mf uses uint32_t for most things - // (which I find cleanest), but we need size_t here when filling - // the history window. - size_t write_pos = coder->mf.write_pos; - lzma_ret ret; - if (coder->next.code == NULL) { - // Not using a filter, simply memcpy() as much as possible. - lzma_bufcpy(in, in_pos, in_size, coder->mf.buffer, - &write_pos, coder->mf.size); - - ret = action != LZMA_RUN && *in_pos == in_size - ? LZMA_STREAM_END : LZMA_OK; - - } else { - ret = coder->next.code(coder->next.coder, allocator, - in, in_pos, in_size, - coder->mf.buffer, &write_pos, - coder->mf.size, action); - } - - coder->mf.write_pos = write_pos; - - // If end of stream has been reached or flushing completed, we allow - // the encoder to process all the input (that is, read_pos is allowed - // to reach write_pos). Otherwise we keep keep_size_after bytes - // available as prebuffer. - if (ret == LZMA_STREAM_END) { - assert(*in_pos == in_size); - ret = LZMA_OK; - coder->mf.action = action; - coder->mf.read_limit = coder->mf.write_pos; - - } else if (coder->mf.write_pos > coder->mf.keep_size_after) { - // This needs to be done conditionally, because if we got - // only little new input, there may be too little input - // to do any encoding yet. - coder->mf.read_limit = coder->mf.write_pos - - coder->mf.keep_size_after; - } - - // Restart the match finder after finished LZMA_SYNC_FLUSH. - if (coder->mf.pending > 0 - && coder->mf.read_pos < coder->mf.read_limit) { - // Match finder may update coder->pending and expects it to - // start from zero, so use a temporary variable. - const size_t pending = coder->mf.pending; - coder->mf.pending = 0; - - // Rewind read_pos so that the match finder can hash - // the pending bytes. - assert(coder->mf.read_pos >= pending); - coder->mf.read_pos -= pending; - - // Call the skip function directly instead of using - // mf_skip(), since we don't want to touch mf->read_ahead. - coder->mf.skip(&coder->mf, pending); - } - - return ret; -} - - -static lzma_ret -lz_encode(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, lzma_action action) -{ - while (*out_pos < out_size - && (*in_pos < in_size || action != LZMA_RUN)) { - // Read more data to coder->mf.buffer if needed. - if (coder->mf.action == LZMA_RUN && coder->mf.read_pos - >= coder->mf.read_limit) - return_if_error(fill_window(coder, allocator, - in, in_pos, in_size, action)); - - // Encode - const lzma_ret ret = coder->lz.code(coder->lz.coder, - &coder->mf, out, out_pos, out_size); - if (ret != LZMA_OK) { - // Setting this to LZMA_RUN for cases when we are - // flushing. It doesn't matter when finishing or if - // an error occurred. - coder->mf.action = LZMA_RUN; - return ret; - } - } - - return LZMA_OK; -} - - -static bool -lz_encoder_prepare(lzma_mf *mf, lzma_allocator *allocator, - const lzma_lz_options *lz_options) -{ - // For now, the dictionary size is limited to 1.5 GiB. This may grow - // in the future if needed, but it needs a little more work than just - // changing this check. - if (lz_options->dict_size < LZMA_DICT_SIZE_MIN - || lz_options->dict_size - > (UINT32_C(1) << 30) + (UINT32_C(1) << 29) - || lz_options->nice_len > lz_options->match_len_max) - return true; - - mf->keep_size_before = lz_options->before_size + lz_options->dict_size; - - mf->keep_size_after = lz_options->after_size - + lz_options->match_len_max; - - // To avoid constant memmove()s, allocate some extra space. Since - // memmove()s become more expensive when the size of the buffer - // increases, we reserve more space when a large dictionary is - // used to make the memmove() calls rarer. - // - // This works with dictionaries up to about 3 GiB. If bigger - // dictionary is wanted, some extra work is needed: - // - Several variables in lzma_mf have to be changed from uint32_t - // to size_t. - // - Memory usage calculation needs something too, e.g. use uint64_t - // for mf->size. - uint32_t reserve = lz_options->dict_size / 2; - if (reserve > (UINT32_C(1) << 30)) - reserve /= 2; - - reserve += (lz_options->before_size + lz_options->match_len_max - + lz_options->after_size) / 2 + (UINT32_C(1) << 19); - - const uint32_t old_size = mf->size; - mf->size = mf->keep_size_before + reserve + mf->keep_size_after; - - // Deallocate the old history buffer if it exists but has different - // size than what is needed now. - if (mf->buffer != NULL && old_size != mf->size) { - lzma_free(mf->buffer, allocator); - mf->buffer = NULL; - } - - // Match finder options - mf->match_len_max = lz_options->match_len_max; - mf->nice_len = lz_options->nice_len; - - // cyclic_size has to stay smaller than 2 Gi. Note that this doesn't - // mean limiting dictionary size to less than 2 GiB. With a match - // finder that uses multibyte resolution (hashes start at e.g. every - // fourth byte), cyclic_size would stay below 2 Gi even when - // dictionary size is greater than 2 GiB. - // - // It would be possible to allow cyclic_size >= 2 Gi, but then we - // would need to be careful to use 64-bit types in various places - // (size_t could do since we would need bigger than 32-bit address - // space anyway). It would also require either zeroing a multigigabyte - // buffer at initialization (waste of time and RAM) or allow - // normalization in lz_encoder_mf.c to access uninitialized - // memory to keep the code simpler. The current way is simple and - // still allows pretty big dictionaries, so I don't expect these - // limits to change. - mf->cyclic_size = lz_options->dict_size + 1; - - // Validate the match finder ID and setup the function pointers. - switch (lz_options->match_finder) { -#ifdef HAVE_MF_HC3 - case LZMA_MF_HC3: - mf->find = &lzma_mf_hc3_find; - mf->skip = &lzma_mf_hc3_skip; - break; -#endif -#ifdef HAVE_MF_HC4 - case LZMA_MF_HC4: - mf->find = &lzma_mf_hc4_find; - mf->skip = &lzma_mf_hc4_skip; - break; -#endif -#ifdef HAVE_MF_BT2 - case LZMA_MF_BT2: - mf->find = &lzma_mf_bt2_find; - mf->skip = &lzma_mf_bt2_skip; - break; -#endif -#ifdef HAVE_MF_BT3 - case LZMA_MF_BT3: - mf->find = &lzma_mf_bt3_find; - mf->skip = &lzma_mf_bt3_skip; - break; -#endif -#ifdef HAVE_MF_BT4 - case LZMA_MF_BT4: - mf->find = &lzma_mf_bt4_find; - mf->skip = &lzma_mf_bt4_skip; - break; -#endif - - default: - return true; - } - - // Calculate the sizes of mf->hash and mf->son and check that - // nice_len is big enough for the selected match finder. - const uint32_t hash_bytes = lz_options->match_finder & 0x0F; - if (hash_bytes > mf->nice_len) - return true; - - const bool is_bt = (lz_options->match_finder & 0x10) != 0; - uint32_t hs; - - if (hash_bytes == 2) { - hs = 0xFFFF; - } else { - // Round dictionary size up to the next 2^n - 1 so it can - // be used as a hash mask. - hs = lz_options->dict_size - 1; - hs |= hs >> 1; - hs |= hs >> 2; - hs |= hs >> 4; - hs |= hs >> 8; - hs >>= 1; - hs |= 0xFFFF; - - if (hs > (UINT32_C(1) << 24)) { - if (hash_bytes == 3) - hs = (UINT32_C(1) << 24) - 1; - else - hs >>= 1; - } - } - - mf->hash_mask = hs; - - ++hs; - if (hash_bytes > 2) - hs += HASH_2_SIZE; - if (hash_bytes > 3) - hs += HASH_3_SIZE; -/* - No match finder uses this at the moment. - if (mf->hash_bytes > 4) - hs += HASH_4_SIZE; -*/ - - // If the above code calculating hs is modified, make sure that - // this assertion stays valid (UINT32_MAX / 5 is not strictly the - // exact limit). If it doesn't, you need to calculate that - // hash_size_sum + sons_count cannot overflow. - assert(hs < UINT32_MAX / 5); - - const uint32_t old_count = mf->hash_size_sum + mf->sons_count; - mf->hash_size_sum = hs; - mf->sons_count = mf->cyclic_size; - if (is_bt) - mf->sons_count *= 2; - - const uint32_t new_count = mf->hash_size_sum + mf->sons_count; - - // Deallocate the old hash array if it exists and has different size - // than what is needed now. - if (old_count != new_count) { - lzma_free(mf->hash, allocator); - mf->hash = NULL; - } - - // Maximum number of match finder cycles - mf->depth = lz_options->depth; - if (mf->depth == 0) { - if (is_bt) - mf->depth = 16 + mf->nice_len / 2; - else - mf->depth = 4 + mf->nice_len / 4; - } - - return false; -} - - -static bool -lz_encoder_init(lzma_mf *mf, lzma_allocator *allocator, - const lzma_lz_options *lz_options) -{ - // Allocate the history buffer. - if (mf->buffer == NULL) { - mf->buffer = lzma_alloc(mf->size, allocator); - if (mf->buffer == NULL) - return true; - } - - // Use cyclic_size as initial mf->offset. This allows - // avoiding a few branches in the match finders. The downside is - // that match finder needs to be normalized more often, which may - // hurt performance with huge dictionaries. - mf->offset = mf->cyclic_size; - mf->read_pos = 0; - mf->read_ahead = 0; - mf->read_limit = 0; - mf->write_pos = 0; - mf->pending = 0; - - // Allocate match finder's hash array. - const size_t alloc_count = mf->hash_size_sum + mf->sons_count; - -#if UINT32_MAX >= SIZE_MAX / 4 - // Check for integer overflow. (Huge dictionaries are not - // possible on 32-bit CPU.) - if (alloc_count > SIZE_MAX / sizeof(uint32_t)) - return true; -#endif - - if (mf->hash == NULL) { - mf->hash = lzma_alloc(alloc_count * sizeof(uint32_t), - allocator); - if (mf->hash == NULL) - return true; - } - - mf->son = mf->hash + mf->hash_size_sum; - mf->cyclic_pos = 0; - - // Initialize the hash table. Since EMPTY_HASH_VALUE is zero, we - // can use memset(). -/* - for (uint32_t i = 0; i < hash_size_sum; ++i) - mf->hash[i] = EMPTY_HASH_VALUE; -*/ - memzero(mf->hash, (size_t)(mf->hash_size_sum) * sizeof(uint32_t)); - - // We don't need to initialize mf->son, but not doing that will - // make Valgrind complain in normalization (see normalize() in - // lz_encoder_mf.c). - // - // Skipping this initialization is *very* good when big dictionary is - // used but only small amount of data gets actually compressed: most - // of the mf->hash won't get actually allocated by the kernel, so - // we avoid wasting RAM and improve initialization speed a lot. - //memzero(mf->son, (size_t)(mf->sons_count) * sizeof(uint32_t)); - - // Handle preset dictionary. - if (lz_options->preset_dict != NULL - && lz_options->preset_dict_size > 0) { - // If the preset dictionary is bigger than the actual - // dictionary, use only the tail. - mf->write_pos = my_min(lz_options->preset_dict_size, mf->size); - memcpy(mf->buffer, lz_options->preset_dict - + lz_options->preset_dict_size - mf->write_pos, - mf->write_pos); - mf->action = LZMA_SYNC_FLUSH; - mf->skip(mf, mf->write_pos); - } - - mf->action = LZMA_RUN; - - return false; -} - - -extern uint64_t -lzma_lz_encoder_memusage(const lzma_lz_options *lz_options) -{ - // Old buffers must not exist when calling lz_encoder_prepare(). - lzma_mf mf = { - .buffer = NULL, - .hash = NULL, - .hash_size_sum = 0, - .sons_count = 0, - }; - - // Setup the size information into mf. - if (lz_encoder_prepare(&mf, NULL, lz_options)) - return UINT64_MAX; - - // Calculate the memory usage. - return (uint64_t)(mf.hash_size_sum + mf.sons_count) - * sizeof(uint32_t) - + (uint64_t)(mf.size) + sizeof(lzma_coder); -} - - -static void -lz_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - - lzma_free(coder->mf.hash, allocator); - lzma_free(coder->mf.buffer, allocator); - - if (coder->lz.end != NULL) - coder->lz.end(coder->lz.coder, allocator); - else - lzma_free(coder->lz.coder, allocator); - - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -lz_encoder_update(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters_null lzma_attribute((__unused__)), - const lzma_filter *reversed_filters) -{ - if (coder->lz.options_update == NULL) - return LZMA_PROG_ERROR; - - return_if_error(coder->lz.options_update( - coder->lz.coder, reversed_filters)); - - return lzma_next_filter_update( - &coder->next, allocator, reversed_filters + 1); -} - - -extern lzma_ret -lzma_lz_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_encoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)) -{ -#ifdef HAVE_SMALL - // We need that the CRC32 table has been initialized. - lzma_crc32_init(); -#endif - - // Allocate and initialize the base data structure. - if (next->coder == NULL) { - next->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &lz_encode; - next->end = &lz_encoder_end; - next->update = &lz_encoder_update; - - next->coder->lz.coder = NULL; - next->coder->lz.code = NULL; - next->coder->lz.end = NULL; - - next->coder->mf.buffer = NULL; - next->coder->mf.hash = NULL; - next->coder->mf.hash_size_sum = 0; - next->coder->mf.sons_count = 0; - - next->coder->next = LZMA_NEXT_CODER_INIT; - } - - // Initialize the LZ-based encoder. - lzma_lz_options lz_options; - return_if_error(lz_init(&next->coder->lz, allocator, - filters[0].options, &lz_options)); - - // Setup the size information into next->coder->mf and deallocate - // old buffers if they have wrong size. - if (lz_encoder_prepare(&next->coder->mf, allocator, &lz_options)) - return LZMA_OPTIONS_ERROR; - - // Allocate new buffers if needed, and do the rest of - // the initialization. - if (lz_encoder_init(&next->coder->mf, allocator, &lz_options)) - return LZMA_MEM_ERROR; - - // Initialize the next filter in the chain, if any. - return lzma_next_filter_init(&next->coder->next, allocator, - filters + 1); -} - - -extern LZMA_API(lzma_bool) -lzma_mf_is_supported(lzma_match_finder mf) -{ - bool ret = false; - -#ifdef HAVE_MF_HC3 - if (mf == LZMA_MF_HC3) - ret = true; -#endif - -#ifdef HAVE_MF_HC4 - if (mf == LZMA_MF_HC4) - ret = true; -#endif - -#ifdef HAVE_MF_BT2 - if (mf == LZMA_MF_BT2) - ret = true; -#endif - -#ifdef HAVE_MF_BT3 - if (mf == LZMA_MF_BT3) - ret = true; -#endif - -#ifdef HAVE_MF_BT4 - if (mf == LZMA_MF_BT4) - ret = true; -#endif - - return ret; -} diff --git a/deps/lzma/liblzma/lz/lz_encoder.h b/deps/lzma/liblzma/lz/lz_encoder.h deleted file mode 100644 index 741c4532280de8..00000000000000 --- a/deps/lzma/liblzma/lz/lz_encoder.h +++ /dev/null @@ -1,328 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder.h -/// \brief LZ in window and match finder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_ENCODER_H -#define LZMA_LZ_ENCODER_H - -#include "common.h" - - -/// A table of these is used by the LZ-based encoder to hold -/// the length-distance pairs found by the match finder. -typedef struct { - uint32_t len; - uint32_t dist; -} lzma_match; - - -typedef struct lzma_mf_s lzma_mf; -struct lzma_mf_s { - /////////////// - // In Window // - /////////////// - - /// Pointer to buffer with data to be compressed - uint8_t *buffer; - - /// Total size of the allocated buffer (that is, including all - /// the extra space) - uint32_t size; - - /// Number of bytes that must be kept available in our input history. - /// That is, once keep_size_before bytes have been processed, - /// buffer[read_pos - keep_size_before] is the oldest byte that - /// must be available for reading. - uint32_t keep_size_before; - - /// Number of bytes that must be kept in buffer after read_pos. - /// That is, read_pos <= write_pos - keep_size_after as long as - /// action is LZMA_RUN; when action != LZMA_RUN, read_pos is allowed - /// to reach write_pos so that the last bytes get encoded too. - uint32_t keep_size_after; - - /// Match finders store locations of matches using 32-bit integers. - /// To avoid adjusting several megabytes of integers every time the - /// input window is moved with move_window, we only adjust the - /// offset of the buffer. Thus, buffer[value_in_hash_table - offset] - /// is the byte pointed by value_in_hash_table. - uint32_t offset; - - /// buffer[read_pos] is the next byte to run through the match - /// finder. This is incremented in the match finder once the byte - /// has been processed. - uint32_t read_pos; - - /// Number of bytes that have been ran through the match finder, but - /// which haven't been encoded by the LZ-based encoder yet. - uint32_t read_ahead; - - /// As long as read_pos is less than read_limit, there is enough - /// input available in buffer for at least one encoding loop. - /// - /// Because of the stateful API, read_limit may and will get greater - /// than read_pos quite often. This is taken into account when - /// calculating the value for keep_size_after. - uint32_t read_limit; - - /// buffer[write_pos] is the first byte that doesn't contain valid - /// uncompressed data; that is, the next input byte will be copied - /// to buffer[write_pos]. - uint32_t write_pos; - - /// Number of bytes not hashed before read_pos. This is needed to - /// restart the match finder after LZMA_SYNC_FLUSH. - uint32_t pending; - - ////////////////// - // Match Finder // - ////////////////// - - /// Find matches. Returns the number of distance-length pairs written - /// to the matches array. This is called only via lzma_mf_find(). - uint32_t (*find)(lzma_mf *mf, lzma_match *matches); - - /// Skips num bytes. This is like find() but doesn't make the - /// distance-length pairs available, thus being a little faster. - /// This is called only via mf_skip(). - void (*skip)(lzma_mf *mf, uint32_t num); - - uint32_t *hash; - uint32_t *son; - uint32_t cyclic_pos; - uint32_t cyclic_size; // Must be dictionary size + 1. - uint32_t hash_mask; - - /// Maximum number of loops in the match finder - uint32_t depth; - - /// Maximum length of a match that the match finder will try to find. - uint32_t nice_len; - - /// Maximum length of a match supported by the LZ-based encoder. - /// If the longest match found by the match finder is nice_len, - /// mf_find() tries to expand it up to match_len_max bytes. - uint32_t match_len_max; - - /// When running out of input, binary tree match finders need to know - /// if it is due to flushing or finishing. The action is used also - /// by the LZ-based encoders themselves. - lzma_action action; - - /// Number of elements in hash[] - uint32_t hash_size_sum; - - /// Number of elements in son[] - uint32_t sons_count; -}; - - -typedef struct { - /// Extra amount of data to keep available before the "actual" - /// dictionary. - size_t before_size; - - /// Size of the history buffer - size_t dict_size; - - /// Extra amount of data to keep available after the "actual" - /// dictionary. - size_t after_size; - - /// Maximum length of a match that the LZ-based encoder can accept. - /// This is used to extend matches of length nice_len to the - /// maximum possible length. - size_t match_len_max; - - /// Match finder will search matches up to this length. - /// This must be less than or equal to match_len_max. - size_t nice_len; - - /// Type of the match finder to use - lzma_match_finder match_finder; - - /// Maximum search depth - uint32_t depth; - - /// TODO: Comment - const uint8_t *preset_dict; - - uint32_t preset_dict_size; - -} lzma_lz_options; - - -// The total usable buffer space at any moment outside the match finder: -// before_size + dict_size + after_size + match_len_max -// -// In reality, there's some extra space allocated to prevent the number of -// memmove() calls reasonable. The bigger the dict_size is, the bigger -// this extra buffer will be since with bigger dictionaries memmove() would -// also take longer. -// -// A single encoder loop in the LZ-based encoder may call the match finder -// (mf_find() or mf_skip()) at most after_size times. In other words, -// a single encoder loop may increment lzma_mf.read_pos at most after_size -// times. Since matches are looked up to -// lzma_mf.buffer[lzma_mf.read_pos + match_len_max - 1], the total -// amount of extra buffer needed after dict_size becomes -// after_size + match_len_max. -// -// before_size has two uses. The first one is to keep literals available -// in cases when the LZ-based encoder has made some read ahead. -// TODO: Maybe this could be changed by making the LZ-based encoders to -// store the actual literals as they do with length-distance pairs. -// -// Algorithms such as LZMA2 first try to compress a chunk, and then check -// if the encoded result is smaller than the uncompressed one. If the chunk -// was uncompressible, it is better to store it in uncompressed form in -// the output stream. To do this, the whole uncompressed chunk has to be -// still available in the history buffer. before_size achieves that. - - -typedef struct { - /// Data specific to the LZ-based encoder - lzma_coder *coder; - - /// Function to encode from *dict to out[] - lzma_ret (*code)(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size); - - /// Free allocated resources - void (*end)(lzma_coder *coder, lzma_allocator *allocator); - - /// Update the options in the middle of the encoding. - lzma_ret (*options_update)(lzma_coder *coder, - const lzma_filter *filter); - -} lzma_lz_encoder; - - -// Basic steps: -// 1. Input gets copied into the dictionary. -// 2. Data in dictionary gets run through the match finder byte by byte. -// 3. The literals and matches are encoded using e.g. LZMA. -// -// The bytes that have been ran through the match finder, but not encoded yet, -// are called `read ahead'. - - -/// Get pointer to the first byte not ran through the match finder -static inline const uint8_t * -mf_ptr(const lzma_mf *mf) -{ - return mf->buffer + mf->read_pos; -} - - -/// Get the number of bytes that haven't been ran through the match finder yet. -static inline uint32_t -mf_avail(const lzma_mf *mf) -{ - return mf->write_pos - mf->read_pos; -} - - -/// Get the number of bytes that haven't been encoded yet (some of these -/// bytes may have been ran through the match finder though). -static inline uint32_t -mf_unencoded(const lzma_mf *mf) -{ - return mf->write_pos - mf->read_pos + mf->read_ahead; -} - - -/// Calculate the absolute offset from the beginning of the most recent -/// dictionary reset. Only the lowest four bits are important, so there's no -/// problem that we don't know the 64-bit size of the data encoded so far. -/// -/// NOTE: When moving the input window, we need to do it so that the lowest -/// bits of dict->read_pos are not modified to keep this macro working -/// as intended. -static inline uint32_t -mf_position(const lzma_mf *mf) -{ - return mf->read_pos - mf->read_ahead; -} - - -/// Since everything else begins with mf_, use it also for lzma_mf_find(). -#define mf_find lzma_mf_find - - -/// Skip the given number of bytes. This is used when a good match was found. -/// For example, if mf_find() finds a match of 200 bytes long, the first byte -/// of that match was already consumed by mf_find(), and the rest 199 bytes -/// have to be skipped with mf_skip(mf, 199). -static inline void -mf_skip(lzma_mf *mf, uint32_t amount) -{ - if (amount != 0) { - mf->skip(mf, amount); - mf->read_ahead += amount; - } -} - - -/// Copies at most *left number of bytes from the history buffer -/// to out[]. This is needed by LZMA2 to encode uncompressed chunks. -static inline void -mf_read(lzma_mf *mf, uint8_t *out, size_t *out_pos, size_t out_size, - size_t *left) -{ - const size_t out_avail = out_size - *out_pos; - const size_t copy_size = my_min(out_avail, *left); - - assert(mf->read_ahead == 0); - assert(mf->read_pos >= *left); - - memcpy(out + *out_pos, mf->buffer + mf->read_pos - *left, - copy_size); - - *out_pos += copy_size; - *left -= copy_size; - return; -} - - -extern lzma_ret lzma_lz_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - lzma_ret (*lz_init)(lzma_lz_encoder *lz, - lzma_allocator *allocator, const void *options, - lzma_lz_options *lz_options)); - - -extern uint64_t lzma_lz_encoder_memusage(const lzma_lz_options *lz_options); - - -// These are only for LZ encoder's internal use. -extern uint32_t lzma_mf_find( - lzma_mf *mf, uint32_t *count, lzma_match *matches); - -extern uint32_t lzma_mf_hc3_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_hc3_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_hc4_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_hc4_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt2_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt2_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt3_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt3_skip(lzma_mf *dict, uint32_t amount); - -extern uint32_t lzma_mf_bt4_find(lzma_mf *dict, lzma_match *matches); -extern void lzma_mf_bt4_skip(lzma_mf *dict, uint32_t amount); - -#endif diff --git a/deps/lzma/liblzma/lz/lz_encoder_hash.h b/deps/lzma/liblzma/lz/lz_encoder_hash.h deleted file mode 100644 index 342a333d16823a..00000000000000 --- a/deps/lzma/liblzma/lz/lz_encoder_hash.h +++ /dev/null @@ -1,108 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder_hash.h -/// \brief Hash macros for match finders -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZ_ENCODER_HASH_H -#define LZMA_LZ_ENCODER_HASH_H - -#if defined(WORDS_BIGENDIAN) && !defined(HAVE_SMALL) - // This is to make liblzma produce the same output on big endian - // systems that it does on little endian systems. lz_encoder.c - // takes care of including the actual table. - extern const uint32_t lzma_lz_hash_table[256]; -# define hash_table lzma_lz_hash_table -#else -# include "check.h" -# define hash_table lzma_crc32_table[0] -#endif - -#define HASH_2_SIZE (UINT32_C(1) << 10) -#define HASH_3_SIZE (UINT32_C(1) << 16) -#define HASH_4_SIZE (UINT32_C(1) << 20) - -#define HASH_2_MASK (HASH_2_SIZE - 1) -#define HASH_3_MASK (HASH_3_SIZE - 1) -#define HASH_4_MASK (HASH_4_SIZE - 1) - -#define FIX_3_HASH_SIZE (HASH_2_SIZE) -#define FIX_4_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE) -#define FIX_5_HASH_SIZE (HASH_2_SIZE + HASH_3_SIZE + HASH_4_SIZE) - -// Endianness doesn't matter in hash_2_calc() (no effect on the output). -#ifdef TUKLIB_FAST_UNALIGNED_ACCESS -# define hash_2_calc() \ - const uint32_t hash_value = *(const uint16_t *)(cur) -#else -# define hash_2_calc() \ - const uint32_t hash_value \ - = (uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8) -#endif - -#define hash_3_calc() \ - const uint32_t temp = hash_table[cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & mf->hash_mask - -#define hash_4_calc() \ - const uint32_t temp = hash_table[cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - const uint32_t hash_value = (temp ^ ((uint32_t)(cur[2]) << 8) \ - ^ (hash_table[cur[3]] << 5)) & mf->hash_mask - - -// The following are not currently used. - -#define hash_5_calc() \ - const uint32_t temp = hash_table[cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ - ^ hash_table[cur[3]] << 5); \ - const uint32_t hash_value \ - = (hash_4_value ^ (hash_table[cur[4]] << 3)) \ - & mf->hash_mask; \ - hash_4_value &= HASH_4_MASK - -/* -#define hash_zip_calc() \ - const uint32_t hash_value \ - = (((uint32_t)(cur[0]) | ((uint32_t)(cur[1]) << 8)) \ - ^ hash_table[cur[2]]) & 0xFFFF -*/ - -#define hash_zip_calc() \ - const uint32_t hash_value \ - = (((uint32_t)(cur[2]) | ((uint32_t)(cur[0]) << 8)) \ - ^ hash_table[cur[1]]) & 0xFFFF - -#define mt_hash_2_calc() \ - const uint32_t hash_2_value \ - = (hash_table[cur[0]] ^ cur[1]) & HASH_2_MASK - -#define mt_hash_3_calc() \ - const uint32_t temp = hash_table[cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK - -#define mt_hash_4_calc() \ - const uint32_t temp = hash_table[cur[0]] ^ cur[1]; \ - const uint32_t hash_2_value = temp & HASH_2_MASK; \ - const uint32_t hash_3_value \ - = (temp ^ ((uint32_t)(cur[2]) << 8)) & HASH_3_MASK; \ - const uint32_t hash_4_value = (temp ^ ((uint32_t)(cur[2]) << 8) ^ \ - (hash_table[cur[3]] << 5)) & HASH_4_MASK - -#endif diff --git a/deps/lzma/liblzma/lz/lz_encoder_hash_table.h b/deps/lzma/liblzma/lz/lz_encoder_hash_table.h deleted file mode 100644 index 8c51717d704fe5..00000000000000 --- a/deps/lzma/liblzma/lz/lz_encoder_hash_table.h +++ /dev/null @@ -1,68 +0,0 @@ -/* This file has been automatically generated by crc32_tablegen.c. */ - -const uint32_t lzma_lz_hash_table[256] = { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, - 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, - 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, - 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, - 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, - 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, - 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, - 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, - 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, - 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, - 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, - 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, - 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, - 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, - 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, - 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, - 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, - 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, - 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, - 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, - 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, - 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, - 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, - 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, - 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, - 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, - 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, - 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, - 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D -}; diff --git a/deps/lzma/liblzma/lz/lz_encoder_mf.c b/deps/lzma/liblzma/lz/lz_encoder_mf.c deleted file mode 100644 index f82a1c1d295976..00000000000000 --- a/deps/lzma/liblzma/lz/lz_encoder_mf.c +++ /dev/null @@ -1,753 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lz_encoder_mf.c -/// \brief Match finders -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lz_encoder_hash.h" - - -/// \brief Find matches starting from the current byte -/// -/// \return The length of the longest match found -extern uint32_t -lzma_mf_find(lzma_mf *mf, uint32_t *count_ptr, lzma_match *matches) -{ - // Call the match finder. It returns the number of length-distance - // pairs found. - // FIXME: Minimum count is zero, what _exactly_ is the maximum? - const uint32_t count = mf->find(mf, matches); - - // Length of the longest match; assume that no matches were found - // and thus the maximum length is zero. - uint32_t len_best = 0; - - if (count > 0) { -#ifndef NDEBUG - // Validate the matches. - for (uint32_t i = 0; i < count; ++i) { - assert(matches[i].len <= mf->nice_len); - assert(matches[i].dist < mf->read_pos); - assert(memcmp(mf_ptr(mf) - 1, - mf_ptr(mf) - matches[i].dist - 2, - matches[i].len) == 0); - } -#endif - - // The last used element in the array contains - // the longest match. - len_best = matches[count - 1].len; - - // If a match of maximum search length was found, try to - // extend the match to maximum possible length. - if (len_best == mf->nice_len) { - // The limit for the match length is either the - // maximum match length supported by the LZ-based - // encoder or the number of bytes left in the - // dictionary, whichever is smaller. - uint32_t limit = mf_avail(mf) + 1; - if (limit > mf->match_len_max) - limit = mf->match_len_max; - - // Pointer to the byte we just ran through - // the match finder. - const uint8_t *p1 = mf_ptr(mf) - 1; - - // Pointer to the beginning of the match. We need -1 - // here because the match distances are zero based. - const uint8_t *p2 = p1 - matches[count - 1].dist - 1; - - while (len_best < limit - && p1[len_best] == p2[len_best]) - ++len_best; - } - } - - *count_ptr = count; - - // Finally update the read position to indicate that match finder was - // run for this dictionary offset. - ++mf->read_ahead; - - return len_best; -} - - -/// Hash value to indicate unused element in the hash. Since we start the -/// positions from dict_size + 1, zero is always too far to qualify -/// as usable match position. -#define EMPTY_HASH_VALUE 0 - - -/// Normalization must be done when lzma_mf.offset + lzma_mf.read_pos -/// reaches MUST_NORMALIZE_POS. -#define MUST_NORMALIZE_POS UINT32_MAX - - -/// \brief Normalizes hash values -/// -/// The hash arrays store positions of match candidates. The positions are -/// relative to an arbitrary offset that is not the same as the absolute -/// offset in the input stream. The relative position of the current byte -/// is lzma_mf.offset + lzma_mf.read_pos. The distances of the matches are -/// the differences of the current read position and the position found from -/// the hash. -/// -/// To prevent integer overflows of the offsets stored in the hash arrays, -/// we need to "normalize" the stored values now and then. During the -/// normalization, we drop values that indicate distance greater than the -/// dictionary size, thus making space for new values. -static void -normalize(lzma_mf *mf) -{ - assert(mf->read_pos + mf->offset == MUST_NORMALIZE_POS); - - // In future we may not want to touch the lowest bits, because there - // may be match finders that use larger resolution than one byte. - const uint32_t subvalue - = (MUST_NORMALIZE_POS - mf->cyclic_size); - // & (~(UINT32_C(1) << 10) - 1); - - const uint32_t count = mf->hash_size_sum + mf->sons_count; - uint32_t *hash = mf->hash; - - for (uint32_t i = 0; i < count; ++i) { - // If the distance is greater than the dictionary size, - // we can simply mark the hash element as empty. - // - // NOTE: Only the first mf->hash_size_sum elements are - // initialized for sure. There may be uninitialized elements - // in mf->son. Since we go through both mf->hash and - // mf->son here in normalization, Valgrind may complain - // that the "if" below depends on uninitialized value. In - // this case it is safe to ignore the warning. See also the - // comments in lz_encoder_init() in lz_encoder.c. - if (hash[i] <= subvalue) - hash[i] = EMPTY_HASH_VALUE; - else - hash[i] -= subvalue; - } - - // Update offset to match the new locations. - mf->offset -= subvalue; - - return; -} - - -/// Mark the current byte as processed from point of view of the match finder. -static void -move_pos(lzma_mf *mf) -{ - if (++mf->cyclic_pos == mf->cyclic_size) - mf->cyclic_pos = 0; - - ++mf->read_pos; - assert(mf->read_pos <= mf->write_pos); - - if (unlikely(mf->read_pos + mf->offset == UINT32_MAX)) - normalize(mf); -} - - -/// When flushing, we cannot run the match finder unless there is nice_len -/// bytes available in the dictionary. Instead, we skip running the match -/// finder (indicating that no match was found), and count how many bytes we -/// have ignored this way. -/// -/// When new data is given after the flushing was completed, the match finder -/// is restarted by rewinding mf->read_pos backwards by mf->pending. Then -/// the missed bytes are added to the hash using the match finder's skip -/// function (with small amount of input, it may start using mf->pending -/// again if flushing). -/// -/// Due to this rewinding, we don't touch cyclic_pos or test for -/// normalization. It will be done when the match finder's skip function -/// catches up after a flush. -static void -move_pending(lzma_mf *mf) -{ - ++mf->read_pos; - assert(mf->read_pos <= mf->write_pos); - ++mf->pending; -} - - -/// Calculate len_limit and determine if there is enough input to run -/// the actual match finder code. Sets up "cur" and "pos". This macro -/// is used by all find functions and binary tree skip functions. Hash -/// chain skip function doesn't need len_limit so a simpler code is used -/// in them. -#define header(is_bt, len_min, ret_op) \ - uint32_t len_limit = mf_avail(mf); \ - if (mf->nice_len <= len_limit) { \ - len_limit = mf->nice_len; \ - } else if (len_limit < (len_min) \ - || (is_bt && mf->action == LZMA_SYNC_FLUSH)) { \ - assert(mf->action != LZMA_RUN); \ - move_pending(mf); \ - ret_op; \ - } \ - const uint8_t *cur = mf_ptr(mf); \ - const uint32_t pos = mf->read_pos + mf->offset - - -/// Header for find functions. "return 0" indicates that zero matches -/// were found. -#define header_find(is_bt, len_min) \ - header(is_bt, len_min, return 0); \ - uint32_t matches_count = 0 - - -/// Header for a loop in a skip function. "continue" tells to skip the rest -/// of the code in the loop. -#define header_skip(is_bt, len_min) \ - header(is_bt, len_min, continue) - - -/// Calls hc_find_func() or bt_find_func() and calculates the total number -/// of matches found. Updates the dictionary position and returns the number -/// of matches found. -#define call_find(func, len_best) \ -do { \ - matches_count = func(len_limit, pos, cur, cur_match, mf->depth, \ - mf->son, mf->cyclic_pos, mf->cyclic_size, \ - matches + matches_count, len_best) \ - - matches; \ - move_pos(mf); \ - return matches_count; \ -} while (0) - - -//////////////// -// Hash Chain // -//////////////// - -#if defined(HAVE_MF_HC3) || defined(HAVE_MF_HC4) -/// -/// -/// \param len_limit Don't look for matches longer than len_limit. -/// \param pos lzma_mf.read_pos + lzma_mf.offset -/// \param cur Pointer to current byte (mf_ptr(mf)) -/// \param cur_match Start position of the current match candidate -/// \param depth Maximum length of the hash chain -/// \param son lzma_mf.son (contains the hash chain) -/// \param cyclic_pos -/// \param cyclic_size -/// \param matches Array to hold the matches. -/// \param len_best The length of the longest match found so far. -static lzma_match * -hc_find_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size, - lzma_match *matches, - uint32_t len_best) -{ - son[cyclic_pos] = cur_match; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) - return matches; - - const uint8_t *const pb = cur - delta; - cur_match = son[cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)]; - - if (pb[len_best] == cur[len_best] && pb[0] == cur[0]) { - uint32_t len = 0; - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len_best < len) { - len_best = len; - matches->len = len; - matches->dist = delta - 1; - ++matches; - - if (len == len_limit) - return matches; - } - } - } -} - - -#define hc_find(len_best) \ - call_find(hc_find_func, len_best) - - -#define hc_skip() \ -do { \ - mf->son[mf->cyclic_pos] = cur_match; \ - move_pos(mf); \ -} while (0) - -#endif - - -#ifdef HAVE_MF_HC3 -extern uint32_t -lzma_mf_hc3_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(false, 3); - - hash_3_calc(); - - const uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 2; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[0].len = len_best; - matches[0].dist = delta2 - 1; - matches_count = 1; - - if (len_best == len_limit) { - hc_skip(); - return 1; // matches_count - } - } - - hc_find(len_best); -} - - -extern void -lzma_mf_hc3_skip(lzma_mf *mf, uint32_t amount) -{ - do { - if (mf_avail(mf) < 3) { - move_pending(mf); - continue; - } - - const uint8_t *cur = mf_ptr(mf); - const uint32_t pos = mf->read_pos + mf->offset; - - hash_3_calc(); - - const uint32_t cur_match - = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - hc_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_HC4 -extern uint32_t -lzma_mf_hc4_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(false, 4); - - hash_4_calc(); - - uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t delta3 - = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; - const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value ] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 1; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - len_best = 2; - matches[0].len = 2; - matches[0].dist = delta2 - 1; - matches_count = 1; - } - - if (delta2 != delta3 && delta3 < mf->cyclic_size - && *(cur - delta3) == *cur) { - len_best = 3; - matches[matches_count++].dist = delta3 - 1; - delta2 = delta3; - } - - if (matches_count != 0) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[matches_count - 1].len = len_best; - - if (len_best == len_limit) { - hc_skip(); - return matches_count; - } - } - - if (len_best < 3) - len_best = 3; - - hc_find(len_best); -} - - -extern void -lzma_mf_hc4_skip(lzma_mf *mf, uint32_t amount) -{ - do { - if (mf_avail(mf) < 4) { - move_pending(mf); - continue; - } - - const uint8_t *cur = mf_ptr(mf); - const uint32_t pos = mf->read_pos + mf->offset; - - hash_4_calc(); - - const uint32_t cur_match - = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - hc_skip(); - - } while (--amount != 0); -} -#endif - - -///////////////// -// Binary Tree // -///////////////// - -#if defined(HAVE_MF_BT2) || defined(HAVE_MF_BT3) || defined(HAVE_MF_BT4) -static lzma_match * -bt_find_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size, - lzma_match *matches, - uint32_t len_best) -{ - uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; - uint32_t *ptr1 = son + (cyclic_pos << 1); - - uint32_t len0 = 0; - uint32_t len1 = 0; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) { - *ptr0 = EMPTY_HASH_VALUE; - *ptr1 = EMPTY_HASH_VALUE; - return matches; - } - - uint32_t *const pair = son + ((cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)) - << 1); - - const uint8_t *const pb = cur - delta; - uint32_t len = my_min(len0, len1); - - if (pb[len] == cur[len]) { - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len_best < len) { - len_best = len; - matches->len = len; - matches->dist = delta - 1; - ++matches; - - if (len == len_limit) { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return matches; - } - } - } - - if (pb[len] < cur[len]) { - *ptr1 = cur_match; - ptr1 = pair + 1; - cur_match = *ptr1; - len1 = len; - } else { - *ptr0 = cur_match; - ptr0 = pair; - cur_match = *ptr0; - len0 = len; - } - } -} - - -static void -bt_skip_func( - const uint32_t len_limit, - const uint32_t pos, - const uint8_t *const cur, - uint32_t cur_match, - uint32_t depth, - uint32_t *const son, - const uint32_t cyclic_pos, - const uint32_t cyclic_size) -{ - uint32_t *ptr0 = son + (cyclic_pos << 1) + 1; - uint32_t *ptr1 = son + (cyclic_pos << 1); - - uint32_t len0 = 0; - uint32_t len1 = 0; - - while (true) { - const uint32_t delta = pos - cur_match; - if (depth-- == 0 || delta >= cyclic_size) { - *ptr0 = EMPTY_HASH_VALUE; - *ptr1 = EMPTY_HASH_VALUE; - return; - } - - uint32_t *pair = son + ((cyclic_pos - delta - + (delta > cyclic_pos ? cyclic_size : 0)) - << 1); - const uint8_t *pb = cur - delta; - uint32_t len = my_min(len0, len1); - - if (pb[len] == cur[len]) { - while (++len != len_limit) - if (pb[len] != cur[len]) - break; - - if (len == len_limit) { - *ptr1 = pair[0]; - *ptr0 = pair[1]; - return; - } - } - - if (pb[len] < cur[len]) { - *ptr1 = cur_match; - ptr1 = pair + 1; - cur_match = *ptr1; - len1 = len; - } else { - *ptr0 = cur_match; - ptr0 = pair; - cur_match = *ptr0; - len0 = len; - } - } -} - - -#define bt_find(len_best) \ - call_find(bt_find_func, len_best) - -#define bt_skip() \ -do { \ - bt_skip_func(len_limit, pos, cur, cur_match, mf->depth, \ - mf->son, mf->cyclic_pos, \ - mf->cyclic_size); \ - move_pos(mf); \ -} while (0) - -#endif - - -#ifdef HAVE_MF_BT2 -extern uint32_t -lzma_mf_bt2_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 2); - - hash_2_calc(); - - const uint32_t cur_match = mf->hash[hash_value]; - mf->hash[hash_value] = pos; - - bt_find(1); -} - - -extern void -lzma_mf_bt2_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 2); - - hash_2_calc(); - - const uint32_t cur_match = mf->hash[hash_value]; - mf->hash[hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_BT3 -extern uint32_t -lzma_mf_bt3_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 3); - - hash_3_calc(); - - const uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t cur_match = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 2; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[0].len = len_best; - matches[0].dist = delta2 - 1; - matches_count = 1; - - if (len_best == len_limit) { - bt_skip(); - return 1; // matches_count - } - } - - bt_find(len_best); -} - - -extern void -lzma_mf_bt3_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 3); - - hash_3_calc(); - - const uint32_t cur_match - = mf->hash[FIX_3_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif - - -#ifdef HAVE_MF_BT4 -extern uint32_t -lzma_mf_bt4_find(lzma_mf *mf, lzma_match *matches) -{ - header_find(true, 4); - - hash_4_calc(); - - uint32_t delta2 = pos - mf->hash[hash_2_value]; - const uint32_t delta3 - = pos - mf->hash[FIX_3_HASH_SIZE + hash_3_value]; - const uint32_t cur_match = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - uint32_t len_best = 1; - - if (delta2 < mf->cyclic_size && *(cur - delta2) == *cur) { - len_best = 2; - matches[0].len = 2; - matches[0].dist = delta2 - 1; - matches_count = 1; - } - - if (delta2 != delta3 && delta3 < mf->cyclic_size - && *(cur - delta3) == *cur) { - len_best = 3; - matches[matches_count++].dist = delta3 - 1; - delta2 = delta3; - } - - if (matches_count != 0) { - for ( ; len_best != len_limit; ++len_best) - if (*(cur + len_best - delta2) != cur[len_best]) - break; - - matches[matches_count - 1].len = len_best; - - if (len_best == len_limit) { - bt_skip(); - return matches_count; - } - } - - if (len_best < 3) - len_best = 3; - - bt_find(len_best); -} - - -extern void -lzma_mf_bt4_skip(lzma_mf *mf, uint32_t amount) -{ - do { - header_skip(true, 4); - - hash_4_calc(); - - const uint32_t cur_match - = mf->hash[FIX_4_HASH_SIZE + hash_value]; - - mf->hash[hash_2_value] = pos; - mf->hash[FIX_3_HASH_SIZE + hash_3_value] = pos; - mf->hash[FIX_4_HASH_SIZE + hash_value] = pos; - - bt_skip(); - - } while (--amount != 0); -} -#endif diff --git a/deps/lzma/liblzma/lzma/fastpos.h b/deps/lzma/liblzma/lzma/fastpos.h deleted file mode 100644 index 4aea23181ab65b..00000000000000 --- a/deps/lzma/liblzma/lzma/fastpos.h +++ /dev/null @@ -1,140 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file fastpos.h -/// \brief Kind of two-bit version of bit scan reverse -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_FASTPOS_H -#define LZMA_FASTPOS_H - -// LZMA encodes match distances (positions) by storing the highest two -// bits using a six-bit value [0, 63], and then the missing lower bits. -// Dictionary size is also stored using this encoding in the new .lzma -// file format header. -// -// fastpos.h provides a way to quickly find out the correct six-bit -// values. The following table gives some examples of this encoding: -// -// pos return -// 0 0 -// 1 1 -// 2 2 -// 3 3 -// 4 4 -// 5 4 -// 6 5 -// 7 5 -// 8 6 -// 11 6 -// 12 7 -// ... ... -// 15 7 -// 16 8 -// 17 8 -// ... ... -// 23 8 -// 24 9 -// 25 9 -// ... ... -// -// -// Provided functions or macros -// ---------------------------- -// -// get_pos_slot(pos) is the basic version. get_pos_slot_2(pos) -// assumes that pos >= FULL_DISTANCES, thus the result is at least -// FULL_DISTANCES_BITS * 2. Using get_pos_slot(pos) instead of -// get_pos_slot_2(pos) would give the same result, but get_pos_slot_2(pos) -// should be tiny bit faster due to the assumption being made. -// -// -// Size vs. speed -// -------------- -// -// With some CPUs that have fast BSR (bit scan reverse) instruction, the -// size optimized version is slightly faster than the bigger table based -// approach. Such CPUs include Intel Pentium Pro, Pentium II, Pentium III -// and Core 2 (possibly others). AMD K7 seems to have slower BSR, but that -// would still have speed roughly comparable to the table version. Older -// x86 CPUs like the original Pentium have very slow BSR; on those systems -// the table version is a lot faster. -// -// On some CPUs, the table version is a lot faster when using position -// dependent code, but with position independent code the size optimized -// version is slightly faster. This occurs at least on 32-bit SPARC (no -// ASM optimizations). -// -// I'm making the table version the default, because that has good speed -// on all systems I have tried. The size optimized version is sometimes -// slightly faster, but sometimes it is a lot slower. - -#ifdef HAVE_SMALL -# define get_pos_slot(pos) ((pos) <= 4 ? (pos) : get_pos_slot_2(pos)) - -static inline uint32_t -get_pos_slot_2(uint32_t pos) -{ - const uint32_t i = bsr32(pos); - return (i + i) + ((pos >> (i - 1)) & 1); -} - - -#else - -#define FASTPOS_BITS 13 - -extern const uint8_t lzma_fastpos[1 << FASTPOS_BITS]; - - -#define fastpos_shift(extra, n) \ - ((extra) + (n) * (FASTPOS_BITS - 1)) - -#define fastpos_limit(extra, n) \ - (UINT32_C(1) << (FASTPOS_BITS + fastpos_shift(extra, n))) - -#define fastpos_result(pos, extra, n) \ - lzma_fastpos[(pos) >> fastpos_shift(extra, n)] \ - + 2 * fastpos_shift(extra, n) - - -static inline uint32_t -get_pos_slot(uint32_t pos) -{ - // If it is small enough, we can pick the result directly from - // the precalculated table. - if (pos < fastpos_limit(0, 0)) - return lzma_fastpos[pos]; - - if (pos < fastpos_limit(0, 1)) - return fastpos_result(pos, 0, 1); - - return fastpos_result(pos, 0, 2); -} - - -#ifdef FULL_DISTANCES_BITS -static inline uint32_t -get_pos_slot_2(uint32_t pos) -{ - assert(pos >= FULL_DISTANCES); - - if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 0)) - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 0); - - if (pos < fastpos_limit(FULL_DISTANCES_BITS - 1, 1)) - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 1); - - return fastpos_result(pos, FULL_DISTANCES_BITS - 1, 2); -} -#endif - -#endif - -#endif diff --git a/deps/lzma/liblzma/lzma/fastpos_table.c b/deps/lzma/liblzma/lzma/fastpos_table.c deleted file mode 100644 index 6a3ceac0e90ac1..00000000000000 --- a/deps/lzma/liblzma/lzma/fastpos_table.c +++ /dev/null @@ -1,519 +0,0 @@ -/* This file has been automatically generated by fastpos_tablegen.c. */ - -#include "common.h" -#include "fastpos.h" - -const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25 -}; diff --git a/deps/lzma/liblzma/lzma/fastpos_tablegen.c b/deps/lzma/liblzma/lzma/fastpos_tablegen.c deleted file mode 100644 index c97e6f411c2774..00000000000000 --- a/deps/lzma/liblzma/lzma/fastpos_tablegen.c +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file fastpos_tablegen.c -/// \brief Generates the lzma_fastpos[] lookup table -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include "fastpos.h" - - -int -main(void) -{ - uint8_t fastpos[1 << FASTPOS_BITS]; - - const uint8_t fast_slots = 2 * FASTPOS_BITS; - uint32_t c = 2; - - fastpos[0] = 0; - fastpos[1] = 1; - - for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) { - const uint32_t k = 1 << ((slot_fast >> 1) - 1); - for (uint32_t j = 0; j < k; ++j, ++c) - fastpos[c] = slot_fast; - } - - printf("/* This file has been automatically generated " - "by fastpos_tablegen.c. */\n\n" - "#include \"common.h\"\n" - "#include \"fastpos.h\"\n\n" - "const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {"); - - for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) { - if (i % 16 == 0) - printf("\n\t"); - - printf("%3u", (unsigned int)(fastpos[i])); - - if (i != (1 << FASTPOS_BITS) - 1) - printf(","); - } - - printf("\n};\n"); - - return 0; -} diff --git a/deps/lzma/liblzma/lzma/lzma2_decoder.c b/deps/lzma/liblzma/lzma/lzma2_decoder.c deleted file mode 100644 index 3e42575d5b8071..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma2_decoder.c +++ /dev/null @@ -1,304 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_decoder.c -/// \brief LZMA2 decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma2_decoder.h" -#include "lz_decoder.h" -#include "lzma_decoder.h" - - -struct lzma_coder_s { - enum sequence { - SEQ_CONTROL, - SEQ_UNCOMPRESSED_1, - SEQ_UNCOMPRESSED_2, - SEQ_COMPRESSED_0, - SEQ_COMPRESSED_1, - SEQ_PROPERTIES, - SEQ_LZMA, - SEQ_COPY, - } sequence; - - /// Sequence after the size fields have been decoded. - enum sequence next_sequence; - - /// LZMA decoder - lzma_lz_decoder lzma; - - /// Uncompressed size of LZMA chunk - size_t uncompressed_size; - - /// Compressed size of the chunk (naturally equals to uncompressed - /// size of uncompressed chunk) - size_t compressed_size; - - /// True if properties are needed. This is false before the - /// first LZMA chunk. - bool need_properties; - - /// True if dictionary reset is needed. This is false before the - /// first chunk (LZMA or uncompressed). - bool need_dictionary_reset; - - lzma_options_lzma options; -}; - - -static lzma_ret -lzma2_decode(lzma_coder *restrict coder, lzma_dict *restrict dict, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size) -{ - // With SEQ_LZMA it is possible that no new input is needed to do - // some progress. The rest of the sequences assume that there is - // at least one byte of input. - while (*in_pos < in_size || coder->sequence == SEQ_LZMA) - switch (coder->sequence) { - case SEQ_CONTROL: { - const uint32_t control = in[*in_pos]; - ++*in_pos; - - // End marker - if (control == 0x00) - return LZMA_STREAM_END; - - if (control >= 0xE0 || control == 1) { - // Dictionary reset implies that next LZMA chunk has - // to set new properties. - coder->need_properties = true; - coder->need_dictionary_reset = true; - } else if (coder->need_dictionary_reset) { - return LZMA_DATA_ERROR; - } - - if (control >= 0x80) { - // LZMA chunk. The highest five bits of the - // uncompressed size are taken from the control byte. - coder->uncompressed_size = (control & 0x1F) << 16; - coder->sequence = SEQ_UNCOMPRESSED_1; - - // See if there are new properties or if we need to - // reset the state. - if (control >= 0xC0) { - // When there are new properties, state reset - // is done at SEQ_PROPERTIES. - coder->need_properties = false; - coder->next_sequence = SEQ_PROPERTIES; - - } else if (coder->need_properties) { - return LZMA_DATA_ERROR; - - } else { - coder->next_sequence = SEQ_LZMA; - - // If only state reset is wanted with old - // properties, do the resetting here for - // simplicity. - if (control >= 0xA0) - coder->lzma.reset(coder->lzma.coder, - &coder->options); - } - } else { - // Invalid control values - if (control > 2) - return LZMA_DATA_ERROR; - - // It's uncompressed chunk - coder->sequence = SEQ_COMPRESSED_0; - coder->next_sequence = SEQ_COPY; - } - - if (coder->need_dictionary_reset) { - // Finish the dictionary reset and let the caller - // flush the dictionary to the actual output buffer. - coder->need_dictionary_reset = false; - dict_reset(dict); - return LZMA_OK; - } - - break; - } - - case SEQ_UNCOMPRESSED_1: - coder->uncompressed_size += (uint32_t)(in[(*in_pos)++]) << 8; - coder->sequence = SEQ_UNCOMPRESSED_2; - break; - - case SEQ_UNCOMPRESSED_2: - coder->uncompressed_size += in[(*in_pos)++] + 1; - coder->sequence = SEQ_COMPRESSED_0; - coder->lzma.set_uncompressed(coder->lzma.coder, - coder->uncompressed_size); - break; - - case SEQ_COMPRESSED_0: - coder->compressed_size = (uint32_t)(in[(*in_pos)++]) << 8; - coder->sequence = SEQ_COMPRESSED_1; - break; - - case SEQ_COMPRESSED_1: - coder->compressed_size += in[(*in_pos)++] + 1; - coder->sequence = coder->next_sequence; - break; - - case SEQ_PROPERTIES: - if (lzma_lzma_lclppb_decode(&coder->options, in[(*in_pos)++])) - return LZMA_DATA_ERROR; - - coder->lzma.reset(coder->lzma.coder, &coder->options); - - coder->sequence = SEQ_LZMA; - break; - - case SEQ_LZMA: { - // Store the start offset so that we can update - // coder->compressed_size later. - const size_t in_start = *in_pos; - - // Decode from in[] to *dict. - const lzma_ret ret = coder->lzma.code(coder->lzma.coder, - dict, in, in_pos, in_size); - - // Validate and update coder->compressed_size. - const size_t in_used = *in_pos - in_start; - if (in_used > coder->compressed_size) - return LZMA_DATA_ERROR; - - coder->compressed_size -= in_used; - - // Return if we didn't finish the chunk, or an error occurred. - if (ret != LZMA_STREAM_END) - return ret; - - // The LZMA decoder must have consumed the whole chunk now. - // We don't need to worry about uncompressed size since it - // is checked by the LZMA decoder. - if (coder->compressed_size != 0) - return LZMA_DATA_ERROR; - - coder->sequence = SEQ_CONTROL; - break; - } - - case SEQ_COPY: { - // Copy from input to the dictionary as is. - dict_write(dict, in, in_pos, in_size, &coder->compressed_size); - if (coder->compressed_size != 0) - return LZMA_OK; - - coder->sequence = SEQ_CONTROL; - break; - } - - default: - assert(0); - return LZMA_PROG_ERROR; - } - - return LZMA_OK; -} - - -static void -lzma2_decoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - assert(coder->lzma.end == NULL); - lzma_free(coder->lzma.coder, allocator); - - lzma_free(coder, allocator); - - return; -} - - -static lzma_ret -lzma2_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) -{ - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma2_decode; - lz->end = &lzma2_decoder_end; - - lz->coder->lzma = LZMA_LZ_DECODER_INIT; - } - - const lzma_options_lzma *options = opt; - - lz->coder->sequence = SEQ_CONTROL; - lz->coder->need_properties = true; - lz->coder->need_dictionary_reset = options->preset_dict == NULL - || options->preset_dict_size == 0; - - return lzma_lzma_decoder_create(&lz->coder->lzma, - allocator, options, lz_options); -} - - -extern lzma_ret -lzma_lzma2_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - // LZMA2 can only be the last filter in the chain. This is enforced - // by the raw_decoder initialization. - assert(filters[1].init == NULL); - - return lzma_lz_decoder_init(next, allocator, filters, - &lzma2_decoder_init); -} - - -extern uint64_t -lzma_lzma2_decoder_memusage(const void *options) -{ - return sizeof(lzma_coder) - + lzma_lzma_decoder_memusage_nocheck(options); -} - - -extern lzma_ret -lzma_lzma2_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 1) - return LZMA_OPTIONS_ERROR; - - // Check that reserved bits are unset. - if (props[0] & 0xC0) - return LZMA_OPTIONS_ERROR; - - // Decode the dictionary size. - if (props[0] > 40) - return LZMA_OPTIONS_ERROR; - - lzma_options_lzma *opt = lzma_alloc( - sizeof(lzma_options_lzma), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - if (props[0] == 40) { - opt->dict_size = UINT32_MAX; - } else { - opt->dict_size = 2 | (props[0] & 1); - opt->dict_size <<= props[0] / 2 + 11; - } - - opt->preset_dict = NULL; - opt->preset_dict_size = 0; - - *options = opt; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/lzma/lzma2_decoder.h b/deps/lzma/liblzma/lzma/lzma2_decoder.h deleted file mode 100644 index fac4ac487b07dc..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma2_decoder.h +++ /dev/null @@ -1,28 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_decoder.h -/// \brief LZMA2 decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA2_DECODER_H -#define LZMA_LZMA2_DECODER_H - -#include "common.h" - -extern lzma_ret lzma_lzma2_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern uint64_t lzma_lzma2_decoder_memusage(const void *options); - -extern lzma_ret lzma_lzma2_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/deps/lzma/liblzma/lzma/lzma2_encoder.c b/deps/lzma/liblzma/lzma/lzma2_encoder.c deleted file mode 100644 index 992720ca6d5aca..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma2_encoder.c +++ /dev/null @@ -1,393 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_encoder.c -/// \brief LZMA2 encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_encoder.h" -#include "lzma_encoder.h" -#include "fastpos.h" -#include "lzma2_encoder.h" - - -struct lzma_coder_s { - enum { - SEQ_INIT, - SEQ_LZMA_ENCODE, - SEQ_LZMA_COPY, - SEQ_UNCOMPRESSED_HEADER, - SEQ_UNCOMPRESSED_COPY, - } sequence; - - /// LZMA encoder - lzma_coder *lzma; - - /// LZMA options currently in use. - lzma_options_lzma opt_cur; - - bool need_properties; - bool need_state_reset; - bool need_dictionary_reset; - - /// Uncompressed size of a chunk - size_t uncompressed_size; - - /// Compressed size of a chunk (excluding headers); this is also used - /// to indicate the end of buf[] in SEQ_LZMA_COPY. - size_t compressed_size; - - /// Read position in buf[] - size_t buf_pos; - - /// Buffer to hold the chunk header and LZMA compressed data - uint8_t buf[LZMA2_HEADER_MAX + LZMA2_CHUNK_MAX]; -}; - - -static void -lzma2_header_lzma(lzma_coder *coder) -{ - assert(coder->uncompressed_size > 0); - assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); - assert(coder->compressed_size > 0); - assert(coder->compressed_size <= LZMA2_CHUNK_MAX); - - size_t pos; - - if (coder->need_properties) { - pos = 0; - - if (coder->need_dictionary_reset) - coder->buf[pos] = 0x80 + (3 << 5); - else - coder->buf[pos] = 0x80 + (2 << 5); - } else { - pos = 1; - - if (coder->need_state_reset) - coder->buf[pos] = 0x80 + (1 << 5); - else - coder->buf[pos] = 0x80; - } - - // Set the start position for copying. - coder->buf_pos = pos; - - // Uncompressed size - size_t size = coder->uncompressed_size - 1; - coder->buf[pos++] += size >> 16; - coder->buf[pos++] = (size >> 8) & 0xFF; - coder->buf[pos++] = size & 0xFF; - - // Compressed size - size = coder->compressed_size - 1; - coder->buf[pos++] = size >> 8; - coder->buf[pos++] = size & 0xFF; - - // Properties, if needed - if (coder->need_properties) - lzma_lzma_lclppb_encode(&coder->opt_cur, coder->buf + pos); - - coder->need_properties = false; - coder->need_state_reset = false; - coder->need_dictionary_reset = false; - - // The copying code uses coder->compressed_size to indicate the end - // of coder->buf[], so we need add the maximum size of the header here. - coder->compressed_size += LZMA2_HEADER_MAX; - - return; -} - - -static void -lzma2_header_uncompressed(lzma_coder *coder) -{ - assert(coder->uncompressed_size > 0); - assert(coder->uncompressed_size <= LZMA2_CHUNK_MAX); - - // If this is the first chunk, we need to include dictionary - // reset indicator. - if (coder->need_dictionary_reset) - coder->buf[0] = 1; - else - coder->buf[0] = 2; - - coder->need_dictionary_reset = false; - - // "Compressed" size - coder->buf[1] = (coder->uncompressed_size - 1) >> 8; - coder->buf[2] = (coder->uncompressed_size - 1) & 0xFF; - - // Set the start position for copying. - coder->buf_pos = 0; - return; -} - - -static lzma_ret -lzma2_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - while (*out_pos < out_size) - switch (coder->sequence) { - case SEQ_INIT: - // If there's no input left and we are flushing or finishing, - // don't start a new chunk. - if (mf_unencoded(mf) == 0) { - // Write end of payload marker if finishing. - if (mf->action == LZMA_FINISH) - out[(*out_pos)++] = 0; - - return mf->action == LZMA_RUN - ? LZMA_OK : LZMA_STREAM_END; - } - - if (coder->need_state_reset) - return_if_error(lzma_lzma_encoder_reset( - coder->lzma, &coder->opt_cur)); - - coder->uncompressed_size = 0; - coder->compressed_size = 0; - coder->sequence = SEQ_LZMA_ENCODE; - - // Fall through - - case SEQ_LZMA_ENCODE: { - // Calculate how much more uncompressed data this chunk - // could accept. - const uint32_t left = LZMA2_UNCOMPRESSED_MAX - - coder->uncompressed_size; - uint32_t limit; - - if (left < mf->match_len_max) { - // Must flush immediately since the next LZMA symbol - // could make the uncompressed size of the chunk too - // big. - limit = 0; - } else { - // Calculate maximum read_limit that is OK from point - // of view of LZMA2 chunk size. - limit = mf->read_pos - mf->read_ahead - + left - mf->match_len_max; - } - - // Save the start position so that we can update - // coder->uncompressed_size. - const uint32_t read_start = mf->read_pos - mf->read_ahead; - - // Call the LZMA encoder until the chunk is finished. - const lzma_ret ret = lzma_lzma_encode(coder->lzma, mf, - coder->buf + LZMA2_HEADER_MAX, - &coder->compressed_size, - LZMA2_CHUNK_MAX, limit); - - coder->uncompressed_size += mf->read_pos - mf->read_ahead - - read_start; - - assert(coder->compressed_size <= LZMA2_CHUNK_MAX); - assert(coder->uncompressed_size <= LZMA2_UNCOMPRESSED_MAX); - - if (ret != LZMA_STREAM_END) - return LZMA_OK; - - // See if the chunk compressed. If it didn't, we encode it - // as uncompressed chunk. This saves a few bytes of space - // and makes decoding faster. - if (coder->compressed_size >= coder->uncompressed_size) { - coder->uncompressed_size += mf->read_ahead; - assert(coder->uncompressed_size - <= LZMA2_UNCOMPRESSED_MAX); - mf->read_ahead = 0; - lzma2_header_uncompressed(coder); - coder->need_state_reset = true; - coder->sequence = SEQ_UNCOMPRESSED_HEADER; - break; - } - - // The chunk did compress at least by one byte, so we store - // the chunk as LZMA. - lzma2_header_lzma(coder); - - coder->sequence = SEQ_LZMA_COPY; - } - - // Fall through - - case SEQ_LZMA_COPY: - // Copy the compressed chunk along its headers to the - // output buffer. - lzma_bufcpy(coder->buf, &coder->buf_pos, - coder->compressed_size, - out, out_pos, out_size); - if (coder->buf_pos != coder->compressed_size) - return LZMA_OK; - - coder->sequence = SEQ_INIT; - break; - - case SEQ_UNCOMPRESSED_HEADER: - // Copy the three-byte header to indicate uncompressed chunk. - lzma_bufcpy(coder->buf, &coder->buf_pos, - LZMA2_HEADER_UNCOMPRESSED, - out, out_pos, out_size); - if (coder->buf_pos != LZMA2_HEADER_UNCOMPRESSED) - return LZMA_OK; - - coder->sequence = SEQ_UNCOMPRESSED_COPY; - - // Fall through - - case SEQ_UNCOMPRESSED_COPY: - // Copy the uncompressed data as is from the dictionary - // to the output buffer. - mf_read(mf, out, out_pos, out_size, &coder->uncompressed_size); - if (coder->uncompressed_size != 0) - return LZMA_OK; - - coder->sequence = SEQ_INIT; - break; - } - - return LZMA_OK; -} - - -static void -lzma2_encoder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_free(coder->lzma, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -lzma2_encoder_options_update(lzma_coder *coder, const lzma_filter *filter) -{ - // New options can be set only when there is no incomplete chunk. - // This is the case at the beginning of the raw stream and right - // after LZMA_SYNC_FLUSH. - if (filter->options == NULL || coder->sequence != SEQ_INIT) - return LZMA_PROG_ERROR; - - // Look if there are new options. At least for now, - // only lc/lp/pb can be changed. - const lzma_options_lzma *opt = filter->options; - if (coder->opt_cur.lc != opt->lc || coder->opt_cur.lp != opt->lp - || coder->opt_cur.pb != opt->pb) { - // Validate the options. - if (opt->lc > LZMA_LCLP_MAX || opt->lp > LZMA_LCLP_MAX - || opt->lc + opt->lp > LZMA_LCLP_MAX - || opt->pb > LZMA_PB_MAX) - return LZMA_OPTIONS_ERROR; - - // The new options will be used when the encoder starts - // a new LZMA2 chunk. - coder->opt_cur.lc = opt->lc; - coder->opt_cur.lp = opt->lp; - coder->opt_cur.pb = opt->pb; - coder->need_properties = true; - coder->need_state_reset = true; - } - - return LZMA_OK; -} - - -static lzma_ret -lzma2_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - if (options == NULL) - return LZMA_PROG_ERROR; - - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma2_encode; - lz->end = &lzma2_encoder_end; - lz->options_update = &lzma2_encoder_options_update; - - lz->coder->lzma = NULL; - } - - lz->coder->opt_cur = *(const lzma_options_lzma *)(options); - - lz->coder->sequence = SEQ_INIT; - lz->coder->need_properties = true; - lz->coder->need_state_reset = false; - lz->coder->need_dictionary_reset - = lz->coder->opt_cur.preset_dict == NULL - || lz->coder->opt_cur.preset_dict_size == 0; - - // Initialize LZMA encoder - return_if_error(lzma_lzma_encoder_create(&lz->coder->lzma, allocator, - &lz->coder->opt_cur, lz_options)); - - // Make sure that we will always have enough history available in - // case we need to use uncompressed chunks. They are used when the - // compressed size of a chunk is not smaller than the uncompressed - // size, so we need to have at least LZMA2_COMPRESSED_MAX bytes - // history available. - if (lz_options->before_size + lz_options->dict_size < LZMA2_CHUNK_MAX) - lz_options->before_size - = LZMA2_CHUNK_MAX - lz_options->dict_size; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma2_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_lz_encoder_init( - next, allocator, filters, &lzma2_encoder_init); -} - - -extern uint64_t -lzma_lzma2_encoder_memusage(const void *options) -{ - const uint64_t lzma_mem = lzma_lzma_encoder_memusage(options); - if (lzma_mem == UINT64_MAX) - return UINT64_MAX; - - return sizeof(lzma_coder) + lzma_mem; -} - - -extern lzma_ret -lzma_lzma2_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_lzma *const opt = options; - uint32_t d = my_max(opt->dict_size, LZMA_DICT_SIZE_MIN); - - // Round up to the next 2^n - 1 or 2^n + 2^(n - 1) - 1 depending - // on which one is the next: - --d; - d |= d >> 2; - d |= d >> 3; - d |= d >> 4; - d |= d >> 8; - d |= d >> 16; - - // Get the highest two bits using the proper encoding: - if (d == UINT32_MAX) - out[0] = 40; - else - out[0] = get_pos_slot(d + 1) - 24; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/lzma/lzma2_encoder.h b/deps/lzma/liblzma/lzma/lzma2_encoder.h deleted file mode 100644 index ca19ef4691cc83..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma2_encoder.h +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma2_encoder.h -/// \brief LZMA2 encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA2_ENCODER_H -#define LZMA_LZMA2_ENCODER_H - -#include "common.h" - - -/// Maximum number of bytes of actual data per chunk (no headers) -#define LZMA2_CHUNK_MAX (UINT32_C(1) << 16) - -/// Maximum uncompressed size of LZMA chunk (no headers) -#define LZMA2_UNCOMPRESSED_MAX (UINT32_C(1) << 21) - -/// Maximum size of LZMA2 headers -#define LZMA2_HEADER_MAX 6 - -/// Size of a header for uncompressed chunk -#define LZMA2_HEADER_UNCOMPRESSED 3 - - -extern lzma_ret lzma_lzma2_encoder_init( - lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters); - -extern uint64_t lzma_lzma2_encoder_memusage(const void *options); - -extern lzma_ret lzma_lzma2_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/deps/lzma/liblzma/lzma/lzma_common.h b/deps/lzma/liblzma/lzma/lzma_common.h deleted file mode 100644 index e31e285f9a526e..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_common.h +++ /dev/null @@ -1,223 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_common.h -/// \brief Private definitions common to LZMA encoder and decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_COMMON_H -#define LZMA_LZMA_COMMON_H - -#include "common.h" -#include "range_common.h" - - -/////////////////// -// Miscellaneous // -/////////////////// - -/// Maximum number of position states. A position state is the lowest pos bits -/// number of bits of the current uncompressed offset. In some places there -/// are different sets of probabilities for different pos states. -#define POS_STATES_MAX (1 << LZMA_PB_MAX) - - -/// Validates lc, lp, and pb. -static inline bool -is_lclppb_valid(const lzma_options_lzma *options) -{ - return options->lc <= LZMA_LCLP_MAX && options->lp <= LZMA_LCLP_MAX - && options->lc + options->lp <= LZMA_LCLP_MAX - && options->pb <= LZMA_PB_MAX; -} - - -/////////// -// State // -/////////// - -/// This enum is used to track which events have occurred most recently and -/// in which order. This information is used to predict the next event. -/// -/// Events: -/// - Literal: One 8-bit byte -/// - Match: Repeat a chunk of data at some distance -/// - Long repeat: Multi-byte match at a recently seen distance -/// - Short repeat: One-byte repeat at a recently seen distance -/// -/// The event names are in from STATE_oldest_older_previous. REP means -/// either short or long repeated match, and NONLIT means any non-literal. -typedef enum { - STATE_LIT_LIT, - STATE_MATCH_LIT_LIT, - STATE_REP_LIT_LIT, - STATE_SHORTREP_LIT_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT, - STATE_SHORTREP_LIT, - STATE_LIT_MATCH, - STATE_LIT_LONGREP, - STATE_LIT_SHORTREP, - STATE_NONLIT_MATCH, - STATE_NONLIT_REP, -} lzma_lzma_state; - - -/// Total number of states -#define STATES 12 - -/// The lowest 7 states indicate that the previous state was a literal. -#define LIT_STATES 7 - - -/// Indicate that the latest state was a literal. -#define update_literal(state) \ - state = ((state) <= STATE_SHORTREP_LIT_LIT \ - ? STATE_LIT_LIT \ - : ((state) <= STATE_LIT_SHORTREP \ - ? (state) - 3 \ - : (state) - 6)) - -/// Indicate that the latest state was a match. -#define update_match(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_MATCH : STATE_NONLIT_MATCH) - -/// Indicate that the latest state was a long repeated match. -#define update_long_rep(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_LONGREP : STATE_NONLIT_REP) - -/// Indicate that the latest state was a short match. -#define update_short_rep(state) \ - state = ((state) < LIT_STATES ? STATE_LIT_SHORTREP : STATE_NONLIT_REP) - -/// Test if the previous state was a literal. -#define is_literal_state(state) \ - ((state) < LIT_STATES) - - -///////////// -// Literal // -///////////// - -/// Each literal coder is divided in three sections: -/// - 0x001-0x0FF: Without match byte -/// - 0x101-0x1FF: With match byte; match bit is 0 -/// - 0x201-0x2FF: With match byte; match bit is 1 -/// -/// Match byte is used when the previous LZMA symbol was something else than -/// a literal (that is, it was some kind of match). -#define LITERAL_CODER_SIZE 0x300 - -/// Maximum number of literal coders -#define LITERAL_CODERS_MAX (1 << LZMA_LCLP_MAX) - -/// Locate the literal coder for the next literal byte. The choice depends on -/// - the lowest literal_pos_bits bits of the position of the current -/// byte; and -/// - the highest literal_context_bits bits of the previous byte. -#define literal_subcoder(probs, lc, lp_mask, pos, prev_byte) \ - ((probs)[(((pos) & lp_mask) << lc) + ((prev_byte) >> (8 - lc))]) - - -static inline void -literal_init(probability (*probs)[LITERAL_CODER_SIZE], - uint32_t lc, uint32_t lp) -{ - assert(lc + lp <= LZMA_LCLP_MAX); - - const uint32_t coders = 1U << (lc + lp); - - for (uint32_t i = 0; i < coders; ++i) - for (uint32_t j = 0; j < LITERAL_CODER_SIZE; ++j) - bit_reset(probs[i][j]); - - return; -} - - -////////////////// -// Match length // -////////////////// - -// Minimum length of a match is two bytes. -#define MATCH_LEN_MIN 2 - -// Match length is encoded with 4, 5, or 10 bits. -// -// Length Bits -// 2-9 4 = Choice=0 + 3 bits -// 10-17 5 = Choice=1 + Choice2=0 + 3 bits -// 18-273 10 = Choice=1 + Choice2=1 + 8 bits -#define LEN_LOW_BITS 3 -#define LEN_LOW_SYMBOLS (1 << LEN_LOW_BITS) -#define LEN_MID_BITS 3 -#define LEN_MID_SYMBOLS (1 << LEN_MID_BITS) -#define LEN_HIGH_BITS 8 -#define LEN_HIGH_SYMBOLS (1 << LEN_HIGH_BITS) -#define LEN_SYMBOLS (LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS + LEN_HIGH_SYMBOLS) - -// Maximum length of a match is 273 which is a result of the encoding -// described above. -#define MATCH_LEN_MAX (MATCH_LEN_MIN + LEN_SYMBOLS - 1) - - -//////////////////// -// Match distance // -//////////////////// - -// Different set of probabilities is used for match distances that have very -// short match length: Lengths of 2, 3, and 4 bytes have a separate set of -// probabilities for each length. The matches with longer length use a shared -// set of probabilities. -#define LEN_TO_POS_STATES 4 - -// Macro to get the index of the appropriate probability array. -#define get_len_to_pos_state(len) \ - ((len) < LEN_TO_POS_STATES + MATCH_LEN_MIN \ - ? (len) - MATCH_LEN_MIN \ - : LEN_TO_POS_STATES - 1) - -// The highest two bits of a match distance (pos slot) are encoded using six -// bits. See fastpos.h for more explanation. -#define POS_SLOT_BITS 6 -#define POS_SLOTS (1 << POS_SLOT_BITS) - -// Match distances up to 127 are fully encoded using probabilities. Since -// the highest two bits (pos slot) are always encoded using six bits, the -// distances 0-3 don't need any additional bits to encode, since the pos -// slot itself is the same as the actual distance. START_POS_MODEL_INDEX -// indicates the first pos slot where at least one additional bit is needed. -#define START_POS_MODEL_INDEX 4 - -// Match distances greater than 127 are encoded in three pieces: -// - pos slot: the highest two bits -// - direct bits: 2-26 bits below the highest two bits -// - alignment bits: four lowest bits -// -// Direct bits don't use any probabilities. -// -// The pos slot value of 14 is for distances 128-191 (see the table in -// fastpos.h to understand why). -#define END_POS_MODEL_INDEX 14 - -// Pos slots that indicate a distance <= 127. -#define FULL_DISTANCES_BITS (END_POS_MODEL_INDEX / 2) -#define FULL_DISTANCES (1 << FULL_DISTANCES_BITS) - -// For match distances greater than 127, only the highest two bits and the -// lowest four bits (alignment) is encoded using probabilities. -#define ALIGN_BITS 4 -#define ALIGN_TABLE_SIZE (1 << ALIGN_BITS) -#define ALIGN_MASK (ALIGN_TABLE_SIZE - 1) - -// LZMA remembers the four most recent match distances. Reusing these distances -// tends to take less space than re-encoding the actual distance value. -#define REP_DISTANCES 4 - -#endif diff --git a/deps/lzma/liblzma/lzma/lzma_decoder.c b/deps/lzma/liblzma/lzma/lzma_decoder.c deleted file mode 100644 index 9979bb4261b8cc..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_decoder.c +++ /dev/null @@ -1,1057 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_decoder.c -/// \brief LZMA decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lz_decoder.h" -#include "lzma_common.h" -#include "lzma_decoder.h" -#include "range_decoder.h" - - -#ifdef HAVE_SMALL - -// Macros for (somewhat) size-optimized code. -#define seq_4(seq) seq - -#define seq_6(seq) seq - -#define seq_8(seq) seq - -#define seq_len(seq) \ - seq ## _CHOICE, \ - seq ## _CHOICE2, \ - seq ## _BITTREE - -#define len_decode(target, ld, pos_state, seq) \ -do { \ -case seq ## _CHOICE: \ - rc_if_0(ld.choice, seq ## _CHOICE) { \ - rc_update_0(ld.choice); \ - probs = ld.low[pos_state];\ - limit = LEN_LOW_SYMBOLS; \ - target = MATCH_LEN_MIN; \ - } else { \ - rc_update_1(ld.choice); \ -case seq ## _CHOICE2: \ - rc_if_0(ld.choice2, seq ## _CHOICE2) { \ - rc_update_0(ld.choice2); \ - probs = ld.mid[pos_state]; \ - limit = LEN_MID_SYMBOLS; \ - target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ - } else { \ - rc_update_1(ld.choice2); \ - probs = ld.high; \ - limit = LEN_HIGH_SYMBOLS; \ - target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS \ - + LEN_MID_SYMBOLS; \ - } \ - } \ - symbol = 1; \ -case seq ## _BITTREE: \ - do { \ - rc_bit(probs[symbol], , , seq ## _BITTREE); \ - } while (symbol < limit); \ - target += symbol - limit; \ -} while (0) - -#else // HAVE_SMALL - -// Unrolled versions -#define seq_4(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3 - -#define seq_6(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3, \ - seq ## 4, \ - seq ## 5 - -#define seq_8(seq) \ - seq ## 0, \ - seq ## 1, \ - seq ## 2, \ - seq ## 3, \ - seq ## 4, \ - seq ## 5, \ - seq ## 6, \ - seq ## 7 - -#define seq_len(seq) \ - seq ## _CHOICE, \ - seq ## _LOW0, \ - seq ## _LOW1, \ - seq ## _LOW2, \ - seq ## _CHOICE2, \ - seq ## _MID0, \ - seq ## _MID1, \ - seq ## _MID2, \ - seq ## _HIGH0, \ - seq ## _HIGH1, \ - seq ## _HIGH2, \ - seq ## _HIGH3, \ - seq ## _HIGH4, \ - seq ## _HIGH5, \ - seq ## _HIGH6, \ - seq ## _HIGH7 - -#define len_decode(target, ld, pos_state, seq) \ -do { \ - symbol = 1; \ -case seq ## _CHOICE: \ - rc_if_0(ld.choice, seq ## _CHOICE) { \ - rc_update_0(ld.choice); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW0); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW1); \ - rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW2); \ - target = symbol - LEN_LOW_SYMBOLS + MATCH_LEN_MIN; \ - } else { \ - rc_update_1(ld.choice); \ -case seq ## _CHOICE2: \ - rc_if_0(ld.choice2, seq ## _CHOICE2) { \ - rc_update_0(ld.choice2); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID0); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID1); \ - rc_bit_case(ld.mid[pos_state][symbol], , , \ - seq ## _MID2); \ - target = symbol - LEN_MID_SYMBOLS \ - + MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ - } else { \ - rc_update_1(ld.choice2); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH0); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH1); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH2); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH3); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH4); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH5); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH6); \ - rc_bit_case(ld.high[symbol], , , seq ## _HIGH7); \ - target = symbol - LEN_HIGH_SYMBOLS \ - + MATCH_LEN_MIN \ - + LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; \ - } \ - } \ -} while (0) - -#endif // HAVE_SMALL - - -/// Length decoder probabilities; see comments in lzma_common.h. -typedef struct { - probability choice; - probability choice2; - probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; - probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; - probability high[LEN_HIGH_SYMBOLS]; -} lzma_length_decoder; - - -struct lzma_coder_s { - /////////////////// - // Probabilities // - /////////////////// - - /// Literals; see comments in lzma_common.h. - probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; - - /// If 1, it's a match. Otherwise it's a single 8-bit literal. - probability is_match[STATES][POS_STATES_MAX]; - - /// If 1, it's a repeated match. The distance is one of rep0 .. rep3. - probability is_rep[STATES]; - - /// If 0, distance of a repeated match is rep0. - /// Otherwise check is_rep1. - probability is_rep0[STATES]; - - /// If 0, distance of a repeated match is rep1. - /// Otherwise check is_rep2. - probability is_rep1[STATES]; - - /// If 0, distance of a repeated match is rep2. Otherwise it is rep3. - probability is_rep2[STATES]; - - /// If 1, the repeated match has length of one byte. Otherwise - /// the length is decoded from rep_len_decoder. - probability is_rep0_long[STATES][POS_STATES_MAX]; - - /// Probability tree for the highest two bits of the match distance. - /// There is a separate probability tree for match lengths of - /// 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273]. - probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; - - /// Probability trees for additional bits for match distance when the - /// distance is in the range [4, 127]. - probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; - - /// Probability tree for the lowest four bits of a match distance - /// that is equal to or greater than 128. - probability pos_align[ALIGN_TABLE_SIZE]; - - /// Length of a normal match - lzma_length_decoder match_len_decoder; - - /// Length of a repeated match - lzma_length_decoder rep_len_decoder; - - /////////////////// - // Decoder state // - /////////////////// - - // Range coder - lzma_range_decoder rc; - - // Types of the most recently seen LZMA symbols - lzma_lzma_state state; - - uint32_t rep0; ///< Distance of the latest match - uint32_t rep1; ///< Distance of second latest match - uint32_t rep2; ///< Distance of third latest match - uint32_t rep3; ///< Distance of fourth latest match - - uint32_t pos_mask; // (1U << pb) - 1 - uint32_t literal_context_bits; - uint32_t literal_pos_mask; - - /// Uncompressed size as bytes, or LZMA_VLI_UNKNOWN if end of - /// payload marker is expected. - lzma_vli uncompressed_size; - - //////////////////////////////// - // State of incomplete symbol // - //////////////////////////////// - - /// Position where to continue the decoder loop - enum { - SEQ_NORMALIZE, - SEQ_IS_MATCH, - seq_8(SEQ_LITERAL), - seq_8(SEQ_LITERAL_MATCHED), - SEQ_LITERAL_WRITE, - SEQ_IS_REP, - seq_len(SEQ_MATCH_LEN), - seq_6(SEQ_POS_SLOT), - SEQ_POS_MODEL, - SEQ_DIRECT, - seq_4(SEQ_ALIGN), - SEQ_EOPM, - SEQ_IS_REP0, - SEQ_SHORTREP, - SEQ_IS_REP0_LONG, - SEQ_IS_REP1, - SEQ_IS_REP2, - seq_len(SEQ_REP_LEN), - SEQ_COPY, - } sequence; - - /// Base of the current probability tree - probability *probs; - - /// Symbol being decoded. This is also used as an index variable in - /// bittree decoders: probs[symbol] - uint32_t symbol; - - /// Used as a loop termination condition on bittree decoders and - /// direct bits decoder. - uint32_t limit; - - /// Matched literal decoder: 0x100 or 0 to help avoiding branches. - /// Bittree reverse decoders: Offset of the next bit: 1 << offset - uint32_t offset; - - /// If decoding a literal: match byte. - /// If decoding a match: length of the match. - uint32_t len; -}; - - -static lzma_ret -lzma_decode(lzma_coder *restrict coder, lzma_dict *restrict dictptr, - const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size) -{ - //////////////////// - // Initialization // - //////////////////// - - if (!rc_read_init(&coder->rc, in, in_pos, in_size)) - return LZMA_OK; - - /////////////// - // Variables // - /////////////// - - // Making local copies of often-used variables improves both - // speed and readability. - - lzma_dict dict = *dictptr; - - const size_t dict_start = dict.pos; - - // Range decoder - rc_to_local(coder->rc, *in_pos); - - // State - uint32_t state = coder->state; - uint32_t rep0 = coder->rep0; - uint32_t rep1 = coder->rep1; - uint32_t rep2 = coder->rep2; - uint32_t rep3 = coder->rep3; - - const uint32_t pos_mask = coder->pos_mask; - - // These variables are actually needed only if we last time ran - // out of input in the middle of the decoder loop. - probability *probs = coder->probs; - uint32_t symbol = coder->symbol; - uint32_t limit = coder->limit; - uint32_t offset = coder->offset; - uint32_t len = coder->len; - - const uint32_t literal_pos_mask = coder->literal_pos_mask; - const uint32_t literal_context_bits = coder->literal_context_bits; - - // Temporary variables - uint32_t pos_state = dict.pos & pos_mask; - - lzma_ret ret = LZMA_OK; - - // If uncompressed size is known, there must be no end of payload - // marker. - const bool no_eopm = coder->uncompressed_size - != LZMA_VLI_UNKNOWN; - if (no_eopm && coder->uncompressed_size < dict.limit - dict.pos) - dict.limit = dict.pos + (size_t)(coder->uncompressed_size); - - // The main decoder loop. The "switch" is used to restart the decoder at - // correct location. Once restarted, the "switch" is no longer used. - switch (coder->sequence) - while (true) { - // Calculate new pos_state. This is skipped on the first loop - // since we already calculated it when setting up the local - // variables. - pos_state = dict.pos & pos_mask; - - case SEQ_NORMALIZE: - case SEQ_IS_MATCH: - if (unlikely(no_eopm && dict.pos == dict.limit)) - break; - - rc_if_0(coder->is_match[state][pos_state], SEQ_IS_MATCH) { - rc_update_0(coder->is_match[state][pos_state]); - - // It's a literal i.e. a single 8-bit byte. - - probs = literal_subcoder(coder->literal, - literal_context_bits, literal_pos_mask, - dict.pos, dict_get(&dict, 0)); - symbol = 1; - - if (is_literal_state(state)) { - // Decode literal without match byte. -#ifdef HAVE_SMALL - case SEQ_LITERAL: - do { - rc_bit(probs[symbol], , , SEQ_LITERAL); - } while (symbol < (1 << 8)); -#else - rc_bit_case(probs[symbol], , , SEQ_LITERAL0); - rc_bit_case(probs[symbol], , , SEQ_LITERAL1); - rc_bit_case(probs[symbol], , , SEQ_LITERAL2); - rc_bit_case(probs[symbol], , , SEQ_LITERAL3); - rc_bit_case(probs[symbol], , , SEQ_LITERAL4); - rc_bit_case(probs[symbol], , , SEQ_LITERAL5); - rc_bit_case(probs[symbol], , , SEQ_LITERAL6); - rc_bit_case(probs[symbol], , , SEQ_LITERAL7); -#endif - } else { - // Decode literal with match byte. - // - // We store the byte we compare against - // ("match byte") to "len" to minimize the - // number of variables we need to store - // between decoder calls. - len = dict_get(&dict, rep0) << 1; - - // The usage of "offset" allows omitting some - // branches, which should give tiny speed - // improvement on some CPUs. "offset" gets - // set to zero if match_bit didn't match. - offset = 0x100; - -#ifdef HAVE_SMALL - case SEQ_LITERAL_MATCHED: - do { - const uint32_t match_bit - = len & offset; - const uint32_t subcoder_index - = offset + match_bit - + symbol; - - rc_bit(probs[subcoder_index], - offset &= ~match_bit, - offset &= match_bit, - SEQ_LITERAL_MATCHED); - - // It seems to be faster to do this - // here instead of putting it to the - // beginning of the loop and then - // putting the "case" in the middle - // of the loop. - len <<= 1; - - } while (symbol < (1 << 8)); -#else - // Unroll the loop. - uint32_t match_bit; - uint32_t subcoder_index; - -# define d(seq) \ - case seq: \ - match_bit = len & offset; \ - subcoder_index = offset + match_bit + symbol; \ - rc_bit(probs[subcoder_index], \ - offset &= ~match_bit, \ - offset &= match_bit, \ - seq) - - d(SEQ_LITERAL_MATCHED0); - len <<= 1; - d(SEQ_LITERAL_MATCHED1); - len <<= 1; - d(SEQ_LITERAL_MATCHED2); - len <<= 1; - d(SEQ_LITERAL_MATCHED3); - len <<= 1; - d(SEQ_LITERAL_MATCHED4); - len <<= 1; - d(SEQ_LITERAL_MATCHED5); - len <<= 1; - d(SEQ_LITERAL_MATCHED6); - len <<= 1; - d(SEQ_LITERAL_MATCHED7); -# undef d -#endif - } - - //update_literal(state); - // Use a lookup table to update to literal state, - // since compared to other state updates, this would - // need two branches. - static const lzma_lzma_state next_state[] = { - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_LIT_LIT, - STATE_MATCH_LIT_LIT, - STATE_REP_LIT_LIT, - STATE_SHORTREP_LIT_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT, - STATE_SHORTREP_LIT, - STATE_MATCH_LIT, - STATE_REP_LIT - }; - state = next_state[state]; - - case SEQ_LITERAL_WRITE: - if (unlikely(dict_put(&dict, symbol))) { - coder->sequence = SEQ_LITERAL_WRITE; - goto out; - } - - continue; - } - - // Instead of a new byte we are going to get a byte range - // (distance and length) which will be repeated from our - // output history. - - rc_update_1(coder->is_match[state][pos_state]); - - case SEQ_IS_REP: - rc_if_0(coder->is_rep[state], SEQ_IS_REP) { - // Not a repeated match - rc_update_0(coder->is_rep[state]); - update_match(state); - - // The latest three match distances are kept in - // memory in case there are repeated matches. - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - - // Decode the length of the match. - len_decode(len, coder->match_len_decoder, - pos_state, SEQ_MATCH_LEN); - - // Prepare to decode the highest two bits of the - // match distance. - probs = coder->pos_slot[get_len_to_pos_state(len)]; - symbol = 1; - -#ifdef HAVE_SMALL - case SEQ_POS_SLOT: - do { - rc_bit(probs[symbol], , , SEQ_POS_SLOT); - } while (symbol < POS_SLOTS); -#else - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT0); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT1); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT2); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT3); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT4); - rc_bit_case(probs[symbol], , , SEQ_POS_SLOT5); -#endif - // Get rid of the highest bit that was needed for - // indexing of the probability array. - symbol -= POS_SLOTS; - assert(symbol <= 63); - - if (symbol < START_POS_MODEL_INDEX) { - // Match distances [0, 3] have only two bits. - rep0 = symbol; - } else { - // Decode the lowest [1, 29] bits of - // the match distance. - limit = (symbol >> 1) - 1; - assert(limit >= 1 && limit <= 30); - rep0 = 2 + (symbol & 1); - - if (symbol < END_POS_MODEL_INDEX) { - // Prepare to decode the low bits for - // a distance of [4, 127]. - assert(limit <= 5); - rep0 <<= limit; - assert(rep0 <= 96); - // -1 is fine, because we start - // decoding at probs[1], not probs[0]. - // NOTE: This violates the C standard, - // since we are doing pointer - // arithmetic past the beginning of - // the array. - assert((int32_t)(rep0 - symbol - 1) - >= -1); - assert((int32_t)(rep0 - symbol - 1) - <= 82); - probs = coder->pos_special + rep0 - - symbol - 1; - symbol = 1; - offset = 0; - case SEQ_POS_MODEL: -#ifdef HAVE_SMALL - do { - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - } while (++offset < limit); -#else - switch (limit) { - case 5: - assert(offset == 0); - rc_bit(probs[symbol], , - rep0 += 1, - SEQ_POS_MODEL); - ++offset; - --limit; - case 4: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 3: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 2: - rc_bit(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - ++offset; - --limit; - case 1: - // We need "symbol" only for - // indexing the probability - // array, thus we can use - // rc_bit_last() here to omit - // the unneeded updating of - // "symbol". - rc_bit_last(probs[symbol], , - rep0 += 1 << offset, - SEQ_POS_MODEL); - } -#endif - } else { - // The distance is >= 128. Decode the - // lower bits without probabilities - // except the lowest four bits. - assert(symbol >= 14); - assert(limit >= 6); - limit -= ALIGN_BITS; - assert(limit >= 2); - case SEQ_DIRECT: - // Not worth manual unrolling - do { - rc_direct(rep0, SEQ_DIRECT); - } while (--limit > 0); - - // Decode the lowest four bits using - // probabilities. - rep0 <<= ALIGN_BITS; - symbol = 1; -#ifdef HAVE_SMALL - offset = 0; - case SEQ_ALIGN: - do { - rc_bit(coder->pos_align[ - symbol], , - rep0 += 1 << offset, - SEQ_ALIGN); - } while (++offset < ALIGN_BITS); -#else - case SEQ_ALIGN0: - rc_bit(coder->pos_align[symbol], , - rep0 += 1, SEQ_ALIGN0); - case SEQ_ALIGN1: - rc_bit(coder->pos_align[symbol], , - rep0 += 2, SEQ_ALIGN1); - case SEQ_ALIGN2: - rc_bit(coder->pos_align[symbol], , - rep0 += 4, SEQ_ALIGN2); - case SEQ_ALIGN3: - // Like in SEQ_POS_MODEL, we don't - // need "symbol" for anything else - // than indexing the probability array. - rc_bit_last(coder->pos_align[symbol], , - rep0 += 8, SEQ_ALIGN3); -#endif - - if (rep0 == UINT32_MAX) { - // End of payload marker was - // found. It must not be - // present if uncompressed - // size is known. - if (coder->uncompressed_size - != LZMA_VLI_UNKNOWN) { - ret = LZMA_DATA_ERROR; - goto out; - } - - case SEQ_EOPM: - // LZMA1 stream with - // end-of-payload marker. - rc_normalize(SEQ_EOPM); - ret = LZMA_STREAM_END; - goto out; - } - } - } - - // Validate the distance we just decoded. - if (unlikely(!dict_is_distance_valid(&dict, rep0))) { - ret = LZMA_DATA_ERROR; - goto out; - } - - } else { - rc_update_1(coder->is_rep[state]); - - // Repeated match - // - // The match distance is a value that we have had - // earlier. The latest four match distances are - // available as rep0, rep1, rep2 and rep3. We will - // now decode which of them is the new distance. - // - // There cannot be a match if we haven't produced - // any output, so check that first. - if (unlikely(!dict_is_distance_valid(&dict, 0))) { - ret = LZMA_DATA_ERROR; - goto out; - } - - case SEQ_IS_REP0: - rc_if_0(coder->is_rep0[state], SEQ_IS_REP0) { - rc_update_0(coder->is_rep0[state]); - // The distance is rep0. - - case SEQ_IS_REP0_LONG: - rc_if_0(coder->is_rep0_long[state][pos_state], - SEQ_IS_REP0_LONG) { - rc_update_0(coder->is_rep0_long[ - state][pos_state]); - - update_short_rep(state); - - case SEQ_SHORTREP: - if (unlikely(dict_put(&dict, dict_get( - &dict, rep0)))) { - coder->sequence = SEQ_SHORTREP; - goto out; - } - - continue; - } - - // Repeating more than one byte at - // distance of rep0. - rc_update_1(coder->is_rep0_long[ - state][pos_state]); - - } else { - rc_update_1(coder->is_rep0[state]); - - case SEQ_IS_REP1: - // The distance is rep1, rep2 or rep3. Once - // we find out which one of these three, it - // is stored to rep0 and rep1, rep2 and rep3 - // are updated accordingly. - rc_if_0(coder->is_rep1[state], SEQ_IS_REP1) { - rc_update_0(coder->is_rep1[state]); - - const uint32_t distance = rep1; - rep1 = rep0; - rep0 = distance; - - } else { - rc_update_1(coder->is_rep1[state]); - case SEQ_IS_REP2: - rc_if_0(coder->is_rep2[state], - SEQ_IS_REP2) { - rc_update_0(coder->is_rep2[ - state]); - - const uint32_t distance = rep2; - rep2 = rep1; - rep1 = rep0; - rep0 = distance; - - } else { - rc_update_1(coder->is_rep2[ - state]); - - const uint32_t distance = rep3; - rep3 = rep2; - rep2 = rep1; - rep1 = rep0; - rep0 = distance; - } - } - } - - update_long_rep(state); - - // Decode the length of the repeated match. - len_decode(len, coder->rep_len_decoder, - pos_state, SEQ_REP_LEN); - } - - ///////////////////////////////// - // Repeat from history buffer. // - ///////////////////////////////// - - // The length is always between these limits. There is no way - // to trigger the algorithm to set len outside this range. - assert(len >= MATCH_LEN_MIN); - assert(len <= MATCH_LEN_MAX); - - case SEQ_COPY: - // Repeat len bytes from distance of rep0. - if (unlikely(dict_repeat(&dict, rep0, &len))) { - coder->sequence = SEQ_COPY; - goto out; - } - } - - rc_normalize(SEQ_NORMALIZE); - coder->sequence = SEQ_IS_MATCH; - -out: - // Save state - - // NOTE: Must not copy dict.limit. - dictptr->pos = dict.pos; - dictptr->full = dict.full; - - rc_from_local(coder->rc, *in_pos); - - coder->state = state; - coder->rep0 = rep0; - coder->rep1 = rep1; - coder->rep2 = rep2; - coder->rep3 = rep3; - - coder->probs = probs; - coder->symbol = symbol; - coder->limit = limit; - coder->offset = offset; - coder->len = len; - - // Update the remaining amount of uncompressed data if uncompressed - // size was known. - if (coder->uncompressed_size != LZMA_VLI_UNKNOWN) { - coder->uncompressed_size -= dict.pos - dict_start; - - // Since there cannot be end of payload marker if the - // uncompressed size was known, we check here if we - // finished decoding. - if (coder->uncompressed_size == 0 && ret == LZMA_OK - && coder->sequence != SEQ_NORMALIZE) - ret = coder->sequence == SEQ_IS_MATCH - ? LZMA_STREAM_END : LZMA_DATA_ERROR; - } - - // We can do an additional check in the range decoder to catch some - // corrupted files. - if (ret == LZMA_STREAM_END) { - if (!rc_is_finished(coder->rc)) - ret = LZMA_DATA_ERROR; - - // Reset the range decoder so that it is ready to reinitialize - // for a new LZMA2 chunk. - rc_reset(coder->rc); - } - - return ret; -} - - - -static void -lzma_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) -{ - coder->uncompressed_size = uncompressed_size; -} - -/* -extern void -lzma_lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) -{ - // This is hack. - (*(lzma_coder **)(coder))->uncompressed_size = uncompressed_size; -} -*/ - -static void -lzma_decoder_reset(lzma_coder *coder, const void *opt) -{ - const lzma_options_lzma *options = opt; - - // NOTE: We assume that lc/lp/pb are valid since they were - // successfully decoded with lzma_lzma_decode_properties(). - - // Calculate pos_mask. We don't need pos_bits as is for anything. - coder->pos_mask = (1U << options->pb) - 1; - - // Initialize the literal decoder. - literal_init(coder->literal, options->lc, options->lp); - - coder->literal_context_bits = options->lc; - coder->literal_pos_mask = (1U << options->lp) - 1; - - // State - coder->state = STATE_LIT_LIT; - coder->rep0 = 0; - coder->rep1 = 0; - coder->rep2 = 0; - coder->rep3 = 0; - coder->pos_mask = (1U << options->pb) - 1; - - // Range decoder - rc_reset(coder->rc); - - // Bit and bittree decoders - for (uint32_t i = 0; i < STATES; ++i) { - for (uint32_t j = 0; j <= coder->pos_mask; ++j) { - bit_reset(coder->is_match[i][j]); - bit_reset(coder->is_rep0_long[i][j]); - } - - bit_reset(coder->is_rep[i]); - bit_reset(coder->is_rep0[i]); - bit_reset(coder->is_rep1[i]); - bit_reset(coder->is_rep2[i]); - } - - for (uint32_t i = 0; i < LEN_TO_POS_STATES; ++i) - bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); - - for (uint32_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) - bit_reset(coder->pos_special[i]); - - bittree_reset(coder->pos_align, ALIGN_BITS); - - // Len decoders (also bit/bittree) - const uint32_t num_pos_states = 1U << options->pb; - bit_reset(coder->match_len_decoder.choice); - bit_reset(coder->match_len_decoder.choice2); - bit_reset(coder->rep_len_decoder.choice); - bit_reset(coder->rep_len_decoder.choice2); - - for (uint32_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { - bittree_reset(coder->match_len_decoder.low[pos_state], - LEN_LOW_BITS); - bittree_reset(coder->match_len_decoder.mid[pos_state], - LEN_MID_BITS); - - bittree_reset(coder->rep_len_decoder.low[pos_state], - LEN_LOW_BITS); - bittree_reset(coder->rep_len_decoder.mid[pos_state], - LEN_MID_BITS); - } - - bittree_reset(coder->match_len_decoder.high, LEN_HIGH_BITS); - bittree_reset(coder->rep_len_decoder.high, LEN_HIGH_BITS); - - coder->sequence = SEQ_IS_MATCH; - coder->probs = NULL; - coder->symbol = 0; - coder->limit = 0; - coder->offset = 0; - coder->len = 0; - - return; -} - - -extern lzma_ret -lzma_lzma_decoder_create(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options) -{ - if (lz->coder == NULL) { - lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); - if (lz->coder == NULL) - return LZMA_MEM_ERROR; - - lz->code = &lzma_decode; - lz->reset = &lzma_decoder_reset; - lz->set_uncompressed = &lzma_decoder_uncompressed; - } - - // All dictionary sizes are OK here. LZ decoder will take care of - // the special cases. - const lzma_options_lzma *options = opt; - lz_options->dict_size = options->dict_size; - lz_options->preset_dict = options->preset_dict; - lz_options->preset_dict_size = options->preset_dict_size; - - return LZMA_OK; -} - - -/// Allocate and initialize LZMA decoder. This is used only via LZ -/// initialization (lzma_lzma_decoder_init() passes function pointer to -/// the LZ initialization). -static lzma_ret -lzma_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - if (!is_lclppb_valid(options)) - return LZMA_PROG_ERROR; - - return_if_error(lzma_lzma_decoder_create( - lz, allocator, options, lz_options)); - - lzma_decoder_reset(lz->coder, options); - lzma_decoder_uncompressed(lz->coder, LZMA_VLI_UNKNOWN); - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - // LZMA can only be the last filter in the chain. This is enforced - // by the raw_decoder initialization. - assert(filters[1].init == NULL); - - return lzma_lz_decoder_init(next, allocator, filters, - &lzma_decoder_init); -} - - -extern bool -lzma_lzma_lclppb_decode(lzma_options_lzma *options, uint8_t byte) -{ - if (byte > (4 * 5 + 4) * 9 + 8) - return true; - - // See the file format specification to understand this. - options->pb = byte / (9 * 5); - byte -= options->pb * 9 * 5; - options->lp = byte / 9; - options->lc = byte - options->lp * 9; - - return options->lc + options->lp > LZMA_LCLP_MAX; -} - - -extern uint64_t -lzma_lzma_decoder_memusage_nocheck(const void *options) -{ - const lzma_options_lzma *const opt = options; - return sizeof(lzma_coder) + lzma_lz_decoder_memusage(opt->dict_size); -} - - -extern uint64_t -lzma_lzma_decoder_memusage(const void *options) -{ - if (!is_lclppb_valid(options)) - return UINT64_MAX; - - return lzma_lzma_decoder_memusage_nocheck(options); -} - - -extern lzma_ret -lzma_lzma_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size != 5) - return LZMA_OPTIONS_ERROR; - - lzma_options_lzma *opt - = lzma_alloc(sizeof(lzma_options_lzma), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - if (lzma_lzma_lclppb_decode(opt, props[0])) - goto error; - - // All dictionary sizes are accepted, including zero. LZ decoder - // will automatically use a dictionary at least a few KiB even if - // a smaller dictionary is requested. - opt->dict_size = unaligned_read32le(props + 1); - - opt->preset_dict = NULL; - opt->preset_dict_size = 0; - - *options = opt; - - return LZMA_OK; - -error: - lzma_free(opt, allocator); - return LZMA_OPTIONS_ERROR; -} diff --git a/deps/lzma/liblzma/lzma/lzma_decoder.h b/deps/lzma/liblzma/lzma/lzma_decoder.h deleted file mode 100644 index a463a76fc694d9..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_decoder.h +++ /dev/null @@ -1,52 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_decoder.h -/// \brief LZMA decoder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_DECODER_H -#define LZMA_LZMA_DECODER_H - -#include "common.h" - - -/// Allocates and initializes LZMA decoder -extern lzma_ret lzma_lzma_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern uint64_t lzma_lzma_decoder_memusage(const void *options); - -extern lzma_ret lzma_lzma_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - - -/// \brief Decodes the LZMA Properties byte (lc/lp/pb) -/// -/// \return true if error occurred, false on success -/// -extern bool lzma_lzma_lclppb_decode( - lzma_options_lzma *options, uint8_t byte); - - -#ifdef LZMA_LZ_DECODER_H -/// Allocate and setup function pointers only. This is used by LZMA1 and -/// LZMA2 decoders. -extern lzma_ret lzma_lzma_decoder_create( - lzma_lz_decoder *lz, lzma_allocator *allocator, - const void *opt, lzma_lz_options *lz_options); - -/// Gets memory usage without validating lc/lp/pb. This is used by LZMA2 -/// decoder, because raw LZMA2 decoding doesn't need lc/lp/pb. -extern uint64_t lzma_lzma_decoder_memusage_nocheck(const void *options); - -#endif - -#endif diff --git a/deps/lzma/liblzma/lzma/lzma_encoder.c b/deps/lzma/liblzma/lzma/lzma_encoder.c deleted file mode 100644 index 0b9ee9e15079ec..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder.c +++ /dev/null @@ -1,675 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder.c -/// \brief LZMA encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma2_encoder.h" -#include "lzma_encoder_private.h" -#include "fastpos.h" - - -///////////// -// Literal // -///////////// - -static inline void -literal_matched(lzma_range_encoder *rc, probability *subcoder, - uint32_t match_byte, uint32_t symbol) -{ - uint32_t offset = 0x100; - symbol += UINT32_C(1) << 8; - - do { - match_byte <<= 1; - const uint32_t match_bit = match_byte & offset; - const uint32_t subcoder_index - = offset + match_bit + (symbol >> 8); - const uint32_t bit = (symbol >> 7) & 1; - rc_bit(rc, &subcoder[subcoder_index], bit); - - symbol <<= 1; - offset &= ~(match_byte ^ symbol); - - } while (symbol < (UINT32_C(1) << 16)); -} - - -static inline void -literal(lzma_coder *coder, lzma_mf *mf, uint32_t position) -{ - // Locate the literal byte to be encoded and the subcoder. - const uint8_t cur_byte = mf->buffer[ - mf->read_pos - mf->read_ahead]; - probability *subcoder = literal_subcoder(coder->literal, - coder->literal_context_bits, coder->literal_pos_mask, - position, mf->buffer[mf->read_pos - mf->read_ahead - 1]); - - if (is_literal_state(coder->state)) { - // Previous LZMA-symbol was a literal. Encode a normal - // literal without a match byte. - rc_bittree(&coder->rc, subcoder, 8, cur_byte); - } else { - // Previous LZMA-symbol was a match. Use the last byte of - // the match as a "match byte". That is, compare the bits - // of the current literal and the match byte. - const uint8_t match_byte = mf->buffer[ - mf->read_pos - coder->reps[0] - 1 - - mf->read_ahead]; - literal_matched(&coder->rc, subcoder, match_byte, cur_byte); - } - - update_literal(coder->state); -} - - -////////////////// -// Match length // -////////////////// - -static void -length_update_prices(lzma_length_encoder *lc, const uint32_t pos_state) -{ - const uint32_t table_size = lc->table_size; - lc->counters[pos_state] = table_size; - - const uint32_t a0 = rc_bit_0_price(lc->choice); - const uint32_t a1 = rc_bit_1_price(lc->choice); - const uint32_t b0 = a1 + rc_bit_0_price(lc->choice2); - const uint32_t b1 = a1 + rc_bit_1_price(lc->choice2); - uint32_t *const prices = lc->prices[pos_state]; - - uint32_t i; - for (i = 0; i < table_size && i < LEN_LOW_SYMBOLS; ++i) - prices[i] = a0 + rc_bittree_price(lc->low[pos_state], - LEN_LOW_BITS, i); - - for (; i < table_size && i < LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; ++i) - prices[i] = b0 + rc_bittree_price(lc->mid[pos_state], - LEN_MID_BITS, i - LEN_LOW_SYMBOLS); - - for (; i < table_size; ++i) - prices[i] = b1 + rc_bittree_price(lc->high, LEN_HIGH_BITS, - i - LEN_LOW_SYMBOLS - LEN_MID_SYMBOLS); - - return; -} - - -static inline void -length(lzma_range_encoder *rc, lzma_length_encoder *lc, - const uint32_t pos_state, uint32_t len, const bool fast_mode) -{ - assert(len <= MATCH_LEN_MAX); - len -= MATCH_LEN_MIN; - - if (len < LEN_LOW_SYMBOLS) { - rc_bit(rc, &lc->choice, 0); - rc_bittree(rc, lc->low[pos_state], LEN_LOW_BITS, len); - } else { - rc_bit(rc, &lc->choice, 1); - len -= LEN_LOW_SYMBOLS; - - if (len < LEN_MID_SYMBOLS) { - rc_bit(rc, &lc->choice2, 0); - rc_bittree(rc, lc->mid[pos_state], LEN_MID_BITS, len); - } else { - rc_bit(rc, &lc->choice2, 1); - len -= LEN_MID_SYMBOLS; - rc_bittree(rc, lc->high, LEN_HIGH_BITS, len); - } - } - - // Only getoptimum uses the prices so don't update the table when - // in fast mode. - if (!fast_mode) - if (--lc->counters[pos_state] == 0) - length_update_prices(lc, pos_state); -} - - -/////////// -// Match // -/////////// - -static inline void -match(lzma_coder *coder, const uint32_t pos_state, - const uint32_t distance, const uint32_t len) -{ - update_match(coder->state); - - length(&coder->rc, &coder->match_len_encoder, pos_state, len, - coder->fast_mode); - - const uint32_t pos_slot = get_pos_slot(distance); - const uint32_t len_to_pos_state = get_len_to_pos_state(len); - rc_bittree(&coder->rc, coder->pos_slot[len_to_pos_state], - POS_SLOT_BITS, pos_slot); - - if (pos_slot >= START_POS_MODEL_INDEX) { - const uint32_t footer_bits = (pos_slot >> 1) - 1; - const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; - const uint32_t pos_reduced = distance - base; - - if (pos_slot < END_POS_MODEL_INDEX) { - // Careful here: base - pos_slot - 1 can be -1, but - // rc_bittree_reverse starts at probs[1], not probs[0]. - rc_bittree_reverse(&coder->rc, - coder->pos_special + base - pos_slot - 1, - footer_bits, pos_reduced); - } else { - rc_direct(&coder->rc, pos_reduced >> ALIGN_BITS, - footer_bits - ALIGN_BITS); - rc_bittree_reverse( - &coder->rc, coder->pos_align, - ALIGN_BITS, pos_reduced & ALIGN_MASK); - ++coder->align_price_count; - } - } - - coder->reps[3] = coder->reps[2]; - coder->reps[2] = coder->reps[1]; - coder->reps[1] = coder->reps[0]; - coder->reps[0] = distance; - ++coder->match_price_count; -} - - -//////////////////// -// Repeated match // -//////////////////// - -static inline void -rep_match(lzma_coder *coder, const uint32_t pos_state, - const uint32_t rep, const uint32_t len) -{ - if (rep == 0) { - rc_bit(&coder->rc, &coder->is_rep0[coder->state], 0); - rc_bit(&coder->rc, - &coder->is_rep0_long[coder->state][pos_state], - len != 1); - } else { - const uint32_t distance = coder->reps[rep]; - rc_bit(&coder->rc, &coder->is_rep0[coder->state], 1); - - if (rep == 1) { - rc_bit(&coder->rc, &coder->is_rep1[coder->state], 0); - } else { - rc_bit(&coder->rc, &coder->is_rep1[coder->state], 1); - rc_bit(&coder->rc, &coder->is_rep2[coder->state], - rep - 2); - - if (rep == 3) - coder->reps[3] = coder->reps[2]; - - coder->reps[2] = coder->reps[1]; - } - - coder->reps[1] = coder->reps[0]; - coder->reps[0] = distance; - } - - if (len == 1) { - update_short_rep(coder->state); - } else { - length(&coder->rc, &coder->rep_len_encoder, pos_state, len, - coder->fast_mode); - update_long_rep(coder->state); - } -} - - -////////// -// Main // -////////// - -static void -encode_symbol(lzma_coder *coder, lzma_mf *mf, - uint32_t back, uint32_t len, uint32_t position) -{ - const uint32_t pos_state = position & coder->pos_mask; - - if (back == UINT32_MAX) { - // Literal i.e. eight-bit byte - assert(len == 1); - rc_bit(&coder->rc, - &coder->is_match[coder->state][pos_state], 0); - literal(coder, mf, position); - } else { - // Some type of match - rc_bit(&coder->rc, - &coder->is_match[coder->state][pos_state], 1); - - if (back < REP_DISTANCES) { - // It's a repeated match i.e. the same distance - // has been used earlier. - rc_bit(&coder->rc, &coder->is_rep[coder->state], 1); - rep_match(coder, pos_state, back, len); - } else { - // Normal match - rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); - match(coder, pos_state, back - REP_DISTANCES, len); - } - } - - assert(mf->read_ahead >= len); - mf->read_ahead -= len; -} - - -static bool -encode_init(lzma_coder *coder, lzma_mf *mf) -{ - assert(mf_position(mf) == 0); - - if (mf->read_pos == mf->read_limit) { - if (mf->action == LZMA_RUN) - return false; // We cannot do anything. - - // We are finishing (we cannot get here when flushing). - assert(mf->write_pos == mf->read_pos); - assert(mf->action == LZMA_FINISH); - } else { - // Do the actual initialization. The first LZMA symbol must - // always be a literal. - mf_skip(mf, 1); - mf->read_ahead = 0; - rc_bit(&coder->rc, &coder->is_match[0][0], 0); - rc_bittree(&coder->rc, coder->literal[0], 8, mf->buffer[0]); - } - - // Initialization is done (except if empty file). - coder->is_initialized = true; - - return true; -} - - -static void -encode_eopm(lzma_coder *coder, uint32_t position) -{ - const uint32_t pos_state = position & coder->pos_mask; - rc_bit(&coder->rc, &coder->is_match[coder->state][pos_state], 1); - rc_bit(&coder->rc, &coder->is_rep[coder->state], 0); - match(coder, pos_state, UINT32_MAX, MATCH_LEN_MIN); -} - - -/// Number of bytes that a single encoding loop in lzma_lzma_encode() can -/// consume from the dictionary. This limit comes from lzma_lzma_optimum() -/// and may need to be updated if that function is significantly modified. -#define LOOP_INPUT_MAX (OPTS + 1) - - -extern lzma_ret -lzma_lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size, uint32_t limit) -{ - // Initialize the stream if no data has been encoded yet. - if (!coder->is_initialized && !encode_init(coder, mf)) - return LZMA_OK; - - // Get the lowest bits of the uncompressed offset from the LZ layer. - uint32_t position = mf_position(mf); - - while (true) { - // Encode pending bits, if any. Calling this before encoding - // the next symbol is needed only with plain LZMA, since - // LZMA2 always provides big enough buffer to flush - // everything out from the range encoder. For the same reason, - // rc_encode() never returns true when this function is used - // as part of LZMA2 encoder. - if (rc_encode(&coder->rc, out, out_pos, out_size)) { - assert(limit == UINT32_MAX); - return LZMA_OK; - } - - // With LZMA2 we need to take care that compressed size of - // a chunk doesn't get too big. - // FIXME? Check if this could be improved. - if (limit != UINT32_MAX - && (mf->read_pos - mf->read_ahead >= limit - || *out_pos + rc_pending(&coder->rc) - >= LZMA2_CHUNK_MAX - - LOOP_INPUT_MAX)) - break; - - // Check that there is some input to process. - if (mf->read_pos >= mf->read_limit) { - if (mf->action == LZMA_RUN) - return LZMA_OK; - - if (mf->read_ahead == 0) - break; - } - - // Get optimal match (repeat position and length). - // Value ranges for pos: - // - [0, REP_DISTANCES): repeated match - // - [REP_DISTANCES, UINT32_MAX): - // match at (pos - REP_DISTANCES) - // - UINT32_MAX: not a match but a literal - // Value ranges for len: - // - [MATCH_LEN_MIN, MATCH_LEN_MAX] - uint32_t len; - uint32_t back; - - if (coder->fast_mode) - lzma_lzma_optimum_fast(coder, mf, &back, &len); - else - lzma_lzma_optimum_normal( - coder, mf, &back, &len, position); - - encode_symbol(coder, mf, back, len, position); - - position += len; - } - - if (!coder->is_flushed) { - coder->is_flushed = true; - - // We don't support encoding plain LZMA streams without EOPM, - // and LZMA2 doesn't use EOPM at LZMA level. - if (limit == UINT32_MAX) - encode_eopm(coder, position); - - // Flush the remaining bytes from the range encoder. - rc_flush(&coder->rc); - - // Copy the remaining bytes to the output buffer. If there - // isn't enough output space, we will copy out the remaining - // bytes on the next call to this function by using - // the rc_encode() call in the encoding loop above. - if (rc_encode(&coder->rc, out, out_pos, out_size)) { - assert(limit == UINT32_MAX); - return LZMA_OK; - } - } - - // Make it ready for the next LZMA2 chunk. - coder->is_flushed = false; - - return LZMA_STREAM_END; -} - - -static lzma_ret -lzma_encode(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint8_t *restrict out, size_t *restrict out_pos, - size_t out_size) -{ - // Plain LZMA has no support for sync-flushing. - if (unlikely(mf->action == LZMA_SYNC_FLUSH)) - return LZMA_OPTIONS_ERROR; - - return lzma_lzma_encode(coder, mf, out, out_pos, out_size, UINT32_MAX); -} - - -//////////////////// -// Initialization // -//////////////////// - -static bool -is_options_valid(const lzma_options_lzma *options) -{ - // Validate some of the options. LZ encoder validates nice_len too - // but we need a valid value here earlier. - return is_lclppb_valid(options) - && options->nice_len >= MATCH_LEN_MIN - && options->nice_len <= MATCH_LEN_MAX - && (options->mode == LZMA_MODE_FAST - || options->mode == LZMA_MODE_NORMAL); -} - - -static void -set_lz_options(lzma_lz_options *lz_options, const lzma_options_lzma *options) -{ - // LZ encoder initialization does the validation for these so we - // don't need to validate here. - lz_options->before_size = OPTS; - lz_options->dict_size = options->dict_size; - lz_options->after_size = LOOP_INPUT_MAX; - lz_options->match_len_max = MATCH_LEN_MAX; - lz_options->nice_len = options->nice_len; - lz_options->match_finder = options->mf; - lz_options->depth = options->depth; - lz_options->preset_dict = options->preset_dict; - lz_options->preset_dict_size = options->preset_dict_size; - return; -} - - -static void -length_encoder_reset(lzma_length_encoder *lencoder, - const uint32_t num_pos_states, const bool fast_mode) -{ - bit_reset(lencoder->choice); - bit_reset(lencoder->choice2); - - for (size_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { - bittree_reset(lencoder->low[pos_state], LEN_LOW_BITS); - bittree_reset(lencoder->mid[pos_state], LEN_MID_BITS); - } - - bittree_reset(lencoder->high, LEN_HIGH_BITS); - - if (!fast_mode) - for (size_t pos_state = 0; pos_state < num_pos_states; - ++pos_state) - length_update_prices(lencoder, pos_state); - - return; -} - - -extern lzma_ret -lzma_lzma_encoder_reset(lzma_coder *coder, const lzma_options_lzma *options) -{ - if (!is_options_valid(options)) - return LZMA_OPTIONS_ERROR; - - coder->pos_mask = (1U << options->pb) - 1; - coder->literal_context_bits = options->lc; - coder->literal_pos_mask = (1U << options->lp) - 1; - - // Range coder - rc_reset(&coder->rc); - - // State - coder->state = STATE_LIT_LIT; - for (size_t i = 0; i < REP_DISTANCES; ++i) - coder->reps[i] = 0; - - literal_init(coder->literal, options->lc, options->lp); - - // Bit encoders - for (size_t i = 0; i < STATES; ++i) { - for (size_t j = 0; j <= coder->pos_mask; ++j) { - bit_reset(coder->is_match[i][j]); - bit_reset(coder->is_rep0_long[i][j]); - } - - bit_reset(coder->is_rep[i]); - bit_reset(coder->is_rep0[i]); - bit_reset(coder->is_rep1[i]); - bit_reset(coder->is_rep2[i]); - } - - for (size_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) - bit_reset(coder->pos_special[i]); - - // Bit tree encoders - for (size_t i = 0; i < LEN_TO_POS_STATES; ++i) - bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); - - bittree_reset(coder->pos_align, ALIGN_BITS); - - // Length encoders - length_encoder_reset(&coder->match_len_encoder, - 1U << options->pb, coder->fast_mode); - - length_encoder_reset(&coder->rep_len_encoder, - 1U << options->pb, coder->fast_mode); - - // Price counts are incremented every time appropriate probabilities - // are changed. price counts are set to zero when the price tables - // are updated, which is done when the appropriate price counts have - // big enough value, and lzma_mf.read_ahead == 0 which happens at - // least every OPTS (a few thousand) possible price count increments. - // - // By resetting price counts to UINT32_MAX / 2, we make sure that the - // price tables will be initialized before they will be used (since - // the value is definitely big enough), and that it is OK to increment - // price counts without risk of integer overflow (since UINT32_MAX / 2 - // is small enough). The current code doesn't increment price counts - // before initializing price tables, but it maybe done in future if - // we add support for saving the state between LZMA2 chunks. - coder->match_price_count = UINT32_MAX / 2; - coder->align_price_count = UINT32_MAX / 2; - - coder->opts_end_index = 0; - coder->opts_current_index = 0; - - return LZMA_OK; -} - - -extern lzma_ret -lzma_lzma_encoder_create(lzma_coder **coder_ptr, lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options) -{ - // Allocate lzma_coder if it wasn't already allocated. - if (*coder_ptr == NULL) { - *coder_ptr = lzma_alloc(sizeof(lzma_coder), allocator); - if (*coder_ptr == NULL) - return LZMA_MEM_ERROR; - } - - lzma_coder *coder = *coder_ptr; - - // Set compression mode. We haven't validates the options yet, - // but it's OK here, since nothing bad happens with invalid - // options in the code below, and they will get rejected by - // lzma_lzma_encoder_reset() call at the end of this function. - switch (options->mode) { - case LZMA_MODE_FAST: - coder->fast_mode = true; - break; - - case LZMA_MODE_NORMAL: { - coder->fast_mode = false; - - // Set dist_table_size. - // Round the dictionary size up to next 2^n. - uint32_t log_size = 0; - while ((UINT32_C(1) << log_size) < options->dict_size) - ++log_size; - - coder->dist_table_size = log_size * 2; - - // Length encoders' price table size - coder->match_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; - coder->rep_len_encoder.table_size - = options->nice_len + 1 - MATCH_LEN_MIN; - break; - } - - default: - return LZMA_OPTIONS_ERROR; - } - - // We don't need to write the first byte as literal if there is - // a non-empty preset dictionary. encode_init() wouldn't even work - // if there is a non-empty preset dictionary, because encode_init() - // assumes that position is zero and previous byte is also zero. - coder->is_initialized = options->preset_dict != NULL - && options->preset_dict_size > 0; - coder->is_flushed = false; - - set_lz_options(lz_options, options); - - return lzma_lzma_encoder_reset(coder, options); -} - - -static lzma_ret -lzma_encoder_init(lzma_lz_encoder *lz, lzma_allocator *allocator, - const void *options, lzma_lz_options *lz_options) -{ - lz->code = &lzma_encode; - return lzma_lzma_encoder_create( - &lz->coder, allocator, options, lz_options); -} - - -extern lzma_ret -lzma_lzma_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return lzma_lz_encoder_init( - next, allocator, filters, &lzma_encoder_init); -} - - -extern uint64_t -lzma_lzma_encoder_memusage(const void *options) -{ - if (!is_options_valid(options)) - return UINT64_MAX; - - lzma_lz_options lz_options; - set_lz_options(&lz_options, options); - - const uint64_t lz_memusage = lzma_lz_encoder_memusage(&lz_options); - if (lz_memusage == UINT64_MAX) - return UINT64_MAX; - - return (uint64_t)(sizeof(lzma_coder)) + lz_memusage; -} - - -extern bool -lzma_lzma_lclppb_encode(const lzma_options_lzma *options, uint8_t *byte) -{ - if (!is_lclppb_valid(options)) - return true; - - *byte = (options->pb * 5 + options->lp) * 9 + options->lc; - assert(*byte <= (4 * 5 + 4) * 9 + 8); - - return false; -} - - -#ifdef HAVE_ENCODER_LZMA1 -extern lzma_ret -lzma_lzma_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_lzma *const opt = options; - - if (lzma_lzma_lclppb_encode(opt, out)) - return LZMA_PROG_ERROR; - - unaligned_write32le(out + 1, opt->dict_size); - - return LZMA_OK; -} -#endif - - -extern LZMA_API(lzma_bool) -lzma_mode_is_supported(lzma_mode mode) -{ - return mode == LZMA_MODE_FAST || mode == LZMA_MODE_NORMAL; -} diff --git a/deps/lzma/liblzma/lzma/lzma_encoder.h b/deps/lzma/liblzma/lzma/lzma_encoder.h deleted file mode 100644 index 835e1f58330400..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder.h -/// \brief LZMA encoder API -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_ENCODER_H -#define LZMA_LZMA_ENCODER_H - -#include "common.h" - - -extern lzma_ret lzma_lzma_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern uint64_t lzma_lzma_encoder_memusage(const void *options); - -extern lzma_ret lzma_lzma_props_encode(const void *options, uint8_t *out); - - -/// Encodes lc/lp/pb into one byte. Returns false on success and true on error. -extern bool lzma_lzma_lclppb_encode( - const lzma_options_lzma *options, uint8_t *byte); - - -#ifdef LZMA_LZ_ENCODER_H - -/// Initializes raw LZMA encoder; this is used by LZMA2. -extern lzma_ret lzma_lzma_encoder_create( - lzma_coder **coder_ptr, lzma_allocator *allocator, - const lzma_options_lzma *options, lzma_lz_options *lz_options); - - -/// Resets an already initialized LZMA encoder; this is used by LZMA2. -extern lzma_ret lzma_lzma_encoder_reset( - lzma_coder *coder, const lzma_options_lzma *options); - - -extern lzma_ret lzma_lzma_encode(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, - uint32_t read_limit); - -#endif - -#endif diff --git a/deps/lzma/liblzma/lzma/lzma_encoder_optimum_fast.c b/deps/lzma/liblzma/lzma/lzma_encoder_optimum_fast.c deleted file mode 100644 index f835f69356bd5d..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder_optimum_fast.c +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_optimum_fast.c -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma_encoder_private.h" - - -#define change_pair(small_dist, big_dist) \ - (((big_dist) >> 7) > (small_dist)) - - -extern void -lzma_lzma_optimum_fast(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res) -{ - const uint32_t nice_len = mf->nice_len; - - uint32_t len_main; - uint32_t matches_count; - if (mf->read_ahead == 0) { - len_main = mf_find(mf, &matches_count, coder->matches); - } else { - assert(mf->read_ahead == 1); - len_main = coder->longest_match_length; - matches_count = coder->matches_count; - } - - const uint8_t *buf = mf_ptr(mf) - 1; - const uint32_t buf_avail = my_min(mf_avail(mf) + 1, MATCH_LEN_MAX); - - if (buf_avail < 2) { - // There's not enough input left to encode a match. - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - - // Look for repeated matches; scan the previous four match distances - uint32_t rep_len = 0; - uint32_t rep_index = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - // Pointer to the beginning of the match candidate - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - // If the first two bytes (2 == MATCH_LEN_MIN) do not match, - // this rep is not useful. - if (not_equal_16(buf, buf_back)) - continue; - - // The first two bytes matched. - // Calculate the length of the match. - uint32_t len; - for (len = 2; len < buf_avail - && buf[len] == buf_back[len]; ++len) ; - - // If we have found a repeated match that is at least - // nice_len long, return it immediately. - if (len >= nice_len) { - *back_res = i; - *len_res = len; - mf_skip(mf, len - 1); - return; - } - - if (len > rep_len) { - rep_index = i; - rep_len = len; - } - } - - // We didn't find a long enough repeated match. Encode it as a normal - // match if the match length is at least nice_len. - if (len_main >= nice_len) { - *back_res = coder->matches[matches_count - 1].dist - + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 1); - return; - } - - uint32_t back_main = 0; - if (len_main >= 2) { - back_main = coder->matches[matches_count - 1].dist; - - while (matches_count > 1 && len_main == - coder->matches[matches_count - 2].len + 1) { - if (!change_pair(coder->matches[ - matches_count - 2].dist, - back_main)) - break; - - --matches_count; - len_main = coder->matches[matches_count - 1].len; - back_main = coder->matches[matches_count - 1].dist; - } - - if (len_main == 2 && back_main >= 0x80) - len_main = 1; - } - - if (rep_len >= 2) { - if (rep_len + 1 >= len_main - || (rep_len + 2 >= len_main - && back_main > (UINT32_C(1) << 9)) - || (rep_len + 3 >= len_main - && back_main > (UINT32_C(1) << 15))) { - *back_res = rep_index; - *len_res = rep_len; - mf_skip(mf, rep_len - 1); - return; - } - } - - if (len_main < 2 || buf_avail <= 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - - // Get the matches for the next byte. If we find a better match, - // the current byte is encoded as a literal. - coder->longest_match_length = mf_find(mf, - &coder->matches_count, coder->matches); - - if (coder->longest_match_length >= 2) { - const uint32_t new_dist = coder->matches[ - coder->matches_count - 1].dist; - - if ((coder->longest_match_length >= len_main - && new_dist < back_main) - || (coder->longest_match_length == len_main + 1 - && !change_pair(back_main, new_dist)) - || (coder->longest_match_length > len_main + 1) - || (coder->longest_match_length + 1 >= len_main - && len_main >= 3 - && change_pair(new_dist, back_main))) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - } - - // In contrast to LZMA SDK, dictionary could not have been moved - // between mf_find() calls, thus it is safe to just increment - // the old buf pointer instead of recalculating it with mf_ptr(). - ++buf; - - const uint32_t limit = len_main - 1; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - if (not_equal_16(buf, buf_back)) - continue; - - uint32_t len; - for (len = 2; len < limit - && buf[len] == buf_back[len]; ++len) ; - - if (len >= limit) { - *back_res = UINT32_MAX; - *len_res = 1; - return; - } - } - - *back_res = back_main + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 2); - return; -} diff --git a/deps/lzma/liblzma/lzma/lzma_encoder_optimum_normal.c b/deps/lzma/liblzma/lzma/lzma_encoder_optimum_normal.c deleted file mode 100644 index 7e856493c8cd3e..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder_optimum_normal.c +++ /dev/null @@ -1,868 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_optimum_normal.c -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "lzma_encoder_private.h" -#include "fastpos.h" - - -//////////// -// Prices // -//////////// - -static uint32_t -get_literal_price(const lzma_coder *const coder, const uint32_t pos, - const uint32_t prev_byte, const bool match_mode, - uint32_t match_byte, uint32_t symbol) -{ - const probability *const subcoder = literal_subcoder(coder->literal, - coder->literal_context_bits, coder->literal_pos_mask, - pos, prev_byte); - - uint32_t price = 0; - - if (!match_mode) { - price = rc_bittree_price(subcoder, 8, symbol); - } else { - uint32_t offset = 0x100; - symbol += UINT32_C(1) << 8; - - do { - match_byte <<= 1; - - const uint32_t match_bit = match_byte & offset; - const uint32_t subcoder_index - = offset + match_bit + (symbol >> 8); - const uint32_t bit = (symbol >> 7) & 1; - price += rc_bit_price(subcoder[subcoder_index], bit); - - symbol <<= 1; - offset &= ~(match_byte ^ symbol); - - } while (symbol < (UINT32_C(1) << 16)); - } - - return price; -} - - -static inline uint32_t -get_len_price(const lzma_length_encoder *const lencoder, - const uint32_t len, const uint32_t pos_state) -{ - // NOTE: Unlike the other price tables, length prices are updated - // in lzma_encoder.c - return lencoder->prices[pos_state][len - MATCH_LEN_MIN]; -} - - -static inline uint32_t -get_short_rep_price(const lzma_coder *const coder, - const lzma_lzma_state state, const uint32_t pos_state) -{ - return rc_bit_0_price(coder->is_rep0[state]) - + rc_bit_0_price(coder->is_rep0_long[state][pos_state]); -} - - -static inline uint32_t -get_pure_rep_price(const lzma_coder *const coder, const uint32_t rep_index, - const lzma_lzma_state state, uint32_t pos_state) -{ - uint32_t price; - - if (rep_index == 0) { - price = rc_bit_0_price(coder->is_rep0[state]); - price += rc_bit_1_price(coder->is_rep0_long[state][pos_state]); - } else { - price = rc_bit_1_price(coder->is_rep0[state]); - - if (rep_index == 1) { - price += rc_bit_0_price(coder->is_rep1[state]); - } else { - price += rc_bit_1_price(coder->is_rep1[state]); - price += rc_bit_price(coder->is_rep2[state], - rep_index - 2); - } - } - - return price; -} - - -static inline uint32_t -get_rep_price(const lzma_coder *const coder, const uint32_t rep_index, - const uint32_t len, const lzma_lzma_state state, - const uint32_t pos_state) -{ - return get_len_price(&coder->rep_len_encoder, len, pos_state) - + get_pure_rep_price(coder, rep_index, state, pos_state); -} - - -static inline uint32_t -get_pos_len_price(const lzma_coder *const coder, const uint32_t pos, - const uint32_t len, const uint32_t pos_state) -{ - const uint32_t len_to_pos_state = get_len_to_pos_state(len); - uint32_t price; - - if (pos < FULL_DISTANCES) { - price = coder->distances_prices[len_to_pos_state][pos]; - } else { - const uint32_t pos_slot = get_pos_slot_2(pos); - price = coder->pos_slot_prices[len_to_pos_state][pos_slot] - + coder->align_prices[pos & ALIGN_MASK]; - } - - price += get_len_price(&coder->match_len_encoder, len, pos_state); - - return price; -} - - -static void -fill_distances_prices(lzma_coder *coder) -{ - for (uint32_t len_to_pos_state = 0; - len_to_pos_state < LEN_TO_POS_STATES; - ++len_to_pos_state) { - - uint32_t *const pos_slot_prices - = coder->pos_slot_prices[len_to_pos_state]; - - // Price to encode the pos_slot. - for (uint32_t pos_slot = 0; - pos_slot < coder->dist_table_size; ++pos_slot) - pos_slot_prices[pos_slot] = rc_bittree_price( - coder->pos_slot[len_to_pos_state], - POS_SLOT_BITS, pos_slot); - - // For matches with distance >= FULL_DISTANCES, add the price - // of the direct bits part of the match distance. (Align bits - // are handled by fill_align_prices()). - for (uint32_t pos_slot = END_POS_MODEL_INDEX; - pos_slot < coder->dist_table_size; ++pos_slot) - pos_slot_prices[pos_slot] += rc_direct_price( - ((pos_slot >> 1) - 1) - ALIGN_BITS); - - // Distances in the range [0, 3] are fully encoded with - // pos_slot, so they are used for coder->distances_prices - // as is. - for (uint32_t i = 0; i < START_POS_MODEL_INDEX; ++i) - coder->distances_prices[len_to_pos_state][i] - = pos_slot_prices[i]; - } - - // Distances in the range [4, 127] depend on pos_slot and pos_special. - // We do this in a loop separate from the above loop to avoid - // redundant calls to get_pos_slot(). - for (uint32_t i = START_POS_MODEL_INDEX; i < FULL_DISTANCES; ++i) { - const uint32_t pos_slot = get_pos_slot(i); - const uint32_t footer_bits = ((pos_slot >> 1) - 1); - const uint32_t base = (2 | (pos_slot & 1)) << footer_bits; - const uint32_t price = rc_bittree_reverse_price( - coder->pos_special + base - pos_slot - 1, - footer_bits, i - base); - - for (uint32_t len_to_pos_state = 0; - len_to_pos_state < LEN_TO_POS_STATES; - ++len_to_pos_state) - coder->distances_prices[len_to_pos_state][i] - = price + coder->pos_slot_prices[ - len_to_pos_state][pos_slot]; - } - - coder->match_price_count = 0; - return; -} - - -static void -fill_align_prices(lzma_coder *coder) -{ - for (uint32_t i = 0; i < ALIGN_TABLE_SIZE; ++i) - coder->align_prices[i] = rc_bittree_reverse_price( - coder->pos_align, ALIGN_BITS, i); - - coder->align_price_count = 0; - return; -} - - -///////////// -// Optimal // -///////////// - -static inline void -make_literal(lzma_optimal *optimal) -{ - optimal->back_prev = UINT32_MAX; - optimal->prev_1_is_literal = false; -} - - -static inline void -make_short_rep(lzma_optimal *optimal) -{ - optimal->back_prev = 0; - optimal->prev_1_is_literal = false; -} - - -#define is_short_rep(optimal) \ - ((optimal).back_prev == 0) - - -static void -backward(lzma_coder *restrict coder, uint32_t *restrict len_res, - uint32_t *restrict back_res, uint32_t cur) -{ - coder->opts_end_index = cur; - - uint32_t pos_mem = coder->opts[cur].pos_prev; - uint32_t back_mem = coder->opts[cur].back_prev; - - do { - if (coder->opts[cur].prev_1_is_literal) { - make_literal(&coder->opts[pos_mem]); - coder->opts[pos_mem].pos_prev = pos_mem - 1; - - if (coder->opts[cur].prev_2) { - coder->opts[pos_mem - 1].prev_1_is_literal - = false; - coder->opts[pos_mem - 1].pos_prev - = coder->opts[cur].pos_prev_2; - coder->opts[pos_mem - 1].back_prev - = coder->opts[cur].back_prev_2; - } - } - - const uint32_t pos_prev = pos_mem; - const uint32_t back_cur = back_mem; - - back_mem = coder->opts[pos_prev].back_prev; - pos_mem = coder->opts[pos_prev].pos_prev; - - coder->opts[pos_prev].back_prev = back_cur; - coder->opts[pos_prev].pos_prev = cur; - cur = pos_prev; - - } while (cur != 0); - - coder->opts_current_index = coder->opts[0].pos_prev; - *len_res = coder->opts[0].pos_prev; - *back_res = coder->opts[0].back_prev; - - return; -} - - -////////// -// Main // -////////// - -static inline uint32_t -helper1(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res, - uint32_t position) -{ - const uint32_t nice_len = mf->nice_len; - - uint32_t len_main; - uint32_t matches_count; - - if (mf->read_ahead == 0) { - len_main = mf_find(mf, &matches_count, coder->matches); - } else { - assert(mf->read_ahead == 1); - len_main = coder->longest_match_length; - matches_count = coder->matches_count; - } - - const uint32_t buf_avail = my_min(mf_avail(mf) + 1, MATCH_LEN_MAX); - if (buf_avail < 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return UINT32_MAX; - } - - const uint8_t *const buf = mf_ptr(mf) - 1; - - uint32_t rep_lens[REP_DISTANCES]; - uint32_t rep_max_index = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - const uint8_t *const buf_back = buf - coder->reps[i] - 1; - - if (not_equal_16(buf, buf_back)) { - rep_lens[i] = 0; - continue; - } - - uint32_t len_test; - for (len_test = 2; len_test < buf_avail - && buf[len_test] == buf_back[len_test]; - ++len_test) ; - - rep_lens[i] = len_test; - if (len_test > rep_lens[rep_max_index]) - rep_max_index = i; - } - - if (rep_lens[rep_max_index] >= nice_len) { - *back_res = rep_max_index; - *len_res = rep_lens[rep_max_index]; - mf_skip(mf, *len_res - 1); - return UINT32_MAX; - } - - - if (len_main >= nice_len) { - *back_res = coder->matches[matches_count - 1].dist - + REP_DISTANCES; - *len_res = len_main; - mf_skip(mf, len_main - 1); - return UINT32_MAX; - } - - const uint8_t current_byte = *buf; - const uint8_t match_byte = *(buf - coder->reps[0] - 1); - - if (len_main < 2 && current_byte != match_byte - && rep_lens[rep_max_index] < 2) { - *back_res = UINT32_MAX; - *len_res = 1; - return UINT32_MAX; - } - - coder->opts[0].state = coder->state; - - const uint32_t pos_state = position & coder->pos_mask; - - coder->opts[1].price = rc_bit_0_price( - coder->is_match[coder->state][pos_state]) - + get_literal_price(coder, position, buf[-1], - !is_literal_state(coder->state), - match_byte, current_byte); - - make_literal(&coder->opts[1]); - - const uint32_t match_price = rc_bit_1_price( - coder->is_match[coder->state][pos_state]); - const uint32_t rep_match_price = match_price - + rc_bit_1_price(coder->is_rep[coder->state]); - - if (match_byte == current_byte) { - const uint32_t short_rep_price = rep_match_price - + get_short_rep_price( - coder, coder->state, pos_state); - - if (short_rep_price < coder->opts[1].price) { - coder->opts[1].price = short_rep_price; - make_short_rep(&coder->opts[1]); - } - } - - const uint32_t len_end = my_max(len_main, rep_lens[rep_max_index]); - - if (len_end < 2) { - *back_res = coder->opts[1].back_prev; - *len_res = 1; - return UINT32_MAX; - } - - coder->opts[1].pos_prev = 0; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) - coder->opts[0].backs[i] = coder->reps[i]; - - uint32_t len = len_end; - do { - coder->opts[len].price = RC_INFINITY_PRICE; - } while (--len >= 2); - - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) { - uint32_t rep_len = rep_lens[i]; - if (rep_len < 2) - continue; - - const uint32_t price = rep_match_price + get_pure_rep_price( - coder, i, coder->state, pos_state); - - do { - const uint32_t cur_and_len_price = price - + get_len_price( - &coder->rep_len_encoder, - rep_len, pos_state); - - if (cur_and_len_price < coder->opts[rep_len].price) { - coder->opts[rep_len].price = cur_and_len_price; - coder->opts[rep_len].pos_prev = 0; - coder->opts[rep_len].back_prev = i; - coder->opts[rep_len].prev_1_is_literal = false; - } - } while (--rep_len >= 2); - } - - - const uint32_t normal_match_price = match_price - + rc_bit_0_price(coder->is_rep[coder->state]); - - len = rep_lens[0] >= 2 ? rep_lens[0] + 1 : 2; - if (len <= len_main) { - uint32_t i = 0; - while (len > coder->matches[i].len) - ++i; - - for(; ; ++len) { - const uint32_t dist = coder->matches[i].dist; - const uint32_t cur_and_len_price = normal_match_price - + get_pos_len_price(coder, - dist, len, pos_state); - - if (cur_and_len_price < coder->opts[len].price) { - coder->opts[len].price = cur_and_len_price; - coder->opts[len].pos_prev = 0; - coder->opts[len].back_prev - = dist + REP_DISTANCES; - coder->opts[len].prev_1_is_literal = false; - } - - if (len == coder->matches[i].len) - if (++i == matches_count) - break; - } - } - - return len_end; -} - - -static inline uint32_t -helper2(lzma_coder *coder, uint32_t *reps, const uint8_t *buf, - uint32_t len_end, uint32_t position, const uint32_t cur, - const uint32_t nice_len, const uint32_t buf_avail_full) -{ - uint32_t matches_count = coder->matches_count; - uint32_t new_len = coder->longest_match_length; - uint32_t pos_prev = coder->opts[cur].pos_prev; - lzma_lzma_state state; - - if (coder->opts[cur].prev_1_is_literal) { - --pos_prev; - - if (coder->opts[cur].prev_2) { - state = coder->opts[coder->opts[cur].pos_prev_2].state; - - if (coder->opts[cur].back_prev_2 < REP_DISTANCES) - update_long_rep(state); - else - update_match(state); - - } else { - state = coder->opts[pos_prev].state; - } - - update_literal(state); - - } else { - state = coder->opts[pos_prev].state; - } - - if (pos_prev == cur - 1) { - if (is_short_rep(coder->opts[cur])) - update_short_rep(state); - else - update_literal(state); - } else { - uint32_t pos; - if (coder->opts[cur].prev_1_is_literal - && coder->opts[cur].prev_2) { - pos_prev = coder->opts[cur].pos_prev_2; - pos = coder->opts[cur].back_prev_2; - update_long_rep(state); - } else { - pos = coder->opts[cur].back_prev; - if (pos < REP_DISTANCES) - update_long_rep(state); - else - update_match(state); - } - - if (pos < REP_DISTANCES) { - reps[0] = coder->opts[pos_prev].backs[pos]; - - uint32_t i; - for (i = 1; i <= pos; ++i) - reps[i] = coder->opts[pos_prev].backs[i - 1]; - - for (; i < REP_DISTANCES; ++i) - reps[i] = coder->opts[pos_prev].backs[i]; - - } else { - reps[0] = pos - REP_DISTANCES; - - for (uint32_t i = 1; i < REP_DISTANCES; ++i) - reps[i] = coder->opts[pos_prev].backs[i - 1]; - } - } - - coder->opts[cur].state = state; - - for (uint32_t i = 0; i < REP_DISTANCES; ++i) - coder->opts[cur].backs[i] = reps[i]; - - const uint32_t cur_price = coder->opts[cur].price; - - const uint8_t current_byte = *buf; - const uint8_t match_byte = *(buf - reps[0] - 1); - - const uint32_t pos_state = position & coder->pos_mask; - - const uint32_t cur_and_1_price = cur_price - + rc_bit_0_price(coder->is_match[state][pos_state]) - + get_literal_price(coder, position, buf[-1], - !is_literal_state(state), match_byte, current_byte); - - bool next_is_literal = false; - - if (cur_and_1_price < coder->opts[cur + 1].price) { - coder->opts[cur + 1].price = cur_and_1_price; - coder->opts[cur + 1].pos_prev = cur; - make_literal(&coder->opts[cur + 1]); - next_is_literal = true; - } - - const uint32_t match_price = cur_price - + rc_bit_1_price(coder->is_match[state][pos_state]); - const uint32_t rep_match_price = match_price - + rc_bit_1_price(coder->is_rep[state]); - - if (match_byte == current_byte - && !(coder->opts[cur + 1].pos_prev < cur - && coder->opts[cur + 1].back_prev == 0)) { - - const uint32_t short_rep_price = rep_match_price - + get_short_rep_price(coder, state, pos_state); - - if (short_rep_price <= coder->opts[cur + 1].price) { - coder->opts[cur + 1].price = short_rep_price; - coder->opts[cur + 1].pos_prev = cur; - make_short_rep(&coder->opts[cur + 1]); - next_is_literal = true; - } - } - - if (buf_avail_full < 2) - return len_end; - - const uint32_t buf_avail = my_min(buf_avail_full, nice_len); - - if (!next_is_literal && match_byte != current_byte) { // speed optimization - // try literal + rep0 - const uint8_t *const buf_back = buf - reps[0] - 1; - const uint32_t limit = my_min(buf_avail_full, nice_len + 1); - - uint32_t len_test = 1; - while (len_test < limit && buf[len_test] == buf_back[len_test]) - ++len_test; - - --len_test; - - if (len_test >= 2) { - lzma_lzma_state state_2 = state; - update_literal(state_2); - - const uint32_t pos_state_next = (position + 1) & coder->pos_mask; - const uint32_t next_rep_match_price = cur_and_1_price - + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - //for (; len_test >= 2; --len_test) { - const uint32_t offset = cur + 1 + len_test; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = false; - } - //} - } - } - - - uint32_t start_len = 2; // speed optimization - - for (uint32_t rep_index = 0; rep_index < REP_DISTANCES; ++rep_index) { - const uint8_t *const buf_back = buf - reps[rep_index] - 1; - if (not_equal_16(buf, buf_back)) - continue; - - uint32_t len_test; - for (len_test = 2; len_test < buf_avail - && buf[len_test] == buf_back[len_test]; - ++len_test) ; - - while (len_end < cur + len_test) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t len_test_temp = len_test; - const uint32_t price = rep_match_price + get_pure_rep_price( - coder, rep_index, state, pos_state); - - do { - const uint32_t cur_and_len_price = price - + get_len_price(&coder->rep_len_encoder, - len_test, pos_state); - - if (cur_and_len_price < coder->opts[cur + len_test].price) { - coder->opts[cur + len_test].price = cur_and_len_price; - coder->opts[cur + len_test].pos_prev = cur; - coder->opts[cur + len_test].back_prev = rep_index; - coder->opts[cur + len_test].prev_1_is_literal = false; - } - } while (--len_test >= 2); - - len_test = len_test_temp; - - if (rep_index == 0) - start_len = len_test + 1; - - - uint32_t len_test_2 = len_test + 1; - const uint32_t limit = my_min(buf_avail_full, - len_test_2 + nice_len); - for (; len_test_2 < limit - && buf[len_test_2] == buf_back[len_test_2]; - ++len_test_2) ; - - len_test_2 -= len_test + 1; - - if (len_test_2 >= 2) { - lzma_lzma_state state_2 = state; - update_long_rep(state_2); - - uint32_t pos_state_next = (position + len_test) & coder->pos_mask; - - const uint32_t cur_and_len_literal_price = price - + get_len_price(&coder->rep_len_encoder, - len_test, pos_state) - + rc_bit_0_price(coder->is_match[state_2][pos_state_next]) - + get_literal_price(coder, position + len_test, - buf[len_test - 1], true, - buf_back[len_test], buf[len_test]); - - update_literal(state_2); - - pos_state_next = (position + len_test + 1) & coder->pos_mask; - - const uint32_t next_rep_match_price = cur_and_len_literal_price - + rc_bit_1_price(coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - //for(; len_test_2 >= 2; len_test_2--) { - const uint32_t offset = cur + len_test + 1 + len_test_2; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - const uint32_t cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test_2, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + len_test + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = true; - coder->opts[offset].pos_prev_2 = cur; - coder->opts[offset].back_prev_2 = rep_index; - } - //} - } - } - - - //for (uint32_t len_test = 2; len_test <= new_len; ++len_test) - if (new_len > buf_avail) { - new_len = buf_avail; - - matches_count = 0; - while (new_len > coder->matches[matches_count].len) - ++matches_count; - - coder->matches[matches_count++].len = new_len; - } - - - if (new_len >= start_len) { - const uint32_t normal_match_price = match_price - + rc_bit_0_price(coder->is_rep[state]); - - while (len_end < cur + new_len) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - uint32_t i = 0; - while (start_len > coder->matches[i].len) - ++i; - - for (uint32_t len_test = start_len; ; ++len_test) { - const uint32_t cur_back = coder->matches[i].dist; - uint32_t cur_and_len_price = normal_match_price - + get_pos_len_price(coder, - cur_back, len_test, pos_state); - - if (cur_and_len_price < coder->opts[cur + len_test].price) { - coder->opts[cur + len_test].price = cur_and_len_price; - coder->opts[cur + len_test].pos_prev = cur; - coder->opts[cur + len_test].back_prev - = cur_back + REP_DISTANCES; - coder->opts[cur + len_test].prev_1_is_literal = false; - } - - if (len_test == coder->matches[i].len) { - // Try Match + Literal + Rep0 - const uint8_t *const buf_back = buf - cur_back - 1; - uint32_t len_test_2 = len_test + 1; - const uint32_t limit = my_min(buf_avail_full, - len_test_2 + nice_len); - - for (; len_test_2 < limit && - buf[len_test_2] == buf_back[len_test_2]; - ++len_test_2) ; - - len_test_2 -= len_test + 1; - - if (len_test_2 >= 2) { - lzma_lzma_state state_2 = state; - update_match(state_2); - uint32_t pos_state_next - = (position + len_test) & coder->pos_mask; - - const uint32_t cur_and_len_literal_price = cur_and_len_price - + rc_bit_0_price( - coder->is_match[state_2][pos_state_next]) - + get_literal_price(coder, - position + len_test, - buf[len_test - 1], - true, - buf_back[len_test], - buf[len_test]); - - update_literal(state_2); - pos_state_next = (pos_state_next + 1) & coder->pos_mask; - - const uint32_t next_rep_match_price - = cur_and_len_literal_price - + rc_bit_1_price( - coder->is_match[state_2][pos_state_next]) - + rc_bit_1_price(coder->is_rep[state_2]); - - // for(; len_test_2 >= 2; --len_test_2) { - const uint32_t offset = cur + len_test + 1 + len_test_2; - - while (len_end < offset) - coder->opts[++len_end].price = RC_INFINITY_PRICE; - - cur_and_len_price = next_rep_match_price - + get_rep_price(coder, 0, len_test_2, - state_2, pos_state_next); - - if (cur_and_len_price < coder->opts[offset].price) { - coder->opts[offset].price = cur_and_len_price; - coder->opts[offset].pos_prev = cur + len_test + 1; - coder->opts[offset].back_prev = 0; - coder->opts[offset].prev_1_is_literal = true; - coder->opts[offset].prev_2 = true; - coder->opts[offset].pos_prev_2 = cur; - coder->opts[offset].back_prev_2 - = cur_back + REP_DISTANCES; - } - //} - } - - if (++i == matches_count) - break; - } - } - } - - return len_end; -} - - -extern void -lzma_lzma_optimum_normal(lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res, - uint32_t position) -{ - // If we have symbols pending, return the next pending symbol. - if (coder->opts_end_index != coder->opts_current_index) { - assert(mf->read_ahead > 0); - *len_res = coder->opts[coder->opts_current_index].pos_prev - - coder->opts_current_index; - *back_res = coder->opts[coder->opts_current_index].back_prev; - coder->opts_current_index = coder->opts[ - coder->opts_current_index].pos_prev; - return; - } - - // Update the price tables. In LZMA SDK <= 4.60 (and possibly later) - // this was done in both initialization function and in the main loop. - // In liblzma they were moved into this single place. - if (mf->read_ahead == 0) { - if (coder->match_price_count >= (1 << 7)) - fill_distances_prices(coder); - - if (coder->align_price_count >= ALIGN_TABLE_SIZE) - fill_align_prices(coder); - } - - // TODO: This needs quite a bit of cleaning still. But splitting - // the original function into two pieces makes it at least a little - // more readable, since those two parts don't share many variables. - - uint32_t len_end = helper1(coder, mf, back_res, len_res, position); - if (len_end == UINT32_MAX) - return; - - uint32_t reps[REP_DISTANCES]; - memcpy(reps, coder->reps, sizeof(reps)); - - uint32_t cur; - for (cur = 1; cur < len_end; ++cur) { - assert(cur < OPTS); - - coder->longest_match_length = mf_find( - mf, &coder->matches_count, coder->matches); - - if (coder->longest_match_length >= mf->nice_len) - break; - - len_end = helper2(coder, reps, mf_ptr(mf) - 1, len_end, - position + cur, cur, mf->nice_len, - my_min(mf_avail(mf) + 1, OPTS - 1 - cur)); - } - - backward(coder, len_res, back_res, cur); - return; -} diff --git a/deps/lzma/liblzma/lzma/lzma_encoder_presets.c b/deps/lzma/liblzma/lzma/lzma_encoder_presets.c deleted file mode 100644 index 8484b77444b1f3..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder_presets.c +++ /dev/null @@ -1,63 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_presets.c -/// \brief Encoder presets -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "common.h" - - -extern LZMA_API(lzma_bool) -lzma_lzma_preset(lzma_options_lzma *options, uint32_t preset) -{ - const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK; - const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK; - const uint32_t supported_flags = LZMA_PRESET_EXTREME; - - if (level > 9 || (flags & ~supported_flags)) - return true; - - options->preset_dict = NULL; - options->preset_dict_size = 0; - - options->lc = LZMA_LC_DEFAULT; - options->lp = LZMA_LP_DEFAULT; - options->pb = LZMA_PB_DEFAULT; - - static const uint8_t dict_pow2[] - = { 18, 20, 21, 22, 22, 23, 23, 24, 25, 26 }; - options->dict_size = UINT32_C(1) << dict_pow2[level]; - - if (level <= 3) { - options->mode = LZMA_MODE_FAST; - options->mf = level == 0 ? LZMA_MF_HC3 : LZMA_MF_HC4; - options->nice_len = level <= 1 ? 128 : 273; - static const uint8_t depths[] = { 4, 8, 24, 48 }; - options->depth = depths[level]; - } else { - options->mode = LZMA_MODE_NORMAL; - options->mf = LZMA_MF_BT4; - options->nice_len = level == 4 ? 16 : level == 5 ? 32 : 64; - options->depth = 0; - } - - if (flags & LZMA_PRESET_EXTREME) { - options->mode = LZMA_MODE_NORMAL; - options->mf = LZMA_MF_BT4; - if (level == 3 || level == 5) { - options->nice_len = 192; - options->depth = 0; - } else { - options->nice_len = 273; - options->depth = 512; - } - } - - return false; -} diff --git a/deps/lzma/liblzma/lzma/lzma_encoder_private.h b/deps/lzma/liblzma/lzma/lzma_encoder_private.h deleted file mode 100644 index 684745236c8240..00000000000000 --- a/deps/lzma/liblzma/lzma/lzma_encoder_private.h +++ /dev/null @@ -1,148 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file lzma_encoder_private.h -/// \brief Private definitions for LZMA encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_LZMA_ENCODER_PRIVATE_H -#define LZMA_LZMA_ENCODER_PRIVATE_H - -#include "lz_encoder.h" -#include "range_encoder.h" -#include "lzma_common.h" -#include "lzma_encoder.h" - - -// Macro to compare if the first two bytes in two buffers differ. This is -// needed in lzma_lzma_optimum_*() to test if the match is at least -// MATCH_LEN_MIN bytes. Unaligned access gives tiny gain so there's no -// reason to not use it when it is supported. -#ifdef TUKLIB_FAST_UNALIGNED_ACCESS -# define not_equal_16(a, b) \ - (*(const uint16_t *)(a) != *(const uint16_t *)(b)) -#else -# define not_equal_16(a, b) \ - ((a)[0] != (b)[0] || (a)[1] != (b)[1]) -#endif - - -// Optimal - Number of entries in the optimum array. -#define OPTS (1 << 12) - - -typedef struct { - probability choice; - probability choice2; - probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; - probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; - probability high[LEN_HIGH_SYMBOLS]; - - uint32_t prices[POS_STATES_MAX][LEN_SYMBOLS]; - uint32_t table_size; - uint32_t counters[POS_STATES_MAX]; - -} lzma_length_encoder; - - -typedef struct { - lzma_lzma_state state; - - bool prev_1_is_literal; - bool prev_2; - - uint32_t pos_prev_2; - uint32_t back_prev_2; - - uint32_t price; - uint32_t pos_prev; // pos_next; - uint32_t back_prev; - - uint32_t backs[REP_DISTANCES]; - -} lzma_optimal; - - -struct lzma_coder_s { - /// Range encoder - lzma_range_encoder rc; - - /// State - lzma_lzma_state state; - - /// The four most recent match distances - uint32_t reps[REP_DISTANCES]; - - /// Array of match candidates - lzma_match matches[MATCH_LEN_MAX + 1]; - - /// Number of match candidates in matches[] - uint32_t matches_count; - - /// Variable to hold the length of the longest match between calls - /// to lzma_lzma_optimum_*(). - uint32_t longest_match_length; - - /// True if using getoptimumfast - bool fast_mode; - - /// True if the encoder has been initialized by encoding the first - /// byte as a literal. - bool is_initialized; - - /// True if the range encoder has been flushed, but not all bytes - /// have been written to the output buffer yet. - bool is_flushed; - - uint32_t pos_mask; ///< (1 << pos_bits) - 1 - uint32_t literal_context_bits; - uint32_t literal_pos_mask; - - // These are the same as in lzma_decoder.c. See comments there. - probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; - probability is_match[STATES][POS_STATES_MAX]; - probability is_rep[STATES]; - probability is_rep0[STATES]; - probability is_rep1[STATES]; - probability is_rep2[STATES]; - probability is_rep0_long[STATES][POS_STATES_MAX]; - probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; - probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; - probability pos_align[ALIGN_TABLE_SIZE]; - - // These are the same as in lzma_decoder.c except that the encoders - // include also price tables. - lzma_length_encoder match_len_encoder; - lzma_length_encoder rep_len_encoder; - - // Price tables - uint32_t pos_slot_prices[LEN_TO_POS_STATES][POS_SLOTS]; - uint32_t distances_prices[LEN_TO_POS_STATES][FULL_DISTANCES]; - uint32_t dist_table_size; - uint32_t match_price_count; - - uint32_t align_prices[ALIGN_TABLE_SIZE]; - uint32_t align_price_count; - - // Optimal - uint32_t opts_end_index; - uint32_t opts_current_index; - lzma_optimal opts[OPTS]; -}; - - -extern void lzma_lzma_optimum_fast( - lzma_coder *restrict coder, lzma_mf *restrict mf, - uint32_t *restrict back_res, uint32_t *restrict len_res); - -extern void lzma_lzma_optimum_normal(lzma_coder *restrict coder, - lzma_mf *restrict mf, uint32_t *restrict back_res, - uint32_t *restrict len_res, uint32_t position); - -#endif diff --git a/deps/lzma/liblzma/rangecoder/Makefile.inc b/deps/lzma/liblzma/rangecoder/Makefile.inc deleted file mode 100644 index d8a597a26075ea..00000000000000 --- a/deps/lzma/liblzma/rangecoder/Makefile.inc +++ /dev/null @@ -1,21 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -EXTRA_DIST += rangecoder/price_tablegen.c - -liblzma_la_SOURCES += rangecoder/range_common.h - -if COND_ENCODER_LZMA1 -liblzma_la_SOURCES += \ - rangecoder/range_encoder.h \ - rangecoder/price.h \ - rangecoder/price_table.c -endif - -if COND_DECODER_LZMA1 -liblzma_la_SOURCES += rangecoder/range_decoder.h -endif diff --git a/deps/lzma/liblzma/rangecoder/price.h b/deps/lzma/liblzma/rangecoder/price.h deleted file mode 100644 index 8ae02ca7474e0e..00000000000000 --- a/deps/lzma/liblzma/rangecoder/price.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file price.h -/// \brief Probability price calculation -// -// Author: Igor Pavlov -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_PRICE_H -#define LZMA_PRICE_H - - -#define RC_MOVE_REDUCING_BITS 4 -#define RC_BIT_PRICE_SHIFT_BITS 4 -#define RC_PRICE_TABLE_SIZE (RC_BIT_MODEL_TOTAL >> RC_MOVE_REDUCING_BITS) - -#define RC_INFINITY_PRICE (UINT32_C(1) << 30) - - -/// Lookup table for the inline functions defined in this file. -extern const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE]; - - -static inline uint32_t -rc_bit_price(const probability prob, const uint32_t bit) -{ - return lzma_rc_prices[(prob ^ ((UINT32_C(0) - bit) - & (RC_BIT_MODEL_TOTAL - 1))) >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bit_0_price(const probability prob) -{ - return lzma_rc_prices[prob >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bit_1_price(const probability prob) -{ - return lzma_rc_prices[(prob ^ (RC_BIT_MODEL_TOTAL - 1)) - >> RC_MOVE_REDUCING_BITS]; -} - - -static inline uint32_t -rc_bittree_price(const probability *const probs, - const uint32_t bit_levels, uint32_t symbol) -{ - uint32_t price = 0; - symbol += UINT32_C(1) << bit_levels; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - price += rc_bit_price(probs[symbol], bit); - } while (symbol != 1); - - return price; -} - - -static inline uint32_t -rc_bittree_reverse_price(const probability *const probs, - uint32_t bit_levels, uint32_t symbol) -{ - uint32_t price = 0; - uint32_t model_index = 1; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - price += rc_bit_price(probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (--bit_levels != 0); - - return price; -} - - -static inline uint32_t -rc_direct_price(const uint32_t bits) -{ - return bits << RC_BIT_PRICE_SHIFT_BITS; -} - -#endif diff --git a/deps/lzma/liblzma/rangecoder/price_table.c b/deps/lzma/liblzma/rangecoder/price_table.c deleted file mode 100644 index ac64bf62c76724..00000000000000 --- a/deps/lzma/liblzma/rangecoder/price_table.c +++ /dev/null @@ -1,22 +0,0 @@ -/* This file has been automatically generated by price_tablegen.c. */ - -#include "range_encoder.h" - -const uint8_t lzma_rc_prices[RC_PRICE_TABLE_SIZE] = { - 128, 103, 91, 84, 78, 73, 69, 66, - 63, 61, 58, 56, 54, 52, 51, 49, - 48, 46, 45, 44, 43, 42, 41, 40, - 39, 38, 37, 36, 35, 34, 34, 33, - 32, 31, 31, 30, 29, 29, 28, 28, - 27, 26, 26, 25, 25, 24, 24, 23, - 23, 22, 22, 22, 21, 21, 20, 20, - 19, 19, 19, 18, 18, 17, 17, 17, - 16, 16, 16, 15, 15, 15, 14, 14, - 14, 13, 13, 13, 12, 12, 12, 11, - 11, 11, 11, 10, 10, 10, 10, 9, - 9, 9, 9, 8, 8, 8, 8, 7, - 7, 7, 7, 6, 6, 6, 6, 5, - 5, 5, 5, 5, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1 -}; diff --git a/deps/lzma/liblzma/rangecoder/price_tablegen.c b/deps/lzma/liblzma/rangecoder/price_tablegen.c deleted file mode 100644 index bf08ce39d7e592..00000000000000 --- a/deps/lzma/liblzma/rangecoder/price_tablegen.c +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file price_tablegen.c -/// \brief Probability price table generator -/// -/// Compiling: gcc -std=c99 -o price_tablegen price_tablegen.c -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include "range_common.h" -#include "price.h" - - -static uint32_t rc_prices[RC_PRICE_TABLE_SIZE]; - - -static void -init_price_table(void) -{ - for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2; - i < RC_BIT_MODEL_TOTAL; - i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) { - const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS; - uint32_t w = i; - uint32_t bit_count = 0; - - for (uint32_t j = 0; j < cycles_bits; ++j) { - w *= w; - bit_count <<= 1; - - while (w >= (UINT32_C(1) << 16)) { - w >>= 1; - ++bit_count; - } - } - - rc_prices[i >> RC_MOVE_REDUCING_BITS] - = (RC_BIT_MODEL_TOTAL_BITS << cycles_bits) - - 15 - bit_count; - } - - return; -} - - -static void -print_price_table(void) -{ - printf("/* This file has been automatically generated by " - "price_tablegen.c. */\n\n" - "#include \"range_encoder.h\"\n\n" - "const uint8_t lzma_rc_prices[" - "RC_PRICE_TABLE_SIZE] = {"); - - const size_t array_size = sizeof(lzma_rc_prices) - / sizeof(lzma_rc_prices[0]); - for (size_t i = 0; i < array_size; ++i) { - if (i % 8 == 0) - printf("\n\t"); - - printf("%4" PRIu32, rc_prices[i]); - - if (i != array_size - 1) - printf(","); - } - - printf("\n};\n"); - - return; -} - - -int -main(void) -{ - init_price_table(); - print_price_table(); - return 0; -} diff --git a/deps/lzma/liblzma/rangecoder/range_common.h b/deps/lzma/liblzma/rangecoder/range_common.h deleted file mode 100644 index 0e6424198d13d1..00000000000000 --- a/deps/lzma/liblzma/rangecoder/range_common.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_common.h -/// \brief Common things for range encoder and decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_COMMON_H -#define LZMA_RANGE_COMMON_H - -#ifdef HAVE_CONFIG_H -# include "common.h" -#endif - - -/////////////// -// Constants // -/////////////// - -#define RC_SHIFT_BITS 8 -#define RC_TOP_BITS 24 -#define RC_TOP_VALUE (UINT32_C(1) << RC_TOP_BITS) -#define RC_BIT_MODEL_TOTAL_BITS 11 -#define RC_BIT_MODEL_TOTAL (UINT32_C(1) << RC_BIT_MODEL_TOTAL_BITS) -#define RC_MOVE_BITS 5 - - -//////////// -// Macros // -//////////// - -// Resets the probability so that both 0 and 1 have probability of 50 % -#define bit_reset(prob) \ - prob = RC_BIT_MODEL_TOTAL >> 1 - -// This does the same for a complete bit tree. -// (A tree represented as an array.) -#define bittree_reset(probs, bit_levels) \ - for (uint32_t bt_i = 0; bt_i < (1 << (bit_levels)); ++bt_i) \ - bit_reset((probs)[bt_i]) - - -////////////////////// -// Type definitions // -////////////////////// - -/// \brief Type of probabilities used with range coder -/// -/// This needs to be at least 12-bit integer, so uint16_t is a logical choice. -/// However, on some architecture and compiler combinations, a bigger type -/// may give better speed, because the probability variables are accessed -/// a lot. On the other hand, bigger probability type increases cache -/// footprint, since there are 2 to 14 thousand probability variables in -/// LZMA (assuming the limit of lc + lp <= 4; with lc + lp <= 12 there -/// would be about 1.5 million variables). -/// -/// With malicious files, the initialization speed of the LZMA decoder can -/// become important. In that case, smaller probability variables mean that -/// there is less bytes to write to RAM, which makes initialization faster. -/// With big probability type, the initialization can become so slow that it -/// can be a problem e.g. for email servers doing virus scanning. -/// -/// I will be sticking to uint16_t unless some specific architectures -/// are *much* faster (20-50 %) with uint32_t. -typedef uint16_t probability; - -#endif diff --git a/deps/lzma/liblzma/rangecoder/range_decoder.h b/deps/lzma/liblzma/rangecoder/range_decoder.h deleted file mode 100644 index fb96180fb3995a..00000000000000 --- a/deps/lzma/liblzma/rangecoder/range_decoder.h +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_decoder.h -/// \brief Range Decoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_DECODER_H -#define LZMA_RANGE_DECODER_H - -#include "range_common.h" - - -typedef struct { - uint32_t range; - uint32_t code; - uint32_t init_bytes_left; -} lzma_range_decoder; - - -/// Reads the first five bytes to initialize the range decoder. -static inline bool -rc_read_init(lzma_range_decoder *rc, const uint8_t *restrict in, - size_t *restrict in_pos, size_t in_size) -{ - while (rc->init_bytes_left > 0) { - if (*in_pos == in_size) - return false; - - rc->code = (rc->code << 8) | in[*in_pos]; - ++*in_pos; - --rc->init_bytes_left; - } - - return true; -} - - -/// Makes local copies of range decoder and *in_pos variables. Doing this -/// improves speed significantly. The range decoder macros expect also -/// variables `in' and `in_size' to be defined. -#define rc_to_local(range_decoder, in_pos) \ - lzma_range_decoder rc = range_decoder; \ - size_t rc_in_pos = (in_pos); \ - uint32_t rc_bound - - -/// Stores the local copes back to the range decoder structure. -#define rc_from_local(range_decoder, in_pos) \ -do { \ - range_decoder = rc; \ - in_pos = rc_in_pos; \ -} while (0) - - -/// Resets the range decoder structure. -#define rc_reset(range_decoder) \ -do { \ - (range_decoder).range = UINT32_MAX; \ - (range_decoder).code = 0; \ - (range_decoder).init_bytes_left = 5; \ -} while (0) - - -/// When decoding has been properly finished, rc.code is always zero unless -/// the input stream is corrupt. So checking this can catch some corrupt -/// files especially if they don't have any other integrity check. -#define rc_is_finished(range_decoder) \ - ((range_decoder).code == 0) - - -/// Read the next input byte if needed. If more input is needed but there is -/// no more input available, "goto out" is used to jump out of the main -/// decoder loop. -#define rc_normalize(seq) \ -do { \ - if (rc.range < RC_TOP_VALUE) { \ - if (unlikely(rc_in_pos == in_size)) { \ - coder->sequence = seq; \ - goto out; \ - } \ - rc.range <<= RC_SHIFT_BITS; \ - rc.code = (rc.code << RC_SHIFT_BITS) | in[rc_in_pos++]; \ - } \ -} while (0) - - -/// Start decoding a bit. This must be used together with rc_update_0() -/// and rc_update_1(): -/// -/// rc_if_0(prob, seq) { -/// rc_update_0(prob); -/// // Do something -/// } else { -/// rc_update_1(prob); -/// // Do something else -/// } -/// -#define rc_if_0(prob, seq) \ - rc_normalize(seq); \ - rc_bound = (rc.range >> RC_BIT_MODEL_TOTAL_BITS) * (prob); \ - if (rc.code < rc_bound) - - -/// Update the range decoder state and the used probability variable to -/// match a decoded bit of 0. -#define rc_update_0(prob) \ -do { \ - rc.range = rc_bound; \ - prob += (RC_BIT_MODEL_TOTAL - (prob)) >> RC_MOVE_BITS; \ -} while (0) - - -/// Update the range decoder state and the used probability variable to -/// match a decoded bit of 1. -#define rc_update_1(prob) \ -do { \ - rc.range -= rc_bound; \ - rc.code -= rc_bound; \ - prob -= (prob) >> RC_MOVE_BITS; \ -} while (0) - - -/// Decodes one bit and runs action0 or action1 depending on the decoded bit. -/// This macro is used as the last step in bittree reverse decoders since -/// those don't use "symbol" for anything else than indexing the probability -/// arrays. -#define rc_bit_last(prob, action0, action1, seq) \ -do { \ - rc_if_0(prob, seq) { \ - rc_update_0(prob); \ - action0; \ - } else { \ - rc_update_1(prob); \ - action1; \ - } \ -} while (0) - - -/// Decodes one bit, updates "symbol", and runs action0 or action1 depending -/// on the decoded bit. -#define rc_bit(prob, action0, action1, seq) \ - rc_bit_last(prob, \ - symbol <<= 1; action0, \ - symbol = (symbol << 1) + 1; action1, \ - seq); - - -/// Like rc_bit() but add "case seq:" as a prefix. This makes the unrolled -/// loops more readable because the code isn't littered with "case" -/// statements. On the other hand this also makes it less readable, since -/// spotting the places where the decoder loop may be restarted is less -/// obvious. -#define rc_bit_case(prob, action0, action1, seq) \ - case seq: rc_bit(prob, action0, action1, seq) - - -/// Decode a bit without using a probability. -#define rc_direct(dest, seq) \ -do { \ - rc_normalize(seq); \ - rc.range >>= 1; \ - rc.code -= rc.range; \ - rc_bound = UINT32_C(0) - (rc.code >> 31); \ - rc.code += rc.range & rc_bound; \ - dest = (dest << 1) + (rc_bound + 1); \ -} while (0) - - -// NOTE: No macros are provided for bittree decoding. It seems to be simpler -// to just write them open in the code. - -#endif diff --git a/deps/lzma/liblzma/rangecoder/range_encoder.h b/deps/lzma/liblzma/rangecoder/range_encoder.h deleted file mode 100644 index 1e1c36995b6332..00000000000000 --- a/deps/lzma/liblzma/rangecoder/range_encoder.h +++ /dev/null @@ -1,231 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file range_encoder.h -/// \brief Range Encoder -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_RANGE_ENCODER_H -#define LZMA_RANGE_ENCODER_H - -#include "range_common.h" -#include "price.h" - - -/// Maximum number of symbols that can be put pending into lzma_range_encoder -/// structure between calls to lzma_rc_encode(). For LZMA, 52+5 is enough -/// (match with big distance and length followed by range encoder flush). -#define RC_SYMBOLS_MAX 58 - - -typedef struct { - uint64_t low; - uint64_t cache_size; - uint32_t range; - uint8_t cache; - - /// Number of symbols in the tables - size_t count; - - /// rc_encode()'s position in the tables - size_t pos; - - /// Symbols to encode - enum { - RC_BIT_0, - RC_BIT_1, - RC_DIRECT_0, - RC_DIRECT_1, - RC_FLUSH, - } symbols[RC_SYMBOLS_MAX]; - - /// Probabilities associated with RC_BIT_0 or RC_BIT_1 - probability *probs[RC_SYMBOLS_MAX]; - -} lzma_range_encoder; - - -static inline void -rc_reset(lzma_range_encoder *rc) -{ - rc->low = 0; - rc->cache_size = 1; - rc->range = UINT32_MAX; - rc->cache = 0; - rc->count = 0; - rc->pos = 0; -} - - -static inline void -rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit) -{ - rc->symbols[rc->count] = bit; - rc->probs[rc->count] = prob; - ++rc->count; -} - - -static inline void -rc_bittree(lzma_range_encoder *rc, probability *probs, - uint32_t bit_count, uint32_t symbol) -{ - uint32_t model_index = 1; - - do { - const uint32_t bit = (symbol >> --bit_count) & 1; - rc_bit(rc, &probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (bit_count != 0); -} - - -static inline void -rc_bittree_reverse(lzma_range_encoder *rc, probability *probs, - uint32_t bit_count, uint32_t symbol) -{ - uint32_t model_index = 1; - - do { - const uint32_t bit = symbol & 1; - symbol >>= 1; - rc_bit(rc, &probs[model_index], bit); - model_index = (model_index << 1) + bit; - } while (--bit_count != 0); -} - - -static inline void -rc_direct(lzma_range_encoder *rc, - uint32_t value, uint32_t bit_count) -{ - do { - rc->symbols[rc->count++] - = RC_DIRECT_0 + ((value >> --bit_count) & 1); - } while (bit_count != 0); -} - - -static inline void -rc_flush(lzma_range_encoder *rc) -{ - for (size_t i = 0; i < 5; ++i) - rc->symbols[rc->count++] = RC_FLUSH; -} - - -static inline bool -rc_shift_low(lzma_range_encoder *rc, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - if ((uint32_t)(rc->low) < (uint32_t)(0xFF000000) - || (uint32_t)(rc->low >> 32) != 0) { - do { - if (*out_pos == out_size) - return true; - - out[*out_pos] = rc->cache + (uint8_t)(rc->low >> 32); - ++*out_pos; - rc->cache = 0xFF; - - } while (--rc->cache_size != 0); - - rc->cache = (rc->low >> 24) & 0xFF; - } - - ++rc->cache_size; - rc->low = (rc->low & 0x00FFFFFF) << RC_SHIFT_BITS; - - return false; -} - - -static inline bool -rc_encode(lzma_range_encoder *rc, - uint8_t *out, size_t *out_pos, size_t out_size) -{ - assert(rc->count <= RC_SYMBOLS_MAX); - - while (rc->pos < rc->count) { - // Normalize - if (rc->range < RC_TOP_VALUE) { - if (rc_shift_low(rc, out, out_pos, out_size)) - return true; - - rc->range <<= RC_SHIFT_BITS; - } - - // Encode a bit - switch (rc->symbols[rc->pos]) { - case RC_BIT_0: { - probability prob = *rc->probs[rc->pos]; - rc->range = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) - * prob; - prob += (RC_BIT_MODEL_TOTAL - prob) >> RC_MOVE_BITS; - *rc->probs[rc->pos] = prob; - break; - } - - case RC_BIT_1: { - probability prob = *rc->probs[rc->pos]; - const uint32_t bound = prob * (rc->range - >> RC_BIT_MODEL_TOTAL_BITS); - rc->low += bound; - rc->range -= bound; - prob -= prob >> RC_MOVE_BITS; - *rc->probs[rc->pos] = prob; - break; - } - - case RC_DIRECT_0: - rc->range >>= 1; - break; - - case RC_DIRECT_1: - rc->range >>= 1; - rc->low += rc->range; - break; - - case RC_FLUSH: - // Prevent further normalizations. - rc->range = UINT32_MAX; - - // Flush the last five bytes (see rc_flush()). - do { - if (rc_shift_low(rc, out, out_pos, out_size)) - return true; - } while (++rc->pos < rc->count); - - // Reset the range encoder so we are ready to continue - // encoding if we weren't finishing the stream. - rc_reset(rc); - return false; - - default: - assert(0); - break; - } - - ++rc->pos; - } - - rc->count = 0; - rc->pos = 0; - - return false; -} - - -static inline uint64_t -rc_pending(const lzma_range_encoder *rc) -{ - return rc->cache_size + 5 - 1; -} - -#endif diff --git a/deps/lzma/liblzma/simple/Makefile.inc b/deps/lzma/liblzma/simple/Makefile.inc deleted file mode 100644 index 8a5e2d7fa96047..00000000000000 --- a/deps/lzma/liblzma/simple/Makefile.inc +++ /dev/null @@ -1,47 +0,0 @@ -## -## Author: Lasse Collin -## -## This file has been put into the public domain. -## You can do whatever you want with this file. -## - -liblzma_la_SOURCES += \ - simple/simple_coder.c \ - simple/simple_coder.h \ - simple/simple_private.h - -if COND_ENCODER_SIMPLE -liblzma_la_SOURCES += \ - simple/simple_encoder.c \ - simple/simple_encoder.h -endif - -if COND_DECODER_SIMPLE -liblzma_la_SOURCES += \ - simple/simple_decoder.c \ - simple/simple_decoder.h -endif - -if COND_FILTER_X86 -liblzma_la_SOURCES += simple/x86.c -endif - -if COND_FILTER_POWERPC -liblzma_la_SOURCES += simple/powerpc.c -endif - -if COND_FILTER_IA64 -liblzma_la_SOURCES += simple/ia64.c -endif - -if COND_FILTER_ARM -liblzma_la_SOURCES += simple/arm.c -endif - -if COND_FILTER_ARMTHUMB -liblzma_la_SOURCES += simple/armthumb.c -endif - -if COND_FILTER_SPARC -liblzma_la_SOURCES += simple/sparc.c -endif diff --git a/deps/lzma/liblzma/simple/arm.c b/deps/lzma/liblzma/simple/arm.c deleted file mode 100644 index a84702ac62f205..00000000000000 --- a/deps/lzma/liblzma/simple/arm.c +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file arm.c -/// \brief Filter for ARM binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -arm_code(lzma_simple *simple lzma_attribute((__unused__)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - if (buffer[i + 3] == 0xEB) { - uint32_t src = (buffer[i + 2] << 16) - | (buffer[i + 1] << 8) - | (buffer[i + 0]); - src <<= 2; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + 8 + src; - else - dest = src - (now_pos + (uint32_t)(i) + 8); - - dest >>= 2; - buffer[i + 2] = (dest >> 16); - buffer[i + 1] = (dest >> 8); - buffer[i + 0] = dest; - } - } - - return i; -} - - -static lzma_ret -arm_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &arm_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_arm_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return arm_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_arm_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return arm_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/liblzma/simple/armthumb.c b/deps/lzma/liblzma/simple/armthumb.c deleted file mode 100644 index 4b49175fec4d4b..00000000000000 --- a/deps/lzma/liblzma/simple/armthumb.c +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file armthumb.c -/// \brief Filter for ARM-Thumb binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -armthumb_code(lzma_simple *simple lzma_attribute((__unused__)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 2) { - if ((buffer[i + 1] & 0xF8) == 0xF0 - && (buffer[i + 3] & 0xF8) == 0xF8) { - uint32_t src = ((buffer[i + 1] & 0x7) << 19) - | (buffer[i + 0] << 11) - | ((buffer[i + 3] & 0x7) << 8) - | (buffer[i + 2]); - - src <<= 1; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + 4 + src; - else - dest = src - (now_pos + (uint32_t)(i) + 4); - - dest >>= 1; - buffer[i + 1] = 0xF0 | ((dest >> 19) & 0x7); - buffer[i + 0] = (dest >> 11); - buffer[i + 3] = 0xF8 | ((dest >> 8) & 0x7); - buffer[i + 2] = (dest); - i += 2; - } - } - - return i; -} - - -static lzma_ret -armthumb_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &armthumb_code, 0, 4, 2, is_encoder); -} - - -extern lzma_ret -lzma_simple_armthumb_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return armthumb_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_armthumb_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return armthumb_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/liblzma/simple/ia64.c b/deps/lzma/liblzma/simple/ia64.c deleted file mode 100644 index ce3692b98f1d77..00000000000000 --- a/deps/lzma/liblzma/simple/ia64.c +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file ia64.c -/// \brief Filter for IA64 (Itanium) binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -ia64_code(lzma_simple *simple lzma_attribute((__unused__)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - static const uint32_t BRANCH_TABLE[32] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 6, 6, 0, 0, 7, 7, - 4, 4, 0, 0, 4, 4, 0, 0 - }; - - size_t i; - for (i = 0; i + 16 <= size; i += 16) { - const uint32_t instr_template = buffer[i] & 0x1F; - const uint32_t mask = BRANCH_TABLE[instr_template]; - uint32_t bit_pos = 5; - - for (size_t slot = 0; slot < 3; ++slot, bit_pos += 41) { - if (((mask >> slot) & 1) == 0) - continue; - - const size_t byte_pos = (bit_pos >> 3); - const uint32_t bit_res = bit_pos & 0x7; - uint64_t instruction = 0; - - for (size_t j = 0; j < 6; ++j) - instruction += (uint64_t)( - buffer[i + j + byte_pos]) - << (8 * j); - - uint64_t inst_norm = instruction >> bit_res; - - if (((inst_norm >> 37) & 0xF) == 0x5 - && ((inst_norm >> 9) & 0x7) == 0 - /* && (inst_norm & 0x3F)== 0 */ - ) { - uint32_t src = (uint32_t)( - (inst_norm >> 13) & 0xFFFFF); - src |= ((inst_norm >> 36) & 1) << 20; - - src <<= 4; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - dest >>= 4; - - inst_norm &= ~((uint64_t)(0x8FFFFF) << 13); - inst_norm |= (uint64_t)(dest & 0xFFFFF) << 13; - inst_norm |= (uint64_t)(dest & 0x100000) - << (36 - 20); - - instruction &= (1 << bit_res) - 1; - instruction |= (inst_norm << bit_res); - - for (size_t j = 0; j < 6; j++) - buffer[i + j + byte_pos] = (uint8_t)( - instruction - >> (8 * j)); - } - } - } - - return i; -} - - -static lzma_ret -ia64_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &ia64_code, 0, 16, 16, is_encoder); -} - - -extern lzma_ret -lzma_simple_ia64_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return ia64_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_ia64_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return ia64_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/liblzma/simple/powerpc.c b/deps/lzma/liblzma/simple/powerpc.c deleted file mode 100644 index 6f8351176c5e37..00000000000000 --- a/deps/lzma/liblzma/simple/powerpc.c +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file powerpc.c -/// \brief Filter for PowerPC (big endian) binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -powerpc_code(lzma_simple *simple lzma_attribute((__unused__)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - // PowerPC branch 6(48) 24(Offset) 1(Abs) 1(Link) - if ((buffer[i] >> 2) == 0x12 - && ((buffer[i + 3] & 3) == 1)) { - - const uint32_t src = ((buffer[i + 0] & 3) << 24) - | (buffer[i + 1] << 16) - | (buffer[i + 2] << 8) - | (buffer[i + 3] & (~3)); - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - buffer[i + 0] = 0x48 | ((dest >> 24) & 0x03); - buffer[i + 1] = (dest >> 16); - buffer[i + 2] = (dest >> 8); - buffer[i + 3] &= 0x03; - buffer[i + 3] |= dest; - } - } - - return i; -} - - -static lzma_ret -powerpc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &powerpc_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_powerpc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return powerpc_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_powerpc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return powerpc_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/liblzma/simple/simple_coder.c b/deps/lzma/liblzma/simple/simple_coder.c deleted file mode 100644 index a02b039aa0bbd3..00000000000000 --- a/deps/lzma/liblzma/simple/simple_coder.c +++ /dev/null @@ -1,277 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_coder.c -/// \brief Wrapper for simple filters -/// -/// Simple filters don't change the size of the data i.e. number of bytes -/// in equals the number of bytes out. -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -/// Copied or encodes/decodes more data to out[]. -static lzma_ret -copy_or_code(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - assert(!coder->end_was_reached); - - if (coder->next.code == NULL) { - lzma_bufcpy(in, in_pos, in_size, out, out_pos, out_size); - - // Check if end of stream was reached. - if (coder->is_encoder && action == LZMA_FINISH - && *in_pos == in_size) - coder->end_was_reached = true; - - } else { - // Call the next coder in the chain to provide us some data. - const lzma_ret ret = coder->next.code( - coder->next.coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - - if (ret == LZMA_STREAM_END) { - assert(!coder->is_encoder - || action == LZMA_FINISH); - coder->end_was_reached = true; - - } else if (ret != LZMA_OK) { - return ret; - } - } - - return LZMA_OK; -} - - -static size_t -call_filter(lzma_coder *coder, uint8_t *buffer, size_t size) -{ - const size_t filtered = coder->filter(coder->simple, - coder->now_pos, coder->is_encoder, - buffer, size); - coder->now_pos += filtered; - return filtered; -} - - -static lzma_ret -simple_code(lzma_coder *coder, lzma_allocator *allocator, - const uint8_t *restrict in, size_t *restrict in_pos, - size_t in_size, uint8_t *restrict out, - size_t *restrict out_pos, size_t out_size, lzma_action action) -{ - // TODO: Add partial support for LZMA_SYNC_FLUSH. We can support it - // in cases when the filter is able to filter everything. With most - // simple filters it can be done at offset that is a multiple of 2, - // 4, or 16. With x86 filter, it needs good luck, and thus cannot - // be made to work predictably. - if (action == LZMA_SYNC_FLUSH) - return LZMA_OPTIONS_ERROR; - - // Flush already filtered data from coder->buffer[] to out[]. - if (coder->pos < coder->filtered) { - lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, - out, out_pos, out_size); - - // If we couldn't flush all the filtered data, return to - // application immediately. - if (coder->pos < coder->filtered) - return LZMA_OK; - - if (coder->end_was_reached) { - assert(coder->filtered == coder->size); - return LZMA_STREAM_END; - } - } - - // If we get here, there is no filtered data left in the buffer. - coder->filtered = 0; - - assert(!coder->end_was_reached); - - // If there is more output space left than there is unfiltered data - // in coder->buffer[], flush coder->buffer[] to out[], and copy/code - // more data to out[] hopefully filling it completely. Then filter - // the data in out[]. This step is where most of the data gets - // filtered if the buffer sizes used by the application are reasonable. - const size_t out_avail = out_size - *out_pos; - const size_t buf_avail = coder->size - coder->pos; - if (out_avail > buf_avail || buf_avail == 0) { - // Store the old position so that we know from which byte - // to start filtering. - const size_t out_start = *out_pos; - - // Flush data from coder->buffer[] to out[], but don't reset - // coder->pos and coder->size yet. This way the coder can be - // restarted if the next filter in the chain returns e.g. - // LZMA_MEM_ERROR. - memcpy(out + *out_pos, coder->buffer + coder->pos, buf_avail); - *out_pos += buf_avail; - - // Copy/Encode/Decode more data to out[]. - { - const lzma_ret ret = copy_or_code(coder, allocator, - in, in_pos, in_size, - out, out_pos, out_size, action); - assert(ret != LZMA_STREAM_END); - if (ret != LZMA_OK) - return ret; - } - - // Filter out[]. - const size_t size = *out_pos - out_start; - const size_t filtered = call_filter( - coder, out + out_start, size); - - const size_t unfiltered = size - filtered; - assert(unfiltered <= coder->allocated / 2); - - // Now we can update coder->pos and coder->size, because - // the next coder in the chain (if any) was successful. - coder->pos = 0; - coder->size = unfiltered; - - if (coder->end_was_reached) { - // The last byte has been copied to out[] already. - // They are left as is. - coder->size = 0; - - } else if (unfiltered > 0) { - // There is unfiltered data left in out[]. Copy it to - // coder->buffer[] and rewind *out_pos appropriately. - *out_pos -= unfiltered; - memcpy(coder->buffer, out + *out_pos, unfiltered); - } - } else if (coder->pos > 0) { - memmove(coder->buffer, coder->buffer + coder->pos, buf_avail); - coder->size -= coder->pos; - coder->pos = 0; - } - - assert(coder->pos == 0); - - // If coder->buffer[] isn't empty, try to fill it by copying/decoding - // more data. Then filter coder->buffer[] and copy the successfully - // filtered data to out[]. It is probable, that some filtered and - // unfiltered data will be left to coder->buffer[]. - if (coder->size > 0) { - { - const lzma_ret ret = copy_or_code(coder, allocator, - in, in_pos, in_size, - coder->buffer, &coder->size, - coder->allocated, action); - assert(ret != LZMA_STREAM_END); - if (ret != LZMA_OK) - return ret; - } - - coder->filtered = call_filter( - coder, coder->buffer, coder->size); - - // Everything is considered to be filtered if coder->buffer[] - // contains the last bytes of the data. - if (coder->end_was_reached) - coder->filtered = coder->size; - - // Flush as much as possible. - lzma_bufcpy(coder->buffer, &coder->pos, coder->filtered, - out, out_pos, out_size); - } - - // Check if we got everything done. - if (coder->end_was_reached && coder->pos == coder->size) - return LZMA_STREAM_END; - - return LZMA_OK; -} - - -static void -simple_coder_end(lzma_coder *coder, lzma_allocator *allocator) -{ - lzma_next_end(&coder->next, allocator); - lzma_free(coder->simple, allocator); - lzma_free(coder, allocator); - return; -} - - -static lzma_ret -simple_coder_update(lzma_coder *coder, lzma_allocator *allocator, - const lzma_filter *filters_null lzma_attribute((__unused__)), - const lzma_filter *reversed_filters) -{ - // No update support, just call the next filter in the chain. - return lzma_next_filter_update( - &coder->next, allocator, reversed_filters + 1); -} - - -extern lzma_ret -lzma_simple_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size), - size_t simple_size, size_t unfiltered_max, - uint32_t alignment, bool is_encoder) -{ - // Allocate memory for the lzma_coder structure if needed. - if (next->coder == NULL) { - // Here we allocate space also for the temporary buffer. We - // need twice the size of unfiltered_max, because then it - // is always possible to filter at least unfiltered_max bytes - // more data in coder->buffer[] if it can be filled completely. - next->coder = lzma_alloc(sizeof(lzma_coder) - + 2 * unfiltered_max, allocator); - if (next->coder == NULL) - return LZMA_MEM_ERROR; - - next->code = &simple_code; - next->end = &simple_coder_end; - next->update = &simple_coder_update; - - next->coder->next = LZMA_NEXT_CODER_INIT; - next->coder->filter = filter; - next->coder->allocated = 2 * unfiltered_max; - - // Allocate memory for filter-specific data structure. - if (simple_size > 0) { - next->coder->simple = lzma_alloc( - simple_size, allocator); - if (next->coder->simple == NULL) - return LZMA_MEM_ERROR; - } else { - next->coder->simple = NULL; - } - } - - if (filters[0].options != NULL) { - const lzma_options_bcj *simple = filters[0].options; - next->coder->now_pos = simple->start_offset; - if (next->coder->now_pos & (alignment - 1)) - return LZMA_OPTIONS_ERROR; - } else { - next->coder->now_pos = 0; - } - - // Reset variables. - next->coder->is_encoder = is_encoder; - next->coder->end_was_reached = false; - next->coder->pos = 0; - next->coder->filtered = 0; - next->coder->size = 0; - - return lzma_next_filter_init( - &next->coder->next, allocator, filters + 1); -} diff --git a/deps/lzma/liblzma/simple/simple_coder.h b/deps/lzma/liblzma/simple/simple_coder.h deleted file mode 100644 index 0952fad33b34c0..00000000000000 --- a/deps/lzma/liblzma/simple/simple_coder.h +++ /dev/null @@ -1,60 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_coder.h -/// \brief Wrapper for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_CODER_H -#define LZMA_SIMPLE_CODER_H - -#include "common.h" - - -extern lzma_ret lzma_simple_x86_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_x86_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_powerpc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_powerpc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_ia64_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_ia64_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_arm_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_arm_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_armthumb_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - - -extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -extern lzma_ret lzma_simple_sparc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters); - -#endif diff --git a/deps/lzma/liblzma/simple/simple_decoder.c b/deps/lzma/liblzma/simple/simple_decoder.c deleted file mode 100644 index 0beccd32a7d8e8..00000000000000 --- a/deps/lzma/liblzma/simple/simple_decoder.c +++ /dev/null @@ -1,40 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_decoder.c -/// \brief Properties decoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_decoder.h" - - -extern lzma_ret -lzma_simple_props_decode(void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size) -{ - if (props_size == 0) - return LZMA_OK; - - if (props_size != 4) - return LZMA_OPTIONS_ERROR; - - lzma_options_bcj *opt = lzma_alloc( - sizeof(lzma_options_bcj), allocator); - if (opt == NULL) - return LZMA_MEM_ERROR; - - opt->start_offset = unaligned_read32le(props); - - // Don't leave an options structure allocated if start_offset is zero. - if (opt->start_offset == 0) - lzma_free(opt, allocator); - else - *options = opt; - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/simple/simple_decoder.h b/deps/lzma/liblzma/simple/simple_decoder.h deleted file mode 100644 index b8bf590f768176..00000000000000 --- a/deps/lzma/liblzma/simple/simple_decoder.h +++ /dev/null @@ -1,22 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_decoder.h -/// \brief Properties decoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_DECODER_H -#define LZMA_SIMPLE_DECODER_H - -#include "simple_coder.h" - -extern lzma_ret lzma_simple_props_decode( - void **options, lzma_allocator *allocator, - const uint8_t *props, size_t props_size); - -#endif diff --git a/deps/lzma/liblzma/simple/simple_encoder.c b/deps/lzma/liblzma/simple/simple_encoder.c deleted file mode 100644 index 8aa463bed220ab..00000000000000 --- a/deps/lzma/liblzma/simple/simple_encoder.c +++ /dev/null @@ -1,38 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_encoder.c -/// \brief Properties encoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_encoder.h" - - -extern lzma_ret -lzma_simple_props_size(uint32_t *size, const void *options) -{ - const lzma_options_bcj *const opt = options; - *size = (opt == NULL || opt->start_offset == 0) ? 0 : 4; - return LZMA_OK; -} - - -extern lzma_ret -lzma_simple_props_encode(const void *options, uint8_t *out) -{ - const lzma_options_bcj *const opt = options; - - // The default start offset is zero, so we don't need to store any - // options unless the start offset is non-zero. - if (opt == NULL || opt->start_offset == 0) - return LZMA_OK; - - unaligned_write32le(out, opt->start_offset); - - return LZMA_OK; -} diff --git a/deps/lzma/liblzma/simple/simple_encoder.h b/deps/lzma/liblzma/simple/simple_encoder.h deleted file mode 100644 index 1cee4823a4ed74..00000000000000 --- a/deps/lzma/liblzma/simple/simple_encoder.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_encoder.c -/// \brief Properties encoder for simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_ENCODER_H -#define LZMA_SIMPLE_ENCODER_H - -#include "simple_coder.h" - - -extern lzma_ret lzma_simple_props_size(uint32_t *size, const void *options); - -extern lzma_ret lzma_simple_props_encode(const void *options, uint8_t *out); - -#endif diff --git a/deps/lzma/liblzma/simple/simple_private.h b/deps/lzma/liblzma/simple/simple_private.h deleted file mode 100644 index fcf9f7c1980ff9..00000000000000 --- a/deps/lzma/liblzma/simple/simple_private.h +++ /dev/null @@ -1,75 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file simple_private.h -/// \brief Private definitions for so called simple filters -// -// Author: Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef LZMA_SIMPLE_PRIVATE_H -#define LZMA_SIMPLE_PRIVATE_H - -#include "simple_coder.h" - - -typedef struct lzma_simple_s lzma_simple; - -struct lzma_coder_s { - /// Next filter in the chain - lzma_next_coder next; - - /// True if the next coder in the chain has returned LZMA_STREAM_END. - bool end_was_reached; - - /// True if filter() should encode the data; false to decode. - /// Currently all simple filters use the same function for encoding - /// and decoding, because the difference between encoders and decoders - /// is very small. - bool is_encoder; - - /// Pointer to filter-specific function, which does - /// the actual filtering. - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size); - - /// Pointer to filter-specific data, or NULL if filter doesn't need - /// any extra data. - lzma_simple *simple; - - /// The lowest 32 bits of the current position in the data. Most - /// filters need this to do conversions between absolute and relative - /// addresses. - uint32_t now_pos; - - /// Size of the memory allocated for the buffer. - size_t allocated; - - /// Flushing position in the temporary buffer. buffer[pos] is the - /// next byte to be copied to out[]. - size_t pos; - - /// buffer[filtered] is the first unfiltered byte. When pos is smaller - /// than filtered, there is unflushed filtered data in the buffer. - size_t filtered; - - /// Total number of bytes (both filtered and unfiltered) currently - /// in the temporary buffer. - size_t size; - - /// Temporary buffer - uint8_t buffer[]; -}; - - -extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters, - size_t (*filter)(lzma_simple *simple, uint32_t now_pos, - bool is_encoder, uint8_t *buffer, size_t size), - size_t simple_size, size_t unfiltered_max, - uint32_t alignment, bool is_encoder); - -#endif diff --git a/deps/lzma/liblzma/simple/sparc.c b/deps/lzma/liblzma/simple/sparc.c deleted file mode 100644 index 8270d6ab19f12e..00000000000000 --- a/deps/lzma/liblzma/simple/sparc.c +++ /dev/null @@ -1,81 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file sparc.c -/// \brief Filter for SPARC binaries -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -static size_t -sparc_code(lzma_simple *simple lzma_attribute((__unused__)), - uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - size_t i; - for (i = 0; i + 4 <= size; i += 4) { - - if ((buffer[i] == 0x40 && (buffer[i + 1] & 0xC0) == 0x00) - || (buffer[i] == 0x7F - && (buffer[i + 1] & 0xC0) == 0xC0)) { - - uint32_t src = ((uint32_t)buffer[i + 0] << 24) - | ((uint32_t)buffer[i + 1] << 16) - | ((uint32_t)buffer[i + 2] << 8) - | ((uint32_t)buffer[i + 3]); - - src <<= 2; - - uint32_t dest; - if (is_encoder) - dest = now_pos + (uint32_t)(i) + src; - else - dest = src - (now_pos + (uint32_t)(i)); - - dest >>= 2; - - dest = (((0 - ((dest >> 22) & 1)) << 22) & 0x3FFFFFFF) - | (dest & 0x3FFFFF) - | 0x40000000; - - buffer[i + 0] = (uint8_t)(dest >> 24); - buffer[i + 1] = (uint8_t)(dest >> 16); - buffer[i + 2] = (uint8_t)(dest >> 8); - buffer[i + 3] = (uint8_t)(dest); - } - } - - return i; -} - - -static lzma_ret -sparc_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - return lzma_simple_coder_init(next, allocator, filters, - &sparc_code, 0, 4, 4, is_encoder); -} - - -extern lzma_ret -lzma_simple_sparc_encoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return sparc_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_sparc_decoder_init(lzma_next_coder *next, - lzma_allocator *allocator, const lzma_filter_info *filters) -{ - return sparc_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/liblzma/simple/x86.c b/deps/lzma/liblzma/simple/x86.c deleted file mode 100644 index 5d1509bb227807..00000000000000 --- a/deps/lzma/liblzma/simple/x86.c +++ /dev/null @@ -1,154 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// -/// \file x86.c -/// \brief Filter for x86 binaries (BCJ filter) -/// -// Authors: Igor Pavlov -// Lasse Collin -// -// This file has been put into the public domain. -// You can do whatever you want with this file. -// -/////////////////////////////////////////////////////////////////////////////// - -#include "simple_private.h" - - -#define Test86MSByte(b) ((b) == 0 || (b) == 0xFF) - - -struct lzma_simple_s { - uint32_t prev_mask; - uint32_t prev_pos; -}; - - -static size_t -x86_code(lzma_simple *simple, uint32_t now_pos, bool is_encoder, - uint8_t *buffer, size_t size) -{ - static const bool MASK_TO_ALLOWED_STATUS[8] - = { true, true, true, false, true, false, false, false }; - - static const uint32_t MASK_TO_BIT_NUMBER[8] - = { 0, 1, 2, 2, 3, 3, 3, 3 }; - - uint32_t prev_mask = simple->prev_mask; - uint32_t prev_pos = simple->prev_pos; - - if (size < 5) - return 0; - - if (now_pos - prev_pos > 5) - prev_pos = now_pos - 5; - - const size_t limit = size - 5; - size_t buffer_pos = 0; - - while (buffer_pos <= limit) { - uint8_t b = buffer[buffer_pos]; - if (b != 0xE8 && b != 0xE9) { - ++buffer_pos; - continue; - } - - const uint32_t offset = now_pos + (uint32_t)(buffer_pos) - - prev_pos; - prev_pos = now_pos + (uint32_t)(buffer_pos); - - if (offset > 5) { - prev_mask = 0; - } else { - for (uint32_t i = 0; i < offset; ++i) { - prev_mask &= 0x77; - prev_mask <<= 1; - } - } - - b = buffer[buffer_pos + 4]; - - if (Test86MSByte(b) - && MASK_TO_ALLOWED_STATUS[(prev_mask >> 1) & 0x7] - && (prev_mask >> 1) < 0x10) { - - uint32_t src = ((uint32_t)(b) << 24) - | ((uint32_t)(buffer[buffer_pos + 3]) << 16) - | ((uint32_t)(buffer[buffer_pos + 2]) << 8) - | (buffer[buffer_pos + 1]); - - uint32_t dest; - while (true) { - if (is_encoder) - dest = src + (now_pos + (uint32_t)( - buffer_pos) + 5); - else - dest = src - (now_pos + (uint32_t)( - buffer_pos) + 5); - - if (prev_mask == 0) - break; - - const uint32_t i = MASK_TO_BIT_NUMBER[ - prev_mask >> 1]; - - b = (uint8_t)(dest >> (24 - i * 8)); - - if (!Test86MSByte(b)) - break; - - src = dest ^ ((1 << (32 - i * 8)) - 1); - } - - buffer[buffer_pos + 4] - = (uint8_t)(~(((dest >> 24) & 1) - 1)); - buffer[buffer_pos + 3] = (uint8_t)(dest >> 16); - buffer[buffer_pos + 2] = (uint8_t)(dest >> 8); - buffer[buffer_pos + 1] = (uint8_t)(dest); - buffer_pos += 5; - prev_mask = 0; - - } else { - ++buffer_pos; - prev_mask |= 1; - if (Test86MSByte(b)) - prev_mask |= 0x10; - } - } - - simple->prev_mask = prev_mask; - simple->prev_pos = prev_pos; - - return buffer_pos; -} - - -static lzma_ret -x86_coder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters, bool is_encoder) -{ - const lzma_ret ret = lzma_simple_coder_init(next, allocator, filters, - &x86_code, sizeof(lzma_simple), 5, 1, is_encoder); - - if (ret == LZMA_OK) { - next->coder->simple->prev_mask = 0; - next->coder->simple->prev_pos = (uint32_t)(-5); - } - - return ret; -} - - -extern lzma_ret -lzma_simple_x86_encoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return x86_coder_init(next, allocator, filters, true); -} - - -extern lzma_ret -lzma_simple_x86_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, - const lzma_filter_info *filters) -{ - return x86_coder_init(next, allocator, filters, false); -} diff --git a/deps/lzma/version.h b/deps/lzma/version.h deleted file mode 100644 index 79627a55241c59..00000000000000 --- a/deps/lzma/version.h +++ /dev/null @@ -1,8 +0,0 @@ -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "XZ Utils 5.0.7" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "5.0.7" - -/* Version number of package */ -#define VERSION "5.0.7" \ No newline at end of file From fc5a84ed5d3e6a54171497636d67c9407a7d4742 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Mar 2023 12:21:16 +0100 Subject: [PATCH 0305/2225] updater: Use zstd for patch manifest request --- UI/win-update/updater/updater.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index 0337b69e6f2b72..ef32af9bfc221e 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -1606,14 +1606,20 @@ static bool Update(wchar_t *cmdLine) int responseCode; int len = (int)post_body.size(); - uLong compressSize = compressBound(len); + size_t compressSize = ZSTD_compressBound(len); string compressedJson; compressedJson.resize(compressSize); - compress2((Bytef *)&compressedJson[0], &compressSize, - (const Bytef *)post_body.c_str(), len, - Z_BEST_COMPRESSION); - compressedJson.resize(compressSize); + + size_t result = + ZSTD_compress(&compressedJson[0], compressedJson.size(), + post_body.data(), post_body.size(), + ZSTD_CLEVEL_DEFAULT); + + if (ZSTD_isError(result)) + return false; + + compressedJson.resize(result); wstring manifestUrl(PATCH_MANIFEST_URL); if (branch != L"stable") From 2790e1ab1b5f290c8bdfc1ce0a882b3404f9da4a Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Mar 2023 12:23:12 +0100 Subject: [PATCH 0306/2225] updater: Use native WinHTTP decompression (remove zlib) --- UI/win-update/updater/CMakeLists.txt | 10 +- UI/win-update/updater/http.cpp | 195 ++------------------------- UI/win-update/updater/updater.cpp | 10 ++ UI/win-update/updater/updater.hpp | 3 - 4 files changed, 21 insertions(+), 197 deletions(-) diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index 457705421015af..c175f64ac91abe 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -7,11 +7,6 @@ if(NOT ENABLE_UPDATER) return() endif() -if(NOT DEFINED STATIC_ZLIB_PATH OR "${STATIC_ZLIB_PATH}" STREQUAL "") - message(STATUS "STATIC_ZLIB_PATH not set, windows updater disabled") - return() -endif() - find_package(zstd) add_executable(updater WIN32) @@ -42,8 +37,7 @@ if(MSVC) target_compile_options(updater PRIVATE "/utf-8") endif() -target_link_libraries( - updater PRIVATE OBS::blake2 zstd::libzstd_static ${STATIC_ZLIB_PATH} comctl32 - shell32 winhttp) +target_link_libraries(updater PRIVATE OBS::blake2 zstd::libzstd_static comctl32 + shell32 winhttp) set_target_properties(updater PROPERTIES FOLDER "frontend") diff --git a/UI/win-update/updater/http.cpp b/UI/win-update/updater/http.cpp index 74a3c750211097..6bda014bab5831 100644 --- a/UI/win-update/updater/http.cpp +++ b/UI/win-update/updater/http.cpp @@ -25,56 +25,6 @@ using namespace std; /* ------------------------------------------------------------------------ */ -class ZipStream { - z_stream strm = {}; - bool initialized = false; - -public: - inline ~ZipStream() - { - if (initialized) - inflateEnd(&strm); - } - - inline operator z_stream *() { return &strm; } - inline z_stream *operator->() { return &strm; } - - inline bool inflate() - { - int ret = inflateInit2(&strm, 16 + MAX_WBITS); - initialized = (ret == Z_OK); - return initialized; - } -}; - -/* ------------------------------------------------------------------------ */ - -static bool ReadZippedHTTPData(string &responseBuf, z_stream *strm, - string &zipBuf, const uint8_t *buffer, - DWORD outSize) -{ - strm->avail_in = outSize; - strm->next_in = buffer; - - do { - strm->avail_out = (uInt)zipBuf.size(); - strm->next_out = (Bytef *)zipBuf.data(); - - int zret = inflate(strm, Z_NO_FLUSH); - if (zret != Z_STREAM_END && zret != Z_OK) - return false; - - try { - responseBuf.append(zipBuf.data(), - zipBuf.size() - strm->avail_out); - } catch (...) { - return false; - } - } while (strm->avail_out == 0); - - return true; -} - static bool ReadHTTPData(string &responseBuf, const uint8_t *buffer, DWORD outSize) { @@ -93,7 +43,6 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, HttpHandle hSession; HttpHandle hConnect; HttpHandle hRequest; - string zipBuf; URL_COMPONENTS urlComponents = {}; bool secure = false; @@ -103,6 +52,7 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, const wchar_t *acceptTypes[] = {L"*/*", nullptr}; const DWORD tlsProtocols = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2; + const DWORD compressionFlags = WINHTTP_DECOMPRESSION_FLAG_ALL; responseBuf.clear(); @@ -136,6 +86,8 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, (LPVOID)&tlsProtocols, sizeof(tlsProtocols)); + WinHttpSetOption(hSession, WINHTTP_OPTION_DECOMPRESSION, + (LPVOID)&compressionFlags, sizeof(compressionFlags)); hConnect = WinHttpConnect(hSession, hostName, secure ? INTERNET_DEFAULT_HTTPS_PORT @@ -176,9 +128,6 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, /* -------------------------------------- * * get headers */ - wchar_t encoding[64]; - DWORD encodingLen; - wchar_t statusCode[8]; DWORD statusCodeLen; @@ -192,19 +141,6 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, statusCode[_countof(statusCode) - 1] = 0; } - encodingLen = sizeof(encoding); - if (!WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_CONTENT_ENCODING, - WINHTTP_HEADER_NAME_BY_INDEX, encoding, - &encodingLen, WINHTTP_NO_HEADER_INDEX)) { - encoding[0] = 0; - if (GetLastError() != ERROR_WINHTTP_HEADER_NOT_FOUND) { - *responseCode = -5; - return false; - } - } else { - encoding[_countof(encoding) - 1] = 0; - } - /* -------------------------------------- * * allocate response data */ @@ -217,30 +153,6 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, return false; } - /* -------------------------------------- * - * if zipped, initialize zip data */ - - ZipStream strm; - bool gzip = wcscmp(encoding, L"gzip") == 0; - - if (gzip) { - strm->zalloc = Z_NULL; - strm->zfree = Z_NULL; - strm->opaque = Z_NULL; - strm->avail_in = 0; - strm->next_in = Z_NULL; - - if (!strm.inflate()) - return false; - - try { - zipBuf.resize(MAX_BUF_SIZE); - } catch (...) { - *responseCode = -6; - return false; - } - } - /* -------------------------------------- * * read data */ @@ -272,17 +184,9 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, if (!outSize) break; - if (gzip) { - if (!ReadZippedHTTPData(responseBuf, strm, zipBuf, - buffer, outSize)) { - *responseCode = -6; - return false; - } - } else { - if (!ReadHTTPData(responseBuf, buffer, outSize)) { - *responseCode = -6; - return false; - } + if (!ReadHTTPData(responseBuf, buffer, outSize)) { + *responseCode = -6; + return false; } if (WaitForSingleObject(cancelRequested, 0) == WAIT_OBJECT_0) { @@ -296,39 +200,6 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, /* ------------------------------------------------------------------------ */ -static bool ReadHTTPZippedFile(z_stream *strm, HANDLE updateFile, - string &zipBuf, const uint8_t *buffer, - DWORD outSize, int *responseCode) -{ - strm->avail_in = outSize; - strm->next_in = buffer; - - do { - strm->avail_out = (uInt)zipBuf.size(); - strm->next_out = (Bytef *)zipBuf.data(); - - int zret = inflate(strm, Z_NO_FLUSH); - if (zret != Z_STREAM_END && zret != Z_OK) - return false; - - DWORD written; - if (!WriteFile(updateFile, zipBuf.data(), - MAX_BUF_SIZE - strm->avail_out, &written, - nullptr)) { - *responseCode = -10; - return false; - } - if (written != MAX_BUF_SIZE - strm->avail_out) { - *responseCode = -11; - return false; - } - - completedFileSize += written; - } while (strm->avail_out == 0); - - return true; -} - static bool ReadHTTPFile(HANDLE updateFile, const uint8_t *buffer, DWORD outSize, int *responseCode) { @@ -358,7 +229,6 @@ bool HTTPGetFile(HINTERNET hConnect, const wchar_t *url, URL_COMPONENTS urlComponents = {}; bool secure = false; - string zipBuf; wchar_t hostName[256]; wchar_t path[1024]; @@ -408,9 +278,6 @@ bool HTTPGetFile(HINTERNET hConnect, const wchar_t *url, /* -------------------------------------- * * get headers */ - wchar_t encoding[64]; - DWORD encodingLen; - wchar_t statusCode[8]; DWORD statusCodeLen; @@ -424,43 +291,6 @@ bool HTTPGetFile(HINTERNET hConnect, const wchar_t *url, statusCode[_countof(statusCode) - 1] = 0; } - encodingLen = sizeof(encoding); - if (!WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_CONTENT_ENCODING, - WINHTTP_HEADER_NAME_BY_INDEX, encoding, - &encodingLen, WINHTTP_NO_HEADER_INDEX)) { - encoding[0] = 0; - if (GetLastError() != ERROR_WINHTTP_HEADER_NOT_FOUND) { - *responseCode = -5; - return false; - } - } else { - encoding[_countof(encoding) - 1] = 0; - } - - /* -------------------------------------- * - * allocate response data */ - - ZipStream strm; - bool gzip = wcscmp(encoding, L"gzip") == 0; - - if (gzip) { - strm->zalloc = Z_NULL; - strm->zfree = Z_NULL; - strm->opaque = Z_NULL; - strm->avail_in = 0; - strm->next_in = Z_NULL; - - if (!strm.inflate()) - return false; - - try { - zipBuf.resize(MAX_BUF_SIZE); - } catch (...) { - *responseCode = -6; - return false; - } - } - /* -------------------------------------- * * read data */ @@ -499,16 +329,9 @@ bool HTTPGetFile(HINTERNET hConnect, const wchar_t *url, if (!outSize) break; - if (gzip) { - if (!ReadHTTPZippedFile(strm, updateFile, - zipBuf, buffer, outSize, - responseCode)) - return false; - } else { - if (!ReadHTTPFile(updateFile, buffer, outSize, - responseCode)) - return false; - } + if (!ReadHTTPFile(updateFile, buffer, outSize, + responseCode)) + return false; int position = (int)(((float)completedFileSize / (float)totalFileSize) * diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index ef32af9bfc221e..e62b3f6011b013 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -378,6 +378,8 @@ bool DownloadWorkerThread() const DWORD enableHTTP2Flag = WINHTTP_PROTOCOL_FLAG_HTTP2; + const DWORD compressionFlags = WINHTTP_DECOMPRESSION_FLAG_ALL; + HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.2", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, @@ -394,6 +396,9 @@ bool DownloadWorkerThread() WinHttpSetOption(hSession, WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL, (LPVOID)&enableHTTP2Flag, sizeof(enableHTTP2Flag)); + WinHttpSetOption(hSession, WINHTTP_OPTION_DECOMPRESSION, + (LPVOID)&compressionFlags, sizeof(compressionFlags)); + HttpHandle hConnect = WinHttpConnect(hSession, L"cdn-fastly.obsproject.com", INTERNET_DEFAULT_HTTPS_PORT, 0); @@ -1215,6 +1220,8 @@ static bool UpdateVS2019Redists(const Json &root) const DWORD tlsProtocols = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2; + const DWORD compressionFlags = WINHTTP_DECOMPRESSION_FLAG_ALL; + HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.2", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, @@ -1227,6 +1234,9 @@ static bool UpdateVS2019Redists(const Json &root) WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, (LPVOID)&tlsProtocols, sizeof(tlsProtocols)); + WinHttpSetOption(hSession, WINHTTP_OPTION_DECOMPRESSION, + (LPVOID)&compressionFlags, sizeof(compressionFlags)); + HttpHandle hConnect = WinHttpConnect(hSession, L"cdn-fastly.obsproject.com", INTERNET_DEFAULT_HTTPS_PORT, 0); diff --git a/UI/win-update/updater/updater.hpp b/UI/win-update/updater/updater.hpp index 694b1aaeaa1563..ffc3ed0af92946 100644 --- a/UI/win-update/updater/updater.hpp +++ b/UI/win-update/updater/updater.hpp @@ -21,8 +21,6 @@ #define _WIN32_WINNT 0x0600 #define WIN32_LEAN_AND_MEAN -#define ZLIB_CONST - #include #include #include @@ -34,7 +32,6 @@ #include #include #include -#include #include #include #include From 0ece23dff20e59f6c61986006a3d59764daeebde Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Mar 2023 12:23:35 +0100 Subject: [PATCH 0307/2225] updater: Bump version --- UI/win-update/updater/http.cpp | 2 +- UI/win-update/updater/updater.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/UI/win-update/updater/http.cpp b/UI/win-update/updater/http.cpp index 6bda014bab5831..d32dd68ad67225 100644 --- a/UI/win-update/updater/http.cpp +++ b/UI/win-update/updater/http.cpp @@ -75,7 +75,7 @@ bool HTTPPostData(const wchar_t *url, const BYTE *data, int dataLen, /* -------------------------------------- * * connect to server */ - hSession = WinHttpOpen(L"OBS Studio Updater/2.2", + hSession = WinHttpOpen(L"OBS Studio Updater/3.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); diff --git a/UI/win-update/updater/updater.cpp b/UI/win-update/updater/updater.cpp index e62b3f6011b013..df450fc91cb164 100644 --- a/UI/win-update/updater/updater.cpp +++ b/UI/win-update/updater/updater.cpp @@ -380,7 +380,7 @@ bool DownloadWorkerThread() const DWORD compressionFlags = WINHTTP_DECOMPRESSION_FLAG_ALL; - HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.2", + HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/3.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); @@ -1222,7 +1222,7 @@ static bool UpdateVS2019Redists(const Json &root) const DWORD compressionFlags = WINHTTP_DECOMPRESSION_FLAG_ALL; - HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.2", + HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/3.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); From 2e57e090361c63c7b4154e071c4b3a73ef7f496b Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 19 Jan 2023 10:02:44 +0100 Subject: [PATCH 0308/2225] win-capture: Display compatibility information --- plugins/win-capture/CMakeLists.txt | 20 +- plugins/win-capture/compat-config.h.in | 4 + plugins/win-capture/compat-format-ver.h | 3 + plugins/win-capture/compat-helpers.c | 199 ++++++++++++++++ plugins/win-capture/compat-helpers.h | 19 ++ plugins/win-capture/data/compatibility.json | 216 ++++++++++++++++++ plugins/win-capture/data/locale/en-US.ini | 12 + plugins/win-capture/data/package.json | 11 + .../data/schema/compatibility-schema-v1.json | 99 ++++++++ .../data/schema/package-schema.json | 47 ++++ plugins/win-capture/game-capture.c | 42 +++- plugins/win-capture/plugin-main.c | 50 +++- plugins/win-capture/window-capture.c | 29 +++ 13 files changed, 746 insertions(+), 5 deletions(-) create mode 100644 plugins/win-capture/compat-config.h.in create mode 100644 plugins/win-capture/compat-format-ver.h create mode 100644 plugins/win-capture/compat-helpers.c create mode 100644 plugins/win-capture/compat-helpers.h create mode 100644 plugins/win-capture/data/compatibility.json create mode 100644 plugins/win-capture/data/package.json create mode 100644 plugins/win-capture/data/schema/compatibility-schema-v1.json create mode 100644 plugins/win-capture/data/schema/package-schema.json diff --git a/plugins/win-capture/CMakeLists.txt b/plugins/win-capture/CMakeLists.txt index 571409dd6815fb..3fa4c53be01041 100644 --- a/plugins/win-capture/CMakeLists.txt +++ b/plugins/win-capture/CMakeLists.txt @@ -1,8 +1,19 @@ project(win-capture) +option(ENABLE_COMPAT_UPDATES "Checks for service updates" OFF) + +set(COMPAT_URL + "https://obsproject.com/obs2_update/win-capture" + CACHE STRING "Default services package URL") + +mark_as_advanced(COMPAT_URL) + add_library(win-capture MODULE) add_library(OBS::capture ALIAS win-capture) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/compat-config.h.in + ${CMAKE_BINARY_DIR}/config/compat-config.h) + target_sources( win-capture PRIVATE plugin-main.c @@ -25,10 +36,15 @@ target_sources( nt-stuff.c nt-stuff.h window-capture.c + compat-helpers.c + compat-helpers.h + compat-format-ver.h ../../libobs/util/windows/obfuscate.c - ../../libobs/util/windows/obfuscate.h) + ../../libobs/util/windows/obfuscate.h + ${CMAKE_BINARY_DIR}/config/compat-config.h) -target_link_libraries(win-capture PRIVATE OBS::libobs OBS::ipc-util) +target_link_libraries(win-capture PRIVATE OBS::libobs OBS::ipc-util + OBS::file-updater Jansson::Jansson) set_target_properties(win-capture PROPERTIES FOLDER "plugins/win-capture") diff --git a/plugins/win-capture/compat-config.h.in b/plugins/win-capture/compat-config.h.in new file mode 100644 index 00000000000000..c2dbffd45f3606 --- /dev/null +++ b/plugins/win-capture/compat-config.h.in @@ -0,0 +1,4 @@ +#pragma once + +#define COMPAT_URL "@COMPAT_URL@" +#cmakedefine ENABLE_COMPAT_UPDATES diff --git a/plugins/win-capture/compat-format-ver.h b/plugins/win-capture/compat-format-ver.h new file mode 100644 index 00000000000000..e8868c53b3f4e6 --- /dev/null +++ b/plugins/win-capture/compat-format-ver.h @@ -0,0 +1,3 @@ +#pragma once + +#define COMPAT_FORMAT_VERSION 1 diff --git a/plugins/win-capture/compat-helpers.c b/plugins/win-capture/compat-helpers.c new file mode 100644 index 00000000000000..2ba9ce5c5dcf84 --- /dev/null +++ b/plugins/win-capture/compat-helpers.c @@ -0,0 +1,199 @@ +#include + +#include +#include +#include +#include + +#include "compat-helpers.h" +#include "compat-format-ver.h" + +enum match_flags { + MATCH_EXE = 1 << 0, + MATCH_TITLE = 1 << 1, + MATCH_CLASS = 1 << 2, +}; + +static inline const char *get_string_val(json_t *entry, const char *key) +{ + json_t *str_val = json_object_get(entry, key); + if (!str_val || !json_is_string(str_val)) + return NULL; + + return json_string_value(str_val); +} + +static inline int get_int_val(json_t *entry, const char *key) +{ + json_t *integer_val = json_object_get(entry, key); + if (!integer_val || !json_is_integer(integer_val)) + return 0; + + return (int)json_integer_value(integer_val); +} + +static inline bool get_bool_val(json_t *entry, const char *key) +{ + json_t *bool_val = json_object_get(entry, key); + if (!bool_val || !json_is_boolean(bool_val)) + return false; + + return json_is_true(bool_val); +} + +static json_t *open_json_file(const char *file) +{ + char *file_data = os_quick_read_utf8_file(file); + json_error_t error; + json_t *root; + json_t *list; + int format_ver; + + if (!file_data) + return NULL; + + root = json_loads(file_data, JSON_REJECT_DUPLICATES, &error); + bfree(file_data); + + if (!root) { + blog(LOG_WARNING, + "compat-helpers.c: [open_json_file] " + "Error reading JSON file (%d): %s", + error.line, error.text); + return NULL; + } + + format_ver = get_int_val(root, "format_version"); + + if (format_ver != COMPAT_FORMAT_VERSION) { + blog(LOG_DEBUG, + "compat-helpers.c: [open_json_file] " + "Wrong format version (%d), expected %d", + format_ver, COMPAT_FORMAT_VERSION); + json_decref(root); + return NULL; + } + + list = json_object_get(root, "entries"); + if (list) + json_incref(list); + json_decref(root); + + if (!list) { + blog(LOG_WARNING, "compat-helpers.c: [open_json_file] " + "No compatibility list"); + return NULL; + } + + return list; +} + +static json_t *open_compat_file(void) +{ + char *file; + json_t *root = NULL; + + file = obs_module_config_path("compatibility.json"); + if (file) { + root = open_json_file(file); + bfree(file); + } + + if (!root) { + file = obs_module_file("compatibility.json"); + if (file) { + root = open_json_file(file); + bfree(file); + } + } + + return root; +} + +static json_t *compat_entries; +struct compat_result *check_compatibility(const char *win_title, + const char *win_class, + const char *exe, + enum source_type type) +{ + if (!compat_entries) { + json_t *root = open_compat_file(); + if (!root) + return NULL; + + compat_entries = root; + } + + struct dstr message; + struct compat_result *res = NULL; + json_t *entry; + size_t index; + + json_array_foreach (compat_entries, index, entry) { + if (type == GAME_CAPTURE && + !get_bool_val(entry, "game_capture")) + continue; + if (type == WINDOW_CAPTURE_WGC && + !get_bool_val(entry, "window_capture_wgc")) + continue; + if (type == WINDOW_CAPTURE_BITBLT && + !get_bool_val(entry, "window_capture")) + continue; + + int match_flags = get_int_val(entry, "match_flags"); + const char *j_exe = get_string_val(entry, "executable"); + const char *j_title = get_string_val(entry, "window_title"); + const char *j_class = get_string_val(entry, "window_class"); + + if (win_class && (match_flags & MATCH_CLASS) && + strcmp(win_class, j_class) != 0) + continue; + if (exe && (match_flags & MATCH_EXE) && + astrcmpi(exe, j_exe) != 0) + continue; + /* Title supports partial matches as some games append additional + * information after the title, e.g., "Minecraft 1.18". */ + if (win_title && (match_flags & MATCH_TITLE) && + astrcmpi_n(win_title, j_title, strlen(j_title)) != 0) + continue; + + /* Attempt to translate and compile message */ + const char *key = get_string_val(entry, "translation_key"); + const char *msg = get_string_val(entry, "message"); + obs_module_get_string(key, &msg); + + dstr_init_copy(&message, msg); + + const char *name = get_string_val(entry, "name"); + /* Replace placeholders in generic messages */ + if (name && dstr_find(&message, "%") != NULL) { + dstr_replace(&message, "%name%", name); + } + + const char *url = get_string_val(entry, "url"); + /* Append clickable URL in Qt rich text */ + if (url && strncmp(url, "https://", 8) == 0) { + dstr_catf(&message, "
\n%s", url, + url + 8); + } + + res = bzalloc(sizeof(struct compat_result)); + res->severity = get_int_val(entry, "severity"); + res->message = message.array; + + break; + } + + return res; +} + +void compat_result_free(struct compat_result *res) +{ + bfree(res->message); + bfree(res); +} + +void compat_json_free() +{ + json_decref(compat_entries); +} diff --git a/plugins/win-capture/compat-helpers.h b/plugins/win-capture/compat-helpers.h new file mode 100644 index 00000000000000..341775147e004c --- /dev/null +++ b/plugins/win-capture/compat-helpers.h @@ -0,0 +1,19 @@ +#pragma once + +enum source_type { + GAME_CAPTURE, + WINDOW_CAPTURE_BITBLT, + WINDOW_CAPTURE_WGC, +}; + +struct compat_result { + char *message; + enum obs_text_info_type severity; +}; + +extern struct compat_result *check_compatibility(const char *win_title, + const char *win_class, + const char *exe, + enum source_type type); +extern void compat_result_free(struct compat_result *res); +extern void compat_json_free(); diff --git a/plugins/win-capture/data/compatibility.json b/plugins/win-capture/data/compatibility.json new file mode 100644 index 00000000000000..e1641976caf81f --- /dev/null +++ b/plugins/win-capture/data/compatibility.json @@ -0,0 +1,216 @@ +{ + "$schema": "schema/compatibility-schema-v1.json", + "format_version": 1, + "entries": [ + { + "name": "CS:GO", + "translation_key": "Compatibility.Application.CSGO", + "severity": 1, + "executable": "csgo.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "CS:GO may require the --allow_third_party_software launch option to use Game Capture.", + "url": "https://help.steampowered.com/en/faqs/view/09A0-4879-4353-EF95#whitelist" + }, + { + "name": "Electron", + "translation_key": "Compatibility.Application.ElectronBitBlt", + "severity": 0, + "executable": "", + "window_class": "Chrome_WidgetWin_0", + "window_title": "", + "match_flags": 4, + "game_capture": false, + "window_capture": true, + "window_capture_wgc": false, + "message": "Electron-based applications may not be capturable using the selected Capture Method (BitBlt).", + "url": "" + }, + { + "name": "Electron", + "translation_key": "Compatibility.Application.ElectronBitBlt", + "severity": 0, + "executable": "", + "window_class": "Chrome_WidgetWin_1", + "window_title": "", + "match_flags": 4, + "game_capture": false, + "window_capture": true, + "window_capture_wgc": false, + "message": "Electron-based applications may not be capturable using the selected Capture Method (BitBlt).", + "url": "" + }, + { + "name": "Electron", + "translation_key": "Compatibility.Application.ElectronGameCapture", + "severity": 2, + "executable": "", + "window_class": "Chrome_WidgetWin_0", + "window_title": "", + "match_flags": 4, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Games built on Electron cannot be captured using Game Capture. Use Window Capture or Display Capture instead.", + "url": "" + }, + { + "name": "Electron", + "translation_key": "Compatibility.Application.ElectronGameCapture", + "severity": 2, + "executable": "", + "window_class": "Chrome_WidgetWin_1", + "window_title": "", + "match_flags": 4, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Games built on Electron cannot be captured using Game Capture. Use Window Capture or Display Capture instead.", + "url": "" + }, + { + "name": "Minecraft: Java Edition", + "translation_key": "Compatibility.Application.Minecraft", + "severity": 0, + "executable": "javaw.exe", + "window_class": "", + "window_title": "Minecraft", + "match_flags": 3, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "If you're having issues capturing Minecraft: Java Edition check our troubleshooting guide.", + "url": "https://obsproject.com/kb/minecraft-java-edition-troubleshooting" + }, + { + "name": "Call of Duty", + "translation_key": "Compatibility.GameCapture.Admin", + "severity": 1, + "executable": "cod.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Call of Duty may require OBS to be run as admin to use Game Capture.", + "url": "https://obsproject.com/kb/game-capture-troubleshooting" + }, + { + "name": "Genshin Impact", + "translation_key": "Compatibility.GameCapture.Admin", + "severity": 1, + "executable": "GenshinImpact.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Genshin Impact may require OBS to be run as admin to use Game Capture.", + "url": "https://obsproject.com/kb/game-capture-troubleshooting" + }, + { + "name": "Destiny 2", + "translation_key": "Compatibility.GameCapture.Blocked", + "severity": 2, + "executable": "destiny2.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Destiny 2 cannot be captured via Game Capture. Use Window Capture or Display Capture instead.", + "url": "https://www.bungie.net/en/Help/Article/46101" + }, + { + "name": "Grand Theft Auto: San Andreas", + "translation_key": "Compatibility.GameCapture.Blocked", + "severity": 2, + "executable": "gta-sa.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Grand Theft Auto: San Andreas cannot be captured via Game Capture. Use Window Capture or Display Capture instead.", + "url": "" + }, + { + "name": "League of Legends Launcher", + "translation_key": "Compatibility.GameCapture.Blocked", + "severity": 1, + "executable": "LeagueClientUx.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "League of Legends Launcher cannot be captured via Game Capture. Use Window Capture or Display Capture instead.", + "url": "" + }, + { + "name": "San Andreas Multiplayer", + "translation_key": "Compatibility.GameCapture.Blocked", + "severity": 2, + "executable": "samp.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "San Andreas Multiplayer cannot be captured via Game Capture. Use Window Capture or Display Capture instead.", + "url": "" + }, + { + "name": "Terraria", + "translation_key": "Compatibility.GameCapture.WrongGPU", + "severity": 0, + "executable": "terraria.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": true, + "window_capture": false, + "window_capture_wgc": false, + "message": "Terraria must run on the same GPU as OBS. If you are not seeing a preview, follow our troubleshooting guide.", + "url": "https://obsproject.com/kb/gpu-selection-guide" + }, + { + "name": "Chrome", + "translation_key": "Compatibility.WindowCapture.BitBlt", + "severity": 0, + "executable": "chrome.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": false, + "window_capture": true, + "window_capture_wgc": false, + "message": "Chrome may not be capturable using the selected Capture Method (BitBlt).", + "url": "" + }, + { + "name": "Edge", + "translation_key": "Compatibility.WindowCapture.BitBlt", + "severity": 0, + "executable": "msedge.exe", + "window_class": "", + "window_title": "", + "match_flags": 1, + "game_capture": false, + "window_capture": true, + "window_capture_wgc": false, + "message": "Edge may not be capturable using the selected Capture Method (BitBlt).", + "url": "" + } + ] +} diff --git a/plugins/win-capture/data/locale/en-US.ini b/plugins/win-capture/data/locale/en-US.ini index 740394ea4836c2..7197d60d59ed64 100644 --- a/plugins/win-capture/data/locale/en-US.ini +++ b/plugins/win-capture/data/locale/en-US.ini @@ -39,3 +39,15 @@ GameCapture.Rgb10a2Space="RGB10A2 Color Space" GameCapture.Rgb10a2Space.Srgb="sRGB" GameCapture.Rgb10a2Space.2100PQ="Rec. 2100 (PQ)" Mode="Mode" + +# Generic compatibility messages +Compatibility.GameCapture.Admin="%name% may require OBS to be run as admin to use Game Capture." +Compatibility.GameCapture.Blocked="%name% cannot be captured via Game Capture. Use Window Capture or Display Capture instead." +Compatibility.GameCapture.WrongGPU="If the preview is blank, make sure %name% is running on the same GPU as OBS." +Compatibility.WindowCapture.BitBlt="%name% may not be capturable using the selected Capture Method (BitBlt)." + +# Specific compatibility messages +Compatibility.Application.CSGO="CS:GO may require the --allow_third_party_software launch option to use Game Capture." +Compatibility.Application.ElectronGameCapture="Games built on Electron cannot be captured using Game Capture. Use Window Capture or Display Capture instead." +Compatibility.Application.ElectronBitBlt="Electron-based applications may not be capturable using the selected Capture Method (BitBlt)." +Compatibility.Application.Minecraft="If you're having issues capturing Minecraft: Java Edition, check our troubleshooting guide." diff --git a/plugins/win-capture/data/package.json b/plugins/win-capture/data/package.json new file mode 100644 index 00000000000000..4bc99d9dbc0aa6 --- /dev/null +++ b/plugins/win-capture/data/package.json @@ -0,0 +1,11 @@ +{ + "$schema": "schema/package-schema.json", + "url": "https://obsproject.com/obs2_update/win-capture/v1", + "version": 1, + "files": [ + { + "name": "compatibility.json", + "version": 1 + } + ] +} diff --git a/plugins/win-capture/data/schema/compatibility-schema-v1.json b/plugins/win-capture/data/schema/compatibility-schema-v1.json new file mode 100644 index 00000000000000..0d98cdedd4c89f --- /dev/null +++ b/plugins/win-capture/data/schema/compatibility-schema-v1.json @@ -0,0 +1,99 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "format_version": { + "type": "integer", + "description": "Version identifier for parsing this file." + }, + "entries": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of application affected by this entry." + }, + "translation_key": { + "type": "string", + "description": "Translation key OBS should use to provide a localized message." + }, + "executable": { + "type": "string", + "description": "Executable name to match." + }, + "window_class": { + "type": "string", + "description": "Window class to match." + }, + "window_title": { + "type": "string", + "description": "Window title to match." + }, + "message": { + "type": "string", + "description": "Message displayed to the user about the issue (if not translated)." + }, + "url": { + "$ref": "#/definitions/URL", + "description": "Link that provides additional info about the compatibility issue." + }, + "window_capture": { + "type": "boolean", + "description": "Whether or not the issue affects BitBlt window capture.", + "default": false + }, + "window_capture_wgc": { + "type": "boolean", + "description": "Whether or not the issue affects WGC window capture.", + "default": false + }, + "game_capture": { + "type": "boolean", + "description": "Whether or not the issue affects game capture.", + "default": false + }, + "severity": { + "$ref": "#/definitions/severityLevels", + "description": "Level of notice displayed to the user. 0 = Info, 1 = Warning, 2 = Error.\nError should be used if an application cannot be captured using the affected source type(s).\nWarning should be used for correctable errors (e.g., change a game or source setting)\nInfo should be used to provide tips in cases where there is no strict incompatibility.", + "default": 0 + }, + "match_flags": { + "$ref": "#/definitions/matchFlags", + "description": "Match Flags: 1 = exe, 2 = title, 4 = class. Can be combined." + } + }, + "additionalProperties": false, + "required": [ + "name", + "message", + "match_flags" + ] + }, + "additionalItems": true + } + }, + "additionalProperties": true, + "required": [ + "format_version", + "entries" + ], + "definitions": { + "URL": { + "type": "string", + "format": "uri", + "pattern": "^(https?://.+)?" + }, + "matchFlags": { + "type": "integer", + "minimum": 1, + "maximum": 7 + }, + "severityLevels": { + "type": "integer", + "minimum": 0, + "maximum": 2 + } + } +} diff --git a/plugins/win-capture/data/schema/package-schema.json b/plugins/win-capture/data/schema/package-schema.json new file mode 100644 index 00000000000000..58db6698684fca --- /dev/null +++ b/plugins/win-capture/data/schema/package-schema.json @@ -0,0 +1,47 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "url": { + "$ref": "#/definitions/saneUrl", + "description": "Points to the base URL of hosted package.json and services.json files, used to automatically fetch the latest version." + }, + "version": { + "type": "integer" + }, + "files": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Filename to read,, containing service definitions." + }, + "version": { + "type": "integer", + "description": "This value should be bumped any time the file defined by the 'name' field is changed. This value will be used when determining whether a new version is available." + } + }, + "required": [ + "name", + "version" + ] + }, + "description": "List of files to read, each containing a list of services.", + "additionalProperties": false + } + }, + "required": [ + "url", + "version", + "files" + ], + "definitions": { + "saneUrl": { + "type": "string", + "format": "uri", + "pattern": "^https?://" + } + } +} diff --git a/plugins/win-capture/game-capture.c b/plugins/win-capture/game-capture.c index 36c0359b0ad234..d7290af89f20b9 100644 --- a/plugins/win-capture/game-capture.c +++ b/plugins/win-capture/game-capture.c @@ -12,6 +12,7 @@ #include #include #include "inject-library.h" +#include "compat-helpers.h" #include "graphics-hook-info.h" #include "graphics-hook-ver.h" #include "cursor-capture.h" @@ -39,6 +40,7 @@ #define SETTING_ANTI_CHEAT_HOOK "anti_cheat_hook" #define SETTING_HOOK_RATE "hook_rate" #define SETTING_RGBA10A2_SPACE "rgb10a2_space" +#define SETTINGS_COMPAT_INFO "compat_info" /* deprecated */ #define SETTING_ANY_FULLSCREEN "capture_any_fullscreen" @@ -2247,8 +2249,40 @@ static bool mode_callback(obs_properties_t *ppts, obs_property_t *p, static bool window_changed_callback(obs_properties_t *ppts, obs_property_t *p, obs_data_t *settings) { - return ms_check_window_property_setting(ppts, p, settings, - SETTING_CAPTURE_WINDOW, 1); + bool modified = ms_check_window_property_setting( + ppts, p, settings, SETTING_CAPTURE_WINDOW, 1); + + if (obs_data_get_bool(settings, SETTING_ANY_FULLSCREEN)) + return modified; + + const char *window = + obs_data_get_string(settings, SETTING_CAPTURE_WINDOW); + + char *class; + char *exe; + char *title; + ms_build_window_strings(window, &class, &title, &exe); + struct compat_result *compat = + check_compatibility(title, class, exe, GAME_CAPTURE); + bfree(title); + bfree(exe); + bfree(class); + + obs_property_t *p_warn = obs_properties_get(ppts, SETTINGS_COMPAT_INFO); + + if (!compat) { + modified = obs_property_visible(p_warn) || modified; + obs_property_set_visible(p_warn, false); + return modified; + } + + obs_property_set_long_description(p_warn, compat->message); + obs_property_text_set_info_type(p_warn, compat->severity); + obs_property_set_visible(p_warn, true); + + compat_result_free(compat); + + return true; } static BOOL CALLBACK EnumFirstMonitor(HMONITOR monitor, HDC hdc, LPRECT rc, @@ -2333,6 +2367,10 @@ static obs_properties_t *game_capture_properties(void *data) obs_property_list_add_int(p, TEXT_MATCH_CLASS, WINDOW_PRIORITY_CLASS); obs_property_list_add_int(p, TEXT_MATCH_EXE, WINDOW_PRIORITY_EXE); + p = obs_properties_add_text(ppts, SETTINGS_COMPAT_INFO, NULL, + OBS_TEXT_INFO); + obs_property_set_enabled(p, false); + obs_properties_add_bool(ppts, SETTING_COMPATIBILITY, TEXT_SLI_COMPATIBILITY); diff --git a/plugins/win-capture/plugin-main.c b/plugins/win-capture/plugin-main.c index aed06a15918e80..49972bd536876d 100644 --- a/plugins/win-capture/plugin-main.c +++ b/plugins/win-capture/plugin-main.c @@ -1,8 +1,18 @@ #include #include +#include #include #include +#include + +#include "compat-helpers.h" +#include "compat-format-ver.h" +#include "compat-config.h" + +#define WIN_CAPTURE_LOG_STRING "[win-capture plugin] " +#define WIN_CAPTURE_VER_STRING "win-capture plugin (libobs " OBS_VERSION ")" + OBS_DECLARE_MODULE() OBS_MODULE_USE_DEFAULT_LOCALE("win-capture", "en-US") MODULE_EXPORT const char *obs_module_description(void) @@ -16,6 +26,7 @@ extern struct obs_source_info window_capture_info; extern struct obs_source_info game_capture_info; static HANDLE init_hooks_thread = NULL; +static update_info_t *update_info = NULL; extern bool cached_versions_match(void); extern bool load_cached_graphics_offsets(bool is32bit, const char *config_path); @@ -66,6 +77,27 @@ void wait_for_hook_initialization(void) } } +static bool confirm_compat_file(void *param, struct file_download_data *file) +{ + if (astrcmpi(file->name, "compatibility.json") == 0) { + obs_data_t *data; + int format_version; + + data = obs_data_create_from_json((char *)file->buffer.array); + if (!data) + return false; + + format_version = (int)obs_data_get_int(data, "format_version"); + obs_data_release(data); + + if (format_version != COMPAT_FORMAT_VERSION) + return false; + } + + UNUSED_PARAMETER(param); + return true; +} + void init_hook_files(void); bool graphics_uses_d3d11 = false; @@ -75,16 +107,30 @@ bool obs_module_load(void) { struct win_version_info ver; bool win8_or_above = false; + char *local_dir; char *config_dir; + char update_url[128]; + snprintf(update_url, sizeof(update_url), "%s/v%d", COMPAT_URL, + COMPAT_FORMAT_VERSION); + struct win_version_info win1903 = { .major = 10, .minor = 0, .build = 18362, .revis = 0}; + local_dir = obs_module_file(NULL); config_dir = obs_module_config_path(NULL); if (config_dir) { os_mkdirs(config_dir); - bfree(config_dir); + + if (local_dir) { + update_info = update_info_create( + WIN_CAPTURE_LOG_STRING, WIN_CAPTURE_VER_STRING, + update_url, local_dir, config_dir, + confirm_compat_file, NULL); + } } + bfree(config_dir); + bfree(local_dir); get_win_ver(&ver); @@ -117,4 +163,6 @@ bool obs_module_load(void) void obs_module_unload(void) { wait_for_hook_initialization(); + update_info_destroy(update_info); + compat_json_free(); } diff --git a/plugins/win-capture/window-capture.c b/plugins/win-capture/window-capture.c index f548a6c22e112e..6083e5f5e0a012 100644 --- a/plugins/win-capture/window-capture.c +++ b/plugins/win-capture/window-capture.c @@ -3,6 +3,7 @@ #include #include #include "dc-capture.h" +#include "compat-helpers.h" #include "../../libobs/util/platform.h" #include "../../libobs-winrt/winrt-capture.h" @@ -406,6 +407,26 @@ static void update_settings_visibility(obs_properties_t *props, pthread_mutex_unlock(&wc->update_mutex); } +static void wc_check_compatibility(struct window_capture *wc, + obs_properties_t *props) +{ + obs_property_t *p_warn = obs_properties_get(props, "compat_info"); + + struct compat_result *compat = + check_compatibility(wc->title, wc->class, wc->executable, + (enum source_type)wc->method); + if (!compat) { + obs_property_set_visible(p_warn, false); + return; + } + + obs_property_set_long_description(p_warn, compat->message); + obs_property_text_set_info_type(p_warn, compat->severity); + obs_property_set_visible(p_warn, true); + + compat_result_free(compat); +} + static bool wc_capture_method_changed(obs_properties_t *props, obs_property_t *p, obs_data_t *settings) { @@ -419,6 +440,8 @@ static bool wc_capture_method_changed(obs_properties_t *props, update_settings_visibility(props, wc); + wc_check_compatibility(wc, props); + return true; } @@ -434,6 +457,9 @@ static bool wc_window_changed(obs_properties_t *props, obs_property_t *p, update_settings_visibility(props, wc); ms_check_window_property_setting(props, p, settings, "window", 0); + + wc_check_compatibility(wc, props); + return true; } @@ -466,6 +492,9 @@ static obs_properties_t *wc_properties(void *data) obs_property_list_add_int(p, TEXT_MATCH_CLASS, WINDOW_PRIORITY_CLASS); obs_property_list_add_int(p, TEXT_MATCH_EXE, WINDOW_PRIORITY_EXE); + p = obs_properties_add_text(ppts, "compat_info", NULL, OBS_TEXT_INFO); + obs_property_set_enabled(p, false); + obs_properties_add_bool(ppts, "cursor", TEXT_CAPTURE_CURSOR); obs_properties_add_bool(ppts, "compatibility", TEXT_COMPATIBILITY); From 3fd72166618fc3f9251b5cbcb6f43b5788625b7c Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 19 Jan 2023 10:02:54 +0100 Subject: [PATCH 0309/2225] CI: Validate compatibility schema --- .github/workflows/compat-json.yml | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/compat-json.yml diff --git a/.github/workflows/compat-json.yml b/.github/workflows/compat-json.yml new file mode 100644 index 00000000000000..be3d7ec4bb735a --- /dev/null +++ b/.github/workflows/compat-json.yml @@ -0,0 +1,40 @@ +name: Compatibility Data Validator + +on: + push: + paths: + - "plugins/win-capture/data/compatibility.json" + - "plugins/win-capture/data/package.json" + pull_request: + paths: + - "plugins/win-capture/data/compatibility.json" + - "plugins/win-capture/data/package.json" + +jobs: + schema: + name: Schema + runs-on: [ubuntu-22.04] + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install & Configure Python + run: | + sudo apt install python3-dev + python3 -m pip install jsonschema json_source_map + + - name: Validate Compatibility JSON Schema + run: | + JSON_FILES=( + plugins/win-capture/data/compatibility.json + plugins/win-capture/data/package.json + ) + python3 CI/check-jsonschema.py "${JSON_FILES[@]}" + + - name: Annotate Errors + if: failure() + uses: yuzutech/annotations-action@v0.4.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + title: "Compatibility JSON Errors" + input: "./validation_errors.json" From 278973576eac441505bb186b9c262ce949283127 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 19 Feb 2023 16:38:41 +0100 Subject: [PATCH 0310/2225] obs-outputs: Fix RTMP undefined symbols if built without Mbed TLS --- plugins/obs-outputs/CMakeLists.txt | 37 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/plugins/obs-outputs/CMakeLists.txt b/plugins/obs-outputs/CMakeLists.txt index c678db4500b0b7..386b4f04ac10ec 100644 --- a/plugins/obs-outputs/CMakeLists.txt +++ b/plugins/obs-outputs/CMakeLists.txt @@ -27,7 +27,23 @@ target_sources( rtmp-helpers.h rtmp-stream.c rtmp-stream.h - rtmp-windows.c) + rtmp-windows.c + librtmp/amf.c + librtmp/amf.h + librtmp/bytes.h + librtmp/cencode.c + librtmp/cencode.h + librtmp/handshake.h + librtmp/hashswf.c + librtmp/http.h + librtmp/log.c + librtmp/log.h + librtmp/md5.c + librtmp/md5.h + librtmp/parseurl.c + librtmp/rtmp.c + librtmp/rtmp.h + librtmp/rtmp_sys.h) target_link_libraries(obs-outputs PRIVATE OBS::libobs) @@ -64,25 +80,6 @@ if(ENABLE_RTMPS STREQUAL "AUTO" OR ENABLE_RTMPS STREQUAL "ON") target_compile_definitions(obs-outputs PRIVATE NO_CRYPTO) endif() else() - target_sources( - obs-outputs - PRIVATE librtmp/amf.c - librtmp/amf.h - librtmp/bytes.h - librtmp/cencode.c - librtmp/cencode.h - librtmp/handshake.h - librtmp/hashswf.c - librtmp/http.h - librtmp/log.c - librtmp/log.h - librtmp/md5.c - librtmp/md5.h - librtmp/parseurl.c - librtmp/rtmp.c - librtmp/rtmp.h - librtmp/rtmp_sys.h) - target_compile_definitions(obs-outputs PRIVATE USE_MBEDTLS CRYPTO) target_link_libraries(obs-outputs PRIVATE Mbedtls::Mbedtls ZLIB::ZLIB) From 75693a6682a81088c0a0b8416ef8b51d43ac8a09 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 3 Feb 2023 18:59:24 +0100 Subject: [PATCH 0311/2225] libobs: Write default values to config --- libobs/util/config-file.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libobs/util/config-file.c b/libobs/util/config-file.c index 1b69b07f02f057..c64304ce5e3b5d 100644 --- a/libobs/util/config-file.c +++ b/libobs/util/config-file.c @@ -579,6 +579,16 @@ static void config_set_item(config_t *config, struct darray *sections, pthread_mutex_unlock(&config->mutex); } +static void config_set_item_default(config_t *config, const char *section, + const char *name, char *value) +{ + config_set_item(config, &config->defaults, section, name, value); + + if (!config_has_user_value(config, section, name)) + config_set_item(config, &config->sections, section, name, + bstrdup(value)); +} + void config_set_string(config_t *config, const char *section, const char *name, const char *value) { @@ -626,8 +636,7 @@ void config_set_default_string(config_t *config, const char *section, { if (!value) value = ""; - config_set_item(config, &config->defaults, section, name, - bstrdup(value)); + config_set_item_default(config, section, name, bstrdup(value)); } void config_set_default_int(config_t *config, const char *section, @@ -636,7 +645,7 @@ void config_set_default_int(config_t *config, const char *section, struct dstr str; dstr_init(&str); dstr_printf(&str, "%" PRId64, value); - config_set_item(config, &config->defaults, section, name, str.array); + config_set_item_default(config, section, name, str.array); } void config_set_default_uint(config_t *config, const char *section, @@ -645,14 +654,14 @@ void config_set_default_uint(config_t *config, const char *section, struct dstr str; dstr_init(&str); dstr_printf(&str, "%" PRIu64, value); - config_set_item(config, &config->defaults, section, name, str.array); + config_set_item_default(config, section, name, str.array); } void config_set_default_bool(config_t *config, const char *section, const char *name, bool value) { char *str = bstrdup(value ? "true" : "false"); - config_set_item(config, &config->defaults, section, name, str); + config_set_item_default(config, section, name, str); } void config_set_default_double(config_t *config, const char *section, @@ -661,7 +670,7 @@ void config_set_default_double(config_t *config, const char *section, struct dstr str; dstr_init(&str); dstr_printf(&str, "%g", value); - config_set_item(config, &config->defaults, section, name, str.array); + config_set_item_default(config, section, name, str.array); } const char *config_get_string(config_t *config, const char *section, From d2f0dfa341d87c0ba4d496de0a3789bc9a40b19f Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 6 Feb 2023 00:37:45 +0100 Subject: [PATCH 0312/2225] cmake: Set /Brepro compiler/linker options --- cmake/Modules/CompilerConfig.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/Modules/CompilerConfig.cmake b/cmake/Modules/CompilerConfig.cmake index 31c88ad9266d95..d5153684976811 100644 --- a/cmake/Modules/CompilerConfig.cmake +++ b/cmake/Modules/CompilerConfig.cmake @@ -52,6 +52,7 @@ if(OS_WINDOWS AND MSVC) endif() add_compile_options( + /Brepro /MP /W3 /WX @@ -75,6 +76,7 @@ if(OS_WINDOWS AND MSVC) /std:c17) add_link_options( + "LINKER:/Brepro" "LINKER:/OPT:REF" "LINKER:/WX" "$<$>:LINKER\:/SAFESEH\:NO>" From f06b2ccf559a7b992dacdb247c193801e674d248 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 6 Feb 2023 14:32:30 +0100 Subject: [PATCH 0313/2225] cmake: Set PDBALTPATH manually --- cmake/Modules/ObsHelpers_Windows.cmake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmake/Modules/ObsHelpers_Windows.cmake b/cmake/Modules/ObsHelpers_Windows.cmake index 15836161d802fd..d65622fa3bbc1b 100644 --- a/cmake/Modules/ObsHelpers_Windows.cmake +++ b/cmake/Modules/ObsHelpers_Windows.cmake @@ -29,6 +29,9 @@ function(setup_binary_target target) endif() if(MSVC) + target_link_options(${target} PRIVATE + /PDBALTPATH:$) + install( FILES $ CONFIGURATIONS "RelWithDebInfo" "Debug" @@ -56,6 +59,9 @@ function(setup_plugin_target target) _setup_plugin_target(${ARGV}) if(MSVC) + target_link_options(${target} PRIVATE + /PDBALTPATH:$) + install( FILES $ CONFIGURATIONS "RelWithDebInfo" "Debug" @@ -97,6 +103,9 @@ function(setup_script_plugin_target target) _setup_script_plugin_target(${ARGV}) if(MSVC) + target_link_options(${target} PRIVATE + /PDBALTPATH:$) + install( FILES $ CONFIGURATIONS "RelWithDebInfo" "Debug" From 2c48e61207f3ab43f07681ce08c0770fab95fe0b Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 6 Feb 2023 14:37:22 +0100 Subject: [PATCH 0314/2225] UI,obs-vst: Set Qt RCC format to 1 v2 introduces last-modified timestamps that ruin reproducibility. --- UI/CMakeLists.txt | 4 ++++ UI/frontend-plugins/aja-output-ui/CMakeLists.txt | 5 +++++ UI/frontend-plugins/decklink-captions/CMakeLists.txt | 5 +++++ .../decklink-output-ui/CMakeLists.txt | 5 +++++ UI/frontend-plugins/frontend-tools/CMakeLists.txt | 5 +++++ plugins/obs-vst/CMakeLists.txt | 12 +++++++----- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index d66e2c14ffff7c..211db3a16f4be3 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -82,6 +82,10 @@ set_target_properties( AUTORCC ON AUTOUIC_SEARCH_PATHS "forms;forms/source-toolbar") +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(obs PROPERTIES AUTORCC_OPTIONS "--format-version;1") +endif() + target_include_directories(obs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt index fb989651bcd8bc..7bb1b207c9d601 100644 --- a/UI/frontend-plugins/aja-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/aja-output-ui/CMakeLists.txt @@ -18,6 +18,11 @@ set_target_properties( AUTORCC ON AUTOUIC_SEARCH_PATHS "forms") +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(aja-output-ui PROPERTIES AUTORCC_OPTIONS + "--format-version;1") +endif() + target_sources(aja-output-ui PRIVATE forms/output.ui) target_sources( diff --git a/UI/frontend-plugins/decklink-captions/CMakeLists.txt b/UI/frontend-plugins/decklink-captions/CMakeLists.txt index 1d36b2ed73ad4b..8c8f504372aac2 100644 --- a/UI/frontend-plugins/decklink-captions/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-captions/CMakeLists.txt @@ -18,6 +18,11 @@ set_target_properties( AUTORCC ON AUTOUIC_SEARCH_PATHS "forms") +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(decklink-captions PROPERTIES AUTORCC_OPTIONS + "--format-version;1") +endif() + target_compile_features(decklink-captions PRIVATE cxx_std_17) target_sources(decklink-captions PRIVATE forms/captions.ui) diff --git a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt index dada95b7571e7f..64e9ae72fede6e 100644 --- a/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt +++ b/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt @@ -16,6 +16,11 @@ set_target_properties( AUTORCC ON AUTOUIC_SEARCH_PATHS "forms") +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(decklink-output-ui PROPERTIES AUTORCC_OPTIONS + "--format-version;1") +endif() + target_sources(decklink-output-ui PRIVATE forms/output.ui) target_sources( diff --git a/UI/frontend-plugins/frontend-tools/CMakeLists.txt b/UI/frontend-plugins/frontend-tools/CMakeLists.txt index 8797344bf2dcb9..2dc7235ebd424f 100644 --- a/UI/frontend-plugins/frontend-tools/CMakeLists.txt +++ b/UI/frontend-plugins/frontend-tools/CMakeLists.txt @@ -12,6 +12,11 @@ set_target_properties( AUTORCC ON AUTOUIC_SEARCH_PATHS "forms") +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(frontend-tools PROPERTIES AUTORCC_OPTIONS + "--format-version;1") +endif() + target_sources( frontend-tools PRIVATE forms/auto-scene-switcher.ui forms/captions.ui forms/output-timer.ui forms/scripts.ui) diff --git a/plugins/obs-vst/CMakeLists.txt b/plugins/obs-vst/CMakeLists.txt index 319c25ee93db96..df52be4e3ebd4e 100644 --- a/plugins/obs-vst/CMakeLists.txt +++ b/plugins/obs-vst/CMakeLists.txt @@ -21,9 +21,12 @@ set_target_properties( AUTOUIC ON AUTORCC ON) -target_include_directories( - obs-vst PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR}) +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(obs-vst PROPERTIES AUTORCC_OPTIONS "--format-version;1") +endif() + +target_include_directories(obs-vst PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}) target_sources( obs-vst @@ -33,8 +36,7 @@ target_sources( target_link_libraries(obs-vst PRIVATE OBS::libobs Qt::Widgets) -target_include_directories( - obs-vst PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/headers) +target_include_directories(obs-vst PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/headers) target_compile_features(obs-vst PRIVATE cxx_std_17) From 5dd1d00a035fb33638827bcd60631a9429022c50 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 27 Feb 2023 22:07:48 +0100 Subject: [PATCH 0315/2225] UI: Add mutex to reading public key file --- UI/update/shared-update.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/UI/update/shared-update.cpp b/UI/update/shared-update.cpp index 702a1660ffb0b3..ad8f778a1361eb 100644 --- a/UI/update/shared-update.cpp +++ b/UI/update/shared-update.cpp @@ -176,12 +176,15 @@ static void LoadPublicKey(std::string &pubkey) static bool CheckDataSignature(const char *name, const std::string &data, const std::string &hexSig) try { + static std::mutex pubkey_mutex; + static std::string obsPubKey; + if (hexSig.empty() || hexSig.length() > 0xFFFF || (hexSig.length() & 1) != 0) throw strprintf("Missing or invalid signature for %s: %s", name, hexSig.c_str()); - static std::string obsPubKey; + std::scoped_lock lock(pubkey_mutex); if (obsPubKey.empty()) LoadPublicKey(obsPubKey); From c55fcbbb12fa91da10ca8181b59784dc547e099b Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 8 Mar 2023 01:27:57 +0100 Subject: [PATCH 0316/2225] UI: Use binary mode for QuickReadFile When not using binary mode (i.e. text mode) CRLF will be converted to LF, which means that the size provided by tellg() is no longer correct, and reading prematurely hits an EOF and sets the fail bit. --- UI/update/shared-update.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/update/shared-update.cpp b/UI/update/shared-update.cpp index ad8f778a1361eb..a458592e12db9c 100644 --- a/UI/update/shared-update.cpp +++ b/UI/update/shared-update.cpp @@ -68,7 +68,7 @@ try { static bool QuickReadFile(const char *file, std::string &data) try { - std::ifstream fileStream(file); + std::ifstream fileStream(file, std::ifstream::binary); if (!fileStream.is_open() || fileStream.fail()) throw strprintf("Failed to open file '%s': %s", file, strerror(errno)); From 002bd0b5a433fd62cd77dd672b26ad3169fab913 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Wed, 8 Mar 2023 16:43:15 -0500 Subject: [PATCH 0317/2225] win-capture: Suppress LNK4098 Suppress LNK4098 to allow building against pre-built Jansson for now. --- plugins/win-capture/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/win-capture/CMakeLists.txt b/plugins/win-capture/CMakeLists.txt index 3fa4c53be01041..db0cd759437155 100644 --- a/plugins/win-capture/CMakeLists.txt +++ b/plugins/win-capture/CMakeLists.txt @@ -50,6 +50,7 @@ set_target_properties(win-capture PROPERTIES FOLDER "plugins/win-capture") if(MSVC) target_link_libraries(win-capture PRIVATE OBS::w32-pthreads) + target_link_options(win-capture PRIVATE "LINKER:/IGNORE:4098") endif() target_compile_definitions( From c99256cf21e906beb168e2d43d9b61d30301bc8d Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 8 Mar 2023 23:08:55 +0100 Subject: [PATCH 0318/2225] UI: Do not set default locale --- UI/obs-app.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 666fc71a9a2dc6..900abc9506694a 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -425,8 +425,6 @@ static void do_log(int log_level, const char *msg, va_list args, void *param) bool OBSApp::InitGlobalConfigDefaults() { - config_set_default_string(globalConfig, "General", "Language", - DEFAULT_LANG); config_set_default_uint(globalConfig, "General", "MaxLogs", 10); config_set_default_int(globalConfig, "General", "InfoIncrement", -1); config_set_default_string(globalConfig, "General", "ProcessPriority", @@ -832,8 +830,13 @@ bool OBSApp::InitGlobalConfig() bool OBSApp::InitLocale() { ProfileScope("OBSApp::InitLocale"); + const char *lang = config_get_string(globalConfig, "General", "Language"); + bool userLocale = + config_has_user_value(globalConfig, "General", "Language"); + if (!userLocale || !lang || lang[0] == '\0') + lang = DEFAULT_LANG; locale = lang; @@ -855,8 +858,6 @@ bool OBSApp::InitLocale() return false; } - bool userLocale = - config_has_user_value(globalConfig, "General", "Language"); bool defaultLang = astrcmpi(lang, DEFAULT_LANG) == 0; if (userLocale && defaultLang) From f3b1a1cf1f085044fca814d1419fe7dc8ec6eb55 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 7 Mar 2023 00:55:21 +0100 Subject: [PATCH 0319/2225] UI: Use bilinear scaling for YT thumbnail --- UI/window-youtube-actions.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/UI/window-youtube-actions.cpp b/UI/window-youtube-actions.cpp index 26f1db83cdf1a2..1f99ac02cf8b72 100644 --- a/UI/window-youtube-actions.cpp +++ b/UI/window-youtube-actions.cpp @@ -125,7 +125,8 @@ OBSYoutubeActions::OBSYoutubeActions(QWidget *parent, Auth *auth, const QImage newImage = imgReader.read(); ui->thumbnailPreview->setPixmap( QPixmap::fromImage(newImage).scaled( - 160, 90, Qt::KeepAspectRatio)); + 160, 90, Qt::KeepAspectRatio, + Qt::SmoothTransformation)); } } else { thumbnailFile.clear(); @@ -821,7 +822,8 @@ void OBSYoutubeActions::LoadSettings() const QImage newImage = imgReader.read(); ui->thumbnailPreview->setPixmap( QPixmap::fromImage(newImage).scaled( - 160, 90, Qt::KeepAspectRatio)); + 160, 90, Qt::KeepAspectRatio, + Qt::SmoothTransformation)); } } } From ecaa5466cb18818322f902c942d7c029c5b9d1d3 Mon Sep 17 00:00:00 2001 From: Mathijs Kadijk Date: Mon, 27 Feb 2023 23:19:35 +0100 Subject: [PATCH 0320/2225] mac-virtualcam: Fix incorrect PTS on Apple Silicon The `fillFrame` method of the mac-virtualcam plugin is creating samples directly using the value from `mach_absolute_time()` as `hostTime`. This assumes this value is in nanoseconds, while it is in fact in mach tick units. On Intel Macs mach tick units will be exactly 1 nanosecond resulting in valid values, but on Apple Silicon macs this is no longer the case. This results in sample buffers with the placeholder image that have much lower presentation time stamps than the samples containing content produced by OBS. In previews/live streams this shows due to the last content sample being shown frozen until the whole buffer is filled with samples containing the placeholder image. Applications recording the video stream are even more confused and crash or record videos with wildly incorrect lengths. In this PR `clock_gettime_nsec_np` is used to convert from mach tick units to nanoseconds. This will make sure the `hostTime` value is correct on both Apple Silicon and Intel macs. Making sure we produce stable presentation time stamps from the virtual camera plugin at all times. --- .../mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm | 2 +- plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm index 868680103408ba..38e86dbda7d6a0 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm @@ -13,7 +13,7 @@ CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos, { // The timing here is quite important. For frames to be delivered correctly and successfully be recorded by apps // like QuickTime Player, we need to be accurate in both our timestamps _and_ have a sensible scale. Using large - // timestamps and scales like mach_absolute_time() and NSEC_PER_SEC will work for display, but will error out + // timestamps and scales like clock_gettime_nsec_np() and NSEC_PER_SEC will work for display, but will error out // when trying to record. // // 600 is a common default in Apple's docs https://developer.apple.com/documentation/avfoundation/avmutablemovie/1390622-timescale diff --git a/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm b/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm index 8f96a9a42c3c9e..560b03657a830f 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/OBSDALStream.mm @@ -316,7 +316,7 @@ - (void)fillFrame CVPixelBufferRef pixelBuffer = [self createPixelBufferWithTestAnimation]; - uint64_t hostTime = mach_absolute_time(); + uint64_t hostTime = clock_gettime_nsec_np(CLOCK_UPTIME_RAW); CMSampleTimingInfo timingInfo = CMSampleTimingInfoForTimestamp(hostTime, (uint32_t)self.fps, 1); @@ -365,9 +365,9 @@ - (void)queuePixelBuffer:(CVPixelBufferRef)frame CMSampleTimingInfo timingInfo = CMSampleTimingInfoForTimestamp( timestamp, fpsNumerator, fpsDenominator); - err = CMIOStreamClockPostTimingEvent(timingInfo.presentationTimeStamp, - mach_absolute_time(), true, - self.clock); + err = CMIOStreamClockPostTimingEvent( + timingInfo.presentationTimeStamp, + clock_gettime_nsec_np(CLOCK_UPTIME_RAW), true, self.clock); if (err != noErr) { DLog(@"CMIOStreamClockPostTimingEvent err %d", err); } From 970c284a659217544e4f314aa94c0d607f330fb6 Mon Sep 17 00:00:00 2001 From: Mathijs Kadijk Date: Mon, 27 Feb 2023 23:31:16 +0100 Subject: [PATCH 0321/2225] mac-virtualcam: Prevent PTS rounding All presentation time stamps are rounded to whole seconds during the conversion from nanoseconds to seconds, because of the immediate cast to `int64_t`. This results in the same presentation time stamp being send to consumers for a whole second. In previews/live streams this isn't super visible as last frame is often assumed to be the newest and the stream is updated. It's more problematic when recording since APIs like Apple's AVFoundation don't allow duplicate presentation time stamps or it can look like frames are produced in huge bursts once per second. In this PR `CMTimeMakeWithSeconds` is used instead of `CMTimeMake` to make sure the conversion is done correctly and simplify the calculation we have to do a little. --- plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm index 38e86dbda7d6a0..7b106f2811793e 100644 --- a/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm +++ b/plugins/mac-virtualcam/src/dal-plugin/CMSampleBufferUtils.mm @@ -21,9 +21,8 @@ CMSampleTimingInfo CMSampleTimingInfoForTimestamp(uint64_t timestampNanos, CMSampleTimingInfo timing; timing.duration = CMTimeMake(fpsDenominator * scale, fpsNumerator * scale); - timing.presentationTimeStamp = CMTimeMake( - ((int64_t)(timestampNanos / (double)NSEC_PER_SEC) * scale), - scale); + timing.presentationTimeStamp = CMTimeMakeWithSeconds( + timestampNanos / (double)NSEC_PER_SEC, scale); timing.decodeTimeStamp = kCMTimeInvalid; return timing; } From 9d4a7f01dd114acc25c917ae64f3e0c7caed657e Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Wed, 8 Feb 2023 22:21:16 +0100 Subject: [PATCH 0322/2225] UI: Add DLL blocking functionality for Windows Adds a NtMapViewOfSection hook which we can use before DLLs are loaded to decide whether to abort the process. This is useful for blocking known problematic DLLs that cause crashes. In addition, the PE timestamp can be checked to block only older DLLs such as older versions of Vtuber virtual cameras with known deadlock bugs. A simple counter of each DLL is used for logging purposes. Since DLLs can be blocked at any time, the output is only logged on exit of OBS. --- UI/CMakeLists.txt | 8 +- UI/obs-app.cpp | 5 + UI/obs-app.hpp | 5 + UI/win-dll-blocklist.c | 334 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 350 insertions(+), 2 deletions(-) create mode 100644 UI/win-dll-blocklist.c diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index 211db3a16f4be3..b1558c0e89b05f 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -345,10 +345,13 @@ if(OS_WINDOWS) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/obs.rc.in ${CMAKE_BINARY_DIR}/obs.rc) + find_package(Detours REQUIRED) + target_sources( obs PRIVATE obs.manifest platform-windows.cpp + win-dll-blocklist.c update/update-window.cpp update/update-window.hpp update/win-update.cpp @@ -367,13 +370,14 @@ if(OS_WINDOWS) endif() find_package(MbedTLS) - target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2) + target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2 + Detours::Detours) target_compile_features(obs PRIVATE cxx_std_17) target_compile_definitions( obs PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS - _CRT_NONSTDC_NO_WARNINGS) + _CRT_NONSTDC_NO_WARNINGS PSAPI_VERSION=2) if(MSVC) target_link_options(obs PRIVATE "LINKER:/IGNORE:4098" "LINKER:/IGNORE:4099") diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 900abc9506694a..cf293caf71bac6 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -3210,6 +3210,9 @@ int main(int argc, char *argv[]) #endif #ifdef _WIN32 + // Try to keep this as early as possible + install_dll_blocklist_hook(); + obs_init_win32_crash_handler(); SetErrorMode(SEM_FAILCRITICALERRORS); load_debug_privilege(); @@ -3380,6 +3383,8 @@ int main(int argc, char *argv[]) func(); FreeLibrary(hRtwq); } + + log_blocked_dlls(); #endif blog(LOG_INFO, "Number of memory leaks: %ld", bnum_allocs()); diff --git a/UI/obs-app.hpp b/UI/obs-app.hpp index 904dd6c7dce4d1..b530796e4789e1 100644 --- a/UI/obs-app.hpp +++ b/UI/obs-app.hpp @@ -268,3 +268,8 @@ extern bool opt_disable_high_dpi_scaling; #endif extern std::string opt_starting_scene; extern bool restart; + +#ifdef _WIN32 +extern "C" void install_dll_blocklist_hook(void); +extern "C" void log_blocked_dlls(void); +#endif diff --git a/UI/win-dll-blocklist.c b/UI/win-dll-blocklist.c new file mode 100644 index 00000000000000..9baaef7ab31c50 --- /dev/null +++ b/UI/win-dll-blocklist.c @@ -0,0 +1,334 @@ +/****************************************************************************** + Copyright (C) 2023 by Richard Stanway + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#include +#include +#include +#include +#include +#include "detours.h" +#include "obs.h" + +// Undocumented NT structs / function definitions ! +typedef enum _SECTION_INHERIT { ViewShare = 1, ViewUnmap = 2 } SECTION_INHERIT; + +typedef enum _SECTION_INFORMATION_CLASS { + SectionBasicInformation = 0, + SectionImageInformation +} SECTION_INFORMATION_CLASS; + +typedef struct _SECTION_BASIC_INFORMATION { + PVOID BaseAddress; + ULONG Attributes; + LARGE_INTEGER Size; +} SECTION_BASIC_INFORMATION; + +typedef NTSTATUS(STDMETHODCALLTYPE *fn_NtMapViewOfSection)( + HANDLE, HANDLE, PVOID, ULONG_PTR, SIZE_T, PLARGE_INTEGER, PSIZE_T, + SECTION_INHERIT, ULONG, ULONG); + +typedef NTSTATUS(STDMETHODCALLTYPE *fn_NtUnmapViewOfSection)(HANDLE, PVOID); + +typedef NTSTATUS(STDMETHODCALLTYPE *fn_NtQuerySection)( + HANDLE, SECTION_INFORMATION_CLASS, PVOID, SIZE_T, PSIZE_T); + +static fn_NtMapViewOfSection ntMap; +static fn_NtUnmapViewOfSection ntUnmap; +static fn_NtQuerySection ntQuery; + +#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L) + +// Method of matching timestamp of DLL in PE header +typedef enum { + TS_IGNORE = 0, // Ignore timestamp; block all DLLs with this name + TS_EQUAL, // Block only DLL with this exact timestamp + TS_LESS_THAN, // Block all DLLs with an earlier timestamp + TS_GREATER_THAN, // Block all DLLs with a later timestamp + TS_ALLOW_ONLY_THIS, // Invert behavior: only allow this specific timestamp +} ts_compare_t; + +typedef struct { + // DLL name, lower case + const wchar_t *name; + + // Length of name, calculated at startup - leave as zero + size_t name_len; + + // PE timestamp + const uint32_t timestamp; + + // How to treat the timestamp field + const ts_compare_t method; + + // Number of times we've blocked this DLL, for logging purposes + uint64_t blocked_count; +} blocked_module_t; + +/* + * Note: The name matches at the end of the string based on its length, this allows + * for matching DLLs that may have generic names but a problematic version only + * exists in a certain directory. A name should always include a path component + * so that e.g. fraps.dll doesn't match notfraps.dll. + */ + +static blocked_module_t blocked_modules[] = { + // Dell / Alienware Backup & Recovery, crashes during "Browse" dialogs + {L"\\dbroverlayiconbackuped.dll", 0, 0, TS_IGNORE}, + + // RTSS, no good reason for this to be in OBS + {L"\\rtsshooks.dll", 0, 0, TS_IGNORE}, + + // Dolby Axon overlay + {L"\\axonoverlay.dll", 0, 0, TS_IGNORE}, + + // Action! Recorder Software + {L"\\action_x64.dll", 0, 0, TS_IGNORE}, + + // ASUS GamerOSD, breaks DX11 things + {L"\\atkdx11disp.dll", 0, 0, TS_IGNORE}, + + // Malware + {L"\\sendori.dll", 0, 0, TS_IGNORE}, + + // Astril VPN Proxy, hooks stuff and crashes + {L"\\asproxy64.dll", 0, 0, TS_IGNORE}, + + // Nahimic Audio + {L"\\nahimicmsidevprops.dll", 0, 0, TS_IGNORE}, + {L"\\nahimicmsiosd.dll", 0, 0, TS_IGNORE}, + + // FRAPS hook + {L"\\fraps64.dll", 0, 0, TS_IGNORE}, + + // ASUS GPU TWEAK II OSD + {L"\\gtii-osd64.dll", 0, 0, TS_IGNORE}, + {L"\\gtii-osd64-vk.dll", 0, 0, TS_IGNORE}, + + // EVGA Precision, D3D crashes + {L"\\pxshw10_x64.dll", 0, 0, TS_IGNORE}, + + // Wacom / Other tablet driver, locks up UI + {L"\\wintab32.dll", 0, 0, TS_IGNORE}, + + // Adobe Dynamic Link (Adobe CC), crashes in its own thread + {L"\\mc_trans_video_imagescaler.dll", 0, 0, TS_IGNORE}, + + // Weird Polish banking "security" software, breaks UI + {L"\\wslbscr64.dll", 0, 0, TS_IGNORE}, + + // Various things hooking with EasyHook that probably shouldn't touch OBS + {L"\\easyhook64.dll", 0, 0, TS_IGNORE}, + + // Ultramon + {L"\\rtsultramonhook.dll", 0, 0, TS_IGNORE}, + + // HiAlgo Boost, locks up UI + {L"\\hookdll.dll", 0, 0, TS_IGNORE}, + + // Adobe Core Sync? Crashes NDI. + {L"\\coresync_x64.dll", 0, 0, TS_IGNORE}, + + // Fasso DRM, crashes D3D + {L"\\f_sps.dll", 0, 0, TS_IGNORE}, + + // Korean banking "security" software, crashes randomly + {L"\\t_prevent64.dll", 0, 0, TS_IGNORE}, + + // Generic named unity capture filter. Unfortunately only a forked version + // has a critical fix to prevent deadlocks during enumeration. We block + // all versions since if someone didn't change the DLL name they likely + // didn't implement the deadlock fix. + // Reference: https://github.com/schellingb/UnityCapture/commit/2eabf0f + {L"\\unitycapturefilter64bit.dll", 0, 0, TS_IGNORE}, + + // VSeeFace capture filter < v1.13.38b3 without above fix implemented + {L"\\vseefacecamera64bit.dll", 0, 1666993098, TS_LESS_THAN}, +}; + +static bool is_module_blocked(wchar_t *dll, uint32_t timestamp) +{ + blocked_module_t *first_allowed = NULL; + size_t len; + + len = wcslen(dll); + + wcslwr(dll); + + // Default behavior is to not block + bool should_block = false; + + for (int i = 0; i < _countof(blocked_modules); i++) { + blocked_module_t *b = &blocked_modules[i]; + wchar_t *dll_ptr; + + if (len >= b->name_len) + dll_ptr = dll + len - b->name_len; + else + dll_ptr = dll; + + if (!wcscmp(dll_ptr, b->name)) { + if (b->method == TS_IGNORE) { + b->blocked_count++; + return true; + } else if (b->method == TS_EQUAL && + timestamp == b->timestamp) { + b->blocked_count++; + return true; + } else if (b->method == TS_LESS_THAN && + timestamp < b->timestamp) { + b->blocked_count++; + return true; + } else if (b->method == TS_GREATER_THAN && + timestamp > b->timestamp) { + b->blocked_count++; + return true; + } else if (b->method == TS_ALLOW_ONLY_THIS) { + // Invert default behavior to block if + // we don't find any matching timestamps + // for this DLL. + should_block = true; + + if (timestamp == b->timestamp) + return false; + + // Bit of a hack to support counting of + // TS_ALLOW_ONLY_THIS blocks as there may + // be multiple entries for the same DLL. + if (!first_allowed) + first_allowed = b; + } + } + } + + if (first_allowed) + first_allowed->blocked_count++; + + return should_block; +} + +static NTSTATUS +NtMapViewOfSection_hook(HANDLE SectionHandle, HANDLE ProcessHandle, + PVOID *BaseAddress, ULONG_PTR ZeroBits, + SIZE_T CommitSize, PLARGE_INTEGER SectionOffset, + PSIZE_T ViewSize, SECTION_INHERIT InheritDisposition, + ULONG AllocationType, ULONG Win32Protect) +{ + SECTION_BASIC_INFORMATION section_information; + wchar_t fileName[MAX_PATH]; + SIZE_T wrote = 0; + NTSTATUS ret; + uint32_t timestamp = 0; + + ret = ntMap(SectionHandle, ProcessHandle, BaseAddress, ZeroBits, + CommitSize, SectionOffset, ViewSize, InheritDisposition, + AllocationType, Win32Protect); + + // Verify map and process + if (ret < 0 || ProcessHandle != GetCurrentProcess()) + return ret; + + // Fetch section information + if (ntQuery(SectionHandle, SectionBasicInformation, + §ion_information, sizeof(section_information), + &wrote) < 0) + return ret; + + // Verify fetch was successful + if (wrote != sizeof(section_information)) + return ret; + + // We're not interested in non-image maps + if (!(section_information.Attributes & SEC_IMAGE)) + return ret; + + // Examine the PE header. Perhaps the map is small + // so wrap it in an exception handler in case we + // read past the end of the buffer. + __try { + BYTE *p = (BYTE *)*BaseAddress; + IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *)p; + if (dos->e_magic != IMAGE_DOS_SIGNATURE) + return ret; + + IMAGE_NT_HEADERS *nt = (IMAGE_NT_HEADERS *)(p + dos->e_lfanew); + if (nt->Signature != IMAGE_NT_SIGNATURE) + return ret; + + timestamp = nt->FileHeader.TimeDateStamp; + + } __except (EXCEPTION_EXECUTE_HANDLER) { + return ret; + } + + // Get the actual filename if possible + if (K32GetMappedFileNameW(ProcessHandle, *BaseAddress, fileName, + _countof(fileName)) == 0) + return ret; + + if (is_module_blocked(fileName, timestamp)) { + ntUnmap(ProcessHandle, BaseAddress); + ret = STATUS_UNSUCCESSFUL; + } + + return ret; +} + +void install_dll_blocklist_hook(void) +{ + HMODULE nt = GetModuleHandle(L"NTDLL"); + if (!nt) + return; + + ntMap = (fn_NtMapViewOfSection)GetProcAddress(nt, "NtMapViewOfSection"); + if (!ntMap) + return; + + ntUnmap = (fn_NtUnmapViewOfSection)GetProcAddress( + nt, "NtUnmapViewOfSection"); + if (!ntUnmap) + return; + + ntQuery = (fn_NtQuerySection)GetProcAddress(nt, "NtQuerySection"); + if (!ntQuery) + return; + + // Pre-compute length of all DLL names for exact matching + for (int i = 0; i < _countof(blocked_modules); i++) { + blocked_module_t *b = &blocked_modules[i]; + b->name_len = wcslen(b->name); + } + + DetourTransactionBegin(); + + if (DetourAttach((PVOID *)&ntMap, NtMapViewOfSection_hook) != NO_ERROR) + DetourTransactionAbort(); + else + DetourTransactionCommit(); +} + +void log_blocked_dlls(void) +{ + for (int i = 0; i < _countof(blocked_modules); i++) { + blocked_module_t *b = &blocked_modules[i]; + if (b->blocked_count) { + blog(LOG_WARNING, + "Blocked loading of '%S' %" PRIu64 " time%S.", + b->name, b->blocked_count, + b->blocked_count == 1 ? L"" : L"s"); + } + } +} From 9c6a3a1d497ccbac4aff47ec45c7e31e8788c957 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Wed, 8 Mar 2023 03:27:54 +0100 Subject: [PATCH 0323/2225] obs-vst: Fix memory leaks on macOS when VST's fail to load Detected by clang-analyzer. --- plugins/obs-vst/mac/VSTPlugin-osx.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/obs-vst/mac/VSTPlugin-osx.mm b/plugins/obs-vst/mac/VSTPlugin-osx.mm index 3ad23e43f8a854..0a9e5399b9226f 100644 --- a/plugins/obs-vst/mac/VSTPlugin-osx.mm +++ b/plugins/obs-vst/mac/VSTPlugin-osx.mm @@ -30,6 +30,7 @@ true); if (bundleUrl == NULL) { + CFRelease(pluginPathStringRef); blog(LOG_WARNING, "Couldn't make URL reference for VST plug-in"); return NULL; @@ -58,6 +59,8 @@ if (mainEntryPoint == NULL) { blog(LOG_WARNING, "Couldn't get a pointer to plug-in's main()"); + CFRelease(pluginPathStringRef); + CFRelease(bundleUrl); CFRelease(bundle); bundle = NULL; return NULL; @@ -66,6 +69,8 @@ newEffect = mainEntryPoint(hostCallback_static); if (newEffect == NULL) { blog(LOG_WARNING, "VST Plug-in's main() returns null."); + CFRelease(pluginPathStringRef); + CFRelease(bundleUrl); CFRelease(bundle); bundle = NULL; return NULL; From b1c96bba86a8cba671db998c8c7131c3a5df6184 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 9 Mar 2023 00:16:00 +0100 Subject: [PATCH 0324/2225] UI: Re-raise remux dialog after selecting file on macOS --- UI/window-remux.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/UI/window-remux.cpp b/UI/window-remux.cpp index fd6b3386dfda37..551c71aaa6478d 100644 --- a/UI/window-remux.cpp +++ b/UI/window-remux.cpp @@ -235,6 +235,10 @@ void RemuxEntryPathItemDelegate::handleBrowse(QWidget *container) container->setProperty(PATH_LIST_PROP, paths); isSet = true; } +#ifdef __APPLE__ + // TODO: Revisit when QTBUG-42661 is fixed + container->window()->raise(); +#endif } if (isSet) From 853ae5ea6ec3a3b29bf48cf4e26c7e889b28f3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Piotrowski?= Date: Wed, 8 Feb 2023 12:11:50 +0100 Subject: [PATCH 0325/2225] UI: Set flathub::manifest Currently, the manifest URL on Flathub Beta website points to the deprecated manifest hosted on Flathub. The flathub::manifest key is undocumented attribute that will update the website to use the proper location. This key will not affect appstream other than providing enough information to the Flathub website. --- UI/xdg-data/CMakeLists.txt | 12 ++++++++++++ UI/xdg-data/com.obsproject.Studio.appdata.xml.in | 3 +++ 2 files changed, 15 insertions(+) diff --git a/UI/xdg-data/CMakeLists.txt b/UI/xdg-data/CMakeLists.txt index b57161e6df9e1c..1d348fad562fe3 100644 --- a/UI/xdg-data/CMakeLists.txt +++ b/UI/xdg-data/CMakeLists.txt @@ -11,6 +11,18 @@ if(NOT DEFINED APPDATA_RELEASE_DATE) endif() endif() +if(NOT DEFINED GIT_HASH) + if(EXISTS "${CMAKE_SOURCE_DIR}/.git") + execute_process( + COMMAND git rev-parse HEAD + OUTPUT_VARIABLE GIT_HASH + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_STRIP_TRAILING_WHITESPACE) + else() + set(GIT_HASH "master") + endif() +endif() + configure_file(com.obsproject.Studio.appdata.xml.in com.obsproject.Studio.appdata.xml) diff --git a/UI/xdg-data/com.obsproject.Studio.appdata.xml.in b/UI/xdg-data/com.obsproject.Studio.appdata.xml.in index b11b1afa0e1a4b..1012bc0017836d 100644 --- a/UI/xdg-data/com.obsproject.Studio.appdata.xml.in +++ b/UI/xdg-data/com.obsproject.Studio.appdata.xml.in @@ -43,4 +43,7 @@ + + https://github.com/obsproject/obs-studio/blob/@GIT_HASH@/CI/flatpak/com.obsproject.Studio.json + From 198c2b9e86c2cd729e95f78baa45da40b61ab868 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 10 Mar 2023 06:24:57 +0100 Subject: [PATCH 0326/2225] media-playback: Fix libavutil version check --- deps/media-playback/media-playback/decode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/media-playback/media-playback/decode.c b/deps/media-playback/media-playback/decode.c index 544795e6b2d6d2..b827c662a5f1d5 100644 --- a/deps/media-playback/media-playback/decode.c +++ b/deps/media-playback/media-playback/decode.c @@ -446,7 +446,7 @@ bool mp_decode_next(struct mp_decode *d) av_rescale_q(d->in_frame->best_effort_timestamp, d->stream->time_base, (AVRational){1, 1000000000}); -#if LIBAVUTIL_VERSION_MAJOR >= 57 && LIBAVUTIL_VERSION_MINOR >= 30 +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 30, 100) int64_t duration = d->in_frame->duration; #else int64_t duration = d->in_frame->pkt_duration; From 95cbd21a3b6d490976452bf1df2b76f397ce30f3 Mon Sep 17 00:00:00 2001 From: Stefan Murawski Date: Fri, 10 Mar 2023 10:30:06 +0100 Subject: [PATCH 0327/2225] UI/installer: Add quotes around UninstallString This follows recommended practice from NSIS documentation. This fixes issue #7935. --- UI/installer/mp-installer.nsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/installer/mp-installer.nsi b/UI/installer/mp-installer.nsi index 18b2f073250bdb..df34f8c38df646 100644 --- a/UI/installer/mp-installer.nsi +++ b/UI/installer/mp-installer.nsi @@ -406,7 +406,7 @@ Section -FinishSection WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "ProductID" "d16d2409-3151-4331-a9b1-dfd8cf3f0d9c" !ifdef INSTALL64 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$INSTDIR\bin\64bit\obs64.exe" From 4c9ebc753ca6db7bd3b86e5d2d51c182a50d8530 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 10 Mar 2023 14:47:43 +0100 Subject: [PATCH 0328/2225] UI: Create OBSPermissions on stack This fixes the window leaking and may improve performance. --- UI/obs-app.cpp | 8 ++++---- UI/window-basic-main.cpp | 11 +++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index cf293caf71bac6..860ce400aa113e 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -2442,10 +2442,10 @@ static int run_program(fstream &logFile, int argc, char *argv[]) "MacOSPermissionsDialogLastShown"); if (permissionsDialogLastShown < MACOS_PERMISSIONS_DIALOG_VERSION) { - OBSPermissions *check = new OBSPermissions( - nullptr, screen_permission, video_permission, - audio_permission, accessibility_permission); - check->exec(); + OBSPermissions check(nullptr, screen_permission, + video_permission, audio_permission, + accessibility_permission); + check.exec(); } #endif diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index dbd3431cc47f7c..4a0860a8d6a7ae 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5033,12 +5033,11 @@ void OBSBasic::on_action_Settings_triggered() void OBSBasic::on_actionShowMacPermissions_triggered() { #ifdef __APPLE__ - OBSPermissions *check = - new OBSPermissions(this, CheckPermission(kScreenCapture), - CheckPermission(kVideoDeviceAccess), - CheckPermission(kAudioDeviceAccess), - CheckPermission(kAccessibility)); - check->exec(); + OBSPermissions check(this, CheckPermission(kScreenCapture), + CheckPermission(kVideoDeviceAccess), + CheckPermission(kAudioDeviceAccess), + CheckPermission(kAccessibility)); + check.exec(); #endif } From 05b1be4f27f4ba77c77ea49da8de3d2ac5ac83d5 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 10:52:09 +0100 Subject: [PATCH 0329/2225] UI: Add MP4 to remuxable extensions --- UI/window-remux.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/UI/window-remux.cpp b/UI/window-remux.cpp index 551c71aaa6478d..28999c948fce13 100644 --- a/UI/window-remux.cpp +++ b/UI/window-remux.cpp @@ -205,8 +205,7 @@ void RemuxEntryPathItemDelegate::paint(QPainter *painter, void RemuxEntryPathItemDelegate::handleBrowse(QWidget *container) { - QString OutputPattern = "(*.mp4 *.flv *.mov *.mkv *.ts *.m3u8)"; - QString InputPattern = "(*.flv *.mov *.mkv *.ts *.m3u8)"; + QString ExtensionPattern = "(*.mp4 *.flv *.mov *.mkv *.ts *.m3u8)"; QLineEdit *text = container->findChild(); @@ -218,7 +217,7 @@ void RemuxEntryPathItemDelegate::handleBrowse(QWidget *container) if (isOutput) { QString newPath = SaveFile(container, QTStr("Remux.SelectTarget"), - currentPath, OutputPattern); + currentPath, ExtensionPattern); if (!newPath.isEmpty()) { container->setProperty(PATH_LIST_PROP, @@ -229,7 +228,7 @@ void RemuxEntryPathItemDelegate::handleBrowse(QWidget *container) QStringList paths = OpenFiles( container, QTStr("Remux.SelectRecording"), currentPath, QTStr("Remux.OBSRecording") + QString(" ") + - InputPattern); + ExtensionPattern); if (!paths.empty()) { container->setProperty(PATH_LIST_PROP, paths); From 705173a0c3a20ba66ca6935843fb6561a74054c5 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 29 Jan 2023 12:48:01 +0100 Subject: [PATCH 0330/2225] UI: Add fragmented MP4/MOV formats --- UI/data/locale/en-US.ini | 9 ++++ UI/forms/OBSBasicSettings.ui | 78 ++++++++------------------------ UI/window-basic-main-outputs.cpp | 51 ++++++++++++++++++++- UI/window-basic-settings.cpp | 54 ++++++++++++++-------- 4 files changed, 112 insertions(+), 80 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 7a6d40a0fec8b4..3db11a46a89940 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -931,6 +931,15 @@ Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1" # basic mode 'output' settings Basic.Settings.Output="Output" Basic.Settings.Output.Format="Recording Format" +Basic.Settings.Output.Format.MKV="Matroska Video (.mkv)" +Basic.Settings.Output.Format.FLV="Flash Video (.flv)" +Basic.Settings.Output.Format.MP4="MPEG-4 (.mp4)" +Basic.Settings.Output.Format.MOV="QuickTime (.mov)" +Basic.Settings.Output.Format.TS="MPEG-TS (.ts)" +Basic.Settings.Output.Format.HLS="HLS (.m3u8 + .ts)" +Basic.Settings.Output.Format.fMP4="Fragmented MP4 (.mp4)" +Basic.Settings.Output.Format.fMOV="Fragmented MOV (.mov)" +Basic.Settings.Output.Format.TT="Fragmented MP4/MOV writes the recording in chunks and does not require the same finalization as traditional MP4/MOV files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary." Basic.Settings.Output.Encoder="Encoder" Basic.Settings.Output.SelectDirectory="Select Recording Directory" Basic.Settings.Output.SelectFile="Select Recording File" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 4f7ff195e19be9..bb894fb204c7c2 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1888,36 +1888,15 @@
- - - flv - - - - - mp4 - - - - - mov - - - - - mkv - - - - - ts - - - - - m3u8 - - + + Basic.Settings.Output.Format.TT + + + false + + + + @@ -2652,42 +2631,21 @@ + + Basic.Settings.Output.Format.TT + 0 0 - - - flv - - - - - mp4 - - - - - mov - - - - - mkv - - - - - ts - - - - - m3u8 - - + + false + + + + diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index e84759cab2461d..2a20e4e070ba8f 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1149,9 +1149,15 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) int rbSize = config_get_int(main->Config(), "SimpleOutput", "RecRBSize"); + bool is_fragmented = strcmp(format, "fmp4") == 0 || + strcmp(format, "fmov") == 0; + string f; string strPath; + if (is_fragmented) + ++format; + OBSDataAutoRelease settings = obs_data_create(); if (updateReplayBuffer) { f = GetFormatString(filenameFormat, rbPrefix, rbSuffix); @@ -1175,7 +1181,23 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) strPath.c_str()); } - obs_data_set_string(settings, "muxer_settings", mux); + // Use fragmented MOV/MP4 if user has not already specified custom movflags + if (is_fragmented && (!mux || strstr(mux, "movflags") == NULL)) { + string mux_frag = + "movflags=frag_keyframe+empty_moov+delay_moov"; + if (mux) { + mux_frag += " "; + mux_frag += mux; + } + obs_data_set_string(settings, "muxer_settings", + mux_frag.c_str()); + } else { + if (is_fragmented) + blog(LOG_WARNING, + "User enabled fragmented recording, " + "but custom muxer settings contained movflags."); + obs_data_set_string(settings, "muxer_settings", mux); + } if (updateReplayBuffer) obs_output_update(replayBuffer, settings); @@ -1592,6 +1614,9 @@ inline void AdvancedOutput::SetupRecording() const char *recFormat = config_get_string(main->Config(), "AdvOut", "RecFormat"); + bool is_fragmented = strcmp(recFormat, "fmp4") == 0 || + strcmp(recFormat, "fmov") == 0; + bool flv = strcmp(recFormat, "flv") == 0; if (flv) @@ -1647,8 +1672,25 @@ inline void AdvancedOutput::SetupRecording() aacTrack[tracks - 1], idx); } + // Use fragmented MOV/MP4 if user has not already specified custom movflags + if (is_fragmented && (!mux || strstr(mux, "movflags") == NULL)) { + string mux_fmp4 = + "movflags=frag_keyframe+empty_moov+delay_moov"; + if (mux) { + mux_fmp4 += " "; + mux_fmp4 += mux; + } + obs_data_set_string(settings, "muxer_settings", + mux_fmp4.c_str()); + } else { + if (is_fragmented) + blog(LOG_WARNING, + "User enabled fragmented recording, " + "but custom muxer settings contained movflags."); + obs_data_set_string(settings, "muxer_settings", mux); + } + obs_data_set_string(settings, "path", path); - obs_data_set_string(settings, "muxer_settings", mux); obs_output_update(fileOutput, settings); if (replayBuffer) obs_output_update(replayBuffer, settings); @@ -2039,6 +2081,11 @@ bool AdvancedOutput::StartRecording() splitFile = config_get_bool(main->Config(), "AdvOut", "RecSplitFile"); + // Strip leading "f" in case fragmented format was selected + if (strcmp(recFormat, "fmp4") == 0 || + strcmp(recFormat, "fmov") == 0) + ++recFormat; + string strPath = GetRecordingFilename(path, recFormat, noSpace, overwriteIfExists, filenameFormat, diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 2305dee0e21c42..82e63f81cd5710 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1031,6 +1031,7 @@ void OBSBasicSettings::LoadColorFormats() void OBSBasicSettings::LoadFormats() { +#define FORMAT_STR(str) QTStr("Basic.Settings.Output.Format." str) ui->advOutFFFormat->blockSignals(true); formats.reset(ff_format_supported()); @@ -1059,6 +1060,25 @@ void OBSBasicSettings::LoadFormats() ui->advOutFFFormat->insertItem(0, AV_FORMAT_DEFAULT_STR); ui->advOutFFFormat->blockSignals(false); + + ui->simpleOutRecFormat->addItem(FORMAT_STR("FLV"), "flv"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("MKV"), "mkv"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("MP4"), "mp4"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("MOV"), "mov"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("fMP4"), "fmp4"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("fMOV"), "fmov"); + ui->simpleOutRecFormat->addItem(FORMAT_STR("TS"), "ts"); + + ui->advOutRecFormat->addItem(FORMAT_STR("FLV"), "flv"); + ui->advOutRecFormat->addItem(FORMAT_STR("MKV"), "mkv"); + ui->advOutRecFormat->addItem(FORMAT_STR("MP4"), "mp4"); + ui->advOutRecFormat->addItem(FORMAT_STR("MOV"), "mov"); + ui->advOutRecFormat->addItem(FORMAT_STR("fMP4"), "fmp4"); + ui->advOutRecFormat->addItem(FORMAT_STR("fMOV"), "fmov"); + ui->advOutRecFormat->addItem(FORMAT_STR("TS"), "ts"); + ui->advOutRecFormat->addItem(FORMAT_STR("HLS"), "m3u8"); + +#undef FORMAT_STR } static void AddCodec(QComboBox *combo, const ff_codec_desc *codec_desc) @@ -1844,7 +1864,7 @@ void OBSBasicSettings::LoadSimpleOutputSettings() ui->simpleNoSpace->setChecked(noSpace); ui->simpleOutputVBitrate->setValue(videoBitrate); - int idx = ui->simpleOutRecFormat->findText(format); + int idx = ui->simpleOutRecFormat->findData(format); ui->simpleOutRecFormat->setCurrentIndex(idx); const char *speakers = @@ -2022,7 +2042,7 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings() ui->advOutRecRescale->setCurrentText(rescaleRes); ui->advOutMuxCustom->setText(muxCustom); - int idx = ui->advOutRecFormat->findText(format); + int idx = ui->advOutRecFormat->findData(format); ui->advOutRecFormat->setCurrentIndex(idx); ui->advOutRecTrack1->setChecked(tracks & (1 << 0)); @@ -3621,7 +3641,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveCombo(ui->simpleOutputABitrate, "SimpleOutput", "ABitrate"); SaveEdit(ui->simpleOutputPath, "SimpleOutput", "FilePath"); SaveCheckBox(ui->simpleNoSpace, "SimpleOutput", "FileNameWithoutSpace"); - SaveCombo(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat"); + SaveComboData(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat"); SaveCheckBox(ui->simpleOutAdvanced, "SimpleOutput", "UseAdvanced"); SaveComboData(ui->simpleOutPreset, "SimpleOutput", presetType); SaveEdit(ui->simpleOutCustom, "SimpleOutput", "x264Settings"); @@ -3648,7 +3668,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveEdit(ui->advOutRecPath, "AdvOut", "RecFilePath"); SaveCheckBox(ui->advOutNoSpace, "AdvOut", "RecFileNameWithoutSpace"); - SaveCombo(ui->advOutRecFormat, "AdvOut", "RecFormat"); + SaveComboData(ui->advOutRecFormat, "AdvOut", "RecFormat"); SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder"); SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale"); SaveCombo(ui->advOutRecRescale, "AdvOut", "RecRescaleRes"); @@ -4709,7 +4729,9 @@ void OBSBasicSettings::AdvOutRecCheckWarnings() warningMsg += QTStr("OutputWarnings.CannotPause"); } - if (ui->advOutRecFormat->currentText().compare("flv") == 0) { + QString recFormat = ui->advOutRecFormat->currentData().toString(); + + if (recFormat == "flv") { ui->advRecTrackWidget->setCurrentWidget(ui->flvTracks); } else { ui->advRecTrackWidget->setCurrentWidget(ui->recTracks); @@ -4718,20 +4740,18 @@ void OBSBasicSettings::AdvOutRecCheckWarnings() errorMsg = QTStr("OutputWarnings.NoTracksSelected"); } - QString recFormat = ui->advOutRecFormat->currentText(); QString recEncoder = ui->advOutRecEncoder->currentText(); if (recEncoder.contains("ProRes")) { - if (recFormat.compare("mkv") == 0) { + if (recFormat == "mkv") { ui->autoRemux->setText( QTStr("Basic.Settings.Advanced.AutoRemux") .arg("mov")); - } else if (recFormat.compare("mov") == 0) { - if (!warningMsg.isEmpty()) { + } else if (recFormat == "mov") { + if (!warningMsg.isEmpty()) warningMsg += "\n\n"; - } - warningMsg += QTStr("OutputWarnings.MP4Recording"); + ui->autoRemux->setText( QTStr("Basic.Settings.Advanced.AutoRemux") .arg("mov") + @@ -4746,11 +4766,9 @@ void OBSBasicSettings::AdvOutRecCheckWarnings() .arg(recFormat); } } else { - if (recFormat.compare("mp4") == 0 || - recFormat.compare("mov") == 0) { - if (!warningMsg.isEmpty()) { + if (recFormat == "mp4" || recFormat == "mov") { + if (!warningMsg.isEmpty()) warningMsg += "\n\n"; - } warningMsg += QTStr("OutputWarnings.MP4Recording"); ui->autoRemux->setText( @@ -5317,9 +5335,9 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() warning += SIMPLE_OUTPUT_WARNING("CannotPause"); } - if (qual != "Lossless" && - (ui->simpleOutRecFormat->currentText().compare("mp4") == 0 || - ui->simpleOutRecFormat->currentText().compare("mov") == 0)) { + QString format = ui->simpleOutRecFormat->currentData().toString(); + + if (qual != "Lossless" && (format == "mp4" || format == "mov")) { if (!warning.isEmpty()) warning += "\n\n"; warning += QTStr("OutputWarnings.MP4Recording"); From bb4e6f9e51d77cb0962a4220e800560885f665dc Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 9 Mar 2023 01:08:24 +0100 Subject: [PATCH 0331/2225] UI: Don't try to make OBSBasic parent of ControlsSplitButton Passing the parent of a QLayout sets it directly as the top-level layout (as per the QLayout docs). This is obviously not what is intended here. Luckily it doesn't even work since the main window of course already has a layout which would need to be explicitly removed before, but it makes Qt yell at us for trying. --- UI/record-button.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/record-button.cpp b/UI/record-button.cpp index c368d1d6f26b56..a33bbfdec9cbf7 100644 --- a/UI/record-button.cpp +++ b/UI/record-button.cpp @@ -67,7 +67,7 @@ static QWidget *getNextWidget(QBoxLayout *container, QLayoutItem *item) ControlsSplitButton::ControlsSplitButton(const QString &text, const QVariant &themeID, void (OBSBasic::*clicked)()) - : QHBoxLayout(OBSBasic::Get()) + : QHBoxLayout() { button.reset(new QPushButton(text)); button->setCheckable(true); From 4b062a714745581ab42192444ae814c7d51f8f6a Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 4 Mar 2023 14:26:51 +0100 Subject: [PATCH 0332/2225] libobs: Add functions for getting/saving pretty JSON --- libobs/obs-data.c | 30 ++++++++++++++++++++++++++++++ libobs/obs-data.h | 4 ++++ 2 files changed, 34 insertions(+) diff --git a/libobs/obs-data.c b/libobs/obs-data.c index 55d7366d1233f4..c6a03e08105324 100644 --- a/libobs/obs-data.c +++ b/libobs/obs-data.c @@ -742,6 +742,22 @@ const char *obs_data_get_json(obs_data_t *data) return data->json; } +const char *obs_data_get_json_pretty(obs_data_t *data) +{ + if (!data) + return NULL; + + /* NOTE: don't use libobs bfree for json text */ + free(data->json); + data->json = NULL; + + json_t *root = obs_data_to_json(data); + data->json = json_dumps(root, JSON_PRESERVE_ORDER | JSON_INDENT(4)); + json_decref(root); + + return data->json; +} + const char *obs_data_get_last_json(obs_data_t *data) { return data ? data->json : NULL; @@ -772,6 +788,20 @@ bool obs_data_save_json_safe(obs_data_t *data, const char *file, return false; } +bool obs_data_save_json_pretty_safe(obs_data_t *data, const char *file, + const char *temp_ext, + const char *backup_ext) +{ + const char *json = obs_data_get_json_pretty(data); + + if (json && *json) { + return os_quick_write_utf8_file_safe( + file, json, strlen(json), false, temp_ext, backup_ext); + } + + return false; +} + static void get_defaults_array_cb(obs_data_t *data, void *vp) { obs_data_array_t *defs = (obs_data_array_t *)vp; diff --git a/libobs/obs-data.h b/libobs/obs-data.h index 09a1f276408d75..438acbcff97d57 100644 --- a/libobs/obs-data.h +++ b/libobs/obs-data.h @@ -70,11 +70,15 @@ EXPORT void obs_data_addref(obs_data_t *data); EXPORT void obs_data_release(obs_data_t *data); EXPORT const char *obs_data_get_json(obs_data_t *data); +EXPORT const char *obs_data_get_json_pretty(obs_data_t *data); EXPORT const char *obs_data_get_last_json(obs_data_t *data); EXPORT bool obs_data_save_json(obs_data_t *data, const char *file); EXPORT bool obs_data_save_json_safe(obs_data_t *data, const char *file, const char *temp_ext, const char *backup_ext); +EXPORT bool obs_data_save_json_pretty_safe(obs_data_t *data, const char *file, + const char *temp_ext, + const char *backup_ext); EXPORT void obs_data_apply(obs_data_t *target, obs_data_t *apply_data); From f55b251fa8da4bc1304e48293b947f02998ad038 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 4 Mar 2023 18:22:21 +0100 Subject: [PATCH 0333/2225] UI: Sort and pretty-print exported collections --- UI/window-basic-main-scene-collections.cpp | 42 ++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/UI/window-basic-main-scene-collections.cpp b/UI/window-basic-main-scene-collections.cpp index a41ec8aea220a2..b00682c5fd720c 100644 --- a/UI/window-basic-main-scene-collections.cpp +++ b/UI/window-basic-main-scene-collections.cpp @@ -397,10 +397,46 @@ void OBSBasic::on_actionExportSceneCollection_triggered() string file = QT_TO_UTF8(exportFile); if (!exportFile.isEmpty() && !exportFile.isNull()) { - if (QFile::exists(exportFile)) - QFile::remove(exportFile); + QString inputFile = path + currentFile + ".json"; - QFile::copy(path + currentFile + ".json", exportFile); + OBSDataAutoRelease collection = + obs_data_create_from_json_file(QT_TO_UTF8(inputFile)); + + OBSDataArrayAutoRelease sources = + obs_data_get_array(collection, "sources"); + if (!sources) { + blog(LOG_WARNING, + "No sources in exported scene collection"); + return; + } + obs_data_erase(collection, "sources"); + + // We're just using std::sort on a vector to make life easier. + vector sourceItems; + obs_data_array_enum( + sources, + [](obs_data_t *data, void *pVec) -> void { + auto &sourceItems = + *static_cast *>(pVec); + sourceItems.push_back(data); + }, + &sourceItems); + + std::sort(sourceItems.begin(), sourceItems.end(), + [](const OBSData &a, const OBSData &b) { + return astrcmpi(obs_data_get_string(a, + "name"), + obs_data_get_string( + b, "name")) < 0; + }); + + OBSDataArrayAutoRelease newSources = obs_data_array_create(); + for (auto &item : sourceItems) + obs_data_array_push_back(newSources, item); + + obs_data_set_array(collection, "sources", newSources); + obs_data_save_json_pretty_safe( + collection, QT_TO_UTF8(exportFile), "tmp", "bak"); } } From b82c8ccdcf1c4cb9dd88355b794ba1629cec3d85 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Wed, 8 Mar 2023 12:20:10 -0600 Subject: [PATCH 0334/2225] UI: Limit preview scrolling This prevents the preview from being scrolled on forever. --- UI/window-basic-main.cpp | 1 + UI/window-basic-preview.cpp | 24 ++++++++++++++++++++++++ UI/window-basic-preview.hpp | 1 + 3 files changed, 26 insertions(+) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 4a0860a8d6a7ae..204875e6dacc43 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -4665,6 +4665,7 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy) obs_get_video_info(&ovi); if (isFixedScaling) { + ui->preview->ClampScrollingOffsets(); previewScale = ui->preview->GetScalingAmount(); GetCenterPosFromFixedScale( int(cx), int(cy), diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index 852d7d01339647..091bf8c3f0d200 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -9,6 +9,7 @@ #include "window-basic-main.hpp" #include "obs-app.hpp" #include "platform.hpp" +#include "display-helpers.hpp" #define HANDLE_RADIUS 4.0f #define HANDLE_SEL_RADIUS (HANDLE_RADIUS * 1.5f) @@ -2606,3 +2607,26 @@ void OBSBasicPreview::DrawSpacingHelpers() vec3_set(&end, 1.0f, right.y, 1.0f); RenderSpacingHelper(3, start, end, viewport, pixelRatio); } + +void OBSBasicPreview::ClampScrollingOffsets() +{ + obs_video_info ovi; + obs_get_video_info(&ovi); + + QSize targetSize = GetPixelSize(this); + + vec3 target, offset; + vec3_set(&target, (float)targetSize.width(), (float)targetSize.height(), + 1.0f); + + vec3_set(&offset, (float)ovi.base_width, (float)ovi.base_height, 1.0f); + vec3_mulf(&offset, &offset, scalingAmount); + + vec3_sub(&offset, &offset, &target); + + vec3_mulf(&offset, &offset, 0.5f); + vec3_maxf(&offset, &offset, 0.0f); + + scrollingOffset.x = std::clamp(scrollingOffset.x, -offset.x, offset.x); + scrollingOffset.y = std::clamp(scrollingOffset.y, -offset.y, offset.y); +} diff --git a/UI/window-basic-preview.hpp b/UI/window-basic-preview.hpp index 51c0f851b5d2af..132df402acbb29 100644 --- a/UI/window-basic-preview.hpp +++ b/UI/window-basic-preview.hpp @@ -197,4 +197,5 @@ class OBSBasicPreview : public OBSQTDisplay { int spacerPx[4] = {0}; void DrawSpacingHelpers(); + void ClampScrollingOffsets(); }; From aee268c9443cb39f3823886d475fa24f848f69ab Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 9 Mar 2023 12:55:56 +0100 Subject: [PATCH 0335/2225] UI: Don't show video-only async filters for synchronous sources Expands the filter_compatible check to return false if the source isn't async and the filter is not an audio filter, filtering out e.g. the "Video Delay (Async)" filter from browser sources (which have audio but don't have async video). Amends 845e056551ebb2a6b02a6a1c3683bb5a5b61fb31. --- UI/window-basic-filters.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index 266a10e6485f3d..2fc527ce12fba8 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -505,8 +505,9 @@ static bool filter_compatible(bool async, uint32_t sourceFlags, bool audioOnly = (sourceFlags & OBS_SOURCE_VIDEO) == 0; bool asyncSource = (sourceFlags & OBS_SOURCE_ASYNC) != 0; - if (async && ((audioOnly && filterVideo) || (!audio && !asyncSource) || - (filterAudio && !audio))) + if (async && + ((audioOnly && filterVideo) || (!audio && !asyncSource) || + (filterAudio && !audio) || (!asyncSource && !filterAudio))) return false; return (async && (filterAudio || filterAsync)) || From ab04bb1f553a77ca0361ef0818f889790cab0dcb Mon Sep 17 00:00:00 2001 From: gxalpha Date: Sat, 11 Mar 2023 21:18:42 +0100 Subject: [PATCH 0336/2225] UI: Don't show Update section in settings when built without Sparkle --- UI/window-basic-settings.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 82e63f81cd5710..5a59d65057c95c 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -577,7 +577,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->advOutFFVBitrate->setSuffix(" Kbps"); ui->advOutFFABitrate->setSuffix(" Kbps"); -#if !defined(_WIN32) && !defined(__APPLE__) +#if !defined(_WIN32) && !defined(ENABLE_SPARKLE_UPDATER) delete ui->updateSettingsGroupBox; ui->updateSettingsGroupBox = nullptr; ui->updateChannelLabel = nullptr; @@ -1301,14 +1301,12 @@ void OBSBasicSettings::LoadGeneralSettings() LoadLanguageList(); LoadThemeList(); -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) bool enableAutoUpdates = config_get_bool(GetGlobalConfig(), "General", "EnableAutoUpdates"); ui->enableAutoUpdates->setChecked(enableAutoUpdates); -#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) LoadBranchesList(); -#endif #endif bool openStatsOnStartup = config_get_bool(main->Config(), "General", "OpenStatsOnStartup"); From 11f88af88050bed4944dcd5082d8e0efe93a2d6d Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 27 Feb 2023 10:14:08 +0100 Subject: [PATCH 0337/2225] cmake: Add libuuid finder --- cmake/Modules/FindLibUUID.cmake | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 cmake/Modules/FindLibUUID.cmake diff --git a/cmake/Modules/FindLibUUID.cmake b/cmake/Modules/FindLibUUID.cmake new file mode 100644 index 00000000000000..5e56f246cda87e --- /dev/null +++ b/cmake/Modules/FindLibUUID.cmake @@ -0,0 +1,34 @@ +# Stripped down version of +# https://gitlab.kitware.com/cmake/cmake/blob/e1409101c99f7a3487990e9927e8bd0e275f564f/Source/Modules/FindLibUUID.cmake +# +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. +# +# Once done these will be defined: +# +# LibUUID_FOUND LibUUID_INCLUDE_DIRS LibUUID_LIBRARIES + +find_library(LibUUID_LIBRARY NAMES uuid) +mark_as_advanced(LibUUID_LIBRARY) + +find_path(LibUUID_INCLUDE_DIR NAMES uuid/uuid.h) +mark_as_advanced(LibUUID_INCLUDE_DIR) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + LibUUID + FOUND_VAR LibUUID_FOUND + REQUIRED_VARS LibUUID_LIBRARY LibUUID_INCLUDE_DIR) +set(LIBUUID_FOUND ${LibUUID_FOUND}) + +if(LibUUID_FOUND) + set(LibUUID_INCLUDE_DIRS ${LibUUID_INCLUDE_DIR}) + set(LibUUID_LIBRARIES ${LibUUID_LIBRARY}) + if(NOT TARGET LibUUID::LibUUID) + add_library(LibUUID::LibUUID UNKNOWN IMPORTED) + set_target_properties( + LibUUID::LibUUID + PROPERTIES IMPORTED_LOCATION "${LibUUID_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LibUUID_INCLUDE_DIRS}") + endif() +endif() From f72cc4498f2af41faab41ba21076948476996ad7 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 25 Feb 2023 15:00:32 +0100 Subject: [PATCH 0338/2225] libobs: Add os_generate_uuid() to platform utils --- .../sphinx/reference-libobs-util-platform.rst | 7 +++++++ libobs/CMakeLists.txt | 5 +++-- libobs/util/platform-nix.c | 11 +++++++++++ libobs/util/platform-windows.c | 19 +++++++++++++++++++ libobs/util/platform.h | 4 ++++ 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/docs/sphinx/reference-libobs-util-platform.rst b/docs/sphinx/reference-libobs-util-platform.rst index b1d6b7742ce6cf..95a8182cbd1e89 100644 --- a/docs/sphinx/reference-libobs-util-platform.rst +++ b/docs/sphinx/reference-libobs-util-platform.rst @@ -496,3 +496,10 @@ Other Functions being translated by Rosetta and running on Apple Silicon Macs. On Windows, it returns true when an x64 binary is being emulated on Windows ARM64 PCs. On all other platforms, it will always returns false. + +---------------------- + +.. function:: char *os_generate_uuid(void) + + Creates a version 4 UUID and returns a NULL-terminated 36-character string. + Must be freed with :c:func:`bfree()`. diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 4405eb66f3cd03..e72e443abb3c20 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -307,7 +307,7 @@ if(OS_WINDOWS) libobs PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS) - target_link_libraries(libobs PRIVATE dxgi Avrt Dwmapi winmm) + target_link_libraries(libobs PRIVATE dxgi Avrt Dwmapi winmm Rpcrt4) if(MSVC) target_link_libraries(libobs PUBLIC OBS::w32-pthreads) @@ -374,6 +374,7 @@ elseif(OS_POSIX) target_compile_definitions(libobs PRIVATE ENABLE_DARRAY_TYPE_TEST) endif() + find_package(LibUUID REQUIRED) find_package(X11 REQUIRED) find_package( XCB @@ -393,7 +394,7 @@ elseif(OS_POSIX) util/pipe-posix.c util/platform-nix.c) - target_link_libraries(libobs PRIVATE X11::X11_xcb XCB::XCB) + target_link_libraries(libobs PRIVATE X11::X11_xcb XCB::XCB LibUUID::LibUUID) if(USE_XDG) target_compile_definitions(libobs PRIVATE USE_XDG) diff --git a/libobs/util/platform-nix.c b/libobs/util/platform-nix.c index 68a30a979e6664..7ee85a35dce8e1 100644 --- a/libobs/util/platform-nix.c +++ b/libobs/util/platform-nix.c @@ -35,6 +35,7 @@ #include #include #include +#include #if !defined(__APPLE__) #include @@ -1137,3 +1138,13 @@ uint64_t os_get_free_disk_space(const char *dir) return (uint64_t)info.f_frsize * (uint64_t)info.f_bavail; } + +char *os_generate_uuid(void) +{ + uuid_t uuid; + // 36 char UUID + NULL + char *out = bmalloc(37); + uuid_generate(uuid); + uuid_unparse_lower(uuid, out); + return out; +} diff --git a/libobs/util/platform-windows.c b/libobs/util/platform-windows.c index c5f50f05ab633e..bb1785c4c7818d 100644 --- a/libobs/util/platform-windows.c +++ b/libobs/util/platform-windows.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "base.h" #include "platform.h" @@ -1479,3 +1480,21 @@ uint64_t os_get_free_disk_space(const char *dir) return success ? free.QuadPart : 0; } + +char *os_generate_uuid(void) +{ + UUID uuid; + + RPC_STATUS res = UuidCreate(&uuid); + if (res != RPC_S_OK && res != RPC_S_UUID_LOCAL_ONLY) + bcrash("Failed to get UUID, RPC_STATUS: %l", res); + + struct dstr uuid_str = {0}; + dstr_printf(&uuid_str, + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + uuid.Data1, uuid.Data2, uuid.Data3, uuid.Data4[0], + uuid.Data4[1], uuid.Data4[2], uuid.Data4[3], uuid.Data4[4], + uuid.Data4[5], uuid.Data4[6], uuid.Data4[7]); + + return uuid_str.array; +} diff --git a/libobs/util/platform.h b/libobs/util/platform.h index 80c2dfee07e3ff..fbf4687bdf62e6 100644 --- a/libobs/util/platform.h +++ b/libobs/util/platform.h @@ -201,6 +201,10 @@ EXPORT bool os_get_proc_memory_usage(os_proc_memory_usage_t *usage); EXPORT uint64_t os_get_proc_resident_size(void); EXPORT uint64_t os_get_proc_virtual_size(void); +#define UUID_STR_LENGTH 36 + +EXPORT char *os_generate_uuid(void); + /* clang-format off */ #ifdef __APPLE__ # define ARCH_BITS 64 From 30519768ade99d944ee6efc7d2dfaaf9d915a6a4 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 25 Feb 2023 15:01:17 +0100 Subject: [PATCH 0339/2225] libobs: Add UUIDs to obs_source objects --- docs/sphinx/reference-core.rst | 9 ++++++ docs/sphinx/reference-sources.rst | 6 ++++ libobs/obs-encoder.c | 2 +- libobs/obs-internal.h | 13 +++++--- libobs/obs-output.c | 2 +- libobs/obs-service.c | 3 +- libobs/obs-source.c | 24 +++++++++----- libobs/obs.c | 52 ++++++++++++++++++++++++------- libobs/obs.h | 11 +++++++ 9 files changed, 95 insertions(+), 27 deletions(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index 002a6d3b71ec87..b6d0720e15c517 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -333,6 +333,15 @@ Libobs Objects --------------------- +.. function:: obs_source_t *obs_get_source_by_uuid(const char *uuid) + + Gets a source by its UUID. + + Increments the source reference counter, use + :c:func:`obs_source_release()` to release it when complete. + +--------------------- + .. function:: obs_source_t *obs_get_transition_by_name(const char *name) Gets a transition by its name. diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index 38996da1c7f148..ec59a2e97d9e25 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -941,6 +941,12 @@ General Source Functions --------------------- +.. function:: const char *obs_source_get_uuid(const obs_source_t *source) + + :return: The UUID of the source + +--------------------- + .. function:: void obs_source_set_name(obs_source_t *source, const char *name) Sets the name of a source. If the source is not private and the name diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index 8d8c8620c31bdf..677b92f7dabd74 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -52,7 +52,7 @@ static bool init_encoder(struct obs_encoder *encoder, const char *name, pthread_mutex_init_value(&encoder->pause.mutex); if (!obs_context_data_init(&encoder->context, OBS_OBJ_TYPE_ENCODER, - settings, name, hotkey_data, false)) + settings, name, NULL, hotkey_data, false)) return false; if (pthread_mutex_init_recursive(&encoder->init_mutex) != 0) return false; diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index b7df1f235142b8..7a3bd799996fb7 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -520,6 +520,7 @@ typedef void (*obs_destroy_cb)(void *obj); struct obs_context_data { char *name; + const char *uuid; void *data; obs_data_t *settings; signal_handler_t *signals; @@ -545,8 +546,8 @@ struct obs_context_data { extern bool obs_context_data_init(struct obs_context_data *context, enum obs_obj_type type, obs_data_t *settings, - const char *name, obs_data_t *hotkey_data, - bool private); + const char *name, const char *uuid, + obs_data_t *hotkey_data, bool private); extern void obs_context_init_control(struct obs_context_data *context, void *object, obs_destroy_cb destroy); extern void obs_context_data_free(struct obs_context_data *context); @@ -834,7 +835,8 @@ extern struct obs_source_info *get_source_info2(const char *unversioned_id, uint32_t ver); extern bool obs_source_init_context(struct obs_source *source, obs_data_t *settings, const char *name, - obs_data_t *hotkey_data, bool private); + const char *uuid, obs_data_t *hotkey_data, + bool private); extern bool obs_transition_init(obs_source_t *transition); extern void obs_transition_free(obs_source_t *transition); @@ -851,8 +853,9 @@ extern void audio_monitor_destroy(struct audio_monitor *monitor); extern obs_source_t * obs_source_create_set_last_ver(const char *id, const char *name, - obs_data_t *settings, obs_data_t *hotkey_data, - uint32_t last_obs_ver, bool is_private); + const char *uuid, obs_data_t *settings, + obs_data_t *hotkey_data, uint32_t last_obs_ver, + bool is_private); extern void obs_source_destroy(struct obs_source *source); enum view_type { diff --git a/libobs/obs-output.c b/libobs/obs-output.c index ad71c7cedea3b7..9e847f3bc75160 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -94,7 +94,7 @@ static bool init_output_handlers(struct obs_output *output, const char *name, obs_data_t *settings, obs_data_t *hotkey_data) { if (!obs_context_data_init(&output->context, OBS_OBJ_TYPE_OUTPUT, - settings, name, hotkey_data, false)) + settings, name, NULL, hotkey_data, false)) return false; signal_handler_add_array(output->context.signals, output_signals); diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 53269c6cafffa8..a2cd0140c6d1da 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -52,7 +52,8 @@ static obs_service_t *obs_service_create_internal(const char *id, service = bzalloc(sizeof(struct obs_service)); if (!obs_context_data_init(&service->context, OBS_OBJ_TYPE_SERVICE, - settings, name, hotkey_data, private)) { + settings, name, NULL, hotkey_data, + private)) { bfree(service); return NULL; } diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 037c2668f16fd3..f92d54f49abbf8 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -118,11 +118,11 @@ static const char *source_signals[] = { }; bool obs_source_init_context(struct obs_source *source, obs_data_t *settings, - const char *name, obs_data_t *hotkey_data, - bool private) + const char *name, const char *uuid, + obs_data_t *hotkey_data, bool private) { if (!obs_context_data_init(&source->context, OBS_OBJ_TYPE_SOURCE, - settings, name, hotkey_data, private)) + settings, name, uuid, hotkey_data, private)) return false; return signal_handler_add_array(source->context.signals, @@ -340,7 +340,7 @@ static void obs_source_init_audio_hotkeys(struct obs_source *source) } static obs_source_t * -obs_source_create_internal(const char *id, const char *name, +obs_source_create_internal(const char *id, const char *name, const char *uuid, obs_data_t *settings, obs_data_t *hotkey_data, bool private, uint32_t last_obs_ver) { @@ -370,7 +370,7 @@ obs_source_create_internal(const char *id, const char *name, source->push_to_talk_key = OBS_INVALID_HOTKEY_ID; source->last_obs_ver = last_obs_ver; - if (!obs_source_init_context(source, settings, name, hotkey_data, + if (!obs_source_init_context(source, settings, name, uuid, hotkey_data, private)) goto fail; @@ -420,24 +420,25 @@ obs_source_create_internal(const char *id, const char *name, obs_source_t *obs_source_create(const char *id, const char *name, obs_data_t *settings, obs_data_t *hotkey_data) { - return obs_source_create_internal(id, name, settings, hotkey_data, + return obs_source_create_internal(id, name, NULL, settings, hotkey_data, false, LIBOBS_API_VER); } obs_source_t *obs_source_create_private(const char *id, const char *name, obs_data_t *settings) { - return obs_source_create_internal(id, name, settings, NULL, true, + return obs_source_create_internal(id, name, NULL, settings, NULL, true, LIBOBS_API_VER); } obs_source_t *obs_source_create_set_last_ver(const char *id, const char *name, + const char *uuid, obs_data_t *settings, obs_data_t *hotkey_data, uint32_t last_obs_ver, bool is_private) { - return obs_source_create_internal(id, name, settings, hotkey_data, + return obs_source_create_internal(id, name, uuid, settings, hotkey_data, is_private, last_obs_ver); } @@ -4242,6 +4243,13 @@ const char *obs_source_get_name(const obs_source_t *source) : NULL; } +const char *obs_source_get_uuid(const obs_source_t *source) +{ + return obs_source_valid(source, "obs_source_get_uuid") + ? source->context.uuid + : NULL; +} + void obs_source_set_name(obs_source_t *source, const char *name) { if (!obs_source_valid(source, "obs_source_set_name")) diff --git a/libobs/obs.c b/libobs/obs.c index bf045f68fbe7c2..8ae0b4051bf108 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -2019,6 +2019,26 @@ obs_source_t *obs_get_source_by_name(const char *name) obs_source_addref_safe_); } +obs_source_t *obs_get_source_by_uuid(const char *uuid) +{ + struct obs_source **first = &obs->data.first_source; + struct obs_source *source; + + pthread_mutex_lock(&obs->data.sources_mutex); + + source = *first; + while (source) { + if (strcmp(source->context.uuid, uuid) == 0) { + source = obs_source_get_ref(source); + break; + } + source = (struct obs_source *)source->context.next; + } + + pthread_mutex_unlock(&obs->data.sources_mutex); + return source; +} + obs_source_t *obs_get_transition_by_name(const char *name) { struct obs_source **first = &obs->data.first_source; @@ -2203,6 +2223,7 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data, obs_data_array_t *filters = obs_data_get_array(source_data, "filters"); obs_source_t *source; const char *name = obs_data_get_string(source_data, "name"); + const char *uuid = obs_data_get_string(source_data, "uuid"); const char *id = obs_data_get_string(source_data, "id"); const char *v_id = obs_data_get_string(source_data, "versioned_id"); obs_data_t *settings = obs_data_get_obj(source_data, "settings"); @@ -2223,8 +2244,9 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data, if (!*v_id) v_id = id; - source = obs_source_create_set_last_ver(v_id, name, settings, hotkeys, - prev_ver, is_private); + source = obs_source_create_set_last_ver(v_id, name, uuid, settings, + hotkeys, prev_ver, is_private); + if (source->owns_info_id) { bfree((void *)source->info.unversioned_id); source->info.unversioned_id = bstrdup(id); @@ -2398,6 +2420,7 @@ obs_data_t *obs_save_source(obs_source_t *source) int64_t sync = obs_source_get_sync_offset(source); uint32_t flags = obs_source_get_flags(source); const char *name = obs_source_get_name(source); + const char *uuid = obs_source_get_uuid(source); const char *id = source->info.unversioned_id; const char *v_id = source->info.id; bool enabled = obs_source_enabled(source); @@ -2422,6 +2445,7 @@ obs_data_t *obs_save_source(obs_source_t *source) obs_data_set_int(source_data, "prev_ver", LIBOBS_API_VER); obs_data_set_string(source_data, "name", name); + obs_data_set_string(source_data, "uuid", uuid); obs_data_set_string(source_data, "id", id); obs_data_set_string(source_data, "versioned_id", v_id); obs_data_set_obj(source_data, "settings", settings); @@ -2528,12 +2552,11 @@ static inline char *dup_name(const char *name, bool private) } } -static inline bool obs_context_data_init_wrap(struct obs_context_data *context, - enum obs_obj_type type, - obs_data_t *settings, - const char *name, - obs_data_t *hotkey_data, - bool private) +static inline bool +obs_context_data_init_wrap(struct obs_context_data *context, + enum obs_obj_type type, obs_data_t *settings, + const char *name, const char *uuid, + obs_data_t *hotkey_data, bool private) { assert(context); memset(context, 0, sizeof(*context)); @@ -2552,6 +2575,12 @@ static inline bool obs_context_data_init_wrap(struct obs_context_data *context, if (!context->procs) return false; + if (uuid && strlen(uuid) == UUID_STR_LENGTH) + context->uuid = bstrdup(uuid); + /* Only automatically generate UUIDs for sources */ + else if (type == OBS_OBJ_TYPE_SOURCE) + context->uuid = os_generate_uuid(); + context->name = dup_name(name, private); context->settings = obs_data_newref(settings); context->hotkey_data = obs_data_newref(hotkey_data); @@ -2560,10 +2589,10 @@ static inline bool obs_context_data_init_wrap(struct obs_context_data *context, bool obs_context_data_init(struct obs_context_data *context, enum obs_obj_type type, obs_data_t *settings, - const char *name, obs_data_t *hotkey_data, - bool private) + const char *name, const char *uuid, + obs_data_t *hotkey_data, bool private) { - if (obs_context_data_init_wrap(context, type, settings, name, + if (obs_context_data_init_wrap(context, type, settings, name, uuid, hotkey_data, private)) { return true; } else { @@ -2581,6 +2610,7 @@ void obs_context_data_free(struct obs_context_data *context) obs_context_data_remove(context); pthread_mutex_destroy(&context->rename_cache_mutex); bfree(context->name); + bfree((void *)context->uuid); for (size_t i = 0; i < context->rename_cache.num; i++) bfree(context->rename_cache.array[i]); diff --git a/libobs/obs.h b/libobs/obs.h index 1e56cc38471fcf..7cba70a6997a2c 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -697,6 +697,14 @@ EXPORT void obs_enum_services(bool (*enum_proc)(void *, obs_service_t *), */ EXPORT obs_source_t *obs_get_source_by_name(const char *name); +/** + * Gets a source by its UUID. + * + * Increments the source reference counter, use obs_source_release to + * release it when complete. + */ +EXPORT obs_source_t *obs_get_source_by_uuid(const char *uuid); + /** Get a transition source by its name. */ EXPORT obs_source_t *obs_get_transition_by_name(const char *name); @@ -1115,6 +1123,9 @@ EXPORT const char *obs_source_get_name(const obs_source_t *source); /** Sets the name of a source */ EXPORT void obs_source_set_name(obs_source_t *source, const char *name); +/** Gets the UUID of a source */ +EXPORT const char *obs_source_get_uuid(const obs_source_t *source); + /** Gets the source type */ EXPORT enum obs_source_type obs_source_get_type(const obs_source_t *source); From 29db52ad27dec2e6b08998bbb869c2e5c2504772 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 26 Feb 2023 09:53:48 +0100 Subject: [PATCH 0340/2225] libobs: Save/Load source UUID in scene item data --- libobs/obs-scene.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index f5d05a367d971d..9b40860824451c 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -959,6 +959,7 @@ static void scene_load(void *data, obs_data_t *settings); static void scene_load_item(struct obs_scene *scene, obs_data_t *item_data) { const char *name = obs_data_get_string(item_data, "name"); + const char *src_uuid = obs_data_get_string(item_data, "source_uuid"); obs_source_t *source; const char *scale_filter_str; const char *blend_method_str; @@ -970,7 +971,11 @@ static void scene_load_item(struct obs_scene *scene, obs_data_t *item_data) if (obs_data_get_bool(item_data, "group_item_backup")) return; - source = obs_get_source_by_name(name); + if (src_uuid && strlen(src_uuid) == UUID_STR_LENGTH) + source = obs_get_source_by_uuid(src_uuid); + else + source = obs_get_source_by_name(name); + if (!source) { blog(LOG_WARNING, "[scene_load_item] Source %s not " @@ -1124,6 +1129,7 @@ static void scene_save_item(obs_data_array_t *array, { obs_data_t *item_data = obs_data_create(); const char *name = obs_source_get_name(item->source); + const char *src_uuid = obs_source_get_uuid(item->source); const char *scale_filter; const char *blend_method; const char *blend_type; @@ -1136,6 +1142,7 @@ static void scene_save_item(obs_data_array_t *array, } obs_data_set_string(item_data, "name", name); + obs_data_set_string(item_data, "source_uuid", src_uuid); obs_data_set_bool(item_data, "visible", item->user_visible); obs_data_set_bool(item_data, "locked", item->locked); obs_data_set_double(item_data, "rot", rot); From 1fd50a9324456c338de81b7b3ea8fd3259af3af4 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Mar 2023 20:33:23 +0100 Subject: [PATCH 0341/2225] libobs: Add obs_reset_source_uuids --- libobs/obs.c | 15 +++++++++++++++ libobs/obs.h | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/libobs/obs.c b/libobs/obs.c index 8ae0b4051bf108..849f9001f1e5d0 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -2535,6 +2535,21 @@ obs_data_array_t *obs_save_sources(void) return obs_save_sources_filtered(save_source_filter, NULL); } +void obs_reset_source_uuids() +{ + pthread_mutex_lock(&obs->data.sources_mutex); + + struct obs_source *source = obs->data.first_source; + while (source) { + bfree((void *)source->context.uuid); + source->context.uuid = os_generate_uuid(); + + source = (struct obs_source *)source->context.next; + } + + pthread_mutex_unlock(&obs->data.sources_mutex); +} + /* ensures that names are never blank */ static inline char *dup_name(const char *name, bool private) { diff --git a/libobs/obs.h b/libobs/obs.h index 7cba70a6997a2c..60db9b4fabfb51 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -798,6 +798,10 @@ typedef bool (*obs_save_source_filter_cb)(void *data, obs_source_t *source); EXPORT obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb, void *data); +/** Reset source UUIDs. NOTE: this function is only to be used by the UI and + * will be removed in a future version! */ +EXPORT void obs_reset_source_uuids(void); + enum obs_obj_type { OBS_OBJ_TYPE_INVALID, OBS_OBJ_TYPE_SOURCE, From 02225aa8bf0e693100b87de4a04b0b4437567420 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Mar 2023 20:33:36 +0100 Subject: [PATCH 0342/2225] UI: Reset UUIDs in duplicated collection --- UI/window-basic-main-scene-collections.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/UI/window-basic-main-scene-collections.cpp b/UI/window-basic-main-scene-collections.cpp index b00682c5fd720c..c3a1aaecd251ed 100644 --- a/UI/window-basic-main-scene-collections.cpp +++ b/UI/window-basic-main-scene-collections.cpp @@ -157,9 +157,13 @@ bool OBSBasic::AddSceneCollection(bool create_new, const QString &qname) "SceneCollection", name.c_str()); config_set_string(App()->GlobalConfig(), "Basic", "SceneCollectionFile", file.c_str()); + if (create_new) { CreateDefaultScene(false); + } else { + obs_reset_source_uuids(); } + SaveProjectNow(); RefreshSceneCollections(); }; From baddacc1110c2b994bf1f98e991daeae983b9709 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Mon, 13 Mar 2023 00:59:38 +0900 Subject: [PATCH 0343/2225] Revert "obs-ffmpeg: Use FFmpeg's "fast" AAC encoder by default" This reverts commit aa58b9cf5f3e030958d23b6d147439e09e49d485. FFmpeg has reverted their default AAC encoder from fast to twoloop, which has much better rate control management, making it closer to CBR, and it sounds much better. --- plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index 6b08cb58ec2767..a8347e64f178ce 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -22,7 +22,6 @@ #include #include -#include #include #include "obs-ffmpeg-formats.h" @@ -265,7 +264,6 @@ static void *enc_create(obs_data_t *settings, obs_encoder_t *encoder, } if (strcmp(enc->codec->name, "aac") == 0) { - av_opt_set(enc->context->priv_data, "aac_coder", "fast", 0); } #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 24, 100) From b31344d82ec60608e03b9648f5ff96fa486d5c9a Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 12 Mar 2023 19:55:21 +0100 Subject: [PATCH 0344/2225] updater: Fix building in Debug --- UI/win-update/updater/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/UI/win-update/updater/CMakeLists.txt b/UI/win-update/updater/CMakeLists.txt index c175f64ac91abe..54fe6f8dd05329 100644 --- a/UI/win-update/updater/CMakeLists.txt +++ b/UI/win-update/updater/CMakeLists.txt @@ -35,6 +35,7 @@ target_compile_definitions(updater PRIVATE NOMINMAX "PSAPI_VERSION=2") if(MSVC) target_compile_options(updater PRIVATE $,/MTd,/MT>) target_compile_options(updater PRIVATE "/utf-8") + target_link_options(updater PRIVATE "LINKER:/IGNORE:4098") endif() target_link_libraries(updater PRIVATE OBS::blake2 zstd::libzstd_static comctl32 From 0a36dc9d80a95c63ea54c8fc0aaa4ce1b6b28909 Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Tue, 14 Mar 2023 13:28:20 +0100 Subject: [PATCH 0345/2225] linux-pipewire: Clear cursor texture on empty bitmap If we receive an empty cursor bitmap - one without valid size - we should hide the cursor. Do so by clearing the texture. This fixes visible cursors when recording various games with Wayland compositors. Closes https://github.com/obsproject/obs-studio/issues/4895 --- plugins/linux-pipewire/pipewire.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index ada92cfe700073..d639e86df0f256 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -719,6 +719,10 @@ static void on_process_cb(void *user_data) bitmap = SPA_MEMBER(cursor, cursor->bitmap_offset, struct spa_meta_bitmap); + if (bitmap) + g_clear_pointer(&obs_pw->cursor.texture, + gs_texture_destroy); + if (bitmap && bitmap->size.width > 0 && bitmap->size.height > 0 && lookup_format_info_from_spa_format( @@ -732,8 +736,7 @@ static void on_process_cb(void *user_data) obs_pw->cursor.width = bitmap->size.width; obs_pw->cursor.height = bitmap->size.height; - g_clear_pointer(&obs_pw->cursor.texture, - gs_texture_destroy); + assert(obs_pw->cursor.texture == NULL); obs_pw->cursor.texture = gs_texture_create( obs_pw->cursor.width, obs_pw->cursor.height, gs_format, 1, &bitmap_data, GS_DYNAMIC); From 03691eb0a9d3ebd781d8390fba5566043b4414c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E4=B8=83=E4=B8=8D=E7=94=9C?= <1633557643@qq.com> Date: Thu, 16 Mar 2023 05:09:58 +0800 Subject: [PATCH 0346/2225] win-capture: Remove the redundant "-" in the CSGO launch option and Steam url language code --- plugins/win-capture/data/compatibility.json | 4 ++-- plugins/win-capture/data/locale/en-US.ini | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/win-capture/data/compatibility.json b/plugins/win-capture/data/compatibility.json index e1641976caf81f..1a13471068d1ed 100644 --- a/plugins/win-capture/data/compatibility.json +++ b/plugins/win-capture/data/compatibility.json @@ -13,8 +13,8 @@ "game_capture": true, "window_capture": false, "window_capture_wgc": false, - "message": "CS:GO may require the --allow_third_party_software launch option to use Game Capture.", - "url": "https://help.steampowered.com/en/faqs/view/09A0-4879-4353-EF95#whitelist" + "message": "CS:GO may require the -allow_third_party_software launch option to use Game Capture.", + "url": "https://help.steampowered.com/faqs/view/09A0-4879-4353-EF95#whitelist" }, { "name": "Electron", diff --git a/plugins/win-capture/data/locale/en-US.ini b/plugins/win-capture/data/locale/en-US.ini index 7197d60d59ed64..e91b57ba1baa65 100644 --- a/plugins/win-capture/data/locale/en-US.ini +++ b/plugins/win-capture/data/locale/en-US.ini @@ -47,7 +47,7 @@ Compatibility.GameCapture.WrongGPU="If the preview is blank, make sure %name% is Compatibility.WindowCapture.BitBlt="%name% may not be capturable using the selected Capture Method (BitBlt)." # Specific compatibility messages -Compatibility.Application.CSGO="CS:GO may require the --allow_third_party_software launch option to use Game Capture." +Compatibility.Application.CSGO="CS:GO may require the -allow_third_party_software launch option to use Game Capture." Compatibility.Application.ElectronGameCapture="Games built on Electron cannot be captured using Game Capture. Use Window Capture or Display Capture instead." Compatibility.Application.ElectronBitBlt="Electron-based applications may not be capturable using the selected Capture Method (BitBlt)." Compatibility.Application.Minecraft="If you're having issues capturing Minecraft: Java Edition, check our troubleshooting guide." From a870ae2fb949c33b6303fcb1d9b48baf34a2144e Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sun, 5 Mar 2023 06:38:40 -0600 Subject: [PATCH 0347/2225] UI: Remove platform string from title bar This cleans up the title bar text. --- UI/obs-app.cpp | 18 ++++++++++-------- UI/obs-app.hpp | 2 +- UI/window-basic-main.cpp | 6 +++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 860ce400aa113e..e4e504efabe27b 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -1718,7 +1718,7 @@ bool OBSApp::OBSInit() return true; } -string OBSApp::GetVersionString() const +string OBSApp::GetVersionString(bool platform) const { stringstream ver; @@ -1729,19 +1729,21 @@ string OBSApp::GetVersionString() const << LIBOBS_API_PATCH_VER; #endif - ver << " ("; + if (platform) { + ver << " ("; #ifdef _WIN32 - ver << "windows)"; + ver << "windows)"; #elif __APPLE__ - ver << "mac)"; + ver << "mac)"; #elif __OpenBSD__ - ver << "openbsd)"; + ver << "openbsd)"; #elif __FreeBSD__ - ver << "freebsd)"; + ver << "freebsd)"; #else /* assume linux for the time being */ - ver << "linux)"; + ver << "linux)"; #endif + } return ver.str(); } @@ -3339,7 +3341,7 @@ int main(int argc, char *argv[]) } else if (arg_is(argv[i], "--version", "-V")) { std::cout << "OBS Studio - " - << App()->GetVersionString() << "\n"; + << App()->GetVersionString(false) << "\n"; exit(0); } } diff --git a/UI/obs-app.hpp b/UI/obs-app.hpp index b530796e4789e1..c206ecd7e1d794 100644 --- a/UI/obs-app.hpp +++ b/UI/obs-app.hpp @@ -174,7 +174,7 @@ class OBSApp : public QApplication { const char *GetLastCrashLog() const; - std::string GetVersionString() const; + std::string GetVersionString(bool platform = true) const; bool IsPortableMode(); bool IsUpdaterDisabled(); bool IsMissingFilesCheckDisabled(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 204875e6dacc43..7de3ad2cecadaa 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -6271,8 +6271,8 @@ void OBSBasic::UploadLog(const char *subdir, const char *file, const bool crash) #endif stringstream ss; - ss << "OBS " << App()->GetVersionString() << " log file uploaded at " - << CurrentDateTimeString() << "\n\n" + ss << "OBS " << App()->GetVersionString(false) + << " log file uploaded at " << CurrentDateTimeString() << "\n\n" << fileString; if (logUploadThread) { @@ -9011,7 +9011,7 @@ void OBSBasic::UpdateTitleBar() if (previewProgramMode) name << "Studio "; - name << App()->GetVersionString(); + name << App()->GetVersionString(false); if (App()->IsPortableMode()) name << " - Portable Mode"; From 63e3e0acd06201d67700ad33d01883cbdd3f768f Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 21 Oct 2022 16:35:56 +0200 Subject: [PATCH 0348/2225] UI: Refactor main docks toggle action Use the QAction provided by QDockWidget with new Qt connection rather than creating a new one for each dock. --- UI/forms/OBSBasic.ui | 72 ---------------------------------------- UI/window-basic-main.cpp | 60 ++++++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 88 deletions(-) diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui index ed0d09cf252508..d3b35fccd64513 100644 --- a/UI/forms/OBSBasic.ui +++ b/UI/forms/OBSBasic.ui @@ -713,12 +713,6 @@ - - - - - - @@ -2187,61 +2181,6 @@ Basic.MainMenu.Docks.LockDocks - - - true - - - true - - - Basic.Main.Scenes - - - - - true - - - true - - - Basic.Main.Sources - - - - - true - - - true - - - Mixer - - - - - true - - - true - - - Basic.SceneTransitions - - - - - true - - - true - - - Basic.Main.Controls - - Basic.MainMenu.Help.HelpPortal @@ -2262,17 +2201,6 @@ Basic.MainMenu.Help.Discord - - - true - - - true - - - Basic.Stats - - Basic.MainMenu.Help.About diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 7de3ad2cecadaa..9304b6a3feeec9 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -251,6 +251,32 @@ void assignDockToggle(QDockWidget *dock, QAction *action) dock->connect(action, &QAction::toggled, handleMenuToggle); } +void setupDockAction(QDockWidget *dock) +{ + QAction *action = dock->toggleViewAction(); + + auto neverDisable = [action]() { + QSignalBlocker block(action); + action->setEnabled(true); + }; + + auto newToggleView = [dock](bool check) { + QSignalBlocker block(dock); + dock->setVisible(check); + }; + + // Replace the slot connected by default + action->disconnect(SIGNAL(triggered(bool))); + dock->connect(action, &QAction::triggered, newToggleView); + + // Make the action unable to be disabled +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + action->connect(action, &QAction::changed, neverDisable); +#else + action->connect(action, &QAction::enabledChanged, neverDisable); +#endif +} + extern void RegisterTwitchAuth(); extern void RegisterRestreamAuth(); #if YOUTUBE_ENABLED @@ -423,12 +449,20 @@ OBSBasic::OBSBasic(QWidget *parent) addNudge(Qt::SHIFT | Qt::Key_Left, MoveDir::Left, 10); addNudge(Qt::SHIFT | Qt::Key_Right, MoveDir::Right, 10); - assignDockToggle(ui->scenesDock, ui->toggleScenes); - assignDockToggle(ui->sourcesDock, ui->toggleSources); - assignDockToggle(ui->mixerDock, ui->toggleMixer); - assignDockToggle(ui->transitionsDock, ui->toggleTransitions); - assignDockToggle(ui->controlsDock, ui->toggleControls); - assignDockToggle(statsDock, ui->toggleStats); + /* Setup dock toggle action + * And hide all docks before restoring parent geometry */ +#define SETUP_DOCK(dock) \ + setupDockAction(dock); \ + ui->menuDocks->addAction(dock->toggleViewAction()); \ + dock->setVisible(false); + + SETUP_DOCK(ui->scenesDock); + SETUP_DOCK(ui->sourcesDock); + SETUP_DOCK(ui->mixerDock); + SETUP_DOCK(ui->transitionsDock); + SETUP_DOCK(ui->controlsDock); + SETUP_DOCK(statsDock); +#undef SETUP_DOCK // Register shortcuts for Undo/Redo ui->actionMainUndo->setShortcut(Qt::CTRL | Qt::Key_Z); @@ -440,14 +474,6 @@ OBSBasic::OBSBasic(QWidget *parent) ui->actionMainUndo->setShortcutContext(Qt::ApplicationShortcut); ui->actionMainRedo->setShortcutContext(Qt::ApplicationShortcut); - //hide all docking panes - ui->toggleScenes->setChecked(false); - ui->toggleSources->setChecked(false); - ui->toggleMixer->setChecked(false); - ui->toggleTransitions->setChecked(false); - ui->toggleControls->setChecked(false); - ui->toggleStats->setChecked(false); - QPoint curPos; //restore parent window geometry @@ -2015,10 +2041,12 @@ void OBSBasic::OBSInit() QAction *action = new QAction(QTStr("Basic.MainMenu.Docks." "CustomBrowserDocks"), this); - ui->menuDocks->insertAction(ui->toggleScenes, action); + ui->menuDocks->insertAction(ui->scenesDock->toggleViewAction(), + action); connect(action, &QAction::triggered, this, &OBSBasic::ManageExtraBrowserDocks); - ui->menuDocks->insertSeparator(ui->toggleScenes); + ui->menuDocks->insertSeparator( + ui->scenesDock->toggleViewAction()); LoadExtraBrowserDocks(); } From e6873d32786305c9d508acdceddb1407e0423e7e Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 21 Oct 2022 16:53:06 +0200 Subject: [PATCH 0349/2225] UI: Refactor integration and browser docks Use the QAction provided by QDockWidget with new Qt connection rather than creating a new one for each dock. Separate extra browser docks from extra docks, the latter is meant for plugin/integration docks. --- UI/auth-restream.cpp | 43 ++++++++---- UI/auth-restream.hpp | 9 +-- UI/auth-twitch.cpp | 76 +++++++++++--------- UI/auth-twitch.hpp | 9 +-- UI/auth-youtube.cpp | 24 +++++-- UI/auth-youtube.hpp | 4 +- UI/window-basic-main.cpp | 131 +++++++++++++++++++++++++++++------ UI/window-basic-main.hpp | 11 ++- UI/window-extra-browsers.cpp | 23 ++---- 9 files changed, 222 insertions(+), 108 deletions(-) diff --git a/UI/auth-restream.cpp b/UI/auth-restream.cpp index 689ea14e84297e..ed4d39c88264c6 100644 --- a/UI/auth-restream.cpp +++ b/UI/auth-restream.cpp @@ -24,12 +24,28 @@ using namespace json11; #define RESTREAM_STREAMKEY_URL "https://api.restream.io/v2/user/streamKey" #define RESTREAM_SCOPE_VERSION 1 +#define RESTREAM_CHAT_DOCK_NAME "restreamChat" +#define RESTREAM_INFO_DOCK_NAME "restreamInfo" +#define RESTREAM_CHANNELS_DOCK_NAME "restreamChannel" + static Auth::Def restreamDef = {"Restream", Auth::Type::OAuth_StreamKey}; /* ------------------------------------------------------------------------- */ RestreamAuth::RestreamAuth(const Def &d) : OAuthStreamKey(d) {} +RestreamAuth::~RestreamAuth() +{ + if (!uiLoaded) + return; + + OBSBasic *main = OBSBasic::Get(); + + main->RemoveDockWidget(RESTREAM_CHAT_DOCK_NAME); + main->RemoveDockWidget(RESTREAM_INFO_DOCK_NAME); + main->RemoveDockWidget(RESTREAM_CHANNELS_DOCK_NAME); +} + bool RestreamAuth::GetChannelInfo() try { std::string client_id = RESTREAM_CLIENTID; @@ -134,52 +150,49 @@ void RestreamAuth::LoadUI() QSize size = main->frameSize(); QPoint pos = main->pos(); - chat.reset(new BrowserDock()); - chat->setObjectName("restreamChat"); + BrowserDock *chat = new BrowserDock(); + chat->setObjectName(RESTREAM_CHAT_DOCK_NAME); chat->resize(420, 600); chat->setMinimumSize(200, 300); chat->setWindowTitle(QTStr("Auth.Chat")); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat.data(), url, panel_cookies); + browser = cef->create_widget(chat, url, panel_cookies); chat->SetWidget(browser); - main->addDockWidget(Qt::RightDockWidgetArea, chat.data()); - chatMenu.reset(main->AddDockWidget(chat.data())); + main->AddDockWidget(chat, Qt::RightDockWidgetArea); /* ----------------------------------- */ url = "https://restream.io/titles/embed"; - info.reset(new BrowserDock()); - info->setObjectName("restreamInfo"); + BrowserDock *info = new BrowserDock(); + info->setObjectName(RESTREAM_INFO_DOCK_NAME); info->resize(410, 600); info->setMinimumSize(200, 150); info->setWindowTitle(QTStr("Auth.StreamInfo")); info->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(info.data(), url, panel_cookies); + browser = cef->create_widget(info, url, panel_cookies); info->SetWidget(browser); - main->addDockWidget(Qt::LeftDockWidgetArea, info.data()); - infoMenu.reset(main->AddDockWidget(info.data())); + main->AddDockWidget(info, Qt::LeftDockWidgetArea); /* ----------------------------------- */ url = "https://restream.io/channel/embed"; - channels.reset(new BrowserDock()); - channels->setObjectName("restreamChannel"); + BrowserDock *channels = new BrowserDock(); + channels->setObjectName(RESTREAM_CHANNELS_DOCK_NAME); channels->resize(410, 600); channels->setMinimumSize(410, 300); channels->setWindowTitle(QTStr("RestreamAuth.Channels")); channels->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(channels.data(), url, panel_cookies); + browser = cef->create_widget(channels, url, panel_cookies); channels->SetWidget(browser); - main->addDockWidget(Qt::LeftDockWidgetArea, channels.data()); - channelMenu.reset(main->AddDockWidget(channels.data())); + main->AddDockWidget(channels, Qt::LeftDockWidgetArea); /* ----------------------------------- */ diff --git a/UI/auth-restream.hpp b/UI/auth-restream.hpp index 6216e741016f29..334906c42f7a5e 100644 --- a/UI/auth-restream.hpp +++ b/UI/auth-restream.hpp @@ -7,14 +7,6 @@ class BrowserDock; class RestreamAuth : public OAuthStreamKey { Q_OBJECT - QSharedPointer chat; - QSharedPointer info; - QSharedPointer channels; - - QSharedPointer chatMenu; - QSharedPointer infoMenu; - QSharedPointer channelMenu; - bool uiLoaded = false; virtual bool RetryLogin() override; @@ -28,6 +20,7 @@ class RestreamAuth : public OAuthStreamKey { public: RestreamAuth(const Def &d); + ~RestreamAuth(); static std::shared_ptr Login(QWidget *parent, const std::string &service_name); diff --git a/UI/auth-twitch.cpp b/UI/auth-twitch.cpp index c01eb6e4ea0f5e..034c3d82bd8251 100644 --- a/UI/auth-twitch.cpp +++ b/UI/auth-twitch.cpp @@ -27,6 +27,11 @@ using namespace json11; #define TWITCH_SCOPE_VERSION 1 +#define TWITCH_CHAT_DOCK_NAME "twitchChat" +#define TWITCH_INFO_DOCK_NAME "twitchInfo" +#define TWITCH_STATS_DOCK_NAME "twitchStats" +#define TWITCH_FEED_DOCK_NAME "twitchFeed" + static Auth::Def twitchDef = {"Twitch", Auth::Type::OAuth_StreamKey}; /* ------------------------------------------------------------------------- */ @@ -49,6 +54,19 @@ TwitchAuth::TwitchAuth(const Def &d) : OAuthStreamKey(d) &TwitchAuth::TryLoadSecondaryUIPanes); } +TwitchAuth::~TwitchAuth() +{ + if (!uiLoaded) + return; + + OBSBasic *main = OBSBasic::Get(); + + main->RemoveDockWidget(TWITCH_CHAT_DOCK_NAME); + main->RemoveDockWidget(TWITCH_INFO_DOCK_NAME); + main->RemoveDockWidget(TWITCH_STATS_DOCK_NAME); + main->RemoveDockWidget(TWITCH_FEED_DOCK_NAME); +} + bool TwitchAuth::MakeApiRequest(const char *path, Json &json_out) { std::string client_id = TWITCH_CLIENTID; @@ -233,16 +251,16 @@ void TwitchAuth::LoadUI() QSize size = main->frameSize(); QPoint pos = main->pos(); - chat.reset(new BrowserDock()); - chat->setObjectName("twitchChat"); + BrowserDock *chat = new BrowserDock(); + chat->setObjectName(TWITCH_CHAT_DOCK_NAME); chat->resize(300, 600); chat->setMinimumSize(200, 300); chat->setWindowTitle(QTStr("Auth.Chat")); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat.data(), url, panel_cookies); + browser = cef->create_widget(chat, url, panel_cookies); chat->SetWidget(browser); - cef->add_force_popup_url(moderation_tools_url, chat.data()); + cef->add_force_popup_url(moderation_tools_url, chat); if (App()->IsThemeDark()) { script = "localStorage.setItem('twilight.theme', 1);"; @@ -261,8 +279,7 @@ void TwitchAuth::LoadUI() browser->setStartupScript(script); - main->addDockWidget(Qt::RightDockWidgetArea, chat.data()); - chatMenu.reset(main->AddDockWidget(chat.data())); + main->AddDockWidget(chat, Qt::RightDockWidgetArea); /* ----------------------------------- */ @@ -323,19 +340,18 @@ void TwitchAuth::LoadSecondaryUIPanes() url += name; url += "/stream-manager/edit-stream-info"; - info.reset(new BrowserDock()); - info->setObjectName("twitchInfo"); + BrowserDock *info = new BrowserDock(); + info->setObjectName(TWITCH_INFO_DOCK_NAME); info->resize(300, 650); info->setMinimumSize(200, 300); info->setWindowTitle(QTStr("Auth.StreamInfo")); info->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(info.data(), url, panel_cookies); + browser = cef->create_widget(info, url, panel_cookies); info->SetWidget(browser); browser->setStartupScript(script); - main->addDockWidget(Qt::RightDockWidgetArea, info.data()); - infoMenu.reset(main->AddDockWidget(info.data())); + main->AddDockWidget(info, Qt::RightDockWidgetArea); /* ----------------------------------- */ @@ -343,19 +359,18 @@ void TwitchAuth::LoadSecondaryUIPanes() url += name; url += "/dashboard/live/stats"; - stat.reset(new BrowserDock()); - stat->setObjectName("twitchStats"); - stat->resize(200, 250); - stat->setMinimumSize(200, 150); - stat->setWindowTitle(QTStr("TwitchAuth.Stats")); - stat->setAllowedAreas(Qt::AllDockWidgetAreas); + BrowserDock *stats = new BrowserDock(); + stats->setObjectName(TWITCH_STATS_DOCK_NAME); + stats->resize(200, 250); + stats->setMinimumSize(200, 150); + stats->setWindowTitle(QTStr("TwitchAuth.Stats")); + stats->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(stat.data(), url, panel_cookies); - stat->SetWidget(browser); + browser = cef->create_widget(stats, url, panel_cookies); + stats->SetWidget(browser); browser->setStartupScript(script); - main->addDockWidget(Qt::RightDockWidgetArea, stat.data()); - statMenu.reset(main->AddDockWidget(stat.data())); + main->AddDockWidget(stats, Qt::RightDockWidgetArea); /* ----------------------------------- */ @@ -364,36 +379,35 @@ void TwitchAuth::LoadSecondaryUIPanes() url += "/stream-manager/activity-feed"; url += "?uuid=" + uuid; - feed.reset(new BrowserDock()); - feed->setObjectName("twitchFeed"); + BrowserDock *feed = new BrowserDock(); + feed->setObjectName(TWITCH_FEED_DOCK_NAME); feed->resize(300, 650); feed->setMinimumSize(200, 300); feed->setWindowTitle(QTStr("TwitchAuth.Feed")); feed->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(feed.data(), url, panel_cookies); + browser = cef->create_widget(feed, url, panel_cookies); feed->SetWidget(browser); browser->setStartupScript(script); - main->addDockWidget(Qt::RightDockWidgetArea, feed.data()); - feedMenu.reset(main->AddDockWidget(feed.data())); + main->AddDockWidget(feed, Qt::RightDockWidgetArea); /* ----------------------------------- */ info->setFloating(true); - stat->setFloating(true); + stats->setFloating(true); feed->setFloating(true); - QSize statSize = stat->frameSize(); + QSize statSize = stats->frameSize(); info->move(pos.x() + 50, pos.y() + 50); - stat->move(pos.x() + size.width() / 2 - statSize.width() / 2, - pos.y() + size.height() / 2 - statSize.height() / 2); + stats->move(pos.x() + size.width() / 2 - statSize.width() / 2, + pos.y() + size.height() / 2 - statSize.height() / 2); feed->move(pos.x() + 100, pos.y() + 100); if (firstLoad) { info->setVisible(true); - stat->setVisible(false); + stats->setVisible(false); feed->setVisible(false); } else { uint32_t lastVersion = config_get_int(App()->GlobalConfig(), diff --git a/UI/auth-twitch.hpp b/UI/auth-twitch.hpp index add9ce57a94e86..152b2a95730fd7 100644 --- a/UI/auth-twitch.hpp +++ b/UI/auth-twitch.hpp @@ -15,14 +15,6 @@ class TwitchAuth : public OAuthStreamKey { friend class TwitchLogin; - QSharedPointer chat; - QSharedPointer info; - QSharedPointer stat; - QSharedPointer feed; - QSharedPointer chatMenu; - QSharedPointer infoMenu; - QSharedPointer statMenu; - QSharedPointer feedMenu; bool uiLoaded = false; std::string name; @@ -40,6 +32,7 @@ class TwitchAuth : public OAuthStreamKey { public: TwitchAuth(const Def &d); + ~TwitchAuth(); static std::shared_ptr Login(QWidget *parent, const std::string &service_name); diff --git a/UI/auth-youtube.cpp b/UI/auth-youtube.cpp index f2ee5e42b81e30..7783fa62d4884a 100644 --- a/UI/auth-youtube.cpp +++ b/UI/auth-youtube.cpp @@ -42,6 +42,8 @@ using namespace json11; #define YOUTUBE_CHAT_POPOUT_URL \ "https://www.youtube.com/live_chat?is_popout=1&dark_theme=1&v=%1" +#define YOUTUBE_CHAT_DOCK_NAME "ytChat" + static const char allowedChars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; static const int allowedCount = static_cast(sizeof(allowedChars) - 1); @@ -71,6 +73,19 @@ YoutubeAuth::YoutubeAuth(const Def &d) { } +YoutubeAuth::~YoutubeAuth() +{ + if (!uiLoaded) + return; + +#ifdef BROWSER_AVAILABLE + OBSBasic *main = OBSBasic::Get(); + + main->RemoveDockWidget(YOUTUBE_CHAT_DOCK_NAME); + chat = nullptr; +#endif +} + bool YoutubeAuth::RetryLogin() { return true; @@ -139,20 +154,19 @@ void YoutubeAuth::LoadUI() QSize size = main->frameSize(); QPoint pos = main->pos(); - chat.reset(new YoutubeChatDock()); - chat->setObjectName("ytChat"); + chat = new YoutubeChatDock(); + chat->setObjectName(YOUTUBE_CHAT_DOCK_NAME); chat->resize(300, 600); chat->setMinimumSize(200, 300); chat->setWindowTitle(QTStr("Auth.Chat")); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat.data(), YOUTUBE_CHAT_PLACEHOLDER_URL, + browser = cef->create_widget(chat, YOUTUBE_CHAT_PLACEHOLDER_URL, panel_cookies); browser->setStartupScript(ytchat_script); chat->SetWidget(browser); - main->addDockWidget(Qt::RightDockWidgetArea, chat.data()); - chatMenu.reset(main->AddDockWidget(chat.data())); + main->AddDockWidget(chat, Qt::RightDockWidgetArea); chat->setFloating(true); chat->move(pos.x() + size.width() - chat->width() - 50, pos.y() + 50); diff --git a/UI/auth-youtube.hpp b/UI/auth-youtube.hpp index f1937dbeb0b8e8..ffe35c25c39c09 100644 --- a/UI/auth-youtube.hpp +++ b/UI/auth-youtube.hpp @@ -43,8 +43,7 @@ class YoutubeAuth : public OAuthStreamKey { std::string section; #ifdef BROWSER_AVAILABLE - QSharedPointer chat; - QSharedPointer chatMenu; + YoutubeChatDock *chat; #endif virtual bool RetryLogin() override; @@ -56,6 +55,7 @@ class YoutubeAuth : public OAuthStreamKey { public: YoutubeAuth(const Def &d); + ~YoutubeAuth(); void SetChatId(const QString &chat_id, const std::string &api_chat_id); void ResetChat(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 9304b6a3feeec9..280309652b48f7 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -9076,13 +9076,19 @@ int OBSBasic::GetProfilePath(char *path, size_t size, const char *file) const void OBSBasic::on_resetDocks_triggered(bool force) { /* prune deleted extra docks */ - for (int i = extraDocks.size() - 1; i >= 0; i--) { - if (!extraDocks[i]) { - extraDocks.removeAt(i); + for (int i = oldExtraDocks.size() - 1; i >= 0; i--) { + if (!oldExtraDocks[i]) { + oldExtraDocks.removeAt(i); } } - if (extraDocks.size() && !force) { +#ifdef BROWSER_AVAILABLE + if ((oldExtraDocks.size() || extraDocks.size() || + extraBrowserDocks.size()) && + !force) { +#else + if ((oldExtraDocks.size() || extraDocks.size()) && !force) { +#endif QMessageBox::StandardButton button = QMessageBox::question( this, QTStr("ResetUIWarning.Title"), QTStr("ResetUIWarning.Text")); @@ -9092,17 +9098,33 @@ void OBSBasic::on_resetDocks_triggered(bool force) } /* undock/hide/center extra docks */ - for (int i = extraDocks.size() - 1; i >= 0; i--) { - if (extraDocks[i]) { - extraDocks[i]->setVisible(true); - extraDocks[i]->setFloating(true); - extraDocks[i]->move(frameGeometry().topLeft() + - rect().center() - - extraDocks[i]->rect().center()); - extraDocks[i]->setVisible(false); + for (int i = oldExtraDocks.size() - 1; i >= 0; i--) { + if (oldExtraDocks[i]) { + oldExtraDocks[i]->setVisible(true); + oldExtraDocks[i]->setFloating(true); + oldExtraDocks[i]->move( + frameGeometry().topLeft() + rect().center() - + oldExtraDocks[i]->rect().center()); + oldExtraDocks[i]->setVisible(false); } } +#define RESET_DOCKLIST(dockList) \ + for (int i = dockList.size() - 1; i >= 0; i--) { \ + dockList[i]->setVisible(true); \ + dockList[i]->setFloating(true); \ + dockList[i]->move(frameGeometry().topLeft() + \ + rect().center() - \ + dockList[i]->rect().center()); \ + dockList[i]->setVisible(false); \ + } + + RESET_DOCKLIST(extraDocks) +#ifdef BROWSER_AVAILABLE + RESET_DOCKLIST(extraBrowserDocks) +#endif +#undef RESET_DOCKLIST + restoreState(startingDockLayout); int cx = width(); @@ -9154,11 +9176,19 @@ void OBSBasic::on_lockDocks_toggled(bool lock) ui->controlsDock->setFeatures(mainFeatures); statsDock->setFeatures(features); - for (int i = extraDocks.size() - 1; i >= 0; i--) { - if (!extraDocks[i]) { - extraDocks.removeAt(i); + for (int i = extraDocks.size() - 1; i >= 0; i--) + extraDocks[i]->setFeatures(features); + +#ifdef BROWSER_AVAILABLE + for (int i = extraBrowserDocks.size() - 1; i >= 0; i--) + extraBrowserDocks[i]->setFeatures(features); +#endif + + for (int i = oldExtraDocks.size() - 1; i >= 0; i--) { + if (!oldExtraDocks[i]) { + oldExtraDocks.removeAt(i); } else { - extraDocks[i]->setFeatures(features); + oldExtraDocks[i]->setFeatures(features); } } } @@ -9947,11 +9977,20 @@ void OBSBasic::ResizeOutputSizeOfSource() QAction *OBSBasic::AddDockWidget(QDockWidget *dock) { +#ifdef BROWSER_AVAILABLE + QAction *action = new QAction(dock->windowTitle(), ui->menuDocks); + + if (!extraBrowserMenuDocksSeparator.isNull()) + ui->menuDocks->insertAction(extraBrowserMenuDocksSeparator, + action); + else + ui->menuDocks->addAction(action); +#else QAction *action = ui->menuDocks->addAction(dock->windowTitle()); - action->setProperty("uuid", dock->property("uuid").toString()); +#endif action->setCheckable(true); assignDockToggle(dock, action); - extraDocks.push_back(dock); + oldExtraDocks.push_back(dock); bool lock = ui->lockDocks->isChecked(); QDockWidget::DockWidgetFeatures features = @@ -9963,15 +10002,65 @@ QAction *OBSBasic::AddDockWidget(QDockWidget *dock) dock->setFeatures(features); /* prune deleted docks */ - for (int i = extraDocks.size() - 1; i >= 0; i--) { - if (!extraDocks[i]) { - extraDocks.removeAt(i); + for (int i = oldExtraDocks.size() - 1; i >= 0; i--) { + if (!oldExtraDocks[i]) { + oldExtraDocks.removeAt(i); } } return action; } +void OBSBasic::AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area, + bool extraBrowser) +{ + if (dock->objectName().isEmpty()) + return; + + bool lock = ui->lockDocks->isChecked(); + QDockWidget::DockWidgetFeatures features = + lock ? QDockWidget::NoDockWidgetFeatures + : (QDockWidget::DockWidgetClosable | + QDockWidget::DockWidgetMovable | + QDockWidget::DockWidgetFloatable); + + setupDockAction(dock); + dock->setFeatures(features); + addDockWidget(area, dock); + +#ifdef BROWSER_AVAILABLE + if (extraBrowser && extraBrowserMenuDocksSeparator.isNull()) + extraBrowserMenuDocksSeparator = ui->menuDocks->addSeparator(); + + if (!extraBrowser && !extraBrowserMenuDocksSeparator.isNull()) + ui->menuDocks->insertAction(extraBrowserMenuDocksSeparator, + dock->toggleViewAction()); + else + ui->menuDocks->addAction(dock->toggleViewAction()); + + if (extraBrowser) + return; +#else + UNUSED_PARAMETER(extraBrowser); + + ui->menuDocks->addAction(dock->toggleViewAction()); +#endif + + extraDockNames.push_back(dock->objectName()); + extraDocks.push_back(QSharedPointer(dock)); +} + +void OBSBasic::RemoveDockWidget(const QString &name) +{ + if (!extraDockNames.contains(name)) + return; + + int idx = extraDockNames.indexOf(name); + extraDockNames.removeAt(idx); + extraDocks[idx].clear(); + extraDocks.removeAt(idx); +} + OBSBasic *OBSBasic::Get() { return reinterpret_cast(App()->GetMainWindow()); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 31e01bb3e3be80..ddbf803ef257c6 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -228,7 +228,7 @@ class OBSBasic : public OBSMainWindow { std::vector signalHandlers; - QList> extraDocks; + QList> oldExtraDocks; bool loaded = false; long disableSaving = 1; @@ -551,9 +551,13 @@ class OBSBasic : public OBSMainWindow { void UpdatePreviewProgramIndicators(); + QStringList extraDockNames; + QList> extraDocks; + #ifdef BROWSER_AVAILABLE + QPointer extraBrowserMenuDocksSeparator; + QList> extraBrowserDocks; - QList> extraBrowserDockActions; QStringList extraBrowserDockTargets; void ClearExtraBrowserDocks(); @@ -957,6 +961,9 @@ private slots: void CreateEditTransformWindow(obs_sceneitem_t *item); QAction *AddDockWidget(QDockWidget *dock); + void AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area, + bool extraBrowser = false); + void RemoveDockWidget(const QString &name); static OBSBasic *Get(); diff --git a/UI/window-extra-browsers.cpp b/UI/window-extra-browsers.cpp index 21e16a398e787d..a53f66106eda8e 100644 --- a/UI/window-extra-browsers.cpp +++ b/UI/window-extra-browsers.cpp @@ -179,7 +179,6 @@ void ExtraBrowsersModel::UpdateItem(Item &item) main->extraBrowserDocks[idx].data()); dock->setWindowTitle(item.title); dock->setObjectName(item.title + OBJ_NAME_SUFFIX); - main->extraBrowserDockActions[idx]->setText(item.title); if (main->extraBrowserDockTargets[idx] != item.url) { dock->cefWidget->setURL(QT_TO_UTF8(item.url)); @@ -234,11 +233,13 @@ void ExtraBrowsersModel::Apply() for (int i = deleted.size() - 1; i >= 0; i--) { int idx = deleted[i]; - main->extraBrowserDockActions.removeAt(idx); main->extraBrowserDockTargets.removeAt(idx); main->extraBrowserDocks.removeAt(idx); } + if (main->extraBrowserDocks.empty()) + main->extraBrowserMenuDocksSeparator.clear(); + deleted.clear(); Reset(); @@ -459,7 +460,6 @@ void OBSExtraBrowsers::on_apply_clicked() void OBSBasic::ClearExtraBrowserDocks() { extraBrowserDockTargets.clear(); - extraBrowserDockActions.clear(); extraBrowserDocks.clear(); } @@ -475,7 +475,7 @@ void OBSBasic::LoadExtraBrowserDocks() Json::array array = json.array_items(); if (!array.empty()) - ui->menuDocks->addSeparator(); + extraBrowserMenuDocksSeparator = ui->menuDocks->addSeparator(); for (Json &item : array) { std::string title = item["title"].string_value(); @@ -562,7 +562,9 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, } } - addDockWidget(Qt::RightDockWidgetArea, dock); + AddDockWidget(dock, Qt::RightDockWidgetArea, true); + extraBrowserDocks.push_back(QSharedPointer(dock)); + extraBrowserDockTargets.push_back(url); if (firstCreate) { dock->setFloating(true); @@ -577,15 +579,4 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, dock->move(curPos); dock->setVisible(true); } - - QAction *action = AddDockWidget(dock); - if (firstCreate) { - action->blockSignals(true); - action->setChecked(true); - action->blockSignals(false); - } - - extraBrowserDocks.push_back(QSharedPointer(dock)); - extraBrowserDockActions.push_back(QSharedPointer(action)); - extraBrowserDockTargets.push_back(url); } From 9bde0afc74f41aa4c7987c98f83b533d1efd0b72 Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Thu, 16 Mar 2023 17:49:49 -0700 Subject: [PATCH 0350/2225] linux-pipewire: Report modifiers in hex Use hex for modifiers because they are generally formed from a high byte and low bytes. This makes it easier to see these bytes and identify unusual modifiers. --- plugins/linux-pipewire/pipewire.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index d639e86df0f256..c11fa33e940498 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -794,7 +794,7 @@ static void on_param_changed_cb(void *user_data, uint32_t id, obs_pw->format.info.raw.format)); if (has_modifier) { - blog(LOG_INFO, "[pipewire] Modifier: %" PRIu64, + blog(LOG_INFO, "[pipewire] Modifier: 0x%" PRIx64, obs_pw->format.info.raw.modifier); } From 619edf5e7d46eea314c3d5194eeaed7bee5635d1 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 31 Mar 2022 17:34:17 -0700 Subject: [PATCH 0351/2225] libobs: Add pointer to obs_data_item name Rather than have to look up the string each time, just add a pointer to the string. Still all stored in the same memory though. --- libobs/obs-data.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libobs/obs-data.c b/libobs/obs-data.c index c6a03e08105324..f277151c41c570 100644 --- a/libobs/obs-data.c +++ b/libobs/obs-data.c @@ -30,6 +30,7 @@ struct obs_data_item { volatile long ref; + const char *name; struct obs_data *parent; struct obs_data_item *next; enum obs_data_type type; @@ -295,7 +296,10 @@ static struct obs_data_item *obs_data_item_create(const char *name, item->data_size = size; } - strcpy(get_item_name(item), name); + char *name_ptr = get_item_name(item); + item->name = name_ptr; + + strcpy(name_ptr, name); memcpy(get_item_data(item), data, size); item_data_addref(item); @@ -354,6 +358,7 @@ obs_data_item_ensure_capacity(struct obs_data_item *item) new_item = brealloc(item, new_size); new_item->capacity = new_size; + new_item->name = get_item_name(new_item); obs_data_item_reattach(item, new_item); return new_item; @@ -1671,7 +1676,7 @@ const char *obs_data_item_get_name(obs_data_item_t *item) if (!item) return NULL; - return get_item_name(item); + return item->name; } void obs_data_item_set_string(obs_data_item_t **item, const char *val) From d0554e25c18120229a7cf47019b9e42b31fbe380 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 8 Feb 2023 12:05:03 +0100 Subject: [PATCH 0352/2225] deps: Add uthash --- deps/CMakeLists.txt | 1 + deps/uthash/.clang-format | 3 + deps/uthash/CMakeLists.txt | 7 + deps/uthash/uthash/LICENSE | 21 + deps/uthash/uthash/uthash.h | 1136 +++++++++++++++++++++++++++++++++++ 5 files changed, 1168 insertions(+) create mode 100644 deps/uthash/.clang-format create mode 100644 deps/uthash/CMakeLists.txt create mode 100644 deps/uthash/uthash/LICENSE create mode 100644 deps/uthash/uthash/uthash.h diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index f8a741046b9885..90ceeb6be20fa4 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -12,6 +12,7 @@ add_subdirectory(file-updater) add_subdirectory(obs-scripting) add_subdirectory(opts-parser) add_subdirectory(libcaption) +add_subdirectory(uthash) # Use bundled jansson version as fallback find_package(Jansson 2.5 QUIET) diff --git a/deps/uthash/.clang-format b/deps/uthash/.clang-format new file mode 100644 index 00000000000000..6420a46881e054 --- /dev/null +++ b/deps/uthash/.clang-format @@ -0,0 +1,3 @@ +Language: Cpp +SortIncludes: false +DisableFormat: true diff --git a/deps/uthash/CMakeLists.txt b/deps/uthash/CMakeLists.txt new file mode 100644 index 00000000000000..7817c7433f9b47 --- /dev/null +++ b/deps/uthash/CMakeLists.txt @@ -0,0 +1,7 @@ +project(uthash) + +add_library(uthash INTERFACE) +add_library(OBS::uthash ALIAS uthash) +set_target_properties(uthash PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${CMAKE_CURRENT_SOURCE_DIR}") +set_target_properties(uthash PROPERTIES FOLDER "deps") diff --git a/deps/uthash/uthash/LICENSE b/deps/uthash/uthash/LICENSE new file mode 100644 index 00000000000000..e75a243af9b994 --- /dev/null +++ b/deps/uthash/uthash/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2005-2021, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/deps/uthash/uthash/uthash.h b/deps/uthash/uthash/uthash.h new file mode 100644 index 00000000000000..ac78fdab5a4f53 --- /dev/null +++ b/deps/uthash/uthash/uthash.h @@ -0,0 +1,1136 @@ +/* +Copyright (c) 2003-2021, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef UTHASH_H +#define UTHASH_H + +#define UTHASH_VERSION 2.3.0 + +#include /* memcmp, memset, strlen */ +#include /* ptrdiff_t */ +#include /* exit */ + +#if defined(HASH_DEFINE_OWN_STDINT) && HASH_DEFINE_OWN_STDINT +/* This codepath is provided for backward compatibility, but I plan to remove it. */ +#warning "HASH_DEFINE_OWN_STDINT is deprecated; please use HASH_NO_STDINT instead" +typedef unsigned int uint32_t; +typedef unsigned char uint8_t; +#elif defined(HASH_NO_STDINT) && HASH_NO_STDINT +#else +#include /* uint8_t, uint32_t */ +#endif + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ source) this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#if !defined(DECLTYPE) && !defined(NO_DECLTYPE) +#if defined(_MSC_VER) /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define DECLTYPE(x) (decltype(x)) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#endif +#elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__) +#define NO_DECLTYPE +#else /* GNU, Sun and other compilers */ +#define DECLTYPE(x) (__typeof(x)) +#endif +#endif + +#ifdef NO_DECLTYPE +#define DECLTYPE(x) +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + char **_da_dst = (char**)(&(dst)); \ + *_da_dst = (char*)(src); \ +} while (0) +#else +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + (dst) = DECLTYPE(dst)(src); \ +} while (0) +#endif + +#ifndef uthash_malloc +#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#endif +#ifndef uthash_free +#define uthash_free(ptr,sz) free(ptr) /* free fcn */ +#endif +#ifndef uthash_bzero +#define uthash_bzero(a,n) memset(a,'\0',n) +#endif +#ifndef uthash_strlen +#define uthash_strlen(s) strlen(s) +#endif + +#ifndef HASH_FUNCTION +#define HASH_FUNCTION(keyptr,keylen,hashv) HASH_JEN(keyptr, keylen, hashv) +#endif + +#ifndef HASH_KEYCMP +#define HASH_KEYCMP(a,b,n) memcmp(a,b,n) +#endif + +#ifndef uthash_noexpand_fyi +#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ +#endif +#ifndef uthash_expand_fyi +#define uthash_expand_fyi(tbl) /* can be defined to log expands */ +#endif + +#ifndef HASH_NONFATAL_OOM +#define HASH_NONFATAL_OOM 0 +#endif + +#if HASH_NONFATAL_OOM +/* malloc failures can be recovered from */ + +#ifndef uthash_nonfatal_oom +#define uthash_nonfatal_oom(obj) do {} while (0) /* non-fatal OOM error */ +#endif + +#define HASH_RECORD_OOM(oomed) do { (oomed) = 1; } while (0) +#define IF_HASH_NONFATAL_OOM(x) x + +#else +/* malloc failures result in lost memory, hash tables are unusable */ + +#ifndef uthash_fatal +#define uthash_fatal(msg) exit(-1) /* fatal OOM error */ +#endif + +#define HASH_RECORD_OOM(oomed) uthash_fatal("out of memory") +#define IF_HASH_NONFATAL_OOM(x) + +#endif + +/* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS 32U /* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS_LOG2 5U /* lg2 of initial number of buckets */ +#define HASH_BKT_CAPACITY_THRESH 10U /* expand when bucket count reaches */ + +/* calculate the element whose hash handle address is hhp */ +#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) +/* calculate the hash handle from element address elp */ +#define HH_FROM_ELMT(tbl,elp) ((UT_hash_handle*)(void*)(((char*)(elp)) + ((tbl)->hho))) + +#define HASH_ROLLBACK_BKT(hh, head, itemptrhh) \ +do { \ + struct UT_hash_handle *_hd_hh_item = (itemptrhh); \ + unsigned _hd_bkt; \ + HASH_TO_BKT(_hd_hh_item->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + (head)->hh.tbl->buckets[_hd_bkt].count++; \ + _hd_hh_item->hh_next = NULL; \ + _hd_hh_item->hh_prev = NULL; \ +} while (0) + +#define HASH_VALUE(keyptr,keylen,hashv) \ +do { \ + HASH_FUNCTION(keyptr, keylen, hashv); \ +} while (0) + +#define HASH_FIND_BYHASHVALUE(hh,head,keyptr,keylen,hashval,out) \ +do { \ + (out) = NULL; \ + if (head) { \ + unsigned _hf_bkt; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _hf_bkt); \ + if (HASH_BLOOM_TEST((head)->hh.tbl, hashval) != 0) { \ + HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], keyptr, keylen, hashval, out); \ + } \ + } \ +} while (0) + +#define HASH_FIND(hh,head,keyptr,keylen,out) \ +do { \ + (out) = NULL; \ + if (head) { \ + unsigned _hf_hashv; \ + HASH_VALUE(keyptr, keylen, _hf_hashv); \ + HASH_FIND_BYHASHVALUE(hh, head, keyptr, keylen, _hf_hashv, out); \ + } \ +} while (0) + +#ifdef HASH_BLOOM +#define HASH_BLOOM_BITLEN (1UL << HASH_BLOOM) +#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8UL) + (((HASH_BLOOM_BITLEN%8UL)!=0UL) ? 1UL : 0UL) +#define HASH_BLOOM_MAKE(tbl,oomed) \ +do { \ + (tbl)->bloom_nbits = HASH_BLOOM; \ + (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ + if (!(tbl)->bloom_bv) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ + (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ + } \ +} while (0) + +#define HASH_BLOOM_FREE(tbl) \ +do { \ + uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ +} while (0) + +#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8U] |= (1U << ((idx)%8U))) +#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8U] & (1U << ((idx)%8U))) + +#define HASH_BLOOM_ADD(tbl,hashv) \ + HASH_BLOOM_BITSET((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U))) + +#define HASH_BLOOM_TEST(tbl,hashv) \ + HASH_BLOOM_BITTEST((tbl)->bloom_bv, ((hashv) & (uint32_t)((1UL << (tbl)->bloom_nbits) - 1U))) + +#else +#define HASH_BLOOM_MAKE(tbl,oomed) +#define HASH_BLOOM_FREE(tbl) +#define HASH_BLOOM_ADD(tbl,hashv) +#define HASH_BLOOM_TEST(tbl,hashv) (1) +#define HASH_BLOOM_BYTELEN 0U +#endif + +#define HASH_MAKE_TABLE(hh,head,oomed) \ +do { \ + (head)->hh.tbl = (UT_hash_table*)uthash_malloc(sizeof(UT_hash_table)); \ + if (!(head)->hh.tbl) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head)->hh.tbl->tail = &((head)->hh); \ + (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ + (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ + (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ + (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ + HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \ + (head)->hh.tbl->signature = HASH_SIGNATURE; \ + if (!(head)->hh.tbl->buckets) { \ + HASH_RECORD_OOM(oomed); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + } else { \ + uthash_bzero((head)->hh.tbl->buckets, \ + HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_MAKE((head)->hh.tbl, oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (oomed) { \ + uthash_free((head)->hh.tbl->buckets, \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + } \ + ) \ + } \ + } \ +} while (0) + +#define HASH_REPLACE_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,replaced,cmpfcn) \ +do { \ + (replaced) = NULL; \ + HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ + if (replaced) { \ + HASH_DELETE(hh, head, replaced); \ + } \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn); \ +} while (0) + +#define HASH_REPLACE_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add,replaced) \ +do { \ + (replaced) = NULL; \ + HASH_FIND_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, replaced); \ + if (replaced) { \ + HASH_DELETE(hh, head, replaced); \ + } \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add); \ +} while (0) + +#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ +do { \ + unsigned _hr_hashv; \ + HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ + HASH_REPLACE_BYHASHVALUE(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced); \ +} while (0) + +#define HASH_REPLACE_INORDER(hh,head,fieldname,keylen_in,add,replaced,cmpfcn) \ +do { \ + unsigned _hr_hashv; \ + HASH_VALUE(&((add)->fieldname), keylen_in, _hr_hashv); \ + HASH_REPLACE_BYHASHVALUE_INORDER(hh, head, fieldname, keylen_in, _hr_hashv, add, replaced, cmpfcn); \ +} while (0) + +#define HASH_APPEND_LIST(hh, head, add) \ +do { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ + (head)->hh.tbl->tail->next = (add); \ + (head)->hh.tbl->tail = &((add)->hh); \ +} while (0) + +#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ +do { \ + do { \ + if (cmpfcn(DECLTYPE(head)(_hs_iter), add) > 0) { \ + break; \ + } \ + } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \ +} while (0) + +#ifdef NO_DECLTYPE +#undef HASH_AKBI_INNER_LOOP +#define HASH_AKBI_INNER_LOOP(hh,head,add,cmpfcn) \ +do { \ + char *_hs_saved_head = (char*)(head); \ + do { \ + DECLTYPE_ASSIGN(head, _hs_iter); \ + if (cmpfcn(head, add) > 0) { \ + DECLTYPE_ASSIGN(head, _hs_saved_head); \ + break; \ + } \ + DECLTYPE_ASSIGN(head, _hs_saved_head); \ + } while ((_hs_iter = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->next)); \ +} while (0) +#endif + +#if HASH_NONFATAL_OOM + +#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ +do { \ + if (!(oomed)) { \ + unsigned _ha_bkt; \ + (head)->hh.tbl->num_items++; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \ + if (oomed) { \ + HASH_ROLLBACK_BKT(hh, head, &(add)->hh); \ + HASH_DELETE_HH(hh, head, &(add)->hh); \ + (add)->hh.tbl = NULL; \ + uthash_nonfatal_oom(add); \ + } else { \ + HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ + HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ + } \ + } else { \ + (add)->hh.tbl = NULL; \ + uthash_nonfatal_oom(add); \ + } \ +} while (0) + +#else + +#define HASH_ADD_TO_TABLE(hh,head,keyptr,keylen_in,hashval,add,oomed) \ +do { \ + unsigned _ha_bkt; \ + (head)->hh.tbl->num_items++; \ + HASH_TO_BKT(hashval, (head)->hh.tbl->num_buckets, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], hh, &(add)->hh, oomed); \ + HASH_BLOOM_ADD((head)->hh.tbl, hashval); \ + HASH_EMIT_KEY(hh, head, keyptr, keylen_in); \ +} while (0) + +#endif + + +#define HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh,head,keyptr,keylen_in,hashval,add,cmpfcn) \ +do { \ + IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \ + (add)->hh.hashv = (hashval); \ + (add)->hh.key = (char*) (keyptr); \ + (add)->hh.keylen = (unsigned) (keylen_in); \ + if (!(head)) { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh, add, _ha_oomed); \ + IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \ + (head) = (add); \ + IF_HASH_NONFATAL_OOM( } ) \ + } else { \ + void *_hs_iter = (head); \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_AKBI_INNER_LOOP(hh, head, add, cmpfcn); \ + if (_hs_iter) { \ + (add)->hh.next = _hs_iter; \ + if (((add)->hh.prev = HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev)) { \ + HH_FROM_ELMT((head)->hh.tbl, (add)->hh.prev)->next = (add); \ + } else { \ + (head) = (add); \ + } \ + HH_FROM_ELMT((head)->hh.tbl, _hs_iter)->prev = (add); \ + } else { \ + HASH_APPEND_LIST(hh, head, add); \ + } \ + } \ + HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \ + HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE_INORDER"); \ +} while (0) + +#define HASH_ADD_KEYPTR_INORDER(hh,head,keyptr,keylen_in,add,cmpfcn) \ +do { \ + unsigned _hs_hashv; \ + HASH_VALUE(keyptr, keylen_in, _hs_hashv); \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, keyptr, keylen_in, _hs_hashv, add, cmpfcn); \ +} while (0) + +#define HASH_ADD_BYHASHVALUE_INORDER(hh,head,fieldname,keylen_in,hashval,add,cmpfcn) \ + HASH_ADD_KEYPTR_BYHASHVALUE_INORDER(hh, head, &((add)->fieldname), keylen_in, hashval, add, cmpfcn) + +#define HASH_ADD_INORDER(hh,head,fieldname,keylen_in,add,cmpfcn) \ + HASH_ADD_KEYPTR_INORDER(hh, head, &((add)->fieldname), keylen_in, add, cmpfcn) + +#define HASH_ADD_KEYPTR_BYHASHVALUE(hh,head,keyptr,keylen_in,hashval,add) \ +do { \ + IF_HASH_NONFATAL_OOM( int _ha_oomed = 0; ) \ + (add)->hh.hashv = (hashval); \ + (add)->hh.key = (const void*) (keyptr); \ + (add)->hh.keylen = (unsigned) (keylen_in); \ + if (!(head)) { \ + (add)->hh.next = NULL; \ + (add)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh, add, _ha_oomed); \ + IF_HASH_NONFATAL_OOM( if (!_ha_oomed) { ) \ + (head) = (add); \ + IF_HASH_NONFATAL_OOM( } ) \ + } else { \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_APPEND_LIST(hh, head, add); \ + } \ + HASH_ADD_TO_TABLE(hh, head, keyptr, keylen_in, hashval, add, _ha_oomed); \ + HASH_FSCK(hh, head, "HASH_ADD_KEYPTR_BYHASHVALUE"); \ +} while (0) + +#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ +do { \ + unsigned _ha_hashv; \ + HASH_VALUE(keyptr, keylen_in, _ha_hashv); \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, keyptr, keylen_in, _ha_hashv, add); \ +} while (0) + +#define HASH_ADD_BYHASHVALUE(hh,head,fieldname,keylen_in,hashval,add) \ + HASH_ADD_KEYPTR_BYHASHVALUE(hh, head, &((add)->fieldname), keylen_in, hashval, add) + +#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ + HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add) + +#define HASH_TO_BKT(hashv,num_bkts,bkt) \ +do { \ + bkt = ((hashv) & ((num_bkts) - 1U)); \ +} while (0) + +/* delete "delptr" from the hash table. + * "the usual" patch-up process for the app-order doubly-linked-list. + * The use of _hd_hh_del below deserves special explanation. + * These used to be expressed using (delptr) but that led to a bug + * if someone used the same symbol for the head and deletee, like + * HASH_DELETE(hh,users,users); + * We want that to work, but by changing the head (users) below + * we were forfeiting our ability to further refer to the deletee (users) + * in the patch-up process. Solution: use scratch space to + * copy the deletee pointer, then the latter references are via that + * scratch pointer rather than through the repointed (users) symbol. + */ +#define HASH_DELETE(hh,head,delptr) \ + HASH_DELETE_HH(hh, head, &(delptr)->hh) + +#define HASH_DELETE_HH(hh,head,delptrhh) \ +do { \ + struct UT_hash_handle *_hd_hh_del = (delptrhh); \ + if ((_hd_hh_del->prev == NULL) && (_hd_hh_del->next == NULL)) { \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head) = NULL; \ + } else { \ + unsigned _hd_bkt; \ + if (_hd_hh_del == (head)->hh.tbl->tail) { \ + (head)->hh.tbl->tail = HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev); \ + } \ + if (_hd_hh_del->prev != NULL) { \ + HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->prev)->next = _hd_hh_del->next; \ + } else { \ + DECLTYPE_ASSIGN(head, _hd_hh_del->next); \ + } \ + if (_hd_hh_del->next != NULL) { \ + HH_FROM_ELMT((head)->hh.tbl, _hd_hh_del->next)->prev = _hd_hh_del->prev; \ + } \ + HASH_TO_BKT(_hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + HASH_DEL_IN_BKT((head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ + (head)->hh.tbl->num_items--; \ + } \ + HASH_FSCK(hh, head, "HASH_DELETE_HH"); \ +} while (0) + +/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ +#define HASH_FIND_STR(head,findstr,out) \ +do { \ + unsigned _uthash_hfstr_keylen = (unsigned)uthash_strlen(findstr); \ + HASH_FIND(hh, head, findstr, _uthash_hfstr_keylen, out); \ +} while (0) +#define HASH_ADD_STR(head,strfield,add) \ +do { \ + unsigned _uthash_hastr_keylen = (unsigned)uthash_strlen((add)->strfield); \ + HASH_ADD(hh, head, strfield[0], _uthash_hastr_keylen, add); \ +} while (0) +#define HASH_REPLACE_STR(head,strfield,add,replaced) \ +do { \ + unsigned _uthash_hrstr_keylen = (unsigned)uthash_strlen((add)->strfield); \ + HASH_REPLACE(hh, head, strfield[0], _uthash_hrstr_keylen, add, replaced); \ +} while (0) +#define HASH_FIND_INT(head,findint,out) \ + HASH_FIND(hh,head,findint,sizeof(int),out) +#define HASH_ADD_INT(head,intfield,add) \ + HASH_ADD(hh,head,intfield,sizeof(int),add) +#define HASH_REPLACE_INT(head,intfield,add,replaced) \ + HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) +#define HASH_FIND_PTR(head,findptr,out) \ + HASH_FIND(hh,head,findptr,sizeof(void *),out) +#define HASH_ADD_PTR(head,ptrfield,add) \ + HASH_ADD(hh,head,ptrfield,sizeof(void *),add) +#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ + HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) +#define HASH_DEL(head,delptr) \ + HASH_DELETE(hh,head,delptr) + +/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. + * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. + */ +#ifdef HASH_DEBUG +#include /* fprintf, stderr */ +#define HASH_OOPS(...) do { fprintf(stderr, __VA_ARGS__); exit(-1); } while (0) +#define HASH_FSCK(hh,head,where) \ +do { \ + struct UT_hash_handle *_thh; \ + if (head) { \ + unsigned _bkt_i; \ + unsigned _count = 0; \ + char *_prev; \ + for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; ++_bkt_i) { \ + unsigned _bkt_count = 0; \ + _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ + _prev = NULL; \ + while (_thh) { \ + if (_prev != (char*)(_thh->hh_prev)) { \ + HASH_OOPS("%s: invalid hh_prev %p, actual %p\n", \ + (where), (void*)_thh->hh_prev, (void*)_prev); \ + } \ + _bkt_count++; \ + _prev = (char*)(_thh); \ + _thh = _thh->hh_next; \ + } \ + _count += _bkt_count; \ + if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ + HASH_OOPS("%s: invalid bucket count %u, actual %u\n", \ + (where), (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ + } \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("%s: invalid hh item count %u, actual %u\n", \ + (where), (head)->hh.tbl->num_items, _count); \ + } \ + _count = 0; \ + _prev = NULL; \ + _thh = &(head)->hh; \ + while (_thh) { \ + _count++; \ + if (_prev != (char*)_thh->prev) { \ + HASH_OOPS("%s: invalid prev %p, actual %p\n", \ + (where), (void*)_thh->prev, (void*)_prev); \ + } \ + _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ + _thh = (_thh->next ? HH_FROM_ELMT((head)->hh.tbl, _thh->next) : NULL); \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("%s: invalid app item count %u, actual %u\n", \ + (where), (head)->hh.tbl->num_items, _count); \ + } \ + } \ +} while (0) +#else +#define HASH_FSCK(hh,head,where) +#endif + +/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to + * the descriptor to which this macro is defined for tuning the hash function. + * The app can #include to get the prototype for write(2). */ +#ifdef HASH_EMIT_KEYS +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ +do { \ + unsigned _klen = fieldlen; \ + write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ + write(HASH_EMIT_KEYS, keyptr, (unsigned long)fieldlen); \ +} while (0) +#else +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) +#endif + +/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */ +#define HASH_BER(key,keylen,hashv) \ +do { \ + unsigned _hb_keylen = (unsigned)keylen; \ + const unsigned char *_hb_key = (const unsigned char*)(key); \ + (hashv) = 0; \ + while (_hb_keylen-- != 0U) { \ + (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; \ + } \ +} while (0) + + +/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at + * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ +#define HASH_SAX(key,keylen,hashv) \ +do { \ + unsigned _sx_i; \ + const unsigned char *_hs_key = (const unsigned char*)(key); \ + hashv = 0; \ + for (_sx_i=0; _sx_i < keylen; _sx_i++) { \ + hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ + } \ +} while (0) +/* FNV-1a variation */ +#define HASH_FNV(key,keylen,hashv) \ +do { \ + unsigned _fn_i; \ + const unsigned char *_hf_key = (const unsigned char*)(key); \ + (hashv) = 2166136261U; \ + for (_fn_i=0; _fn_i < keylen; _fn_i++) { \ + hashv = hashv ^ _hf_key[_fn_i]; \ + hashv = hashv * 16777619U; \ + } \ +} while (0) + +#define HASH_OAT(key,keylen,hashv) \ +do { \ + unsigned _ho_i; \ + const unsigned char *_ho_key=(const unsigned char*)(key); \ + hashv = 0; \ + for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ + hashv += _ho_key[_ho_i]; \ + hashv += (hashv << 10); \ + hashv ^= (hashv >> 6); \ + } \ + hashv += (hashv << 3); \ + hashv ^= (hashv >> 11); \ + hashv += (hashv << 15); \ +} while (0) + +#define HASH_JEN_MIX(a,b,c) \ +do { \ + a -= b; a -= c; a ^= ( c >> 13 ); \ + b -= c; b -= a; b ^= ( a << 8 ); \ + c -= a; c -= b; c ^= ( b >> 13 ); \ + a -= b; a -= c; a ^= ( c >> 12 ); \ + b -= c; b -= a; b ^= ( a << 16 ); \ + c -= a; c -= b; c ^= ( b >> 5 ); \ + a -= b; a -= c; a ^= ( c >> 3 ); \ + b -= c; b -= a; b ^= ( a << 10 ); \ + c -= a; c -= b; c ^= ( b >> 15 ); \ +} while (0) + +#define HASH_JEN(key,keylen,hashv) \ +do { \ + unsigned _hj_i,_hj_j,_hj_k; \ + unsigned const char *_hj_key=(unsigned const char*)(key); \ + hashv = 0xfeedbeefu; \ + _hj_i = _hj_j = 0x9e3779b9u; \ + _hj_k = (unsigned)(keylen); \ + while (_hj_k >= 12U) { \ + _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ + + ( (unsigned)_hj_key[2] << 16 ) \ + + ( (unsigned)_hj_key[3] << 24 ) ); \ + _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ + + ( (unsigned)_hj_key[6] << 16 ) \ + + ( (unsigned)_hj_key[7] << 24 ) ); \ + hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ + + ( (unsigned)_hj_key[10] << 16 ) \ + + ( (unsigned)_hj_key[11] << 24 ) ); \ + \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + \ + _hj_key += 12; \ + _hj_k -= 12U; \ + } \ + hashv += (unsigned)(keylen); \ + switch ( _hj_k ) { \ + case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); /* FALLTHROUGH */ \ + case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); /* FALLTHROUGH */ \ + case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); /* FALLTHROUGH */ \ + case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); /* FALLTHROUGH */ \ + case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); /* FALLTHROUGH */ \ + case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); /* FALLTHROUGH */ \ + case 5: _hj_j += _hj_key[4]; /* FALLTHROUGH */ \ + case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); /* FALLTHROUGH */ \ + case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); /* FALLTHROUGH */ \ + case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); /* FALLTHROUGH */ \ + case 1: _hj_i += _hj_key[0]; /* FALLTHROUGH */ \ + default: ; \ + } \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ +} while (0) + +/* The Paul Hsieh hash function */ +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif +#define HASH_SFH(key,keylen,hashv) \ +do { \ + unsigned const char *_sfh_key=(unsigned const char*)(key); \ + uint32_t _sfh_tmp, _sfh_len = (uint32_t)keylen; \ + \ + unsigned _sfh_rem = _sfh_len & 3U; \ + _sfh_len >>= 2; \ + hashv = 0xcafebabeu; \ + \ + /* Main loop */ \ + for (;_sfh_len > 0U; _sfh_len--) { \ + hashv += get16bits (_sfh_key); \ + _sfh_tmp = ((uint32_t)(get16bits (_sfh_key+2)) << 11) ^ hashv; \ + hashv = (hashv << 16) ^ _sfh_tmp; \ + _sfh_key += 2U*sizeof (uint16_t); \ + hashv += hashv >> 11; \ + } \ + \ + /* Handle end cases */ \ + switch (_sfh_rem) { \ + case 3: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 16; \ + hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)]) << 18; \ + hashv += hashv >> 11; \ + break; \ + case 2: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 11; \ + hashv += hashv >> 17; \ + break; \ + case 1: hashv += *_sfh_key; \ + hashv ^= hashv << 10; \ + hashv += hashv >> 1; \ + break; \ + default: ; \ + } \ + \ + /* Force "avalanching" of final 127 bits */ \ + hashv ^= hashv << 3; \ + hashv += hashv >> 5; \ + hashv ^= hashv << 4; \ + hashv += hashv >> 17; \ + hashv ^= hashv << 25; \ + hashv += hashv >> 6; \ +} while (0) + +/* iterate over items in a known bucket to find desired item */ +#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,hashval,out) \ +do { \ + if ((head).hh_head != NULL) { \ + DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (head).hh_head)); \ + } else { \ + (out) = NULL; \ + } \ + while ((out) != NULL) { \ + if ((out)->hh.hashv == (hashval) && (out)->hh.keylen == (keylen_in)) { \ + if (HASH_KEYCMP((out)->hh.key, keyptr, keylen_in) == 0) { \ + break; \ + } \ + } \ + if ((out)->hh.hh_next != NULL) { \ + DECLTYPE_ASSIGN(out, ELMT_FROM_HH(tbl, (out)->hh.hh_next)); \ + } else { \ + (out) = NULL; \ + } \ + } \ +} while (0) + +/* add an item to a bucket */ +#define HASH_ADD_TO_BKT(head,hh,addhh,oomed) \ +do { \ + UT_hash_bucket *_ha_head = &(head); \ + _ha_head->count++; \ + (addhh)->hh_next = _ha_head->hh_head; \ + (addhh)->hh_prev = NULL; \ + if (_ha_head->hh_head != NULL) { \ + _ha_head->hh_head->hh_prev = (addhh); \ + } \ + _ha_head->hh_head = (addhh); \ + if ((_ha_head->count >= ((_ha_head->expand_mult + 1U) * HASH_BKT_CAPACITY_THRESH)) \ + && !(addhh)->tbl->noexpand) { \ + HASH_EXPAND_BUCKETS(addhh,(addhh)->tbl, oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (oomed) { \ + HASH_DEL_IN_BKT(head,addhh); \ + } \ + ) \ + } \ +} while (0) + +/* remove an item from a given bucket */ +#define HASH_DEL_IN_BKT(head,delhh) \ +do { \ + UT_hash_bucket *_hd_head = &(head); \ + _hd_head->count--; \ + if (_hd_head->hh_head == (delhh)) { \ + _hd_head->hh_head = (delhh)->hh_next; \ + } \ + if ((delhh)->hh_prev) { \ + (delhh)->hh_prev->hh_next = (delhh)->hh_next; \ + } \ + if ((delhh)->hh_next) { \ + (delhh)->hh_next->hh_prev = (delhh)->hh_prev; \ + } \ +} while (0) + +/* Bucket expansion has the effect of doubling the number of buckets + * and redistributing the items into the new buckets. Ideally the + * items will distribute more or less evenly into the new buckets + * (the extent to which this is true is a measure of the quality of + * the hash function as it applies to the key domain). + * + * With the items distributed into more buckets, the chain length + * (item count) in each bucket is reduced. Thus by expanding buckets + * the hash keeps a bound on the chain length. This bounded chain + * length is the essence of how a hash provides constant time lookup. + * + * The calculation of tbl->ideal_chain_maxlen below deserves some + * explanation. First, keep in mind that we're calculating the ideal + * maximum chain length based on the *new* (doubled) bucket count. + * In fractions this is just n/b (n=number of items,b=new num buckets). + * Since the ideal chain length is an integer, we want to calculate + * ceil(n/b). We don't depend on floating point arithmetic in this + * hash, so to calculate ceil(n/b) with integers we could write + * + * ceil(n/b) = (n/b) + ((n%b)?1:0) + * + * and in fact a previous version of this hash did just that. + * But now we have improved things a bit by recognizing that b is + * always a power of two. We keep its base 2 log handy (call it lb), + * so now we can write this with a bit shift and logical AND: + * + * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) + * + */ +#define HASH_EXPAND_BUCKETS(hh,tbl,oomed) \ +do { \ + unsigned _he_bkt; \ + unsigned _he_bkt_i; \ + struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ + UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ + _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ + sizeof(struct UT_hash_bucket) * (tbl)->num_buckets * 2U); \ + if (!_he_new_buckets) { \ + HASH_RECORD_OOM(oomed); \ + } else { \ + uthash_bzero(_he_new_buckets, \ + sizeof(struct UT_hash_bucket) * (tbl)->num_buckets * 2U); \ + (tbl)->ideal_chain_maxlen = \ + ((tbl)->num_items >> ((tbl)->log2_num_buckets+1U)) + \ + ((((tbl)->num_items & (((tbl)->num_buckets*2U)-1U)) != 0U) ? 1U : 0U); \ + (tbl)->nonideal_items = 0; \ + for (_he_bkt_i = 0; _he_bkt_i < (tbl)->num_buckets; _he_bkt_i++) { \ + _he_thh = (tbl)->buckets[ _he_bkt_i ].hh_head; \ + while (_he_thh != NULL) { \ + _he_hh_nxt = _he_thh->hh_next; \ + HASH_TO_BKT(_he_thh->hashv, (tbl)->num_buckets * 2U, _he_bkt); \ + _he_newbkt = &(_he_new_buckets[_he_bkt]); \ + if (++(_he_newbkt->count) > (tbl)->ideal_chain_maxlen) { \ + (tbl)->nonideal_items++; \ + if (_he_newbkt->count > _he_newbkt->expand_mult * (tbl)->ideal_chain_maxlen) { \ + _he_newbkt->expand_mult++; \ + } \ + } \ + _he_thh->hh_prev = NULL; \ + _he_thh->hh_next = _he_newbkt->hh_head; \ + if (_he_newbkt->hh_head != NULL) { \ + _he_newbkt->hh_head->hh_prev = _he_thh; \ + } \ + _he_newbkt->hh_head = _he_thh; \ + _he_thh = _he_hh_nxt; \ + } \ + } \ + uthash_free((tbl)->buckets, (tbl)->num_buckets * sizeof(struct UT_hash_bucket)); \ + (tbl)->num_buckets *= 2U; \ + (tbl)->log2_num_buckets++; \ + (tbl)->buckets = _he_new_buckets; \ + (tbl)->ineff_expands = ((tbl)->nonideal_items > ((tbl)->num_items >> 1)) ? \ + ((tbl)->ineff_expands+1U) : 0U; \ + if ((tbl)->ineff_expands > 1U) { \ + (tbl)->noexpand = 1; \ + uthash_noexpand_fyi(tbl); \ + } \ + uthash_expand_fyi(tbl); \ + } \ +} while (0) + + +/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ +/* Note that HASH_SORT assumes the hash handle name to be hh. + * HASH_SRT was added to allow the hash handle name to be passed in. */ +#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) +#define HASH_SRT(hh,head,cmpfcn) \ +do { \ + unsigned _hs_i; \ + unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ + struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ + if (head != NULL) { \ + _hs_insize = 1; \ + _hs_looping = 1; \ + _hs_list = &((head)->hh); \ + while (_hs_looping != 0U) { \ + _hs_p = _hs_list; \ + _hs_list = NULL; \ + _hs_tail = NULL; \ + _hs_nmerges = 0; \ + while (_hs_p != NULL) { \ + _hs_nmerges++; \ + _hs_q = _hs_p; \ + _hs_psize = 0; \ + for (_hs_i = 0; _hs_i < _hs_insize; ++_hs_i) { \ + _hs_psize++; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + if (_hs_q == NULL) { \ + break; \ + } \ + } \ + _hs_qsize = _hs_insize; \ + while ((_hs_psize != 0U) || ((_hs_qsize != 0U) && (_hs_q != NULL))) { \ + if (_hs_psize == 0U) { \ + _hs_e = _hs_q; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + _hs_qsize--; \ + } else if ((_hs_qsize == 0U) || (_hs_q == NULL)) { \ + _hs_e = _hs_p; \ + if (_hs_p != NULL) { \ + _hs_p = ((_hs_p->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \ + } \ + _hs_psize--; \ + } else if ((cmpfcn( \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_p)), \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl, _hs_q)) \ + )) <= 0) { \ + _hs_e = _hs_p; \ + if (_hs_p != NULL) { \ + _hs_p = ((_hs_p->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_p->next) : NULL); \ + } \ + _hs_psize--; \ + } else { \ + _hs_e = _hs_q; \ + _hs_q = ((_hs_q->next != NULL) ? \ + HH_FROM_ELMT((head)->hh.tbl, _hs_q->next) : NULL); \ + _hs_qsize--; \ + } \ + if ( _hs_tail != NULL ) { \ + _hs_tail->next = ((_hs_e != NULL) ? \ + ELMT_FROM_HH((head)->hh.tbl, _hs_e) : NULL); \ + } else { \ + _hs_list = _hs_e; \ + } \ + if (_hs_e != NULL) { \ + _hs_e->prev = ((_hs_tail != NULL) ? \ + ELMT_FROM_HH((head)->hh.tbl, _hs_tail) : NULL); \ + } \ + _hs_tail = _hs_e; \ + } \ + _hs_p = _hs_q; \ + } \ + if (_hs_tail != NULL) { \ + _hs_tail->next = NULL; \ + } \ + if (_hs_nmerges <= 1U) { \ + _hs_looping = 0; \ + (head)->hh.tbl->tail = _hs_tail; \ + DECLTYPE_ASSIGN(head, ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ + } \ + _hs_insize *= 2U; \ + } \ + HASH_FSCK(hh, head, "HASH_SRT"); \ + } \ +} while (0) + +/* This function selects items from one hash into another hash. + * The end result is that the selected items have dual presence + * in both hashes. There is no copy of the items made; rather + * they are added into the new hash through a secondary hash + * hash handle that must be present in the structure. */ +#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ +do { \ + unsigned _src_bkt, _dst_bkt; \ + void *_last_elt = NULL, *_elt; \ + UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ + ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ + if ((src) != NULL) { \ + for (_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ + for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ + _src_hh != NULL; \ + _src_hh = _src_hh->hh_next) { \ + _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ + if (cond(_elt)) { \ + IF_HASH_NONFATAL_OOM( int _hs_oomed = 0; ) \ + _dst_hh = (UT_hash_handle*)(void*)(((char*)_elt) + _dst_hho); \ + _dst_hh->key = _src_hh->key; \ + _dst_hh->keylen = _src_hh->keylen; \ + _dst_hh->hashv = _src_hh->hashv; \ + _dst_hh->prev = _last_elt; \ + _dst_hh->next = NULL; \ + if (_last_elt_hh != NULL) { \ + _last_elt_hh->next = _elt; \ + } \ + if ((dst) == NULL) { \ + DECLTYPE_ASSIGN(dst, _elt); \ + HASH_MAKE_TABLE(hh_dst, dst, _hs_oomed); \ + IF_HASH_NONFATAL_OOM( \ + if (_hs_oomed) { \ + uthash_nonfatal_oom(_elt); \ + (dst) = NULL; \ + continue; \ + } \ + ) \ + } else { \ + _dst_hh->tbl = (dst)->hh_dst.tbl; \ + } \ + HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ + HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt], hh_dst, _dst_hh, _hs_oomed); \ + (dst)->hh_dst.tbl->num_items++; \ + IF_HASH_NONFATAL_OOM( \ + if (_hs_oomed) { \ + HASH_ROLLBACK_BKT(hh_dst, dst, _dst_hh); \ + HASH_DELETE_HH(hh_dst, dst, _dst_hh); \ + _dst_hh->tbl = NULL; \ + uthash_nonfatal_oom(_elt); \ + continue; \ + } \ + ) \ + HASH_BLOOM_ADD(_dst_hh->tbl, _dst_hh->hashv); \ + _last_elt = _elt; \ + _last_elt_hh = _dst_hh; \ + } \ + } \ + } \ + } \ + HASH_FSCK(hh_dst, dst, "HASH_SELECT"); \ +} while (0) + +#define HASH_CLEAR(hh,head) \ +do { \ + if ((head) != NULL) { \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head) = NULL; \ + } \ +} while (0) + +#define HASH_OVERHEAD(hh,head) \ + (((head) != NULL) ? ( \ + (size_t)(((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ + ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ + sizeof(UT_hash_table) + \ + (HASH_BLOOM_BYTELEN))) : 0U) + +#ifdef NO_DECLTYPE +#define HASH_ITER(hh,head,el,tmp) \ +for(((el)=(head)), ((*(char**)(&(tmp)))=(char*)((head!=NULL)?(head)->hh.next:NULL)); \ + (el) != NULL; ((el)=(tmp)), ((*(char**)(&(tmp)))=(char*)((tmp!=NULL)?(tmp)->hh.next:NULL))) +#else +#define HASH_ITER(hh,head,el,tmp) \ +for(((el)=(head)), ((tmp)=DECLTYPE(el)((head!=NULL)?(head)->hh.next:NULL)); \ + (el) != NULL; ((el)=(tmp)), ((tmp)=DECLTYPE(el)((tmp!=NULL)?(tmp)->hh.next:NULL))) +#endif + +/* obtain a count of items in the hash */ +#define HASH_COUNT(head) HASH_CNT(hh,head) +#define HASH_CNT(hh,head) ((head != NULL)?((head)->hh.tbl->num_items):0U) + +typedef struct UT_hash_bucket { + struct UT_hash_handle *hh_head; + unsigned count; + + /* expand_mult is normally set to 0. In this situation, the max chain length + * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If + * the bucket's chain exceeds this length, bucket expansion is triggered). + * However, setting expand_mult to a non-zero value delays bucket expansion + * (that would be triggered by additions to this particular bucket) + * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. + * (The multiplier is simply expand_mult+1). The whole idea of this + * multiplier is to reduce bucket expansions, since they are expensive, in + * situations where we know that a particular bucket tends to be overused. + * It is better to let its chain length grow to a longer yet-still-bounded + * value, than to do an O(n) bucket expansion too often. + */ + unsigned expand_mult; + +} UT_hash_bucket; + +/* random signature used only to find hash tables in external analysis */ +#define HASH_SIGNATURE 0xa0111fe1u +#define HASH_BLOOM_SIGNATURE 0xb12220f2u + +typedef struct UT_hash_table { + UT_hash_bucket *buckets; + unsigned num_buckets, log2_num_buckets; + unsigned num_items; + struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ + ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ + + /* in an ideal situation (all buckets used equally), no bucket would have + * more than ceil(#items/#buckets) items. that's the ideal chain length. */ + unsigned ideal_chain_maxlen; + + /* nonideal_items is the number of items in the hash whose chain position + * exceeds the ideal chain maxlen. these items pay the penalty for an uneven + * hash distribution; reaching them in a chain traversal takes >ideal steps */ + unsigned nonideal_items; + + /* ineffective expands occur when a bucket doubling was performed, but + * afterward, more than half the items in the hash had nonideal chain + * positions. If this happens on two consecutive expansions we inhibit any + * further expansion, as it's not helping; this happens when the hash + * function isn't a good fit for the key domain. When expansion is inhibited + * the hash will still work, albeit no longer in constant time. */ + unsigned ineff_expands, noexpand; + + uint32_t signature; /* used only to find hash tables in external analysis */ +#ifdef HASH_BLOOM + uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ + uint8_t *bloom_bv; + uint8_t bloom_nbits; +#endif + +} UT_hash_table; + +typedef struct UT_hash_handle { + struct UT_hash_table *tbl; + void *prev; /* prev element in app order */ + void *next; /* next element in app order */ + struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ + struct UT_hash_handle *hh_next; /* next hh in bucket order */ + const void *key; /* ptr to enclosing struct's key */ + unsigned keylen; /* enclosing struct's key len */ + unsigned hashv; /* result of hash-fcn(key) */ +} UT_hash_handle; + +#endif /* UTHASH_H */ From 401ae8a57071395d5a2f2616f3fc1f015539ed29 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 10 Mar 2023 00:55:46 +0100 Subject: [PATCH 0353/2225] clang-format: add HASH_ITER to ForEachMacros --- .clang-format | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-format b/.clang-format index c9dfc48e92dcea..89cbc19a669498 100644 --- a/.clang-format +++ b/.clang-format @@ -57,6 +57,7 @@ ForEachMacros: - 'json_object_foreach' - 'json_object_foreach_safe' - 'json_array_foreach' + - 'HASH_ITER' IncludeBlocks: Preserve IndentCaseLabels: false IndentPPDirectives: None From 2986d36d9bcc158e964037defbe6a9e1986a9e92 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 12 Mar 2023 01:48:17 +0100 Subject: [PATCH 0354/2225] libobs/util: Add uthash Adds a header including uthash and redefining some of its options for use withint libobs and plugins (potentially). --- libobs/CMakeLists.txt | 2 ++ libobs/util/uthash.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 libobs/util/uthash.h diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index e72e443abb3c20..c69557e3e31bc2 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -201,6 +201,7 @@ target_sources( util/threading.h util/utf8.c util/utf8.h + util/uthash.h util/util_uint64.h util/util_uint128.h util/curl/curl-helper.h @@ -247,6 +248,7 @@ target_link_libraries( FFmpeg::swresample Jansson::Jansson OBS::caption + OBS::uthash ZLIB::ZLIB PUBLIC Threads::Threads) diff --git a/libobs/util/uthash.h b/libobs/util/uthash.h new file mode 100644 index 00000000000000..5698466ea96fb0 --- /dev/null +++ b/libobs/util/uthash.h @@ -0,0 +1,34 @@ +/****************************************************************************** + Copyright (C) 2023 by Dennis Sädtler + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#pragma once + +/* + * This file (re)defines various uthash settings for use in libobs + */ + +#include + +/* Use OBS allocator */ +#undef uthash_malloc +#undef uthash_free +#define uthash_malloc(sz) bmalloc(sz) +#define uthash_free(ptr, sz) bfree(ptr) + +/* Use SFH (Super Fast Hash) function instead of JEN */ +#undef HASH_FUNCTION +#define HASH_FUNCTION HASH_SFH From f4a88149983b959dd0cb05b33e945efccbe8d7f1 Mon Sep 17 00:00:00 2001 From: Jim Date: Wed, 8 Feb 2023 12:05:52 +0100 Subject: [PATCH 0355/2225] libobs: Use uthash for obs data objects Co-authored-by: Rodney --- libobs/obs-data.c | 134 ++++++++++++++-------------------------------- 1 file changed, 40 insertions(+), 94 deletions(-) diff --git a/libobs/obs-data.c b/libobs/obs-data.c index f277151c41c570..6d6d76f4bf30d6 100644 --- a/libobs/obs-data.c +++ b/libobs/obs-data.c @@ -20,6 +20,7 @@ #include "util/dstr.h" #include "util/darray.h" #include "util/platform.h" +#include "util/uthash.h" #include "graphics/vec2.h" #include "graphics/vec3.h" #include "graphics/vec4.h" @@ -32,7 +33,7 @@ struct obs_data_item { volatile long ref; const char *name; struct obs_data *parent; - struct obs_data_item *next; + UT_hash_handle hh; enum obs_data_type type; size_t name_len; size_t data_len; @@ -46,7 +47,7 @@ struct obs_data_item { struct obs_data { volatile long ref; char *json; - struct obs_data_item *first_item; + struct obs_data_item *items; }; struct obs_data_array { @@ -306,45 +307,21 @@ static struct obs_data_item *obs_data_item_create(const char *name, return item; } -static struct obs_data_item **get_item_prev_next(struct obs_data *data, - struct obs_data_item *current) -{ - if (!current || !data) - return NULL; - - struct obs_data_item **prev_next = &data->first_item; - struct obs_data_item *item = data->first_item; - - while (item) { - if (item == current) - return prev_next; - - prev_next = &item->next; - item = item->next; - } - - return NULL; -} - static inline void obs_data_item_detach(struct obs_data_item *item) { - struct obs_data_item **prev_next = - get_item_prev_next(item->parent, item); - - if (prev_next) { - *prev_next = item->next; - item->next = NULL; + if (item->parent) { + HASH_DEL(item->parent->items, item); + item->parent = NULL; } } -static inline void obs_data_item_reattach(struct obs_data_item *old_ptr, - struct obs_data_item *new_ptr) +static inline void obs_data_item_reattach(struct obs_data *parent, + struct obs_data_item *item) { - struct obs_data_item **prev_next = - get_item_prev_next(new_ptr->parent, old_ptr); - - if (prev_next) - *prev_next = new_ptr; + if (parent) { + HASH_ADD_STR(parent->items, name, item); + item->parent = parent; + } } static struct obs_data_item * @@ -356,16 +333,23 @@ obs_data_item_ensure_capacity(struct obs_data_item *item) if (item->capacity >= new_size) return item; + struct obs_data *parent = item->parent; + obs_data_item_detach(item); + new_item = brealloc(item, new_size); new_item->capacity = new_size; new_item->name = get_item_name(new_item); - obs_data_item_reattach(item, new_item); + obs_data_item_reattach(parent, new_item); + return new_item; } static inline void obs_data_item_destroy(struct obs_data_item *item) { + if (item->parent) + HASH_DEL(item->parent->items, item); + item_data_release(item); item_default_data_release(item); item_autoselect_data_release(item); @@ -601,9 +585,11 @@ static inline void set_json_array(json_t *json, const char *name, static json_t *obs_data_to_json(obs_data_t *data) { json_t *json = json_object(); + obs_data_item_t *item = NULL; + obs_data_item_t *temp = NULL; - for (item = obs_data_first(data); item; obs_data_item_next(&item)) { + HASH_ITER (hh, data->items, item, temp) { enum obs_data_type type = obs_data_item_gettype(item); const char *name = get_item_name(item); @@ -709,12 +695,11 @@ void obs_data_addref(obs_data_t *data) static inline void obs_data_destroy(struct obs_data *data) { - struct obs_data_item *item = data->first_item; + struct obs_data_item *item, *temp; - while (item) { - struct obs_data_item *next = item->next; + HASH_ITER (hh, data->items, item, temp) { + obs_data_item_detach(item); obs_data_item_release(&item); - item = next; } /* NOTE: don't use bfree for json text, allocated by json */ @@ -824,9 +809,9 @@ obs_data_t *obs_data_get_defaults(obs_data_t *data) if (!data) return defaults; - struct obs_data_item *item = data->first_item; + struct obs_data_item *item, *temp; - while (item) { + HASH_ITER (hh, data->items, item, temp) { const char *name = get_item_name(item); switch (item->type) { case OBS_DATA_NULL: @@ -892,8 +877,6 @@ obs_data_t *obs_data_get_defaults(obs_data_t *data) break; } } - - item = item->next; } return defaults; @@ -904,16 +887,9 @@ static struct obs_data_item *get_item(struct obs_data *data, const char *name) if (!data) return NULL; - struct obs_data_item *item = data->first_item; - - while (item) { - if (strcmp(get_item_name(item), name) == 0) - return item; - - item = item->next; - } - - return NULL; + struct obs_data_item *item; + HASH_FIND_STR(data->items, name, item); + return item; } static void set_item_data(struct obs_data *data, struct obs_data_item **item, @@ -926,31 +902,8 @@ static void set_item_data(struct obs_data *data, struct obs_data_item **item, if ((!item || !*item) && data) { new_item = obs_data_item_create(name, ptr, size, type, default_data, autoselect_data); - - obs_data_item_t *prev = obs_data_first(data); - obs_data_item_t *next = obs_data_first(data); - obs_data_item_next(&next); - for (; prev && next; - obs_data_item_next(&prev), obs_data_item_next(&next)) { - if (strcmp(get_item_name(next), name) > 0) - break; - } - new_item->parent = data; - if (prev && strcmp(get_item_name(prev), name) < 0) { - prev->next = new_item; - new_item->next = next; - - } else { - data->first_item = new_item; - new_item->next = prev; - } - - if (!prev) - data->first_item = new_item; - - obs_data_item_release(&prev); - obs_data_item_release(&next); + HASH_ADD_STR(data->items, name, new_item); } else if (default_data) { obs_data_item_set_default_data(item, ptr, size, type); @@ -1077,16 +1030,13 @@ static inline void copy_item(struct obs_data *data, struct obs_data_item *item) void obs_data_apply(obs_data_t *target, obs_data_t *apply_data) { - struct obs_data_item *item; - if (!target || !apply_data || target == apply_data) return; - item = apply_data->first_item; + struct obs_data_item *item, *temp; - while (item) { + HASH_ITER (hh, apply_data->items, item, temp) { copy_item(target, item); - item = item->next; } } @@ -1130,16 +1080,12 @@ static inline void clear_item(struct obs_data_item *item) void obs_data_clear(obs_data_t *target) { - struct obs_data_item *item; - if (!target) return; - item = target->first_item; - - while (item) { + struct obs_data_item *item, *temp; + HASH_ITER (hh, target->items, item, temp) { clear_item(item); - item = item->next; } } @@ -1600,9 +1546,9 @@ obs_data_item_t *obs_data_first(obs_data_t *data) if (!data) return NULL; - if (data->first_item) - os_atomic_inc_long(&data->first_item->ref); - return data->first_item; + if (data->items) + os_atomic_inc_long(&data->items->ref); + return data->items; } obs_data_item_t *obs_data_item_byname(obs_data_t *data, const char *name) @@ -1619,7 +1565,7 @@ obs_data_item_t *obs_data_item_byname(obs_data_t *data, const char *name) bool obs_data_item_next(obs_data_item_t **item) { if (item && *item) { - obs_data_item_t *next = (*item)->next; + obs_data_item_t *next = (*item)->hh.next; obs_data_item_release(item); *item = next; From e720bb4c090a7a4a21bf871a03754d436648692f Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 8 Feb 2023 12:06:55 +0100 Subject: [PATCH 0356/2225] libobs: Use uthash for config --- libobs/util/config-file.c | 232 +++++++++++++++++--------------------- 1 file changed, 103 insertions(+), 129 deletions(-) diff --git a/libobs/util/config-file.c b/libobs/util/config-file.c index c64304ce5e3b5d..8a844147a1e40c 100644 --- a/libobs/util/config-file.c +++ b/libobs/util/config-file.c @@ -17,47 +17,52 @@ #include #include #include + #include "config-file.h" #include "threading.h" #include "platform.h" #include "base.h" #include "bmem.h" -#include "darray.h" #include "lexer.h" #include "dstr.h" +#include "uthash.h" struct config_item { char *name; char *value; + UT_hash_handle hh; }; static inline void config_item_free(struct config_item *item) { bfree(item->name); bfree(item->value); + bfree(item); } struct config_section { char *name; - struct darray items; /* struct config_item */ + struct config_item *items; + UT_hash_handle hh; }; static inline void config_section_free(struct config_section *section) { - struct config_item *items = section->items.array; - size_t i; - - for (i = 0; i < section->items.num; i++) - config_item_free(items + i); + struct config_item *item; + struct config_item *temp; + HASH_ITER (hh, section->items, item, temp) { + HASH_DELETE(hh, section->items, item); + config_item_free(item); + } - darray_free(§ion->items); bfree(section->name); + bfree(section); } struct config_data { char *file; - struct darray sections; /* struct config_section */ - struct darray defaults; /* struct config_section */ + struct config_section *sections; + struct config_section *defaults; pthread_mutex_t mutex; }; @@ -152,18 +157,25 @@ static void unescape(struct dstr *str) *write = '\0'; } -static void config_add_item(struct darray *items, struct strref *name, +static void config_add_item(struct config_item **items, struct strref *name, struct strref *value) { - struct config_item item; + struct config_item *item; struct dstr item_value; - dstr_init_copy_strref(&item_value, value); - unescape(&item_value); + item = bzalloc(sizeof(struct config_item)); + item->name = bstrdup_n(name->array, name->len); - item.name = bstrdup_n(name->array, name->len); - item.value = item_value.array; - darray_push_back(sizeof(struct config_item), items, &item); + if (!strref_is_empty(value)) { + dstr_init_copy_strref(&item_value, value); + unescape(&item_value); + item->value = bstrdup_n(item_value.array, item_value.len); + dstr_free(&item_value); + } else { + item->value = bzalloc(1); + } + + HASH_ADD_STR(*items, name, item); } static void config_parse_section(struct config_section *section, @@ -201,20 +213,12 @@ static void config_parse_section(struct config_section *section, strref_clear(&value); config_parse_string(lex, &value, 0); - - if (strref_is_empty(&value)) { - struct config_item item; - item.name = bstrdup_n(name.array, name.len); - item.value = bzalloc(1); - darray_push_back(sizeof(struct config_item), - §ion->items, &item); - } else { - config_add_item(§ion->items, &name, &value); - } + config_add_item(§ion->items, &name, &value); } } -static void parse_config_data(struct darray *sections, struct lexer *lex) +static void parse_config_data(struct config_section **sections, + struct lexer *lex) { struct strref section_name; struct base_token token; @@ -244,14 +248,16 @@ static void parse_config_data(struct darray *sections, struct lexer *lex) if (!section_name.len) return; - section = darray_push_back_new(sizeof(struct config_section), - sections); + section = bzalloc(sizeof(struct config_section)); section->name = bstrdup_n(section_name.array, section_name.len); + config_parse_section(section, lex); + + HASH_ADD_STR(*sections, name, section); } } -static int config_parse_file(struct darray *sections, const char *file, +static int config_parse_file(struct config_section **sections, const char *file, bool always_open) { char *file_data; @@ -347,7 +353,6 @@ int config_save(config_t *config) { FILE *f; struct dstr str, tmp; - size_t i, j; int ret = CONFIG_ERROR; if (!config) @@ -366,21 +371,19 @@ int config_save(config_t *config) return CONFIG_FILENOTFOUND; } - for (i = 0; i < config->sections.num; i++) { - struct config_section *section = darray_item( - sizeof(struct config_section), &config->sections, i); + struct config_section *section, *stmp; + struct config_item *item, *itmp; - if (i) + int idx = 0; + HASH_ITER (hh, config->sections, section, stmp) { + if (idx++) dstr_cat(&str, "\n"); dstr_cat(&str, "["); dstr_cat(&str, section->name); dstr_cat(&str, "]\n"); - for (j = 0; j < section->items.num; j++) { - struct config_item *item = darray_item( - sizeof(struct config_item), §ion->items, j); - + HASH_ITER (hh, section->items, item, itmp) { dstr_copy(&tmp, item->value ? item->value : ""); dstr_replace(&tmp, "\\", "\\\\"); dstr_replace(&tmp, "\r", "\\r"); @@ -465,22 +468,21 @@ int config_save_safe(config_t *config, const char *temp_ext, void config_close(config_t *config) { - struct config_section *defaults, *sections; - size_t i; + struct config_section *section, *temp; if (!config) return; - defaults = config->defaults.array; - sections = config->sections.array; + HASH_ITER (hh, config->sections, section, temp) { + HASH_DELETE(hh, config->sections, section); + config_section_free(section); + } - for (i = 0; i < config->defaults.num; i++) - config_section_free(defaults + i); - for (i = 0; i < config->sections.num; i++) - config_section_free(sections + i); + HASH_ITER (hh, config->defaults, section, temp) { + HASH_DELETE(hh, config->defaults, section); + config_section_free(section); + } - darray_free(&config->defaults); - darray_free(&config->sections); bfree(config->file); pthread_mutex_destroy(&config->mutex); bfree(config); @@ -488,94 +490,77 @@ void config_close(config_t *config) size_t config_num_sections(config_t *config) { - return config->sections.num; + return HASH_CNT(hh, config->sections); } const char *config_get_section(config_t *config, size_t idx) { struct config_section *section; + struct config_section *temp; const char *name = NULL; + size_t ctr = 0; pthread_mutex_lock(&config->mutex); - if (idx >= config->sections.num) + if (idx >= config_num_sections(config)) goto unlock; - section = darray_item(sizeof(struct config_section), &config->sections, - idx); - name = section->name; + HASH_ITER (hh, config->sections, section, temp) { + if (idx == ctr++) { + name = section->name; + break; + } + } unlock: pthread_mutex_unlock(&config->mutex); return name; } -static const struct config_item *config_find_item(const struct darray *sections, - const char *section, - const char *name) +static const struct config_item * +config_find_item(const struct config_section *sections, const char *section, + const char *name) { - size_t i, j; + struct config_section *sec; + struct config_item *res; - for (i = 0; i < sections->num; i++) { - const struct config_section *sec = - darray_item(sizeof(struct config_section), sections, i); + HASH_FIND_STR(sections, section, sec); + if (!sec) + return NULL; - if (astrcmpi(sec->name, section) == 0) { - for (j = 0; j < sec->items.num; j++) { - struct config_item *item = - darray_item(sizeof(struct config_item), - &sec->items, j); + HASH_FIND_STR(sec->items, name, res); - if (astrcmpi(item->name, name) == 0) - return item; - } - } - } - - return NULL; + return res; } -static void config_set_item(config_t *config, struct darray *sections, +static void config_set_item(config_t *config, struct config_section **sections, const char *section, const char *name, char *value) { - struct config_section *sec = NULL; - struct config_section *array = sections->array; + struct config_section *sec; struct config_item *item; - size_t i, j; pthread_mutex_lock(&config->mutex); - for (i = 0; i < sections->num; i++) { - struct config_section *cur_sec = array + i; - struct config_item *items = cur_sec->items.array; - - if (astrcmpi(cur_sec->name, section) == 0) { - for (j = 0; j < cur_sec->items.num; j++) { - item = items + j; - - if (astrcmpi(item->name, name) == 0) { - bfree(item->value); - item->value = value; - goto unlock; - } - } - - sec = cur_sec; - break; - } - } - + HASH_FIND_STR(*sections, section, sec); if (!sec) { - sec = darray_push_back_new(sizeof(struct config_section), - sections); + sec = bzalloc(sizeof(struct config_section)); sec->name = bstrdup(section); + + HASH_ADD_STR(*sections, name, sec); } - item = darray_push_back_new(sizeof(struct config_item), &sec->items); - item->name = bstrdup(name); - item->value = value; + HASH_FIND_STR(sec->items, name, item); + if (!item) { + item = bzalloc(sizeof(struct config_item)); + item->name = bstrdup(name); + item->value = value; + + HASH_ADD_STR(sec->items, name, item); + } else { + bfree(item->value); + item->value = value; + } -unlock: pthread_mutex_unlock(&config->mutex); } @@ -681,9 +666,9 @@ const char *config_get_string(config_t *config, const char *section, pthread_mutex_lock(&config->mutex); - item = config_find_item(&config->sections, section, name); + item = config_find_item(config->sections, section, name); if (!item) - item = config_find_item(&config->defaults, section, name); + item = config_find_item(config->defaults, section, name); if (item) value = item->value; @@ -754,33 +739,22 @@ double config_get_double(config_t *config, const char *section, bool config_remove_value(config_t *config, const char *section, const char *name) { - struct darray *sections = &config->sections; + struct config_section *sec; + struct config_item *item; bool success = false; pthread_mutex_lock(&config->mutex); - for (size_t i = 0; i < sections->num; i++) { - struct config_section *sec = - darray_item(sizeof(struct config_section), sections, i); - - if (astrcmpi(sec->name, section) != 0) - continue; - - for (size_t j = 0; j < sec->items.num; j++) { - struct config_item *item = darray_item( - sizeof(struct config_item), &sec->items, j); - - if (astrcmpi(item->name, name) == 0) { - config_item_free(item); - darray_erase(sizeof(struct config_item), - &sec->items, j); - success = true; - goto unlock; - } + HASH_FIND_STR(config->sections, section, sec); + if (sec) { + HASH_FIND_STR(sec->items, name, item); + if (item) { + HASH_DELETE(hh, sec->items, item); + config_item_free(item); + success = true; } } -unlock: pthread_mutex_unlock(&config->mutex); return success; } @@ -793,7 +767,7 @@ const char *config_get_default_string(config_t *config, const char *section, pthread_mutex_lock(&config->mutex); - item = config_find_item(&config->defaults, section, name); + item = config_find_item(config->defaults, section, name); if (item) value = item->value; @@ -846,7 +820,7 @@ bool config_has_user_value(config_t *config, const char *section, { bool success; pthread_mutex_lock(&config->mutex); - success = config_find_item(&config->sections, section, name) != NULL; + success = config_find_item(config->sections, section, name) != NULL; pthread_mutex_unlock(&config->mutex); return success; } @@ -856,7 +830,7 @@ bool config_has_default_value(config_t *config, const char *section, { bool success; pthread_mutex_lock(&config->mutex); - success = config_find_item(&config->defaults, section, name) != NULL; + success = config_find_item(config->defaults, section, name) != NULL; pthread_mutex_unlock(&config->mutex); return success; } From 183fa8c06c9b269f1ea323cf33981e8fb75f252f Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 8 Feb 2023 12:07:11 +0100 Subject: [PATCH 0357/2225] libobs: Use uthash for translation lookup --- libobs/util/text-lookup.c | 198 ++++++-------------------------------- libobs/util/text-lookup.h | 4 +- 2 files changed, 32 insertions(+), 170 deletions(-) diff --git a/libobs/util/text-lookup.c b/libobs/util/text-lookup.c index 6fc144f78fcd10..7a74fb928c699c 100644 --- a/libobs/util/text-lookup.c +++ b/libobs/util/text-lookup.c @@ -15,166 +15,34 @@ */ #include + #include "dstr.h" #include "text-lookup.h" #include "lexer.h" #include "platform.h" +#include "uthash.h" /* ------------------------------------------------------------------------- */ -struct text_leaf { +struct text_item { char *lookup, *value; + UT_hash_handle hh; }; -static inline void text_leaf_destroy(struct text_leaf *leaf) -{ - if (leaf) { - bfree(leaf->lookup); - bfree(leaf->value); - bfree(leaf); - } -} - -/* ------------------------------------------------------------------------- */ - -struct text_node { - struct dstr str; - struct text_node *first_subnode; - struct text_leaf *leaf; - - struct text_node *next; -}; - -static void text_node_destroy(struct text_node *node) -{ - struct text_node *subnode; - - if (!node) - return; - - subnode = node->first_subnode; - while (subnode) { - struct text_node *destroy_node = subnode; - - subnode = subnode->next; - text_node_destroy(destroy_node); - } - - dstr_free(&node->str); - if (node->leaf) - text_leaf_destroy(node->leaf); - bfree(node); -} - -static struct text_node *text_node_bychar(struct text_node *node, char ch) -{ - struct text_node *subnode = node->first_subnode; - - while (subnode) { - if (!dstr_is_empty(&subnode->str) && - subnode->str.array[0] == ch) - return subnode; - - subnode = subnode->next; - } - - return NULL; -} - -static struct text_node *text_node_byname(struct text_node *node, - const char *name) +static inline void text_item_destroy(struct text_item *item) { - struct text_node *subnode = node->first_subnode; - - while (subnode) { - if (astrcmpi_n(subnode->str.array, name, subnode->str.len) == 0) - return subnode; - - subnode = subnode->next; - } - - return NULL; + bfree(item->lookup); + bfree(item->value); + bfree(item); } /* ------------------------------------------------------------------------- */ struct text_lookup { struct dstr language; - struct text_node *top; + struct text_item *items; }; -static void lookup_createsubnode(const char *lookup_val, struct text_leaf *leaf, - struct text_node *node) -{ - struct text_node *new = bzalloc(sizeof(struct text_node)); - new->leaf = leaf; - new->next = node->first_subnode; - dstr_copy(&new->str, lookup_val); - - node->first_subnode = new; -} - -static void lookup_splitnode(const char *lookup_val, size_t len, - struct text_leaf *leaf, struct text_node *node) -{ - struct text_node *split = bzalloc(sizeof(struct text_node)); - - dstr_copy(&split->str, node->str.array + len); - split->leaf = node->leaf; - split->first_subnode = node->first_subnode; - node->first_subnode = split; - - dstr_resize(&node->str, len); - - if (lookup_val[len] != 0) { - node->leaf = NULL; - lookup_createsubnode(lookup_val + len, leaf, node); - } else { - node->leaf = leaf; - } -} - -static inline void lookup_replaceleaf(struct text_node *node, - struct text_leaf *leaf) -{ - text_leaf_destroy(node->leaf); - node->leaf = leaf; -} - -static void lookup_addstring(const char *lookup_val, struct text_leaf *leaf, - struct text_node *node) -{ - struct text_node *child; - - /* value already exists, so replace */ - if (!lookup_val || !*lookup_val) { - lookup_replaceleaf(node, leaf); - return; - } - - child = text_node_bychar(node, *lookup_val); - if (child) { - size_t len; - - for (len = 0; len < child->str.len; len++) { - char val1 = child->str.array[len], - val2 = lookup_val[len]; - - if (val1 != val2) - break; - } - - if (len == child->str.len) { - lookup_addstring(lookup_val + len, leaf, child); - return; - } else { - lookup_splitnode(lookup_val, len, leaf, child); - } - } else { - lookup_createsubnode(lookup_val, leaf, node); - } -} - static void lookup_getstringtoken(struct lexer *lex, struct strref *token) { const char *temp = lex->offset; @@ -300,7 +168,8 @@ static void lookup_addfiledata(struct text_lookup *lookup, strref_clear(&value); while (lookup_gettoken(&lex, &name)) { - struct text_leaf *leaf; + struct text_item *item; + struct text_item *old; bool got_eq = false; if (*name.array == '\n') @@ -315,14 +184,14 @@ static void lookup_addfiledata(struct text_lookup *lookup, goto getval; } - leaf = bmalloc(sizeof(struct text_leaf)); - leaf->lookup = bstrdup_n(name.array, name.len); - leaf->value = convert_string(value.array, value.len); + item = bzalloc(sizeof(struct text_item)); + item->lookup = bstrdup_n(name.array, name.len); + item->value = convert_string(value.array, value.len); - for (size_t i = 0; i < name.len; i++) - leaf->lookup[i] = toupper(leaf->lookup[i]); + HASH_REPLACE_STR(lookup->items, lookup, item, old); - lookup_addstring(leaf->lookup, leaf, lookup->top); + if (old) + text_item_destroy(old); if (!lookup_goto_nextline(&lex)) break; @@ -332,27 +201,19 @@ static void lookup_addfiledata(struct text_lookup *lookup, } static inline bool lookup_getstring(const char *lookup_val, const char **out, - struct text_node *node) + struct text_lookup *lookup) { - struct text_node *child; - char ch; - - if (!node) - return false; + struct text_item *item; - child = text_node_byname(node, lookup_val); - if (!child) + if (!lookup->items) return false; - lookup_val += child->str.len; - ch = *lookup_val; - if (ch) - return lookup_getstring(lookup_val, out, child); + HASH_FIND_STR(lookup->items, lookup_val, item); - if (!child->leaf) + if (!item) return false; - *out = child->leaf->value; + *out = item->value; return true; } @@ -387,9 +248,6 @@ bool text_lookup_add(lookup_t *lookup, const char *path) if (!file_str.array) return false; - if (!lookup->top) - lookup->top = bzalloc(sizeof(struct text_node)); - dstr_replace(&file_str, "\r", " "); lookup_addfiledata(lookup, file_str.array); dstr_free(&file_str); @@ -400,9 +258,13 @@ bool text_lookup_add(lookup_t *lookup, const char *path) void text_lookup_destroy(lookup_t *lookup) { if (lookup) { - dstr_free(&lookup->language); - text_node_destroy(lookup->top); + struct text_item *item, *tmp; + HASH_ITER (hh, lookup->items, item, tmp) { + HASH_DELETE(hh, lookup->items, item); + text_item_destroy(item); + } + dstr_free(&lookup->language); bfree(lookup); } } @@ -411,6 +273,6 @@ bool text_lookup_getstr(lookup_t *lookup, const char *lookup_val, const char **out) { if (lookup) - return lookup_getstring(lookup_val, out, lookup->top); + return lookup_getstring(lookup_val, out, lookup); return false; } diff --git a/libobs/util/text-lookup.h b/libobs/util/text-lookup.h index f011618676b2dc..4042f75c6b677a 100644 --- a/libobs/util/text-lookup.h +++ b/libobs/util/text-lookup.h @@ -20,8 +20,8 @@ * Text Lookup interface * * Used for storing and looking up localized strings. Stores localization - * strings in a radix/trie tree to efficiently look up associated strings via a - * unique string identifier name. + * strings in a hashmap to efficiently look up associated strings via a + * unique string identifier name. */ #include "c99defs.h" From c68eeaef1df1bc7587f46311d714c02da07fd2dc Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Feb 2023 08:34:08 +0100 Subject: [PATCH 0358/2225] libobs: Use uthash for source objects All sources are part of a hash table that allows a lookup by UUID. Public sources additionally are in a hash table allowing lookup by name. --- docs/sphinx/reference-core.rst | 9 + libobs/obs-internal.h | 29 +++- libobs/obs-scene.c | 6 +- libobs/obs-source.c | 22 ++- libobs/obs-video.c | 4 +- libobs/obs.c | 303 ++++++++++++++++++++++++++++----- libobs/obs.h | 3 + 7 files changed, 322 insertions(+), 54 deletions(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index b6d0720e15c517..abc33ca30cc8e4 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -351,6 +351,15 @@ Libobs Objects --------------------- +.. function:: obs_source_t *obs_get_transition_by_uuid(const char *uuid) + + Gets a transition by its UUID. + + Increments the source reference counter, use + :c:func:`obs_source_release()` to release it when complete. + +--------------------- + .. function:: obs_scene_t *obs_get_scene_by_name(const char *name) Gets a scene by its name. diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 7a3bd799996fb7..c5b86dd4ca265f 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -25,6 +25,7 @@ #include "util/platform.h" #include "util/profiler.h" #include "util/task.h" +#include "util/uthash.h" #include "callback/signal.h" #include "callback/proc.h" @@ -39,6 +40,12 @@ #include +/* Custom helpers for the UUID hash table */ +#define HASH_FIND_UUID(head, uuid, out) \ + HASH_FIND(hh_uuid, head, uuid, UUID_STR_LENGTH, out) +#define HASH_ADD_UUID(head, uuid_field, add) \ + HASH_ADD(hh_uuid, head, uuid_field[0], UUID_STR_LENGTH, add) + #define NUM_TEXTURES 2 #define NUM_CHANNELS 3 #define MICROSECOND_DEN 1000000 @@ -372,7 +379,11 @@ struct obs_core_audio { /* user sources, output channels, and displays */ struct obs_core_data { - struct obs_source *first_source; + /* Hash tables (uthash) */ + struct obs_source *sources; /* Lookup by UUID (hh_uuid) */ + struct obs_source *public_sources; /* Lookup by name (hh) */ + + /* Linked lists */ struct obs_source *first_audio_source; struct obs_display *first_display; struct obs_output *first_output; @@ -541,6 +552,9 @@ struct obs_context_data { struct obs_context_data *next; struct obs_context_data **prev_next; + UT_hash_handle hh; + UT_hash_handle hh_uuid; + bool private; }; @@ -554,11 +568,24 @@ extern void obs_context_data_free(struct obs_context_data *context); extern void obs_context_data_insert(struct obs_context_data *context, pthread_mutex_t *mutex, void *first); +extern void obs_context_data_insert_name(struct obs_context_data *context, + pthread_mutex_t *mutex, void *first); +extern void obs_context_data_insert_uuid(struct obs_context_data *context, + pthread_mutex_t *mutex, + void *first_uuid); + extern void obs_context_data_remove(struct obs_context_data *context); +extern void obs_context_data_remove_name(struct obs_context_data *context, + void *phead); +extern void obs_context_data_remove_uuid(struct obs_context_data *context, + void *puuid_head); + extern void obs_context_wait(struct obs_context_data *context); extern void obs_context_data_setname(struct obs_context_data *context, const char *name); +extern void obs_context_data_setname_ht(struct obs_context_data *context, + const char *name, void *phead); /* ------------------------------------------------------------------------- */ /* ref-counting */ diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 9b40860824451c..594d997f6bd5d5 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -960,7 +960,7 @@ static void scene_load_item(struct obs_scene *scene, obs_data_t *item_data) { const char *name = obs_data_get_string(item_data, "name"); const char *src_uuid = obs_data_get_string(item_data, "source_uuid"); - obs_source_t *source; + obs_source_t *source = NULL; const char *scale_filter_str; const char *blend_method_str; const char *blend_str; @@ -973,7 +973,9 @@ static void scene_load_item(struct obs_scene *scene, obs_data_t *item_data) if (src_uuid && strlen(src_uuid) == UUID_STR_LENGTH) source = obs_get_source_by_uuid(src_uuid); - else + + /* Fall back to name if UUID was not found or is not set. */ + if (!source) source = obs_get_source_by_name(name); if (!source) { diff --git a/libobs/obs-source.c b/libobs/obs-source.c index f92d54f49abbf8..6b05402926b2ae 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -244,8 +244,13 @@ static void obs_source_init_finalize(struct obs_source *source) pthread_mutex_unlock(&obs->data.audio_sources_mutex); } - obs_context_data_insert(&source->context, &obs->data.sources_mutex, - &obs->data.first_source); + if (!source->context.private) { + obs_context_data_insert_name(&source->context, + &obs->data.sources_mutex, + &obs->data.public_sources); + } + obs_context_data_insert_uuid(&source->context, &obs->data.sources_mutex, + &obs->data.sources); } static bool obs_source_hotkey_mute(void *data, obs_hotkey_pair_id id, @@ -662,7 +667,10 @@ void obs_source_destroy(struct obs_source *source) while (source->filters.num) obs_source_filter_remove(source, source->filters.array[0]); - obs_context_data_remove(&source->context); + obs_context_data_remove_uuid(&source->context, &obs->data.sources); + if (!source->context.private) + obs_context_data_remove_name(&source->context, + &obs->data.public_sources); /* defer source destroy */ os_task_queue_queue_task(obs->destruction_task_thread, @@ -4259,7 +4267,13 @@ void obs_source_set_name(obs_source_t *source, const char *name) strcmp(name, source->context.name) != 0) { struct calldata data; char *prev_name = bstrdup(source->context.name); - obs_context_data_setname(&source->context, name); + + if (!source->context.private) { + obs_context_data_setname_ht(&source->context, name, + &obs->data.public_sources); + } else { + obs_context_data_setname(&source->context, name); + } calldata_init(&data); calldata_set_ptr(&data, "source", source); diff --git a/libobs/obs-video.c b/libobs/obs-video.c index ab66db3c5eeef5..0b922cb86b386b 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -60,7 +60,7 @@ static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time) pthread_mutex_lock(&data->sources_mutex); - source = data->first_source; + source = data->sources; while (source) { obs_source_t *s = obs_source_get_ref(source); @@ -69,7 +69,7 @@ static uint64_t tick_sources(uint64_t cur_time, uint64_t last_time) obs_source_release(s); } - source = (struct obs_source *)source->context.next; + source = (struct obs_source *)source->context.hh_uuid.next; } pthread_mutex_unlock(&data->sources_mutex); diff --git a/libobs/obs.c b/libobs/obs.c index 849f9001f1e5d0..d2017ee27f292b 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1000,6 +1000,8 @@ static bool obs_init_data(void) if (!obs_view_init(&data->main_view)) goto fail; + data->sources = NULL; + data->public_sources = NULL; data->private_data = obs_data_create(); data->valid = true; @@ -1019,6 +1021,20 @@ void obs_main_view_free(struct obs_view *view) pthread_mutex_destroy(&view->channels_mutex); } +#define FREE_OBS_HASH_TABLE(handle, table, type) \ + do { \ + struct obs_context_data *ctx, *tmp; \ + int unfreed = 0; \ + HASH_ITER (handle, *(struct obs_context_data **)table, ctx, \ + tmp) { \ + obs_##type##_destroy((obs_##type##_t *)ctx); \ + unfreed++; \ + } \ + if (unfreed) \ + blog(LOG_INFO, "\t%d " #type "(s) were remaining", \ + unfreed); \ + } while (false) + #define FREE_OBS_LINKED_LIST(type) \ do { \ int unfreed = 0; \ @@ -1042,12 +1058,14 @@ static void obs_free_data(void) blog(LOG_INFO, "Freeing OBS context data"); - FREE_OBS_LINKED_LIST(source); FREE_OBS_LINKED_LIST(output); FREE_OBS_LINKED_LIST(encoder); FREE_OBS_LINKED_LIST(display); FREE_OBS_LINKED_LIST(service); + FREE_OBS_HASH_TABLE(hh, &data->public_sources, source); + FREE_OBS_HASH_TABLE(hh_uuid, &data->sources, source); + os_task_queue_wait(obs->destruction_task_thread); pthread_mutex_destroy(&data->sources_mutex); @@ -1869,17 +1887,16 @@ void obs_enum_sources(bool (*enum_proc)(void *, obs_source_t *), void *param) obs_source_t *source; pthread_mutex_lock(&obs->data.sources_mutex); - source = obs->data.first_source; + source = obs->data.public_sources; while (source) { obs_source_t *s = obs_source_get_ref(source); if (s) { - if (strcmp(s->info.id, group_info.id) == 0 && + if (s->info.type == OBS_SOURCE_TYPE_INPUT && !enum_proc(param, s)) { obs_source_release(s); break; - } else if (s->info.type == OBS_SOURCE_TYPE_INPUT && - !s->context.private && + } else if (strcmp(s->info.id, group_info.id) == 0 && !enum_proc(param, s)) { obs_source_release(s); break; @@ -1887,7 +1904,7 @@ void obs_enum_sources(bool (*enum_proc)(void *, obs_source_t *), void *param) obs_source_release(s); } - source = (obs_source_t *)source->context.next; + source = (obs_source_t *)source->context.hh.next; } pthread_mutex_unlock(&obs->data.sources_mutex); @@ -1898,20 +1915,20 @@ void obs_enum_scenes(bool (*enum_proc)(void *, obs_source_t *), void *param) obs_source_t *source; pthread_mutex_lock(&obs->data.sources_mutex); - source = obs->data.first_source; + source = obs->data.public_sources; while (source) { obs_source_t *s = obs_source_get_ref(source); if (s) { if (source->info.type == OBS_SOURCE_TYPE_SCENE && - !source->context.private && !enum_proc(param, s)) { + !enum_proc(param, s)) { obs_source_release(s); break; } obs_source_release(s); } - source = (obs_source_t *)source->context.next; + source = (obs_source_t *)source->context.hh.next; } pthread_mutex_unlock(&obs->data.sources_mutex); @@ -1940,11 +1957,31 @@ static inline void obs_enum(void *pstart, pthread_mutex_t *mutex, void *proc, pthread_mutex_unlock(mutex); } +static inline void obs_enum_uuid(void *pstart, pthread_mutex_t *mutex, + void *proc, void *param) +{ + struct obs_context_data **start = pstart, *context, *tmp; + bool (*enum_proc)(void *, void *) = proc; + + assert(start); + assert(mutex); + assert(enum_proc); + + pthread_mutex_lock(mutex); + + HASH_ITER (hh_uuid, *start, context, tmp) { + if (!enum_proc(param, context)) + break; + } + + pthread_mutex_unlock(mutex); +} + void obs_enum_all_sources(bool (*enum_proc)(void *, obs_source_t *), void *param) { - obs_enum(&obs->data.first_source, &obs->data.sources_mutex, enum_proc, - param); + obs_enum_uuid(&obs->data.sources, &obs->data.sources_mutex, enum_proc, + param); } void obs_enum_outputs(bool (*enum_proc)(void *, obs_output_t *), void *param) @@ -1974,15 +2011,41 @@ static inline void *get_context_by_name(void *vfirst, const char *name, pthread_mutex_lock(mutex); - context = *first; - while (context) { - if (!context->private && strcmp(context->name, name) == 0) { - context = addref(context); - break; + /* If context list head has a hash table, look the name up in there */ + if (*first && (*first)->hh.tbl) { + HASH_FIND_STR(*first, name, context); + } else { + context = *first; + while (context) { + if (!context->private && + strcmp(context->name, name) == 0) { + break; + } + + context = context->next; } - context = context->next; } + if (context) + addref(context); + + pthread_mutex_unlock(mutex); + return context; +} + +static void *get_context_by_uuid(void *ptable, const char *uuid, + pthread_mutex_t *mutex, + void *(*addref)(void *)) +{ + struct obs_context_data **ht = ptable; + struct obs_context_data *context; + + pthread_mutex_lock(mutex); + + HASH_FIND_UUID(*ht, uuid, context); + if (context) + addref(context); + pthread_mutex_unlock(mutex); return context; } @@ -2014,38 +2077,27 @@ static inline void *obs_id_(void *data) obs_source_t *obs_get_source_by_name(const char *name) { - return get_context_by_name(&obs->data.first_source, name, + return get_context_by_name(&obs->data.public_sources, name, &obs->data.sources_mutex, obs_source_addref_safe_); } obs_source_t *obs_get_source_by_uuid(const char *uuid) { - struct obs_source **first = &obs->data.first_source; - struct obs_source *source; - - pthread_mutex_lock(&obs->data.sources_mutex); - - source = *first; - while (source) { - if (strcmp(source->context.uuid, uuid) == 0) { - source = obs_source_get_ref(source); - break; - } - source = (struct obs_source *)source->context.next; - } - - pthread_mutex_unlock(&obs->data.sources_mutex); - return source; + return get_context_by_uuid(&obs->data.sources, uuid, + &obs->data.sources_mutex, + obs_source_addref_safe_); } obs_source_t *obs_get_transition_by_name(const char *name) { - struct obs_source **first = &obs->data.first_source; + struct obs_source **first = &obs->data.sources; struct obs_source *source; pthread_mutex_lock(&obs->data.sources_mutex); + /* Transitions are private but can be found via this method, so we + * can't look them up by name in the public_sources hash table. */ source = *first; while (source) { if (source->info.type == OBS_SOURCE_TYPE_TRANSITION && @@ -2053,13 +2105,18 @@ obs_source_t *obs_get_transition_by_name(const char *name) source = obs_source_addref_safe_(source); break; } - source = (void *)source->context.next; + source = (void *)source->context.hh_uuid.next; } pthread_mutex_unlock(&obs->data.sources_mutex); return source; } +obs_source_t *obs_get_transition_by_uuid(const char *uuid) +{ + return obs_get_source_by_uuid(uuid); +} + obs_output_t *obs_get_output_by_name(const char *name) { return get_context_by_name(&obs->data.first_output, name, @@ -2503,19 +2560,19 @@ obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb, pthread_mutex_lock(&data->sources_mutex); - source = data->first_source; + source = data->public_sources; while (source) { if ((source->info.type != OBS_SOURCE_TYPE_FILTER) != 0 && - !source->context.private && !source->removed && - !source->temp_removed && cb(data_, source)) { + !source->removed && !source->temp_removed && + cb(data_, source)) { obs_data_t *source_data = obs_save_source(source); obs_data_array_push_back(array, source_data); obs_data_release(source_data); } - source = (obs_source_t *)source->context.next; + source = (obs_source_t *)source->context.hh.next; } pthread_mutex_unlock(&data->sources_mutex); @@ -2539,14 +2596,25 @@ void obs_reset_source_uuids() { pthread_mutex_lock(&obs->data.sources_mutex); - struct obs_source *source = obs->data.first_source; - while (source) { - bfree((void *)source->context.uuid); - source->context.uuid = os_generate_uuid(); + /* Move all sources to a new hash table */ + struct obs_context_data *ht = + (struct obs_context_data *)obs->data.sources; + struct obs_context_data *new_ht = NULL; + + struct obs_context_data *ctx, *tmp; + HASH_ITER (hh_uuid, ht, ctx, tmp) { + HASH_DELETE(hh_uuid, ht, ctx); - source = (struct obs_source *)source->context.next; + bfree((void *)ctx->uuid); + ctx->uuid = os_generate_uuid(); + + HASH_ADD_UUID(new_ht, uuid, ctx); } + /* The old table will be automatically freed once the last element has + * been removed, so we can simply overwrite the pointer. */ + obs->data.sources = (struct obs_source *)new_ht; + pthread_mutex_unlock(&obs->data.sources_mutex); } @@ -2662,6 +2730,91 @@ void obs_context_data_insert(struct obs_context_data *context, pthread_mutex_unlock(mutex); } +static inline char *obs_context_deduplicate_name(void *phash, const char *name) +{ + struct obs_context_data *head = phash; + struct obs_context_data *item = NULL; + + HASH_FIND_STR(head, name, item); + if (!item) + return NULL; + + struct dstr new_name = {0}; + int suffix = 2; + + while (item) { + dstr_printf(&new_name, "%s %d", name, suffix++); + HASH_FIND_STR(head, new_name.array, item); + } + + return new_name.array; +} + +void obs_context_data_insert_name(struct obs_context_data *context, + pthread_mutex_t *mutex, void *pfirst) +{ + struct obs_context_data **first = pfirst; + char *new_name; + + assert(context); + assert(mutex); + assert(first); + + context->mutex = mutex; + + pthread_mutex_lock(mutex); + + /* Ensure name is not a duplicate. */ + new_name = obs_context_deduplicate_name(*first, context->name); + if (new_name) { + blog(LOG_WARNING, + "Attempted to insert context with duplicate name \"%s\"!" + " Name has been changed to \"%s\"", + context->name, new_name); + /* Since this happens before the context creation finishes, + * do not bother to add it to the rename cache. */ + bfree(context->name); + context->name = new_name; + } + + HASH_ADD_STR(*first, name, context); + + pthread_mutex_unlock(mutex); +} + +void obs_context_data_insert_uuid(struct obs_context_data *context, + pthread_mutex_t *mutex, void *pfirst_uuid) +{ + struct obs_context_data **first_uuid = pfirst_uuid; + struct obs_context_data *item = NULL; + + assert(context); + assert(mutex); + assert(first_uuid); + + context->mutex = mutex; + + pthread_mutex_lock(mutex); + + /* Ensure UUID is not a duplicate. + * This should only ever happen if a scene collection file has been + * manually edited and an entry has been duplicated without removing + * or regenerating the UUID. */ + HASH_FIND_UUID(*first_uuid, context->uuid, item); + if (item) { + blog(LOG_WARNING, + "Attempted to insert context with duplicate UUID \"%s\"!", + context->uuid); + /* It is practically impossible for the new UUID to be a + * duplicate, so don't bother checking again. */ + bfree((void *)context->uuid); + context->uuid = os_generate_uuid(); + } + + HASH_ADD_UUID(*first_uuid, uuid, context); + pthread_mutex_unlock(mutex); +} + void obs_context_data_remove(struct obs_context_data *context) { if (context && context->prev_next) { @@ -2674,6 +2827,35 @@ void obs_context_data_remove(struct obs_context_data *context) } } +void obs_context_data_remove_name(struct obs_context_data *context, void *phead) +{ + struct obs_context_data **head = phead; + + assert(head); + + if (!context) + return; + + pthread_mutex_lock(context->mutex); + HASH_DELETE(hh, *head, context); + pthread_mutex_unlock(context->mutex); +} + +void obs_context_data_remove_uuid(struct obs_context_data *context, + void *puuid_head) +{ + struct obs_context_data **uuid_head = puuid_head; + + assert(uuid_head); + + if (!context || !context->uuid || !uuid_head) + return; + + pthread_mutex_lock(context->mutex); + HASH_DELETE(hh_uuid, *uuid_head, context); + pthread_mutex_unlock(context->mutex); +} + void obs_context_wait(struct obs_context_data *context) { pthread_mutex_lock(context->mutex); @@ -2692,6 +2874,37 @@ void obs_context_data_setname(struct obs_context_data *context, pthread_mutex_unlock(&context->rename_cache_mutex); } +void obs_context_data_setname_ht(struct obs_context_data *context, + const char *name, void *phead) +{ + struct obs_context_data **head = phead; + char *new_name; + + pthread_mutex_lock(context->mutex); + pthread_mutex_lock(&context->rename_cache_mutex); + + HASH_DEL(*head, context); + if (context->name) + da_push_back(context->rename_cache, &context->name); + + /* Ensure new name is not a duplicate. */ + new_name = obs_context_deduplicate_name(*head, name); + if (new_name) { + blog(LOG_WARNING, + "Attempted to rename context to duplicate name \"%s\"!" + " New name has been changed to \"%s\"", + context->name, new_name); + context->name = new_name; + } else { + context->name = dup_name(name, context->private); + } + + HASH_ADD_STR(*head, name, context); + + pthread_mutex_unlock(&context->rename_cache_mutex); + pthread_mutex_unlock(context->mutex); +} + profiler_name_store_t *obs_get_profiler_name_store(void) { return obs->name_store; diff --git a/libobs/obs.h b/libobs/obs.h index 60db9b4fabfb51..50d18c4914920d 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -708,6 +708,9 @@ EXPORT obs_source_t *obs_get_source_by_uuid(const char *uuid); /** Get a transition source by its name. */ EXPORT obs_source_t *obs_get_transition_by_name(const char *name); +/** Get a transition source by its UUID. */ +EXPORT obs_source_t *obs_get_transition_by_uuid(const char *uuid); + /** Gets an output by its name. */ EXPORT obs_output_t *obs_get_output_by_name(const char *name); From eff3cf134c284839f36b13c7d0f515a313995217 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Feb 2023 14:01:26 +0100 Subject: [PATCH 0359/2225] libobs: Use uthash for hotkey name map --- libobs/obs-hotkey-name-map.c | 342 ++++------------------------------- libobs/obs-internal.h | 4 +- 2 files changed, 33 insertions(+), 313 deletions(-) diff --git a/libobs/obs-hotkey-name-map.c b/libobs/obs-hotkey-name-map.c index a7e0683faf86b7..6ef6b36ad9ae53 100644 --- a/libobs/obs-hotkey-name-map.c +++ b/libobs/obs-hotkey-name-map.c @@ -20,305 +20,55 @@ #include #include -#include #include "obs-internal.h" -struct obs_hotkey_name_map_edge; -struct obs_hotkey_name_map_node; struct obs_hotkey_name_map; -typedef struct obs_hotkey_name_map_edge obs_hotkey_name_map_edge_t; -typedef struct obs_hotkey_name_map_node obs_hotkey_name_map_node_t; -typedef struct obs_hotkey_name_map obs_hotkey_name_map_t; +typedef struct obs_hotkey_name_map_item obs_hotkey_name_map_item_t; -struct obs_hotkey_name_map_node { - bool is_leaf; - union { - int val; - DARRAY(obs_hotkey_name_map_edge_t) children; - }; +struct obs_hotkey_name_map_item { + char *key; + int val; + UT_hash_handle hh; }; -struct obs_hotkey_name_map { - obs_hotkey_name_map_node_t root; - obs_hotkey_name_map_node_t *leaves; - size_t num_leaves; - size_t next_leaf; -}; - -struct obs_hotkey_name_map_edge_prefix { - uint8_t prefix_len; - char *prefix; -}; - -#define NAME_MAP_COMPRESS_LENGTH \ - (sizeof(struct obs_hotkey_name_map_edge_prefix) - sizeof(uint8_t)) - -struct obs_hotkey_name_map_edge { - union { - struct { - uint8_t prefix_len; - char *prefix; - }; - struct { - uint8_t compressed_len; - char compressed_prefix[NAME_MAP_COMPRESS_LENGTH]; - }; - }; - struct obs_hotkey_name_map_node *node; -}; - -static inline obs_hotkey_name_map_node_t *new_node(void) -{ - return bzalloc(sizeof(obs_hotkey_name_map_node_t)); -} - -static inline obs_hotkey_name_map_node_t *new_leaf(void) -{ - obs_hotkey_name_map_t *name_map = obs->hotkeys.name_map; - obs_hotkey_name_map_node_t *node = - &name_map->leaves[name_map->next_leaf]; - name_map->next_leaf += 1; - - node->is_leaf = true; - return node; -} - -static inline char *get_prefix(obs_hotkey_name_map_edge_t *e) -{ - return e->prefix_len >= NAME_MAP_COMPRESS_LENGTH ? e->prefix - : e->compressed_prefix; -} - -static void set_prefix(obs_hotkey_name_map_edge_t *e, const char *prefix, - size_t l) -{ - assert(e->prefix_len == 0); - - e->compressed_len = (uint8_t)l; - if (l < NAME_MAP_COMPRESS_LENGTH) - strncpy(e->compressed_prefix, prefix, l); - else - e->prefix = bstrdup_n(prefix, l); -} - -static obs_hotkey_name_map_edge_t *add_leaf(obs_hotkey_name_map_node_t *node, - const char *key, size_t l, int v) -{ - obs_hotkey_name_map_edge_t *e = da_push_back_new(node->children); - - set_prefix(e, key, l); - - e->node = new_leaf(); - e->node->val = v; - - return e; -} - -static void shrink_prefix(obs_hotkey_name_map_edge_t *e, size_t l) -{ - bool old_comp = e->prefix_len < NAME_MAP_COMPRESS_LENGTH; - bool new_comp = l < NAME_MAP_COMPRESS_LENGTH; - - char *str = get_prefix(e); - - e->prefix_len = (uint8_t)l; - if (get_prefix(e) != str) - strncpy(get_prefix(e), str, l); - else - str[l] = 0; - - if (!old_comp && new_comp) - bfree(str); -} - -static void connect(obs_hotkey_name_map_edge_t *e, - obs_hotkey_name_map_node_t *n) -{ - e->node = n; -} - -static void reduce_edge(obs_hotkey_name_map_edge_t *e, const char *key, - size_t l, int v) -{ - const char *str = get_prefix(e), *str_ = key; - size_t common_length = 0; - while (*str == *str_) { - common_length += 1; - str += 1; - str_ += 1; - } - - obs_hotkey_name_map_node_t *new_node_ = new_node(); - obs_hotkey_name_map_edge_t *tail = - da_push_back_new(new_node_->children); - - connect(tail, e->node); - set_prefix(tail, str, e->prefix_len - common_length); - - add_leaf(new_node_, str_, l - common_length, v); - - connect(e, new_node_); - shrink_prefix(e, common_length); -} - -enum obs_hotkey_name_map_edge_compare_result { - RES_MATCHES, - RES_NO_MATCH, - RES_COMMON_PREFIX, - RES_PREFIX_MATCHES, -}; - -static enum obs_hotkey_name_map_edge_compare_result -compare_prefix(obs_hotkey_name_map_edge_t *edge, const char *key, size_t l) -{ - uint8_t pref_len = edge->prefix_len; - const char *str = get_prefix(edge); - size_t i = 0; - - for (; i < l && i < pref_len; i++) - if (str[i] != key[i]) - break; - - if (i != 0 && pref_len == i) - return l == i ? RES_MATCHES : RES_PREFIX_MATCHES; - if (i != 0) - return pref_len == i ? RES_PREFIX_MATCHES : RES_COMMON_PREFIX; - return RES_NO_MATCH; -} - -static void insert(obs_hotkey_name_map_edge_t *edge, - obs_hotkey_name_map_node_t *node, const char *key, size_t l, - int v) +static void obs_hotkey_name_map_insert(obs_hotkey_name_map_item_t **hmap, + const char *key, int v) { - if (node->is_leaf && l > 0) { - obs_hotkey_name_map_node_t *new_node_ = new_node(); - connect(edge, new_node_); - - obs_hotkey_name_map_edge_t *edge = - da_push_back_new(new_node_->children); - connect(edge, node); - add_leaf(new_node_, key, l, v); + if (!hmap || !key) return; - } - if (node->is_leaf && l == 0) { - node->val = v; + obs_hotkey_name_map_item_t *t; + HASH_FIND_STR(*hmap, key, t); + if (t) return; - } - - for (size_t i = 0; i < node->children.num; i++) { - obs_hotkey_name_map_edge_t *e = &node->children.array[i]; - - switch (compare_prefix(e, key, l)) { - case RES_NO_MATCH: - continue; - - case RES_MATCHES: - case RES_PREFIX_MATCHES: - insert(e, e->node, key + e->prefix_len, - l - e->prefix_len, v); - return; - case RES_COMMON_PREFIX: - reduce_edge(e, key, l, v); - return; - } - } - - add_leaf(node, key, l, v); -} - -static void obs_hotkey_name_map_insert(obs_hotkey_name_map_t *trie, - const char *key, int v) -{ - if (!trie || !key) - return; + t = bzalloc(sizeof(obs_hotkey_name_map_item_t)); + t->key = bstrdup(key); + t->val = v; - insert(NULL, &trie->root, key, strlen(key), v); + HASH_ADD_STR(*hmap, key, t); } -static bool obs_hotkey_name_map_lookup(obs_hotkey_name_map_t *trie, +static bool obs_hotkey_name_map_lookup(obs_hotkey_name_map_item_t *hmap, const char *key, int *v) { - if (!trie || !key) + if (!hmap || !key) return false; - size_t len = strlen(key); - obs_hotkey_name_map_node_t *n = &trie->root; - - size_t i = 0; - for (; i < n->children.num;) { - obs_hotkey_name_map_edge_t *e = &n->children.array[i]; - - switch (compare_prefix(e, key, len)) { - case RES_NO_MATCH: - i++; - continue; - - case RES_COMMON_PREFIX: - return false; + obs_hotkey_name_map_item_t *elem; - case RES_PREFIX_MATCHES: - key += e->prefix_len; - len -= e->prefix_len; - n = e->node; - i = 0; - continue; + HASH_FIND_STR(hmap, key, elem); - case RES_MATCHES: - n = e->node; - if (!n->is_leaf) { - for (size_t j = 0; j < n->children.num; j++) { - if (n->children.array[j].prefix_len) - continue; - - if (v) - *v = n->children.array[j] - .node->val; - return true; - } - return false; - } - - if (v) - *v = n->val; - return true; - } + if (elem) { + *v = elem->val; + return true; } return false; } -static void show_node(obs_hotkey_name_map_node_t *node, int in) -{ - if (node->is_leaf) { - printf(": % 3d\n", node->val); - return; - } - - printf("\n"); - for (int i = 0; i < in; i += 2) - printf("| "); - printf("%lu:\n", (unsigned long)node->children.num); - - for (size_t i = 0; i < node->children.num; i++) { - for (int i = 0; i < in; i += 2) - printf("| "); - printf("\\ "); - - obs_hotkey_name_map_edge_t *e = &node->children.array[i]; - printf("%s", get_prefix(e)); - show_node(e->node, in + 2); - } -} - -void trie_print_size(obs_hotkey_name_map_t *trie) -{ - show_node(&trie->root, 0); -} - static const char *obs_key_names[] = { #define OBS_HOTKEY(x) #x, #include "obs-hotkeys.h" @@ -350,17 +100,7 @@ static obs_key_t obs_key_from_name_fallback(const char *name) static void init_name_map(void) { - obs->hotkeys.name_map = bzalloc(sizeof(struct obs_hotkey_name_map)); - obs_hotkey_name_map_t *name_map = obs->hotkeys.name_map; - -#define OBS_HOTKEY(x) name_map->num_leaves += 1; -#include "obs-hotkeys.h" -#undef OBS_HOTKEY - - size_t size = sizeof(obs_hotkey_name_map_node_t) * name_map->num_leaves; - name_map->leaves = bzalloc(size); - -#define OBS_HOTKEY(x) obs_hotkey_name_map_insert(name_map, #x, x); +#define OBS_HOTKEY(x) obs_hotkey_name_map_insert(&obs->hotkeys.name_map, #x, x); #include "obs-hotkeys.h" #undef OBS_HOTKEY } @@ -380,37 +120,17 @@ obs_key_t obs_key_from_name(const char *name) return OBS_KEY_NONE; } -static void free_node(obs_hotkey_name_map_node_t *node, bool release); - -static void free_edge(obs_hotkey_name_map_edge_t *edge) -{ - free_node(edge->node, true); - - if (edge->prefix_len < NAME_MAP_COMPRESS_LENGTH) - return; - - bfree(get_prefix(edge)); -} - -static void free_node(obs_hotkey_name_map_node_t *node, bool release) -{ - if (!node->is_leaf) { - for (size_t i = 0; i < node->children.num; i++) - free_edge(&node->children.array[i]); - - da_free(node->children); - } - - if (release && !node->is_leaf) - bfree(node); -} - void obs_hotkey_name_map_free(void) { if (!obs || !obs->hotkeys.name_map) return; - free_node(&obs->hotkeys.name_map->root, false); - bfree(obs->hotkeys.name_map->leaves); - bfree(obs->hotkeys.name_map); + obs_hotkey_name_map_item_t *root = obs->hotkeys.name_map; + obs_hotkey_name_map_item_t *n, *tmp; + + HASH_ITER (hh, root, n, tmp) { + HASH_DEL(root, n); + bfree(n->key); + bfree(n); + } } diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index c5b86dd4ca265f..82bebd495ecab6 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -193,7 +193,7 @@ struct obs_hotkey_binding { obs_hotkey_t *hotkey; }; -struct obs_hotkey_name_map; +struct obs_hotkey_name_map_item; void obs_hotkey_name_map_free(void); /* ------------------------------------------------------------------------- */ @@ -431,7 +431,7 @@ struct obs_core_hotkeys { obs_hotkeys_platform_t *platform_context; pthread_once_t name_map_init_token; - struct obs_hotkey_name_map *name_map; + struct obs_hotkey_name_map_item *name_map; signal_handler_t *signals; From 78aa4e03dca62c3e1439cae2eade1c6d247c8a78 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Feb 2023 16:15:41 +0100 Subject: [PATCH 0360/2225] libobs: Use uthash for properties --- libobs/obs-properties.c | 197 +++++++++++++++++----------------------- 1 file changed, 82 insertions(+), 115 deletions(-) diff --git a/libobs/obs-properties.c b/libobs/obs-properties.c index 397d93416bffaa..ab683ed1d5a14e 100644 --- a/libobs/obs-properties.c +++ b/libobs/obs-properties.c @@ -191,16 +191,16 @@ struct obs_property { obs_property_modified_t modified; obs_property_modified2_t modified2; - struct obs_property *next; + UT_hash_handle hh; }; struct obs_properties { void *param; void (*destroy)(void *param); uint32_t flags; + uint32_t groups; - struct obs_property *first_property; - struct obs_property **last; + struct obs_property *properties; struct obs_property *parent; }; @@ -208,7 +208,6 @@ obs_properties_t *obs_properties_create(void) { struct obs_properties *props; props = bzalloc(sizeof(struct obs_properties)); - props->last = &props->first_property; return props; } @@ -277,15 +276,14 @@ static void obs_property_destroy(struct obs_property *property) void obs_properties_destroy(obs_properties_t *props) { if (props) { - struct obs_property *p = props->first_property; + struct obs_property *p, *tmp; if (props->destroy && props->param) props->destroy(props->param); - while (p) { - struct obs_property *next = p->next; + HASH_ITER (hh, props->properties, p, tmp) { + HASH_DEL(props->properties, p); obs_property_destroy(p); - p = next; } bfree(props); @@ -294,31 +292,32 @@ void obs_properties_destroy(obs_properties_t *props) obs_property_t *obs_properties_first(obs_properties_t *props) { - return (props != NULL) ? props->first_property : NULL; + return (props != NULL) ? props->properties : NULL; } obs_property_t *obs_properties_get(obs_properties_t *props, const char *name) { - struct obs_property *property; + struct obs_property *property, *tmp; if (!props) return NULL; - property = props->first_property; - while (property) { - if (strcmp(property->name, name) == 0) - return property; - - if (property->type == OBS_PROPERTY_GROUP) { - obs_properties_t *group = - obs_property_group_content(property); - obs_property_t *found = obs_properties_get(group, name); - if (found != NULL) { - return found; - } - } + HASH_FIND_STR(props->properties, name, property); + if (property) + return property; + + if (!props->groups) + return NULL; - property = property->next; + /* Recursively check groups as well, if any */ + HASH_ITER (hh, props->properties, property, tmp) { + if (property->type != OBS_PROPERTY_GROUP) + continue; + + obs_properties_t *group = obs_property_group_content(property); + obs_property_t *found = obs_properties_get(group, name); + if (found) + return found; } return NULL; @@ -334,51 +333,29 @@ void obs_properties_remove_by_name(obs_properties_t *props, const char *name) if (!props) return; - /* obs_properties_t is a forward-linked-list, so we need to keep both - * previous and current pointers around. That way we can fix up the - * pointers for the previous element if we find a match. - */ - struct obs_property *cur = props->first_property; - struct obs_property *prev = props->first_property; - - while (cur) { - if (strcmp(cur->name, name) == 0) { - // Fix props->last pointer. - if (props->last == &cur->next) { - if (cur == prev) { - // If we are the last entry and there - // is no previous entry, reset. - props->last = &props->first_property; - } else { - // If we are the last entry and there - // is a previous entry, update. - props->last = &prev->next; - } - } - - // Fix props->first_property. - if (props->first_property == cur) - props->first_property = cur->next; - - // Update the previous element next pointer with our - // next pointer. This is an automatic no-op if both - // elements alias the same memory. - prev->next = cur->next; - - // Finally clear our own next pointer and destroy. - cur->next = NULL; - obs_property_destroy(cur); - - break; - } + struct obs_property *cur, *tmp; - if (cur->type == OBS_PROPERTY_GROUP) { - obs_properties_remove_by_name( - obs_property_group_content(cur), name); - } + HASH_FIND_STR(props->properties, name, cur); + + if (cur) { + HASH_DELETE(hh, props->properties, cur); + + if (cur->type == OBS_PROPERTY_GROUP) + props->groups--; + + obs_property_destroy(cur); + return; + } + + if (!props->groups) + return; + + HASH_ITER (hh, props->properties, cur, tmp) { + if (cur->type != OBS_PROPERTY_GROUP) + continue; - prev = cur; - cur = cur->next; + obs_properties_remove_by_name(obs_property_group_content(cur), + name); } } @@ -386,10 +363,9 @@ void obs_properties_apply_settings_internal(obs_properties_t *props, obs_data_t *settings, obs_properties_t *realprops) { - struct obs_property *p; + struct obs_property *p, *tmp; - p = props->first_property; - while (p) { + HASH_ITER (hh, props->properties, p, tmp) { if (p->type == OBS_PROPERTY_GROUP) { obs_properties_apply_settings_internal( obs_property_group_content(p), settings, @@ -399,7 +375,6 @@ void obs_properties_apply_settings_internal(obs_properties_t *props, p->modified(realprops, p, settings); else if (p->modified2) p->modified2(p->priv, realprops, p, settings); - p = p->next; } } @@ -414,13 +389,6 @@ void obs_properties_apply_settings(obs_properties_t *props, /* ------------------------------------------------------------------------- */ -static inline void propertes_add(struct obs_properties *props, - struct obs_property *p) -{ - *props->last = p; - props->last = &p->next; -} - static inline size_t get_property_size(enum obs_property_type type) { switch (type) { @@ -471,7 +439,8 @@ static inline struct obs_property *new_prop(struct obs_properties *props, p->type = type; p->name = bstrdup(name); p->desc = bstrdup(desc); - propertes_add(props, p); + + HASH_ADD_STR(props->properties, name, p); return p; } @@ -489,22 +458,22 @@ static inline obs_properties_t *get_topmost_parent(obs_properties_t *props) static inline bool contains_prop(struct obs_properties *props, const char *name) { - struct obs_property *p = props->first_property; + struct obs_property *p, *tmp; + HASH_FIND_STR(props->properties, name, p); - while (p) { - if (strcmp(p->name, name) == 0) { - blog(LOG_WARNING, "Property '%s' exists", name); - return true; - } + if (p) { + blog(LOG_WARNING, "Property '%s' exists", name); + return true; + } - if (p->type == OBS_PROPERTY_GROUP) { - if (contains_prop(obs_property_group_content(p), - name)) { - return true; - } - } + if (!props->groups) + return false; - p = p->next; + HASH_ITER (hh, props->properties, p, tmp) { + if (p->type != OBS_PROPERTY_GROUP) + continue; + if (contains_prop(obs_property_group_content(p), name)) + return true; } return false; @@ -753,24 +722,23 @@ static bool check_property_group_recursion(obs_properties_t *parent, obs_properties_t *group) { /* Scan the group for the parent. */ - obs_property_t *current_property = group->first_property; - while (current_property) { - if (current_property->type == OBS_PROPERTY_GROUP) { - obs_properties_t *cprops = - obs_property_group_content(current_property); - if (cprops == parent) { - /* Contains find_props */ - return true; - } else if (cprops == group) { - /* Contains self, shouldn't be possible but + obs_property_t *p, *tmp; + + HASH_ITER (hh, group->properties, p, tmp) { + if (p->type != OBS_PROPERTY_GROUP) + continue; + + obs_properties_t *cprops = obs_property_group_content(p); + if (cprops == parent) { + /* Contains find_props */ + return true; + } else if (cprops == group) { + /* Contains self, shouldn't be possible but * lets verify anyway. */ - return true; - } - if (check_property_group_recursion(parent, cprops)) - return true; + return true; } - - current_property = current_property->next; + if (check_property_group_recursion(parent, cprops)) + return true; } return false; @@ -779,13 +747,11 @@ static bool check_property_group_recursion(obs_properties_t *parent, static bool check_property_group_duplicates(obs_properties_t *parent, obs_properties_t *group) { - obs_property_t *current_property = group->first_property; - while (current_property) { - if (has_prop(parent, current_property->name)) { - return true; - } + obs_property_t *p, *tmp; - current_property = current_property->next; + HASH_ITER (hh, group->properties, p, tmp) { + if (has_prop(parent, p->name)) + return true; } return false; @@ -812,6 +778,7 @@ obs_property_t *obs_properties_add_group(obs_properties_t *props, return NULL; obs_property_t *p = new_prop(props, name, desc, OBS_PROPERTY_GROUP); + props->groups++; group->parent = p; struct group_data *data = get_property_data(p); @@ -849,7 +816,7 @@ bool obs_property_next(obs_property_t **p) if (!p || !*p) return false; - *p = (*p)->next; + *p = (*p)->hh.next; return *p != NULL; } From e6a7cff03471f6972968dc3a1cb1a340525e456d Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 11 Feb 2023 21:22:41 +0100 Subject: [PATCH 0361/2225] libobs: Use uthash for hotkeys and hotkey pairs --- libobs/obs-hotkey.c | 406 ++++++++++++++---------------------------- libobs/obs-internal.h | 8 +- libobs/obs.c | 3 +- 3 files changed, 139 insertions(+), 278 deletions(-) diff --git a/libobs/obs-hotkey.c b/libobs/obs-hotkey.c index 0ad3184369ea7d..d26c84dabfae51 100644 --- a/libobs/obs-hotkey.c +++ b/libobs/obs-hotkey.c @@ -19,6 +19,18 @@ #include "obs-internal.h" +/* Since ids are just sequential size_t integers, we don't really need a + * hash function to get an even distribution across buckets. + * (Realistically this should never wrap, who has 4.29 billion hotkeys?!) */ +#undef HASH_FUNCTION +#define HASH_FUNCTION(s, len, hashv) (hashv) = *s % UINT_MAX + +/* Custom definitions to make adding/looking up size_t integers easier */ +#define HASH_ADD_HKEY(head, idfield, add) \ + HASH_ADD(hh, head, idfield, sizeof(size_t), add) +#define HASH_FIND_HKEY(head, id, out) \ + HASH_FIND(hh, head, &(id), sizeof(size_t), out) + static inline bool lock(void) { if (!obs) @@ -79,60 +91,52 @@ obs_hotkey_t *obs_hotkey_binding_get_hotkey(obs_hotkey_binding_t *binding) return binding->hotkey; } -static inline bool find_id(obs_hotkey_id id, size_t *idx); void obs_hotkey_set_name(obs_hotkey_id id, const char *name) { - size_t idx; - - if (!find_id(id, &idx)) + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (!hotkey) return; - obs_hotkey_t *hotkey = &obs->hotkeys.hotkeys.array[idx]; bfree(hotkey->name); hotkey->name = bstrdup(name); } void obs_hotkey_set_description(obs_hotkey_id id, const char *desc) { - size_t idx; - - if (!find_id(id, &idx)) + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (!hotkey) return; - obs_hotkey_t *hotkey = &obs->hotkeys.hotkeys.array[idx]; bfree(hotkey->description); hotkey->description = bstrdup(desc); } -static inline bool find_pair_id(obs_hotkey_pair_id id, size_t *idx); void obs_hotkey_pair_set_names(obs_hotkey_pair_id id, const char *name0, const char *name1) { - size_t idx; - obs_hotkey_pair_t pair; + obs_hotkey_pair_t *pair; - if (!find_pair_id(id, &idx)) + HASH_FIND_HKEY(obs->hotkeys.hotkey_pairs, id, pair); + if (!pair) return; - pair = obs->hotkeys.hotkey_pairs.array[idx]; - - obs_hotkey_set_name(pair.id[0], name0); - obs_hotkey_set_name(pair.id[1], name1); + obs_hotkey_set_name(pair->id[0], name0); + obs_hotkey_set_name(pair->id[1], name1); } void obs_hotkey_pair_set_descriptions(obs_hotkey_pair_id id, const char *desc0, const char *desc1) { - size_t idx; - obs_hotkey_pair_t pair; + obs_hotkey_pair_t *pair; - if (!find_pair_id(id, &idx)) + HASH_FIND_HKEY(obs->hotkeys.hotkey_pairs, id, pair); + if (!pair) return; - pair = obs->hotkeys.hotkey_pairs.array[idx]; - - obs_hotkey_set_description(pair.id[0], desc0); - obs_hotkey_set_description(pair.id[1], desc1); + obs_hotkey_set_description(pair->id[0], desc0); + obs_hotkey_set_description(pair->id[1], desc1); } static void hotkey_signal(const char *signal, obs_hotkey_t *hotkey) @@ -146,7 +150,6 @@ static void hotkey_signal(const char *signal, obs_hotkey_t *hotkey) calldata_free(&data); } -static inline void fixup_pointers(void); static inline void load_bindings(obs_hotkey_t *hotkey, obs_data_array_t *data); static inline void context_add_hotkey(struct obs_context_data *context, @@ -164,9 +167,8 @@ obs_hotkey_register_internal(obs_hotkey_registerer_t type, void *registerer, if ((obs->hotkeys.next_id + 1) == OBS_INVALID_HOTKEY_ID) blog(LOG_WARNING, "obs-hotkey: Available hotkey ids exhausted"); - obs_hotkey_t *base_addr = obs->hotkeys.hotkeys.array; obs_hotkey_id result = obs->hotkeys.next_id++; - obs_hotkey_t *hotkey = da_push_back_new(obs->hotkeys.hotkeys); + obs_hotkey_t *hotkey = bzalloc(sizeof(obs_hotkey_t)); hotkey->id = result; hotkey->name = bstrdup(name); @@ -177,6 +179,8 @@ obs_hotkey_register_internal(obs_hotkey_registerer_t type, void *registerer, hotkey->registerer = registerer; hotkey->pair_partner_id = OBS_INVALID_HOTKEY_PAIR_ID; + HASH_ADD_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (context) { obs_data_array_t *data = obs_data_get_array(context->hotkey_data, name); @@ -186,9 +190,6 @@ obs_hotkey_register_internal(obs_hotkey_registerer_t type, void *registerer, context_add_hotkey(context, result); } - if (base_addr != obs->hotkeys.hotkeys.array) - fixup_pointers(); - hotkey_signal("hotkey_register", hotkey); return result; @@ -275,8 +276,6 @@ obs_hotkey_id obs_hotkey_register_source(obs_source_t *source, const char *name, return id; } -static inline void fixup_pair_pointers(void); - static obs_hotkey_pair_t *create_hotkey_pair(struct obs_context_data *context, obs_hotkey_active_func func0, obs_hotkey_active_func func1, @@ -286,8 +285,7 @@ static obs_hotkey_pair_t *create_hotkey_pair(struct obs_context_data *context, blog(LOG_WARNING, "obs-hotkey: Available hotkey pair ids " "exhausted"); - obs_hotkey_pair_t *base_addr = obs->hotkeys.hotkey_pairs.array; - obs_hotkey_pair_t *pair = da_push_back_new(obs->hotkeys.hotkey_pairs); + obs_hotkey_pair_t *pair = bzalloc(sizeof(obs_hotkey_pair_t)); pair->pair_id = obs->hotkeys.next_pair_id++; pair->func[0] = func0; @@ -297,12 +295,11 @@ static obs_hotkey_pair_t *create_hotkey_pair(struct obs_context_data *context, pair->data[0] = data0; pair->data[1] = data1; + HASH_ADD_HKEY(obs->hotkeys.hotkey_pairs, pair_id, pair); + if (context) da_push_back(context->hotkey_pairs, &pair->pair_id); - if (base_addr != obs->hotkeys.hotkey_pairs.array) - fixup_pair_pointers(); - return pair; } @@ -336,7 +333,6 @@ static void obs_hotkey_pair_second_func(void *data, obs_hotkey_id id, pair->pressed1 = pressed; } -static inline bool find_id(obs_hotkey_id id, size_t *idx); static obs_hotkey_pair_id register_hotkey_pair_internal( obs_hotkey_registerer_t type, void *registerer, void *(*weak_ref)(void *), struct obs_context_data *context, @@ -361,12 +357,14 @@ static obs_hotkey_pair_id register_hotkey_pair_internal( obs_hotkey_pair_second_func, pair); - size_t idx; - if (find_id(pair->id[0], &idx)) - obs->hotkeys.hotkeys.array[idx].pair_partner_id = pair->id[1]; + obs_hotkey_t *hotkey_1, *hotkey_2; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[0], hotkey_1); + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[1], hotkey_2); - if (find_id(pair->id[1], &idx)) - obs->hotkeys.hotkeys.array[idx].pair_partner_id = pair->id[0]; + if (hotkey_1) + hotkey_1->pair_partner_id = pair->id[1]; + if (hotkey_2) + hotkey_2->pair_partner_id = pair->id[0]; obs_hotkey_pair_id id = pair->pair_id; @@ -470,34 +468,6 @@ obs_hotkey_pair_id obs_hotkey_pair_register_source( func0, func1, data0, data1); } -typedef bool (*obs_hotkey_internal_enum_func)(void *data, size_t idx, - obs_hotkey_t *hotkey); - -static inline void enum_hotkeys(obs_hotkey_internal_enum_func func, void *data) -{ - const size_t num = obs->hotkeys.hotkeys.num; - obs_hotkey_t *array = obs->hotkeys.hotkeys.array; - for (size_t i = 0; i < num; i++) { - if (!func(data, i, &array[i])) - break; - } -} - -typedef bool (*obs_hotkey_pair_internal_enum_func)(size_t idx, - obs_hotkey_pair_t *pair, - void *data); - -static inline void enum_hotkey_pairs(obs_hotkey_pair_internal_enum_func func, - void *data) -{ - const size_t num = obs->hotkeys.hotkey_pairs.num; - obs_hotkey_pair_t *array = obs->hotkeys.hotkey_pairs.array; - for (size_t i = 0; i < num; i++) { - if (!func(i, &array[i], data)) - break; - } -} - typedef bool (*obs_hotkey_binding_internal_enum_func)( void *data, size_t idx, obs_hotkey_binding_t *binding); @@ -512,102 +482,7 @@ static inline void enum_bindings(obs_hotkey_binding_internal_enum_func func, } } -struct obs_hotkey_internal_find_forward { - obs_hotkey_id id; - bool found; - size_t idx; -}; - -static inline bool find_id_helper(void *data, size_t idx, obs_hotkey_t *hotkey) -{ - struct obs_hotkey_internal_find_forward *find = data; - if (hotkey->id != find->id) - return true; - - find->idx = idx; - find->found = true; - return false; -} - -static inline bool find_id(obs_hotkey_id id, size_t *idx) -{ - struct obs_hotkey_internal_find_forward find = {id, false, 0}; - enum_hotkeys(find_id_helper, &find); - *idx = find.idx; - return find.found; -} - -static inline bool pointer_fixup_func(void *data, size_t idx, - obs_hotkey_binding_t *binding) -{ - UNUSED_PARAMETER(idx); - UNUSED_PARAMETER(data); - - size_t idx_; - if (!find_id(binding->hotkey_id, &idx_)) { - bcrash("obs-hotkey: Could not find hotkey id '%" PRIuMAX "' " - "for binding '%s' (modifiers 0x%x)", - (uintmax_t)binding->hotkey_id, - obs_key_to_name(binding->key.key), - binding->key.modifiers); - binding->hotkey = NULL; - return true; - } - - binding->hotkey = &obs->hotkeys.hotkeys.array[idx_]; - - return true; -} - -static inline void fixup_pointers(void) -{ - enum_bindings(pointer_fixup_func, NULL); -} - -struct obs_hotkey_internal_find_pair_forward { - obs_hotkey_pair_id id; - bool found; - size_t idx; -}; - -static inline bool find_pair_id_helper(size_t idx, obs_hotkey_pair_t *pair, - void *data) -{ - struct obs_hotkey_internal_find_pair_forward *find = data; - if (pair->pair_id != find->id) - return true; - - find->idx = idx; - find->found = true; - return false; -} - -static inline bool find_pair_id(obs_hotkey_pair_id id, size_t *idx) -{ - struct obs_hotkey_internal_find_pair_forward find = {id, false, 0}; - enum_hotkey_pairs(find_pair_id_helper, &find); - *idx = find.idx; - return find.found; -} - -static inline bool pair_pointer_fixup_func(size_t idx, obs_hotkey_pair_t *pair, - void *data) -{ - UNUSED_PARAMETER(data); - - if (find_id(pair->id[0], &idx)) - obs->hotkeys.hotkeys.array[idx].data = pair; - - if (find_id(pair->id[1], &idx)) - obs->hotkeys.hotkeys.array[idx].data = pair; - - return true; -} - -static inline void fixup_pair_pointers(void) -{ - enum_hotkey_pairs(pair_pointer_fixup_func, NULL); -} +typedef bool (*obs_hotkey_internal_enum_func)(void *data, obs_hotkey_t *hotkey); static inline void enum_context_hotkeys(struct obs_context_data *context, obs_hotkey_internal_enum_func func, @@ -615,13 +490,13 @@ static inline void enum_context_hotkeys(struct obs_context_data *context, { const size_t num = context->hotkeys.num; const obs_hotkey_id *array = context->hotkeys.array; - obs_hotkey_t *hotkey_array = obs->hotkeys.hotkeys.array; + obs_hotkey_t *hotkey; + for (size_t i = 0; i < num; i++) { - size_t idx; - if (!find_id(array[i], &idx)) + HASH_FIND_HKEY(obs->hotkeys.hotkeys, array[i], hotkey); + if (!hotkey) continue; - - if (!func(data, idx, &hotkey_array[idx])) + if (!func(data, hotkey)) break; } } @@ -682,13 +557,12 @@ static inline void remove_bindings(obs_hotkey_id id); void obs_hotkey_load_bindings(obs_hotkey_id id, obs_key_combination_t *combinations, size_t num) { - size_t idx; - if (!lock()) return; - if (find_id(id, &idx)) { - obs_hotkey_t *hotkey = &obs->hotkeys.hotkeys.array[idx]; + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (hotkey) { remove_bindings(id); for (size_t i = 0; i < num; i++) create_binding(hotkey, combinations[i]); @@ -700,23 +574,20 @@ void obs_hotkey_load_bindings(obs_hotkey_id id, void obs_hotkey_load(obs_hotkey_id id, obs_data_array_t *data) { - size_t idx; - if (!lock()) return; - if (find_id(id, &idx)) { + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (hotkey) { remove_bindings(id); - load_bindings(&obs->hotkeys.hotkeys.array[idx], data); + load_bindings(hotkey, data); } unlock(); } -static inline bool enum_load_bindings(void *data, size_t idx, - obs_hotkey_t *hotkey) +static inline bool enum_load_bindings(void *data, obs_hotkey_t *hotkey) { - UNUSED_PARAMETER(idx); - obs_data_array_t *hotkey_data = obs_data_get_array(data, hotkey->name); if (!hotkey_data) return true; @@ -776,19 +647,22 @@ void obs_hotkey_pair_load(obs_hotkey_pair_id id, obs_data_array_t *data0, if ((!data0 && !data1) || !lock()) return; - size_t idx; - if (!find_pair_id(id, &idx)) + obs_hotkey_pair_t *pair; + HASH_FIND_HKEY(obs->hotkeys.hotkey_pairs, id, pair); + if (!pair) goto unlock; - obs_hotkey_pair_t *pair = &obs->hotkeys.hotkey_pairs.array[idx]; + obs_hotkey_t *p1, *p2; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[0], p1); + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[1], p2); - if (find_id(pair->id[0], &idx)) { + if (p1) { remove_bindings(pair->id[0]); - load_bindings(&obs->hotkeys.hotkeys.array[idx], data0); + load_bindings(p1, data0); } - if (find_id(pair->id[1], &idx)) { + if (p2) { remove_bindings(pair->id[1]); - load_bindings(&obs->hotkeys.hotkeys.array[idx], data1); + load_bindings(p2, data1); } unlock: @@ -845,14 +719,16 @@ static inline obs_data_array_t *save_hotkey(obs_hotkey_t *hotkey) obs_data_array_t *obs_hotkey_save(obs_hotkey_id id) { - size_t idx; obs_data_array_t *result = NULL; if (!lock()) return result; - if (find_id(id, &idx)) - result = save_hotkey(&obs->hotkeys.hotkeys.array[idx]); + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (hotkey) + result = save_hotkey(hotkey); + unlock(); return result; @@ -864,28 +740,29 @@ void obs_hotkey_pair_save(obs_hotkey_pair_id id, obs_data_array_t **p_data0, if ((!p_data0 && !p_data1) || !lock()) return; - size_t idx; - if (!find_pair_id(id, &idx)) + obs_hotkey_pair_t *pair; + HASH_FIND_HKEY(obs->hotkeys.hotkey_pairs, id, pair); + if (!pair) goto unlock; - obs_hotkey_pair_t *pair = &obs->hotkeys.hotkey_pairs.array[idx]; - - if (p_data0 && find_id(pair->id[0], &idx)) { - *p_data0 = save_hotkey(&obs->hotkeys.hotkeys.array[idx]); + obs_hotkey_t *hotkey; + if (p_data0) { + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[0], hotkey); + if (hotkey) + *p_data0 = save_hotkey(hotkey); } - if (p_data1 && find_id(pair->id[1], &idx)) { - *p_data1 = save_hotkey(&obs->hotkeys.hotkeys.array[idx]); + if (p_data1) { + HASH_FIND_HKEY(obs->hotkeys.hotkeys, pair->id[1], hotkey); + if (hotkey) + *p_data1 = save_hotkey(hotkey); } unlock: unlock(); } -static inline bool enum_save_hotkey(void *data, size_t idx, - obs_hotkey_t *hotkey) +static inline bool enum_save_hotkey(void *data, obs_hotkey_t *hotkey) { - UNUSED_PARAMETER(idx); - obs_data_array_t *hotkey_data = save_hotkey(hotkey); obs_data_set_array(data, hotkey->name, hotkey_data); obs_data_array_release(hotkey_data); @@ -1021,59 +898,55 @@ static void release_registerer(obs_hotkey_t *hotkey) hotkey->registerer = NULL; } -static inline bool unregister_hotkey(obs_hotkey_id id) +static inline void unregister_hotkey(obs_hotkey_id id) { if (id >= obs->hotkeys.next_id) - return false; + return; - size_t idx; - if (!find_id(id, &idx)) - return false; + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (!hotkey) + return; - obs_hotkey_t *hotkey = &obs->hotkeys.hotkeys.array[idx]; + HASH_DEL(obs->hotkeys.hotkeys, hotkey); hotkey_signal("hotkey_unregister", hotkey); release_registerer(hotkey); - bfree(hotkey->name); - bfree(hotkey->description); - if (hotkey->registerer_type == OBS_HOTKEY_REGISTERER_SOURCE) obs_weak_source_release(hotkey->registerer); - da_erase(obs->hotkeys.hotkeys, idx); - remove_bindings(id); + bfree(hotkey->name); + bfree(hotkey->description); + bfree(hotkey); - return obs->hotkeys.hotkeys.num >= idx; + remove_bindings(id); } -static inline bool unregister_hotkey_pair(obs_hotkey_pair_id id) +static inline void unregister_hotkey_pair(obs_hotkey_pair_id id) { if (id >= obs->hotkeys.next_pair_id) - return false; - - size_t idx; - if (!find_pair_id(id, &idx)) - return false; + return; - obs_hotkey_pair_t *pair = &obs->hotkeys.hotkey_pairs.array[idx]; + obs_hotkey_pair_t *pair; + HASH_FIND_HKEY(obs->hotkeys.hotkey_pairs, id, pair); + if (!pair) + return; - bool need_fixup = unregister_hotkey(pair->id[0]); - need_fixup = unregister_hotkey(pair->id[1]) || need_fixup; - if (need_fixup) - fixup_pointers(); + unregister_hotkey(pair->id[0]); + unregister_hotkey(pair->id[1]); - da_erase(obs->hotkeys.hotkey_pairs, idx); - return obs->hotkeys.hotkey_pairs.num >= idx; + HASH_DEL(obs->hotkeys.hotkey_pairs, pair); + bfree(pair); } void obs_hotkey_unregister(obs_hotkey_id id) { if (!lock()) return; - if (unregister_hotkey(id)) - fixup_pointers(); + + unregister_hotkey(id); unlock(); } @@ -1082,9 +955,7 @@ void obs_hotkey_pair_unregister(obs_hotkey_pair_id id) if (!lock()) return; - if (unregister_hotkey_pair(id)) - fixup_pair_pointers(); - + unregister_hotkey_pair(id); unlock(); } @@ -1093,13 +964,8 @@ static void context_release_hotkeys(struct obs_context_data *context) if (!context->hotkeys.num) goto cleanup; - bool need_fixup = false; for (size_t i = 0; i < context->hotkeys.num; i++) - need_fixup = unregister_hotkey(context->hotkeys.array[i]) || - need_fixup; - - if (need_fixup) - fixup_pointers(); + unregister_hotkey(context->hotkeys.array[i]); cleanup: da_free(context->hotkeys); @@ -1110,14 +976,8 @@ static void context_release_hotkey_pairs(struct obs_context_data *context) if (!context->hotkey_pairs.num) goto cleanup; - bool need_fixup = false; for (size_t i = 0; i < context->hotkey_pairs.num; i++) - need_fixup = unregister_hotkey_pair( - context->hotkey_pairs.array[i]) || - need_fixup; - - if (need_fixup) - fixup_pair_pointers(); + unregister_hotkey_pair(context->hotkey_pairs.array[i]); cleanup: da_free(context->hotkey_pairs); @@ -1137,17 +997,22 @@ void obs_hotkeys_context_release(struct obs_context_data *context) void obs_hotkeys_free(void) { - const size_t num = obs->hotkeys.hotkeys.num; - obs_hotkey_t *hotkeys = obs->hotkeys.hotkeys.array; - for (size_t i = 0; i < num; i++) { - bfree(hotkeys[i].name); - bfree(hotkeys[i].description); + obs_hotkey_t *hotkey, *tmp; + HASH_ITER (hh, obs->hotkeys.hotkeys, hotkey, tmp) { + HASH_DEL(obs->hotkeys.hotkeys, hotkey); + bfree(hotkey->name); + bfree(hotkey->description); + release_registerer(hotkey); + bfree(hotkey); + } - release_registerer(&hotkeys[i]); + obs_hotkey_pair_t *pair, *tmp2; + HASH_ITER (hh, obs->hotkeys.hotkey_pairs, pair, tmp2) { + HASH_DEL(obs->hotkeys.hotkey_pairs, pair); + bfree(pair); } + da_free(obs->hotkeys.bindings); - da_free(obs->hotkeys.hotkeys); - da_free(obs->hotkeys.hotkey_pairs); for (size_t i = 0; i < OBS_KEY_LAST_VALUE; i++) { if (obs->hotkeys.translations[i]) { @@ -1157,26 +1022,17 @@ void obs_hotkeys_free(void) } } -struct obs_hotkey_internal_enum_forward { - obs_hotkey_enum_func func; - void *data; -}; - -static inline bool enum_hotkey(void *data, size_t idx, obs_hotkey_t *hotkey) -{ - UNUSED_PARAMETER(idx); - - struct obs_hotkey_internal_enum_forward *forward = data; - return forward->func(forward->data, hotkey->id, hotkey); -} - void obs_enum_hotkeys(obs_hotkey_enum_func func, void *data) { - struct obs_hotkey_internal_enum_forward forwarder = {func, data}; if (!lock()) return; - enum_hotkeys(enum_hotkey, &forwarder); + obs_hotkey_t *hk, *tmp; + HASH_ITER (hh, obs->hotkeys.hotkeys, hk, tmp) { + if (!func(data, hk->id, hk)) + break; + } + unlock(); } @@ -1409,11 +1265,11 @@ void obs_hotkey_trigger_routed_callback(obs_hotkey_id id, bool pressed) if (!obs->hotkeys.reroute_hotkeys) goto unlock; - size_t idx; - if (!find_id(id, &idx)) + obs_hotkey_t *hotkey; + HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); + if (!hotkey) goto unlock; - obs_hotkey_t *hotkey = &obs->hotkeys.hotkeys.array[idx]; hotkey->func(hotkey->data, id, hotkey, pressed); unlock: diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 82bebd495ecab6..f6a3835501998c 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -154,6 +154,8 @@ struct obs_hotkey { void *registerer; obs_hotkey_id pair_partner_id; + + UT_hash_handle hh; }; struct obs_hotkey_pair { @@ -163,6 +165,8 @@ struct obs_hotkey_pair { bool pressed0; bool pressed1; void *data[2]; + + UT_hash_handle hh; }; typedef struct obs_hotkey_pair obs_hotkey_pair_t; @@ -412,9 +416,9 @@ struct obs_core_data { /* user hotkeys */ struct obs_core_hotkeys { pthread_mutex_t mutex; - DARRAY(obs_hotkey_t) hotkeys; + obs_hotkey_t *hotkeys; obs_hotkey_id next_id; - DARRAY(obs_hotkey_pair_t) hotkey_pairs; + obs_hotkey_pair_t *hotkey_pairs; obs_hotkey_pair_id next_pair_id; pthread_t hotkey_thread; diff --git a/libobs/obs.c b/libobs/obs.c index d2017ee27f292b..cb17d5d8840832 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1132,7 +1132,8 @@ static inline bool obs_init_hotkeys(void) assert(hotkeys != NULL); - da_init(hotkeys->hotkeys); + hotkeys->hotkeys = NULL; + hotkeys->hotkey_pairs = NULL; hotkeys->signals = obs->signals; hotkeys->name_map_init_token = obs_pthread_once_init_token; hotkeys->mute = bstrdup("Mute"); From a41c616b218bf75e2c4cb4d6a59117abf78e4adf Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 11 Feb 2023 21:38:21 +0100 Subject: [PATCH 0362/2225] libobs: Do not send hotkey_bindings_changed if nothing changed --- libobs/obs-hotkey.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libobs/obs-hotkey.c b/libobs/obs-hotkey.c index d26c84dabfae51..48f47e102c90bc 100644 --- a/libobs/obs-hotkey.c +++ b/libobs/obs-hotkey.c @@ -549,10 +549,11 @@ static inline void load_bindings(obs_hotkey_t *hotkey, obs_data_array_t *data) obs_data_release(item); } - hotkey_signal("hotkey_bindings_changed", hotkey); + if (count) + hotkey_signal("hotkey_bindings_changed", hotkey); } -static inline void remove_bindings(obs_hotkey_id id); +static inline bool remove_bindings(obs_hotkey_id id); void obs_hotkey_load_bindings(obs_hotkey_id id, obs_key_combination_t *combinations, size_t num) @@ -563,12 +564,14 @@ void obs_hotkey_load_bindings(obs_hotkey_id id, obs_hotkey_t *hotkey; HASH_FIND_HKEY(obs->hotkeys.hotkeys, id, hotkey); if (hotkey) { - remove_bindings(id); + bool changed = remove_bindings(id); for (size_t i = 0; i < num; i++) create_binding(hotkey, combinations[i]); - hotkey_signal("hotkey_bindings_changed", hotkey); + if (num || changed) + hotkey_signal("hotkey_bindings_changed", hotkey); } + unlock(); } @@ -858,8 +861,9 @@ static inline bool find_binding(obs_hotkey_id id, size_t *idx) static inline void release_pressed_binding(obs_hotkey_binding_t *binding); -static inline void remove_bindings(obs_hotkey_id id) +static inline bool remove_bindings(obs_hotkey_id id) { + bool removed = false; size_t idx; while (find_binding(id, &idx)) { obs_hotkey_binding_t *binding = @@ -869,7 +873,10 @@ static inline void remove_bindings(obs_hotkey_id id) release_pressed_binding(binding); da_erase(obs->hotkeys.bindings, idx); + removed = true; } + + return removed; } static void release_registerer(obs_hotkey_t *hotkey) From 13040ad24173a3ea3d04cb0cddd0a12f159ab7af Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 9 Feb 2023 14:21:18 +0100 Subject: [PATCH 0363/2225] obs-ffmpeg: Fix translation key capitalisation --- plugins/obs-ffmpeg/obs-ffmpeg-source.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-source.c b/plugins/obs-ffmpeg/obs-ffmpeg-source.c index 7758b944dba1a7..20ae1ef806e74e 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-source.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-source.c @@ -487,7 +487,7 @@ static void ffmpeg_source_update(void *data, obs_data_t *settings) static const char *ffmpeg_source_getname(void *unused) { UNUSED_PARAMETER(unused); - return obs_module_text("FFMpegSource"); + return obs_module_text("FFmpegSource"); } static void restart_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, From c971e0ead3d66874bf7af860e6ca5c9cf9a73522 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 10 Feb 2023 12:42:34 +0100 Subject: [PATCH 0364/2225] UI: Fix capitalisation of SysTrayEnabled --- UI/window-basic-main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 280309652b48f7..a5dad5b1f5284b 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1990,7 +1990,7 @@ void OBSBasic::OBSInit() /* Show the main window, unless the tray icon isn't available * or neither the setting nor flag for starting minimized is set. */ bool sysTrayEnabled = config_get_bool(App()->GlobalConfig(), - "BasicWindow", "sysTrayEnabled"); + "BasicWindow", "SysTrayEnabled"); bool sysTrayWhenStarted = config_get_bool( App()->GlobalConfig(), "BasicWindow", "SysTrayWhenStarted"); bool hideWindowOnStart = QSystemTrayIcon::isSystemTrayAvailable() && From 3eab477211daf8845adeb7026d8e4dce9cef420c Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 18 Mar 2023 11:05:17 +0100 Subject: [PATCH 0365/2225] flatpak: Use Github mirror for nv-codec-headers git.videolan.org repo seems to be inconsitent. --- CI/flatpak/com.obsproject.Studio.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json index cf79328f6de5bf..f8ceac08b6482c 100644 --- a/CI/flatpak/com.obsproject.Studio.json +++ b/CI/flatpak/com.obsproject.Studio.json @@ -96,7 +96,7 @@ "sources": [ { "type": "git", - "url": "https://git.videolan.org/git/ffmpeg/nv-codec-headers.git", + "url": "https://github.com/FFmpeg/nv-codec-headers.git", "tag": "n11.1.5.1", "commit": "84483da70d903239d4536763fde8c7e6c4e80784" } From 7e9b071a6c4443772085dacdbc0c6cd5e31adbcc Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Sat, 18 Mar 2023 13:31:42 +0100 Subject: [PATCH 0366/2225] obs-ffmpeg: Add GeForce MX450 variant to unsupported NVENC list --- plugins/obs-ffmpeg/obs-ffmpeg.c | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index aeb586d20871f7..6b2fab6c4fd8ef 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -95,6 +95,7 @@ static const int blacklisted_adapters[] = { 0x1c94, // GP107 [GeForce MX350] 0x1c96, // GP107 [GeForce MX350] 0x1f97, // TU117 [GeForce MX450] + 0x1f98, // TU117 [GeForce MX450] 0x137b, // GM108GLM [Quadro M520 Mobile] 0x1d33, // GP108GLM [Quadro P500 Mobile] 0x137a, // GM108GLM [Quadro K620M / Quadro M500M] From 6181325ed926ee2b226a087ba6aa9794de89a028 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 12 Mar 2023 18:00:01 +0100 Subject: [PATCH 0367/2225] flatpak: Add missing CMAKE_BUILD_TYPE CMake defaults to a type commonly named "None". Setting the type to "Release" is required to have optimization flags applied. --- CI/flatpak/com.obsproject.Studio.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json index f8ceac08b6482c..b94107fe095efa 100644 --- a/CI/flatpak/com.obsproject.Studio.json +++ b/CI/flatpak/com.obsproject.Studio.json @@ -106,6 +106,7 @@ "name": "srt", "buildsystem": "cmake-ninja", "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", "-DENABLE_STATIC=OFF", "-DENABLE_APPS=OFF", "-DENABLE_LOGGING=OFF" @@ -389,6 +390,7 @@ "buildsystem": "cmake-ninja", "builddir": true, "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", "-DJANSSON_EXAMPLES=OFF", "-DJANSSON_BUILD_DOCS=OFF", "-DJANSSON_BUILD_SHARED_LIBS=ON", @@ -410,6 +412,9 @@ { "name": "cef", "buildsystem": "cmake-ninja", + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release" + ], "no-make-install": true, "make-args": [ "libcef_dll_wrapper" From 3d5c4ff56eaeccd12295eda84f88503fabc49297 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Mon, 13 Mar 2023 09:29:28 +0900 Subject: [PATCH 0368/2225] UI: Remove empty clause --- UI/platform-osx.mm | 3 --- 1 file changed, 3 deletions(-) diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index a5f36ebf269d41..b7a0154c09e97d 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -333,9 +333,6 @@ MacPermissionStatus CheckPermissionWithPrompt(MacPermissionType type, if (stream) { permissionResponse = kPermissionAuthorized; CFRelease(stream); - - if (prompt_for_permission) { - } } else { permissionResponse = kPermissionDenied; } From b742938a6fcca91f21eba531df2a0eb48d448b95 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Mon, 13 Mar 2023 09:30:31 +0900 Subject: [PATCH 0369/2225] aja: Remove an empty clause Remove an `if` statement that test a variable `rd`, which is an `enum class RasterDefinition` type . --- plugins/aja/aja-common.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/aja/aja-common.cpp b/plugins/aja/aja-common.cpp index 486234d7f393d9..b4a77c03547697 100644 --- a/plugins/aja/aja-common.cpp +++ b/plugins/aja/aja-common.cpp @@ -1174,7 +1174,6 @@ VPIDStandard DetermineVPIDStandard(IOSelection io, NTV2VideoFormat vf, } } } - } else if (rd == RasterDefinition::UHD2_8K) { } return vpid; } From 8938aeebfaab3ce717637cfa83412d88913ebf10 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Mon, 13 Mar 2023 09:32:17 +0900 Subject: [PATCH 0370/2225] obs-ffmpeg: Remove an empty clause The empty clause was originally introduced to set a cutoff settings as a hack at a commit ae862c16a and later removed at a commit a89470d2e. At this time, the clause became empty but another commit aa58b9cf5 reuse the clause and finally a commit 9baedb1c6 removes so that the clause is empty now. --- plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index a8347e64f178ce..2562a63f1a886c 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -263,9 +263,6 @@ static void *enc_create(obs_data_t *settings, obs_encoder_t *encoder, enc->context->sample_rate = closest; } - if (strcmp(enc->codec->name, "aac") == 0) { - } - #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 24, 100) info("bitrate: %" PRId64 ", channels: %d, channel_layout: %x\n", (int64_t)enc->context->bit_rate / 1000, From 5aecbebc98e3076534c519ed01a8bc9601796e7b Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 14 Mar 2023 21:24:24 +0100 Subject: [PATCH 0371/2225] obs-outputs: Remove Windows 7 sndbuf auto-tuning check --- plugins/obs-outputs/rtmp-stream.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 0d82c8c8ab0f62..479e3fc48168b8 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -609,24 +609,6 @@ static void *send_thread(void *data) os_set_thread_name("rtmp-stream: send_thread"); #if defined(_WIN32) - // Despite MSDN claiming otherwise, send buffer auto tuning on - // Windows 7 doesn't seem to work very well. - if (get_win_ver_int() == 0x601) { - DWORD cur_sendbuf_size; - DWORD desired_sendbuf_size = 524288; - socklen_t int_size = sizeof(int); - - if (!getsockopt(stream->rtmp.m_sb.sb_socket, SOL_SOCKET, - SO_SNDBUF, (char *)&cur_sendbuf_size, - &int_size) && - cur_sendbuf_size < desired_sendbuf_size) { - - setsockopt(stream->rtmp.m_sb.sb_socket, SOL_SOCKET, - SO_SNDBUF, (char *)&desired_sendbuf_size, - sizeof(desired_sendbuf_size)); - } - } - log_sndbuf_size(stream); #endif From 5083c2a2e2caa0e7355cad954b03382301028e23 Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 14 Mar 2023 21:24:46 +0100 Subject: [PATCH 0372/2225] UI: Remove Windows 7 browser hwaccel check --- UI/obs-app.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index e4e504efabe27b..73b826a84cfc66 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -500,12 +500,10 @@ bool OBSApp::InitGlobalConfigDefaults() "MultiviewDrawAreas", true); #ifdef _WIN32 - uint32_t winver = GetWindowsVersion(); - config_set_default_bool(globalConfig, "Audio", "DisableAudioDucking", true); config_set_default_bool(globalConfig, "General", "BrowserHWAccel", - winver > 0x601); + true); #endif #ifdef __APPLE__ From 09b6786f1a6082acf3164c86086a6410f5ce661d Mon Sep 17 00:00:00 2001 From: derrod Date: Tue, 14 Mar 2023 21:35:48 +0100 Subject: [PATCH 0373/2225] UI: Add Help menu action to show What's New dialog --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasic.ui | 6 ++++++ UI/window-basic-main.cpp | 24 ++++++++++++++++++++++++ UI/window-basic-main.hpp | 1 + 4 files changed, 32 insertions(+) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 3db11a46a89940..cc32edf6ebbe47 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -819,6 +819,7 @@ Basic.MainMenu.Help="&Help" Basic.MainMenu.Help.HelpPortal="Help &Portal" Basic.MainMenu.Help.Website="Visit &Website" Basic.MainMenu.Help.Discord="Join &Discord Server" +Basic.MainMenu.Help.WhatsNew="What's New" Basic.MainMenu.Help.Logs="&Log Files" Basic.MainMenu.Help.Logs.ShowLogs="&Show Log Files" Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload &Current Log File" diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui index d3b35fccd64513..55af294c60ca51 100644 --- a/UI/forms/OBSBasic.ui +++ b/UI/forms/OBSBasic.ui @@ -532,6 +532,7 @@ + @@ -2201,6 +2202,11 @@ Basic.MainMenu.Help.Discord + + + Basic.MainMenu.Help.WhatsNew + + Basic.MainMenu.Help.About diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 280309652b48f7..e9a4165cf47ea2 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2176,6 +2176,11 @@ void OBSBasic::OBSInit() } #endif +#ifndef WHATSNEW_ENABLED + delete ui->actionShowWhatsNew; + ui->actionShowWhatsNew = nullptr; +#endif + UpdatePreviewProgramIndicators(); OnFirstLoad(); @@ -7964,6 +7969,25 @@ void OBSBasic::on_actionDiscord_triggered() QDesktopServices::openUrl(url); } +void OBSBasic::on_actionShowWhatsNew_triggered() +{ +#ifdef WHATSNEW_ENABLED + if (introCheckThread && introCheckThread->isRunning()) + return; + if (!cef) + return; + + config_set_int(App()->GlobalConfig(), "General", "InfoIncrement", -1); + + WhatsNewInfoThread *wnit = new WhatsNewInfoThread(); + connect(wnit, &WhatsNewInfoThread::Result, this, + &OBSBasic::ReceivedIntroJson, Qt::QueuedConnection); + + introCheckThread.reset(wnit); + introCheckThread->start(); +#endif +} + void OBSBasic::on_actionShowSettingsFolder_triggered() { char path[512]; diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index ddbf803ef257c6..16541aa749d27c 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -1034,6 +1034,7 @@ private slots: void on_actionViewCurrentLog_triggered(); void on_actionCheckForUpdates_triggered(); void on_actionRepair_triggered(); + void on_actionShowWhatsNew_triggered(); void on_actionShowCrashLogs_triggered(); void on_actionUploadLastCrashLog_triggered(); From e305b0f1720e116c7d710842e129b851b53c08f0 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Wed, 15 Mar 2023 21:06:33 +0100 Subject: [PATCH 0374/2225] UI: Add old Vtuber Maker versions to DLL blocklist This DLL is based on Unity Capture and suffers from the same deadlock bug as many similar filters. A fixed version was released on 2023-03-14. https://store.steampowered.com/news/app/1368950/view/3674412925835790027 --- UI/win-dll-blocklist.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/UI/win-dll-blocklist.c b/UI/win-dll-blocklist.c index 9baaef7ab31c50..cc59c231a41827 100644 --- a/UI/win-dll-blocklist.c +++ b/UI/win-dll-blocklist.c @@ -157,6 +157,13 @@ static blocked_module_t blocked_modules[] = { // VSeeFace capture filter < v1.13.38b3 without above fix implemented {L"\\vseefacecamera64bit.dll", 0, 1666993098, TS_LESS_THAN}, + + // VTuber Maker capture filter < 2023-03-13 without above fix implemented + {L"\\live3dvirtualcam\\lib64_new2.dll", 0, 1678695956, TS_LESS_THAN}, + + // Obsolete unfixed versions of VTuber Maker capture filter + {L"\\live3dvirtualcam\\lib64_new.dll", 0, 0, TS_IGNORE}, + {L"\\live3dvirtualcam\\lib64.dll", 0, 0, TS_IGNORE}, }; static bool is_module_blocked(wchar_t *dll, uint32_t timestamp) From a0905d3972b7d01f803f00f2135cd94b5245323b Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 15 Mar 2023 21:57:32 +0100 Subject: [PATCH 0375/2225] obs-outputs,UI: Disable Windows-only options on non-Windows "New Socket Loop" and "Low Latency Mode" RTMP options are only available on Windows. Those options should be ignored and forced-disabled on non-Windows builds. --- UI/window-basic-main-outputs.cpp | 8 ++++++++ plugins/obs-outputs/rtmp-stream.c | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 2a20e4e070ba8f..8a78d3240a45a7 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1056,19 +1056,23 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) config_get_bool(main->Config(), "Output", "DelayPreserve"); const char *bindIP = config_get_string(main->Config(), "Output", "BindIP"); +#ifdef _WIN32 bool enableNewSocketLoop = config_get_bool(main->Config(), "Output", "NewSocketLoopEnable"); bool enableLowLatencyMode = config_get_bool(main->Config(), "Output", "LowLatencyEnable"); +#endif bool enableDynBitrate = config_get_bool(main->Config(), "Output", "DynamicBitrate"); OBSDataAutoRelease settings = obs_data_create(); obs_data_set_string(settings, "bind_ip", bindIP); +#ifdef _WIN32 obs_data_set_bool(settings, "new_socket_loop_enabled", enableNewSocketLoop); obs_data_set_bool(settings, "low_latency_mode_enabled", enableLowLatencyMode); +#endif obs_data_set_bool(settings, "dyn_bitrate", enableDynBitrate); obs_output_update(streamOutput, settings); @@ -1995,19 +1999,23 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service) config_get_bool(main->Config(), "Output", "DelayPreserve"); const char *bindIP = config_get_string(main->Config(), "Output", "BindIP"); +#ifdef _WIN32 bool enableNewSocketLoop = config_get_bool(main->Config(), "Output", "NewSocketLoopEnable"); bool enableLowLatencyMode = config_get_bool(main->Config(), "Output", "LowLatencyEnable"); +#endif bool enableDynBitrate = config_get_bool(main->Config(), "Output", "DynamicBitrate"); OBSDataAutoRelease settings = obs_data_create(); obs_data_set_string(settings, "bind_ip", bindIP); +#ifdef _WIN32 obs_data_set_bool(settings, "new_socket_loop_enabled", enableNewSocketLoop); obs_data_set_bool(settings, "low_latency_mode_enabled", enableLowLatencyMode); +#endif obs_data_set_bool(settings, "dyn_bitrate", enableDynBitrate); obs_output_update(streamOutput, settings); diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 479e3fc48168b8..f186c36161280e 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1185,6 +1185,7 @@ static bool init_connect(struct rtmp_stream *stream) bind_ip = obs_data_get_string(settings, OPT_BIND_IP); dstr_copy(&stream->bind_ip, bind_ip); +#ifdef _WIN32 stream->new_socket_loop = obs_data_get_bool(settings, OPT_NEWSOCKETLOOP_ENABLED); stream->low_latency_mode = @@ -1196,6 +1197,10 @@ static bool init_connect(struct rtmp_stream *stream) warn("Disabling network optimizations, not compatible with RTMPS"); stream->new_socket_loop = false; } +#else + stream->new_socket_loop = false; + stream->low_latency_mode = false; +#endif obs_data_release(settings); return true; @@ -1561,8 +1566,10 @@ static void rtmp_stream_defaults(obs_data_t *defaults) obs_data_set_default_int(defaults, OPT_PFRAME_DROP_THRESHOLD, 900); obs_data_set_default_int(defaults, OPT_MAX_SHUTDOWN_TIME_SEC, 30); obs_data_set_default_string(defaults, OPT_BIND_IP, "default"); +#ifdef _WIN32 obs_data_set_default_bool(defaults, OPT_NEWSOCKETLOOP_ENABLED, false); obs_data_set_default_bool(defaults, OPT_LOWLATENCY_ENABLED, false); +#endif } static obs_properties_t *rtmp_stream_properties(void *unused) @@ -1592,10 +1599,12 @@ static obs_properties_t *rtmp_stream_properties(void *unused) } netif_saddr_data_free(&addrs); +#ifdef _WIN32 obs_properties_add_bool(props, OPT_NEWSOCKETLOOP_ENABLED, obs_module_text("RTMPStream.NewSocketLoop")); obs_properties_add_bool(props, OPT_LOWLATENCY_ENABLED, obs_module_text("RTMPStream.LowLatencyMode")); +#endif return props; } From c958ffa9f46ad25186dfd3dd257847edd59b0625 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Thu, 16 Mar 2023 02:10:30 +0100 Subject: [PATCH 0376/2225] UI: Properly update filter properties after resetting --- UI/properties-view.hpp | 4 +++- UI/window-basic-filters.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/UI/properties-view.hpp b/UI/properties-view.hpp index 361de7bdeba4e4..ce61899cf208c8 100644 --- a/UI/properties-view.hpp +++ b/UI/properties-view.hpp @@ -141,9 +141,11 @@ class OBSPropertiesView : public VScrollArea { void GetScrollPos(int &h, int &v); void SetScrollPos(int h, int v); +private slots: + void RefreshProperties(); + public slots: void ReloadProperties(); - void RefreshProperties(); void SignalChanged(); signals: diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index 2fc527ce12fba8..97a804c7d76421 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -1219,7 +1219,7 @@ void OBSBasicFilters::ResetFilters() if (!view->DeferUpdate()) obs_source_update(filter, nullptr); - view->RefreshProperties(); + view->ReloadProperties(); } void OBSBasicFilters::CopyFilter() From 283b6a47892c0a09291953f65093ebeb71caa9f5 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 17 Mar 2023 13:58:21 +0100 Subject: [PATCH 0377/2225] deps/file-updater: Use LOG_INFO log priority for info logging --- deps/file-updater/file-updater/file-updater.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deps/file-updater/file-updater/file-updater.c b/deps/file-updater/file-updater/file-updater.c index f53a44a15a04bd..a0cb6fea3748fc 100644 --- a/deps/file-updater/file-updater/file-updater.c +++ b/deps/file-updater/file-updater/file-updater.c @@ -8,8 +8,7 @@ #define warn(msg, ...) \ blog(LOG_WARNING, "%s" msg, info->log_prefix, ##__VA_ARGS__) -#define info(msg, ...) \ - blog(LOG_WARNING, "%s" msg, info->log_prefix, ##__VA_ARGS__) +#define info(msg, ...) blog(LOG_INFO, "%s" msg, info->log_prefix, ##__VA_ARGS__) struct update_info { char error[CURL_ERROR_SIZE]; From 8ce4a2a1543a9a879bebde558b575280a2bcb5ea Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 17 Mar 2023 18:54:02 +0100 Subject: [PATCH 0378/2225] UI: Fix macOS crash when saving general settings without Sparkle --- UI/window-basic-settings.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 5a59d65057c95c..2a5ac8d88287d6 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -3140,13 +3140,11 @@ void OBSBasicSettings::SaveGeneralSettings() QT_TO_UTF8(themeData)); } -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) if (WidgetChanged(ui->enableAutoUpdates)) config_set_bool(GetGlobalConfig(), "General", "EnableAutoUpdates", ui->enableAutoUpdates->isChecked()); -#endif -#if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) int branchIdx = ui->updateChannelBox->currentIndex(); QString branchName = ui->updateChannelBox->itemData(branchIdx).toString(); From 23a0b7cacddf431692c755f61b25d4f323ec932f Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 12:56:50 +0900 Subject: [PATCH 0379/2225] UI: Fix possible use-after-free of obs_source_t Also removes an implicit pair of successive obs_source_getref and obs_source_release calls from OBSSource. --- UI/api-interface.cpp | 4 ++-- UI/window-basic-main-transitions.cpp | 2 +- UI/window-basic-main.cpp | 4 ++-- UI/window-basic-preview.cpp | 5 +---- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index 10382b28b47bea..800788be7ec8aa 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -114,8 +114,8 @@ struct OBSStudioAPI : obs_frontend_callbacks { struct obs_frontend_source_list *sources) override { for (int i = 0; i < main->ui->transitions->count(); i++) { - obs_source_t *tr = main->ui->transitions->itemData(i) - .value(); + OBSSource tr = main->ui->transitions->itemData(i) + .value(); if (!tr) continue; diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 5a8272a0c5d5fc..483635f3909336 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -564,7 +564,7 @@ void OBSBasic::RenameTransition() { QAction *action = reinterpret_cast(sender()); QVariant variant = action->property("transition"); - obs_source_t *transition = variant.value(); + OBSSource transition = variant.value(); string name; QString placeHolderText = QT_UTF8(obs_source_get_name(transition)); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index e9a4165cf47ea2..579a03cc681218 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -733,7 +733,7 @@ obs_data_array_t *OBSBasic::SaveProjectors() switch (type) { case ProjectorType::Scene: case ProjectorType::Source: { - obs_source_t *source = projector->GetSource(); + OBSSource source = projector->GetSource(); const char *name = obs_source_get_name(source); obs_data_set_string(data, "name", name); break; @@ -5393,8 +5393,8 @@ void OBSBasic::on_actionAddScene_triggered() auto undo_fn = [](const std::string &data) { obs_source_t *t = obs_get_source_by_name(data.c_str()); if (t) { - obs_source_release(t); obs_source_remove(t); + obs_source_release(t); } }; diff --git a/UI/window-basic-preview.cpp b/UI/window-basic-preview.cpp index 091bf8c3f0d200..4704767b7f5812 100644 --- a/UI/window-basic-preview.cpp +++ b/UI/window-basic-preview.cpp @@ -2302,10 +2302,7 @@ static obs_source_t *CreateLabel(float pixelRatio) const char *text_source_id = "text_ft2_source"; #endif - OBSSource txtSource = - obs_source_create_private(text_source_id, NULL, settings); - - return txtSource; + return obs_source_create_private(text_source_id, NULL, settings); } static void SetLabelText(int sourceIndex, int px) From 0959a22de3b7451d64e8102f5afd3ab5c01196a3 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 13:31:57 +0900 Subject: [PATCH 0380/2225] UI: Fix possible use-after-free of obs_scene_t --- UI/window-basic-main.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 579a03cc681218..8bae4f42466256 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -5156,12 +5156,10 @@ void OBSBasic::on_actionMixerToolbarMenu_triggered() void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current, QListWidgetItem *prev) { - obs_source_t *source = NULL; + OBSSource source; if (current) { - obs_scene_t *scene; - - scene = GetOBSRef(current); + OBSScene scene = GetOBSRef(current); source = obs_scene_get_source(scene); currentScene = scene; @@ -8342,7 +8340,7 @@ static bool reset_tr(obs_scene_t *scene, obs_sceneitem_t *item, void *param) void OBSBasic::on_actionResetTransform_triggered() { - obs_scene_t *scene = GetCurrentScene(); + OBSScene scene = GetCurrentScene(); OBSDataAutoRelease wrapper = obs_scene_save_transform_states(scene, false); From 434bdc17684f6da7f37e85f61bf1795c26d7a5cb Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 14:05:04 +0900 Subject: [PATCH 0381/2225] libobs: Fix possible use-after-free of obs_scene_t When creating a group, a newly allocated group `sub_scene` is released just after calling `obs_scene_add_internal`. If another thread released the scene-item, which is the sub_scene, use-after-free might happen. --- UI/window-basic-transform.cpp | 2 +- libobs/obs-scene.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index a66c16ab4b473e..830b9d012d9577 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -354,6 +354,6 @@ void OBSBasicTransform::OnSceneChanged(QListWidgetItem *current, if (!current) return; - obs_scene_t *scene = GetOBSRef(current); + OBSScene scene = GetOBSRef(current); this->SetScene(scene); } diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 9b40860824451c..093519354224d1 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -3301,10 +3301,10 @@ obs_sceneitem_t *obs_scene_insert_group(obs_scene_t *scene, const char *name, obs_sceneitem_t *item = obs_scene_add_internal(scene, sub_scene->source, last_item); - obs_scene_release(sub_scene); - - if (!items || !count) + if (!items || !count) { + obs_scene_release(sub_scene); return item; + } /* ------------------------- */ @@ -3345,6 +3345,7 @@ obs_sceneitem_t *obs_scene_insert_group(obs_scene_t *scene, const char *name, /* ------------------------- */ + obs_scene_release(sub_scene); return item; } From af01bea6a07a8b05f6e981637635ceed878b3081 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 17:24:01 +0900 Subject: [PATCH 0382/2225] test: Fix unused-parameter warnings in test-input --- test/test-input/sync-pair-vid.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test-input/sync-pair-vid.c b/test/test-input/sync-pair-vid.c index 76d43863b3c71a..bcc34c46a5baa9 100644 --- a/test/test-input/sync-pair-vid.c +++ b/test/test-input/sync-pair-vid.c @@ -46,6 +46,7 @@ static inline void fill_texture(uint32_t *pixels, uint32_t pixel) static void *sync_pair_vid_create(obs_data_t *settings, obs_source_t *source) { + UNUSED_PARAMETER(settings); struct sync_pair_vid *spv = bzalloc(sizeof(struct sync_pair_vid)); spv->source = source; @@ -83,6 +84,7 @@ static inline bool whitelist_time(uint64_t ts, uint64_t interval, static void sync_pair_vid_render(void *data, gs_effect_t *effect) { + UNUSED_PARAMETER(effect); struct sync_pair_vid *spv = data; uint64_t ts = obs_get_video_frame_time(); @@ -116,6 +118,7 @@ static void sync_pair_vid_render(void *data, gs_effect_t *effect) static uint32_t sync_pair_vid_size(void *data) { + UNUSED_PARAMETER(data); return 32; } From 7bd27b4da8eec2a0872d9cb86ef3e9f800a27a82 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 17:39:21 +0900 Subject: [PATCH 0383/2225] test: Add a test for os_get_path_extension --- test/cmocka/CMakeLists.txt | 7 +++++ test/cmocka/test_os_path.c | 54 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 test/cmocka/test_os_path.c diff --git a/test/cmocka/CMakeLists.txt b/test/cmocka/CMakeLists.txt index d31da02b3abf8e..8b6a6f115e767b 100644 --- a/test/cmocka/CMakeLists.txt +++ b/test/cmocka/CMakeLists.txt @@ -21,3 +21,10 @@ target_include_directories(test_bitstream PRIVATE ${CMOCKA_INCLUDE_DIR}) target_link_libraries(test_bitstream PRIVATE OBS::libobs ${CMOCKA_LIBRARIES}) add_test(test_bitstream ${CMAKE_CURRENT_BINARY_DIR}/test_bitstream) + +# OS path test +add_executable(test_os_path test_os_path.c) +target_include_directories(test_os_path PRIVATE ${CMOCKA_INCLUDE_DIR}) +target_link_libraries(test_os_path PRIVATE OBS::libobs ${CMOCKA_LIBRARIES}) + +add_test(test_os_path ${CMAKE_CURRENT_BINARY_DIR}/test_os_path) diff --git a/test/cmocka/test_os_path.c b/test/cmocka/test_os_path.c new file mode 100644 index 00000000000000..5385f463266005 --- /dev/null +++ b/test/cmocka/test_os_path.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#include + +struct testcase { + const char *path; + const char *ext; +}; + +static void run_testcases(struct testcase *testcases) +{ + for (size_t i = 0; testcases[i].path; i++) { + const char *path = testcases[i].path; + + const char *ext = os_get_path_extension(path); + + printf("path: '%s' ext: '%s'\n", path, ext); + if (testcases[i].ext) + assert_string_equal(ext, testcases[i].ext); + else + assert_ptr_equal(ext, testcases[i].ext); + } +} + +static void os_get_path_extension_test(void **state) +{ + UNUSED_PARAMETER(state); + + static struct testcase testcases[] = { + {"/home/user/a.txt", ".txt"}, + {"C:\\Users\\user\\Documents\\video.mp4", ".mp4"}, + {"./\\", NULL}, + {".\\/", NULL}, + {"/.\\", NULL}, + {"/\\.", "."}, + {"\\/.", "."}, + {"\\./", NULL}, + {"", NULL}, + {NULL, NULL}}; + + run_testcases(testcases); +} + +int main() +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(os_get_path_extension_test), + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} From e4496c7afa5034061e527f92557ae54e38459911 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 17:40:44 +0900 Subject: [PATCH 0384/2225] docs: Clarify a dot is included in the extension --- docs/sphinx/reference-libobs-util-platform.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sphinx/reference-libobs-util-platform.rst b/docs/sphinx/reference-libobs-util-platform.rst index 95a8182cbd1e89..8547521c202368 100644 --- a/docs/sphinx/reference-libobs-util-platform.rst +++ b/docs/sphinx/reference-libobs-util-platform.rst @@ -245,7 +245,7 @@ Other Path/File Functions .. function:: const char *os_get_path_extension(const char *path) - Returns the extension portion of a path string. + Returns the extension portion of a path string, including the dot (.). --------------------- From 4ea0b6997475792c373a814d31f535f8a3f3b331 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sat, 18 Mar 2023 17:52:01 +0900 Subject: [PATCH 0385/2225] libobs/util: Simplify implementation of os_get_path_extension To avoid a false use-after-free warning from GCC's -Wuse-after-free option, revise the implementation without using memory allocation. --- libobs/util/platform.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/libobs/util/platform.c b/libobs/util/platform.c index 421ca45bbebb74..907d5ed69f14f1 100644 --- a/libobs/util/platform.c +++ b/libobs/util/platform.c @@ -654,28 +654,17 @@ int os_mkdirs(const char *dir) const char *os_get_path_extension(const char *path) { - struct dstr temp; - size_t pos = 0; - char *period; - char *slash; - - if (!path[0]) - return NULL; - - dstr_init_copy(&temp, path); - dstr_replace(&temp, "\\", "/"); - - slash = strrchr(temp.array, '/'); - period = strrchr(temp.array, '.'); - if (period) - pos = (size_t)(period - temp.array); - - dstr_free(&temp); - - if (!period || slash > period) - return NULL; + for (size_t pos = strlen(path); pos > 0; pos--) { + switch (path[pos - 1]) { + case '.': + return path + pos - 1; + case '/': + case '\\': + return NULL; + } + } - return path + pos; + return NULL; } static inline bool valid_string(const char *str) From c9dd230a72c6fe1244bc4d44d9a832f672cdf2e0 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 27 Feb 2023 21:40:41 +0100 Subject: [PATCH 0386/2225] obs-outputs: Explicitly close RTMP socket on send error Some send() errors are not treated as fatal but the connection gets shut down regardless. When this happens, librtmp may send an FCunpublish message which various services interpret as an "end of stream" message and disable features like "disconnect protection". Instead, let's explicitly close the socket so that the remote end is aware that this is an unclean disconnect. --- plugins/obs-outputs/librtmp/rtmp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/obs-outputs/librtmp/rtmp.c b/plugins/obs-outputs/librtmp/rtmp.c index abce64518b00bf..28239cb0351c88 100644 --- a/plugins/obs-outputs/librtmp/rtmp.c +++ b/plugins/obs-outputs/librtmp/rtmp.c @@ -1567,6 +1567,7 @@ static int WriteN(RTMP *r, const char *buffer, int n) { const char *ptr = buffer; + struct linger l; while (n > 0) { @@ -1591,6 +1592,15 @@ WriteN(RTMP *r, const char *buffer, int n) r->last_error_code = sockerr; + // Force-close the socket. Sometimes a send() error isn't fatal, so + // we could end up writing an unpublish message which some services + // treat as a clean shutdown. We need to disable lingering too so + // the remote side sees an abortive shutdown (RST). + l.l_onoff = 1; + l.l_linger = 0; + setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_LINGER, (char *)&l, sizeof(l)); + RTMPSockBuf_Close(&r->m_sb); + RTMP_Close(r); n = 1; break; From 23ce4fe2f1058cccd6d220e5f311605bf61ee241 Mon Sep 17 00:00:00 2001 From: 9p4 Date: Tue, 7 Mar 2023 00:41:39 -0500 Subject: [PATCH 0387/2225] linux-v4l2: Fix fallback framerate for camera --- plugins/linux-v4l2/v4l2-input.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/linux-v4l2/v4l2-input.c b/plugins/linux-v4l2/v4l2-input.c index d5092ec5f5e8f9..f8175737a0e73b 100644 --- a/plugins/linux-v4l2/v4l2-input.c +++ b/plugins/linux-v4l2/v4l2-input.c @@ -39,6 +39,8 @@ along with this program. If not, see . #include "v4l2-helpers.h" #include "v4l2-decoder.h" +#define FALLBACK_FRAMERATE 30 + #if HAVE_UDEV #include "v4l2-udev.h" #endif @@ -1029,6 +1031,11 @@ static void v4l2_init(struct v4l2_data *data) blog(LOG_ERROR, "Unable to set framerate"); goto fail; } + if (data->framerate == 0) { + blog(LOG_ERROR, "Framerate is not set, falling back to %i", + FALLBACK_FRAMERATE); + data->framerate = v4l2_pack_tuple(1, FALLBACK_FRAMERATE); + } v4l2_unpack_tuple(&fps_num, &fps_denom, data->framerate); blog(LOG_INFO, "Framerate: %.2f fps", (float)fps_denom / fps_num); From 73dea7c475e88ad981731f3d821db08d98484e68 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 1 Mar 2023 15:26:20 -0600 Subject: [PATCH 0388/2225] libobs: Fix Pulseaudio audio monitoring listing sources The Pulseaudio implementation of audio monitoring was actually listing audio sources. This change corrects that, so all possible outputs are available. --- .../pulse/pulseaudio-enum-devices.c | 8 +-- .../pulse/pulseaudio-output.c | 10 ++-- .../pulse/pulseaudio-wrapper.c | 54 +++++++++++++++++-- .../pulse/pulseaudio-wrapper.h | 34 ++++++++++++ 4 files changed, 94 insertions(+), 12 deletions(-) diff --git a/libobs/audio-monitoring/pulse/pulseaudio-enum-devices.c b/libobs/audio-monitoring/pulse/pulseaudio-enum-devices.c index d055b9121057a7..e54f3e30c4a185 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-enum-devices.c +++ b/libobs/audio-monitoring/pulse/pulseaudio-enum-devices.c @@ -1,11 +1,11 @@ #include #include "pulseaudio-wrapper.h" -static void pulseaudio_output_info(pa_context *c, const pa_source_info *i, +static void pulseaudio_output_info(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { UNUSED_PARAMETER(c); - if (eol != 0 || i->monitor_of_sink == PA_INVALID_INDEX) + if (eol != 0) goto skip; struct enum_cb *ecb = (struct enum_cb *)userdata; @@ -24,8 +24,8 @@ void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data) ecb->cont = 1; pulseaudio_init(); - pa_source_info_cb_t pa_cb = pulseaudio_output_info; - pulseaudio_get_source_info_list(pa_cb, (void *)ecb); + pa_sink_info_cb_t pa_cb = pulseaudio_output_info; + pulseaudio_get_sink_info_list(pa_cb, (void *)ecb); pulseaudio_unref(); bfree(ecb); diff --git a/libobs/audio-monitoring/pulse/pulseaudio-output.c b/libobs/audio-monitoring/pulse/pulseaudio-output.c index ca05db516d58c5..e4d806855aedf5 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-output.c +++ b/libobs/audio-monitoring/pulse/pulseaudio-output.c @@ -294,8 +294,8 @@ static void pulseaudio_server_info(pa_context *c, const pa_server_info *i, pulseaudio_signal(0); } -static void pulseaudio_source_info(pa_context *c, const pa_source_info *i, - int eol, void *userdata) +static void pulseaudio_sink_info(pa_context *c, const pa_sink_info *i, int eol, + void *userdata) { UNUSED_PARAMETER(c); PULSE_DATA(userdata); @@ -409,9 +409,9 @@ static bool audio_monitor_init(struct audio_monitor *monitor, return false; } - if (pulseaudio_get_source_info(pulseaudio_source_info, monitor->device, - (void *)monitor) < 0) { - blog(LOG_ERROR, "Unable to get source info !"); + if (pulseaudio_get_sink_info(pulseaudio_sink_info, monitor->device, + (void *)monitor) < 0) { + blog(LOG_ERROR, "Unable to get sink info !"); return false; } if (monitor->format == PA_SAMPLE_INVALID) { diff --git a/libobs/audio-monitoring/pulse/pulseaudio-wrapper.c b/libobs/audio-monitoring/pulse/pulseaudio-wrapper.c index 3006be5403ec56..c70ef468f39a2a 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-wrapper.c +++ b/libobs/audio-monitoring/pulse/pulseaudio-wrapper.c @@ -77,10 +77,13 @@ bool devices_match(const char *id1, const char *id2) } if (strcmp(id2, "default") == 0) { get_default_id(&name2); - id2 = name2; + } else { + name2 = bzalloc(strlen(id2) + 9); + strcat(name2, id2); + strcat(name2, ".monitor"); } - match = strcmp(id1, id2) == 0; + match = strcmp(id1, name2) == 0; bfree(name1); bfree(name2); return match; @@ -267,6 +270,51 @@ int_fast32_t pulseaudio_get_source_info(pa_source_info_cb_t cb, return 0; } +int_fast32_t pulseaudio_get_sink_info_list(pa_sink_info_cb_t cb, void *userdata) +{ + if (pulseaudio_context_ready() < 0) + return -1; + + pulseaudio_lock(); + + pa_operation *op = + pa_context_get_sink_info_list(pulseaudio_context, cb, userdata); + if (!op) { + pulseaudio_unlock(); + return -1; + } + while (pa_operation_get_state(op) == PA_OPERATION_RUNNING) + pulseaudio_wait(); + pa_operation_unref(op); + + pulseaudio_unlock(); + + return 0; +} + +int_fast32_t pulseaudio_get_sink_info(pa_sink_info_cb_t cb, const char *name, + void *userdata) +{ + if (pulseaudio_context_ready() < 0) + return -1; + + pulseaudio_lock(); + + pa_operation *op = pa_context_get_sink_info_by_name(pulseaudio_context, + name, cb, userdata); + if (!op) { + pulseaudio_unlock(); + return -1; + } + while (pa_operation_get_state(op) == PA_OPERATION_RUNNING) + pulseaudio_wait(); + pa_operation_unref(op); + + pulseaudio_unlock(); + + return 0; +} + int_fast32_t pulseaudio_get_server_info(pa_server_info_cb_t cb, void *userdata) { if (pulseaudio_context_ready() < 0) @@ -312,7 +360,7 @@ int_fast32_t pulseaudio_connect_playback(pa_stream *s, const char *name, if (pulseaudio_context_ready() < 0) return -1; - size_t dev_len = strlen(name) - 8; + size_t dev_len = strlen(name); char *device = bzalloc(dev_len + 1); memcpy(device, name, dev_len); diff --git a/libobs/audio-monitoring/pulse/pulseaudio-wrapper.h b/libobs/audio-monitoring/pulse/pulseaudio-wrapper.h index 613bc1a230f844..d64a2765455cb0 100644 --- a/libobs/audio-monitoring/pulse/pulseaudio-wrapper.h +++ b/libobs/audio-monitoring/pulse/pulseaudio-wrapper.h @@ -128,6 +128,40 @@ int_fast32_t pulseaudio_get_source_info_list(pa_source_info_cb_t cb, int_fast32_t pulseaudio_get_source_info(pa_source_info_cb_t cb, const char *name, void *userdata); +/** + * Request sink information + * + * The function will block until the operation was executed and the mainloop + * called the provided callback function. + * + * @return negative on error + * + * @note The function will block until the server context is ready. + * + * @warning call without active locks + */ +int_fast32_t pulseaudio_get_sink_info_list(pa_sink_info_cb_t cb, + void *userdata); + +/** + * Request sink information from a specific sink + * + * The function will block until the operation was executed and the mainloop + * called the provided callback function. + * + * @param cb pointer to the callback function + * @param name the sink name to get information for + * @param userdata pointer to userdata the callback will be called with + * + * @return negative on error + * + * @note The function will block until the server context is ready. + * + * @warning call without active locks + */ +int_fast32_t pulseaudio_get_sink_info(pa_sink_info_cb_t cb, const char *name, + void *userdata); + /** * Request server information * From b0fbf25e244d95386369b8998e91fb78abb6beef Mon Sep 17 00:00:00 2001 From: cg2121 Date: Mon, 6 Mar 2023 03:24:55 -0600 Subject: [PATCH 0389/2225] UI: Fix media controls shortcuts being global The play, pause and restart shortcuts were being called as global shortcuts, being triggered no matter what. This fixes this by calling the shortcut actions only when the media controls widget has focus. --- UI/forms/source-toolbar/media-controls.ui | 3 --- UI/media-controls.cpp | 8 ++++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/UI/forms/source-toolbar/media-controls.ui b/UI/forms/source-toolbar/media-controls.ui index fcfe42c8871f48..57ba7879b252a0 100644 --- a/UI/forms/source-toolbar/media-controls.ui +++ b/UI/forms/source-toolbar/media-controls.ui @@ -71,9 +71,6 @@ 20 - - Space - true diff --git a/UI/media-controls.cpp b/UI/media-controls.cpp index a6179647f3b9d0..63d1d214015f89 100644 --- a/UI/media-controls.cpp +++ b/UI/media-controls.cpp @@ -69,6 +69,7 @@ MediaControls::MediaControls(QWidget *parent) "MediaControlsCountdownTimer"); QAction *restartAction = new QAction(this); + restartAction->setShortcutContext(Qt::WidgetWithChildrenShortcut); restartAction->setShortcut({Qt::Key_R}); connect(restartAction, SIGNAL(triggered()), this, SLOT(RestartMedia())); addAction(restartAction); @@ -86,6 +87,13 @@ MediaControls::MediaControls(QWidget *parent) SLOT(MoveSliderBackwards())); sliderBack->setShortcut({Qt::Key_Left}); addAction(sliderBack); + + QAction *playPause = new QAction(this); + playPause->setShortcutContext(Qt::WidgetWithChildrenShortcut); + connect(playPause, SIGNAL(triggered()), this, + SLOT(on_playPauseButton_clicked())); + playPause->setShortcut({Qt::Key_Space}); + addAction(playPause); } MediaControls::~MediaControls() {} From a5e9c94e4bf86ad7b4e691a958d77c6979df45ac Mon Sep 17 00:00:00 2001 From: Exeldro Date: Tue, 7 Mar 2023 11:44:36 +0100 Subject: [PATCH 0390/2225] libobs: Add obs_view_get_video_info --- libobs/obs-view.c | 19 +++++++++++++++++++ libobs/obs.h | 4 ++++ 2 files changed, 23 insertions(+) diff --git a/libobs/obs-view.c b/libobs/obs-view.c index d0a57de23af3a8..820941a362c5b9 100644 --- a/libobs/obs-view.c +++ b/libobs/obs-view.c @@ -198,3 +198,22 @@ void obs_view_remove(obs_view_t *view) set_main_mix(); pthread_mutex_unlock(&obs->video.mixes_mutex); } + +bool obs_view_get_video_info(obs_view_t *view, struct obs_video_info *ovi) +{ + if (!view) + return false; + + pthread_mutex_lock(&obs->video.mixes_mutex); + + size_t idx = find_mix_for_view(view); + if (idx != DARRAY_INVALID) { + *ovi = obs->video.mixes.array[idx]->ovi; + pthread_mutex_unlock(&obs->video.mixes_mutex); + return true; + } + + pthread_mutex_unlock(&obs->video.mixes_mutex); + + return false; +} diff --git a/libobs/obs.h b/libobs/obs.h index 60db9b4fabfb51..c27b672d412bd8 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -930,6 +930,10 @@ EXPORT video_t *obs_view_add2(obs_view_t *view, struct obs_video_info *ovi); /** Removes a view from the main render loop */ EXPORT void obs_view_remove(obs_view_t *view); +/** Gets the video settings currently in use for this view context, returns false if no video */ +EXPORT bool obs_view_get_video_info(obs_view_t *view, + struct obs_video_info *ovi); + /* ------------------------------------------------------------------------- */ /* Display context */ From b9885f05dbffddb2baa3e44e13a6119cd5ccf50c Mon Sep 17 00:00:00 2001 From: Exeldro Date: Sun, 12 Mar 2023 08:50:22 +0100 Subject: [PATCH 0391/2225] docs: Add view functions --- docs/sphinx/reference-core.rst | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index b6d0720e15c517..5ea5dbaff29f50 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -806,3 +806,66 @@ Displays .. function:: void obs_display_set_background_color(obs_display_t *display, uint32_t color) Sets the background (clear) color for the display context. + +.. _view_reference: + +Views +---------------- + +.. function:: obs_view_t *obs_view_create(void) + + :return: A view context + +--------------------- + +.. function:: void obs_view_destroy(obs_view_t *view) + + Destroys a view context. + +--------------------- + +.. function:: void obs_view_render(obs_view_t *view) + + Renders the sources of this view context. + +--------------------- + +.. function:: video_t *obs_view_add(obs_view_t *view) + + Renders the sources of this view context. + + :return: The main video output handler for the view context + +--------------------- + +.. function:: video_t *obs_view_add2(obs_view_t *view, struct obs_video_info *ovi) + + Adds a view to the main render loop, with custom video settings. + + :return: The main video output handler for the view context + +--------------------- + +.. function:: void obs_view_remove(obs_view_t *view) + + Removes a view from the main render loop. + +--------------------- + +.. function:: void obs_view_set_source(obs_view_t *view, uint32_t channel, obs_source_t *source) + + Sets the source to be used for this view context. + +--------------------- + +.. function:: obs_source_t *obs_view_get_source(obs_view_t *view, uint32_t channel) + + :return: The source currently in use for this view context + +--------------------- + +.. function:: bool obs_view_get_video_info(obs_view_t *view, struct obs_video_info *ovi) + + Gets the video settings currently in use for this view context. + + :return: *false* if no video From c3990e882ac93a37f12e82741d1b7a6de6601669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E4=B8=83=E4=B8=8D=E7=94=9C?= <1633557643@qq.com> Date: Sat, 11 Mar 2023 03:17:15 +0800 Subject: [PATCH 0392/2225] UI: Fix Dark and System themes select list height --- UI/data/themes/Dark.qss | 2 +- UI/data/themes/System.qss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index 02a603af9b2ab8..e6794d4690d92d 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -770,7 +770,7 @@ OBSBasicSettings { qproperty-advancedIcon: url(./Dark/settings/advanced.svg); } -OBSBasicSettings QListView::item { +OBSBasicSettings QListWidget::item { padding-top: 5px; padding-bottom: 5px; } diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss index aba01e7fa7d44e..1871ec6e596203 100644 --- a/UI/data/themes/System.qss +++ b/UI/data/themes/System.qss @@ -200,7 +200,7 @@ OBSBasicSettings { qproperty-advancedIcon: url(:settings/images/settings/advanced.svg); } -OBSBasicSettings QListView::item { +OBSBasicSettings QListWidget::item { padding-top: 5px; padding-bottom: 5px; } From b7f29ca76720d17017d0bce671448baa6910ee2c Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sun, 29 Jan 2023 18:50:28 -0800 Subject: [PATCH 0393/2225] libobs: Reduce synchronization limit for multiple audio tracks Since 65eb3c0815929866dde7d398bec7738d21e9b211 we tried to get as close a sync between audio and video tracks as we could before starting to send frames to the output. But in be717dbb2c19aa0e91a164fa52e3d4467b64be9d when multi-track audio was considered for synchronization it continued to try and line ALL audio packets up with one video packet. While audio and video packets are similar size this will work out. But once video packets duration is smaller than 1/2 audio packet duration this may fail forever. In practice with AAC's 20-23ms frame duration we can often get tracks producing frames 5-10ms out of phase. For 60fps video this mostly fine as 16ms frame duration will cover the gap, but for framerates as low as 100 its possible to fail to synchronize. In practice this is ~50% for 6 audio tracks and 120fps video on my system, or 100% at 240fps. --- libobs/obs-output.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 9e847f3bc75160..335b7655541dd1 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -1388,14 +1388,21 @@ static size_t get_interleaved_start_idx(struct obs_output *output) return video_idx < idx ? video_idx : idx; } +static int64_t get_encoder_duration(struct obs_encoder *encoder) +{ + return (encoder->timebase_num * 1000000LL / encoder->timebase_den) * + encoder->framesize; +} + static int prune_premature_packets(struct obs_output *output) { struct encoder_packet *video; int video_idx; int max_idx; - int64_t duration_usec; + int64_t duration_usec, max_audio_duration_usec = 0; int64_t max_diff = 0; int64_t diff = 0; + int audio_encoders = 0; video_idx = find_first_packet_type_idx(output, OBS_ENCODER_VIDEO, 0); if (video_idx == -1) { @@ -1410,9 +1417,11 @@ static int prune_premature_packets(struct obs_output *output) for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) { struct encoder_packet *audio; int audio_idx; + int64_t audio_duration_usec = 0; if (!output->audio_encoders[i]) continue; + audio_encoders++; audio_idx = find_first_packet_type_idx(output, OBS_ENCODER_AUDIO, i); @@ -1428,6 +1437,21 @@ static int prune_premature_packets(struct obs_output *output) diff = audio->dts_usec - video->dts_usec; if (diff > max_diff) max_diff = diff; + + audio_duration_usec = + get_encoder_duration(output->audio_encoders[i]); + if (audio_duration_usec > max_audio_duration_usec) + max_audio_duration_usec = audio_duration_usec; + } + + /* Once multiple audio encoders are running they are almost always out + * of phase by ~Xms. If users change their video to > 100fps then it + * becomes probable that this phase difference will be larger than the + * video duration preventing us from ever finding a synchronization + * point due to their larger frame duration. Instead give up on a tight + * video sync. */ + if (audio_encoders > 1 && duration_usec < max_audio_duration_usec) { + duration_usec = max_audio_duration_usec; } return diff > duration_usec ? max_idx + 1 : 0; From f1c95b2bd0576b84165b23648410e8e75547d8e1 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 19 Mar 2023 09:15:50 +0100 Subject: [PATCH 0394/2225] win-capture: Fix compatibility info showing in any mode --- plugins/win-capture/game-capture.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/win-capture/game-capture.c b/plugins/win-capture/game-capture.c index d7290af89f20b9..55c9a724535c7e 100644 --- a/plugins/win-capture/game-capture.c +++ b/plugins/win-capture/game-capture.c @@ -2252,7 +2252,16 @@ static bool window_changed_callback(obs_properties_t *ppts, obs_property_t *p, bool modified = ms_check_window_property_setting( ppts, p, settings, SETTING_CAPTURE_WINDOW, 1); - if (obs_data_get_bool(settings, SETTING_ANY_FULLSCREEN)) + bool capture_any; + if (using_older_non_mode_format(settings)) { + capture_any = + obs_data_get_bool(settings, SETTING_ANY_FULLSCREEN); + } else { + const char *mode = obs_data_get_string(settings, SETTING_MODE); + capture_any = strcmp(mode, SETTING_MODE_ANY) == 0; + } + + if (capture_any) return modified; const char *window = From 201bcda0514aa9726ed90eff6ad4180b0bb16fc3 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 21 Aug 2021 08:51:21 +0200 Subject: [PATCH 0395/2225] libobs,docs: Add protocol in Outputs API --- docs/sphinx/reference-outputs.rst | 26 +++++++++++++++++++++++++- libobs/obs-internal.h | 2 ++ libobs/obs-module.c | 21 +++++++++++++++++++++ libobs/obs-output.c | 10 ++++++++++ libobs/obs-output.h | 3 +++ libobs/obs.c | 14 ++++++++++++++ libobs/obs.h | 4 ++++ 7 files changed, 79 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index 0cbe9f98865d2c..eb8b94c0b1e652 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -234,7 +234,15 @@ Output Definition Structure (obs_output_info) This variable specifies which codecs are supported by an encoded output, separated by semicolon. - (Optional, though recommended) + Required if **OBS_OUTPUT_SERVICE** flag is set, otherwise + recommended. + +.. member:: const char *obs_output_info.protocols + + This variable specifies which protocols are supported by an output, + separated by semicolon. + + Required only if **OBS_OUTPUT_SERVICE** flag is set. .. _output_signal_handler_reference: @@ -685,6 +693,22 @@ General Output Functions --------------------- +.. function:: const char *obs_output_get_protocols(const obs_output_t *output) + + :return: Supported protocols, separated by semicolon. Always NULL if the + output is not **OBS_OUTPUT_SERVICE**. + +--------------------- + +.. function:: bool obs_is_output_protocol_registered(const char *protocol) + + Check if one of the registered output use the given protocol. + + :return: A boolean showing if an output with the given + protocol is registered + +--------------------- + Functions used by outputs ------------------------- diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index f6a3835501998c..a67fb518cb8036 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -411,6 +411,8 @@ struct obs_core_data { obs_data_t *private_data; volatile bool valid; + + DARRAY(char *) protocols; }; /* user hotkeys */ diff --git a/libobs/obs-module.c b/libobs/obs-module.c index ff118814f75862..73c8228a57c1f2 100644 --- a/libobs/obs-module.c +++ b/libobs/obs-module.c @@ -836,6 +836,9 @@ void obs_register_output_s(const struct obs_output_info *info, size_t size) CHECK_REQUIRED_VAL_(info, start, obs_register_output); CHECK_REQUIRED_VAL_(info, stop, obs_register_output); + if (info->flags & OBS_OUTPUT_SERVICE) + CHECK_REQUIRED_VAL_(info, protocols, obs_register_output); + if (info->flags & OBS_OUTPUT_ENCODED) { CHECK_REQUIRED_VAL_(info, encoded_packet, obs_register_output); } else { @@ -856,6 +859,24 @@ void obs_register_output_s(const struct obs_output_info *info, size_t size) #undef CHECK_REQUIRED_VAL_ REGISTER_OBS_DEF(size, obs_output_info, obs->output_types, info); + + if (info->flags & OBS_OUTPUT_SERVICE) { + char **protocols = strlist_split(info->protocols, ';', false); + for (char **protocol = protocols; *protocol; ++protocol) { + bool skip = false; + for (size_t i = 0; i < obs->data.protocols.num; i++) { + if (strcmp(*protocol, + obs->data.protocols.array[i]) == 0) + skip = true; + } + + if (skip) + continue; + char *new_prtcl = bstrdup(*protocol); + da_push_back(obs->data.protocols, &new_prtcl); + } + strlist_free(protocols); + } return; error: diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 335b7655541dd1..148b31b4a13ece 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -2713,3 +2713,13 @@ const char *obs_output_get_supported_audio_codecs(const obs_output_t *output) ? output->info.encoded_audio_codecs : NULL; } + +const char *obs_output_get_protocols(const obs_output_t *output) +{ + if (!obs_output_valid(output, "obs_output_get_protocols")) + return NULL; + + return (output->info.flags & OBS_OUTPUT_SERVICE) + ? output->info.protocols + : NULL; +} diff --git a/libobs/obs-output.h b/libobs/obs-output.h index e57659fd9f5104..0469d39a174733 100644 --- a/libobs/obs-output.h +++ b/libobs/obs-output.h @@ -77,6 +77,9 @@ struct obs_output_info { /* raw audio callback for multi track outputs */ void (*raw_audio2)(void *data, size_t idx, struct audio_data *frames); + + /* required if OBS_OUTPUT_SERVICE */ + const char *protocols; }; EXPORT void obs_register_output_s(const struct obs_output_info *info, diff --git a/libobs/obs.c b/libobs/obs.c index cb17d5d8840832..3cd697a072defa 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1078,6 +1078,10 @@ static void obs_free_data(void) da_free(data->draw_callbacks); da_free(data->tick_callbacks); obs_data_release(data->private_data); + + for (size_t i = 0; i < data->protocols.num; i++) + bfree(data->protocols.array[i]); + da_free(data->protocols); } static const char *obs_signals[] = { @@ -3452,3 +3456,13 @@ bool obs_weak_object_references_object(obs_weak_object_t *weak, { return weak && object && weak->object == object; } + +bool obs_is_output_protocol_registered(const char *protocol) +{ + for (size_t i = 0; i < obs->data.protocols.num; i++) { + if (strcmp(protocol, obs->data.protocols.array[i]) == 0) + return true; + } + + return false; +} diff --git a/libobs/obs.h b/libobs/obs.h index f5b84b7082fba7..f6e08e33a47568 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2211,6 +2211,10 @@ obs_output_get_supported_video_codecs(const obs_output_t *output); EXPORT const char * obs_output_get_supported_audio_codecs(const obs_output_t *output); +EXPORT const char *obs_output_get_protocols(const obs_output_t *output); + +EXPORT bool obs_is_output_protocol_registered(const char *protocol); + /* ------------------------------------------------------------------------- */ /* Functions used by outputs */ From 855956f60ecdac1013fa28b7124f1bfb03935ab9 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 21 Aug 2021 08:53:21 +0200 Subject: [PATCH 0396/2225] obs-outputs,obs-ffmpeg: Add protocol to service outputs --- plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c | 1 + plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 1 + plugins/obs-ffmpeg/obs-ffmpeg-mux.c | 1 + plugins/obs-outputs/ftl-stream.c | 1 + plugins/obs-outputs/rtmp-stream.c | 5 +++++ 5 files changed, 9 insertions(+) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c index 017ecba76aef5f..d8546bf26014ce 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c @@ -331,6 +331,7 @@ struct obs_output_info ffmpeg_hls_muxer = { .id = "ffmpeg_hls_muxer", .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK | OBS_OUTPUT_SERVICE, + .protocols = "HLS", #ifdef ENABLE_HEVC .encoded_video_codecs = "h264;hevc", #else diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index 5a20aae5132cfa..f9cc4ae7e38b5d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -1289,6 +1289,7 @@ struct obs_output_info ffmpeg_mpegts_muxer = { .id = "ffmpeg_mpegts_muxer", .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK | OBS_OUTPUT_SERVICE, + .protocols = "SRT;RIST", #ifdef ENABLE_HEVC .encoded_video_codecs = "h264;hevc;av1", #else diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index a605e9af352fc3..d4156b5153e283 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -944,6 +944,7 @@ struct obs_output_info ffmpeg_mpegts_muxer = { .id = "ffmpeg_mpegts_muxer", .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK | OBS_OUTPUT_SERVICE, + .protocols = "SRT;RIST", .encoded_video_codecs = "h264;av1", .encoded_audio_codecs = "aac", .get_name = ffmpeg_mpegts_mux_getname, diff --git a/plugins/obs-outputs/ftl-stream.c b/plugins/obs-outputs/ftl-stream.c index a0556d2a5d36d6..ef305420fc57c2 100644 --- a/plugins/obs-outputs/ftl-stream.c +++ b/plugins/obs-outputs/ftl-stream.c @@ -1159,6 +1159,7 @@ static int _ftl_error_to_obs_error(int status) struct obs_output_info ftl_output_info = { .id = "ftl_output", .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_SERVICE, + .protocols = "FTL", .encoded_video_codecs = "h264", .encoded_audio_codecs = "opus", .get_name = ftl_stream_getname, diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index f186c36161280e..6058d4f7fdf65b 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1642,6 +1642,11 @@ struct obs_output_info rtmp_output_info = { .id = "rtmp_output", .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_SERVICE | OBS_OUTPUT_MULTI_TRACK, +#ifdef NO_CRYPTO + .protocols = "RTMP", +#else + .protocols = "RTMP;RTMPS", +#endif .encoded_video_codecs = "h264", .encoded_audio_codecs = "aac", .get_name = rtmp_stream_getname, From 513c6bc4896ff97e0981125b6d8c9837bae712f5 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 25 Apr 2022 12:54:48 +0200 Subject: [PATCH 0397/2225] rtmp-services: Add protocols to services JSON If the server URL is not an RTMP(S) URL, the protocol field becomes required. The output field becomes required on non-RTMP(S) services to keep backward compatibility. Also skip service if the protocol is not available. --- plugins/rtmp-services/data/package.json | 4 +- .../data/schema/service-schema-v4.json | 24 +++++++++++ plugins/rtmp-services/data/services.json | 5 +++ plugins/rtmp-services/rtmp-common.c | 43 +++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 89e6d4f31d1c14..a9c3e5f824ebab 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 220, + "version": 221, "files": [ { "name": "services.json", - "version": 220 + "version": 221 } ] } diff --git a/plugins/rtmp-services/data/schema/service-schema-v4.json b/plugins/rtmp-services/data/schema/service-schema-v4.json index 61f3c0cf2d37e9..e5afe45851ea15 100644 --- a/plugins/rtmp-services/data/schema/service-schema-v4.json +++ b/plugins/rtmp-services/data/schema/service-schema-v4.json @@ -16,6 +16,18 @@ "description": "Name of the streaming service. Will be displayed in the Service dropdown.", "minLength": 1 }, + "protocol" : { + "type": "string", + "description": "Protocol used by the service. If missing the service is considered using RTMP or RTMPS.", + "enum": [ + "RTMP", + "RTMPS", + "HLS", + "FTL", + "SRT", + "RIST" + ] + }, "common": { "type": "boolean", "description": "Whether or not the service is shown in the list before it is expanded to all services by the user.", @@ -200,6 +212,18 @@ "required": [ "name", "servers" + ], + "allOf": [ + { + "$comment": "Require protocol field if not an RTMP(S) URL", + "if": { "not": { "properties": { "servers": { "items": { "properties": { "url": { "format": "uri", "pattern": "^rtmps?://" } } } } } } }, + "then": { "required": ["protocol"] } + }, + { + "$comment": "Require recommended output field if protocol field is not RTMP(S)", + "if": { "required": ["protocol"], "properties": { "protocol": { "pattern": "^(HLS|SRT|RIST|FTL)$" } } }, + "then": { "properties": { "recommended": { "required": ["output"] } } } + } ] }, "additionalItems": true diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index c9f8391ddd722e..e0fb4e5a489849 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -204,6 +204,7 @@ "common": false, "more_info_link": "https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison", "stream_key_link": "https://www.youtube.com/live_dashboard", + "protocol": "HLS", "supported video codecs": [ "h264", "hevc" @@ -1445,6 +1446,7 @@ { "name": "YouNow", "common": false, + "protocol": "FTL", "supported audio codecs": [ "opus" ], @@ -1687,6 +1689,7 @@ }, { "name": "SHOWROOM", + "protocol": "RTMP", "servers": [ { "name": "Default", @@ -1821,6 +1824,7 @@ { "name": "Glimesh", "stream_key_link": "https://glimesh.tv/users/settings/stream", + "protocol": "FTL", "supported audio codecs": [ "opus" ], @@ -2024,6 +2028,7 @@ }, { "name": "Dacast", + "protocol": "RTMP", "servers": [ { "name": "Default", diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 1aa20ec6758772..778d06d499a062 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -208,6 +208,35 @@ static inline bool get_bool_val(json_t *service, const char *key) return json_is_true(bool_val); } +#define RTMP_PREFIX "rtmp://" +#define RTMPS_PREFIX "rtmps://" + +static bool is_protocol_available(json_t *service) +{ + const char *protocol = get_string_val(service, "protocol"); + if (protocol) + return obs_is_output_protocol_registered(protocol); + + /* Test RTMP and RTMPS if no protocol found */ + json_t *servers; + size_t index; + json_t *server; + const char *url; + bool ret = false; + + servers = json_object_get(service, "servers"); + json_array_foreach (servers, index, server) { + url = get_string_val(server, "url"); + + if (strncmp(url, RTMP_PREFIX, strlen(RTMP_PREFIX)) == 0) + ret |= obs_is_output_protocol_registered("RTMP"); + else if (strncmp(url, RTMPS_PREFIX, strlen(RTMPS_PREFIX)) == 0) + ret |= obs_is_output_protocol_registered("RTMPS"); + } + + return ret; +} + static void add_service(obs_property_t *list, json_t *service, bool show_all, const char *cur_service) { @@ -258,6 +287,9 @@ static void add_services(obs_property_t *list, json_t *root, bool show_all, } json_array_foreach (root, index, service) { + /* Skip service with non-available protocol */ + if (!is_protocol_available(service)) + continue; add_service(list, service, show_all, cur_service); } @@ -399,11 +431,13 @@ static void fill_servers(obs_property_t *servers_prop, json_t *service, return; } + /* Assumption: Twitch should be RTMP only, so no RTMPS check */ if (strcmp(name, "Twitch") == 0) { if (fill_twitch_servers(servers_prop)) return; } + /* Assumption: Nimo TV should be RTMP only, so no RTMPS check in the ingest */ if (strcmp(name, "Nimo TV") == 0) { obs_property_list_add_string( servers_prop, obs_module_text("Server.Auto"), "auto"); @@ -416,6 +450,11 @@ static void fill_servers(obs_property_t *servers_prop, json_t *service, if (!server_name || !url) continue; + /* Skip RTMPS server if protocol not registered */ + if ((!obs_is_output_protocol_registered("RTMPS")) && + (strncmp(url, "rtmps://", 8) == 0)) + continue; + obs_property_list_add_string(servers_prop, server_name, url); } } @@ -449,6 +488,10 @@ static inline json_t *find_service(json_t *root, const char *name, *p_new_name = NULL; json_array_foreach (root, index, service) { + /* skip service with non-available protocol */ + if (!is_protocol_available(service)) + continue; + const char *cur_name = get_string_val(service, "name"); if (strcmp(name, cur_name) == 0) From 813b3b2763a9942a54b14ab4050d9d96bd0d62ea Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 5 Sep 2022 14:00:08 +0200 Subject: [PATCH 0398/2225] libobs,docs: Add protocol to Services API --- docs/sphinx/reference-services.rst | 10 ++++++++++ libobs/obs-module.c | 1 + libobs/obs-service.c | 8 ++++++++ libobs/obs-service.h | 2 ++ libobs/obs.h | 3 +++ 5 files changed, 24 insertions(+) diff --git a/docs/sphinx/reference-services.rst b/docs/sphinx/reference-services.rst index 85a0c876235c0e..7c6a89dfe379b1 100644 --- a/docs/sphinx/reference-services.rst +++ b/docs/sphinx/reference-services.rst @@ -148,6 +148,10 @@ Service Definition Structure the data manually (typically best to use strlist_split to generate this) +.. member:: const char *(*obs_service_info.get_protocol)(void *data) + + :return: The protocol used by the service + General Service Functions ------------------------- @@ -305,6 +309,12 @@ General Service Functions for the service, terminated with a *NULL* pointer. Does not need to be freed +--------------------- + +.. function:: const char *obs_service_get_protocol(const obs_service_t *service) + + :return: Protocol currently used for this service + .. --------------------------------------------------------------------------- .. _libobs/obs-service.h: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-service.h diff --git a/libobs/obs-module.c b/libobs/obs-module.c index 73c8228a57c1f2..cd7841b6c1960d 100644 --- a/libobs/obs-module.c +++ b/libobs/obs-module.c @@ -928,6 +928,7 @@ void obs_register_service_s(const struct obs_service_info *info, size_t size) CHECK_REQUIRED_VAL_(info, get_name, obs_register_service); CHECK_REQUIRED_VAL_(info, create, obs_register_service); CHECK_REQUIRED_VAL_(info, destroy, obs_register_service); + CHECK_REQUIRED_VAL_(info, get_protocol, obs_register_service); #undef CHECK_REQUIRED_VAL_ REGISTER_OBS_DEF(size, obs_service_info, obs->service_types, info); diff --git a/libobs/obs-service.c b/libobs/obs-service.c index a2cd0140c6d1da..607844f30016e8 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -477,3 +477,11 @@ obs_service_get_supported_video_codecs(const obs_service_t *service) service->context.data); return NULL; } + +const char *obs_service_get_protocol(const obs_service_t *service) +{ + if (!obs_service_valid(service, "obs_service_get_protocol")) + return NULL; + + return service->info.get_protocol(service->context.data); +} diff --git a/libobs/obs-service.h b/libobs/obs-service.h index f025260ff1b70f..e02ed822e7776f 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -88,6 +88,8 @@ struct obs_service_info { int *audio_bitrate); const char **(*get_supported_video_codecs)(void *data); + + const char *(*get_protocol)(void *data); }; EXPORT void obs_register_service_s(const struct obs_service_info *info, diff --git a/libobs/obs.h b/libobs/obs.h index f6e08e33a47568..f646f4b21dc12b 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2539,6 +2539,9 @@ obs_service_get_supported_video_codecs(const obs_service_t *service); * date. */ EXPORT const char *obs_service_get_output_type(const obs_service_t *service); +/** Returns the protocol for this service context */ +EXPORT const char *obs_service_get_protocol(const obs_service_t *service); + /* ------------------------------------------------------------------------- */ /* Source frame allocation functions */ EXPORT void obs_source_frame_init(struct obs_source_frame *frame, From 56411eda8e96c2c35043dbfa151a3eafe7a6780b Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 5 Sep 2022 14:58:27 +0200 Subject: [PATCH 0399/2225] libobs,docs: Add protocol enumeration functions --- docs/sphinx/reference-outputs.rst | 18 ++++++++++++++++++ libobs/obs-output.c | 28 ++++++++++++++++++++++++++++ libobs/obs.c | 9 +++++++++ libobs/obs.h | 6 ++++++ 4 files changed, 61 insertions(+) diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index eb8b94c0b1e652..e7c85a7e8d7ef3 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -709,6 +709,24 @@ General Output Functions --------------------- +.. function:: bool obs_enum_output_protocols(size_t idx, char **protocol) + + Enumerates all registered protocol. + +--------------------- + +.. function:: void obs_enum_output_types_with_protocol(const char *protocol, void *data, bool (*enum_cb)(void *data, const char *id)) + + Enumerates through a callback all available output types for the given protocol. + + :param protocol: Protocol of the outputs to enumerate + :param data: Data passed to the callback + :param enum_cb: Callback used when a matching output is found, the id + of the output is passed to the callback + :return: When all outputs are enumerated or if the callback return *false* + +--------------------- + Functions used by outputs ------------------------- diff --git a/libobs/obs-output.c b/libobs/obs-output.c index 148b31b4a13ece..c9543e4e8f035b 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -2723,3 +2723,31 @@ const char *obs_output_get_protocols(const obs_output_t *output) ? output->info.protocols : NULL; } + +void obs_enum_output_types_with_protocol(const char *protocol, void *data, + bool (*enum_cb)(void *data, + const char *id)) +{ + if (!obs_is_output_protocol_registered(protocol)) + return; + + size_t protocol_len = strlen(protocol); + for (size_t i = 0; i < obs->output_types.num; i++) { + if (!(obs->output_types.array[i].flags & OBS_OUTPUT_SERVICE)) + continue; + + const char *substr = obs->output_types.array[i].protocols; + while (substr && substr[0] != '\0') { + const char *next = strchr(substr, ';'); + size_t len = next ? (size_t)(next - substr) + : strlen(substr); + if (protocol_len == len && + strncmp(substr, protocol, len) == 0) { + if (!enum_cb(data, + obs->output_types.array[i].id)) + return; + } + substr = next ? next + 1 : NULL; + } + } +} diff --git a/libobs/obs.c b/libobs/obs.c index 3cd697a072defa..73e281eaa83733 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -3466,3 +3466,12 @@ bool obs_is_output_protocol_registered(const char *protocol) return false; } + +bool obs_enum_output_protocols(size_t idx, char **protocol) +{ + if (idx >= obs->data.protocols.num) + return false; + + *protocol = obs->data.protocols.array[idx]; + return true; +} diff --git a/libobs/obs.h b/libobs/obs.h index f646f4b21dc12b..5f82929c362230 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2215,6 +2215,12 @@ EXPORT const char *obs_output_get_protocols(const obs_output_t *output); EXPORT bool obs_is_output_protocol_registered(const char *protocol); +EXPORT bool obs_enum_output_protocols(size_t idx, char **protocol); + +EXPORT void obs_enum_output_types_with_protocol( + const char *protocol, void *data, + bool (*enum_cb)(void *data, const char *id)); + /* ------------------------------------------------------------------------- */ /* Functions used by outputs */ From fa58a38b24efef88a6baf67c41d280a9e8b29575 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 5 Sep 2022 15:19:32 +0200 Subject: [PATCH 0400/2225] rtmp-services: Add protocol getter to services --- plugins/rtmp-services/rtmp-common.c | 36 +++++++++++++++++++++++++++++ plugins/rtmp-services/rtmp-custom.c | 25 ++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 778d06d499a062..984053ffb790ec 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -13,6 +13,7 @@ struct rtmp_common { char *service; + char *protocol; char *server; char *key; @@ -118,11 +119,13 @@ static void rtmp_common_update(void *data, obs_data_t *settings) bfree(service->supported_resolutions); bfree(service->video_codecs); bfree(service->service); + bfree(service->protocol); bfree(service->server); bfree(service->output); bfree(service->key); service->service = bstrdup(obs_data_get_string(settings, "service")); + service->protocol = bstrdup(obs_data_get_string(settings, "protocol")); service->server = bstrdup(obs_data_get_string(settings, "server")); service->key = bstrdup(obs_data_get_string(settings, "key")); service->supports_additional_audio_track = false; @@ -166,6 +169,7 @@ static void rtmp_common_destroy(void *data) bfree(service->supported_resolutions); bfree(service->video_codecs); bfree(service->service); + bfree(service->protocol); bfree(service->server); bfree(service->output); bfree(service->key); @@ -478,6 +482,29 @@ static void fill_stream_key_link(json_t *service, obs_data_t *settings) stream_key_link); } +static void update_protocol(json_t *service, obs_data_t *settings) +{ + const char *protocol = get_string_val(service, "protocol"); + if (protocol) { + obs_data_set_string(settings, "protocol", protocol); + return; + } + + json_t *servers = json_object_get(service, "servers"); + if (!json_is_array(servers)) + return; + + json_t *server = json_array_get(servers, 0); + const char *url = get_string_val(server, "url"); + + if (strncmp(url, RTMPS_PREFIX, strlen(RTMPS_PREFIX)) == 0) { + obs_data_set_string(settings, "protocol", "RTMPS"); + return; + } + + obs_data_set_string(settings, "protocol", "RTMP"); +} + static inline json_t *find_service(json_t *root, const char *name, const char **p_new_name) { @@ -546,6 +573,7 @@ static bool service_selected(obs_properties_t *props, obs_property_t *p, fill_servers(obs_properties_get(props, "server"), service, name); fill_more_info_link(service, settings); fill_stream_key_link(service, settings); + update_protocol(service, settings); return true; } @@ -968,6 +996,13 @@ static const char *rtmp_common_password(void *data) return NULL; } +static const char *rtmp_common_get_protocol(void *data) +{ + struct rtmp_common *service = data; + + return service->protocol ? service->protocol : "RTMP"; +} + struct obs_service_info rtmp_common_service = { .id = "rtmp_common", .get_name = rtmp_common_getname, @@ -975,6 +1010,7 @@ struct obs_service_info rtmp_common_service = { .destroy = rtmp_common_destroy, .update = rtmp_common_update, .get_properties = rtmp_common_properties, + .get_protocol = rtmp_common_get_protocol, .get_url = rtmp_common_url, .get_key = rtmp_common_key, .get_username = rtmp_common_username, diff --git a/plugins/rtmp-services/rtmp-custom.c b/plugins/rtmp-services/rtmp-custom.c index 51276d6c8a45d0..53ef3d4bf6fd09 100644 --- a/plugins/rtmp-services/rtmp-custom.c +++ b/plugins/rtmp-services/rtmp-custom.c @@ -110,6 +110,30 @@ static const char *rtmp_custom_password(void *data) return service->password; } +#define RTMPS_PREFIX "rtmps://" +#define FTL_PREFIX "ftl://" +#define SRT_PREFIX "srt://" +#define RIST_PREFIX "rist://" + +static const char *rtmp_custom_get_protocol(void *data) +{ + struct rtmp_custom *service = data; + + if (strncmp(service->server, RTMPS_PREFIX, strlen(RTMPS_PREFIX)) == 0) + return "RTMPS"; + + if (strncmp(service->server, FTL_PREFIX, strlen(FTL_PREFIX)) == 0) + return "FTL"; + + if (strncmp(service->server, SRT_PREFIX, strlen(SRT_PREFIX)) == 0) + return "SRT"; + + if (strncmp(service->server, RIST_PREFIX, strlen(RIST_PREFIX)) == 0) + return "RIST"; + + return "RTMP"; +} + #define RTMP_PROTOCOL "rtmp" static void rtmp_custom_apply_settings(void *data, obs_data_t *video_settings, @@ -131,6 +155,7 @@ struct obs_service_info rtmp_custom_service = { .destroy = rtmp_custom_destroy, .update = rtmp_custom_update, .get_properties = rtmp_custom_properties, + .get_protocol = rtmp_custom_get_protocol, .get_url = rtmp_custom_url, .get_key = rtmp_custom_key, .get_username = rtmp_custom_username, From 48dc6dde68aa698a35fbe40205da976fe28ff1b1 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 28 Sep 2022 18:18:24 +0200 Subject: [PATCH 0401/2225] libobs,docs: Add supported codecs functions with output id --- docs/sphinx/reference-outputs.rst | 2 ++ libobs/obs-output.c | 12 ++++++++++++ libobs/obs.h | 4 ++++ 3 files changed, 18 insertions(+) diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index e7c85a7e8d7ef3..ba60f70ebbaf83 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -679,7 +679,9 @@ General Output Functions --------------------- .. function:: const char *obs_output_get_supported_video_codecs(const obs_output_t *output) + const char *obs_get_output_supported_video_codecs(const char *id) const char *obs_output_get_supported_audio_codecs(const obs_output_t *output) + const char *obs_get_output_supported_video_codecs(const char *id) :return: Supported video/audio codecs of an encoded output, separated by semicolon diff --git a/libobs/obs-output.c b/libobs/obs-output.c index c9543e4e8f035b..b968fefd25b41e 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -2751,3 +2751,15 @@ void obs_enum_output_types_with_protocol(const char *protocol, void *data, } } } + +const char *obs_get_output_supported_video_codecs(const char *id) +{ + const struct obs_output_info *info = find_output(id); + return info ? info->encoded_video_codecs : NULL; +} + +const char *obs_get_output_supported_audio_codecs(const char *id) +{ + const struct obs_output_info *info = find_output(id); + return info ? info->encoded_audio_codecs : NULL; +} diff --git a/libobs/obs.h b/libobs/obs.h index 5f82929c362230..fc3ef201930b58 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2221,6 +2221,10 @@ EXPORT void obs_enum_output_types_with_protocol( const char *protocol, void *data, bool (*enum_cb)(void *data, const char *id)); +EXPORT const char *obs_get_output_supported_video_codecs(const char *id); + +EXPORT const char *obs_get_output_supported_audio_codecs(const char *id); + /* ------------------------------------------------------------------------- */ /* Functions used by outputs */ From 5a409347d5bf7dec50c41641660a131c265fb4ad Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 21 Sep 2022 07:53:47 +0200 Subject: [PATCH 0402/2225] UI: Refactor Qt slots in stream settings page --- UI/window-basic-settings-stream.cpp | 81 ++++++++++++++--------------- UI/window-basic-settings.hpp | 13 +++-- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index f691baefce4f47..6dd8ecdbd9d615 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -78,29 +78,10 @@ void OBSBasicSettings::InitStreamPage() ui->twitchAddonDropdown->addItem( QTStr("Basic.Settings.Stream.TTVAddon.Both")); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateServerList())); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateKeyLink())); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateVodTrackSetting())); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateServiceRecommendations())); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateResFPSLimits())); - connect(ui->customServer, SIGNAL(textChanged(const QString &)), this, - SLOT(UpdateKeyLink())); connect(ui->ignoreRecommended, SIGNAL(clicked(bool)), this, SLOT(DisplayEnforceWarning(bool))); connect(ui->ignoreRecommended, SIGNAL(toggled(bool)), this, SLOT(UpdateResFPSLimits())); - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateMoreInfoLink())); - - connect(ui->service, SIGNAL(currentIndexChanged(int)), this, - SLOT(UpdateAdvNetworkGroup())); - connect(ui->customServer, SIGNAL(textChanged(const QString &)), this, - SLOT(UpdateAdvNetworkGroup())); } void OBSBasicSettings::LoadStream1Settings() @@ -458,13 +439,37 @@ void OBSBasicSettings::UseStreamKeyAdvClicked() ui->streamKeyWidget->setVisible(true); } -void OBSBasicSettings::on_service_currentIndexChanged(int) +void OBSBasicSettings::on_service_currentIndexChanged(int idx) { - bool showMore = ui->service->currentData().toInt() == - (int)ListOpt::ShowAll; - if (showMore) + if (ui->service->currentData().toInt() == (int)ListOpt::ShowAll) { + LoadServices(true); + ui->service->showPopup(); return; + } + + ServiceChanged(); + + UpdateMoreInfoLink(); + UpdateServerList(); + UpdateKeyLink(); + UpdateServiceRecommendations(); + + UpdateVodTrackSetting(); + UpdateAdvNetworkGroup(); + + if (ServiceSupportsCodecCheck() && UpdateResFPSLimits()) + lastServiceIdx = idx; +} +void OBSBasicSettings::on_customServer_textChanged(const QString &) +{ + UpdateKeyLink(); + + UpdateAdvNetworkGroup(); +} + +void OBSBasicSettings::ServiceChanged() +{ std::string service = QT_TO_UTF8(ui->service->currentText()); bool custom = IsCustomService(); @@ -518,16 +523,8 @@ void OBSBasicSettings::on_service_currentIndexChanged(int) void OBSBasicSettings::UpdateServerList() { QString serviceName = ui->service->currentText(); - bool showMore = ui->service->currentData().toInt() == - (int)ListOpt::ShowAll; - if (showMore) { - LoadServices(true); - ui->service->showPopup(); - return; - } else { - lastService = serviceName; - } + lastService = serviceName; obs_properties_t *props = obs_get_service_properties("rtmp_common"); obs_property_t *services = obs_properties_get(props, "service"); @@ -985,17 +982,14 @@ extern void set_closest_res(int &cx, int &cy, * which as of this writing, and hopefully for the foreseeable future, there is * only one. */ -void OBSBasicSettings::UpdateResFPSLimits() +bool OBSBasicSettings::UpdateResFPSLimits() { if (loading) - return; - - if (!ServiceSupportsCodecCheck()) - return; + return false; int idx = ui->service->currentIndex(); if (idx == -1) - return; + return false; bool ignoreRecommended = ui->ignoreRecommended->isChecked(); BPtr res_list; @@ -1073,8 +1067,7 @@ void OBSBasicSettings::UpdateResFPSLimits() ui->ignoreRecommended->setProperty("changed", true); stream1Changed = true; EnableApplyButton(true); - UpdateResFPSLimits(); - return; + return UpdateResFPSLimits(); } QMessageBox::StandardButton button; @@ -1106,7 +1099,7 @@ void OBSBasicSettings::UpdateResFPSLimits() "setChecked", Qt::QueuedConnection, Q_ARG(bool, true)); - return; + return false; } } @@ -1187,7 +1180,8 @@ void OBSBasicSettings::UpdateResFPSLimits() /* ------------------------------------ */ lastIgnoreRecommended = (int)ignoreRecommended; - lastServiceIdx = idx; + + return true; } bool OBSBasicSettings::IsServiceOutputHasNetworkFeatures() @@ -1287,6 +1281,9 @@ static QString get_simple_fallback(const QString &enc) bool OBSBasicSettings::ServiceSupportsCodecCheck() { + if (loading) + return false; + if (ServiceAndCodecCompatible()) { if (lastServiceIdx != ui->service->currentIndex()) ResetEncoders(true); diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 51f00336f8e98c..7c2a9e2b0a793c 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -263,14 +263,18 @@ class OBSBasicSettings : public QDialog { QString lastService; int prevLangIndex; bool prevBrowserAccel; -private slots: + + void ServiceChanged(); void UpdateServerList(); void UpdateKeyLink(); void UpdateVodTrackSetting(); void UpdateServiceRecommendations(); - void RecreateOutputResolutionWidget(); - void UpdateResFPSLimits(); void UpdateMoreInfoLink(); + void UpdateAdvNetworkGroup(); + +private slots: + void RecreateOutputResolutionWidget(); + bool UpdateResFPSLimits(); void DisplayEnforceWarning(bool checked); void on_show_clicked(); void on_authPwShow_clicked(); @@ -382,6 +386,7 @@ private slots: void on_buttonBox_clicked(QAbstractButton *button); void on_service_currentIndexChanged(int idx); + void on_customServer_textChanged(const QString &text); void on_simpleOutputBrowse_clicked(); void on_advOutRecPathBrowse_clicked(); void on_advOutFFPathBrowse_clicked(); @@ -435,8 +440,6 @@ private slots: void UpdateStreamDelayEstimate(); - void UpdateAdvNetworkGroup(); - void UpdateAutomaticReplayBufferCheckboxes(); void AdvOutSplitFileChanged(); From e00e2712cf86bc0026828d4915029e517b15194c Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 28 Sep 2022 18:23:08 +0200 Subject: [PATCH 0403/2225] UI: Use protocol to list compatible codecs --- UI/window-basic-settings-stream.cpp | 119 +++++++++++++++++++++++++--- UI/window-basic-settings.hpp | 3 + 2 files changed, 109 insertions(+), 13 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 6dd8ecdbd9d615..5ca0c293b6256d 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -99,11 +99,13 @@ void OBSBasicSettings::LoadStream1Settings() const char *service = obs_data_get_string(settings, "service"); const char *server = obs_data_get_string(settings, "server"); const char *key = obs_data_get_string(settings, "key"); + protocol = QT_UTF8(obs_service_get_protocol(service_obj)); if (strcmp(type, "rtmp_custom") == 0) { ui->service->setCurrentIndex(0); ui->customServer->setText(server); lastServiceIdx = 0; + lastCustomServer = ui->customServer->text(); bool use_auth = obs_data_get_bool(settings, "use_auth"); const char *username = @@ -455,17 +457,26 @@ void OBSBasicSettings::on_service_currentIndexChanged(int idx) UpdateServiceRecommendations(); UpdateVodTrackSetting(); + + protocol = FindProtocol(); UpdateAdvNetworkGroup(); - if (ServiceSupportsCodecCheck() && UpdateResFPSLimits()) + if (ServiceSupportsCodecCheck() && UpdateResFPSLimits()) { lastServiceIdx = idx; + if (idx == 0) + lastCustomServer = ui->customServer->text(); + } } void OBSBasicSettings::on_customServer_textChanged(const QString &) { UpdateKeyLink(); + protocol = FindProtocol(); UpdateAdvNetworkGroup(); + + if (ServiceSupportsCodecCheck()) + lastCustomServer = ui->customServer->text(); } void OBSBasicSettings::ServiceChanged() @@ -520,6 +531,43 @@ void OBSBasicSettings::ServiceChanged() } } +QString OBSBasicSettings::FindProtocol() +{ + if (IsCustomService() && !ui->customServer->text().isEmpty()) { + + QString server = ui->customServer->text(); + + if (server.startsWith("rtmps://")) + return QString("RTMPS"); + + if (server.startsWith("ftl://")) + return QString("FTL"); + + if (server.startsWith("srt://")) + return QString("SRT"); + + if (server.startsWith("rist://")) + return QString("RIST"); + + } else { + obs_properties_t *props = + obs_get_service_properties("rtmp_common"); + obs_property_t *services = obs_properties_get(props, "service"); + + OBSDataAutoRelease settings = obs_data_create(); + + obs_data_set_string(settings, "service", + QT_TO_UTF8(ui->service->currentText())); + obs_property_modified(services, settings); + + obs_properties_destroy(props); + + return QT_UTF8(obs_data_get_string(settings, "protocol")); + } + + return QString("RTMP"); +} + void OBSBasicSettings::UpdateServerList() { QString serviceName = ui->service->currentText(); @@ -1228,17 +1276,19 @@ static inline bool service_supports_encoder(const char **codecs, return service_supports_codec(codecs, codec); } -bool OBSBasicSettings::ServiceAndCodecCompatible() +static bool return_first_id(void *data, const char *id) { - if (IsCustomService()) - return true; - if (ui->service->currentData().toInt() == (int)ListOpt::ShowAll) - return true; + const char **output = (const char **)data; + + *output = id; + return false; +} +bool OBSBasicSettings::ServiceAndCodecCompatible() +{ bool simple = (ui->outputMode->currentIndex() == 0); + bool ret; - OBSService service = SpawnTempService(); - const char **codecs = obs_service_get_supported_video_codecs(service); const char *codec; if (simple) { @@ -1251,7 +1301,29 @@ bool OBSBasicSettings::ServiceAndCodecCompatible() codec = obs_get_encoder_codec(QT_TO_UTF8(encoder)); } - return service_supports_codec(codecs, codec); + OBSService service = SpawnTempService(); + const char **codecs = obs_service_get_supported_video_codecs(service); + + if (!codecs || IsCustomService()) { + const char *output; + char **output_codecs; + + obs_enum_output_types_with_protocol(QT_TO_UTF8(protocol), + &output, return_first_id); + + output_codecs = strlist_split( + obs_get_output_supported_video_codecs(output), ';', + false); + + ret = service_supports_codec((const char **)output_codecs, + codec); + + strlist_free(output_codecs); + } else { + ret = service_supports_codec(codecs, codec); + } + + return ret; } /* we really need a way to find fallbacks in a less hardcoded way. maybe. */ @@ -1285,7 +1357,8 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() return false; if (ServiceAndCodecCompatible()) { - if (lastServiceIdx != ui->service->currentIndex()) + if (lastServiceIdx != ui->service->currentIndex() || + IsCustomService()) ResetEncoders(true); return true; } @@ -1324,9 +1397,17 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() #undef WARNING_VAL if (button == QMessageBox::No) { - QMetaObject::invokeMethod(ui->service, "setCurrentIndex", - Qt::QueuedConnection, - Q_ARG(int, lastServiceIdx)); + if (lastServiceIdx == 0 && + lastServiceIdx == ui->service->currentIndex()) + QMetaObject::invokeMethod(ui->customServer, "setText", + Qt::QueuedConnection, + Q_ARG(QString, + lastCustomServer)); + else + QMetaObject::invokeMethod(ui->service, + "setCurrentIndex", + Qt::QueuedConnection, + Q_ARG(int, lastServiceIdx)); return false; } @@ -1344,8 +1425,20 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) OBSService service = SpawnTempService(); const char **codecs = obs_service_get_supported_video_codecs(service); const char *type; + BPtr output_codecs; size_t idx = 0; + if (!codecs || IsCustomService()) { + const char *output; + + obs_enum_output_types_with_protocol(QT_TO_UTF8(protocol), + &output, return_first_id); + output_codecs = strlist_split( + obs_get_output_supported_video_codecs(output), ';', + false); + codecs = (const char **)output_codecs.Get(); + } + QSignalBlocker s1(ui->simpleOutStrEncoder); QSignalBlocker s2(ui->advOutEncoder); diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 7c2a9e2b0a793c..18a6e43b473323 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -261,10 +261,13 @@ class OBSBasicSettings : public QDialog { void OnOAuthStreamKeyConnected(); void OnAuthConnected(); QString lastService; + QString protocol; + QString lastCustomServer; int prevLangIndex; bool prevBrowserAccel; void ServiceChanged(); + QString FindProtocol(); void UpdateServerList(); void UpdateKeyLink(); void UpdateVodTrackSetting(); From 9d8d98b142135304f82572936572865dcfbb51b7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 7 Oct 2022 15:10:43 +0200 Subject: [PATCH 0404/2225] rtmp-services: Remove fallback to H264 if no codec found The fallback in now inside the output. --- plugins/rtmp-services/rtmp-common.c | 31 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 984053ffb790ec..3a62fbc00cd7d7 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -117,7 +117,8 @@ static void rtmp_common_update(void *data, obs_data_t *settings) struct rtmp_common *service = data; bfree(service->supported_resolutions); - bfree(service->video_codecs); + if (service->video_codecs) + bfree(service->video_codecs); bfree(service->service); bfree(service->protocol); bfree(service->server); @@ -167,7 +168,8 @@ static void rtmp_common_destroy(void *data) struct rtmp_common *service = data; bfree(service->supported_resolutions); - bfree(service->video_codecs); + if (service->video_codecs) + bfree(service->video_codecs); bfree(service->service); bfree(service->protocol); bfree(service->server); @@ -945,21 +947,20 @@ static const char **rtmp_common_get_supported_video_codecs(void *data) json_t *json_video_codecs = json_object_get(json_service, "supported video codecs"); - if (json_is_array(json_video_codecs)) { - size_t index; - json_t *item; + if (!json_is_array(json_video_codecs)) { + goto fail; + } - json_array_foreach (json_video_codecs, index, item) { - char codec[16]; + size_t index; + json_t *item; - snprintf(codec, sizeof(codec), "%s", - json_string_value(item)); - if (codecs.len) - dstr_cat(&codecs, ";"); - dstr_cat(&codecs, codec); - } - } else { - dstr_cat(&codecs, "h264;"); + json_array_foreach (json_video_codecs, index, item) { + char codec[16]; + + snprintf(codec, sizeof(codec), "%s", json_string_value(item)); + if (codecs.len) + dstr_cat(&codecs, ";"); + dstr_cat(&codecs, codec); } service->video_codecs = strlist_split(codecs.array, ';', false); From 44ca002d02ea2586a2cbb6de9c9449e88766e723 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 28 Sep 2022 18:23:47 +0200 Subject: [PATCH 0405/2225] UI: Use protocol to enable network options --- UI/window-basic-settings-stream.cpp | 17 ----------------- UI/window-basic-settings.cpp | 2 +- UI/window-basic-settings.hpp | 2 -- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 5ca0c293b6256d..4a3530559007b7 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1232,23 +1232,6 @@ bool OBSBasicSettings::UpdateResFPSLimits() return true; } -bool OBSBasicSettings::IsServiceOutputHasNetworkFeatures() -{ - if (IsCustomService()) - return ui->customServer->text().startsWith("rtmp"); - - OBSServiceAutoRelease service = SpawnTempService(); - const char *output = obs_service_get_output_type(service); - - if (!output) - return true; - - if (strcmp(output, "rtmp_output") == 0) - return true; - - return false; -} - static bool service_supports_codec(const char **codecs, const char *codec) { if (!codecs) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 2a5ac8d88287d6..0e372b8397efc2 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -5621,7 +5621,7 @@ void OBSBasicSettings::RecreateOutputResolutionWidget() void OBSBasicSettings::UpdateAdvNetworkGroup() { - bool enabled = IsServiceOutputHasNetworkFeatures(); + bool enabled = protocol.contains("RTMP"); ui->advNetworkDisabled->setVisible(!enabled); diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 18a6e43b473323..e535f88a25cfc2 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -377,8 +377,6 @@ private slots: OBSService GetStream1Service(); - bool IsServiceOutputHasNetworkFeatures(); - bool ServiceAndCodecCompatible(); bool ServiceSupportsCodecCheck(); From 8d6cacc35b51b84641ff435faf1f2ce7f63c2955 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 28 Sep 2022 18:24:18 +0200 Subject: [PATCH 0406/2225] UI: Remove hardcoded stream codec list --- UI/window-basic-settings-stream.cpp | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 4a3530559007b7..a82cf3b53aad47 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1447,27 +1447,13 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) if (obs_get_encoder_type(type) != OBS_ENCODER_VIDEO) continue; - const char *streaming_codecs[] = { - "h264", -#ifdef ENABLE_HEVC - "hevc", -#endif - }; - - bool is_streaming_codec = false; - for (const char *test_codec : streaming_codecs) { - if (strcmp(codec, test_codec) == 0) { - is_streaming_codec = true; - break; - } - } if ((caps & ENCODER_HIDE_FLAGS) != 0) continue; QString qName = QT_UTF8(name); QString qType = QT_UTF8(type); - if (is_streaming_codec && service_supports_codec(codecs, codec)) + if (service_supports_codec(codecs, codec)) ui->advOutEncoder->addItem(qName, qType); if (!streamOnly) ui->advOutRecEncoder->addItem(qName, qType); From e317c88f5556fa5395fc8a0d652817018868fbda Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 10:50:26 +0100 Subject: [PATCH 0407/2225] obs-ffmpeg: Remove AV1 from SRT/RIST supported codecs MPEG-TS standard is not ready for AV1 --- plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 4 ++-- plugins/obs-ffmpeg/obs-ffmpeg-mux.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index f9cc4ae7e38b5d..15014a25bd8ce6 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -1291,9 +1291,9 @@ struct obs_output_info ffmpeg_mpegts_muxer = { OBS_OUTPUT_SERVICE, .protocols = "SRT;RIST", #ifdef ENABLE_HEVC - .encoded_video_codecs = "h264;hevc;av1", + .encoded_video_codecs = "h264;hevc", #else - .encoded_video_codecs = "h264;av1", + .encoded_video_codecs = "h264", #endif .encoded_audio_codecs = "aac", .get_name = ffmpeg_mpegts_getname, diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index d4156b5153e283..8d8539fbe3531b 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -945,7 +945,7 @@ struct obs_output_info ffmpeg_mpegts_muxer = { .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK | OBS_OUTPUT_SERVICE, .protocols = "SRT;RIST", - .encoded_video_codecs = "h264;av1", + .encoded_video_codecs = "h264", .encoded_audio_codecs = "aac", .get_name = ffmpeg_mpegts_mux_getname, .create = ffmpeg_mux_create, From 1e0f4a6ebfc9cb57004f43e65c75c6a878638e8c Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 7 Oct 2022 11:30:45 +0200 Subject: [PATCH 0408/2225] libobs,docs: Add preferred output type to Service API --- docs/sphinx/reference-services.rst | 8 +++++++- libobs/obs-service.c | 27 +++++++++++++++++---------- libobs/obs-service.h | 1 + libobs/obs.h | 6 +++++- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/docs/sphinx/reference-services.rst b/docs/sphinx/reference-services.rst index 7c6a89dfe379b1..2cd8a624850a17 100644 --- a/docs/sphinx/reference-services.rst +++ b/docs/sphinx/reference-services.rst @@ -137,7 +137,7 @@ Service Definition Structure (Optional) - :return: The output type that should be used with this service + :return: The output type that should be preferred with this service .. member:: const char **(*get_supported_video_codecs)(void *data) @@ -315,6 +315,12 @@ General Service Functions :return: Protocol currently used for this service +--------------------- + +.. function:: const char *obs_service_get_preferred_output_type(const obs_service_t *service) + + :return: The output type that should be preferred with this service + .. --------------------------------------------------------------------------- .. _libobs/obs-service.h: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-service.h diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 607844f30016e8..9b7b5f085f46e3 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -411,16 +411,6 @@ const char *obs_service_get_id(const obs_service_t *service) : NULL; } -const char *obs_service_get_output_type(const obs_service_t *service) -{ - if (!obs_service_valid(service, "obs_service_get_output_type")) - return NULL; - - if (service->info.get_output_type) - return service->info.get_output_type(service->context.data); - return NULL; -} - void obs_service_get_supported_resolutions( const obs_service_t *service, struct obs_service_resolution **resolutions, size_t *count) @@ -485,3 +475,20 @@ const char *obs_service_get_protocol(const obs_service_t *service) return service->info.get_protocol(service->context.data); } + +/* OBS_DEPRECATED */ +const char *obs_service_get_output_type(const obs_service_t *service) +{ + return obs_service_get_preferred_output_type(service); +} + +const char *obs_service_get_preferred_output_type(const obs_service_t *service) +{ + if (!obs_service_valid(service, + "obs_service_get_preferred_output_type")) + return NULL; + + if (service->info.get_output_type) + return service->info.get_output_type(service->context.data); + return NULL; +} diff --git a/libobs/obs-service.h b/libobs/obs-service.h index e02ed822e7776f..56a93ad85a7ce5 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -77,6 +77,7 @@ struct obs_service_info { void *type_data; void (*free_type_data)(void *type_data); + /* TODO: Rename to 'get_preferred_output_type' once a API/ABI break happen */ const char *(*get_output_type)(void *data); void (*get_supported_resolutions)( diff --git a/libobs/obs.h b/libobs/obs.h index fc3ef201930b58..24983fead4eb16 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2547,11 +2547,15 @@ obs_service_get_supported_video_codecs(const obs_service_t *service); /* NOTE: This function is temporary and should be removed/replaced at a later * date. */ -EXPORT const char *obs_service_get_output_type(const obs_service_t *service); +OBS_DEPRECATED EXPORT const char * +obs_service_get_output_type(const obs_service_t *service); /** Returns the protocol for this service context */ EXPORT const char *obs_service_get_protocol(const obs_service_t *service); +EXPORT const char * +obs_service_get_preferred_output_type(const obs_service_t *service); + /* ------------------------------------------------------------------------- */ /* Source frame allocation functions */ EXPORT void obs_source_frame_init(struct obs_source_frame *frame, From 213eb613d3d276be30db1d8012162ced8b0d9288 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 7 Oct 2022 11:31:22 +0200 Subject: [PATCH 0409/2225] rtmp-services: Remove output getter from rtmp_common --- .../data/schema/service-schema-v4.json | 2 +- plugins/rtmp-services/rtmp-common.c | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/plugins/rtmp-services/data/schema/service-schema-v4.json b/plugins/rtmp-services/data/schema/service-schema-v4.json index e5afe45851ea15..88b33abd3a93b8 100644 --- a/plugins/rtmp-services/data/schema/service-schema-v4.json +++ b/plugins/rtmp-services/data/schema/service-schema-v4.json @@ -118,7 +118,7 @@ }, "output": { "type": "string", - "description": "OBS output module used.", + "description": "OBS output module used. Unused since OBS Studio 30, kept for backward compatibility.", "enum": [ "rtmp_output", "ffmpeg_hls_muxer", diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 3a62fbc00cd7d7..94bba3f6c8baba 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -17,7 +17,6 @@ struct rtmp_common { char *server; char *key; - char *output; struct obs_service_resolution *supported_resolutions; size_t supported_resolutions_count; int max_fps; @@ -77,10 +76,6 @@ static void ensure_valid_url(struct rtmp_common *service, json_t *json, static void update_recommendations(struct rtmp_common *service, json_t *rec) { - const char *out = get_string_val(rec, "output"); - if (out) - service->output = bstrdup(out); - json_t *sr = json_object_get(rec, "supported resolutions"); if (sr && json_is_array(sr)) { DARRAY(struct obs_service_resolution) res_list; @@ -122,7 +117,6 @@ static void rtmp_common_update(void *data, obs_data_t *settings) bfree(service->service); bfree(service->protocol); bfree(service->server); - bfree(service->output); bfree(service->key); service->service = bstrdup(obs_data_get_string(settings, "service")); @@ -130,7 +124,6 @@ static void rtmp_common_update(void *data, obs_data_t *settings) service->server = bstrdup(obs_data_get_string(settings, "server")); service->key = bstrdup(obs_data_get_string(settings, "key")); service->supports_additional_audio_track = false; - service->output = NULL; service->video_codecs = NULL; service->supported_resolutions = NULL; service->supported_resolutions_count = 0; @@ -158,9 +151,6 @@ static void rtmp_common_update(void *data, obs_data_t *settings) } } json_decref(root); - - if (!service->output) - service->output = bstrdup("rtmp_output"); } static void rtmp_common_destroy(void *data) @@ -173,7 +163,6 @@ static void rtmp_common_destroy(void *data) bfree(service->service); bfree(service->protocol); bfree(service->server); - bfree(service->output); bfree(service->key); bfree(service); } @@ -740,12 +729,6 @@ static void rtmp_common_apply_settings(void *data, obs_data_t *video_settings, } } -static const char *rtmp_common_get_output_type(void *data) -{ - struct rtmp_common *service = data; - return service->output; -} - static const char *rtmp_common_url(void *data) { struct rtmp_common *service = data; @@ -1017,7 +1000,6 @@ struct obs_service_info rtmp_common_service = { .get_username = rtmp_common_username, .get_password = rtmp_common_password, .apply_encoder_settings = rtmp_common_apply_settings, - .get_output_type = rtmp_common_get_output_type, .get_supported_resolutions = rtmp_common_get_supported_resolutions, .get_max_fps = rtmp_common_get_max_fps, .get_max_bitrate = rtmp_common_get_max_bitrate, From ea2858705cee8da9189604454925c0f28ca3b596 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 7 Oct 2022 11:42:12 +0200 Subject: [PATCH 0410/2225] UI: Select streaming output based on the protocol --- UI/data/locale/en-US.ini | 1 + UI/window-basic-auto-config-test.cpp | 52 ++++++++++++++- UI/window-basic-main-outputs.cpp | 97 +++++++++++++++++++++------- 3 files changed, 123 insertions(+), 27 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index cc32edf6ebbe47..a5dd0da3a9395c 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -218,6 +218,7 @@ Basic.AutoConfig.TestPage="Final Results" Basic.AutoConfig.TestPage.SubTitle.Testing="The program is now executing a set of tests to estimate the ideal settings" Basic.AutoConfig.TestPage.SubTitle.Complete="Testing complete" Basic.AutoConfig.TestPage.TestingBandwidth="Performing bandwidth test, this may take a few minutes..." +Basic.AutoConfig.TestPage.TestingBandwidth.NoOutput="No output for the protocol of this service was found" Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Connecting to: %1..." Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Failed to connect to any servers, please check your internet connection and try again." Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testing bandwidth for: %1" diff --git a/UI/window-basic-auto-config-test.cpp b/UI/window-basic-auto-config-test.cpp index ceb2e1cfbaa026..c6d7a694267623 100644 --- a/UI/window-basic-auto-config-test.cpp +++ b/UI/window-basic-auto-config-test.cpp @@ -88,6 +88,7 @@ class TestMode { #define SUBTITLE_TESTING TEST_STR("Subtitle.Testing") #define SUBTITLE_COMPLETE TEST_STR("Subtitle.Complete") #define TEST_BW TEST_STR("TestingBandwidth") +#define TEST_BW_NO_OUTPUT TEST_STR("TestingBandwidth.NoOutput") #define TEST_BW_CONNECTING TEST_STR("TestingBandwidth.Connecting") #define TEST_BW_CONNECT_FAIL TEST_STR("TestingBandwidth.ConnectFailed") #define TEST_BW_SERVER TEST_STR("TestingBandwidth.Server") @@ -155,6 +156,23 @@ static inline void string_depad_key(string &key) const char *FindAudioEncoderFromCodec(const char *type); +static inline bool can_use_output(const char *prot, const char *output, + const char *prot_test1, + const char *prot_test2 = nullptr) +{ + return (strcmp(prot, prot_test1) == 0 || + (prot_test2 && strcmp(prot, prot_test2) == 0)) && + (obs_get_output_flags(output) & OBS_OUTPUT_SERVICE) != 0; +} + +static bool return_first_id(void *data, const char *id) +{ + const char **output = (const char **)data; + + *output = id; + return false; +} + void AutoConfigTestPage::TestBandwidthThread() { bool connected = false; @@ -268,9 +286,37 @@ void AutoConfigTestPage::TestBandwidthThread() /* -----------------------------------*/ /* create output */ - const char *output_type = obs_service_get_output_type(service); - if (!output_type) - output_type = "rtmp_output"; + /* Check if the service has a preferred output type */ + const char *output_type = + obs_service_get_preferred_output_type(service); + if (!output_type || + (obs_get_output_flags(output_type) & OBS_OUTPUT_SERVICE) == 0) { + /* Otherwise, prefer first-party output types */ + const char *protocol = obs_service_get_protocol(service); + + if (can_use_output(protocol, "rtmp_output", "RTMP", "RTMPS")) { + output_type = "rtmp_output"; + } else if (can_use_output(protocol, "ffmpeg_hls_muxer", + "HLS")) { + output_type = "ffmpeg_hls_muxer"; + } else if (can_use_output(protocol, "ffmpeg_mpegts_muxer", + "SRT", "RIST")) { + output_type = "ffmpeg_mpegts_muxer"; + } + + /* If third-party protocol, use the first enumerated type */ + if (!output_type) + obs_enum_output_types_with_protocol( + protocol, &output_type, return_first_id); + + /* If none, fail */ + if (!output_type) { + QMetaObject::invokeMethod( + this, "Failure", + Q_ARG(QString, QTStr(TEST_BW_NO_OUTPUT))); + return; + } + } OBSOutputAutoRelease output = obs_output_create(output_type, "test_stream", nullptr, nullptr); diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 8a78d3240a45a7..534b0d69f52f3d 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -210,6 +210,73 @@ static bool CreateAACEncoder(OBSEncoder &res, string &id, int bitrate, return false; } +static inline bool can_use_output(const char *prot, const char *output, + const char *prot_test1, + const char *prot_test2 = nullptr) +{ + return (strcmp(prot, prot_test1) == 0 || + (prot_test2 && strcmp(prot, prot_test2) == 0)) && + (obs_get_output_flags(output) & OBS_OUTPUT_SERVICE) != 0; +} + +static bool return_first_id(void *data, const char *id) +{ + const char **output = (const char **)data; + + *output = id; + return false; +} + +static const char *GetStreamOutputType(const obs_service_t *service) +{ + const char *protocol = obs_service_get_protocol(service); + const char *output = nullptr; + + if (!protocol) { + blog(LOG_WARNING, "The service '%s' has no protocol set", + obs_service_get_id(service)); + return nullptr; + } + + if (!obs_is_output_protocol_registered(protocol)) { + blog(LOG_WARNING, "The protocol '%s' is not registered", + protocol); + return nullptr; + } + + /* Check if the service has a preferred output type */ + output = obs_service_get_preferred_output_type(service); + if (output) { + if ((obs_get_output_flags(output) & OBS_OUTPUT_SERVICE) != 0) + return output; + + blog(LOG_WARNING, + "The output '%s' is not registered, fallback to another one", + output); + } + + /* Otherwise, prefer first-party output types */ + if (can_use_output(protocol, "rtmp_output", "RTMP", "RTMPS")) { + return "rtmp_output"; + } else if (can_use_output(protocol, "ffmpeg_hls_muxer", "HLS")) { + return "ffmpeg_hls_muxer"; + } else if (can_use_output(protocol, "ffmpeg_mpegts_muxer", "SRT", + "RIST")) { + return "ffmpeg_mpegts_muxer"; + } + + /* If third-party protocol, use the first enumerated type */ + obs_enum_output_types_with_protocol(protocol, &output, return_first_id); + if (output) + return output; + + blog(LOG_WARNING, + "No output compatible with the service '%s' is registered", + obs_service_get_id(service)); + + return nullptr; +} + /* ------------------------------------------------------------------------ */ inline BasicOutputHandler::BasicOutputHandler(OBSBasic *main_) : main(main_) @@ -913,18 +980,9 @@ bool SimpleOutput::SetupStreaming(obs_service_t *service) /* --------------------- */ - const char *type = obs_service_get_output_type(service); - if (!type) { - type = "rtmp_output"; - const char *url = obs_service_get_url(service); - if (url != NULL && - strncmp(url, FTL_PROTOCOL, strlen(FTL_PROTOCOL)) == 0) { - type = "ftl_output"; - } else if (url != NULL && strncmp(url, RTMP_PROTOCOL, - strlen(RTMP_PROTOCOL)) != 0) { - type = "ffmpeg_mpegts_muxer"; - } - } + const char *type = GetStreamOutputType(service); + if (!type) + return false; /* XXX: this is messy and disgusting and should be refactored */ if (outputType != type) { @@ -1898,18 +1956,9 @@ bool AdvancedOutput::SetupStreaming(obs_service_t *service) /* --------------------- */ - const char *type = obs_service_get_output_type(service); - if (!type) { - type = "rtmp_output"; - const char *url = obs_service_get_url(service); - if (url != NULL && - strncmp(url, FTL_PROTOCOL, strlen(FTL_PROTOCOL)) == 0) { - type = "ftl_output"; - } else if (url != NULL && strncmp(url, RTMP_PROTOCOL, - strlen(RTMP_PROTOCOL)) != 0) { - type = "ffmpeg_mpegts_muxer"; - } - } + const char *type = GetStreamOutputType(service); + if (!type) + return false; /* XXX: this is messy and disgusting and should be refactored */ if (outputType != type) { From aeab6b8fc4646a83ecdd5aa0b7e69a0dc103efdb Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 7 Oct 2022 15:15:07 +0200 Subject: [PATCH 0411/2225] libobs,docs,rtmps-services: Add supported audio codecs Also remove Opus-only "supported audio codecs" in the services JSON. --- docs/sphinx/reference-services.rst | 23 +++++++++-- libobs/obs-service.c | 9 +++++ libobs/obs-service.h | 2 + libobs/obs.h | 3 ++ plugins/rtmp-services/data/package.json | 4 +- plugins/rtmp-services/data/services.json | 6 --- plugins/rtmp-services/rtmp-common.c | 50 ++++++++++++++++++++++++ 7 files changed, 86 insertions(+), 11 deletions(-) diff --git a/docs/sphinx/reference-services.rst b/docs/sphinx/reference-services.rst index 2cd8a624850a17..1429d9d4281d8a 100644 --- a/docs/sphinx/reference-services.rst +++ b/docs/sphinx/reference-services.rst @@ -148,6 +148,15 @@ Service Definition Structure the data manually (typically best to use strlist_split to generate this) +.. member:: const char **(*get_supported_audio_codecs)(void *data) + + (Optional) + + :return: A string pointer array of the supported audio codecs, should + be stored by the plugin so the caller does not need to free + the data manually (typically best to use strlist_split to + generate this) + .. member:: const char *(*obs_service_info.get_protocol)(void *data) :return: The protocol used by the service @@ -305,9 +314,17 @@ General Service Functions .. function:: const char **obs_service_get_supported_video_codecs(const obs_service_t *service) - :return: An array of string pointers containing the supported codecs - for the service, terminated with a *NULL* pointer. Does not - need to be freed + :return: An array of string pointers containing the supported video + codecs for the service, terminated with a *NULL* pointer. + Does not need to be freed + +--------------------- + +.. function:: const char **obs_service_get_supported_audio_codecs(const obs_service_t *service) + + :return: An array of string pointers containing the supported audio + codecs for the service, terminated with a *NULL* pointer. + Does not need to be freed --------------------- diff --git a/libobs/obs-service.c b/libobs/obs-service.c index 9b7b5f085f46e3..fd7919fd9fb6a8 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -468,6 +468,15 @@ obs_service_get_supported_video_codecs(const obs_service_t *service) return NULL; } +const char ** +obs_service_get_supported_audio_codecs(const obs_service_t *service) +{ + if (service->info.get_supported_audio_codecs) + return service->info.get_supported_audio_codecs( + service->context.data); + return NULL; +} + const char *obs_service_get_protocol(const obs_service_t *service) { if (!obs_service_valid(service, "obs_service_get_protocol")) diff --git a/libobs/obs-service.h b/libobs/obs-service.h index 56a93ad85a7ce5..352a4c08db4cf5 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -91,6 +91,8 @@ struct obs_service_info { const char **(*get_supported_video_codecs)(void *data); const char *(*get_protocol)(void *data); + + const char **(*get_supported_audio_codecs)(void *data); }; EXPORT void obs_register_service_s(const struct obs_service_info *info, diff --git a/libobs/obs.h b/libobs/obs.h index 24983fead4eb16..ff28e807f3f3ef 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2545,6 +2545,9 @@ EXPORT void obs_service_get_max_bitrate(const obs_service_t *service, EXPORT const char ** obs_service_get_supported_video_codecs(const obs_service_t *service); +EXPORT const char ** +obs_service_get_supported_audio_codecs(const obs_service_t *service); + /* NOTE: This function is temporary and should be removed/replaced at a later * date. */ OBS_DEPRECATED EXPORT const char * diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index a9c3e5f824ebab..45d0c1fe310681 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 221, + "version": 222, "files": [ { "name": "services.json", - "version": 221 + "version": 222 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index e0fb4e5a489849..7615ede461fc91 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -1447,9 +1447,6 @@ "name": "YouNow", "common": false, "protocol": "FTL", - "supported audio codecs": [ - "opus" - ], "servers": [ { "name": "younow.com", @@ -1825,9 +1822,6 @@ "name": "Glimesh", "stream_key_link": "https://glimesh.tv/users/settings/stream", "protocol": "FTL", - "supported audio codecs": [ - "opus" - ], "servers": [ { "name": "North America - Chicago, United States", diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 94bba3f6c8baba..6812191fbe78f0 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -22,6 +22,7 @@ struct rtmp_common { int max_fps; char **video_codecs; + char **audio_codecs; bool supports_additional_audio_track; }; @@ -114,6 +115,8 @@ static void rtmp_common_update(void *data, obs_data_t *settings) bfree(service->supported_resolutions); if (service->video_codecs) bfree(service->video_codecs); + if (service->audio_codecs) + bfree(service->audio_codecs); bfree(service->service); bfree(service->protocol); bfree(service->server); @@ -125,6 +128,7 @@ static void rtmp_common_update(void *data, obs_data_t *settings) service->key = bstrdup(obs_data_get_string(settings, "key")); service->supports_additional_audio_track = false; service->video_codecs = NULL; + service->audio_codecs = NULL; service->supported_resolutions = NULL; service->supported_resolutions_count = 0; service->max_fps = 0; @@ -160,6 +164,8 @@ static void rtmp_common_destroy(void *data) bfree(service->supported_resolutions); if (service->video_codecs) bfree(service->video_codecs); + if (service->audio_codecs) + bfree(service->audio_codecs); bfree(service->service); bfree(service->protocol); bfree(service->server); @@ -954,6 +960,49 @@ static const char **rtmp_common_get_supported_video_codecs(void *data) return (const char **)service->video_codecs; } +static const char **rtmp_common_get_supported_audio_codecs(void *data) +{ + struct rtmp_common *service = data; + + if (service->audio_codecs) + return (const char **)service->audio_codecs; + + struct dstr codecs = {0}; + json_t *root = open_services_file(); + if (!root) + return NULL; + + json_t *json_service = find_service(root, service->service, NULL); + if (!json_service) { + goto fail; + } + + json_t *json_audio_codecs = + json_object_get(json_service, "supported audio codecs"); + if (json_is_array(json_audio_codecs)) { + goto fail; + } + + size_t index; + json_t *item; + + json_array_foreach (json_audio_codecs, index, item) { + char codec[16]; + + snprintf(codec, sizeof(codec), "%s", json_string_value(item)); + if (codecs.len) + dstr_cat(&codecs, ";"); + dstr_cat(&codecs, codec); + } + + service->audio_codecs = strlist_split(codecs.array, ';', false); + dstr_free(&codecs); + +fail: + json_decref(root); + return (const char **)service->audio_codecs; +} + static const char *rtmp_common_username(void *data) { struct rtmp_common *service = data; @@ -1004,4 +1053,5 @@ struct obs_service_info rtmp_common_service = { .get_max_fps = rtmp_common_get_max_fps, .get_max_bitrate = rtmp_common_get_max_bitrate, .get_supported_video_codecs = rtmp_common_get_supported_video_codecs, + .get_supported_audio_codecs = rtmp_common_get_supported_audio_codecs, }; From 1514f1597a7b84f235ae40d3c5796a2e65c081bc Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 15 Dec 2022 13:05:27 +0100 Subject: [PATCH 0412/2225] plugins: Fix codec name on AAC encoders --- plugins/coreaudio-encoder/encoder.cpp | 2 +- plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 2 +- plugins/obs-libfdk/obs-libfdk.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/coreaudio-encoder/encoder.cpp b/plugins/coreaudio-encoder/encoder.cpp index 0cae2442edd192..999e67e61e9e77 100644 --- a/plugins/coreaudio-encoder/encoder.cpp +++ b/plugins/coreaudio-encoder/encoder.cpp @@ -1409,7 +1409,7 @@ bool obs_module_load(void) }; aac_info.id = "CoreAudio_AAC"; aac_info.type = OBS_ENCODER_AUDIO; - aac_info.codec = "AAC"; + aac_info.codec = "aac"; aac_info.get_name = aac_get_name; aac_info.destroy = aac_destroy; aac_info.create = aac_create; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index 2562a63f1a886c..80920dcf95b958 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -427,7 +427,7 @@ static size_t enc_frame_size(void *data) struct obs_encoder_info aac_encoder_info = { .id = "ffmpeg_aac", .type = OBS_ENCODER_AUDIO, - .codec = "AAC", + .codec = "aac", .get_name = aac_getname, .create = aac_create, .destroy = enc_destroy, diff --git a/plugins/obs-libfdk/obs-libfdk.c b/plugins/obs-libfdk/obs-libfdk.c index a02d8cf6bfda15..5e55489dc95c4d 100644 --- a/plugins/obs-libfdk/obs-libfdk.c +++ b/plugins/obs-libfdk/obs-libfdk.c @@ -305,7 +305,7 @@ static size_t libfdk_frame_size(void *data) struct obs_encoder_info obs_libfdk_encoder = { .id = "libfdk_aac", .type = OBS_ENCODER_AUDIO, - .codec = "AAC", + .codec = "aac", .get_name = libfdk_getname, .create = libfdk_create, .destroy = libfdk_destroy, From cd83b94c7cdc4a4ecfab355daf5b77e8ee1f89e7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 15 Dec 2022 13:05:56 +0100 Subject: [PATCH 0413/2225] plugins: Rename audio encoders --- plugins/coreaudio-encoder/data/locale/en-US.ini | 2 +- plugins/obs-ffmpeg/data/locale/en-US.ini | 4 ++-- plugins/obs-libfdk/data/locale/en-US.ini | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/coreaudio-encoder/data/locale/en-US.ini b/plugins/coreaudio-encoder/data/locale/en-US.ini index 361a458ef27bb0..cf6be21cc54cdc 100644 --- a/plugins/coreaudio-encoder/data/locale/en-US.ini +++ b/plugins/coreaudio-encoder/data/locale/en-US.ini @@ -1,4 +1,4 @@ -CoreAudioAAC="CoreAudio AAC encoder" +CoreAudioAAC="CoreAudio AAC" Bitrate="Bitrate" AllowHEAAC="Allow HE-AAC" OutputSamplerate="Output Sample Rate" diff --git a/plugins/obs-ffmpeg/data/locale/en-US.ini b/plugins/obs-ffmpeg/data/locale/en-US.ini index 2f43ed0b5a66fa..6e7d1590335d9b 100644 --- a/plugins/obs-ffmpeg/data/locale/en-US.ini +++ b/plugins/obs-ffmpeg/data/locale/en-US.ini @@ -1,6 +1,6 @@ FFmpegOutput="FFmpeg Output" -FFmpegAAC="FFmpeg Default AAC Encoder" -FFmpegOpus="FFmpeg Opus Encoder" +FFmpegAAC="FFmpeg AAC" +FFmpegOpus="FFmpeg Opus" FFmpegOpts="FFmpeg Options" FFmpegOpts.ToolTip.Source="Allows you to set FFmpeg options. This only accepts options in the option=value format.\nMultiple options can be set by separating them with a space.\nExample: rtsp_transport=tcp rtsp_flags=prefer_tcp" Bitrate="Bitrate" diff --git a/plugins/obs-libfdk/data/locale/en-US.ini b/plugins/obs-libfdk/data/locale/en-US.ini index cdf5f860369889..55420c526df1f4 100644 --- a/plugins/obs-libfdk/data/locale/en-US.ini +++ b/plugins/obs-libfdk/data/locale/en-US.ini @@ -1,3 +1,3 @@ -LibFDK="libfdk AAC Encoder" +LibFDK="libfdk AAC" Bitrate="Bitrate" Afterburner="Enable AAC Afterburner" From b2d686e8f4e4fa36d3636811a8d5eba0701b98cf Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 15 Dec 2022 13:08:17 +0100 Subject: [PATCH 0414/2225] obs-ffmpeg: Allow opus for SRT and RIST --- plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 11 +++++++---- plugins/obs-ffmpeg/obs-ffmpeg-mux.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index 15014a25bd8ce6..f4145c93694e33 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -955,11 +955,14 @@ static bool set_config(struct ffmpeg_output *stream) obs_data_release(settings); /* 3. Audio settings */ - // 3.a) set audio encoder and id to aac + // 3.a) set audio codec & id from audio encoder obs_encoder_t *aencoder = obs_output_get_audio_encoder(stream->output, 0); - config.audio_encoder = "aac"; - config.audio_encoder_id = AV_CODEC_ID_AAC; + config.audio_encoder = obs_encoder_get_codec(aencoder); + if (strcmp(config.audio_encoder, "aac") == 0) + config.audio_encoder_id = AV_CODEC_ID_AAC; + else if (strcmp(config.audio_encoder, "opus") == 0) + config.audio_encoder_id = AV_CODEC_ID_OPUS; // 3.b) get audio bitrate from the audio encoder. settings = obs_encoder_get_settings(aencoder); @@ -1295,7 +1298,7 @@ struct obs_output_info ffmpeg_mpegts_muxer = { #else .encoded_video_codecs = "h264", #endif - .encoded_audio_codecs = "aac", + .encoded_audio_codecs = "aac;opus", .get_name = ffmpeg_mpegts_getname, .create = ffmpeg_mpegts_create, .destroy = ffmpeg_mpegts_destroy, diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index 8d8539fbe3531b..c202d8345d8bcc 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -946,7 +946,7 @@ struct obs_output_info ffmpeg_mpegts_muxer = { OBS_OUTPUT_SERVICE, .protocols = "SRT;RIST", .encoded_video_codecs = "h264", - .encoded_audio_codecs = "aac", + .encoded_audio_codecs = "aac;opus", .get_name = ffmpeg_mpegts_mux_getname, .create = ffmpeg_mux_create, .destroy = ffmpeg_mux_destroy, From b15684aa17f40e3046daf7ac0443dbb527ed57af Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 17 Dec 2022 18:16:05 +0100 Subject: [PATCH 0415/2225] UI: Add Opus bitrate map and per encoder bitrate list Also refactors AAC bitrate map too. --- UI/audio-encoders.cpp | 232 +++++++++++++++++++++++++++---- UI/audio-encoders.hpp | 14 +- UI/window-basic-main-outputs.cpp | 6 +- UI/window-basic-settings.cpp | 22 +-- 4 files changed, 232 insertions(+), 42 deletions(-) diff --git a/UI/audio-encoders.cpp b/UI/audio-encoders.cpp index c03501e05d8117..08c4af32b45b31 100644 --- a/UI/audio-encoders.cpp +++ b/UI/audio-encoders.cpp @@ -23,18 +23,17 @@ static const char *EncoderName(const std::string &id) return NullToEmpty(obs_encoder_get_display_name(id.c_str())); } -static map bitrateMap; - -static void HandleIntProperty(obs_property_t *prop, const char *id) +static void HandleIntProperty(obs_property_t *prop, std::vector &bitrates) { const int max_ = obs_property_int_max(prop); const int step = obs_property_int_step(prop); for (int i = obs_property_int_min(prop); i <= max_; i += step) - bitrateMap[i] = id; + bitrates.push_back(i); } -static void HandleListProperty(obs_property_t *prop, const char *id) +static void HandleListProperty(obs_property_t *prop, const char *id, + std::vector &bitrates) { obs_combo_format format = obs_property_list_format(prop); if (format != OBS_COMBO_FORMAT_INT) { @@ -53,7 +52,7 @@ static void HandleListProperty(obs_property_t *prop, const char *id) int bitrate = static_cast(obs_property_list_item_int(prop, i)); - bitrateMap[bitrate] = id; + bitrates.push_back(bitrate); } } @@ -86,7 +85,7 @@ static void HandleSampleRate(obs_property_t *prop, const char *id) obs_property_modified(prop, data.get()); } -static void HandleEncoderProperties(const char *id) +static void HandleEncoderProperties(const char *id, std::vector &bitrates) { auto DestroyProperties = [](obs_properties_t *props) { obs_properties_destroy(props); @@ -112,10 +111,10 @@ static void HandleEncoderProperties(const char *id) obs_property_type type = obs_property_get_type(bitrate); switch (type) { case OBS_PROPERTY_INT: - return HandleIntProperty(bitrate, id); + return HandleIntProperty(bitrate, bitrates); case OBS_PROPERTY_LIST: - return HandleListProperty(bitrate, id); + return HandleListProperty(bitrate, id, bitrates); default: break; @@ -132,10 +131,75 @@ static const char *GetCodec(const char *id) return NullToEmpty(obs_get_encoder_codec(id)); } -static void PopulateBitrateMap() +static std::vector fallbackBitrates; +static map> encoderBitrates; + +static void PopulateBitrateLists() { static once_flag once; + call_once(once, []() { + struct obs_audio_info aoi; + obs_get_audio_info(&aoi); + uint32_t output_channels = get_audio_channels(aoi.speakers); + + /* NOTE: ffmpeg_aac and ffmpeg_opus have the same properties + * their bitrates will also be used as a fallback */ + HandleEncoderProperties("ffmpeg_aac", fallbackBitrates); + + if (fallbackBitrates.empty()) + blog(LOG_ERROR, "Could not enumerate fallback encoder " + "bitrates"); + + ostringstream ss; + for (auto &bitrate : fallbackBitrates) + ss << "\n " << setw(3) << bitrate << " kbit/s:"; + + blog(LOG_DEBUG, "Fallback encoder bitrates:%s", + ss.str().c_str()); + + const char *id = nullptr; + for (size_t i = 0; obs_enum_encoder_types(i, &id); i++) { + if (obs_get_encoder_type(id) != OBS_ENCODER_AUDIO) + continue; + + if (strcmp(id, "ffmpeg_aac") == 0 || + strcmp(id, "ffmpeg_opus") == 0) + continue; + + std::string encoder = id; + + HandleEncoderProperties(id, encoderBitrates[encoder]); + + if (encoderBitrates[encoder].empty()) + blog(LOG_ERROR, + "Could not enumerate %s encoder " + "bitrates", + id); + + ostringstream ss; + for (auto &bitrate : encoderBitrates[encoder]) + ss << "\n " << setw(3) << bitrate + << " kbit/s"; + + blog(LOG_DEBUG, "%s (%s) encoder bitrates:%s", + EncoderName(id), id, ss.str().c_str()); + } + + if (encoderBitrates.empty() && fallbackBitrates.empty()) + blog(LOG_ERROR, "Could not enumerate any audio encoder " + "bitrates"); + }); +} + +static map simpleAACBitrateMap; + +static void PopulateSimpleAACBitrateMap() +{ + PopulateBitrateLists(); + + static once_flag once; + call_once(once, []() { const string encoders[] = { "ffmpeg_aac", @@ -148,7 +212,8 @@ static void PopulateBitrateMap() struct obs_audio_info aoi; obs_get_audio_info(&aoi); - HandleEncoderProperties(fallbackEncoder.c_str()); + for (auto &bitrate : fallbackBitrates) + simpleAACBitrateMap[bitrate] = fallbackEncoder; const char *id = nullptr; for (size_t i = 0; obs_enum_encoder_types(i, &id); i++) { @@ -160,48 +225,115 @@ static void PopulateBitrateMap() end(encoders)) continue; - if (strcmp(GetCodec(id), "AAC") != 0) + if (strcmp(GetCodec(id), "aac") != 0) + continue; + + std::string encoder = id; + if (encoderBitrates[encoder].empty()) continue; - HandleEncoderProperties(id); + for (auto &bitrate : encoderBitrates[encoder]) + simpleAACBitrateMap[bitrate] = encoder; } for (auto &encoder : encoders) { if (encoder == fallbackEncoder) continue; - if (strcmp(GetCodec(encoder.c_str()), "AAC") != 0) + if (strcmp(GetCodec(encoder.c_str()), "aac") != 0) continue; - HandleEncoderProperties(encoder.c_str()); + for (auto &bitrate : encoderBitrates[encoder]) + simpleAACBitrateMap[bitrate] = encoder; } - if (bitrateMap.empty()) { + if (simpleAACBitrateMap.empty()) { blog(LOG_ERROR, "Could not enumerate any AAC encoder " "bitrates"); return; } ostringstream ss; - for (auto &entry : bitrateMap) + for (auto &entry : simpleAACBitrateMap) + ss << "\n " << setw(3) << entry.first + << " kbit/s: '" << EncoderName(entry.second) << "' (" + << entry.second << ')'; + + blog(LOG_DEBUG, "AAC simple encoder bitrate mapping:%s", + ss.str().c_str()); + }); +} + +static map simpleOpusBitrateMap; + +static void PopulateSimpleOpusBitrateMap() +{ + PopulateBitrateLists(); + + static once_flag once; + + call_once(once, []() { + struct obs_audio_info aoi; + obs_get_audio_info(&aoi); + uint32_t output_channels = get_audio_channels(aoi.speakers); + + for (auto &bitrate : fallbackBitrates) + simpleOpusBitrateMap[bitrate] = "ffmpeg_opus"; + + const char *id = nullptr; + for (size_t i = 0; obs_enum_encoder_types(i, &id); i++) { + if (strcmp(GetCodec(id), "opus") != 0) + continue; + + std::string encoder = id; + if (encoderBitrates[encoder].empty()) + continue; + + for (auto &bitrate : encoderBitrates[encoder]) + simpleOpusBitrateMap[bitrate] = encoder; + } + + if (simpleOpusBitrateMap.empty()) { + blog(LOG_ERROR, "Could not enumerate any Opus encoder " + "bitrates"); + return; + } + + ostringstream ss; + for (auto &entry : simpleOpusBitrateMap) ss << "\n " << setw(3) << entry.first << " kbit/s: '" << EncoderName(entry.second) << "' (" << entry.second << ')'; - blog(LOG_DEBUG, "AAC encoder bitrate mapping:%s", + blog(LOG_DEBUG, "Opus simple encoder bitrate mapping:%s", ss.str().c_str()); }); } -const map &GetAACEncoderBitrateMap() +const map &GetSimpleAACEncoderBitrateMap() { - PopulateBitrateMap(); - return bitrateMap; + PopulateSimpleAACBitrateMap(); + return simpleAACBitrateMap; +} + +const map &GetSimpleOpusEncoderBitrateMap() +{ + PopulateSimpleOpusBitrateMap(); + return simpleOpusBitrateMap; +} + +const char *GetSimpleAACEncoderForBitrate(int bitrate) +{ + auto &map_ = GetSimpleAACEncoderBitrateMap(); + auto res = map_.find(bitrate); + if (res == end(map_)) + return NULL; + return res->second.c_str(); } -const char *GetAACEncoderForBitrate(int bitrate) +const char *GetSimpleOpusEncoderForBitrate(int bitrate) { - auto &map_ = GetAACEncoderBitrateMap(); + auto &map_ = GetSimpleOpusEncoderBitrateMap(); auto res = map_.find(bitrate); if (res == end(map_)) return NULL; @@ -210,13 +342,13 @@ const char *GetAACEncoderForBitrate(int bitrate) #define INVALID_BITRATE 10000 -int FindClosestAvailableAACBitrate(int bitrate) +static int FindClosestAvailableSimpleBitrate(int bitrate, + const map &map) { - auto &map_ = GetAACEncoderBitrateMap(); int prev = 0; int next = INVALID_BITRATE; - for (auto val : map_) { + for (auto val : map) { if (next > val.first) { if (val.first == bitrate) return bitrate; @@ -234,3 +366,51 @@ int FindClosestAvailableAACBitrate(int bitrate) return prev; return 192; } + +int FindClosestAvailableSimpleAACBitrate(int bitrate) +{ + return FindClosestAvailableSimpleBitrate( + bitrate, GetSimpleAACEncoderBitrateMap()); +} + +int FindClosestAvailableSimpleOpusBitrate(int bitrate) +{ + return FindClosestAvailableSimpleBitrate( + bitrate, GetSimpleOpusEncoderBitrateMap()); +} + +const std::vector &GetAudioEncoderBitrates(const char *id) +{ + std::string encoder = id; + PopulateBitrateLists(); + if (encoderBitrates[encoder].empty()) + return fallbackBitrates; + return encoderBitrates[encoder]; +} + +int FindClosestAvailableAudioBitrate(const char *id, int bitrate) +{ + int prev = 0; + int next = INVALID_BITRATE; + std::string encoder = id; + + for (auto val : encoderBitrates[encoder].empty() + ? fallbackBitrates + : encoderBitrates[encoder]) { + if (next > val) { + if (val == bitrate) + return bitrate; + + if (val < next && val > bitrate) + next = val; + if (val > prev && val < bitrate) + prev = val; + } + } + + if (next != INVALID_BITRATE) + return next; + if (prev != 0) + return prev; + return 192; +} diff --git a/UI/audio-encoders.hpp b/UI/audio-encoders.hpp index 3bb0596e6f3632..b7fd0ab1085d2a 100644 --- a/UI/audio-encoders.hpp +++ b/UI/audio-encoders.hpp @@ -3,7 +3,15 @@ #include #include +#include -const std::map &GetAACEncoderBitrateMap(); -const char *GetAACEncoderForBitrate(int bitrate); -int FindClosestAvailableAACBitrate(int bitrate); +const std::map &GetSimpleAACEncoderBitrateMap(); +const char *GetSimpleAACEncoderForBitrate(int bitrate); +int FindClosestAvailableSimpleAACBitrate(int bitrate); + +const std::map &GetSimpleOpusEncoderBitrateMap(); +const char *GetSimpleOpusEncoderForBitrate(int bitrate); +int FindClosestAvailableSimpleOpusBitrate(int bitrate); + +const std::vector &GetAudioEncoderBitrates(const char *id); +int FindClosestAvailableAudioBitrate(const char *id, int bitrate); diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 534b0d69f52f3d..9f8ae3297261d9 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -189,7 +189,7 @@ static void OBSStopVirtualCam(void *data, calldata_t *params) static bool CreateAACEncoder(OBSEncoder &res, string &id, int bitrate, const char *name, size_t idx) { - const char *id_ = GetAACEncoderForBitrate(bitrate); + const char *id_ = GetSimpleAACEncoderForBitrate(bitrate); if (!id_) { id.clear(); res = nullptr; @@ -665,7 +665,7 @@ int SimpleOutput::GetAudioBitrate() const int bitrate = (int)config_get_uint(main->Config(), "SimpleOutput", "ABitrate"); - return FindClosestAvailableAACBitrate(bitrate); + return FindClosestAvailableSimpleAACBitrate(bitrate); } void SimpleOutput::Update() @@ -1904,7 +1904,7 @@ int AdvancedOutput::GetAudioBitrate(size_t i) const "Track4Bitrate", "Track5Bitrate", "Track6Bitrate", }; int bitrate = (int)config_get_uint(main->Config(), "AdvOut", names[i]); - return FindClosestAvailableAACBitrate(bitrate); + return FindClosestAvailableSimpleAACBitrate(bitrate); } inline void AdvancedOutput::SetupVodTrack(obs_service_t *service) diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 0e372b8397efc2..a4c3a1dc79a1c6 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -262,7 +262,7 @@ static CodecDesc GetDefaultCodecDesc(const ff_format_desc *formatDesc, static void PopulateAACBitrates(initializer_list boxes) { - auto &bitrateMap = GetAACEncoderBitrateMap(); + auto &bitrateMap = GetSimpleAACEncoderBitrateMap(); if (bitrateMap.empty()) return; @@ -1856,7 +1856,7 @@ void OBSBasicSettings::LoadSimpleOutputSettings() curAMDPreset = amdPreset; curAMDAV1Preset = amdAV1Preset; - audioBitrate = FindClosestAvailableAACBitrate(audioBitrate); + audioBitrate = FindClosestAvailableSimpleAACBitrate(audioBitrate); ui->simpleOutputPath->setText(path); ui->simpleNoSpace->setChecked(noSpace); @@ -2237,12 +2237,12 @@ void OBSBasicSettings::LoadAdvOutputAudioSettings() const char *name6 = config_get_string(main->Config(), "AdvOut", "Track6Name"); - track1Bitrate = FindClosestAvailableAACBitrate(track1Bitrate); - track2Bitrate = FindClosestAvailableAACBitrate(track2Bitrate); - track3Bitrate = FindClosestAvailableAACBitrate(track3Bitrate); - track4Bitrate = FindClosestAvailableAACBitrate(track4Bitrate); - track5Bitrate = FindClosestAvailableAACBitrate(track5Bitrate); - track6Bitrate = FindClosestAvailableAACBitrate(track6Bitrate); + track1Bitrate = FindClosestAvailableSimpleAACBitrate(track1Bitrate); + track2Bitrate = FindClosestAvailableSimpleAACBitrate(track2Bitrate); + track3Bitrate = FindClosestAvailableSimpleAACBitrate(track3Bitrate); + track4Bitrate = FindClosestAvailableSimpleAACBitrate(track4Bitrate); + track5Bitrate = FindClosestAvailableSimpleAACBitrate(track5Bitrate); + track6Bitrate = FindClosestAvailableSimpleAACBitrate(track6Bitrate); // restrict list of bitrates when multichannel is OFF const char *speakers = @@ -4465,7 +4465,8 @@ void RestrictResetBitrates(initializer_list boxes, int maxbitrate) { for (auto box : boxes) { int idx = box->currentIndex(); - int max_bitrate = FindClosestAvailableAACBitrate(maxbitrate); + int max_bitrate = + FindClosestAvailableSimpleAACBitrate(maxbitrate); int count = box->count(); int max_idx = box->findText( QT_UTF8(std::to_string(max_bitrate).c_str())); @@ -4475,7 +4476,8 @@ void RestrictResetBitrates(initializer_list boxes, int maxbitrate) if (idx > max_idx) { int default_bitrate = - FindClosestAvailableAACBitrate(maxbitrate / 2); + FindClosestAvailableSimpleAACBitrate( + maxbitrate / 2); int default_idx = box->findText(QT_UTF8( std::to_string(default_bitrate).c_str())); From 5fe417bce1f0c34daa573edbafd46667f5c9f06c Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 17 Dec 2022 18:26:59 +0100 Subject: [PATCH 0416/2225] UI: Add audio codec selections --- UI/data/locale/en-US.ini | 4 +- UI/forms/OBSBasicSettings.ui | 95 +++++++--- UI/window-basic-main-outputs.cpp | 265 ++++++++++++++-------------- UI/window-basic-main.cpp | 15 ++ UI/window-basic-settings-stream.cpp | 235 +++++++++++++++++++----- UI/window-basic-settings.cpp | 236 ++++++++++++++++++++++--- UI/window-basic-settings.hpp | 6 +- 7 files changed, 632 insertions(+), 224 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index a5dd0da3a9395c..0d91518d5e2e2e 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -942,7 +942,8 @@ Basic.Settings.Output.Format.HLS="HLS (.m3u8 + .ts)" Basic.Settings.Output.Format.fMP4="Fragmented MP4 (.mp4)" Basic.Settings.Output.Format.fMOV="Fragmented MOV (.mov)" Basic.Settings.Output.Format.TT="Fragmented MP4/MOV writes the recording in chunks and does not require the same finalization as traditional MP4/MOV files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary." -Basic.Settings.Output.Encoder="Encoder" +Basic.Settings.Output.Encoder.Video="Video Encoder" +Basic.Settings.Output.Encoder.Audio="Audio Encoder" Basic.Settings.Output.SelectDirectory="Select Recording Directory" Basic.Settings.Output.SelectFile="Select Recording File" Basic.Settings.Output.DynamicBitrate="Dynamically change bitrate to manage congestion" @@ -993,6 +994,7 @@ Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolution: %1" Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS: %1" Basic.Settings.Output.Warn.ServiceCodecCompatibility.Title="Incompatible Encoder" Basic.Settings.Output.Warn.ServiceCodecCompatibility.Msg="The streaming service \"%1\" does not support the encoder \"%2\". The encoder will be changed to \"%3\".\n\nDo you want to continue?" +Basic.Settings.Output.Warn.ServiceCodecCompatibility.Msg2="The streaming service \"%1\" does not support encoders \"%2\" and \"%3\". These encoders will be changed to \"%4\" and \"%5\".\n\nDo you want to continue?" Basic.Settings.Output.VideoBitrate="Video Bitrate" Basic.Settings.Output.AudioBitrate="Audio Bitrate" Basic.Settings.Output.Reconnect="Automatically Reconnect" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index bb894fb204c7c2..7eb79970070c94 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1731,7 +1731,7 @@ - Basic.Settings.Output.Encoder + Basic.Settings.Output.Encoder.Video simpleOutRecEncoder @@ -1780,6 +1780,19 @@ + + + + Basic.Settings.Output.Encoder.Audio + + + simpleOutStrAEncoder + + + + + + @@ -1902,7 +1915,7 @@ - Basic.Settings.Output.Encoder + Basic.Settings.Output.Encoder.Video simpleOutRecEncoder @@ -1913,6 +1926,19 @@ + + + Basic.Settings.Output.Encoder.Audio + + + simpleOutRecAEncoder + + + + + + + Basic.Settings.Output.CustomMuxerSettings @@ -1922,10 +1948,10 @@ - + - + Basic.Settings.Output.UseReplayBuffer @@ -2268,16 +2294,26 @@ - + - Basic.Settings.Output.Encoder + Basic.Settings.Output.Encoder.Audio - + + + + Basic.Settings.Output.Encoder.Video + + + + + + + @@ -2293,7 +2329,7 @@ - + false @@ -2856,15 +2892,15 @@ - - + + - Basic.Settings.Output.Encoder + Basic.Settings.Output.Encoder.Audio - + 0 @@ -2874,6 +2910,23 @@ + + + Basic.Settings.Output.Encoder.Video + + + + + + + + 0 + 0 + + + + + @@ -2889,7 +2942,7 @@ - + @@ -2923,14 +2976,14 @@ - + Basic.Settings.Output.CustomMuxerSettings - + @@ -2940,7 +2993,7 @@ - + @@ -2956,7 +3009,7 @@ - + false @@ -2978,14 +3031,14 @@ - + Basic.Settings.Output.SplitFile.Time - + min @@ -3001,14 +3054,14 @@ - + Basic.Settings.Output.SplitFile.Size - + MB diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 9f8ae3297261d9..bcd861831a8ba8 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -186,20 +186,34 @@ static void OBSStopVirtualCam(void *data, calldata_t *params) /* ------------------------------------------------------------------------ */ -static bool CreateAACEncoder(OBSEncoder &res, string &id, int bitrate, - const char *name, size_t idx) +static bool CreateSimpleAACEncoder(OBSEncoder &res, int bitrate, + const char *name, size_t idx) { const char *id_ = GetSimpleAACEncoderForBitrate(bitrate); if (!id_) { - id.clear(); res = nullptr; return false; } - if (id == id_) + res = obs_audio_encoder_create(id_, name, nullptr, idx, nullptr); + + if (res) { + obs_encoder_release(res); return true; + } + + return false; +} + +static bool CreateSimpleOpusEncoder(OBSEncoder &res, int bitrate, + const char *name, size_t idx) +{ + const char *id_ = GetSimpleOpusEncoderForBitrate(bitrate); + if (!id_) { + res = nullptr; + return false; + } - id = id_; res = obs_audio_encoder_create(id_, name, nullptr, idx, nullptr); if (res) { @@ -419,16 +433,12 @@ void BasicOutputHandler::DestroyVirtualCamView() /* ------------------------------------------------------------------------ */ struct SimpleOutput : BasicOutputHandler { - OBSEncoder aacStreaming; + OBSEncoder audioStreaming; OBSEncoder videoStreaming; - OBSEncoder aacRecording; - OBSEncoder aacArchive; + OBSEncoder audioRecording; + OBSEncoder audioArchive; OBSEncoder videoRecording; - string aacRecEncID; - string aacStreamEncID; - string aacArchiveEncID; - string videoEncoder; string videoQuality; bool usingRecordingPreset = false; @@ -561,6 +571,8 @@ void SimpleOutput::LoadRecordingPreset() config_get_string(main->Config(), "SimpleOutput", "RecQuality"); const char *encoder = config_get_string(main->Config(), "SimpleOutput", "RecEncoder"); + const char *audio_encoder = config_get_string( + main->Config(), "SimpleOutput", "RecAudioEncoder"); videoEncoder = encoder; videoQuality = quality; @@ -568,7 +580,7 @@ void SimpleOutput::LoadRecordingPreset() if (strcmp(quality, "Stream") == 0) { videoRecording = videoStreaming; - aacRecording = aacStreaming; + audioRecording = audioStreaming; usingRecordingPreset = false; return; @@ -586,28 +598,56 @@ void SimpleOutput::LoadRecordingPreset() LoadRecordingPreset_Lossy(get_simple_output_encoder(encoder)); usingRecordingPreset = true; - if (!CreateAACEncoder(aacRecording, aacRecEncID, 192, - "simple_aac_recording", 0)) - throw "Failed to create aac recording encoder " + bool success = false; + + if (strcmp(audio_encoder, "opus") == 0) + success = CreateSimpleOpusEncoder( + audioRecording, 192, "simple_opus_recording", + 0); + else + success = CreateSimpleAACEncoder( + audioRecording, 192, "simple_aac_recording", 0); + + if (!success) + throw "Failed to create audio recording encoder " "(simple output)"; } } -#define SIMPLE_ARCHIVE_NAME "simple_archive_aac" +#define SIMPLE_ARCHIVE_NAME "simple_archive_audio" SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_) { const char *encoder = config_get_string(main->Config(), "SimpleOutput", "StreamEncoder"); + const char *audio_encoder = config_get_string( + main->Config(), "SimpleOutput", "StreamAudioEncoder"); LoadStreamingPreset_Lossy(get_simple_output_encoder(encoder)); - if (!CreateAACEncoder(aacStreaming, aacStreamEncID, GetAudioBitrate(), - "simple_aac", 0)) - throw "Failed to create aac streaming encoder (simple output)"; - if (!CreateAACEncoder(aacArchive, aacArchiveEncID, GetAudioBitrate(), - SIMPLE_ARCHIVE_NAME, 1)) - throw "Failed to create aac arhive encoder (simple output)"; + bool success = false; + + if (strcmp(audio_encoder, "opus") == 0) + success = CreateSimpleOpusEncoder( + audioStreaming, GetAudioBitrate(), "simple_opus", 0); + else + success = CreateSimpleAACEncoder( + audioStreaming, GetAudioBitrate(), "simple_aac", 0); + + if (!success) + throw "Failed to create audio streaming encoder (simple output)"; + + if (strcmp(audio_encoder, "opus") == 0) + success = CreateSimpleOpusEncoder(audioArchive, + GetAudioBitrate(), + SIMPLE_ARCHIVE_NAME, 1); + else + success = CreateSimpleAACEncoder(audioArchive, + GetAudioBitrate(), + SIMPLE_ARCHIVE_NAME, 1); + + if (!success) + throw "Failed to create audio archive encoder (simple output)"; LoadRecordingPreset(); @@ -662,16 +702,21 @@ SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_) int SimpleOutput::GetAudioBitrate() const { + const char *audio_encoder = config_get_string( + main->Config(), "SimpleOutput", "StreamAudioEncoder"); int bitrate = (int)config_get_uint(main->Config(), "SimpleOutput", "ABitrate"); + if (strcmp(audio_encoder, "opus") == 0) + return FindClosestAvailableSimpleOpusBitrate(bitrate); + return FindClosestAvailableSimpleAACBitrate(bitrate); } void SimpleOutput::Update() { OBSDataAutoRelease videoSettings = obs_data_create(); - OBSDataAutoRelease aacSettings = obs_data_create(); + OBSDataAutoRelease audioSettings = obs_data_create(); int videoBitrate = config_get_uint(main->Config(), "SimpleOutput", "VBitrate"); @@ -732,15 +777,15 @@ void SimpleOutput::Update() if (advanced) obs_data_set_string(videoSettings, "x264opts", custom); - obs_data_set_string(aacSettings, "rate_control", "CBR"); - obs_data_set_int(aacSettings, "bitrate", audioBitrate); + obs_data_set_string(audioSettings, "rate_control", "CBR"); + obs_data_set_int(audioSettings, "bitrate", audioBitrate); obs_service_apply_encoder_settings(main->GetService(), videoSettings, - aacSettings); + audioSettings); if (!enforceBitrate) { obs_data_set_int(videoSettings, "bitrate", videoBitrate); - obs_data_set_int(aacSettings, "bitrate", audioBitrate); + obs_data_set_int(audioSettings, "bitrate", audioBitrate); } video_t *video = obs_get_video(); @@ -758,8 +803,8 @@ void SimpleOutput::Update() } obs_encoder_update(videoStreaming, videoSettings); - obs_encoder_update(aacStreaming, aacSettings); - obs_encoder_update(aacArchive, aacSettings); + obs_encoder_update(audioStreaming, audioSettings); + obs_encoder_update(audioArchive, audioSettings); } void SimpleOutput::UpdateRecordingAudioSettings() @@ -768,7 +813,7 @@ void SimpleOutput::UpdateRecordingAudioSettings() obs_data_set_int(settings, "bitrate", 192); obs_data_set_string(settings, "rate_control", "CBR"); - obs_encoder_update(aacRecording, settings); + obs_encoder_update(audioRecording, settings); } #define CROSS_DIST_CUTOFF 2000.0 @@ -940,8 +985,8 @@ inline void SimpleOutput::SetupOutputs() { SimpleOutput::Update(); obs_encoder_set_video(videoStreaming, obs_get_video()); - obs_encoder_set_audio(aacStreaming, obs_get_audio()); - obs_encoder_set_audio(aacArchive, obs_get_audio()); + obs_encoder_set_audio(audioStreaming, obs_get_audio()); + obs_encoder_set_audio(audioArchive, obs_get_audio()); if (usingRecordingPreset) { if (ffmpegOutput) { @@ -949,7 +994,7 @@ inline void SimpleOutput::SetupOutputs() obs_get_audio()); } else { obs_encoder_set_video(videoRecording, obs_get_video()); - obs_encoder_set_audio(aacRecording, obs_get_audio()); + obs_encoder_set_audio(audioRecording, obs_get_audio()); } } } @@ -1018,41 +1063,11 @@ bool SimpleOutput::SetupStreaming(obs_service_t *service) bool isEncoded = obs_output_get_flags(streamOutput) & OBS_OUTPUT_ENCODED; - if (isEncoded) { - const char *codec = - obs_output_get_supported_audio_codecs( - streamOutput); - if (!codec) { - blog(LOG_WARNING, "Failed to load audio codec"); - return false; - } - - if (strcmp(codec, "aac") != 0) { - const char *id = - FindAudioEncoderFromCodec(codec); - int audioBitrate = GetAudioBitrate(); - OBSDataAutoRelease settings = obs_data_create(); - obs_data_set_int(settings, "bitrate", - audioBitrate); - - aacStreaming = obs_audio_encoder_create( - id, "alt_audio_enc", nullptr, 0, - nullptr); - obs_encoder_release(aacStreaming); - if (!aacStreaming) - return false; - - obs_encoder_update(aacStreaming, settings); - obs_encoder_set_audio(aacStreaming, - obs_get_audio()); - } - } - outputType = type; } obs_output_set_video_encoder(streamOutput, videoStreaming); - obs_output_set_audio_encoder(streamOutput, aacStreaming, 0); + obs_output_set_audio_encoder(streamOutput, audioStreaming, 0); obs_output_set_service(streamOutput, service); return true; } @@ -1095,7 +1110,7 @@ void SimpleOutput::SetupVodTrack(obs_service_t *service) enable = advanced && enable && ServiceSupportsVodTrack(name); if (enable) - obs_output_set_audio_encoder(streamOutput, aacArchive, 1); + obs_output_set_audio_encoder(streamOutput, audioArchive, 1); else clear_archive_encoder(streamOutput, SIMPLE_ARCHIVE_NAME); } @@ -1178,11 +1193,11 @@ void SimpleOutput::UpdateRecording() if (!ffmpegOutput) { obs_output_set_video_encoder(fileOutput, videoRecording); - obs_output_set_audio_encoder(fileOutput, aacRecording, 0); + obs_output_set_audio_encoder(fileOutput, audioRecording, 0); } if (replayBuffer) { obs_output_set_video_encoder(replayBuffer, videoRecording); - obs_output_set_audio_encoder(replayBuffer, aacRecording, 0); + obs_output_set_audio_encoder(replayBuffer, audioRecording, 0); } recordingConfigured = true; @@ -1348,17 +1363,16 @@ bool SimpleOutput::ReplayBufferActive() const struct AdvancedOutput : BasicOutputHandler { OBSEncoder streamAudioEnc; OBSEncoder streamArchiveEnc; - OBSEncoder aacTrack[MAX_AUDIO_MIXES]; + OBSEncoder recordTrack[MAX_AUDIO_MIXES]; OBSEncoder videoStreaming; OBSEncoder videoRecording; bool ffmpegOutput; bool ffmpegRecording; bool useStreamEncoder; + bool useStreamAudioEncoder; bool usesBitrate = false; - string aacEncoderID[MAX_AUDIO_MIXES]; - AdvancedOutput(OBSBasic *main_); inline void UpdateStreamSettings(); @@ -1372,7 +1386,7 @@ struct AdvancedOutput : BasicOutputHandler { inline void SetupRecording(); inline void SetupFFmpeg(); void SetupOutputs() override; - int GetAudioBitrate(size_t i) const; + int GetAudioBitrate(size_t i, const char *id) const; virtual bool SetupStreaming(obs_service_t *service) override; virtual bool StartStreaming(obs_service_t *service) override; @@ -1416,7 +1430,7 @@ static void ApplyEncoderDefaults(OBSData &settings, settings = std::move(dataRet); } -#define ADV_ARCHIVE_NAME "adv_archive_aac" +#define ADV_ARCHIVE_NAME "adv_archive_audio" #ifdef __APPLE__ static void translate_macvth264_encoder(const char *&encoder) @@ -1435,8 +1449,12 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) config_get_string(main->Config(), "AdvOut", "RecType"); const char *streamEncoder = config_get_string(main->Config(), "AdvOut", "Encoder"); + const char *streamAudioEncoder = + config_get_string(main->Config(), "AdvOut", "AudioEncoder"); const char *recordEncoder = config_get_string(main->Config(), "AdvOut", "RecEncoder"); + const char *recAudioEncoder = + config_get_string(main->Config(), "AdvOut", "RecAudioEncoder"); #ifdef __APPLE__ translate_macvth264_encoder(streamEncoder); translate_macvth264_encoder(recordEncoder); @@ -1447,6 +1465,7 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) ffmpegOutput && config_get_bool(main->Config(), "AdvOut", "FFOutputToFile"); useStreamEncoder = astrcmpi(recordEncoder, "none") == 0; + useStreamAudioEncoder = astrcmpi(recAudioEncoder, "none") == 0; OBSData streamEncSettings = GetDataFromJsonFile("streamEncoder.json"); OBSData recordEncSettings = GetDataFromJsonFile("recordEncoder.json"); @@ -1526,30 +1545,43 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) astrcmpi(rate_control, "ABR") == 0; for (int i = 0; i < MAX_AUDIO_MIXES; i++) { - char name[9]; - snprintf(name, sizeof(name), "adv_aac%d", i); + char name[19]; + snprintf(name, sizeof(name), "adv_record_audio_%d", i); - if (!CreateAACEncoder(aacTrack[i], aacEncoderID[i], - GetAudioBitrate(i), name, i)) + recordTrack[i] = obs_audio_encoder_create( + useStreamAudioEncoder ? streamAudioEncoder + : recAudioEncoder, + name, nullptr, i, nullptr); + + if (!recordTrack[i]) { throw "Failed to create audio encoder " "(advanced output)"; + } + + obs_encoder_release(recordTrack[i]); } std::string id; int streamTrack = config_get_int(main->Config(), "AdvOut", "TrackIndex") - 1; - if (!CreateAACEncoder(streamAudioEnc, id, GetAudioBitrate(streamTrack), - "adv_stream_aac", streamTrack)) + streamAudioEnc = obs_audio_encoder_create(streamAudioEncoder, + "adv_stream_audio", nullptr, + streamTrack, nullptr); + if (!streamAudioEnc) throw "Failed to create streaming audio encoder " "(advanced output)"; + obs_encoder_release(streamAudioEnc); id = ""; int vodTrack = config_get_int(main->Config(), "AdvOut", "VodTrackIndex") - 1; - if (!CreateAACEncoder(streamArchiveEnc, id, GetAudioBitrate(vodTrack), - ADV_ARCHIVE_NAME, vodTrack)) + streamArchiveEnc = obs_audio_encoder_create(streamAudioEncoder, + ADV_ARCHIVE_NAME, nullptr, + streamTrack, nullptr); + if (!streamArchiveEnc) throw "Failed to create archive audio encoder " "(advanced output)"; + obs_encoder_release(streamArchiveEnc); startRecording.Connect(obs_output_get_signal_handler(fileOutput), "start", OBSStartRecording, this); @@ -1717,21 +1749,22 @@ inline void AdvancedOutput::SetupRecording() if (!flv) { for (int i = 0; i < MAX_AUDIO_MIXES; i++) { if ((tracks & (1 << i)) != 0) { - obs_output_set_audio_encoder(fileOutput, - aacTrack[i], idx); + obs_output_set_audio_encoder( + fileOutput, recordTrack[i], idx); if (replayBuffer) obs_output_set_audio_encoder( - replayBuffer, aacTrack[i], idx); + replayBuffer, recordTrack[i], + idx); idx++; } } } else if (flv && tracks != 0) { - obs_output_set_audio_encoder(fileOutput, aacTrack[tracks - 1], - idx); + obs_output_set_audio_encoder(fileOutput, + recordTrack[tracks - 1], idx); if (replayBuffer) - obs_output_set_audio_encoder(replayBuffer, - aacTrack[tracks - 1], idx); + obs_output_set_audio_encoder( + replayBuffer, recordTrack[tracks - 1], idx); } // Use fragmented MOV/MP4 if user has not already specified custom movflags @@ -1834,13 +1867,12 @@ inline void AdvancedOutput::UpdateAudioSettings() config_get_int(main->Config(), "AdvOut", "TrackIndex"); int vodTrackIndex = config_get_int(main->Config(), "AdvOut", "VodTrackIndex"); + const char *audioEncoder = + config_get_string(main->Config(), "AdvOut", "AudioEncoder"); + const char *recAudioEncoder = + config_get_string(main->Config(), "AdvOut", "RecAudioEncoder"); OBSDataAutoRelease settings[MAX_AUDIO_MIXES]; - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { - settings[i] = obs_data_create(); - obs_data_set_int(settings[i], "bitrate", GetAudioBitrate(i)); - } - for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { string cfg_name = "Track"; cfg_name += to_string((int)i + 1); @@ -1850,13 +1882,19 @@ inline void AdvancedOutput::UpdateAudioSettings() string def_name = "Track"; def_name += to_string((int)i + 1); - SetEncoderName(aacTrack[i], name, def_name.c_str()); + SetEncoderName(recordTrack[i], name, def_name.c_str()); } for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) { int track = (int)(i + 1); + settings[i] = obs_data_create(); + obs_data_set_int(settings[i], "bitrate", + GetAudioBitrate(i, recAudioEncoder)); - obs_encoder_update(aacTrack[i], settings[i]); + obs_encoder_update(recordTrack[i], settings[i]); + + obs_data_set_int(settings[i], "bitrate", + GetAudioBitrate(i, audioEncoder)); if (track == streamTrackIndex || track == vodTrackIndex) { if (applyServiceSettings) { @@ -1885,7 +1923,7 @@ void AdvancedOutput::SetupOutputs() if (videoRecording) obs_encoder_set_video(videoRecording, obs_get_video()); for (size_t i = 0; i < MAX_AUDIO_MIXES; i++) - obs_encoder_set_audio(aacTrack[i], obs_get_audio()); + obs_encoder_set_audio(recordTrack[i], obs_get_audio()); obs_encoder_set_audio(streamAudioEnc, obs_get_audio()); obs_encoder_set_audio(streamArchiveEnc, obs_get_audio()); @@ -1897,14 +1935,14 @@ void AdvancedOutput::SetupOutputs() SetupRecording(); } -int AdvancedOutput::GetAudioBitrate(size_t i) const +int AdvancedOutput::GetAudioBitrate(size_t i, const char *id) const { static const char *names[] = { "Track1Bitrate", "Track2Bitrate", "Track3Bitrate", "Track4Bitrate", "Track5Bitrate", "Track6Bitrate", }; int bitrate = (int)config_get_uint(main->Config(), "AdvOut", names[i]); - return FindClosestAvailableSimpleAACBitrate(bitrate); + return FindClosestAvailableAudioBitrate(id, bitrate); } inline void AdvancedOutput::SetupVodTrack(obs_service_t *service) @@ -1994,37 +2032,6 @@ bool AdvancedOutput::SetupStreaming(obs_service_t *service) bool isEncoded = obs_output_get_flags(streamOutput) & OBS_OUTPUT_ENCODED; - if (isEncoded) { - const char *codec = - obs_output_get_supported_audio_codecs( - streamOutput); - if (!codec) { - blog(LOG_WARNING, "Failed to load audio codec"); - return false; - } - - if (strcmp(codec, "aac") != 0) { - OBSDataAutoRelease settings = - obs_encoder_get_settings( - streamAudioEnc); - - const char *id = - FindAudioEncoderFromCodec(codec); - - streamAudioEnc = obs_audio_encoder_create( - id, "alt_audio_enc", nullptr, - streamTrack - 1, nullptr); - - if (!streamAudioEnc) - return false; - - obs_encoder_release(streamAudioEnc); - obs_encoder_update(streamAudioEnc, settings); - obs_encoder_set_audio(streamAudioEnc, - obs_get_audio()); - } - } - outputType = type; } diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 1a3465ba45b4ca..b7eb69e597a145 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1485,6 +1485,10 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_int(basicConfig, "SimpleOutput", "RecRBSize", 512); config_set_default_string(basicConfig, "SimpleOutput", "RecRBPrefix", "Replay"); + config_set_default_string(basicConfig, "SimpleOutput", + "StreamAudioEncoder", "aac"); + config_set_default_string(basicConfig, "SimpleOutput", + "RecAudioEncoder", "aac"); config_set_default_bool(basicConfig, "AdvOut", "ApplyServiceSettings", true); @@ -1501,6 +1505,8 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_bool(basicConfig, "AdvOut", "RecUseRescale", false); config_set_default_uint(basicConfig, "AdvOut", "RecTracks", (1 << 0)); config_set_default_string(basicConfig, "AdvOut", "RecEncoder", "none"); + config_set_default_string(basicConfig, "AdvOut", "RecAudioEncoder", + "none"); config_set_default_uint(basicConfig, "AdvOut", "FLVTrack", 1); config_set_default_bool(basicConfig, "AdvOut", "FFOutputToFile", true); @@ -1629,6 +1635,15 @@ void OBSBasic::InitBasicConfigDefaults2() useNV ? SIMPLE_ENCODER_NVENC : SIMPLE_ENCODER_X264); + const char *aac_default = "ffmpeg_aac"; + if (EncoderAvailable("CoreAudio_AAC")) + aac_default = "CoreAudio_AAC"; + else if (EncoderAvailable("libfdk_aac")) + aac_default = "libfdk_aac"; + + config_set_default_string(basicConfig, "AdvOut", "AudioEncoder", + aac_default); + if (update_nvenc_presets(basicConfig)) config_save_safe(basicConfig, "tmp", nullptr); } diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index a82cf3b53aad47..004d8ab50dbe1d 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1267,7 +1267,7 @@ static bool return_first_id(void *data, const char *id) return false; } -bool OBSBasicSettings::ServiceAndCodecCompatible() +bool OBSBasicSettings::ServiceAndVCodecCompatible() { bool simple = (ui->outputMode->currentIndex() == 0); bool ret; @@ -1309,6 +1309,44 @@ bool OBSBasicSettings::ServiceAndCodecCompatible() return ret; } +bool OBSBasicSettings::ServiceAndACodecCompatible() +{ + bool simple = (ui->outputMode->currentIndex() == 0); + bool ret; + + QString codec; + + if (simple) { + codec = ui->simpleOutStrAEncoder->currentData().toString(); + } else { + QString encoder = ui->advOutAEncoder->currentData().toString(); + codec = obs_get_encoder_codec(QT_TO_UTF8(encoder)); + } + + OBSService service = SpawnTempService(); + const char **codecs = obs_service_get_supported_audio_codecs(service); + + if (!codecs || IsCustomService()) { + const char *output; + char **output_codecs; + + obs_enum_output_types_with_protocol(QT_TO_UTF8(protocol), + &output, return_first_id); + output_codecs = strlist_split( + obs_get_output_supported_audio_codecs(output), ';', + false); + + ret = service_supports_codec((const char **)output_codecs, + QT_TO_UTF8(codec)); + + strlist_free(output_codecs); + } else { + ret = service_supports_codec(codecs, QT_TO_UTF8(codec)); + } + + return ret; +} + /* we really need a way to find fallbacks in a less hardcoded way. maybe. */ static QString get_adv_fallback(const QString &enc) { @@ -1321,6 +1359,22 @@ static QString get_adv_fallback(const QString &enc) return "obs_x264"; } +static QString get_adv_audio_fallback(const QString &enc) +{ + const char *codec = obs_get_encoder_codec(QT_TO_UTF8(enc)); + + if (strcmp(codec, "aac") == 0) + return "ffmpeg_opus"; + + QString aac_default = "ffmpeg_aac"; + if (EncoderAvailable("CoreAudio_AAC")) + aac_default = "CoreAudio_AAC"; + else if (EncoderAvailable("libfdk_aac")) + aac_default = "libfdk_aac"; + + return aac_default; +} + static QString get_simple_fallback(const QString &enc) { if (enc == SIMPLE_ENCODER_NVENC_HEVC) @@ -1339,7 +1393,10 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() if (loading) return false; - if (ServiceAndCodecCompatible()) { + bool vcodec_compat = ServiceAndVCodecCompatible(); + bool acodec_compat = ServiceAndACodecCompatible(); + + if (vcodec_compat && acodec_compat) { if (lastServiceIdx != ui->service->currentIndex() || IsCustomService()) ResetEncoders(true); @@ -1347,8 +1404,10 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() } QString service = ui->service->currentText(); - QString cur_name; - QString fb_name; + QString cur_video_name; + QString fb_video_name; + QString cur_audio_name; + QString fb_audio_name; bool simple = (ui->outputMode->currentIndex() == 0); /* ------------------------------------------------- */ @@ -1362,20 +1421,45 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() int cur_idx = ui->simpleOutStrEncoder->findData(cur_enc); int fb_idx = ui->simpleOutStrEncoder->findData(fb_enc); - cur_name = ui->simpleOutStrEncoder->itemText(cur_idx); - fb_name = ui->simpleOutStrEncoder->itemText(fb_idx); + cur_video_name = ui->simpleOutStrEncoder->itemText(cur_idx); + fb_video_name = ui->simpleOutStrEncoder->itemText(fb_idx); + + cur_enc = ui->simpleOutStrAEncoder->currentData().toString(); + fb_enc = (cur_enc == "opus") ? "aac" : "opus"; + + cur_audio_name = ui->simpleOutStrAEncoder->itemText( + ui->simpleOutStrAEncoder->findData(cur_enc)); + fb_audio_name = ui->simpleOutStrAEncoder->itemText( + ui->simpleOutStrAEncoder->findData(fb_enc)); } else { QString cur_enc = ui->advOutEncoder->currentData().toString(); QString fb_enc = get_adv_fallback(cur_enc); - cur_name = obs_encoder_get_display_name(QT_TO_UTF8(cur_enc)); - fb_name = obs_encoder_get_display_name(QT_TO_UTF8(fb_enc)); + cur_video_name = + obs_encoder_get_display_name(QT_TO_UTF8(cur_enc)); + fb_video_name = + obs_encoder_get_display_name(QT_TO_UTF8(fb_enc)); + + cur_enc = ui->advOutAEncoder->currentData().toString(); + fb_enc = get_adv_audio_fallback(cur_enc); + + cur_audio_name = + obs_encoder_get_display_name(QT_TO_UTF8(cur_enc)); + fb_audio_name = + obs_encoder_get_display_name(QT_TO_UTF8(fb_enc)); } #define WARNING_VAL(x) \ QTStr("Basic.Settings.Output.Warn.ServiceCodecCompatibility." x) - QString msg = WARNING_VAL("Msg").arg(service, cur_name, fb_name); + QString msg = WARNING_VAL("Msg").arg( + service, vcodec_compat ? cur_audio_name : cur_video_name, + vcodec_compat ? fb_audio_name : fb_video_name); + if (!vcodec_compat && !acodec_compat) + msg = WARNING_VAL("Msg2").arg(service, cur_video_name, + cur_audio_name, fb_video_name, + fb_audio_name); + auto button = OBSMessageBox::question(this, WARNING_VAL("Title"), msg); #undef WARNING_VAL @@ -1403,37 +1487,60 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() void OBSBasicSettings::ResetEncoders(bool streamOnly) { - QString lastAdvEnc = ui->advOutEncoder->currentData().toString(); - QString lastEnc = ui->simpleOutStrEncoder->currentData().toString(); + QString lastAdvVideoEnc = ui->advOutEncoder->currentData().toString(); + QString lastVideoEnc = + ui->simpleOutStrEncoder->currentData().toString(); + QString lastAdvAudioEnc = ui->advOutAEncoder->currentData().toString(); + QString lastAudioEnc = + ui->simpleOutStrAEncoder->currentData().toString(); OBSService service = SpawnTempService(); - const char **codecs = obs_service_get_supported_video_codecs(service); + const char **vcodecs = obs_service_get_supported_video_codecs(service); + const char **acodecs = obs_service_get_supported_audio_codecs(service); const char *type; - BPtr output_codecs; + BPtr output_vcodecs; + BPtr output_acodecs; size_t idx = 0; - if (!codecs || IsCustomService()) { + if (!vcodecs || IsCustomService()) { const char *output; obs_enum_output_types_with_protocol(QT_TO_UTF8(protocol), &output, return_first_id); - output_codecs = strlist_split( + output_vcodecs = strlist_split( obs_get_output_supported_video_codecs(output), ';', false); - codecs = (const char **)output_codecs.Get(); + vcodecs = (const char **)output_vcodecs.Get(); + } + + if (!acodecs || IsCustomService()) { + const char *output; + + obs_enum_output_types_with_protocol(QT_TO_UTF8(protocol), + &output, return_first_id); + output_acodecs = strlist_split( + obs_get_output_supported_audio_codecs(output), ';', + false); + acodecs = (const char **)output_acodecs.Get(); } QSignalBlocker s1(ui->simpleOutStrEncoder); QSignalBlocker s2(ui->advOutEncoder); + QSignalBlocker s3(ui->simpleOutStrAEncoder); + QSignalBlocker s4(ui->advOutAEncoder); /* ------------------------------------------------- */ /* clear encoder lists */ ui->simpleOutStrEncoder->clear(); ui->advOutEncoder->clear(); + ui->simpleOutStrAEncoder->clear(); + ui->advOutAEncoder->clear(); if (!streamOnly) { ui->advOutRecEncoder->clear(); ui->advOutRecEncoder->addItem(TEXT_USE_STREAM_ENC, "none"); + ui->advOutRecAEncoder->clear(); + ui->advOutRecAEncoder->addItem(TEXT_USE_STREAM_ENC, "none"); } /* ------------------------------------------------- */ @@ -1444,19 +1551,25 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) const char *codec = obs_get_encoder_codec(type); uint32_t caps = obs_get_encoder_caps(type); - if (obs_get_encoder_type(type) != OBS_ENCODER_VIDEO) - continue; - - if ((caps & ENCODER_HIDE_FLAGS) != 0) - continue; - QString qName = QT_UTF8(name); QString qType = QT_UTF8(type); - if (service_supports_codec(codecs, codec)) - ui->advOutEncoder->addItem(qName, qType); - if (!streamOnly) - ui->advOutRecEncoder->addItem(qName, qType); + if (obs_get_encoder_type(type) == OBS_ENCODER_VIDEO) { + if ((caps & ENCODER_HIDE_FLAGS) != 0) + continue; + + if (service_supports_codec(vcodecs, codec)) + ui->advOutEncoder->addItem(qName, qType); + if (!streamOnly) + ui->advOutRecEncoder->addItem(qName, qType); + } + + if (obs_get_encoder_type(type) == OBS_ENCODER_AUDIO) { + if (service_supports_codec(acodecs, codec)) + ui->advOutAEncoder->addItem(qName, qType); + if (!streamOnly) + ui->advOutRecAEncoder->addItem(qName, qType); + } } /* ------------------------------------------------- */ @@ -1466,40 +1579,40 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) ui->simpleOutStrEncoder->addItem(ENCODER_STR("Software"), QString(SIMPLE_ENCODER_X264)); - if (service_supports_encoder(codecs, "obs_qsv11")) + if (service_supports_encoder(vcodecs, "obs_qsv11")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.QSV.H264"), QString(SIMPLE_ENCODER_QSV)); - if (service_supports_encoder(codecs, "obs_qsv11_av1")) + if (service_supports_encoder(vcodecs, "obs_qsv11_av1")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.QSV.AV1"), QString(SIMPLE_ENCODER_QSV_AV1)); - if (service_supports_encoder(codecs, "ffmpeg_nvenc")) + if (service_supports_encoder(vcodecs, "ffmpeg_nvenc")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.NVENC.H264"), QString(SIMPLE_ENCODER_NVENC)); - if (service_supports_encoder(codecs, "jim_av1_nvenc")) + if (service_supports_encoder(vcodecs, "jim_av1_nvenc")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.NVENC.AV1"), QString(SIMPLE_ENCODER_NVENC_AV1)); #ifdef ENABLE_HEVC - if (service_supports_encoder(codecs, "h265_texture_amf")) + if (service_supports_encoder(vcodecs, "h265_texture_amf")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.AMD.HEVC"), QString(SIMPLE_ENCODER_AMD_HEVC)); - if (service_supports_encoder(codecs, "ffmpeg_hevc_nvenc")) + if (service_supports_encoder(vcodecs, "ffmpeg_hevc_nvenc")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.NVENC.HEVC"), QString(SIMPLE_ENCODER_NVENC_HEVC)); #endif - if (service_supports_encoder(codecs, "h264_texture_amf")) + if (service_supports_encoder(vcodecs, "h264_texture_amf")) ui->simpleOutStrEncoder->addItem( ENCODER_STR("Hardware.AMD.H264"), QString(SIMPLE_ENCODER_AMD)); /* Preprocessor guard required for the macOS version check */ #ifdef __APPLE__ if (service_supports_encoder( - codecs, "com.apple.videotoolbox.videoencoder.ave.avc") + vcodecs, "com.apple.videotoolbox.videoencoder.ave.avc") #ifndef __aarch64__ && os_get_emulation_status() == true #endif @@ -1512,7 +1625,7 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) } #ifdef ENABLE_HEVC if (service_supports_encoder( - codecs, "com.apple.videotoolbox.videoencoder.ave.hevc") + vcodecs, "com.apple.videotoolbox.videoencoder.ave.hevc") #ifndef __aarch64__ && os_get_emulation_status() == true #endif @@ -1525,36 +1638,72 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) } #endif #endif + if (service_supports_encoder(acodecs, "CoreAudio_AAC") || + service_supports_encoder(acodecs, "libfdk_aac") || + service_supports_encoder(acodecs, "ffmpeg_aac")) + ui->simpleOutStrAEncoder->addItem("AAC", "aac"); + if (service_supports_encoder(acodecs, "ffmpeg_opus")) + ui->simpleOutStrAEncoder->addItem("Opus", "opus"); #undef ENCODER_STR /* ------------------------------------------------- */ /* Find fallback encoders */ - if (!lastAdvEnc.isEmpty()) { - int idx = ui->advOutEncoder->findData(lastAdvEnc); + if (!lastAdvVideoEnc.isEmpty()) { + int idx = ui->advOutEncoder->findData(lastAdvVideoEnc); if (idx == -1) { - lastAdvEnc = get_adv_fallback(lastAdvEnc); + lastAdvVideoEnc = get_adv_fallback(lastAdvVideoEnc); ui->advOutEncoder->setProperty("changed", QVariant(true)); OutputsChanged(); } - idx = ui->advOutEncoder->findData(lastAdvEnc); + idx = ui->advOutEncoder->findData(lastAdvVideoEnc); s2.unblock(); ui->advOutEncoder->setCurrentIndex(idx); } - if (!lastEnc.isEmpty()) { - int idx = ui->simpleOutStrEncoder->findData(lastEnc); + if (!lastAdvAudioEnc.isEmpty()) { + int idx = ui->advOutAEncoder->findData(lastAdvAudioEnc); if (idx == -1) { - lastEnc = get_simple_fallback(lastEnc); + lastAdvAudioEnc = + get_adv_audio_fallback(lastAdvAudioEnc); + ui->advOutAEncoder->setProperty("changed", + QVariant(true)); + OutputsChanged(); + } + + idx = ui->advOutAEncoder->findData(lastAdvAudioEnc); + s4.unblock(); + ui->advOutAEncoder->setCurrentIndex(idx); + } + + if (!lastVideoEnc.isEmpty()) { + int idx = ui->simpleOutStrEncoder->findData(lastVideoEnc); + if (idx == -1) { + lastVideoEnc = get_simple_fallback(lastVideoEnc); ui->simpleOutStrEncoder->setProperty("changed", QVariant(true)); OutputsChanged(); } - idx = ui->simpleOutStrEncoder->findData(lastEnc); + idx = ui->simpleOutStrEncoder->findData(lastVideoEnc); s1.unblock(); ui->simpleOutStrEncoder->setCurrentIndex(idx); } + + if (!lastAudioEnc.isEmpty()) { + int idx = ui->simpleOutStrAEncoder->findData(lastAudioEnc); + if (idx == -1) { + lastAudioEnc = (lastAudioEnc == "opus") ? "aac" + : "opus"; + ui->simpleOutStrAEncoder->setProperty("changed", + QVariant(true)); + OutputsChanged(); + } + + idx = ui->simpleOutStrAEncoder->findData(lastAudioEnc); + s3.unblock(); + ui->simpleOutStrAEncoder->setCurrentIndex(idx); + } } diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index a4c3a1dc79a1c6..84abe98badb5c9 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -260,9 +260,40 @@ static CodecDesc GetDefaultCodecDesc(const ff_format_desc *formatDesc, id); } -static void PopulateAACBitrates(initializer_list boxes) +#define INVALID_BITRATE 10000 +static int FindClosestAvailableAudioBitrate(QComboBox *box, int bitrate) { - auto &bitrateMap = GetSimpleAACEncoderBitrateMap(); + QList bitrates; + int prev = 0; + int next = INVALID_BITRATE; + + for (int i = 0; i < box->count(); i++) + bitrates << box->itemText(i).toInt(); + + for (int val : bitrates) { + if (next > val) { + if (val == bitrate) + return bitrate; + + if (val < next && val > bitrate) + next = val; + if (val > prev && val < bitrate) + prev = val; + } + } + + if (next != INVALID_BITRATE) + return next; + if (prev != 0) + return prev; + return 192; +} +#undef INVALID_BITRATE + +static void PopulateSimpleBitrates(QComboBox *box, bool opus) +{ + auto &bitrateMap = opus ? GetSimpleOpusEncoderBitrateMap() + : GetSimpleAACEncoderBitrateMap(); if (bitrateMap.empty()) return; @@ -272,17 +303,52 @@ static void PopulateAACBitrates(initializer_list boxes) QString::number(entry.first), obs_encoder_get_display_name(entry.second.c_str())); + QString currentBitrate = box->currentText(); + box->clear(); + + for (auto &pair : pairs) { + box->addItem(pair.first); + box->setItemData(box->count() - 1, pair.second, + Qt::ToolTipRole); + } + + if (box->findData(currentBitrate) == -1) { + int bitrate = FindClosestAvailableAudioBitrate( + box, currentBitrate.toInt()); + box->setCurrentText(QString::number(bitrate)); + } else + box->setCurrentText(currentBitrate); +} + +static void PopulateAdvancedBitrates(initializer_list boxes, + const char *stream_id, const char *rec_id) +{ + auto &streamBitrates = GetAudioEncoderBitrates(stream_id); + auto &recBitrates = GetAudioEncoderBitrates(rec_id); + if (streamBitrates.empty() || recBitrates.empty()) + return; + + QList streamBitratesList; + for (auto &bitrate : streamBitrates) + streamBitratesList << bitrate; + for (auto box : boxes) { - QString currentText = box->currentText(); + QString currentBitrate = box->currentText(); box->clear(); - for (auto &pair : pairs) { - box->addItem(pair.first); - box->setItemData(box->count() - 1, pair.second, - Qt::ToolTipRole); + for (auto &bitrate : recBitrates) { + if (streamBitratesList.indexOf(bitrate) == -1) + continue; + + box->addItem(QString::number(bitrate)); } - box->setCurrentText(currentText); + if (box->findData(currentBitrate) == -1) { + int bitrate = FindClosestAvailableAudioBitrate( + box, currentBitrate.toInt()); + box->setCurrentText(QString::number(bitrate)); + } else + box->setCurrentText(currentBitrate); } } @@ -362,11 +428,6 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) main->EnableOutputs(false); - PopulateAACBitrates({ui->simpleOutputABitrate, ui->advOutTrack1Bitrate, - ui->advOutTrack2Bitrate, ui->advOutTrack3Bitrate, - ui->advOutTrack4Bitrate, ui->advOutTrack5Bitrate, - ui->advOutTrack6Bitrate}); - ui->listWidget->setAttribute(Qt::WA_MacShowFocusRect, false); /* clang-format off */ @@ -424,17 +485,20 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->simpleOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutStrEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutStrAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutAdvanced, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutPreset, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutCustom, EDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutRecQuality, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleReplayBuf, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleRBSecMax, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleRBMegsMax, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->advOutAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutTrack1, CHECK_CHANGED, OUTPUTS_CHANGED); @@ -448,6 +512,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->advOutNoSpace, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutRecFormat, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->advOutRecAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutRecUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutRecRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED); @@ -919,6 +984,13 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) connect(ui->useStreamKeyAdv, SIGNAL(clicked()), this, SLOT(UseStreamKeyAdvClicked())); + connect(ui->simpleOutStrAEncoder, SIGNAL(currentIndexChanged(int)), + this, SLOT(SimpleStreamAudioEncoderChanged)); + connect(ui->advOutAEncoder, SIGNAL(currentIndexChanged(int)), this, + SLOT(AdvAudioEncodersChanged())); + connect(ui->advOutRecAEncoder, SIGNAL(currentIndexChanged(int)), this, + SLOT(AdvAudioEncodersChanged())); + UpdateAudioWarnings(); UpdateAdvNetworkGroup(); } @@ -1821,6 +1893,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings() config_get_uint(main->Config(), "SimpleOutput", "VBitrate"); const char *streamEnc = config_get_string( main->Config(), "SimpleOutput", "StreamEncoder"); + const char *streamAudioEnc = config_get_string( + main->Config(), "SimpleOutput", "StreamAudioEncoder"); int audioBitrate = config_get_uint(main->Config(), "SimpleOutput", "ABitrate"); bool advanced = @@ -1841,6 +1915,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings() config_get_string(main->Config(), "SimpleOutput", "RecQuality"); const char *recEnc = config_get_string(main->Config(), "SimpleOutput", "RecEncoder"); + const char *recAudioEnc = config_get_string( + main->Config(), "SimpleOutput", "RecAudioEncoder"); const char *muxCustom = config_get_string( main->Config(), "SimpleOutput", "MuxerCustom"); bool replayBuf = @@ -1856,7 +1932,10 @@ void OBSBasicSettings::LoadSimpleOutputSettings() curAMDPreset = amdPreset; curAMDAV1Preset = amdAV1Preset; - audioBitrate = FindClosestAvailableSimpleAACBitrate(audioBitrate); + bool isOpus = strcmp(streamAudioEnc, "opus") == 0; + audioBitrate = + isOpus ? FindClosestAvailableSimpleOpusBitrate(audioBitrate) + : FindClosestAvailableSimpleAACBitrate(audioBitrate); ui->simpleOutputPath->setText(path); ui->simpleNoSpace->setChecked(noSpace); @@ -1865,6 +1944,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings() int idx = ui->simpleOutRecFormat->findData(format); ui->simpleOutRecFormat->setCurrentIndex(idx); + PopulateSimpleBitrates(ui->simpleOutputABitrate, isOpus); + const char *speakers = config_get_string(main->Config(), "Audio", "ChannelSetup"); @@ -1888,11 +1969,21 @@ void OBSBasicSettings::LoadSimpleOutputSettings() idx = 0; ui->simpleOutStrEncoder->setCurrentIndex(idx); + idx = ui->simpleOutStrAEncoder->findData(QString(streamAudioEnc)); + if (idx == -1) + idx = 0; + ui->simpleOutStrAEncoder->setCurrentIndex(idx); + idx = ui->simpleOutRecEncoder->findData(QString(recEnc)); if (idx == -1) idx = 0; ui->simpleOutRecEncoder->setCurrentIndex(idx); + idx = ui->simpleOutRecAEncoder->findData(QString(recAudioEnc)); + if (idx == -1) + idx = 0; + ui->simpleOutRecAEncoder->setCurrentIndex(idx); + ui->simpleOutMuxCustom->setText(muxCustom); ui->simpleReplayBuf->setChecked(replayBuf); @@ -2237,12 +2328,31 @@ void OBSBasicSettings::LoadAdvOutputAudioSettings() const char *name6 = config_get_string(main->Config(), "AdvOut", "Track6Name"); - track1Bitrate = FindClosestAvailableSimpleAACBitrate(track1Bitrate); - track2Bitrate = FindClosestAvailableSimpleAACBitrate(track2Bitrate); - track3Bitrate = FindClosestAvailableSimpleAACBitrate(track3Bitrate); - track4Bitrate = FindClosestAvailableSimpleAACBitrate(track4Bitrate); - track5Bitrate = FindClosestAvailableSimpleAACBitrate(track5Bitrate); - track6Bitrate = FindClosestAvailableSimpleAACBitrate(track6Bitrate); + const char *encoder_id = + config_get_string(main->Config(), "AdvOut", "AudioEncoder"); + const char *rec_encoder_id = + config_get_string(main->Config(), "AdvOut", "RecAudioEncoder"); + + PopulateAdvancedBitrates( + {ui->advOutTrack1Bitrate, ui->advOutTrack2Bitrate, + ui->advOutTrack3Bitrate, ui->advOutTrack4Bitrate, + ui->advOutTrack5Bitrate, ui->advOutTrack6Bitrate}, + encoder_id, + strcmp(rec_encoder_id, "none") != 0 ? rec_encoder_id + : encoder_id); + + track1Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack1Bitrate, track1Bitrate); + track2Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack2Bitrate, track2Bitrate); + track3Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack3Bitrate, track3Bitrate); + track4Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack4Bitrate, track4Bitrate); + track5Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack5Bitrate, track5Bitrate); + track6Bitrate = FindClosestAvailableAudioBitrate( + ui->advOutTrack6Bitrate, track6Bitrate); // restrict list of bitrates when multichannel is OFF const char *speakers = @@ -2292,8 +2402,15 @@ void OBSBasicSettings::LoadOutputSettings() LoadSimpleOutputSettings(); LoadAdvOutputStreamingSettings(); LoadAdvOutputStreamingEncoderProperties(); + + const char *type = + config_get_string(main->Config(), "AdvOut", "AudioEncoder"); + SetComboByValue(ui->advOutAEncoder, type); + LoadAdvOutputRecordingSettings(); LoadAdvOutputRecordingEncoderProperties(); + type = config_get_string(main->Config(), "AdvOut", "RecAudioEncoder"); + SetComboByValue(ui->advOutRecAEncoder, type); LoadAdvOutputFFmpegSettings(); LoadAdvOutputAudioSettings(); @@ -2302,6 +2419,8 @@ void OBSBasicSettings::LoadOutputSettings() ui->outputModeLabel->setEnabled(false); ui->simpleOutStrEncoderLabel->setEnabled(false); ui->simpleOutStrEncoder->setEnabled(false); + ui->simpleOutStrAEncoderLabel->setEnabled(false); + ui->simpleOutStrAEncoder->setEnabled(false); ui->simpleRecordingGroupBox->setEnabled(false); ui->replayBufferGroupBox->setEnabled(false); ui->advOutTopContainer->setEnabled(false); @@ -3634,6 +3753,8 @@ void OBSBasicSettings::SaveOutputSettings() SaveSpinBox(ui->simpleOutputVBitrate, "SimpleOutput", "VBitrate"); SaveComboData(ui->simpleOutStrEncoder, "SimpleOutput", "StreamEncoder"); + SaveComboData(ui->simpleOutStrAEncoder, "SimpleOutput", + "StreamAudioEncoder"); SaveCombo(ui->simpleOutputABitrate, "SimpleOutput", "ABitrate"); SaveEdit(ui->simpleOutputPath, "SimpleOutput", "FilePath"); SaveCheckBox(ui->simpleNoSpace, "SimpleOutput", "FileNameWithoutSpace"); @@ -3643,6 +3764,8 @@ void OBSBasicSettings::SaveOutputSettings() SaveEdit(ui->simpleOutCustom, "SimpleOutput", "x264Settings"); SaveComboData(ui->simpleOutRecQuality, "SimpleOutput", "RecQuality"); SaveComboData(ui->simpleOutRecEncoder, "SimpleOutput", "RecEncoder"); + SaveComboData(ui->simpleOutRecAEncoder, "SimpleOutput", + "RecAudioEncoder"); SaveEdit(ui->simpleOutMuxCustom, "SimpleOutput", "MuxerCustom"); SaveCheckBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB"); SaveSpinBox(ui->simpleRBSecMax, "SimpleOutput", "RecRBTime"); @@ -3651,6 +3774,7 @@ void OBSBasicSettings::SaveOutputSettings() curAdvStreamEncoder = GetComboData(ui->advOutEncoder); SaveComboData(ui->advOutEncoder, "AdvOut", "Encoder"); + SaveComboData(ui->advOutAEncoder, "AdvOut", "AudioEncoder"); SaveCheckBox(ui->advOutUseRescale, "AdvOut", "Rescale"); SaveCombo(ui->advOutRescale, "AdvOut", "RescaleRes"); SaveTrackIndex(main->Config(), "AdvOut", "TrackIndex", ui->advOutTrack1, @@ -3666,6 +3790,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveCheckBox(ui->advOutNoSpace, "AdvOut", "RecFileNameWithoutSpace"); SaveComboData(ui->advOutRecFormat, "AdvOut", "RecFormat"); SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder"); + SaveComboData(ui->advOutRecAEncoder, "AdvOut", "RecAudioEncoder"); SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale"); SaveCombo(ui->advOutRecRescale, "AdvOut", "RecRescaleRes"); SaveEdit(ui->advOutMuxCustom, "AdvOut", "RecMuxerCustom"); @@ -4404,16 +4529,26 @@ void OBSBasicSettings::SpeakerLayoutChanged(int idx) QString speakerLayoutQstr = ui->channelSetup->itemText(idx); std::string speakerLayout = QT_TO_UTF8(speakerLayoutQstr); bool surround = IsSurround(speakerLayout.c_str()); + bool isOpus = ui->simpleOutStrAEncoder->currentData().toString() == + "opus"; if (surround) { /* * Display all bitrates */ - PopulateAACBitrates( - {ui->simpleOutputABitrate, ui->advOutTrack1Bitrate, - ui->advOutTrack2Bitrate, ui->advOutTrack3Bitrate, - ui->advOutTrack4Bitrate, ui->advOutTrack5Bitrate, - ui->advOutTrack6Bitrate}); + PopulateSimpleBitrates(ui->simpleOutputABitrate, isOpus); + + const char *encoder_id = QT_TO_UTF8( + ui->advOutAEncoder->currentData().toString()); + QString rec_encoder_id = + ui->advOutRecAEncoder->currentData().toString(); + PopulateAdvancedBitrates( + {ui->advOutTrack1Bitrate, ui->advOutTrack2Bitrate, + ui->advOutTrack3Bitrate, ui->advOutTrack4Bitrate, + ui->advOutTrack5Bitrate, ui->advOutTrack6Bitrate}, + encoder_id, + rec_encoder_id == "none" ? encoder_id + : QT_TO_UTF8(rec_encoder_id)); } else { /* * Reset audio bitrate for simple and adv mode, update list of @@ -4466,7 +4601,7 @@ void RestrictResetBitrates(initializer_list boxes, int maxbitrate) for (auto box : boxes) { int idx = box->currentIndex(); int max_bitrate = - FindClosestAvailableSimpleAACBitrate(maxbitrate); + FindClosestAvailableAudioBitrate(box, maxbitrate); int count = box->count(); int max_idx = box->findText( QT_UTF8(std::to_string(max_bitrate).c_str())); @@ -4475,9 +4610,8 @@ void RestrictResetBitrates(initializer_list boxes, int maxbitrate) box->removeItem(i); if (idx > max_idx) { - int default_bitrate = - FindClosestAvailableSimpleAACBitrate( - maxbitrate / 2); + int default_bitrate = FindClosestAvailableAudioBitrate( + box, maxbitrate / 2); int default_idx = box->findText(QT_UTF8( std::to_string(default_bitrate).c_str())); @@ -4947,6 +5081,12 @@ void OBSBasicSettings::FillSimpleRecordingValues() QString(SIMPLE_ENCODER_APPLE_HEVC)); #endif + if (EncoderAvailable("CoreAudio_AAC") || + EncoderAvailable("libfdk_aac") || EncoderAvailable("ffmpeg_aac")) + ui->simpleOutRecAEncoder->addItem("AAC", "aac"); + if (EncoderAvailable("ffmpeg_opus")) + ui->simpleOutRecAEncoder->addItem("Opus", "opus"); + #undef ADD_QUALITY #undef ENCODER_STR } @@ -4977,6 +5117,8 @@ void OBSBasicSettings::SimpleRecordingQualityChanged() bool showEncoder = !streamQuality && !losslessQuality; ui->simpleOutRecEncoder->setVisible(showEncoder); ui->simpleOutRecEncoderLabel->setVisible(showEncoder); + ui->simpleOutRecAEncoder->setVisible(showEncoder); + ui->simpleOutRecAEncoderLabel->setVisible(showEncoder); ui->simpleOutRecFormat->setVisible(!losslessQuality); ui->simpleOutRecFormatLabel->setVisible(!losslessQuality); @@ -5635,3 +5777,39 @@ void OBSBasicSettings::UpdateAdvNetworkGroup() ui->enableLowLatencyMode->setVisible(enabled); #endif } + +void OBSBasicSettings::SimpleStreamAudioEncoderChanged() +{ + PopulateSimpleBitrates( + ui->simpleOutputABitrate, + ui->simpleOutStrAEncoder->currentData().toString() == "opus"); + + if (IsSurround(QT_TO_UTF8(ui->channelSetup->currentText()))) + return; + + RestrictResetBitrates({ui->simpleOutputABitrate}, 320); +} + +void OBSBasicSettings::AdvAudioEncodersChanged() +{ + QString streamEncoder = ui->advOutAEncoder->currentData().toString(); + QString recEncoder = ui->advOutRecAEncoder->currentData().toString(); + + if (recEncoder == "none") + recEncoder = streamEncoder; + + PopulateAdvancedBitrates( + {ui->advOutTrack1Bitrate, ui->advOutTrack2Bitrate, + ui->advOutTrack3Bitrate, ui->advOutTrack4Bitrate, + ui->advOutTrack5Bitrate, ui->advOutTrack6Bitrate}, + QT_TO_UTF8(streamEncoder), QT_TO_UTF8(recEncoder)); + + if (IsSurround(QT_TO_UTF8(ui->channelSetup->currentText()))) + return; + + RestrictResetBitrates({ui->advOutTrack1Bitrate, ui->advOutTrack2Bitrate, + ui->advOutTrack3Bitrate, ui->advOutTrack4Bitrate, + ui->advOutTrack5Bitrate, + ui->advOutTrack6Bitrate}, + 320); +} diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index e535f88a25cfc2..d3442db3c18ac9 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -377,7 +377,8 @@ private slots: OBSService GetStream1Service(); - bool ServiceAndCodecCompatible(); + bool ServiceAndVCodecCompatible(); + bool ServiceAndACodecCompatible(); bool ServiceSupportsCodecCheck(); private slots: @@ -468,6 +469,9 @@ private slots: void UseStreamKeyAdvClicked(); + void SimpleStreamAudioEncoderChanged(); + void AdvAudioEncodersChanged(); + protected: virtual void closeEvent(QCloseEvent *event) override; void reject() override; From ea4ac2d08dec6a1f890ece73a2990f32f7dee778 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 15:48:11 +0100 Subject: [PATCH 0417/2225] libobs,docs: Add connect infos to the Services API This replace and deprecate url, key, username and password functions. --- docs/sphinx/reference-services.rst | 40 ++++++++++++++++++++++++++++++ libobs/obs-service.c | 11 ++++++++ libobs/obs-service.h | 13 ++++++++++ libobs/obs.h | 15 ++++++++--- 4 files changed, 75 insertions(+), 4 deletions(-) diff --git a/docs/sphinx/reference-services.rst b/docs/sphinx/reference-services.rst index 1429d9d4281d8a..5d3a33ab5bb5dd 100644 --- a/docs/sphinx/reference-services.rst +++ b/docs/sphinx/reference-services.rst @@ -161,6 +161,28 @@ Service Definition Structure :return: The protocol used by the service +.. member:: const char *(*obs_service_info.get_connect_info)(void *data, uint32_t type) + + Output a service connection info related to a given type value: + + - **OBS_SERVICE_CONNECT_INFO_SERVER_URL** - Server URL (0) + + - **OBS_SERVICE_CONNECT_INFO_STREAM_ID** - Stream ID (2) + + - **OBS_SERVICE_CONNECT_INFO_STREAM_KEY** - Stream key (alias of **OBS_SERVICE_CONNECT_INFO_STREAM_ID**) + + - **OBS_SERVICE_CONNECT_INFO_USERNAME** - Username (4) + + - **OBS_SERVICE_CONNECT_INFO_PASSWORD** - Password (6) + + - **OBS_SERVICE_CONNECT_INFO_ENCRYPT_PASSPHRASE** - Encryption passphrase (8) + + - Odd values as types are reserved for third-party protocols + + Depending on the protocol, the service will have to provide information + to the output to be able to connect. + + Irrelevant or unused types can return `NULL`. General Service Functions ------------------------- @@ -283,24 +305,36 @@ General Service Functions :return: The URL currently used for this service +.. deprecated:: 29.1.0 + Use :c:func:`obs_service_get_connect_info()` instead. + --------------------- .. function:: const char *obs_service_get_key(const obs_service_t *service) :return: Stream key (if any) currently used for this service +.. deprecated:: 29.1.0 + Use :c:func:`obs_service_get_connect_info()` instead. + --------------------- .. function:: const char *obs_service_get_username(const obs_service_t *service) :return: User name (if any) currently used for this service +.. deprecated:: 29.1.0 + Use :c:func:`obs_service_get_connect_info()` instead. + --------------------- .. function:: const char *obs_service_get_password(const obs_service_t *service) :return: Password (if any) currently used for this service +.. deprecated:: 29.1.0 + Use :c:func:`obs_service_get_connect_info()` instead. + --------------------- .. function:: void obs_service_apply_encoder_settings(obs_service_t *service, obs_data_t *video_encoder_settings, obs_data_t *audio_encoder_settings) @@ -338,6 +372,12 @@ General Service Functions :return: The output type that should be preferred with this service +.. function:: const char *obs_service_get_connect_info(const obs_service_t *service, uint32_t type) + + :param type: Check :c:member:`obs_service_info.get_connect_info` for + type values. + :return: Connection info related to the type value. + .. --------------------------------------------------------------------------- .. _libobs/obs-service.h: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-service.h diff --git a/libobs/obs-service.c b/libobs/obs-service.c index fd7919fd9fb6a8..b9f667342c1f0a 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -501,3 +501,14 @@ const char *obs_service_get_preferred_output_type(const obs_service_t *service) return service->info.get_output_type(service->context.data); return NULL; } + +const char *obs_service_get_connect_info(const obs_service_t *service, + uint32_t type) +{ + if (!obs_service_valid(service, "obs_service_get_info")) + return NULL; + + if (!service->info.get_connect_info) + return NULL; + return service->info.get_connect_info(service->context.data, type); +} diff --git a/libobs/obs-service.h b/libobs/obs-service.h index 352a4c08db4cf5..7a653d1fe0be3e 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -33,6 +33,17 @@ struct obs_service_resolution { int cy; }; +/* NOTE: Odd numbers are reserved for custom info from third-party protocols */ +enum obs_service_connect_info { + OBS_SERVICE_CONNECT_INFO_SERVER_URL = 0, + OBS_SERVICE_CONNECT_INFO_STREAM_ID = 2, + OBS_SERVICE_CONNECT_INFO_STREAM_KEY = + 2, // Alias of OBS_SERVICE_CONNECT_INFO_STREAM_ID + OBS_SERVICE_CONNECT_INFO_USERNAME = 4, + OBS_SERVICE_CONNECT_INFO_PASSWORD = 6, + OBS_SERVICE_CONNECT_INFO_ENCRYPT_PASSPHRASE = 8, +}; + struct obs_service_info { /* required */ const char *id; @@ -93,6 +104,8 @@ struct obs_service_info { const char *(*get_protocol)(void *data); const char **(*get_supported_audio_codecs)(void *data); + + const char *(*get_connect_info)(void *data, uint32_t type); }; EXPORT void obs_register_service_s(const struct obs_service_info *info, diff --git a/libobs/obs.h b/libobs/obs.h index ff28e807f3f3ef..6b4329646410ae 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2508,16 +2508,20 @@ EXPORT void obs_service_update(obs_service_t *service, obs_data_t *settings); EXPORT obs_data_t *obs_service_get_settings(const obs_service_t *service); /** Returns the URL for this service context */ -EXPORT const char *obs_service_get_url(const obs_service_t *service); +OBS_DEPRECATED EXPORT const char * +obs_service_get_url(const obs_service_t *service); /** Returns the stream key (if any) for this service context */ -EXPORT const char *obs_service_get_key(const obs_service_t *service); +OBS_DEPRECATED EXPORT const char * +obs_service_get_key(const obs_service_t *service); /** Returns the username (if any) for this service context */ -EXPORT const char *obs_service_get_username(const obs_service_t *service); +OBS_DEPRECATED EXPORT const char * +obs_service_get_username(const obs_service_t *service); /** Returns the password (if any) for this service context */ -EXPORT const char *obs_service_get_password(const obs_service_t *service); +OBS_DEPRECATED EXPORT const char * +obs_service_get_password(const obs_service_t *service); /** * Applies service-specific video encoder settings. @@ -2559,6 +2563,9 @@ EXPORT const char *obs_service_get_protocol(const obs_service_t *service); EXPORT const char * obs_service_get_preferred_output_type(const obs_service_t *service); +EXPORT const char *obs_service_get_connect_info(const obs_service_t *service, + uint32_t type); + /* ------------------------------------------------------------------------- */ /* Source frame allocation functions */ EXPORT void obs_source_frame_init(struct obs_source_frame *frame, From 258e339d2fa5adaf6af07407f338cab001a3df46 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 15:49:10 +0100 Subject: [PATCH 0418/2225] rtmp-services: Add connect infos to services --- plugins/rtmp-services/rtmp-common.c | 27 +++++++++++++++++++++++++++ plugins/rtmp-services/rtmp-custom.c | 27 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 6812191fbe78f0..781995e42c073e 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -1036,6 +1036,32 @@ static const char *rtmp_common_get_protocol(void *data) return service->protocol ? service->protocol : "RTMP"; } +static const char *rtmp_common_get_connect_info(void *data, uint32_t type) +{ + switch ((enum obs_service_connect_info)type) { + case OBS_SERVICE_CONNECT_INFO_SERVER_URL: + return rtmp_common_url(data); + case OBS_SERVICE_CONNECT_INFO_STREAM_ID: + return rtmp_common_key(data); + case OBS_SERVICE_CONNECT_INFO_USERNAME: + return rtmp_common_username(data); + case OBS_SERVICE_CONNECT_INFO_PASSWORD: + return rtmp_common_password(data); + case OBS_SERVICE_CONNECT_INFO_ENCRYPT_PASSPHRASE: { + const char *protocol = rtmp_common_get_protocol(data); + + if ((strcmp(protocol, "SRT") == 0)) + return rtmp_common_password(data); + else if ((strcmp(protocol, "RIST") == 0)) + return rtmp_common_key(data); + + break; + } + } + + return NULL; +} + struct obs_service_info rtmp_common_service = { .id = "rtmp_common", .get_name = rtmp_common_getname, @@ -1048,6 +1074,7 @@ struct obs_service_info rtmp_common_service = { .get_key = rtmp_common_key, .get_username = rtmp_common_username, .get_password = rtmp_common_password, + .get_connect_info = rtmp_common_get_connect_info, .apply_encoder_settings = rtmp_common_apply_settings, .get_supported_resolutions = rtmp_common_get_supported_resolutions, .get_max_fps = rtmp_common_get_max_fps, diff --git a/plugins/rtmp-services/rtmp-custom.c b/plugins/rtmp-services/rtmp-custom.c index 53ef3d4bf6fd09..b4baeb8cd4c258 100644 --- a/plugins/rtmp-services/rtmp-custom.c +++ b/plugins/rtmp-services/rtmp-custom.c @@ -148,6 +148,32 @@ static void rtmp_custom_apply_settings(void *data, obs_data_t *video_settings, } } +static const char *rtmp_custom_get_connect_info(void *data, uint32_t type) +{ + switch ((enum obs_service_connect_info)type) { + case OBS_SERVICE_CONNECT_INFO_SERVER_URL: + return rtmp_custom_url(data); + case OBS_SERVICE_CONNECT_INFO_STREAM_ID: + return rtmp_custom_key(data); + case OBS_SERVICE_CONNECT_INFO_USERNAME: + return rtmp_custom_username(data); + case OBS_SERVICE_CONNECT_INFO_PASSWORD: + return rtmp_custom_password(data); + case OBS_SERVICE_CONNECT_INFO_ENCRYPT_PASSPHRASE: { + const char *protocol = rtmp_custom_get_protocol(data); + + if ((strcmp(protocol, "SRT") == 0)) + return rtmp_custom_password(data); + else if ((strcmp(protocol, "RIST") == 0)) + return rtmp_custom_key(data); + + break; + } + } + + return NULL; +} + struct obs_service_info rtmp_custom_service = { .id = "rtmp_custom", .get_name = rtmp_custom_name, @@ -158,6 +184,7 @@ struct obs_service_info rtmp_custom_service = { .get_protocol = rtmp_custom_get_protocol, .get_url = rtmp_custom_url, .get_key = rtmp_custom_key, + .get_connect_info = rtmp_custom_get_connect_info, .get_username = rtmp_custom_username, .get_password = rtmp_custom_password, .apply_encoder_settings = rtmp_custom_apply_settings, From 5e4ed49a2dbac66696972762e89be01bb8916ffe Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 15:52:25 +0100 Subject: [PATCH 0419/2225] obs-outputs,obs-ffmpeg: Use connect infos in outputs --- plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c | 6 ++-- plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c | 38 +++++++++++++++---------- plugins/obs-ffmpeg/obs-ffmpeg-mux.c | 3 +- plugins/obs-ffmpeg/obs-ffmpeg-output.h | 3 +- plugins/obs-outputs/ftl-stream.c | 14 ++++++--- plugins/obs-outputs/rtmp-stream.c | 16 ++++++++--- 6 files changed, 53 insertions(+), 27 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c index d8546bf26014ce..50da30a7ab5b6e 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-hls-mux.c @@ -126,8 +126,10 @@ bool ffmpeg_hls_mux_start(void *data) service = obs_output_get_service(stream->output); if (!service) return false; - path_str = obs_service_get_url(service); - stream_key = obs_service_get_key(service); + path_str = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL); + stream_key = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_STREAM_KEY); dstr_copy(&stream->stream_key, stream_key); dstr_copy(&path, path_str); dstr_replace(&path, "{stream_key}", stream_key); diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c index f4145c93694e33..a59f04ccae0da9 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mpegts.c @@ -349,24 +349,26 @@ static inline int connect_mpegts_url(struct ffmpeg_output *stream, bool is_rist) if (!is_rist) { SRTContext *context = (SRTContext *)uc->priv_data; context->streamid = NULL; - if (stream->ff_data.config.key != NULL) { - if (strlen(stream->ff_data.config.key)) - context->streamid = - av_strdup(stream->ff_data.config.key); + if (stream->ff_data.config.stream_id != NULL) { + if (strlen(stream->ff_data.config.stream_id)) + context->streamid = av_strdup( + stream->ff_data.config.stream_id); } context->passphrase = NULL; - if (stream->ff_data.config.password != NULL) { - if (strlen(stream->ff_data.config.password)) - context->passphrase = av_strdup( - stream->ff_data.config.password); + if (stream->ff_data.config.encrypt_passphrase != NULL) { + if (strlen(stream->ff_data.config.encrypt_passphrase)) + context->passphrase = + av_strdup(stream->ff_data.config + .encrypt_passphrase); } } else { RISTContext *context = (RISTContext *)uc->priv_data; context->secret = NULL; - if (stream->ff_data.config.key != NULL) { - if (strlen(stream->ff_data.config.key)) + if (stream->ff_data.config.encrypt_passphrase != NULL) { + if (strlen(stream->ff_data.config.encrypt_passphrase)) context->secret = - bstrdup(stream->ff_data.config.key); + bstrdup(stream->ff_data.config + .encrypt_passphrase); } context->username = NULL; if (stream->ff_data.config.username != NULL) { @@ -879,10 +881,16 @@ static bool set_config(struct ffmpeg_output *stream) service = obs_output_get_service(stream->output); if (!service) return false; - config.url = obs_service_get_url(service); - config.username = obs_service_get_username(service); - config.password = obs_service_get_password(service); - config.key = obs_service_get_key(service); + config.url = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL); + config.username = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_USERNAME); + config.password = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_PASSWORD); + config.stream_id = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_STREAM_ID); + config.encrypt_passphrase = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_ENCRYPT_PASSPHRASE); config.format_name = "mpegts"; config.format_mime_type = "video/M2PT"; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index c202d8345d8bcc..b821ada05d8081 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -419,7 +419,8 @@ static inline bool ffmpeg_mux_start_internal(struct ffmpeg_muxer *stream, service = obs_output_get_service(stream->output); if (!service) return false; - path = obs_service_get_url(service); + path = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL); stream->split_file = false; } else { diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.h b/plugins/obs-ffmpeg/obs-ffmpeg-output.h index 682eee30a90d3c..9bcf472f7233a5 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.h +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.h @@ -39,7 +39,8 @@ struct ffmpeg_cfg { int frame_size; // audio frame size const char *username; const char *password; - const char *key; + const char *stream_id; + const char *encrypt_passphrase; }; struct ffmpeg_audio_info { diff --git a/plugins/obs-outputs/ftl-stream.c b/plugins/obs-outputs/ftl-stream.c index ef305420fc57c2..3d19b7563f7cf1 100644 --- a/plugins/obs-outputs/ftl-stream.c +++ b/plugins/obs-outputs/ftl-stream.c @@ -1049,7 +1049,8 @@ static int init_connect(struct ftl_stream *stream) obs_output_get_video_encoder(stream->output); obs_data_t *video_settings = obs_encoder_get_settings(video_encoder); - ingest_url = obs_service_get_url(service); + ingest_url = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL); if (strncmp(ingest_url, FTL_URL_PROTOCOL, strlen(FTL_URL_PROTOCOL)) == 0) { dstr_copy(&stream->path, ingest_url + strlen(FTL_URL_PROTOCOL)); @@ -1057,7 +1058,8 @@ static int init_connect(struct ftl_stream *stream) dstr_copy(&stream->path, ingest_url); } - key = obs_service_get_key(service); + key = obs_service_get_connect_info(service, + OBS_SERVICE_CONNECT_INFO_STREAM_KEY); int target_bitrate = (int)obs_data_get_int(video_settings, "bitrate"); int peak_bitrate = (int)((float)target_bitrate * 1.1f); @@ -1093,8 +1095,12 @@ static int init_connect(struct ftl_stream *stream) } } - dstr_copy(&stream->username, obs_service_get_username(service)); - dstr_copy(&stream->password, obs_service_get_password(service)); + dstr_copy(&stream->username, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_USERNAME)); + dstr_copy(&stream->password, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_PASSWORD)); dstr_depad(&stream->path); stream->drop_threshold_usec = diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 6058d4f7fdf65b..0312101b711e37 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1134,10 +1134,18 @@ static bool init_connect(struct rtmp_stream *stream) stream->got_first_video = false; settings = obs_output_get_settings(stream->output); - dstr_copy(&stream->path, obs_service_get_url(service)); - dstr_copy(&stream->key, obs_service_get_key(service)); - dstr_copy(&stream->username, obs_service_get_username(service)); - dstr_copy(&stream->password, obs_service_get_password(service)); + dstr_copy(&stream->path, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL)); + dstr_copy(&stream->key, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_STREAM_KEY)); + dstr_copy(&stream->username, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_USERNAME)); + dstr_copy(&stream->password, + obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_PASSWORD)); dstr_depad(&stream->path); dstr_depad(&stream->key); drop_b = (int64_t)obs_data_get_int(settings, OPT_DROP_THRESHOLD); From 22ebed8d0206270e48f19b1ae91716261c388cae Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 16:08:35 +0100 Subject: [PATCH 0420/2225] libobs,docs: Add connect infos check to the Services API This new function allows to know if the service has all the info needed to try to connect. --- docs/sphinx/reference-services.rst | 14 ++++++++++++++ libobs/obs-output.c | 3 ++- libobs/obs-service.c | 10 ++++++++++ libobs/obs-service.h | 2 ++ libobs/obs.h | 2 ++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/reference-services.rst b/docs/sphinx/reference-services.rst index 5d3a33ab5bb5dd..192022670c076a 100644 --- a/docs/sphinx/reference-services.rst +++ b/docs/sphinx/reference-services.rst @@ -184,6 +184,14 @@ Service Definition Structure Irrelevant or unused types can return `NULL`. +.. member:: bool (*obs_service_info.can_try_to_connect)(void *data) + + :return: If the service has all the needed connection info to be + able to connect. + + NOTE: If not set, :c:func:`obs_service_can_try_to_connect()` + returns *true* by default. + General Service Functions ------------------------- @@ -378,6 +386,12 @@ General Service Functions type values. :return: Connection info related to the type value. +.. function:: bool obs_service_can_try_to_connect(const obs_service_t *service) + + :return: If the service has all the needed connection info to be + able to connect. Returns `true` if + :c:member:`obs_service_info.can_try_to_connect` is not set. + .. --------------------------------------------------------------------------- .. _libobs/obs-service.h: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-service.h diff --git a/libobs/obs-output.c b/libobs/obs-output.c index b968fefd25b41e..e46013a81227e5 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -290,7 +290,8 @@ bool obs_output_start(obs_output_t *output) return false; has_service = (output->info.flags & OBS_OUTPUT_SERVICE) != 0; - if (has_service && !obs_service_initialize(output->service, output)) + if (has_service && !(obs_service_can_try_to_connect(output->service) && + obs_service_initialize(output->service, output))) return false; encoded = (output->info.flags & OBS_OUTPUT_ENCODED) != 0; diff --git a/libobs/obs-service.c b/libobs/obs-service.c index b9f667342c1f0a..8ade7cb92cb02e 100644 --- a/libobs/obs-service.c +++ b/libobs/obs-service.c @@ -512,3 +512,13 @@ const char *obs_service_get_connect_info(const obs_service_t *service, return NULL; return service->info.get_connect_info(service->context.data, type); } + +bool obs_service_can_try_to_connect(const obs_service_t *service) +{ + if (!obs_service_valid(service, "obs_service_can_connect")) + return false; + + if (!service->info.can_try_to_connect) + return true; + return service->info.can_try_to_connect(service->context.data); +} diff --git a/libobs/obs-service.h b/libobs/obs-service.h index 7a653d1fe0be3e..7f74fc1da0dd39 100644 --- a/libobs/obs-service.h +++ b/libobs/obs-service.h @@ -106,6 +106,8 @@ struct obs_service_info { const char **(*get_supported_audio_codecs)(void *data); const char *(*get_connect_info)(void *data, uint32_t type); + + bool (*can_try_to_connect)(void *data); }; EXPORT void obs_register_service_s(const struct obs_service_info *info, diff --git a/libobs/obs.h b/libobs/obs.h index 6b4329646410ae..79d583042b5c7d 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2566,6 +2566,8 @@ obs_service_get_preferred_output_type(const obs_service_t *service); EXPORT const char *obs_service_get_connect_info(const obs_service_t *service, uint32_t type); +EXPORT bool obs_service_can_try_to_connect(const obs_service_t *service); + /* ------------------------------------------------------------------------- */ /* Source frame allocation functions */ EXPORT void obs_source_frame_init(struct obs_source_frame *frame, From d917ceafe8c373841ce127d43856f9db221815f7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 16:08:44 +0100 Subject: [PATCH 0421/2225] rtmp-services: Add connect infos checks --- plugins/rtmp-services/rtmp-common.c | 15 +++++++++++++++ plugins/rtmp-services/rtmp-custom.c | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 781995e42c073e..77b4b74adc34f8 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -1062,6 +1062,20 @@ static const char *rtmp_common_get_connect_info(void *data, uint32_t type) return NULL; } +static bool rtmp_common_can_try_to_connect(void *data) +{ + struct rtmp_common *service = data; + const char *key = rtmp_common_key(data); + + if (service->service && strcmp(service->service, "Dacast") == 0) + return (key != NULL && key[0] != '\0'); + + const char *url = rtmp_common_url(data); + + return (url != NULL && url[0] != '\0') && + (key != NULL && key[0] != '\0'); +} + struct obs_service_info rtmp_common_service = { .id = "rtmp_common", .get_name = rtmp_common_getname, @@ -1081,4 +1095,5 @@ struct obs_service_info rtmp_common_service = { .get_max_bitrate = rtmp_common_get_max_bitrate, .get_supported_video_codecs = rtmp_common_get_supported_video_codecs, .get_supported_audio_codecs = rtmp_common_get_supported_audio_codecs, + .can_try_to_connect = rtmp_common_can_try_to_connect, }; diff --git a/plugins/rtmp-services/rtmp-custom.c b/plugins/rtmp-services/rtmp-custom.c index b4baeb8cd4c258..a4f6cd810ce2bd 100644 --- a/plugins/rtmp-services/rtmp-custom.c +++ b/plugins/rtmp-services/rtmp-custom.c @@ -174,6 +174,13 @@ static const char *rtmp_custom_get_connect_info(void *data, uint32_t type) return NULL; } +static bool rtmp_custom_can_try_to_connect(void *data) +{ + struct rtmp_custom *service = data; + + return (service->server != NULL && service->server[0] != '\0'); +} + struct obs_service_info rtmp_custom_service = { .id = "rtmp_custom", .get_name = rtmp_custom_name, @@ -188,4 +195,5 @@ struct obs_service_info rtmp_custom_service = { .get_username = rtmp_custom_username, .get_password = rtmp_custom_password, .apply_encoder_settings = rtmp_custom_apply_settings, + .can_try_to_connect = rtmp_custom_can_try_to_connect, }; From 215426b65b3a2b9172366b027b809259529cffb9 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 19 Jan 2023 16:08:58 +0100 Subject: [PATCH 0422/2225] UI: Use connect infos check in before stream check Ask the service directly rather than checking the presence of a key and a URL. --- UI/ui-validation.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/UI/ui-validation.cpp b/UI/ui-validation.cpp index e441cbb6a49125..e45fd3f74ad410 100644 --- a/UI/ui-validation.cpp +++ b/UI/ui-validation.cpp @@ -59,26 +59,24 @@ bool UIValidation::NoSourcesConfirmation(QWidget *parent) StreamSettingsAction UIValidation::StreamSettingsConfirmation(QWidget *parent, OBSService service) { - // Custom services can user API key in URL or user/pass combo. - // So only check there is a URL + if (obs_service_can_try_to_connect(service)) + return StreamSettingsAction::ContinueStream; + char const *serviceType = obs_service_get_type(service); - bool isCustomUrlService = (strcmp(serviceType, "rtmp_custom") == 0); + bool isCustomService = (strcmp(serviceType, "rtmp_custom") == 0); - char const *streamUrl = obs_service_get_url(service); - char const *streamKey = obs_service_get_key(service); + char const *streamUrl = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_SERVER_URL); + char const *streamKey = obs_service_get_connect_info( + service, OBS_SERVICE_CONNECT_INFO_STREAM_KEY); - bool hasStreamUrl = (streamUrl != NULL && streamUrl[0] != '\0'); - bool hasStreamKey = ((streamKey != NULL && streamKey[0] != '\0') || - isCustomUrlService); - - if (hasStreamUrl && hasStreamKey) - return StreamSettingsAction::ContinueStream; + bool streamUrlMissing = !(streamUrl != NULL && streamUrl[0] != '\0'); + bool streamKeyMissing = !(streamKey != NULL && streamKey[0] != '\0'); QString msg; - - if (!hasStreamUrl && !hasStreamKey) { + if (!isCustomService && streamUrlMissing && streamKeyMissing) { msg = QTStr("Basic.Settings.Stream.MissingUrlAndApiKey"); - } else if (!hasStreamKey) { + } else if (!isCustomService && streamKeyMissing) { msg = QTStr("Basic.Settings.Stream.MissingStreamKey"); } else { msg = QTStr("Basic.Settings.Stream.MissingUrl"); From b2f25fb4b93e51728b8a12acff901fe2550920f1 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 20 Mar 2023 08:34:19 +0100 Subject: [PATCH 0423/2225] UI: Default advance record audio to AAC --- UI/window-basic-main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index b7eb69e597a145..fc0a62d99a46ba 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1505,8 +1505,6 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_bool(basicConfig, "AdvOut", "RecUseRescale", false); config_set_default_uint(basicConfig, "AdvOut", "RecTracks", (1 << 0)); config_set_default_string(basicConfig, "AdvOut", "RecEncoder", "none"); - config_set_default_string(basicConfig, "AdvOut", "RecAudioEncoder", - "none"); config_set_default_uint(basicConfig, "AdvOut", "FLVTrack", 1); config_set_default_bool(basicConfig, "AdvOut", "FFOutputToFile", true); @@ -1643,6 +1641,8 @@ void OBSBasic::InitBasicConfigDefaults2() config_set_default_string(basicConfig, "AdvOut", "AudioEncoder", aac_default); + config_set_default_string(basicConfig, "AdvOut", "RecAudioEncoder", + aac_default); if (update_nvenc_presets(basicConfig)) config_save_safe(basicConfig, "tmp", nullptr); From eef63cd1886b174c232be2f36c8e0c78c9b829b5 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 20 Mar 2023 08:36:03 +0100 Subject: [PATCH 0424/2225] UI: Enforce stream audio to Opus if service is FTL --- UI/window-basic-main.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index fc0a62d99a46ba..4e81e78a09b518 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1336,7 +1336,25 @@ bool OBSBasic::LoadService() hotkey_data); obs_service_release(service); - return !!service; + if (!service) + return false; + + /* Enforce Opus on FTL if needed */ + if (strcmp(obs_service_get_protocol(service), "FTL") == 0) { + const char *option = config_get_string( + basicConfig, "SimpleOutput", "StreamAudioEncoder"); + if (strcmp(option, "opus") != 0) + config_set_string(basicConfig, "SimpleOutput", + "StreamAudioEncoder", "opus"); + + option = config_get_string(basicConfig, "AdvOut", + "AudioEncoder"); + if (strcmp(obs_get_encoder_codec(option), "opus") != 0) + config_set_string(basicConfig, "AdvOut", "AudioEncoder", + "ffmpeg_opus"); + } + + return true; } bool OBSBasic::InitService() From c2afa58125c0005a2eb5354bf99402dab66375f7 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Wed, 12 Oct 2022 21:11:28 -0700 Subject: [PATCH 0425/2225] libobs: Enable fast clear on Windows always NVIDIA driver 527.37 fixes flickering when multiple GPUs are installed. --- libobs/obs-display.c | 45 ++++++++++++++++++++----------------------- libobs/obs-internal.h | 1 - 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/libobs/obs-display.c b/libobs/obs-display.c index accd7e30b69cef..4397833cf6d96f 100644 --- a/libobs/obs-display.c +++ b/libobs/obs-display.c @@ -19,22 +19,19 @@ #include "obs.h" #include "obs-internal.h" +#if defined(__APPLE__) +/* Apple Silicon GL driver doesn't seem to track SRGB clears correctly */ +#define OBS_USE_CLEAR_WORKAROUND 1 +#else +#define OBS_USE_CLEAR_WORKAROUND 0 +#endif + bool obs_display_init(struct obs_display *display, const struct gs_init_data *graphics_data) { pthread_mutex_init_value(&display->draw_callbacks_mutex); pthread_mutex_init_value(&display->draw_info_mutex); -#if defined(_WIN32) - /* Conservative test for NVIDIA flickering in multi-GPU setups */ - display->use_clear_workaround = gs_get_adapter_count() > 1; -#elif defined(__APPLE__) - /* Apple Silicon GL driver doesn't seem to track SRGB clears correctly */ - display->use_clear_workaround = true; -#else - display->use_clear_workaround = false; -#endif - if (graphics_data) { display->swap = gs_swapchain_create(graphics_data); if (!display->swap) { @@ -203,11 +200,12 @@ static inline bool render_display_begin(struct obs_display *display, display->background_color); clear_color.w = 1.0f; - const bool use_clear_workaround = display->use_clear_workaround; - - uint32_t clear_flags = GS_CLEAR_DEPTH | GS_CLEAR_STENCIL; - if (!use_clear_workaround) - clear_flags |= GS_CLEAR_COLOR; +#if OBS_USE_CLEAR_WORKAROUND + const uint32_t clear_flags = GS_CLEAR_DEPTH | GS_CLEAR_STENCIL; +#else + const uint32_t clear_flags = GS_CLEAR_COLOR | GS_CLEAR_DEPTH | + GS_CLEAR_STENCIL; +#endif gs_clear(clear_flags, &clear_color, 1.0f, 0); gs_enable_depth_test(false); @@ -217,15 +215,14 @@ static inline bool render_display_begin(struct obs_display *display, gs_ortho(0.0f, (float)cx, 0.0f, (float)cy, -100.0f, 100.0f); gs_set_viewport(0, 0, cx, cy); - if (use_clear_workaround) { - gs_effect_t *const solid_effect = - obs->video.solid_effect; - gs_effect_set_vec4(gs_effect_get_param_by_name( - solid_effect, "color"), - &clear_color); - while (gs_effect_loop(solid_effect, "Solid")) - gs_draw_sprite(NULL, 0, cx, cy); - } +#if OBS_USE_CLEAR_WORKAROUND + gs_effect_t *const solid_effect = obs->video.solid_effect; + gs_effect_set_vec4(gs_effect_get_param_by_name(solid_effect, + "color"), + &clear_color); + while (gs_effect_loop(solid_effect, "Solid")) + gs_draw_sprite(NULL, 0, cx, cy); +#endif } return success; diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index a67fb518cb8036..8a0009fc0f905a 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -224,7 +224,6 @@ struct obs_display { pthread_mutex_t draw_callbacks_mutex; pthread_mutex_t draw_info_mutex; DARRAY(struct draw_callback) draw_callbacks; - bool use_clear_workaround; struct obs_display *next; struct obs_display **prev_next; From 198debe9454d5142fa995e9370b5dc6baeef5ef8 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:18:06 +0100 Subject: [PATCH 0426/2225] ffmpeg-mux: Set experimental compliance for FFmpeg < 6.0 With 5fe417bce1f0c34daa573edbafd46667f5c9f06c it became possible to use Opus in local recordings, this could potentially have the user try to record Opus in MP4. FLAC in MP4 was marked as stable in FFmpeg 6.0 Opus in MP4 was marked as stable in FFmpeg 4.3 For Ubuntu 20.04 we still need the latter, for 22.04 (and potentially other Linux distributions) the former. While FLAC is not yet implemented, we may want to do that in the near future so for simplicity just keep it at 6.0. --- plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index a2287a66dc533b..d6ba35013871cb 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -1051,6 +1051,11 @@ static int ffmpeg_mux_init_context(struct ffmpeg_mux *ffm) ffm->output->oformat->audio_codec = AV_CODEC_ID_NONE; #endif +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(60, 0, 100) + /* Allow FLAC/OPUS in MP4 */ + ffm->output->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; +#endif + if (!init_streams(ffm)) { free_avformat(ffm); return FFM_ERROR; From f96ae65d1b8738d771fe2b55e7606263d5ca408b Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:26:41 +0100 Subject: [PATCH 0427/2225] obs-ffmpeg: Pass correct audio codec to muxer subprocess --- plugins/obs-ffmpeg/obs-ffmpeg-mux.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index b821ada05d8081..1a3ce9cb402c60 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -313,7 +313,9 @@ static void build_command_line(struct ffmpeg_muxer *stream, struct dstr *cmd, add_video_encoder_params(stream, cmd, vencoder); if (num_tracks) { - dstr_cat(cmd, "aac "); + const char *codec = obs_encoder_get_codec(aencoders[0]); + dstr_cat(cmd, codec); + dstr_cat(cmd, " "); for (int i = 0; i < num_tracks; i++) { add_audio_encoder_params(cmd, aencoders[i]); From 1ea5917973e4eed63e976c56ee55b5d1ccbe56aa Mon Sep 17 00:00:00 2001 From: Jim Date: Mon, 20 Mar 2023 11:31:21 -0700 Subject: [PATCH 0428/2225] image-source: Add slide_changed signal Allows a plugin or script to know when a slide has changed, and which index/file it's switched to --- plugins/image-source/obs-slideshow.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/image-source/obs-slideshow.c b/plugins/image-source/obs-slideshow.c index dc6536d92cb59c..992236b465b402 100644 --- a/plugins/image-source/obs-slideshow.c +++ b/plugins/image-source/obs-slideshow.c @@ -94,6 +94,7 @@ struct slideshow { uint32_t tr_speed; const char *tr_name; obs_source_t *transition; + calldata_t cd; float elapsed; size_t cur_item; @@ -280,6 +281,16 @@ static void do_transition(void *data, bool to_null) set_media_state(ss, OBS_MEDIA_STATE_ENDED); obs_source_media_ended(ss->source); } + + if (valid && !to_null) { + calldata_set_int(&ss->cd, "index", ss->cur_item); + calldata_set_string(&ss->cd, "path", + ss->files.array[ss->cur_item].path); + + signal_handler_t *sh = + obs_source_get_signal_handler(ss->source); + signal_handler_signal(sh, "slide_changed", &ss->cd); + } } static void ss_update(void *data, obs_data_t *settings) @@ -661,6 +672,7 @@ static void ss_destroy(void *data) obs_source_release(ss->transition); free_files(&ss->files.da); pthread_mutex_destroy(&ss->mutex); + calldata_free(&ss->cd); bfree(ss); } @@ -699,6 +711,9 @@ static void *ss_create(obs_data_t *settings, obs_source_t *source) proc_handler_add(ph, "int current_index()", current_slide_proc, ss); proc_handler_add(ph, "int total_files()", total_slides_proc, ss); + signal_handler_t *sh = obs_source_get_signal_handler(ss->source); + signal_handler_add(sh, "void slide_changed(int index, string path)"); + pthread_mutex_init_value(&ss->mutex); if (pthread_mutex_init(&ss->mutex, NULL) != 0) goto error; From b262eeab126d1ba757840ca5cbc2f5bb38ecead6 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Mon, 20 Mar 2023 16:06:40 -0400 Subject: [PATCH 0429/2225] CI: Update deps to 2023-03-20 release Notable changes: * deps.ffmpeg: Update libpng to 1.6.39 * deps.ffmpeg: Update opus to 8cf872a186 * deps.ffmpeg: Update libvpx to 1.13.0 * deps.ffmpeg: Update SVT-AV1 to 1.4.1 * deps.ffmpeg: Update aom to 3.6.0 * deps.ffmpeg: Update x264 to r3106 * deps.ffmpeg: Update mbedTLS to 3.3.0 * deps.ffmpeg: Update nv-codec-headers to 12.0.16 * deps.ffmpeg: Update FFmpeg to 6.0 * deps.ffmpeg: Fix AOM target CPU arch * deps.macos: Update LuaJIT to 2.1 505e2c03de * deps.macos: Update libpng to 1.6.39 * deps.macos: Update FreeType to 2.13.0 * deps.windows: Update mbedTLS to 3.3.0 * deps.windows: Update FreeType to 2.13.0 * deps.windows: Update cmocka to 1.1.7 * deps.windows: Update curl to 7.88.1 * deps.windows: Update LuaJIT to 2.1 505e2c03de * deps.windows: Update Zstandard to 1.5.4 * deps.qt: Backport macOS accessibility keyboard crash fix * deps.qt: Update Qt5 to 5.15.8 for Windows * deps.qt: Update Qt6 to 6.4.3 for Windows * deps.qt: Update Qt5 to 5.15.8 for macOS * deps.qt: Update Qt6 to 6.4.3 for macOS --- .github/workflows/main.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d53532b77321c4..c450c2facf7c6f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,15 +18,15 @@ env: CEF_HASH_MAC_ARM64: '98679b92eea6ea9959ac5aa54f46ca60681d8a86c768c35f496dbdd409bf0642' CEF_BUILD_VERSION_LINUX: '5060' CEF_BUILD_VERSION_WIN: '5060' - QT_VERSION_MAC: '6.4.1' - QT_HASH_MAC_X86_64: '602239df1f8e9a870082f12e216a881175210e3ee9400101d128f15dc5dc17d7' - QT_HASH_MAC_ARM64: '9fafa04fbe7a972628443aab4968fe319810f707d9f3766e6a32196bae1e0c91' - QT_HASH_MAC_UNIVERSAL: '6173e95742c83f90d5637d3483a68fb22c7313580bcbc0686fb6fd2e804c36c2' - QT_VERSION_WIN: '6.3.1' - DEPS_VERSION_MAC: '2023-03-04' - DEPS_HASH_MAC_X86_64: 'd7b61b54629f4372bc42285d2575b72ec2b73fce1c0a5b64bf1fa76c2b312ef5' - DEPS_HASH_MAC_ARM64: 'eb1c76c64f77ea864cf10a441b9589259444967c66ec0bd270d1b58e148df95c' - DEPS_VERSION_WIN: '2023-03-04' + QT_VERSION_MAC: '6.4.3' + QT_HASH_MAC_X86_64: '8f5e1a865310898635d34b92e6d93c99c62f39289a17d6db140e776ba9b2e455' + QT_HASH_MAC_ARM64: '0011e2395afbb02aaa5e8641c4486680e30decc60e063ca5a73d6faf3649e723' + QT_HASH_MAC_UNIVERSAL: '5bcbb8fee4b70a26912e04a62960c615153828eac66b9f0bcb0b30529193ca6e' + QT_VERSION_WIN: '6.4.3' + DEPS_VERSION_MAC: '2023-03-20' + DEPS_HASH_MAC_X86_64: 'bd4d3866c2e4b630410ff29b3f31a2553844af60b30fa0306d35d80a70f903ba' + DEPS_HASH_MAC_ARM64: '90078e2141818a37def7ebdceb3dcde71dc4adc1ce81d6e31ba21916f85c77bf' + DEPS_VERSION_WIN: '2023-03-20' VLC_VERSION_MAC: '3.0.8' VLC_HASH_MAC: 'e0149ef4a20a19b9ecd87309c2d27787ee3f47dfd47c6639644bc1f6fd95bdf6' VLC_VERSION_WIN: '3.0.0-git' From 8c11b0caadd8649074a96f74abacd2c2c237d6dc Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 1 Feb 2023 20:03:02 +0100 Subject: [PATCH 0430/2225] cmake: Add finders for Asio and WebSocket++ WebSocket++ does provide a CMake package, but version check is broken. --- cmake/Modules/FindAsio.cmake | 105 ++++++++++++++++++++++++++++ cmake/Modules/FindWebsocketpp.cmake | 102 +++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 cmake/Modules/FindAsio.cmake create mode 100644 cmake/Modules/FindWebsocketpp.cmake diff --git a/cmake/Modules/FindAsio.cmake b/cmake/Modules/FindAsio.cmake new file mode 100644 index 00000000000000..ef2ca2e3c79f9b --- /dev/null +++ b/cmake/Modules/FindAsio.cmake @@ -0,0 +1,105 @@ +#[=======================================================================[.rst +FindAsio +---------- + +FindModule for Asio and the associated library + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Asio::Asio``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Asio_FOUND`` + True, if the library was found. +``Asio_VERSION`` + Detected version of found Asio library. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Asio_INCLUDE_DIR`` + Directory containing ``asio.hpp``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Asio QUIET asio) +endif() + +find_path( + Asio_INCLUDE_DIR + NAMES asio.hpp + HINTS ${PC_Asio_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Asio include directory") + +if(PC_Asio_VERSION VERSION_GREATER 0) + set(Asio_VERSION ${PC_Asio_VERSION}) +elseif(EXISTS "${Asio_INCLUDE_DIR}/asio/version.hpp") + file( + STRINGS "${Asio_INCLUDE_DIR}/asio/version.hpp" _version_string + REGEX + "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\/\/[ \t][0-9]+\.[0-9]+\.[0-9]+" + ) + + string( + REGEX + REPLACE + "#define[ \t]+ASIO_VERSION[ \t]+[0-9]+[ \t]+\/\/[ \t]([0-9]+\.[0-9]+\.[0-9]+)" + "\\1" + Asio_VERSION + "${_version_string}") +else() + if(NOT Asio_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Asio version.") + endif() + set(Asio_VERSION 0.0.0) +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Asio_ERROR_REASON + "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Asio_ERROR_REASON + "Ensure Asio library is available in local include paths.") +endif() + +find_package_handle_standard_args( + Asio + REQUIRED_VARS Asio_INCLUDE_DIR + VERSION_VAR Asio_VERSION REASON_FAILURE_MESSAGE "${Asio_ERROR_REASON}") +mark_as_advanced(Asio_INCLUDE_DIR) +unset(Asio_ERROR_REASON) + +if(Asio_FOUND) + if(NOT TARGET Asio::Asio) + add_library(Asio::Asio INTERFACE IMPORTED) + set_target_properties(Asio::Asio PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${Asio_INCLUDE_DIR}") + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Asio PROPERTIES + URL "http://think-async.com/Asio" + DESCRIPTION + "Asio is a cross-platform C++ library for network and low-level I/O programming that provides developers with a consistent asynchronous model using a modern C++ approach." +) diff --git a/cmake/Modules/FindWebsocketpp.cmake b/cmake/Modules/FindWebsocketpp.cmake new file mode 100644 index 00000000000000..1c56d18caf605d --- /dev/null +++ b/cmake/Modules/FindWebsocketpp.cmake @@ -0,0 +1,102 @@ +#[=======================================================================[.rst +FindWebsocketpp +---------- + +FindModule for WebSocket++ and the associated library + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Websocketpp::Websocketpp``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Websocketpp_FOUND`` + True, if the library was found. +``Websocketpp_VERSION`` + Detected version of found Websocketpp library. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Websocketpp_INCLUDE_DIR`` + Directory containing ``websocketpp/client.hpp``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_path( + Websocketpp_INCLUDE_DIR + NAMES websocketpp/client.hpp + PATHS /usr/include /usr/local/include + DOC "WebSocket++ include directory") + +if(EXISTS "${Websocketpp_INCLUDE_DIR}/websocketpp/version.hpp") + file(STRINGS "${Websocketpp_INCLUDE_DIR}/websocketpp/version.hpp" + _version_string + REGEX "^.*(major|minor|patch)_version[ \t]+=[ \t]+[0-9]+") + + string(REGEX REPLACE ".*major_version[ \t]+=[ \t]+([0-9]+).*" "\\1" + _version_major "${_version_string}") + string(REGEX REPLACE ".*minor_version[ \t]+=[ \t]+([0-9]+).*" "\\1" + _version_minor "${_version_string}") + string(REGEX REPLACE ".*patch_version[ \t]+=[ \t]+([0-9]+).*" "\\1" + _version_patch "${_version_string}") + + set(Websocketpp_VERSION + "${_version_major}.${_version_minor}.${_version_patch}") + unset(_version_major) + unset(_version_minor) + unset(_version_patch) +else() + if(NOT Websocketpp_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find WebSocket++ version.") + endif() + set(Websocketpp_VERSION 0.0.0) +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Websocketpp_ERROR_REASON + "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Websocketpp_ERROR_REASON + "Ensure WebSocket++ library is available in local include paths.") +endif() + +find_package_handle_standard_args( + Websocketpp + REQUIRED_VARS Websocketpp_INCLUDE_DIR + VERSION_VAR Websocketpp_VERSION REASON_FAILURE_MESSAGE + "${Websocketpp_ERROR_REASON}") +mark_as_advanced(Websocketpp_INCLUDE_DIR) +unset(Websocketpp_ERROR_REASON) + +if(Websocketpp_FOUND) + if(NOT TARGET Websocketpp::Websocketpp) + add_library(Websocketpp::Websocketpp INTERFACE IMPORTED) + set_target_properties( + Websocketpp::Websocketpp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${Websocketpp_INCLUDE_DIR}") + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Websocketpp PROPERTIES + URL "https://www.zaphoyd.com/websocketpp/" + DESCRIPTION + "WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol." +) From 3f9b2d627ef5a75a313a15bce05e48cb6202d67f Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 1 Feb 2023 19:30:27 +0100 Subject: [PATCH 0431/2225] CI: Add nlohmann JSON, WebSocket++ and Asio on Linux Those libraries will be kept in the Flatpak to allow plugins to use the same versions of those headers-only libraries. --- CI/flatpak/com.obsproject.Studio.json | 53 +++++++++++++++++++++++++++ CI/linux/01_install_dependencies.sh | 3 +- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json index b94107fe095efa..33389bf4be7bce 100644 --- a/CI/flatpak/com.obsproject.Studio.json +++ b/CI/flatpak/com.obsproject.Studio.json @@ -409,6 +409,59 @@ } ] }, + { + "name": "nlohmann-json", + "buildsystem": "cmake-ninja", + "builddir": true, + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", + "-DJSON_BuildTests=OFF" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/nlohmann/json.git", + "tag": "v3.11.2", + "commit": "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d" + } + ] + }, + { + "name": "websocketpp", + "buildsystem": "cmake-ninja", + "builddir": true, + "config-opts": [ + "-DCMAKE_BUILD_TYPE=Release", + "-DENABLE_CPP11=ON", + "-DBUILD_EXAMPLES=OFF", + "-DBUILD_TESTS=OFF" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/zaphoyd/websocketpp.git", + "tag": "0.8.2", + "commit": "56123c87598f8b1dd471be83ca841ceae07f95ba" + } + ] + }, + { + "name": "asio", + "buildsystem": "simple", + "build-commands": [ + "mkdir -p /app/include", + "cp asio/include/asio.hpp /app/include/", + "cp -R asio/include/asio /app/include/" + ], + "sources": [ + { + "type": "git", + "url": "https://github.com/chriskohlhoff/asio.git", + "tag": "asio-1-12-1", + "commit": "b73dc1d2c0ecb9452a87c26544d7f71e24342df6" + } + ] + }, { "name": "cef", "buildsystem": "cmake-ninja", diff --git a/CI/linux/01_install_dependencies.sh b/CI/linux/01_install_dependencies.sh index 4c11fd38665835..9daa0dcc4a6774 100755 --- a/CI/linux/01_install_dependencies.sh +++ b/CI/linux/01_install_dependencies.sh @@ -95,7 +95,8 @@ install_dependencies() { "qt6-deps qt6-base-dev qt6-base-private-dev libqt6svg6-dev qt6-wayland" "cef ${LINUX_CEF_BUILD_VERSION:-${CI_LINUX_CEF_VERSION}}" "plugin-deps libasound2-dev libfdk-aac-dev libfontconfig-dev libfreetype6-dev libjack-jackd2-dev \ - libpulse-dev libsndio-dev libspeexdsp-dev libudev-dev libv4l-dev libva-dev libvlc-dev libdrm-dev" + libpulse-dev libsndio-dev libspeexdsp-dev libudev-dev libv4l-dev libva-dev libvlc-dev libdrm-dev \ + nlohmann-json3-dev libwebsocketpp-dev libasio-dev" ) sudo apt-get -qq update From 070c2ec616b842691aa57505e876aa13a3401b0a Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 19 Feb 2023 10:54:36 +0100 Subject: [PATCH 0432/2225] CI: Avoid installing recommended package on Ubuntu --- CI/linux/01_install_dependencies.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CI/linux/01_install_dependencies.sh b/CI/linux/01_install_dependencies.sh index 9daa0dcc4a6774..51e1d20cac7ba9 100755 --- a/CI/linux/01_install_dependencies.sh +++ b/CI/linux/01_install_dependencies.sh @@ -17,7 +17,7 @@ install_build-deps() { status "Install OBS build dependencies" trap "caught_error 'install_build-deps'" ERR - sudo apt-get install -y $@ + sudo apt-get install --no-install-recommends -y $@ } install_obs-deps() { @@ -26,9 +26,9 @@ install_obs-deps() { trap "caught_error 'install_obs-deps'" ERR if [ -z "${DISABLE_PIPEWIRE}" ]; then - sudo apt-get install -y $@ libpipewire-0.3-dev + sudo apt-get install --no-install-recommends -y $@ libpipewire-0.3-dev else - sudo apt-get install -y $@ + sudo apt-get install --no-install-recommends -y $@ fi } @@ -37,7 +37,7 @@ install_qt5-deps() { status "Install Qt5 dependencies" trap "caught_error 'install_qt5-deps'" ERR - sudo apt-get install -y $@ + sudo apt-get install --no-install-recommends -y $@ } install_qt6-deps() { @@ -47,7 +47,7 @@ install_qt6-deps() { _QT6_AVAILABLE="$(sudo apt-cache madison ${1})" if [ "${_QT6_AVAILABLE}" ]; then - sudo apt-get install -y $@ + sudo apt-get install --no-install-recommends -y $@ fi } @@ -77,7 +77,7 @@ install_plugin-deps() { status "Install plugin dependencies" trap "caught_error 'install_plugin-deps'" ERR - sudo apt-get install -y $@ + sudo apt-get install --no-install-recommends -y $@ } install_dependencies() { From 1af982fcfae654a659acf5289026c6d2ed081bbb Mon Sep 17 00:00:00 2001 From: Matt Gajownik Date: Tue, 21 Mar 2023 20:58:05 +1100 Subject: [PATCH 0433/2225] rtmp-services: Fix formatting and indentation of services schema Also define editorconfig for rtmp-services to match existing structure. --- .editorconfig | 4 ++++ plugins/rtmp-services/data/schema/service-schema-v4.json | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index e0bea7d0c27968..ca06b6d82ffed4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -29,3 +29,7 @@ indent_size = 2 [cmake/**/*.cmake] indent_style = space indent_size = 2 + +[plugins/rtmp-services/data/**/*.json] +indent_style = space +indent_size = 4 diff --git a/plugins/rtmp-services/data/schema/service-schema-v4.json b/plugins/rtmp-services/data/schema/service-schema-v4.json index 88b33abd3a93b8..5d27f3bef3dabe 100644 --- a/plugins/rtmp-services/data/schema/service-schema-v4.json +++ b/plugins/rtmp-services/data/schema/service-schema-v4.json @@ -16,7 +16,7 @@ "description": "Name of the streaming service. Will be displayed in the Service dropdown.", "minLength": 1 }, - "protocol" : { + "protocol": { "type": "string", "description": "Protocol used by the service. If missing the service is considered using RTMP or RTMPS.", "enum": [ @@ -212,7 +212,7 @@ "required": [ "name", "servers" - ], + ], "allOf": [ { "$comment": "Require protocol field if not an RTMP(S) URL", From d529f2c35f264fc647b43437be8e2972acd2f0b9 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 20 Mar 2023 16:37:12 +0100 Subject: [PATCH 0434/2225] UI: Fix inconsistencies in FindProtocol - Fallback to RTMP if custom server is empty. - Check if RTMPS is supported since OBS Studio can be built without it. --- UI/window-basic-settings-stream.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 004d8ab50dbe1d..8be7155eba2c66 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -533,11 +533,14 @@ void OBSBasicSettings::ServiceChanged() QString OBSBasicSettings::FindProtocol() { - if (IsCustomService() && !ui->customServer->text().isEmpty()) { + if (IsCustomService()) { + if (ui->customServer->text().isEmpty()) + return QString("RTMP"); QString server = ui->customServer->text(); - if (server.startsWith("rtmps://")) + if (obs_is_output_protocol_registered("RTMPS") && + server.startsWith("rtmps://")) return QString("RTMPS"); if (server.startsWith("ftl://")) From b11d61c89f822502f8c543304a7c32081a44a2c7 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Wed, 18 Jan 2023 09:07:48 +0100 Subject: [PATCH 0435/2225] UI: Add space for right arrow in menu --- UI/data/themes/Acri.qss | 4 ++++ UI/data/themes/Grey.qss | 4 ++++ UI/data/themes/Light.qss | 4 ++++ UI/data/themes/Rachni.qss | 4 ++++ UI/data/themes/Yami.qss | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index a2c7a79470838f..ef1f2d2216ab4f 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -201,6 +201,10 @@ SceneTree::item { padding: 6px; } +QMenu::item { + padding-right: 20px; +} + QListWidget::item, SourceTreeItem, QMenu::item, diff --git a/UI/data/themes/Grey.qss b/UI/data/themes/Grey.qss index 102b3fe4b94e0d..1f17a021caedd4 100644 --- a/UI/data/themes/Grey.qss +++ b/UI/data/themes/Grey.qss @@ -201,6 +201,10 @@ SceneTree::item { padding: 6px; } +QMenu::item { + padding-right: 20px; +} + QListWidget::item, SourceTreeItem, QMenu::item, diff --git a/UI/data/themes/Light.qss b/UI/data/themes/Light.qss index 7476697e67afe7..d8a64f9d2c7c6d 100644 --- a/UI/data/themes/Light.qss +++ b/UI/data/themes/Light.qss @@ -201,6 +201,10 @@ SceneTree::item { padding: 6px; } +QMenu::item { + padding-right: 20px; +} + QListWidget::item, SourceTreeItem, QMenu::item, diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index eb8cef6e00ec9a..2f36694512ca06 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -203,6 +203,10 @@ SceneTree::item { padding: 6px; } +QMenu::item { + padding-right: 20px; +} + QListWidget::item, SourceTreeItem, QMenu::item, diff --git a/UI/data/themes/Yami.qss b/UI/data/themes/Yami.qss index b557138b294d86..269b532e989696 100644 --- a/UI/data/themes/Yami.qss +++ b/UI/data/themes/Yami.qss @@ -201,6 +201,10 @@ SceneTree::item { padding: 6px; } +QMenu::item { + padding-right: 20px; +} + QListWidget::item, SourceTreeItem, QMenu::item, From f1e728ea03a689226a2f1e0f0fc6796ae2aee196 Mon Sep 17 00:00:00 2001 From: Matt Gajownik Date: Wed, 22 Mar 2023 08:51:52 +1100 Subject: [PATCH 0436/2225] obs-browser: Update version to 2.20.0 30d2b6f - Add ability to zoom browser docks with Ctrl - and + cbad08a - Use officially documented data type to persist CEF preferences 4236b56 - Persist CEF Preferences 501f624 - Add proc handler for javascript event 5a55d18 - Replace SIGNAL and SLOT macro with new style 72afb16 - Increased maximum width and height e9eb123 - Fix leak with SchemeHandlerFactory ea9f59d - Fix issue with unknown speaker layouts 00f1396 - Remove redundant macOS hardware acceleration check c2aaaef - Move custom FPS property next to its FPS --- plugins/obs-browser | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-browser b/plugins/obs-browser index 1c2264d722f065..59450c76044f69 160000 --- a/plugins/obs-browser +++ b/plugins/obs-browser @@ -1 +1 @@ -Subproject commit 1c2264d722f065646b72ac654f6ddbb6843f9bef +Subproject commit 59450c76044f69d0da94ffec1bb6a2fbb705a044 From f2f00f16767d3fc5038a07bb322aa6a9d01cad95 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 22 Mar 2023 18:29:52 +0100 Subject: [PATCH 0437/2225] UI: Fix audio archive encoder using the stream track --- UI/window-basic-main-outputs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index bcd861831a8ba8..597994e1077e49 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1577,7 +1577,7 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_) config_get_int(main->Config(), "AdvOut", "VodTrackIndex") - 1; streamArchiveEnc = obs_audio_encoder_create(streamAudioEncoder, ADV_ARCHIVE_NAME, nullptr, - streamTrack, nullptr); + vodTrack, nullptr); if (!streamArchiveEnc) throw "Failed to create archive audio encoder " "(advanced output)"; From 81117fa5cb783e5de05d330ba073a234709dad8c Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 15 Jan 2023 08:15:49 +0900 Subject: [PATCH 0438/2225] UI: Separate translation of filename format tooltip The tooltip string describing the filename format had many lines. It made difficult for translators to update newly added format strings. This commit separates the string so that each format string has each translation. Also construct HTML so that the column aligns. --- UI/data/locale/en-US.ini | 29 ++++++++++++++++++++- UI/window-basic-settings.cpp | 49 +++++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 0d91518d5e2e2e..738160d608fe6c 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -1074,7 +1074,34 @@ Screenshot.Source="Screenshot (Source)" FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF" # basic mode 'output' settings - advanced section - recording subsection - TT -FilenameFormatting.TT="%CCYY Year, four digits\n%YY Year, last two digits (00-99)\n%MM Month as a decimal number (01-12)\n%DD Day of the month, zero-padded (01-31)\n%hh Hour in 24h format (00-23)\n%mm Minute (00-59)\n%ss Second (00-61)\n%% A % sign\n%a Abbreviated weekday name\n%A Full weekday name\n%b Abbreviated month name\n%B Full month name\n%d Day of the month, zero-padded (01-31)\n%H Hour in 24h format (00-23)\n%I Hour in 12h format (01-12)\n%m Month as a decimal number (01-12)\n%M Minute (00-59)\n%p AM or PM designation\n%s Time in seconds since UNIX epoch\n%S Second (00-61)\n%y Year, last two digits (00-99)\n%Y Year\n%z ISO 8601 offset from UTC in timezone\n%Z Timezone name or abbreviation\n%FPS Frames per second\n%CRES Base (canvas) resolution\n%ORES Output (scaled) resolution\n%VF Video format" +FilenameFormatting.TT.CCYY="Year, four digits" +FilenameFormatting.TT.YY="Year, last two digits (00-99)" +FilenameFormatting.TT.MM="Month as a decimal number (01-12)" +FilenameFormatting.TT.DD="Day of the month, zero-padded (01-31)" +FilenameFormatting.TT.hh="Hour in 24h format (00-23)" +FilenameFormatting.TT.mm="Minute (00-59)" +FilenameFormatting.TT.ss="Second (00-61)" +FilenameFormatting.TT.Percent="A % sign" +FilenameFormatting.TT.a="Abbreviated weekday name" +FilenameFormatting.TT.A="Full weekday name" +FilenameFormatting.TT.b="Abbreviated month name" +FilenameFormatting.TT.B="Full month name" +FilenameFormatting.TT.d="Day of the month, zero-padded (01-31)" +FilenameFormatting.TT.H="Hour in 24h format (00-23)" +FilenameFormatting.TT.I="Hour in 12h format (01-12)" +FilenameFormatting.TT.m="Month as a decimal number (01-12)" +FilenameFormatting.TT.M="Minute (00-59)" +FilenameFormatting.TT.p="AM or PM designation" +FilenameFormatting.TT.s="Time in seconds since UNIX epoch" +FilenameFormatting.TT.S="Second (00-61)" +FilenameFormatting.TT.y="Year, last two digits (00-99)" +FilenameFormatting.TT.Y="Year" +FilenameFormatting.TT.z="ISO 8601 offset from UTC in timezone" +FilenameFormatting.TT.Z="Timezone name or abbreviation" +FilenameFormatting.TT.FPS="Frames per second" +FilenameFormatting.TT.CRES="Base (canvas) resolution" +FilenameFormatting.TT.ORES="Output (scaled) resolution" +FilenameFormatting.TT.VF="Video format" # basic mode 'video' settings Basic.Settings.Video="Video" diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 84abe98badb5c9..c3d886b3ff0c75 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1993,6 +1993,53 @@ void OBSBasicSettings::LoadSimpleOutputSettings() SimpleStreamingEncoderChanged(); } +static inline QString makeFormatToolTip() +{ + static const char *format_list[][2] = { + {"CCYY", "FilenameFormatting.TT.CCYY"}, + {"YY", "FilenameFormatting.TT.YY"}, + {"MM", "FilenameFormatting.TT.MM"}, + {"DD", "FilenameFormatting.TT.DD"}, + {"hh", "FilenameFormatting.TT.hh"}, + {"mm", "FilenameFormatting.TT.mm"}, + {"ss", "FilenameFormatting.TT.ss"}, + {"%", "FilenameFormatting.TT.Percent"}, + {"a", "FilenameFormatting.TT.a"}, + {"A", "FilenameFormatting.TT.A"}, + {"b", "FilenameFormatting.TT.b"}, + {"B", "FilenameFormatting.TT.B"}, + {"d", "FilenameFormatting.TT.d"}, + {"H", "FilenameFormatting.TT.H"}, + {"I", "FilenameFormatting.TT.I"}, + {"m", "FilenameFormatting.TT.m"}, + {"M", "FilenameFormatting.TT.M"}, + {"p", "FilenameFormatting.TT.p"}, + {"s", "FilenameFormatting.TT.s"}, + {"S", "FilenameFormatting.TT.S"}, + {"y", "FilenameFormatting.TT.y"}, + {"Y", "FilenameFormatting.TT.Y"}, + {"z", "FilenameFormatting.TT.z"}, + {"Z", "FilenameFormatting.TT.Z"}, + {"FPS", "FilenameFormatting.TT.FPS"}, + {"CRES", "FilenameFormatting.TT.CRES"}, + {"ORES", "FilenameFormatting.TT.ORES"}, + {"VF", "FilenameFormatting.TT.VF"}, + }; + + QString html = ""; + + for (auto f : format_list) { + html += ""; + } + + html += "
%"; + html += f[0]; + html += ""; + html += QTStr(f[1]); + html += "
"; + return html; +} + void OBSBasicSettings::LoadAdvOutputStreamingSettings() { bool rescale = config_get_bool(main->Config(), "AdvOut", "Rescale"); @@ -2010,7 +2057,7 @@ void OBSBasicSettings::LoadAdvOutputStreamingSettings() specCompleter->setCaseSensitivity(Qt::CaseSensitive); specCompleter->setFilterMode(Qt::MatchContains); ui->filenameFormatting->setCompleter(specCompleter); - ui->filenameFormatting->setToolTip(QTStr("FilenameFormatting.TT")); + ui->filenameFormatting->setToolTip(makeFormatToolTip()); switch (trackIndex) { case 1: From fe34045d6a47416addb8a45f99c3cfdf6d8cde11 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 22 Mar 2023 18:18:56 +0100 Subject: [PATCH 0439/2225] UI: Remove unused variables to fix errors in the CMake 3.0 rework --- UI/audio-encoders.cpp | 2 -- UI/window-basic-main-outputs.cpp | 9 --------- 2 files changed, 11 deletions(-) diff --git a/UI/audio-encoders.cpp b/UI/audio-encoders.cpp index 08c4af32b45b31..c9cdbd42b77056 100644 --- a/UI/audio-encoders.cpp +++ b/UI/audio-encoders.cpp @@ -141,7 +141,6 @@ static void PopulateBitrateLists() call_once(once, []() { struct obs_audio_info aoi; obs_get_audio_info(&aoi); - uint32_t output_channels = get_audio_channels(aoi.speakers); /* NOTE: ffmpeg_aac and ffmpeg_opus have the same properties * their bitrates will also be used as a fallback */ @@ -275,7 +274,6 @@ static void PopulateSimpleOpusBitrateMap() call_once(once, []() { struct obs_audio_info aoi; obs_get_audio_info(&aoi); - uint32_t output_channels = get_audio_channels(aoi.speakers); for (auto &bitrate : fallbackBitrates) simpleOpusBitrateMap[bitrate] = "ffmpeg_opus"; diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 597994e1077e49..d6e2624cfc5d58 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1060,9 +1060,6 @@ bool SimpleOutput::SetupStreaming(obs_service_t *service) obs_output_get_signal_handler(streamOutput), "stop", OBSStopStreaming, this); - bool isEncoded = obs_output_get_flags(streamOutput) & - OBS_OUTPUT_ENCODED; - outputType = type; } @@ -1975,9 +1972,6 @@ inline void AdvancedOutput::SetupVodTrack(obs_service_t *service) bool AdvancedOutput::SetupStreaming(obs_service_t *service) { - int streamTrack = - config_get_int(main->Config(), "AdvOut", "TrackIndex"); - if (!useStreamEncoder || (!ffmpegOutput && !obs_output_active(fileOutput))) { UpdateStreamSettings(); @@ -2029,9 +2023,6 @@ bool AdvancedOutput::SetupStreaming(obs_service_t *service) obs_output_get_signal_handler(streamOutput), "stop", OBSStopStreaming, this); - bool isEncoded = obs_output_get_flags(streamOutput) & - OBS_OUTPUT_ENCODED; - outputType = type; } From 04a4f2b7254dd681c5bfbb4abf547c1905d7a4dd Mon Sep 17 00:00:00 2001 From: tytan652 Date: Mon, 20 Mar 2023 15:56:17 +0100 Subject: [PATCH 0440/2225] UI: Fix simple fallback audio codec name --- UI/window-basic-settings-stream.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 8be7155eba2c66..eec423fc3b21a3 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1432,8 +1432,7 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() cur_audio_name = ui->simpleOutStrAEncoder->itemText( ui->simpleOutStrAEncoder->findData(cur_enc)); - fb_audio_name = ui->simpleOutStrAEncoder->itemText( - ui->simpleOutStrAEncoder->findData(fb_enc)); + fb_audio_name = (cur_enc == "opus") ? "AAC" : "Opus"; } else { QString cur_enc = ui->advOutEncoder->currentData().toString(); QString fb_enc = get_adv_fallback(cur_enc); From 3c909558face114e37a30159b297fd7a613a2901 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 23 Mar 2023 08:13:53 +0100 Subject: [PATCH 0441/2225] UI: Make simple audio codec name translatable Also adds "(Default)" to the AAC combobox option. --- UI/data/locale/en-US.ini | 3 +++ UI/window-basic-settings-stream.cpp | 13 ++++++++++--- UI/window-basic-settings.cpp | 8 ++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 738160d608fe6c..f08a95b1db27c2 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -987,6 +987,9 @@ Basic.Settings.Output.Simple.Encoder.Hardware.NVENC.HEVC="Hardware (NVENC, HEVC) Basic.Settings.Output.Simple.Encoder.Hardware.Apple.H264="Hardware (Apple, H.264)" Basic.Settings.Output.Simple.Encoder.Hardware.Apple.HEVC="Hardware (Apple, HEVC)" Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 low CPU usage preset, increases file size)" +Basic.Settings.Output.Simple.Codec.AAC="AAC" +Basic.Settings.Output.Simple.Codec.AAC.Default="AAC (Default)" +Basic.Settings.Output.Simple.Codec.Opus="Opus" Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Uses Track 2)" Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Incompatible Resolution/Framerate" Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="This streaming service does not support your current output resolution and/or framerate. They will be changed to the closest compatible value:\n\n%1\n\nDo you want to continue?" diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index eec423fc3b21a3..3d5c1c5c593963 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1432,7 +1432,10 @@ bool OBSBasicSettings::ServiceSupportsCodecCheck() cur_audio_name = ui->simpleOutStrAEncoder->itemText( ui->simpleOutStrAEncoder->findData(cur_enc)); - fb_audio_name = (cur_enc == "opus") ? "AAC" : "Opus"; + fb_audio_name = + (cur_enc == "opus") + ? QTStr("Basic.Settings.Output.Simple.Codec.AAC") + : QTStr("Basic.Settings.Output.Simple.Codec.Opus"); } else { QString cur_enc = ui->advOutEncoder->currentData().toString(); QString fb_enc = get_adv_fallback(cur_enc); @@ -1643,9 +1646,13 @@ void OBSBasicSettings::ResetEncoders(bool streamOnly) if (service_supports_encoder(acodecs, "CoreAudio_AAC") || service_supports_encoder(acodecs, "libfdk_aac") || service_supports_encoder(acodecs, "ffmpeg_aac")) - ui->simpleOutStrAEncoder->addItem("AAC", "aac"); + ui->simpleOutStrAEncoder->addItem( + QTStr("Basic.Settings.Output.Simple.Codec.AAC.Default"), + "aac"); if (service_supports_encoder(acodecs, "ffmpeg_opus")) - ui->simpleOutStrAEncoder->addItem("Opus", "opus"); + ui->simpleOutStrAEncoder->addItem( + QTStr("Basic.Settings.Output.Simple.Codec.Opus"), + "opus"); #undef ENCODER_STR /* ------------------------------------------------- */ diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index c3d886b3ff0c75..e4fb8964e7baa3 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -5130,9 +5130,13 @@ void OBSBasicSettings::FillSimpleRecordingValues() if (EncoderAvailable("CoreAudio_AAC") || EncoderAvailable("libfdk_aac") || EncoderAvailable("ffmpeg_aac")) - ui->simpleOutRecAEncoder->addItem("AAC", "aac"); + ui->simpleOutRecAEncoder->addItem( + QTStr("Basic.Settings.Output.Simple.Codec.AAC.Default"), + "aac"); if (EncoderAvailable("ffmpeg_opus")) - ui->simpleOutRecAEncoder->addItem("Opus", "opus"); + ui->simpleOutRecAEncoder->addItem( + QTStr("Basic.Settings.Output.Simple.Codec.Opus"), + "opus"); #undef ADD_QUALITY #undef ENCODER_STR From a73e13eeebc9d4420ad7e86429ad1b85a6eb0383 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 19 Mar 2023 00:27:00 +0100 Subject: [PATCH 0442/2225] libobs: Keep mixer data for placeholder sources Placeholder sources are created when a plugin providing a source type is unavailable. Since they're not marked as having audio any audio track settings for them get lost. With this change we retain mixer information if the source owns its id to avoid that. --- libobs/obs-source.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 6b05402926b2ae..c3337afd1cb2fd 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -4905,7 +4905,8 @@ void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers) if (!obs_source_valid(source, "obs_source_set_audio_mixers")) return; - if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0) + if (!source->owns_info_id && + (source->info.output_flags & OBS_SOURCE_AUDIO) == 0) return; if (source->audio_mixers == mixers) @@ -4926,7 +4927,8 @@ uint32_t obs_source_get_audio_mixers(const obs_source_t *source) { if (!obs_source_valid(source, "obs_source_get_audio_mixers")) return 0; - if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0) + if (!source->owns_info_id && + (source->info.output_flags & OBS_SOURCE_AUDIO) == 0) return 0; return source->audio_mixers; From 21289b27775dfce43e87e2d8134c79a809461c78 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 22 Mar 2023 10:57:45 +0100 Subject: [PATCH 0443/2225] UI: Save protocol in non-custom services --- UI/window-basic-settings-stream.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 3d5c1c5c593963..ec661bd2c73d8c 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -201,6 +201,7 @@ void OBSBasicSettings::SaveStream1Settings() if (!customServer) { obs_data_set_string(settings, "service", QT_TO_UTF8(ui->service->currentText())); + obs_data_set_string(settings, "protocol", QT_TO_UTF8(protocol)); obs_data_set_string( settings, "server", QT_TO_UTF8(ui->server->currentData().toString())); From 6f755451d9159b70c9c6fbc2669400bfbb36cc75 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 22 Mar 2023 11:00:04 +0100 Subject: [PATCH 0444/2225] rtmp-services: Set protocol in rtmp_common if none set --- plugins/rtmp-services/rtmp-common.c | 35 ++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 77b4b74adc34f8..ea54a126cc0e6e 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -108,6 +108,31 @@ static void update_recommendations(struct rtmp_common *service, json_t *rec) service->max_fps = get_int_val(rec, "max fps"); } +#define RTMP_PREFIX "rtmp://" +#define RTMPS_PREFIX "rtmps://" + +static const char *get_protocol(json_t *service, obs_data_t *settings) +{ + const char *protocol = get_string_val(service, "protocol"); + if (protocol) { + return protocol; + } + + json_t *servers = json_object_get(service, "servers"); + if (!json_is_array(servers)) + return "RTMP"; + + json_t *server = json_array_get(servers, 0); + const char *url = get_string_val(server, "url"); + + if (strncmp(url, RTMPS_PREFIX, strlen(RTMPS_PREFIX)) == 0) { + obs_data_set_string(settings, "protocol", "RTMPS"); + return "RTMPS"; + } + + return "RTMP"; +} + static void rtmp_common_update(void *data, obs_data_t *settings) { struct rtmp_common *service = data; @@ -143,6 +168,13 @@ static void rtmp_common_update(void *data, obs_data_t *settings) service->service = bstrdup(new_name); } + if ((service->protocol == NULL || + service->protocol[0] == '\0')) { + bfree(service->protocol); + service->protocol = + bstrdup(get_protocol(serv, settings)); + } + if (serv) { json_t *rec = json_object_get(serv, "recommended"); if (json_is_object(rec)) { @@ -209,9 +241,6 @@ static inline bool get_bool_val(json_t *service, const char *key) return json_is_true(bool_val); } -#define RTMP_PREFIX "rtmp://" -#define RTMPS_PREFIX "rtmps://" - static bool is_protocol_available(json_t *service) { const char *protocol = get_string_val(service, "protocol"); From 1a05097304a27d05e96f2cec50c4883a6f25b115 Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Mon, 18 Jul 2022 19:36:31 +0300 Subject: [PATCH 0445/2225] obs-ffmpeg: Add HDR and HEVC to VA-API encoder --- plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c | 287 +++++++++++++++++++++----- plugins/obs-ffmpeg/obs-ffmpeg.c | 29 ++- plugins/obs-ffmpeg/vaapi-utils.c | 61 ++++++ plugins/obs-ffmpeg/vaapi-utils.h | 8 +- 4 files changed, 335 insertions(+), 50 deletions(-) diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c index 9ae198eccc7187..79c7f3f4af1a8d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c @@ -26,6 +26,9 @@ #include #include #include +#ifdef ENABLE_HEVC +#include +#endif #include @@ -75,32 +78,66 @@ struct vaapi_encoder { bool initialized; }; -static const char *vaapi_getname(void *unused) +static const char *h264_vaapi_getname(void *unused) { UNUSED_PARAMETER(unused); return "FFmpeg VAAPI H.264"; } -static inline bool valid_format(enum video_format format) +#ifdef ENABLE_HEVC +static const char *hevc_vaapi_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return "FFmpeg VAAPI HEVC"; +} +#endif + +static inline bool h264_valid_format(enum video_format format) { return format == VIDEO_FORMAT_NV12; } -static void vaapi_video_info(void *data, struct video_scale_info *info) +#ifdef ENABLE_HEVC +static inline bool hevc_valid_format(enum video_format format) +{ + return (format == VIDEO_FORMAT_NV12) || (format == VIDEO_FORMAT_P010); +} +#endif + +static void h264_vaapi_video_info(void *data, struct video_scale_info *info) { struct vaapi_encoder *enc = data; enum video_format pref_format; pref_format = obs_encoder_get_preferred_video_format(enc->encoder); - if (!valid_format(pref_format)) { - pref_format = valid_format(info->format) ? info->format - : VIDEO_FORMAT_NV12; + if (!h264_valid_format(pref_format)) { + pref_format = h264_valid_format(info->format) + ? info->format + : VIDEO_FORMAT_NV12; } info->format = pref_format; } +#ifdef ENABLE_HEVC +static void hevc_vaapi_video_info(void *data, struct video_scale_info *info) +{ + struct vaapi_encoder *enc = data; + enum video_format pref_format; + + pref_format = obs_encoder_get_preferred_video_format(enc->encoder); + + if (!hevc_valid_format(pref_format)) { + pref_format = hevc_valid_format(info->format) + ? info->format + : VIDEO_FORMAT_NV12; + } + + info->format = pref_format; +} +#endif + static bool vaapi_init_codec(struct vaapi_encoder *enc, const char *path) { int ret; @@ -122,7 +159,7 @@ static bool vaapi_init_codec(struct vaapi_encoder *enc, const char *path) AVHWFramesContext *frames_ctx = (AVHWFramesContext *)enc->vaframes_ref->data; frames_ctx->format = AV_PIX_FMT_VAAPI; - frames_ctx->sw_format = AV_PIX_FMT_NV12; + frames_ctx->sw_format = enc->context->pix_fmt; frames_ctx->width = enc->context->width; frames_ctx->height = enc->context->height; frames_ctx->initial_pool_size = 20; @@ -196,7 +233,7 @@ static const rc_mode_t *get_rc_mode(const char *name) return rc_mode ? rc_mode : RC_MODES; } -static bool vaapi_update(void *data, obs_data_t *settings) +static bool vaapi_update(void *data, obs_data_t *settings, bool hevc) { struct vaapi_encoder *enc = data; @@ -240,7 +277,20 @@ static bool vaapi_update(void *data, obs_data_t *settings) info.colorspace = voi->colorspace; info.range = voi->range; - vaapi_video_info(enc, &info); +#ifdef ENABLE_HEVC + if (hevc) { + if ((profile == FF_PROFILE_HEVC_MAIN) && + (info.format == VIDEO_FORMAT_P010)) { + warn("Forcing Main10 for P010"); + profile = FF_PROFILE_HEVC_MAIN_10; + } + + hevc_vaapi_video_info(enc, &info); + } else +#endif + { + h264_vaapi_video_info(enc, &info); + } enc->context->profile = profile; enc->context->max_b_frames = bf; @@ -262,21 +312,31 @@ static bool vaapi_update(void *data, obs_data_t *settings) enum AVColorSpace colorspace = AVCOL_SPC_UNSPECIFIED; switch (info.colorspace) { case VIDEO_CS_601: - enc->context->color_trc = AVCOL_TRC_SMPTE170M; enc->context->color_primaries = AVCOL_PRI_SMPTE170M; + enc->context->color_trc = AVCOL_TRC_SMPTE170M; colorspace = AVCOL_SPC_SMPTE170M; break; case VIDEO_CS_DEFAULT: case VIDEO_CS_709: - enc->context->color_trc = AVCOL_TRC_BT709; enc->context->color_primaries = AVCOL_PRI_BT709; + enc->context->color_trc = AVCOL_TRC_BT709; colorspace = AVCOL_SPC_BT709; break; case VIDEO_CS_SRGB: - enc->context->color_trc = AVCOL_TRC_IEC61966_2_1; enc->context->color_primaries = AVCOL_PRI_BT709; + enc->context->color_trc = AVCOL_TRC_IEC61966_2_1; colorspace = AVCOL_SPC_BT709; break; + case VIDEO_CS_2100_PQ: + enc->context->color_primaries = AVCOL_PRI_BT2020; + enc->context->color_trc = AVCOL_TRC_SMPTE2084; + colorspace = AVCOL_SPC_BT2020_NCL; + break; + case VIDEO_CS_2100_HLG: + enc->context->color_primaries = AVCOL_PRI_BT2020; + enc->context->color_trc = AVCOL_TRC_ARIB_STD_B67; + colorspace = AVCOL_SPC_BT2020_NCL; + break; default: break; } @@ -352,7 +412,8 @@ static void vaapi_destroy(void *data) bfree(enc); } -static void *vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) +static void *vaapi_create_internal(obs_data_t *settings, obs_encoder_t *encoder, + bool hevc) { struct vaapi_encoder *enc; #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 9, 100) @@ -362,7 +423,8 @@ static void *vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) enc = bzalloc(sizeof(*enc)); enc->encoder = encoder; - enc->vaapi = avcodec_find_encoder_by_name("h264_vaapi"); + const char *const name = hevc ? "hevc_vaapi" : "h264_vaapi"; + enc->vaapi = avcodec_find_encoder_by_name(name); enc->first_packet = true; @@ -379,7 +441,7 @@ static void *vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) goto fail; } - if (!vaapi_update(enc, settings)) + if (!vaapi_update(enc, settings, hevc)) goto fail; return enc; @@ -389,6 +451,18 @@ static void *vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) return NULL; } +static void *h264_vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return vaapi_create_internal(settings, encoder, false); +} + +#ifdef ENABLE_HEVC +static void *hevc_vaapi_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return vaapi_create_internal(settings, encoder, true); +} +#endif + static inline void copy_data(AVFrame *pic, const struct encoder_frame *frame, int height, enum AVPixelFormat format) { @@ -415,8 +489,9 @@ static inline void copy_data(AVFrame *pic, const struct encoder_frame *frame, } } -static bool vaapi_encode(void *data, struct encoder_frame *frame, - struct encoder_packet *packet, bool *received_packet) +static bool vaapi_encode_internal(void *data, struct encoder_frame *frame, + struct encoder_packet *packet, + bool *received_packet, bool hevc) { struct vaapi_encoder *enc = data; AVFrame *hwframe = NULL; @@ -481,11 +556,22 @@ static bool vaapi_encode(void *data, struct encoder_frame *frame, size_t size; enc->first_packet = false; - obs_extract_avc_headers(enc->packet->data, - enc->packet->size, &new_packet, - &size, &enc->header, - &enc->header_size, &enc->sei, - &enc->sei_size); +#ifdef ENABLE_HEVC + if (hevc) { + obs_extract_hevc_headers( + enc->packet->data, enc->packet->size, + &new_packet, &size, &enc->header, + &enc->header_size, &enc->sei, + &enc->sei_size); + } else +#endif + { + obs_extract_avc_headers( + enc->packet->data, enc->packet->size, + &new_packet, &size, &enc->header, + &enc->header_size, &enc->sei, + &enc->sei_size); + } da_copy_array(enc->buffer, new_packet, size); bfree(new_packet); @@ -499,7 +585,16 @@ static bool vaapi_encode(void *data, struct encoder_frame *frame, packet->data = enc->buffer.array; packet->size = enc->buffer.num; packet->type = OBS_ENCODER_VIDEO; - packet->keyframe = obs_avc_keyframe(packet->data, packet->size); +#ifdef ENABLE_HEVC + if (hevc) { + packet->keyframe = + obs_hevc_keyframe(packet->data, packet->size); + } else +#endif + { + packet->keyframe = + obs_avc_keyframe(packet->data, packet->size); + } *received_packet = true; } else { *received_packet = false; @@ -514,19 +609,51 @@ static bool vaapi_encode(void *data, struct encoder_frame *frame, return false; } +static bool h264_vaapi_encode(void *data, struct encoder_frame *frame, + struct encoder_packet *packet, + bool *received_packet) +{ + return vaapi_encode_internal(data, frame, packet, received_packet, + false); +} + +#ifdef ENABLE_HEVC +static bool hevc_vaapi_encode(void *data, struct encoder_frame *frame, + struct encoder_packet *packet, + bool *received_packet) +{ + return vaapi_encode_internal(data, frame, packet, received_packet, + true); +} +#endif + static void set_visible(obs_properties_t *ppts, const char *name, bool visible) { obs_property_t *p = obs_properties_get(ppts, name); obs_property_set_visible(p, visible); } -static void vaapi_defaults(obs_data_t *settings) +static void vaapi_defaults_internal(obs_data_t *settings, bool hevc) { - const char *device = vaapi_get_h264_default_device(); +#ifdef ENABLE_HEVC + const char *device = hevc ? vaapi_get_hevc_default_device() + : vaapi_get_h264_default_device(); +#else + const char *const device = vaapi_get_h264_default_device(); +#endif obs_data_set_default_string(settings, "vaapi_device", device); - obs_data_set_default_int(settings, "profile", - FF_PROFILE_H264_CONSTRAINED_BASELINE); +#ifdef ENABLE_HEVC + if (hevc) { + obs_data_set_default_int(settings, "profile", + FF_PROFILE_HEVC_MAIN); + + } else +#endif + { + obs_data_set_default_int(settings, "profile", + FF_PROFILE_H264_CONSTRAINED_BASELINE); + } obs_data_set_default_int(settings, "level", 40); obs_data_set_default_int(settings, "bitrate", 2500); obs_data_set_default_int(settings, "keyint_sec", 0); @@ -540,11 +667,15 @@ static void vaapi_defaults(obs_data_t *settings) if (!va_dpy) return; - if (vaapi_device_rc_supported(VAProfileH264ConstrainedBaseline, va_dpy, - VA_RC_CBR, device)) +#ifdef ENABLE_HEVC + const VAProfile profile = hevc ? VAProfileHEVCMain + : VAProfileH264ConstrainedBaseline; +#else + const VAProfile profile = VAProfileH264ConstrainedBaseline; +#endif + if (vaapi_device_rc_supported(profile, va_dpy, VA_RC_CBR, device)) obs_data_set_default_string(settings, "rate_control", "CBR"); - else if (vaapi_device_rc_supported(VAProfileH264ConstrainedBaseline, - va_dpy, VA_RC_VBR, device)) + else if (vaapi_device_rc_supported(profile, va_dpy, VA_RC_VBR, device)) obs_data_set_default_string(settings, "rate_control", "VBR"); else obs_data_set_default_string(settings, "rate_control", "CQP"); @@ -552,6 +683,16 @@ static void vaapi_defaults(obs_data_t *settings) vaapi_close_device(&drm_fd, va_dpy); } +static void h264_vaapi_defaults(obs_data_t *settings) +{ + vaapi_defaults_internal(settings, false); +} + +static void hevc_vaapi_defaults(obs_data_t *settings) +{ + vaapi_defaults_internal(settings, true); +} + static bool vaapi_device_modified(obs_properties_t *ppts, obs_property_t *p, obs_data_t *settings) { @@ -566,19 +707,37 @@ static bool vaapi_device_modified(obs_properties_t *ppts, obs_property_t *p, obs_property_list_clear(rc_p); - if (!va_dpy || !vaapi_display_h264_supported(va_dpy, device)) + if (!va_dpy) goto fail; switch (profile) { case FF_PROFILE_H264_CONSTRAINED_BASELINE: + if (!vaapi_display_h264_supported(va_dpy, device)) + goto fail; profile = VAProfileH264ConstrainedBaseline; break; case FF_PROFILE_H264_MAIN: + if (!vaapi_display_h264_supported(va_dpy, device)) + goto fail; profile = VAProfileH264Main; break; case FF_PROFILE_H264_HIGH: + if (!vaapi_display_h264_supported(va_dpy, device)) + goto fail; profile = VAProfileH264High; break; +#ifdef ENABLE_HEVC + case FF_PROFILE_HEVC_MAIN: + if (!vaapi_display_hevc_supported(va_dpy, device)) + goto fail; + profile = VAProfileHEVCMain; + break; + case FF_PROFILE_HEVC_MAIN_10: + if (!vaapi_display_hevc_supported(va_dpy, device)) + goto fail; + profile = VAProfileHEVCMain10; + break; +#endif } if (vaapi_device_rc_supported(profile, va_dpy, VA_RC_CBR, device)) @@ -638,10 +797,8 @@ static bool get_device_name_from_pci(struct pci_access *pacc, char *pci_slot, return false; } -static obs_properties_t *vaapi_properties(void *unused) +static obs_properties_t *vaapi_properties_internal(bool hevc) { - UNUSED_PARAMETER(unused); - obs_properties_t *props = obs_properties_create(); obs_property_t *list; @@ -731,10 +888,17 @@ static obs_properties_t *vaapi_properties(void *unused) obs_module_text("Profile"), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); - obs_property_list_add_int(list, "Constrained Baseline (default)", - FF_PROFILE_H264_CONSTRAINED_BASELINE); - obs_property_list_add_int(list, "Main", FF_PROFILE_H264_MAIN); - obs_property_list_add_int(list, "High", FF_PROFILE_H264_HIGH); + if (hevc) { + obs_property_list_add_int(list, "Main", FF_PROFILE_HEVC_MAIN); + obs_property_list_add_int(list, "Main10", + FF_PROFILE_HEVC_MAIN_10); + } else { + obs_property_list_add_int(list, + "Constrained Baseline (default)", + FF_PROFILE_H264_CONSTRAINED_BASELINE); + obs_property_list_add_int(list, "Main", FF_PROFILE_H264_MAIN); + obs_property_list_add_int(list, "High", FF_PROFILE_H264_HIGH); + } obs_property_set_modified_callback(list, vaapi_device_modified); @@ -778,6 +942,20 @@ static obs_properties_t *vaapi_properties(void *unused) return props; } +static obs_properties_t *h264_vaapi_properties(void *unused) +{ + UNUSED_PARAMETER(unused); + return vaapi_properties_internal(false); +} + +#ifdef ENABLE_HEVC +static obs_properties_t *hevc_vaapi_properties(void *unused) +{ + UNUSED_PARAMETER(unused); + return vaapi_properties_internal(true); +} +#endif + static bool vaapi_extra_data(void *data, uint8_t **extra_data, size_t *size) { struct vaapi_encoder *enc = data; @@ -796,19 +974,36 @@ static bool vaapi_sei_data(void *data, uint8_t **extra_data, size_t *size) return true; } -struct obs_encoder_info vaapi_encoder_info = { +struct obs_encoder_info h264_vaapi_encoder_info = { .id = "ffmpeg_vaapi", .type = OBS_ENCODER_VIDEO, .codec = "h264", - .get_name = vaapi_getname, - .create = vaapi_create, + .get_name = h264_vaapi_getname, + .create = h264_vaapi_create, .destroy = vaapi_destroy, - .encode = vaapi_encode, - .get_defaults = vaapi_defaults, - .get_properties = vaapi_properties, + .encode = h264_vaapi_encode, + .get_defaults = h264_vaapi_defaults, + .get_properties = h264_vaapi_properties, .get_extra_data = vaapi_extra_data, .get_sei_data = vaapi_sei_data, - .get_video_info = vaapi_video_info, + .get_video_info = h264_vaapi_video_info, }; +#ifdef ENABLE_HEVC +struct obs_encoder_info hevc_vaapi_encoder_info = { + .id = "hevc_ffmpeg_vaapi", + .type = OBS_ENCODER_VIDEO, + .codec = "hevc", + .get_name = hevc_vaapi_getname, + .create = hevc_vaapi_create, + .destroy = vaapi_destroy, + .encode = hevc_vaapi_encode, + .get_defaults = hevc_vaapi_defaults, + .get_properties = hevc_vaapi_properties, + .get_extra_data = vaapi_extra_data, + .get_sei_data = vaapi_sei_data, + .get_video_info = hevc_vaapi_video_info, +}; +#endif + #endif diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index 6b2fab6c4fd8ef..d32146cf9f3eba 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -44,7 +44,10 @@ extern struct obs_encoder_info svt_av1_encoder_info; extern struct obs_encoder_info aom_av1_encoder_info; #ifdef LIBAVUTIL_VAAPI_AVAILABLE -extern struct obs_encoder_info vaapi_encoder_info; +extern struct obs_encoder_info h264_vaapi_encoder_info; +#ifdef ENABLE_HEVC +extern struct obs_encoder_info hevc_vaapi_encoder_info; +#endif #endif #ifndef __APPLE__ @@ -336,6 +339,19 @@ static bool h264_vaapi_supported(void) * that support H264. */ return vaapi_get_h264_default_device() != NULL; } +#ifdef ENABLE_HEVC +static bool hevc_vaapi_supported(void) +{ + const AVCodec *vaenc = avcodec_find_encoder_by_name("hevc_vaapi"); + + if (!vaenc) + return false; + + /* NOTE: If default device is NULL, it means there is no device + * that support HEVC. */ + return vaapi_get_hevc_default_device() != NULL; +} +#endif #endif #ifdef _WIN32 @@ -423,10 +439,19 @@ bool obs_module_load(void) if (h264_vaapi_supported()) { blog(LOG_INFO, "FFmpeg VAAPI H264 encoding supported"); - obs_register_encoder(&vaapi_encoder_info); + obs_register_encoder(&h264_vaapi_encoder_info); } else { blog(LOG_INFO, "FFmpeg VAAPI H264 encoding not supported"); } + +#ifdef ENABLE_HEVC + if (hevc_vaapi_supported()) { + blog(LOG_INFO, "FFmpeg VAAPI HEVC encoding supported"); + obs_register_encoder(&hevc_vaapi_encoder_info); + } else { + blog(LOG_INFO, "FFmpeg VAAPI HEVC encoding not supported"); + } +#endif #endif #endif diff --git a/plugins/obs-ffmpeg/vaapi-utils.c b/plugins/obs-ffmpeg/vaapi-utils.c index 6640fff3e167d5..4198ee59c6ab4e 100644 --- a/plugins/obs-ffmpeg/vaapi-utils.c +++ b/plugins/obs-ffmpeg/vaapi-utils.c @@ -260,3 +260,64 @@ const char *vaapi_get_h264_default_device() return default_h264_device; } + +#ifdef ENABLE_HEVC + +bool vaapi_display_hevc_supported(VADisplay dpy, const char *device_path) +{ + bool ret = false; + + CHECK_PROFILE(ret, VAProfileHEVCMain, dpy, device_path); + CHECK_PROFILE(ret, VAProfileHEVCMain10, dpy, device_path); + + if (!ret) { + CHECK_PROFILE_LP(ret, VAProfileHEVCMain, dpy, device_path); + CHECK_PROFILE_LP(ret, VAProfileHEVCMain10, dpy, device_path); + } + + return ret; +} + +bool vaapi_device_hevc_supported(const char *device_path) +{ + bool ret = false; + VADisplay va_dpy; + + int drm_fd = -1; + + va_dpy = vaapi_open_device(&drm_fd, device_path, + "vaapi_device_hevc_supported"); + if (!va_dpy) + return false; + + ret = vaapi_display_hevc_supported(va_dpy, device_path); + + vaapi_close_device(&drm_fd, va_dpy); + + return ret; +} + +const char *vaapi_get_hevc_default_device() +{ + static const char *default_hevc_device = NULL; + + if (!default_hevc_device) { + bool ret = false; + char path[32] = "/dev/dri/renderD1"; + for (int i = 28;; i++) { + sprintf(path, "/dev/dri/renderD1%d", i); + if (access(path, F_OK) != 0) + break; + + ret = vaapi_device_hevc_supported(path); + if (ret) { + default_hevc_device = strdup(path); + break; + } + } + } + + return default_hevc_device; +} + +#endif // #ifdef ENABLE_HEVC diff --git a/plugins/obs-ffmpeg/vaapi-utils.h b/plugins/obs-ffmpeg/vaapi-utils.h index 8933f770fa4c2f..b90b2394710b36 100644 --- a/plugins/obs-ffmpeg/vaapi-utils.h +++ b/plugins/obs-ffmpeg/vaapi-utils.h @@ -16,7 +16,11 @@ bool vaapi_device_rc_supported(VAProfile profile, VADisplay dpy, uint32_t rc, const char *device_path); bool vaapi_display_h264_supported(VADisplay dpy, const char *device_path); - bool vaapi_device_h264_supported(const char *device_path); - const char *vaapi_get_h264_default_device(void); + +#ifdef ENABLE_HEVC +bool vaapi_display_hevc_supported(VADisplay dpy, const char *device_path); +bool vaapi_device_hevc_supported(const char *device_path); +const char *vaapi_get_hevc_default_device(void); +#endif From feae65c4729bcfa5df5b17a5fb7ed6f88d681bd5 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Mon, 20 Mar 2023 08:48:01 -0700 Subject: [PATCH 0446/2225] graphics-hook: Handle VK_KHR_imageless_framebuffer Applications that use this Vulkan extension would have image usage mismatches because we add VK_IMAGE_USAGE_TRANSFER_SRC_BIT to VkSwapchainCreateInfoKHR::imageUsage, so make the same modification to VkFramebufferAttachmentImageInfo::usage. --- plugins/win-capture/graphics-hook-ver.h | 2 +- .../graphics-hook/vulkan-capture.c | 436 +++++++++++++++++- .../graphics-hook/vulkan-capture.h | 7 + 3 files changed, 439 insertions(+), 6 deletions(-) diff --git a/plugins/win-capture/graphics-hook-ver.h b/plugins/win-capture/graphics-hook-ver.h index 62dbd1049ab3b8..92aaf5a73cbf15 100644 --- a/plugins/win-capture/graphics-hook-ver.h +++ b/plugins/win-capture/graphics-hook-ver.h @@ -13,7 +13,7 @@ #define HOOK_VER_MAJOR 1 #define HOOK_VER_MINOR 8 -#define HOOK_VER_PATCH 0 +#define HOOK_VER_PATCH 1 #ifndef STRINGIFY #define STRINGIFY(s) #s diff --git a/plugins/win-capture/graphics-hook/vulkan-capture.c b/plugins/win-capture/graphics-hook/vulkan-capture.c index e413287a498b7d..9cba18d7700a63 100644 --- a/plugins/win-capture/graphics-hook/vulkan-capture.c +++ b/plugins/win-capture/graphics-hook/vulkan-capture.c @@ -66,6 +66,18 @@ struct vk_queue_data { uint32_t frame_count; }; +struct vk_swap_view_data { + struct vk_obj_node node; +}; + +#define OBS_COLOR_ATTACHMENT_LIMIT 8 +struct vk_framebuffer_data { + struct vk_obj_node node; + + VkFramebuffer alternates[1 << OBS_COLOR_ATTACHMENT_LIMIT]; + uint32_t color_attachment_mask; +}; + struct vk_frame_data { VkCommandPool cmd_pool; VkCommandBuffer cmd_buffer; @@ -103,6 +115,8 @@ struct vk_data { struct vk_swap_data *cur_swap; struct vk_obj_list queues; + struct vk_obj_list swap_views; + struct vk_obj_list framebuffers; VkExternalMemoryProperties external_mem_props; @@ -247,6 +261,13 @@ static struct vk_data *get_device_data_by_queue(VkQueue queue) (uint64_t)GET_LDT(queue)); } +static struct vk_data * +get_device_data_by_command_buffer(VkCommandBuffer commandBuffer) +{ + return (struct vk_data *)get_obj_data(&devices, + (uint64_t)GET_LDT(commandBuffer)); +} + static struct vk_data *remove_device_data(VkDevice device) { return (struct vk_data *)remove_obj_data(&devices, @@ -285,11 +306,6 @@ static struct vk_queue_data *get_queue_data(struct vk_data *data, VkQueue queue) (uint64_t)queue); } -static VkQueue get_queue_key(const struct vk_queue_data *queue_data) -{ - return (VkQueue)(uintptr_t)queue_data->node.obj; -} - static void remove_free_queue_all(struct vk_data *data, const VkAllocationCallbacks *ac) { @@ -321,6 +337,73 @@ static void queue_walk_end(struct vk_data *data) /* ------------------------------------------------------------------------- */ +static struct vk_swap_view_data * +add_swap_view_data(struct vk_data *data, VkImageView imageView, + const VkAllocationCallbacks *ac) +{ + struct vk_swap_view_data *const swap_view_data = + vk_alloc(ac, sizeof(struct vk_swap_view_data), + _Alignof(struct vk_swap_view_data), + VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); + add_obj_data(&data->swap_views, (uint64_t)imageView, swap_view_data); + return swap_view_data; +} + +static struct vk_swap_view_data *get_swap_view_data(struct vk_data *data, + VkImageView imageView) +{ + return (struct vk_swap_view_data *)get_obj_data(&data->swap_views, + (uint64_t)imageView); +} + +static void remove_free_swap_view_data(struct vk_data *data, + VkImageView imageView, + const VkAllocationCallbacks *ac) +{ + struct vk_swap_data *const swap_view_data = + (struct vk_swap_data *)remove_obj_data(&data->swap_views, + (uint64_t)imageView); + vk_free(ac, swap_view_data); +} + +/* ------------------------------------------------------------------------- */ + +static struct vk_framebuffer_data * +add_framebuffer_data(struct vk_data *data, VkFramebuffer framebuffer, + const VkAllocationCallbacks *ac) +{ + struct vk_framebuffer_data *const framebuffer_data = + vk_alloc(ac, sizeof(struct vk_framebuffer_data), + _Alignof(struct vk_framebuffer_data), + VK_SYSTEM_ALLOCATION_SCOPE_DEVICE); + add_obj_data(&data->framebuffers, (uint64_t)framebuffer, + framebuffer_data); + for (size_t i = 0; i < _countof(framebuffer_data->alternates); ++i) { + framebuffer_data->alternates[i] = VK_NULL_HANDLE; + } + framebuffer_data->color_attachment_mask = 0; + return framebuffer_data; +} + +static struct vk_framebuffer_data * +get_framebuffer_data(struct vk_data *data, VkFramebuffer framebuffer) +{ + return (struct vk_framebuffer_data *)get_obj_data( + &data->framebuffers, (uint64_t)framebuffer); +} + +static void remove_free_framebuffer_data(struct vk_data *data, + VkFramebuffer framebuffer, + const VkAllocationCallbacks *ac) +{ + struct vk_swap_data *const framebuffer_data = + (struct vk_swap_data *)remove_obj_data(&data->swaps, + (uint64_t)framebuffer); + vk_free(ac, framebuffer_data); +} + +/* ------------------------------------------------------------------------- */ + static struct vk_swap_data *alloc_swap_data(const VkAllocationCallbacks *ac) { struct vk_swap_data *const swap_data = vk_alloc( @@ -1468,6 +1551,8 @@ static VkResult VKAPI_CALL OBS_CreateDevice(VkPhysicalDevice phy_device, return VK_ERROR_OUT_OF_HOST_MEMORY; init_obj_list(&data->queues); + init_obj_list(&data->swap_views); + init_obj_list(&data->framebuffers); /* -------------------------------------------------------- */ /* create device and initialize hook data */ @@ -1502,6 +1587,10 @@ static VkResult VKAPI_CALL OBS_CreateDevice(VkPhysicalDevice phy_device, funcs_found = false; \ } \ } while (false) +#define GETADDR_OPTIONAL(x) \ + do { \ + dfuncs->x = (void *)gdpa(device, "vk" #x); \ + } while (false) GETADDR(GetDeviceProcAddr); GETADDR(DestroyDevice); @@ -1531,6 +1620,14 @@ static VkResult VKAPI_CALL OBS_CreateDevice(VkPhysicalDevice phy_device, GETADDR(DestroyFence); GETADDR(WaitForFences); GETADDR(ResetFences); + GETADDR(CreateImageView); + GETADDR(DestroyImageView); + GETADDR(CreateFramebuffer); + GETADDR(DestroyFramebuffer); + GETADDR(CmdBeginRenderPass); + GETADDR_OPTIONAL(CmdBeginRenderPass2KHR); + GETADDR_OPTIONAL(CmdBeginRenderPass2); +#undef GETADDR_OPTIONAL #undef GETADDR if (!funcs_found) { @@ -1725,6 +1822,328 @@ OBS_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *cinfo, return VK_SUCCESS; } +static VkResult VKAPI_CALL +OBS_CreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkImageView *pView) +{ + struct vk_data *const data = get_device_data(device); + const PFN_vkCreateImageView func = data->funcs.CreateImageView; + VkResult result = func(device, pCreateInfo, pAllocator, pView); + if (data->valid && (result == VK_SUCCESS)) { + struct vk_swap_data *swap = swap_walk_begin(data); + + while (swap) { + bool match = false; + for (uint32_t i = 0, count = swap->image_count; + i < count; ++i) { + match = swap->swap_images[i] == + pCreateInfo->image; + if (match) + break; + } + if (match) { + add_swap_view_data(data, *pView, pAllocator); + break; + } + + swap = swap_walk_next(swap); + } + + swap_walk_end(data); + } + + return result; +} + +static void VKAPI_CALL +OBS_DestroyImageView(VkDevice device, VkImageView imageView, + const VkAllocationCallbacks *pAllocator) +{ + struct vk_data *const data = get_device_data(device); + + if (data->valid && (imageView != VK_NULL_HANDLE)) { + struct vk_swap_view_data *swap_view_data = + get_swap_view_data(data, imageView); + if (swap_view_data) + remove_free_swap_view_data(data, imageView, pAllocator); + } + + data->funcs.DestroyImageView(device, imageView, pAllocator); +} + +static void generate_framebuffer_variants( + PFN_vkCreateFramebuffer func, VkDevice device, + const VkFramebufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + struct vk_framebuffer_data *framebuffer_data, + const VkFramebufferAttachmentsCreateInfo *pAttachmentsCreateInfo, + uint32_t colorCount) +{ + const uint32_t variantCount = 1 << colorCount; + for (uint32_t colorMask = 0; colorMask < variantCount; ++colorMask) { + VkImageUsageFlags pPreviousUsage[OBS_COLOR_ATTACHMENT_LIMIT]; + uint32_t colorIndex = 0; + for (uint32_t infoIndex = 0, + count = pAttachmentsCreateInfo + ->attachmentImageInfoCount; + infoIndex < count; ++infoIndex) { + const VkFramebufferAttachmentImageInfo *const pInfo = + &pAttachmentsCreateInfo + ->pAttachmentImageInfos[infoIndex]; + const VkImageUsageFlags usage = pInfo->usage; + if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { + pPreviousUsage[colorIndex] = usage; + if (colorMask & (1 << colorIndex)) { + ((VkFramebufferAttachmentImageInfo *) + pInfo) + ->usage |= + VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + } + + ++colorIndex; + if (colorIndex == OBS_COLOR_ATTACHMENT_LIMIT) + break; + } + } + + VkFramebuffer framebuffer; + const VkResult result = + func(device, pCreateInfo, pAllocator, &framebuffer); + if (result == VK_SUCCESS) + framebuffer_data->alternates[colorMask] = framebuffer; + + colorIndex = 0; + for (uint32_t infoIndex = 0, + count = pAttachmentsCreateInfo + ->attachmentImageInfoCount; + infoIndex < count; ++infoIndex) { + const VkFramebufferAttachmentImageInfo *const pInfo = + &pAttachmentsCreateInfo + ->pAttachmentImageInfos[infoIndex]; + if (pInfo->usage & + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { + if (colorMask & (1 << colorIndex)) { + ((VkFramebufferAttachmentImageInfo *) + pInfo) + ->usage = + pPreviousUsage[colorIndex]; + } + + ++colorIndex; + if (colorIndex == OBS_COLOR_ATTACHMENT_LIMIT) + break; + } + } + } +} + +static VkResult VKAPI_CALL OBS_CreateFramebuffer( + VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer) +{ + struct vk_data *const data = get_device_data(device); + const PFN_vkCreateFramebuffer func = data->funcs.CreateFramebuffer; + VkResult result = func(device, pCreateInfo, pAllocator, pFramebuffer); + if (data->valid && (result == VK_SUCCESS) && + (pCreateInfo->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT)) { + struct vk_framebuffer_data *const framebuffer_data = + add_framebuffer_data(data, *pFramebuffer, pAllocator); + const void *pCurrent = pCreateInfo->pNext; + while (pCurrent) { + VkBaseInStructure baseIn; + memcpy(&baseIn, pCurrent, sizeof(baseIn)); + if (baseIn.sType == + VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO) { + uint32_t attachmentMask = 0; + uint32_t colorCount = 0; + const VkFramebufferAttachmentsCreateInfo *const + pAttachmentsCreateInfo = pCurrent; + for (uint32_t + infoIndex = 0, + count = min( + sizeof(attachmentMask) * 8, + pAttachmentsCreateInfo + ->attachmentImageInfoCount); + infoIndex < count; ++infoIndex) { + if (pAttachmentsCreateInfo + ->pAttachmentImageInfos + [infoIndex] + .usage & + VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { + attachmentMask |= 1 + << infoIndex; + ++colorCount; + if (colorCount == + OBS_COLOR_ATTACHMENT_LIMIT) + break; + } + } + + generate_framebuffer_variants( + func, device, pCreateInfo, pAllocator, + framebuffer_data, + pAttachmentsCreateInfo, colorCount); + framebuffer_data->color_attachment_mask = + attachmentMask; + break; + } + + pCurrent = baseIn.pNext; + } + } + + return result; +} + +static void VKAPI_CALL +OBS_DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, + const VkAllocationCallbacks *pAllocator) +{ + struct vk_data *const data = get_device_data(device); + struct vk_device_funcs *const funcs = &data->funcs; + + if (data->valid && (framebuffer != VK_NULL_HANDLE)) { + struct vk_framebuffer_data *framebuffer_data = + get_framebuffer_data(data, framebuffer); + if (framebuffer_data) { + for (size_t i = 0; + i < _countof(framebuffer_data->alternates); ++i) { + if (framebuffer_data->alternates[i] != + VK_NULL_HANDLE) { + funcs->DestroyFramebuffer( + device, + framebuffer_data->alternates[i], + pAllocator); + framebuffer_data->alternates[i] = + VK_NULL_HANDLE; + } + } + + remove_free_framebuffer_data(data, framebuffer, + pAllocator); + } + } + + funcs->DestroyFramebuffer(device, framebuffer, pAllocator); +} + +static const VkRenderPassBeginInfo * +process_render_pass_begin_info(const VkRenderPassBeginInfo *pRenderPassBegin, + VkRenderPassBeginInfo *pAlternateBegin, + struct vk_data *data) +{ + const void *pCurrent = pRenderPassBegin->pNext; + while (pCurrent) { + VkBaseInStructure baseIn; + memcpy(&baseIn, pCurrent, sizeof(baseIn)); + if (baseIn.sType == + VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO) { + struct vk_framebuffer_data *const framebuffer_data = + get_framebuffer_data( + data, pRenderPassBegin->framebuffer); + if (framebuffer_data) { + const VkRenderPassAttachmentBeginInfo + *const pAttachmentInfo = pCurrent; + uint32_t swapMask = 0; + uint32_t colorIndex = 0; + for (uint32_t infoIndex = 0, + count = pAttachmentInfo + ->attachmentCount; + infoIndex < count; ++infoIndex) { + if (framebuffer_data + ->color_attachment_mask & + (1 << infoIndex)) { + if (get_swap_view_data( + data, + pAttachmentInfo->pAttachments + [infoIndex])) { + swapMask |= + 1 << colorIndex; + } + + ++colorIndex; + if (colorIndex == + OBS_COLOR_ATTACHMENT_LIMIT) + break; + } + } + + if (swapMask > 0) { + VkFramebuffer alternate = + framebuffer_data + ->alternates[swapMask]; + if (alternate != VK_NULL_HANDLE) { + *pAlternateBegin = + *pRenderPassBegin; + pAlternateBegin->framebuffer = + framebuffer_data->alternates + [swapMask]; + pRenderPassBegin = + pAlternateBegin; + } + } + } + + break; + } + + pCurrent = baseIn.pNext; + } + + return pRenderPassBegin; +} + +static void VKAPI_CALL +OBS_CmdBeginRenderPass(VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo *pRenderPassBegin, + VkSubpassContents contents) +{ + struct vk_data *const data = + get_device_data_by_command_buffer(commandBuffer); + if (data->valid) { + VkRenderPassBeginInfo alternateBegin; + pRenderPassBegin = process_render_pass_begin_info( + pRenderPassBegin, &alternateBegin, data); + } + + data->funcs.CmdBeginRenderPass(commandBuffer, pRenderPassBegin, + contents); +} + +static void VKAPI_CALL +OBS_CmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo *pRenderPassBegin, + const VkSubpassBeginInfo *pSubpassBeginInfo) +{ + struct vk_data *const data = + get_device_data_by_command_buffer(commandBuffer); + if (data->valid) { + VkRenderPassBeginInfo alternateBegin; + pRenderPassBegin = process_render_pass_begin_info( + pRenderPassBegin, &alternateBegin, data); + } + + data->funcs.CmdBeginRenderPass2KHR(commandBuffer, pRenderPassBegin, + pSubpassBeginInfo); +} + +static void VKAPI_CALL +OBS_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, + const VkRenderPassBeginInfo *pRenderPassBegin, + const VkSubpassBeginInfo *pSubpassBeginInfo) +{ + struct vk_data *const data = + get_device_data_by_command_buffer(commandBuffer); + if (data->valid) { + VkRenderPassBeginInfo alternateBegin; + pRenderPassBegin = process_render_pass_begin_info( + pRenderPassBegin, &alternateBegin, data); + } + + data->funcs.CmdBeginRenderPass2(commandBuffer, pRenderPassBegin, + pSubpassBeginInfo); +} + static void VKAPI_CALL OBS_DestroySwapchainKHR(VkDevice device, VkSwapchainKHR sc, const VkAllocationCallbacks *ac) @@ -1797,6 +2216,13 @@ static PFN_vkVoidFunction VKAPI_CALL OBS_GetDeviceProcAddr(VkDevice device, GETPROCADDR_IF_SUPPORTED(CreateSwapchainKHR); GETPROCADDR_IF_SUPPORTED(DestroySwapchainKHR); GETPROCADDR_IF_SUPPORTED(QueuePresentKHR); + GETPROCADDR(CreateImageView); + GETPROCADDR(DestroyImageView); + GETPROCADDR(CreateFramebuffer); + GETPROCADDR(DestroyFramebuffer); + GETPROCADDR(CmdBeginRenderPass); + GETPROCADDR_IF_SUPPORTED(CmdBeginRenderPass2KHR); + GETPROCADDR_IF_SUPPORTED(CmdBeginRenderPass2); if (funcs->GetDeviceProcAddr == NULL) return NULL; diff --git a/plugins/win-capture/graphics-hook/vulkan-capture.h b/plugins/win-capture/graphics-hook/vulkan-capture.h index aee49580dbee41..0bb3af45ba4db4 100644 --- a/plugins/win-capture/graphics-hook/vulkan-capture.h +++ b/plugins/win-capture/graphics-hook/vulkan-capture.h @@ -42,6 +42,13 @@ struct vk_device_funcs { DEF_FUNC(DestroyFence); DEF_FUNC(WaitForFences); DEF_FUNC(ResetFences); + DEF_FUNC(CreateImageView); + DEF_FUNC(DestroyImageView); + DEF_FUNC(CreateFramebuffer); + DEF_FUNC(DestroyFramebuffer); + DEF_FUNC(CmdBeginRenderPass); + DEF_FUNC(CmdBeginRenderPass2KHR); + DEF_FUNC(CmdBeginRenderPass2); }; #undef DEF_FUNC From e32c2c14273ff1e60f319c1de47130342945b9c3 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 10 Sep 2022 11:29:54 -0700 Subject: [PATCH 0447/2225] libobs: Add callback for main texture rendered Useful for redirecting main texture to DeckLink output for example. --- docs/sphinx/reference-core.rst | 8 ++++++++ libobs/obs-internal.h | 6 ++++++ libobs/obs-video.c | 15 ++++++++++++--- libobs/obs.c | 20 ++++++++++++++++++++ libobs/obs.h | 5 +++++ 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index d07e1a1d819371..82802ab8192c45 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -574,6 +574,14 @@ Video, Audio, and Graphics --------------------- +.. function:: void obs_add_main_rendered_callback(void (*rendered)(void *param), void *param) + void obs_remove_main_rendered_callback(void (*rendered)(void *param), void *param) + + Adds/removes a main rendered callback. Allows using the result of + the main stream/recording output. + +--------------------- + .. function:: void obs_add_raw_video_callback(const struct video_scale_info *conversion, void (*callback)(void *param, struct video_data *frame), void *param) void obs_remove_raw_video_callback(void (*callback)(void *param, struct video_data *frame), void *param) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 8a0009fc0f905a..a799c7dc720b45 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -67,6 +67,11 @@ struct draw_callback { void *param; }; +struct rendered_callback { + void (*rendered)(void *param); + void *param; +}; + /* ------------------------------------------------------------------------- */ /* validity checks */ @@ -401,6 +406,7 @@ struct obs_core_data { pthread_mutex_t audio_sources_mutex; pthread_mutex_t draw_callbacks_mutex; DARRAY(struct draw_callback) draw_callbacks; + DARRAY(struct rendered_callback) rendered_callbacks; DARRAY(struct tick_callback) tick_callbacks; struct obs_view main_view; diff --git a/libobs/obs-video.c b/libobs/obs-video.c index 0b922cb86b386b..313d02e20a6cb6 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -144,9 +144,8 @@ static inline void render_main_texture(struct obs_core_video_mix *video) pthread_mutex_lock(&obs->data.draw_callbacks_mutex); for (size_t i = obs->data.draw_callbacks.num; i > 0; i--) { - struct draw_callback *callback; - callback = obs->data.draw_callbacks.array + (i - 1); - + struct draw_callback *const callback = + obs->data.draw_callbacks.array + (i - 1); callback->draw(callback->param, base_width, base_height); } @@ -156,6 +155,16 @@ static inline void render_main_texture(struct obs_core_video_mix *video) video->texture_rendered = true; + pthread_mutex_lock(&obs->data.draw_callbacks_mutex); + + for (size_t i = 0; i < obs->data.rendered_callbacks.num; ++i) { + struct rendered_callback *const callback = + &obs->data.rendered_callbacks.array[i]; + callback->rendered(callback->param); + } + + pthread_mutex_unlock(&obs->data.draw_callbacks_mutex); + GS_DEBUG_MARKER_END(); profile_end(render_main_texture_name); } diff --git a/libobs/obs.c b/libobs/obs.c index 73e281eaa83733..f02d85801061f1 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1076,6 +1076,7 @@ static void obs_free_data(void) pthread_mutex_destroy(&data->services_mutex); pthread_mutex_destroy(&data->draw_callbacks_mutex); da_free(data->draw_callbacks); + da_free(data->rendered_callbacks); da_free(data->tick_callbacks); obs_data_release(data->private_data); @@ -3069,6 +3070,25 @@ void obs_remove_main_render_callback(void (*draw)(void *param, uint32_t cx, pthread_mutex_unlock(&obs->data.draw_callbacks_mutex); } +void obs_add_main_rendered_callback(void (*rendered)(void *param), void *param) +{ + struct rendered_callback data = {rendered, param}; + + pthread_mutex_lock(&obs->data.draw_callbacks_mutex); + da_insert(obs->data.rendered_callbacks, 0, &data); + pthread_mutex_unlock(&obs->data.draw_callbacks_mutex); +} + +void obs_remove_main_rendered_callback(void (*rendered)(void *param), + void *param) +{ + struct rendered_callback data = {rendered, param}; + + pthread_mutex_lock(&obs->data.draw_callbacks_mutex); + da_erase_item(obs->data.rendered_callbacks, &data); + pthread_mutex_unlock(&obs->data.draw_callbacks_mutex); +} + uint32_t obs_get_total_frames(void) { return obs->video.total_frames; diff --git a/libobs/obs.h b/libobs/obs.h index 2ba618978b9d31..3e31a59fa6ec26 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -841,6 +841,11 @@ EXPORT void obs_add_main_render_callback(void (*draw)(void *param, uint32_t cx, EXPORT void obs_remove_main_render_callback( void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param); +EXPORT void obs_add_main_rendered_callback(void (*rendered)(void *param), + void *param); +EXPORT void obs_remove_main_rendered_callback(void (*rendered)(void *param), + void *param); + EXPORT void obs_add_raw_video_callback( const struct video_scale_info *conversion, void (*callback)(void *param, struct video_data *frame), void *param); From ddee7ff6feeea36ac449dc6077c6123f7889dc4e Mon Sep 17 00:00:00 2001 From: jpark37 Date: Wed, 7 Sep 2022 21:36:22 -0700 Subject: [PATCH 0448/2225] decklink-output-ui: Align render output paths Use the render path that preview uses for non-preview rendering, which uses the GPU to rescale rather than the CPU and pulls the image from the GPU before pixel format conversion happens. This means it's no longer necessary to select BGRA to use the keyer anymore. --- .../decklink-output-ui/decklink-ui-main.cpp | 239 +++++++++++------- .../decklink-output-ui/forms/output.ui | 22 +- 2 files changed, 151 insertions(+), 110 deletions(-) diff --git a/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp b/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp index a937255e580b12..29819de179ba3f 100644 --- a/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp +++ b/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp @@ -19,11 +19,9 @@ bool shutting_down = false; bool main_output_running = false; bool preview_output_running = false; -obs_output_t *output; - constexpr size_t STAGE_BUFFER_COUNT = 3; -struct preview_output { +struct decklink_ui_output { bool enabled; obs_source_t *current_source; obs_output_t *output; @@ -40,7 +38,7 @@ struct preview_output { obs_video_info ovi; }; -static struct preview_output context = {0}; +static struct decklink_ui_output context = {0}; OBSData load_settings() { @@ -58,10 +56,28 @@ OBSData load_settings() return nullptr; } +static void decklink_ui_tick(void *param, float sec); +static void decklink_ui_render(void *param); + void output_stop() { - obs_output_stop(output); - obs_output_release(output); + obs_output_stop(context.output); + obs_output_release(context.output); + + obs_remove_main_rendered_callback(decklink_ui_render, &context); + + obs_enter_graphics(); + for (gs_stagesurf_t *&surf : context.stagesurfaces) { + gs_stagesurface_destroy(surf); + surf = nullptr; + } + gs_texrender_destroy(context.texrender); + context.texrender = nullptr; + obs_leave_graphics(); + + video_output_close(context.video_queue); + obs_remove_tick_callback(decklink_ui_tick, &context); + main_output_running = false; if (!shutting_down) @@ -73,10 +89,51 @@ void output_start() OBSData settings = load_settings(); if (settings != nullptr) { - output = obs_output_create("decklink_output", "decklink_output", - settings, NULL); + obs_add_tick_callback(decklink_ui_tick, &context); + context.output = obs_output_create( + "decklink_output", "decklink_output", settings, NULL); + + obs_get_video_info(&context.ovi); - bool started = obs_output_start(output); + const struct video_scale_info *const conversion = + obs_output_get_video_conversion(context.output); + const uint32_t width = conversion->width; + const uint32_t height = conversion->height; + + obs_enter_graphics(); + context.texrender_premultiplied = nullptr; + context.texrender = gs_texrender_create(GS_BGRA, GS_ZS_NONE); + for (gs_stagesurf_t *&surf : context.stagesurfaces) + surf = gs_stagesurface_create(width, height, GS_BGRA); + obs_leave_graphics(); + + for (bool &written : context.surf_written) + written = false; + + context.stage_index = 0; + + const video_output_info *mainVOI = + video_output_get_info(obs_get_video()); + + video_output_info vi = {0}; + vi.format = VIDEO_FORMAT_BGRA; + vi.width = width; + vi.height = height; + vi.fps_den = context.ovi.fps_den; + vi.fps_num = context.ovi.fps_num; + vi.cache_size = 16; + vi.colorspace = mainVOI->colorspace; + vi.range = VIDEO_RANGE_FULL; + vi.name = "decklink_output"; + + video_output_open(&context.video_queue, &vi); + + context.current_source = nullptr; + obs_add_main_rendered_callback(decklink_ui_render, &context); + + obs_output_set_media(context.output, context.video_queue, + obs_get_audio()); + bool started = obs_output_start(context.output); main_output_running = started; @@ -113,13 +170,12 @@ OBSData load_preview_settings() } void on_preview_scene_changed(enum obs_frontend_event event, void *param); -void render_preview_source(void *param, uint32_t cx, uint32_t cy); -static void preview_tick(void *param, float sec) +static void decklink_ui_tick(void *param, float sec) { UNUSED_PARAMETER(sec); - auto ctx = (struct preview_output *)param; + auto ctx = (struct decklink_ui_output *)param; if (ctx->texrender_premultiplied) gs_texrender_reset(ctx->texrender_premultiplied); @@ -132,7 +188,7 @@ void preview_output_stop() obs_output_stop(context.output); obs_output_release(context.output); - obs_remove_main_render_callback(render_preview_source, &context); + obs_remove_main_rendered_callback(decklink_ui_render, &context); obs_frontend_remove_event_callback(on_preview_scene_changed, &context); obs_source_release(context.current_source); @@ -149,7 +205,7 @@ void preview_output_stop() obs_leave_graphics(); video_output_close(context.video_queue); - obs_remove_tick_callback(preview_tick, &context); + obs_remove_tick_callback(decklink_ui_tick, &context); preview_output_running = false; @@ -162,7 +218,7 @@ void preview_output_start() OBSData settings = load_preview_settings(); if (settings != nullptr) { - obs_add_tick_callback(preview_tick, &context); + obs_add_tick_callback(decklink_ui_tick, &context); context.output = obs_output_create("decklink_output", "decklink_preview_output", settings, NULL); @@ -212,7 +268,7 @@ void preview_output_start() context.current_source = obs_frontend_get_current_scene(); } - obs_add_main_render_callback(render_preview_source, &context); + obs_add_main_rendered_callback(decklink_ui_render, &context); obs_output_set_media(context.output, context.video_queue, obs_get_audio()); @@ -237,7 +293,7 @@ void preview_output_toggle() void on_preview_scene_changed(enum obs_frontend_event event, void *param) { - auto ctx = (struct preview_output *)param; + auto ctx = (struct decklink_ui_output *)param; switch (event) { case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED: case OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED: @@ -259,27 +315,33 @@ void on_preview_scene_changed(enum obs_frontend_event event, void *param) } } -void render_preview_source(void *param, uint32_t cx, uint32_t cy) +static void decklink_ui_render(void *param) { - UNUSED_PARAMETER(cx); - UNUSED_PARAMETER(cy); + auto *const ctx = (struct decklink_ui_output *)param; - auto ctx = (struct preview_output *)param; + uint32_t width = 0; + uint32_t height = 0; + gs_texture_t *tex = nullptr; - if (!ctx->current_source) - return; + if (main_output_running) { + tex = obs_get_main_texture(); + if (!tex) + return; - const uint32_t width = obs_source_get_base_width(ctx->current_source); - const uint32_t height = obs_source_get_base_height(ctx->current_source); + width = gs_texture_get_width(tex); + height = gs_texture_get_height(tex); + } else if (preview_output_running) { + if (!ctx->current_source) + return; - const struct video_scale_info *const conversion = - obs_output_get_video_conversion(context.output); - const uint32_t scaled_width = conversion->width; - const uint32_t scaled_height = conversion->height; + width = obs_source_get_base_width(ctx->current_source); + height = obs_source_get_base_height(ctx->current_source); + + gs_texrender_t *const texrender_premultiplied = + ctx->texrender_premultiplied; + if (!gs_texrender_begin(texrender_premultiplied, width, height)) + return; - gs_texrender_t *const texrender_premultiplied = - ctx->texrender_premultiplied; - if (gs_texrender_begin(texrender_premultiplied, width, height)) { struct vec4 background; vec4_zero(&background); @@ -295,71 +357,70 @@ void render_preview_source(void *param, uint32_t cx, uint32_t cy) gs_blend_state_pop(); gs_texrender_end(texrender_premultiplied); - if (gs_texrender_begin(ctx->texrender, scaled_width, - scaled_height)) { - const bool previous = gs_framebuffer_srgb_enabled(); - gs_enable_framebuffer_srgb(true); - gs_enable_blending(false); - - gs_texture_t *const tex = gs_texrender_get_texture( - texrender_premultiplied); - gs_effect_t *const effect = - obs_get_base_effect(OBS_EFFECT_DEFAULT); - gs_effect_set_texture_srgb( - gs_effect_get_param_by_name(effect, "image"), - tex); - while (gs_effect_loop(effect, "DrawAlphaDivide")) { - gs_draw_sprite(tex, 0, 0, 0); - } + tex = gs_texrender_get_texture(texrender_premultiplied); + } else { + return; + } + + const struct video_scale_info *const conversion = + obs_output_get_video_conversion(context.output); + const uint32_t scaled_width = conversion->width; + const uint32_t scaled_height = conversion->height; - gs_enable_blending(true); - gs_enable_framebuffer_srgb(previous); + if (!gs_texrender_begin(ctx->texrender, scaled_width, scaled_height)) + return; - gs_texrender_end(ctx->texrender); - } + const bool previous = gs_framebuffer_srgb_enabled(); + gs_enable_framebuffer_srgb(true); + gs_enable_blending(false); - const size_t write_stage_index = ctx->stage_index; - gs_stage_texture(ctx->stagesurfaces[write_stage_index], - gs_texrender_get_texture(ctx->texrender)); - ctx->surf_written[write_stage_index] = true; - - const size_t read_stage_index = - (write_stage_index + 1) % STAGE_BUFFER_COUNT; - if (ctx->surf_written[read_stage_index]) { - struct video_frame output_frame; - if (video_output_lock_frame(ctx->video_queue, - &output_frame, 1, - os_gettime_ns())) { - gs_stagesurf_t *const read_surf = - ctx->stagesurfaces[read_stage_index]; - if (gs_stagesurface_map(read_surf, - &ctx->video_data, - &ctx->video_linesize)) { - uint32_t linesize = - output_frame.linesize[0]; - for (uint32_t i = 0; i < scaled_height; - i++) { - uint32_t dst_offset = - linesize * i; - uint32_t src_offset = - ctx->video_linesize * i; - memcpy(output_frame.data[0] + - dst_offset, - ctx->video_data + - src_offset, - linesize); - } - - gs_stagesurface_unmap(read_surf); - ctx->video_data = nullptr; + gs_effect_t *const effect = obs_get_base_effect(OBS_EFFECT_DEFAULT); + gs_effect_set_texture_srgb(gs_effect_get_param_by_name(effect, "image"), + tex); + while (gs_effect_loop(effect, "DrawAlphaDivide")) { + gs_draw_sprite(tex, 0, 0, 0); + } + + gs_enable_blending(true); + gs_enable_framebuffer_srgb(previous); + + gs_texrender_end(ctx->texrender); + + const size_t write_stage_index = ctx->stage_index; + gs_stage_texture(ctx->stagesurfaces[write_stage_index], + gs_texrender_get_texture(ctx->texrender)); + ctx->surf_written[write_stage_index] = true; + + const size_t read_stage_index = + (write_stage_index + 1) % STAGE_BUFFER_COUNT; + if (ctx->surf_written[read_stage_index]) { + struct video_frame output_frame; + if (video_output_lock_frame(ctx->video_queue, &output_frame, 1, + os_gettime_ns())) { + gs_stagesurf_t *const read_surf = + ctx->stagesurfaces[read_stage_index]; + if (gs_stagesurface_map(read_surf, &ctx->video_data, + &ctx->video_linesize)) { + uint32_t linesize = output_frame.linesize[0]; + for (uint32_t i = 0; i < scaled_height; i++) { + uint32_t dst_offset = linesize * i; + uint32_t src_offset = + ctx->video_linesize * i; + memcpy(output_frame.data[0] + + dst_offset, + ctx->video_data + src_offset, + linesize); } - video_output_unlock_frame(ctx->video_queue); + gs_stagesurface_unmap(read_surf); + ctx->video_data = nullptr; } - } - ctx->stage_index = read_stage_index; + video_output_unlock_frame(ctx->video_queue); + } } + + ctx->stage_index = read_stage_index; } void addOutputUI(void) diff --git a/UI/frontend-plugins/decklink-output-ui/forms/output.ui b/UI/frontend-plugins/decklink-output-ui/forms/output.ui index 39971d35d90ad6..945bf5eb6d7eea 100644 --- a/UI/frontend-plugins/decklink-output-ui/forms/output.ui +++ b/UI/frontend-plugins/decklink-output-ui/forms/output.ui @@ -7,7 +7,7 @@ 0 0 785 - 497 + 484
@@ -106,26 +106,6 @@
- - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Keyer output requires BGRA mode in advanced settings. - - - From 19acb8cc5fbfa6c168f788ba45499182be45344a Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 25 Mar 2023 08:48:51 +0100 Subject: [PATCH 0449/2225] rtmp-services: Fix supported audio codecs in rtmp_common --- plugins/rtmp-services/rtmp-common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index ea54a126cc0e6e..b9c96b2c703534 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -1008,7 +1008,7 @@ static const char **rtmp_common_get_supported_audio_codecs(void *data) json_t *json_audio_codecs = json_object_get(json_service, "supported audio codecs"); - if (json_is_array(json_audio_codecs)) { + if (!json_is_array(json_audio_codecs)) { goto fail; } From 67c7cfecb1ac31204c72f81e8cc4e73de75a9dc0 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 24 Mar 2023 19:20:40 +0100 Subject: [PATCH 0450/2225] UI: Remove outdated NSIS data --- UI/installer/OBSBanner.bmp | Bin 206038 -> 0 bytes UI/installer/OBSHeader.bmp | Bin 34254 -> 0 bytes UI/installer/mp-installer.nsi | 501 ---------------------------------- 3 files changed, 501 deletions(-) delete mode 100644 UI/installer/OBSBanner.bmp delete mode 100644 UI/installer/OBSHeader.bmp delete mode 100644 UI/installer/mp-installer.nsi diff --git a/UI/installer/OBSBanner.bmp b/UI/installer/OBSBanner.bmp deleted file mode 100644 index b1c01c6b78d00dd0394457baa7dbbaf6795384eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206038 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 diff --git a/UI/installer/mp-installer.nsi b/UI/installer/mp-installer.nsi deleted file mode 100644 index df34f8c38df646..00000000000000 --- a/UI/installer/mp-installer.nsi +++ /dev/null @@ -1,501 +0,0 @@ -; -; NSIS Installer Script for OBS Studio, https://obsproject.com/ -; -; This installer script is designed only for the release process -; of OBS Studio. It requires a lot of files to be in exactly the -; right places. If you're making a fork, it's strongly suggested -; that you make your own installer. -; -; If you choose to use this script anyway, be absolutely sure you -; have replaced every OBS specific check, whether process names, -; application names, files, registry entries, etc. -; -; To auto-install required Visual C++ components, download from -; https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0 -; and copy to this directory (UI/installer/) -; -; This script also requires OBSInstallerUtils for additional -; functions. You can find it at -; https://github.com/notr1ch/OBSInstallerUtils - -Unicode true -ManifestDPIAware true - -; Define your application name -!define APPNAME "OBS Studio" - -!ifndef APPVERSION -!define APPVERSION "28.0.0" -!define SHORTVERSION "28.0.0" -!endif - -!define APPNAMEANDVERSION "${APPNAME} ${SHORTVERSION}" - -; Additional script dependencies -!include WinVer.nsh -!include x64.nsh - -; Main Install settings -Name "${APPNAMEANDVERSION}" -!ifdef INSTALL64 -InstallDir "$PROGRAMFILES64\obs-studio" -!else -InstallDir "$PROGRAMFILES32\obs-studio" -!endif -InstallDirRegKey HKLM "Software\${APPNAME}" "" - -!ifdef INSTALL64 - OutFile "OBS-Studio-${SHORTVERSION}-Full-Installer-x64.exe" -!else - OutFile "OBS-Studio-${SHORTVERSION}-Full-Installer-x86.exe" -!endif - -; Use compression -SetCompressor /SOLID LZMA - -; Need Admin -RequestExecutionLevel admin - -; Modern interface settings -!include "MUI.nsh" - -!define MUI_ICON "..\..\cmake\winrc\obs-studio.ico" -!define MUI_HEADERIMAGE_BITMAP "OBSHeader.bmp" -!define MUI_WELCOMEFINISHPAGE_BITMAP "OBSBanner.bmp" - -!define MUI_ABORTWARNING -!define MUI_FINISHPAGE_TITLE "Completed Setup" -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_TEXT "Launch ${APPNAMEANDVERSION}" -!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchOBS" -!define MUI_FINISHPAGE_SHOWREADME "https://github.com/obsproject/obs-studio/releases/${APPVERSION}" -!define MUI_FINISHPAGE_SHOWREADME_TEXT "View Release Notes" -!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED -!define MUI_FINISHPAGE_LINK "New to OBS? Check out our 4-step Quickstart Guide." -!define MUI_FINISHPAGE_LINK_LOCATION "https://obsproject.com/wiki/OBS-Studio-Quickstart" -!define MUI_FINISHPAGE_LINK_COLOR 000080 - -!define MUI_WELCOMEPAGE_TEXT "This setup will guide you through installing OBS Studio.\n\nIt is recommended that you close all other applications before starting, including OBS Studio. This will make it possible to update relevant files without having to reboot your computer.\n\nClick Next to continue." - -!define MUI_PAGE_CUSTOMFUNCTION_LEAVE PreReqCheck - -!define MUI_HEADERIMAGE -!define MUI_PAGE_HEADER_TEXT "License Information" -!define MUI_PAGE_HEADER_SUBTEXT "Please review the license terms before installing OBS Studio." -!define MUI_LICENSEPAGE_TEXT_TOP "Press Page Down or scroll to see the rest of the license." -!define MUI_LICENSEPAGE_TEXT_BOTTOM " " -!define MUI_LICENSEPAGE_BUTTON "&Next >" - -!insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE "new\core\data\obs-studio\license\gplv2.txt" -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH - -!define MUI_COMPONENTSPAGE_TEXT_TOP "Check the components you want to uninstall. Keeping Settings unchecked is recommended." -!define MUI_COMPONENTSPAGE_TEXT_COMPLIST "Select components:" - -;!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_COMPONENTS -!insertmacro MUI_UNPAGE_INSTFILES - -; Set languages (first is default language) -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_RESERVEFILE_LANGDLL - -Function PreReqCheck -!ifdef INSTALL64 - ${if} ${RunningX64} - ${Else} - IfSilent +1 +3 - SetErrorLevel 3 - Quit - MessageBox MB_OK|MB_ICONSTOP "${APPNAME} is not compatible with your operating system's architecture." - ${EndIf} - ; Abort on 8.1 or lower -!endif - - ${If} ${AtLeastWin10} - ${Else} - IfSilent +1 +3 - SetErrorLevel 3 - Quit - MessageBox MB_OK|MB_ICONSTOP "${APPNAME} requires Windows 10 or higher and cannot be installed on this version of Windows." - Quit - ${EndIf} - - ; DirectX Version Check - ClearErrors - GetDLLVersion "D3DCompiler_33.dll" $R0 $R1 - IfErrors dxMissing33 dxOK - dxMissing33: - ClearErrors - GetDLLVersion "D3DCompiler_34.dll" $R0 $R1 - IfErrors dxMissing34 dxOK - dxMissing34: - ClearErrors - GetDLLVersion "D3DCompiler_35.dll" $R0 $R1 - IfErrors dxMissing35 dxOK - dxMissing35: - ClearErrors - GetDLLVersion "D3DCompiler_36.dll" $R0 $R1 - IfErrors dxMissing36 dxOK - dxMissing36: - ClearErrors - GetDLLVersion "D3DCompiler_37.dll" $R0 $R1 - IfErrors dxMissing37 dxOK - dxMissing37: - ClearErrors - GetDLLVersion "D3DCompiler_38.dll" $R0 $R1 - IfErrors dxMissing38 dxOK - dxMissing38: - ClearErrors - GetDLLVersion "D3DCompiler_39.dll" $R0 $R1 - IfErrors dxMissing39 dxOK - dxMissing39: - ClearErrors - GetDLLVersion "D3DCompiler_40.dll" $R0 $R1 - IfErrors dxMissing40 dxOK - dxMissing40: - ClearErrors - GetDLLVersion "D3DCompiler_41.dll" $R0 $R1 - IfErrors dxMissing41 dxOK - dxMissing41: - ClearErrors - GetDLLVersion "D3DCompiler_42.dll" $R0 $R1 - IfErrors dxMissing42 dxOK - dxMissing42: - ClearErrors - GetDLLVersion "D3DCompiler_43.dll" $R0 $R1 - IfErrors dxMissing43 dxOK - dxMissing43: - ClearErrors - GetDLLVersion "D3DCompiler_47.dll" $R0 $R1 - IfErrors dxMissing47 dxOK - dxMissing47: - ClearErrors - GetDLLVersion "D3DCompiler_49.dll" $R0 $R1 - IfErrors dxMissing49 dxOK - dxMissing49: - IfSilent +1 +3 - SetErrorLevel 4 - Quit - MessageBox MB_YESNO|MB_ICONEXCLAMATION "Your system is missing DirectX components that ${APPNAME} requires. Would you like to download them?" IDYES dxtrue IDNO dxfalse - dxtrue: - ExecShell "open" "https://obsproject.com/go/dxwebsetup" - dxfalse: - Quit - dxOK: - ClearErrors - - ; Check previous instance - check32BitRunning: - OBSInstallerUtils::IsProcessRunning "obs32.exe" - IntCmp $R0 1 0 notRunning1 - IfSilent +1 +3 - SetErrorLevel 5 - Quit - MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${APPNAME} is already running. Please close it first before installing a new version." /SD IDCANCEL IDRETRY check32BitRunning - Quit - notRunning1: - - ${if} ${RunningX64} - check64BitRunning: - OBSInstallerUtils::IsProcessRunning "obs64.exe" - IntCmp $R0 1 0 notRunning2 - IfSilent +1 +3 - SetErrorLevel 5 - Quit - MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${APPNAME} is already running. Please close it first before installing a new version." /SD IDCANCEL IDRETRY check64BitRunning - Quit - notRunning2: - ${endif} -FunctionEnd - -Var dllFilesInUse - -Function checkDLLs - OBSInstallerUtils::ResetInUseFileChecks -!ifdef INSTALL64 - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\bin\64bit\avutil-57.dll" - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\bin\64bit\swscale-6.dll" -!else - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\bin\32bit\avutil-57.dll" - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\bin\32bit\swscale-6.dll" -!endif - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\data\obs-plugins\win-capture\graphics-hook32.dll" - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\data\obs-plugins\win-capture\graphics-hook64.dll" - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module32.dll" - OBSInstallerUtils::AddInUseFileCheck "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module64.dll" - OBSInstallerUtils::AddInUseFileCheck "$APPDATA\obs-studio-hook\graphics-hook32.dll" - OBSInstallerUtils::AddInUseFileCheck "$APPDATA\obs-studio-hook\graphics-hook64.dll" - OBSInstallerUtils::GetAppNameForInUseFiles - StrCpy $dllFilesInUse "$R0" -FunctionEnd - -Function checkFilesInUse - retryFileChecks: - Call checkDLLs - StrCmp $dllFilesInUse "" dllsNotInUse - IfSilent +1 +3 - SetErrorLevel 6 - Quit - MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "OBS files are being used by the following applications:$\r$\n$\r$\n$dllFilesInUse$\r$\nPlease close these applications to continue setup." /SD IDCANCEL IDRETRY retryFileChecks - Quit - - dllsNotInUse: -FunctionEnd - -Function LaunchOBS -!ifdef INSTALL64 - Exec '"$WINDIR\explorer.exe" "$SMPROGRAMS\OBS Studio\OBS Studio (64bit).lnk"' -!else - Exec '"$WINDIR\explorer.exe" "$SMPROGRAMS\OBS Studio\OBS Studio (32bit).lnk"' -!endif -FunctionEnd - -Section "OBS Studio" SecCore - SetShellVarContext all - - Call checkFilesInUse - - ; Set Section properties - SectionIn RO - SetOverwrite on - AllowSkipFiles off - - ; Set Section Files and Shortcuts - SetOutPath "$INSTDIR" - - File /r "new\core\data" - -!ifdef INSTALL64 - SetOutPath "$INSTDIR\bin" - File /r "new\core\bin\64bit" - SetOutPath "$INSTDIR\obs-plugins" - File /r "new\core\obs-plugins\64bit" -!else - SetOutPath "$INSTDIR\bin" - File /r "new\core\bin\32bit" - SetOutPath "$INSTDIR\obs-plugins" - File /r "new\core\obs-plugins\32bit" -!endif - -!ifdef INSTALL64 - ; 64 bit Visual Studio 2019 runtime check - ClearErrors - SetOutPath "$PLUGINSDIR" - File check_for_64bit_visual_studio_2019_runtimes.exe - ExecWait "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe" $R0 - Delete "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe" - IntCmp $R0 126 vs2019Missing_64 vs2019OK_64 - vs2019Missing_64: - File VC_redist.x64.exe - ExecWait '"$PLUGINSDIR\VC_redist.x64.exe" /quiet /norestart' - Delete "$PLUGINSDIR\VC_redist.x64.exe" - vs2019OK_64: - ClearErrors -!else - ; 32 bit Visual Studio 2019 runtime check - ClearErrors - SetOutPath "$PLUGINSDIR" - GetDLLVersion "vcruntime140.DLL" $R0 $R1 - GetDLLVersion "msvcp140.DLL" $R0 $R1 - GetDLLVersion "msvcp140_1.DLL" $R0 $R1 - IfErrors vs2019Missing_32 vs2019OK_32 - vs2019Missing_32: - File VC_redist.x86.exe - ExecWait '"$PLUGINSDIR\VC_redist.x86.exe" /quiet /norestart' - Delete "$PLUGINSDIR\VC_redist.x86.exe" - vs2019OK_32: - ClearErrors -!endif - - # ---------------------------- - - SetShellVarContext all - - SetOutPath "$INSTDIR" - File /r "new\obs-browser\data" - SetOutPath "$INSTDIR\obs-plugins" - OBSInstallerUtils::KillProcess "32bit\obs-browser-page.exe" - ${if} ${RunningX64} - OBSInstallerUtils::KillProcess "64bit\obs-browser-page.exe" - ${endif} -!ifdef INSTALL64 - File /r "new\obs-browser\obs-plugins\64bit" - SetOutPath "$INSTDIR\bin\64bit" -!else - File /r "new\obs-browser\obs-plugins\32bit" - SetOutPath "$INSTDIR\bin\32bit" -!endif - - # ---------------------------- - # Copy game capture files to ProgramData - SetOutPath "$APPDATA\obs-studio-hook" - File "new\core\data\obs-plugins\win-capture\graphics-hook32.dll" - File "new\core\data\obs-plugins\win-capture\graphics-hook64.dll" - File "new\core\data\obs-plugins\win-capture\obs-vulkan32.json" - File "new\core\data\obs-plugins\win-capture\obs-vulkan64.json" - OBSInstallerUtils::AddAllApplicationPackages "$APPDATA\obs-studio-hook" - - WriteUninstaller "$INSTDIR\uninstall.exe" - -!ifdef INSTALL64 - SetOutPath "$INSTDIR\bin\64bit" - CreateShortCut "$DESKTOP\OBS Studio.lnk" "$INSTDIR\bin\64bit\obs64.exe" -!else - SetOutPath "$INSTDIR\bin\32bit" - CreateShortCut "$DESKTOP\OBS Studio.lnk" "$INSTDIR\bin\32bit\obs32.exe" -!endif - - CreateDirectory "$SMPROGRAMS\OBS Studio" - -!ifdef INSTALL64 - SetOutPath "$INSTDIR\bin\64bit" - CreateShortCut "$SMPROGRAMS\OBS Studio\OBS Studio (64bit).lnk" "$INSTDIR\bin\64bit\obs64.exe" -!else - SetOutPath "$INSTDIR\bin\32bit" - CreateDirectory "$SMPROGRAMS\OBS Studio" - CreateShortCut "$SMPROGRAMS\OBS Studio\OBS Studio (32bit).lnk" "$INSTDIR\bin\32bit\obs32.exe" -!endif - - CreateShortCut "$SMPROGRAMS\OBS Studio\Uninstall.lnk" "$INSTDIR\uninstall.exe" -SectionEnd - -Section -FinishSection - - SetShellVarContext all - - # --------------------------------------- - # 64bit vulkan hook registry stuff - - ${if} ${RunningX64} - SetRegView 64 - WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" - - ClearErrors - DeleteRegValue HKCU "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan64.json" - ClearErrors - WriteRegDWORD HKLM "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan64.json" 0 - ${endif} - - # --------------------------------------- - # 32bit vulkan hook registry stuff - - SetRegView 32 - WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" - - ClearErrors - DeleteRegValue HKCU "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan32.json" - ClearErrors - WriteRegDWORD HKLM "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan32.json" 0 - - # --------------------------------------- - # Register virtual camera dlls - - Exec '"$SYSDIR\regsvr32.exe" /s "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module32.dll"' - ${if} ${RunningX64} - Exec '"$SYSDIR\regsvr32.exe" /s "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module64.dll"' - ${endif} - - # --------------------------------------- - - ClearErrors - SetRegView default - - WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "ProductID" "d16d2409-3151-4331-a9b1-dfd8cf3f0d9c" -!ifdef INSTALL64 - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$INSTDIR\bin\64bit\obs64.exe" -!else - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$INSTDIR\bin\32bit\obs32.exe" -!endif - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "OBS Project" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://obsproject.com" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${APPVERSION}" - -SectionEnd - -; Modern install component descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "Core OBS Studio files" -!insertmacro MUI_FUNCTION_DESCRIPTION_END - -;Uninstall section -Section "un.${APPNAME} App Files" UninstallSection1 - - SectionIn RO - - ; Remove hook files and vulkan registry - SetShellVarContext all - - RMDir /r "$APPDATA\obs-studio-hook" - - SetRegView 32 - DeleteRegValue HKCU "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan32.json" - DeleteRegValue HKLM "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan32.json" - ${if} ${RunningX64} - SetRegView 64 - DeleteRegValue HKCU "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan64.json" - DeleteRegValue HKLM "Software\Khronos\Vulkan\ImplicitLayers" "$APPDATA\obs-studio-hook\obs-vulkan64.json" - ${endif} - SetRegView default - SetShellVarContext current - ClearErrors - - ; Unregister virtual camera dlls - Exec '"$SYSDIR\regsvr32.exe" /u /s "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module32.dll"' - ${if} ${RunningX64} - Exec '"$SYSDIR\regsvr32.exe" /u /s "$INSTDIR\data\obs-plugins\win-dshow\obs-virtualcam-module64.dll"' - ${endif} - - ; Remove from registry... - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" - DeleteRegKey HKLM "SOFTWARE\${APPNAME}" - - ; Delete self - Delete "$INSTDIR\uninstall.exe" - - ; Delete Shortcuts - SetShellVarContext all - Delete "$DESKTOP\OBS Studio.lnk" - Delete "$SMPROGRAMS\OBS Studio\OBS Studio (32bit).lnk" - Delete "$SMPROGRAMS\OBS Studio\Uninstall.lnk" - ${if} ${RunningX64} - Delete "$SMPROGRAMS\OBS Studio\OBS Studio (64bit).lnk" - ${endif} - SetShellVarContext current - - ; Clean up OBS Studio - RMDir /r "$INSTDIR\bin" - RMDir /r "$INSTDIR\data" - RMDir /r "$INSTDIR\obs-plugins" - RMDir "$INSTDIR" - - ; Remove remaining directories - RMDir "$SMPROGRAMS\OBS Studio" - RMDir "$INSTDIR\OBS Studio" -SectionEnd - -Section /o "un.Settings, Scenes, etc." UninstallSection2 - RMDir /r "$APPDATA\obs-studio" -SectionEnd - -!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${UninstallSection1} "Remove the OBS program files." - !insertmacro MUI_DESCRIPTION_TEXT ${UninstallSection2} "Removes all settings, scenes, sources, profiles, log files, and other application data.$\r$\n$\r$\nTHIS CANNOT BE UNDONE." -!insertmacro MUI_UNFUNCTION_DESCRIPTION_END - -; Version information -VIProductVersion "${APPVERSION}.0" -VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APPNAME}" -VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "OBS Project" -VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "(C) 2012-2021" -; FileDescription is what shows in the UAC elevation prompt when signed -VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${APPNAME} Installer" -VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${APPVERSION}" - -; eof From 33e4ffd3fee894c172a827b5b02e7829c8421417 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:18:06 +0100 Subject: [PATCH 0451/2225] ffmpeg-mux: Properly support lossless codecs - Do not set sample rate (not required here, but can be 24/32 now) - Only set bit_rate for lossless codecs - Only set frame_size for codecs using a fixed one --- plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index d6ba35013871cb..c2550905efb9f2 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -526,7 +526,14 @@ static void create_audio_stream(struct ffmpeg_mux *ffm, int idx) const char *name = ffm->params.acodec; int channels; - const AVCodecDescriptor *codec = avcodec_descriptor_get_by_name(name); + const AVCodecDescriptor *codec_desc = + avcodec_descriptor_get_by_name(name); + if (!codec_desc) { + fprintf(stderr, "Couldn't find codec descriptor '%s'\n", name); + return; + } + + const AVCodec *codec = avcodec_find_encoder(codec_desc->id); if (!codec) { fprintf(stderr, "Couldn't find codec '%s'\n", name); return; @@ -547,14 +554,17 @@ static void create_audio_stream(struct ffmpeg_mux *ffm, int idx) context = avcodec_alloc_context3(NULL); context->codec_type = codec->type; context->codec_id = codec->id; - context->bit_rate = (int64_t)ffm->audio[idx].abitrate * 1000; + if (!(codec_desc->props & AV_CODEC_PROP_LOSSLESS)) + context->bit_rate = (int64_t)ffm->audio[idx].abitrate * 1000; + channels = ffm->audio[idx].channels; #if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(57, 24, 100) context->channels = channels; #endif context->sample_rate = ffm->audio[idx].sample_rate; - context->frame_size = ffm->audio[idx].frame_size; - context->sample_fmt = AV_SAMPLE_FMT_S16; + if (!(codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) + context->frame_size = ffm->audio[idx].frame_size; + context->time_base = stream->time_base; context->extradata = extradata; context->extradata_size = ffm->audio_header[idx].size; From 3ae98511d09f1ebaf5c9cc005a285efd1a26aeff Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:27:59 +0100 Subject: [PATCH 0452/2225] obs-ffmpeg: Add PCM and ALAC encoders --- plugins/obs-ffmpeg/data/locale/en-US.ini | 3 + .../obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 97 ++++++++++++++++++- plugins/obs-ffmpeg/obs-ffmpeg.c | 6 ++ 3 files changed, 103 insertions(+), 3 deletions(-) diff --git a/plugins/obs-ffmpeg/data/locale/en-US.ini b/plugins/obs-ffmpeg/data/locale/en-US.ini index 6e7d1590335d9b..a88fab8cd864de 100644 --- a/plugins/obs-ffmpeg/data/locale/en-US.ini +++ b/plugins/obs-ffmpeg/data/locale/en-US.ini @@ -1,6 +1,9 @@ FFmpegOutput="FFmpeg Output" FFmpegAAC="FFmpeg AAC" FFmpegOpus="FFmpeg Opus" +FFmpegALAC="FFmpeg ALAC (24-bit)" +FFmpegPCM16Bit="FFmpeg PCM (16-bit)" +FFmpegPCM24Bit="FFmpeg PCM (24-bit)" FFmpegOpts="FFmpeg Options" FFmpegOpts.ToolTip.Source="Allows you to set FFmpeg options. This only accepts options in the option=value format.\nMultiple options can be set by separating them with a space.\nExample: rtsp_transport=tcp rtsp_flags=prefer_tcp" Bitrate="Bitrate" diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index 80920dcf95b958..bd6f8a149720e0 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -95,6 +95,24 @@ static const char *opus_getname(void *unused) return obs_module_text("FFmpegOpus"); } +static const char *pcm_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return obs_module_text("FFmpegPCM16Bit"); +} + +static const char *pcm24_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return obs_module_text("FFmpegPCM24Bit"); +} + +static const char *alac_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return obs_module_text("FFmpegALAC"); +} + static void enc_destroy(void *data) { struct enc_encoder *enc = data; @@ -207,9 +225,17 @@ static void *enc_create(obs_data_t *settings, obs_encoder_t *encoder, goto fail; } - if (!bitrate) { + const AVCodecDescriptor *codec_desc = + avcodec_descriptor_get(enc->codec->id); + + if (!codec_desc) { + warn("Failed to get codec descriptor"); + goto fail; + } + + if (!bitrate && !(codec_desc->props & AV_CODEC_PROP_LOSSLESS)) { warn("Invalid bitrate specified"); - return NULL; + goto fail; } enc->context = avcodec_alloc_context3(enc->codec); @@ -218,7 +244,12 @@ static void *enc_create(obs_data_t *settings, obs_encoder_t *encoder, goto fail; } - enc->context->bit_rate = bitrate * 1000; + if (codec_desc->props & AV_CODEC_PROP_LOSSLESS) + // Set by encoder on init, not known at this time + enc->context->bit_rate = -1; + else + enc->context->bit_rate = bitrate * 1000; + const struct audio_output_info *aoi; aoi = audio_output_get_info(audio); @@ -300,6 +331,21 @@ static void *opus_create(obs_data_t *settings, obs_encoder_t *encoder) return enc_create(settings, encoder, "libopus", "opus"); } +static void *pcm_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return enc_create(settings, encoder, "pcm_s16le", NULL); +} + +static void *pcm24_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return enc_create(settings, encoder, "pcm_s24le", NULL); +} + +static void *alac_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return enc_create(settings, encoder, "alac", NULL); +} + static bool do_encode(struct enc_encoder *enc, struct encoder_packet *packet, bool *received_packet) { @@ -453,3 +499,48 @@ struct obs_encoder_info opus_encoder_info = { .get_extra_data = enc_extra_data, .get_audio_info = enc_audio_info, }; + +struct obs_encoder_info pcm_encoder_info = { + .id = "ffmpeg_pcm_s16le", + .type = OBS_ENCODER_AUDIO, + .codec = "pcm_s16le", + .get_name = pcm_getname, + .create = pcm_create, + .destroy = enc_destroy, + .encode = enc_encode, + .get_frame_size = enc_frame_size, + .get_defaults = enc_defaults, + .get_properties = enc_properties, + .get_extra_data = enc_extra_data, + .get_audio_info = enc_audio_info, +}; + +struct obs_encoder_info pcm24_encoder_info = { + .id = "ffmpeg_pcm_s24le", + .type = OBS_ENCODER_AUDIO, + .codec = "pcm_s24le", + .get_name = pcm24_getname, + .create = pcm24_create, + .destroy = enc_destroy, + .encode = enc_encode, + .get_frame_size = enc_frame_size, + .get_defaults = enc_defaults, + .get_properties = enc_properties, + .get_extra_data = enc_extra_data, + .get_audio_info = enc_audio_info, +}; + +struct obs_encoder_info alac_encoder_info = { + .id = "ffmpeg_alac", + .type = OBS_ENCODER_AUDIO, + .codec = "alac", + .get_name = alac_getname, + .create = alac_create, + .destroy = enc_destroy, + .encode = enc_encode, + .get_frame_size = enc_frame_size, + .get_defaults = enc_defaults, + .get_properties = enc_properties, + .get_extra_data = enc_extra_data, + .get_audio_info = enc_audio_info, +}; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index d32146cf9f3eba..906f46df8b5237 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -36,6 +36,9 @@ extern struct obs_output_info replay_buffer; extern struct obs_output_info ffmpeg_hls_muxer; extern struct obs_encoder_info aac_encoder_info; extern struct obs_encoder_info opus_encoder_info; +extern struct obs_encoder_info pcm_encoder_info; +extern struct obs_encoder_info pcm24_encoder_info; +extern struct obs_encoder_info alac_encoder_info; extern struct obs_encoder_info h264_nvenc_encoder_info; #ifdef ENABLE_HEVC extern struct obs_encoder_info hevc_nvenc_encoder_info; @@ -387,6 +390,9 @@ bool obs_module_load(void) register_encoder_if_available(&svt_av1_encoder_info, "libsvtav1"); register_encoder_if_available(&aom_av1_encoder_info, "libaom-av1"); obs_register_encoder(&opus_encoder_info); + obs_register_encoder(&pcm_encoder_info); + obs_register_encoder(&pcm24_encoder_info); + obs_register_encoder(&alac_encoder_info); #ifndef __APPLE__ bool h264 = false; bool hevc = false; From cf837fa38ac7c31092a4757e7711ad39cf822cd1 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:30:32 +0100 Subject: [PATCH 0453/2225] obs-ffmpeg: Add FLAC encoder --- plugins/obs-ffmpeg/data/locale/en-US.ini | 1 + .../obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 26 +++++++++++++++++++ plugins/obs-ffmpeg/obs-ffmpeg.c | 2 ++ 3 files changed, 29 insertions(+) diff --git a/plugins/obs-ffmpeg/data/locale/en-US.ini b/plugins/obs-ffmpeg/data/locale/en-US.ini index a88fab8cd864de..e75bfcd669bce7 100644 --- a/plugins/obs-ffmpeg/data/locale/en-US.ini +++ b/plugins/obs-ffmpeg/data/locale/en-US.ini @@ -2,6 +2,7 @@ FFmpegOutput="FFmpeg Output" FFmpegAAC="FFmpeg AAC" FFmpegOpus="FFmpeg Opus" FFmpegALAC="FFmpeg ALAC (24-bit)" +FFmpegFLAC="FFmpeg FLAC (16-bit)" FFmpegPCM16Bit="FFmpeg PCM (16-bit)" FFmpegPCM24Bit="FFmpeg PCM (24-bit)" FFmpegOpts="FFmpeg Options" diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index bd6f8a149720e0..56601330fb0e0d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -113,6 +113,12 @@ static const char *alac_getname(void *unused) return obs_module_text("FFmpegALAC"); } +static const char *flac_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return obs_module_text("FFmpegFLAC"); +} + static void enc_destroy(void *data) { struct enc_encoder *enc = data; @@ -346,6 +352,11 @@ static void *alac_create(obs_data_t *settings, obs_encoder_t *encoder) return enc_create(settings, encoder, "alac", NULL); } +static void *flac_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return enc_create(settings, encoder, "flac", NULL); +} + static bool do_encode(struct enc_encoder *enc, struct encoder_packet *packet, bool *received_packet) { @@ -544,3 +555,18 @@ struct obs_encoder_info alac_encoder_info = { .get_extra_data = enc_extra_data, .get_audio_info = enc_audio_info, }; + +struct obs_encoder_info flac_encoder_info = { + .id = "ffmpeg_flac", + .type = OBS_ENCODER_AUDIO, + .codec = "flac", + .get_name = flac_getname, + .create = flac_create, + .destroy = enc_destroy, + .encode = enc_encode, + .get_frame_size = enc_frame_size, + .get_defaults = enc_defaults, + .get_properties = enc_properties, + .get_extra_data = enc_extra_data, + .get_audio_info = enc_audio_info, +}; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index 906f46df8b5237..07035147cde18d 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -39,6 +39,7 @@ extern struct obs_encoder_info opus_encoder_info; extern struct obs_encoder_info pcm_encoder_info; extern struct obs_encoder_info pcm24_encoder_info; extern struct obs_encoder_info alac_encoder_info; +extern struct obs_encoder_info flac_encoder_info; extern struct obs_encoder_info h264_nvenc_encoder_info; #ifdef ENABLE_HEVC extern struct obs_encoder_info hevc_nvenc_encoder_info; @@ -393,6 +394,7 @@ bool obs_module_load(void) obs_register_encoder(&pcm_encoder_info); obs_register_encoder(&pcm24_encoder_info); obs_register_encoder(&alac_encoder_info); + obs_register_encoder(&flac_encoder_info); #ifndef __APPLE__ bool h264 = false; bool hevc = false; From dcee4fc61a54504d4b29e8870be0ad97ad750b12 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:31:38 +0100 Subject: [PATCH 0454/2225] libobs: Allow encoders to request unclamped audio mix This is useful for formats such as 32-bit float PCM which providers greater flexibility in editing by retaining information that would otherwise be clipped. --- libobs/media-io/audio-io.c | 9 ++++++++- libobs/media-io/audio-io.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libobs/media-io/audio-io.c b/libobs/media-io/audio-io.c index 5c3f1acf7be615..6786990e4c2f05 100644 --- a/libobs/media-io/audio-io.c +++ b/libobs/media-io/audio-io.c @@ -59,6 +59,7 @@ static inline void audio_input_free(struct audio_input *input) struct audio_mix { DARRAY(struct audio_input) inputs; float buffer[MAX_AUDIO_CHANNELS][AUDIO_OUTPUT_FRAMES]; + float buffer_unclamped[MAX_AUDIO_CHANNELS][AUDIO_OUTPUT_FRAMES]; }; struct audio_output { @@ -116,8 +117,12 @@ static inline void do_audio_output(struct audio_output *audio, size_t mix_idx, for (size_t i = mix->inputs.num; i > 0; i--) { struct audio_input *input = mix->inputs.array + (i - 1); + float(*buf)[AUDIO_OUTPUT_FRAMES] = + input->conversion.allow_clipping ? mix->buffer_unclamped + : mix->buffer; for (size_t i = 0; i < audio->planes; i++) - data.data[i] = (uint8_t *)mix->buffer[i]; + data.data[i] = (uint8_t *)buf[i]; + data.frames = frames; data.timestamp = timestamp; @@ -142,6 +147,8 @@ static inline void clamp_audio_output(struct audio_output *audio, size_t bytes) for (size_t plane = 0; plane < audio->planes; plane++) { float *mix_data = mix->buffer[plane]; float *mix_end = &mix_data[float_size]; + /* Unclamped mix is copied directly. */ + memcpy(mix->buffer_unclamped[plane], mix_data, bytes); while (mix_data < mix_end) { float val = *mix_data; diff --git a/libobs/media-io/audio-io.h b/libobs/media-io/audio-io.h index ed0387605fb193..77a1fad81662e2 100644 --- a/libobs/media-io/audio-io.h +++ b/libobs/media-io/audio-io.h @@ -105,6 +105,7 @@ struct audio_convert_info { uint32_t samples_per_sec; enum audio_format format; enum speaker_layout speakers; + bool allow_clipping; }; static inline uint32_t get_audio_channels(enum speaker_layout speakers) From 1a51aad5829218bf8ad5d470d62f7511dac5c287 Mon Sep 17 00:00:00 2001 From: derrod Date: Wed, 15 Mar 2023 02:34:35 +0100 Subject: [PATCH 0455/2225] obs-ffmpeg: Add unclamped 32-bit floating point PCM encoder --- plugins/obs-ffmpeg/data/locale/en-US.ini | 1 + .../obs-ffmpeg/obs-ffmpeg-audio-encoders.c | 32 +++++++++++++++++++ plugins/obs-ffmpeg/obs-ffmpeg.c | 2 ++ 3 files changed, 35 insertions(+) diff --git a/plugins/obs-ffmpeg/data/locale/en-US.ini b/plugins/obs-ffmpeg/data/locale/en-US.ini index e75bfcd669bce7..64371eff7f0380 100644 --- a/plugins/obs-ffmpeg/data/locale/en-US.ini +++ b/plugins/obs-ffmpeg/data/locale/en-US.ini @@ -5,6 +5,7 @@ FFmpegALAC="FFmpeg ALAC (24-bit)" FFmpegFLAC="FFmpeg FLAC (16-bit)" FFmpegPCM16Bit="FFmpeg PCM (16-bit)" FFmpegPCM24Bit="FFmpeg PCM (24-bit)" +FFmpegPCM32BitFloat="FFmpeg PCM (32-bit float)" FFmpegOpts="FFmpeg Options" FFmpegOpts.ToolTip.Source="Allows you to set FFmpeg options. This only accepts options in the option=value format.\nMultiple options can be set by separating them with a space.\nExample: rtsp_transport=tcp rtsp_flags=prefer_tcp" Bitrate="Bitrate" diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c index 56601330fb0e0d..24b686a95d1c34 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c @@ -107,6 +107,12 @@ static const char *pcm24_getname(void *unused) return obs_module_text("FFmpegPCM24Bit"); } +static const char *pcm32_getname(void *unused) +{ + UNUSED_PARAMETER(unused); + return obs_module_text("FFmpegPCM32BitFloat"); +} + static const char *alac_getname(void *unused) { UNUSED_PARAMETER(unused); @@ -347,6 +353,11 @@ static void *pcm24_create(obs_data_t *settings, obs_encoder_t *encoder) return enc_create(settings, encoder, "pcm_s24le", NULL); } +static void *pcm32_create(obs_data_t *settings, obs_encoder_t *encoder) +{ + return enc_create(settings, encoder, "pcm_f32le", NULL); +} + static void *alac_create(obs_data_t *settings, obs_encoder_t *encoder) { return enc_create(settings, encoder, "alac", NULL); @@ -475,6 +486,12 @@ static void enc_audio_info(void *data, struct audio_convert_info *info) info->speakers = SPEAKERS_UNKNOWN; } +static void enc_audio_info_float(void *data, struct audio_convert_info *info) +{ + enc_audio_info(data, info); + info->allow_clipping = true; +} + static size_t enc_frame_size(void *data) { struct enc_encoder *enc = data; @@ -541,6 +558,21 @@ struct obs_encoder_info pcm24_encoder_info = { .get_audio_info = enc_audio_info, }; +struct obs_encoder_info pcm32_encoder_info = { + .id = "ffmpeg_pcm_f32le", + .type = OBS_ENCODER_AUDIO, + .codec = "pcm_f32le", + .get_name = pcm32_getname, + .create = pcm32_create, + .destroy = enc_destroy, + .encode = enc_encode, + .get_frame_size = enc_frame_size, + .get_defaults = enc_defaults, + .get_properties = enc_properties, + .get_extra_data = enc_extra_data, + .get_audio_info = enc_audio_info_float, +}; + struct obs_encoder_info alac_encoder_info = { .id = "ffmpeg_alac", .type = OBS_ENCODER_AUDIO, diff --git a/plugins/obs-ffmpeg/obs-ffmpeg.c b/plugins/obs-ffmpeg/obs-ffmpeg.c index 07035147cde18d..b64d648f21cd20 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg.c @@ -38,6 +38,7 @@ extern struct obs_encoder_info aac_encoder_info; extern struct obs_encoder_info opus_encoder_info; extern struct obs_encoder_info pcm_encoder_info; extern struct obs_encoder_info pcm24_encoder_info; +extern struct obs_encoder_info pcm32_encoder_info; extern struct obs_encoder_info alac_encoder_info; extern struct obs_encoder_info flac_encoder_info; extern struct obs_encoder_info h264_nvenc_encoder_info; @@ -393,6 +394,7 @@ bool obs_module_load(void) obs_register_encoder(&opus_encoder_info); obs_register_encoder(&pcm_encoder_info); obs_register_encoder(&pcm24_encoder_info); + obs_register_encoder(&pcm32_encoder_info); obs_register_encoder(&alac_encoder_info); obs_register_encoder(&flac_encoder_info); #ifndef __APPLE__ From 8f3bf0a0e3c844e9b42568720878aed9f721c0e1 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Thu, 8 Sep 2022 00:35:26 -0700 Subject: [PATCH 0456/2225] libobs: Keep output as premultiplied alpha Simplify code until someone needs straight alpha. --- libobs/obs-video.c | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/libobs/obs-video.c b/libobs/obs-video.c index 313d02e20a6cb6..4b641ff9533f41 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -230,26 +230,19 @@ static const char *render_output_texture_name = "render_output_texture"; static inline gs_texture_t * render_output_texture(struct obs_core_video_mix *mix) { + struct obs_video_info *const ovi = &mix->ovi; gs_texture_t *texture = mix->render_texture; gs_texture_t *target = mix->output_texture; - uint32_t width = gs_texture_get_width(target); - uint32_t height = gs_texture_get_height(target); - - gs_effect_t *effect = get_scale_effect(mix, width, height); - gs_technique_t *tech; - - if (video_output_get_format(mix->video) == VIDEO_FORMAT_BGRA) { - tech = gs_effect_get_technique(effect, "DrawAlphaDivide"); - } else { - if ((width == mix->ovi.base_width) && - (height == mix->ovi.base_height)) - return texture; - - tech = gs_effect_get_technique(effect, "Draw"); - } + const uint32_t width = gs_texture_get_width(target); + const uint32_t height = gs_texture_get_height(target); + if ((width == ovi->base_width) && (height == ovi->base_height)) + return texture; profile_start(render_output_texture_name); + gs_effect_t *effect = get_scale_effect(mix, width, height); + gs_technique_t *tech = gs_effect_get_technique(effect, "Draw"); + gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image"); gs_eparam_t *bres = gs_effect_get_param_by_name(effect, "base_dimension"); @@ -399,6 +392,7 @@ static const char *stage_output_texture_name = "stage_output_texture"; static inline void stage_output_texture(struct obs_core_video_mix *video, int cur_texture, gs_texture_t *const *const convert_textures, + gs_texture_t *output_texture, gs_stagesurf_t *const *const copy_surfaces, size_t channel_count) { @@ -409,7 +403,7 @@ stage_output_texture(struct obs_core_video_mix *video, int cur_texture, if (!video->gpu_conversion) { gs_stagesurf_t *copy = copy_surfaces[0]; if (copy) - gs_stage_texture(copy, video->output_texture); + gs_stage_texture(copy, output_texture); video->active_copy_surfaces[cur_texture][0] = copy; for (size_t i = 1; i < NUM_CHANNELS; ++i) @@ -544,7 +538,7 @@ static inline void render_video(struct obs_core_video_mix *video, gs_stagesurf_t *const *copy_surfaces = video->copy_surfaces[cur_texture]; size_t channel_count = NUM_CHANNELS; - gs_texture_t *texture = render_output_texture(video); + gs_texture_t *output_texture = render_output_texture(video); #ifdef _WIN32 if (gpu_active) { @@ -555,9 +549,10 @@ static inline void render_video(struct obs_core_video_mix *video, } #endif - if (video->gpu_conversion) + if (video->gpu_conversion) { render_convert_texture(video, convert_textures, - texture); + output_texture); + } #ifdef _WIN32 if (gpu_active) { @@ -566,10 +561,11 @@ static inline void render_video(struct obs_core_video_mix *video, } #endif - if (raw_active) + if (raw_active) { stage_output_texture(video, cur_texture, - convert_textures, copy_surfaces, - channel_count); + convert_textures, output_texture, + copy_surfaces, channel_count); + } } gs_set_render_target(NULL, NULL); From 79b7e61f0a8ddf084a41e8d136584b7c32bbcc07 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 25 Mar 2023 21:26:37 +0100 Subject: [PATCH 0457/2225] UI: Fix issue from stream settings Qt slots refactor 5a40934 refactored slots around services but a on_service_currentIndexChanged() was not replaced by ServiceChanged(). The latter contains the code that was in the former before the refactor. https://github.com/obsproject/obs-studio/commit/5a409347d5bf7dec50c41641660a131c265fb4ad --- UI/window-basic-settings-stream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index ec661bd2c73d8c..fab2c9c36166d1 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -170,7 +170,7 @@ void OBSBasicSettings::LoadStream1Settings() ui->key->setText(key); lastService.clear(); - on_service_currentIndexChanged(0); + ServiceChanged(); UpdateKeyLink(); UpdateMoreInfoLink(); From dc84a8da207c862f5815a8414b2ef0a7ccb03210 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 24 Mar 2023 14:51:06 +0100 Subject: [PATCH 0458/2225] UI: Add unassigned indicator and warning to mixer --- UI/data/locale/en-US.ini | 2 + UI/data/themes/Acri.qss | 4 ++ UI/data/themes/Dark.qss | 4 ++ UI/data/themes/Dark/unassigned.svg | 14 +++++ UI/data/themes/Grey.qss | 4 ++ UI/data/themes/Light.qss | 4 ++ UI/data/themes/Rachni.qss | 4 ++ UI/data/themes/System.qss | 4 ++ UI/data/themes/Yami.qss | 4 ++ UI/mute-checkbox.hpp | 17 ++++++ UI/volume-control.cpp | 92 +++++++++++++++++++++++++++--- UI/volume-control.hpp | 2 + 12 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 UI/data/themes/Dark/unassigned.svg diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index f08a95b1db27c2..806a073c759376 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -559,6 +559,8 @@ VolControl.SliderUnmuted="Volume slider for '%1':" VolControl.SliderMuted="Volume slider for '%1': (currently muted)" VolControl.Mute="Mute '%1'" VolControl.Properties="Properties for '%1'" +VolControl.UnassignedWarning.Title="Unassigned Audio Source" +VolControl.UnassignedWarning.Text="\"%1\" is not assigned to any audio tracks and it will not be audible in streams or recordings.\n\nTo assign an audio source to a track, open the Advanced Audio Properties via the right-click menu or the cog button in the mixer dock toolbar." # add scene dialog Basic.Main.AddSceneDlg.Title="Add Scene" diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index ef1f2d2216ab4f..a525bbebea188b 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -986,6 +986,10 @@ MuteCheckBox::indicator:checked { image: url(./Dark/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Dark/settings/audio.svg); } diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index e6794d4690d92d..2b56359d367bf5 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -667,6 +667,10 @@ MuteCheckBox::indicator:checked { image: url(./Dark/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Dark/settings/audio.svg); } diff --git a/UI/data/themes/Dark/unassigned.svg b/UI/data/themes/Dark/unassigned.svg new file mode 100644 index 00000000000000..61c6d63ac4c3bc --- /dev/null +++ b/UI/data/themes/Dark/unassigned.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/UI/data/themes/Grey.qss b/UI/data/themes/Grey.qss index 1f17a021caedd4..6c4df993c0186f 100644 --- a/UI/data/themes/Grey.qss +++ b/UI/data/themes/Grey.qss @@ -974,6 +974,10 @@ MuteCheckBox::indicator:checked { image: url(./Dark/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Dark/settings/audio.svg); } diff --git a/UI/data/themes/Light.qss b/UI/data/themes/Light.qss index d8a64f9d2c7c6d..cb55f2c667bfcb 100644 --- a/UI/data/themes/Light.qss +++ b/UI/data/themes/Light.qss @@ -974,6 +974,10 @@ MuteCheckBox::indicator:checked { image: url(./Light/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Light/settings/audio.svg); } diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index 2f36694512ca06..d376fb109e3b2d 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -978,6 +978,10 @@ MuteCheckBox::indicator:checked { image: url(./Dark/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Dark/settings/audio.svg); } diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss index 1871ec6e596203..2a96cacd480bd9 100644 --- a/UI/data/themes/System.qss +++ b/UI/data/themes/System.qss @@ -70,6 +70,10 @@ MuteCheckBox::indicator:checked { image: url(:/res/images/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(:/settings/images/settings/audio.svg); } diff --git a/UI/data/themes/Yami.qss b/UI/data/themes/Yami.qss index 269b532e989696..21eefbd34699e6 100644 --- a/UI/data/themes/Yami.qss +++ b/UI/data/themes/Yami.qss @@ -978,6 +978,10 @@ MuteCheckBox::indicator:checked { image: url(./Dark/mute.svg); } +MuteCheckBox::indicator:indeterminate { + image: url(./Dark/unassigned.svg); +} + MuteCheckBox::indicator:unchecked { image: url(./Dark/settings/audio.svg); } diff --git a/UI/mute-checkbox.hpp b/UI/mute-checkbox.hpp index 0583618706a947..a0c3c63f583aa7 100644 --- a/UI/mute-checkbox.hpp +++ b/UI/mute-checkbox.hpp @@ -4,4 +4,21 @@ class MuteCheckBox : public QCheckBox { Q_OBJECT + +public: + MuteCheckBox(QWidget *parent = nullptr) : QCheckBox(parent) + { + setTristate(true); + } + +protected: + /* While we need it to be tristate internally, we don't want a user being + * able to manually get into the partial state. */ + void nextCheckState() override + { + if (checkState() != Qt::Checked) + setCheckState(Qt::Checked); + else + setCheckState(Qt::Unchecked); + } }; diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index 51af38c0626f6f..37ce328d7006a7 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -25,6 +25,43 @@ using namespace std; QWeakPointer VolumeMeter::updateTimer; +static inline Qt::CheckState GetCheckState(bool muted, bool unassigned) +{ + if (muted) + return Qt::Checked; + else if (unassigned) + return Qt::PartiallyChecked; + else + return Qt::Unchecked; +} + +static void ShowUnassignedWarning(const char *name) +{ + auto msgBox = [=]() { + QMessageBox msgbox(App()->GetMainWindow()); + msgbox.setWindowTitle( + QTStr("VolControl.UnassignedWarning.Title")); + msgbox.setText( + QTStr("VolControl.UnassignedWarning.Text").arg(name)); + msgbox.setIcon(QMessageBox::Icon::Information); + msgbox.addButton(QMessageBox::Ok); + + QCheckBox *cb = new QCheckBox(QTStr("DoNotShowAgain")); + msgbox.setCheckBox(cb); + + msgbox.exec(); + + if (cb->isChecked()) { + config_set_bool(App()->GlobalConfig(), "General", + "WarnedAboutUnassignedSources", true); + config_save_safe(App()->GlobalConfig(), "tmp", nullptr); + } + }; + + QMetaObject::invokeMethod(App(), "Exec", Qt::QueuedConnection, + Q_ARG(VoidFunc, msgBox)); +} + void VolControl::OBSVolumeChanged(void *data, float db) { Q_UNUSED(db); @@ -64,16 +101,50 @@ void VolControl::VolumeChanged() void VolControl::VolumeMuted(bool muted) { - if (mute->isChecked() != muted) - mute->setChecked(muted); + bool unassigned = obs_source_get_audio_mixers(source) == 0; - volMeter->muted = muted; + auto newState = GetCheckState(muted, unassigned); + if (mute->checkState() != newState) + mute->setCheckState(newState); + + volMeter->muted = muted || unassigned; +} + +void VolControl::OBSMixersChanged(void *data, calldata_t *calldata) +{ + VolControl *volControl = static_cast(data); + bool unassigned = calldata_int(calldata, "mixers") == 0; + + QMetaObject::invokeMethod(volControl, "AssignmentChanged", + Q_ARG(bool, unassigned)); } -void VolControl::SetMuted(bool checked) +void VolControl::AssignmentChanged(bool unassigned) { + bool muted = obs_source_muted(source); + auto newState = GetCheckState(muted, unassigned); + if (mute->checkState() != newState) + mute->setCheckState(newState); + + volMeter->muted = muted || unassigned; +} + +void VolControl::SetMuted(bool) +{ + bool checked = mute->checkState() == Qt::Checked; bool prev = obs_source_muted(source); obs_source_set_muted(source, checked); + bool unassigned = obs_source_get_audio_mixers(source) == 0; + + if (!checked && unassigned) { + mute->setCheckState(Qt::PartiallyChecked); + /* Show notice about the source no being assigned to any tracks */ + bool has_shown_warning = + config_get_bool(App()->GlobalConfig(), "General", + "WarnedAboutUnassignedSources"); + if (!has_shown_warning) + ShowUnassignedWarning(obs_source_get_name(source)); + } auto undo_redo = [](const std::string &name, bool val) { OBSSourceAutoRelease source = @@ -289,19 +360,22 @@ VolControl::VolControl(OBSSource source_, bool showConfig, bool vertical) slider->setMaximum(int(FADER_PRECISION)); bool muted = obs_source_muted(source); - mute->setChecked(muted); - volMeter->muted = muted; + bool unassigned = obs_source_get_audio_mixers(source) == 0; + mute->setCheckState(GetCheckState(muted, unassigned)); + volMeter->muted = muted || unassigned; mute->setAccessibleName(QTStr("VolControl.Mute").arg(sourceName)); obs_fader_add_callback(obs_fader, OBSVolumeChanged, this); obs_volmeter_add_callback(obs_volmeter, OBSVolumeLevel, this); signal_handler_connect(obs_source_get_signal_handler(source), "mute", OBSVolumeMuted, this); + signal_handler_connect(obs_source_get_signal_handler(source), + "audio_mixers", OBSMixersChanged, this); QWidget::connect(slider, SIGNAL(valueChanged(int)), this, SLOT(SliderChanged(int))); - QWidget::connect(mute, SIGNAL(clicked(bool)), this, - SLOT(SetMuted(bool))); + QWidget::connect(mute, &MuteCheckBox::clicked, this, + &VolControl::SetMuted); obs_fader_attach_source(obs_fader, source); obs_volmeter_attach_source(obs_volmeter, source); @@ -334,6 +408,8 @@ VolControl::~VolControl() signal_handler_disconnect(obs_source_get_signal_handler(source), "mute", OBSVolumeMuted, this); + signal_handler_disconnect(obs_source_get_signal_handler(source), + "audio_mixers", OBSMixersChanged, this); obs_fader_destroy(obs_fader); obs_volmeter_destroy(obs_volmeter); diff --git a/UI/volume-control.hpp b/UI/volume-control.hpp index 1792d97c2e44b6..cb31bcb129078b 100644 --- a/UI/volume-control.hpp +++ b/UI/volume-control.hpp @@ -301,12 +301,14 @@ class VolControl : public QWidget { const float peak[MAX_AUDIO_CHANNELS], const float inputPeak[MAX_AUDIO_CHANNELS]); static void OBSVolumeMuted(void *data, calldata_t *calldata); + static void OBSMixersChanged(void *data, calldata_t *alldata); void EmitConfigClicked(); private slots: void VolumeChanged(); void VolumeMuted(bool muted); + void AssignmentChanged(bool unassigned); void SetMuted(bool checked); void SliderChanged(int vol); From 4f7a73d14912d9feafb4cca387cffe0a71a681ae Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 20 Mar 2023 14:18:02 +0100 Subject: [PATCH 0459/2225] deps/libff: Add ff_format_codec_compatible --- deps/libff/libff/ff-util.c | 26 ++++++++++++++++++++++++++ deps/libff/libff/ff-util.h | 3 +++ 2 files changed, 29 insertions(+) diff --git a/deps/libff/libff/ff-util.c b/deps/libff/libff/ff-util.c index f4b4a10c46ca4a..8ce7241aecfbe7 100644 --- a/deps/libff/libff/ff-util.c +++ b/deps/libff/libff/ff-util.c @@ -447,3 +447,29 @@ void ff_format_desc_free(const struct ff_format_desc *format_desc) desc = next; } } + + +bool ff_format_codec_compatible(const char *codec, const char *format) +{ + if (!codec || !format) + return false; + +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(59, 0, 100) + AVOutputFormat *output_format; +#else + const AVOutputFormat *output_format; +#endif + output_format = av_guess_format(format, NULL, NULL); + if (!output_format) + return false; + + const AVCodecDescriptor *codec_desc = avcodec_descriptor_get_by_name(codec); + if (!codec_desc) + return false; + +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(60, 0, 100) + return avformat_query_codec(output_format, codec_desc->id, FF_COMPLIANCE_EXPERIMENTAL) == 1; +#else + return avformat_query_codec(output_format, codec_desc->id, FF_COMPLIANCE_NORMAL) == 1; +#endif +} diff --git a/deps/libff/libff/ff-util.h b/deps/libff/libff/ff-util.h index f03b3fad1eb5c5..089862e08ff82e 100644 --- a/deps/libff/libff/ff-util.h +++ b/deps/libff/libff/ff-util.h @@ -62,6 +62,9 @@ ff_format_desc_get_default_name(const struct ff_format_desc *format_desc, const struct ff_format_desc * ff_format_desc_next(const struct ff_format_desc *format_desc); +// Utility to check compatibility +bool ff_format_codec_compatible(const char *codec, const char *format); + #ifdef __cplusplus } #endif From b686c971adf95dc0ffadd7a59a592bfa5f26667c Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 20 Mar 2023 14:18:39 +0100 Subject: [PATCH 0460/2225] UI: Remove ProRes Warning --- UI/data/locale/en-US.ini | 1 - UI/window-basic-settings.cpp | 48 +++++++----------------------------- 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 806a073c759376..53a87af16aa9fb 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -1324,7 +1324,6 @@ SceneItemHide="Hide '%1'" # Output warnings OutputWarnings.NoTracksSelected="You must select at least one track" OutputWarnings.MP4Recording="Warning: Recordings saved to MP4/MOV will be unrecoverable if the file cannot be finalized (e.g. as a result of BSODs, power losses, etc.). If you want to record multiple audio tracks consider using MKV and remux the recording to MP4/MOV after it is finished (File → Remux Recordings)" -OutputWarnings.ProResRecording="Apple ProRes is not supported by the %1 container format - supported container formats are mov (preferred) and mkv." OutputWarnings.CannotPause="Warning: Recordings cannot be paused if the recording encoder is set to \"(Use stream encoder)\"" # deleting final scene diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index e4fb8964e7baa3..e97c05317fd267 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -4919,47 +4919,17 @@ void OBSBasicSettings::AdvOutRecCheckWarnings() errorMsg = QTStr("OutputWarnings.NoTracksSelected"); } - QString recEncoder = ui->advOutRecEncoder->currentText(); - - if (recEncoder.contains("ProRes")) { - if (recFormat == "mkv") { - ui->autoRemux->setText( - QTStr("Basic.Settings.Advanced.AutoRemux") - .arg("mov")); - } else if (recFormat == "mov") { - if (!warningMsg.isEmpty()) - warningMsg += "\n\n"; - warningMsg += QTStr("OutputWarnings.MP4Recording"); - - ui->autoRemux->setText( - QTStr("Basic.Settings.Advanced.AutoRemux") - .arg("mov") + - " " + - QTStr("Basic.Settings.Advanced.AutoRemux.MP4")); - } else { - if (!errorMsg.isEmpty()) { - errorMsg += "\n\n"; - } + if (recFormat == "mp4" || recFormat == "mov") { + if (!warningMsg.isEmpty()) + warningMsg += "\n\n"; - errorMsg += QTStr("OutputWarnings.ProResRecording") - .arg(recFormat); - } + warningMsg += QTStr("OutputWarnings.MP4Recording"); + ui->autoRemux->setText( + QTStr("Basic.Settings.Advanced.AutoRemux").arg("mp4") + + " " + QTStr("Basic.Settings.Advanced.AutoRemux.MP4")); } else { - if (recFormat == "mp4" || recFormat == "mov") { - if (!warningMsg.isEmpty()) - warningMsg += "\n\n"; - - warningMsg += QTStr("OutputWarnings.MP4Recording"); - ui->autoRemux->setText( - QTStr("Basic.Settings.Advanced.AutoRemux") - .arg("mp4") + - " " + - QTStr("Basic.Settings.Advanced.AutoRemux.MP4")); - } else { - ui->autoRemux->setText( - QTStr("Basic.Settings.Advanced.AutoRemux") - .arg("mp4")); - } + ui->autoRemux->setText( + QTStr("Basic.Settings.Advanced.AutoRemux").arg("mp4")); } delete advOutRecWarning; From b79363400c4c87e5e88d7d9c7d4cd712c98fa972 Mon Sep 17 00:00:00 2001 From: derrod Date: Mon, 20 Mar 2023 14:18:28 +0100 Subject: [PATCH 0461/2225] UI: Disable incompatible codec/container options In advanced mode codecs that are incompatible are disabled. In simple mode codecs are disabled if recording encoders are used, but containers are disabled when stream encoders are used. --- UI/data/locale/en-US.ini | 7 + UI/window-basic-settings.cpp | 298 +++++++++++++++++++++++++++++++++-- UI/window-basic-settings.hpp | 1 + 3 files changed, 297 insertions(+), 9 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 53a87af16aa9fb..c1e29ea24eece5 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -973,6 +973,7 @@ Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Tremen Basic.Settings.Output.Simple.Warn.VideoBitrate="Warning: The streaming video bitrate will be set to %1, which is the upper limit for the current streaming service." Basic.Settings.Output.Simple.Warn.AudioBitrate="Warning: The streaming audio bitrate will be set to %1, which is the upper limit for the current streaming service." Basic.Settings.Output.Simple.Warn.CannotPause="Warning: Recordings cannot be paused if the recording quality is set to \"Same as stream\"." +Basic.Settings.Output.Simple.Warn.IncompatibleContainer="Warning: The currently selected recording format is incompatible with the selected stream encoder(s)." Basic.Settings.Output.Simple.Warn.Encoder="Warning: Recording with a software encoder at a different quality than the stream will require extra CPU usage if you stream and record at the same time." Basic.Settings.Output.Simple.Warn.Lossless="Warning: Lossless quality generates tremendously large file sizes! Lossless quality can use upward of 7 gigabytes of disk space per minute at high resolutions and framerates. Lossless is not recommended for long recordings unless you have a very large amount of disk space available." Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are you sure you want to use lossless quality?" @@ -1325,6 +1326,12 @@ SceneItemHide="Hide '%1'" OutputWarnings.NoTracksSelected="You must select at least one track" OutputWarnings.MP4Recording="Warning: Recordings saved to MP4/MOV will be unrecoverable if the file cannot be finalized (e.g. as a result of BSODs, power losses, etc.). If you want to record multiple audio tracks consider using MKV and remux the recording to MP4/MOV after it is finished (File → Remux Recordings)" OutputWarnings.CannotPause="Warning: Recordings cannot be paused if the recording encoder is set to \"(Use stream encoder)\"" +OutputWarnings.CodecIncompatible="The audio or video encoder selection was reset due to incompatibility. Please select a compatible encoder from the list." + +# codec compatibility +CodecCompat.Incompatible="(Incompatible with %1)" +CodecCompat.CodecPlaceholder="Select Encoder..." +CodecCompat.ContainerPlaceholder="Select Format..." # deleting final scene FinalScene.Title="Delete Scene" diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index e97c05317fd267..2f1ec0d6a6bf82 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -823,6 +823,8 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) SLOT(SimpleRecordingEncoderChanged())); connect(ui->simpleOutRecEncoder, SIGNAL(currentIndexChanged(int)), this, SLOT(SimpleRecordingEncoderChanged())); + connect(ui->simpleOutRecAEncoder, SIGNAL(currentIndexChanged(int)), + this, SLOT(SimpleRecordingEncoderChanged())); connect(ui->simpleOutputVBitrate, SIGNAL(valueChanged(int)), this, SLOT(SimpleRecordingEncoderChanged())); connect(ui->simpleOutputABitrate, SIGNAL(currentIndexChanged(int)), @@ -956,13 +958,32 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) SLOT(AdvOutRecCheckWarnings())); connect(ui->advOutRecTrack6, SIGNAL(clicked()), this, SLOT(AdvOutRecCheckWarnings())); - connect(ui->advOutRecFormat, SIGNAL(currentIndexChanged(int)), this, - SLOT(AdvOutRecCheckWarnings())); connect(ui->advOutRecEncoder, SIGNAL(currentIndexChanged(int)), this, SLOT(AdvOutRecCheckWarnings())); + connect(ui->advOutRecAEncoder, SIGNAL(currentIndexChanged(int)), this, + SLOT(AdvOutRecCheckWarnings())); + + // Check codec compatibility when format (container) changes + connect(ui->advOutRecFormat, SIGNAL(currentIndexChanged(int)), this, + SLOT(AdvOutRecCheckCodecs())); + +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + // Set placeholder used when selection was reset due to incompatibilities + ui->advOutRecEncoder->setPlaceholderText( + QTStr("CodecCompat.CodecPlaceholder")); + ui->advOutRecAEncoder->setPlaceholderText( + QTStr("CodecCompat.CodecPlaceholder")); + ui->simpleOutRecEncoder->setPlaceholderText( + QTStr("CodecCompat.CodecPlaceholder")); + ui->simpleOutRecAEncoder->setPlaceholderText( + QTStr("CodecCompat.CodecPlaceholder")); + ui->simpleOutRecFormat->setPlaceholderText( + QTStr("CodecCompat.ContainerPlaceholder")); +#endif SimpleRecordingQualityChanged(); AdvOutSplitFileChanged(); + AdvOutRecCheckCodecs(); AdvOutRecCheckWarnings(); UpdateAutomaticReplayBufferCheckboxes(); @@ -1975,13 +1996,9 @@ void OBSBasicSettings::LoadSimpleOutputSettings() ui->simpleOutStrAEncoder->setCurrentIndex(idx); idx = ui->simpleOutRecEncoder->findData(QString(recEnc)); - if (idx == -1) - idx = 0; ui->simpleOutRecEncoder->setCurrentIndex(idx); idx = ui->simpleOutRecAEncoder->findData(QString(recAudioEnc)); - if (idx == -1) - idx = 0; ui->simpleOutRecAEncoder->setCurrentIndex(idx); ui->simpleOutMuxCustom->setText(muxCustom); @@ -2253,6 +2270,8 @@ void OBSBasicSettings::LoadAdvOutputRecordingEncoderProperties() ui->advOutRecEncoder->insertItem(1, QT_UTF8(name), QT_UTF8(type)); SetComboByValue(ui->advOutRecEncoder, type); + } else { + ui->advOutRecEncoder->setCurrentIndex(-1); } } } @@ -2457,7 +2476,8 @@ void OBSBasicSettings::LoadOutputSettings() LoadAdvOutputRecordingSettings(); LoadAdvOutputRecordingEncoderProperties(); type = config_get_string(main->Config(), "AdvOut", "RecAudioEncoder"); - SetComboByValue(ui->advOutRecAEncoder, type); + if (!SetComboByValue(ui->advOutRecAEncoder, type)) + ui->advOutRecAEncoder->setCurrentIndex(-1); LoadAdvOutputFFmpegSettings(); LoadAdvOutputAudioSettings(); @@ -4890,6 +4910,116 @@ void OBSBasicSettings::AdvOutSplitFileChanged() ui->advOutSplitFileSize->setVisible(splitFileType == 1); } +static void DisableIncompatibleCodecs(QComboBox *cbox, const string &format, + const QString &streamEncoder) +{ + QString strEncLabel = + QTStr("Basic.Settings.Output.Adv.Recording.UseStreamEncoder"); + QString formatUpper = QString::fromStdString(format).toUpper(); + QString recEncoder = cbox->currentData().toString(); + + /* Check if selected encoders and output format are compatible, disable incompatible items. */ + bool currentCompatible = true; + for (int idx = 0; idx < cbox->count(); idx++) { + QString encName = cbox->itemData(idx).toString(); + string encoderId = (encName == "none") + ? streamEncoder.toStdString() + : encName.toStdString(); + QString encDisplayName = (encName == "none") + ? strEncLabel + : obs_encoder_get_display_name( + encoderId.c_str()); + const char *codec = obs_get_encoder_codec(encoderId.c_str()); + + bool is_compatible = false; + /* FFmpeg's check does not work for MPEG-TS and MKV. */ + if (format == "ts") { + is_compatible = strcmp(codec, "aac") == 0 || + strcmp(codec, "opus") == 0 || + strcmp(codec, "hevc") == 0 || + strcmp(codec, "h264") == 0; + } else if (format == "mkv") { + /* MKV eats everything. */ + is_compatible = true; + } else { + is_compatible = ff_format_codec_compatible( + codec, format.c_str()); + } + + QStandardItemModel *model = + dynamic_cast(cbox->model()); + QStandardItem *item = model->item(idx); + + if (is_compatible) { + item->setFlags(Qt::ItemIsSelectable | + Qt::ItemIsEnabled); + } else { + if (recEncoder == encName) + currentCompatible = false; + + item->setFlags(Qt::NoItemFlags); + encDisplayName += " "; + encDisplayName += QTStr("CodecCompat.Incompatible") + .arg(formatUpper); + } + + item->setText(encDisplayName); + } + + // Set to invalid entry if encoder was incompatible + if (!currentCompatible) + cbox->setCurrentIndex(-1); +} + +void OBSBasicSettings::AdvOutRecCheckCodecs() +{ + QString recFormat = ui->advOutRecFormat->currentData().toString(); + + string format = recFormat.toStdString(); + /* Remove leading "f" for fragmented MP4/MOV */ + if (format == "fmp4" || format == "fmov") + format = format.erase(0, 1); + else if (format == "m3u8") + format = "hls"; + + QString streamEncoder = ui->advOutEncoder->currentData().toString(); + + QString streamAudioEncoder = + ui->advOutAEncoder->currentData().toString(); + + /* Disable the signals to prevent AdvOutRecCheckWarnings to be called here. */ + ui->advOutRecEncoder->blockSignals(true); + ui->advOutRecAEncoder->blockSignals(true); + DisableIncompatibleCodecs(ui->advOutRecEncoder, format, streamEncoder); + DisableIncompatibleCodecs(ui->advOutRecAEncoder, format, + streamAudioEncoder); + ui->advOutRecEncoder->blockSignals(false); + ui->advOutRecAEncoder->blockSignals(false); + + AdvOutRecCheckWarnings(); +} + +#ifdef __APPLE__ +static void ResetInvalidSelection(QComboBox *cbox) +{ + int idx = cbox->currentIndex(); + if (idx < 0) + return; + + QStandardItemModel *model = + dynamic_cast(cbox->model()); + QStandardItem *item = model->item(idx); + + if (item->isEnabled()) + return; + + // Reset to "invalid" state if item was disabled + cbox->blockSignals(true); + cbox->setCurrentIndex(-1); + cbox->blockSignals(false); +} +#endif + void OBSBasicSettings::AdvOutRecCheckWarnings() { auto Checked = [](QCheckBox *box) { return box->isChecked() ? 1 : 0; }; @@ -4932,6 +5062,21 @@ void OBSBasicSettings::AdvOutRecCheckWarnings() QTStr("Basic.Settings.Advanced.AutoRemux").arg("mp4")); } +#ifdef __APPLE__ + // Workaround for QTBUG-56064 on macOS + ResetInvalidSelection(ui->advOutRecEncoder); + ResetInvalidSelection(ui->advOutRecAEncoder); +#endif + + // Show warning if codec selection was reset to an invalid state + if (ui->advOutRecEncoder->currentIndex() == -1 || + ui->advOutRecAEncoder->currentIndex() == -1) { + if (!warningMsg.isEmpty()) + warningMsg += "\n\n"; + + warningMsg += QTStr("OutputWarnings.CodecIncompatible"); + } + delete advOutRecWarning; if (!errorMsg.isEmpty() || !warningMsg.isEmpty()) { @@ -5436,6 +5581,106 @@ void OBSBasicSettings::AdvReplayBufferChanged() #define SIMPLE_OUTPUT_WARNING(str) \ QTStr("Basic.Settings.Output.Simple.Warn." str) +static void DisableIncompatibleSimpleCodecs(QComboBox *cbox, + const QString &format) +{ + /* Unlike in advanced mode the available simple mode encoders are + * hardcoded, so this check is also a simpler, hardcoded one. */ + QString formatUpper = QString(format).toUpper(); + QString encoder = cbox->currentData().toString(); + + bool currentCompatible = true; + for (int idx = 0; idx < cbox->count(); idx++) { + QString encName = cbox->itemData(idx).toString(); + QString codec; + + /* Simple mode does not expose audio encoder variants directly, + * so we have to simply set the codec to the internal name. */ + if (encName == "opus" || encName == "aac") { + codec = encName; + } else { + const char *encoder_id = + get_simple_output_encoder(QT_TO_UTF8(encName)); + codec = obs_get_encoder_codec(encoder_id); + } + + bool is_compatible = true; + if (format == "flv") { + /* If FLV, only H.264 and AAC are compatible */ + is_compatible = codec == "aac" || codec == "h264"; + } else if (format == "mov" || format == "fmov") { + /* If MOV, Opus is not compatible */ + is_compatible = codec != "opus"; + } else if (format == "ts") { + /* If MPEG-TS, AV1 is incompatible */ + is_compatible = codec != "av1"; + } + + QStandardItemModel *model = + dynamic_cast(cbox->model()); + QStandardItem *item = model->item(idx); + + if (is_compatible) { + item->setFlags(Qt::ItemIsSelectable | + Qt::ItemIsEnabled); + } else { + if (encoder == encName) + currentCompatible = false; + + item->setFlags(Qt::NoItemFlags); + } + } + + if (!currentCompatible) + cbox->setCurrentIndex(-1); +} + +static void DisableIncompatibleSimpleContainer(QComboBox *cbox, + const QString ¤tFormat, + const QString &vEncoder, + const QString &aEncoder) +{ + /* Similar to above, but works in reverse to disable incompatible formats + * based on the encoder selection. */ + QString aCodec = aEncoder; + QString vCodec = obs_get_encoder_codec( + get_simple_output_encoder(QT_TO_UTF8(vEncoder))); + + bool currentCompatible = true; + for (int idx = 0; idx < cbox->count(); idx++) { + QString format = cbox->itemData(idx).toString(); + + bool is_compatible = true; + if (format == "flv") { + /* If flv, ónly H.264 and AAC are compatible */ + is_compatible = aCodec == "aac" && vCodec == "h264"; + } else if (format == "mov" || format == "fmov") { + /* If MOV, Opus is not compatible */ + is_compatible = aCodec != "opus"; + } else if (format == "ts") { + /* If MPEG-TS, AV1 is incompatible */ + is_compatible = vCodec != "av1"; + } + + QStandardItemModel *model = + dynamic_cast(cbox->model()); + QStandardItem *item = model->item(idx); + + if (is_compatible) { + item->setFlags(Qt::ItemIsSelectable | + Qt::ItemIsEnabled); + } else { + if (format == currentFormat) + currentCompatible = false; + + item->setFlags(Qt::NoItemFlags); + } + } + + if (!currentCompatible) + cbox->setCurrentIndex(-1); +} + void OBSBasicSettings::SimpleRecordingEncoderChanged() { QString qual = ui->simpleOutRecQuality->currentData().toString(); @@ -5471,6 +5716,8 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() } } + QString format = ui->simpleOutRecFormat->currentData().toString(); + if (qual == "Lossless") { if (!warning.isEmpty()) warning += "\n\n"; @@ -5490,14 +5737,47 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() warning += "\n\n"; warning += SIMPLE_OUTPUT_WARNING("Encoder"); } + + /* Prevent function being called recursively if changes happen. */ + ui->simpleOutRecEncoder->blockSignals(true); + ui->simpleOutRecAEncoder->blockSignals(true); + DisableIncompatibleSimpleCodecs(ui->simpleOutRecEncoder, + format); + DisableIncompatibleSimpleCodecs(ui->simpleOutRecAEncoder, + format); + ui->simpleOutRecAEncoder->blockSignals(false); + ui->simpleOutRecEncoder->blockSignals(false); + + if (ui->simpleOutRecEncoder->currentIndex() == -1 || + ui->simpleOutRecAEncoder->currentIndex() == -1) { + if (!warning.isEmpty()) + warning += "\n\n"; + warning += QTStr("OutputWarnings.CodecIncompatible"); + } } else { + /* When using stream encoders do the reverse; Disable containers that are incompatible. */ + QString streamEnc = + ui->simpleOutStrEncoder->currentData().toString(); + QString streamAEnc = + ui->simpleOutStrAEncoder->currentData().toString(); + + ui->simpleOutRecFormat->blockSignals(true); + DisableIncompatibleSimpleContainer( + ui->simpleOutRecFormat, format, streamEnc, streamAEnc); + ui->simpleOutRecFormat->blockSignals(false); + + if (ui->simpleOutRecFormat->currentIndex() == -1) { + if (!warning.isEmpty()) + warning += "\n\n"; + warning += + SIMPLE_OUTPUT_WARNING("IncompatibleContainer"); + } + if (!warning.isEmpty()) warning += "\n\n"; warning += SIMPLE_OUTPUT_WARNING("CannotPause"); } - QString format = ui->simpleOutRecFormat->currentData().toString(); - if (qual != "Lossless" && (format == "mp4" || format == "mov")) { if (!warning.isEmpty()) warning += "\n\n"; diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index d3442db3c18ac9..aea3edd7d21015 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -446,6 +446,7 @@ private slots: void AdvOutSplitFileChanged(); void AdvOutRecCheckWarnings(); + void AdvOutRecCheckCodecs(); void SimpleRecordingQualityChanged(); void SimpleRecordingEncoderChanged(); From 51823680092cd3b137ea968ddf8e42cc7bb0d0aa Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Wed, 22 Mar 2023 00:07:15 +0100 Subject: [PATCH 0462/2225] UI: Properly handle SIGINT on non-Windows platforms Running Qt code in a signal handler is not safe. Per the Qt docs, we instead create a pair of sockets and a QSocketNotifier so that the signal handler can notify the main thread which can process the exit request without risk. Reference: https://doc.qt.io/archives/qt-6.3/unix-signals.html Reference: https://man7.org/linux/man-pages/man7/signal-safety.7.html --- UI/obs-app.cpp | 44 +++++++++++++++++++++++++++++++++++++++++--- UI/obs-app.hpp | 12 ++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 73b826a84cfc66..31bef1eee4cb0d 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -59,6 +59,9 @@ #else #include #include +#include +#include +#include #endif #if defined(_WIN32) || defined(ENABLE_SPARKLE_UPDATER) @@ -108,6 +111,10 @@ bool restart = false; QPointer obsLogViewer; +#ifndef _WIN32 +int OBSApp::sigintFd[2]; +#endif + // GPU hint exports for AMD/NVIDIA laptops #ifdef _MSC_VER extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 1; @@ -1391,6 +1398,14 @@ OBSApp::OBSApp(int &argc, char **argv, profiler_name_store_t *store) blog(LOG_WARNING, "Failed to set LC_NUMERIC to C locale"); #endif +#ifndef _WIN32 + /* Handle SIGINT properly */ + socketpair(AF_UNIX, SOCK_STREAM, 0, sigintFd); + snInt = new QSocketNotifier(sigintFd[1], QSocketNotifier::Read, this); + connect(snInt, SIGNAL(activated(QSocketDescriptor)), this, + SLOT(ProcessSigInt())); +#endif + sleepInhibitor = os_inhibit_sleep_create("OBS Video/audio"); #ifndef __APPLE__ @@ -1407,6 +1422,10 @@ OBSApp::~OBSApp() config_get_bool(globalConfig, "Audio", "DisableAudioDucking"); if (disableAudioDucking) DisableAudioDucking(false); +#else + delete snInt; + close(sigintFd[0]); + close(sigintFd[1]); #endif #ifdef __APPLE__ @@ -3176,12 +3195,31 @@ static void upgrade_settings(void) os_closedir(dir); } -void ctrlc_handler(int s) +#ifndef _WIN32 +void OBSApp::SigIntSignalHandler(int s) { + /* Handles SIGINT and writes to a socket. Qt will read + * from the socket in the main thread event loop and trigger + * a call to the ProcessSigInt slot, where we can safely run + * shutdown code without signal safety issues. */ UNUSED_PARAMETER(s); - OBSBasic *main = reinterpret_cast(App()->GetMainWindow()); + char a = 1; + send(sigintFd[0], &a, sizeof(a), 0); +} +#endif + +void OBSApp::ProcessSigInt(void) +{ + /* This looks weird, but we can't ifdef a Qt slot function so + * the SIGINT handler simply does nothing on Windows. */ +#ifndef _WIN32 + char tmp; + recv(sigintFd[1], &tmp, sizeof(tmp), 0); + + OBSBasic *main = reinterpret_cast(GetMainWindow()); main->close(); +#endif } int main(int argc, char *argv[]) @@ -3191,7 +3229,7 @@ int main(int argc, char *argv[]) struct sigaction sig_handler; - sig_handler.sa_handler = ctrlc_handler; + sig_handler.sa_handler = OBSApp::SigIntSignalHandler; sigemptyset(&sig_handler.sa_mask); sig_handler.sa_flags = 0; diff --git a/UI/obs-app.hpp b/UI/obs-app.hpp index c206ecd7e1d794..8e787e241f37ad 100644 --- a/UI/obs-app.hpp +++ b/UI/obs-app.hpp @@ -20,6 +20,9 @@ #include #include #include +#ifndef _WIN32 +#include +#endif #include #include #include @@ -125,6 +128,11 @@ class OBSApp : public QApplication { bool notify(QObject *receiver, QEvent *e) override; +#ifndef _WIN32 + static int sigintFd[2]; + QSocketNotifier *snInt = nullptr; +#endif + public: OBSApp(int &argc, char **argv, profiler_name_store_t *store); ~OBSApp(); @@ -208,9 +216,13 @@ class OBSApp : public QApplication { } inline void PopUITranslation() { translatorHooks.pop_front(); } +#ifndef _WIN32 + static void SigIntSignalHandler(int); +#endif public slots: void Exec(VoidFunc func); + void ProcessSigInt(); signals: void StyleChanged(); From 3fe241e95fa53d2d40fbfd2263afdaa6a8ba00e2 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 24 Mar 2023 14:44:21 -0400 Subject: [PATCH 0463/2225] obs-scripting: Enable Python 3.11 --- deps/obs-scripting/obs-scripting-python-import.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/obs-scripting/obs-scripting-python-import.c b/deps/obs-scripting/obs-scripting-python-import.c index 88dad96909d62b..86776b8bdc3747 100644 --- a/deps/obs-scripting/obs-scripting-python-import.c +++ b/deps/obs-scripting/obs-scripting-python-import.c @@ -40,7 +40,7 @@ #endif #define PY_MAJOR_VERSION_MAX 3 -#define PY_MINOR_VERSION_MAX 10 +#define PY_MINOR_VERSION_MAX 11 bool import_python(const char *python_path, python_version_t *python_version) { From f1223ca566473bc90cf3643711db742b3d976c9c Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 24 Mar 2023 12:44:37 +0100 Subject: [PATCH 0464/2225] UI: Set fragmented MP4/MOV as default for beta/rc Also includes a migration to a new key to ensure backwards-compatibility of profile config. --- UI/window-basic-main-outputs.cpp | 8 ++++---- UI/window-basic-main.cpp | 34 +++++++++++++++++++++++++++++--- UI/window-basic-settings.cpp | 8 ++++---- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index d6e2624cfc5d58..e569d26ed8f157 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1205,7 +1205,7 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) const char *path = config_get_string(main->Config(), "SimpleOutput", "FilePath"); const char *format = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); const char *mux = config_get_string(main->Config(), "SimpleOutput", "MuxerCustom"); bool noSpace = config_get_bool(main->Config(), "SimpleOutput", @@ -1703,7 +1703,7 @@ inline void AdvancedOutput::SetupRecording() int tracks; const char *recFormat = - config_get_string(main->Config(), "AdvOut", "RecFormat"); + config_get_string(main->Config(), "AdvOut", "RecFormat2"); bool is_fragmented = strcmp(recFormat, "fmp4") == 0 || strcmp(recFormat, "fmov") == 0; @@ -2124,7 +2124,7 @@ bool AdvancedOutput::StartRecording() : "RecFilePath"); recFormat = config_get_string(main->Config(), "AdvOut", ffmpegRecording ? "FFExtension" - : "RecFormat"); + : "RecFormat2"); filenameFormat = config_get_string(main->Config(), "Output", "FilenameFormatting"); overwriteIfExists = config_get_bool(main->Config(), "Output", @@ -2227,7 +2227,7 @@ bool AdvancedOutput::StartReplayBuffer() : "RecFilePath"); recFormat = config_get_string(main->Config(), "AdvOut", ffmpegRecording ? "FFExtension" - : "RecFormat"); + : "RecFormat2"); filenameFormat = config_get_string(main->Config(), "Output", "FilenameFormatting"); overwriteIfExists = config_get_bool(main->Config(), "Output", diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 4e81e78a09b518..7cc94006c1ee47 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1378,6 +1378,13 @@ static const double scaled_vals[] = {1.0, 1.25, (1.0 / 0.75), 1.5, 2.5, 2.75, 3.0, 0.0}; extern void CheckExistingCookieId(); +#if OBS_RELEASE_CANDIDATE == 0 && OBS_BETA == 0 +#define DEFAULT_CONTAINER "mkv" +#elif defined(__APPLE__) +#define DEFAULT_CONTAINER "fmov" +#else +#define DEFAULT_CONTAINER "fmp4" +#endif bool OBSBasic::InitBasicConfigDefaults() { @@ -1472,6 +1479,26 @@ bool OBSBasic::InitBasicConfigDefaults() } } + /* ----------------------------------------------------- */ + /* Migrate old container selection (if any) to new key. */ + if (!config_has_user_value(basicConfig, "SimpleOutput", "RecFormat2") && + config_has_user_value(basicConfig, "SimpleOutput", "RecFormat")) { + const char *old_format = config_get_string( + basicConfig, "SimpleOutput", "RecFormat"); + config_set_string(basicConfig, "SimpleOutput", "RecFormat2", + old_format); + changed = true; + } + + if (!config_has_user_value(basicConfig, "AdvOut", "RecFormat2") && + config_has_user_value(basicConfig, "AdvOut", "RecFormat")) { + const char *old_format = + config_get_string(basicConfig, "AdvOut", "RecFormat"); + config_set_string(basicConfig, "AdvOut", "RecFormat2", + old_format); + changed = true; + } + /* ----------------------------------------------------- */ if (changed) @@ -1486,8 +1513,8 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_string(basicConfig, "SimpleOutput", "FilePath", GetDefaultVideoSavePath().c_str()); - config_set_default_string(basicConfig, "SimpleOutput", "RecFormat", - "mkv"); + config_set_default_string(basicConfig, "SimpleOutput", "RecFormat2", + DEFAULT_CONTAINER); config_set_default_uint(basicConfig, "SimpleOutput", "VBitrate", 2500); config_set_default_uint(basicConfig, "SimpleOutput", "ABitrate", 160); config_set_default_bool(basicConfig, "SimpleOutput", "UseAdvanced", @@ -1519,7 +1546,8 @@ bool OBSBasic::InitBasicConfigDefaults() config_set_default_string(basicConfig, "AdvOut", "RecFilePath", GetDefaultVideoSavePath().c_str()); - config_set_default_string(basicConfig, "AdvOut", "RecFormat", "mkv"); + config_set_default_string(basicConfig, "AdvOut", "RecFormat2", + DEFAULT_CONTAINER); config_set_default_bool(basicConfig, "AdvOut", "RecUseRescale", false); config_set_default_uint(basicConfig, "AdvOut", "RecTracks", (1 << 0)); config_set_default_string(basicConfig, "AdvOut", "RecEncoder", "none"); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 2f1ec0d6a6bf82..6114e703bfb45e 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -1909,7 +1909,7 @@ void OBSBasicSettings::LoadSimpleOutputSettings() bool noSpace = config_get_bool(main->Config(), "SimpleOutput", "FileNameWithoutSpace"); const char *format = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); int videoBitrate = config_get_uint(main->Config(), "SimpleOutput", "VBitrate"); const char *streamEnc = config_get_string( @@ -2166,7 +2166,7 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings() const char *type = config_get_string(main->Config(), "AdvOut", "RecType"); const char *format = - config_get_string(main->Config(), "AdvOut", "RecFormat"); + config_get_string(main->Config(), "AdvOut", "RecFormat2"); const char *path = config_get_string(main->Config(), "AdvOut", "RecFilePath"); bool noSpace = config_get_bool(main->Config(), "AdvOut", @@ -3825,7 +3825,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveCombo(ui->simpleOutputABitrate, "SimpleOutput", "ABitrate"); SaveEdit(ui->simpleOutputPath, "SimpleOutput", "FilePath"); SaveCheckBox(ui->simpleNoSpace, "SimpleOutput", "FileNameWithoutSpace"); - SaveComboData(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat"); + SaveComboData(ui->simpleOutRecFormat, "SimpleOutput", "RecFormat2"); SaveCheckBox(ui->simpleOutAdvanced, "SimpleOutput", "UseAdvanced"); SaveComboData(ui->simpleOutPreset, "SimpleOutput", presetType); SaveEdit(ui->simpleOutCustom, "SimpleOutput", "x264Settings"); @@ -3855,7 +3855,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveEdit(ui->advOutRecPath, "AdvOut", "RecFilePath"); SaveCheckBox(ui->advOutNoSpace, "AdvOut", "RecFileNameWithoutSpace"); - SaveComboData(ui->advOutRecFormat, "AdvOut", "RecFormat"); + SaveComboData(ui->advOutRecFormat, "AdvOut", "RecFormat2"); SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder"); SaveComboData(ui->advOutRecAEncoder, "AdvOut", "RecAudioEncoder"); SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale"); From 1ac609f1ff80d3c98e32d925152e1b46f66caef8 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sun, 26 Feb 2023 23:41:56 -0600 Subject: [PATCH 0465/2225] UI, libobs: Fix not handled in switch warnings These warnings were being spit out by GCC on Linux. --- UI/qt-wrappers.cpp | 6 +++++- libobs/obs-nix.c | 2 ++ plugins/linux-v4l2/v4l2-decoder.c | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/UI/qt-wrappers.cpp b/UI/qt-wrappers.cpp index 030ecbeaef2217..b876a0dc4dc782 100644 --- a/UI/qt-wrappers.cpp +++ b/UI/qt-wrappers.cpp @@ -135,14 +135,18 @@ bool QTToGSWindow(QWindow *window, gs_window &gswindow) gswindow.display = obs_get_nix_platform_display(); break; #ifdef ENABLE_WAYLAND - case OBS_NIX_PLATFORM_WAYLAND: + case OBS_NIX_PLATFORM_WAYLAND: { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); gswindow.display = native->nativeResourceForWindow("surface", window); success = gswindow.display != nullptr; break; + } #endif + default: + success = false; + break; } #endif return success; diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c index 8b02bda2bd16bc..36aac709783156 100644 --- a/libobs/obs-nix.c +++ b/libobs/obs-nix.c @@ -416,6 +416,8 @@ bool obs_hotkeys_platform_init(struct obs_core_hotkeys *hotkeys) hotkeys_vtable = obs_nix_wayland_get_hotkeys_vtable(); break; #endif + default: + break; } return hotkeys_vtable->init(hotkeys); diff --git a/plugins/linux-v4l2/v4l2-decoder.c b/plugins/linux-v4l2/v4l2-decoder.c index dc3db4fc2bbea6..f2fa23e98fc5b8 100644 --- a/plugins/linux-v4l2/v4l2-decoder.c +++ b/plugins/linux-v4l2/v4l2-decoder.c @@ -116,6 +116,8 @@ int v4l2_decode_frame(struct obs_source_frame *out, uint8_t *data, case AV_PIX_FMT_YUV444P: out->format = VIDEO_FORMAT_I444; break; + default: + break; } return 0; From 1b689441076dfec0df1a1b41617351ecc6bb5cfd Mon Sep 17 00:00:00 2001 From: cg2121 Date: Fri, 3 Mar 2023 05:03:40 -0600 Subject: [PATCH 0466/2225] UI: Fix transform dialog not being closable If the user clicked away from the source, while the transform dialog is open, the whole dialog would be disabled. The user then couldn't click close or press escape to close the dialog. The only way for them to close it was to click on another source to re-enable it. --- UI/forms/OBSBasicTransform.ui | 1386 +++++++++++++++++---------------- UI/window-basic-transform.cpp | 4 +- 2 files changed, 706 insertions(+), 684 deletions(-) diff --git a/UI/forms/OBSBasicTransform.ui b/UI/forms/OBSBasicTransform.ui index 92839b16b12e14..37be8b2692ac00 100644 --- a/UI/forms/OBSBasicTransform.ui +++ b/UI/forms/OBSBasicTransform.ui @@ -15,64 +15,628 @@ - - - QFormLayout::AllNonFixedFieldsGrow - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 0 - 0 - - - - - 170 - 0 - - - - Basic.TransformWindow.Position - - - Basic.TransformWindow.Position - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 + + + + QFormLayout::AllNonFixedFieldsGrow + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + 4 + + + 4 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 170 + 0 + + + + Basic.TransformWindow.Position + + + Basic.TransformWindow.Position + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.PositionX + + + px + + + 4 + + + -90001.000000000000000 + + + 90001.000000000000000 + + + + + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.PositionY + + + px + + + 4 + + + -90001.000000000000000 + + + 90001.000000000000000 + + + + + + + + + + Basic.TransformWindow.Rotation + + + Basic.TransformWindow.Rotation + + + + + + + + 0 + 0 + + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.Rotation + + + ° + + + -360.000000000000000 + + + 360.000000000000000 + + + 0.100000000000000 + + + + + + + Basic.TransformWindow.Size + + + Basic.TransformWindow.Size + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.Width + + + px + + + 4 + + + -90001.000000000000000 + + + 90001.000000000000000 + + + 1.000000000000000 + + + + + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.Height + + + px + + + 4 + + + -90001.000000000000000 + + + 90001.000000000000000 + + + 1.000000000000000 + + + + + + + + + + Basic.TransformWindow.Alignment + + Basic.TransformWindow.Alignment + + + + + + + Basic.TransformWindow.Alignment + + + Basic.TransformWindow.Alignment.TopLeft + + + + Basic.TransformWindow.Alignment.TopLeft + + + + + Basic.TransformWindow.Alignment.TopCenter + + + + + Basic.TransformWindow.Alignment.TopRight + + + + + Basic.TransformWindow.Alignment.CenterLeft + + - + + Basic.TransformWindow.Alignment.Center + + + + + Basic.TransformWindow.Alignment.CenterRight + + + + + Basic.TransformWindow.Alignment.BottomLeft + + + + + Basic.TransformWindow.Alignment.BottomCenter + + + + + Basic.TransformWindow.Alignment.BottomRight + + + + + + + + Qt::Vertical + + + + 10 + 10 + + + + + + + + Basic.TransformWindow.BoundsType + + + Basic.TransformWindow.BoundsType + + + + + + + Basic.TransformWindow.BoundsType + + + + Basic.TransformWindow.BoundsType.None + + + + + Basic.TransformWindow.BoundsType.Stretch + + + + + Basic.TransformWindow.BoundsType.ScaleInner + + + + + Basic.TransformWindow.BoundsType.ScaleOuter + + + + + Basic.TransformWindow.BoundsType.ScaleToWidth + + + + + Basic.TransformWindow.BoundsType.ScaleToHeight + + + + + Basic.TransformWindow.BoundsType.MaxOnly + + + + + + + + Basic.TransformWindow.BoundsAlignment + + + Basic.TransformWindow.BoundsAlignment + + + + + + + false + + + Basic.TransformWindow.BoundsAlignment + + + Basic.TransformWindow.Alignment.TopLeft + + + + Basic.TransformWindow.Alignment.TopLeft + + + + + Basic.TransformWindow.Alignment.TopCenter + + + + + Basic.TransformWindow.Alignment.TopRight + + + + + Basic.TransformWindow.Alignment.CenterLeft + + + + + Basic.TransformWindow.Alignment.Center + + + + + Basic.TransformWindow.Alignment.CenterRight + + + + + Basic.TransformWindow.Alignment.BottomLeft + + + + + Basic.TransformWindow.Alignment.BottomCenter + + + + + Basic.TransformWindow.Alignment.BottomRight + + + + + + + + Basic.TransformWindow.Bounds + + + Basic.TransformWindow.Bounds + + + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + false + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.BoundsWidth + + + px + + + 4 + + + 1.000000000000000 + + + 90001.000000000000000 + + + + + + + false + + + + 120 + 0 + + + + + 100 + 16777215 + + + + Basic.TransformWindow.BoundsHeight + + + px + + + 4 + + + 1.000000000000000 + + + 90001.000000000000000 + + + + + + + + + + Qt::Vertical + + + + 10 + 10 + + + + + + + + Basic.TransformWindow.Crop + + + Basic.TransformWindow.Crop + + + + + + + + + + 0 + 0 + + - 120 + 100 0 @@ -83,27 +647,27 @@ - Basic.TransformWindow.PositionX + Basic.TransformWindow.CropLeft px - - 4 - - - -90001.000000000000000 - - 90001.000000000000000 + 100000 - - + + + + + 0 + 0 + + - 120 + 100 0 @@ -114,142 +678,53 @@ - Basic.TransformWindow.PositionY + Basic.TransformWindow.CropRight px - - 4 - - - -90001.000000000000000 - - 90001.000000000000000 + 100000 - - - - - - - Basic.TransformWindow.Rotation - - - Basic.TransformWindow.Rotation - - - - - - - - 0 - 0 - - - - - 120 - 0 - - - - - 100 - 16777215 - - - - Basic.TransformWindow.Rotation - - - ° - - - -360.000000000000000 - - - 360.000000000000000 - - - 0.100000000000000 - - - - - - - Basic.TransformWindow.Size - - - Basic.TransformWindow.Size - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 120 - 0 - - - - - 100 - 16777215 - + + + + Left - - Basic.TransformWindow.Width - - - px + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - 4 + + cropLeft - - -90001.000000000000000 + + + + + + Bottom - - 90001.000000000000000 + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - 1.000000000000000 + + cropBottom - - + + + + + 0 + 0 + + - 120 + 100 0 @@ -260,265 +735,27 @@ - Basic.TransformWindow.Height + Basic.TransformWindow.CropTop px - - 4 - - - -90001.000000000000000 - - 90001.000000000000000 - - - 1.000000000000000 + 100000 - - - - - - - Basic.TransformWindow.Alignment - - - Basic.TransformWindow.Alignment - - - - - - - Basic.TransformWindow.Alignment - - - Basic.TransformWindow.Alignment.TopLeft - - - - Basic.TransformWindow.Alignment.TopLeft - - - - - Basic.TransformWindow.Alignment.TopCenter - - - - - Basic.TransformWindow.Alignment.TopRight - - - - - Basic.TransformWindow.Alignment.CenterLeft - - - - - Basic.TransformWindow.Alignment.Center - - - - - Basic.TransformWindow.Alignment.CenterRight - - - - - Basic.TransformWindow.Alignment.BottomLeft - - - - - Basic.TransformWindow.Alignment.BottomCenter - - - - - Basic.TransformWindow.Alignment.BottomRight - - - - - - - - Qt::Vertical - - - - 10 - 10 - - - - - - - - Basic.TransformWindow.BoundsType - - - Basic.TransformWindow.BoundsType - - - - - - - Basic.TransformWindow.BoundsType - - - - Basic.TransformWindow.BoundsType.None - - - - - Basic.TransformWindow.BoundsType.Stretch - - - - - Basic.TransformWindow.BoundsType.ScaleInner - - - - - Basic.TransformWindow.BoundsType.ScaleOuter - - - - - Basic.TransformWindow.BoundsType.ScaleToWidth - - - - - Basic.TransformWindow.BoundsType.ScaleToHeight - - - - - Basic.TransformWindow.BoundsType.MaxOnly - - - - - - - - Basic.TransformWindow.BoundsAlignment - - - Basic.TransformWindow.BoundsAlignment - - - - - - - false - - - Basic.TransformWindow.BoundsAlignment - - - Basic.TransformWindow.Alignment.TopLeft - - - - Basic.TransformWindow.Alignment.TopLeft - - - - - Basic.TransformWindow.Alignment.TopCenter - - - - - Basic.TransformWindow.Alignment.TopRight - - - - - Basic.TransformWindow.Alignment.CenterLeft - - - - - Basic.TransformWindow.Alignment.Center - - - - - Basic.TransformWindow.Alignment.CenterRight - - - - - Basic.TransformWindow.Alignment.BottomLeft - - - - - Basic.TransformWindow.Alignment.BottomCenter - - - - - Basic.TransformWindow.Alignment.BottomRight - - - - - - - - Basic.TransformWindow.Bounds - - - Basic.TransformWindow.Bounds - - - - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - false + + + + + 0 + 0 + - 120 + 100 0 @@ -529,276 +766,59 @@ - Basic.TransformWindow.BoundsWidth + Basic.TransformWindow.CropBottom px - - 4 - - - 1.000000000000000 - - 90001.000000000000000 + 100000 - - - - false + + + + Top - - - 120 - 0 - + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 100 - 16777215 - + + cropTop - - Basic.TransformWindow.BoundsHeight + + + + + + Right - - px + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - 4 + + cropRight - - 1.000000000000000 + + + + + + Qt::Horizontal - - 90001.000000000000000 + + + 0 + 0 + - + - - - - - - Qt::Vertical - - - - 10 - 10 - - - - - - - - Basic.TransformWindow.Crop - - - Basic.TransformWindow.Crop - - - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Basic.TransformWindow.CropLeft - - - px - - - 100000 - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Basic.TransformWindow.CropRight - - - px - - - 100000 - - - - - - - Left - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - cropLeft - - - - - - - Bottom - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - cropBottom - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Basic.TransformWindow.CropTop - - - px - - - 100000 - - - - - - - - 0 - 0 - - - - - 100 - 0 - - - - - 100 - 16777215 - - - - Basic.TransformWindow.CropBottom - - - px - - - 100000 - - - - - - - Top - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - cropTop - - - - - - - Right - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - cropRight - - - - - - - Qt::Horizontal - - - - 0 - 0 - - - - - - - +
+ +
diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index 830b9d012d9577..c77b93b73320fe 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -144,7 +144,9 @@ void OBSBasicTransform::SetItemQt(OBSSceneItem newItem) if (item) RefreshControls(); - setEnabled(!!item); + bool enable = !!item; + ui->container->setEnabled(enable); + ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(enable); } void OBSBasicTransform::OBSChannelChanged(void *param, calldata_t *data) From d18b38e784a1e8ffef4ded32eece7bf6b7ef0589 Mon Sep 17 00:00:00 2001 From: pkv Date: Fri, 22 Jul 2022 15:28:26 +0200 Subject: [PATCH 0467/2225] UI: Enable multiple audio tracks in Simple Output recording This adds support for multiple audio tracks in Simple Output for recordings. This is enabled for all quality presets (including "Lossless") except "Same as Stream". This is also enabled for the Replay Buffer. An exception is made for flv recording format since it only allows a single audio track. The recorded track (and streaming track) is then Track 1 as before. Signed-off-by: pkv --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicSettings.ui | 221 ++++++++++++++++++++++++++++++- UI/window-basic-main-outputs.cpp | 103 +++++++++++++- UI/window-basic-main.cpp | 2 + UI/window-basic-settings.cpp | 60 ++++++++- 5 files changed, 378 insertions(+), 9 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index c1e29ea24eece5..e04cab93ab1bb0 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -994,6 +994,7 @@ Basic.Settings.Output.Simple.Codec.AAC="AAC" Basic.Settings.Output.Simple.Codec.AAC.Default="AAC (Default)" Basic.Settings.Output.Simple.Codec.Opus="Opus" Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Uses Track 2)" +Basic.Settings.Output.Simple.RecAudioTrack="Audio Track" Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Incompatible Resolution/Framerate" Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="This streaming service does not support your current output resolution and/or framerate. They will be changed to the closest compatible value:\n\n%1\n\nDo you want to continue?" Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Resolution: %1" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 7eb79970070c94..b09ab68f38feb9 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1939,6 +1939,217 @@ + + + Basic.Settings.Output.Simple.RecAudioTrack + + + + + + + + 0 + 0 + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 1 + + + + + + + + 0 + 0 + + + + 2 + + + + + + + + 0 + 0 + + + + 3 + + + + + + + + 0 + 0 + + + + 4 + + + + + + + + 0 + 0 + + + + 5 + + + + + + + + 0 + 0 + + + + 6 + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 1 + + + true + + + + + + + + 0 + 0 + + + + 2 + + + + + + + + 0 + 0 + + + + 3 + + + + + + + + 0 + 0 + + + + 4 + + + + + + + + 0 + 0 + + + + 5 + + + + + + + + 0 + 0 + + + + 6 + + + + + + + + Basic.Settings.Output.CustomMuxerSettings @@ -1948,10 +2159,10 @@ - + - + Basic.Settings.Output.UseReplayBuffer @@ -7621,6 +7832,12 @@ simpleOutPreset simpleOutAdvanced simpleOutCustom + simpleOutRecTrack1 + simpleOutRecTrack2 + simpleOutRecTrack3 + simpleOutRecTrack4 + simpleOutRecTrack5 + simpleOutRecTrack6 simpleOutputPath simpleOutputBrowse simpleNoSpace diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index e569d26ed8f157..4cdeb94bd87cbc 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -438,6 +438,7 @@ struct SimpleOutput : BasicOutputHandler { OBSEncoder audioRecording; OBSEncoder audioArchive; OBSEncoder videoRecording; + OBSEncoder audioTrack[MAX_AUDIO_MIXES]; string videoEncoder; string videoQuality; @@ -502,8 +503,6 @@ void SimpleOutput::LoadRecordingPreset_Lossless() obs_data_set_string(settings, "video_encoder", "utvideo"); obs_data_set_string(settings, "audio_encoder", "pcm_s16le"); - int aMixes = 1; - obs_output_set_mixers(fileOutput, aMixes); obs_output_update(fileOutput, settings); } @@ -611,6 +610,25 @@ void SimpleOutput::LoadRecordingPreset() if (!success) throw "Failed to create audio recording encoder " "(simple output)"; + for (int i = 0; i < MAX_AUDIO_MIXES; i++) { + char name[23]; + if (strcmp(audio_encoder, "opus") == 0) { + snprintf(name, sizeof name, + "simple_opus_recording%d", i); + success = CreateSimpleOpusEncoder( + audioTrack[i], GetAudioBitrate(), name, + i); + } else { + snprintf(name, sizeof name, + "simple_aac_recording%d", i); + success = CreateSimpleAACEncoder( + audioTrack[i], GetAudioBitrate(), name, + i); + } + if (!success) + throw "Failed to create multi-track audio recording encoder " + "(simple output)"; + } } } @@ -813,7 +831,23 @@ void SimpleOutput::UpdateRecordingAudioSettings() obs_data_set_int(settings, "bitrate", 192); obs_data_set_string(settings, "rate_control", "CBR"); - obs_encoder_update(audioRecording, settings); + int tracks = + config_get_int(main->Config(), "SimpleOutput", "RecTracks"); + const char *recFormat = + config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + const char *quality = + config_get_string(main->Config(), "SimpleOutput", "RecQuality"); + bool flv = strcmp(recFormat, "flv") == 0; + + if (flv || strcmp(quality, "Stream") == 0) { + obs_encoder_update(audioRecording, settings); + } else { + for (int i = 0; i < MAX_AUDIO_MIXES; i++) { + if ((tracks & (1 << i)) != 0) { + obs_encoder_update(audioTrack[i], settings); + } + } + } } #define CROSS_DIST_CUTOFF 2000.0 @@ -987,6 +1021,11 @@ inline void SimpleOutput::SetupOutputs() obs_encoder_set_video(videoStreaming, obs_get_video()); obs_encoder_set_audio(audioStreaming, obs_get_audio()); obs_encoder_set_audio(audioArchive, obs_get_audio()); + int tracks = + config_get_int(main->Config(), "SimpleOutput", "RecTracks"); + const char *recFormat = + config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + bool flv = strcmp(recFormat, "flv") == 0; if (usingRecordingPreset) { if (ffmpegOutput) { @@ -994,8 +1033,21 @@ inline void SimpleOutput::SetupOutputs() obs_get_audio()); } else { obs_encoder_set_video(videoRecording, obs_get_video()); - obs_encoder_set_audio(audioRecording, obs_get_audio()); + if (flv) { + obs_encoder_set_audio(audioRecording, + obs_get_audio()); + } else { + for (int i = 0; i < MAX_AUDIO_MIXES; i++) { + if ((tracks & (1 << i)) != 0) { + obs_encoder_set_audio( + audioTrack[i], + obs_get_audio()); + } + } + } } + } else { + obs_encoder_set_audio(audioRecording, obs_get_audio()); } } @@ -1175,6 +1227,16 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) void SimpleOutput::UpdateRecording() { + const char *recFormat = + config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + bool flv = strcmp(recFormat, "flv") == 0; + int tracks = + config_get_int(main->Config(), "SimpleOutput", "RecTracks"); + int idx = 0; + int idx2 = 0; + const char *quality = + config_get_string(main->Config(), "SimpleOutput", "RecQuality"); + if (replayBufferActive || recordingActive) return; @@ -1190,11 +1252,33 @@ void SimpleOutput::UpdateRecording() if (!ffmpegOutput) { obs_output_set_video_encoder(fileOutput, videoRecording); - obs_output_set_audio_encoder(fileOutput, audioRecording, 0); + if (flv || strcmp(quality, "Stream") == 0) { + obs_output_set_audio_encoder(fileOutput, audioRecording, + 0); + } else { + for (int i = 0; i < MAX_AUDIO_MIXES; i++) { + if ((tracks & (1 << i)) != 0) { + obs_output_set_audio_encoder( + fileOutput, audioTrack[i], + idx++); + } + } + } } if (replayBuffer) { obs_output_set_video_encoder(replayBuffer, videoRecording); - obs_output_set_audio_encoder(replayBuffer, audioRecording, 0); + if (flv || strcmp(quality, "Stream") == 0) { + obs_output_set_audio_encoder(replayBuffer, + audioRecording, 0); + } else { + for (int i = 0; i < MAX_AUDIO_MIXES; i++) { + if ((tracks & (1 << i)) != 0) { + obs_output_set_audio_encoder( + replayBuffer, audioTrack[i], + idx2++); + } + } + } } recordingConfigured = true; @@ -1222,6 +1306,11 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) config_get_int(main->Config(), "SimpleOutput", "RecRBTime"); int rbSize = config_get_int(main->Config(), "SimpleOutput", "RecRBSize"); + int tracks = + config_get_int(main->Config(), "SimpleOutput", "RecTracks"); + const char *recFormat = + config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + bool flv = strcmp(recFormat, "flv") == 0; bool is_fragmented = strcmp(format, "fmp4") == 0 || strcmp(format, "fmov") == 0; @@ -1253,6 +1342,8 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) f.c_str(), ffmpegOutput); obs_data_set_string(settings, ffmpegOutput ? "url" : "path", strPath.c_str()); + if (ffmpegOutput) + obs_output_set_mixers(fileOutput, tracks); } // Use fragmented MOV/MP4 if user has not already specified custom movflags diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 7cc94006c1ee47..d7ae3e94fbedd0 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1534,6 +1534,8 @@ bool OBSBasic::InitBasicConfigDefaults() "StreamAudioEncoder", "aac"); config_set_default_string(basicConfig, "SimpleOutput", "RecAudioEncoder", "aac"); + config_set_default_uint(basicConfig, "SimpleOutput", "RecTracks", + (1 << 0)); config_set_default_bool(basicConfig, "AdvOut", "ApplyServiceSettings", true); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 6114e703bfb45e..a50bc39ecc4fac 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -493,6 +493,12 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->simpleOutRecQuality, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutRecAEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack1, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack2, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack3, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack4, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack5, CHECK_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->simpleOutRecTrack6, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleReplayBuf, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->simpleRBSecMax, SCROLL_CHANGED, OUTPUTS_CHANGED); @@ -1946,6 +1952,15 @@ void OBSBasicSettings::LoadSimpleOutputSettings() config_get_int(main->Config(), "SimpleOutput", "RecRBTime"); int rbSize = config_get_int(main->Config(), "SimpleOutput", "RecRBSize"); + int tracks = + config_get_int(main->Config(), "SimpleOutput", "RecTracks"); + + ui->simpleOutRecTrack1->setChecked(tracks & (1 << 0)); + ui->simpleOutRecTrack2->setChecked(tracks & (1 << 1)); + ui->simpleOutRecTrack3->setChecked(tracks & (1 << 2)); + ui->simpleOutRecTrack4->setChecked(tracks & (1 << 3)); + ui->simpleOutRecTrack5->setChecked(tracks & (1 << 4)); + ui->simpleOutRecTrack6->setChecked(tracks & (1 << 5)); curPreset = preset; curQSVPreset = qsvPreset; @@ -3837,6 +3852,14 @@ void OBSBasicSettings::SaveOutputSettings() SaveCheckBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB"); SaveSpinBox(ui->simpleRBSecMax, "SimpleOutput", "RecRBTime"); SaveSpinBox(ui->simpleRBMegsMax, "SimpleOutput", "RecRBSize"); + config_set_int( + main->Config(), "SimpleOutput", "RecTracks", + (ui->simpleOutRecTrack1->isChecked() ? (1 << 0) : 0) | + (ui->simpleOutRecTrack2->isChecked() ? (1 << 1) : 0) | + (ui->simpleOutRecTrack3->isChecked() ? (1 << 2) : 0) | + (ui->simpleOutRecTrack4->isChecked() ? (1 << 3) : 0) | + (ui->simpleOutRecTrack5->isChecked() ? (1 << 4) : 0) | + (ui->simpleOutRecTrack6->isChecked() ? (1 << 5) : 0)); curAdvStreamEncoder = GetComboData(ui->advOutEncoder); @@ -5433,12 +5456,31 @@ void OBSBasicSettings::SimpleReplayBufferChanged() bool replayBufferEnabled = ui->simpleReplayBuf->isChecked(); bool lossless = qual == "Lossless"; bool streamQuality = qual == "Stream"; + int abitrate = 0; ui->simpleRBMegsMax->setVisible(!streamQuality); ui->simpleRBMegsMaxLabel->setVisible(!streamQuality); + if (ui->simpleOutRecFormat->currentText().compare("flv") == 0 || + streamQuality) { + abitrate = ui->simpleOutputABitrate->currentText().toInt(); + } else { + int delta = ui->simpleOutputABitrate->currentText().toInt(); + if (ui->simpleOutRecTrack1->isChecked()) + abitrate += delta; + if (ui->simpleOutRecTrack2->isChecked()) + abitrate += delta; + if (ui->simpleOutRecTrack3->isChecked()) + abitrate += delta; + if (ui->simpleOutRecTrack4->isChecked()) + abitrate += delta; + if (ui->simpleOutRecTrack5->isChecked()) + abitrate += delta; + if (ui->simpleOutRecTrack6->isChecked()) + abitrate += delta; + } + int vbitrate = ui->simpleOutputVBitrate->value(); - int abitrate = ui->simpleOutputABitrate->currentText().toInt(); int seconds = ui->simpleRBSecMax->value(); // Set maximum to 75% of installed memory @@ -5790,6 +5832,22 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() QTStr("Basic.Settings.Advanced.AutoRemux").arg("mp4")); } + if (qual == "Stream") { + ui->simpleRecTrackWidget->setCurrentWidget(ui->simpleFlvTracks); + ui->simpleFlvTracks->setEnabled(false); + } else if (qual == "Lossless") { + ui->simpleRecTrackWidget->setCurrentWidget(ui->simpleRecTracks); + } else { + if (format == "flv") { + ui->simpleRecTrackWidget->setCurrentWidget( + ui->simpleFlvTracks); + ui->simpleFlvTracks->setEnabled(false); + } else { + ui->simpleRecTrackWidget->setCurrentWidget( + ui->simpleRecTracks); + } + } + if (warning.isEmpty()) return; From d57d09e22915374578c439a5df74674a9e9a6568 Mon Sep 17 00:00:00 2001 From: pkv Date: Sat, 25 Mar 2023 20:28:05 +0100 Subject: [PATCH 0468/2225] UI: Move tracks in Advanced Standard Recording Per request of our UI design chief, the tracks from Standard Recording (Advanced Output) are moved below the audio encoder field. Additionally, for consistency with Simple output, the video encoder field is moved above the audio encoder (suggestion from Rodney). Signed-off-by: pkv --- UI/forms/OBSBasicSettings.ui | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index b09ab68f38feb9..d08f5bb3421cd7 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -2895,14 +2895,14 @@ - + Basic.Settings.Output.Adv.AudioTrack - + @@ -3103,7 +3103,7 @@ - + Basic.Settings.Output.Encoder.Audio @@ -3120,14 +3120,14 @@ - + Basic.Settings.Output.Encoder.Video - + From 100258b0f613dfdbf55e1714953a84b271b165d5 Mon Sep 17 00:00:00 2001 From: shiina424 Date: Fri, 24 Mar 2023 06:26:06 +0900 Subject: [PATCH 0469/2225] obs-filters: Fix translation key --- plugins/obs-filters/expander-filter.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/plugins/obs-filters/expander-filter.c b/plugins/obs-filters/expander-filter.c index 524e84115e03d9..07d69e6d03feb5 100644 --- a/plugins/obs-filters/expander-filter.c +++ b/plugins/obs-filters/expander-filter.c @@ -37,19 +37,19 @@ #define S_KNEE "knee_width" #define MT_ obs_module_text -#define TEXT_RATIO MT_("expander.Ratio") -#define TEXT_THRESHOLD MT_("expander.Threshold") -#define TEXT_ATTACK_TIME MT_("expander.AttackTime") -#define TEXT_RELEASE_TIME MT_("expander.ReleaseTime") -#define TEXT_OUTPUT_GAIN MT_("expander.OutputGain") -#define TEXT_DETECTOR MT_("expander.Detector") -#define TEXT_PEAK MT_("expander.Peak") -#define TEXT_RMS MT_("expander.RMS") -#define TEXT_NONE MT_("expander.None") -#define TEXT_PRESETS MT_("expander.Presets") -#define TEXT_PRESETS_EXP MT_("expander.Presets.Expander") -#define TEXT_PRESETS_GATE MT_("expander.Presets.Gate") -#define TEXT_KNEE MT_("expander.Knee.Width") +#define TEXT_RATIO MT_("Expander.Ratio") +#define TEXT_THRESHOLD MT_("Expander.Threshold") +#define TEXT_ATTACK_TIME MT_("Expander.AttackTime") +#define TEXT_RELEASE_TIME MT_("Expander.ReleaseTime") +#define TEXT_OUTPUT_GAIN MT_("Expander.OutputGain") +#define TEXT_DETECTOR MT_("Expander.Detector") +#define TEXT_PEAK MT_("Expander.Peak") +#define TEXT_RMS MT_("Expander.RMS") +#define TEXT_NONE MT_("Expander.None") +#define TEXT_PRESETS MT_("Expander.Presets") +#define TEXT_PRESETS_EXP MT_("Expander.Presets.Expander") +#define TEXT_PRESETS_GATE MT_("Expander.Presets.Gate") +#define TEXT_KNEE MT_("Expander.Knee.Width") #define MIN_RATIO 1.0f #define MAX_RATIO 20.0f From af5d4fb8bbe208b7243311f6df502624d8b53063 Mon Sep 17 00:00:00 2001 From: shiina424 Date: Fri, 24 Mar 2023 06:27:14 +0900 Subject: [PATCH 0470/2225] vlc-video: Fix translation key --- plugins/vlc-video/vlc-video-source.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/vlc-video/vlc-video-source.c b/plugins/vlc-video/vlc-video-source.c index 559a45827531bb..54b32d52c9ba2d 100644 --- a/plugins/vlc-video/vlc-video-source.c +++ b/plugins/vlc-video/vlc-video-source.c @@ -27,7 +27,7 @@ #define T_(text) obs_module_text(text) #define T_PLAYLIST T_("Playlist") #define T_LOOP T_("LoopPlaylist") -#define T_SHUFFLE T_("shuffle") +#define T_SHUFFLE T_("Shuffle") #define T_BEHAVIOR T_("PlaybackBehavior") #define T_BEHAVIOR_STOP_RESTART T_("PlaybackBehavior.StopRestart") #define T_BEHAVIOR_PAUSE_UNPAUSE T_("PlaybackBehavior.PauseUnpause") From fe716ef39ea6f1922cd2f82d928e6ee65d82f565 Mon Sep 17 00:00:00 2001 From: shiina424 Date: Sun, 26 Mar 2023 01:47:07 +0900 Subject: [PATCH 0471/2225] UI: Fix translation key --- UI/window-basic-auto-config-test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/window-basic-auto-config-test.cpp b/UI/window-basic-auto-config-test.cpp index c6d7a694267623..2d89d73472c8d3 100644 --- a/UI/window-basic-auto-config-test.cpp +++ b/UI/window-basic-auto-config-test.cpp @@ -85,8 +85,8 @@ class TestMode { /* ------------------------------------------------------------------------- */ #define TEST_STR(x) "Basic.AutoConfig.TestPage." x -#define SUBTITLE_TESTING TEST_STR("Subtitle.Testing") -#define SUBTITLE_COMPLETE TEST_STR("Subtitle.Complete") +#define SUBTITLE_TESTING TEST_STR("SubTitle.Testing") +#define SUBTITLE_COMPLETE TEST_STR("SubTitle.Complete") #define TEST_BW TEST_STR("TestingBandwidth") #define TEST_BW_NO_OUTPUT TEST_STR("TestingBandwidth.NoOutput") #define TEST_BW_CONNECTING TEST_STR("TestingBandwidth.Connecting") From d291830d23f3cb604bec148daf40bf804e453aae Mon Sep 17 00:00:00 2001 From: cg2121 Date: Thu, 2 Mar 2023 06:35:25 -0600 Subject: [PATCH 0472/2225] libobs: Copy private scene item data when duplicating scenes For example, this makes sure scene item colors are copied when duplicating a scene. This also removed the now redundant private data variable. --- libobs/obs-scene.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 93a424df273496..0744374ccd7de0 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -1636,8 +1636,7 @@ static inline obs_source_t *new_ref(obs_source_t *source) static inline void duplicate_item_data(struct obs_scene_item *dst, struct obs_scene_item *src, bool defer_texture_update, - bool duplicate_hotkeys, - bool duplicate_private_data) + bool duplicate_hotkeys) { struct obs_scene *dst_scene = dst->parent; @@ -1697,9 +1696,7 @@ static inline void duplicate_item_data(struct obs_scene_item *dst, os_atomic_set_bool(&dst->update_transform, true); } - if (duplicate_private_data) { - obs_data_apply(dst->private_settings, src->private_settings); - } + obs_data_apply(dst->private_settings, src->private_settings); } obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name, @@ -1760,8 +1757,7 @@ obs_scene_t *obs_scene_duplicate(obs_scene_t *scene, const char *name, continue; } - duplicate_item_data(new_item, item, false, false, - false); + duplicate_item_data(new_item, item, false, false); obs_source_release(source); } @@ -3425,7 +3421,7 @@ void obs_sceneitem_group_ungroup(obs_sceneitem_t *item) remove_group_transform(item, last); dst = obs_scene_add_internal(scene, last->source, insert_after); - duplicate_item_data(dst, last, true, true, true); + duplicate_item_data(dst, last, true, true); apply_group_transform(last, item); if (!last->next) From b86e878a757c9c3a08f16f18c69f3726a72fabc5 Mon Sep 17 00:00:00 2001 From: derrod Date: Sun, 26 Mar 2023 01:38:19 +0100 Subject: [PATCH 0473/2225] UI: Switch format tooltip based on user selection --- UI/data/locale/en-US.ini | 3 ++- UI/forms/OBSBasicSettings.ui | 6 ------ UI/window-basic-settings.cpp | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index e04cab93ab1bb0..6ef89a283b56fe 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -943,7 +943,8 @@ Basic.Settings.Output.Format.TS="MPEG-TS (.ts)" Basic.Settings.Output.Format.HLS="HLS (.m3u8 + .ts)" Basic.Settings.Output.Format.fMP4="Fragmented MP4 (.mp4)" Basic.Settings.Output.Format.fMOV="Fragmented MOV (.mov)" -Basic.Settings.Output.Format.TT="Fragmented MP4/MOV writes the recording in chunks and does not require the same finalization as traditional MP4/MOV files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary." +Basic.Settings.Output.Format.TT.fmov="Fragmented MOV writes the recording in chunks and does not require the same finalization as traditional MOV files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary." +Basic.Settings.Output.Format.TT.fmp4="Fragmented MP4 writes the recording in chunks and does not require the same finalization as traditional MP4 files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary." Basic.Settings.Output.Encoder.Video="Video Encoder" Basic.Settings.Output.Encoder.Audio="Audio Encoder" Basic.Settings.Output.SelectDirectory="Select Recording Directory" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index d08f5bb3421cd7..b7b47a1d45ba75 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1901,9 +1901,6 @@ - - Basic.Settings.Output.Format.TT - false @@ -2878,9 +2875,6 @@ - - Basic.Settings.Output.Format.TT - 0 diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index a50bc39ecc4fac..3d1b083e890254 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -4998,6 +4998,15 @@ void OBSBasicSettings::AdvOutRecCheckCodecs() { QString recFormat = ui->advOutRecFormat->currentData().toString(); + /* Set tooltip if available */ + QString tooltip = + QTStr("Basic.Settings.Output.Format.TT." + recFormat.toUtf8()); + + if (!tooltip.startsWith("Basic.Settings.Output")) + ui->advOutRecFormat->setToolTip(tooltip); + else + ui->advOutRecFormat->setToolTip(nullptr); + string format = recFormat.toStdString(); /* Remove leading "f" for fragmented MP4/MOV */ if (format == "fmp4" || format == "fmov") @@ -5759,6 +5768,14 @@ void OBSBasicSettings::SimpleRecordingEncoderChanged() } QString format = ui->simpleOutRecFormat->currentData().toString(); + /* Set tooltip if available */ + QString tooltip = + QTStr("Basic.Settings.Output.Format.TT." + format.toUtf8()); + + if (!tooltip.startsWith("Basic.Settings.Output")) + ui->simpleOutRecFormat->setToolTip(tooltip); + else + ui->simpleOutRecFormat->setToolTip(nullptr); if (qual == "Lossless") { if (!warning.isEmpty()) From 4d5cf98de07be4b596e9045cc5e446aa2d071cf7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 23 Mar 2023 21:06:31 +0100 Subject: [PATCH 0474/2225] linux-pipewire: Add missing struct typedef for older PipeWire This allows building against PipeWire versions lower than 0.3.62. The missing structure is copied verbatim from: https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests/1423 --- plugins/linux-pipewire/pipewire.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/linux-pipewire/pipewire.c b/plugins/linux-pipewire/pipewire.c index c11fa33e940498..69eb27d1b8fda5 100644 --- a/plugins/linux-pipewire/pipewire.c +++ b/plugins/linux-pipewire/pipewire.c @@ -52,6 +52,9 @@ enum spa_meta_videotransform_value { #define SPA_META_VideoTransform 8 +struct spa_meta_videotransform { + uint32_t transform; /**< orientation transformation that was applied to the buffer */ +}; #endif #define CURSOR_META_SIZE(width, height) \ From f4e8a5b98dc9da776288e571205401756ac85109 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Thu, 23 Mar 2023 20:55:07 +0100 Subject: [PATCH 0475/2225] CI: Enable PipeWire on Ubuntu 22.04 --- .github/workflows/main.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c450c2facf7c6f..95eaf9f613354e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -206,6 +206,9 @@ jobs: strategy: matrix: ubuntu: ['ubuntu-20.04', 'ubuntu-22.04'] + include: + - ubuntu: 'ubuntu-20.04' + script_options: '--disable-pipewire' if: always() needs: [config, clang_check] defaults: @@ -248,10 +251,10 @@ jobs: - name: 'Install dependencies' env: RESTORED_CEF: ${{ steps.cef-cache.outputs.cache-hit }} - run: CI/linux/01_install_dependencies.sh --disable-pipewire + run: CI/linux/01_install_dependencies.sh ${{ matrix.script_options }} - name: 'Build OBS' - run: CI/linux/02_build_obs.sh --disable-pipewire + run: CI/linux/02_build_obs.sh ${{ matrix.script_options }} - name: 'Run tests' if: success() From 0ed53ada035233ff21d053264f46897f4d78802a Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Wed, 15 Mar 2023 20:51:38 +0100 Subject: [PATCH 0476/2225] obs-ffmpeg: Use more actionable error messages for hardware encoders Telling a user to "Check your driver is up to date" is too open to interpretation, many users will use Windows Update or Device Manager to check for updates which doesn't help. Instead, let's explicitly tell them what is most likely to fix the problem. --- plugins/obs-ffmpeg/data/locale/en-US.ini | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/obs-ffmpeg/data/locale/en-US.ini b/plugins/obs-ffmpeg/data/locale/en-US.ini index 64371eff7f0380..55bbe919d011d2 100644 --- a/plugins/obs-ffmpeg/data/locale/en-US.ini +++ b/plugins/obs-ffmpeg/data/locale/en-US.ini @@ -95,17 +95,17 @@ Encoder.Error="Failed to open %1: %2" Encoder.Timeout="Encoder %1 is taking too long to encode (timeout: %2 seconds)" AMF.Error="Failed to open AMF codec: %1" -AMF.GenericError="Check your video drivers are up to date. Try closing other recording software which might be using the AMD encoder such as the Radeon Software or Windows 10 Game DVR." +AMF.GenericError="Try installing the latest AMD driver and closing other recording software that might be using the AMD encoder such as the Radeon Software or Windows Game DVR." AMF.8bitUnsupportedHdr="OBS does not support 8-bit output of Rec. 2100." AMF.10bitUnsupportedAvc="Cannot perform 10-bit encode on AMD H.264 encoder." NVENC.Error="Failed to open NVENC codec: %1" -NVENC.GenericError="Check your video drivers are up to date. Try closing other recording software which might be using NVENC such as NVIDIA Shadowplay or Windows 10 Game DVR." +NVENC.GenericError="Try installing the latest NVIDIA driver and closing other recording software that might be using NVENC such as NVIDIA ShadowPlay or Windows Game DVR." NVENC.BadGPUIndex="You have selected GPU %1 in your output encoder settings. Set this back to 0 and try again." -NVENC.OutdatedDriver="Your current video card driver does not support this NVENC version, please update your drivers." -NVENC.UnsupportedDevice="NVENC Error: Unsupported device. Check your video card supports NVENC and that the drivers are up to date." -NVENC.TooManySessions="NVENC Error: Too many concurrent sessions. Try closing other recording software which might be using NVENC such as NVIDIA Shadowplay or Windows 10 Game DVR." -NVENC.CheckDrivers="Please check your video drivers are up to date." +NVENC.OutdatedDriver="The installed NVIDIA driver does not support this NVENC version, try updating the driver." +NVENC.UnsupportedDevice="NVENC Error: Unsupported device. Check that your video card supports NVENC and try updating the driver." +NVENC.TooManySessions="NVENC Error: Too many concurrent sessions. Try closing other recording software that might be using NVENC such as NVIDIA ShadowPlay or Windows Game DVR." +NVENC.CheckDrivers="Try installing the latest NVIDIA driver." AV1.8bitUnsupportedHdr="OBS does not support 8-bit output of Rec. 2100." From 9b270c38e8e319c940bd151026e399d6ae24d9b6 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Sat, 25 Mar 2023 22:41:31 -0400 Subject: [PATCH 0477/2225] UI: Remove unused variable This variable was added in d18b38e784a1e8ffef4ded32eece7bf6b7ef0589, but it is not used. Let's remove it. --- UI/window-basic-main-outputs.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 4cdeb94bd87cbc..de6dc904c1f7ac 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1310,7 +1310,6 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) config_get_int(main->Config(), "SimpleOutput", "RecTracks"); const char *recFormat = config_get_string(main->Config(), "SimpleOutput", "RecFormat"); - bool flv = strcmp(recFormat, "flv") == 0; bool is_fragmented = strcmp(format, "fmp4") == 0 || strcmp(format, "fmov") == 0; From 39afa665a1103136784a2c2c0a94489f122cae39 Mon Sep 17 00:00:00 2001 From: Jim Date: Sat, 25 Mar 2023 22:47:52 -0700 Subject: [PATCH 0478/2225] UI: Always print debug log to stdout if Debug build Makes it easier to debug certain issues when building on non-Windows machines. --- UI/obs-app.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 31bef1eee4cb0d..cdd1117e4e175c 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -410,8 +410,12 @@ static void do_log(int log_level, const char *msg, va_list args, void *param) } #endif +#if !defined(_WIN32) && defined(_DEBUG) + def_log_handler(log_level, msg, args2, nullptr); +#endif + if (log_level <= LOG_INFO || log_verbose) { -#ifndef _WIN32 +#if !defined(_WIN32) && !defined(_DEBUG) def_log_handler(log_level, msg, args2, nullptr); #endif if (!too_many_repeated_entries(logFile, msg, str)) From 35f037da47703b02ca91a4ed29bad262120ccd0d Mon Sep 17 00:00:00 2001 From: Jim Date: Sat, 25 Mar 2023 22:48:35 -0700 Subject: [PATCH 0479/2225] deps/media-playback: Fix preloaded videos stopping prematurely The incorrect variable was used in a comparison, causing playback to stop prematurely depending on whether the audio data or video data ended first. Closes obs-project/obs-studio#8422 --- deps/media-playback/media-playback/cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/media-playback/media-playback/cache.c b/deps/media-playback/media-playback/cache.c index 3314ac075bae6e..9155ce5ffb4cc7 100644 --- a/deps/media-playback/media-playback/cache.c +++ b/deps/media-playback/media-playback/cache.c @@ -262,7 +262,7 @@ static void mp_cache_next_video(mp_cache_t *c, bool preload) static void mp_cache_next_audio(mp_cache_t *c) { /* eof check */ - if (c->next_a_idx == c->video_frames.num) { + if (c->next_a_idx == c->audio_segments.num) { if (mp_media_can_play_audio(c)) c->cur_a_idx = c->next_a_idx; return; From 5d287734a8daade45ef168c284882b50d7a29d36 Mon Sep 17 00:00:00 2001 From: pkv Date: Sun, 26 Mar 2023 07:07:25 +0200 Subject: [PATCH 0480/2225] UI: Switch RecFormat to RecFormat2 Commit f1223ca566473bc90cf3643711db742b3d976c9c (UI: Set fragmented MP4/MOV as default for beta/rc) changed RecFormat to RecFormat2. This conflicts with the use of RecFormat introduced in d18b38e784a1e8ffef4ded32eece7bf6b7ef0589 (UI: Enable multiple audio tracks in Simple Output recording). This fixes the issue. An unused var is also removed. Signed-off-by: pkv --- UI/window-basic-main-outputs.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index de6dc904c1f7ac..1ec4a488449ef9 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -834,7 +834,7 @@ void SimpleOutput::UpdateRecordingAudioSettings() int tracks = config_get_int(main->Config(), "SimpleOutput", "RecTracks"); const char *recFormat = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); const char *quality = config_get_string(main->Config(), "SimpleOutput", "RecQuality"); bool flv = strcmp(recFormat, "flv") == 0; @@ -1024,7 +1024,7 @@ inline void SimpleOutput::SetupOutputs() int tracks = config_get_int(main->Config(), "SimpleOutput", "RecTracks"); const char *recFormat = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); bool flv = strcmp(recFormat, "flv") == 0; if (usingRecordingPreset) { @@ -1228,7 +1228,7 @@ bool SimpleOutput::StartStreaming(obs_service_t *service) void SimpleOutput::UpdateRecording() { const char *recFormat = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); + config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); bool flv = strcmp(recFormat, "flv") == 0; int tracks = config_get_int(main->Config(), "SimpleOutput", "RecTracks"); @@ -1308,8 +1308,6 @@ bool SimpleOutput::ConfigureRecording(bool updateReplayBuffer) config_get_int(main->Config(), "SimpleOutput", "RecRBSize"); int tracks = config_get_int(main->Config(), "SimpleOutput", "RecTracks"); - const char *recFormat = - config_get_string(main->Config(), "SimpleOutput", "RecFormat"); bool is_fragmented = strcmp(format, "fmp4") == 0 || strcmp(format, "fmov") == 0; From 97843dd7d7aa571cd0b91588b298f07b699c0ed9 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 25 Mar 2023 23:52:12 -0700 Subject: [PATCH 0481/2225] libobs: Add VIDEO_FORMAT_V210 Support 10-bit packed format that DeckLink uses. --- docs/sphinx/reference-libobs-media-io.rst | 2 + docs/sphinx/reference-outputs.rst | 3 + docs/sphinx/reference-sources.rst | 3 + libobs/data/format_conversion.effect | 113 ++++++++++++++++++++++ libobs/media-io/video-frame.c | 9 ++ libobs/media-io/video-io.h | 6 ++ libobs/media-io/video-matrices.c | 1 + libobs/obs-source.c | 33 +++++++ 8 files changed, 170 insertions(+) diff --git a/docs/sphinx/reference-libobs-media-io.rst b/docs/sphinx/reference-libobs-media-io.rst index ec88c1658ee731..9378bff3bb9169 100644 --- a/docs/sphinx/reference-libobs-media-io.rst +++ b/docs/sphinx/reference-libobs-media-io.rst @@ -58,6 +58,8 @@ Video Handler - VIDEO_FORMAT_P416 + - VIDEO_FORMAT_V210 + --------------------- .. enum:: video_trc diff --git a/docs/sphinx/reference-outputs.rst b/docs/sphinx/reference-outputs.rst index 0b9b18ee60851a..44caa00885af62 100644 --- a/docs/sphinx/reference-outputs.rst +++ b/docs/sphinx/reference-outputs.rst @@ -807,6 +807,9 @@ Functions used by outputs /* planar 4:4:4 format, 16 bpp */ VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ + + /* packed 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_V210, }; enum video_colorspace { diff --git a/docs/sphinx/reference-sources.rst b/docs/sphinx/reference-sources.rst index ec59a2e97d9e25..caab1163c5305a 100644 --- a/docs/sphinx/reference-sources.rst +++ b/docs/sphinx/reference-sources.rst @@ -1447,6 +1447,9 @@ Functions used by sources /* planar 4:4:4 format, 16 bpp */ VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ + + /* packed 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_V210, }; struct obs_source_frame { diff --git a/libobs/data/format_conversion.effect b/libobs/data/format_conversion.effect index a88da9eb6a767e..16e6760b1b1cf2 100644 --- a/libobs/data/format_conversion.effect +++ b/libobs/data/format_conversion.effect @@ -925,6 +925,92 @@ float4 PSP010_HLG_2020_709_Reverse(VertTexPos frag_in) : TARGET return float4(rgb, 1.); } +float3 compute_v210_reverse(float2 pos) +{ + uint x = (uint)pos.x; + uint packed_x = x % 6; + uint base_x = (x / 6) * 4; + float y, cb, cr; + if (packed_x == 0) + { + float3 word0_rgb = image.Load(int3(base_x, pos.y, 0)).rgb; + y = word0_rgb.y; + cb = word0_rgb.x; + cr = word0_rgb.z; + } + else if (packed_x == 1) + { + float2 word0_rb = image.Load(int3(base_x, pos.y, 0)).rb; + float2 word1_rg = image.Load(int3(base_x + 1, pos.y, 0)).rg; + y = word1_rg.x; + cb = (word0_rb.x + word1_rg.y) * 0.5; + cr = (word0_rb.y + image.Load(int3(base_x + 2, pos.y, 0)).r) * 0.5; + } + else if (packed_x == 2) + { + float2 word1_gb = image.Load(int3(base_x + 1, pos.y, 0)).gb; + y = word1_gb.y; + cb = word1_gb.x; + cr = image.Load(int3(base_x + 2, pos.y, 0)).r; + } + else if (packed_x == 3) + { + float2 word2_rb = image.Load(int3(base_x + 2, pos.y, 0)).rb; + y = image.Load(int3(base_x + 2, pos.y, 0)).g; + cb = (image.Load(int3(base_x + 1, pos.y, 0)).g + word2_rb.y) * 0.5; + cr = (word2_rb.x + image.Load(int3(base_x + 3, pos.y, 0)).g) * 0.5; + } + else if (packed_x == 4) + { + float2 word3_rg = image.Load(int3(base_x + 3, pos.y, 0)).rg; + y = word3_rg.x; + cb = image.Load(int3(base_x + 2, pos.y, 0)).b; + cr = word3_rg.y; + } + else + { + float2 word3_gb = image.Load(int3(base_x + 3, pos.y, 0)).gb; + y = word3_gb.y; + cb = image.Load(int3(base_x + 2, pos.y, 0)).b; + cr = word3_gb.x; + uint base_x_4 = base_x + 4; + if ((pos.x + 1.) < width) + { + float2 word4_gb = image.Load(int3(base_x + 4, pos.y, 0)).rb; + cb = (cb + word4_gb.x) * 0.5; + cr = (cr + word4_gb.y) * 0.5; + } + } + float3 yuv_65535 = floor(float3(y, cb, cr) * 65535. + 0.5); + float3 yuv_1023 = floor(yuv_65535 * 0.015625); + float3 yuv = yuv_1023 / 1023.; + float3 rgb = YUV_to_RGB(yuv); + return rgb; +} + +float4 PSV210_SRGB_Reverse(FragPos frag_in) : TARGET +{ + float3 rgb = compute_v210_reverse(frag_in.pos); + rgb = srgb_nonlinear_to_linear(rgb); + return float4(rgb, 1.); +} + +float4 PSV210_PQ_2020_709_Reverse(FragPos frag_in) : TARGET +{ + float3 pq = compute_v210_reverse(frag_in.pos); + float3 hdr2020 = st2084_to_linear_eetf(pq, hdr_lw, hdr_lmax) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + +float4 PSV210_HLG_2020_709_Reverse(FragPos frag_in) : TARGET +{ + float3 hlg = compute_v210_reverse(frag_in.pos); + float3 hdr2020 = hlg_to_linear(hlg, hlg_exponent) * maximum_over_sdr_white_nits; + float3 rgb = rec2020_to_rec709(hdr2020); + return float4(rgb, 1.); +} + float3 PSY800_Limited(FragPos frag_in) : TARGET { float limited = image.Load(int3(frag_in.pos.xy, 0)).x; @@ -1544,6 +1630,33 @@ technique P010_HLG_2020_709_Reverse } } +technique V210_SRGB_Reverse +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PSV210_SRGB_Reverse(frag_in); + } +} + +technique V210_PQ_2020_709_Reverse +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PSV210_PQ_2020_709_Reverse(frag_in); + } +} + +technique V210_HLG_2020_709_Reverse +{ + pass + { + vertex_shader = VSPos(id); + pixel_shader = PSV210_HLG_2020_709_Reverse(frag_in); + } +} + technique Y800_Limited { pass diff --git a/libobs/media-io/video-frame.c b/libobs/media-io/video-frame.c index 21491b55eb78db..0b0168be6ab893 100644 --- a/libobs/media-io/video-frame.c +++ b/libobs/media-io/video-frame.c @@ -330,6 +330,15 @@ void video_frame_init(struct video_frame *frame, enum video_format format, frame->linesize[1] = width * 4; break; } + + case VIDEO_FORMAT_V210: { + const uint32_t adjusted_width = ((width + 5) / 6) * 16; + size = adjusted_width * height; + ALIGN_SIZE(size, alignment); + frame->data[0] = bmalloc(size); + frame->linesize[0] = adjusted_width; + break; + } } } diff --git a/libobs/media-io/video-io.h b/libobs/media-io/video-io.h index b5efc8c704616f..9f3909eae0a138 100644 --- a/libobs/media-io/video-io.h +++ b/libobs/media-io/video-io.h @@ -88,6 +88,9 @@ enum video_format { /* planar 4:4:4 format, 16 bpp */ VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */ + + /* packed 4:2:2 format, 10 bpp */ + VIDEO_FORMAT_V210, }; enum video_trc { @@ -153,6 +156,7 @@ static inline bool format_is_yuv(enum video_format format) case VIDEO_FORMAT_P010: case VIDEO_FORMAT_P216: case VIDEO_FORMAT_P416: + case VIDEO_FORMAT_V210: return true; case VIDEO_FORMAT_NONE: case VIDEO_FORMAT_RGBA: @@ -215,6 +219,8 @@ static inline const char *get_video_format_name(enum video_format format) return "P216"; case VIDEO_FORMAT_P416: return "P416"; + case VIDEO_FORMAT_V210: + return "V210"; case VIDEO_FORMAT_NONE:; } diff --git a/libobs/media-io/video-matrices.c b/libobs/media-io/video-matrices.c index 3feb1467341ea4..7b3d4b682252d7 100644 --- a/libobs/media-io/video-matrices.c +++ b/libobs/media-io/video-matrices.c @@ -263,6 +263,7 @@ bool video_format_get_parameters_for_format(enum video_colorspace color_space, case VIDEO_FORMAT_I010: case VIDEO_FORMAT_P010: case VIDEO_FORMAT_I210: + case VIDEO_FORMAT_V210: bpc = 10; break; case VIDEO_FORMAT_I412: diff --git a/libobs/obs-source.c b/libobs/obs-source.c index c3337afd1cb2fd..29133a1d9f066b 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -1591,6 +1591,7 @@ enum convert_type { CONVERT_BGR3, CONVERT_I010, CONVERT_P010, + CONVERT_V210, }; static inline enum convert_type get_convert_type(enum video_format format, @@ -1648,6 +1649,9 @@ static inline enum convert_type get_convert_type(enum video_format format, case VIDEO_FORMAT_P010: return CONVERT_P010; + case VIDEO_FORMAT_V210: + return CONVERT_V210; + case VIDEO_FORMAT_P216: case VIDEO_FORMAT_P416: /* Unimplemented */ @@ -1942,6 +1946,19 @@ static inline bool set_p010_sizes(struct obs_source *source, return true; } +static inline bool set_v210_sizes(struct obs_source *source, + const struct obs_source_frame *frame) +{ + const uint32_t width = frame->width; + const uint32_t height = frame->height; + const uint32_t adjusted_width = ((width + 5) / 6) * 4; + source->async_convert_width[0] = adjusted_width; + source->async_convert_height[0] = height; + source->async_texture_formats[0] = GS_R10G10B10A2; + source->async_channel_count = 1; + return true; +} + static inline bool init_gpu_conversion(struct obs_source *source, const struct obs_source_frame *frame) { @@ -1999,6 +2016,9 @@ static inline bool init_gpu_conversion(struct obs_source *source, case CONVERT_P010: return set_p010_sizes(source, frame); + case CONVERT_V210: + return set_v210_sizes(source, frame); + case CONVERT_NONE: assert(false && "No conversion requested"); break; @@ -2091,6 +2111,7 @@ static void upload_raw_frame(gs_texture_t *tex[MAX_AV_PLANES], case CONVERT_444_A_PACK: case CONVERT_I010: case CONVERT_P010: + case CONVERT_V210: for (size_t c = 0; c < MAX_AV_PLANES; c++) { if (tex[c]) gs_texture_set_image(tex[c], frame->data[c], @@ -2213,6 +2234,17 @@ static const char *select_conversion_technique(enum video_format format, } } + case VIDEO_FORMAT_V210: { + switch (trc) { + case VIDEO_TRC_PQ: + return "V210_PQ_2020_709_Reverse"; + case VIDEO_TRC_HLG: + return "V210_HLG_2020_709_Reverse"; + default: + return "V210_SRGB_Reverse"; + } + } + case VIDEO_FORMAT_BGRA: case VIDEO_FORMAT_BGRX: case VIDEO_FORMAT_RGBA: @@ -3373,6 +3405,7 @@ static void copy_frame_data(struct obs_source_frame *dst, case VIDEO_FORMAT_Y800: case VIDEO_FORMAT_BGR3: case VIDEO_FORMAT_AYUV: + case VIDEO_FORMAT_V210: copy_frame_data_plane(dst, src, 0, dst->height); break; From ccb2c06540ce567984144198de1c60589dd7afb7 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Sat, 25 Mar 2023 23:55:51 -0700 Subject: [PATCH 0482/2225] decklink: Add HDR capture support Also add true 10-bit support. --- plugins/decklink/decklink-device-instance.cpp | 42 +++++++++++++++---- plugins/decklink/decklink-source.cpp | 5 ++- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/plugins/decklink/decklink-device-instance.cpp b/plugins/decklink/decklink-device-instance.cpp index 042d0d1cdea257..c0b33ff0e093de 100644 --- a/plugins/decklink/decklink-device-instance.cpp +++ b/plugins/decklink/decklink-device-instance.cpp @@ -22,10 +22,10 @@ static inline enum video_format ConvertPixelFormat(BMDPixelFormat format) switch (format) { case bmdFormat8BitBGRA: return VIDEO_FORMAT_BGRX; - + case bmdFormat10BitYUV: + return VIDEO_FORMAT_V210; default: case bmdFormat8BitYUV: - case bmdFormat10BitYUV:; return VIDEO_FORMAT_UYVY; } } @@ -190,6 +190,32 @@ void DeckLinkDeviceInstance::HandleVideoFrame( if (currentFrame.width == 0 || currentFrame.height == 0) return; + enum video_trc trc = VIDEO_TRC_DEFAULT; + if (frame->GetFlags() & bmdFrameContainsHDRMetadata) { + ComPtr metadata; + if (SUCCEEDED(videoFrame->QueryInterface( + IID_IDeckLinkVideoFrameMetadataExtensions, + (void **)&metadata))) { + int64_t range; + if (SUCCEEDED(metadata->GetInt( + bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc, + &range))) { + switch (range) { + case 2: + trc = VIDEO_TRC_PQ; + break; + case 3: + trc = VIDEO_TRC_HLG; + break; + default: + trc = VIDEO_TRC_DEFAULT; + break; + } + } + } + } + currentFrame.trc = trc; + obs_source_output_video2( static_cast(decklink)->GetSource(), ¤tFrame); @@ -314,7 +340,10 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_) colorSpace = static_cast(decklink)->GetColorSpace(); if (colorSpace == VIDEO_CS_DEFAULT) { const BMDDisplayModeFlags flags = mode_->GetDisplayModeFlags(); - if (flags & bmdDisplayModeColorspaceRec709) + /* 2020 wasn't set when testing but maybe it will be someday */ + if (flags & bmdDisplayModeColorspaceRec2020) + activeColorSpace = VIDEO_CS_2100_PQ; + else if (flags & bmdDisplayModeColorspaceRec709) activeColorSpace = VIDEO_CS_709; else if (flags & bmdDisplayModeColorspaceRec601) activeColorSpace = VIDEO_CS_601; @@ -336,10 +365,10 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_) BMDPixelFormat convertFormat; switch (pixelFormat) { case bmdFormat8BitBGRA: - convertFormat = bmdFormat8BitBGRA; + case bmdFormat10BitYUV: + convertFormat = pixelFormat; break; default: - case bmdFormat10BitYUV: case bmdFormat8BitYUV:; convertFormat = bmdFormat8BitYUV; break; @@ -409,7 +438,7 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_, bool isauto = mode_->GetName() == "Auto"; if (isauto) { displayMode = bmdModeNTSC; - if (allow10Bit) { + if (allow10Bit_) { pixelFormat = bmdFormat10BitYUV; } else { pixelFormat = bmdFormat8BitYUV; @@ -635,7 +664,6 @@ HRESULT STDMETHODCALLTYPE DeckLinkDeviceInstance::VideoInputFormatChanged( BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *newMode, BMDDetectedVideoInputFormatFlags detectedSignalFlags) { - if (events & bmdVideoInputColorspaceChanged) { if (detectedSignalFlags & bmdDetectedVideoInputRGB444) { pixelFormat = bmdFormat8BitBGRA; diff --git a/plugins/decklink/decklink-source.cpp b/plugins/decklink/decklink-source.cpp index 9976daab9dee32..829d1b0ab79bdf 100644 --- a/plugins/decklink/decklink-source.cpp +++ b/plugins/decklink/decklink-source.cpp @@ -287,8 +287,9 @@ static obs_properties_t *decklink_get_properties(void *data) OBS_COMBO_FORMAT_INT); obs_property_list_add_int(list, TEXT_COLOR_SPACE_DEFAULT, VIDEO_CS_DEFAULT); - obs_property_list_add_int(list, "BT.601", VIDEO_CS_601); - obs_property_list_add_int(list, "BT.709", VIDEO_CS_709); + obs_property_list_add_int(list, "Rec. 601", VIDEO_CS_601); + obs_property_list_add_int(list, "Rec. 709", VIDEO_CS_709); + obs_property_list_add_int(list, "Rec. 2020", VIDEO_CS_2100_PQ); list = obs_properties_add_list(props, COLOR_RANGE, TEXT_COLOR_RANGE, OBS_COMBO_TYPE_LIST, From 94bf325dd99d4dace1dbad8ddfa49ebd35cd7dd1 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 26 Mar 2023 18:53:01 +0900 Subject: [PATCH 0483/2225] libobs: Fix VIDEO_FORMAT_V210 shader for GLSL --- libobs/data/format_conversion.effect | 50 ++++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/libobs/data/format_conversion.effect b/libobs/data/format_conversion.effect index 16e6760b1b1cf2..40284a7b309dda 100644 --- a/libobs/data/format_conversion.effect +++ b/libobs/data/format_conversion.effect @@ -927,56 +927,56 @@ float4 PSP010_HLG_2020_709_Reverse(VertTexPos frag_in) : TARGET float3 compute_v210_reverse(float2 pos) { - uint x = (uint)pos.x; - uint packed_x = x % 6; - uint base_x = (x / 6) * 4; + uint x = uint(pos.x); + uint packed_x = x % 6u; + uint base_x = x / 6u * 4u; float y, cb, cr; - if (packed_x == 0) + if (packed_x == 0u) { float3 word0_rgb = image.Load(int3(base_x, pos.y, 0)).rgb; y = word0_rgb.y; cb = word0_rgb.x; cr = word0_rgb.z; } - else if (packed_x == 1) + else if (packed_x == 1u) { float2 word0_rb = image.Load(int3(base_x, pos.y, 0)).rb; - float2 word1_rg = image.Load(int3(base_x + 1, pos.y, 0)).rg; + float2 word1_rg = image.Load(int3(base_x + 1u, pos.y, 0)).rg; y = word1_rg.x; cb = (word0_rb.x + word1_rg.y) * 0.5; - cr = (word0_rb.y + image.Load(int3(base_x + 2, pos.y, 0)).r) * 0.5; + cr = (word0_rb.y + image.Load(int3(base_x + 2u, pos.y, 0)).r) * 0.5; } - else if (packed_x == 2) + else if (packed_x == 2u) { - float2 word1_gb = image.Load(int3(base_x + 1, pos.y, 0)).gb; + float2 word1_gb = image.Load(int3(base_x + 1u, pos.y, 0)).gb; y = word1_gb.y; cb = word1_gb.x; - cr = image.Load(int3(base_x + 2, pos.y, 0)).r; + cr = image.Load(int3(base_x + 2u, pos.y, 0)).r; } - else if (packed_x == 3) + else if (packed_x == 3u) { - float2 word2_rb = image.Load(int3(base_x + 2, pos.y, 0)).rb; - y = image.Load(int3(base_x + 2, pos.y, 0)).g; - cb = (image.Load(int3(base_x + 1, pos.y, 0)).g + word2_rb.y) * 0.5; - cr = (word2_rb.x + image.Load(int3(base_x + 3, pos.y, 0)).g) * 0.5; + float2 word2_rb = image.Load(int3(base_x + 2u, pos.y, 0)).rb; + y = image.Load(int3(base_x + 2u, pos.y, 0)).g; + cb = (image.Load(int3(base_x + 1u, pos.y, 0)).g + word2_rb.y) * 0.5; + cr = (word2_rb.x + image.Load(int3(base_x + 3u, pos.y, 0)).g) * 0.5; } - else if (packed_x == 4) + else if (packed_x == 4u) { - float2 word3_rg = image.Load(int3(base_x + 3, pos.y, 0)).rg; + float2 word3_rg = image.Load(int3(base_x + 3u, pos.y, 0)).rg; y = word3_rg.x; - cb = image.Load(int3(base_x + 2, pos.y, 0)).b; + cb = image.Load(int3(base_x + 2u, pos.y, 0)).b; cr = word3_rg.y; } else { - float2 word3_gb = image.Load(int3(base_x + 3, pos.y, 0)).gb; + float2 word3_gb = image.Load(int3(base_x + 3u, pos.y, 0)).gb; y = word3_gb.y; - cb = image.Load(int3(base_x + 2, pos.y, 0)).b; + cb = image.Load(int3(base_x + 2u, pos.y, 0)).b; cr = word3_gb.x; - uint base_x_4 = base_x + 4; + uint base_x_4 = base_x + 4u; if ((pos.x + 1.) < width) { - float2 word4_gb = image.Load(int3(base_x + 4, pos.y, 0)).rb; + float2 word4_gb = image.Load(int3(base_x + 4u, pos.y, 0)).rb; cb = (cb + word4_gb.x) * 0.5; cr = (cr + word4_gb.y) * 0.5; } @@ -990,14 +990,14 @@ float3 compute_v210_reverse(float2 pos) float4 PSV210_SRGB_Reverse(FragPos frag_in) : TARGET { - float3 rgb = compute_v210_reverse(frag_in.pos); + float3 rgb = compute_v210_reverse(frag_in.pos.xy); rgb = srgb_nonlinear_to_linear(rgb); return float4(rgb, 1.); } float4 PSV210_PQ_2020_709_Reverse(FragPos frag_in) : TARGET { - float3 pq = compute_v210_reverse(frag_in.pos); + float3 pq = compute_v210_reverse(frag_in.pos.xy); float3 hdr2020 = st2084_to_linear_eetf(pq, hdr_lw, hdr_lmax) * maximum_over_sdr_white_nits; float3 rgb = rec2020_to_rec709(hdr2020); return float4(rgb, 1.); @@ -1005,7 +1005,7 @@ float4 PSV210_PQ_2020_709_Reverse(FragPos frag_in) : TARGET float4 PSV210_HLG_2020_709_Reverse(FragPos frag_in) : TARGET { - float3 hlg = compute_v210_reverse(frag_in.pos); + float3 hlg = compute_v210_reverse(frag_in.pos.xy); float3 hdr2020 = hlg_to_linear(hlg, hlg_exponent) * maximum_over_sdr_white_nits; float3 rgb = rec2020_to_rec709(hdr2020); return float4(rgb, 1.); From 31ba0973e5191721d571a1b4ca7b93e1e1c19591 Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Sat, 25 Mar 2023 11:37:27 +0100 Subject: [PATCH 0484/2225] libobs: Export HEVC NAL type enum --- libobs/obs-hevc.c | 44 -------------------------------------------- libobs/obs-hevc.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libobs/obs-hevc.c b/libobs/obs-hevc.c index 84ee2616c2a245..37c4e0e48206eb 100644 --- a/libobs/obs-hevc.c +++ b/libobs/obs-hevc.c @@ -21,50 +21,6 @@ #include "obs-nal.h" #include "util/array-serializer.h" -enum { - OBS_HEVC_NAL_TRAIL_N = 0, - OBS_HEVC_NAL_TRAIL_R = 1, - OBS_HEVC_NAL_TSA_N = 2, - OBS_HEVC_NAL_TSA_R = 3, - OBS_HEVC_NAL_STSA_N = 4, - OBS_HEVC_NAL_STSA_R = 5, - OBS_HEVC_NAL_RADL_N = 6, - OBS_HEVC_NAL_RADL_R = 7, - OBS_HEVC_NAL_RASL_N = 8, - OBS_HEVC_NAL_RASL_R = 9, - OBS_HEVC_NAL_VCL_N10 = 10, - OBS_HEVC_NAL_VCL_R11 = 11, - OBS_HEVC_NAL_VCL_N12 = 12, - OBS_HEVC_NAL_VCL_R13 = 13, - OBS_HEVC_NAL_VCL_N14 = 14, - OBS_HEVC_NAL_VCL_R15 = 15, - OBS_HEVC_NAL_BLA_W_LP = 16, - OBS_HEVC_NAL_BLA_W_RADL = 17, - OBS_HEVC_NAL_BLA_N_LP = 18, - OBS_HEVC_NAL_IDR_W_RADL = 19, - OBS_HEVC_NAL_IDR_N_LP = 20, - OBS_HEVC_NAL_CRA_NUT = 21, - OBS_HEVC_NAL_RSV_IRAP_VCL22 = 22, - OBS_HEVC_NAL_RSV_IRAP_VCL23 = 23, - OBS_HEVC_NAL_RSV_VCL24 = 24, - OBS_HEVC_NAL_RSV_VCL25 = 25, - OBS_HEVC_NAL_RSV_VCL26 = 26, - OBS_HEVC_NAL_RSV_VCL27 = 27, - OBS_HEVC_NAL_RSV_VCL28 = 28, - OBS_HEVC_NAL_RSV_VCL29 = 29, - OBS_HEVC_NAL_RSV_VCL30 = 30, - OBS_HEVC_NAL_RSV_VCL31 = 31, - OBS_HEVC_NAL_VPS = 32, - OBS_HEVC_NAL_SPS = 33, - OBS_HEVC_NAL_PPS = 34, - OBS_HEVC_NAL_AUD = 35, - OBS_HEVC_NAL_EOS_NUT = 36, - OBS_HEVC_NAL_EOB_NUT = 37, - OBS_HEVC_NAL_FD_NUT = 38, - OBS_HEVC_NAL_SEI_PREFIX = 39, - OBS_HEVC_NAL_SEI_SUFFIX = 40, -}; - bool obs_hevc_keyframe(const uint8_t *data, size_t size) { const uint8_t *nal_start, *nal_end; diff --git a/libobs/obs-hevc.h b/libobs/obs-hevc.h index 6313c30962b87f..91da1c35f92faa 100644 --- a/libobs/obs-hevc.h +++ b/libobs/obs-hevc.h @@ -25,6 +25,50 @@ extern "C" { struct encoder_packet; +enum { + OBS_HEVC_NAL_TRAIL_N = 0, + OBS_HEVC_NAL_TRAIL_R = 1, + OBS_HEVC_NAL_TSA_N = 2, + OBS_HEVC_NAL_TSA_R = 3, + OBS_HEVC_NAL_STSA_N = 4, + OBS_HEVC_NAL_STSA_R = 5, + OBS_HEVC_NAL_RADL_N = 6, + OBS_HEVC_NAL_RADL_R = 7, + OBS_HEVC_NAL_RASL_N = 8, + OBS_HEVC_NAL_RASL_R = 9, + OBS_HEVC_NAL_VCL_N10 = 10, + OBS_HEVC_NAL_VCL_R11 = 11, + OBS_HEVC_NAL_VCL_N12 = 12, + OBS_HEVC_NAL_VCL_R13 = 13, + OBS_HEVC_NAL_VCL_N14 = 14, + OBS_HEVC_NAL_VCL_R15 = 15, + OBS_HEVC_NAL_BLA_W_LP = 16, + OBS_HEVC_NAL_BLA_W_RADL = 17, + OBS_HEVC_NAL_BLA_N_LP = 18, + OBS_HEVC_NAL_IDR_W_RADL = 19, + OBS_HEVC_NAL_IDR_N_LP = 20, + OBS_HEVC_NAL_CRA_NUT = 21, + OBS_HEVC_NAL_RSV_IRAP_VCL22 = 22, + OBS_HEVC_NAL_RSV_IRAP_VCL23 = 23, + OBS_HEVC_NAL_RSV_VCL24 = 24, + OBS_HEVC_NAL_RSV_VCL25 = 25, + OBS_HEVC_NAL_RSV_VCL26 = 26, + OBS_HEVC_NAL_RSV_VCL27 = 27, + OBS_HEVC_NAL_RSV_VCL28 = 28, + OBS_HEVC_NAL_RSV_VCL29 = 29, + OBS_HEVC_NAL_RSV_VCL30 = 30, + OBS_HEVC_NAL_RSV_VCL31 = 31, + OBS_HEVC_NAL_VPS = 32, + OBS_HEVC_NAL_SPS = 33, + OBS_HEVC_NAL_PPS = 34, + OBS_HEVC_NAL_AUD = 35, + OBS_HEVC_NAL_EOS_NUT = 36, + OBS_HEVC_NAL_EOB_NUT = 37, + OBS_HEVC_NAL_FD_NUT = 38, + OBS_HEVC_NAL_SEI_PREFIX = 39, + OBS_HEVC_NAL_SEI_SUFFIX = 40, +}; + EXPORT bool obs_hevc_keyframe(const uint8_t *data, size_t size); EXPORT void obs_parse_hevc_packet(struct encoder_packet *hevc_packet, const struct encoder_packet *src); From 2d4f0ac4404eea846bc325cc29e695a2feed87c6 Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Sat, 25 Mar 2023 11:45:42 +0100 Subject: [PATCH 0485/2225] obs-outputs: Add support for AV1/HEVC over RTMP Implements AV1 and HEVC according to enhanced RTMP spec found at https://github.com/veovera/enhanced-rtmp Co-authored-by: derrod --- plugins/obs-outputs/CMakeLists.txt | 7 + plugins/obs-outputs/flv-mux.c | 211 ++++++- plugins/obs-outputs/flv-mux.h | 35 ++ plugins/obs-outputs/rtmp-av1.c | 604 +++++++++++++++++++ plugins/obs-outputs/rtmp-av1.h | 28 + plugins/obs-outputs/rtmp-hevc.c | 938 +++++++++++++++++++++++++++++ plugins/obs-outputs/rtmp-hevc.h | 24 + plugins/obs-outputs/rtmp-stream.c | 232 ++++++- plugins/obs-outputs/rtmp-stream.h | 110 +++- plugins/obs-outputs/utils.h | 72 +++ 10 files changed, 2243 insertions(+), 18 deletions(-) create mode 100644 plugins/obs-outputs/rtmp-av1.c create mode 100644 plugins/obs-outputs/rtmp-av1.h create mode 100644 plugins/obs-outputs/rtmp-hevc.c create mode 100644 plugins/obs-outputs/rtmp-hevc.h create mode 100644 plugins/obs-outputs/utils.h diff --git a/plugins/obs-outputs/CMakeLists.txt b/plugins/obs-outputs/CMakeLists.txt index 386b4f04ac10ec..4ecfff8b921cd3 100644 --- a/plugins/obs-outputs/CMakeLists.txt +++ b/plugins/obs-outputs/CMakeLists.txt @@ -28,6 +28,9 @@ target_sources( rtmp-stream.c rtmp-stream.h rtmp-windows.c + rtmp-av1.c + rtmp-av1.h + utils.h librtmp/amf.c librtmp/amf.h librtmp/bytes.h @@ -45,6 +48,10 @@ target_sources( librtmp/rtmp.h librtmp/rtmp_sys.h) +if(ENABLE_HEVC) + target_sources(obs-outputs PRIVATE rtmp-hevc.c rtmp-hevc.h) +endif() + target_link_libraries(obs-outputs PRIVATE OBS::libobs) set_target_properties(obs-outputs PROPERTIES FOLDER "plugins" PREFIX "") diff --git a/plugins/obs-outputs/flv-mux.c b/plugins/obs-outputs/flv-mux.c index 9e4d061d4f279d..046062e1f92707 100644 --- a/plugins/obs-outputs/flv-mux.c +++ b/plugins/obs-outputs/flv-mux.c @@ -32,6 +32,66 @@ #define VIDEODATA_AVCVIDEOPACKET 7.0 #define AUDIODATA_AAC 10.0 +#define VIDEO_FRAMETYPE_OFFSET 4 +enum video_frametype_t { + FT_KEY = 1 << VIDEO_FRAMETYPE_OFFSET, + FT_INTER = 2 << VIDEO_FRAMETYPE_OFFSET, +}; + +// Y2023 spec +const uint8_t FRAME_HEADER_EX = 8 << VIDEO_FRAMETYPE_OFFSET; +enum packet_type_t { + PACKETTYPE_SEQ_START = 0, + PACKETTYPE_FRAMES = 1, + PACKETTYPE_SEQ_END = 2, +#ifdef ENABLE_HEVC + PACKETTYPE_FRAMESX = 3, +#endif + PACKETTYPE_METADATA = 4 +}; + +enum datatype_t { + DATA_TYPE_NUMBER = 0, + DATA_TYPE_STRING = 2, + DATA_TYPE_OBJECT = 3, + DATA_TYPE_OBJECT_END = 9, +}; + +static void s_w4cc(struct serializer *s, enum video_id_t id) +{ + switch (id) { + case CODEC_AV1: + s_w8(s, 'a'); + s_w8(s, 'v'); + s_w8(s, '0'); + s_w8(s, '1'); + break; +#ifdef ENABLE_HEVC + case CODEC_HEVC: + s_w8(s, 'h'); + s_w8(s, 'v'); + s_w8(s, 'c'); + s_w8(s, '1'); + break; +#endif + case CODEC_H264: + assert(0); + } +} + +static void s_wstring(struct serializer *s, const char *str) +{ + size_t len = strlen(str); + s_wb16(s, (uint16_t)len); + s_write(s, str, len); +} + +static inline void s_wtimestamp(struct serializer *s, int32_t i32) +{ + s_wb24(s, (uint32_t)(i32 & 0xFFFFFF)); + s_w8(s, (uint32_t)(i32 >> 24) & 0x7F); +} + static inline double encoder_bitrate(obs_encoder_t *encoder) { obs_data_t *settings = obs_encoder_get_settings(encoder); @@ -189,7 +249,7 @@ static void flv_video(struct serializer *s, int32_t dts_offset, #endif s_wb24(s, (uint32_t)packet->size + 5); - s_wb24(s, time_ms); + s_wb24(s, (uint32_t)time_ms); s_w8(s, (time_ms >> 24) & 0x7F); s_wb24(s, 0); @@ -223,7 +283,7 @@ static void flv_audio(struct serializer *s, int32_t dts_offset, #endif s_wb24(s, (uint32_t)packet->size + 2); - s_wb24(s, time_ms); + s_wb24(s, (uint32_t)time_ms); s_w8(s, (time_ms >> 24) & 0x7F); s_wb24(s, 0); @@ -253,6 +313,151 @@ void flv_packet_mux(struct encoder_packet *packet, int32_t dts_offset, *size = data.bytes.num; } +// Y2023 spec +void flv_packet_ex(struct encoder_packet *packet, enum video_id_t codec_id, + int32_t dts_offset, uint8_t **output, size_t *size, int type) +{ + struct array_output_data data; + struct serializer s; + array_output_serializer_init(&s, &data); + + assert(packet->type == OBS_ENCODER_VIDEO); + + int32_t time_ms = get_ms_time(packet, packet->dts) - dts_offset; + + // packet head + s_w8(&s, RTMP_PACKET_TYPE_VIDEO); + s_wb24(&s, (uint32_t)packet->size + 5); // 5 = (w8+w4cc) + s_wtimestamp(&s, time_ms); + s_wb24(&s, 0); // always 0 + + // packet ext header + s_w8(&s, FRAME_HEADER_EX | type | (packet->keyframe ? FT_KEY : 0)); + s_w4cc(&s, codec_id); + // packet data + s_write(&s, packet->data, packet->size); + + // packet tail + s_wb32(&s, (uint32_t)serializer_get_pos(&s) - 1); + + *output = data.bytes.array; + *size = data.bytes.num; +} + +void flv_packet_start(struct encoder_packet *packet, enum video_id_t codec, + int32_t dts_offset, uint8_t **output, size_t *size) +{ + flv_packet_ex(packet, codec, dts_offset, output, size, + PACKETTYPE_SEQ_START); +} + +void flv_packet_frames(struct encoder_packet *packet, enum video_id_t codec, + int32_t dts_offset, uint8_t **output, size_t *size) +{ +#ifdef ENABLE_HEVC + flv_packet_ex(packet, codec, dts_offset, output, size, + (codec == CODEC_HEVC) ? PACKETTYPE_FRAMESX + : PACKETTYPE_FRAMES); +#else + flv_packet_ex(packet, dts_offset, output, size, PACKETTYPE_FRAMES); +#endif +} + +void flv_packet_end(struct encoder_packet *packet, enum video_id_t codec, + int32_t dts_offset, uint8_t **output, size_t *size) +{ + flv_packet_ex(packet, codec, dts_offset, output, size, + PACKETTYPE_SEQ_END); +} + +void flv_packet_metadata(enum video_id_t codec_id, uint8_t **output, + size_t *size, int bits_per_raw_sample, + uint8_t color_primaries, int color_trc, + int color_space, int min_luminance, int max_luminance) +{ + // metadata array + struct array_output_data data; + struct array_output_data metadata; + struct serializer s; + array_output_serializer_init(&s, &data); + + // metadata data array + { + struct serializer s; + array_output_serializer_init(&s, &metadata); + + s_w8(&s, DATA_TYPE_STRING); + s_wstring(&s, "colorInfo"); + s_w8(&s, DATA_TYPE_OBJECT); + { + // colorConfig: + s_wstring(&s, "colorConfig"); + s_w8(&s, DATA_TYPE_OBJECT); + { + s_wstring(&s, "bitDepth"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, bits_per_raw_sample); + + s_wstring(&s, "colorPrimaries"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, color_primaries); + + s_wstring(&s, "transferCharacteristics"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, color_trc); + + s_wstring(&s, "matrixCoefficients"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, color_space); + } + s_w8(&s, 0); + s_w8(&s, 0); + s_w8(&s, DATA_TYPE_OBJECT_END); + + if (max_luminance != 0) { + // hdrMdcv + s_wstring(&s, "hdrMdcv"); + s_w8(&s, DATA_TYPE_OBJECT); + { + s_wstring(&s, "maxLuminance"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, max_luminance); + + s_wstring(&s, "minLuminance"); + s_w8(&s, DATA_TYPE_NUMBER); + s_wbd(&s, min_luminance); + } + s_w8(&s, 0); + s_w8(&s, 0); + s_w8(&s, DATA_TYPE_OBJECT_END); + } + } + s_w8(&s, 0); + s_w8(&s, 0); + s_w8(&s, DATA_TYPE_OBJECT_END); + } + + // packet head + s_w8(&s, RTMP_PACKET_TYPE_VIDEO); + s_wb24(&s, (uint32_t)metadata.bytes.num + 5); // 5 = (w8+w4cc) + s_wtimestamp(&s, 0); + s_wb24(&s, 0); // always 0 + + // packet ext header + // these are the 5 extra bytes mentioned above + s_w8(&s, FRAME_HEADER_EX | PACKETTYPE_METADATA); + s_w4cc(&s, codec_id); + // packet data + s_write(&s, metadata.bytes.array, metadata.bytes.num); + array_output_serializer_free(&metadata); // must be freed + + // packet tail + s_wb32(&s, (uint32_t)serializer_get_pos(&s) - 1); + + *output = data.bytes.array; + *size = data.bytes.num; +} + /* ------------------------------------------------------------------------- */ /* stuff for additional media streams */ @@ -471,7 +676,7 @@ static void flv_additional_audio(struct serializer *s, int32_t dts_offset, #endif s_wb24(s, (uint32_t)size); - s_wb24(s, time_ms); + s_wb24(s, (uint32_t)time_ms); s_w8(s, (time_ms >> 24) & 0x7F); s_wb24(s, 0); diff --git a/plugins/obs-outputs/flv-mux.h b/plugins/obs-outputs/flv-mux.h index c612f3882b3c99..975e6db0f8895b 100644 --- a/plugins/obs-outputs/flv-mux.h +++ b/plugins/obs-outputs/flv-mux.h @@ -21,6 +21,27 @@ #define MILLISECOND_DEN 1000 +enum video_id_t { + CODEC_H264 = 1, // legacy + CODEC_AV1, // Y2023 spec +#ifdef ENABLE_HEVC + CODEC_HEVC, +#endif +}; + +static enum video_id_t to_video_type(const char *codec) +{ + if (strcmp(codec, "h264") == 0) + return CODEC_H264; + if (strcmp(codec, "av1") == 0) + return CODEC_AV1; +#ifdef ENABLE_HEVC + if (strcmp(codec, "hevc") == 0) + return CODEC_HEVC; +#endif + return 0; +} + static int32_t get_ms_time(struct encoder_packet *packet, int64_t val) { return (int32_t)(val * MILLISECOND_DEN / packet->timebase_den); @@ -38,3 +59,17 @@ extern void flv_additional_packet_mux(struct encoder_packet *packet, int32_t dts_offset, uint8_t **output, size_t *size, bool is_header, size_t index); +// Y2023 spec +extern void flv_packet_start(struct encoder_packet *packet, + enum video_id_t codec, int32_t dts_offset, + uint8_t **output, size_t *size); +extern void flv_packet_frames(struct encoder_packet *packet, + enum video_id_t codec, int32_t dts_offset, + uint8_t **output, size_t *size); +extern void flv_packet_end(struct encoder_packet *packet, enum video_id_t codec, + int32_t dts_offset, uint8_t **output, size_t *size); +extern void flv_packet_metadata(enum video_id_t codec, uint8_t **output, + size_t *size, int bits_per_raw_sample, + uint8_t color_primaries, int color_trc, + int color_space, int min_luminance, + int max_luminance); diff --git a/plugins/obs-outputs/rtmp-av1.c b/plugins/obs-outputs/rtmp-av1.c new file mode 100644 index 00000000000000..1b8176991bc249 --- /dev/null +++ b/plugins/obs-outputs/rtmp-av1.c @@ -0,0 +1,604 @@ +/****************************************************************************** + Copyright (C) 2023 by Hugh Bailey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#include "rtmp-av1.h" +#include "utils.h" + +#include +#include + +/* Adapted from FFmpeg's libavformat/av1.c for our FLV muxer. */ + +#define AV1_OBU_SEQUENCE_HEADER 1 +#define AV1_OBU_TEMPORAL_DELIMITER 2 +#define AV1_OBU_REDUNDANT_FRAME_HEADER 7 +#define AV1_OBU_TILE_LIST 8 +#define AV1_OBU_PADDING 15 +#define AV1_OBU_METADATA 5 + +#define AV1_OBU_TILE_GROUP 4 +#define AV1_OBU_TILE_LIST 8 +#define AV1_OBU_FRAME 6 + +#define FF_PROFILE_AV1_MAIN 0 +#define FF_PROFILE_AV1_HIGH 1 +#define FF_PROFILE_AV1_PROFESSIONAL 2 + +typedef struct AV1SequenceParameters { + uint8_t profile; + uint8_t level; + uint8_t tier; + uint8_t bitdepth; + uint8_t monochrome; + uint8_t chroma_subsampling_x; + uint8_t chroma_subsampling_y; + uint8_t chroma_sample_position; + uint8_t color_description_present_flag; + uint8_t color_primaries; + uint8_t transfer_characteristics; + uint8_t matrix_coefficients; + uint8_t color_range; +} AV1SequenceParameters; + +#define MAX_OBU_HEADER_SIZE (2 + 8) + +typedef struct Av1GetBitContext { + const uint8_t *buffer, *buffer_end; + int index; + int size_in_bits; + int size_in_bits_plus8; +} Av1GetBitContext; + +static inline int init_get_bits_xe(Av1GetBitContext *s, const uint8_t *buffer, + int bit_size) +{ + int buffer_size; + int ret = 0; + + if (bit_size >= INT_MAX - 64 * 8 || bit_size < 0 || !buffer) { + bit_size = 0; + buffer = NULL; + ret = -1; + } + + buffer_size = (bit_size + 7) >> 3; + + s->buffer = buffer; + s->size_in_bits = bit_size; + s->size_in_bits_plus8 = bit_size + 8; + s->buffer_end = buffer + buffer_size; + s->index = 0; + + return ret; +} + +static inline int init_get_bits(Av1GetBitContext *s, const uint8_t *buffer, + int bit_size) +{ + return init_get_bits_xe(s, buffer, bit_size); +} + +static inline int init_get_bits8(Av1GetBitContext *s, const uint8_t *buffer, + int byte_size) +{ + if (byte_size > INT_MAX / 8 || byte_size < 0) + byte_size = -1; + return init_get_bits(s, buffer, byte_size * 8); +} + +static inline unsigned int get_bit1(Av1GetBitContext *s) +{ + unsigned int index = s->index; + uint8_t result = s->buffer[index >> 3]; + + result <<= index & 7; + result >>= 8 - 1; + + if (s->index < s->size_in_bits_plus8) + index++; + s->index = index; + + return result; +} + +static inline unsigned int get_bits(Av1GetBitContext *s, unsigned int n) +{ + unsigned int out = 0; + for (unsigned int i = 0; i < n; i++) + out = (out << 1) | get_bit1(s); + return out; +} + +#define skip_bits get_bits + +static inline int get_bits_count(Av1GetBitContext *s) +{ + return s->index; +} + +static inline int get_bits_left(Av1GetBitContext *gb) +{ + return gb->size_in_bits - get_bits_count(gb); +} + +#define get_bits_long get_bits +#define skip_bits_long get_bits_long + +static inline int64_t leb128(Av1GetBitContext *gb) +{ + int64_t ret = 0; + int i; + + for (i = 0; i < 8; i++) { + int byte = get_bits(gb, 8); + ret |= (int64_t)(byte & 0x7f) << (i * 7); + if (!(byte & 0x80)) + break; + } + return ret; +} + +static inline void uvlc(Av1GetBitContext *gb) +{ + int leading_zeros = 0; + + while (get_bits_left(gb)) { + if (get_bits(gb, 1)) + break; + leading_zeros++; + } + + if (leading_zeros >= 32) + return; + + skip_bits_long(gb, leading_zeros); +} + +static inline int parse_obu_header(const uint8_t *buf, int buf_size, + int64_t *obu_size, int *start_pos, int *type, + int *temporal_id, int *spatial_id) +{ + Av1GetBitContext gb; + int ret, extension_flag, has_size_flag; + size_t size; + + ret = init_get_bits8(&gb, buf, min_i32(buf_size, MAX_OBU_HEADER_SIZE)); + if (ret < 0) + return ret; + + if (get_bits(&gb, 1) != 0) // obu_forbidden_bit + return -1; + + *type = get_bits(&gb, 4); + extension_flag = get_bits(&gb, 1); + has_size_flag = get_bits(&gb, 1); + skip_bits(&gb, 1); // obu_reserved_1bit + + if (extension_flag) { + *temporal_id = get_bits(&gb, 3); + *spatial_id = get_bits(&gb, 2); + skip_bits(&gb, 3); // extension_header_reserved_3bits + } else { + *temporal_id = *spatial_id = 0; + } + + *obu_size = has_size_flag ? leb128(&gb) : buf_size - 1 - extension_flag; + + if (get_bits_left(&gb) < 0) + return -1; + + *start_pos = get_bits_count(&gb) / 8; + + size = (size_t)(*obu_size + *start_pos); + + if (size > (size_t)buf_size) + return -1; + + assert(size <= INT_MAX); + return (int)size; +} + +static inline int get_obu_bit_length(const uint8_t *buf, int size, int type) +{ + int v; + + /* There are no trailing bits on these */ + if (type == AV1_OBU_TILE_GROUP || type == AV1_OBU_TILE_LIST || + type == AV1_OBU_FRAME) { + if (size > INT_MAX / 8) + return -1; + else + return size * 8; + } + + while (size > 0 && buf[size - 1] == 0) + size--; + + if (!size) + return 0; + + v = buf[size - 1]; + + if (size > INT_MAX / 8) + return -1; + size *= 8; + + /* Remove the trailing_one_bit and following trailing zeros */ + if (v) + size -= ctz32(v) + 1; + + return size; +} + +static int parse_color_config(AV1SequenceParameters *seq_params, + Av1GetBitContext *gb) +{ + int twelve_bit = 0; + int high_bitdepth = get_bits(gb, 1); + if (seq_params->profile == FF_PROFILE_AV1_PROFESSIONAL && high_bitdepth) + twelve_bit = get_bits(gb, 1); + + seq_params->bitdepth = 8 + (high_bitdepth * 2) + (twelve_bit * 2); + + if (seq_params->profile == FF_PROFILE_AV1_HIGH) + seq_params->monochrome = 0; + else + seq_params->monochrome = get_bits(gb, 1); + + seq_params->color_description_present_flag = get_bits(gb, 1); + if (seq_params->color_description_present_flag) { + seq_params->color_primaries = get_bits(gb, 8); + seq_params->transfer_characteristics = get_bits(gb, 8); + seq_params->matrix_coefficients = get_bits(gb, 8); + } else { + seq_params->color_primaries = 2; + seq_params->transfer_characteristics = 2; + seq_params->matrix_coefficients = 2; + } + + if (seq_params->monochrome) { + seq_params->color_range = get_bits(gb, 1); + seq_params->chroma_subsampling_x = 1; + seq_params->chroma_subsampling_y = 1; + seq_params->chroma_sample_position = 0; + return 0; + } else if (seq_params->color_primaries == 1 && + seq_params->transfer_characteristics == 13 && + seq_params->matrix_coefficients == 0) { + seq_params->chroma_subsampling_x = 0; + seq_params->chroma_subsampling_y = 0; + } else { + seq_params->color_range = get_bits(gb, 1); + + if (seq_params->profile == FF_PROFILE_AV1_MAIN) { + seq_params->chroma_subsampling_x = 1; + seq_params->chroma_subsampling_y = 1; + } else if (seq_params->profile == FF_PROFILE_AV1_HIGH) { + seq_params->chroma_subsampling_x = 0; + seq_params->chroma_subsampling_y = 0; + } else { + if (twelve_bit) { + seq_params->chroma_subsampling_x = + get_bits(gb, 1); + if (seq_params->chroma_subsampling_x) + seq_params->chroma_subsampling_y = + get_bits(gb, 1); + else + seq_params->chroma_subsampling_y = 0; + } else { + seq_params->chroma_subsampling_x = 1; + seq_params->chroma_subsampling_y = 0; + } + } + if (seq_params->chroma_subsampling_x && + seq_params->chroma_subsampling_y) + seq_params->chroma_sample_position = get_bits(gb, 2); + } + + skip_bits(gb, 1); // separate_uv_delta_q + + return 0; +} + +static int parse_sequence_header(AV1SequenceParameters *seq_params, + const uint8_t *buf, int size) +{ + Av1GetBitContext gb; + int reduced_still_picture_header; + int frame_width_bits_minus_1, frame_height_bits_minus_1; + int size_bits, ret; + + size_bits = get_obu_bit_length(buf, size, AV1_OBU_SEQUENCE_HEADER); + if (size_bits < 0) + return size_bits; + + ret = init_get_bits(&gb, buf, size_bits); + if (ret < 0) + return ret; + + memset(seq_params, 0, sizeof(*seq_params)); + + seq_params->profile = get_bits(&gb, 3); + + skip_bits(&gb, 1); // still_picture + reduced_still_picture_header = get_bits(&gb, 1); + + if (reduced_still_picture_header) { + seq_params->level = get_bits(&gb, 5); + seq_params->tier = 0; + } else { + int initial_display_delay_present_flag, + operating_points_cnt_minus_1; + int decoder_model_info_present_flag, + buffer_delay_length_minus_1; + + if (get_bits(&gb, 1)) { // timing_info_present_flag + skip_bits_long(&gb, 32); // num_units_in_display_tick + skip_bits_long(&gb, 32); // time_scale + + if (get_bits(&gb, 1)) // equal_picture_interval + uvlc(&gb); // num_ticks_per_picture_minus_1 + + decoder_model_info_present_flag = get_bits(&gb, 1); + if (decoder_model_info_present_flag) { + buffer_delay_length_minus_1 = get_bits(&gb, 5); + skip_bits_long(&gb, 32); + skip_bits(&gb, 10); + } + } else + decoder_model_info_present_flag = 0; + + initial_display_delay_present_flag = get_bits(&gb, 1); + + operating_points_cnt_minus_1 = get_bits(&gb, 5); + for (int i = 0; i <= operating_points_cnt_minus_1; i++) { + int seq_level_idx, seq_tier; + + skip_bits(&gb, 12); + seq_level_idx = get_bits(&gb, 5); + + if (seq_level_idx > 7) + seq_tier = get_bits(&gb, 1); + else + seq_tier = 0; + + if (decoder_model_info_present_flag) { + if (get_bits(&gb, 1)) { + skip_bits_long( + &gb, + buffer_delay_length_minus_1 + + 1); + skip_bits_long( + &gb, + buffer_delay_length_minus_1 + + 1); + skip_bits(&gb, 1); + } + } + + if (initial_display_delay_present_flag) { + if (get_bits(&gb, 1)) + skip_bits(&gb, 4); + } + + if (i == 0) { + seq_params->level = seq_level_idx; + seq_params->tier = seq_tier; + } + } + } + + frame_width_bits_minus_1 = get_bits(&gb, 4); + frame_height_bits_minus_1 = get_bits(&gb, 4); + + skip_bits(&gb, frame_width_bits_minus_1 + 1); // max_frame_width_minus_1 + skip_bits(&gb, + frame_height_bits_minus_1 + 1); // max_frame_height_minus_1 + + if (!reduced_still_picture_header) { + if (get_bits(&gb, 1)) // frame_id_numbers_present_flag + skip_bits(&gb, 7); + } + + skip_bits( + &gb, + 3); // use_128x128_superblock (1), enable_filter_intra (1), enable_intra_edge_filter (1) + + if (!reduced_still_picture_header) { + int enable_order_hint, seq_force_screen_content_tools; + + skip_bits(&gb, 4); + + enable_order_hint = get_bits(&gb, 1); + if (enable_order_hint) + skip_bits(&gb, 2); + + if (get_bits(&gb, 1)) // seq_choose_screen_content_tools + seq_force_screen_content_tools = 2; + else + seq_force_screen_content_tools = get_bits(&gb, 1); + + if (seq_force_screen_content_tools) { + if (!get_bits(&gb, 1)) // seq_choose_integer_mv + skip_bits(&gb, 1); // seq_force_integer_mv + } + + if (enable_order_hint) + skip_bits(&gb, 3); // order_hint_bits_minus_1 + } + + skip_bits(&gb, 3); + + parse_color_config(seq_params, &gb); + + skip_bits(&gb, 1); // film_grain_params_present + + if (get_bits_left(&gb)) + return -1; + + return 0; +} + +size_t obs_parse_av1_header(uint8_t **header, const uint8_t *data, size_t size) +{ + if (data[0] & 0x80) { + int config_record_version = data[0] & 0x7f; + if (config_record_version != 1 || size < 4) + return 0; + + *header = bmemdup(data, size); + return size; + } + + // AV1S init + AV1SequenceParameters seq_params; + int nb_seq = 0, seq_size = 0, meta_size = 0; + const uint8_t *seq = 0, *meta = 0; + + uint8_t *buf = (uint8_t *)data; + while (size > 0) { + int64_t obu_size; + int start_pos, type, temporal_id, spatial_id; + assert(size <= INT_MAX); + int len = parse_obu_header(buf, (int)size, &obu_size, + &start_pos, &type, &temporal_id, + &spatial_id); + if (len < 0) + return 0; + + switch (type) { + case AV1_OBU_SEQUENCE_HEADER: + nb_seq++; + if (!obu_size || nb_seq > 1) { + return 0; + } + assert(obu_size <= INT_MAX); + if (parse_sequence_header(&seq_params, buf + start_pos, + (int)obu_size) < 0) + return 0; + + seq = buf; + seq_size = len; + break; + case AV1_OBU_METADATA: + if (!obu_size) + return 0; + meta = buf; + meta_size = len; + break; + default: + break; + } + size -= len; + buf += len; + } + + if (!nb_seq) + return 0; + + uint8_t av1header[4]; + av1header[0] = (1 << 7) | 1; // marker and version + av1header[1] = (seq_params.profile << 5) | (seq_params.level); + av1header[2] = (seq_params.tier << 7) | (seq_params.bitdepth > 8) << 6 | + (seq_params.bitdepth == 12) << 5 | + (seq_params.monochrome) << 4 | + (seq_params.chroma_subsampling_x) << 3 | + (seq_params.chroma_subsampling_y) << 2 | + (seq_params.chroma_sample_position); + av1header[3] = 0; + + struct array_output_data output; + struct serializer s; + long ref = 1; + + array_output_serializer_init(&s, &output); + serialize(&s, &ref, sizeof(ref)); + + s_write(&s, av1header, sizeof(av1header)); + if (seq_size) + s_write(&s, seq, seq_size); + if (meta_size) + s_write(&s, meta, meta_size); + + *header = output.bytes.array + sizeof(ref); + return output.bytes.num - sizeof(ref); +} + +static void serialize_av1_data(struct serializer *s, const uint8_t *data, + size_t size, bool *is_keyframe, int *priority) +{ + (void)is_keyframe; + (void)priority; + uint8_t *buf = (uint8_t *)data; + uint8_t *end = (uint8_t *)data + size; + enum { + START_NOT_FOUND, + START_FOUND, + END_FOUND, + OFFSET_IMPOSSIBLE, + } state = START_NOT_FOUND; + + while (buf < end) { + int64_t obu_size; + int start_pos, type, temporal_id, spatial_id; + assert(end - buf <= INT_MAX); + int len = parse_obu_header(buf, (int)(end - buf), &obu_size, + &start_pos, &type, &temporal_id, + &spatial_id); + if (len < 0) + return; + + switch (type) { + case AV1_OBU_TEMPORAL_DELIMITER: + case AV1_OBU_REDUNDANT_FRAME_HEADER: + case AV1_OBU_TILE_LIST: + case AV1_OBU_PADDING: + if (state == START_FOUND) + state = END_FOUND; + break; + default: + if (state == START_NOT_FOUND) { + state = START_FOUND; + } else if (state == END_FOUND) { + state = OFFSET_IMPOSSIBLE; + } + s_write(s, buf, len); + size += len; + break; + } + buf += len; + } +} + +void obs_parse_av1_packet(struct encoder_packet *av1_packet, + const struct encoder_packet *src) +{ + struct array_output_data output; + struct serializer s; + long ref = 1; + + array_output_serializer_init(&s, &output); + serialize(&s, &ref, sizeof(ref)); + + *av1_packet = *src; + serialize_av1_data(&s, src->data, src->size, &av1_packet->keyframe, + &av1_packet->priority); + + av1_packet->data = output.bytes.array + sizeof(ref); + av1_packet->size = output.bytes.num - sizeof(ref); + av1_packet->drop_priority = av1_packet->priority; +} diff --git a/plugins/obs-outputs/rtmp-av1.h b/plugins/obs-outputs/rtmp-av1.h new file mode 100644 index 00000000000000..20309b5258891f --- /dev/null +++ b/plugins/obs-outputs/rtmp-av1.h @@ -0,0 +1,28 @@ +/****************************************************************************** + Copyright (C) 2023 by Hugh Bailey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#pragma once + +#include +#include + +struct encoder_packet; + +extern void obs_parse_av1_packet(struct encoder_packet *avc_packet, + const struct encoder_packet *src); +extern size_t obs_parse_av1_header(uint8_t **header, const uint8_t *data, + size_t size); diff --git a/plugins/obs-outputs/rtmp-hevc.c b/plugins/obs-outputs/rtmp-hevc.c new file mode 100644 index 00000000000000..c02a8e55299429 --- /dev/null +++ b/plugins/obs-outputs/rtmp-hevc.c @@ -0,0 +1,938 @@ +/****************************************************************************** + Copyright (C) 2023 by Hugh Bailey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#include "rtmp-hevc.h" +#include "utils.h" + +#include +#include +#include +#include + +/* Adapted from FFmpeg's libavformat/hevc.c for our FLV muxer. */ + +enum { + OBS_VPS_INDEX, + OBS_SPS_INDEX, + OBS_PPS_INDEX, + OBS_SEI_PREFIX_INDEX, + OBS_SEI_SUFFIX_INDEX, + OBS_NB_ARRAYS +}; + +enum { + OBS_HEVC_MAX_VPS_COUNT = 16, + OBS_HEVC_MAX_SPS_COUNT = 16, + OBS_HEVC_MAX_PPS_COUNT = 64, +}; + +typedef struct HVCCNALUnitArray { + uint8_t array_completeness; + uint8_t NAL_unit_type; + uint16_t numNalus; + struct array_output_data nalUnitData; + struct serializer nalUnit; +} HVCCNALUnitArray; + +typedef struct HEVCDecoderConfigurationRecord { + uint8_t general_profile_space; + uint8_t general_tier_flag; + uint8_t general_profile_idc; + uint32_t general_profile_compatibility_flags; + uint64_t general_constraint_indicator_flags; + uint8_t general_level_idc; + uint16_t min_spatial_segmentation_idc; + uint8_t parallelismType; + uint8_t chromaFormat; + uint8_t bitDepthLumaMinus8; + uint8_t bitDepthChromaMinus8; + uint16_t avgFrameRate; + uint8_t constantFrameRate; + uint8_t numTemporalLayers; + uint8_t temporalIdNested; + uint8_t lengthSizeMinusOne; + uint8_t numOfArrays; + HVCCNALUnitArray arrays[OBS_NB_ARRAYS]; +} HEVCDecoderConfigurationRecord; + +typedef struct HVCCProfileTierLevel { + uint8_t profile_space; + uint8_t tier_flag; + uint8_t profile_idc; + uint32_t profile_compatibility_flags; + uint64_t constraint_indicator_flags; + uint8_t level_idc; +} HVCCProfileTierLevel; + +typedef struct HevcGetBitContext { + const uint8_t *buffer, *buffer_end; + uint64_t cache; + unsigned bits_left; + int index; + int size_in_bits; + int size_in_bits_plus8; +} HevcGetBitContext; + +static inline uint32_t rb32(const uint8_t *ptr) +{ + return (ptr[0] << 24) + (ptr[1] << 16) + (ptr[2] << 8) + ptr[3]; +} + +static inline void refill_32(HevcGetBitContext *s) +{ + s->cache = s->cache | (uint64_t)rb32(s->buffer + (s->index >> 3)) + << (32 - s->bits_left); + s->index += 32; + s->bits_left += 32; +} + +static inline uint64_t get_val(HevcGetBitContext *s, unsigned n) +{ + uint64_t ret; + ret = s->cache >> (64 - n); + s->cache <<= n; + s->bits_left -= n; + return ret; +} + +static inline int init_get_bits_xe(HevcGetBitContext *s, const uint8_t *buffer, + int bit_size) +{ + int buffer_size; + int ret = 0; + + if (bit_size >= INT_MAX - 64 * 8 || bit_size < 0 || !buffer) { + bit_size = 0; + buffer = NULL; + ret = -1; + } + + buffer_size = (bit_size + 7) >> 3; + + s->buffer = buffer; + s->size_in_bits = bit_size; + s->size_in_bits_plus8 = bit_size + 8; + s->buffer_end = buffer + buffer_size; + s->index = 0; + + s->cache = 0; + s->bits_left = 0; + refill_32(s); + + return ret; +} + +static inline int init_get_bits(HevcGetBitContext *s, const uint8_t *buffer, + int bit_size) +{ + return init_get_bits_xe(s, buffer, bit_size); +} + +static inline int init_get_bits8(HevcGetBitContext *s, const uint8_t *buffer, + int byte_size) +{ + if (byte_size > INT_MAX / 8 || byte_size < 0) + byte_size = -1; + return init_get_bits(s, buffer, byte_size * 8); +} + +static inline unsigned int get_bits(HevcGetBitContext *s, unsigned int n) +{ + register unsigned int tmp; + + if (n > s->bits_left) { + refill_32(s); + } + tmp = (unsigned int)get_val(s, n); + return tmp; +} + +#define skip_bits get_bits + +static inline int get_bits_count(HevcGetBitContext *s) +{ + return s->index - s->bits_left; +} + +static inline int get_bits_left(HevcGetBitContext *gb) +{ + return gb->size_in_bits - get_bits_count(gb); +} + +static inline unsigned int get_bits_long(HevcGetBitContext *s, int n) +{ + if (!n) + return 0; + return get_bits(s, n); +} + +#define skip_bits_long get_bits_long + +static inline uint64_t get_bits64(HevcGetBitContext *s, int n) +{ + if (n <= 32) { + return get_bits_long(s, n); + } else { + uint64_t ret = (uint64_t)get_bits_long(s, n - 32) << 32; + return ret | get_bits_long(s, 32); + } +} +static inline int ilog2(unsigned x) +{ + return (31 - clz32(x | 1)); +} +static inline unsigned show_val(const HevcGetBitContext *s, unsigned n) +{ + return s->cache & ((UINT64_C(1) << n) - 1); +} +static inline unsigned int show_bits(HevcGetBitContext *s, unsigned int n) +{ + register unsigned int tmp; + if (n > s->bits_left) + refill_32(s); + tmp = show_val(s, n); + return tmp; +} +static inline unsigned int show_bits_long(HevcGetBitContext *s, int n) +{ + if (n <= 25) { + return show_bits(s, n); + } else { + HevcGetBitContext gb = *s; + return get_bits_long(&gb, n); + } +} + +static inline unsigned get_ue_golomb_long(HevcGetBitContext *gb) +{ + unsigned buf, log; + + buf = show_bits_long(gb, 32); + log = 31 - ilog2(buf); + skip_bits_long(gb, log); + + return get_bits_long(gb, log + 1) - 1; +} +static inline int get_se_golomb_long(HevcGetBitContext *gb) +{ + unsigned int buf = get_ue_golomb_long(gb); + int sign = (buf & 1) - 1; + return ((buf >> 1) ^ sign) + 1; +} + +static inline bool has_start_code(const uint8_t *data, size_t size) +{ + if (size > 3 && data[0] == 0 && data[1] == 0 && data[2] == 1) + return true; + + if (size > 4 && data[0] == 0 && data[1] == 0 && data[2] == 0 && + data[3] == 1) + return true; + + return false; +} + +uint8_t *ff_nal_unit_extract_rbsp(uint8_t *dst, const uint8_t *src, int src_len, + uint32_t *dst_len, int header_len) +{ + int i, len; + + /* NAL unit header */ + i = len = 0; + while (i < header_len && i < src_len) + dst[len++] = src[i++]; + + while (i + 2 < src_len) + if (!src[i] && !src[i + 1] && src[i + 2] == 3) { + dst[len++] = src[i++]; + dst[len++] = src[i++]; + i++; // remove emulation_prevention_three_byte + } else + dst[len++] = src[i++]; + + while (i < src_len) + dst[len++] = src[i++]; + + memset(dst + len, 0, 64); + + *dst_len = (uint32_t)len; + return dst; +} + +static int hvcc_array_add_nal_unit(uint8_t *nal_buf, uint32_t nal_size, + uint8_t nal_type, int ps_array_completeness, + HVCCNALUnitArray *array) +{ + s_wb16(&array->nalUnit, nal_size); + s_write(&array->nalUnit, nal_buf, nal_size); + array->NAL_unit_type = nal_type; + array->numNalus++; + + if (nal_type == OBS_HEVC_NAL_VPS || nal_type == OBS_HEVC_NAL_SPS || + nal_type == OBS_HEVC_NAL_PPS) + array->array_completeness = ps_array_completeness; + + return 0; +} + +static void nal_unit_parse_header(HevcGetBitContext *gb, uint8_t *nal_type) +{ + skip_bits(gb, 1); // forbidden_zero_bit + *nal_type = get_bits(gb, 6); + get_bits(gb, 9); +} + +static void hvcc_update_ptl(HEVCDecoderConfigurationRecord *hvcc, + HVCCProfileTierLevel *ptl) +{ + hvcc->general_profile_space = ptl->profile_space; + if (hvcc->general_tier_flag < ptl->tier_flag) + hvcc->general_level_idc = ptl->level_idc; + else + hvcc->general_level_idc = + max_u8(hvcc->general_level_idc, ptl->level_idc); + hvcc->general_tier_flag = + max_u8(hvcc->general_tier_flag, ptl->tier_flag); + hvcc->general_profile_idc = + max_u8(hvcc->general_profile_idc, ptl->profile_idc); + hvcc->general_profile_compatibility_flags &= + ptl->profile_compatibility_flags; + hvcc->general_constraint_indicator_flags &= + ptl->constraint_indicator_flags; +} + +static void hvcc_parse_ptl(HevcGetBitContext *gb, + HEVCDecoderConfigurationRecord *hvcc, + unsigned int max_sub_layers_minus1) +{ + unsigned int i; + HVCCProfileTierLevel general_ptl; + uint8_t sub_layer_profile_present_flag[7]; // max sublayers + uint8_t sub_layer_level_present_flag[7]; // max sublayers + + general_ptl.profile_space = get_bits(gb, 2); + general_ptl.tier_flag = get_bits(gb, 1); + general_ptl.profile_idc = get_bits(gb, 5); + general_ptl.profile_compatibility_flags = get_bits_long(gb, 32); + general_ptl.constraint_indicator_flags = get_bits64(gb, 48); + general_ptl.level_idc = get_bits(gb, 8); + hvcc_update_ptl(hvcc, &general_ptl); + + for (i = 0; i < max_sub_layers_minus1; i++) { + sub_layer_profile_present_flag[i] = get_bits(gb, 1); + sub_layer_level_present_flag[i] = get_bits(gb, 1); + } + + // skip the rest + if (max_sub_layers_minus1 > 0) + for (i = max_sub_layers_minus1; i < 8; i++) + skip_bits(gb, 2); + + for (i = 0; i < max_sub_layers_minus1; i++) { + if (sub_layer_profile_present_flag[i]) { + skip_bits_long(gb, 32); + skip_bits_long(gb, 32); + skip_bits(gb, 24); + } + + if (sub_layer_level_present_flag[i]) + skip_bits(gb, 8); + } +} + +static int hvcc_parse_vps(HevcGetBitContext *gb, + HEVCDecoderConfigurationRecord *hvcc) +{ + unsigned int vps_max_sub_layers_minus1; + skip_bits(gb, 12); + vps_max_sub_layers_minus1 = get_bits(gb, 3); + hvcc->numTemporalLayers = + max_u8(hvcc->numTemporalLayers, vps_max_sub_layers_minus1 + 1); + skip_bits(gb, 17); + hvcc_parse_ptl(gb, hvcc, vps_max_sub_layers_minus1); + return 0; +} + +#define HEVC_MAX_SHORT_TERM_REF_PIC_SETS 64 + +static void skip_scaling_list_data(HevcGetBitContext *gb) +{ + int i, j, k, num_coeffs; + + for (i = 0; i < 4; i++) { + for (j = 0; j < (i == 3 ? 2 : 6); j++) { + if (!get_bits(gb, 1)) + get_ue_golomb_long(gb); + else { + num_coeffs = min_i32(64, 1 << (4 + (i << 1))); + + if (i > 1) + get_se_golomb_long(gb); + for (k = 0; k < num_coeffs; k++) + get_se_golomb_long(gb); + } + } + } +} + +static int +parse_rps(HevcGetBitContext *gb, unsigned int rps_idx, unsigned int num_rps, + unsigned int num_delta_pocs[HEVC_MAX_SHORT_TERM_REF_PIC_SETS]) +{ + unsigned int i; + + if (rps_idx && get_bits(gb, 1)) { // inter_ref_pic_set_prediction_flag + /* this should only happen for slice headers, and this isn't one */ + if (rps_idx >= num_rps) + return -1; + + get_bits(gb, 1); // delta_rps_sign + get_ue_golomb_long(gb); // abs_delta_rps_minus1 + + num_delta_pocs[rps_idx] = 0; + + for (i = 0; i <= num_delta_pocs[rps_idx - 1]; i++) { + uint8_t use_delta_flag = 0; + uint8_t used_by_curr_pic_flag = get_bits(gb, 1); + if (!used_by_curr_pic_flag) + use_delta_flag = get_bits(gb, 1); + + if (used_by_curr_pic_flag || use_delta_flag) + num_delta_pocs[rps_idx]++; + } + } else { + unsigned int num_negative_pics = get_ue_golomb_long(gb); + unsigned int num_positive_pics = get_ue_golomb_long(gb); + + if ((num_positive_pics + (uint64_t)num_negative_pics) * 2 > + (uint64_t)get_bits_left(gb)) + return -1; + + num_delta_pocs[rps_idx] = num_negative_pics + num_positive_pics; + + for (i = 0; i < num_negative_pics; i++) { + get_ue_golomb_long(gb); // delta_poc_s0_minus1[rps_idx] + get_bits(gb, 1); // used_by_curr_pic_s0_flag[rps_idx] + } + + for (i = 0; i < num_positive_pics; i++) { + get_ue_golomb_long(gb); // delta_poc_s1_minus1[rps_idx] + get_bits(gb, 1); // used_by_curr_pic_s1_flag[rps_idx] + } + } + + return 0; +} + +static void +skip_sub_layer_hrd_parameters(HevcGetBitContext *gb, + unsigned int cpb_cnt_minus1, + uint8_t sub_pic_hrd_params_present_flag) +{ + unsigned int i; + + for (i = 0; i <= cpb_cnt_minus1; i++) { + get_ue_golomb_long(gb); // bit_rate_value_minus1 + get_ue_golomb_long(gb); // cpb_size_value_minus1 + + if (sub_pic_hrd_params_present_flag) { + get_ue_golomb_long(gb); // cpb_size_du_value_minus1 + get_ue_golomb_long(gb); // bit_rate_du_value_minus1 + } + + get_bits(gb, 1); // cbr_flag + } +} + +static int skip_hrd_parameters(HevcGetBitContext *gb, + uint8_t cprms_present_flag, + unsigned int max_sub_layers_minus1) +{ + unsigned int i; + uint8_t sub_pic_hrd_params_present_flag = 0; + uint8_t nal_hrd_parameters_present_flag = 0; + uint8_t vcl_hrd_parameters_present_flag = 0; + + if (cprms_present_flag) { + nal_hrd_parameters_present_flag = get_bits(gb, 1); + vcl_hrd_parameters_present_flag = get_bits(gb, 1); + + if (nal_hrd_parameters_present_flag || + vcl_hrd_parameters_present_flag) { + sub_pic_hrd_params_present_flag = get_bits(gb, 1); + + if (sub_pic_hrd_params_present_flag) + get_bits(gb, 19); + + get_bits(gb, 8); + + if (sub_pic_hrd_params_present_flag) + get_bits(gb, 4); + get_bits(gb, 15); + } + } + + for (i = 0; i <= max_sub_layers_minus1; i++) { + unsigned int cpb_cnt_minus1 = 0; + uint8_t low_delay_hrd_flag = 0; + uint8_t fixed_pic_rate_within_cvs_flag = 0; + uint8_t fixed_pic_rate_general_flag = get_bits(gb, 1); + + if (!fixed_pic_rate_general_flag) + fixed_pic_rate_within_cvs_flag = get_bits(gb, 1); + + if (fixed_pic_rate_within_cvs_flag) + get_ue_golomb_long(gb); + else + low_delay_hrd_flag = get_bits(gb, 1); + + if (!low_delay_hrd_flag) { + cpb_cnt_minus1 = get_ue_golomb_long(gb); + if (cpb_cnt_minus1 > 31) + return -1; + } + + if (nal_hrd_parameters_present_flag) + skip_sub_layer_hrd_parameters( + gb, cpb_cnt_minus1, + sub_pic_hrd_params_present_flag); + + if (vcl_hrd_parameters_present_flag) + skip_sub_layer_hrd_parameters( + gb, cpb_cnt_minus1, + sub_pic_hrd_params_present_flag); + } + + return 0; +} + +static void hvcc_parse_vui(HevcGetBitContext *gb, + HEVCDecoderConfigurationRecord *hvcc, + unsigned int max_sub_layers_minus1) +{ + unsigned int min_spatial_segmentation_idc; + + if (get_bits(gb, 1)) // aspect_ratio_info_present_flag + if (get_bits(gb, 8) == 255) // aspect_ratio_idc + get_bits_long(gb, + 32); // sar_width u(16), sar_height u(16) + + if (get_bits(gb, 1)) // overscan_info_present_flag + get_bits(gb, 1); // overscan_appropriate_flag + + if (get_bits(gb, 1)) { // video_signal_type_present_flag + get_bits(gb, + 4); // video_format u(3), video_full_range_flag u(1) + + if (get_bits(gb, 1)) // colour_description_present_flag + get_bits(gb, 24); + } + + if (get_bits(gb, 1)) { + get_ue_golomb_long(gb); + get_ue_golomb_long(gb); + } + + get_bits(gb, 3); + + if (get_bits(gb, 1)) { // default_display_window_flag + get_ue_golomb_long(gb); // def_disp_win_left_offset + get_ue_golomb_long(gb); // def_disp_win_right_offset + get_ue_golomb_long(gb); // def_disp_win_top_offset + get_ue_golomb_long(gb); // def_disp_win_bottom_offset + } + + if (get_bits(gb, 1)) { // vui_timing_info_present_flag + // skip timing info + get_bits_long(gb, 32); // num_units_in_tick + get_bits_long(gb, 32); // time_scale + + if (get_bits(gb, 1)) // poc_proportional_to_timing_flag + get_ue_golomb_long(gb); // num_ticks_poc_diff_one_minus1 + + if (get_bits(gb, 1)) // vui_hrd_parameters_present_flag + skip_hrd_parameters(gb, 1, max_sub_layers_minus1); + } + + if (get_bits(gb, 1)) { // bitstream_restriction_flag + get_bits(gb, 3); + + min_spatial_segmentation_idc = get_ue_golomb_long(gb); + hvcc->min_spatial_segmentation_idc = + min_u16(hvcc->min_spatial_segmentation_idc, + min_spatial_segmentation_idc); + + get_ue_golomb_long(gb); // max_bytes_per_pic_denom + get_ue_golomb_long(gb); // max_bits_per_min_cu_denom + get_ue_golomb_long(gb); // log2_max_mv_length_horizontal + get_ue_golomb_long(gb); // log2_max_mv_length_vertical + } +} + +static int hvcc_parse_sps(HevcGetBitContext *gb, + HEVCDecoderConfigurationRecord *hvcc) +{ + unsigned int i, sps_max_sub_layers_minus1, + log2_max_pic_order_cnt_lsb_minus4; + unsigned int num_short_term_ref_pic_sets, + num_delta_pocs[HEVC_MAX_SHORT_TERM_REF_PIC_SETS]; + + get_bits(gb, 4); // sps_video_parameter_set_id + sps_max_sub_layers_minus1 = get_bits(gb, 3); + + hvcc->numTemporalLayers = + max_u8(hvcc->numTemporalLayers, sps_max_sub_layers_minus1 + 1); + + hvcc->temporalIdNested = get_bits(gb, 1); + + hvcc_parse_ptl(gb, hvcc, sps_max_sub_layers_minus1); + + get_ue_golomb_long(gb); // sps_seq_parameter_set_id + + hvcc->chromaFormat = get_ue_golomb_long(gb); + + if (hvcc->chromaFormat == 3) + get_bits(gb, 1); // separate_colour_plane_flag + + get_ue_golomb_long(gb); // pic_width_in_luma_samples + get_ue_golomb_long(gb); // pic_height_in_luma_samples + + if (get_bits(gb, 1)) { // conformance_window_flag + get_ue_golomb_long(gb); // conf_win_left_offset + get_ue_golomb_long(gb); // conf_win_right_offset + get_ue_golomb_long(gb); // conf_win_top_offset + get_ue_golomb_long(gb); // conf_win_bottom_offset + } + + hvcc->bitDepthLumaMinus8 = get_ue_golomb_long(gb); + hvcc->bitDepthChromaMinus8 = get_ue_golomb_long(gb); + log2_max_pic_order_cnt_lsb_minus4 = get_ue_golomb_long(gb); + + /* sps_sub_layer_ordering_info_present_flag */ + i = get_bits(gb, 1) ? 0 : sps_max_sub_layers_minus1; + for (; i <= sps_max_sub_layers_minus1; i++) { + get_ue_golomb_long(gb); // max_dec_pic_buffering_minus1 + get_ue_golomb_long(gb); // max_num_reorder_pics + get_ue_golomb_long(gb); // max_latency_increase_plus1 + } + + get_ue_golomb_long(gb); // log2_min_luma_coding_block_size_minus3 + get_ue_golomb_long(gb); // log2_diff_max_min_luma_coding_block_size + get_ue_golomb_long(gb); // log2_min_transform_block_size_minus2 + get_ue_golomb_long(gb); // log2_diff_max_min_transform_block_size + get_ue_golomb_long(gb); // max_transform_hierarchy_depth_inter + get_ue_golomb_long(gb); // max_transform_hierarchy_depth_intra + + if (get_bits(gb, 1) && // scaling_list_enabled_flag + get_bits(gb, 1)) // sps_scaling_list_data_present_flag + skip_scaling_list_data(gb); + + get_bits(gb, 1); // amp_enabled_flag + get_bits(gb, 1); // sample_adaptive_offset_enabled_flag + + if (get_bits(gb, 1)) { // pcm_enabled_flag + get_bits(gb, 4); // pcm_sample_bit_depth_luma_minus1 + get_bits(gb, 4); // pcm_sample_bit_depth_chroma_minus1 + get_ue_golomb_long( + gb); // log2_min_pcm_luma_coding_block_size_minus3 + get_ue_golomb_long( + gb); // log2_diff_max_min_pcm_luma_coding_block_size + get_bits(gb, 1); // pcm_loop_filter_disabled_flag + } + + num_short_term_ref_pic_sets = get_ue_golomb_long(gb); + if (num_short_term_ref_pic_sets > HEVC_MAX_SHORT_TERM_REF_PIC_SETS) + return -1; + + for (i = 0; i < num_short_term_ref_pic_sets; i++) { + int ret = parse_rps(gb, i, num_short_term_ref_pic_sets, + num_delta_pocs); + if (ret < 0) + return ret; + } + + if (get_bits(gb, 1)) { // long_term_ref_pics_present_flag + unsigned num_long_term_ref_pics_sps = get_ue_golomb_long(gb); + if (num_long_term_ref_pics_sps > 31U) + return -1; + for (i = 0; i < num_long_term_ref_pics_sps; + i++) { // num_long_term_ref_pics_sps + int len = min_i32(log2_max_pic_order_cnt_lsb_minus4 + 4, + 16); + get_bits(gb, len); // lt_ref_pic_poc_lsb_sps[i] + get_bits(gb, 1); // used_by_curr_pic_lt_sps_flag[i] + } + } + + get_bits(gb, 1); // sps_temporal_mvp_enabled_flag + get_bits(gb, 1); // strong_intra_smoothing_enabled_flag + + if (get_bits(gb, 1)) // vui_parameters_present_flag + hvcc_parse_vui(gb, hvcc, sps_max_sub_layers_minus1); + + /* nothing useful for hvcC past this point */ + return 0; +} + +static int hvcc_parse_pps(HevcGetBitContext *gb, + HEVCDecoderConfigurationRecord *hvcc) +{ + uint8_t tiles_enabled_flag, entropy_coding_sync_enabled_flag; + + get_ue_golomb_long(gb); // pps_pic_parameter_set_id + get_ue_golomb_long(gb); // pps_seq_parameter_set_id + + get_bits(gb, 7); + + get_ue_golomb_long(gb); // num_ref_idx_l0_default_active_minus1 + get_ue_golomb_long(gb); // num_ref_idx_l1_default_active_minus1 + get_se_golomb_long(gb); // init_qp_minus26 + + get_bits(gb, 2); + + if (get_bits(gb, 1)) // cu_qp_delta_enabled_flag + get_ue_golomb_long(gb); // diff_cu_qp_delta_depth + + get_se_golomb_long(gb); // pps_cb_qp_offset + get_se_golomb_long(gb); // pps_cr_qp_offset + + get_bits(gb, 4); + + tiles_enabled_flag = get_bits(gb, 1); + entropy_coding_sync_enabled_flag = get_bits(gb, 1); + + if (entropy_coding_sync_enabled_flag && tiles_enabled_flag) + hvcc->parallelismType = 0; // mixed-type parallel decoding + else if (entropy_coding_sync_enabled_flag) + hvcc->parallelismType = 3; // wavefront-based parallel decoding + else if (tiles_enabled_flag) + hvcc->parallelismType = 2; // tile-based parallel decoding + else + hvcc->parallelismType = 1; // slice-based parallel decoding + + /* nothing useful for hvcC past this point */ + return 0; +} + +static int hvcc_add_nal_unit(uint8_t *nal_buf, uint32_t nal_size, + int ps_array_completeness, + HEVCDecoderConfigurationRecord *hvcc, + unsigned array_idx) +{ + int ret = 0; + HevcGetBitContext gbc; + uint8_t nal_type; + uint8_t *rbsp_buf; + uint32_t rbsp_size; + + uint8_t *dst; + dst = bmalloc(nal_size + 64); + + rbsp_buf = + ff_nal_unit_extract_rbsp(dst, nal_buf, nal_size, &rbsp_size, 2); + if (!rbsp_buf) { + ret = -1; + goto end; + } + + ret = init_get_bits8(&gbc, rbsp_buf, rbsp_size); + if (ret < 0) + goto end; + + nal_unit_parse_header(&gbc, &nal_type); + + ret = hvcc_array_add_nal_unit(nal_buf, nal_size, nal_type, + ps_array_completeness, + &hvcc->arrays[array_idx]); + if (ret < 0) + goto end; + if (hvcc->arrays[array_idx].numNalus == 1) + hvcc->numOfArrays++; + if (nal_type == OBS_HEVC_NAL_VPS) + ret = hvcc_parse_vps(&gbc, hvcc); + else if (nal_type == OBS_HEVC_NAL_SPS) + ret = hvcc_parse_sps(&gbc, hvcc); + else if (nal_type == OBS_HEVC_NAL_PPS) + ret = hvcc_parse_pps(&gbc, hvcc); + if (ret < 0) + goto end; + +end: + bfree(dst); + return ret; +} + +size_t obs_parse_hevc_header(uint8_t **header, const uint8_t *data, size_t size) +{ + const uint8_t *start; + const uint8_t *end; + + if (!has_start_code(data, size)) { + *header = bmemdup(data, size); + return size; + } + + if (size < 6) + return 0; // invalid + if (*data == 1) { // already hvcC-formatted + *header = bmemdup(data, size); + return size; + } + + struct array_output_data nals; + struct serializer sn; + array_output_serializer_init(&sn, &nals); + + const uint8_t *nal_start, *nal_end; + start = data; + end = data + size; + + size = 0; // reset size + nal_start = obs_nal_find_startcode(start, end); + for (;;) { + while (nal_start < end && !*(nal_start++)) + ; + if (nal_start == end) + break; + nal_end = obs_nal_find_startcode(nal_start, end); + + assert(nal_end - nal_start <= INT_MAX); + s_wb32(&sn, (uint32_t)(nal_end - nal_start)); + s_write(&sn, nal_start, nal_end - nal_start); + size += 4 + nal_end - nal_start; + nal_start = nal_end; + } + if (size == 0) + goto done; + + start = nals.bytes.array; + end = nals.bytes.array + nals.bytes.num; + + // HVCC init + HEVCDecoderConfigurationRecord hvcc; + memset(&hvcc, 0, sizeof(HEVCDecoderConfigurationRecord)); + hvcc.lengthSizeMinusOne = 3; // 4 bytes + hvcc.general_profile_compatibility_flags = 0xffffffff; // all bits set + hvcc.general_constraint_indicator_flags = + 0xffffffffffff; // all bits set + hvcc.min_spatial_segmentation_idc = 4096 + 1; // assume invalid value + for (unsigned i = 0; i < OBS_NB_ARRAYS; i++) { + HVCCNALUnitArray *const array = &hvcc.arrays[i]; + array_output_serializer_init(&array->nalUnit, + &array->nalUnitData); + } + + uint8_t *buf = (uint8_t *)start; + while (end - buf > 4) { + uint32_t len = rb32(buf); + assert((end - buf - 4) <= INT_MAX); + len = min_u32(len, (uint32_t)(end - buf - 4)); + uint8_t type = (buf[4] >> 1) & 0x3f; + + buf += 4; + + for (unsigned i = 0; i < OBS_NB_ARRAYS; i++) { + static const uint8_t array_idx_to_type[] = { + OBS_HEVC_NAL_VPS, OBS_HEVC_NAL_SPS, + OBS_HEVC_NAL_PPS, OBS_HEVC_NAL_SEI_PREFIX, + OBS_HEVC_NAL_SEI_SUFFIX}; + + if (type == array_idx_to_type[i]) { + int ps_array_completeness = 0; + int ret = hvcc_add_nal_unit( + buf, len, ps_array_completeness, &hvcc, + i); + if (ret < 0) + goto free; + break; + } + } + + buf += len; + } + + // write hvcc data + uint16_t vps_count, sps_count, pps_count; + if (hvcc.min_spatial_segmentation_idc > 4096) // invalid? + hvcc.min_spatial_segmentation_idc = 0; + if (!hvcc.min_spatial_segmentation_idc) + hvcc.parallelismType = 0; + hvcc.avgFrameRate = 0; + hvcc.constantFrameRate = 0; + + vps_count = hvcc.arrays[OBS_VPS_INDEX].numNalus; + sps_count = hvcc.arrays[OBS_SPS_INDEX].numNalus; + pps_count = hvcc.arrays[OBS_PPS_INDEX].numNalus; + if (!vps_count || vps_count > OBS_HEVC_MAX_VPS_COUNT || !sps_count || + sps_count > OBS_HEVC_MAX_SPS_COUNT || !pps_count || + pps_count > OBS_HEVC_MAX_PPS_COUNT) + goto free; + + struct array_output_data output; + struct serializer s; + array_output_serializer_init(&s, &output); + s_w8(&s, 1); // configurationVersion, always 1 + + s_w8(&s, hvcc.general_profile_space << 6 | hvcc.general_tier_flag << 5 | + hvcc.general_profile_idc); + + s_wb32(&s, hvcc.general_profile_compatibility_flags); + + s_wb32(&s, (uint32_t)(hvcc.general_constraint_indicator_flags >> 16)); + s_wb16(&s, (uint16_t)(hvcc.general_constraint_indicator_flags)); + + s_w8(&s, hvcc.general_level_idc); + + s_wb16(&s, hvcc.min_spatial_segmentation_idc | 0xf000); + s_w8(&s, hvcc.parallelismType | 0xfc); + s_w8(&s, hvcc.chromaFormat | 0xfc); + s_w8(&s, hvcc.bitDepthLumaMinus8 | 0xf8); + s_w8(&s, hvcc.bitDepthChromaMinus8 | 0xf8); + s_wb16(&s, hvcc.avgFrameRate); + + s_w8(&s, hvcc.constantFrameRate << 6 | hvcc.numTemporalLayers << 3 | + hvcc.temporalIdNested << 2 | hvcc.lengthSizeMinusOne); + + s_w8(&s, hvcc.numOfArrays); + for (unsigned i = 0; i < OBS_NB_ARRAYS; i++) { + const HVCCNALUnitArray *const array = &hvcc.arrays[i]; + + if (!array->numNalus) + continue; + + s_w8(&s, (array->array_completeness << 7) | + (array->NAL_unit_type & 0x3f)); + s_wb16(&s, array->numNalus); + + s_write(&s, array->nalUnitData.bytes.array, + array->nalUnitData.bytes.num); + } + + *header = output.bytes.array; + size = output.bytes.num; + +free: + for (unsigned i = 0; i < OBS_NB_ARRAYS; i++) { + HVCCNALUnitArray *const array = &hvcc.arrays[i]; + array->numNalus = 0; + array_output_serializer_free(&array->nalUnitData); + } + +done: + array_output_serializer_free(&nals); + return size; +} diff --git a/plugins/obs-outputs/rtmp-hevc.h b/plugins/obs-outputs/rtmp-hevc.h new file mode 100644 index 00000000000000..d479b479e0f481 --- /dev/null +++ b/plugins/obs-outputs/rtmp-hevc.h @@ -0,0 +1,24 @@ +/****************************************************************************** + Copyright (C) 2023 by Hugh Bailey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +******************************************************************************/ + +#pragma once + +#include +#include + +extern size_t obs_parse_hevc_header(uint8_t **header, const uint8_t *data, + size_t size); diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 0312101b711e37..608ccac7994bcd 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -16,6 +16,12 @@ ******************************************************************************/ #include "rtmp-stream.h" +#include "rtmp-av1.h" +#include "rtmp-hevc.h" + +#include +#include + #ifdef _WIN32 #include #endif @@ -415,17 +421,10 @@ static int socket_queue_data(RTMPSockBuf *sb, const char *data, int len, return len; } -static int send_packet(struct rtmp_stream *stream, - struct encoder_packet *packet, bool is_header, - size_t idx) +static int handle_socket_read(struct rtmp_stream *stream) { - uint8_t *data; - size_t size; - int recv_size = 0; int ret = 0; - - assert(idx < RTMP_MAX_STREAMS); - + int recv_size = 0; if (!stream->new_socket_loop) { #ifdef _WIN32 ret = ioctlsocket(stream->rtmp.m_sb.sb_socket, FIONREAD, @@ -439,6 +438,20 @@ static int send_packet(struct rtmp_stream *stream, return -1; } } + return 0; +} + +static int send_packet(struct rtmp_stream *stream, + struct encoder_packet *packet, bool is_header, + size_t idx) +{ + uint8_t *data; + size_t size; + int ret = 0; + + assert(idx < RTMP_MAX_STREAMS); + if (handle_socket_read(stream)) + return -1; if (idx > 0) { flv_additional_packet_mux( @@ -465,7 +478,46 @@ static int send_packet(struct rtmp_stream *stream, return ret; } +static int send_packet_ex(struct rtmp_stream *stream, + struct encoder_packet *packet, bool is_header, + bool is_footer) +{ + uint8_t *data; + size_t size = 0; + int ret = 0; + + if (handle_socket_read(stream)) + return -1; + + if (is_header) { + flv_packet_start(packet, stream->video_codec, + stream->start_dts_offset, &data, &size); + } else if (is_footer) { + flv_packet_end(packet, stream->video_codec, + stream->start_dts_offset, &data, &size); + } else { + flv_packet_frames(packet, stream->video_codec, + stream->start_dts_offset, &data, &size); + } + +#ifdef TEST_FRAMEDROPS + droptest_cap_data_rate(stream, size); +#endif + + ret = RTMP_Write(&stream->rtmp, (char *)data, (int)size, 0); + bfree(data); + + if (is_header || is_footer) // manually created packets + bfree(packet->data); + else + obs_encoder_packet_release(packet); + + stream->total_bytes_sent += size; + return ret; +} + static inline bool send_headers(struct rtmp_stream *stream); +static inline bool send_footers(struct rtmp_stream *stream); static inline bool can_shutdown_stream(struct rtmp_stream *stream, struct encoder_packet *packet) @@ -650,7 +702,16 @@ static void *send_thread(void *data) dbr_frame.size = packet.size; } - if (send_packet(stream, &packet, false, packet.track_idx) < 0) { + int sent; + if (packet.type == OBS_ENCODER_VIDEO && + stream->video_codec != CODEC_H264) { + sent = send_packet_ex(stream, &packet, false, false); + } else { + sent = send_packet(stream, &packet, false, + packet.track_idx); + } + + if (sent < 0) { os_atomic_set_bool(&stream->disconnected, true); break; } @@ -670,10 +731,12 @@ static void *send_thread(void *data) info("Disconnected from %s", stream->path.array); } else if (encode_error) { info("Encoder error, disconnecting"); + send_footers(stream); // Y2023 spec } else if (silently_reconnecting(stream)) { info("Silent reconnect signal received from server"); } else { info("User stopped the stream"); + send_footers(stream); // Y2023 spec } #if defined(_WIN32) @@ -803,8 +866,113 @@ static bool send_video_header(struct rtmp_stream *stream) if (!obs_encoder_get_extra_data(vencoder, &header, &size)) return false; - packet.size = obs_parse_avc_header(&packet.data, header, size); - return send_packet(stream, &packet, true, 0) >= 0; + + switch (stream->video_codec) { + case CODEC_H264: + packet.size = obs_parse_avc_header(&packet.data, header, size); + return send_packet(stream, &packet, true, 0) >= 0; +#ifdef ENABLE_HEVC + case CODEC_HEVC: + packet.size = obs_parse_hevc_header(&packet.data, header, size); + return send_packet_ex(stream, &packet, true, 0) >= 0; +#endif + case CODEC_AV1: + packet.size = obs_parse_av1_header(&packet.data, header, size); + return send_packet_ex(stream, &packet, true, 0) >= 0; + } + + return false; +} + +static bool send_video_metadata(struct rtmp_stream *stream) +{ + if (handle_socket_read(stream)) + return -1; + + // Y2023 spec + if (stream->video_codec != CODEC_H264) { + uint8_t *data; + size_t size; + + video_t *video = obs_get_video(); + const struct video_output_info *info = + video_output_get_info(video); + enum video_format format = info->format; + enum video_colorspace colorspace = info->colorspace; + + int bits_per_raw_sample; + switch (format) { + case VIDEO_FORMAT_I010: + case VIDEO_FORMAT_P010: + case VIDEO_FORMAT_I210: + bits_per_raw_sample = 10; + break; + case VIDEO_FORMAT_I412: + case VIDEO_FORMAT_YA2L: + bits_per_raw_sample = 12; + break; + default: + bits_per_raw_sample = 8; + } + + int pri = 0, trc = 0, spc = 0; + switch (colorspace) { + case VIDEO_CS_601: + pri = OBSCOL_PRI_SMPTE170M; + trc = OBSCOL_PRI_SMPTE170M; + spc = OBSCOL_PRI_SMPTE170M; + break; + case VIDEO_CS_DEFAULT: + case VIDEO_CS_709: + pri = OBSCOL_PRI_BT709; + trc = OBSCOL_PRI_BT709; + spc = OBSCOL_PRI_BT709; + break; + case VIDEO_CS_SRGB: + pri = OBSCOL_PRI_BT709; + trc = OBSCOL_TRC_IEC61966_2_1; + spc = OBSCOL_PRI_BT709; + break; + case VIDEO_CS_2100_PQ: + pri = OBSCOL_PRI_BT2020; + trc = OBSCOL_TRC_SMPTE2084; + spc = OBSCOL_SPC_BT2020_NCL; + break; + case VIDEO_CS_2100_HLG: + pri = OBSCOL_PRI_BT2020; + trc = OBSCOL_TRC_ARIB_STD_B67; + spc = OBSCOL_SPC_BT2020_NCL; + } + + int max_luminance = 0; + if (trc == OBSCOL_TRC_ARIB_STD_B67) + max_luminance = 1000; + else if (trc == OBSCOL_TRC_SMPTE2084) + max_luminance = + (int)obs_get_video_hdr_nominal_peak_level(); + + flv_packet_metadata(stream->video_codec, &data, &size, + bits_per_raw_sample, pri, trc, spc, 0, + max_luminance); + + int ret = RTMP_Write(&stream->rtmp, (char *)data, (int)size, 0); + bfree(data); + + stream->total_bytes_sent += size; + return ret >= 0; + } + // legacy + return true; +} + +static bool send_video_footer(struct rtmp_stream *stream) +{ + struct encoder_packet packet = {.type = OBS_ENCODER_VIDEO, + .timebase_den = 1, + .keyframe = false}; + packet.size = 0; + + return send_packet_ex(stream, &packet, 0, true) >= 0; } static inline bool send_headers(struct rtmp_stream *stream) @@ -818,6 +986,14 @@ static inline bool send_headers(struct rtmp_stream *stream) if (!send_video_header(stream)) return false; + // send metadata only if HDR + video_t *video = obs_get_video(); + const struct video_output_info *info = video_output_get_info(video); + enum video_colorspace colorspace = info->colorspace; + if (colorspace == VIDEO_CS_2100_PQ || colorspace == VIDEO_CS_2100_HLG) + if (!send_video_metadata(stream)) // Y2023 spec + return false; + while (next) { if (!send_audio_header(stream, i++, &next)) return false; @@ -826,6 +1002,15 @@ static inline bool send_headers(struct rtmp_stream *stream) return true; } +static inline bool send_footers(struct rtmp_stream *stream) +{ + if (stream->video_codec == CODEC_H264) + return false; + + // Y2023 spec + return send_video_footer(stream); +} + static inline bool reset_semaphore(struct rtmp_stream *stream) { os_sem_destroy(stream->send_sem); @@ -1158,6 +1343,9 @@ static bool init_connect(struct rtmp_stream *stream) obs_data_t *vsettings = obs_encoder_get_settings(venc); obs_data_t *asettings = obs_encoder_get_settings(aenc); + const char *codec = obs_encoder_get_codec(venc); + stream->video_codec = to_video_type(codec); + circlebuf_free(&stream->dbr_frames); stream->audio_bitrate = (long)obs_data_get_int(asettings, "bitrate"); stream->dbr_data_size = 0; @@ -1547,7 +1735,19 @@ static void rtmp_stream_data(void *data, struct encoder_packet *packet) stream->got_first_video = true; } - obs_parse_avc_packet(&new_packet, packet); + switch (stream->video_codec) { + case CODEC_H264: + obs_parse_avc_packet(&new_packet, packet); + break; +#ifdef ENABLE_HEVC + case CODEC_HEVC: + obs_parse_hevc_packet(&new_packet, packet); + break; +#endif + case CODEC_AV1: + obs_parse_av1_packet(&new_packet, packet); + break; + } } else { obs_encoder_packet_ref(&new_packet, packet); } @@ -1655,7 +1855,11 @@ struct obs_output_info rtmp_output_info = { #else .protocols = "RTMP;RTMPS", #endif - .encoded_video_codecs = "h264", +#ifdef ENABLE_HEVC + .encoded_video_codecs = "h264;hevc;av1", +#else + .encoded_video_codecs = "h264;av1", +#endif .encoded_audio_codecs = "aac", .get_name = rtmp_stream_getname, .create = rtmp_stream_create, diff --git a/plugins/obs-outputs/rtmp-stream.h b/plugins/obs-outputs/rtmp-stream.h index bca991909d42a1..6a33ff9c9b068f 100644 --- a/plugins/obs-outputs/rtmp-stream.h +++ b/plugins/obs-outputs/rtmp-stream.h @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -114,6 +113,8 @@ struct rtmp_stream { long dbr_inc_bitrate; bool dbr_enabled; + enum video_id_t video_codec; + RTMP rtmp; bool new_socket_loop; @@ -134,3 +135,110 @@ struct rtmp_stream { #ifdef _WIN32 void *socket_thread_windows(void *data); #endif + +/* Adapted from FFmpeg's libavutil/pixfmt.h + * + * Renamed to make it apparent that these are not imported as this module does + * not use or link against FFmpeg. + */ + +/** + * Chromaticity coordinates of the source primaries. + * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273. + */ +enum OBSColorPrimaries { + OBSCOL_PRI_RESERVED0 = 0, + OBSCOL_PRI_BT709 = + 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B + OBSCOL_PRI_UNSPECIFIED = 2, + OBSCOL_PRI_RESERVED = 3, + OBSCOL_PRI_BT470M = + 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + OBSCOL_PRI_BT470BG = + 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + OBSCOL_PRI_SMPTE170M = + 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + OBSCOL_PRI_SMPTE240M = + 7, ///< identical to above, also called "SMPTE C" even though it uses D65 + OBSCOL_PRI_FILM = 8, ///< colour filters using Illuminant C + OBSCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + OBSCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) + OBSCOL_PRI_SMPTEST428_1 = OBSCOL_PRI_SMPTE428, + OBSCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 + OBSCOL_PRI_SMPTE432 = + 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 + OBSCOL_PRI_EBU3213 = + 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors + OBSCOL_PRI_JEDEC_P22 = OBSCOL_PRI_EBU3213, + OBSCOL_PRI_NB ///< Not part of ABI +}; + +/** + * Color Transfer Characteristic. + * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. + */ +enum OBSColorTransferCharacteristic { + OBSCOL_TRC_RESERVED0 = 0, + OBSCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + OBSCOL_TRC_UNSPECIFIED = 2, + OBSCOL_TRC_RESERVED = 3, + OBSCOL_TRC_GAMMA22 = + 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + OBSCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + OBSCOL_TRC_SMPTE170M = + 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC + OBSCOL_TRC_SMPTE240M = 7, + OBSCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" + OBSCOL_TRC_LOG = + 9, ///< "Logarithmic transfer characteristic (100:1 range)" + OBSCOL_TRC_LOG_SQRT = + 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" + OBSCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 + OBSCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut + OBSCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) + OBSCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system + OBSCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system + OBSCOL_TRC_SMPTE2084 = + 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems + OBSCOL_TRC_SMPTEST2084 = OBSCOL_TRC_SMPTE2084, + OBSCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 + OBSCOL_TRC_SMPTEST428_1 = OBSCOL_TRC_SMPTE428, + OBSCOL_TRC_ARIB_STD_B67 = + 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" + OBSCOL_TRC_NB ///< Not part of ABI +}; + +/** + * YUV colorspace type. + * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. + */ +enum OBSColorSpace { + OBSCOL_SPC_RGB = + 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1 + OBSCOL_SPC_BT709 = + 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B + OBSCOL_SPC_UNSPECIFIED = 2, + OBSCOL_SPC_RESERVED = + 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are + OBSCOL_SPC_FCC = + 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + OBSCOL_SPC_BT470BG = + 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + OBSCOL_SPC_SMPTE170M = + 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + OBSCOL_SPC_SMPTE240M = + 7, ///< derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries + OBSCOL_SPC_YCGCO = + 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + OBSCOL_SPC_YCOCG = OBSCOL_SPC_YCGCO, + OBSCOL_SPC_BT2020_NCL = + 9, ///< ITU-R BT2020 non-constant luminance system + OBSCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system + OBSCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x + OBSCOL_SPC_CHROMA_DERIVED_NCL = + 12, ///< Chromaticity-derived non-constant luminance system + OBSCOL_SPC_CHROMA_DERIVED_CL = + 13, ///< Chromaticity-derived constant luminance system + OBSCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp + OBSCOL_SPC_NB ///< Not part of ABI +}; diff --git a/plugins/obs-outputs/utils.h b/plugins/obs-outputs/utils.h new file mode 100644 index 00000000000000..989977508214f1 --- /dev/null +++ b/plugins/obs-outputs/utils.h @@ -0,0 +1,72 @@ +#pragma once + +#if defined(__GNUC__) || defined(__clang__) +static inline uint32_t clz32(unsigned long val) +{ + return __builtin_clz(val); +} + +static inline uint32_t ctz32(unsigned long val) +{ + return __builtin_ctz(val); +} +#elif defined(_MSC_VER) && _MSC_VER >= 1400 +static inline uint32_t clz32(unsigned long val) +{ + /* __lzcnt() / _lzcnt_u32() do not work correctly on older Intel CPUs, + * so use BSR instead for better compatibility. */ + uint32_t zeros = 0; + _BitScanReverse(&zeros, val); + return 31 - zeros; +} + +static inline uint32_t ctz32(unsigned long val) +{ + return _tzcnt_u32(val); +} +#else +static uint32_t popcnt(uint32_t x) +{ + x -= ((x >> 1) & 0x55555555); + x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); + x = (((x >> 4) + x) & 0x0f0f0f0f); + x += (x >> 8); + x += (x >> 16); + return x & 0x0000003f; +} + +static uint32_t clz32(uint32_t x) +{ + x |= (x >> 1); + x |= (x >> 2); + x |= (x >> 4); + x |= (x >> 8); + x |= (x >> 16); + return 32 - popcnt(x); +} + +static uint32_t ctz32(uint32_t x) +{ + return popcnt((x & -x) - 1); +} +#endif + +static inline uint32_t min_u32(uint32_t a, uint32_t b) +{ + return (a < b) ? a : b; +} + +static inline uint16_t min_u16(uint16_t a, uint16_t b) +{ + return (a < b) ? a : b; +} + +static inline int32_t min_i32(int32_t a, int32_t b) +{ + return (a < b) ? a : b; +} + +static inline uint8_t max_u8(uint8_t a, uint8_t b) +{ + return (a > b) ? a : b; +} From 7dbc829c1598fd36a344554da98ea42083c2053b Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Sat, 25 Mar 2023 11:51:42 +0100 Subject: [PATCH 0486/2225] libobs,UI: Add output failure code for HDR being unsupported --- UI/data/locale/en-US.ini | 1 + UI/window-basic-main.cpp | 4 ++++ libobs/obs-defs.h | 1 + 3 files changed, 6 insertions(+) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 6ef89a283b56fe..9b8b40ea2dd9e1 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -402,6 +402,7 @@ Output.ConnectFail.Title="Failed to connect" Output.ConnectFail.BadPath="Invalid Path or Connection URL. Please check your settings to confirm that they are valid." Output.ConnectFail.ConnectFailed="Failed to connect to server" Output.ConnectFail.InvalidStream="Could not access the specified channel or stream key, please double-check your stream key. If it is correct, there may be a problem connecting to the server." +Output.ConnectFail.HdrDisabled="HDR output is currently disabled for this output." Output.ConnectFail.Error="An unexpected error occurred when trying to connect to the server. More information in the log file." Output.ConnectFail.Disconnected="Disconnected from server." diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index d7ae3e94fbedd0..d178d751683076 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -7282,6 +7282,10 @@ void OBSBasic::StreamingStop(int code, QString last_error) encode_error = true; break; + case OBS_OUTPUT_HDR_DISABLED: + errorDescription = Str("Output.ConnectFail.HdrDisabled"); + break; + default: case OBS_OUTPUT_ERROR: use_last_error = true; diff --git a/libobs/obs-defs.h b/libobs/obs-defs.h index b3e224d42c45f0..141b03fa115f60 100644 --- a/libobs/obs-defs.h +++ b/libobs/obs-defs.h @@ -42,6 +42,7 @@ #define OBS_OUTPUT_UNSUPPORTED -6 #define OBS_OUTPUT_NO_SPACE -7 #define OBS_OUTPUT_ENCODE_ERROR -8 +#define OBS_OUTPUT_HDR_DISABLED -9 #define OBS_VIDEO_SUCCESS 0 #define OBS_VIDEO_FAIL -1 From 27dc30b67220317ea6d419c2e361f26a93cf577e Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Sat, 25 Mar 2023 11:53:38 +0100 Subject: [PATCH 0487/2225] obs-outputs: Prevent streaming HDR AV1/HEVC over RTMP Currently unsupported by all remotes accepting enhanced RTMP. This commit may be removed at a later date. --- plugins/obs-outputs/rtmp-stream.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index 608ccac7994bcd..55908c6df235a1 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1422,6 +1422,20 @@ static void *connect_thread(void *data) stream->start_dts_offset = get_ms_time(&packet, packet.dts); } + // HDR streaming disabled for AV1 and HEVC + if (stream->video_codec != CODEC_H264) { + video_t *video = obs_get_video(); + const struct video_output_info *info = + video_output_get_info(video); + + if (info->colorspace == VIDEO_CS_2100_HLG || + info->colorspace == VIDEO_CS_2100_PQ) { + obs_output_signal_stop(stream->output, + OBS_OUTPUT_HDR_DISABLED); + return NULL; + } + } + ret = try_connect(stream); if (ret != OBS_OUTPUT_SUCCESS) { From e767cacf0a02f50fa0094a4f2f8d18df9c28c3e0 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 25 Mar 2023 11:50:23 +0100 Subject: [PATCH 0488/2225] rtmp-services: Explicitly set codecs for RTMP services --- plugins/rtmp-services/data/services.json | 413 ++++++++++++++++++----- 1 file changed, 337 insertions(+), 76 deletions(-) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index 7615ede461fc91..b10012d951a37b 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -197,7 +197,10 @@ "max video bitrate": 6000, "max audio bitrate": 320, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "YouTube - HLS", @@ -235,6 +238,9 @@ "YouTube - RTMP", "YouTube - RTMPS (Beta)" ], + "supported video codecs": [ + "h264" + ], "servers": [ { "name": "Primary YouTube ingest server", @@ -291,7 +297,10 @@ "max audio bitrate": 160, "bframes": 2, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Lovecast", @@ -311,7 +320,10 @@ "1280x720" ], "max fps": 30 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Luzento.com - RTMP", @@ -332,7 +344,10 @@ "max audio bitrate": 256, "bframes": 2, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "VIMM", @@ -351,7 +366,10 @@ "max video bitrate": 8000, "max audio bitrate": 320, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Web.TV", @@ -366,7 +384,10 @@ "profile": "main", "max video bitrate": 3500, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "GoodGame.ru", @@ -375,6 +396,9 @@ "name": "Моscow", "url": "rtmp://msk.goodgame.ru:1940/live" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -385,6 +409,9 @@ "name": "Moscow", "url": "rtmp://push.youstreamer.com/in/" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -427,7 +454,10 @@ "keyint": 2, "max video bitrate": 15000, "max audio bitrate": 320 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Breakers.TV", @@ -469,7 +499,10 @@ "keyint": 2, "max video bitrate": 15000, "max audio bitrate": 320 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Facebook Live", @@ -535,7 +568,10 @@ "max fps": 60, "max video bitrate": 9000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Restream.io", @@ -633,7 +669,10 @@ ], "recommended": { "keyint": 2 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Castr.io", @@ -725,7 +764,10 @@ ], "recommended": { "keyint": 2 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Boomstream", @@ -734,6 +776,9 @@ "name": "Default", "url": "rtmp://live.boomstream.com/live" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -746,7 +791,10 @@ ], "recommended": { "max video bitrate": 3500 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "AfreecaTV", @@ -785,7 +833,10 @@ "profile": "main", "max video bitrate": 8000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "CAM4", @@ -800,7 +851,10 @@ "profile": "baseline", "max video bitrate": 3000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "ePlay", @@ -815,7 +869,10 @@ "profile": "main", "max video bitrate": 7500, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Picarto", @@ -849,7 +906,10 @@ "keyint": 2, "profile": "main", "max video bitrate": 3500 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Livestream", @@ -858,6 +918,9 @@ "name": "Primary", "url": "rtmp://rtmpin.livestreamingest.com/rtmpin" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -872,7 +935,10 @@ "keyint": 2, "max video bitrate": 8000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Stripchat", @@ -889,7 +955,10 @@ "max video bitrate": 6000, "max audio bitrate": 128, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "CamSoda", @@ -926,7 +995,10 @@ "max video bitrate": 6000, "max audio bitrate": 160, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Chaturbate", @@ -1000,7 +1072,10 @@ "keyint": 2, "max video bitrate": 50000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "WpStream", @@ -1035,7 +1110,10 @@ "recommended": { "keyint": 2, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Twitter", @@ -1099,7 +1177,10 @@ "max video bitrate": 12000, "max audio bitrate": 128, "max fps": 60 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Switchboard Live", @@ -1119,7 +1200,10 @@ "recommended": { "keyint": 2, "profile": "high" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Looch", @@ -1135,7 +1219,10 @@ "profile": "main", "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Eventials", @@ -1150,7 +1237,10 @@ "profile": "baseline", "max video bitrate": 900, "max audio bitrate": 96 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "EventLive.pro", @@ -1169,7 +1259,10 @@ "1280x720" ], "max fps": 30 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Lahzenegar - StreamG | لحظه‌نگار - استریمجی", @@ -1188,7 +1281,10 @@ "profile": "main", "max video bitrate": 4000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "MyLive", @@ -1203,7 +1299,10 @@ "profile": "main", "max video bitrate": 7000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Trovo", @@ -1222,7 +1321,10 @@ "max video bitrate": 9000, "max audio bitrate": 160, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Mixcloud", @@ -1243,7 +1345,10 @@ ], "max fps": 30, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "SermonAudio Cloud", @@ -1259,7 +1364,10 @@ "recommended": { "max video bitrate": 2000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Vimeo", @@ -1268,6 +1376,9 @@ "name": "Default", "url": "rtmp://rtmp.cloud.vimeo.com/live" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -1283,7 +1394,10 @@ "max video bitrate": 6000, "max audio bitrate": 320, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "KakaoTV", @@ -1296,7 +1410,10 @@ "recommended": { "max video bitrate": 8000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Piczel.tv", @@ -1311,7 +1428,10 @@ "max video bitrate": 2500, "max audio bitrate": 256, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "STAGE TEN", @@ -1326,7 +1446,10 @@ "profile": "baseline", "max video bitrate": 4000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "DLive", @@ -1340,7 +1463,10 @@ "keyint": 2, "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Lightcast.com", @@ -1378,7 +1504,10 @@ "keyint": 2, "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Bongacams", @@ -1406,7 +1535,10 @@ "max audio bitrate": 192, "bframes": 0, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Chathostess", @@ -1420,7 +1552,10 @@ "keyint": 2, "max video bitrate": 3600, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "OnlyFans.com", @@ -1441,7 +1576,10 @@ "max audio bitrate": 192, "bframes": 0, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "YouNow", @@ -1476,7 +1614,10 @@ "profile": "high", "max video bitrate": 7000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Konduit.live", @@ -1489,7 +1630,10 @@ "recommended": { "keyint": 2, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "LOCO", @@ -1501,7 +1645,10 @@ ], "recommended": { "keyint": 2 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "niconico, premium member (ニコニコ生放送 プレミアム会員)", @@ -1517,7 +1664,10 @@ "max audio bitrate": 192, "max video bitrate": 5808, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "niconico, free member (ニコニコ生放送 一般会員)", @@ -1533,7 +1683,10 @@ "max audio bitrate": 96, "max video bitrate": 904, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "WASD.TV", @@ -1559,7 +1712,10 @@ "keyint": 2, "max video bitrate": 10000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Nimo TV", @@ -1581,7 +1737,10 @@ "keyint": 2, "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "XLoveCam.com", @@ -1621,7 +1780,10 @@ ], "recommended": { "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "AngelThump", @@ -1668,7 +1830,10 @@ "profile": "high", "max video bitrate": 3500, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "api.video", @@ -1682,7 +1847,10 @@ "keyint": 2, "max video bitrate": 20000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "SHOWROOM", @@ -1699,7 +1867,10 @@ "max video bitrate": 1500, "max audio bitrate": 160, "x264opts": "tune=zerolatency" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Mux", @@ -1717,7 +1888,10 @@ "keyint": 2, "max video bitrate": 5000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Viloud", @@ -1731,7 +1905,10 @@ "keyint": 2, "max video bitrate": 5000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "MyFreeCams", @@ -1776,7 +1953,10 @@ "max video bitrate": 10000, "max audio bitrate": 192, "x264opts": "tune=zerolatency scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "PolyStreamer.com", @@ -1816,7 +1996,10 @@ ], "recommended": { "keyint": 2 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Glimesh", @@ -1932,7 +2115,10 @@ "max video bitrate": 6000, "bframes": 0, "x264opts": "scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "OPENREC.tv - Premium member (プレミアム会員)", @@ -1947,7 +2133,10 @@ "keyint": 2, "max video bitrate": 5000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "nanoStream Cloud / bintu", @@ -2018,7 +2207,10 @@ "max video bitrate": 5000, "max audio bitrate": 192, "x264opts": "tune=zerolatency b-pyramid=0 scenecut=0" - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Dacast", @@ -2034,7 +2226,10 @@ "profile": "high", "max video bitrate": 7000, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Bilibili Live - RTMP | 哔哩哔哩直播 - RTMP", @@ -2048,6 +2243,9 @@ "name": "Default | 默认", "url": "rtmp://live-push.bilivideo.com/live-bvc/" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -2071,7 +2269,10 @@ "keyint": 2, "max video bitrate": 20000, "max fps": 60 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "BoxCast", @@ -2081,6 +2282,9 @@ "name": "BoxCast", "url": "rtmp://rtmp.boxcast.com/live" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -2090,6 +2294,9 @@ "name": "Default", "url": "rtmp://rtmp.disciplemedia.com/b-fme" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -2108,7 +2315,10 @@ "keyint": 2, "max video bitrate": 32000, "max audio bitrate": 256 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Kuaishou Live", @@ -2122,6 +2332,9 @@ "name": "North America", "url": "rtmp://tx.push.yximgs.com/live/" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -2136,7 +2349,10 @@ "keyint": 2, "max video bitrate": 5000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Autistici.org Live", @@ -2150,7 +2366,10 @@ "keyint": 2, "max video bitrate": 2500, "max audio bitrate": 128 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "PhoneLiveStreaming", @@ -2165,7 +2384,10 @@ "keyint": 2, "max video bitrate": 128, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "ManyVids", @@ -2195,7 +2417,10 @@ "keyint": 2, "max video bitrate": 4000, "max fps": 30 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Fantasy.Club", @@ -2259,7 +2484,10 @@ "max fps": 60, "max video bitrate": 7200, "max audio bitrate": 196 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Sympla", @@ -2273,7 +2501,10 @@ "keyint": 2, "max video bitrate": 5000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Mildom", @@ -2289,7 +2520,10 @@ "keyint": 2, "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Nonolive", @@ -2313,7 +2547,10 @@ "keyint": 2, "max video bitrate": 6000, "max audio bitrate": 160 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "StreamVi", @@ -2335,6 +2572,9 @@ "name": "Russia: Novosibirsk", "url": "rtmp://live-novosib.streamvi.ru/live" } + ], + "supported video codecs": [ + "h264" ] }, { @@ -2405,7 +2645,10 @@ "recommended": { "keyint": 2, "max video bitrate": 16000 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Vindral", @@ -2426,7 +2669,10 @@ "bframes": 0, "max video bitrate": 20000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Whowatch (ふわっち)", @@ -2442,7 +2688,10 @@ "keyint": 2, "max video bitrate": 1800, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "IRLToolkit", @@ -2477,7 +2726,10 @@ "keyint": 2, "bframes": 2, "max video bitrate": 20000 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Bitmovin", @@ -2491,7 +2743,10 @@ ], "recommended": { "keyint": 2 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Live Streamer Cafe", @@ -2506,7 +2761,10 @@ "recommended": { "keyint": 2, "max video bitrate": 6000 - } + }, + "supported video codecs": [ + "h264" + ] }, { "name": "Enchant.events", @@ -2522,7 +2780,10 @@ "profile": "high", "max video bitrate": 9000, "max audio bitrate": 192 - } + }, + "supported video codecs": [ + "h264" + ] } ] } From 4b038c9a402b63c87056ea3c075c252be2be4a01 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 25 Mar 2023 11:58:32 +0100 Subject: [PATCH 0489/2225] rtmp-services: Add AV1 to services schema --- plugins/rtmp-services/data/schema/service-schema-v4.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/rtmp-services/data/schema/service-schema-v4.json b/plugins/rtmp-services/data/schema/service-schema-v4.json index 5d27f3bef3dabe..0f2ee1097a7c71 100644 --- a/plugins/rtmp-services/data/schema/service-schema-v4.json +++ b/plugins/rtmp-services/data/schema/service-schema-v4.json @@ -46,7 +46,8 @@ "minLength": 1, "enum": [ "h264", - "hevc" + "hevc", + "av1" ] } }, From d68a75c60c698162985c18ecc8d9e9a3f986a4a2 Mon Sep 17 00:00:00 2001 From: Yuriy Chumak Date: Sat, 25 Mar 2023 11:58:43 +0100 Subject: [PATCH 0490/2225] rtmp-services: Add AV1 and HEVC to YouTube RTMPS service --- plugins/rtmp-services/data/package.json | 4 ++-- plugins/rtmp-services/data/services.json | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 45d0c1fe310681..6d75c945a12637 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 222, + "version": 223, "files": [ { "name": "services.json", - "version": 222 + "version": 223 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index b10012d951a37b..fcea31729f967e 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -239,7 +239,9 @@ "YouTube - RTMPS (Beta)" ], "supported video codecs": [ - "h264" + "h264", + "hevc", + "av1" ], "servers": [ { From 90f46a9d4dda4842325e513f5b3bcdc395a37803 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sun, 26 Mar 2023 16:03:30 +0200 Subject: [PATCH 0491/2225] libobs: Add missing VIDEO_FORMAT_V210 handling in switch statements Format was added to enum but not handled in all switch statement handling the enum. --- libobs/media-io/video-frame.c | 1 + libobs/obs-video.c | 1 + 2 files changed, 2 insertions(+) diff --git a/libobs/media-io/video-frame.c b/libobs/media-io/video-frame.c index 0b0168be6ab893..5615468efdc67b 100644 --- a/libobs/media-io/video-frame.c +++ b/libobs/media-io/video-frame.c @@ -371,6 +371,7 @@ void video_frame_copy(struct video_frame *dst, const struct video_frame *src, case VIDEO_FORMAT_BGRX: case VIDEO_FORMAT_BGR3: case VIDEO_FORMAT_AYUV: + case VIDEO_FORMAT_V210: memcpy(dst->data[0], src->data[0], src->linesize[0] * cy); break; diff --git a/libobs/obs-video.c b/libobs/obs-video.c index 4b641ff9533f41..60acaaf6f65361 100644 --- a/libobs/obs-video.c +++ b/libobs/obs-video.c @@ -779,6 +779,7 @@ static void set_gpu_converted_data(struct video_frame *output, case VIDEO_FORMAT_YUVA: case VIDEO_FORMAT_YA2L: case VIDEO_FORMAT_AYUV: + case VIDEO_FORMAT_V210: /* unimplemented */ ; } From c5d32881db750e0701b608664980c4df6981a127 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Sun, 26 Mar 2023 17:57:05 +0900 Subject: [PATCH 0492/2225] UI: Ignore the leap seconds in tooltip of time format The range was 00-61 but 61 is confusing. Let's ignore the leap seconds and set 59 as the maximum. --- UI/data/locale/en-US.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 6ef89a283b56fe..409f8cf14ace96 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -1088,7 +1088,7 @@ FilenameFormatting.TT.MM="Month as a decimal number (01-12)" FilenameFormatting.TT.DD="Day of the month, zero-padded (01-31)" FilenameFormatting.TT.hh="Hour in 24h format (00-23)" FilenameFormatting.TT.mm="Minute (00-59)" -FilenameFormatting.TT.ss="Second (00-61)" +FilenameFormatting.TT.ss="Second (00-59)" FilenameFormatting.TT.Percent="A % sign" FilenameFormatting.TT.a="Abbreviated weekday name" FilenameFormatting.TT.A="Full weekday name" @@ -1101,7 +1101,7 @@ FilenameFormatting.TT.m="Month as a decimal number (01-12)" FilenameFormatting.TT.M="Minute (00-59)" FilenameFormatting.TT.p="AM or PM designation" FilenameFormatting.TT.s="Time in seconds since UNIX epoch" -FilenameFormatting.TT.S="Second (00-61)" +FilenameFormatting.TT.S="Second (00-59)" FilenameFormatting.TT.y="Year, last two digits (00-99)" FilenameFormatting.TT.Y="Year" FilenameFormatting.TT.z="ISO 8601 offset from UTC in timezone" From 4ef4fb59d93d67b950828f19667df7c15b1b4f10 Mon Sep 17 00:00:00 2001 From: Vainock Date: Sun, 26 Mar 2023 17:16:43 +0200 Subject: [PATCH 0493/2225] UI: Rename blending mode "Additive" to "Add" in UI --- UI/data/locale/en-US.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 44afe8d2a10257..3e2daf884320cc 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -535,7 +535,7 @@ BlendingMethod.SrgbOff="SRGB Off" # blending modes BlendingMode="Blending Mode" BlendingMode.Normal="Normal" -BlendingMode.Additive="Additive" +BlendingMode.Additive="Add" BlendingMode.Subtract="Subtract" BlendingMode.Screen="Screen" BlendingMode.Multiply="Multiply" From 1cd802810bc6037792bc2d98460e428587739f21 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 21 Mar 2023 17:44:21 -0700 Subject: [PATCH 0494/2225] rtmp-services: Add IRLToolkit Sydney ingest --- plugins/rtmp-services/data/services.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index fcea31729f967e..d445363090fbfc 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2722,6 +2722,10 @@ { "name": "Tokyo, JP", "url": "rtmp://stream.tyo.irl.run/ingest" + }, + { + "name": "Sydney, AU", + "url": "rtmp://stream.syd.irl.run/ingest" } ], "recommended": { From 90e8e81e99c625eaa0c7c27544c1dd508a9c89a6 Mon Sep 17 00:00:00 2001 From: Jeremy Woertink Date: Mon, 6 Mar 2023 10:36:56 -0800 Subject: [PATCH 0495/2225] rtmp-services: Add Joystick.TV Adding JoystickTV as an official service Closes obsproject/obs-studio#8414 --- plugins/rtmp-services/data/package.json | 4 ++-- plugins/rtmp-services/data/services.json | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/plugins/rtmp-services/data/package.json b/plugins/rtmp-services/data/package.json index 6d75c945a12637..3bfcc9fbad0194 100644 --- a/plugins/rtmp-services/data/package.json +++ b/plugins/rtmp-services/data/package.json @@ -1,11 +1,11 @@ { "$schema": "schema/package-schema.json", "url": "https://obsproject.com/obs2_update/rtmp-services/v4", - "version": 223, + "version": 224, "files": [ { "name": "services.json", - "version": 223 + "version": 224 } ] } diff --git a/plugins/rtmp-services/data/services.json b/plugins/rtmp-services/data/services.json index d445363090fbfc..3101ce80dc40a1 100644 --- a/plugins/rtmp-services/data/services.json +++ b/plugins/rtmp-services/data/services.json @@ -2790,6 +2790,28 @@ "supported video codecs": [ "h264" ] + }, + { + "name": "Joystick.TV", + "more_info_link": "https://support.joystick.tv/support/creator-support/setting-up-your-stream/", + "stream_key_link": "https://joystick.tv/stream-settings", + "servers": [ + { + "name": "RTMP", + "url": "rtmp://live.joystick.tv/live/" + } + ], + "recommended": { + "keyint": 2, + "max video bitrate": 7500, + "max audio bitrate": 192, + "profile": "main", + "bframes": 0, + "x264opts": "tune=zerolatency" + }, + "supported video codecs": [ + "h264" + ] } ] } From ad859a3f66daac0d30eebcc9b07b0c2004fb6040 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sun, 12 Mar 2023 18:03:20 +0100 Subject: [PATCH 0496/2225] flatpak: Enable obs-libfdk Freedesktop runtime provides it. --- CI/flatpak/com.obsproject.Studio.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CI/flatpak/com.obsproject.Studio.json b/CI/flatpak/com.obsproject.Studio.json index 33389bf4be7bce..05b63e7ee2eec0 100644 --- a/CI/flatpak/com.obsproject.Studio.json +++ b/CI/flatpak/com.obsproject.Studio.json @@ -505,7 +505,8 @@ "-DENABLE_JACK=ON", "-DENABLE_RTMPS=ON", "-DENABLE_VLC=OFF", - "-DENABLE_AJA=ON" + "-DENABLE_AJA=ON", + "-DENABLE_LIBFDK=ON" ], "secret-opts": [ "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID", From ae6e9c875bc99b79a8ac536ecf8211bc31503d18 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 23 Mar 2023 15:11:09 +0100 Subject: [PATCH 0497/2225] cmake: Add OBS CMake build framework 3.0 OBS CMake build framework 3.0 is a minor overhaul of version 2.0. Due to close proximity of the 2.0 rework, the amount of actual changes to project files are minimal and mostly concern application generation. This commit contains the bootstrap elements only and requires OS-specific implementations to be functional. --- cmake/Modules/ObsDefaults_Linux.cmake | 20 +- cmake/Modules/ObsDefaults_Windows.cmake | 27 +- cmake/Modules/ObsHelpers.cmake | 119 +++--- cmake/common/.cmake-format.json | 41 ++ cmake/common/bootstrap.cmake | 51 +++ cmake/common/buildnumber.cmake | 19 + cmake/common/ccache.cmake | 20 + cmake/common/compiler_common.cmake | 1 + cmake/common/cpackconfig_common.cmake | 10 + cmake/common/helpers_common.cmake | 521 ++++++++++++++++++++++++ cmake/common/osconfig.cmake | 15 + cmake/common/versionconfig.cmake | 90 ++++ cmake/finders/.cmake-format.json | 41 ++ cmake/finders/FindCEF.cmake | 232 +++++++++++ cmake/finders/FindFFmpeg.cmake | 345 ++++++++++++++++ cmake/finders/FindLibAJANTV2.cmake | 160 ++++++++ cmake/finders/FindLibVLC.cmake | 111 +++++ cmake/finders/FindLibrist.cmake | 142 +++++++ cmake/finders/FindLibrnnoise.cmake | 137 +++++++ cmake/finders/FindLibspeexdsp.cmake | 137 +++++++ cmake/finders/FindLibsrt.cmake | 139 +++++++ cmake/finders/FindLibx264.cmake | 182 +++++++++ cmake/finders/FindLuajit.cmake | 139 +++++++ cmake/finders/FindMbedTLS.cmake | 215 ++++++++++ cmake/finders/Findjansson.cmake | 140 +++++++ 25 files changed, 2953 insertions(+), 101 deletions(-) create mode 100644 cmake/common/.cmake-format.json create mode 100644 cmake/common/bootstrap.cmake create mode 100644 cmake/common/buildnumber.cmake create mode 100644 cmake/common/ccache.cmake create mode 100644 cmake/common/compiler_common.cmake create mode 100644 cmake/common/cpackconfig_common.cmake create mode 100644 cmake/common/helpers_common.cmake create mode 100644 cmake/common/osconfig.cmake create mode 100644 cmake/common/versionconfig.cmake create mode 100644 cmake/finders/.cmake-format.json create mode 100644 cmake/finders/FindCEF.cmake create mode 100644 cmake/finders/FindFFmpeg.cmake create mode 100644 cmake/finders/FindLibAJANTV2.cmake create mode 100644 cmake/finders/FindLibVLC.cmake create mode 100644 cmake/finders/FindLibrist.cmake create mode 100644 cmake/finders/FindLibrnnoise.cmake create mode 100644 cmake/finders/FindLibspeexdsp.cmake create mode 100644 cmake/finders/FindLibsrt.cmake create mode 100644 cmake/finders/FindLibx264.cmake create mode 100644 cmake/finders/FindLuajit.cmake create mode 100644 cmake/finders/FindMbedTLS.cmake create mode 100644 cmake/finders/Findjansson.cmake diff --git a/cmake/Modules/ObsDefaults_Linux.cmake b/cmake/Modules/ObsDefaults_Linux.cmake index 0442367d8a971e..d1e58a0838c576 100644 --- a/cmake/Modules/ObsDefaults_Linux.cmake +++ b/cmake/Modules/ObsDefaults_Linux.cmake @@ -68,23 +68,22 @@ macro(setup_obs_project) set(OBS_INCLUDE_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/obs") set(OBS_LIBRARY_DESTINATION "${CMAKE_INSTALL_LIBDIR}") set(OBS_PLUGIN_DESTINATION "${OBS_LIBRARY_DESTINATION}/obs-plugins") - set(OBS_SCRIPT_PLUGIN_DESTINATION - "${OBS_LIBRARY_DESTINATION}/obs-scripting") + set(OBS_PLUGIN_PATH "${OBS_PLUGIN_DESTINATION}") + set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_LIBRARY_DESTINATION}/obs-scripting") set(OBS_DATA_DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/obs") set(OBS_CMAKE_DESTINATION "${OBS_LIBRARY_DESTINATION}/cmake") set(OBS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/") set(OBS_DATA_PATH "${OBS_DATA_DESTINATION}") - set(OBS_SCRIPT_PLUGIN_PATH - "${CMAKE_INSTALL_PREFIX}/${OBS_SCRIPT_PLUGIN_DESTINATION}") - set(CMAKE_INSTALL_RPATH - "${CMAKE_INSTALL_PREFIX}/${OBS_LIBRARY_DESTINATION}") + set(OBS_SCRIPT_PLUGIN_PATH "${CMAKE_INSTALL_PREFIX}/${OBS_SCRIPT_PLUGIN_DESTINATION}") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OBS_LIBRARY_DESTINATION}") else() set(OBS_EXECUTABLE_DESTINATION "bin/${_ARCH_SUFFIX}bit") set(OBS_INCLUDE_DESTINATION "include") set(OBS_LIBRARY_DESTINATION "bin/${_ARCH_SUFFIX}bit") set(OBS_PLUGIN_DESTINATION "obs-plugins/${_ARCH_SUFFIX}bit") + set(OBS_PLUGIN_PATH "../../${OBS_PLUGIN_DESTINATION}") set(OBS_SCRIPT_PLUGIN_DESTINATION "data/obs-scripting/${_ARCH_SUFFIX}bit") set(OBS_DATA_DESTINATION "data") set(OBS_CMAKE_DESTINATION "cmake") @@ -93,8 +92,7 @@ macro(setup_obs_project) set(OBS_DATA_PATH "../../${OBS_DATA_DESTINATION}") set(OBS_SCRIPT_PLUGIN_PATH "../../${OBS_SCRIPT_PLUGIN_DESTINATION}") - set(CMAKE_INSTALL_RPATH "$ORIGIN/" - "$ORIGIN/../../${OBS_LIBRARY_DESTINATION}") + set(CMAKE_INSTALL_RPATH "$ORIGIN/" "$ORIGIN/../../${OBS_LIBRARY_DESTINATION}") endif() if(BUILD_FOR_PPA) @@ -111,8 +109,7 @@ macro(setup_obs_project) set(CPACK_PACKAGE_VENDOR "${OBS_WEBSITE}") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${OBS_COMPANY_NAME}") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${OBS_COMMENTS}") - set(CPACK_RESOURCE_FILE_LICENSE - "${CMAKE_SOURCE_DIR}/UI/data/license/gplv2.txt") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/UI/data/license/gplv2.txt") set(CPACK_PACKAGE_VERSION "${OBS_VERSION_CANONICAL}-${OBS_BUILD_NUMBER}") set(CPACK_PACKAGE_EXECUTABLES "obs") @@ -122,8 +119,7 @@ macro(setup_obs_project) set(CPACK_SET_DESTDIR ON) set(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON) elseif(OS_FREEBSD) - option(ENABLE_CPACK_GENERATOR - "Enable FreeBSD CPack generator (experimental)" OFF) + option(ENABLE_CPACK_GENERATOR "Enable FreeBSD CPack generator (experimental)" OFF) if(ENABLE_CPACK_GENERATOR) set(CPACK_GENERATOR "FreeBSD") diff --git a/cmake/Modules/ObsDefaults_Windows.cmake b/cmake/Modules/ObsDefaults_Windows.cmake index 67139c535dda56..ce9f27aa287877 100644 --- a/cmake/Modules/ObsDefaults_Windows.cmake +++ b/cmake/Modules/ObsDefaults_Windows.cmake @@ -39,6 +39,7 @@ macro(setup_obs_project) set(OBS_LIBRARY_EXPORT_DESTINATION "bin/${_ARCH_SUFFIX}bit") set(OBS_PLUGIN_DESTINATION "obs-plugins/${_ARCH_SUFFIX}bit") + set(OBS_PLUGIN_PATH "../../${OBS_PLUGIN_DESTINATION}") set(OBS_PLUGIN32_DESTINATION "obs-plugins/32bit") set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit") @@ -48,8 +49,7 @@ macro(setup_obs_project) set(OBS_DATA_PATH "../../${OBS_DATA_DESTINATION}") set(OBS_INSTALL_PREFIX "") - set(OBS_SCRIPT_PLUGIN_DESTINATION - "${OBS_DATA_DESTINATION}/obs-scripting/${_ARCH_SUFFIX}bit") + set(OBS_SCRIPT_PLUGIN_DESTINATION "${OBS_DATA_DESTINATION}/obs-scripting/${_ARCH_SUFFIX}bit") set(OBS_SCRIPT_PLUGIN_PATH "../../${OBS_SCRIPT_PLUGIN_DESTINATION}") string(REPLACE "-" ";" UI_VERSION_SPLIT ${OBS_VERSION}) @@ -62,10 +62,7 @@ macro(setup_obs_project) if(INSTALLER_RUN AND NOT DEFINED ENV{OBS_InstallerTempDir} AND NOT DEFINED ENV{obsInstallerTempDir}) - message( - FATAL_ERROR - "Environment variable obsInstallerTempDir is needed for multiarch installer generation" - ) + message(FATAL_ERROR "Environment variable obsInstallerTempDir is needed for multiarch installer generation") endif() if(DEFINED ENV{OBS_DepsPath${_ARCH_SUFFIX}}) @@ -89,19 +86,16 @@ macro(setup_obs_project) endif() if(DEFINED DepsPath${_ARCH_SUFFIX}) - list(APPEND CMAKE_PREFIX_PATH "${DepsPath${_ARCH_SUFFIX}}" - "${DepsPath${_ARCH_SUFFIX}}/bin") + list(APPEND CMAKE_PREFIX_PATH "${DepsPath${_ARCH_SUFFIX}}" "${DepsPath${_ARCH_SUFFIX}}/bin") elseif(DEFINED DepsPath) list(APPEND CMAKE_PREFIX_PATH "${DepsPath}" "${DepsPath}/bin") elseif(NOT DEFINED CMAKE_PREFIX_PATH) message( - WARNING - "No CMAKE_PREFIX_PATH set: OBS requires pre-built dependencies for building on Windows." - "Please download the appropriate obs-deps package for your architecture and set CMAKE_PREFIX_PATH " - "to the base directory and 'bin' directory inside it:\n" - "CMAKE_PREFIX_PATH=\"\"\n" - "Download pre-built OBS dependencies at https://github.com/obsproject/obs-deps/releases\n" - ) + WARNING "No CMAKE_PREFIX_PATH set: OBS requires pre-built dependencies for building on Windows." + "Please download the appropriate obs-deps package for your architecture and set CMAKE_PREFIX_PATH " + "to the base directory and 'bin' directory inside it:\n" + "CMAKE_PREFIX_PATH=\"\"\n" + "Download pre-built OBS dependencies at https://github.com/obsproject/obs-deps/releases\n") endif() if(DEFINED QTDIR${_ARCH_SUFFIX}) @@ -146,8 +140,7 @@ macro(setup_obs_project) set(ENV{OBS_AdditionalInstallFiles} "${_ADDITIONAL_FILES}") unset(_ADDITIONAL_FILES) - list(APPEND CMAKE_INCLUDE_PATH - "$ENV{OBS_AdditionalInstallFiles}/include${_ARCH_SUFFIX}" + list(APPEND CMAKE_INCLUDE_PATH "$ENV{OBS_AdditionalInstallFiles}/include${_ARCH_SUFFIX}" "$ENV{OBS_AdditionalInstallFiles}/include") list( diff --git a/cmake/Modules/ObsHelpers.cmake b/cmake/Modules/ObsHelpers.cmake index a5df070f43eaff..5dc75b8efa322a 100644 --- a/cmake/Modules/ObsHelpers.cmake +++ b/cmake/Modules/ObsHelpers.cmake @@ -18,22 +18,20 @@ endif() # Create global property to hold list of activated modules set_property(GLOBAL PROPERTY OBS_MODULE_LIST "") -# ############################################################################## +# ###################################################################################################################### # GLOBAL HELPER FUNCTIONS # -# ############################################################################## +# ###################################################################################################################### # Helper function to set up runtime or library targets function(setup_binary_target target) # Set up installation paths for program install install( TARGETS ${target} - RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION} - COMPONENT ${target}_Runtime + RUNTIME DESTINATION ${OBS_EXECUTABLE_DESTINATION} COMPONENT ${target}_Runtime LIBRARY DESTINATION ${OBS_LIBRARY_DESTINATION} COMPONENT ${target}_Runtime NAMELINK_COMPONENT ${target}_Development - ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION} - COMPONENT ${target}_Development + ARCHIVE DESTINATION ${OBS_LIBRARY_DESTINATION} COMPONENT ${target}_Development PUBLIC_HEADER DESTINATION ${OBS_INCLUDE_DESTINATION} COMPONENT ${target}_Development @@ -56,10 +54,8 @@ function(setup_binary_target target) add_custom_command( TARGET ${target} POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. - --config $ --prefix ${OBS_OUTPUT_DIR}/$ --component - obs_${target} > "$,nul,/dev/null>" + COMMAND "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_${target} > "$,nul,/dev/null>" COMMENT "Installing OBS rundir" VERBATIM) @@ -90,10 +86,8 @@ function(setup_plugin_target target) add_custom_command( TARGET ${target} POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. - --config $ --prefix ${OBS_OUTPUT_DIR}/$ --component - obs_${target} > "$,nul,/dev/null>" + COMMAND "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_${target} > "$,nul,/dev/null>" COMMENT "Installing ${target} to OBS rundir" VERBATIM) @@ -130,10 +124,8 @@ function(setup_script_plugin_target target) add_custom_command( TARGET ${target} POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. - --config $ --prefix ${OBS_OUTPUT_DIR}/$ --component - obs_${target} > "$,nul,/dev/null>" + COMMAND "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_${target} > "$,nul,/dev/null>" COMMENT "Installing ${target} to OBS rundir" VERBATIM) @@ -182,8 +174,7 @@ function(setup_obs_app target) add_dependencies(${target} ${OBS_MODULE_LIST}) endif() - get_property(OBS_SCRIPTING_MODULE_LIST GLOBAL - PROPERTY OBS_SCRIPTING_MODULE_LIST) + get_property(OBS_SCRIPTING_MODULE_LIST GLOBAL PROPERTY OBS_SCRIPTING_MODULE_LIST) list(LENGTH OBS_SCRIPTING_MODULE_LIST _LEN) if(_LEN GREATER 0) add_dependencies(${target} ${OBS_SCRIPTING_MODULE_LIST}) @@ -200,10 +191,8 @@ function(setup_obs_app target) add_custom_command( TARGET ${target} POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. - --config $ --prefix ${OBS_OUTPUT_DIR}/$ --component - obs_rundir > "$,nul,/dev/null>" + COMMAND "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_rundir > "$,nul,/dev/null>" COMMENT "Installing OBS rundir" VERBATIM) endfunction() @@ -233,8 +222,8 @@ function(setup_target_browser target) EXCLUDE_FROM_ALL) endfunction() -# Helper function to export target to build and install tree. Allows usage of -# `find_package(libobs)` by other build trees +# Helper function to export target to build and install tree. Allows usage of `find_package(libobs)` by other build +# trees function(export_target target) set(CMAKE_EXPORT_PACKAGE_REGISTRY OFF) @@ -263,17 +252,14 @@ function(export_target target) ${_EXCLUDE}) include(GenerateExportHeader) - generate_export_header(${target} EXPORT_FILE_NAME - ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) + generate_export_header(${target} EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) - target_sources(${target} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) + target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) set(TARGETS_EXPORT_NAME "${target}Targets") include(CMakePackageConfigHelpers) configure_package_config_file( - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${target}Config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${target}Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake INSTALL_DESTINATION ${OBS_CMAKE_DESTINATION}/${target} PATH_VARS OBS_PLUGIN_DESTINATION OBS_DATA_DESTINATION) @@ -298,8 +284,7 @@ function(export_target target) ${_EXCLUDE}) install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake + FILES ${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake DESTINATION ${OBS_CMAKE_DESTINATION}/${target} COMPONENT obs_libraries ${_EXCLUDE}) @@ -311,16 +296,11 @@ function(define_graphic_modules target) string(TOUPPER ${_GRAPHICS_API} _GRAPHICS_API_u) if(TARGET OBS::libobs-${_GRAPHICS_API}) if(OS_POSIX AND NOT LINUX_PORTABLE) - target_compile_definitions( - ${target} - PRIVATE - DL_${_GRAPHICS_API_u}="$" - ) + target_compile_definitions(${target} + PRIVATE DL_${_GRAPHICS_API_u}="$") else() - target_compile_definitions( - ${target} - PRIVATE - DL_${_GRAPHICS_API_u}="$") + target_compile_definitions(${target} + PRIVATE DL_${_GRAPHICS_API_u}="$") endif() add_dependencies(${target} OBS::libobs-${_GRAPHICS_API}) else() @@ -338,8 +318,7 @@ endif() macro(find_qt) set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX) - cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}" - ${ARGN}) + cmake_parse_arguments(FIND_QT "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(QT_NO_CREATE_VERSIONLESS_TARGETS ON) find_package( Qt5 @@ -372,10 +351,7 @@ macro(find_qt) else() set(FALLBACK_QT_VERSION 6) endif() - message( - WARNING - "Qt${QT_VERSION} was not found, falling back to Qt${FALLBACK_QT_VERSION}" - ) + message(WARNING "Qt${QT_VERSION} was not found, falling back to Qt${FALLBACK_QT_VERSION}") if(TARGET Qt${FALLBACK_QT_VERSION}::Core) set(_QT_VERSION @@ -415,14 +391,11 @@ macro(find_qt) list(APPEND FIND_QT_COMPONENTS_LINUX "GuiPrivate") endif() - foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN - FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX) + foreach(_COMPONENT IN LISTS FIND_QT_COMPONENTS FIND_QT_COMPONENTS_WIN FIND_QT_COMPONENTS_MAC FIND_QT_COMPONENTS_LINUX) if(NOT TARGET Qt::${_COMPONENT} AND TARGET Qt${_QT_VERSION}::${_COMPONENT}) add_library(Qt::${_COMPONENT} INTERFACE IMPORTED) - set_target_properties( - Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES - "Qt${_QT_VERSION}::${_COMPONENT}") + set_target_properties(Qt::${_COMPONENT} PROPERTIES INTERFACE_LINK_LIBRARIES "Qt${_QT_VERSION}::${_COMPONENT}") endif() endforeach() endmacro() @@ -455,9 +428,9 @@ elseif(OS_POSIX) include(ObsHelpers_Linux) endif() -# ############################################################################## +# ###################################################################################################################### # LEGACY FALLBACKS # -# ############################################################################## +# ###################################################################################################################### # Helper function to install OBS plugin with associated resource directory function(_install_obs_plugin_with_data target source) @@ -474,16 +447,14 @@ function(_install_obs_plugin_with_data target source) install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/ - DESTINATION - ${OBS_OUTPUT_DIR}/$/${OBS_DATA_DESTINATION}/obs-plugins/${target} + DESTINATION ${OBS_OUTPUT_DIR}/$/${OBS_DATA_DESTINATION}/obs-plugins/${target} COMPONENT obs_${target} EXCLUDE_FROM_ALL) if(OS_WINDOWS AND DEFINED ENV{obsInstallerTempDir}) install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${source}/ - DESTINATION - $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/obs-plugins/${target} + DESTINATION $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/obs-plugins/${target} COMPONENT obs_${target} EXCLUDE_FROM_ALL) endif() @@ -502,8 +473,7 @@ function(_install_obs_datatarget target destination) LIBRARY DESTINATION ${OBS_DATA_DESTINATION}/${destination} COMPONENT ${target}_Runtime NAMELINK_COMPONENT ${target}_Development - RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination} - COMPONENT ${target}_Runtime) + RUNTIME DESTINATION ${OBS_DATA_DESTINATION}/${destination} COMPONENT ${target}_Runtime) install( TARGETS ${target} @@ -516,21 +486,18 @@ function(_install_obs_datatarget target destination) if(OS_WINDOWS) if(MSVC) - add_target_resource(${target} "$" - "${destination}" OPTIONAL) + add_target_resource(${target} "$" "${destination}" OPTIONAL) endif() if(DEFINED ENV{obsInstallerTempDir}) install( TARGETS ${target} RUNTIME - DESTINATION - $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$ + DESTINATION $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$ COMPONENT obs_${target} EXCLUDE_FROM_ALL LIBRARY - DESTINATION - $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$ + DESTINATION $ENV{obsInstallerTempDir}/${OBS_DATA_DESTINATION}/${destination}/$ COMPONENT obs_${target} EXCLUDE_FROM_ALL) endif() @@ -539,10 +506,18 @@ function(_install_obs_datatarget target destination) add_custom_command( TARGET ${target} POST_BUILD - COMMAND - "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. - --config $ --prefix ${OBS_OUTPUT_DIR}/$ --component - obs_${target} > "$,nul,/dev/null>" + COMMAND "${CMAKE_COMMAND}" -E env DESTDIR= "${CMAKE_COMMAND}" --install .. --config $ --prefix + ${OBS_OUTPUT_DIR}/$ --component obs_${target} > "$,nul,/dev/null>" COMMENT "Installing ${target} to OBS rundir" VERBATIM) endfunction() + +# legacy_check: Macro to check for CMake framework version and include legacy list file +macro(legacy_check) + if(OBS_CMAKE_VERSION VERSION_LESS 3.0.0) + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/legacy.cmake) + include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/legacy.cmake) + endif() + return() + endif() +endmacro() diff --git a/cmake/common/.cmake-format.json b/cmake/common/.cmake-format.json new file mode 100644 index 00000000000000..75fd03ad3a5092 --- /dev/null +++ b/cmake/common/.cmake-format.json @@ -0,0 +1,41 @@ +{ + "format": { + "line_width": 120, + "tab_size": 2, + "dangle_parens": false, + "enable_sort": true, + "autosort": true + }, + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + }, + "set_target_properties_obs": { + "pargs": 1, + "flags": [], + "kwargs": { + "PROPERTIES": { + "kwargs": { + "PREFIX": 1, + "OUTPUT_NAME": 1, + "FOLDER": 1, + "VERSION": 1, + "SOVERSION": 1, + "FRAMEWORK": 1, + "BUNDLE": 1, + "AUTOMOC": 1, + "AUTOUIC": 1, + "AUTORCC": 1, + "AUTOUIC_SEARCH_PATHS": 1 + } + } + } + } + } +} diff --git a/cmake/common/bootstrap.cmake b/cmake/common/bootstrap.cmake new file mode 100644 index 00000000000000..8d72a36db56b23 --- /dev/null +++ b/cmake/common/bootstrap.cmake @@ -0,0 +1,51 @@ +# OBS CMake bootstrap module + +# Enable automatic PUSH and POP of policies to parent scope +if(POLICY CMP0011) + cmake_policy(SET CMP0011 NEW) +endif() + +# Prohibit in-source builds +if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") + message( + FATAL_ERROR + "OBS: In-source builds of OBS are not supported. Specify a build directory via 'cmake -S -B ' instead." + ) +endif() +file(REMOVE_RECURSE "${CMAKE_SOURCE_DIR}/CMakeCache.txt" "${CMAKE_SOURCE_DIR}/CMakeFiles") + +# Use folders for source file organization with IDE generators (Visual Studio/Xcode) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +# Set default global project variables +set(OBS_COMPANY_NAME "OBS Project") +set(OBS_PRODUCT_NAME "OBS Studio") +set(OBS_WEBSITE "https://www.obsproject.com") +set(OBS_COMMENTS "Free and open source software for video recording and live streaming") +set(OBS_LEGAL_COPYRIGHT "(C) Hugh Bailey") + +# Configure default version strings +message(DEBUG "Setting default project version variables...") +set(_obs_default_version "0" "0" "1") +set(_obs_release_candidate "0" "0" "0" "0") +set(_obs_beta "0" "0" "0" "0") + +# Add common module directories to default search path +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/common" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/finders") + +include(versionconfig) +include(buildnumber) +include(osconfig) + +# Allow selection of common build types via UI +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE + "RelWithDebInfo" + CACHE STRING "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) +endif() + +# Disable exports automatically going into the CMake package registry +set(CMAKE_EXPORT_PACKAGE_REGISTRY FALSE) +# Enable default inclusion of targets' source and binary directory +set(CMAKE_INCLUDE_CURRENT_DIR TRUE) diff --git a/cmake/common/buildnumber.cmake b/cmake/common/buildnumber.cmake new file mode 100644 index 00000000000000..e20ac5b807da9a --- /dev/null +++ b/cmake/common/buildnumber.cmake @@ -0,0 +1,19 @@ +# OBS CMake build number module + +# Define build number cache file +set(_BUILD_NUMBER_CACHE + "${CMAKE_SOURCE_DIR}/cmake/.CMakeBuildNumber" + CACHE INTERNAL "OBS build number cache file") + +# Read build number from cache file or manual override +if(NOT DEFINED OBS_BUILD_NUMBER AND EXISTS "${_BUILD_NUMBER_CACHE}") + file(READ "${_BUILD_NUMBER_CACHE}" OBS_BUILD_NUMBER) + math(EXPR OBS_BUILD_NUMBER "${OBS_BUILD_NUMBER}+1") +elseif(NOT DEFINED OBS_BUILD_NUMBER) + if($ENV{CI} AND $ENV{GITHUB_RUN_ID}) + set(OBS_BUILD_NUMBER "$ENV{GITHUB_RUN_ID}") + else() + set(OBS_BUILD_NUMBER "1") + endif() +endif() +file(WRITE "${_BUILD_NUMBER_CACHE}" "${OBS_BUILD_NUMBER}") diff --git a/cmake/common/ccache.cmake b/cmake/common/ccache.cmake new file mode 100644 index 00000000000000..f63f2ab83ba59e --- /dev/null +++ b/cmake/common/ccache.cmake @@ -0,0 +1,20 @@ +# OBS CMake ccache module + +if(NOT DEFINED CCACHE_PROGRAM) + message(DEBUG "Trying to find ccache on build host...") + find_program(CCACHE_PROGRAM "ccache") + mark_as_advanced(CCACHE_PROGRAM) +endif() + +if(CCACHE_PROGRAM) + message(DEBUG "CCache found as ${CCACHE_PROGRAM}...") + option(ENABLE_CCACHE "Enable compiler acceleration with ccache" ON) + + if(ENABLE_CCACHE) + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_OBJC_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_OBJCXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + set(CMAKE_CUDA_COMPILER_LAUNCHER "${CCACHE_PROGRAM}") + endif() +endif() diff --git a/cmake/common/compiler_common.cmake b/cmake/common/compiler_common.cmake new file mode 100644 index 00000000000000..def41575aac235 --- /dev/null +++ b/cmake/common/compiler_common.cmake @@ -0,0 +1 @@ +# OBS CMake common compiler options module diff --git a/cmake/common/cpackconfig_common.cmake b/cmake/common/cpackconfig_common.cmake new file mode 100644 index 00000000000000..e68bbedb0474fd --- /dev/null +++ b/cmake/common/cpackconfig_common.cmake @@ -0,0 +1,10 @@ +# OBS CMake common CPack module + +# Set default global CPack variables +set(CPACK_PACKAGE_NAME obs-studio) +set(CPACK_PACKAGE_VENDOR "${OBS_WEBSITE}") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${OBS_COMMENTS}") + +set(CPACK_PACKAGE_VERSION_MAJOR ${OBS_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${OBS_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${OBS_VERSION_PATCH}) diff --git a/cmake/common/helpers_common.cmake b/cmake/common/helpers_common.cmake new file mode 100644 index 00000000000000..707a67055a41c7 --- /dev/null +++ b/cmake/common/helpers_common.cmake @@ -0,0 +1,521 @@ +# OBS CMake common helper functions module + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-lint: disable=C0307 +# cmake-lint: disable=R0912 +# cmake-lint: disable=R0915 +# cmake-format: on + +# message_configuration: Function to print configuration outcome +function(message_configuration) + include(FeatureSummary) + feature_summary(WHAT ALL VAR _feature_summary) + + message(DEBUG "${_feature_summary}") + + message( + NOTICE + " _ _ _ _ \n" + " ___ | |__ ___ ___| |_ _ _ __| (_) ___ \n" + " / _ \\| '_ \\/ __|_____/ __| __| | | |/ _` | |/ _ \\ \n" + " | (_) | |_) \\__ \\_____\\__ \\ |_| |_| | (_| | | (_) |\n" + " \\___/|_.__/|___/ |___/\\__|\\__,_|\\__,_|_|\\___/ \n" + "\nOBS: Application Version: ${OBS_VERSION} - Build Number: ${OBS_BUILD_NUMBER}\n" + "==================================================================================\n\n") + + get_property(OBS_FEATURES_ENABLED GLOBAL PROPERTY OBS_FEATURES_ENABLED) + list( + SORT OBS_FEATURES_ENABLED + COMPARE NATURAL + CASE SENSITIVE + ORDER ASCENDING) + if(OBS_FEATURES_ENABLED) + message(NOTICE "------------------------ Enabled Features ------------------------") + foreach(feature IN LISTS OBS_FEATURES_ENABLED) + message(NOTICE " - ${feature}") + endforeach() + endif() + + get_property(OBS_FEATURES_DISABLED GLOBAL PROPERTY OBS_FEATURES_DISABLED) + list( + SORT OBS_FEATURES_DISABLED + COMPARE NATURAL + CASE SENSITIVE + ORDER ASCENDING) + if(OBS_FEATURES_DISABLED) + message(NOTICE "------------------------ Disabled Features ------------------------") + foreach(feature IN LISTS OBS_FEATURES_DISABLED) + message(NOTICE " - ${feature}") + endforeach() + endif() + + if(ENABLE_PLUGINS) + get_property(OBS_MODULES_ENABLED GLOBAL PROPERTY OBS_MODULES_ENABLED) + list( + SORT OBS_MODULES_ENABLED + COMPARE NATURAL + CASE SENSITIVE + ORDER ASCENDING) + if(OBS_MODULES_ENABLED) + message(NOTICE "------------------------ Enabled Modules ------------------------") + foreach(feature IN LISTS OBS_MODULES_ENABLED) + message(NOTICE " - ${feature}") + endforeach() + endif() + + get_property(OBS_MODULES_DISABLED GLOBAL PROPERTY OBS_MODULES_DISABLED) + list( + SORT OBS_MODULES_DISABLED + COMPARE NATURAL + CASE SENSITIVE + ORDER ASCENDING) + if(OBS_MODULES_DISABLED) + message(NOTICE "------------------------ Disabled Modules ------------------------") + foreach(feature IN LISTS OBS_MODULES_DISABLED) + message(NOTICE " - ${feature}") + endforeach() + endif() + endif() + message(NOTICE "----------------------------------------------------------------------------------") +endfunction() + +# target_enable_feature: Adds feature to list of enabled application features and sets optional compile definitions +function(target_enable_feature target feature_description) + set_property(GLOBAL APPEND PROPERTY OBS_FEATURES_ENABLED "${feature_description}") + + if(ARGN) + target_compile_definitions(${target} PRIVATE ${ARGN}) + endif() +endfunction() + +# target_disable_feature: Adds feature to list of disabled application features and sets optional compile definitions +function(target_disable_feature target feature_description) + set_property(GLOBAL APPEND PROPERTY OBS_FEATURES_DISABLED "${feature_description}") + + if(ARGN) + target_compile_definitions(${target} PRIVATE ${ARGN}) + endif() +endfunction() + +# target_disable: Adds target to list of disabled modules +function(target_disable target) + set_property(GLOBAL APPEND PROPERTY OBS_MODULES_DISABLED ${target}) +endfunction() + +# * Use QT_VERSION value as a hint for desired Qt version +# * If "AUTO" was specified, prefer Qt6 over Qt5 +# * Creates versionless targets of desired component if none had been created by Qt itself (Qt versions < 5.15) +if(NOT QT_VERSION) + set(QT_VERSION + AUTO + CACHE STRING "OBS Qt version [AUTO, 5, 6]" FORCE) + set_property(CACHE QT_VERSION PROPERTY STRINGS AUTO 5 6) +endif() + +# find_qt: Macro to find best possible Qt version for use with the project: +macro(find_qt) + set(multiValueArgs COMPONENTS COMPONENTS_WIN COMPONENTS_MAC COMPONENTS_LINUX) + cmake_parse_arguments(find_qt "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # Do not use versionless targets in the first step to avoid Qt::Core being clobbered by later opportunistic + # find_package runs + set(QT_NO_CREATE_VERSIONLESS_TARGETS TRUE) + + message(DEBUG "Start Qt version discovery...") + # Loop until _QT_VERSION is set or FATAL_ERROR aborts script execution early + while(NOT _QT_VERSION) + message(DEBUG "QT_VERSION set to ${QT_VERSION}") + if(QT_VERSION STREQUAL AUTO AND NOT qt_test_version) + set(qt_test_version 6) + elseif(NOT QT_VERSION STREQUAL AUTO) + set(qt_test_version ${QT_VERSION}) + endif() + message(DEBUG "Attempting to find Qt${qt_test_version}") + + find_package( + Qt${qt_test_version} + COMPONENTS Core + QUIET) + + if(TARGET Qt${qt_test_version}::Core) + set(_QT_VERSION + ${qt_test_version} + CACHE INTERNAL "") + message(STATUS "Qt version found: ${_QT_VERSION}") + unset(qt_test_version) + break() + elseif(QT_VERSION STREQUAL AUTO) + if(qt_test_version EQUAL 6) + message(WARNING "Qt6 was not found, falling back to Qt5") + set(qt_test_version 5) + continue() + endif() + endif() + message(FATAL_ERROR "Neither Qt6 nor Qt5 found.") + endwhile() + + # Enable versionless targets for the remaining Qt components + set(QT_NO_CREATE_VERSIONLESS_TARGETS FALSE) + + set(qt_components ${find_qt_COMPONENTS}) + if(OS_WINDOWS) + list(APPEND qt_components ${find_qt_COMPONENTS_WIN}) + elseif(OS_MACOS) + list(APPEND qt_components ${find_qt_COMPONENTS_MAC}) + else() + list(APPEND qt_components ${find_qt_COMPONENTS_LINUX}) + endif() + message(DEBUG "Trying to find Qt components ${qt_components}...") + + find_package(Qt${_QT_VERSION} REQUIRED ${qt_components}) + + list(APPEND qt_components Core) + + if("Gui" IN_LIST find_qt_COMPONENTS_LINUX) + list(APPEND qt_components "GuiPrivate") + endif() + + # Check for versionless targets of each requested component and create if necessary + foreach(component IN LISTS qt_components) + message(DEBUG "Checking for target Qt::${component}") + if(NOT TARGET Qt::${component} AND TARGET Qt${_QT_VERSION}::${component}) + add_library(Qt::${component} INTERFACE IMPORTED) + set_target_properties(Qt::${component} PROPERTIES INTERFACE_LINK_LIBRARIES Qt${_QT_VERSION}::${component}) + endif() + endforeach() +endmacro() + +# find_dependencies: Check linked interface and direct dependencies of target +function(find_dependencies) + set(oneValueArgs TARGET FOUND_VAR) + set(multiValueArgs) + cmake_parse_arguments(var "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(NOT DEFINED is_root) + # Root of recursive dependency resolution + set(is_root TRUE) + set(nested_depth 0) + else() + # Branch of recursive dependency resolution + set(is_root FALSE) + math(EXPR nested_depth "${nested_depth}+1") + endif() + + # * LINK_LIBRARIES are direct dependencies + # * INTERFACE_LINK_LIBRARIES are transitive dependencies + get_target_property(linked_libraries ${var_TARGET} LINK_LIBRARIES) + get_target_property(interface_libraries ${var_TARGET} INTERFACE_LINK_LIBRARIES) + message(DEBUG "[${nested_depth}] Linked libraries in target ${var_TARGET}: ${linked_libraries}") + message(DEBUG "[${nested_depth}] Linked interface libraries in target ${var_TARGET}: ${interface_libraries}") + + # Consider CMake targets only + list(FILTER linked_libraries INCLUDE REGEX ".+::.+") + list(FILTER interface_libraries INCLUDE REGEX ".+::.+") + + foreach(library IN LISTS linked_libraries interface_libraries) + if(NOT library) + continue() + elseif(library MATCHES "\\$<.*:[^>]+>") + # Generator expression found + if(library MATCHES "\\$<\\$]+>:.+>") + # Platform-dependent generator expression found - platforms are a comma-separated list of CMake host OS + # identifiers. Convert to CMake list and check if current host os is contained in list. + string(REGEX REPLACE "\\$<\\$]+)>:([^>]+)>" "\\1;\\2" gen_expression "${library}") + list(GET gen_expression 0 gen_platform) + list(GET gen_expression 1 gen_library) + string(REPLACE "," ";" gen_platform "${gen_platform}") + if(CMAKE_HOST_SYSTEM_NAME IN_LIST platform) + set(library "${gen_library}") + else() + continue() + endif() + elseif(library MATCHES "\\$<\\$]+>:.+>") + # Boolean generator expression found - consider parameter a CMake variable that resolves into a CMake-like + # boolean value for a simple conditional check. + string(REGEX REPLACE "\\$<\\$]+)>:([^>]+)>" "\\1;\\2" gen_expression "${library}") + list(GET gen_expression 0 gen_boolean) + list(GET gen_expression 1 gen_library) + if(${gen_boolean}) + set(library "${gen_library}") + else() + continue() + endif() + elseif(library MATCHES "\\$]+>") + # Target-dependent generator expression found - consider parameter to be a CMake target identifier and check for + # target existence. + string(REGEX REPLACE "\\$]+)>" "\\1" gen_target "${library}") + if(TARGET ${gen_target}) + set(library "${gen_target}") + else() + continue() + endif() + elseif(library MATCHES "\\$<.*Qt6::EntryPointPrivate>" OR library MATCHES + "\\$<.*Qt6::QDarwinBluetoothPermissionPlugin>") + # Known Qt6-specific generator expression, ignored. + continue() + else() + # Unknown or unimplemented generator expression found - abort script run to either add to ignore list or + # implement detection. + message(FATAL_ERROR "${library} is an unsupported generator expression for linked libraries.") + endif() + endif() + + message(DEBUG "[${nested_depth}] Found ${library}...") + + if(NOT library IN_LIST ${var_FOUND_VAR}) + list(APPEND found_libraries ${library}) + # Enter recursive branch + find_dependencies(TARGET ${library} FOUND_VAR ${var_FOUND_VAR}) + endif() + endforeach() + + if(NOT is_root) + set(found_libraries + ${found_libraries} + PARENT_SCOPE) + # Exit recursive branch + return() + endif() + + list(REMOVE_DUPLICATES found_libraries) + list(APPEND ${var_FOUND_VAR} ${found_libraries}) + set(${var_FOUND_VAR} + ${${var_FOUND_VAR}} + PARENT_SCOPE) +endfunction() + +# find_qt_plugins: Find and add Qt plugin libraries associated with Qt component to target +function(find_qt_plugins) + set(oneValueArgs COMPONENT TARGET FOUND_VAR) + cmake_parse_arguments(var "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + string(REPLACE "::" ";" library_tuple "${var_COMPONENT}") + list(GET library_tuple 0 library_namespace) + list(GET library_tuple 1 library_name) + + if(NOT ${library_namespace} MATCHES "Qt[56]?") + message(FATAL_ERROR "'find_qt_plugins' has to be called with a valid target from the Qt, Qt5, or Qt6 namespace.") + endif() + + list( + APPEND + qt_plugins_Core + platforms + printsupport + styles + imageformats + iconengines) + list(APPEND qt_plugins_Gui platforminputcontexts virtualkeyboard) + list(APPEND qt_plugins_Network bearer) + list(APPEND qt_plugins_Sql sqldrivers) + list(APPEND qt_plugins_Multimedia mediaservice audio) + list(APPEND qt_plugins_3dRender sceneparsers geometryloaders) + list(APPEND qt_plugins_3dQuickRender renderplugins) + list(APPEND qt_plugins_Positioning position) + list(APPEND qt_plugins_Location geoservices) + list(APPEND qt_plugins_TextToSpeech texttospeech) + list(APPEND qt_plugins_WebView webview) + + if(qt_plugins_${library_name}) + get_target_property(library_location ${var_COMPONENT} IMPORTED_LOCATION) + get_target_property(is_framework ${var_COMPONENT} FRAMEWORK) + + if(is_framework) + # Resolve Qt plugin location relative to framework binary location on macOS + set(plugins_location "../../../../../plugins") + cmake_path(ABSOLUTE_PATH plugins_location BASE_DIRECTORY "${library_location}" NORMALIZE) + else() + # Resolve Qt plugin location relative to dynamic library location + set(plugins_location "../../plugins") + cmake_path(ABSOLUTE_PATH plugins_location BASE_DIRECTORY "${library_location}" NORMALIZE) + endif() + + foreach(plugin IN ITEMS ${qt_plugins_${library_name}}) + if(NOT plugin IN_LIST plugins_list) + if(EXISTS "${plugins_location}/${plugin}") + # Gather all .dll or .dylib files in given plugin subdirectory + file( + GLOB plugin_libraries + RELATIVE "${plugins_location}/${plugin}" + "${plugins_location}/${plugin}/*.dylib" "${plugins_location}/${plugin}/*.dll") + message(DEBUG "Found Qt plugin ${plugin} libraries: ${plugin_libraries}") + foreach(plugin_library IN ITEMS ${plugin_libraries}) + set(plugin_full_path "${plugins_location}/${plugin}/${plugin_library}") + list(APPEND plugins_list ${plugin_full_path}) + endforeach() + endif() + endif() + endforeach() + endif() + + set(${var_FOUND_VAR} + ${plugins_list} + PARENT_SCOPE) +endfunction() + +# target_export: Helper function to export target as CMake package +function(target_export target) + if(NOT DEFINED exclude_variant) + set(exclude_variant EXCLUDE_FROM_ALL) + endif() + + get_target_property(is_framework ${target} FRAMEWORK) + if(is_framework) + set(package_destination "Frameworks/${target}.framework/Resources/cmake") + set(include_destination "Frameworks/${target}.framework/Headers") + else() + set(package_destination "${OBS_CMAKE_DESTINATION}/${target}") + set(include_destination "${OBS_INCLUDE_DESTINATION}") + endif() + + install( + TARGETS ${target} + EXPORT ${target}Targets + RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}" + COMPONENT Development + ${exclude_variant} + LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}" + COMPONENT Development + ${exclude_variant} + ARCHIVE DESTINATION "${OBS_LIBRARY_DESTINATION}" + COMPONENT Development + ${exclude_variant} + FRAMEWORK DESTINATION Frameworks + COMPONENT Development + ${exclude_variant} + INCLUDES + DESTINATION "${include_destination}" + PUBLIC_HEADER + DESTINATION "${include_destination}" + COMPONENT Development + ${exclude_variant}) + + get_target_property(obs_public_headers ${target} OBS_PUBLIC_HEADERS) + + if(obs_public_headers) + foreach(header IN LISTS obs_public_headers) + cmake_path(GET header PARENT_PATH header_dir) + if(header_dir) + if(NOT ${header_dir} IN_LIST header_dirs) + list(APPEND header_dirs ${header_dir}) + endif() + list(APPEND headers_${header_dir} ${header}) + else() + list(APPEND headers ${header}) + endif() + endforeach() + + foreach(header_dir IN LISTS header_dirs) + install( + FILES ${headers_${header_dir}} + DESTINATION "${include_destination}/${header_dir}" + COMPONENT Development + ${exclude_variant}) + endforeach() + + if(headers) + install( + FILES ${headers} + DESTINATION "${include_destination}" + COMPONENT Development + ${exclude_variant}) + endif() + endif() + + if(target STREQUAL libobs AND NOT EXISTS "${include_destination}/obsconfig.h") + install( + FILES "${CMAKE_BINARY_DIR}/config/obsconfig.h" + DESTINATION "${include_destination}" + COMPONENT Development + ${exclude_variant}) + endif() + + message(DEBUG "Generating export header for target ${target} as ${target}_EXPORT.h...") + include(GenerateExportHeader) + generate_export_header(${target} EXPORT_FILE_NAME "${target}_EXPORT.h") + target_sources(${target} PUBLIC $ + $) + set_property( + TARGET ${target} + APPEND + PROPERTY PUBLIC_HEADER "${target}_EXPORT.h") + + set(TARGETS_EXPORT_NAME ${target}Targets) + message( + DEBUG + "Generating CMake package configuration file ${target}Config.cmake with targets file ${TARGETS_EXPORT_NAME}...") + include(CMakePackageConfigHelpers) + configure_package_config_file(cmake/${target}Config.cmake.in ${target}Config.cmake + INSTALL_DESTINATION "${package_destination}") + + message(DEBUG "Generating CMake package version configuration file ${target}ConfigVersion.cmake...") + write_basic_package_version_file( + "${target}ConfigVersion.cmake" + VERSION ${OBS_VERSION_CANONICAL} + COMPATIBILITY SameMajorVersion) + + export( + EXPORT ${target}Targets + FILE "${TARGETS_EXPORT_NAME}.cmake" + NAMESPACE OBS::) + + export(PACKAGE ${target}) + + install( + EXPORT ${TARGETS_EXPORT_NAME} + FILE ${TARGETS_EXPORT_NAME}.cmake + NAMESPACE OBS:: + DESTINATION "${package_destination}" + COMPONENT Development + ${exclude_variant}) + + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/${target}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${target}ConfigVersion.cmake" + DESTINATION "${package_destination}" + COMPONENT Development + ${exclude_variant}) +endfunction() + +# check_uuid: Helper function to check for valid UUID +function(check_uuid uuid_string return_value) + set(valid_uuid TRUE) + set(uuid_token_lengths 8 4 4 4 12) + set(token_num 0) + + string(REPLACE "-" ";" uuid_tokens ${uuid_string}) + list(LENGTH uuid_tokens uuid_num_tokens) + + if(uuid_num_tokens EQUAL 5) + message(DEBUG "UUID ${uuid_string} is valid with 5 tokens.") + foreach(uuid_token IN LISTS uuid_tokens) + list(GET uuid_token_lengths ${token_num} uuid_target_length) + string(LENGTH "${uuid_token}" uuid_actual_length) + if(uuid_actual_length EQUAL uuid_target_length) + string(REGEX MATCH "[0-9a-fA-F]+" uuid_hex_match ${uuid_token}) + if(NOT uuid_hex_match STREQUAL uuid_token) + set(valid_uuid FALSE) + break() + endif() + else() + set(valid_uuid FALSE) + break() + endif() + math(EXPR token_num "${token_num}+1") + endforeach() + else() + set(valid_uuid FALSE) + endif() + message(DEBUG "UUID ${uuid_string} valid: ${valid_uuid}") + set(${return_value} + ${valid_uuid} + PARENT_SCOPE) +endfunction() + +# legacy_check: Checks if new CMake framework was not enabled and load legacy rules instead +macro(legacy_check) + if(OBS_CMAKE_VERSION VERSION_LESS 3.0.0) + message(FATAL_ERROR "CMake version changed between CMakeLists.txt.") + endif() +endmacro() diff --git a/cmake/common/osconfig.cmake b/cmake/common/osconfig.cmake new file mode 100644 index 00000000000000..6b692fcfc0b88e --- /dev/null +++ b/cmake/common/osconfig.cmake @@ -0,0 +1,15 @@ +# OBS CMake operating system bootstrap module + +# Set minimum CMake version specific to host operating system, add OS-specific module directory to default search paths, +# and set helper variables for OS detection in other CMake list files. +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows") + set(OS_WINDOWS TRUE) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos") + set(OS_MACOS TRUE) +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD|OpenBSD") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux") + string(TOUPPER "${CMAKE_HOST_SYSTEM_NAME}" _SYSTEM_NAME_U) + set(OS_${_SYSTEM_NAME_U} TRUE) +endif() diff --git a/cmake/common/versionconfig.cmake b/cmake/common/versionconfig.cmake new file mode 100644 index 00000000000000..a03b22b7fabf8d --- /dev/null +++ b/cmake/common/versionconfig.cmake @@ -0,0 +1,90 @@ +# OBS CMake common version helper module + +# cmake-format: off +# cmake-lint: disable=C0301 +# cmake-format: on + +# Attempt to automatically discover expected OBS version +if(NOT DEFINED OBS_VERSION_OVERRIDE) + if(DEFINED RELEASE_CANDIDATE) + if(RELEASE_CANDIDATE MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+-rc[0-9]+") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)-rc([0-9])+" "\\1;\\2;\\3;\\4" _obs_release_candidate + ${RELEASE_CANDIDATE}) + list(GET _obs_release_candidate 0 1 2 _obs_version_canonical) + set(_obs_version ${RELEASE_CANDIDATE}) + else() + message(FATAL_ERROR "Invalid release candidate version supplied - must be ..-rc.") + endif() + elseif(DEFINED BETA) + if(BETA MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+-beta[0-9]+") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)-beta([0-9])+" "\\1;\\2;\\3;\\4" _obs_beta ${BETA}) + list(GET _beta 0 1 2 _obs_version_canonical) + set(_obs_version ${BETA}) + else() + message(FATAL_ERROR "Invalid beta version supplied - must be ..-beta.") + endif() + elseif(EXISTS "${CMAKE_SOURCE_DIR}/.git") + execute_process( + COMMAND git describe --always --tags --dirty=-modified + OUTPUT_VARIABLE _obs_version + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE _obs_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(_obs_version_result EQUAL 0) + if(_obs_version MATCHES "rc[0-9]+$") + set(RELEASE_CANDIDATE ${_obs_version}) + elseif(_obs_version MATCHES "beta[0-9]+$") + set(BETA ${_obs_version}) + endif() + + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\1;\\2;\\3" _obs_version_canonical ${_obs_version}) + else() + set(_obs_version ${_obs_default_version}) + set(_obs_version_canonical ${_obs_default_version}) + endif() + endif() +else() + if(OBS_VERSION_OVERRIDE MATCHES "([0-9]+)\\.([0-9]+)\\.([0-9]+).*") + string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\1;\\2;\\3" _obs_version_canonical ${_obs_version}) + set(_obs_version ${OBS_VERSION_OVERRIDE}) + else() + message(FATAL_ERROR "Invalid version supplied - must be ...") + endif() +endif() + +list(GET _obs_version_canonical 0 OBS_VERSION_MAJOR) +list(GET _obs_version_canonical 1 OBS_VERSION_MINOR) +list(GET _obs_version_canonical 2 OBS_VERSION_PATCH) +list(GET _obs_release_candidate 0 OBS_RELEASE_CANDIDATE_MAJOR) +list(GET _obs_release_candidate 1 OBS_RELEASE_CANDIDATE_MINOR) +list(GET _obs_release_candidate 2 OBS_RELEASE_CANDIDATE_PATCH) +list(GET _obs_release_candidate 3 OBS_RELEASE_CANDIDATE) +list(GET _obs_beta 0 OBS_BETA_MAJOR) +list(GET _obs_beta 1 OBS_BETA_MINOR) +list(GET _obs_beta 2 OBS_BETA_PATCH) +list(GET _obs_beta 3 OBS_BETA) + +string(REPLACE ";" "." OBS_VERSION_CANONICAL "${_obs_version_canonical}") +string(REPLACE ";" "." OBS_VERSION "${_obs_version}") + +if(OBS_RELEASE_CANDIDATE GREATER 0) + message( + AUTHOR_WARNING + "******************************************************************************\n" + " + OBS-Studio - Release candidate detected, OBS_VERSION is now: ${OBS_VERSION}\n" + "******************************************************************************") +elseif(OBS_BETA GREATER 0) + message( + AUTHOR_WARNING + "******************************************************************************\n" + " + OBS-Studio - Beta detected, OBS_VERSION is now: ${OBS_VERSION}\n" + "******************************************************************************") +endif() + +unset(_obs_default_version) +unset(_obs_version) +unset(_obs_version_canonical) +unset(_obs_release_candidate) +unset(_obs_beta) +unset(_obs_version_result) diff --git a/cmake/finders/.cmake-format.json b/cmake/finders/.cmake-format.json new file mode 100644 index 00000000000000..75fd03ad3a5092 --- /dev/null +++ b/cmake/finders/.cmake-format.json @@ -0,0 +1,41 @@ +{ + "format": { + "line_width": 120, + "tab_size": 2, + "dangle_parens": false, + "enable_sort": true, + "autosort": true + }, + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + }, + "set_target_properties_obs": { + "pargs": 1, + "flags": [], + "kwargs": { + "PROPERTIES": { + "kwargs": { + "PREFIX": 1, + "OUTPUT_NAME": 1, + "FOLDER": 1, + "VERSION": 1, + "SOVERSION": 1, + "FRAMEWORK": 1, + "BUNDLE": 1, + "AUTOMOC": 1, + "AUTOUIC": 1, + "AUTORCC": 1, + "AUTOUIC_SEARCH_PATHS": 1 + } + } + } + } + } +} diff --git a/cmake/finders/FindCEF.cmake b/cmake/finders/FindCEF.cmake new file mode 100644 index 00000000000000..ced4d4b6e22f37 --- /dev/null +++ b/cmake/finders/FindCEF.cmake @@ -0,0 +1,232 @@ +#[=======================================================================[.rst +FindCEF +---------- + +FindModule for CEF and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` targets: + +``CEF::Wrapper`` + Static library loading wrapper + +``CEF::Library`` + Chromium Embedded Library + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``CEF_FOUND`` + True, if all required components and the core library were found. +``CEF_VERSION`` + Detected version of found CEF libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``CEF_LIBRARY_WRAPPER_RELEASE`` + Path to the optimized wrapper component of CEF. +``CEF_LIBRARY_WRAPPER_DEBUG`` + Path to the debug wrapper component of CEF. +``CEF_LIBRARY_RELEASE`` + Path to the library component of CEF. +``CEF_LIBRARY_DEBUG`` + Path to the debug library component of CEF. +``CEF_INCLUDE_DIR`` + Directory containing ``cef_version.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0301 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +set(CEF_ROOT_DIR + "" + CACHE PATH "Alternative path to Chromium Embedded Framework") + +if(NOT DEFINED CEF_ROOT_DIR OR CEF_ROOT_DIR STREQUAL "") + message( + FATAL_ERROR + "CEF_ROOT_DIR is not set - if ENABLE_BROWSER is enabled, " + "a CEF distribution with compiled wrapper library is required.\n" + "Please download a CEF distribution for your appropriate architecture " + "and specify CEF_ROOT_DIR to its location") +endif() + +find_path( + CEF_INCLUDE_DIR "cef_version.h" + HINTS "${CEF_ROOT_DIR}/include" + DOC "Chromium Embedded Framework include directory.") + +if(CEF_INCLUDE_DIR) + file(STRINGS "${CEF_INCLUDE_DIR}/cef_version.h" _VERSION_STRING + REGEX "^.*CEF_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*CEF_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" VERSION_MAJOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*CEF_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" VERSION_MINOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*CEF_VERSION_PATCH[ \t]+([0-9]+).*" "\\1" VERSION_PATCH "${_VERSION_STRING}") + set(CEF_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") +else() + if(NOT CEF_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Chromium Embedded Framework version.") + endif() + set(CEF_VERSION 0.0.0) +endif() + +if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) + find_library( + CEF_IMPLIB_RELEASE + NAMES cef.lib libcef.lib + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release" + DOC "Chromium Embedded Framework import library location") + + find_program( + CEF_LIBRARY_RELEASE + NAMES cef.dll libcef.dll + PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release" + DOC "Chromium Embedded Framework library location") + + if(NOT CEF_LIBRARY_RELEASE) + set(CEF_LIBRARY_RELEASE "${CEF_IMPLIB_RELEASE}") + endif() + + find_library( + CEF_LIBRARY_WRAPPER_RELEASE + NAMES cef_dll_wrapper libcef_dll_wrapper + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Release" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release" + "${CEF_ROOT_DIR}/build/libcef_dll" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper" + DOC "Chromium Embedded Framework static library wrapper.") + + find_library( + CEF_LIBRARY_WRAPPER_DEBUG + NAMES cef_dll_wrapper libcef_dll_wrapper + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug" + DOC "Chromium Embedded Framework static library wrapper (debug).") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) + find_library( + CEF_LIBRARY_RELEASE + NAMES "Chromium Embedded Framework" + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release" + DOC "Chromium Embedded Framework") + + find_library( + CEF_LIBRARY_WRAPPER_RELEASE + NAMES cef_dll_wrapper libcef_dll_wrapper + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Release" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release" + "${CEF_ROOT_DIR}/build/libcef_dll" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper" + DOC "Chromium Embedded Framework static library wrapper.") + + find_library( + CEF_LIBRARY_WRAPPER_DEBUG + NAMES cef_dll_wrapper libcef_dll_wrapper + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}/build/libcef_dll/Debug" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug" + DOC "Chromium Embedded Framework static library wrapper (debug).") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) + find_library( + CEF_LIBRARY_RELEASE + NAMES libcef.so + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}" "${CEF_ROOT_DIR}/Release" + DOC "Chromium Embedded Framework") + + find_library( + CEF_LIBRARY_WRAPPER_RELEASE + NAMES cef_dll_wrapper.a libcef_dll_wrapper.a + NO_DEFAULT_PATH + PATHS "${CEF_ROOT_DIR}/build/libcef_dll" "${CEF_ROOT_DIR}/build/libcef_dll_wrapper" + DOC "Chromium Embedded Framework static library wrapper.") +endif() + +include(SelectLibraryConfigurations) +select_library_configurations(CEF) + +find_package_handle_standard_args( + CEF + REQUIRED_VARS CEF_LIBRARY_RELEASE CEF_LIBRARY_WRAPPER_RELEASE CEF_INCLUDE_DIR + VERSION_VAR CEF_VERSION REASON_FAILURE_MESSAGE + "Ensure that location of pre-compiled Chromium Embedded Framework is set as CEF_ROOT_DIR.") +mark_as_advanced(CEF_LIBRARY CEF_LIBRARY_WRAPPER_RELEASE CEF_LIBRARY_WRAPPER_DEBUG CEF_INCLUDE_DIR) + +if(NOT TARGET CEF::Wrapper) + if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_RELEASE}") + add_library(CEF::Wrapper STATIC IMPORTED) + set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}") + else() + add_library(CEF::Wrapper INTERFACE IMPORTED) + set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_WRAPPER_RELEASE}") + endif() + set_property( + TARGET CEF::Wrapper + APPEND + PROPERTY IMPORTED_CONFIGURATIONS "Release") + + if(CEF_LIBRARY_WRAPPER_DEBUG) + if(IS_ABSOLUTE "${CEF_LIBRARY_WRAPPER_DEBUG}") + set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LOCATION_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}") + else() + set_property(TARGET CEF::Wrapper PROPERTY IMPORTED_LIBNAME_DEBUG "${CEF_LIBRARY_WRAPPER_DEBUG}") + endif() + set_property( + TARGET CEF::Wrapper + APPEND + PROPERTY IMPORTED_CONFIGURATIONS "Debug") + endif() + + set_property( + TARGET CEF::Wrapper + APPEND + PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}") +endif() + +if(NOT TARGET CEF::Library) + if(IS_ABSOLUTE "${CEF_LIBRARY_RELEASE}") + if(DEFINED CEF_IMPLIB_RELEASE) + if(CEF_IMPLIB_RELEASE STREQUAL CEF_LIBRARY_RELEASE) + add_library(CEF::Library STATIC IMPORTED) + else() + add_library(CEF::Library SHARED IMPORTED) + set_property(TARGET CEF::Library PROPERTY IMPORTED_IMPLIB_RELEASE "${CEF_IMPLIB_RELEASE}") + endif() + else() + add_library(CEF::Library UNKNOWN IMPORTED) + endif() + set_property(TARGET CEF::Library PROPERTY IMPORTED_LOCATION_RELEASE "${CEF_LIBRARY_RELEASE}") + else() + add_library(CEF::Library INTERFACE IMPORTED) + set_property(TARGET CEF::Library PROPERTY IMPORTED_LIBNAME_RELEASE "${CEF_LIBRARY_RELEASE}") + endif() + + set_property( + TARGET CEF::Library + APPEND + PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CEF_INCLUDE_DIR}" "${CEF_ROOT_DIR}") + set_property(TARGET CEF::Library PROPERTY IMPORTED_CONFIGURATIONS "Release") +endif() + +include(FeatureSummary) +set_package_properties( + CEF PROPERTIES + URL "https://bitbucket.org/chromiumembedded/cef/" + DESCRIPTION + "Chromium Embedded Framework (CEF). A simple framework for embedding Chromium-based browsers in other applications." +) diff --git a/cmake/finders/FindFFmpeg.cmake b/cmake/finders/FindFFmpeg.cmake new file mode 100644 index 00000000000000..b5f44350e4eb20 --- /dev/null +++ b/cmake/finders/FindFFmpeg.cmake @@ -0,0 +1,345 @@ +#[=======================================================================[.rst +FindFFmpeg +---------- + +FindModule for FFmpeg and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Components +^^^^^^^^^^ + +.. versionadded:: 1.0 + +This module contains provides several components: + +``avcodec`` +``avdevice`` +``avfilter`` +``avformat`` +``avutil`` +``postproc`` +``swscale`` +``swresample`` + +Import targets exist for each component. + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` targets: + +``FFmpeg::avcodec`` + AVcodec component + +``FFmpeg::avdevice`` + AVdevice component + +``FFmpeg::avfilter`` + AVfilter component + +``FFmpeg::avformat`` + AVformat component + +``FFmpeg::avutil`` + AVutil component + +``FFmpeg::postproc`` + postproc component + +``FFmpeg::swscale`` + SWscale component + +``FFmpeg::swresample`` + SWresample component + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``FFmpeg_FOUND`` + True, if all required components and the core library were found. +``FFmpeg_VERSION`` + Detected version of found FFmpeg libraries. +``FFmpeg_INCLUDE_DIRS`` + Include directories needed for FFmpeg. +``FFmpeg_LIBRARIES`` + Libraries needed to link to FFmpeg. +``FFmpeg_DEFINITIONS`` + Compiler flags required for FFmpeg. + +``FFmpeg__VERSION`` + Detected version of found FFmpeg component library. +``FFmpeg__INCLUDE_DIRS`` + Include directories needed for FFmpeg component. +``FFmpeg__LIBRARIES`` + Libraries needed to link to FFmpeg component. +``FFmpeg__DEFINITIONS`` + Compiler flags required for FFmpeg component. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``FFmpeg__LIBRARY`` + Path to the library component of FFmpeg. +``FFmpeg__INCLUDE_DIR`` + Directory containing ``.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +set(_DEFAULT_COMPONENTS + avcodec + avdevice + avformat + avfilter + avresample + avutil + postproc + swscale + swresample) + +set(component_avcodec libavcodec avcodec avcodec.h) +set(component_avdevice libavdevice avdevice avdevice.h) +set(component_avformat libavformat avformat avformat.h) +set(component_avfilter libavfilter avfilter avfilter.h) +set(component_avresample libavresample avresample avresample.h) +set(component_avutil libavutil avutil avutil.h) +set(component_postproc libpostproc postproc postprocess.h) +set(component_swscale libswscale swscale swscale.h) +set(component_swresample libswresample swresample swresample.h) + +if(NOT FFmpeg_FIND_COMPONENTS) + set(FFmpeg_FIND_COMPONENTS ${_DEFAULT_COMPONENTS}) +endif() + +# FFmpeg_find_component: Find and set up requested FFmpeg component +macro(FFmpeg_find_component component) + list(GET component_${component} 0 component_libname) + list(GET component_${component} 1 component_name) + list(GET component_${component} 2 component_header) + + if(NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_search_module(PC_FFmpeg_${component} QUIET ${component_libname}) + endif() + endif() + + find_path( + FFmpeg_${component}_INCLUDE_DIR + NAMES ${component_libname}/${component_header} ${component_libname}/version.h + HINTS ${PC_FFmpeg_${component}_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "FFmpeg component ${component_name} include directory") + + ffmpeg_check_version() + + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + find_library( + FFmpeg_${component}_IMPLIB + NAMES ${component_libname} ${component_name} + DOC "FFmpeg component ${component_name} import library location") + + ffmpeg_find_dll() + else() + find_library( + FFmpeg_${component}_LIBRARY + NAMES ${component_libname} ${component_name} + HINTS ${PC_FFmpeg_${component}_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "FFmpeg component ${component_name} location") + endif() + + if(FFmpeg_${component}_LIBRARY AND FFmpeg_${component}_INCLUDE_DIR) + set(FFmpeg_${component}_FOUND TRUE) + set(FFmpeg_${component}_LIBRARIES ${${_library_var}}) + set(FFmpeg_${component}_INCLUDE_DIRS ${FFmpeg_${component}_INCLUDE_DIR}) + set(FFmpeg_${component}_DEFINITIONS ${PC_FFmpeg_${component}_CFLAGS_OTHER}) + mark_as_advanced(FFmpeg_${component}_LIBRARY FFmpeg_${component}_INCLUDE_DIR FFmpeg_${component}_IMPLIB) + endif() +endmacro() + +# FFmpeg_find_dll: Macro to find DLL for corresponding import library +macro(FFmpeg_find_dll) + cmake_path(GET FFmpeg_${component}_IMPLIB PARENT_PATH _implib_path) + cmake_path(SET _bin_path NORMALIZE "${_implib_path}/../bin") + + string(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" _dll_version "${FFmpeg_${component}_VERSION}") + + find_program( + FFmpeg_${component}_LIBRARY + NAMES ${component_name}-${_dll_version}.dll + HINTS ${_implib_path} ${_bin_path} + DOC "FFmpeg component ${component_name} DLL location") + + if(NOT FFmpeg_${component}_LIBRARY) + set(FFmpeg_${component}_LIBRARY "${FFmpeg_${component}_IMPLIB}") + endif() + + unset(_implib_path) + unset(_bin_path) + unset(_dll_version) +endmacro() + +# FFmpeg_check_version: Macro to help extract version number from FFmpeg headers +macro(FFmpeg_check_version) + if(PC_FFmpeg_${component}_VERSION) + set(FFmpeg_${component}_VERSION ${PC_FFmpeg_${component}_VERSION}) + elseif(EXISTS "${FFmpeg_${component}_INCLUDE_DIR}/${component_libname}/version.h") + if(EXISTS "${FFmpeg_${component}_INCLUDE_DIR}/${component_libname}/version_major.h") + file(STRINGS "${FFmpeg_${component}_INCLUDE_DIR}/${component_libname}/version_major.h" _version_string + REGEX "^.*VERSION_MAJOR[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major "${_version_string}") + + file(STRINGS "${FFmpeg_${component}_INCLUDE_DIR}/${component_libname}/version.h" _version_string + REGEX "^.*VERSION_(MINOR|MICRO)[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor "${_version_string}") + string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" _version_patch "${_version_string}") + else() + file(STRINGS "${FFmpeg_${component}_INCLUDE_DIR}/${component_libname}/version.h" _version_string + REGEX "^.*VERSION_(MAJOR|MINOR|MICRO)[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _version_major "${_version_string}") + string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _version_minor "${_version_string}") + string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" _version_patch "${_version_string}") + endif() + + set(FFmpeg_${component}_VERSION "${_version_major}.${_version_minor}.${_version_patch}") + unset(_version_major) + unset(_version_minor) + unset(_version_patch) + else() + if(NOT FFmpeg_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find ${component_name} version.") + endif() + set(FFmpeg_${component}_VERSION 0.0.0) + endif() +endmacro() + +# FFmpeg_set_soname: Set SONAME property on imported library targets +macro(FFmpeg_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${FFmpeg_${component}_LIBRARY}' | grep -v '${FFmpeg_${component}_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET FFmpeg::${component} PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${FFmpeg_${component}_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET FFmpeg::${component} PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +foreach(component IN LISTS FFmpeg_FIND_COMPONENTS) + if(NOT component IN_LIST _DEFAULT_COMPONENTS) + message(FATAL_ERROR "Unknown FFmpeg component specified: ${component}.") + endif() + + if(NOT FFmpeg_${component}_FOUND) + ffmpeg_find_component(${component}) + endif() + + if(FFmpeg_${component}_FOUND) + list(APPEND FFmpeg_LIBRARIES ${FFmpeg_${component}_LIBRARY}) + list(APPEND FFmpeg_DEFINITIONS ${FFmpeg_${component}_DEFINITIONS}) + list(APPEND FFmpeg_INCLUDE_DIRS ${FFmpeg_${component}_INCLUDE_DIR}) + endif() +endforeach() + +if(NOT FFmpeg_avutil_FOUND) + ffmpeg_find_component(avutil) +endif() + +if(EXISTS "${FFmpeg_avutil_INCLUDE_DIR}/libavutil/ffversion.h") + file(STRINGS "${FFmpeg_avutil_INCLUDE_DIR}/libavutil/ffversion.h" _version_string + REGEX "^.*FFMPEG_VERSION[ \t]+\"n[0-9\\.]+\"[ \t]*$") + string(REGEX REPLACE ".*FFMPEG_VERSION[ \t]+\"n([0-9\\.]+)\".*" "\\1" FFmpeg_VERSION "${_version_string}") +endif() + +list(REMOVE_DUPLICATES FFmpeg_INCLUDE_DIRS) +list(REMOVE_DUPLICATES FFmpeg_LIBRARIES) +list(REMOVE_DUPLICATES FFmpeg_DEFINITIONS) + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(FFmpeg_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(FFmpeg_ERROR_REASON "Ensure that required FFmpeg libraries are installed on the system.") +endif() + +find_package_handle_standard_args( + FFmpeg + REQUIRED_VARS FFmpeg_LIBRARIES FFmpeg_INCLUDE_DIRS + VERSION_VAR FFmpeg_VERSION + HANDLE_COMPONENTS REASON_FAILURE_MESSAGE "${FFmpeg_ERROR_REASON}") + +if(FFmpeg_FOUND AND NOT TARGET FFmpeg::FFmpeg) + add_library(FFmpeg::FFmpeg INTERFACE IMPORTED) +endif() + +foreach(component IN LISTS FFmpeg_FIND_COMPONENTS) + if(FFmpeg_${component}_FOUND AND NOT TARGET FFmpeg::${component}) + if(IS_ABSOLUTE "${FFmpeg_${component}_LIBRARY}") + if(DEFINED FFmpeg_${component}_IMPLIB) + if(FFmpeg_${component}_IMPLIB STREQUAL FFmpeg_${component}_LIBRARY) + add_library(FFmpeg::${component} STATIC IMPORTED) + else() + add_library(FFmpeg::${component} SHARED IMPORTED) + set_property(TARGET FFmpeg::${component} PROPERTY IMPORTED_IMPLIB "${FFmpeg_${component}_IMPLIB}") + endif() + else() + add_library(FFmpeg::${component} UNKNOWN IMPORTED) + ffmpeg_set_soname() + endif() + + set_property(TARGET FFmpeg::${component} PROPERTY IMPORTED_LOCATION "${FFmpeg_${component}_LIBRARY}") + + else() + add_library(FFmpeg::${component} INTERFACE IMPORTED) + set_property(TARGET FFmpeg::${component} PROPERTY IMPORTED_LIBNAME "${FFmpeg_${component}_LIBRARY}") + endif() + set_target_properties( + FFmpeg::${component} + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_FFmpeg_${component}_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${FFmpeg_${component}_INCLUDE_DIR}" + VERSION ${FFmpeg_${component}_VERSION}) + + get_target_property(_ffmpeg_interface_libraries FFmpeg::FFmpeg INTERFACE_LINK_LIBRARIES) + if(NOT FFmpeg::${component} IN_LIST _ffmpeg_interface_libraries) + set_property( + TARGET FFmpeg::FFmpeg + APPEND + PROPERTY INTERFACE_LINK_LIBRARIES FFmpeg::${component}) + endif() + endif() +endforeach() + +include(FeatureSummary) +set_package_properties( + FFmpeg PROPERTIES + URL "https://www.ffmpeg.org" + DESCRIPTION "A complete, cross-platform solution to record, convert and stream audio and video.") diff --git a/cmake/finders/FindLibAJANTV2.cmake b/cmake/finders/FindLibAJANTV2.cmake new file mode 100644 index 00000000000000..333ecb6b98d5af --- /dev/null +++ b/cmake/finders/FindLibAJANTV2.cmake @@ -0,0 +1,160 @@ +#[=======================================================================[.rst +FindLibAJANTV2 +---------- + +FindModule for LibAJANTV2 and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``LibAJANTV2::LibAJANTV2``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``LibAJANTV2_FOUND`` + True, if all required components and the core library were found. +``LibAJANTV2_VERSION`` + Detected version of found LibAJANTV2 libraries. +``LibAJANTV2_INCLUDE_DIRS`` + Include directories needed for LibAJANTV2. +``LibAJANTV2_LIBRARIES`` + Libraries needed to link to LibAJANTV2. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``LibAJANTV2_LIBRARY_RELEASE`` + Path to the library component of LibAJANTV2 in non-debug configuration. +``LibAJANTV2_LIBRARY_DEBUG`` + Optional path to the library component of LibAJANTV2 in debug configuration. +``LibAJANTV2_INCLUDE_DIR`` + Directory containing ``LibAJANTV2.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_LibAJANTV2 QUIET ajantv2) +endif() + +find_path( + LibAJANTV2_INCLUDE_DIR + NAMES ajalibraries + HINTS ${PC_LibAJANTV2_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "LibAJANTV2 include directory") + +find_library( + LibAJANTV2_LIBRARY_RELEASE + NAMES ajantv2 libajantv2 + HINTS ${PC_LibAJANTV2_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "LibAJANTV2 location") + +find_library( + LibAJANTV2_LIBRARY_DEBUG + NAMES ajantv2d libajantv2d + HINTS ${PC_LibAJANTV2_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "LibAJANTV2 debug location.") + +if(PC_LibAJANTV2_VERSION VERSION_GREATER 0) + set(LibAJANTV2_VERSION ${PC_LibAJANTV2_VERSION}) +else() + if(NOT LibAJANTV2_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find LibAJANTV2 version.") + endif() + set(LibAJANTV2_VERSION 0.0.0) +endif() + +include(SelectLibraryConfigurations) +select_library_configurations(LibAJANTV2) + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(LibAJANTV2_ERROR_REASON "Ensure obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(LibAJANTV2_ERROR_REASON "Ensure ajantv2 static libraries are available in local library paths.") +endif() + +find_package_handle_standard_args( + LibAJANTV2 + REQUIRED_VARS LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR + VERSION_VAR LibAJANTV2_VERSION REASON_FAILURE_MESSAGE LibAJANTV2_ERROR_REASON) +mark_as_advanced(LibAJANTV2_LIBRARY LibAJANTV2_INCLUDE_DIR) +unset(LibAJANTV2_ERROR_REASON) + +if(LibAJANTV2_FOUND) + list( + APPEND + LibAJANTV2_INCLUDE_DIRS + ${LibAJANTV2_INCLUDE_DIR}/ajalibraries + ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajaanc + ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajabase + ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajantv2 + ${LibAJANTV2_INCLUDE_DIR}/ajalibraries/ajantv2/includes) + set(LibAJANTV2_LIBRARIES ${LibAJANTV2_LIBRARY}) + mark_as_advanced(LibAJANTV2_INCLUDE_DIR LibAJANTV2_LIBRARY) + + if(NOT TARGET AJA::LibAJANTV2) + if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_RELEASE}") + add_library(AJA::LibAJANTV2 STATIC IMPORTED) + set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION "${LibAJANTV2_LIBRARY_RELEASE}") + else() + add_library(AJA::LibAJANTV2 INTERFACE IMPORTED) + set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME "${LibAJANTV2_LIBRARY_RELEASE}") + endif() + + set_target_properties( + AJA::LibAJANTV2 + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_LibAJANTV2_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIR}" + VERSION ${LibAJANTV2_VERSION} + IMPORTED_CONFIGURATIONS Release) + + if(LibAJANTV2_LIBRARY_DEBUG) + if(IS_ABSOLUTE "${LibAJANTV2_LIBRARY_DEBUG}") + set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LOCATION_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}") + else() + set_property(TARGET AJA::LibAJANTV2 PROPERTY IMPORTED_LIBNAME_DEBUG "${LibAJANTV2_LIBRARY_DEBUG}") + endif() + set_property( + TARGET AJA::LibAJANTV2 + APPEND + PROPERTY IMPORTED_CONFIGURATIONS Debug) + endif() + + set_target_properties(AJA::LibAJANTV2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LibAJANTV2_INCLUDE_DIRS}") + set_property( + TARGET AJA::LibAJANTV2 + APPEND + PROPERTY INTERFACE_COMPILE_DEFINITIONS "$<$:AJA_WINDOWS;_WINDOWS;WIN32;MSWindows>" + "$<$,$>:_DEBUG;_NDEBUG>" "$<$:AJAMac;AJA_MAC>" + "$<$:AJA_LINUX;AJALinux>") + endif() +endif() + +include(FeatureSummary) +set_package_properties( + LibAJANTV2 PROPERTIES + URL "https://www.aja.com" + DESCRIPTION + "AJA NTV2 SDK - AJA simplifies professional digital video workflows with a line of award-winning products designed and manufactured in Grass Valley, CA." +) diff --git a/cmake/finders/FindLibVLC.cmake b/cmake/finders/FindLibVLC.cmake new file mode 100644 index 00000000000000..5a17b7300f2d35 --- /dev/null +++ b/cmake/finders/FindLibVLC.cmake @@ -0,0 +1,111 @@ +#[=======================================================================[.rst +FindLibVLC +---------- + +FindModule for LibVLC and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``VLC::LibVLC``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``LibVLC_FOUND`` + True, if all required components and the core library were found. +``LibVLC_VERSION`` + Detected version of found LibVLC libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``LibVLC_LIBRARY`` + Path to the library component of LibVLC. +``LibVLC_INCLUDE_DIR`` + Directory containing ``libvlc.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_LibVLC QUIET libvlc) +endif() + +find_path( + LibVLC_INCLUDE_DIR + NAMES libvlc.h + HINTS ${PC_LibVLC_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + PATH_SUFFIXES vlc include/vlc include + DOC "LibVLC include directory") + +find_library( + LibVLC_LIBRARY + NAMES vlc libvlc + HINTS ${PC_LibVLC_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "LibVLC location") + +if(PC_LibVLC_VERSION VERSION_GREATER 0) + set(LibVLC_VERSION ${PC_LibVLC_VERSION}) +elseif(EXISTS "${LibVLC_INCLUDE_DIR}/libvlc_version.h") + file(STRINGS "${LibVLC_INCLUDE_DIR}/libvlc_version.h" _VERSION_STRING + REGEX "^.*LIBVLC_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*LIBVLC_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" VERSION_MAJOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*LIBVLC_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" VERSION_MINOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*LIBVLC_VERSION_REVISION[ \t]+([0-9]+).*" "\\1" VERSION_REVISION "${_VERSION_STRING}") + set(LibVLC_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}") +else() + if(NOT LibVLC_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find LibVLC version.") + endif() + set(LibVLC_VERSION 0.0.0) +endif() + +find_package_handle_standard_args( + LibVLC + REQUIRED_VARS LibVLC_LIBRARY LibVLC_INCLUDE_DIR + VERSION_VAR LibVLC_VERSION REASON_FAILURE_MESSAGE "Ensure that libvlc-dev (vlc on BSD) is installed on the system.") +mark_as_advanced(LibVLC_INCLUDE_DIR LibVLC_LIBRARY) + +if(LibVLC_FOUND) + if(NOT TARGET VLC::LibVLC) + if(IS_ABSOLUTE "${LibVLC_LIBRARY}") + add_library(VLC::LibVLC UNKNOWN IMPORTED) + set_property(TARGET VLC::LibVLC PROPERTY IMPORTED_LOCATION "${LibVLC_LIBRARY}") + else() + add_library(VLC::LibVLC INTERFACE IMPORTED) + set_property(TARGET VLC::LibVLC PROPERTY IMPORTED_LIBNAME "${LibVLC_LIBRARY}") + endif() + + set_target_properties( + VLC::LibVLC + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_LibVLC_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${LibVLC_INCLUDE_DIR}" + VERSION ${LibVLC_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + LibVLC PROPERTIES + URL "https://www.videolan.org/vlc/libvlc.html" + DESCRIPTION + "libVLC is the core engine and the interface to the multimedia framework on which VLC media player is based.") diff --git a/cmake/finders/FindLibrist.cmake b/cmake/finders/FindLibrist.cmake new file mode 100644 index 00000000000000..bfd89df3c0e82d --- /dev/null +++ b/cmake/finders/FindLibrist.cmake @@ -0,0 +1,142 @@ +#[=======================================================================[.rst +FindLibrist +---------- + +FindModule for Librist and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Librist::Librist``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Librist_FOUND`` + True, if all required components and the core library were found. +``Librist_VERSION`` + Detected version of found Librist libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Librist_LIBRARY`` + Path to the library component of Librist. +``Librist_INCLUDE_DIR`` + Directory containing ``librist.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Librist QUIET librist) +endif() + +# Librist_set_soname: Set SONAME on imported library target +macro(Librist_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Librist_LIBRARY}' | grep -v '${Librist_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET Librist::Librist PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Librist_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET Librist::Librist PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + Librist_INCLUDE_DIR + NAMES librist.h librist/librist.h + HINTS ${PC_Librist_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Librist include directory") + +if(PC_Librist_VERSION VERSION_GREATER 0) + set(Librist_VERSION ${PC_Librist_VERSION}) +elseif(EXISTS "${Librist_INCLUDE_DIR}/version.h") + file(STRINGS "${_VERSION_FILE}" _VERSION_STRING REGEX "^.*VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _VERSION_MAJOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _VERSION_MINOR "${_VERSION_STRING}") + string(REGEX REPLACE ".*VERSION_PATCH[ \t]+([0-9]+).*" "\\1" _VERSION_PATCH "${_VERSION_STRING}") + set(Librist_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}") +else() + if(NOT Librist_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Librist version.") + endif() + set(Librist_VERSION 0.0.0) +endif() + +find_library( + Librist_LIBRARY + NAMES librist rist + HINTS ${PC_Librist_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Librist location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Librist_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Librist_ERROR_REASON "Ensure librist libraries are available in local library paths.") +endif() + +find_package_handle_standard_args( + Librist + REQUIRED_VARS Librist_LIBRARY Librist_INCLUDE_DIR + VERSION_VAR Librist_VERSION REASON_FAILURE_MESSAGE "${Librist_ERROR_REASON}") +mark_as_advanced(Librist_INCLUDE_DIR Librist_LIBRARY) +unset(Librist_ERROR_REASON) + +if(Librist_FOUND) + if(NOT TARGET Librist::Librist) + if(IS_ABSOLUTE "${Librist_LIBRARY}") + add_library(Librist::Librist UNKNOWN IMPORTED) + set_property(TARGET Librist::Librist PROPERTY IMPORTED_LOCATION "${Librist_LIBRARY}") + else() + add_library(Librist::Librist INTERFACE IMPORTED) + set_property(TARGET Librist::Librist PROPERTY IMPORTED_LIBNAME "${Librist_LIBRARY}") + endif() + + librist_set_soname() + set_target_properties( + Librist::Librist + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Librist_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Librist_INCLUDE_DIR}" + VERSION ${Librist_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Librist PROPERTIES + URL "https://code.videolan.org/rist/librist" + DESCRIPTION "A library that can be used to easily add the RIST protocol to your application.") diff --git a/cmake/finders/FindLibrnnoise.cmake b/cmake/finders/FindLibrnnoise.cmake new file mode 100644 index 00000000000000..21424ec935b478 --- /dev/null +++ b/cmake/finders/FindLibrnnoise.cmake @@ -0,0 +1,137 @@ +#[=======================================================================[.rst +FindLibrnnoise +---------- + +FindModule for Librnnoise and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Librnnoise::Librnnoise``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Librnnoise_FOUND`` + True, if all required components and the core library were found. +``Librnnoise_VERSION`` + Detected version of found Librnnoise libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Librnnoise_LIBRARY`` + Path to the library component of Librnnoise. +``Librnnoise_INCLUDE_DIR`` + Directory containing ``rnnoise.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Librnnoise QUIET rnnoise) +endif() + +# librrnoise_set_soname: Set SONAME on imported library target +macro(librnnoise_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Librnnoise_LIBRARY}' | grep -v '${Librnnoise_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET Librnnoise::Librnnoise PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Librnnoise_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET Librnnoise::Librnnoise PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + Librnnoise_INCLUDE_DIR + NAMES rnnoise.h + HINTS ${PC_Librnnoise_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Librnnoise include directory") + +if(PC_Librnnoise_VERSION VERSION_GREATER 0) + set(Librnnoise_VERSION ${PC_Librnnoise_VERSION}) +else() + if(NOT Librnnoise_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Librnnoise version.") + endif() + set(Librnnoise_VERSION 0.0.0) +endif() + +find_library( + Librnnoise_LIBRARY + NAMES rnnoise librnnoise + HINTS ${PC_Librnnoise_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Librnnoise location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Librnnoise_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Librnnoise_ERROR_REASON "Ensure librnnoise libraries are available in local libary paths.") +endif() + +find_package_handle_standard_args( + Librnnoise + REQUIRED_VARS Librnnoise_LIBRARY Librnnoise_INCLUDE_DIR + VERSION_VAR Librnnoise_VERSION REASON_FAILURE_MESSAGE "${Librnnoise_ERROR_REASON}") +mark_as_advanced(Librnnoise_INCLUDE_DIR Librnnoise_LIBRARY) +unset(Librnnoise_ERROR_REASON) + +if(Librnnoise_FOUND) + if(NOT TARGET Librnnoise::Librnnoise) + if(IS_ABSOLUTE "${Librnnoise_LIBRARY}") + add_library(Librnnoise::Librnnoise UNKNOWN IMPORTED) + librnnoise_set_soname() + set_property(TARGET Librnnoise::Librnnoise PROPERTY IMPORTED_LOCATION "${Librnnoise_LIBRARY}") + else() + add_library(Librnnoise::Librnnoise INTERFACE IMPORTED) + set_property(TARGET Librnnoise::Librnnoise PROPERTY IMPORTED_LIBNAME "${Librnnoise_LIBRARY}") + endif() + + set_target_properties( + Librnnoise::Librnnoise + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Librnnoise_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Librnnoise_INCLUDE_DIR}" + VERSION ${Librnnoise_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Librnnoise PROPERTIES + URL "https://gitlab.xiph.org/xiph/rnnoise" + DESCRIPTION "Recurrent neural network for audio noise reduction.") diff --git a/cmake/finders/FindLibspeexdsp.cmake b/cmake/finders/FindLibspeexdsp.cmake new file mode 100644 index 00000000000000..14981f7d9b8c4c --- /dev/null +++ b/cmake/finders/FindLibspeexdsp.cmake @@ -0,0 +1,137 @@ +#[=======================================================================[.rst +FindLibspeexdsp +---------- + +FindModule for Libspeexdsp and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``SpeexDSP::Libspeexdsp``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Libspeexdsp_FOUND`` + True, if all required components and the core library were found. +``Libspeexdsp_VERSION`` + Detected version of found Libspeexdsp libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Libspeexdsp_LIBRARY`` + Path to the library component of Libspeexdsp. +``Libspeexdsp_INCLUDE_DIR`` + Directory containing ``speex/speex_preprocess.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Libspeexdsp QUIET speexdsp) +endif() + +# libspeexdsp_set_soname: Set SONAME on imported library target +macro(libspeexdsp_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Libspeexdsp_LIBRARY}' | grep -v '${Libspeexdsp_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET SpeexDSP::Libspeexdsp PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Libspeexdsp_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET SpeexDSP::Libspeexdsp PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + Libspeexdsp_INCLUDE_DIR + NAMES speex/speex_preprocess.h + HINTS ${PC_Libspeexdsp_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Libspeexdsp include directory") + +if(PC_Libspeexdsp_VERSION VERSION_GREATER 0) + set(Libspeexdsp_VERSION ${PC_Libspeexdsp_VERSION}) +else() + if(NOT Libspeexdsp_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Libspeexdsp version.") + endif() + set(Libspeexdsp_VERSION 0.0.0) +endif() + +find_library( + Libspeexdsp_LIBRARY + NAMES speexdsp libspeexdsp + HINTS ${PC_Libspeexdsp_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Libspeexdsp location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Libspeexdsp_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Libspeexdsp_ERROR_REASON "Ensure that libspeexdsp is installed on the system.") +endif() + +find_package_handle_standard_args( + Libspeexdsp + REQUIRED_VARS Libspeexdsp_LIBRARY Libspeexdsp_INCLUDE_DIR + VERSION_VAR Libspeexdsp_VERSION REASON_FAILURE_MESSAGE "${Libspeexdsp_ERROR_REASON}") +mark_as_advanced(Libspeexdsp_INCLUDE_DIR Libspeexdsp_LIBRARY) +unset(Libspeexdsp_ERROR_REASON) + +if(Libspeexdsp_FOUND) + if(NOT TARGET SpeexDSP::Libspeexdsp) + if(IS_ABSOLUTE "${Libspeexdsp_LIBRARY}") + add_library(SpeexDSP::Libspeexdsp UNKNOWN IMPORTED) + set_property(TARGET SpeexDSP::Libspeexdsp PROPERTY IMPORTED_LOCATION "${Libspeexdsp_LIBRARY}") + else() + add_library(SpeexDSP::Libspeexdsp INTERFACE IMPORTED) + set_property(TARGET SpeexDSP::Libspeexdsp PROPERTY IMPORTED_LIBNAME "${Libspeexdsp_LIBRARY}") + endif() + + libspeexdsp_set_soname() + set_target_properties( + SpeexDSP::Libspeexdsp + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Libspeexdsp_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Libspeexdsp_INCLUDE_DIR}" + VERSION ${Libspeexdsp_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Libspeexdsp PROPERTIES + URL "https://gitlab.xiph.org/xiph/speexdsp" + DESCRIPTION "DSP library derived from speex.") diff --git a/cmake/finders/FindLibsrt.cmake b/cmake/finders/FindLibsrt.cmake new file mode 100644 index 00000000000000..51413cf503f52f --- /dev/null +++ b/cmake/finders/FindLibsrt.cmake @@ -0,0 +1,139 @@ +#[=======================================================================[.rst +FindLibsrt +---------- + +FindModule for Libsrt and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Libsrt::Libsrt``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Libsrt_FOUND`` + True, if all required components and the core library were found. +``Libsrt_VERSION`` + Detected version of found Libsrt libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Libsrt_LIBRARY`` + Path to the library component of Libsrt. +``Libsrt_INCLUDE_DIR`` + Directory containing ``srt.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Libsrt QUIET libsrt) +endif() + +# libsrt_set_soname: Set SONAME on imported library target +macro(libsrt_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Libsrt_LIBRARY}' | grep -v '${Libsrt_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET Libsrt::Libsrt PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Libsrt_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET Libsrt::Libsrt PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + Libsrt_INCLUDE_DIR + NAMES srt.h srt/srt.h + HINTS ${PC_Libsrt_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Libsrt include directory") + +if(PC_Libsrt_VERSION VERSION_GREATER 0) + set(Libsrt_VERSION ${PC_Libsrt_VERSION}) +elseif(EXISTS "${Libsrt_INCLUDE_DIR}/version.h") + file(STRINGS "${Libsrt_INCLUDE_DIR}/version.h" _VERSION_STRING REGEX "#define[ \t]+SRT_VERSION_STRING[ \t]+.+") + string(REGEX REPLACE ".*#define[ \t]+SRT_VERSION_STRING[ \t]+\"(.+)\".*" "\\1" Libsrt_VERSION "${_VERSION_STRING}") +else() + if(NOT Libsrt_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Libsrt version.") + endif() + set(Libsrt_VERSION 0.0.0) +endif() + +find_library( + Libsrt_LIBRARY + NAMES srt libsrt + HINTS ${PC_Libsrt_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Libsrt location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Libsrt_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Libsrt_ERROR_REASON "Ensure libsrt libraries are available in local library paths.") +endif() + +find_package_handle_standard_args( + Libsrt + REQUIRED_VARS Libsrt_LIBRARY Libsrt_INCLUDE_DIR + VERSION_VAR Libsrt_VERSION REASON_FAILURE_MESSAGE "${Libsrt_ERROR_REASON}") +mark_as_advanced(Libsrt_INCLUDE_DIR Libsrt_LIBRARY) +unset(Libsrt_ERROR_REASON) + +if(Libsrt_FOUND) + if(NOT TARGET Libsrt::Libsrt) + if(IS_ABSOLUTE "${Libsrt_LIBRARY}") + add_library(Libsrt::Libsrt UNKNOWN IMPORTED) + libsrt_set_soname() + set_property(TARGET Libsrt::Libsrt PROPERTY IMPORTED_LOCATION "${Libsrt_LIBRARY}") + else() + add_library(Libsrt::Libsrt INTERFACE IMPORTED) + set_property(TARGET Libsrt::Libsrt PROPERTY IMPORTED_LIBNAME "${Libsrt_LIBRARY}") + endif() + + set_target_properties(Libsrt::Libsrt PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Libsrt_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Libsrt_INCLUDE_DIR}") + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Libsrt PROPERTIES + URL "https://www.srtalliance.org" + DESCRIPTION + "Secure Reliable Transport (SRT) is a transport protocol for ultra low (sub-second) latency live video and audio streaming, as well as for generic bulk data transfer." +) diff --git a/cmake/finders/FindLibx264.cmake b/cmake/finders/FindLibx264.cmake new file mode 100644 index 00000000000000..123a3265324c0e --- /dev/null +++ b/cmake/finders/FindLibx264.cmake @@ -0,0 +1,182 @@ +#[=======================================================================[.rst +FindLibx264 +---------- + +FindModule for Libx264 and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Libx264::Libx264``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Libx264_FOUND`` + True, if all required components and the core library were found. +``Libx264_VERSION`` + Detected version of found Libx264 libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Libx264_LIBRARY`` + Path to the library component of Libx264. +``Libx264_INCLUDE_DIR`` + Directory containing ``x264.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Libx264 QUIET x264) +endif() + +# Libx264_set_soname: Set SONAME on imported library target +macro(Libx264_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Libx264_LIBRARY}' | grep -v '${Libx264_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET Libx264::Libx264 PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Libx264_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET Libx264::Libx264 PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +# Libx264_find_dll: Find DLL for corresponding import library +macro(Libx264_find_dll) + cmake_path(GET Libx264_IMPLIB PARENT_PATH _implib_path) + cmake_path(SET _bin_path NORMALIZE "${_implib_path}/../bin") + + string(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" _dll_version "${Libx264_VERSION}") + + find_program( + Libx264_LIBRARY + NAMES libx264-${_dll_version}.dll x264-${_dll_version}.dll libx264.dll x264.dll + HINTS ${_implib_path} ${_bin_path} + DOC "Libx264 DLL location") + + if(NOT Libx264_LIBRARY) + set(Libx264_LIBRARY "${Libx264_IMPLIB}") + endif() + unset(_implib_path) + unset(_bin_path) + unset(_dll_version) +endmacro() + +find_path( + Libx264_INCLUDE_DIR + NAMES x264.h + HINTS ${PC_Libx264_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + DOC "Libx264 include directory") + +if(PC_Libx264_VERSION VERSION_GREATER 0) + set(Libx264_VERSION ${PC_Libx264_VERSION}) +elseif(EXISTS "${Libx264_INCLUDE_DIR}/x264_config.h") + file(STRINGS "${Libx264_INCLUDE_DIR}/x264_config.h" _VERSION_STRING REGEX "#define[ \t]+X264_POINTVER[ \t]+.+") + string(REGEX REPLACE ".*#define[ \t]+X264_POINTVER[ \t]+\"(.+)[ \t]+.+\".*" "\\1" Libx264_VERSION + "${_VERSION_STRING}") +else() + if(NOT Libx264_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Libx264 version.") + endif() + set(Libx264_VERSION 0.0.0) +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + find_library( + Libx264_IMPLIB + NAMES x264 libx264 + DOC "Libx264 import library location") + + libx264_find_dll() +else() + find_library( + Libx264_LIBRARY + NAMES x264 libx264 + HINTS ${PC_Libx264_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Libx264 location") +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Libx264_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Libx264_ERROR_REASON "Ensure that x264 is installed on the system.") +endif() + +find_package_handle_standard_args( + Libx264 + REQUIRED_VARS Libx264_LIBRARY Libx264_INCLUDE_DIR + VERSION_VAR Libx264_VERSION REASON_FAILURE_MESSAGE "${Libx264_ERROR_REASON}") +mark_as_advanced(Libx264_INCLUDE_DIR Libx264_LIBRARY Libx264_IMPLIB) +unset(Libx264_ERROR_REASON) + +if(Libx264_FOUND) + if(NOT TARGET Libx264::Libx264) + if(IS_ABSOLUTE "${Libx264_LIBRARY}") + if(DEFINED Libx264_IMPLIB) + if(Libx264_IMPLIB STREQUAL Libx264_LIBRARY) + add_library(Libx264::Libx264 STATIC IMPORTED) + else() + add_library(Libx264::Libx264 SHARED IMPORTED) + set_property(TARGET Libx264::Libx264 PROPERTY IMPORTED_IMPLIB "${Libx264_IMPLIB}") + endif() + else() + add_library(Libx264::Libx264 UNKNOWN IMPORTED) + endif() + set_property(TARGET Libx264::Libx264 PROPERTY IMPORTED_LOCATION "${Libx264_LIBRARY}") + else() + add_library(Libx264::Libx264 INTERFACE IMPORTED) + set_property(TARGET Libx264::Libx264 PROPERTY IMPORTED_LIBNAME "${Libx264_LIBRARY}") + endif() + + libx264_set_soname() + set_target_properties( + Libx264::Libx264 + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Libx264_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Libx264_INCLUDE_DIR}" + VERSION ${Libx264_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Libx264 PROPERTIES + URL "https://www.videolan.org/developers/x264.html" + DESCRIPTION + "x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format." +) diff --git a/cmake/finders/FindLuajit.cmake b/cmake/finders/FindLuajit.cmake new file mode 100644 index 00000000000000..a329dddb3ebb31 --- /dev/null +++ b/cmake/finders/FindLuajit.cmake @@ -0,0 +1,139 @@ +#[=======================================================================[.rst +FindLuajit +---------- + +FindModule for Luajit and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``Luajit::Luajit``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``Luajit_FOUND`` + True, if all required components and the core library were found. +``Luajit_VERSION`` + Detected version of found Luajit libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Luajit_LIBRARY`` + Path to the library component of Luajit. +``Luajit_INCLUDE_DIR`` + Directory containing ``luajit.h`` or ``lua.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_Luajit QUIET luajit) +endif() + +# Luajit_set_soname: Set SONAME on imported library target +macro(Luajit_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Luajit_LIBRARY}' | grep -v '${Luajit_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET Luajit::Luajit PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Luajit_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET Luajit::Luajit PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + Luajit_INCLUDE_DIR + NAMES lua.h luajit.h + HINTS ${PC_Luajit_INCLUDE_DIRS} + PATHS /usr/include /usr/local/include + PATH_SUFFIXES luajit-2.1 luajit + DOC "Luajit include directory") + +if(PC_Luajit_VERSION VERSION_GREATER 0) + set(Luajit_VERSION ${PC_Luajit_VERSION}) +elseif(EXISTS "${Luajit_INCLUDE_DIR}/lua.h") + file(STRINGS "${Luajit_INCLUDE_DIR}/lua.h" _VERSION_STRING REGEX "#define[ \t]+LUA_RELEASE[ \t]+.+") + string(REGEX REPLACE ".*#define[ \t]+LUA_RELEASE[ \t]+\"Lua (.+)\".*" "\\1" Luajit_VERSION "${_VERSION_STRING}") +else() + if(NOT Luajit_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find Luajit version.") + endif() +endif() + +find_library( + Luajit_LIBRARY + NAMES luajit luajit-51 luajit-5.1 lua51 + HINTS ${PC_Luajit_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "Luajit location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(Luajit_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(Luajit_ERROR_REASON "Ensure that LuaJIT is installed on the system.") +endif() + +find_package_handle_standard_args( + Luajit + REQUIRED_VARS Luajit_LIBRARY Luajit_INCLUDE_DIR + VERSION_VAR Luajit_VERSION REASON_FAILURE_MESSAGE "${Luajit_ERROR_REASON}") +mark_as_advanced(Luajit_INCLUDE_DIR Luajit_LIBRARY) +unset(Luajit_ERROR_REASON) + +if(Luajit_FOUND) + if(NOT TARGET Luajit::Luajit) + if(IS_ABSOLUTE "${Luajit_LIBRARY}") + add_library(Luajit::Luajit UNKNOWN IMPORTED) + set_property(TARGET Luajit::Luajit PROPERTY IMPORTED_LOCATION "${Luajit_LIBRARY}") + else() + add_library(Luajit::Luajit INTERFACE IMPORTED) + set_property(TARGET Luajit::Luajit PROPERTY IMPORTED_LIBNAME "${Luajit_LIBRARY}") + endif() + + luajit_set_soname() + set_target_properties( + Luajit::Luajit + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_Luajit_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Luajit_INCLUDE_DIR}" + VERSION ${Luajit_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + Luajit PROPERTIES + URL "https://luajit.org/luajit.html" + DESCRIPTION "LuaJIT is a Just-In-Time Compiler (JIT) for the Lua programming language.") diff --git a/cmake/finders/FindMbedTLS.cmake b/cmake/finders/FindMbedTLS.cmake new file mode 100644 index 00000000000000..26a2a17e06c96e --- /dev/null +++ b/cmake/finders/FindMbedTLS.cmake @@ -0,0 +1,215 @@ +#[=======================================================================[.rst +FindMbedTLS +----------- + +FindModule for MbedTLS and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Components +^^^^^^^^^^ + +.. versionadded:: 1.0 + +This module contains provides several components: + +``MbedCrypto`` +``MbedTLS`` +``MbedX509`` + +Import targets exist for each component. + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` targets: + +``MbedTLS::MbedCrypto`` + Crypto component + +``MbedTLS::MbedTLS`` + TLS component + +``MbedTLS::MbedX509`` + X509 component + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``MbedTLS_FOUND`` + True, if all required components and the core library were found. +``MbedTLS_VERSION`` + Detected version of found MbedTLS libraries. + +``MbedTLS__VERSION`` + Detected version of found MbedTLS component library. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``MbedTLS__LIBRARY`` + Path to the library component of MbedTLS. +``MbedTLS__INCLUDE_DIR`` + Directory containing ``.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-lint: disable=C0301 +# cmake-lint: disable=C0307 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_check_modules(PC_MbedTLS QUIET mbedtls mbedcrypto mbedx509) +endif() + +# MbedTLS_set_soname: Set SONAME on imported library targets +macro(MbedTLS_set_soname component) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${Mbed${component}_LIBRARY}' | grep -v '${Mbed${component}_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET MbedTLS::Mbed${component} PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${Mbed${component}_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET MbedTLS::Mbed${component} PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + MbedTLS_INCLUDE_DIR + NAMES mbedtls/ssl.h + HINTS "${PC_MbedTLS_INCLUDE_DIRS}" + PATHS /usr/include /usr/local/include + DOC "MbedTLS include directory") + +if(PC_MbedTLS_VERSION VERSION_GREATER 0) + set(MbedTLS_VERSION ${PC_MbedTLS_VERSION}) +elseif(EXISTS "${MbedTLS_INCLUDE_DIR}/mbedtls/build_info.h") + file(STRINGS "${MbedTLS_INCLUDE_DIR}/mbedtls/build_info.h" _VERSION_STRING + REGEX "#define[ \t]+MBEDTLS_VERSION_STRING[ \t]+.+") + string(REGEX REPLACE ".*#define[ \t]+MBEDTLS_VERSION_STRING[ \t]+\"(.+)\".*" "\\1" MbedTLS_VERSION + "${_VERSION_STRING}") +else() + if(NOT MbedTLS_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find MbedTLS version.") + endif() + set(MbedTLS_VERSION 0.0.0) +endif() + +find_library( + MbedTLS_LIBRARY + NAMES libmbedtls mbedtls + HINTS "${PC_MbedTLS_LIBRARY_DIRS}" + PATHS /usr/lib /usr/local/lib + DOC "MbedTLS location") + +find_library( + MbedCrypto_LIBRARY + NAMES libmbedcrypto mbedcrypto + HINTS "${PC_MbedTLS_LIBRARY_DIRS}" + PATHS /usr/lib /usr/local/lib + DOC "MbedCrypto location") + +find_library( + MbedX509_LIBRARY + NAMES libmbedx509 mbedx509 + HINTS "${PC_MbedTLS_LIBRARY_DIRS}" + PATHS /usr/lib /usr/local/lib + DOC "MbedX509 location") + +if(MbedTLS_LIBRARY + AND NOT MbedCrypto_LIBRARY + AND NOT MbedX509_LIBRARY) + set(CMAKE_REQUIRED_LIBRARIES "${MbedTLS_LIBRARY}") + set(CMAKE_REQUIRED_INCLUDES "${MbedTLS_INCLUDE_DIR}") + + check_symbol_exists(mbedtls_x509_crt_init "mbedtls/x590_crt.h" MbedTLS_INCLUDES_X509) + check_symbol_exists(mbedtls_sha256_init "mbedtls/sha256.h" MbedTLS_INCLUDES_CRYPTO) + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_REQUIRED_INCLUDES) +endif() + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(MbedTLS_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(MbedTLS_ERROR_REASON "Ensure that MbedTLS is installed on the system.") +endif() + +if(MbedTLS_INCLUDES_X509 AND MbedTLS_INCLUDES_CRYPTO) + find_package_handle_standard_args( + MbedTLS + REQUIRED_VARS MbedTLS_LIBRARY MbedTLS_INCLUDE_DIR + VERSION_VAR MbedTLS_VERSION REASON_FAILURE_MESSAGE "${MbedTLS_ERROR_REASON}") + mark_as_advanced(MbedTLS_LIBRARY MbedTLS_INCLUDE_DIR) + list(APPEND _COMPONENTS TLS) +else() + find_package_handle_standard_args( + MbedTLS + REQUIRED_VARS MbedTLS_LIBRARY MbedCrypto_LIBRARY MbedX509_LIBRARY MbedTLS_INCLUDE_DIR + VERSION_VAR MbedTLS_VERSION REASON_FAILURE_MESSAGE "${MbedTLS_ERROR_REASON}") + mark_as_advanced(MbedTLS_LIBRARY MbedCrypto_LIBRARY MbedX509_LIBRARY MbedTLS_INCLUDE_DIR) + list(APPEND _COMPONENTS TLS Crypto X509) +endif() +unset(MbedTLS_ERROR_REASON) + +if(MbedTLS_FOUND) + foreach(component IN LISTS _COMPONENTS) + if(NOT TARGET MbedTLS::Mbed${component}) + if(IS_ABSOLUTE "${Mbed${component}_LIBRARY}") + add_library(MbedTLS::Mbed${component} UNKNOWN IMPORTED) + set_property(TARGET MbedTLS::Mbed${component} PROPERTY IMPORTED_LOCATION "${Mbed${component}_LIBRARY}") + else() + add_library(MbedTLS::Mbed${component} INTERFACE IMPORTED) + set_property(TARGET MbedTLS::Mbed${component} PROPERTY IMPORTED_LIBNAME "${Mbed${component}_LIBRARY}") + endif() + + mbedtls_set_soname(${component}) + set_target_properties( + MbedTLS::MbedTLS + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_MbedTLS_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${MbedTLS_INCLUDE_DIR}" + VERSION ${MbedTLS_VERSION}) + endif() + endforeach() + + if(MbedTLS_INCLUDES_X509 AND MbedTLS_INCLUDES_CRYPTO) + set(MbedTLS_LIBRARIES ${MbedTLS_LIBRARY}) + else() + set(MbedTLS_LIBRARIES ${MbedTLS_LIBRARY} ${MbedCrypto_LIBRARY} ${MbedX509_LIBRARY}) + set_property(TARGET MbedTLS::MbedTLS PROPERTY INTERFACE_LINK_LIBRARIES MbedTLS::MbedCrypto MbedTLS::MbedX509) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + MbedTLS PROPERTIES + URL "https://www.trustedfirmware.org/projects/mbed-tls" + DESCRIPTION + "A C library implementing cryptographic primitives, X.509 certificate manipulation, and the SSL/TLS and DTLS protocols." +) diff --git a/cmake/finders/Findjansson.cmake b/cmake/finders/Findjansson.cmake new file mode 100644 index 00000000000000..07d6c8918b63c9 --- /dev/null +++ b/cmake/finders/Findjansson.cmake @@ -0,0 +1,140 @@ +#[=======================================================================[.rst +Findjansson +---------- + +FindModule for jansson and associated libraries + +.. versionchanged:: 3.0 + Updated FindModule to CMake standards + +Imported Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 2.0 + +This module defines the :prop_tgt:`IMPORTED` target ``jansson::jansson``. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``jansson_FOUND`` + True, if all required components and the core library were found. +``jansson_VERSION`` + Detected version of found jansson libraries. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``jansson_LIBRARY`` + Path to the library component of jansson. +``jansson_INCLUDE_DIR`` + Directory containing ``jansson.h``. + +#]=======================================================================] + +# cmake-format: off +# cmake-lint: disable=C0103 +# cmake-format: on + +include(FindPackageHandleStandardArgs) + +find_package(PkgConfig QUIET) +if(PKG_CONFIG_FOUND) + pkg_search_module(PC_jansson QUIET jansson) +endif() + +# jansson_set_soname: Set SONAME on imported library targets +macro(jansson_set_soname) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + execute_process( + COMMAND sh -c "otool -D '${jansson_LIBRARY}' | grep -v '${jansson_LIBRARY}'" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0 AND _output MATCHES "^@rpath/") + set_property(TARGET jansson::jansson PROPERTY IMPORTED_SONAME "${_output}") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + execute_process( + COMMAND sh -c "objdump -p '${jansson_LIBRARY}' | grep SONAME" + OUTPUT_VARIABLE _output + RESULT_VARIABLE _result) + + if(_result EQUAL 0) + string(REGEX REPLACE "[ \t]+SONAME[ \t]+([^ \t]+)" "\\1" _soname "${_output}") + set_property(TARGET jansson::jansson PROPERTY IMPORTED_SONAME "${_soname}") + unset(_soname) + endif() + endif() + unset(_output) + unset(_result) +endmacro() + +find_path( + jansson_INCLUDE_DIR + NAMES jansson.h + HINTS ${PC_jansson_INCLUDE_DIR} + PATHS /usr/include /usr/local/include + PATH_SUFFIXES jansson-2.1 + DOC "jansson include directory") + +if(PC_jansson_VERSION VERSION_GREATER 0) + set(jansson_VERSION ${PC_jansson_VERSION}) +elseif(EXISTS "${jansson_INCLUDE_DIR}/jansson.h") + file(STRINGS "${jansson_INCLUDE_DIR}/jansson.h" _VERSION_STRING REGEX "#define[ \t]+JANSSON_VERSION[ \t]+.+") + string(REGEX REPLACE ".*#define[ \t]+JANSSON_VERSION[ \t]+\"(.+)\".*" "\\1" jansson_VERSION "${_VERSION_STRING}") +else() + if(NOT jansson_FIND_QUIETLY) + message(AUTHOR_WARNING "Failed to find jansson version.") + endif() + set(jansson_VERSION 0.0.0) +endif() + +find_library( + jansson_LIBRARY + NAMES jansson + HINTS ${PC_jansson_LIBRARY_DIRS} + PATHS /usr/lib /usr/local/lib + DOC "jansson location") + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin|Windows") + set(jansson_ERROR_REASON "Ensure that obs-deps is provided as part of CMAKE_PREFIX_PATH.") +elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux|FreeBSD") + set(jansson_ERROR_REASON "Ensure that jansson is installed on the system.") +endif() + +find_package_handle_standard_args( + jansson + REQUIRED_VARS jansson_LIBRARY jansson_INCLUDE_DIR + VERSION_VAR jansson_VERSION REASON_FAILURE_MESSAGE "${jansson_ERROR_REASON}") +mark_as_advanced(jansson_INCLUDE_DIR jansson_LIBRARY) +unset(jansson_ERROR_REASON) + +if(jansson_FOUND) + if(NOT TARGET jansson::jansson) + if(IS_ABSOLUTE "${jansson_LIBRARY}") + add_library(jansson::jansson UNKNOWN IMPORTED) + set_property(TARGET jansson::jansson PROPERTY IMPORTED_LOCATION "${jansson_LIBRARY}") + else() + add_library(jansson::jansson INTERFACE IMPORTED) + set_property(TARGET jansson::jansson PROPERTY IMPORTED_LIBNAME "${jansson_LIBRARY}") + endif() + + jansson_set_soname() + set_target_properties( + jansson::jansson + PROPERTIES INTERFACE_COMPILE_OPTIONS "${PC_jansson_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${jansson_INCLUDE_DIR}" + VERSION ${jansson_VERSION}) + endif() +endif() + +include(FeatureSummary) +set_package_properties( + jansson PROPERTIES + URL "https://www.digip.org/jansson/" + DESCRIPTION "A C library for encoding, decoding, and manipulating JSON data.") From bbeea0972a3d8a7d1b4c62754010e2e1a0f1e869 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Wed, 22 Mar 2023 17:47:22 +0100 Subject: [PATCH 0498/2225] cmake: Add Xcode component to CMake build framework 3.0 Adds necessary macOS-specific implementation of the framework, focusing on native Xcode builds. --- .swift-format | 12 + buildspec.json | 74 ++++ cmake/macos/.cmake-format.json | 41 ++ cmake/macos/buildspec.cmake | 193 ++++++++++ cmake/macos/compilerconfig.cmake | 66 ++++ cmake/macos/cpackconfig.cmake | 49 +++ cmake/macos/defaults.cmake | 96 +++++ cmake/macos/helpers.cmake | 371 +++++++++++++++++++ cmake/macos/resources/AppIcon.icns | Bin 0 -> 3728958 bytes cmake/macos/resources/background.tiff | Bin 0 -> 40870 bytes cmake/macos/resources/ccache-launcher-c.in | 13 + cmake/macos/resources/ccache-launcher-cxx.in | 13 + cmake/macos/resources/package.applescript.in | 66 ++++ cmake/macos/simd.cmake | 7 + cmake/macos/xcode.cmake | 134 +++++++ 15 files changed, 1135 insertions(+) create mode 100644 .swift-format create mode 100644 buildspec.json create mode 100644 cmake/macos/.cmake-format.json create mode 100644 cmake/macos/buildspec.cmake create mode 100644 cmake/macos/compilerconfig.cmake create mode 100644 cmake/macos/cpackconfig.cmake create mode 100644 cmake/macos/defaults.cmake create mode 100644 cmake/macos/helpers.cmake create mode 100644 cmake/macos/resources/AppIcon.icns create mode 100644 cmake/macos/resources/background.tiff create mode 100644 cmake/macos/resources/ccache-launcher-c.in create mode 100644 cmake/macos/resources/ccache-launcher-cxx.in create mode 100644 cmake/macos/resources/package.applescript.in create mode 100644 cmake/macos/simd.cmake create mode 100644 cmake/macos/xcode.cmake diff --git a/.swift-format b/.swift-format new file mode 100644 index 00000000000000..d09b0d3e8903fa --- /dev/null +++ b/.swift-format @@ -0,0 +1,12 @@ +{ + "version": 1, + "lineLength": 120, + "indentation": { + "spaces": 4 + }, + "tabWidth": 4, + "maximumBlankLines": 1, + "respectsExistingLineBreaks": true, + "lineBreakBeforeControlFlowKeywords": false, + "lineBreakBeforeEachArgument": false +} diff --git a/buildspec.json b/buildspec.json new file mode 100644 index 00000000000000..091f5c5eeb574f --- /dev/null +++ b/buildspec.json @@ -0,0 +1,74 @@ +{ + "dependencies": { + "prebuilt": { + "version": "2023-03-20", + "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", + "label": "Pre-Built obs-deps", + "hashes": { + "macos-x86_64": "bd4d3866c2e4b630410ff29b3f31a2553844af60b30fa0306d35d80a70f903ba", + "macos-arm64": "90078e2141818a37def7ebdceb3dcde71dc4adc1ce81d6e31ba21916f85c77bf", + "macos-universal": "a1c7f38701e0b6c0bd4224d3ab1a7b54d8eaf592dcee3223ce94404dc6787595", + "windows-x64": "79b259f65a0be9726b80b35ab86c07a1d5dc333bd3ef1391f6a0168ea6d28828", + "linux-x86_64": "36af10f49491193185dc1a115a29de31f9f2f4f7c01e4ebfe8a81b8094cd12f4" + } + }, + "qt6": { + "version": "2023-03-20", + "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", + "label": "Pre-Built Qt6", + "hashes": { + "macos-x86_64": "8f5e1a865310898635d34b92e6d93c99c62f39289a17d6db140e776ba9b2e455", + "macos-arm64": "0011e2395afbb02aaa5e8641c4486680e30decc60e063ca5a73d6faf3649e723", + "macos-universal": "5bcbb8fee4b70a26912e04a62960c615153828eac66b9f0bcb0b30529193ca6e", + "windows-x64": "e52feb06203c043929e271acc3a8d1b2e959c26d8426c4a1fb6c7337fee4e5c8" + }, + "debugSymbols": { + "windows-x64": "ae16477980e1bc602f244923f6e75c214311df286981211ee29a67ac060d4389" + } + }, + "cef": { + "version": "5060", + "baseUrl": "https://cdn-fastly.obsproject.com/downloads", + "label": "Chromium Embedded Framework", + "hashes": { + "macos-x86_64": "7ef71717ff2e4ff4212274c33f0993729f47c109c464e499544fd3f63586a069", + "macos-arm64": "a9da8909202aefc8f35509d03eff9a7c837b5d3b2ed3afb39b67121cb16d457b", + "linux-x86_64": "bf4aa9388bab7e94fa945cc3bba16b6da63b6a30f9c0342d42235468b39d84bf", + "linux-aarch64": "68d915c9ba2639cba762a54cd3430fce2527aa6355d831d3cfcb6157664206b0", + "windows-x64": "c1b47beb7ee42e98f1a41b6d694c26842a4a3d452e44bdf6f758c9785696533d" + }, + "revision": { + "macos-x86_64": 2, + "macos-arm64": 2 + } + }, + "vlc": { + "version": "3.0.8", + "baseUrl": "https://downloads.videolan.org/vlc", + "label": "VLC", + "hashes": { + "windows-x64": "91f589ef69fce51645a3ecbb215b405c98db7b891479474ec3b5ed3b63c25e4a" + } + } + }, + "platformConfig": { + "macos-x86_64": { + "qtVersion": 6, + "deploymentTarget": "11.0", + "buildTarget": "11.0" + }, + "macos-arm64": { + "qtVersion": 6, + "deploymentTarget": "11.0", + "buildTarget": "11.0" + }, + "windows-x64": { + "qtVersion": 6 + }, + "linux-x86_64": { + "qtVersion": 6, + "generator": "Ninja" + } + }, + "name": "obs-studio" +} diff --git a/cmake/macos/.cmake-format.json b/cmake/macos/.cmake-format.json new file mode 100644 index 00000000000000..75fd03ad3a5092 --- /dev/null +++ b/cmake/macos/.cmake-format.json @@ -0,0 +1,41 @@ +{ + "format": { + "line_width": 120, + "tab_size": 2, + "dangle_parens": false, + "enable_sort": true, + "autosort": true + }, + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + }, + "set_target_properties_obs": { + "pargs": 1, + "flags": [], + "kwargs": { + "PROPERTIES": { + "kwargs": { + "PREFIX": 1, + "OUTPUT_NAME": 1, + "FOLDER": 1, + "VERSION": 1, + "SOVERSION": 1, + "FRAMEWORK": 1, + "BUNDLE": 1, + "AUTOMOC": 1, + "AUTOUIC": 1, + "AUTORCC": 1, + "AUTOUIC_SEARCH_PATHS": 1 + } + } + } + } + } +} diff --git a/cmake/macos/buildspec.cmake b/cmake/macos/buildspec.cmake new file mode 100644 index 00000000000000..3aa2a4efd6d8a1 --- /dev/null +++ b/cmake/macos/buildspec.cmake @@ -0,0 +1,193 @@ +# OBS CMake macOS build dependencies module + +# cmake-format: off +# cmake-lint: disable=E1126 +# cmake-lint: disable=R0912 +# cmake-lint: disable=R0915 +# cmake-format: on + +# _check_deps_version: Checks for obs-deps VERSION file in prefix paths +macro(_check_deps_version version) + set(found FALSE) + + foreach(path IN LISTS CMAKE_PREFIX_PATH) + if(EXISTS "${path}/share/obs-deps/VERSION") + if(dependency STREQUAL qt6 AND NOT EXISTS "${path}/lib/cmake/Qt6/Qt6Config.cmake") + set(found FALSE) + break() + endif() + + file(READ "${path}/share/obs-deps/VERSION" _check_version) + string(REPLACE "\n" "" _check_version "${_check_version}") + + if(_check_version VERSION_EQUAL version) + set(found TRUE) + break() + elseif(_check_version VERSION_LESS version) + message(AUTHOR_WARNING "Outdated ${label} version detected in ${path}: \n" + "Found ${_check_version}, require ${version}") + list(REMOVE_ITEM CMAKE_PREFIX_PATH "${path}") + list(APPEND CMAKE_PREFIX_PATH "${path}") + continue() + else() + message(AUTHOR_WARNING "Future ${label} version detected in ${path}: \n" + "Found ${_check_version}, require ${version}") + set(found TRUE) + break() + endif() + endif() + endforeach() +endmacro() + +# _check_dependencies: Fetch and extract pre-built OBS build dependencies +function(_check_dependencies) + if(CMAKE_OSX_ARCHITECTURES MATCHES ".+;.+") + set(arch universal) + else() + set(arch ${CMAKE_OSX_ARCHITECTURES}) + endif() + + file(READ "${CMAKE_CURRENT_SOURCE_DIR}/buildspec.json" buildspec) + + # cmake-format: off + string(JSON deployment_target GET ${buildspec} platformConfig macos-${arch} deploymentTarget) + string(JSON dependency_data GET ${buildspec} dependencies) + # cmake-format: on + + if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET + ${_deployment_target} + CACHE STRING "Minimum macOS version to target for deployment (at runtime). Newer APIs will be weak-linked." + FORCE) + endif() + + set(dependencies_dir "${CMAKE_CURRENT_SOURCE_DIR}/.deps") + set(prebuilt_filename "macos-deps-VERSION-ARCH-REVISION.tar.xz") + set(prebuilt_destination "obs-deps-VERSION-ARCH") + set(qt6_filename "macos-deps-qt6-VERSION-ARCH-REVISION.tar.xz") + set(qt6_destination "obs-deps-qt6-VERSION-ARCH") + set(cef_filename "cef_binary_VERSION_macos_ARCH_REVISION.tar.xz") + set(cef_destination "cef_binary_VERSION_macos_ARCH") + + foreach(dependency IN ITEMS prebuilt qt6 cef) + # cmake-format: off + string(JSON data GET ${dependency_data} ${dependency}) + string(JSON version GET ${data} version) + string(JSON hash GET ${data} hashes macos-${arch}) + string(JSON url GET ${data} baseUrl) + string(JSON label GET ${data} label) + string(JSON revision ERROR_VARIABLE error GET ${data} revision macos-${arch}) + # cmake-format: on + + message(STATUS "Setting up ${label}") + + set(file "${${dependency}_filename}") + set(destination "${${dependency}_destination}") + string(REPLACE "VERSION" "${version}" file "${file}") + string(REPLACE "VERSION" "${version}" destination "${destination}") + string(REPLACE "ARCH" "${arch}" file "${file}") + string(REPLACE "ARCH" "${arch}" destination "${destination}") + if(revision) + string(REPLACE "_REVISION" "_v${revision}" file "${file}") + string(REPLACE "-REVISION" "-v${revision}" file "${file}") + else() + string(REPLACE "_REVISION" "" file "${file}") + string(REPLACE "-REVISION" "" file "${file}") + endif() + + set(skip FALSE) + if(dependency STREQUAL prebuilt OR dependency STREQUAL qt6) + _check_deps_version(${version}) + + if(found) + set(skip TRUE) + endif() + elseif(_dependency STREQUAL sparkle) + find_library(SPARKLE Sparkle) + + if(NOT ENABLE_SPARKLE OR SPARKLE) + set(skip TRUE) + else() + unset(SPARKLE CACHE) + endif() + elseif(dependency STREQUAL vlc) + if(NOT ENABLE_VLC OR (VLC_PATH AND EXISTS "${VLC_PATH}")) + set(skip TRUE) + endif() + elseif(dependency STREQUAL cef) + if(NOT ENABLE_BROWSER OR (CEF_ROOT_DIR AND EXISTS "${CEF_ROOT_DIR}")) + set(skip TRUE) + endif() + endif() + + if(skip) + message(STATUS "Setting up ${label} - skipped") + continue() + endif() + + if(dependency STREQUAL qt6 AND "$ENV{CI}") + # cmake-format: off + string(JSON hash GET ${buildspec} dependencies qt6 hashes macos-universal) + # cmake-format: on + string(REPLACE "${arch}" "universal" file "${file}") + endif() + + if(dependency STREQUAL cef) + set(url ${url}/${file}) + else() + set(url ${url}/${version}/${file}) + endif() + + if(NOT EXISTS "${dependencies_dir}/${file}") + message(STATUS "Downloading ${url}") + file( + DOWNLOAD "${url}" "${dependencies_dir}/${file}" + STATUS download_status + EXPECTED_HASH SHA256=${hash}) + + list(GET download_status 0 error_code) + list(GET download_status 1 error_message) + if(error_code GREATER 0) + message(STATUS "Downloading ${url} - Failure") + message(FATAL_ERROR "Unable to download ${url}, failed with error: ${error_message}") + file(REMOVE "${dependencies_dir}/${file}") + else() + message(STATUS "Downloading ${url} - done") + endif() + endif() + + if(NOT EXISTS "${dependencies_dir}/${destination}") + file(MAKE_DIRECTORY "${dependencies_dir}/${destination}") + if(dependency STREQUAL vlc) + file(ARCHIVE_EXTRACT INPUT "${dependencies_dir}/${file}" DESTINATION "${dependencies_dir}") + else() + file(ARCHIVE_EXTRACT INPUT "${dependencies_dir}/${file}" DESTINATION "${dependencies_dir}/${destination}") + endif() + execute_process(COMMAND "xattr" -r -d com.apple.quarantine "${dependencies_dir}/${destination}" + RESULT_VARIABLE result COMMAND_ERROR_IS_FATAL ANY) + endif() + + if(dependency STREQUAL cef) + set(CEF_ROOT_DIR + "${dependencies_dir}/${destination}" + CACHE PATH "CEF Root directory" FORCE) + elseif(dependency STREQUAL prebuilt) + set(VLC_PATH + "${dependencies_dir}/${destination}" + CACHE PATH "VLC source code directory" FORCE) + list(APPEND CMAKE_PREFIX_PATH "${dependencies_dir}/${destination}") + elseif(dependency STREQUAL qt6) + list(APPEND CMAKE_PREFIX_PATH "${dependencies_dir}/${destination}") + endif() + + message(STATUS "Setting up ${label} - done") + endforeach() + + list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + + set(CMAKE_PREFIX_PATH + ${CMAKE_PREFIX_PATH} + CACHE PATH "CMake prefix search path" FORCE) +endfunction() + +_check_dependencies() diff --git a/cmake/macos/compilerconfig.cmake b/cmake/macos/compilerconfig.cmake new file mode 100644 index 00000000000000..316ee3f5f571ad --- /dev/null +++ b/cmake/macos/compilerconfig.cmake @@ -0,0 +1,66 @@ +# OBS CMake macOS compiler configuration module + +# Enable distinction between Clang and AppleClang +if(POLICY CMP0025) + cmake_policy(SET CMP0025 NEW) +endif() + +# Honor visibility presets for all target types (executable, shared, module, static) +if(POLICY CMP0063) + cmake_policy(SET CMP0063 NEW) +endif() + +include(ccache) +include(compiler_common) +include(simd) + +# Add default C and C++ compiler options if Xcode generator is not used +if(NOT XCODE) + list( + APPEND + _obs_c_options + -Werror + -Wextra + -Wvla + -Wswitch + -Wformat-security + -Wunused-parameter + -Wno-unused-function + -Wno-missing-field-initializers + -Wformat + -fno-strict-aliasing + -Wno-error=shorten-64-to-32) + + # Set symbols to be hidden by default for C and C++ + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(CMAKE_C_VISIBILITY_PRESET hidden) + set(CMAKE_VISIBILITY_INLINES_HIDDEN TRUE) + + # Enable stripping of dead symbols when not building for Debug configuration + set(_release_configs RelWithDebInfo Release MinSizeRel) + if(CMAKE_BUILD_TYPE IN_LIST _release_configs) + add_link_options(LINKER:-dead_strip) + endif() + + add_compile_options("$<$:${_obs_c_options}>" "$<$:${_obs_c_options}>") + + option(ENABLE_COMPILER_TRACE "Enable clang time-trace (requires Ninja)" OFF) + mark_as_advanced(ENABLE_COMPILER_TRACE) + + # Add time trace option to compiler, if enabled. + if(ENABLE_COMPILER_TRACE AND CMAKE_GENERATOR STREQUAL "Ninja") + add_compile_options($<$:-ftime-trace> $<$:-ftime-trace>) + else() + set(ENABLE_COMPILER_TRACE + OFF + CACHE STRING "Enable clang time-trace (requires Ninja)" FORCE) + endif() + + # Enable color diagnostics for AppleClang + set(CMAKE_COLOR_DIAGNOSTICS ON) +endif() + +add_compile_definitions($<$:DEBUG> $<$:_DEBUG>) diff --git a/cmake/macos/cpackconfig.cmake b/cmake/macos/cpackconfig.cmake new file mode 100644 index 00000000000000..1dc16150ae2472 --- /dev/null +++ b/cmake/macos/cpackconfig.cmake @@ -0,0 +1,49 @@ +# OBS CMake macOS CPack configuration module + +include(cpackconfig_common) + +# Set architecture suffix for package file name based on project target +if(CMAKE_OSX_ARCHITECTURES STREQUAL arm64) + set(_cpack_arch_suffix Apple) +elseif(CMAKE_OSX_ARCHITECTURES STREQUAL x86_64) + set(_cpack_arch_suffix Intel) +else() + set(_cpack_arch_suffix Universal) +endif() + +if(ENABLE_RELEASE_BUILD) + set(CPACK_PACKAGE_VERSION ${OBS_VERSION_CANONICAL}) +else() + set(CPACK_PACKAGE_VERSION ${OBS_VERSION}) +endif() + +set(CPACK_PACKAGE_NAME "OBS") +set(CPACK_PACKAGE_FILE_NAME "obs-studio-${CPACK_PACKAGE_VERSION}-macOS-${_cpack_arch_suffix}") +set(CPACK_COMPONENTS_ALL Application) +set(CPACK_COMPONENT_Application_DISPLAY_NAME "OBS Studio") + +# Set background image and icon for generated Drag&Drop disk image +set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/cmake/macos/resources/background.tiff") +set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/macos/resources/AppIcon.icns") +cmake_path(GET CPACK_DMG_BACKGROUND_IMAGE FILENAME _cpack_dmg_background_filename) + +set(CPACK_GENERATOR DragNDrop) +set(CPACK_DMG_FORMAT UDZO) +set(CPACK_DMG_FILESYSTEM APFS) +set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_BINARY_DIR}/package.applescript") + +set(_dmg_window_x 100) +set(_dmg_window_y 100) +set(_dmg_window_width 540) +set(_dmg_window_height 380) +set(_dmg_icon_size 96) +set(_dmg_text_size 16) +set(_dmg_obs_x 124) +set(_dmg_obs_y 180) +set(_dmg_app_link_x 416) +set(_dmg_app_link_y 180) + +configure_file("${CMAKE_SOURCE_DIR}/cmake/macos/resources/package.applescript.in" + "${CMAKE_BINARY_DIR}/package.applescript" @ONLY) + +include(CPack) diff --git a/cmake/macos/defaults.cmake b/cmake/macos/defaults.cmake new file mode 100644 index 00000000000000..5a20f2ddbec8c9 --- /dev/null +++ b/cmake/macos/defaults.cmake @@ -0,0 +1,96 @@ +# OBS CMake macOS defaults module + +# Enable selection between arm64 and x86_64 targets +if(NOT CMAKE_OSX_ARCHITECTURES) + set(CMAKE_OSX_ARCHITECTURES + arm64 + CACHE STRING "Build architectures for macOS" FORCE) +endif() +set_property(CACHE CMAKE_OSX_ARCHITECTURES PROPERTY STRINGS arm64 x86_64) + +# Set empty codesigning team if not specified as cache variable +if(NOT OBS_CODESIGN_TEAM) + set(OBS_CODESIGN_TEAM + "" + CACHE STRING "OBS code signing team for macOS" FORCE) + + # Set ad-hoc codesigning identity if not specified as cache variable + if(NOT OBS_CODESIGN_IDENTITY) + set(OBS_CODESIGN_IDENTITY + "-" + CACHE STRING "OBS code signing identity for macOS" FORCE) + endif() +endif() + +if(XCODE) + include(xcode) +endif() + +include(buildspec) + +# Set default deployment target to 11.0 if not set and enable selection in GUI up to 13.0 +if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) + set(CMAKE_OSX_DEPLOYMENT_TARGET + 11.0 + CACHE STRING "Minimum macOS version to target for deployment (at runtime). Newer APIs will be weak-linked." FORCE) +endif() +set_property(CACHE CMAKE_OSX_DEPLOYMENT_TARGET PROPERTY STRINGS 13.0 12.0 11.0) + +# Use Applications directory as default install destination +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX + "/Applications" + CACHE STRING "Directory to install OBS after building" FORCE) +endif() + +# Show warning about missing CMAKE_PREFIX_PATH, usually required for successful builds +if(NOT DEFINED CMAKE_PREFIX_PATH) + message( + WARNING "No CMAKE_PREFIX_PATH set: OBS supplies pre-built dependencies for building on macOS.\n" + "While OBS can be built using packages installed via Homebrew, pre-built dependencies " + "contain beneficial patches and fixes for use within OBS and is the suggested source " + "of these dependencies.\n" + "You can download the appropriate obs-deps package for your " + "architecture and set CMAKE_PREFIX_PATH to this directory:\n" + "CMAKE_PREFIX_PATH=\"\"\n" + "Download pre-built OBS dependencies at https://github.com/obsproject/obs-deps/releases\n") +endif() + +# SWIG hard codes the directory to its library directory at compile time. As obs-deps need to be relocatable, we need to +# force SWIG to look for its files in a directory relative to the PREFIX_PATH. The best way to ensure this is to set the +# SWIG_LIB environment variable. + +foreach(path IN LISTS CMAKE_PREFIX_PATH) + if(NOT DEFINED ENV{SWIG_LIB} AND EXISTS "${path}/bin/swig") + set(ENV{SWIG_LIB} "${path}/share/swig/CURRENT") + break() + endif() +endforeach() + +# Set default values for CMake's bundle generator and created Info.plist files +set(MACOSX_BUNDLE_EXECUTABLE_NAME OBS) +set(MACOSX_BUNDLE_BUNDLE_NAME "${OBS_PRODUCT_NAME}") +set(MACOSX_BUNDLE_BUNDLE_VERSION ${OBS_BUILD_NUMBER}) +set(MACOSX_BUNDLE_COPYRIGHT "${OBS_LEGAL_COPYRIGHT}") +set(MACOSX_BUNDLE_GUI_IDENTIFIER com.obsproject.obs-studio) +set(MACOSX_BUNDLE_ICON_FILE AppIcon) +set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${OBS_VERSION_CANONICAL}) +string(TIMESTAMP CURRENT_YEAR "%Y") + +# Enable find_package targets to become globally available targets +set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL TRUE) +# Enable RPATH support for generated binaries +set(CMAKE_MACOSX_RPATH TRUE) +# Use RPATHs from build tree _in_ the build tree +set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +# Do not add default linker search paths to RPATH +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) +# Use common bundle-relative RPATH for installed targets +set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks") + +# Used for library exports only (obs-frontend-api) +set(OBS_LIBRARY_DESTINATION "lib") +set(OBS_INCLUDE_DESTINATION "include/obs") +set(OBS_CMAKE_DESTINATION "lib/cmake") + +include(cpackconfig) diff --git a/cmake/macos/helpers.cmake b/cmake/macos/helpers.cmake new file mode 100644 index 00000000000000..68b9329c4f9fa8 --- /dev/null +++ b/cmake/macos/helpers.cmake @@ -0,0 +1,371 @@ +# OBS CMake macOS helper functions module + +# cmake-format: off +# cmake-lint: disable=C0307 +# cmake-lint: disable=R0912 +# cmake-lint: disable=R0915 +# cmake-lint: disable=E1126 +# cmake-format: on + +include(helpers_common) + +# set_target_properties_obs: Set target properties for use in obs-studio +function(set_target_properties_obs target) + set(options "") + set(oneValueArgs "") + set(multiValueArgs PROPERTIES) + cmake_parse_arguments(PARSE_ARGV 0 _STPO "${options}" "${oneValueArgs}" "${multiValueArgs}") + + message(DEBUG "Setting additional properties for target ${target}...") + + while(_STPO_PROPERTIES) + list(POP_FRONT _STPO_PROPERTIES key value) + set_property(TARGET ${target} PROPERTY ${key} "${value}") + endwhile() + get_target_property(target_type ${target} TYPE) + + # Target is a GUI or CLI application + if(target_type STREQUAL EXECUTABLE) + if(target STREQUAL obs-studio) + _check_info_plist() + set_target_properties( + ${target} + PROPERTIES OUTPUT_NAME OBS + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Info.plist.in" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.obs-studio + XCODE_ATTRIBUTE_PRODUCT_NAME OBS + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon + XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY YES + XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY YES + XCODE_EMBED_PLUGINS_REMOVE_HEADERS_ON_COPY YES + XCODE_EMBED_PLUGINS_CODE_SIGN_ON_COPY YES + XCODE_ATTRIBUTE_COPY_PHASE_STRIP NO + XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES) + + get_property(obs_dependencies GLOBAL PROPERTY _OBS_DEPENDENCIES) + add_dependencies(${target} ${obs_dependencies}) + + if(NOT XCODE) + return() + endif() + + get_property(obs_frameworks GLOBAL PROPERTY _OBS_FRAMEWORKS) + set_property( + TARGET ${target} + APPEND + PROPERTY XCODE_EMBED_FRAMEWORKS ${obs_frameworks}) + + if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) + set_property( + TARGET ${target} + APPEND + PROPERTY XCODE_EMBED_FRAMEWORKS ${SPARKLE}) + endif() + + get_property(obs_executables GLOBAL PROPERTY _OBS_EXECUTABLES) + foreach(executable IN LISTS obs_executables) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$" + "$/MacOS/" + COMMENT "Copy ${executable} to application bundle") + endforeach() + + _check_entitlements() + + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND + /usr/bin/sed -i '' 's/font-size: 10pt\;/font-size: 12pt\;/' + "$/Resources/themes/Acri.qss" + "$/Resources/themes/Grey.qss" + "$/Resources/themes/Light.qss" + "$/Resources/themes/Rachni.qss" + "$/Resources/themes/Yami.qss" + COMMENT "Patch Qt stylesheets to use larger default font size on macOS") + + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND /bin/ln -fs obs-frontend-api.dylib libobs-frontend-api.1.dylib + WORKING_DIRECTORY "$/Frameworks" + COMMENT "Create symlink for legacy obs-frontend-api") + + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/qt.conf") + target_add_resource(${target} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/qt.conf") + endif() + + target_add_resource(${target} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Assets.xcassets") + target_add_resource(${target} "${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS") + + if(TARGET obs-dal-plugin) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_directory "$" + "$/Resources/$" + COMMENT "Add OBS DAL plugin to application bundle") + endif() + + if(TARGET obspython) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$/obspython.py" + "$/Resources" + COMMENT "Add OBS::python import module") + endif() + + _bundle_dependencies(${target}) + + install(TARGETS ${target} BUNDLE DESTINATION "." COMPONENT Application) + else() + set_property(GLOBAL APPEND PROPERTY _OBS_EXECUTABLES ${target}) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) + endif() + + _add_entitlements() + elseif(target_type STREQUAL SHARED_LIBRARY) + set_target_properties( + ${target} + PROPERTIES NO_SONAME TRUE + MACHO_COMPATIBILITY_VERSION 1.0 + MACHO_CURRENT_VERSION ${OBS_VERSION_MAJOR} + SOVERSION 0 + VERSION 0 + XCODE_ATTRIBUTE_DYLIB_COMPATIBILITY_VERSION 1.0 + XCODE_ATTRIBUTE_DYLIB_CURRENT_VERSION ${OBS_VERSION_MAJOR} + XCODE_ATTRIBUTE_PRODUCT_NAME ${target} + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}) + + get_target_property(is_framework ${target} FRAMEWORK) + if(is_framework) + _check_info_plist() + set_target_properties( + ${target} + PROPERTIES FRAMEWORK_VERSION A + MACOSX_FRAMEWORK_IDENTIFIER com.obsproject.${target} + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Info.plist.in") + endif() + + _add_entitlements() + + set_property(GLOBAL APPEND PROPERTY _OBS_FRAMEWORKS ${target}) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) + elseif(target_type STREQUAL MODULE_LIBRARY) + if(target STREQUAL obspython) + set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_NAME ${target} + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}) + elseif(target STREQUAL obslua) + set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_NAME ${target} + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}) + elseif(target STREQUAL obs-dal-plugin) + set_target_properties(${target} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) + return() + else() + _check_info_plist() + set_target_properties( + ${target} + PROPERTIES BUNDLE TRUE + BUNDLE_EXTENSION plugin + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Info.plist.in" + XCODE_ATTRIBUTE_PRODUCT_NAME ${target} + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER com.obsproject.${target}) + + if(target STREQUAL obs-browser) + # Good-enough for now as there are no other variants - in _theory_ we should only add the appropriate variant, + # but that is only known at project generation and not build system configuration. + get_target_property(imported_location CEF::Library IMPORTED_LOCATION_RELEASE) + if(imported_location) + list(APPEND cef_items "${imported_location}") + endif() + + foreach(helper IN ITEMS _gpu _plugin _renderer "") + if(TARGET OBS::browser-helper${helper}) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES OBS::browser-helper${helper}) + list(APPEND cef_items OBS::browser-helper${helper}) + endif() + endforeach() + + set_property(GLOBAL APPEND PROPERTY _OBS_FRAMEWORKS ${cef_items}) + endif() + endif() + + set_property(GLOBAL APPEND PROPERTY OBS_MODULES_ENABLED ${target}) + set_property(GLOBAL APPEND PROPERTY _OBS_DEPENDENCIES ${target}) + endif() + + target_install_resources(${target}) + + get_target_property(target_sources ${target} SOURCES) + set(target_ui_files ${target_sources}) + list(FILTER target_ui_files INCLUDE REGEX ".+\\.(ui|qrc)") + source_group( + TREE "${CMAKE_CURRENT_SOURCE_DIR}" + PREFIX "UI Files" + FILES ${target_ui_files}) + + if(${target} STREQUAL libobs) + set(target_source_files ${target_sources}) + set(target_header_files ${target_sources}) + list(FILTER target_source_files INCLUDE REGEX ".+\\.(m|c[cp]?p?|swift)") + list(FILTER target_header_files INCLUDE REGEX ".+\\.h(pp)?") + + source_group( + TREE "${CMAKE_CURRENT_SOURCE_DIR}" + PREFIX "Source Files" + FILES ${target_source_files}) + source_group( + TREE "${CMAKE_CURRENT_SOURCE_DIR}" + PREFIX "Header Files" + FILES ${target_header_files}) + endif() +endfunction() + +# _check_info_plist: Macro to check if project ships with Info.plist template +macro(_check_info_plist) + if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/Info.plist.in") + message(FATAL_ERROR "Target ${target} is missing an Info.plist template in its cmake directory.") + endif() +endmacro() + +# _check_entitlements: Macro to check if project ships with entitlements plist +macro(_check_entitlements) + if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist") + message(FATAL_ERROR "Target ${target} is missing an entitlements.plist in its cmake directory.") + endif() +endmacro() + +# _add_entitlements: Macro to add entitlements shipped with project +macro(_add_entitlements) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist") + set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos/entitlements.plist") + endif() +endmacro() + +# target_export: Helper function to export target as CMake package +function(target_export target) + # Exclude CMake package from 'ALL' target + set(exclude_variant EXCLUDE_FROM_ALL) + _target_export(${target}) +endfunction() + +# target_install_resources: Helper function to add resources into bundle +function(target_install_resources target) + message(DEBUG "Installing resources for target ${target}...") + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/data") + file(GLOB_RECURSE data_files "${CMAKE_CURRENT_SOURCE_DIR}/data/*") + foreach(data_file IN LISTS data_files) + cmake_path(RELATIVE_PATH data_file BASE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data/" OUTPUT_VARIABLE + relative_path) + cmake_path(GET relative_path PARENT_PATH relative_path) + target_sources(${target} PRIVATE "${data_file}") + set_property(SOURCE "${data_file}" PROPERTY MACOSX_PACKAGE_LOCATION "Resources/${relative_path}") + source_group("Resources/${relative_path}" FILES "${data_file}") + endforeach() + endif() +endfunction() + +# target_add_resource: Helper function to add a specific resource to a bundle +function(target_add_resource target resource) + message(DEBUG "Add resource ${resource} to target ${target} at destination ${destination}...") + target_sources(${target} PRIVATE "${resource}") + set_property(SOURCE "${resource}" PROPERTY MACOSX_PACKAGE_LOCATION Resources) + source_group("Resources" FILES "${resource}") +endfunction() + +# _bundle_dependencies: Resolve 3rd party dependencies and add them to macOS app bundle +function(_bundle_dependencies target) + message(DEBUG "Discover dependencies of target ${target}...") + set(found_dependencies) + find_dependencies(TARGET ${target} FOUND_VAR found_dependencies) + + get_property(obs_module_list GLOBAL PROPERTY OBS_MODULES_ENABLED) + list(LENGTH obs_module_list num_modules) + if(num_modules GREATER 0) + add_dependencies(${target} ${obs_module_list}) + set_property( + TARGET ${target} + APPEND + PROPERTY XCODE_EMBED_PLUGINS ${obs_module_list}) + foreach(module IN LISTS obs_module_list) + find_dependencies(TARGET ${module} FOUND_VAR found_dependencies) + endforeach() + endif() + + list(REMOVE_DUPLICATES found_dependencies) + + set(library_paths) + set(plugins_list) + file(GLOB sdk_library_paths /Applications/Xcode*.app) + set(system_library_path "/usr/lib/") + + foreach(library IN LISTS found_dependencies) + get_target_property(library_type ${library} TYPE) + get_target_property(is_framework ${library} FRAMEWORK) + get_target_property(is_imported ${library} IMPORTED) + + if(is_imported) + get_target_property(imported_location ${library} LOCATION) + if(NOT imported_location) + continue() + endif() + + set(is_xcode_framework FALSE) + set(is_system_framework FALSE) + + foreach(sdk_library_path IN LISTS sdk_library_paths) + if(is_xcode_framework) + break() + endif() + cmake_path(IS_PREFIX sdk_library_path "${imported_location}" is_xcode_framework) + endforeach() + cmake_path(IS_PREFIX system_library_path "${imported_location}" is_system_framework) + + if(is_system_framework OR is_xcode_framework) + continue() + elseif(is_framework) + file(REAL_PATH "../../.." library_location BASE_DIRECTORY "${imported_location}") + elseif(NOT library_type STREQUAL "STATIC_LIBRARY") + if(NOT imported_location MATCHES ".+\\.a") + set(library_location "${imported_location}") + else() + continue() + endif() + else() + continue() + endif() + + if(library MATCHES "Qt[56]?::.+") + find_qt_plugins(COMPONENT ${library} TARGET ${target} FOUND_VAR plugins_list) + endif() + list(APPEND library_paths ${library_location}) + elseif(NOT imported AND library_type STREQUAL "SHARED_LIBRARY") + message(TRACE "${library} is a project target") + list(APPEND library_paths ${library}) + endif() + endforeach() + + list(REMOVE_DUPLICATES plugins_list) + foreach(plugin IN LISTS plugins_list) + cmake_path(GET plugin PARENT_PATH plugin_path) + set(plugin_base_dir "${plugin_path}/../") + cmake_path(SET plugin_stem_dir NORMALIZE "${plugin_base_dir}") + cmake_path(RELATIVE_PATH plugin_path BASE_DIRECTORY "${plugin_stem_dir}" OUTPUT_VARIABLE plugin_file_name) + target_sources(${target} PRIVATE "${plugin}") + set_source_files_properties("${plugin}" PROPERTIES MACOSX_PACKAGE_LOCATION "plugins/${plugin_file_name}" + XCODE_FILE_ATTRIBUTES "CodeSignOnCopy") + source_group("Qt plugins" FILES "${plugin}") + endforeach() + + list(REMOVE_DUPLICATES library_paths) + set_property( + TARGET ${target} + APPEND + PROPERTY XCODE_EMBED_FRAMEWORKS ${library_paths}) +endfunction() diff --git a/cmake/macos/resources/AppIcon.icns b/cmake/macos/resources/AppIcon.icns new file mode 100644 index 0000000000000000000000000000000000000000..2f742868fb01dd20f0f8513a5d9f6060c3251d6d GIT binary patch literal 3728958 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

|TQqGPWLkFs_q=rAyY) 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%0Am1O&#ss5JxgV0$Z zaCQPRzAy&$BbI9F*iEA;|9bgrv#v!z54_$5M8asiUV6=QG=~wiwwhXvcy25k@Gucs z9@S56i8~F(%zdpszG@-tLAD%AA_Q=jT4px~Hr<)$CSp>b!gIqojt9aA;~y^*T(>h3wY;n{7!90-Z6S<&EA1H&9gU#C?P}fsT3GUG@DLm( zOUSpJat{D&u+lvkxDwG}6VJ`z7+*=RuZL zlZ#ENk^V07tH{)hgB}iV2LzYxnYyS|4Bug^k@vsA_VXC{J7UNy;1?MB5lmc%T_;@! zq4#G}-%5Q1)9~@A_EBTuJCP&XkAeZcnEhhdOX`*Ob=rGruap0V>xfGjK!4g30uPZr zsx;WbYz3SHJilI8%Ljah7$D>78La*#a4q5;{e{_om$GQY5mix$^knqgyTBa?1kbr& z550dg_;Z{C4S~-f^Q6Ph;uOOlLrY}?&xuIk0tTY#Rs`ln%$UIQUC`gRgGb{77Xf0T z))o;#7`?JE@&7X_m~aRJ>k95K(bRHKTvFqNA;Vs$E0@@O1cPnh(+K)Rkf1M@i)Dw{ zkU`2KHH9x)4nC8T8F$(U#K92oZ8)pwH+!)Q9lLm#3={)xPO$MJqw;0Z%r5Q z4vYfE6|FK=1P10oKQ+DC+@FWz2SG=lCF>)=gNV$azSup6NU$wp?>KoM zb(*X!5XJOT!r;t>4%@6ubNn1tEBY22Ic;lrrU3$R>sxJZx9-4r!?7iilrHqj7TMEb!{ID+%=apgVMODQTASO`>3KRmH9m3iM_$8(=X@$CaoC)EuezhK3 zLik7NaT0v9Uq4df=f}|bbBDT|oQg%@M3aMc&yjDTwT(D?4R%sk1qWt97LVaMgEzzi zyo@|XehB?K*9un{boOG-%Q+z&Be#uiIPwW}uHw*jBi>x zMmZP8-93a%J=jmNV}r)l34K9-3qF zSjJ@z456pFUw}IwfjimdzcBEnUPfvDQ3wEx1HS34^4(X(GrtM^G5UQu;9b3_j1!oD ztYSGeSqmWJY7{If9qE30P35xa%GN!ffCq4w?PKhf1JgoVKPcKdc5At%XsJ7t6o~a(|&7qBQQ0w5)1e z599mRkUo(&bR*wj#Biyn^jT~0`TAio)$7x7fs_Yt$V&c9;Cm5NPl6ZYiH^Xkc=_e~ z7idGpLPfid6oG=iA1Z<(50_#Qm+t(!SPvGrPJsHCyKoBArqUs;TssR|F zR+H~p!g%OrbTAQs5*xh#EO8VT@7}rRDrfGN<^(4PGOlH3nSXcOJ7R+>vvb9Wa& z%0A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%0Am1O&# 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

|oKxz?JqyF@{y=8AlL)7`L+G&*9XIr`|j@S6=gV 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 mGmxP_eCG>kj7f)eo&?NWn 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
;~eKHa|Qk(X0mNh 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

hJv^ZVq_Cb@k}JekVkz~m0ay9-?ObJNLli; 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
  • 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

    SNv}XZ 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

    3$Dz^zWkik@m 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

    UuRtodIxT$u_C4ozN5smxI>7MBG@$DVarlN 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≪jI&rJN2c7x>hpg(NBO6e?s!H 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

      0@1cbc0~M>b0u`i7Pbp(N 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%0A)a|*NP3k_c6yFMi$?l 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

      IOIIGC&R6q=g(Z+}d*8}853;fShj0DiEv~eD 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≀GIFKfqoo7qn%TzAi|U_);j=)+g1opSQ-}MQ*Er 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

      ~ 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 u+0{$ic*O*^SPqE>tra2n2% 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

      `u;S&qr8)5?FGJ|nay%SO6FS(*T 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�UT|84m11g^q_Q2y@ZI?lBdJ_k>f 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

      s(v{}0JcX5VJ^kh7Fm!@PQI5pX$Fx2= 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⋙CI_^;*> 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
        mH{C*sr&Tub(!soCC!7>PmB? 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≺1Eti1td_*6|hhR}p?As~3{|olFfSUGg6W zblQkC3Iv&ij3Umv6 z$|p6j=a2F1qCJ_w!k-;28Z9>t{JljP#q?tp5ydb1EIazlT80ljprn_)dQ1L!D0kSw5ol=(C3UQF=vl z>{WYO^PSW3{+aNn8BhPdMT`d-iK`S+B7gJqbFWK9|MuSW?*ufjQ~Z-I<(73DDTe>|?E28I&vO*h zp09U*o%ZjlhO6dZ)kQyI+t{|T?UYwNt>A3pJ5N1T-iLXkTi(0iE-9zSLz;a*J{k3I zXPO!1K33$Fit=AthL}or43t~aCqLzEiF}KvW9psmd|7t#(6T~KNV5(}$k$^5xt!(3 zD%?^dedkF*`Ou)%1lr0k2mAP?%$P*5JLs7iHN}Y$OM~tX`i=GYn~>H=xZB~HX=^rD zj-|{pUk+9J!)(qQ!*Z&RbfG(rI+Fe!eD&YWudU%6u!C^OKkk!JZw|wk6Sx=9PD$r% zq?35*LmZ9x2k2KR$D44GetMD|4C1zRlAm&oc8;g@QQ!F+2J@QX+X)CaaPJJ1>ffDI zk{phc6eo^)%}lcV^M9&(ua1M6bqUp@V(HMlju&I09v^mu@Sd7j8y z6Mo_6SzH>L@1)O80x zmhhHP{+hUBzD|VMQ}+~H(kC^!R{PI*O}BQDUNZisVr5JyG_`wix6mV-18RnE2kn(m z-eHV4JpDE(^=KPq!u~+sDtnj-hcj{aVv?N(HtKR+ zk};jeVlgeV{qzTekIn4$vJAIJBf-y*a^jCkF*qsBMn(d*d&fe~dRgHrAN$jz(Y`xf z(R^DbqI{FSmTJ0eke_nNFOUA}#I%*3gcE9_Ux56aRIXDGCDX|L^?c>`1#)fs!b{Cw`l`_kvcjm)P^hjB@Vad}CVZYMUK1KTn9b(8J`>rcmis6^m767DxND%dx(fFYJ0(fyq-yxQUyb~? zXJ$Q}%UAl=N4>qk9$q&EeZ9dG`?Wr|wv#ThXb(|3Z-{oYHLZ=ZkQ4I15enJ}zXH0X zcRo3g-%Qhuc9o-IoVZ9mS(^@mj4x=*<>!RTNw6EA`mgPq=3B<}DWNohUyqR306H<} z9`7O*mfh;8LFO};Umi93d{)R@8~x>%@K>TIW<5SjkAre3=5R+keS6rR^&laXO*)@W zyW)KOy733=$=B3pK6vB<%NVc!*N^Z0_zK7$yLw%-vU3<}ZUdc`w-nrk#I=Jf&;Z!J z9H$4^5AJ5#?KW^K=6drnf$?Paw+xQS-z*Ou@Vkfq+mRaM?W6V{1`omA>EIpEYdIgs zpXITW7Qy@h1tfF)C;-BsK+HBaoH(e=NmEXejzXN_gT6{9L#9vkXX&8_>f->sUjN*?yq7ozX z4~3qopZ*5vvc>*HkEG;%_P+EN;a-~l1k~{V%OFPp#Et>#zn}woxhnFZ+xliNO@8pc zi)qnBUOX%g8mhqRDn21pM#qy(NRL2Jsx72rDpuMWP|!@o}4Vh1>$nk+vw-z%GL z-QQZp7Ep73a}~|E+DZ-oP6V)Cynf~X6}aVd4b^MvRzPa#zwCaa;a}dC_-3E+2cQ2l z*6#Tv|9}0RYJkh|kCX#h_x@Vu-t2zu$>o2SIq-ML0h_eT*JTd;ui`+hVXNWaHr_Xf zvn%LTyZ<+Je>Z<`HuTs0z4`u|-I+wZe%4 z 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

        o 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 r&&BRxadiXZ52gBKeU>%YyUzH2_uc31Rs08f{ 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%0A&mr9fJ_wAaZW%NWjZ+G!|uB&!y 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

        ?SAT4xhq0%hOr$lcFaJ8#6K%+ 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
        &6i}clyIq&39RcayM;b2Qsx8pZM_T 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 literal 0 HcmV?d00001 diff --git a/cmake/macos/resources/ccache-launcher-c.in b/cmake/macos/resources/ccache-launcher-c.in new file mode 100644 index 00000000000000..3e89d480d1d1e6 --- /dev/null +++ b/cmake/macos/resources/ccache-launcher-c.in @@ -0,0 +1,13 @@ +#!/bin/sh + +if [[ "$1" == "${CMAKE_C_COMPILER}" ]] ; then + shift +fi + +export CCACHE_CPP2=true +export CCACHE_DEPEND=true +export CCACHE_DIRECT=true +export CCACHE_FILECLONE=true +export CCACHE_INODECACHE=true +export CCACHE_SLOPPINESS="modules,include_file_mtime,include_file_ctime,pch_defines,clang_index_store,system_headers" +exec "${CMAKE_C_COMPILER_LAUNCHER}" "${CMAKE_C_COMPILER}" "$@" diff --git a/cmake/macos/resources/ccache-launcher-cxx.in b/cmake/macos/resources/ccache-launcher-cxx.in new file mode 100644 index 00000000000000..bd2b526b35745b --- /dev/null +++ b/cmake/macos/resources/ccache-launcher-cxx.in @@ -0,0 +1,13 @@ +#!/bin/sh + +if [[ "$1" == "${CMAKE_CXX_COMPILER}" ]] ; then + shift +fi + +export CCACHE_CPP2=true +export CCACHE_DEPEND=true +export CCACHE_DIRECT=true +export CCACHE_FILECLONE=true +export CCACHE_INODECACHE=true +export CCACHE_SLOPPINESS="modules,include_file_mtime,include_file_ctime,pch_defines,clang_index_store,system_headers" +exec "${CMAKE_CXX_COMPILER_LAUNCHER}" "${CMAKE_CXX_COMPILER}" "$@" diff --git a/cmake/macos/resources/package.applescript.in b/cmake/macos/resources/package.applescript.in new file mode 100644 index 00000000000000..b11afb89fdd7a3 --- /dev/null +++ b/cmake/macos/resources/package.applescript.in @@ -0,0 +1,66 @@ +on run (volumeName) + tell application "Finder" + tell disk (volumeName as string) + open + + set theXOrigin to @_dmg_window_x@ + set theYOrigin to @_dmg_window_y@ + set theWidth to @_dmg_window_width@ + set theHeight to @_dmg_window_height@ + + set theBottomRightX to (theXOrigin + theWidth) + set theBottomRightY to (theYOrigin + theHeight) + set dsStore to "\"" & "/Volumes/" & volumeName & "/" & ".DS_STORE\"" + + tell container window + set current view to icon view + set toolbar visible to false + set statusbar visible to false + set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY} + set statusbar visible to false + set position of every item to {theBottomRightX + 100, 100} + end tell + + set opts to the icon view options of container window + tell opts + set icon size to @_dmg_icon_size@ + set text size to @_dmg_text_size@ + set arrangement to not arranged + end tell + set background picture of opts to file ".background:@_cpack_dmg_background_filename@" + set position of item "@CPACK_PACKAGE_NAME@.app" to {@_dmg_obs_x@, @_dmg_obs_y@} + set position of item "Applications" to {@_dmg_app_link_x@, @_dmg_app_link_y@} + close + open + -- Force saving of the size + delay 1 + + tell container window + set statusbar visible to false + set the bounds to {theXOrigin, theYOrigin, theBottomRightX - 10, theBottomRightY - 10} + end tell + end tell + + delay 1 + + tell disk (volumeName as string) + tell container window + set statusbar visible to false + set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY} + end tell + end tell + + --give the finder some time to write the .DS_Store file + delay 3 + + set waitTime to 0 + set ejectMe to false + repeat while ejectMe is false + delay 1 + set waitTime to waitTime + 1 + + if (do shell script "[ -f " & dsStore & " ]; echo $?") = "0" then set ejectMe to true + end repeat + log "waited " & waitTime & " seconds for .DS_STORE to be created." + end tell +end run diff --git a/cmake/macos/simd.cmake b/cmake/macos/simd.cmake new file mode 100644 index 00000000000000..8c224d2706f17c --- /dev/null +++ b/cmake/macos/simd.cmake @@ -0,0 +1,7 @@ +# OBS CMake macOS SIMD module + +# Enable openmp-simd when compiling for arm64 +if(CMAKE_OSX_ARCHITECTURES MATCHES ".*[aA][rR][mM]64e?.*" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + set(ARCH_SIMD_FLAGS -fopenmp-simd) + set(ARCH_SIMD_DEFINES SIMDE_ENABLE_OPENMP) +endif() diff --git a/cmake/macos/xcode.cmake b/cmake/macos/xcode.cmake new file mode 100644 index 00000000000000..69039aec639999 --- /dev/null +++ b/cmake/macos/xcode.cmake @@ -0,0 +1,134 @@ +# OBS CMake macOS Xcode module + +# Use a compiler wrapper to enable ccache in Xcode projects +if(ENABLE_CCACHE AND CCACHE_PROGRAM) + configure_file("${CMAKE_SOURCE_DIR}/cmake/macos/resources/ccache-launcher-c.in" ccache-launcher-c) + configure_file("${CMAKE_SOURCE_DIR}/cmake/macos/resources/ccache-launcher-cxx.in" ccache-launcher-cxx) + + execute_process(COMMAND chmod a+rx "${CMAKE_BINARY_DIR}/ccache-launcher-c" "${CMAKE_BINARY_DIR}/ccache-launcher-cxx") + set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_BINARY_DIR}/ccache-launcher-c") + set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_BINARY_DIR}/ccache-launcher-cxx") + set(CMAKE_XCODE_ATTRIBUTE_LD "${CMAKE_C_COMPILER}") + set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_CXX_COMPILER}") +endif() + +# Set project variables +set(CMAKE_XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${OBS_BUILD_NUMBER}) +set(CMAKE_XCODE_ATTRIBUTE_DYLIB_COMPATIBILITY_VERSION 1.0.0) +set(CMAKE_XCODE_ATTRIBUTE_MARKETING_VERSION ${OBS_VERSION_CANONICAL}) + +# Set deployment target +set(CMAKE_XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET}) + +if(NOT OBS_CODESIGN_TEAM) + # Switch to manual codesigning if no codesigning team is provided + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${OBS_CODESIGN_IDENTITY}") +else() + if(DEFINED OBS_CODESIGN_IDENTITY AND NOT OBS_CODESIGN_IDENTITY STREQUAL "-") + # Switch to manual codesigning if a non-adhoc codesigning identity is provided + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Manual) + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${OBS_CODESIGN_IDENTITY}") + else() + # Switch to automatic codesigning via valid team ID + set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE Automatic) + endif() + set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${OBS_CODESIGN_TEAM}") +endif() + +# Only create a single Xcode project file +set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY TRUE) +# Add all libraries to project link phase (lets Xcode handle linking) +set(CMAKE_XCODE_LINK_BUILD_PHASE_MODE KNOWN_LOCATION) + +# Enable codesigning with secure timestamp when not in Debug configuration (required for Notarization) +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=Release] "--timestamp") +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=RelWithDebInfo] "--timestamp") +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS[variant=MinSizeRel] "--timestamp") + +# Enable codesigning with hardened runtime option when not in Debug configuration (required for Notarization) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=Release] YES) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=RelWithDebInfo] YES) +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME[variant=MinSizeRel] YES) + +# Disable injection of Xcode's base entitlements used for debugging when not in Debug configuration (required for +# Notarization) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=Release] NO) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=RelWithDebInfo] NO) +set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS[variant=MinSizeRel] NO) + +# Use Swift version 5.0 by default +set(CMAKE_XCODE_ATTRIBUTE_SWIFT_VERSION 5.0) + +# Use DWARF with separate dSYM files when in Release or MinSizeRel configuration +set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Debug] dwarf) +set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=RelWithDebInfo] dwarf) +set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=Release] dwarf-with-dsym) +set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT[variant=MinSizeRel] dwarf-with-dsym) + +# Strip generated and installed products only in Release or MinSizeRel configuration +set(CMAKE_XCODE_ATTRIBUTE_STRIP_INSTALLED_PRODUCT[variant=Release] YES) +set(CMAKE_XCODE_ATTRIBUTE_STRIP_INSTALLED_PRODUCT[variant=MinSizeRel] YES) + +# Make all symbols hidden by default +set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN YES) + +# Strip unused code in Release or MinSizeRel configuration only +set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING[variant=Release] YES) +set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING[variant=MinSizeRel] YES) + +# Display mangled names in Debug configuration +set(CMAKE_XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES) + +# Disable using ARC in ObjC by default (OBS does not support this - yet) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC NO) +# Disable strict aliasing +set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO) +# cmake-format: off +# Re-enable once the bad goto statements are fixed +# set(CMAKE_XCODE_ATTRIBUTE_GCC_C_LANGUAGE_STANDARD c99) +# cmake-format: on +# Set C++ language default to c++17 +set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD c++17) +# Enable support for module imports in ObjC +set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES NO) +# Enable automatic linking of imported modules in ObjC +set(CMAKE_XCODE_ATTRIBUTE_CLANG_MODULES_AUTOLINK NO) +# Enable strict msg_send rules for ObjC +set(CMAKE_XCODE_ATTRIBUTE_ENABLE_STRICT_OBJC_MSGSEND YES) + +# Set default warnings for ObjC and C++ +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING YES_ERROR) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION NO) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS YES) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK YES) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_RANGE_LOOP_ANALYSIS YES) +set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_EMPTY_BODY YES) + +# Set default warnings for C and C++ +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS NO) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_MISSING_NEWLINE YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_ABOUT_RETURN_TYPE YES_ERROR) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_CHECK_SWITCH_STATEMENTS YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_FOUR_CHARACTER_CONSTANTS YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_SIGN_COMPARE YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_SHADOW NO) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_FUNCTION NO) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_PARAMETER YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VALUE YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VARIABLE YES) +set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_TYPECHECK_CALLS_TO_PRINTF YES) + +# Add additional warning compiler flags +set(CMAKE_XCODE_ATTRIBUTE_WARNING_CFLAGS "-Wvla -Wformat-security -Wno-error=shorten-64-to-32") + +set(CMAKE_XCODE_ATTRIBUTE_GCC_TREAT_WARNINGS_AS_ERRORS YES) + +# Disable color diagnostics +set(CMAKE_COLOR_DIAGNOSTICS FALSE) + +# Disable usage of RPATH in build or install configurations +set(CMAKE_SKIP_RPATH TRUE) +# Have Xcode set default RPATH entries +set(CMAKE_XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/../Frameworks") From 349372b3b39e2346952732ab14122d23c7ec7a57 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Sun, 26 Mar 2023 03:55:25 +0200 Subject: [PATCH 0499/2225] cmake: Add changes for CMake build framework 3.0 New code path only taken if OBS_CMAKE_VERSION is set to 3.0.0 or greater, old functionality remains unchanged. --- .cmake-format.json | 49 +- .gitignore | 18 +- CMakeLists.txt | 61 +- UI/CMakeLists.txt | 554 +++--------------- UI/cmake/feature-browserpanels.cmake | 8 + UI/cmake/feature-importers.cmake | 2 + UI/cmake/feature-restream.cmake | 10 + UI/cmake/feature-sparkle.cmake | 12 + UI/cmake/feature-twitch.cmake | 10 + UI/cmake/feature-whatsnew.cmake | 29 + UI/cmake/feature-youtube.cmake | 13 + UI/cmake/legacy.cmake | 489 ++++++++++++++++ .../com.obsproject.Studio.appdata.xml.in | 46 ++ UI/cmake/linux/com.obsproject.Studio.desktop | 97 +++ UI/cmake/linux/icons/obs-logo-128.png | Bin 0 -> 18671 bytes UI/cmake/linux/icons/obs-logo-256.png | Bin 0 -> 45887 bytes UI/cmake/linux/icons/obs-logo-512.png | Bin 0 -> 130086 bytes UI/cmake/linux/icons/obs-logo-scalable.svg | 92 +++ .../AppIcon.appiconset/Contents.json | 68 +++ .../AppIcon.appiconset/icon_128x128.png | Bin 0 -> 51391 bytes .../AppIcon.appiconset/icon_128x128@2x.png | Bin 0 -> 163961 bytes .../AppIcon.appiconset/icon_16x16.png | Bin 0 -> 4257 bytes .../AppIcon.appiconset/icon_16x16@2x.png | Bin 0 -> 7456 bytes .../AppIcon.appiconset/icon_256x256.png | Bin 0 -> 163961 bytes .../AppIcon.appiconset/icon_256x256@2x.png | Bin 0 -> 555491 bytes .../AppIcon.appiconset/icon_32x32.png | Bin 0 -> 7456 bytes .../AppIcon.appiconset/icon_32x32@2x.png | Bin 0 -> 17609 bytes .../AppIcon.appiconset/icon_512x512.png | Bin 0 -> 555491 bytes .../AppIcon.appiconset/icon_512x512@2x.png | Bin 0 -> 1738448 bytes UI/cmake/macos/Assets.xcassets/Contents.json | 6 + UI/cmake/macos/Info.plist.in | 44 ++ UI/cmake/macos/OBSPublicDSAKey.pem | 36 ++ UI/cmake/macos/entitlements.plist | 14 + UI/cmake/macos/qt.conf | 2 + UI/cmake/os-freebsd.cmake | 9 + UI/cmake/os-linux.cmake | 50 ++ UI/cmake/os-macos.cmake | 17 + UI/cmake/os-windows.cmake | 55 ++ UI/cmake/ui-elements.cmake | 68 +++ UI/cmake/ui-qt.cmake | 56 ++ UI/cmake/ui-windows.cmake | 58 ++ UI/frontend-plugins/CMakeLists.txt | 4 +- .../aja-output-ui/CMakeLists.txt | 146 ++--- .../aja-output-ui/cmake/legacy.cmake | 103 ++++ .../aja-output-ui/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + .../decklink-captions/CMakeLists.txt | 73 +-- .../decklink-captions/cmake/legacy.cmake | 62 ++ .../cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + .../decklink-output-ui/CMakeLists.txt | 92 ++- .../decklink-output-ui/cmake/legacy.cmake | 81 +++ .../cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + .../frontend-tools/CMakeLists.txt | 126 ++-- .../frontend-tools/cmake/legacy.cmake | 118 ++++ .../frontend-tools/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + UI/obs-frontend-api/CMakeLists.txt | 35 +- UI/obs-frontend-api/cmake/legacy.cmake | 36 ++ .../cmake/obs-frontend-apiConfig.cmake.in | 4 + .../cmake/windows/obs-module.rc.in | 24 + UI/ui-config.h.in | 19 - UI/win-update/updater/CMakeLists.txt | 44 +- UI/win-update/updater/cmake/legacy.cmake | 42 ++ UI/xdg-data/CMakeLists.txt | 9 +- cmake/Modules/CompilerConfig.cmake | 44 +- cmake/Modules/CopyMSVCBins.cmake | 215 ++----- cmake/Modules/DeprecationHelpers.cmake | 11 +- cmake/Modules/FindAMF.cmake | 18 +- cmake/Modules/FindAsio.cmake | 27 +- cmake/Modules/FindCEF.cmake | 62 +- cmake/Modules/FindDetours.cmake | 19 +- cmake/Modules/FindFFmpeg.cmake | 37 +- cmake/Modules/FindGio.cmake | 11 +- cmake/Modules/FindJack.cmake | 20 +- cmake/Modules/FindJansson.cmake | 23 +- cmake/Modules/FindLibAJANTV2.cmake | 29 +- cmake/Modules/FindLibUUID.cmake | 10 +- cmake/Modules/FindLibVLC.cmake | 9 +- cmake/Modules/FindLibdrm.cmake | 7 +- cmake/Modules/FindLibfdk.cmake | 19 +- cmake/Modules/FindLibpci.cmake | 11 +- cmake/Modules/FindLibrist.cmake | 19 +- cmake/Modules/FindLibrnnoise.cmake | 21 +- cmake/Modules/FindLibspeexdsp.cmake | 22 +- cmake/Modules/FindLibsrt.cmake | 19 +- cmake/Modules/FindLibv4l2.cmake | 10 +- cmake/Modules/FindLibva.cmake | 23 +- cmake/Modules/FindLibx264.cmake | 16 +- cmake/Modules/FindLuajit.cmake | 19 +- cmake/Modules/FindMbedTLS.cmake | 56 +- cmake/Modules/FindOSS.cmake | 8 +- cmake/Modules/FindPipeWire.cmake | 8 +- cmake/Modules/FindPythonWindows.cmake | 13 +- cmake/Modules/FindSndio.cmake | 8 +- cmake/Modules/FindSysinfo.cmake | 13 +- cmake/Modules/FindUdev.cmake | 9 +- cmake/Modules/FindWayland.cmake | 33 +- cmake/Modules/FindWebsocketpp.cmake | 33 +- cmake/Modules/FindX11_XCB.cmake | 22 +- cmake/Modules/FindXCB.cmake | 21 +- cmake/Modules/FindXkbcommon.cmake | 15 +- cmake/Modules/IDLFileHelper.cmake | 12 +- cmake/Modules/ObsDefaults_macOS.cmake | 58 +- cmake/Modules/ObsHelpers_Linux.cmake | 24 +- cmake/Modules/ObsHelpers_Windows.cmake | 76 +-- cmake/Modules/ObsHelpers_macOS.cmake | 126 ++-- cmake/Modules/VersionConfig.cmake | 20 +- cmake/bundle/macOS/bundleutils.cmake | 96 +-- cmake/external/ObsPluginHelpers.cmake | 232 +++----- cmake/finders/.cmake-format.json | 41 -- cmake/finders/FindAsio.cmake | 94 +++ cmake/finders/FindWebsocketpp.cmake | 91 +++ cmake/macos/.cmake-format.json | 41 -- deps/CMakeLists.txt | 4 + deps/blake2/CMakeLists.txt | 16 +- deps/file-updater/CMakeLists.txt | 15 +- deps/glad/CMakeLists.txt | 47 +- deps/glad/include/glad/glad.h | 2 - deps/glad/include/glad/glad_egl.h | 2 - deps/glad/include/glad/glad_wgl.h | 2 - deps/ipc-util/CMakeLists.txt | 9 +- deps/json11/CMakeLists.txt | 8 + deps/libcaption/CMakeLists.txt | 45 +- deps/libcaption/cmake/legacy.cmake | 44 ++ deps/libff/CMakeLists.txt | 65 +- deps/media-playback/CMakeLists.txt | 15 +- deps/obs-scripting/CMakeLists.txt | 185 +----- deps/obs-scripting/cmake/legacy.cmake | 178 ++++++ deps/obs-scripting/cmake/lua.cmake | 29 + deps/obs-scripting/cmake/python.cmake | 45 ++ .../cmake/windows/obs-module.rc.in | 24 + deps/obs-scripting/obs-scripting-config.h.in | 4 + deps/obs-scripting/obs-scripting-lua.c | 5 +- .../obs-scripting-python-import.c | 1 - deps/obs-scripting/obs-scripting-python.c | 1 - deps/obs-scripting/obs-scripting.c | 1 - deps/obs-scripting/obslua/CMakeLists.txt | 71 +-- deps/obs-scripting/obslua/cmake/legacy.cmake | 63 ++ deps/obs-scripting/obslua/obslua.i | 2 - deps/obs-scripting/obspython/CMakeLists.txt | 123 ++-- .../obspython/cmake/legacy.cmake | 107 ++++ deps/obs-scripting/obspython/obspython.i | 5 +- deps/opts-parser/CMakeLists.txt | 7 +- deps/uthash/CMakeLists.txt | 9 +- deps/w32-pthreads/CMakeLists.txt | 30 +- deps/w32-pthreads/cmake/legacy.cmake | 22 + .../cmake/windows/obs-module.rc.in | 24 + libobs-d3d11/CMakeLists.txt | 14 +- libobs-opengl/.gitignore | 0 libobs-opengl/CMakeLists.txt | 51 +- libobs-opengl/cmake/legacy.cmake | 71 +++ libobs-opengl/cmake/windows/obs-module.rc.in | 24 + libobs-opengl/gl-cocoa.m | 1 - libobs-winrt/CMakeLists.txt | 3 +- libobs/CMakeLists.txt | 520 ++++++---------- libobs/cmake/32bit-build.cmake | 16 + libobs/cmake/legacy.cmake | 481 +++++++++++++++ libobs/cmake/libobsConfig.cmake.in | 5 - libobs/cmake/macos/Info.plist.in | 28 + libobs/cmake/macos/entitlements.plist | 8 + libobs/cmake/os-freebsd.cmake | 66 +++ libobs/cmake/os-linux.cmake | 70 +++ libobs/cmake/os-macos.cmake | 43 ++ libobs/cmake/os-windows.cmake | 58 ++ libobs/cmake/windows/obs-module.rc.in | 24 + libobs/obs-cocoa.m | 22 +- libobs/obsconfig.h.in | 20 +- plugins/CMakeLists.txt | 99 +++- plugins/aja/CMakeLists.txt | 46 +- plugins/aja/cmake/legacy.cmake | 74 +++ plugins/aja/cmake/macos/Info.plist.in | 28 + plugins/aja/cmake/windows/obs-module.rc.in | 24 + plugins/coreaudio-encoder/CMakeLists.txt | 44 +- plugins/coreaudio-encoder/cmake/legacy.cmake | 48 ++ .../cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + plugins/decklink/CMakeLists.txt | 37 +- plugins/decklink/cmake/legacy.cmake | 103 ++++ plugins/decklink/cmake/macos/Info.plist.in | 28 + .../decklink/cmake/windows/obs-module.rc.in | 24 + plugins/image-source/CMakeLists.txt | 20 +- plugins/image-source/cmake/legacy.cmake | 23 + .../image-source/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + plugins/linux-jack/CMakeLists.txt | 3 +- plugins/linux-pipewire/CMakeLists.txt | 19 +- plugins/linux-pulseaudio/CMakeLists.txt | 6 +- plugins/linux-v4l2/CMakeLists.txt | 7 +- plugins/mac-avcapture/CMakeLists.txt | 27 +- plugins/mac-avcapture/cmake/legacy.cmake | 33 ++ .../mac-avcapture/cmake/macos/Info.plist.in | 28 + plugins/mac-capture/CMakeLists.txt | 26 +- plugins/mac-capture/cmake/legacy.cmake | 38 ++ plugins/mac-capture/cmake/macos/Info.plist.in | 28 + plugins/mac-syphon/CMakeLists.txt | 58 +- plugins/mac-syphon/cmake/legacy.cmake | 77 +++ plugins/mac-syphon/cmake/macos/Info.plist.in | 28 + plugins/mac-videotoolbox/CMakeLists.txt | 16 +- plugins/mac-videotoolbox/cmake/legacy.cmake | 29 + .../cmake/macos/Info.plist.in | 28 + plugins/mac-virtualcam/CMakeLists.txt | 14 +- plugins/mac-virtualcam/cmake/legacy.cmake | 9 + .../src/common/data/placeholder.png | Bin 0 -> 314050 bytes .../src/dal-plugin/CMakeLists.txt | 60 +- .../src/dal-plugin/cmake/legacy.cmake | 61 ++ .../src/dal-plugin/cmake/macos/Info.plist.in | 44 ++ .../src/obs-plugin/CMakeLists.txt | 38 +- .../src/obs-plugin/cmake/legacy.cmake | 29 + .../src/obs-plugin/cmake/macos/Info.plist.in | 28 + plugins/obs-ffmpeg/CMakeLists.txt | 99 ++-- plugins/obs-ffmpeg/cmake/legacy.cmake | 115 ++++ plugins/obs-ffmpeg/cmake/macos/Info.plist.in | 28 + .../obs-ffmpeg/cmake/windows/obs-module.rc.in | 24 + plugins/obs-ffmpeg/ffmpeg-mux/CMakeLists.txt | 19 +- .../obs-ffmpeg/ffmpeg-mux/cmake/legacy.cmake | 23 + plugins/obs-ffmpeg/obs-ffmpeg.c | 2 - plugins/obs-ffmpeg/texture-amf.cpp | 2 - plugins/obs-filters/CMakeLists.txt | 177 +----- plugins/obs-filters/cmake/legacy.cmake | 188 ++++++ plugins/obs-filters/cmake/macos/Info.plist.in | 28 + plugins/obs-filters/cmake/nvidia.cmake | 17 + plugins/obs-filters/cmake/rnnoise.cmake | 46 ++ plugins/obs-filters/cmake/speexdsp.cmake | 15 + .../cmake/windows/obs-module.rc.in | 24 + plugins/obs-outputs/CMakeLists.txt | 179 +----- plugins/obs-outputs/cmake/ftl.cmake | 76 +++ plugins/obs-outputs/cmake/legacy.cmake | 189 ++++++ plugins/obs-outputs/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + plugins/obs-qsv11/CMakeLists.txt | 18 +- plugins/obs-text/CMakeLists.txt | 7 +- plugins/obs-transitions/CMakeLists.txt | 31 +- plugins/obs-transitions/cmake/legacy.cmake | 45 ++ .../obs-transitions/cmake/macos/Info.plist.in | 44 ++ .../cmake/windows/obs-module.rc.in | 24 + plugins/obs-vst/CMakeLists.txt | 84 +-- plugins/obs-vst/cmake/legacy.cmake | 79 +++ plugins/obs-vst/cmake/macos/Info.plist.in | 28 + plugins/obs-x264/CMakeLists.txt | 29 +- plugins/obs-x264/cmake/legacy.cmake | 30 + plugins/obs-x264/cmake/macos/Info.plist.in | 28 + .../obs-x264/cmake/windows/obs-module.rc.in | 24 + plugins/obs-x264/cmake/x264-test.cmake | 8 + plugins/rtmp-services/CMakeLists.txt | 37 +- plugins/rtmp-services/cmake/legacy.cmake | 51 ++ .../rtmp-services/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + plugins/rtmp-services/rtmp-services-main.c | 1 - plugins/text-freetype2/CMakeLists.txt | 36 +- plugins/text-freetype2/cmake/legacy.cmake | 46 ++ .../text-freetype2/cmake/macos/Info.plist.in | 28 + .../cmake/windows/obs-module.rc.in | 24 + plugins/text-freetype2/find-font.h | 1 + plugins/vlc-video/CMakeLists.txt | 54 +- plugins/vlc-video/cmake/legacy.cmake | 35 ++ plugins/vlc-video/cmake/macos/Info.plist.in | 28 + .../vlc-video/cmake/windows/obs-module.rc.in | 24 + plugins/win-capture/CMakeLists.txt | 10 +- .../get-graphics-offsets/CMakeLists.txt | 16 +- .../win-capture/graphics-hook/CMakeLists.txt | 18 +- .../win-capture/inject-helper/CMakeLists.txt | 14 +- plugins/win-dshow/CMakeLists.txt | 77 +-- .../virtualcam-module/CMakeLists.txt | 43 +- plugins/win-wasapi/CMakeLists.txt | 6 +- 266 files changed, 7761 insertions(+), 3863 deletions(-) create mode 100644 UI/cmake/feature-browserpanels.cmake create mode 100644 UI/cmake/feature-importers.cmake create mode 100644 UI/cmake/feature-restream.cmake create mode 100644 UI/cmake/feature-sparkle.cmake create mode 100644 UI/cmake/feature-twitch.cmake create mode 100644 UI/cmake/feature-whatsnew.cmake create mode 100644 UI/cmake/feature-youtube.cmake create mode 100644 UI/cmake/legacy.cmake create mode 100644 UI/cmake/linux/com.obsproject.Studio.appdata.xml.in create mode 100644 UI/cmake/linux/com.obsproject.Studio.desktop create mode 100644 UI/cmake/linux/icons/obs-logo-128.png create mode 100644 UI/cmake/linux/icons/obs-logo-256.png create mode 100644 UI/cmake/linux/icons/obs-logo-512.png create mode 100644 UI/cmake/linux/icons/obs-logo-scalable.svg create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png create mode 100644 UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png create mode 100644 UI/cmake/macos/Assets.xcassets/Contents.json create mode 100644 UI/cmake/macos/Info.plist.in create mode 100644 UI/cmake/macos/OBSPublicDSAKey.pem create mode 100644 UI/cmake/macos/entitlements.plist create mode 100644 UI/cmake/macos/qt.conf create mode 100644 UI/cmake/os-freebsd.cmake create mode 100644 UI/cmake/os-linux.cmake create mode 100644 UI/cmake/os-macos.cmake create mode 100644 UI/cmake/os-windows.cmake create mode 100644 UI/cmake/ui-elements.cmake create mode 100644 UI/cmake/ui-qt.cmake create mode 100644 UI/cmake/ui-windows.cmake create mode 100644 UI/frontend-plugins/aja-output-ui/cmake/legacy.cmake create mode 100644 UI/frontend-plugins/aja-output-ui/cmake/macos/Info.plist.in create mode 100644 UI/frontend-plugins/aja-output-ui/cmake/windows/obs-module.rc.in create mode 100644 UI/frontend-plugins/decklink-captions/cmake/legacy.cmake create mode 100644 UI/frontend-plugins/decklink-captions/cmake/macos/Info.plist.in create mode 100644 UI/frontend-plugins/decklink-captions/cmake/windows/obs-module.rc.in create mode 100644 UI/frontend-plugins/decklink-output-ui/cmake/legacy.cmake create mode 100644 UI/frontend-plugins/decklink-output-ui/cmake/macos/Info.plist.in create mode 100644 UI/frontend-plugins/decklink-output-ui/cmake/windows/obs-module.rc.in create mode 100644 UI/frontend-plugins/frontend-tools/cmake/legacy.cmake create mode 100644 UI/frontend-plugins/frontend-tools/cmake/macos/Info.plist.in create mode 100644 UI/frontend-plugins/frontend-tools/cmake/windows/obs-module.rc.in create mode 100644 UI/obs-frontend-api/cmake/legacy.cmake create mode 100644 UI/obs-frontend-api/cmake/windows/obs-module.rc.in create mode 100644 UI/win-update/updater/cmake/legacy.cmake delete mode 100644 cmake/finders/.cmake-format.json create mode 100644 cmake/finders/FindAsio.cmake create mode 100644 cmake/finders/FindWebsocketpp.cmake delete mode 100644 cmake/macos/.cmake-format.json create mode 100644 deps/json11/CMakeLists.txt create mode 100644 deps/libcaption/cmake/legacy.cmake create mode 100644 deps/obs-scripting/cmake/legacy.cmake create mode 100644 deps/obs-scripting/cmake/lua.cmake create mode 100644 deps/obs-scripting/cmake/python.cmake create mode 100644 deps/obs-scripting/cmake/windows/obs-module.rc.in create mode 100644 deps/obs-scripting/obslua/cmake/legacy.cmake create mode 100644 deps/obs-scripting/obspython/cmake/legacy.cmake create mode 100644 deps/w32-pthreads/cmake/legacy.cmake create mode 100644 deps/w32-pthreads/cmake/windows/obs-module.rc.in delete mode 100644 libobs-opengl/.gitignore create mode 100644 libobs-opengl/cmake/legacy.cmake create mode 100644 libobs-opengl/cmake/windows/obs-module.rc.in create mode 100644 libobs/cmake/32bit-build.cmake create mode 100644 libobs/cmake/legacy.cmake create mode 100644 libobs/cmake/macos/Info.plist.in create mode 100644 libobs/cmake/macos/entitlements.plist create mode 100644 libobs/cmake/os-freebsd.cmake create mode 100644 libobs/cmake/os-linux.cmake create mode 100644 libobs/cmake/os-macos.cmake create mode 100644 libobs/cmake/os-windows.cmake create mode 100644 libobs/cmake/windows/obs-module.rc.in create mode 100644 plugins/aja/cmake/legacy.cmake create mode 100644 plugins/aja/cmake/macos/Info.plist.in create mode 100644 plugins/aja/cmake/windows/obs-module.rc.in create mode 100644 plugins/coreaudio-encoder/cmake/legacy.cmake create mode 100644 plugins/coreaudio-encoder/cmake/macos/Info.plist.in create mode 100644 plugins/coreaudio-encoder/cmake/windows/obs-module.rc.in create mode 100644 plugins/decklink/cmake/legacy.cmake create mode 100644 plugins/decklink/cmake/macos/Info.plist.in create mode 100644 plugins/decklink/cmake/windows/obs-module.rc.in create mode 100644 plugins/image-source/cmake/legacy.cmake create mode 100644 plugins/image-source/cmake/macos/Info.plist.in create mode 100644 plugins/image-source/cmake/windows/obs-module.rc.in create mode 100644 plugins/mac-avcapture/cmake/legacy.cmake create mode 100644 plugins/mac-avcapture/cmake/macos/Info.plist.in create mode 100644 plugins/mac-capture/cmake/legacy.cmake create mode 100644 plugins/mac-capture/cmake/macos/Info.plist.in create mode 100644 plugins/mac-syphon/cmake/legacy.cmake create mode 100644 plugins/mac-syphon/cmake/macos/Info.plist.in create mode 100644 plugins/mac-videotoolbox/cmake/legacy.cmake create mode 100644 plugins/mac-videotoolbox/cmake/macos/Info.plist.in create mode 100644 plugins/mac-virtualcam/cmake/legacy.cmake create mode 100644 plugins/mac-virtualcam/src/common/data/placeholder.png create mode 100644 plugins/mac-virtualcam/src/dal-plugin/cmake/legacy.cmake create mode 100644 plugins/mac-virtualcam/src/dal-plugin/cmake/macos/Info.plist.in create mode 100644 plugins/mac-virtualcam/src/obs-plugin/cmake/legacy.cmake create mode 100644 plugins/mac-virtualcam/src/obs-plugin/cmake/macos/Info.plist.in create mode 100644 plugins/obs-ffmpeg/cmake/legacy.cmake create mode 100644 plugins/obs-ffmpeg/cmake/macos/Info.plist.in create mode 100644 plugins/obs-ffmpeg/cmake/windows/obs-module.rc.in create mode 100644 plugins/obs-ffmpeg/ffmpeg-mux/cmake/legacy.cmake create mode 100644 plugins/obs-filters/cmake/legacy.cmake create mode 100644 plugins/obs-filters/cmake/macos/Info.plist.in create mode 100644 plugins/obs-filters/cmake/nvidia.cmake create mode 100644 plugins/obs-filters/cmake/rnnoise.cmake create mode 100644 plugins/obs-filters/cmake/speexdsp.cmake create mode 100644 plugins/obs-filters/cmake/windows/obs-module.rc.in create mode 100644 plugins/obs-outputs/cmake/ftl.cmake create mode 100644 plugins/obs-outputs/cmake/legacy.cmake create mode 100644 plugins/obs-outputs/cmake/macos/Info.plist.in create mode 100644 plugins/obs-outputs/cmake/windows/obs-module.rc.in create mode 100644 plugins/obs-transitions/cmake/legacy.cmake create mode 100644 plugins/obs-transitions/cmake/macos/Info.plist.in create mode 100644 plugins/obs-transitions/cmake/windows/obs-module.rc.in create mode 100644 plugins/obs-vst/cmake/legacy.cmake create mode 100644 plugins/obs-vst/cmake/macos/Info.plist.in create mode 100644 plugins/obs-x264/cmake/legacy.cmake create mode 100644 plugins/obs-x264/cmake/macos/Info.plist.in create mode 100644 plugins/obs-x264/cmake/windows/obs-module.rc.in create mode 100644 plugins/obs-x264/cmake/x264-test.cmake create mode 100644 plugins/rtmp-services/cmake/legacy.cmake create mode 100644 plugins/rtmp-services/cmake/macos/Info.plist.in create mode 100644 plugins/rtmp-services/cmake/windows/obs-module.rc.in create mode 100644 plugins/text-freetype2/cmake/legacy.cmake create mode 100644 plugins/text-freetype2/cmake/macos/Info.plist.in create mode 100644 plugins/text-freetype2/cmake/windows/obs-module.rc.in create mode 100644 plugins/vlc-video/cmake/legacy.cmake create mode 100644 plugins/vlc-video/cmake/macos/Info.plist.in create mode 100644 plugins/vlc-video/cmake/windows/obs-module.rc.in diff --git a/.cmake-format.json b/.cmake-format.json index 7e5f236971f689..20610be23e52cc 100644 --- a/.cmake-format.json +++ b/.cmake-format.json @@ -1,13 +1,46 @@ { - "additional_commands": { - "find_qt": { - "flags": [], - "kwargs": { - "COMPONENTS": "+", - "COMPONENTS_WIN": "+", - "COMPONENTS_MACOS": "+", - "COMPONENTS_LINUX": "+" + "format": { + "line_width": 120, + "tab_size": 2, + "enable_sort": true, + "autosort": true + }, + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + }, + "set_target_properties_obs": { + "pargs": 1, + "flags": [], + "kwargs": { + "PROPERTIES": { + "kwargs": { + "PREFIX": 1, + "OUTPUT_NAME": 1, + "FOLDER": 1, + "VERSION": 1, + "SOVERSION": 1, + "FRAMEWORK": 1, + "BUNDLE": 1, + "AUTOMOC": 1, + "AUTOUIC": 1, + "AUTORCC": 1, + "AUTOUIC_SEARCH_PATHS": 1, + "BUILD_RPATH": 1, + "INSTALL_RPATH": 1, + "XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC": 1, + "XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION": 1, + "XCODE_ATTRIBUTE_GCC_WARN_SHADOW":1 , + "LIBRARY_OUTPUT_DIRECTORY": 1 + } } } } + } } diff --git a/.gitignore b/.gitignore index 081abe1848e8e6..5ecbaf77b16fdd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,25 +3,21 @@ *.dll *.dylib *.so +*.plugin +*.framework +*.systemextension #cmake -/cmbuild/ -/build/ -/build32/ -/build64/ -/release/ -/release32/ -/release64/ -/debug/ -/debug32/ -/debug64/ -/builds/ +/build*/ +/release*/ +/debug*/ .vs/ *.o.d *.ninja .ninja* .dirstamp /cmake/.CMakeBuildNumber +.deps #xcode *.xcodeproj/ diff --git a/CMakeLists.txt b/CMakeLists.txt index ddb72ed671b627..909f35a127aef4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,44 @@ -cmake_minimum_required(VERSION 3.16...3.21) +cmake_minimum_required(VERSION 3.16...3.25) + +if(OBS_CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.0) + include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake") + + project(obs-studio VERSION ${OBS_VERSION_CANONICAL}) + + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/32bit/projects.cmake") + return() + endif() + + include(compilerconfig) + include(defaults) + include(helpers) + + option(ENABLE_RELEASE_BUILD "Enable all options for a release build" OFF) + option(ENABLE_UI "Enable building with UI (requires Qt)" ON) + option(ENABLE_SCRIPTING "Enable scripting support" ON) + option(ENABLE_HEVC "Enable HEVC encoders" ON) + + add_subdirectory(libobs) + if(OS_WINDOWS) + add_subdirectory(libobs-d3d11) + add_subdirectory(libobs-winrt) + endif() + add_subdirectory(libobs-opengl) + add_subdirectory(plugins) + add_subdirectory(UI) + + message_configuration() + return() +endif() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/Modules") include(VersionConfig) # Prohibit in-source builds if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") - message( - FATAL_ERROR - "OBS: You cannot build in a source directory (or any directory with " - "CMakeLists.txt file). Please make a build subdirectory. Feel free to " - "remove CMakeCache.txt and CMakeFiles.") + message(FATAL_ERROR "OBS: You cannot build in a source directory (or any directory with CMakeLists.txt file)." + "Please make a build subdirectory. Feel free to remove CMakeCache.txt and CMakeFiles.") endif() project(obs-studio VERSION ${OBS_VERSION_CANONICAL}) @@ -25,10 +54,8 @@ include(CompilerConfig) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" - CACHE STRING - "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo - Debug MinSizeRel) + CACHE STRING "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) endif() # Global project options @@ -36,21 +63,15 @@ option(ENABLE_HEVC "Enable HEVC encoders" ON) if(ENABLE_HEVC) add_compile_definitions(ENABLE_HEVC) endif() -option(BUILD_FOR_DISTRIBUTION "Build for distribution (enables optimisations)" - OFF) +option(BUILD_FOR_DISTRIBUTION "Build for distribution (enables optimizations)" OFF) option(ENABLE_UI "Enable building with UI (requires Qt)" ON) option(ENABLE_SCRIPTING "Enable scripting support" ON) option(USE_LIBCXX "Use libc++ instead of libstdc++" ${APPLE}) -option( - BUILD_TESTS - "Build test directory (includes test sources and possibly a platform test executable)" - OFF) +option(BUILD_TESTS "Build test directory (includes test sources and possibly a platform test executable)" OFF) if(OS_WINDOWS) - option( - INSTALLER_RUN - "Build a multiarch installer (needs to run independently after both archs have compiled) (Windows)" - OFF) + option(INSTALLER_RUN + "Build a multiarch installer (needs to run independently after both archs have compiled) (Windows)" OFF) elseif(OS_POSIX) option(LINUX_PORTABLE "Build portable version (Linux)" OFF) diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt index b1558c0e89b05f..2e63ebfd57ab29 100644 --- a/UI/CMakeLists.txt +++ b/UI/CMakeLists.txt @@ -1,524 +1,110 @@ +cmake_minimum_required(VERSION 3.16...3.25) + +legacy_check() + add_subdirectory(obs-frontend-api) option(ENABLE_UI "Enable building with UI (requires Qt)" ON) + if(NOT ENABLE_UI) - obs_status(DISABLED "OBS UI") + target_disable_feature(obs "User Interface") return() -endif() - -project(obs) - -# Legacy support -if(TARGET obs-browser - AND NOT TARGET OBS::browser-panels - AND BROWSER_PANEL_SUPPORT_ENABLED) - add_library(obs-browser-panels INTERFACE) - add_library(OBS::browser-panels ALIAS obs-browser-panels) - - target_include_directories( - obs-browser-panels INTERFACE ${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel) -endif() - -set(OAUTH_BASE_URL - "https://auth.obsproject.com/" - CACHE STRING "Default OAuth base URL") - -mark_as_advanced(OAUTH_BASE_URL) - -if(NOT DEFINED TWITCH_CLIENTID - OR "${TWITCH_CLIENTID}" STREQUAL "" - OR NOT DEFINED TWITCH_HASH - OR "${TWITCH_HASH}" STREQUAL "" - OR NOT TARGET OBS::browser-panels) - set(TWITCH_ENABLED OFF) - set(TWITCH_CLIENTID "") - set(TWITCH_HASH "0") -else() - set(TWITCH_ENABLED ON) -endif() - -if(NOT DEFINED RESTREAM_CLIENTID - OR "${RESTREAM_CLIENTID}" STREQUAL "" - OR NOT DEFINED RESTREAM_HASH - OR "${RESTREAM_HASH}" STREQUAL "" - OR NOT TARGET OBS::browser-panels) - set(RESTREAM_ENABLED OFF) - set(RESTREAM_CLIENTID "") - set(RESTREAM_HASH "0") else() - set(RESTREAM_ENABLED ON) + target_enable_feature(obs "User Interface") endif() -if(NOT DEFINED YOUTUBE_CLIENTID - OR "${YOUTUBE_CLIENTID}" STREQUAL "" - OR NOT DEFINED YOUTUBE_SECRET - OR "${YOUTUBE_SECRET}" STREQUAL "" - OR NOT DEFINED YOUTUBE_CLIENTID_HASH - OR "${YOUTUBE_CLIENTID_HASH}" STREQUAL "" - OR NOT DEFINED YOUTUBE_SECRET_HASH - OR "${YOUTUBE_SECRET_HASH}" STREQUAL "") - set(YOUTUBE_ENABLED OFF) -else() - set(YOUTUBE_ENABLED ON) -endif() - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/ui-config.h) - find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat) find_package(CURL REQUIRED) -add_subdirectory(frontend-plugins) -add_executable(obs) - -find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui) +if(NOT TARGET OBS::libff-util) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/libff" "${CMAKE_BINARY_DIR}/deps/libff") +endif() -target_link_libraries(obs PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network) +if(NOT TARGET OBS::json11) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/json11" "${CMAKE_BINARY_DIR}/deps/json11") +endif() -set_target_properties( - obs - PROPERTIES AUTOMOC ON - AUTOUIC ON - AUTORCC ON - AUTOUIC_SEARCH_PATHS "forms;forms/source-toolbar") +add_executable(obs-studio) +add_executable(OBS::studio ALIAS obs-studio) -if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) - set_target_properties(obs PROPERTIES AUTORCC_OPTIONS "--format-version;1") +target_link_libraries( + obs-studio + PRIVATE CURL::libcurl + FFmpeg::avcodec + FFmpeg::avutil + FFmpeg::avformat + OBS::libobs + OBS::frontend-api + OBS::libff-util + OBS::json11) + +include(cmake/ui-qt.cmake) +include(cmake/ui-elements.cmake) +include(cmake/ui-windows.cmake) +include(cmake/feature-importers.cmake) +include(cmake/feature-browserpanels.cmake) + +if(NOT OAUTH_BASE_URL) + set(OAUTH_BASE_URL + "https://auth.obsproject.com/" + CACHE STRING "Default OAuth base URL") + + mark_as_advanced(OAUTH_BASE_URL) endif() +include(cmake/feature-twitch.cmake) +include(cmake/feature-restream.cmake) +include(cmake/feature-youtube.cmake) +include(cmake/feature-whatsnew.cmake) -target_include_directories(obs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_BINARY_DIR}) +add_subdirectory(frontend-plugins) -target_sources(obs PRIVATE forms/obs.qrc) -target_sources( - obs - PRIVATE forms/AutoConfigFinishPage.ui - forms/AutoConfigStartPage.ui - forms/AutoConfigStartPage.ui - forms/AutoConfigStreamPage.ui - forms/AutoConfigTestPage.ui - forms/AutoConfigVideoPage.ui - forms/ColorSelect.ui - forms/OBSAbout.ui - forms/OBSAdvAudio.ui - forms/OBSBasic.ui - forms/OBSBasicFilters.ui - forms/OBSBasicInteraction.ui - forms/OBSBasicSettings.ui - forms/OBSBasicSourceSelect.ui - forms/OBSBasicTransform.ui - forms/OBSBasicVCamConfig.ui - forms/OBSExtraBrowsers.ui - forms/OBSImporter.ui - forms/OBSLogReply.ui - forms/OBSMissingFiles.ui - forms/OBSRemux.ui - forms/OBSUpdate.ui - forms/OBSYoutubeActions.ui - forms/source-toolbar/browser-source-toolbar.ui - forms/source-toolbar/color-source-toolbar.ui - forms/source-toolbar/device-select-toolbar.ui - forms/source-toolbar/game-capture-toolbar.ui - forms/source-toolbar/image-source-toolbar.ui - forms/source-toolbar/media-controls.ui - forms/source-toolbar/text-source-toolbar.ui) +configure_file(ui-config.h.in ui-config.h) target_sources( - obs - PRIVATE auth-oauth.cpp - auth-oauth.hpp + obs-studio + PRIVATE api-interface.cpp + auth-base.cpp + auth-base.hpp auth-listener.cpp auth-listener.hpp + auth-oauth.cpp + auth-oauth.hpp + display-helpers.hpp + multiview.cpp + multiview.hpp obf.c obf.h obs-app.cpp obs-app.hpp obs-proxy-style.cpp obs-proxy-style.hpp - api-interface.cpp - auth-base.cpp - auth-base.hpp - display-helpers.hpp platform.hpp qt-display.cpp qt-display.hpp qt-wrappers.cpp qt-wrappers.hpp + ui-config.h ui-validation.cpp - ui-validation.hpp - multiview.cpp - multiview.hpp - ${CMAKE_SOURCE_DIR}/deps/json11/json11.cpp - ${CMAKE_SOURCE_DIR}/deps/json11/json11.hpp - ${CMAKE_SOURCE_DIR}/deps/libff/libff/ff-util.c - ${CMAKE_SOURCE_DIR}/deps/libff/libff/ff-util.h - ${CMAKE_CURRENT_BINARY_DIR}/ui-config.h) - -target_sources( - obs - PRIVATE adv-audio-control.cpp - adv-audio-control.hpp - audio-encoders.cpp - audio-encoders.hpp - balance-slider.hpp - clickable-label.hpp - double-slider.cpp - double-slider.hpp - horizontal-scroll-area.cpp - horizontal-scroll-area.hpp - item-widget-helpers.cpp - item-widget-helpers.hpp - context-bar-controls.cpp - context-bar-controls.hpp - expand-checkbox.hpp - focus-list.cpp - focus-list.hpp - hotkey-edit.cpp - hotkey-edit.hpp - lineedit-autoresize.cpp - lineedit-autoresize.hpp - locked-checkbox.cpp - locked-checkbox.hpp - log-viewer.cpp - log-viewer.hpp - media-controls.cpp - media-controls.hpp - media-slider.cpp - media-slider.hpp - menu-button.cpp - menu-button.hpp - mute-checkbox.hpp - plain-text-edit.cpp - plain-text-edit.hpp - properties-view.cpp - properties-view.hpp - properties-view.moc.hpp - record-button.cpp - record-button.hpp - remote-text.cpp - remote-text.hpp - scene-tree.cpp - scene-tree.hpp - screenshot-obj.hpp - slider-absoluteset-style.cpp - slider-absoluteset-style.hpp - slider-ignorewheel.cpp - slider-ignorewheel.hpp - source-label.cpp - source-label.hpp - spinbox-ignorewheel.cpp - spinbox-ignorewheel.hpp - source-tree.cpp - source-tree.hpp - url-push-button.cpp - url-push-button.hpp - undo-stack-obs.cpp - undo-stack-obs.hpp - volume-control.cpp - volume-control.hpp - vertical-scroll-area.cpp - vertical-scroll-area.hpp - visibility-checkbox.cpp - visibility-checkbox.hpp - visibility-item-widget.cpp - visibility-item-widget.hpp) - -target_sources( - obs - PRIVATE window-basic-about.cpp - window-basic-about.hpp - window-basic-auto-config.cpp - window-basic-auto-config.hpp - window-basic-auto-config-test.cpp - window-basic-adv-audio.cpp - window-basic-adv-audio.hpp - window-basic-filters.cpp - window-basic-filters.hpp - window-basic-interaction.cpp - window-basic-interaction.hpp - window-basic-main.cpp - window-basic-main.hpp - window-basic-main-browser.cpp - window-basic-main-dropfiles.cpp - window-basic-main-icons.cpp - window-basic-main-outputs.cpp - window-basic-main-outputs.hpp - window-basic-main-profiles.cpp - window-basic-main-scene-collections.cpp - window-basic-main-screenshot.cpp - window-basic-main-transitions.cpp - window-basic-preview.cpp - window-basic-properties.cpp - window-basic-properties.hpp - window-basic-settings.cpp - window-basic-settings.hpp - window-basic-settings-a11y.cpp - window-basic-settings-stream.cpp - window-basic-source-select.cpp - window-basic-source-select.hpp - window-basic-stats.cpp - window-basic-stats.hpp - window-basic-status-bar.cpp - window-basic-status-bar.hpp - window-basic-transform.cpp - window-basic-transform.hpp - window-basic-preview.hpp - window-basic-vcam.hpp - window-basic-vcam-config.cpp - window-basic-vcam-config.hpp - window-dock.cpp - window-dock.hpp - window-importer.cpp - window-importer.hpp - window-log-reply.hpp - window-main.hpp - window-missing-files.cpp - window-missing-files.hpp - window-namedialog.cpp - window-namedialog.hpp - window-log-reply.cpp - window-projector.cpp - window-projector.hpp - window-remux.cpp - window-remux.hpp) - -target_sources( - obs - PRIVATE importers/importers.cpp importers/importers.hpp importers/classic.cpp - importers/sl.cpp importers/studio.cpp importers/xsplit.cpp) - -target_compile_features(obs PRIVATE cxx_std_17) - -target_include_directories(obs PRIVATE ${CMAKE_SOURCE_DIR}/deps/json11 - ${CMAKE_SOURCE_DIR}/deps/libff) - -target_link_libraries( - obs PRIVATE CURL::libcurl FFmpeg::avcodec FFmpeg::avutil FFmpeg::avformat - OBS::libobs OBS::frontend-api) - -set_target_properties(obs PROPERTIES FOLDER "frontend") - -if(TARGET OBS::browser-panels) - get_target_property(_PANEL_INCLUDE_DIRECTORY OBS::browser-panels - INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(obs PRIVATE ${_PANEL_INCLUDE_DIRECTORY}) - - target_compile_definitions(obs PRIVATE BROWSER_AVAILABLE) - - target_sources( - obs PRIVATE window-dock-browser.cpp window-dock-browser.hpp - window-extra-browsers.cpp window-extra-browsers.hpp) - - if(TWITCH_ENABLED) - target_sources(obs PRIVATE auth-twitch.cpp auth-twitch.hpp) - endif() - - if(RESTREAM_ENABLED) - target_sources(obs PRIVATE auth-restream.cpp auth-restream.hpp) - endif() - - if(OS_WINDOWS OR OS_MACOS) - set(ENABLE_WHATSNEW - ON - CACHE INTERNAL "Enable WhatsNew dialog") - elseif(OS_LINUX) - option(ENABLE_WHATSNEW "Enable WhatsNew dialog" ON) - endif() - - if(ENABLE_WHATSNEW) - target_compile_definitions(obs PRIVATE WHATSNEW_ENABLED) - endif() -endif() - -if(YOUTUBE_ENABLED) - target_sources( - obs - PRIVATE auth-youtube.cpp auth-youtube.hpp youtube-api-wrappers.cpp - youtube-api-wrappers.hpp window-youtube-actions.cpp - window-youtube-actions.hpp) -endif() + ui-validation.hpp) if(OS_WINDOWS) - set_target_properties(obs PROPERTIES WIN32_EXECUTABLE ON OUTPUT_NAME - "obs${_ARCH_SUFFIX}") - - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/obs.rc.in - ${CMAKE_BINARY_DIR}/obs.rc) - - find_package(Detours REQUIRED) - - target_sources( - obs - PRIVATE obs.manifest - platform-windows.cpp - win-dll-blocklist.c - update/update-window.cpp - update/update-window.hpp - update/win-update.cpp - update/win-update.hpp - update/shared-update.cpp - update/shared-update.hpp - update/update-helpers.cpp - update/update-helpers.hpp - update/crypto-helpers-mbedtls.cpp - update/crypto-helpers.hpp - ${CMAKE_BINARY_DIR}/obs.rc) - - if(_QT_VERSION EQUAL 5) - find_qt(COMPONENTS WinExtras) - target_link_libraries(obs PRIVATE Qt::WinExtras) - endif() - - find_package(MbedTLS) - target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2 - Detours::Detours) - - target_compile_features(obs PRIVATE cxx_std_17) - - target_compile_definitions( - obs PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS - _CRT_NONSTDC_NO_WARNINGS PSAPI_VERSION=2) - - if(MSVC) - target_link_options(obs PRIVATE "LINKER:/IGNORE:4098" "LINKER:/IGNORE:4099") - target_link_libraries(obs PRIVATE OBS::w32-pthreads) - - set_source_files_properties( - ${CMAKE_CURRENT_SOURCE_DIR}../deps/libff/libff/ff-util.c - PROPERTIES COMPILE_FLAGS -Dinline=__inline) - endif() - - if(CMAKE_SIZEOF_VOID_P EQUAL 4) - target_link_options(obs PRIVATE /LARGEADDRESSAWARE) - endif() - - add_subdirectory(win-update/updater) - + include(cmake/os-windows.cmake) elseif(OS_MACOS) - set_target_properties( - obs - PROPERTIES OUTPUT_NAME ${OBS_BUNDLE_NAME} - MACOSX_BUNDLE ON - MACOSX_BUNDLE_INFO_PLIST - ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/Info.plist.in) - - if(XCODE) - set_target_properties( - obs - PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER - "${MACOSX_BUNDLE_GUI_IDENTIFIER}" - XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon - XCODE_ATTRIBUTE_PRODUCT_NAME "OBS") - - set(APP_ICON_TARGET ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/Assets.xcassets) + include(cmake/os-macos.cmake) +elseif(OS_LINUX) + include(cmake/os-linux.cmake) +elseif(OS_FREEBSD) + include(cmake/os-freebsd.cmake) +endif() - target_sources(obs PRIVATE ${APP_ICON_TARGET}) - set_source_files_properties(${APP_ICON_TARGET} - PROPERTIES MACOSX_PACKAGE_LOCATION Resources) +foreach(graphics_library IN ITEMS opengl metal d3d11) + string(TOUPPER ${graphics_library} graphics_library_U) + if(TARGET OBS::libobs-${graphics_library}) + target_compile_definitions(obs-studio + PRIVATE DL_${graphics_library_U}="$") else() - set(APP_ICON_TARGET ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/AppIcon.iconset) - set(APP_ICON_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/AppIcon.icns) - - add_custom_command( - OUTPUT ${APP_ICON_OUTPUT} COMMAND iconutil -c icns "${APP_ICON_TARGET}" - -o "${APP_ICON_OUTPUT}") - - set(MACOSX_BUNDLE_ICON_FILE AppIcon.icns) - target_sources(obs PRIVATE ${APP_ICON_OUTPUT} - ${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS) - - set_source_files_properties(${APP_ICON_OUTPUT} - PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - endif() - - find_library(APPKIT Appkit) - find_library(AVFOUNDATION AVFoundation) - find_library(APPLICATIONSERVICES ApplicationServices) - mark_as_advanced(APPKIT AVFOUNDATION APPLICATIONSERVICES) - - target_link_libraries(obs PRIVATE ${APPKIT} ${AVFOUNDATION} - ${APPLICATIONSERVICES}) - - target_sources(obs PRIVATE platform-osx.mm) - target_sources(obs PRIVATE forms/OBSPermissions.ui window-permissions.cpp - window-permissions.hpp) - - if(ENABLE_WHATSNEW) - find_library(SECURITY Security) - mark_as_advanced(SECURITY) - target_link_libraries(obs PRIVATE ${SECURITY} OBS::blake2) - - target_sources( - obs - PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mac.mm - update/shared-update.cpp update/shared-update.hpp - update/update-helpers.cpp update/update-helpers.hpp) - - if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) - find_library(SPARKLE Sparkle) - mark_as_advanced(SPARKLE) - - target_sources(obs PRIVATE update/mac-update.cpp update/mac-update.hpp - update/sparkle-updater.mm) - target_compile_definitions(obs PRIVATE ENABLE_SPARKLE_UPDATER) - target_link_libraries(obs PRIVATE ${SPARKLE}) - # Enable Automatic Reference Counting for Sparkle wrapper - set_source_files_properties(update/sparkle-updater.mm - PROPERTIES COMPILE_FLAGS -fobjc-arc) - endif() - endif() - - set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS - -fobjc-arc) - -elseif(OS_POSIX) - target_sources(obs PRIVATE platform-x11.cpp) - target_link_libraries(obs PRIVATE Qt::GuiPrivate) - - if(TARGET obspython) - find_package(Python REQUIRED COMPONENTS Interpreter Development) - target_link_libraries(obs PRIVATE Python::Python) - target_link_options(obs PRIVATE "LINKER:-no-as-needed") - endif() - - if(NOT LINUX_PORTABLE) - add_subdirectory(xdg-data) - endif() - - if(OS_FREEBSD) - target_link_libraries(obs PRIVATE procstat) + target_compile_definitions(obs-studio PRIVATE DL_${graphics_library_U}="") endif() +endforeach() - if(OS_LINUX AND ENABLE_WHATSNEW) - find_package(MbedTLS) - if(NOT MBEDTLS_FOUND) - obs_status( - FATAL_ERROR - "mbedTLS not found, but required for WhatsNew support on Linux") - endif() - - target_sources( - obs - PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mbedtls.cpp - update/shared-update.cpp update/shared-update.hpp - update/update-helpers.cpp update/update-helpers.hpp) - target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2) - endif() -endif() - -get_target_property(_SOURCES obs SOURCES) -set(_UI ${_SOURCES}) -list(FILTER _UI INCLUDE REGEX ".*\\.ui?") - -source_group( - TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms" - PREFIX "UI Files" - FILES ${_UI}) -unset(_SOURCES) -unset(_UI) - -define_graphic_modules(obs) -setup_obs_app(obs) -setup_target_resources(obs obs-studio) -add_target_resource(obs ${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS - obs-studio/authors) +set_target_properties_obs(obs-studio PROPERTIES FOLDER frontend OUTPUT_NAME obs) diff --git a/UI/cmake/feature-browserpanels.cmake b/UI/cmake/feature-browserpanels.cmake new file mode 100644 index 00000000000000..5d504940417d31 --- /dev/null +++ b/UI/cmake/feature-browserpanels.cmake @@ -0,0 +1,8 @@ +if(TARGET OBS::browser-panels) + target_enable_feature(obs-studio "Browser panels" BROWSER_AVAILABLE) + + target_link_libraries(obs-studio PRIVATE OBS::browser-panels) + + target_sources(obs-studio PRIVATE window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp + window-extra-browsers.hpp) +endif() diff --git a/UI/cmake/feature-importers.cmake b/UI/cmake/feature-importers.cmake new file mode 100644 index 00000000000000..455306c7aa78e8 --- /dev/null +++ b/UI/cmake/feature-importers.cmake @@ -0,0 +1,2 @@ +target_sources(obs-studio PRIVATE importers/importers.cpp importers/importers.hpp importers/classic.cpp + importers/sl.cpp importers/studio.cpp importers/xsplit.cpp) diff --git a/UI/cmake/feature-restream.cmake b/UI/cmake/feature-restream.cmake new file mode 100644 index 00000000000000..d11ab1a72bb2dc --- /dev/null +++ b/UI/cmake/feature-restream.cmake @@ -0,0 +1,10 @@ +if(RESTREAM_CLIENTID + AND RESTREAM_HASH + AND TARGET OBS::browser-panels) + target_sources(obs-studio PRIVATE auth-restream.cpp auth-restream.hpp) + target_enable_feature(obs-studio "Restream API connection" RESTREAM_ENABLED) +else() + target_disable_feature(obs-studio "Restream API connection") + set(RESTREAM_CLIENTID "") + set(RESTREAM_HASH "0") +endif() diff --git a/UI/cmake/feature-sparkle.cmake b/UI/cmake/feature-sparkle.cmake new file mode 100644 index 00000000000000..d6a518e1046282 --- /dev/null +++ b/UI/cmake/feature-sparkle.cmake @@ -0,0 +1,12 @@ +if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) + find_library(SPARKLE Sparkle) + mark_as_advanced(SPARKLE) + + target_sources(obs-studio PRIVATE update/mac-update.cpp update/mac-update.hpp update/sparkle-updater.mm) + set_source_files_properties(update/sparkle-updater.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) + target_link_libraries(obs-studio PRIVATE ${SPARKLE}) + + target_enable_feature(obs-studio "Sparkle updater" ENABLE_SPARKLE_UPDATER) +else() + target_disable_feature(obs-studio "Sparkle updater") +endif() diff --git a/UI/cmake/feature-twitch.cmake b/UI/cmake/feature-twitch.cmake new file mode 100644 index 00000000000000..5a0312397fb2c9 --- /dev/null +++ b/UI/cmake/feature-twitch.cmake @@ -0,0 +1,10 @@ +if(TWITCH_CLIENTID + AND TWITCH_HASH + AND TARGET OBS::browser-panels) + target_sources(obs-studio PRIVATE auth-twitch.cpp auth-twitch.hpp) + target_enable_feature(obs-studio "Twitch API connection" TWITCH_ENABLED) +else() + target_disable_feature(obs-studio "Twitch API connection") + set(TWITCH_CLIENTID "") + set(TWITCH_HASH "0") +endif() diff --git a/UI/cmake/feature-whatsnew.cmake b/UI/cmake/feature-whatsnew.cmake new file mode 100644 index 00000000000000..943e205cb802cd --- /dev/null +++ b/UI/cmake/feature-whatsnew.cmake @@ -0,0 +1,29 @@ +option(ENABLE_WHATSNEW "Enable WhatsNew dialog" ON) + +if(NOT TARGET OBS::blake2) + add_subdirectory("${CMAKE_SOURCE_DIR}/deps/blake2" "${CMAKE_BINARY_DIR}/deps/blake2") +endif() + +if(ENABLE_WHATSNEW AND TARGET OBS::browser-panels) + if(OS_MACOS) + + find_library(SECURITY Security) + mark_as_advanced(SECURITY) + + target_sources(obs-studio PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mac.mm update/shared-update.cpp + update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) + + target_link_libraries(obs-studio PRIVATE ${SECURITY} OBS::blake2) + + include(cmake/feature-sparkle.cmake) + elseif(OS_LINUX) + find_package(MbedTLS REQUIRED) + target_link_libraries(obs-studio PRIVATE MbedTLS::MbedTLS OBS::blake2) + + target_sources( + obs-studio PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mbedtls.cpp update/shared-update.cpp + update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) + endif() + + target_enable_feature(obs-studio "What's New panel" WHATSNEW_ENABLED) +endif() diff --git a/UI/cmake/feature-youtube.cmake b/UI/cmake/feature-youtube.cmake new file mode 100644 index 00000000000000..1fbdd0f744884f --- /dev/null +++ b/UI/cmake/feature-youtube.cmake @@ -0,0 +1,13 @@ +if(YOUTUBE_CLIENTID + AND YOUTUBE_SECRET + AND YOUTUBE_CLIENTID_HASH + AND YOUTUBE_SECRET_HASH) + target_sources(obs-studio PRIVATE auth-youtube.cpp auth-youtube.hpp youtube-api-wrappers.cpp youtube-api-wrappers.hpp + window-youtube-actions.cpp window-youtube-actions.hpp) + + target_enable_feature(obs-studio "YouTube API connection" YOUTUBE_ENABLED) +else() + target_disable_feature(obs-studio "YouTube API connection") + set(YOUTUBE_SECRET_HASH 0) + set(YOUTUBE_CLIENTID_HASH 0) +endif() diff --git a/UI/cmake/legacy.cmake b/UI/cmake/legacy.cmake new file mode 100644 index 00000000000000..23b4723b61f714 --- /dev/null +++ b/UI/cmake/legacy.cmake @@ -0,0 +1,489 @@ +add_subdirectory(obs-frontend-api) + +option(ENABLE_UI "Enable building with UI (requires Qt)" ON) +if(NOT ENABLE_UI) + obs_status(DISABLED "OBS UI") + return() +endif() + +project(obs) + +# Legacy support +if(TARGET obs-browser + AND NOT TARGET OBS::browser-panels + AND BROWSER_PANEL_SUPPORT_ENABLED) + add_library(obs-browser-panels INTERFACE) + add_library(OBS::browser-panels ALIAS obs-browser-panels) + + target_include_directories(obs-browser-panels INTERFACE ${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel) +endif() + +set(OAUTH_BASE_URL + "https://auth.obsproject.com/" + CACHE STRING "Default OAuth base URL") + +mark_as_advanced(OAUTH_BASE_URL) + +if(NOT DEFINED TWITCH_CLIENTID + OR "${TWITCH_CLIENTID}" STREQUAL "" + OR NOT DEFINED TWITCH_HASH + OR "${TWITCH_HASH}" STREQUAL "" + OR NOT TARGET OBS::browser-panels) + set(TWITCH_ENABLED OFF) + set(TWITCH_CLIENTID "") + set(TWITCH_HASH "0") +else() + set(TWITCH_ENABLED ON) +endif() + +if(NOT DEFINED RESTREAM_CLIENTID + OR "${RESTREAM_CLIENTID}" STREQUAL "" + OR NOT DEFINED RESTREAM_HASH + OR "${RESTREAM_HASH}" STREQUAL "" + OR NOT TARGET OBS::browser-panels) + set(RESTREAM_ENABLED OFF) + set(RESTREAM_CLIENTID "") + set(RESTREAM_HASH "0") +else() + set(RESTREAM_ENABLED ON) +endif() + +if(NOT DEFINED YOUTUBE_CLIENTID + OR "${YOUTUBE_CLIENTID}" STREQUAL "" + OR NOT DEFINED YOUTUBE_SECRET + OR "${YOUTUBE_SECRET}" STREQUAL "" + OR NOT DEFINED YOUTUBE_CLIENTID_HASH + OR "${YOUTUBE_CLIENTID_HASH}" STREQUAL "" + OR NOT DEFINED YOUTUBE_SECRET_HASH + OR "${YOUTUBE_SECRET_HASH}" STREQUAL "") + set(YOUTUBE_SECRET_HASH "0") + set(YOUTUBE_CLIENTID_HASH "0") + set(YOUTUBE_ENABLED OFF) +else() + set(YOUTUBE_ENABLED ON) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in ${CMAKE_CURRENT_BINARY_DIR}/ui-config.h) + +find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat) +find_package(CURL REQUIRED) + +add_subdirectory(frontend-plugins) +add_executable(obs) + +find_qt(COMPONENTS Widgets Network Svg Xml COMPONENTS_LINUX Gui) + +target_link_libraries(obs PRIVATE Qt::Widgets Qt::Svg Qt::Xml Qt::Network) + +set_target_properties( + obs + PROPERTIES AUTOMOC ON + AUTOUIC ON + AUTORCC ON + AUTOUIC_SEARCH_PATHS "forms;forms/source-toolbar") + +if(_QT_VERSION EQUAL 6 AND OS_WINDOWS) + set_target_properties(obs PROPERTIES AUTORCC_OPTIONS "--format-version;1") +endif() + +target_include_directories(obs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + +target_sources(obs PRIVATE forms/obs.qrc) +target_sources( + obs + PRIVATE forms/AutoConfigFinishPage.ui + forms/AutoConfigStartPage.ui + forms/AutoConfigStartPage.ui + forms/AutoConfigStreamPage.ui + forms/AutoConfigTestPage.ui + forms/AutoConfigVideoPage.ui + forms/ColorSelect.ui + forms/OBSAbout.ui + forms/OBSAdvAudio.ui + forms/OBSBasic.ui + forms/OBSBasicFilters.ui + forms/OBSBasicInteraction.ui + forms/OBSBasicSettings.ui + forms/OBSBasicSourceSelect.ui + forms/OBSBasicTransform.ui + forms/OBSBasicVCamConfig.ui + forms/OBSExtraBrowsers.ui + forms/OBSImporter.ui + forms/OBSLogReply.ui + forms/OBSMissingFiles.ui + forms/OBSRemux.ui + forms/OBSUpdate.ui + forms/OBSYoutubeActions.ui + forms/source-toolbar/browser-source-toolbar.ui + forms/source-toolbar/color-source-toolbar.ui + forms/source-toolbar/device-select-toolbar.ui + forms/source-toolbar/game-capture-toolbar.ui + forms/source-toolbar/image-source-toolbar.ui + forms/source-toolbar/media-controls.ui + forms/source-toolbar/text-source-toolbar.ui) + +target_sources( + obs + PRIVATE auth-oauth.cpp + auth-oauth.hpp + auth-listener.cpp + auth-listener.hpp + obf.c + obf.h + obs-app.cpp + obs-app.hpp + obs-proxy-style.cpp + obs-proxy-style.hpp + api-interface.cpp + auth-base.cpp + auth-base.hpp + display-helpers.hpp + platform.hpp + qt-display.cpp + qt-display.hpp + qt-wrappers.cpp + qt-wrappers.hpp + ui-validation.cpp + ui-validation.hpp + multiview.cpp + multiview.hpp + ${CMAKE_SOURCE_DIR}/deps/json11/json11.cpp + ${CMAKE_SOURCE_DIR}/deps/json11/json11.hpp + ${CMAKE_SOURCE_DIR}/deps/libff/libff/ff-util.c + ${CMAKE_SOURCE_DIR}/deps/libff/libff/ff-util.h + ${CMAKE_CURRENT_BINARY_DIR}/ui-config.h) + +target_sources( + obs + PRIVATE adv-audio-control.cpp + adv-audio-control.hpp + audio-encoders.cpp + audio-encoders.hpp + balance-slider.hpp + clickable-label.hpp + double-slider.cpp + double-slider.hpp + horizontal-scroll-area.cpp + horizontal-scroll-area.hpp + item-widget-helpers.cpp + item-widget-helpers.hpp + context-bar-controls.cpp + context-bar-controls.hpp + expand-checkbox.hpp + focus-list.cpp + focus-list.hpp + hotkey-edit.cpp + hotkey-edit.hpp + lineedit-autoresize.cpp + lineedit-autoresize.hpp + locked-checkbox.cpp + locked-checkbox.hpp + log-viewer.cpp + log-viewer.hpp + media-controls.cpp + media-controls.hpp + media-slider.cpp + media-slider.hpp + menu-button.cpp + menu-button.hpp + mute-checkbox.hpp + plain-text-edit.cpp + plain-text-edit.hpp + properties-view.cpp + properties-view.hpp + properties-view.moc.hpp + record-button.cpp + record-button.hpp + remote-text.cpp + remote-text.hpp + scene-tree.cpp + scene-tree.hpp + screenshot-obj.hpp + slider-absoluteset-style.cpp + slider-absoluteset-style.hpp + slider-ignorewheel.cpp + slider-ignorewheel.hpp + source-label.cpp + source-label.hpp + spinbox-ignorewheel.cpp + spinbox-ignorewheel.hpp + source-tree.cpp + source-tree.hpp + url-push-button.cpp + url-push-button.hpp + undo-stack-obs.cpp + undo-stack-obs.hpp + volume-control.cpp + volume-control.hpp + vertical-scroll-area.cpp + vertical-scroll-area.hpp + visibility-checkbox.cpp + visibility-checkbox.hpp + visibility-item-widget.cpp + visibility-item-widget.hpp) + +target_sources( + obs + PRIVATE window-basic-about.cpp + window-basic-about.hpp + window-basic-auto-config.cpp + window-basic-auto-config.hpp + window-basic-auto-config-test.cpp + window-basic-adv-audio.cpp + window-basic-adv-audio.hpp + window-basic-filters.cpp + window-basic-filters.hpp + window-basic-interaction.cpp + window-basic-interaction.hpp + window-basic-main.cpp + window-basic-main.hpp + window-basic-main-browser.cpp + window-basic-main-dropfiles.cpp + window-basic-main-icons.cpp + window-basic-main-outputs.cpp + window-basic-main-outputs.hpp + window-basic-main-profiles.cpp + window-basic-main-scene-collections.cpp + window-basic-main-screenshot.cpp + window-basic-main-transitions.cpp + window-basic-preview.cpp + window-basic-properties.cpp + window-basic-properties.hpp + window-basic-settings.cpp + window-basic-settings.hpp + window-basic-settings-a11y.cpp + window-basic-settings-stream.cpp + window-basic-source-select.cpp + window-basic-source-select.hpp + window-basic-stats.cpp + window-basic-stats.hpp + window-basic-status-bar.cpp + window-basic-status-bar.hpp + window-basic-transform.cpp + window-basic-transform.hpp + window-basic-preview.hpp + window-basic-vcam.hpp + window-basic-vcam-config.cpp + window-basic-vcam-config.hpp + window-dock.cpp + window-dock.hpp + window-importer.cpp + window-importer.hpp + window-log-reply.hpp + window-main.hpp + window-missing-files.cpp + window-missing-files.hpp + window-namedialog.cpp + window-namedialog.hpp + window-log-reply.cpp + window-projector.cpp + window-projector.hpp + window-remux.cpp + window-remux.hpp) + +target_sources(obs PRIVATE importers/importers.cpp importers/importers.hpp importers/classic.cpp importers/sl.cpp + importers/studio.cpp importers/xsplit.cpp) + +target_compile_features(obs PRIVATE cxx_std_17) + +target_include_directories(obs PRIVATE ${CMAKE_SOURCE_DIR}/deps/json11 ${CMAKE_SOURCE_DIR}/deps/libff) + +target_link_libraries(obs PRIVATE CURL::libcurl FFmpeg::avcodec FFmpeg::avutil FFmpeg::avformat OBS::libobs + OBS::frontend-api) + +set_target_properties(obs PROPERTIES FOLDER "frontend") + +if(TARGET OBS::browser-panels) + get_target_property(_PANEL_INCLUDE_DIRECTORY OBS::browser-panels INTERFACE_INCLUDE_DIRECTORIES) + target_include_directories(obs PRIVATE ${_PANEL_INCLUDE_DIRECTORY}) + + target_compile_definitions(obs PRIVATE BROWSER_AVAILABLE) + + target_sources(obs PRIVATE window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp + window-extra-browsers.hpp) + + if(TWITCH_ENABLED) + target_sources(obs PRIVATE auth-twitch.cpp auth-twitch.hpp) + endif() + + if(RESTREAM_ENABLED) + target_sources(obs PRIVATE auth-restream.cpp auth-restream.hpp) + endif() + + if(OS_WINDOWS OR OS_MACOS) + set(ENABLE_WHATSNEW + ON + CACHE INTERNAL "Enable WhatsNew dialog") + elseif(OS_LINUX) + option(ENABLE_WHATSNEW "Enable WhatsNew dialog" ON) + endif() + + if(ENABLE_WHATSNEW) + target_compile_definitions(obs PRIVATE WHATSNEW_ENABLED) + endif() +endif() + +if(YOUTUBE_ENABLED) + target_sources(obs PRIVATE auth-youtube.cpp auth-youtube.hpp youtube-api-wrappers.cpp youtube-api-wrappers.hpp + window-youtube-actions.cpp window-youtube-actions.hpp) +endif() + +if(OS_WINDOWS) + set_target_properties(obs PROPERTIES WIN32_EXECUTABLE ON OUTPUT_NAME "obs${_ARCH_SUFFIX}") + + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/obs.rc.in ${CMAKE_BINARY_DIR}/obs.rc) + + find_package(Detours REQUIRED) + + target_sources( + obs + PRIVATE obs.manifest + platform-windows.cpp + win-dll-blocklist.c + update/update-window.cpp + update/update-window.hpp + update/win-update.cpp + update/win-update.hpp + update/shared-update.cpp + update/shared-update.hpp + update/update-helpers.cpp + update/update-helpers.hpp + update/crypto-helpers-mbedtls.cpp + update/crypto-helpers.hpp + ${CMAKE_BINARY_DIR}/obs.rc) + + if(_QT_VERSION EQUAL 5) + find_qt(COMPONENTS WinExtras) + target_link_libraries(obs PRIVATE Qt::WinExtras) + endif() + + find_package(MbedTLS) + target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2 Detours::Detours) + + target_compile_features(obs PRIVATE cxx_std_17) + + target_compile_definitions(obs PRIVATE UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS + PSAPI_VERSION=2) + + if(MSVC) + target_link_options(obs PRIVATE "LINKER:/IGNORE:4098" "LINKER:/IGNORE:4099") + target_link_libraries(obs PRIVATE OBS::w32-pthreads) + + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}../deps/libff/libff/ff-util.c PROPERTIES COMPILE_FLAGS + -Dinline=__inline) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + target_link_options(obs PRIVATE /LARGEADDRESSAWARE) + endif() + + add_subdirectory(win-update/updater) + +elseif(OS_MACOS) + set_target_properties( + obs + PROPERTIES OUTPUT_NAME ${OBS_BUNDLE_NAME} + MACOSX_BUNDLE ON + MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/Info.plist.in) + + if(XCODE) + set_target_properties( + obs + PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${MACOSX_BUNDLE_GUI_IDENTIFIER}" + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon + XCODE_ATTRIBUTE_PRODUCT_NAME "OBS") + + set(APP_ICON_TARGET ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/Assets.xcassets) + + target_sources(obs PRIVATE ${APP_ICON_TARGET}) + set_source_files_properties(${APP_ICON_TARGET} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + else() + set(APP_ICON_TARGET ${CMAKE_SOURCE_DIR}/cmake/bundle/macOS/AppIcon.iconset) + set(APP_ICON_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/AppIcon.icns) + + add_custom_command(OUTPUT ${APP_ICON_OUTPUT} COMMAND iconutil -c icns "${APP_ICON_TARGET}" -o "${APP_ICON_OUTPUT}") + + set(MACOSX_BUNDLE_ICON_FILE AppIcon.icns) + target_sources(obs PRIVATE ${APP_ICON_OUTPUT} ${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS) + + set_source_files_properties(${APP_ICON_OUTPUT} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + endif() + + find_library(APPKIT Appkit) + find_library(AVFOUNDATION AVFoundation) + find_library(APPLICATIONSERVICES ApplicationServices) + mark_as_advanced(APPKIT AVFOUNDATION APPLICATIONSERVICES) + + target_link_libraries(obs PRIVATE ${APPKIT} ${AVFOUNDATION} ${APPLICATIONSERVICES}) + + target_sources(obs PRIVATE platform-osx.mm) + target_sources(obs PRIVATE forms/OBSPermissions.ui window-permissions.cpp window-permissions.hpp) + + if(ENABLE_WHATSNEW) + find_library(SECURITY Security) + mark_as_advanced(SECURITY) + target_link_libraries(obs PRIVATE ${SECURITY} OBS::blake2) + + target_sources(obs PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mac.mm update/shared-update.cpp + update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) + + if(SPARKLE_APPCAST_URL AND SPARKLE_PUBLIC_KEY) + find_library(SPARKLE Sparkle) + mark_as_advanced(SPARKLE) + + target_sources(obs PRIVATE update/mac-update.cpp update/mac-update.hpp update/sparkle-updater.mm) + target_compile_definitions(obs PRIVATE ENABLE_SPARKLE_UPDATER) + target_link_libraries(obs PRIVATE ${SPARKLE}) + # Enable Automatic Reference Counting for Sparkle wrapper + set_source_files_properties(update/sparkle-updater.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) + endif() + endif() + + set_source_files_properties(platform-osx.mm PROPERTIES COMPILE_FLAGS -fobjc-arc) + +elseif(OS_POSIX) + target_sources(obs PRIVATE platform-x11.cpp) + target_link_libraries(obs PRIVATE Qt::GuiPrivate) + + target_compile_definitions(obs PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}") + if(TARGET obspython) + find_package(Python REQUIRED COMPONENTS Interpreter Development) + target_link_libraries(obs PRIVATE Python::Python) + target_link_options(obs PRIVATE "LINKER:-no-as-needed") + endif() + + if(NOT LINUX_PORTABLE) + add_subdirectory(xdg-data) + endif() + + if(OS_FREEBSD) + target_link_libraries(obs PRIVATE procstat) + endif() + + if(OS_LINUX AND ENABLE_WHATSNEW) + find_package(MbedTLS) + if(NOT MBEDTLS_FOUND) + obs_status(FATAL_ERROR "mbedTLS not found, but required for WhatsNew support on Linux") + endif() + + target_sources(obs PRIVATE update/crypto-helpers.hpp update/crypto-helpers-mbedtls.cpp update/shared-update.cpp + update/shared-update.hpp update/update-helpers.cpp update/update-helpers.hpp) + target_link_libraries(obs PRIVATE Mbedtls::Mbedtls OBS::blake2) + endif() +endif() + +get_target_property(_SOURCES obs SOURCES) +set(_UI ${_SOURCES}) +list(FILTER _UI INCLUDE REGEX ".*\\.ui?") + +source_group( + TREE "${CMAKE_CURRENT_SOURCE_DIR}/forms" + PREFIX "UI Files" + FILES ${_UI}) +unset(_SOURCES) +unset(_UI) + +define_graphic_modules(obs) +setup_obs_app(obs) +setup_target_resources(obs obs-studio) +add_target_resource(obs ${CMAKE_CURRENT_SOURCE_DIR}/../AUTHORS obs-studio/authors) diff --git a/UI/cmake/linux/com.obsproject.Studio.appdata.xml.in b/UI/cmake/linux/com.obsproject.Studio.appdata.xml.in new file mode 100644 index 00000000000000..b11b1afa0e1a4b --- /dev/null +++ b/UI/cmake/linux/com.obsproject.Studio.appdata.xml.in @@ -0,0 +1,46 @@ + + + com.obsproject.Studio + com.obsproject.Studio.desktop + CC0-1.0 + GPL-2.0 + OBS Studio + OBS Project +

        Live streaming and video recording software + +

        Free and open source software for video capturing, recording, and live streaming.

        +

        Features:

        +
          +
        • High performance real time video/audio capturing and mixing. Create scenes made up of multiple sources including window captures, images, text, browser windows, webcams, capture cards and more.
        • +
        • Set up an unlimited number of scenes you can switch between seamlessly via custom transitions.
        • +
        • Intuitive audio mixer with per-source filters such as noise gate, noise suppression, and gain. Take full control with VST plugin support.
        • +
        • Powerful and easy to use configuration options. Add new Sources, duplicate existing ones, and adjust their properties effortlessly.
        • +
        • Streamlined Settings panel gives you access to a wide array of configuration options to tweak every aspect of your broadcast or recording.
        • +
        • Modular 'Dock' UI allows you to rearrange the layout exactly as you like. You can even pop out each individual Dock to its own window.
        • +
        +

        Create Professional Productions:

        +
          +
        • Choose from a number of different and customizable transitions for when you switch between your scenes or add your own stinger video files.
        • +
        • Set hotkeys for nearly every sort of action, such as switching between scenes, starting/stopping streams or recordings, muting audio sources, push to talk, and more.
        • +
        • Studio Mode lets you preview your scenes and sources before pushing them live. Adjust your scenes and sources or create new ones and ensure they're perfect before your viewers ever see them.
        • +
        • Get a high level view of your production using the Multiview. Monitor 8 different scenes and easily cue or transition to any of them with merely a single or double click.
        • +
        +
        + https://obsproject.com + https://github.com/obsproject/obs-studio/issues + https://obsproject.com/contribute + https://crowdin.com/project/obs-studio + + + https://obsproject.com/assets/images/OBSDemoApp2610.png + + + + + ModernToolkit + HiDpiIcon + + + + + diff --git a/UI/cmake/linux/com.obsproject.Studio.desktop b/UI/cmake/linux/com.obsproject.Studio.desktop new file mode 100644 index 00000000000000..95b07a89180be2 --- /dev/null +++ b/UI/cmake/linux/com.obsproject.Studio.desktop @@ -0,0 +1,97 @@ +[Desktop Entry] +Version=1.0 +Name=OBS Studio +GenericName=Streaming/Recording Software +Comment=Free and Open Source Streaming/Recording Software +Exec=obs +Icon=com.obsproject.Studio +Terminal=false +Type=Application +Categories=AudioVideo;Recorder; +StartupNotify=true +StartupWMClass=obs + +GenericName[an_ES]=Programa de retransmisión/gravación +Comment[an_ES]=Program de retransmisión/gravación libre y de codigo ubierto +GenericName[ar_SA]=برامج البث / التسجيل +Comment[ar_SA]=برنامج بث / تسجيل مجاني ومفتوح المصدر +GenericName[bn_BD]=স্ট্রিমিং/রেকর্ডিং সফটওয়্যার +Comment[bn_BD]=ফ্রি এবং মুক্ত সোর্স স্ট্রিমিং/রেকর্ডিং সফ্টওয়্যার +GenericName[ca_ES]=Programa de retransmissió/enregistrament +Comment[ca_ES]=Programa de retransmissió/enregistrament de codi lliure i gratuït +GenericName[cs_CZ]=Software pro vysílání a nahrávání +Comment[cs_CZ]=Svobodný software pro vysílání a nahrávání +GenericName[da_DK]=Streaming-/optagelsessoftware +Comment[da_DK]=Gratis og open-source streaming-/optagelsessoftware +GenericName[de_DE]=Streaming-/Aufnahme-Software +Comment[de_DE]=Freie und Open-Source-Streaming-/Aufnahme-Software +GenericName[el_GR]=Λογισμικό Ροής/Καταγραφής +Comment[el_GR]=Δωρεαν Λογισμικό Streaming/Kαταγραφή ανοιχτου κωδικα +GenericName[en_GB]=Streaming/Recording Software +Comment[en_GB]=Free and Open Source Streaming/Recording Software +GenericName[es_ES]=Disfusion digital/ Software de grabacion +Comment[es_ES]=Difusion Digital/Software de grabacion Gratis y con Fuentes Abiertas +GenericName[et_EE]=Video voogesituse ja salvestuse tarkvara +Comment[et_EE]=Tasuta ja avatud lähtekoodiga video voogesituse ja salvestuse tarkvara +GenericName[fa_IR]=نرم افزار جریان/ضبط +Comment[fa_IR]=نرم افزار منبع باز و رایگان جریان/ضبط +GenericName[fi_FI]=Striimaus-/tallennusohjelmisto +Comment[fi_FI]=Ilmainen ja avoimen lähdekoodin striimaus-/tallennusohjelmisto +GenericName[fil_PH]=Software para sa Streaming/Recording +Comment[fil_PH]=Libre at Open Source na Streaming/Recording Software +GenericName[fr_FR]=Logiciel de diffusion/enregistrement +Comment[fr_FR]=Logiciel de diffusion/enregistrement gratuit et Open Source +GenericName[gd_GB]=Bathar-bog sruthaidh/clàraidh +Comment[gd_GB]=Bathar-bog sruthaidh/clàraidh saor le bun-tùs fosgailte +GenericName[he_IL]=תוכנה לשידורים חיים והקלטה +Comment[he_IL]=תכנה חינמית בקוד פתוח לשידורים חיים ולהקלטה +GenericName[hi_IN]=स्ट्रीमिंग/रिकॉर्डिंग सॉफ्टवेयर +Comment[hi_IN]=स्वतंत्र एवं खुले स्रोत वाला स्ट्रीमिंग/रिकॉर्डिंग सॉफ्टवेयर +GenericName[hr_HR]=Softver za emitiranje/snimanje +Comment[hr_HR]=Slobodan softver otvorenog koda za emitiranje/snimanje +GenericName[hu_HU]=Közvetítő/rögzítő szoftver +Comment[hu_HU]=Szabad és nyílt forráskódú közvetítő/rögzítő szoftver +GenericName[id_ID]=Perangkat Lunak Streaming/Perekaman +Comment[id_ID]=Perangkat Lunak Streaming/Perekaman Gratis dan Sumber Terbuka +GenericName[it_IT]=Software per dirette e registrazione schermo +Comment[it_IT]=Software Libero e Open Source Streaming/Registrazione +GenericName[ja_JP]=配信/録画ソフトウェア +Comment[ja_JP]=無料のオープンソース配信/録画ソフトウェア +GenericName[ka_GE]=ვიდეოს ეთერში გამშვები/ჩამწერი პროგრამა +Comment[ka_GE]=თავისუფალი და ღია წყაროს მქონე, ვიდეოს ეთერში გამშვები/ჩამწერი პროგრამა +GenericName[kmr_TR]=Nermalava weşandin/tomarkirin-ê +Comment[kmr_TR]=Nermalava weşandin/tomarkirin-ê belaş û çavkaniya azad +GenericName[ko_KR]=방송 및 녹화 프로그램 +Comment[ko_KR]=무료 오픈소스 방송 및 녹화 프로그램 +GenericName[ms_MY]=Perisian Penstriman/Rakaman +Comment[ms_MY]=Perisian Penstriman/Rakaman Bersumber Terbuka dan Bebas +GenericName[nb_NO]=Strømming- og Opptaksprogramvare +Comment[nb_NO]=Gratis Strømming- og Opptaksprogramvare med Åpen Kildekode +GenericName[nl_NL]=Streaming/Opname Software +Comment[nl_NL]=Vrij en Open Source Streaming/Opname Sofware +GenericName[pl_PL]=Oprogramowanie do transmisji strumieniowej/nagrywania +Comment[pl_PL]=Darmowe i otwarte oprogramowanie do transmisji strumieniowej/nagrywania +GenericName[pt_BR]=Software de Streaming/Gravação +Comment[pt_BR]=Software de Streaming/Gravação de Código Aberto e Livre +GenericName[pt_PT]=Programa de transmissão/gravação +Comment[pt_PT]=Programa de transmissão/gravação livre e de código aberto +GenericName[ro_RO]=Program de Streaming/Înregistrare +Comment[ro_RO]=Program de streaming / înregistrare gratuit și open source +GenericName[ru_RU]=Программа для видеостриминга и видеозаписи +Comment[ru_RU]=Свободное и открытое ПО для видеостриминга и видеозаписи +GenericName[sk_SK]=Streamovací/Nahrávací Software +Comment[sk_SK]=Bezplatný a otvorený streamovací/nahrávací software +GenericName[sl_SI]=Pretočna/snemalna programska oprema +Comment[sl_SI]=Brezplačni in odprtokodna programska oprema za pretakanje/snemanje +GenericName[sv_SE]=Programvara för strömning/inspelning +Comment[sv_SE]=Fri programvara för strömning/inspelning med öppen källkod +GenericName[tr_TR]=Yayın/Kayıt Yazılımı +Comment[tr_TR]=Ücretsiz ve Açık Kaynaklı Yayın/Kayıt Yazılımı +GenericName[uk_UA]=Програма для трансляцій/запису +Comment[uk_UA]=Вільне та відкрите програмне забезпечення для трансляцій/запису +GenericName[vi_VN]=Phần mềm ghi hình/phát luồng +Comment[vi_VN]=Phần mềm ghi hình / phát luồng mở và miễn phí +GenericName[zh_CN]=直播/录像软件 +Comment[zh_CN]=自由且开源的用于直播串流以及视频录制的软件 +GenericName[zh_TW]=串流與錄影軟體 +Comment[zh_TW]=免費,開源的串流與錄影軟體 diff --git a/UI/cmake/linux/icons/obs-logo-128.png b/UI/cmake/linux/icons/obs-logo-128.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c688da2c71e3c0ae440ba0ab9d7b24005b5209 GIT binary patch literal 18671 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 literal 0 HcmV?d00001 diff --git a/UI/cmake/linux/icons/obs-logo-512.png b/UI/cmake/linux/icons/obs-logo-512.png new file mode 100644 index 0000000000000000000000000000000000000000..a536f57a19e4aaebaf144b731832daa645b53d00 GIT binary patch literal 130086 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

        dh6;*Wzz$pLEB0b9kuY-lZ!ha^yNkK7QC$6q*-~ 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 ITYtavpS!?*)c^nh literal 0 HcmV?d00001 diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..97f34d8a6cc976a72b5195d3284b4f17449ebda4 GIT binary patch literal 7456 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 literal 0 HcmV?d00001 diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..2b264dde00384143e0cc9b2b03c10e7b1abf7fa3 GIT binary patch literal 163961 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

        T2oRMTvq|LG@diNwjyjLqfy$^TrkK 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

        WmlA*BETyQ?loZ&p8Raa`TFV%vYI48yI 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
          C5T2q;Q{fXvVFf&Y6zz#0JH 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
          WmlA*BETyQ?loZ&p8Raa`TFV%vYI48yI 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

          VKu-X28eN`HH$hyN0k?y>H5pHtxyl*P8*?QQ z7vh)~PzvqV;Z|HBO^_#raijKZtzOSST~gK;@X=^G9}U?7U_^2-crGhTZ%@^$x?zmC znv~wLFDnGwyeefbU%`ae;uVxt%+C8O<$Wa3KV8|LOvstYpS+QdE9W26maX7xdH*PcRJUWxLw{pJD1NpgZ%8>MM4jUQF&j&pznjv0yS#rKOBRK%! zKpwwWB=zwn*D&nqxC?b%*~y_LTc5Xh6_wmhR#UxEw$^e~GqI&m>{3|&563%_!$J+S zatOlh4CK$9BCyqSyVQ{DNdbT+;={(|_z-sI`g=KBT({)?O`jt4Bu9=yufID1XYq~# zIB!rUEYI6LJp}-o0wzm1m9O`jbbN7F{=7MVZ%O{$qp4oS3}}X>c|W@o1Qa*92WU1B zw&(S^`TQ>BeUImsp{~I=x^pi$J>TCOD*1Qvd8RT*cF4J%mBK~tdMVx{>wW37I`^Mx zyA=(p7|AKt4RK+9F6SG^pjW~Ql+CkQiYAzWR!`cBaVITCljY{1C2Y|qIo2e?Ro!gK zB0f1{B;wY=)Q_lTh5Wb)4fn2Nct$~>sAk|Z5de;x)PNP4@Hb0yjtm(sB9-EK$*E!j zgSOb5ujdGc?F;)bJ-+EITEfP76ch2JF*Jq+F_D70GjLcB`K>t)6Q9ogTq(DU>7H12vlgt8&y63w85fp{=%MN^n=bw2*ZQvY9;`te3$Zyq&t zYBfpd%EYQIxxH)FVAMUr)HUnl4XM{l1eLkM7)v-BX`o1 z8208GGoI^PO%Vanl1VLh;t=k50<>Be52MwQ@HmEJk0PodIay^SkG;faT*>X^nOtucgu@td+bVRpo*fC6gn6l6#uTGd z%h#!J1}a*yq*x#FSiG6$usLt%sXPu!iu}nbiNcTCsn4>A4REeXKGukMI>ZDDIX14hFl;xUb}jyAPW&f7`PMVfo7>QhEvTxk?7p7atL z6R|2@4IAPxVX?!Znfi{q`(r0V*WaxTy~^p`r~aSQU!yU83?>tO5V z)>U}c0Zn)=JQa>oS~hJ@7^YOUFrFmbG`%!RJP_Ur$1poCaGbCq%r^%U9@UEp%dC~& zFG&jf7A$jH9eZu@B4(I$1chf&gR7pz+n&>iTlzDh^lfD{drLRw=k}to~C-X%1KRq@w|U-Di4BH;&>!#_vKZ^l>i z_tO}o9CzpS7g35g;=e~J{FShsIH(+dkcWwj*p=frWb#g z9Rcz2rv~P@J$4P53I+#@%=b1MFONZiICO&i7-$o|Krqp z_@>!#d3%KeK={yh;?(z|59|N$cLMn4IDrR5fCuG4(Nrk)3&6cl>KAy=%=^~6^RmE) zy7ICB@G}9RaGH)kb>DUiJgOMU-A@20aI5a0RiAa`O}m? zt|P#=ivqac0iakG1c0IeEgICKfh`)`!U>?rVkx2k3L-!;H2QOSSv2t7d6}7Cq38&{ zke7)75I^>GK8v#+ln3QOc~Jhe<$mD5D1YepTp_*}Ct?D=$Ne`9_@ZCN@A;}z81_#5 zFZilkHsZH^Ca%L(zZU;G{=5GYzm8vtd*YWUeZ6$pC#k(x`;WCf%zEz!{$ty};*}r! zm;d_7T~yxq=%vQ55I<&?RfJ!6+X?iUG=XLdHKUpV!KHa(e~I%dl*Jc~`9v>7v8)P;!*)D7#m951_`GqW#f z$0`GkVo;mgIHG0`mU$i29JQ9%97kg(*6O#CxGF3(KvX|(DfI>Q!Pvvym+mg9m#EFD zwY;Bz|LN5(CRa`#e(!Y#Ru8Q1-^piod}jG)`nfRe!ly6%7-O}u$G^UYu-QB>5<9)& zIUF!)JMo;VmnBQ-{TPq0B;|Nmp%Ei-ze!Wmu#VZ_%$v_-IN6x-|E?e0TWx!}iV`#=5m*Ox+;-L(5UULQ`*$Tg|Bi_L&6IzHbWZ<`USrg$$leg7ui%eo)# zzQiYf{S&{i?$;=fmT#1o^8Uv6kG%f|F4=6GG$Ef9e|MadEbWtZ^sTJ;o*oY=^n3}3 zs^ovw+*96HQi^Pxh{LhML#rNov^fq2&BVT;)_TRq!4Qe;<&bYgWk8GQ^dD>3u zFT_NQcrw0Vh#c`jH*fdP}OTG+Pvj5dUQQ77x_GD#09&cpJ=SxYsZ@^8IZE^|CnebD0&QA0>p#$yO)lku`S&C?=6Q4-S zkb&R$cD^2y8AvV@l7)CVPn=K0o5Yh^oySEjS|r8hOpLo2Ix!h9#-yabnD!f<)QNh$ znh6qVIqs5EsF|6w<6GltRPys#)0i#c+a*P0izalcX~AHQ2)UN)Z@Pz6a{YciFK6ZR z8PC@~*YCJBpW~D1^Z0u5E(oi$;&LMYSI$7^Q2IO;M65e%I*EHTpgWoC_4WMx^kwCC zJ@=cnd^{($s-ZV42TPgwQM9W~N^zX9A_Mu)=XUPN6op_$N^cKK5UtE_iK$K z7&SEI9?(HNlG@9#F-N=1$?Z^rYsK}cWeV$(rFVQo0__K~a=WHv6pItY85XDO8B=_T zuwzOQpGr@z;hh<1Z_b|=nb>pl{kW7NvBtck#hbm4Yt*W+WVx=`1t z9SaN@CcKr9{e)})03ZNKL_t)Z>$oy0s>2H=l-wh7Ey$4jvJ6<4^1E*<8IWwuQ7|Vm z0JkMB!kBsCDYRq)Tw8c9#}iaD;G2}dl~@g}Xb6i`(WWDg61VD6B|N1dmLk3DD(^E48V>y#Wk zMnVH&m!>$0joCS(mfu_YY>1CxGCmu&pxH7{qBX3vh};))B|mS|GX-Oga%e+ECHK>_ z!eR8;Xb3annG_`xR)$T)$BmdEtjPp|#ZyrwHO=USpWb!q)0A#b`|fGK$dc(xZZ6qG>-yGP zt&iYICC7Pa$Vwe}s?;)VHa3@9<6KHlnBfrig>>Ivv^1Q>OIEum0qYakt4Rfu-gX=> z>a!V_U2+pQ%(5IyHF^_e1KIJT%RVf3#vx32)qM1M%4UqX4pup(0T=RkXqE-~P)kuI zW_eTxhHdl&_SmFJifXE1u|-qFJh>G+?~5dTB{8u4`4Sz1n55&x}5 zJQTKP;#fZ?8}73VYBZ;qvqsp5>F>!KCFx{lzu7yN>DY+e@l zR6!^x@TCH8Dz;m+&V}5ekT?8E9RThJ{=Xd&;6Zs%{-??V0>FdvCn?{Kf%NSn0q$oy zeJclm`=bB~0zfh3DH_~@fmLv0iw3%Au#5c`dYOXR_3elN@1}i~|A7aM?St~5JSczK za_@z#l$qga{rA1&zeoVrFy7D0F~hFm54`Ildj0qKZ}H!K&MMsW>+zrBzs0lhlf>Wf zdc2EI#s3srDcveP<8N|z&fR$T2WkEvO&_23+dT9ATfb+`Pcdul55D>Re;@zQWWE$Vu_gS3dV!j4U1bi9dLS`cw5Q^|g4(OYs@vI-|Bo7LL0l zK;Qr--BBo=%TfmI1S(Fb<5aFUg<|$>CO}MT%Dq%;yom9*-*)uc>;zg3#|iXj0ONR4 z>c=BlVc(&eBOE&78I%$bugBA#MS}(L5<0bb9oMr$|3LoUa6aCe9#>IQif>>n9?Gr) zXFZKxqb70CnK**8X@WZr8dJrJJh9todb}-7@NB_ge9<+GcoEDrJ3No;5;5jVp)AZm zXelYjv?#|TsJi3{^v9>;AxwHPw4+gL9F!Ep73@vQ=a{YjJ*A!%a*d%2WAS>tiJGCf z8zZ)cGTJrAVaf8hjOTNd!pZdV7gl;AY{JEGGW1|>(ipAzuD|nJYretvEN}Ncv#2%H zo~}KP-BwsHO@KFG&~tWS!i9JoDFP?zWAb~_)JQ$!8nelxHhz6*w%OlWp{F>af@->w19kHns6c4$Bqo7 zb>?=XBOlel48(M$^NKstxrI(eoI{E>c`MiO0-&qrcblesEr!%J68CBg?HEf6(74+` zOimew1&m;MO-%O0`XamIYy&3IX$>!Hb$*BNPOLdM^SMmZpK(VsP^z^u7Bye77hi;@nWxQv0s`JdmS?^G9PtgVWkA@j}iB)Bm!D$XX4Hb^bX{9 zqDhAmS`4b9UrAH0uO*47F^ax?M^c>=7N`3XZ)c!tJOjtG65th%<$5@*tV@disA5qD z=ErjV7}Xt*pprd!MjZ>wP*cxDtW@tBbcf{7F&eL+6jy{N&}7+^k?3u-hn-HM7SE)&R`9OymJ()X0tDSL5e|=r zg&2ry^@EbPB*MrVurBUEQ+y$3Q#XYQ+QYNz#DkegST&FdilsP)1&P2F9?9)w;Z(6m zDfVH%woG6+rh=KOaUX_sge9oNwK+;^vko+cj^w}+(;c{+``1I^@vsu@M&b}5w>MdD ze6KwkGoXZpo-+&c%!xNqk88qGRI(#P)sUw#Gwd~hl0L(z=(3#nOuDaOZr<+VtlX|; zMg4+oDL+p+6J;(K!>E(#d5)LEW>mrsk4O;&8;R!)=jextOlVBRp_RFPdQvF^gK58$ z`92p@%ae*|6S@A6YQluG@i?wn5<2m0+^!FcRc%B)Y>z#dZng^M=WQ1Rt$GG>i->?y zR=w2?$2TzQxlDC?HN1kV%V7~3!((xr_?m@M)WT>cLM5O)I|NvxHB``MJdR03%1)Hx zxpe(Qa~>xPvxtXv#*us+4TNJRHQ}-B{4}W)U%{Z4!gSQ~xUn^Cu^lrk4@=OmHx3YA zOAZ_1WCqNev}9njRdNm)aT~qXCW2vho|+YoTZ~aR;|<~qsu~EJ@_1u?Cd72<)QLf_ zWH+PpVJn(7hBTIMS0^4f5{J>4A{fGYjd2ps=jW%SYCk5GnX1* zU$g;lg@eeF9@A|ChjeN~x0*Y6Qn$D9nv)jbDd!wV zn}Rr1wh1lT96+;8R$@3msSC_^3OBW9=c26|F-KdDu#2eJ7^H&xB86TKI{0lK8u(d5ADOUJlPoM1aB(;H9*TuV9*n6crG^5dQ=@QkWipJ%9dV?hyfsh=C#+proANJ4@j& zx#t{E0RQ(Q1U^g^; z1aRN?(zhNE0Unh9wMzWXf&frBI~PEGcU~4a&!5lB`<4F%UR2;!-+kY*z?+Kgen(!u zmzRH12Y~wt03Y-Wc~BmdKeO_H0PvvvS(b05{J)qF9-m|kSh}b zLeW6~&WE=jiU$3Yd08;M?k56#BY*!dAP67*(fs*OdQcve2jxNela}HItez)aM!oAd zh+}a$Uj4xLhV?rmIRgA9-u319D;U&cCkFg(d_w~MXA-YC?tjCt`2T#Ja3W0iPl$`+ z*X#4Bf8X7I{N7If(Y8%9|JKJ@IrcZ_|MhmlnQ%62#TV^R$KSHheD@|A8zp^MgG))F z?%Aw}oRuet&SfRSf@}p|wnnmktzm-|`q8J?8|cGI%yz{J40~HUX4&j2M)Y|NB^NBk zVb^tIp_#_fmX$5*ozj8X=6eIDO}7$P^&7@hS>ZCnQVqn$INb}_W?$Tb!|@phsUL|4 z<3;KZ$1C+msIRThyW7p(r|W0#?&ke%?;m)7n91(R!O2DZUdvE<=mMXcf3D%&49@?z zb6@@3m-+qEzyHf48;D(TWn7DG&NztUdE$P(vb~se(W@AUZ%T^T1Z>nC&Wifp4E$Fh zZcC=LdD5EUoFQFyML$O3YtCWR3vmaUjfbN+o`H@dM%AP&dG6&h4^5dSUw0dQagUv7 zbRu3yMLBfhsPQ;~QyJjdl&7o;YyI(f#TAS=ztZN;+|~HJejvw)*9L|7f@vYZVY z!j`a^_xDsss&#(o#UHBt&^{jiP-p`VuTPKPH8JhbGC&y(TICKM4HaZ|z@zTqF6j{TYbgpMklF zY+YMeuGS5wOy2lLvJkZ}ZpNTzG-2FZIorA;U+=X4^ZEHWs%9KdCMO7`4EVR?dRI5$ zGO9*gz+imSMT|KdccShM?WrDlQgU7x!I-L6yqYY@H-?`c@4y! z@l~lkJc=G`+(OkAuSgCVXQheWRNre}!VP^I@Ja@nPb$Tv6ioI1idtwSzOEuELu+vY z4e`}%?Y&Gd#^MPHSbI9#{wJbKLtGQ)V8qdQOUg`6cKnSw2R>yy@6UH~RtA_}Qvj${ zHNw)QNQ;Lv@H}QPD=J$vA)q}e)8h*{+F-h*K<)8bsv2=G%2`1@;cQrj@k}(Ev_4)# zqZZ9lf0C@y8*Ijq79)7pjd)9HSIfATmGVW#@Lm~cCKHfNRdjm^dHVdp(65RBrEe9RNO>=d_As}h!x%F49~lUN!Me_XntJ< z6>HOWLbGKUif?2pT-`2I9W@WbPDuo&nQ<+e<7Vq5VnqexS-CrDQ?`n)XF|XenE*8w z9zjK896|3C0bov;gEnj80Lmu965P=hcVfbZuo|QBsrVR}jLEiqW>_di!aOEf#i#pU z%GYJW9Mr9L0;6Wf6&NuQ7E2B<8*;ttN7XeqF{;}Y)Wc>g(QG8uvv}AzO5thKCB^A^ zsohK2(j}{NeNW2QM7($_1F1JN09iF^93vU9dp;@Z<82c;%Q;0SESgffr?<@~RJGtp ze&<}NIVR<0A|5qN)w|yOe3dd#JQ9;5QKH*4WTkX1ZV8((Zlf#cif=gx?!?DY4I6df za(vtcRIE(VI$^T~#65X@B?HJZ5M4{#4=Zw%!lF!QSe}*fRpK?wbu$x|?#%*KrT!y5 zm+3k;TJCMs;xl%k$!y2b9=2q{XS(lK)A`3;QnbU$?0m5}1IhjQ`B|79HWKNJ#vEN! z&s4`@{V9?oo(&0{PJm&nb(W)@cwOoZlQT_I&b%)ii4p*|IzOiqSwZ`-9+T)-k8h*N zZKEg|3+vGnce#Of>&=z2>Q|sglV;+ZMzV87LyoVRRF<;TVScV>4Vpr0dJbahFZRVl zn22kO5m-ps^~o8a&4Q`fj7j1f`F>?0Ti7dkJoM&!H6vfU>3La%6&8JRgLW14yBhBh zx4IY>;}K2vVmQ9#G+|HJ?iGo+k?KV;{z=!XmdCAyQ%NZUMD{04OO_}ieiXn`~$HOD39>2R*Ig9?)_-C+^&WtBLD1qs#;$MW;jr9HL32EB>?xHY$T(=A7HSQ%O{VL=?t z#K;n1MF!rV%T53ZEM~%`coq}!a&EtFgcWEGi^F=EVcTXte^|%Dv@= zTr<~ZV&WFfnFw%G1I9gJ6rFL89cT}`G!w57M+v*V5f*Uw#NCbcYrM0(f7LsaoV@(0 z!=L^PjsNdQ{@O<;dGztWapuuZnrAi7Z{CJ&ae-x&uj(@cJEpxb?HR(UxYPl{?eL=Q z#HZpj4inx8J3=#-+hra4_1h^~^Pj~6EuO=OeICUP9iBi>CQ?^&yFXnuM|8||9uYz6daj?veCu4oJd3p8Tz;-Iku8&a88eazo=sD+05c?~ zkV&ky#uEITf0f?v^tr`jKk$iY4-+>r^H7v(R z!{3izB7Vt7d^h0-ryK$PMpFDMhkxmVM1b;?Bfx%?!Via^Ccf*T_)CONo&o z-sc|x-h;vg;KPJ~dnM%k6-0o0E&v|{|HITa?tS9EPu%y(gYuyKuT#R*Y(#fn7C6zL zzwh&6y#W5RQ}h&G^iE#SfPeho^XKvCB&x7)yJSY#!|9rWhfjwzlpQP|lz<+w7`#pV5;$2_% zHimq~ui_oQ>j&_T+YVzO-ccrA^)LN4KI4t}mk2*?b=*k&g*d-HMt#TK-+S*48-DYX zt&gr_bLAhLUActtkHY*ggSaeyGJb||Cj4A@+PzHW%TB3bwgF?PTBaG@W@UgPDeeZ% zHXjv7y^TJzEytuA`p{}vj|A+`l3MsVSgF-XTue$9jrw$8zME!a#4Fiak$vdQnX?1V zdIN`C)Q{DYRrEZoEWys$;ttk?aqW2A7FE1vReT*|PQ*^?kHstY6F1hE$5*Hyy1T00 zO6^9i`)(`mAAkSl_qQ=wo}8F`hT-Ri*A6%FU$^|%TmSVX&i%w^-#PaUet+oqhyGv* z+Txb@1P*!AapKeZ<0v+p^a`4?RpeN<@EvhDXKvq8#qF$}>`8rHd?`<)-A)soaesbk zXi_(h-uQx-F>I&nXfeZ67|4M7r34Jb%L;4PdmwEBHU_+mTk%P~7WoQ72STbt@)CZF9~dmKCrQF##kAP?^ktU5m~*h=KTojTo@m zT=G7Wb$Z%Qvetev5gDvg4^8MZ9#iJ()%Z3VvodVhgqJYpB{j5WNT8f2a;{{c_+SPI zpHj-%;VG74FuoKoVZaV6B?Z(ODMFzlDR63;m{G&ZJmEWCS7;$@wZmgrsYefCW4Ik2 z;YYsk=&%0B7x@0UUE8`gQafGitS!Y$af4wD8Hw9avo2ffcO{GS46qdUubO}rof^%= zQOC1_JON7;!!F^POU`3H#ouA#|Nh3>Z#+zM zcXLB?3-v2^FV?Q3oaTzl!2f}K{U>xfhpMv{9I9Y;K#_j4s5S4kSBwPgUiuIea;;$eLlb=(D14aUP5 zbs(hYu~#Q<`9u)(Cs{K#Z3;N#mY>q*%Oaq(qKqA z<_Q2B&=pTgBiTwmemI)0R~(&E9;f}^%#jowD*2mT@f^nD{;cS`WxM2baS=mtb#{h$ zAp`o2p#ztbQdZ5?cnK>tn#9RGal9`-m&+4y5O-w--=kT{e?H&qz6|{Dj^|RaR_JsM z%{e=GGM>tSXO~l$aMWyX&LjfaOl8!ajc0OwuVc&%ZIUv)hG7M%Bmoj{ zC7>i8N!j6HTRQ&udImmv^Y5l-LP3kxtdLK{n0~Yp-y%8J#8c*?9Oi~roQkJopOh(| zh&Kbdee280`nj%1O3^cta&NVyq`!#kSv=f~q1vt1*a9alqR z+-L@dZ4YbEoU@!OIeMo-M`*{e;dlylPuuMt@K@Jr9PP?s0qzi!lJ$T=JggkANKp-a zn45`Q6Pn^VTy#b+MwQ}TEX~m4Vg$b=}uUUiihJJ)Z&Zb5y%c7L$(@5XWW+~9A=w|3CHwGM2M>r z(I;gzC!nsZ!8J6Pn}Fo7!73^0VuZLewbM>n6jq{UFpdzPF_{(a2?AZNu*Ob+`@9R%W2+xNlIIANAwu#=dRw<6+71a*{!q!d! zEUo!&rxDN$%i}FHS(yRpi7*30ag`Cw2nTX|(_N3p@E>1fMJ!Z813} zv}VA4XIO-?F56JC+|y_c>vKl-SR5oC%l|0Ka_A>HBMr7CLDDd&*S2kvol&} zn1gb>5D%g$EDVXj)f(%>i)NW5Y{>-EC$oZnLUM>1uv;sd%*v#YTHKA+)X&9B`a&aN zS$5`FlkeBuJnpXAnfu*Z+=ps>F04mq*ljOyuRfiGrDm#QZgzxNKShve(=HLblQUM? zYZ!@#;#!FyahQ0_oY05`iNF|+UOpC;t--Fa7`Q-G7{y=UFHE_xb^DV|ckrQYAKL$+9!)YTHV!kf- zqB)*t&N^cNvkhv-BHf_JW^=K}BN}cbFMZNgqd2E0)}4DaV^E7r3X!{{vfwU-kXG#C zh*S7e|EZ*$$!qejbH{Jr@p8-a{Md(o^y`1%*SWm+FJ}Fh@8j^lI{I(_>^HgXJ8wJJ z^plKkzP_pPE2I_a-{f<+BmcaALjK*f(R)bWoqw@-XVZFLgWKHhZt}++a2M&DwU~h0 zG%Kks4y2MwtJTNJf1xSAMw*^ark_SV6angPPg@isz*f{XrA?^kPvjk_r*BF>8AO0x zq=}l+n(}$A7^kTyBju}UF~+5@D~bT>`FQzUC<4^OW{#y42*SWPpH_D5x4*4^J0YMt ze!C*T%_#z|d&}V4Uaunlsl3Wf-e%Y{js;GwN@NU!Nbx6#?K! zV3zH+(wfvYm`X7(}i;>5f`=Qy5 z4?M?nOMdnbet0!syMMyj@k?oRH2!hpkEr$4K2iHt^f?#+;%u!L2>9bz5Dv~c;&t3* zj`g_Uv^u6)?M^%x0M1gIHL$`XhB4ko#UVD$G(xbFA&-WV!Gw_FYj_H?V~uI|jE8Z; z3QLq6-*@9Kv#h{Dvn|Bc$hA7r6fa|z*KNgePw67>%E$90@|=7o-%B3OefctZZGJU( zbA7}0W7j7!+I)TK=xN@%`qrtp+W2B^XxSIr>6_X&xo-u(f9Uro|Nhf_>^Fbsy&t>I zXSaR!TK5?mcVC};eF}N29kye?^DdE}F_fQF0MwT-kPjI|zg=odZq5-*3?O<%0sQms z0NjVeAz2Rx9)tNjy7C%pFc^SM-AF#BMA(hTmXP`n;y}2W7#!m-kLDFPm*?kaQF9nv zD!_$30c>{!+_@*l@ny#&vUEzCgv)tx9z?^L+>haK;BN?`#@zvoUnuvHcNh$?>TGI9 zQ|`%I(Pd3usYL!4Ah+ExhKf|HWs$@FROB{qsON) z5dmG&5|mU1HS$SKsS|Bl^A%jnn>~SRp0rO<=;*_wkg$C*`stnmkmd)+a&ceLimN5! zzIM7cQk%udV?$eJT|`7+ z0kY3Tg#Jj$<*U!Z63L(Uhf>7>I~0I!A9}q8T7x&=uSm9Uj0nO#5t&_GLoKeXDS-P? zC0~1Y-s)uxIHpJyzn%-=)g8b{iSV5mk!UB&c+Z=HU~whRQANd8lE@v}(xe!7UFgZ% zZA7={LSf>767f4R+Ne1fDe!ASWNB7MPxNf$kk7BEa=w?+QX)RJX-QL1GbwMtK;9FP z_9Zv%pjY#LjOsCnW>X_l@st|Qgu=zVa8OlK!4tBC+hC=tO9&b#E_E#EDSr2x(WHRk}G#S3N@!VP>WqCB-=~cgFsSx zxjTplR~ZBBsz~hee$`&3GzGBNr%4;ywWk7{p3kSymtP8i_?r8a`SnJ8_jL?8P$J9C z3}E(HNTWBo6!$Y34TH{r_S~f?KUDQ(4C>XV0BSH|Ao8*|#e69JHKJJu+9F5tl~BUC z9Fco-Lg8Sq(Xgn+?sNqaWSyE0C5QBg62nqcq{VC4TL@x#cf8&mz~TBhKBo z_+FKZ`d*bvOc{>@0X$U^^s`iRq!xs=^1F{ko1SLu_eQWch%65nDL`I0$y!4ZWFXGp zqB&9?)ni_dgrt63^hTlPjD&Jci}7hD`drDwF|K-|<%?s#HO&LHxTcOETr7(*)omZR zfrF#{!W05ki6gUQQQG6)Z-5!L!tI-ZKOZ$#J;kL&JuI76^ zh=5ZAu-!Zcj2CJ1Ye9Ic8y_R2p5~(-cCTSrH=4}|Lfv}n6{V5cXiv*E&|;ng=y%N% z(M}^Vs%k_=d+C9(aZ&njN%Zfbum?+n*f&8Vh*qruT$J49qk7#L*E1Iry`+KGw9+K> z>Wwi{PczV@CwE~|*r6c$rH5m;vol8Mc>{5tegkOHk_rI&NG{U#SJFhZy2}g&fZmLb z^oqL`1&J1ga67E*YpNQlJ??j=N}|5Z(}^Z2_f;Y}n@u+fQ`1WxL2rJ^6KGA#!+tzq z1f6=+Nb`c=@K^v%bK6S9lJpnr^PoX}WgMiLnD1fJNDp|-T^Q1BJ03|Jj9^Xx(!-UGfhy&~ zK%~|g3If{rbf+@k9z>fprl2D|XLFptrp*6-(yExxE3||n)KIiaNp&@3IQLL?{Am(YB9rw2| zR+{Bum#)S<9dBW3L92OIq9ZL+fcVZJAeEFoPldf$9QQY*man1J%=DPDF5Hjto-zY7 z()zSeAtH5?mS|DO(_{O>inw*30o1jnhcVtNYtWI_L<@AKrKP`eKWT4JC8o!_{i@_O zWuJSem(v=wrHAcMl$zQJ6(uH?_D!4Oe(nz?q+#<@2ih&o1;{^AYr@2|RU2xC4PZ(T zH9DhR*TmRdY_=wa7+vh&6dmYH&)I}w?beXCT96i!y3z~gQ6H+$s5kifEz=f#{c0Bd z+wc2>MIT|-#t&Va^(gNiY+d^9OEit%{#esl>aUG^zTU>TH^#j>?hNSx>+K*-uWd+! zq-UH;JMmC@BTZNA_z_@ieB6(azdb*Y?;w3KeKzgj&ZJ6VS^D|3Kj97N=Y!L zMDQg9gPJc*IZzP{lFG)Xu{z!KdR6{wFySpCz^(ERv1D0({g*%Y*Ps52-}ud+_@46O z^#JM{0sLPNJm~tvQUA+$|M{rnNwM)?q7Fhqyu&;KOq?~SYb zu{i!WaU3{T{%9QkLDXlXuAUmMMg7-N|83N7*MZ_~x{SGz8~J8m&aHB*M7gB^aI5@} zl&{1{`fp7EP`{~ex~Z-R2JgD*^@`#34ygdfaJo{v5Smt9_sE9I%`niWb%-8OpaB2Ku zuK!u%J&nVR`?=bm)jps^ycWQ>duKPGtD zPVCXpjv4MU0jnL;g|56P--Qt~)1!DU*YayvYm652NPtW7`-gW3BzxTa-_TkUo`Po4l_g-J#I7vQl zmp$0-lFQ^54CWG<-|QI-=EFwOWl=cv8)FgD2-u7Zv1zX&DXW~RCH{-cd9F(su_wU8 zCKHvFa1@scV4TmyL%`(%02|JGN(6TrpI72?UKcsI4+enKq()v7fI}6z*c#W@tF1V! zbFY=9|8t3mJ*7kzmk7z%B3pCGtSfJfhm!UH8U_L|=+3X^BE`EX0EyO!JZv_CEk&9& zzaB2_BXRy-hl)gaKIuF<(kf3W0BnhLJRgAL4IsTWerFWt!-3tb-Bk?dL-|3RwNi=9 zeKsPr%Hvy4NNcaxr$Iibq(GP&dzULjF8T>BW4yT*Q0uHMO=lQdIn?uo@yz)*b3gp; z-_OiBGw00gV7Ptw(3@vT&!+RK0KSVO(!UnKPW2F10iVU;+cf65J#9KB<=L)bgT?vP zxX4bn^oh|Y z(5+E&1;;g1JGJVnUQ;PFfE*J4Cd4@G4=L2TR?lHLpR!xYfm$4wgSjXSoKhra>j7Ms z``n|+5cyQ}+l7dvY>D=#O*1a#)h;P1G*+P76Zx2;Z1IfZI4b~ROI&}eI-Vm6UjC$yrhN zl!#%Ss+1bz(|GjeXY)4ndnP}OMnoQRDRLoKZh%@yzn{^8i$TqJBhFV54T6~AAp+R1 z2cTQ7qciIBd0_x!Yn(v8M{)r^TfB@B4|xKk_T>SEI8-90d&5y#<)kj{I_Qcf999pT z)}&5;CVKJi=$HQJ*QN2jYHxpftiS7DqB_wWpBOSw0JVHV7aC4kiEH-f0?a&WHb(5z zj{ye*kZ2G0Ov3|Fmq_#rF$&6AhgCpbam3c6otj-WjB{!xDFFMBk~*Ljn*y*LU&c>9 zQ2IAb(y0yi#BU#s88s`~q1Y~Yvk?=Bu_irKW?DWK1fWXdcV2wIC9bo2LYfurQvva{ zh)mxS?KxV}$>RG}+g8M$BJ(X)ovIBA5r7*{RMmTf@&ELw=awqXc0;PXg}fpnS*ON% z`vZVo743RRk=S1w)VHZYbm$6L|3Hk3xj~3Hp)a4qW13wiz_60aqg>N)-t7jV#~86? zOAvbGlBT3#5&E6bgWmkG4%9SK2RdxdlN4$72Cms@7@cXO2bA^wRSc!oU_to<8r5!MI9a650v&RiWL*f3Xool9%%$|V$^UxswhuzgTOK5N=2PXWo%t8b~w)s z`&UTvlT)uJOS>r2)g?thUpZgisS#tTC~ZuM>wd5Red%!Qw<@B@$e2WYBgi_Xe@22B zdeu_HsOQO{6wn@5Ud!#6kj}Y=YbK^?(H}$P-DRAnhhw}w5%#}fqE;M=)F=1Y2_`A2 zeYzbBMVMN;4}*EOSJ2^UJJ6XPS0v#FEhc3AHM46rkgpq`&{4inSU4#(ZhQ_@0|^9^c{mc@Q@S?pv7)bbhh z*=4A-cX|M=hAl%!0N#ya&-39J7cFHJq>Wk)VtEjEdhO1aG2&8s4edeL>J9rkQtWl! zR`xMzr+O~?q%yw-o$-dEaIhD(NSV@YG?!E{qp6j=!*CuVO^NH781w#R$71~#sbx;* z#pug-ry{ApM@=KVmE3LzLGtyr47|ng8`(l1?i0|#t zs|jGR3J`ctCn-S~YfRjd)Ia0^4L%9bN45UeD)uf%g z*}nWbw&x9L1*2O=9~o`s(&(r5e0n(tKKI+F4m{3#?t0Jhws!8?c-OpdI!3Kt>#H@B zj_2XDoit#nlhk_0%^tS|Q}Y@taXB4yH@4@Ec{ZN%T9k`}GImqRoEXYm$d>A)Pb>Q_M1`tP9Op5YJ5| zvBukpJq`O5GC?64mehMREI^N~cHl0n4P&wo`bE+MX?FT48b8qZ@y0PecyZ=0e#4{u z#CNal|G{(o#9#eizxIpYMc+1OvUP3+Ht)1KxiUJcgrT-Ikw?#^Trt||Cm#>!81nKL%TTuk~ zqf)2&Zlngd0nCrf7vueJQsDO{UkcQ}Jw?FZr3g@0QUd%fX?0&W2Jl|n#` zvA@b^oUnvE^tr>l*{CAaG1b|!Re@6Kq zB?46A@V1-kn^OS1>!#N$#euJs3ZRM?sw7-0WrC1+`7$CvMF41ytF8?9t#Yf}D!0nt zzkFV|W8^pUP&mj6@Lx&%_XY6Z<#$ze);#jrbd%%YTATI+2^mzwg)cd+@Qm zH@}PY`ShAST>qu(KYjfUZu?OE_0h*!ef)<${oUi4bMLoa`rsF6d^*p`yQqCb?V;L5 ze9#p0@M<{RmuPkr=QPa5R1M28J{+P)74Tw*O&Vx(-Uyb2+wX378joQMZNqqvn~Q_y zIE^klZN#Yc4xz_BXE4J#_hE%uIu%LreYj{+ak#jmhSi#kM_rG}*l2=_xZpLanf1x2K{*}u4uA}5ZY!i z;tU(%fNL3x5H0V&R_c6V3@9%S`o6p?pFp4O)+&zm!)RzT%MHNw)#5PEPmX1(t{g^3 zE8ySbxEi_12fPl(M-1H17-66hfMki7>eZ5_V#M*h61_I(Ef{hlA}rgqD$?oYcS>aZ z?)becno<)k<;}T7yH@d)2aZ`UC}?s@q!mzBJayD=EI63@w5U|mPo~#I{9&rTf=S7)nBYX zPv6?U<$b&P(;q$k=AZs+#_g}~8F!7mB;T3W;IfPPvKtc0^|7lc5J*a8qODfp9+)oWBg1E9taROIjeBE&!HRp^+SANlp7;r!r zhHUW~>Y4-iFOk28G>7B9T=}H{!e0vq^n=mPgCRjXn%~f`IOLyG0D@x}cF{sKtO&)4 zDlWV^BHhdNZ7t(J?~C)bgoC`&x;hb#!I6B*H6=&+6>ufyLyOrMbs^W#Yh7NU%##vX z+?u;^s1PIc#keT8Kt2`#`F(L;%j3NL0aTpU7m;;?j-rt-M*H=squ0>@B+ASiw#VZb zbtPYk-|AF=)d!TwpO_hyGN683k<;fT0D^(DLZdgLCjt0{nG0U}1?`i_m! z4@y72s*LXnoIEwwt`&e@GZH{|Jpj}O?hi<}iljatcJXlhervow5WmxQQ_SuKf*4cU z@j&@~*P;dcHG+_EgIH4R{b*c&b)Mps>dX5Kqc6>h2;Q@?e$NTuvlio_01lVcOh8SQ zdZZrnsS!kgipo;8Yd!k4BC;T2VMY|7sYXSvs(^nZF)yDTYmah&;`G=A(t+l@`Qx-WS(180}L*>(f?Mn0~%{w}@k`dWivG3u;tj2Oyi(PQ0M zJCy70HHzl^x;xS1sk8vK+?iiPt3_!pCZ*SHP}coE429N4Blj2kneGp=M6;aePDcvRkS2xwd?5Py&L9q4aVDR^-SN!Y9#&?^l^{$_Nt01G)pB%r!Zg%P zb{6%JLv1qNqqw5Q-O-8zD9RrWq>_XEYMBXnvkQts zz!|irSyn2M{R0Z1Jxh_?A6CY7jkG4Hch!Dwrb~t}UQ0fXflx*|lkZLsqTK@)q0^%# zp)1WZ8<$Edi2Q(2{iFpk-|mm`THQy@6iw*yY`*G7s;Ke#^|Tlh(grV}pgm=`hP ziX~`^6?LFIALSi|;Fn$qyKi|X5g&Z?kBGdV#2l{B2L%H zJs2@1?9-EF-O7)qhcO`)z;#q}Y9*gBl!p|1-yl60{q?MtTvB!P>Q?rn7txx}W6_ed-0j_#DQgD?N z0vAj$4O0x;g@;(3TyVrjEQO?xP-t)BleZ*LVef}#=`PWGk-IjhtNeS>#j8jh^#<={MvIk4=_pbQfiD=Ka69CeU zlmPjYNNVYWzMKG%{woB4aW`HcBLdXZ?U54Y1_7YvMxaPhi^SWGD~noD0vcnV`MbdX z>i2Gxcgh6*c16ltN&vUYKe&=U6Lk;(-U;}>S@M4j_^i?;!m@ zR^LnjxY^rsGw^@&@jI1UGx%2ddzD)RfLrDN&+<-ye^uYic)FPgP`U6b!+A5Ks>-?Y zP6U9Cn?6?=^vb|jIbJG7fJ%C$A^^mB@0jLRxm9kJTjeX2n;)p&G^86t{??UvzkzO- z{T6!t7azlCUCzIWE}!ruF8bsA5qu*5ksl*}+%J0*Z}>fREK74Npz$}2Raax-i4j6A2jz{Eur*<2#Lzi_*q{zKkV8me@*5M&6IHSHE001BWNkl!)a3xZZJnl()`|4v+RSviYsUZ@t3MqM;Q->-ogyPYirw0SA8j zx4-AW?R>iVQ*T~c%;==i$42*)&sgsQ*1PB``DuN5y^=G06GrlGL+B34Y+fx6u^>u3 zUD(0-c)U9|BB_RqFOJguLN3v1U7p8?YXJhajzzzY;&^em=567az7!7FCc~*jG7aV@ za5X>c00tel4Z{&p|7v`%D;!EIilfnxMjTh9{-01B;v;C% zZ<(T?P$zGQ9K4rfEZ>l*ZLt}{`GiMt)#}LQ-Rl5ajkgEqqdzv3`^m>u($rN{MgiP< z^IDhD>y^BfwAs^X6M1%?)7VGtiE&HDE#y1icmLPk|6ZmyzTvmNp_`!-LtBP+QtPSR zT`Q4l{Q>-csa$Vs$+hl^^LFD|7i=LPHj>X_eBP-KrwqEN0J80F0IZF;&b4`MUdL@i zw{_okj?bO$d8KCwr>~s;r+@NYv>a)vwVdYqwZ`Sf6}%pVj?0P$K^5sg5CGKCaKMkK z8&Z@AHlZi4H-J&oUBi$!a*50z32ES_RDhYf4n=ajL0+pwPS1<+JQVX|$l(%!nFqa& zVW+)_s}}1<-NbxGAv&zX@kkZ1uUua~s!A15#`S18_WIQIC<+i4F_^bHfguN-#-Jk( zV%UjXlr8#WoR^k;C4}tHMf;ZcS^0uW!Jvw-EE3Cgqp1yTYGEH%1xVBH1x3>NgaSxc z0Lpp==o(ORrnlhf_}!VRT=(Vt=i_@0$4bl55>5yBDRb2#z@$ms}{$2pa7UfLVhUbgLu8zgBRkJu6R9w z^n5bDUrFgdU5?ZAF#x-?cV7VA^%B_``YxOcVn_wDRS7&=RZlVXc)b?Hg@`YX)DeAo zmr=B(nI&aO-WfT5#|JTGk40#ApF;}JR3e=Z+lkJ!I-X{VB>mOA$x@6uYA$;6nv#3m z9#_$-h+H?DYAB8iaCKQ5rlnnW;7Wcxu6L^S=tv6{!c7$sz06chP1`)FM0!{B>Me>L zt79~uvmfp0ftWunR>gREHri;ulIwh$5=lEiekCmVu!dpsAtP~Ifbu;t6Px1o>KSr0 z`e|zPUymC?nC*n>iqtVSZ_8Mj5mMj_$5Itk{Ulnq^yW32^rG2F-l3$VDa3&Tc^|Ij z1!2)@F;6DO_g^aM1oCrfSG4y+Oi0fiilS0c%qVShB&H&nr zg>6!ZA>*UnC&xP8DCbX4DC@|)*mn%s6Db6Gb5R;OryT?KrP*lB%koobvn(~CJ1xis zsP0cqI2Ud2ANpxa{sd=956=*(N~QtZWJXif8jd@Fwxbt6K$qCfi4YClDEgW?ks?J zniclt&ZyVu)2tA!N=k?)^F9pZ`DqT?Jm5(*yVEGT)5Gp3A1?rGdNA5!P8mmz#~7|W zAyul6%C&vNGgAQSOR+!fChs7xv^PydXI^I(>G?F@Osq6bk+Pp^f?^kn0#nV~_caaI zVtv>d>rW)M$g9%BXiM9@NIqnWDVS==uwow?q*>8kTQ#S4^m`#UFqBuOvM26yFQ%kz zUcrdzrUapMh_qSdHL6l7mET`&Fki;iyebvqQ%6yEN_$F*hagIHg?7q;P$rrZD^8QE z`69ZlD+H;$F!p1M(i}`pZ#a(AVQ1Dxi*E^O|2t#e4C{~n-klF%B(IE=ACvPMOia%h zQHY)`)?~FwqNzAe9!S4)V5= zLM5$K5_)co-l+&+Bf3(VXBTrBPa~n+GMHb$S}&%JFFwcA^HZOlx`x`xT5D<{?MfY1k%pYD&!cf>-1OQsY8MlGNyi;d zN6C+9$`5nar&C^32%(eEXMt{PcFq<&sSrT=bnC-hkLpLK7aT&Hndal5c|i$# z)&TCY#FMxdiW;w3VFvm_S!$vYmle{$IR(O6fL>>uLr09CE%BVV(2*c&hrG3#0fp#y zj`U>umuW5eqxpC8GH%~~`^MWR@nhfiqyK(+3xD<>&aM08ll-TnM_>4}dq}^S|7rRG zG@SGZe%Drih1UG@u83Ywx+yKgxO~mKQBUvBf2a@y3c>ZZN+Dp3AaF-H&X?kIg$Pg!fd?V-u9{Vw*PJ}Z~x9MBEYTk53f`> zQ3dq3-E=(hruv--05?bUS9)nTNB-Y&)8}qhtiCzG^_>&|-U;~sN=g7w#T^R7!&M28^H{;L! zL4Fix^O0}_AIvN9pM5lc27j9`=J(-ozmh*n-jsj!`U&p;?3~H}_;ai~_M^Y`y&I{W zs{MFvCHX}DWPXG6p;Q6?1I}Yqn=^{VE#kF(1&9b>c1HkN8#P64^_qQnEOI%oG1((% zw$gSyVZ=EscF+J;YSMuvhU~y$_eO;8Rxe`MU3o30xSUSnb+5S-`}DYo$0LI5PAk2H z%i3H;hpU!hhbwss&RgIBwmMy;LGz1wfV?U1$xCRQxqhTEm(l&#uUx;z==tk+jXuCz z8%GA;I>Hw_zHoBr9zM0M8D=nwDzAwF^U`30ZY&hW9}%WoDb?&o#lMQ`XL zzo0v>R{-bdP*=qFheH}XBB>(oXe=^4?->J(isWgNmNZ!b1m~eWEz^m?3%oIQ;S}2E&nG#oirHEjXQ5<&_v#&n4&X;cyh!!U11^gw11$1QU#)Kkv-_xa@(D zkDe4FyF2qGw3(n4j~6lMu}J^^F#x3{wPM7fd;+~*vKB4ohE(Zp!#L>1Dm+R)rHXuQ zP9@T=D__IqydolBRv1RF1-V;MP^e>X0Ivta0r{v3d>b7T7k^f9NI#ED9?DND8E^|w zRriE1S5P<`5ndI*(VKUMBlKxy9PG^p(WEKWNS$d~+RpGjZ_ayj9#f7^nKNZ3A9~M+ z{&3bu(U+gdd(f;$50+VGl`8740ON&ZP}7a82J=KbXS>DZC-VmL@rL#w3>4t4$&JY0 z3c#)5ye?Nr^)!^4xITP+`1%Nc+5MN-{_;M0yFYiR_tzQMH*U_je)7D=J-Oud-eZvb ziUO`J9ovgF2jJGDfopkP0FyoTfW5gtK3NejD!_LXJ2Y}X`2|Iie|qex&Z%OS8$mca zs~5d_tL5l%Pu`&bip4QEG0stl0|W8B3*~J2$e81JG}^XE05?LCziz}q^yU3|39eX? z9z?_CJQVj?h&YWHN6lgXO6iMvb0o$`a{!L#^%z2njv{57Pla;Hk~{^Yu9%M|XG1c- zk*~NxEa{4QuoSJN`^Ny{a=xvq$l3ycT#kNjRyU{sD|KAVO-?FAp%SrQ0K5^8t@K6c1?QGv?Sy`>%Ui;CjF5(P*+97KyM$9##MWk4g9d0o% z$Y^}-SiHY$3?Qz?UzM_;9)yHi%%{>G#|?%;!eA&e%ruI#`Cf3%7X7#{)qIorH=e|9P^N0QlAAn+n#J*c#G&O{C{|SE88!6giMC;i z4QUR#JQ1l?I`dtqxj*fW?^E_6yW*EiUzPdPZoWdinrRCrrp=MQqTLpp&vUIutC{v< zdOBbl27_2rV&02FO|cJ+AgMIRx=>oEzubGMhm=y?e-L;=#i3m9U|A0e7>0dD-cA(J zqFpPx^~SpTihehUDb+a!?F~D#C$D_lI~VdKOEA$Zpf$})vy@!uXO)QRlKP`vn-Wpq zii>5Q8T)CZ6qSrs}wE=asl)EHDOwMBeg5@<8_4)IFo!ddY}>QyRfuRdfE+d31993 zypf2dyi={GqmJjxIPWCn4SA+!(oS3T;{Nn}+J_;vw5qgDF3LaE2(OKup&S+a)$ir} z66D9zQ)o{+>`?aAMe(L6Tr7+6GBP$x2U7vy59MLhG^I|Q%`;rY1nca_w6vpKub#Al z^s2Vpjd=mUkH-2o`MY-PiKQvl-{W~H+MQ18 z(P`LLg%B}9J{b12O+TbJLV>I``fJpcd>P%INEKvV@aN#XEV5S@To5x;lzV~wC+SZO|RZQ`S$%R zZuHrARKw!5+dMQ` zY!`MKG>j*#vPn^JS&I7|vJ2BJ^E%d8fJA!62!y-&E9&JI)AJt_L zk9y1iIz8>8vcGs0JnX!(URKXDGqBHG{aECAO_(0fIY-@Z9rk(JYK3+%Li&SrAZ;eE z$&csVeAOR*)pPH;$glk5|NSFB{f&I@uYLFr*FC|7w?1{{+P9Fl)i%~vk-sxPZwKk2 z^s~Mh?fIpA2lD$sX<^B9zeC`?4^Z79%z*C_Fu#@y&x2Jz;Od&ws z?fJLMar!XoK?JC!_vd5r`geOf0iYfPfGS16xO@r8xHQ8JrGOhie?o42=F#V zfU(q%@0=2#0`sfa8(-o@PikMH7;po)&trRyLLf*Q3K5|C{hL(-Zk1c*A7-fl_$uPR z+WCC#P4z#zsjl#$%2W0Es4M&_@TDrHK>mez{VOQ|+)M;`C&~Yti2#4!nR;tx-zxu2 zfd8AzXMD=PC%={7%tZqB3qFHu{@ix_wa@rHbUB~@9}MXA%joqP z6LHbW{1NiUyp;bMznk~uZ^C$goG+69CjaL3hj{;8llt1e$l9O&7tb%4Oxtg?{dnus zH2$RVZ2m54FV=o0{V=*b;}|BGYYtACqeF?bZpS1$t;7UtHDROr7=3D~0?=Jiatp3S ztHrjX*~8{zlcT1g%j=%O{T6G(Ua#rL>t1vMTkP^U+MP>>u+$uvF=&w$SP~NR!=CUg zx^Re8WXQ~a((~xnb+HS ztM$#RZ_Q=6<%@58aTT9lb$Rcn5A!=8`kin7*thWKPn`SqKVQx8Q^Ti+`!VFsG#U4J zJ?|#JX25pEQTvP{wcJ2YJ{W-f=5PR)HKRAyx)%eueK1_|t$HfJIv>QfyxPO)x6eYf zdB*EXj_FbItZ?Yf8;f(S0L~%3XmMA50WD_Os6?V|RU*2IgRPwRP&oP)s73T#k&bLi zQx!+ygE~>yUtD_O_}&vzs1@Me7h|J2fcyTuD-WT|B2R#$d9UJ-Z^!Oft1ko)P(?03 zqN@M~`FK8yK5uv!EhguFT(!txjDs3ZM?3B>r_cKXm>!IWyuti}UAXEoub2DF*A$88 zQ529-UK_c(r^Wp=-+-gjB=qL(`T6LNJ@HO)z!iYI-9sLvacAC^U#9*>eNufqAAJ3; z86Vul*L~vae(>vB7@7Fioo{U*T~3$NW%TLOhrx(kZPB9_yBxEhyxdVs@pOJNuB&|v zczAnh#KUECz!5`gy2xui<4MLfrQNkT3@;s?GklPX$3MC6;sadY+4zaZ%haA8H@UWi ze6K_Hp--#zq`QlQDxc94(#IqE(37{=tVEK&r~nHC3J_h!aU(`cDUXyG?7UM;NXrid z0cuz;M)C!R(eIE3u2`c)k-wU^p*cj%FUNQ}9RN>j0MpxJ&o?K4o`!+QdEM@il2f@8 z-T7JDa3yF?P3BsN7PVY}-2$`(ktMG#<0Rc5=h?58s-y_Tu|AmlFyf-K=*|ljhva<* z(C)BawCc}qL_3uT)I#v6Z0eP$pNe*yS)j)J(ij0@IQqXMa{LZxQwRlh4CiAW#i$-L z(B!fFqyjiMDFlhf2r!+aasA!VM~C8mUsC{xbn2jN1XN&Ds6^-rxaq$_y7(Acn*6xTCOv1F2`w6*ssc! z(;G@O59`xPeneXUiA~W@jYuibZ8*k7Ax!kgeYHBJ*vCca&94T)+U%r~g5eta9nquM z)0fd{O+JfJ2hwu1c_^PiPhJ_S0{v+{YBuB-;(iO^Vy}A@1&k-rW=0{@SXqb*c{G3# zV}yeXah=6}->?90C;qfVf40Ur8jjC|l>As~m&xIHo)PWa8Sf8{jkm@a@u8vY3%FtD zZxANRd8%?prG%?-NB6{eXM%dQoxb#!-xZApOZJH6=-(1Wf<^^`!G43C^?#43cFqi3J>Yf>_)1Z zi3ONWPsZ=hjdp3%rVTC5<&(IaI}9tSqnhG;y=cyFq@ujgYciVCeeO{rXxquFwWki! zONR3Rxw*7-+7$QuVvPIVut%+ta^P}aVh|nHq*Z9rVGi2U!f2z`Q1xgtN`9`a9O=Oz zM)j5UPRrwd9x_@fv*g+6w=b(L+>oFy`=0X7 zNu6rsmDU&}?aYVuU{-oO_o42ZON^x_Xavw+5%{W+U)LGLtDS`qo$DUNcrR*?@%{pN zQLNAnaxZClNSn`%{pkWllcY&!z6U*aq+O89yqJ`p$w$d+)lxf#^ydN6;;=p&!_Kxu zg#Vz$L5y9RcVK!t;!cd{PMv5qKKJ0&7)RH_I?h*;$V`k>D_0%MSJ9jwOdBvQ9k37s zX1JHMFxJWX>)!Bqq$2zy3=wk2#b<5fNu8MHVR=Dbk23UzVj2SvDKfh-|);MT{6D8)L*Q zo23}@Wih4M7*k{s5qTj-Hf1RyBC?1`S(YLqQlylQ(-EiB>2#bXAwVp#cN&Sv8b&c?zYlDDETfcG)t*W*fpBURnRjx>t7b zUlx7()Y%5!`rS<{n*N%ltAFU)(&KdA+j;z5`*B~Gq6Ot}$&-ZBg=Z&p;x4;@QyS5lqtQAU4}+7)5KX#G*`O@3${GWm%*XC+u)H=9y(aD(30L z%}iLn=w7hS(O_G$ z@P8{ZAQ1vGQQ&n>0N)%5@OnZ(&1)t|eefHj0pgh2Kb1J9{Qqyc0z}@F2;dFx8+QU2 zFaMjAJ3g2Hk$rByi2zV{fUX1oKc4G4K2(p8{z|UvIMD6Z|Ml;!<59OO|Nk!Q|Jw-w z->Q&yyo{Isp)yVY7%zXH@@7E)?c0A}2Y`BAx~*=wt$s5C!0k=|w?_ip?gY?&TU{Rz za);ei|Gx1uUdGFKd1HzB{}F%dD=tY3^l9O;>J@y&P5;>~;J??^xC`C>+|S~Y{~TB0 zPvalN#l$mSh+o5zcqC55yL>(d;!r$OdztVXR#v9-Q$r7be(4^^}-BB%cJu~uVBc$upHZ*G)g>U*#3MRN!gjkq-wS{ z9q?QRAk&yuSN`oz%PsL-QtTMj8d7%XfC2Qy$31}&C*pOqYBwS+DDJ}ZdAamZ2JjdP zZIWs@f!U3=;(A=2lzI-t1oAazz&inn$FkD>bY5tyx#6m$bV|qFcel-JnX(94pIuG&r{Cl2|t+wM?%@__HwxQql_^?E5NXqf_`6GGR>*WlzY^Vd8 zS-I6jM;c4fomS26Yx|6pLy?y@M8+iYB%zfY7 z-{-A|nmgY5ACK2 z<2hW)1e=W+`WubsT*6JeJPR(y0~m2GTf>*s6^3w70=Z74BaW9cpm8%>F89PI;%baa zR^Vm#$Fr!os+`;XLz2~ZgOvST#kus`;|p17I+y{+UI~b9&}js{@fjnMHS$B~^`yHn zYKyaIG${^Bi=R#C&fmYUeplsle6QxvO5B>~m?gz{9wYI9sS?n2Op3yI9u+TUM~DLk zaNaIO3}j_soe1jwB0l55$yRniTTI44j?J?PN6no>IO~>cp3Wxjk*qbL4(B5}(fzAe7<>Ntb;E zgYjiAqG+-v^t;~>N^!Lo$zkB61hig7vqmdX&Whs`UWN=aB{(%H6K^T86X2Y#^ZtDN z7c;OjnEKJUJp*sGe7_DmlCSrDu3^+!S260QQ)n?J4^3f# zCS0-978Etcix_oPH(Jffz-7%-=(a>sOgF~^`TX`_$m#5KB5soc8Iqzsz2|%eGV1qn z{fXjcJ}*5Pkeiv`e_Wj?mg-Am&r0b$jb>uRto-*S`MVG2>zwOMYDj=`Th0Cg<1x%E*r=I)Qj;58YO3uSuQDJNGYaq`LRSy$pCLT--p94T8*2whPfDw zE9x;JVL7N+f|5?xQOfsqlesC|In2zN*qxd9I8!@uhhcM3%RuNcGVzZl;!zbN(tIIB zEL0T;59aeRn4fWnGvKu9{MkD}T9xF17C%q2dS`^9;=eYWKDa9?f*D|7!?8*3*Q zb)e6~IZEYvyoBbsC2T`7gGX2uFA@)$6k4TzwPGwwJuJ@WcWUlu>drLNUDS*r55=9g z+P(I;Hr$8K@T9epYF4nfxE?l3kxcs}nsB{sG`w#A)ARLgHV}s~%_f&oj+?^~w1-VP(WDfw z6E_(NB|<$?V1B-yRRgLL!Mcbx>obYC=uwF<*@XSN_2MPF75M7)uWlT=#2-C*vipx# zaOd^L9d~ZyLuWqJ^r4q&+t=38)C0CN@&vR9}+J*WRNgdqi>S{`cGkE{Jro) zD24mtIpXINa37|}^WooOVz@iLAUO#9J8vWc{342(2rx0cFZ?{QUn%}pb_DoI3D|Fz z907h06XIWoAI606oto3%@X!<&JCl zA3u=mI!<)E)qfrLxm_Uo$z0d*qdI_pJMjNz%KzK(t9t!r1c1LU5n%id9WQ^cGEM*( zFaJH|TkUAxj1cf}tEMt~&wbfg#lOFFTEw z@iJbcr)&d~P>rJ?=NfCUo0nK2CeuL%2InR;Om*v}(Q<>~c^umY6)I z?1f>EXvY$rR$yvYsy1nKQBwY|!zOp>$9c2dkO05CB}LN^rs^_?g-+xJjCC4u+H41j z^Wrn{8Em%RG7QBT@f`6+e4)04+N|2+wGLi8UtL<=LiNh4*Q$?FUibA~<$L*?{e92$ z4Rd_mAC!;3#HWA!PY!+hhZ(+m_}JH$5?kZldhoCtuHj5xxZ0>_H3nRdDZ}@8&LZ7y z1l4TvUkChlrRA`=E-x&OYEFQ+OR+~%m_98n44pn(i{EVF8V`tgvP6xa8b!>%jT?TuWRb-%RHls=nYd9QH`rq z@Q9Mb#9_PQbJ*!+XVB%z_$XhQ@s%eB+v%(Iwe|fRg$D{(3p+45K9(&(PkRoArSz0$_ zwR5vZoXx+tDFb}xHK|HKXp>~&d>tKHG~h-&n6slVdJ+S+WaZ7%aYVAvFH4rl4N_Kh z0f!PXA#TnKZS&MZQF1aUqCcLBr%`az1q>>ihXIec7iH(;4wN)nj3yPsxTK_s_;6B& zx}>6#e-A0&Jb^0dl?^#crQmFK+E`*gMzYdt$Tqzgay0If2q7t3xULjW7RI&gl&~S4 zzj!SDJ=~KC1}`dV!rHOr`DD?3&N(%S$aNKBU)&*C@xFjz`||!bWV`>StTs>Asq9Gp ze93?m5z>i^5}@3i2|ru%oP8kQzrzaZjtV3KN!2aFR2?vD7_%alf%EQc1%AvBh8@m6 zUH3YN9vhv;sFU$5TFlA6cvpBBqmE}{-bg&1_ur0UoSuQ>Q41wUl_50g(1z=76m-%#b2<9>$F@ z)dDoQE7zk&iR&_fqLz=ZoPqi0^L6UX{pK8H%_!t?xLY9}#XS2pU|1y+0A_?usKj;g zMKoFFMYM(|vU5>`r4o^3lz1@Dmu4tvAUvAKgE}E>mSzoTcRu&iMZ+lD>W~C0U&c_J zZ5LXsi6_w(l4s2IL_Eyy92C`Z#&`n6x99WTp;aShh-abuX3+F;y;$ziv{ zsKjgLpgAnkPCS&(XTCG!BNa~O@vP)>9!D?4!;(Wt6|M1*PE_3$9zkQ6?J-PFM8EiC zieQq+q{0K45Vc%c0~XmQMLBJc2Qd(rhb8C=hvPAn<7H>i7^dkWUNtq7uSW7rKiy}u z^E_^!)c4g>aO*2Dxm{?^{lq0F;(6kRxHenhKOCMUT-RYA+Vgd62($D3&}JlmPZ33R zidZ?1FQ>F))XQ-z#64jvn!{u99GY|gk!Bs@(?*OCo|eYhRT^@Zed_=Ez33)x#=FB= zblDRgL~B?U2Z^UuG)M%93Snbz2eS-hqS20c0=2j~+#}uJ`_LBFhB?Fo3Nbmol$8nd za)0-1Zm+FMF*zVzF^GYvLk2+Gvn2Kts96Jv>GLB$n(Aj zb5AB^kSqWR>)_8&bN51^rmoM`B zyN*u%{Vg<}Z2XbN9W1=L@P&obc>BV)A8K8VxnX0tm(c9~@Dhd7P8y`PE3_A;6J`~j z2$L}@F4Rjn93HU-ce~eW9Jba>9M$Czb~tG#230J;kS0rWJDHAt-I-W5)gml1&0Y-K z@3Q2ev;`+U;}CA>whN2ht%ie{B2jm;I$*B?9@d`cXH$@z%qkL5GZDbcrbxum%P5^wFPW+OO zxrXEMS7J9>!pBtbj`(ZdMm!zyV5#q(LD)wh0z`Jm#7AMi{ zPr{>;L%@FG7c|D-AiO7jCTvD2e1H4|N*cn)Fwvdyd5H+H8KrpDE=&xwwG#W?8GoD5 z>5lMldY^Y-f>I*(#+%-bVwmEs>GgO{A_6Q#F%t*s%Kr%_#?PUUoh)uS0whAfgiIVL zk&`YoXUc1M6Z5uok_kk*%KUd!{rTLggDI|96ZCR29+xE&s>Nw9z6b+5g?jKhfI z<$teI2i)sGf75N-b>RPY%l|q)R2PiaXZUq|s*W$!i2!x{sg6t4XGymUS^qBO|C`n0 zK>v98pHjvN0ORHVkMd?6)c>dhK%D?^yOm1rU_-sb{Yb9g%n9Ij0zkcEe={P$*WP#> zq1$*FFXLsr#GJ8Ke=w_Wj~Mbj zjX#2uj>mW4O#Ed0JdTDR@hI`x+Q+LO*9114cjGMONmcr{;Uie(AO%0vyR>9rwc8+Y1 z%w29;g2RrQBUu_wL4yTOOUgfZ-a>H0epj*BEW>wVr(LFe0&~f6u z@o?OP7j3tJI1ta(E>e4;wk#VJ>)p%{kYwM~7UVZV^v#)NT+)!RuUcy(KzIx-U zdpYy+pRDFD|+KFZpKySNtx<{XfUV?M-_|^Hz%v_u$lb%tO(X0 z+AthX#BCVxLfnk93ktZdQx&H(!J`f*-JgNhMk9J9MRzaCuDgPY#&}LrW+uz^TCCu7 z2Fy1~7P%$Wynxx`0Sv^Q@kR7`(kR-qLZvSQe=la@!D^+D6ce3s7zH{YR>jA0Ep~@Qd}+)CjM^9gn1G-3Upd1F z9U2VcOuT6rd#!hccqTp;@5647xQhG2qOcO%<8CkTjE zL6mKeOQjjtWsGK}dP4>bcjf-(VrpmcMz*d#851#MWhfbv6!$NpC%&i$qps`3h?nAa zsozS`3TbY5B0C0*=JRM)M5gzYw-%0q#pw|Sd1aN<4MWspa(4(uxQNy z{^figP9)+$+@68c^BEBB)UF+6139Z$yo8as!+?|(ybt}3x`fF#X9s{C>3t3uM7OD0 zr6`6Pj%1?3a6W(Y)A@^AGGK92t9IgxZW=<1VdpUvyVI;UG&q9c_*Cu(F1v;i_r%l= zM#DkS5_h3hvo&Nr?dQHv_GE+>E z0Ime=B+6QgW*x*+Ia|AsfF+FvvdwdoF3I}+EOCbc(@@i^1H-0f!eSx!hm?sAXT|l} zoGCw;fy>njYQz)SiC|%FpVKn2qA5G$%#g~Be68*xN8co3Kv(|z<$T_+cqs!~+f^_- zJ{1?@vS}G$uY^SMnH=|^(d@7h9dV0AXbUT~U^JdLJGYc!G=*6?bAG;23H~e*SGt)1 zd?h6eWrEm3CC!A5xnFA;BMRK2iX}_;bia06tc>QdJ9cV(0^+(b107+TXHbm;deIoV z(seb-^nCs15Z5S~BoT%N2%9n_+>_3G>`BKRp3hXCR*hNNdn0befa`iOY;P!FG;Z+_ z8nj!5=J0^cXtzk4WLbZmxXQ2=i6GQMSfOSJUHQD!R}dB`!~>X;UvJ3$f4?2cVmWR~ z%KET6?nWh^Hy4F4Jx6ye&_>*xTluhxB4MAp75h+*%-S9kadnY?T#d7`%g2*pGuq+~ z59a%%9qnONc3`L(!A{8nf9}{gQJW#k(o2|Po0lYlK^hMlOeO9% zq#`-N3=_61#ZfHN5t>kOFb?8!oF{G14{hj-Tiu1J;egdhp+;2nD--+E_!gEcC`-{> z2}n-&OLN{H&HYrv7;*8W1`IhEHxVDrM2;2>;aS`tUve7r!{%@=It;`#ZWl9QubgLU ziEvWTrUd}iKq|le9*hs77Wag?XbSh+DLJ`J$ADoS#NC+)uwALX>Jv(stQ1G2d1D%P z_s8|9#l0?}J*?4zvxc=1m#HcyX8~0_WU_V)+Y=9<#k#Ny<#;*vpcEFlgeH^BCiZJK zN?4HZll!Hxrmj3cziG3p=yAmcOpOOTfu`_OtVqO*VPa1r7KWAiexIHR7wt;%5{C0Q z+83V+$Iuwoh7}l;hz;wKLs{68qso?MOMWWxX>_~K3uupf!UIx2z6%{;U1-B$J#he2 z$NH6GzTzpGs_L24{^DkvFga`tyCCncNiFtE<9-2y$uUBko$(o5i}S)lO!j)!7P;#S=n@nr3(Sf+o;mkRw4 z^ZTDXy6g9!q?T|K{Hp2}}G1X}t^7PoazAoQ?=aG7F zX1Lcp$Ua;QX~rSToxuVXo#-`R5zl%)6M4?(`OM48xZt#QJnZGMRngPAZpA+PRWLb^ z8{c7t`NSWL6XL(4rR{Cs+x%^8{pc_L&SQVWitv%I|NJy={CW3lU-}}2YlUAe{s!?s z+EDv6;i346!cU+nY&9Eq`eoDbhwg}9Lt}i&UAQBxHi);x{}k@QXTutaz}pm0qcQ#` zXHg12q7xG}h9`($aAzh0oDUzx#PI#`mr>G~i2w}}5#Y}F2^8aJ!;_d8-lvV&?~eG} zgm-HQ>m;E6FebVq{0mHof1M%$!gp$sl>dncPVB(9q>I~9|`cyjsPX! zL;x7ueoZw$dDoTwZ*&59{dRDR5O53lkN-`Az%A?l^tW63|JVQPjb+>kV7&aVUF!Hz z9q_LM_3yl`ely^|ju+MOqxv26cUk|}2>@>m6UcL#%h8b*q){%=OG%&&%Kbp}f5^*Z(TN{!6+3t^E3@ z^LBr(bBA20f6wZ?y)AG5LEi4mb?(>;*$QSt&Uz{2N%e&PnCr8-{z9&YzT?|xe)pq4 z^#@O-3DDI0jhFEFlY+SjXdc;}D3V^YIs`1f~g{hPH< z@qsh**3SGep(or70qd>yPcULiR+7{et~Xr4WgRACszy7cDQjA2XCbaQs)(}|x+GZw zU&97PE3jKdH>OJ}&60wv(!%9BTyfbV%yGed^qXff_L*ld7U=ZRHRTn|m?i|ga_7;!SLVhqffkr!N+ zr3LF)x6Z8VUq_t^Nuho^K8J2w?M9oHcmlnKG~y}4YQ$4xpBqj9gMnPnwF@`meGX#O z<#-ltu4tAlsH=Fyhyw9MhMr3bVG;)8o_HQZ_FIZ!N8@E_;kSS*`F9*nOTuxJ1hTce zs22nAjAv1H(GB$5>r6U-u}8}OEaEvss>Cyy!Z69C>}YU30hRHzqZn|=ZWJ7dmvBBu z6g+EGBk_D*FzwF|cMYy2$A)+~9>K8Vp2n~nG1*+-3>}j4u!KiaMr_=b0lL8iWQLty z4Ew0GR7NU?nbG#$cg?uWFMr~fzyJBjgp0+VViSe-&=fk+>3)60-A=}xsKk?5@iv&1 zpS7{a$GQ@?e*H_B61u`noQh}T7OeM3Tu(gURLUlgL;5kK#{l7SxDu{lU3k=5KDqJb zX`ejJw*UIE4}AP*xMO$2!8>+QYj|x-?J%y{=|v1>XNu`sLla)q7)K<;}cQpCjz_Mq4FcoG-Xv|>?G1Ur$5A}{2H_9@BvBA!#tN}LmJ zqR;*WU_0dmhFy)9(dMdtbeo(P?u8=y5>X}Y%8ICJ2FR}G1+^yKSqqj+NOl#Mito;@AN=^fH2aPJ$rG6z|%!=SelI8p1+;01_L%<|$bu0V~ z2=#{|M&t1e1e~-76@3}-ZgB*Ij^_O)M}uL<;u)0P2%Turl(Lk^B20QRaNlJZ?aEqn zJF7}r*J*4^_tDwh?x;Hy$iQVPnYiRi?lhy)1rpwXnT9E1Afb+o1HA10+m!&n_t?iV1;%l~>j1M(x;5vnC;saMSk(@|E8 zgZX+T;$Vt^Y4uo0?R2)?sKxUtXf!3PMn_nfiHAdR2s0(8kz~&=bmjTyW~qOemI1_W zCB10Us|f>{$kgnC@ElsK%S3~AGw9eZ9{>O#07*naRM8R^XN7w5ni^6tpFAf>_hXT; zChuo!ZVjEe)tB>pYEV<|Z{~!ls5q?y9S(Q~MXljU6vC|B4|e3=HL8|>PXP~P;C`Xe zklIf41$jCTi*x_os4F{2mBJcy zSf_-}uqGVEsJ_@M-A^S#{XSZwHIr@nLzhJCXh*wspd&nOHAdp8@EE$n@;F3Tl-tdo zJg)aD8p4QL=t}L+6X>wPBox9L_e;(RO@sxRAh99;o^$z(uhfv8$gWzFf5%3&hkaT5 zT~Z*-P}GcBc|P-0CIU2MIJl@ibfBooRCL|}B?p>ydDhyMTjNcM zm^#_xVIQW3ZMnZIhBU5;{e+cyzYl8;4d_sfeHhXdrlZpaPoq6NoyUifunbdEZyBcM ze(Juw-}$-UYc&F{r*R9pX9Z%lzZ0Tuctp4s7zxyx`{QD38 zhadhB@2k9T+WQ`+bZp|irFoQIyyL+;4ltoQp|Q|QVQFFGgmwzmLU*B+upx{(j!o_k zn+Pky%U0p0Lnh&>XC1;#k4uqv)6A6!)Le~{D(e%p1=L=uf6vh$0_{N!pjrhO8lg+g|84k z5`HZ_g@5Lm@F6S4KMX&OPBW}Uhv`=1+x&yD0`D}{{dh;1;)l@c+rtvHc()It#k+hz-m2YPyj7by zc#GCB6OG>Py|~lcd>0zL)pz0!Z}D!F#_Bu0Q*vH<$LpK`ib~$*R`kFG6EoppLM9;8 zBL*gnISeF1K^P+#q>-@hDDcK8fp2yScztMq+g=$b0*sgcHA)o4^RvGEmCt|Sw}0os z?diqWG6CSVj7!zNJ8v(_brzD=elc$!$lHIB>-^=lS$QWb-uV7_DA%9Mb)LP%X}MmK zzhG_N{%GF*)x7<3-u}HzR&P5^J_08p?0t|)*yQ|oPc_qq0PuHVcNpzZ*0JKgC{E?*a|3kM30{#BVVSLfm_#be=u{fD{&S7)$$@shR z%ed&7c!y!DTB|mMlHc&4bI^q zJ+`9HG|!;H4c#bt$ta#M&*Qjgs!Qm#Bp=(n41hlDGOA`}0Ig~ojyV)-#QTl9L>!4H zV?VWfYFlGB@pOEk_7tymy*A^uV^oXP`(9g1WkqFW+Z>R9n+Ej8H5vF%DcY@>75sEo z{6CWk0BbYjzo02h#&EnE&tTYM3#EnDRg!Y55nHm=|JA%u-IsxfV$S5g9yiCwG31%J zhHQt4G3bD6(t=VA=aWJ`K9ZH{OEYj^&=guxF+C;%#i^J8;un_*02brQ->A$1UjbxWk~}G};xy z6iI;&FDl1j;@%8QT+hUah316$)Sj!|tPN4xJ8{~?BP{rL3x4+d-$wI_=K0OfFw*zR zeIq-FXVoSwz<{BcvWnMc04$Lb>sjV?>+M=T?n0i+oG|JLUXG8)1;h)M+l01wGy{T7 z(t>TW=I%FWfFLvmyn5=@6R)1*`mbOAmCye%COfNwXJa8YW4XuU<7m(lHe;&EO4z0v zhlty=66Iz-zSD}@P|CpZaC|7PLboo}25dqUjzpX6+vjrZyL*XT|#E{7Xl) z8X%r>$@A!oPv}R@-uNs=91m+S;zUe@o6eAco~bbb(8+3lfm%#a9O(||(X9cscpbEb zX`u~6@nAe6<#q4IfX(qNih49l3gKG*dzH8@-&b>Tdno4r*6UC}IUdT6E4#CTcTkFS zcqkDo;sfy#sy0|k4hWz(E7ce0`*n_~YPg*C6L;i(d`e#E9?JVINh#Sy6$fx4ZZZok z;a)GHH!gD-1zY1530Qa%BhKcG@>0$uFJ$FvlOAkOidQ|761pMxADKcMPmiUyr^Wn( zV}MMG0BCW{SzL=doRxt58)$ZKd;r%hu@Y51W7gQoa=jK$N><>5`94UF3DvA@ogA-8 zQ4m!LFf8Jl$*F(KVIGOxATM8wCo%xqs+g^Bi*F#>6!QDe<=09Xn3$Z~?}*b*q8u;9 z`_UHGXTro_n2k|4;~osg^|~==mGfwdE3(odk**pe=aBtw@Vn?l||DECZMK19uy>+bwegZm9lb_VmyOU zdouy)NOngU9s3>0apIEXN|J~N4LMw3IA@-ZIFQ76$(W_#EWEs9e z8WV=4apOjAXUlLty&jL}{=Sw0(>b}Hx}5Ka9ElUVQ>J{lE06nArSbGp*CdN-IZC2_ z-Hz);Niinph10nW4rZs4Bg&{|KyoBLXP2b-ehxixLwpjGY||zIgox)d5#z#`lSCR% zcP0v9cqosHOS95^heR2;TW`D}IU%HeGnKA9?)K}CS5S;A!U9yRiODTtioF<-6!gvJ zyMS&Z&Z0*xJW1T48V7K18qY #0<6#G-wfII&W)#IHIYpTf<2UW!U#G0Jg|n`jRk ztwyW<@K9>cv0Ji$uaU_t!rf!@hxCiuGhnzn6NK8FjDz|9=)-`gLvpBD9T!VcIP=gD zl4HV!WKAAl$__{^X}k#=HN-L=$^BxVOECfU4Vl={6K0~R$2kiKPwP92!%Ts)2I&Sj60YFLPtxYGUT3dgmhmK5u8gPJm7m1-WB z5&(WSx9?T1W2%ejpd2-|Z1zbI`R9Q#}9Z>re> zzOJoHUSnK!Jf0@L;Jg;Xx_BbY#PeZA+#wNmnlPFPht*6eD2x%fs+mxAEM7s`xo{VX zahXAkdc<)Q!lUjb9#N0XNe&6q^89>@OJNcw%s{ct{BY?op7UH7bP7`8?+S#jwk%pN*>w zVRAU^Su~mp@oXY?hc)(wyZFY+Z!E5C<4V(CG+pWD@LNCie;@AVEr0ozk2D@-+UaS} zzo(nRGZO|2O@yA%I`Kuqf$(71PTUzUs9{l<7S0fMTA8D3&WByt>s|+N)dh#K-!45^ zkRw|j(JB#MnsS{eOIx&y_$7(+sClLQQ{-!SyJ`_HxA8m0@>?EEJ8@-jVIR1tX zG=-n>E;MTw&{LUON-%=ST0F0Oak@Brt{{LM>fZIF5H?vNu z69F1-tKW&&bA08mf7yZ!ja%Xk?t|0k7O4?M~8zoP6b7&hQf z5kd$>49C8B8ehsl|Ch4mf44u6{~llTSwD%tikJO0@y~orFaE&q#98=4Qs5O97h-rj zuXb1VedAC0r>lSPyJmk6D>r@k;|n(s&WDeLcVn`5xff@B-Ugh}ql)<^D`Htz@LWr0&WR>WOM^H9X0~Q)|K~m1nz@w%)idGl1@-$@*j#^_TcA4XD zbn0}K3^K7)PqsYVX%ePntM&_7;W}cH%Q&vn9^&cvvgyRK7racIQ`-}}s67^!)*hvH z&ug1%N2xwhZLK~=WouMeGZCIi)9`%aZPRUb5KV zfJG3-n{h=MEGdO9gVPUih@&zZYdGvL^i0gr*WE53+f2Rw*T7vc@HWF_j= zyc}GQidd|Y0me#Nh>geN{9cNiYq!E!KvK)#rWmAliA_pl(Hl;MCF^v?FlOjb9r8LqUq$#DCSEMu| z(nw>(Y{VE55n04YDP>t?DI&|_l*JLp+1YV+c6Ks(c&_uu^?imccF$^0&v|)zxLz+_ zH_tuKbKlo}{l2fy=ll7PSH|y!zYx8RJ=sNoKzJ5RR zrp$ZxJAR(g$?vRs=K<36^mrP^YcA%O(P?4;XH5Z2)c=)yH%4SxYwA`M3a%Q#P7m8l z-kDG5t$51{#VVml;*N|H25KR#-fx&RH+7_0RHs$nuD0?AM=x*vgKJE9e!_+c-Q)|k z*YhQeSehQd3uQyr)v`gJPX=^yF>0j_t~TlO7<%#=6LHhJT%tQ0BOu^zY#a_Hi-Ym}!_h9=BNDMyyCzf(#CUKt zhzi55V$k7e&nLZ%iYd92;ZDQ2pd-AW%Nq7_$$x%cU4^9(Il2|4gws)u{jNu3Pmyr% z%{xP3;kuVGYP|sJf@p9mO^kXeRw2a_rX!RF4yt>ki%7|;2J(sMHv=)gRAOVkAvXGl z@*9TGZ@@_mJL+|`dRPZWiqx=c9?yHC-JHjuIq{ZRr0Pebz1PVUO)AE)SCO9YihT8k zg2O~(nu3rrik{dg9Wbgx0hEWMeJO2DLp)a>M)gK)?6Bui&Am=48{1D|%w=8ZSG;=b zkinQKu3^-(c@2j0BWY2o?>q-1hVlxG+8FJi(IQmr3_x6L{FeEmMU(3ob~V3^(U=FO zXf=dus`*7lIQgm)vEHUgW7h~;3RA}C^^zLmUFY_jQK{eV7;mn{`K!uX(Ybghx*k`o zuM;|=yk868aamlsJL=+ZG=qE-9biHXjY92Z3OTL1kQAh-M4&HjKEK=A&l7 z8njvH7;0%=APqy!F)Q(rw|6Frm5sj#X=^nP!uB`4gyiPvWqZgC|||QkbWQVLRx?e`AM_U>4{QW zX_jl~)n+>REt3o>>ky=MQ66WNJ~l<^$8Bo)GWs1#b5O}E3vnkTw+FGBd@vNjs+x>q zd9>5RF}}}J%Vk`z#kl*TViB>{EVO&Z7PO_ubVoZMC2uomh_opp%cmPx3&3rQfI4ZQ zA?DR)qna>M6kzh3HsrIUeR)sXh#R^J_?Twt#$wZhU@#KvrMeD4eZ^7c$uSo_jH(M7 z(eAYA=+$8g8coqiK2YZSbVhqF>*0}9h)-oa?zPDpRPw9ES}IKu6hf29TZ`3JdOe5I)X5pp-hSB9& z-PqxZC(vu2<)wZ!#_wVWB*1_7}&X>q1@*eX^%hC(^2JX$fe29E9Z83%Pz4;X% z#Mh)BHwEwWwWgCV=3h5Rnw7pUtYE&z+qf_PPWlntn-=Cb6(Yc9^l0(#(dd(T5AM~H z{BQxRks4TO#r9^^!W~OzfKs)<8bCzvjq5W!HIW?0C&@0`IPE!KX+IFq&o2bEphzX zJC1dHs7?U*R2*ZkDh0ljKN{!nl>V<10P3m!cJ|ez|L;7GKgeJ5^WAhe{e{w90>It$ zKQetauadv40>D>O0;mtTe^DiXuRsL&b4mbr2>^G~-E=qo`7~n4XUL^y%@d_?+H+0-y0oKY&l>qxlDL-f!fk_@txxD$eI4d63F*<>z#9>)%$NfA=3T z>-~TIAAc~h{yWyb_SkY-&bBOk-v_CEqSl{3N@Yvsv*}H=x~Ty(#<$uEI8b~7%ZAP( z3~97p*?=ycqmQJq-bOLfk>!|xtttl^#4M~Aqv;>Ni@n#9Nd`SHK;@elF)uV3oFe4ep|@7#QM z0Ig2x#vzwoB%d}I5p3*3i*6kla7B?oKNTC7(>35iK!bI_Y<84+Q@p^BMPz<&UZ3}& z$yr0_)2bc&Lelth0OuRD6+kp^PsM9_c77cVjjl1h?sjbHt@phR+qMry1t(GW56CyVZhqEM zG4ke!JYA-miuCxzT%?`PhKKyJkU}2GM-*bfC=Qi5JMSw1dwMoDo*Q)q@!*a88g5!| zBgUL}0?h{UOa);`On>TIN2d?*!Ph?csqVi;ZSJj?YfqD&bvC_##kxGM z&>HHihU3gSj%{H`O21Y_e;=3@$hq7x@|x8)ApcryV7(d7Ra6P&%b_fBPFa<8=qmZmn>FL6qXA$av`dMIU5@J>$X6gD zn8OkwZ;XxV<*`OV=#gKzaMBRGV-IgrAZgLO{O7#4JVhxaYj}vvO@pPp< z^apXFPlGGy)#U)1UGfBOcL7>da1svEf<6?^rgSzGEvt1d6#MO72= zK*X`P#M-=0v^g002qHp07xO^b3@rqgIw1*eXbCWSR4=-vbKABEOThnWiX+Tvg_W zmoe<%II-*jv^i-EjRx}})Iw^!*U91uo*$1KJdsMh4_S!T0M@H|bLlIOr`hO8&v-SS ztw@j;0>wyCLdbhm4JhMaGcgCyG2Zh_IZTVY1_3UukMm~&hYJ$s%E2@Vc00SC)(+7vHa0x*br$^jC)`K?{ zi=R0r=F+BLO%E&U%04vYM_p5Zz^5=Ny<#zHuIeK14rPb_QZMO|@w_w`z;bQ*bqqSF zhT;6MHnf?WW}+t@wnI^tcmk6R<{LPm(I}3@crZ8e`-sl`HU=CBV$V=oj={VvtUw+y z7qzs;QtUTi5Z$3LP{!0kfGLV9qMeD-sl>Qg?mOs8Y9+7sOsq#A)Jb|HpRx$eX?2W! zMX_u+){(UU!YTzA*PzuXM!Z?(*1RjdjLx*%I%Ph88xxJ1g(u4T(F)DEiY1y-AsP&6 z#0?v~1i4sqOtdP!flAttZ(yH6V{Q|z*2Jh@RYv9>mmF5!8(za$-eVY3(lcozMvdkX z@(U5s{$iBJoLF}@ITQ2U(`KX5Ob?;eh&@GNLljKS%#{d8z07*naRGU#;D}q(;(#xchXSk)N|Me-vxCrhME^w5O*mCm;2eW2EcpN&ETI z^e=UM=`3extXH~7HTuI(RKMY@!(rE9p_u(@G3j-~DC z2x)FQTf0bQZQ7IGAit5HG(O(a+~Qj;E}*NU2+Y;3tOu%?tIJ#HcizL;Z>J_KwLC0Q zrW?RmtP2}dJb>#?I*nIt_bTx}^PwATI`mIYJbi}Mk3ai0+ZOT1)jt^? z`Un&5oAB|5&r$o;{6u~fNAruh7x$;_-oXd*Yo?LUr2pMFlNRP*Fa`IeANH;S#NQzQ zzGFT}njKR5U*iKljr;t^^kcYJOMZ>~hgy7yG%cS^KY@GGNAk;P)SUh`?)AR>qM``! ze<(zNeYhumd)i3u)0}^i)U7G4F5e4j{(Bw8J^7Cc0U&*2C<5G@|C0jre-|bM0iY5} z0CgfjMMIjYChbINoEwhe3qF^B4>$aQE%=O2 z=IuD|w{i>lH~n00#PR&=`TIyq)4e{+t>3)$HMe%ta;4>4C)~@^ANj$*`{+lR{6pWc z@ax|se_o@-RE}4^E&UL_->+yupNUT6HK*NBq^1{Qi|v-8O~nlKdDdDCd&Hw?vDnkt z9}xf}mK(rJ_L+m1oOTvZ+iy9hc*Ox_(`Xyo9B>1d%!v)~Y1%N`2BVm0l2>riA`O`D z1>3O1RD*cfVr^Jy*d82oEHA)ud-7w{=H+GiH2L+sCci;#W^G4pm|L&jdh%9Cl%tNv$D`JKr&{kY9H* z58%3{*t9I3(pU0ggQ(gU5jB%zBfCiH?hOF`)qqTfG}I$>^F<8jlS-uMCYLa%J;)dZ zuzn@BiCc_Ef~PJtrKj?GT*+H4QzU^~l#TLT3V?*XJs^?T5LTkAxsjjEPbku|B_i^i z1{_w)qvTByY11D-M2~7}MYFD4yq%BbF7)I@5g~mw_oFkU;m@h&vG)M6=Ogm1kvxil z{FGf7&}uc>UCN8`h9*TywM4@8M7f;_>w*h9HQ{1@#Bq#R=?X^mc^R!GQs1?*VVzfp zDcB-(7$O6_FrN$ z_AqD=SMp?!qGn|-W99?XXU0=!x^) z$||@~r+v7X7nrFiZ4@c-1$iN=)~8Z01NmySyORGVgJ?An#Gd}#gNY$t{ZO=zb+JiO zjdJfQ=RFt%lLFo_78|Fd0T5LJ5b2L`Ybd{HHrmsZHsNxfZ5gU2JB*5^yiFNTOWnSa zd*aERd!Dgm;$1o5CVENDdJTTM~&C}Z4KU0S2e+DH#ZIZlf9eHO_9*=E#;LDL`mKlA72{A?^7e6jw{q7WvlUx z%j(J~wE(0`x~lH|UI*ICJaaY(EjJ6rAYTZ@l1t+>A&_4Q;Akv>xgx|Y9~=j`MQU6y<-j{Ma@^QL&Bc@?&ih78n4*67cLkTd9&IA0AVh;#W62J(zFJ;F5l0VOpJA1ODW;>u+p|S>5uip z&5)We<9GSrS#>ku}R$?-rxNO^EnLX?ojf0-cAgst!WbZ zRae7$qZY~(6{AZ3Yb3p;Ir_nC`3!@VilTt>Jo%V@>l90* zQhueq?vK5sDF*Tt3_BJrwUU;ixhReq&1dXKYg(1oke@S<`$;RKURMV=QHyzZ$O*0J z$xG8k%t+_cH1Zj}dB|;RfrT-Gj~dH`Fgj#diKt(MpT1`u{aKK0&#?qKi#-o9Vgvn`FE=mtg zu`(DmM&3}~YtozJ{jwHHF-P)6jOI0IE=D{N?eO_jY;p>L=#}_g-BM{v^oOn}&pz98 zA6oRKM{r$39>V(fi_K}-I38t~g`L#p7u z{F-mV{pm+F}e-Q7>$IL)eTADVXNsC`B1h@S2q-ptF+J<}6{QPef zMSxx9_kOy3_CYk}Kd>M7rf>K4{;m?h-Sk&8Ww-I9I?!JS?C*^D|4Neocj89% zw~;!&^p$}B`YNZsXLD!d|D8mDJ8`hP5&w77|10S(0pM=>e=>bFV!)li|DDILL;$#x z2ymwYz*kZNXuacDAMo#Fe$^+0`jY9YyXkJaoBrod?|q>u8&qS4(CgFw13AmNhClNq zpTIl5=#TI@f8;nm?W})}i+(%*LwqWq@DTZepVf?C&cB-f7)#UFdx+eXKULd6e!4d4 z-4!f(`ftDb;D6=2XDzt=;a`kA{Rn<5pY)sf`{}Z`&=FhqHNz%jx$fA|-smKXTW|3| zo&g%HQGmON3IKEhdo`Pi>-Or#DICX4vrNUX;$8ZrE!wcdLcN$|tyVl78wXR28pduf zYQ;)pT5wU5DcJ33L}UoB$6+@x%ah(F&&@NnkdM|5SwWtj2l6~>yK7I>4pUuLeX#lr z)$7&Hcjq(KJNDq%em;NX^ZP%4iBs23y?E*pCqMn$zwkSs&v-u%Ka9?e~O9(kt= zu9BC#p3f*!(hs4@VDW0srvm(WDgcYJcpr*6=vplP>&Ibr5A2Ki0*3P$524?Nd_j5f zA5$W$DF96Ub)Zp+Fujc4Tq5Xh+8x#lNAu12eevwAN5a-4@JggWt0HmTm$$lzKF>vD zbD8VLG~@wA3cE(?3}EI`NT#=hhwWf~#k08X@q9v2FlfWX07Rb+spH+TQQi|kVr#^< zj=5nOh8)jtmhwn#=+WwNyc&^_;RQb~4LcGM|2Ok`XEA7NK%Esk(X2TSpeKO1O%bU$ zHvqx5kizfJ2l5g0+U9YLd8K$4$Gy%MKrugQAf)wc;ni993LZ|K7|wh19t_zV0PJ?J zW0vWuliZNIa*g&=?PKj1`0#Ih_@NJXP}^R6wssJgUDKmPK$iNgD+yGhJryFv71yl6 zF>mIV$Q$zw&FD3%)O#%e)=FHb4j5MAYUOovgXcX(K2*GB({Y_?8F_X-QQOCbpZUG} zfA5b-TPwRO+sJR^L*|iZTW=Hg29Q4-mJJv4!aPrrc<)D}CDB*=0%&dsZ}b8%)}y6w zL@#L97aO)`^2IWl)PXRH=R_$sEe+k=2R|` z-i>knLi8C5;B#-OlYF4mce>rnOaALboo0jjF_KRi!VPQU`qf;dvmeQGP<6s+ssCL1 zb=h1P)T#+}fNWs^wR<84{7L}-`{TYhHO9zQEF}i=r2@L9=0cFjHlyQE8z=0is?rhz4CIW6VUO zagB3IKj}uJZtbWU@tgv$mFV9&+RJkDxzMbl3ZiSp8?})!Q$8kygu3dfeyQYbBF6tpHdpsP( zoD(tLvKpkE&O zX^d9ityt7_sO0A`tQx?`xikf%d3v#oN(U`aBE=`8!)#N?uN&2EoEVW7m3q#*ib6qJ z9?v^Jfb=fC`69082Q*{MN~0LftI~Wln&o9hNu)sOJ9J>ku+|`fjFB2+ep(a6lLyCZ zXT%_e!;+#=uPR#dRaelImgzyCiZ=2~3Ynv^ltY>s?Qd<&n={5YkNcvXp3Vo+;-Qdg zKN_T&Mr+Vi0K&Xyd_7p&b!%z2X+c=oJa0@h23$6X>(=D8xRys^z5a$KMbQF!^{Xnx zl~G&>V0&g*8;r%MeJ(fVGibFi%|~Zi7x|juK~##gdtPhQ5b35$SV@#rpB-A0jU=%1-Hge$Xroq{F75%RIZ{N?q~0GLE*z+%u4em38G1DtU2Q8{aFQ z=&yMQH`8LR3gKi7D-GpAtPcXj6kVwSH*L?yP|Z)J#pq63J%MTvF)zja&ji7@Gn8Hi z$EkrQ^9l6kO=&8+(rjf6n}V{ws*v}T-=|GcK2K^6;zX(MA#df`xR{rjjfv@?5%S3x zr#g!kKzcSxe7P1a3W1?0-?XJ=XfwqbjH;xE(X5iIijrFm`$Mx~EC{|U;!S4QHDkDu zSEqBBnD(fUub8X>6U#`OHU$yk!B}q(IZSOJLxs|o7sv09$H>;E zsuQCw880@mCmMZRJPjb1gegw{Wz4iDa42M-o|`q4B)hW4`Z>1b)(1e82ekz#={nv z6#Zrp7cB5Hc-&O97Ii zrZLtZ(~6=?5Xjak>P9>Ku3yIA@SXk%e%xB$$I_RUeA6RG`JL}R^`TE5;?3{3d98fc}3<{zLcY1Eg=xpGeQ6DSgDhQwRjR(CB^XU!l=` z`DbviKS=*viTv-xpSsWMiV{IbIp$x-J?>2_a8K^_eoRP{^XWMMx81e`xP2T~1n?PO zP5>y!x)MM+eg#56zLnq2U+~|y1eoxiV;;8%D8PK#$u6lJE924sbs~T-`~2sP0Pft) zfA4SZ5&`a}zgj8DjrF&NI-XO;?E{NGJ?)7|txbE?0<)D-}};PWn#Yx!0l!-!#@L7yvr75#4bP4xP7 z{tx&gpZ520G5?NpD-!Gd%8B2Z~tdAmrtC`svr5G z1B*UR^RG7Vy>AJ%8?|@xS}JoZbJLg5XSS*$mDqp=H*})Kjga~;Ta~o{lKNu?t>io|S@=FZ|XI^QTw(rvK>?@|N1-+Ai{Wo2|ku7xG(* zMCodb<*m-4&&BX0ecFiI5twy}|6OGxET4~!_xa(;T{D{B!1Y`tfyb=MH>rDoj7oAS%( z_d;HTHtlH%UNx4-&>29&j`2wQBGq3B@AJX@c5FyJ<9c}>Ep7v4ugC9>MoumVz*ULJ z#j0U@aXqgJ5A3%LVL(g1u1NGZkgtzNtd)wuL0@_3;htA~9bG51R}bQ8vJ!5|DK@pDUkJM}7-~b}GRCIr7H5C7;56`|OXN#qCJxO2A!bylN-; zX*=>hOv=|?!_A0%YgCU3zYX*k;y{}Y^m)@!?DVRwf#e1Bc`+YUhzHF$77*#RkdVI~?XO<0*F!?O z&)bG^EpG~->bPB~dOUAJgK8=pn9X^_Z4dWC7LhN+^A5-LAJ?5)Fq~h_$CU`leW>co zPodvq4k!TVMx0ix0-9r^{lqx2qg;P0L5vaoyE_2!1G+Kdp!FE?V$}PMP~K?B*A$?? z=C+r2&<*l=^+>Z?w7UX?AJM2K+Ih+6sJC$=uU3HRrO{u;@|nnIiDE9&({r_LVhrY;A)Q{70~$@SAH5cjL+s_e zyh{Q6>d$`@tpPYU#rQE?q`keQMEE_SY}52dnZ6kL4#H8sSmv|T6&56QBG-^=5Cxh_ zyD%1S1$AqcxdbTXy@d97$oPg;SYyw3?VneG|4i4)bdEXLWv@%k_G zK~XL^97M#y;<24KE7nCrQNNQ*dr3=*x3x10$spbYb8q~8QjE@ZiRx$LUR6!e-%cxv z7Au3qFqTiE>Rhyok@N^EX4s}g26tm5ud@KH7Fmm?G}}px)~?(Qc6y7t_DFctdY{{DAyT;wL&$YRuohk(4RLK%N^&9q1}eG z2G#UTv&qM`8AVG(cGrnxGt}pj4h>l8rhfF>uqF7S=z_ z5plgH#`V>4-9}Ra*nche<7V#Ej7fH;mlYzwb&RETR-#$AZe`r9xvl6^m)fsrjrKVj z{qL$Zs2R`+hCPZ#W6}Sb6vAX7LaYn|&EtkOVq&b@MxAv5J$ZRvf@ZVQ0ZdM>S&fmR zz?63urKPl_v`b5)j;5+Bzm!xRZ=aQ@!;+gZP5B0Sr>p5POwEtwgQPtkPkXR9ZL}OU zZQ2z2%;@;F%9RVTU?9Ju5O4~RzB4_JE@L(*bf$Ua<3;HtJ*+8Uhj~$v-G2(E(h^u*FdJdE9&U?_2o^)KXuvtvr8s&C8 z2uc&j0qtT*Gv=}@7|c6t#i*Gcz|HhTT8pDWWVjjg)qE3+;=S{x zeTLBDL^_NXGtv_nGM4+4_ZDsw3ZIH~*ob5K9B$@KX#={_##pyBr6%%;AO`ITV#!0% z3Tm+@IO=L@!p*Q&nw*Z4R&+=bS_iXBUoWno;*686e?$0gN z`yXTGV>1`c+=hqJgJ}h6bDEQeNz2mG^c1<8x+{~gt}@dGJfdbJ=|p-VJ%eR-JB=;_ zPNKuGt%{P)Ld-G8D5mSxh8G<65ZXPbu6QwuNnW%7OFUaFE9}vLCM#oJ?9!pE+jcAC zSFf^fZ~-UWFcarZG=`b3Ye%o`wxi3&Ab4Lg8{MXd^-H@~NC(pX^enaiSo_2L*Z8{S z9h=)f%|HCPfAGWKKbKFw|NMQIe}d2cPVcXM{wfphZTRL1r>Ol(?QH%Y@~`Kg_8HRO zOFwN9K9GMV-$#Bs{kS&L_vBynL40lcu~4n*GD`maeB2z;htv0`??sdQeG2#G|Cs*} zP3cjSai7+-h5TQ&RmKORJAwN8KvxIe>jP-{5Y#o9?Fn`O~mLm&t$X zdj54%lF|h7&3rAtj?eg{pHzVVSMe#o?T2vD@8s3^wY)pOOFrQj@;BkN{4eq+NZ*#; z@yFEeuMOW?$NM+6eZxI}oqzqgZD;?%E*5<5;T0cV&aKtAeyaAJO!&zOKT!D?eoTi> zJQ9n@$75q;GyvM0o-?9scNRcwd+}^E7Se&8<55hV7_?tM2JDNoN3`R-W&>DaPy>#+ z=54%gx(nE*&n87W`ZW5TbOa4HJA{h;-ohpYFnCtQL`vI5%lB-RTMAQ5;<5F^8wuF1p#+7 zk;~>}EtP1)0u1)&7c4-Z?Rubida6dm^4kGiZ;XxET8Q}e=52a$J%|Z4jrjl?42Lvi z*}PmA#Diq`FzPv48Mz7~AMT?ev8YfG{S6&|*oI!mXClZWB1anV*)NBkplP{w= zHg+#Wd)gPk`=zphoX-Z}->NY+<9c43S7N|xiVSvdej2R-bsvsM`kvL(&7cUEE3Yg<$3cX0h|v6(WO!d1xoA>z4>`-ansJc7p*3yqBt>oDq4 zZ0z^sJ~RcPB&-7R>G!bV8{X4SM-8PC(Ot`jF_2$$4E@%*j3(3aW^mm^#%2BwMmv2m z>Ukgt2Cd_fzm4(Q-{+0E*AwW=TXbR2bNPw_phw%&KnQH#CMs-J8?UGOD!6R!H$}VY zQzGbVrCsG0t-^>`^96;V@?N@i!+1THjp{vdpQG_ybxHWuL(R|u-7_{3f=uEqu!1X*|AKI)oTLF@K z(QLk><@uuBJ!Ttvt+2k7Pc9qo?Ey;FCDCuhcyv1!w&Hf%dhfVUkA{Emx%zkNRtelz z9Jx&)@}B?IzU+7I`0MSGzw=wSum0t~tN*p(j{ARks;Sbl)%u}Eoe)9pcHnrVAn`T6)=b9`=!`;?j( z3#Eoie6F|4dQH^=U@HA&S0M(b4e{4HA*d;yuCDG-xBU6?IRD$_QPCRD*%}ed{ppM{ zE?q~HN9;gn+HSrA02OcZj*zNv4?wrBxKZxVJ)V!MG19ci&!)KZZOyz&jD5A}A7fE2 zoiW}FrB20TdNo=+NnVS3I*7Kk(j16+vMHW>FbF;K%Kg&Xc;2=s=V?LYtoQnA0J9YhX$o3A z?l9WZI)x}uB)Lb+y2k7vI_!x2cgFSGqy0CIx9Uoeu~wx`XiMwtF7*^nwDlZSb5#N6 zs-$&yl+#G8TN-tx4ve{;doj($^a@(i{2+ofh6+aURDUE0A>HHiMM)bKg3XA|Fw3Z< zY3K?7u{&)s7c}To6oNWQi=$R|s{{e17Uf!r@)=2!&|#IGn4I=o06~<9_mng%+GYJZ z^;B1es?Rfbh9=d=zOl&1x?|pNQB-tVw546j_;U`E)A5MR zZ;w)_Mk}bOk)GG00n?(ctJ>3pm}rAn(Vf<$IT+QDMu6ZUJ!LQ6)aMn9X;a0sCTYdhP}u6$5d_2$Md7W_8VtlpPTT8`<10b5oaUk$dMwqdST{6ai<=H(iBapY%w&g@_0BYuH^x%4#mcMVCG7W0 z4sz=kZXLKal?lHw;a4WiX6NFc`s~kb<|lf8@}n<*FX@HK^NkNs`8Sm-6Z*-I`I+^BlyS%16qQgy2oH4}!sAlv%McHtggDfp)Fm!;UFvXMU+PlVrPOg;N*qGCzLZcxTuLaV z)a5diQc5VH3}zTgh=&kL2}2k{G>S%}(P%UpjdDglK053EvDT4n8aipxx7Hd1%xc9zlbT_+B(b zOb`IRm9KB@T~p}NRQq4mq9}f8(^tOw+rRVwesbYw(u?DHwL6~iqwx&nk7pdIx;pRw zgS`JQ^Y%*KzMHo*^L9o4W3~5Z!a=;AxA|TZr{(P@^3naZy#G^qKjT)iuiOLy;Inyq zGjDtHb|7yvzBS>GR$D#Q?r}8-f@-YBYOGF0SWmSNwkZdIsrH9ye^^I=yA}WUA{N|j znQ}LSszyAhF|O+G+GavRsFgRqBX4Vw05yi!y_^7QAV50iN$%rRn`%?-|BtO^VHR_V zXe?X%r=N*K@k{Z%i6{W0zUFhd<3IVo@mt=BKZ)z{yr+o&$xdI#>3BjTo)2ACQvJ`> zz2jT3D1LwWGpw4s@~3~WoyQL?`o}-;6xELE{OU>WTYBI36@FWKaBRZjT-aRVb_Vvl zbm3+$%yegfeYp!#Ci8BcXz{Ef7U_|)dQ2@dZ79ml>_4&s~f4zcyHBv>liycc519j-&0?D;Y*vi@Wl&1ap4EKJ@)w}x0h3C zsT`}^B<{1{0X*%p>*zKX&q<1+7f{W_hPIF_^UHC$QIj)%O}Vll7Yv)!henj#i6soj zV;S(=st@%_F%?RaQaTr0;+brjUr`_0P;x2m!+-}xhK8*8tz}=2WT3P^AJ3?w z5=P^pI3OvO&q#oKuT+Gq$B}&8wM_O(F1=NZgjDFQ#Pzv9Bun=*Ss7i-1=IAo1d@pt z^=HR|V!V$2xF>GKfLFYN2IZKPN9p*EB}?77HbcbCNpY!cG_<2TJ{z~9;AU2$wP?mA zw~gRJ25JX#fp}4-E>sN|Kq)4x>mIMziHbMlb_{3_O*n5fj-e-ylNGseS;!Ws71z9q zp|~lgsD+n3Apt4xSKe20!FOhuQJBGd55L#--U7b=!rW)S|0L5sHSOO``zOQ`@pL?b z0RsjxD=T~tJL@2EOWdOl4R(49mppI3Q~>Uf0Gb38)n(wIA%FkmWbmeAuH&LHd(q`) z+=69U30>c9LqV%67>?WH9`sx91R8COnr!4(YV@qIh}{#rkCJO8|9m0!$&WF-ScLoOx7c)XewxiR)_7>PG?aelxW zDI<6QWqWf3M^h$IT((wjXTZ&P~<5>*Ff~Qf)O6k5D zwaes;@jm6O5eGBq+n7IBpL@$_KAzEuPuJz^`TMmRa8-keD-*AMkT5U_&=>OiYd^mm z=KtXP-v4*r|Lz)$UpKK|nK;__6BH_Ueg5u$Pr`1+yI!yT-hmIi^WN|4&+n`OUQO{W z40?Uy7&hgfm+~j}Nebm6+U-%mojBbgiD)o@1`ET(Qa@de78_Ha3C*5|IOY!O!nEwr zGSi%VoL$5<`ETD$^I2S#=eI^xO@sw$evg+Vh5EAm{?{h1Q?1p`bjcu^C%%PP#Gqjd z(dB#sJO<-qR-(;I8OR#YjjpiGW{hexowznDnqNr@;~KFr zEX`MaNuD2PNpn-Pws;;TuYqBWHlWFC;TaU-L5WyZaR`lJv1KS~(SVEDv*dzAOq`d; z+sO=w)*OZgG6AwqV@%|xp|BWtVuu-Mx8DvWH=6-h7Oq*#KNBn_Hk9|r75>$|umyo#={$wCwiX(!$=+anSXJ4jfa$MpuX^G<5- zcLrc`KCC^%3}{s(&bP!uw8st$2}i>cr?AXQEzf>*zl#C_(41eOoQQNpr3 z-*4BhieWqB9rVXScpZ(Bqsg>zIIm-7ru__E-^}Zs9;w{_h+D=mY_2Qlh&$sc6v7sF zBtmOC4{e%pMUCiJ%mlu)A{q3i<7jj$6BQQPNW7f;c{xWU)Eq|6XwrIwUW*E?t z&R2X5Ww&&qsSL@_nQlcesq^urOXCzN|gWA#8Fr zEaBZn?>_nN5q_in%B?G_`HpXP^mOdzq2fa?Hm#*~p!M3f-NZ8vhHY3AHiebkS1ByK z?`6WAcrDfwi`IA&w>0Y@TnLNI$5l7NBY57^x^dMKM{wE!uj7W3U|EjbYqwSdDtQzi zbkh)8G`K81$IroW>onn!991&SLiIT18AI5r!2p_cn~D7nS%!_Cv{Z`78Npn2Zc4O? zE@>UIU2?L6XMNmL+_(F_WA{yG{PFQa_4AHsv-ug4KQq&+Mk z{+3V2&k=sWx4CQ*NPp0!@b~bbrg((-1rM1)_?~zrY{7$JQT!z-GGGVleK_vU`#*~Z z;%~(RD2DG38;OG&mSg_o)kiDs46Tpd&z9_Y^(=;J-f-VDtk{0F%J}eW+%D|NV{tDI#EUg_gF-@$wH6 z32?7!_*5joRQunn)t)G7xX#@|)w>n{cU%6~@S+-yRQr8*<4t!f|7+V?&#&QE_lml{ z8wZ=R{-0|9Q`!^(V5BSH63ZFTXYL zME^R@&i&N2x8LIO-+kwS&;Dh`Ui{|OZ$3%f8Xq?oFS~9`D!84L0M=(D;Jz0nr*k&y z9-}6ec$?C_BEFeRjtvI0a;Y&DzT-6~(eD|X(P%W@mVmZYa30IRdCii$AqUSC;suPw zTUoiW!%CCN%>;&XG_!Ya<|A60?@c8qZO0u?xGEK9uV7St?2`x<1<6Xjip~ri-Z2)M zP>Sc`4JrHg2!^bP$%-^N5}eQX$nDwk|6*3eH7dn1^v120VbEq5(UjkROI@H+e3Z&ruFxWx+?vE3y!=!(5) z)E$~|R5_N2>$B3iBxQe(WXtY~URO|wJ@HkPy_gl21Nll9KLC}rXbP=_rqC6-s6JkO zbNpo%f8~dM=7;_v4>Uip^nry`XIB?iAHzCpEXNTCT_L^^UvLXoT#v7z&ar&GiYU_!(Hgg6%xn6ktkFl&qbz0kRyE>M z0^Z}Me6?<*LU=r#E!s!jaTAqz%MA>8Lvk@Vkq8f*-z>teBN}0PSCHS>0IS=f^sO1?zD8+MV)uKt7pGGjInzLscGLVtJ_mO;D z83>5S^L)2i$~dprsv*xq3B<2t!bk#m+cMB!a>+ZA4z3M@aYF(EE%#2oa*4Qg!6}S7 zVtW34voY$Z%NVdR?v;SxLO$-Kd~TVzQZ=n`+AH1#*-t{^>0k8|S=N>Jz3ac!$Jh2h z2*Ka|YOVCtm|q#m`t)KZXbfhDnU?&FRR2D^%XA+~Z8Q_J>N8+a`#Uv9kERKqgmwjK z9HezcF#}r3Q(-v2-j?4#l7ZC9U1w!-1l{Y|sc_d%Yx?@%k49kPmnEDOvT`OF-8w$-2IdFh7k$o%tJ&WyO4rV6h~B<2Kc-s89d3D8^*D z-(ZzQ@JmYhOYtfyb{ob>To;}~gH_rw=8^(h!;3aZ#FRM@ZyLdk@Tg(peywKUF#|?S zMjkwzkEdpRU(JNIvW|F6Qj*r8=w%fQXM$2Sz7*z5M1YNGHex1mrx_lR6s|?$mAr!J zOLwX8Y=&qT8*#sKm`hk}C=N)` zNQtPK)?e%Lc9u~ixbDq(2<>^^>i0xgjZ%D33C*6h1s&n(unZ*wafG-bI}R;Mz-m~M zuiKOAwV_KxT#ce@%2H%TBU)Vy8_}pM4x`({p@I0E!8nTfi8vH$PA4~WAK#=cMLF3U z=3>A;LzotK=|F2(Wg!~Pv>>0ybbn63=dFC5=4XeQ#~jW|<9(8%yDi>ATU;NWLwk6^ z(`d9%GjYFOa|v@a7{N1AMAJ%bp#uf4#!+;~Rrxx#g-0+moXAcHB}<6MQa=u>^Zfo~ zo^Rh@iTU7+P?yL3a8}?iGK`9OUc{C7PFRguVZPmxGPez5W@N?qaGpPEHKi7f7_dSG zb#b{HXmv0H(W`W$WJCw?4I@SgPicswcv)je?jA={#8G@HE9(csNz4i-<3+Tm^Bpgz z`&W20uXi_U(1wRii#svwOjv;7c*IL+4o_H3JgOrT%+k8$ku(m&Vf9+jq%EG29Gzxj zI37r`IAO6(DCr8F$&oDf5jN%Li`i0S*&J2LTL1OjFV|+G^hWDYbSuxTwfoTIohlIl z3vnsNTo0>IikF;5eRw3_|I>ZtbbdbS%zwYtMGYvci)o#6%n0h;47*WhPS`|TXC#hd zZn__ZeK{(v#Xe0K(B&*TV_)2l(a;u_qU;fM#MPRW3D4$la9D#X`VEIB^jZ~%Fcx=* zxtJDq$9IUYYY2~FcDx$97}@&uqu)5nnXjGsg)?VqTJ_LK(?UM6;}b7@Vu+8NY~J^g z65(K27pjCKbsL<*K~K0yVSk}m7$NKluZ6Wz1@d_mt#B11&TGRav#r80x0AzDex5pM znnoj;Uyu>JUkZUgsTD_36T(Yg%y8FStthMEFEVy4Y1d&I>1g;@|$I=lRc1U;lTX zAL9BaKlk<*ewgqh-o9@TS9SOp@$K-_u}t_2cB|rJW_S+|`bF@L*7!a6Nc@$s0xjVu z;>Yo!_#eVk#2eu+#Lp5I=txArcrhvJ!=DQq@SukrC4Rw&Len-{h0tzivqYi5}+=xPYZb-yUzoe2=M+$fJxGBF-wpiNwzVGqt*rlRYm3^*_@e^<---w@ z)u!4Xs!b69rrQ6A_TNeXxO+mphZ8`kF{#?~_FFgrOb`HS6ZqXkfO`S|wb%2XZOD-U z{*9?N)u!4X{}v}0&k6W1`=+lDzhTI4;yq=<81f~b!H7Y>fiL;(co?_+y615@{`>f& zxaM^H3%KA&{4IPYelm{XC&Q1#pCSI^>a*3qO8s{g|8@LP{^r%c@uNRFz;{mXy!f$S zqWZJdJ+Xtr|5;cRzJ?LkG@@k!s4u1hwZ~EcHx~pN-BOl-vwED(y4=S-?hcx4FdG9I zIDW@jSMidn1(GuJFzT(yO8%rYxuNP5hP-YGrt5bFea`0s^c)4;(5PQB&b=-H6nn8u zrO4!3h5azg@OV)q1aSRax~X)x}< zU_4|o25eJA#d+IsB?I-lQsFz^$Us0P7eGhc3Pp^?cjCh+*b>i53i6~VDyze#4BVf| z3e@XPhei~2#$y%~ z;#^!cU_M548I$zl2|%kDBcG$B%xgoRw_GN^ zbvqT$#uJ1mLw^{eul0*JzxW#CpB`@*Ps*_YWgK)-EBYi2a#!wuyYunYB1PH^x(Zpb zeIq{Y28Qj3Z=xj=M}{+iyg4iUYs#`gl}x~>3vFmME8aqHd@gRsu&thz;Mt@otJ;Dg ztvYZ!&ud2{rT?{jeMTqxds@r2YRmoQx|h%$SK5QJCt?{b`aFTF8QASjfRp7)%6K7- z4WM>W(+^^_+($XOwY0E9g%q%j=k~{bK{T%ST2+bvuT{9!r#@bXuOopPkbj`hfrI=F3SC^ zGxhU$RlP20MVtr=rF326A!j8eTvCianKfM_j-y~G9+e7?ty1Clc{JtoQ^?=zR0h@t z^O}1s6At!f0C_B5$EV0n2hAGLm>q0xsTw3+h)1&~@n()zsn1b01#>0mlyexe)pqHA z_&kQaY6nK0sTnY;DKU3S0C1YuhbB~rZ=f#sqxW0fSMwFBPW-?2+n6K*-2G~C;?oIe z{~#bBQWi$iZjky4y`ghH$_F z1o)oL%M8f6^2xtfv!<`huh;w#s`=TgVL}04&Yv%S;P*^snpf3Nv zJ^#Ft_p1~0e|`##i2ySrTT*xDV=Cn1JFWwxPG+J{Qvwp>N@di0Bg{ZK?z0?C;i-5S zWAS(bph8RT^V7^Ap3lw|Wn3Y<5l+ zhcfl!VJG4tbmTCju}lFPiOa*oXtv4=D0|BQ3NblEb%fV#!c`BeBOX@Lh~|99Nyj{) z$PUXTtMrcCU#}Tc#1g|A(PMie9>#f+gGyUih*pao!iWwtF^~bmW{;^O?p8L0_I#ak zAHnI={{zziWZ#B zJ@yed(>RXH;wz}PC_INo%i}0o!tBtFcRZ>@JZm^sa8*%-usP5F&uEI5O-2s%SgU~1 zxFO6yhnMZoBVroyMp$kb1A5KD97QF<%b7?vT~j47ahiQU`*Ep;cjx~ppXITioSRYLtaSz zJ#GsxqA|=1r_tllcoVnsJa#M-WoK&)Ma*(K&pb`0qc3jtD7wN{Z%9#B4aDndT!r0v z-QJRc@p1<8`)$>Tk+?SO#>{ZmQj_cdLMB{Z&4hpj*>r!@x!8lM!7v|Vad&dE2(QFF zl5@f+@nxeL(V1rEu**m+W18bNXNZvQ_lM0vy*Xh`9#4IEBhQkZc|ABsL5D;DdIv+^ zvJG`{bJ&FG;gkaLO*dkhuqzV}7UcC=$@w%78PJA1@dbM@BfOc2DEawzFy9GwXGfh? znYuR1P&|zx`$Ih%;<>m^B0gpNwGoD9X=!ln4 zwJ@|%y;eOveusheUtax{xtx0AUyE1GNax%gCm-d}01Ud+;DS{`?4+|=dB5Shr_lb?sv zxM?t7I|g0xdldE-eyZ>sW}cJ{_LDh-}6(fx%ABJCs*?KKl|Fx{o_BuyYIbs zsQNNtUigdmJ%N93TO1&si*G6remv~-A$(gr9KMfuIlLBsfUrcDb~HQTqxg^(eQ1iG z3F~kz{FsYq^ilnIF#cNnRWyX9zDEN3|3PvDh;I>Q#oq`&hX=#Q{Zq*a;1}?q4~PE; z^%~Gd#IA^?2IBq3mu2=Mz80^aWkP$L37gmIJB{xw2CA^_AZ{;LzOe-MU@6HWl( z_x-v50{Fk%V0_96V5R(l{J%{mqD`8~;c`7ZAC3QC)E%t* z+xPWh$Yq~Hivf2~FfS`vQ>zum2QskIVWniHoGioN(W4oUTVfstGUI=-UL9DRm3%w( zx{fClT}8VATTq_^1{$ooy6PD2Sm7AX$LV1s zu^4w&E5rk_6yIcgO?5_fnDMsp8{>~rSvdaA_$}VuR(|r`OZ?uh-|PFmL2jJ-&BZrx z;p?CI_ZI?R{q?V2`RXRBcdD1F7qQN0SVr9FPCPGJ|2>0J%0@S)E<@rW(&lS@%uEJGoFgoD1MZ_3@+xG_S@@kH=n& znUj^et*W?~qXN$60$!7r(2R;gyn~+jdORXoZoed1^f%+$`(UaBywu>z=4|1*Jtm9a zvUw=E9?whpvdt)~#4_=&3!Fvf0n239S`O6 zH0o>u>f!+}Vc6EV5fx1~qbV!R8uD>pPJnn^XEY?m^k}?;k@!~JgFdU`Q=pJR%>-DV zNLK%GZw5?W%vblSA^oU}=i?g~vD_+Djl?Tz2GWzje=XBFfr8W<3eALz;X=5|dkfzy zms|MWhrf5j>~`ATX}kJupC`T<+u|Wyx6M}KTk$QkC8c#z&J}W`Moj@LTkzK9LR$iA z9x>)kTyn={tWt_+(UKL^1vM-9N(TPZd23S00DFsiobi&&*zan5iZ6frz^{Gz<5X2& zu6~`u^I>s#9J3tH3i^^Vq1~89;weRgQpR#CZpYWMwP#XJkGT}nJe2<4d1)1v75;H& z?vIxwu%@6bw4>@~JcF@#z!Mm=IUdf}@hk?_GQLym&fjx;>QC`XCMKNCP-%lsqiAqS z8U68$Z5VMpJ1v~_sszLi;#>xbYK8iX83H_+$N5{?1hyhMS=1Rbf}wcO2u9tK$N?$R zq>@wVNAu^3lH&MQCMs;m{b*r6AKmJe(X3GmhMhKso_N)1$#QugZhPKVNjLs@Iu-F2 z%Gz=vzC59HPEj98Ie#?ut8g-(r%MS)h-Wh}(vXj@H(to!^NxLa9IV5r^D$kACoD?+ zETs9rF+M3p7pz2gK95PoCzHzLS&S>m+B+VQEPZ?OIBm#;p1y2CUZ+hHnpN~*IPP-+ zy{;-rh0OUFvcwjYT!=>`z%{v~RKnskE|SHuHqTC;MqsGVy|pO=Lt`0uuK59^!s%%4U(Gptx@OUTIUCnEIf}yhcd3XqX8!pV5?@_f85#Z z#F6^SEDJ!F8JT!Dn9ozPrtc3)nZK-dKZ|?7JK^zs-ntYpGhS3cS6G~{M=1l_DVzSb znqyBIBVB5iw&^}KoPS<(uBoME)|BjtjF5nzrrbZO`5jC;wWQye96%CKH<+DNl9NCw zd+ChEr*mY<<1V2tE_Dv|9?>dU@wewAnTD!GW}-Q~=wYN4LLz=VO58R<5E;z`g@RE` z%fQ{r2_pKyViuwE2h!t(F<$0x=6}F2tq1!goF&3W+E76=4qb*@gb|C1=W4~yc z$tUnpB_mSwP@Oa{kj70Fi}H9Ib~Y13D)BJ-><&p$++;Rp#}utm39Gc_^SuUr8a0`i zm*Zg#n$VGnPH*IEIV87m6wjbJESDi}!PGhRsN zFdWjGiBW}2G&`68+W2xk2xL#TZ45woXWzAYp%nnAkJs+>38h2)bWOI03iY}Ooey#d&Hh-s?d7aRbug7ry zo|7f?N+!)SX7CM90 zxIeytwy?`3;t4$#pii4o!bX)?k^tA_U{DHO=(jsPQN>riDG{k&#DIAaww=`KqT$9Fk*pX+rHF{IDfu48?l^n^?7;lGJXbDeC zkp%;x9yjuFAI|I59j0l)9cN<|)wnu5j#jV4gJ=mW-6md4^H^AFR09^|albk{GmP4o zi68SM0_QO^(C87@B`1KHIG69A&*mE3EQv}z;8whbfp{pqfR3=vPLwr-HsV&Jag^|C zChly{_w&KrH=1?C6!}&T-IBvkx^IlcG2%w0P*1orF{33Sz^F@kJWY$2(5N9SA>P&> zuM@Va3-cN8s;(PfOV6&J1HXHmPpvs~<5Pc?j}3op@5gR1YwfHVvkv2hLQA28a58KO zCkO|uaftgKFU%+`!dg|ci3hDQLO2=Lh7D+S#&k40ViDRs?Fn4b>Nc)<%@sUmwRZHo zY!;4s#&oQ7A@}PP4Kb#w6IZ3Vy47{lut8bBG!I0hEM`48OFI7KR{SN-pz{=Ji{w8N$eS5{Pp5mA1{mPt6 zUqlc>6XBmaQ1}|Ag&pdN=i)Cy_={m%EaIWK#{pgr_mv0h3 z7e8e>VQyIA*QBU`zk`POt4`p-ur&S~Jg7NrB7Q+r{1=2-@v0f94-3OTLcON=3#j+u zunqO`X55bl!ViR>Bz{F>{3PK!G=#s2q7O|t0(=U^*cbjX>cV$vF-ZidQw%>O5de}S zz+@!AZ%dH?5BskZ0P5ejowWW>&*S5{u2pjYnB3L~0poeTs}TaKxeEWSBLUJ+YlMQy zpWI#jpK=D6YX7TRgm5$O{pq}|JsI9h@n754@T1zAqV~C3kG@;^e>d=7yQhrj?YANT zd@JDpTkTJ^srH9zQv`si_TQuZVS)dE7k024s}uDq@7 z|NagDlL^sNZK_SRKh7t@l`*LTi%JU z;&bsoT0^|!U-@qQa|hzLYODmim%#4ToMcMMPhxN8(*jTR<*x6M0HkNF@BNp>*I^Y_fbCnu5y*JJKub1 ztU&ij_Y2*dIsftV|NQ(vr1!^qcYkp{)oOKpbpYoG^N9QP#a=1vdOgYp;$@7)3!xLE zPGvyv6&2jfh4I_@-qDi^fAK7F7)@rT%y5T{pkGqf89yfJix}~0Cd?FLuT;>j-ThOcxMsnhfWkRCLmTFL zPCN0XYD>IKv9I|2{Rf!!)89Kj>(BAwx~5GZZl^k0Jyjhcu8r&CvyxIbDS7I$wR$xd zZfoh;32@wL$a%?9eF%L<<2vG6XVu|yyppY^YoD*=V@}6g%#h?|!@7tsx?mS>nr9K; zeC(Td#vW(*N4|D@_&;D>?28Sk6y}D9Q8mvP`ci>8UeToo1y`KMKs={SinzFf5$CgI zemXx@Vwt!(AK7Aw*wCdIT2V3>PoW$yWh>jgxzPP&+%EySo#@TL`0Eo2>zcJUb;KT{ zy3vzOVjEpo!e~5feI8dO^m#rWlN7^MT+2%CtC^UvHJ`URxiDPHn&YEJ!*q;hqDa|@ zUdb~276z=%S*JJSQ4DLgUJX`A09p}yGZm{Z7tWXD@jO$DB8FVog`s%e5p;XWd5n44 zWsJC@70qVHQy4Uv-d>dEsj8G&T{}->#AErqT}}Nh?$DWuAp-_67i-iuC0)uSBy z9LaqoMV6$D*{Z68=(jvOg51sofMR$Yb=u-Ps5dvOJ}X&yR*2_OgEVVO@k2{&N)L@P(4rYSYQnMi*$oKai zSBzql8^$Dy`DD#LmiJ|%+itDsG&4Im462|hYu5+j(+XIe@1F(FsGvQ+-Xf)C&v00g z@OVrl?DZ+L-XXJ9q%3)awNf<0<)rM^7?!BRvb@eaZ@Mbx=5f`K`$a?EAI|rua(?!# zJz3TW12v0&@7qrVx@j3m>{E{+J90m0iPurqoe2XsCg$~Y|4AMOgLW&R6t{%AX!3+< zpz38bhewqpOZ!>*h!#nXR71o~Ml=ytWv7hYQl!Xe2F4ol{Pb*AWEbqh!?_al;buHD4Lb;_idh$#@oZhH^W@>F(VVRIw4KJY83eTZAJZS-171DhQO~h^Lva?kpLe(t&+w*l=YL*t1 z)ChC?b5?jUw4fnwvIbq@&3FaPrs*Y~)~8ca>{le~{W_ED#tqrhznT@v!%pS(+C?W( zj$5rqTi9wH@ud13P1GFb;f=r=XbsPphLTQwl4AheKqJ3LCvk5E zq|=<99CL=SKu3HIwUzTtPloxJqsL9OSm8A^>JOc0H4^*rhH_SVH)f@FB{bls6*1kn zW~FrVc+x_2ge~Do;z2{Pm#{j|*K?(4mL>Uo)y8FQTO+&_wB&JlL=*8X-QL0sbDScq zi6^bV+OW}c5+Sul9!mF<+FhhBN7~Ga*CnFa7zX3Euof-hIUSg-*>vJNc}DF>_v>&% zbL^IY(oyu=m8z}rXxNYTurh4HB{O0-alK(B!V`HMt;>!vZFx5D^>RFl)_5d5hdRSy zB^txt*oT99)T1*$Cp?@TdRoj$P6W2*@qErv)SDZ}P@m_&-n`DZXfzXGQe?`Iv3Ljt z2SNv`@hw}Vh=~`8Cly0OI&ZN=C~M6ZX9rO;$@nz3pRyZ7QqswSW5oBX=2;1}XOq)}242$efgzxx*&1kVEo{)gu zX(ppZHs$$oajqFYoC%48s-abyYZ8IGBkUrs)*n+0$Fwk$@j2tmDz9;~{&NF2hj@GA z+yCJ0TQqO@NL};ueEX7*ZU6RXDQpYt!(2jtXb2U;k}%Ce3SD9CeRByLo%S+uSG*j% z2>oGCSb}{{gXb->7sX8JpCv^H+%W709@N>Q$AB&&#eZ*f2f8U=Z{7^im6(0_3^ZK;i0^;Z6XUrqa536-c5dhzf2jiu% z5e;E!evWu3{4{!e#6djhYTTP&-zhl){37Z#g*Q+iZ^eVC4?hroiue^Dibn~ZJ{YAL4rVy5KsgD>r5*BYfb_FE0F;5&*S^v6+ZB<$&zAdVL0QmogA=mMBUvZgG=l<|vVz<8d^XT(={}RK#9512A4X@?-G$A^E6cp_emf1WVz zmNu-DvY-20Qo`*FTu=9?Ms!(`A*f`vK3@%>S(;UuZAPS-a6ZnsqYm4$qJN9!Sy9zu z2rZ6y9i4`3zwEHXMGhgc9Q-ANwC(iyA zuATZ%r>@m8wy)Iv%>}sbr7#`a4aaWGSGG;E^goJ{o^S|b&Kkv#lPZ{=7xTOGBK~{^ z4qw!wSyEP2&>PoSgHewfLZh>B7)KJM6nA9B{)-u68p(yap19Ig412{{l=Lb}+01n& z72NwW0Dd`J?AB?H*H8}gJcr)6%pfYR#9r*yszN-LvtT(#k5 z9{$kL#ZO7Tz7@s0c508Yad}Gx&Hh*IW z-}w4B>PKf1Uoz}z;!JHiFilJ7M8C`N3`+5UH7L2A0GO;SZpjW5?GrFmC6@7YKCWcL zo|J0!Qik{#hT|T`FzCtn8VZIzkB+2}(~tqLoGl(xSu-ghQ{g@Jt6sAWqUy9)aVM_O zjk47-Y4AG~(3QO}&Sxi$bs3QE%>}Lge7rsRIO`O{47A0Au?O8&S%iYRcn;MGrES>= zcAG8{Lz2b*E+4SikEgTtxmDYQ2DuX>Zn%Rx@wseG|3pmVa?ldAn5G_W889#9h=;e* z+BaUwwNxf~qz&X$uJeABk^aFs?Tn-L88Iqc-Qrj!Mo%PXKp=l(F2HsSFL- z3i(tnfS=3&-GD?iI47;f>oc%Yi%@9D^XQnCFau3-bKHq;C%hp!u5_Yem85p<%vsIX zCsy4n^7$@Fnd<4AR`c~ufJs$p;{7$3j>g<0ld`S$tWaC(gc8mG03ZNKL_t*J7vA@O z+Vl6W%l)`N(;sGrRSMV{Pe{tg;~6kspYF5qMPvRy_U<^$%Im%l{O4Sau12HLXgnTI zCSyzpp@a~Y#Y9V}%wmrG#LrQiY{d zA(Rk8Da9BQgbAS-6P93#@q~=W#ZmnYdQ`&?-|LupdX|2br;k? z*@D+_N3Tt4&fQ6oD0y+erHaF9(!?!V(CB1}Cz7eiHKPm=H`xWA&il8vOu%?EU1MCG z=i{wBkL%+?b*M?`w#DLrRd}rkNG>{bx>hdV844W4W z<@;Wje_j(xuI388+OuhWetoYM?t9(ujd(*^e`{HpHq^)DOS8L zyi>#zu6q$Qq}pPGnb?%h>zTCQ3G?#xoXF?7Dpi!5qb^s1j*mwr3GZ}{)qGva>$s{C z#-cTDaS(msMYC`{9@mYDVPmdP@5&ZhY5y}Zt!H7pWF@k3*fL^!?!CHPab1i%Bn6^T z7#EL(-53*gSb&yH7`l=7PxUH#b9_$oy`Vx^kQE@F)~$e!40uh@9518G;V=`GxWG=S zBK|O1!j|w1j%tqG#C7^|yh-u@@WcxVTY|K$JgU? z=nC7^5w|3zl<-0Z)F$M0Yr5pAKH3e<=(XNO$@BgQ#u9o_j{CzHbcY2>#A_Vso|#xup~@qT7}*6{YxWOaS*pw~23s z7fnD@vfcQ!_(oV)Q`%s z$NlrOW*SmcXgHeya9wFVi%Y|iJYJ^brb)3AS287GWd_opQx}>sLrW&IrgidaoEv9h zoLz}v9+rp2#Qko@Uc!t#9wz4d^`dSK7;qq_=bIioFwU{iLA+&J?2^`lM9xidXI)-b zraBpWa62vy%@`YwWo44l_PM7-){@8hrX1&%>kb{bqZ0ej>-8`LO$JRvyJzDS)F?9Z zvNV5Vj?-&0p`nu3v72#;TNoSm58v}M3|bc32k9T-sctLb)q;eOkiNfz_SBq`P^5}tpD6;p4|N8C!ZX{k8k_&>W?p@ z<-j9bTb5HO6&8f!gdJh&qq8ttfAuVdg@t*A0%2n~9~Pj`rC7j9*TR6LaMp*pTI|H_ zOt?E{hp8B6wF+J^&t9DKmVR7w#%Nr~#ZG&bbz#tDYoz`A07hA2F)n4IV zFj~F2lEOl=5?kW{#yXa%l67XFG0&Q*SxKVLGChQ^723mZQ~kTuAFdu_(!c%TKN$aM z{>jDFYyZJ-u=2$J_VL$0#rr>dch}uM!h!H>kNgZq#a~k-o(aDkA0sUEX;0yM{0;4R z(x*L%ceI9&p*bE+$_ZH!pvm|67V)aziDwA^y;1%L$ueLPp78nbvuMy94-s!`_Jf2U zikGt`z_anw67c`eB?7@N)O*tRp+4U5ukl!zY7}}k`b{4o0K|VUSpxhdiZRWDN5h!- zdC3ys@3?0LP^YLFk0{m@0VE>8qr;W}Pq-)jUyzjL?pXp9JZ2d1k9T7w69J0hDSw&( zPy_t$N&Hubv+g1P^uN>+z@PE{2oYeU{Z+Ml6qXv!Q^SWICw)37f;pumg1t>A_h~=SrYd$uQSKjp%jISRC|Ru9#YD2+OU^3Bz`iB~Q~- zDb}O|V~tji=NwN=dR5K$z27D!{02=m36rzr?sYWqr8tI59kVxrtgWnGQnW3v`SU8r}v0H59REX!% z3dQjnP^1_fQ5>4yFpB*p(Cc zJz4pnqSJA7*^pC9x8r4;O^M^UKKJunH4ovsT+y8>&idj3YjDT1cp=ZodNgJ))xHe8 z9?gl#)?DG)rBRZ~O^NZ6Q<6vL&3II*L~hS>JXKED0E|>|d(-t$z?yh2?jr88D!xYH zVqrsJCgrK+ruQc@defNazwZ(s`?-((>c{pIZtAdtxGFv$7ZOH=v7yC1iT)bERn3y( zRV_-`V4K6lopG%xQl;@|NjknNd44yzM^LBULF%WmgH_~~=WfEXqMxT29*qrClwG8~%Ji2Qh_CUp z;Wz8XfHCnf2JLqX_1d+dExV$>obG2loX_hTIT2QHOY+KX%I9+tgK=LRgWHy8WsaeE zMXHn?a!(4pnjpNmCtpWf9!uvF!62Se%;$RQp7}b`hNpNXigT$5+s0VO%PCr_V+q z69sC}XE{qL7t{^QHz%*%`aBZu)mSHByPDsxDIyede^m45r2gs3Ku>d?FGE>!znuU6 zmAF|6P0lOewpUe&SK=6~*AiEuRo zgtc1hnsjqA9ck2%6XaD#^Yv`aKYv52tUi~odlE{@W|04us-kU@gne@!D<>o%cwz3D z)#-ENL8%gUO7780{;%; z6)-M5mwSKoFmXs8H|admdRwz>su2Y4--ABb5&^7x_;t6mKOn`EbNT%$hTHOV~myOXcD$ujAF_u^{ahrF2q>ZQ3S#%B-dYx#Rp6*(n6ZsL|#;*02s zQ^G9CnyLq*!pmMpS*wNlSjyMiBv})c2rIJ!!3q89(4topmMg~d7;wyB>gO;IgK=hD zg?8)Gb3mA83JOLWP28H}@-rz;hT2|Zv7$yylRV1H-ioJiJI)A`(QI_`6xVOFB)PqY zxKoD)v?VK*S~YrjF^{8FN--&QCBW}aTxfI*G%ZOOW< z6^(9$GvMhAK$f%+*QYohUd{xK_4$4ex|B(g$MvJtb72{pb=!ujF`9|{lj4C1X&i?d zA!tkPyS`x}Sgl&GKHK4p(S)H?;T`8%VK!lX+#BD*^6;{LiIA6wbG3if{CV{;S?P3V zrIRo_%B2YCFR~b|$EKwhautcu{#t<)~GcE~<(AH=xI>LqU3h_!{to?pvo$QBfb z(taYmmdC-f>a%sqK)i@@ycUwh)rGX52(K%mJ3puN49D@*2D0T;$@$oYCVe5Td*e(X zUNNK(N8?N{)3^Q`Q~Ks{X4hx`_UAsssGl0OXw>U`qWu#KKGDb{J&&|LGL3LPoG%#)K0FbQW2St9L!E}+gFFJY`HAAqGAJ!>?k zm~0=mI*`}dby>QWKYc+_KIj-&{Xtb!iP`qNM*vX2?kUOKBqn zfRXl>*}mJr_AnyAg8}tn3IGoV>RO<$Jp?|;@Osem?RfXdyL0(s{})ev@jUN*^V~Pi|0;cb-`Lo9 z9Oq)49oXrhDsjKw*e`itCP~sHMSLqu2bb;45`bwfIhxZDXLDkwHv|7gjj6IPp7uum zyR)cj2%FKOE|$p#2;zmDAnMf;n$Z*Y$J4mu^|%EE$Gs}08=uG9NwPg|%auUaG=%g( ze=%M`DPFPTF7WtCNu$9DnUy0l=UO^y?I^LeIzYRbUk9Tk1pZ?|)}8V@;6-0P|i^yxMVhvF3%2?ODB=;zzxzCEQhj(5LY z`tf&HVz2f%MXDISfeUeSwi4NxMMaA?pe3suT}a-waewZ&V`=Xck7VGgs5>;FFRqWN zHnh!Z^jjHkp;_`0J(VTdi;nC;_J_;avm%6QN~q9xns=dd}qW*_7jX z(HZp^jHhjuEDsK&-uCr1MT>7?Oj!cr=f*mvVoVa)tQC zxI-1~VNq807;7^IolL-3ylO56?1}Txm#tvxbmV(GpkD$)6Ir5GIr(6#4)5+0Kzl#D zpMIXkSzUfr15y(~;7X1I*WxK<;@&Vrk+3=@0qNHqmaIn7ah*-M0zP?dSG20)tt?^P zk}I;?G-rU|yejT!%>)ImN=g#PBt?P7eD1ZUk+b>Oo6op2-~SqTkSZS&074>vB@u5B zZ%UQLz4>>WCFO@iEUJdw6Y&NL8p320a;0j0t}HDm#RTBj=lwucs$@-n-5^!=r@apq zm3Rns_szq4i8zsnEJMR&fYy9ngZa7#Q@_LnJS63hf*NrqRfw0AJg;U0km}x3|JRv? zvO%NM^@nlNSRIw_bUdC%N7fPuGx8M-NbAHi(vw;ulGK}=|GvdN!URdBL?&)DVqgBf z`I7Qa6IwG6dMD5S>$#7vYB5OMY9JE;QkxNHtHXfPiiD+ci2`PYz3Oo%U&Z`vRZt3Z za$KLBuPRA-m+u?#sog&V?h#zl72N+@jl-`Kkb72_H2=6eFGw~%Ue$<;{D%!#f{lp{rN{g9zl;)7|qBPdF<@NlITZu5}LfnagOo-@>)3WtQ zQ+OHU>`OpVm~Vz;?ebENwq0n7V)IM*hhFN_s`6<&oktV0&c~*o<^Iso<~cVjKVN$eu`4D^fc0S+8cp>&TEg7CK2KN71O|kYnIbqQkNYmK zIE;GZ;&zPDXb$nbfiRIUArrMX=QunsD-m?5gnIPEO))7c%?T?}4NGGm4m%#^68FdX zPSDlbwW4bjr#^eC;naVo?T6bAe&i3Cxafzve|Q^VR~R4K2}?s$IDpAvgB^tKFu(8& zVXLRDB(AqHTq0}?%i;vgu_FxNX?>DXzzT1o;A}SM8*3YyvlY-yleA-&lM;cfCtF)o zUBg(L^x&#?%P~%)I!w*|o=D-`mI(eG7G!Iwiw@$ZA@ii?y|i8?3#3bVA3N4k$I)+2 zCa`pvfMvcK{sWDFyYZHpY9zFUDie5k3)? z>BSR19M(ugp5MX~VV+57&>Vh&*y%&@|0euk{DSdl2%ikUA_4!22=G+cCRqafE7XUl z!$#uQ6Co;mOk-H>eno&M{6{<*znTaD;Rk#V9#tQIUs4K~>w}g6AHpM<2vDaOKJL#} z1i0T4AS-Fq2mtYJd_R862Q2~WK5(pA0^H3M%rJuc0U98edS!?@l9VMR+2}WK3zV8 zK40}Ybh;LI;SYSyPvJ{0#*O%jKZu{eX}=y%;==`r{a35qwc;_Y2mS-FMjgw zPqJb4Kl$0kqZsp_zHiz0{xR{7<2SVvW``NRh>L=+p=zn|n5cF5LA!vHxt46E@z$W# zYi47tg`SrZ85hxNyES;$Tr+Un9@B8d1!u9#np|NhCD7~yr?S-Wc}vwv(uYgYtj|~+ z%fGk5^SP4!l8u<`rCgCWWCaeo9#^31y8Xnp)os<;#E!VXdYaM%%xZ84f{oS{z zOsN##AH{p^vtYqad!sBcVyrtC8{cUO&FJerr4Wf`IRi$-xC+bJ`CEKH4TcfQ>_Y*-VB%> z%9VUeve#wN&3F(!-n0WH7bQR?dCnh7iKe(c1L=dR8quO9UPD*BV5wC3eg*}j!s`+c zRgX7P1!=sM0kQ!#vFnt;>W_!)M2}5bfuTMp+>*5F+AN8FR?XYEDKwxjZis8p92O_V z0XuSk4k_YR8Y6L4uFQHRe`{|BG6(e9fSYkad;=wiLle$xw2Qbt6CE0JKi|stq2zpM zL1%n9u0+||xJgQY??D|Q1K+Vi+?;{`dlJ~!G@%raN)pL$NRp#+C3;8f&v%@A3EzfH zqWu34>J6S~cw)g5yO>y-_};_J*8(gv%U2&r&cq@CEx8V+2RdPjd`2zrHB?H2{3@BoZ zIXa2U*Yj0d4L`(yC>NxNwqC7g|Dr(&W-m=^0A1-)(vK7VhY@6@76*u5jAs z3>r1WUdh|NfNd$YJq*y-D(FV3d0y9rdfbi+<1-kt#}YIs#vAC#)+N_60C^+V2`PKw5#x7}BI4OT#pIY5`eM)4;BMzbzl66E+ zToqFSd_%4nA97ooJssGZM`&|?n6Kn{bmO)iHc1ut7g4b_Cf%u2@m0xQ@^!iL z`hc6Nk`#SWQd&p=ZUSkq=kFQJ5)IH)uLG8zIX0#LwV2rc2-uH9M^+AVH3pNaf<;=@`5rB zq{`R0$a1hR6B=qtFbx?fsbo4`&D(jD7W>ugbCN>HYRM|$oFs)`8@sbnB&JH^s?qtZ zYxDQze5^es)Kp_?HKVnkc1h!}h^o2|0O;M4QpNR5b(o@>E8gm2Cx#M{On=-IFJUk& zGJqrTT)c|@khE4t#q9?1QW%vgBjaUdY&BXB=H<_s5@u?}`M6X+agE7_2(ye<#KN#l z6HY1XLs!0z8Dv6YdfGal@96amtd5S`+`*=>I#>K9#fKenhd#`3QyXT5t%gvq5^Df) zHUGEPcM0%MfUI1(R)faxDMZK#?rI)6g;3LA8Fk;!E5tJ>U0U72-=7_#GXe&j5BJN=>(4k+3Pgtr49$-n4{uU`77BzTAIV zTHZa~i+jCM`@aWUA__F+O6BHw3zZyMs`_F&@5`Ck(xo0HXTvx&nqw)->KwwA__~E? zNtOcfsIFYWUdSYlbbf2n`GhIC7do;c!-h=wDLAhSW%cnQhBCpTniVJNj7r3?IL9u@ zO5$y_hix`WM7<*Mc>eq`iI5T&X62t^h;5nx03ZNKL_t)xVS-TtWM{Z4RTfv{HeB~S zXo@p6VQknN=Hg~NWIo1(4cQ{0M<4OLG(&5ZOSPgcZV%hh8eX*uCH>jj zAnkJ|r~43!nzfLPD_EPYn##__>*$HQ!(=ptxu&2mo`^lT6xJyc_vp@q-ztR3dG@R! z6VPtQTj=(Bn1@1q%W_H5e-Q=@7$ojZ*AQyw(PY37Ud{xbI=kbW7;rkBkHJLTjN7e6 zTUci*akqXY!W78@qCq7NU{#(U&0dOcquK5-3pe6?JJB9iXQI>`Rmqxbh_FdgUKyM3 zZ_TKq)@t#iMZGo*=#3|dE3G#~nD4ahSP}abF+0pxL21|`s22YVnXuI*JxA=$mMpza zqCf7kALXz?<9&pOXEH&x;C3v#XHimeQ$KFT#bG7Jgk2d}ouN?z)XUhMpGWp(!o+~S zcoF@MhUKWlWiF!{cE=+qni^V(XO&_vp;fXLSe4__L>FRG_E{XpO9b1c7#;S7S-7n? z4oF1k0>d(Us%>wtW9y)sUq5?T%Y9%F3`0?IwlIs52D1@_nz9tQgYsTiT_}F%VCotUipw zphH>GeU3)r1%t7dFfBiqY{*ZQuStq-(;N-;=*l$O#uTUGo6a~-n5n}g-e32A)B7D< zU47-i)fJrlYU{L*Oy@(N`p~N%+QUcBess^M9txww#lluXIm`&F2`fWqc!R>p!pu-2 zydKts7jV|)m=tXexQL~8+Jl!(aTX=xYz7Tp!`iGgcGEJ=nB)zIa9o=i7^le+oOeer z=4$keq!d-f>`cXMvOE(#XSgmYu%vHkvrtkpsbF7TzgMYu5>w2{`-L`>C6Zq$&z}a& z@QfcBo|UG5ecIwF-^Wik{KMb>i5}Me;y?ZA9picA$->|FDXN#MXX6_f75}+Gw1!_c zfYb3`#E7=A%@5;yl&@BcIWk!Ek<30LBq5!cQ^U^@do{(wgpXJtYwWZcD)bllL9(SpnR$1gI$j z)FXIAkywqDSn@$jfSMvedgA$@GC<7|;7?2b|JjxR@xJ$b;P*$`Nc*d9wUPIrl>dX3 z{@)4se-LMSkO1%?F7+T0;9)q|!+`&h88g!UO4M*?Z38mf8~GSzSjeKU6Q2GlE>`Vyo0a0T$+OS1{y!1_8Dj zk1?@oD{*`R7UP{bE1n|WjGNSNr>R#?%x?8?`ic0VM_3yvUdmG+6TYiCW9Q($B zzG=ME@Xpb93S9lr7a#xPA>MC)|Bd(e5Z`viZtP56(ebzeE2Ij?Q|QZ;cKtSH;Hf2d zb&C15m10wt(ww9|4x$pb=E|vc=0FA_D!FpAKPNH{Bmg}g$ba9gJr3b&T$=lRS9}}w z+U!AhP7999XVaJ~ABS}5MQ?mlD~25Nj3mL`gE9H{7v;Lfnfc5MgalyJ#XgkcLCetX zg;bfQF?LFx=PkHA48K+L_b2bofw(UY0;snOpgLiy1hm>URyLcrm7mku`CXdmQQ><(QQ7cpfrfS~a9Vp}$Zr zbWz${+Fm-w$7fDG@$u<=|Ml-LegFSTd24xFc^6@GSQob7dGkFdNp&Z}NT(f`;*KfA zt)|2=c{HZV*>VQ1YF_R&fVrB_J^_RcmKq?=h$rGCR1#2OC<9c*e0@WiKyc9|7YTR5 z)zHJcN8jD~?lHdoo8SKap&udci^q&bhg(XxpcH#>FauvNrI8X(n1Givald=Sild2Q6PM8sa_ghh_NG|J1QsMDtd>vgDrON8~OrAMslq6seam%n|d;)qlWJQm28K}9L z6J!;)B|Cw#b&@5_4qS|tIPQw3~Fln&-ZXa+9gshnuvkoU4(d5>C_ zp!pkdjssw6oGaB?Z_T5)l<)iPJYE{`YL@C>lJ8fp8;qNC+?hiL&t7WtdpfrHbSF zRf(HorwU<@W9qQo0Yk)1CMsdHw-oVeOcm5u?arT6^ZHI!3YQgfvcHg(Cz{>NXLT{3 z(OdbvS4;W?dsAP#26g7=zt3{q2J-c!I4T2GwaWLjUi9bwxt57gU2#v6 z3J(i1QK3&a;l+4bJ(h&o5ZA|j2CzK=P^LSTf#I#Hgmo?{5VzS2y5m)Sn3n<1sWGh} z`y^5I<~S!QwOFN$bve@1C!j)I9B&BEI+O`2M^xSO>aLGTN_|qkzctXS=$I^9rv|~W4 zZd@>=owzAmMbxQT%cOg>J`=@e=ksXJHhmR0b)i4DxQdE-=3^i(_97;RF1sYnoVW%;~3+@<_EMpMn z<{A8I92eai+U{F98JEY^)qFM`Izua(h=aHh=Y^dZA5M4~ z^`xNfi6 zj%s`*F2tCyKa5Vq;CL&KlX}b_CNk9K`&moTWP!~nJCWDOIbj9yTvniXEfWWy$ppQU z+wlah$MNAMj1QL#qQN9X#J!pRm6Z^}5{U@5AzRsX*%z0gG44t+Jgg1Lf}#}rh*$D; zt{IM7jrqx;J9goAoEs*h)yjAr9bs2!CSKM({Crd;9L!Pn>Aa(9_qsaViAU^3eK-*} z5l?CedkCxIR;T&)&2P^fn$5Y=@18nW&&T>kJ^Rty%$+rN+FU%c@u_W(>?DjXj4KQg z4uWrQ4O=ihyjfj{t;%6H;gB|qalmO~aLwECFcxbKCoo#O%h={w%TP2+D;hMJ zi*arnz){!pKE0TgKweV7Nek@8Qj<(VtF30>b@jGO3VNyElakq;+#j#xm7rqK3^XPy zF?CWlb+xTdqrof}u-Q~I@iAk3g78P-cKBTu4J`bh=KW1RS3LIvzyBK?`>}sNf3y1O_$_qAU(-PRY}gtfBYeug(vDVRd=HxatI&?CKI(_i9#47-9}X*& z(CmBtA+Gz3uj47-8*fUM0sjr2a3TEfctT4&O#F%u`60r@Yzfd1o{gWDhyec=8a(CK z@VI8P3O?R!x4c>Fy)sy@thza>DirU>wW zB|vf55}+X;8}sq;`;KAQ5+LnU?|R?6K1cxgvn>JSJX)>dzeeT#FSi76-|voC0gSZ2 z{PrNg{~#gYVZi^x2mpWH%Kz`A0PvlTzRTAmZKVCV+6Vz)r2R#3-)C&2$<$J%&( zFd#q70^t9z0>DTcX(R2gb9>LXb>qDx`5%YkyYY|kb)9}kl0yE^__8m=U&1wK{Up8| zzhEKp|FK6sjyn`Tj;nsu%M>ORZiT_Rdyg`I+jH;!&Ht81|M8=% z9({rM2k{S#BmD2-=W^w8O5~Q4q^3^w>aaE^9_J_deCe<;?KEX*(9^F%8d~rX8oWx`@g4 zSx#(-%Zx_7XW}B_f!Gx{5xe5n_!{x~cp;AF?u5J3s~4!OsjRx&$NS^TQ_IKs=CuCS zZ@$DkTi<#1+$7Hb+jqWx{@3{Sq0(zZ{|oU#bys`=Z#k-txJqX{DoJL)jDh%?Dtc_p zfNF~M4LQM6tMq?0rHtZXwbkWn_QbBUKmSDn^aj?EBMfmL@L z!W}PYK(AulApyrpT0cqkZ_DY^H3@)Fm(OLuDJxM?il^KIScWnXoB@Y;B?G&463EpV z*T=1r#OM|jotJ7Dlet1~8n1C%4QR{>^RgTI(H%Egiyo`u5wvIub-1b=E5zj)@V}lD z#hn^+g1A3>%OA)<+!?8&XMar6*0r^{RykS80B%zz5Zp=ta@=nV-nKDbCjZtwV5Gy? zFpBU@VM^Fd`BwQ(xt@>z=a0Yl@t@|SyG9-V=nCFD``&Bs6$qn3M;MRZQ~~F*Gj4oFwG4R^9K#j!jlD_J4pj@HnDLOdMz zq1#SxV$iO5P$F_%%>7r7!>RM*n&IG{mD4P&|aU z)GQ#9ckT(b3geO?Xw zIPJucL#Z;*#kd9anRs+PSD4kn^w!+Z*=sqpsA$MQ?GTnq-sD3WcqNX&|tbV=!s+FQB)kxz-TQZRP*k-wx_Pa`?ada8sLzkX=9E9l^pjn0OVBuyD>2V z_SciEZhXNu1DKnY1q#k-B+kl&wGQ1`5g@;*uF zSK?kt>U(CsnpLRFM6RkvizQ`*DjM}Af>wSexIGMWU)PTt*@1XeXi*`)reJ_DKHgDB z9LQ&NN~0k>?G~8nf_lQ3xC4xLScSOWkrbEXWPR9cM<(91D&UI6!$46zaj|M9@O0(z zu{Z-OX??n>D-$0IIWE-X)C;*nygUqir7IiCU`ox}qnayO%Pvd6?d{y3i*iqN=RSV$ zsi;N{sK-eshdtQqhkwdBue(q2ByLj80ChU<&F{~OlXE3v0!A-oXsj;o(2Fi-z+BTH zEXl9WTdqj#a#EErK1)824lC7RZXC+%+Vu<&CGYFLd_wg(ZZxXXhmwY2OOHbCucR1J z&exjWEvtq#(t47i;7kxmGonvbHyRX7$L<99#}~8W!|6;E854ITg&L#P;Y?b;!Uo3` z@O(I($X_uLLna!p4y7b|0oj$|9Y%UT0lxiq#x3ZN9T~Vu zRstOkx`v8Q%h4QG<=9lt`;UeUpjVU#6Z5CH=XG{;{{9+aq^L;=br!@6sKf~wkZTX~ z(QHxNk2-DP6%@lNJMx*Q{XrsFY|WqFknT&^kgqR+PZadV>(YELp~v2^4%N8CD2%qz z0P4dyGtppzIm8Q@K#}fbvLq;AibQOjo~dpFF6%|X=9v0tbXbJ8c)~d}gl9~W_F2!S z@uE#4&JE(ZJdP@f7@%xhypDQ8`u(gR6{lH%j&L}?+BrA;uoJy7N!*Osy)>0`Z zg(GDLRB$IQ){OSBGrW#EP01=pU1%iEPu}t2pqed5ArtbFqQq>Ia@=SLb0ng|b~J|< zk~DVO|HTt&e1+%oYBD9C+q}HrD7hLJ;!2zxCSiOy>=^1z$N+nTA>w8X65deFmJF$q zd$tp?7Xz_9JTI*Vw=g9PT7kh~LzWcZPby?0P9ZBP+#@vIpM9#!GpOWnyo8H!svf*% zM_7URVR<-<*~+mNWA7(O)&5ltDoTXAtI~dDE84(@Fv4q?4rLY#`!|_~k-EJyzdfK;#7bFF#jd`3m7*a-;*Cng5RW_n6tj)?lEyfTg zO2nwAvog#=_3?K8c^`Vc8D^j^u8-%@9=3)K;#%d{kMX&(|BXz!nx-1N&}Uz&9FOP2 za?~3e%eWPmhaxsB#UU)nJBdV+piL@ej^Di*<`XW4fpC<<70U{T3Dd$#?ZngJgeinQVQ=V0yVYSYCaRc; zWBR;>$zD;$C^M|XK(^>;G0%93fH8nMmTAO*Yx%jpXa(NTj{EmRX?!2g>&Ie6XE8ya zIVii9*Y%G4+%ljGMNd0|ZB`k;NmcVDRkWkH?DPIL@n_Ua2=-}^`Z zV95agss3`?AO1_e`nzA-^UVTKFhW zjw4u_$53M{+7LH@S*st=@{O?tK@57Sf;Fo>S5+DKp#bHH&$K6u|xJLkZL_P6tti*SH z&=TO$e5`X%5g_K*Q8j1bgS+q@Edf06dV~lt(*A1Oy%AdfkmEyu|4@5BKb<_Z;{U

          BdwdHtse05PBENXQ*&BkjN57Ka(hsq+7Q@A(t-xa|mWC=SLy!k_q>bNISH zavWdt<^Pwx`wy==yYB=4I(M$`$Qq3z%NkkMD1<76U=~j(OQ!Qo2qkn%$8?sZl*~gZ zA%rEfbjmZOge8=vge8FWDE-*e9Qd_V7B@!zA@A6SPTo$=q{i#`+U z@C9e%2rk55k6$EohW+kPIXAX<>^B*^S^m^W;I z#%(B?=sKQ>9dQY&&m+@b2;W< zR`?#y1;g5$Nq9eNW&5pm5rzDKelP$2mHhilWTm9~(1y`?FJ3^W#pX*uz%FuGGFh0C z6gDKKMFRf&LnFH5tMN??+L;whqgstC?cH!1$(rQBb4vJ!99outr-E@3+#6Roi?_X^PXeyDd!SpWD#LDto32xyRGwC@;Ujk& z7k%VD?f?4^{&@R(N{2smwDdOb?izXZ-F<}p;c(cD9p*cQPB-EP%rsZG1msqWzz?7n zs$mqB(5@B-;wl@7_e^yb6XO=iGC5h@RtZ0q@qfjv>`sJ_asv9|ULEmuV%e$K&)^$h z?;L!K%8!gaUimRB4X=i+csY%acsZYWzd}fWOI=I=Yl^Puvqw^*UyN^}K`ATgQepqa zd>x+6pEIa&oLE!9XuO{sA6$}%BYWcs)Ot%VIuvZk$NxS+Iqu4z(wQ6?+|-r`9q}zY zao0LYfu6FQhh2#Y2q{TX25D`3Gxb+InXf_B0>6+8s!*gpH=sHJt%~9Uo6Dis8a|NFqFUU%jYpEQ@ZZwGaNQ4 zANOr#;*sPm6BfiR5D!|Yf(~!yb!lck-&LR#mnq|XnxFB_te88Lt=EfLiIr5n98bp) zcdNK7MM_M@ko&s4A7GX(TT9-|JwGA$OEvc5Tz;M7!8-7O`c}->nX~!*H}dEGp{SJ46Rx;qgt*D%e0}#Q<3x(Yh}$yoH#06#L5&p| znCMX_z?z_pm~Le)>N65!rH>#O6i`kiz?zaP8MZE3z=_l9Yxanl40#WNP5)*K7a z8K!F|p3VUbgw_Yo`daZOY-gc`l^5c=%R*KKm#gMm0Ryo!2D?L%|6 zejm}1iFR!nFs@Z0Ov`7sJ+FJ`@-eK?7&|fGyfOxy0c~-&W+^h@hy;MXoR5E)_(oP- zFUq}BB?p|%(MenL{jcI$Jc;|R>qJA`7!IH@ta1^xW_W?P$&mS&oQaQ>bbk&nN%yfe z3NbmClybihh6$(`jcX->Wz}Kn9`U?M`8lBiVSc`vi}LuMu1+F6o-&C0@x@GV84a(a zHJpm~P-C_daci0b4PeW?6(<0~&~@bN{4c6V7D9 zQ6&=|xEJr>c6>I>#00w>k)j6XpwqBE;s&jm*p$Z4)pS2pub7F!y$a}z$y24yEGy6) zUbT?erILZ)5rc&NnSe7x8uwKqQ1!l7lbtmB^lBikwK|?5Y>cbzM6H*U&=8(Ciq^bJ zR*5%-af)0arhUPUyf0o8UPgU5`n5U+?WXT8O)`6J0L2i`sZ0+(%518KWYB3nXt2-_CL4|SiC6T5TEY@-aTv2QfwVz= zo|k)-r3jHXFu`DUAZk&I&_X(G001BWNklWzk(C>gSi*r{YOVNYJSN*;ubrT?ZKM^Ah; zo|GH}77{Ni#dCyp&WF{EogeF{^l|UXR|f9A#`$0SPai-35BS(eKGylMkMP5jet6jr zzf7U_@wV_fVPECtP$V>l;V^-?GOP&~2>bOLCEj-1dcsNVW}?9)i!e8XR-?A-L#-As zqQQi`|GT9Fx3kkI*ny!o0I3tM3gcCx1v=oYD^v{ z{N<<<&C-2miR2)b2=TYGd&?9P31104;g|F8{bhcn<&$rIVlvAf|68A!-^I>ZzqImj z#6R%Q3crZI?QmF*bMarsB7Pw3SBuN>aQHY{!_K%6ACJd9OS};__zQ#=;(zoJG=^6_ zhT5d;kGJDFJ%k?%E4+XwG=+_LGX75dEj$rE<&&t>6t)xZYm9FZJ`sP{G}MN_9R4|K z$0Gs0FF6Io-;db|ApApOpC{wL&qRQ~hsQnX2c&AwZ%dH?PfL*iAIsl=I1=FfjsQiE z`-%ko*P%Eb4N&xiL=1SsIPgF22#}osVkJdkhGKX;H279WfGQE-F$qkqK0z0JD^UOK zBLR$mxA4BNJ@o&N+N1X0t34QJ9{~7|1N}et(EHy>@&DZ_{~yA$LjF4b)I&%3r*#7O zp!R5HJ!*fd_J{!RsQqc$pLK!xvpNHO5E0Jhu1G(02^^L*je!-T22C@l9R%`}Z-V-|ykR+x{iKIdd9!40%Q>=%!+AQmWm}g}oW3nu6Od8p2zeoWKr! zw&A49rlQTux-mnG4N@T&?pkFEmfPzM$y$5@=4vn?DN*}~H*ClNa@jWGrg$dqq%tYq zHHpfRxFIfPtaj{$au@HNdT(ZV2JdbhS@UiWUtRRoTiw_Ao!`Ck<=^@H{6Y7m)rgAcv(hECOBtA(V@QEy!zw8%ix_rO0YfI_ z2!m3*BmuUyQZ{=TXLD({8UawNKXzcmJ$q15h`p#+G>T&xf}WrMUMUwEN8QOv$o_a9 zHD)=1LC4I;u;x&}HUn`K&*tpnmaOC*RgOavkh(@v3Ma)}F$1J!i0iZU{_I@PFUIp( zQNPN0jJOj|p+0B6c4WZsc6LVCnyC|Ib)gwOadX^_duGMes5M!=q_7^wr35I%lNpw| zK7Nl*&}dKGorxw>;&bS-#R*K-9%`{#e;guiFsL6r*)gC_i)*+apLHA~Hpc|mH;xko zQh~jygfC{0y%OrtV=x{eo`|XR^|nK?3oW@IRTwWvrIsyA!?R&V;TcAzkF0rTClfbL zyfJYa-~Wf-|9^h}8s1y`-m>>z#f@;yZd`UVK7-bHSvPT$KE*taD)0OJ%J?`)&}oyB zLA)I=+fF=ZRosoUaZLhn4d(N#8Q-KWYrjUV_% zfw8|9hbupgy~%MR-nG>R$?`Xi@R4{075&bmH@<2$3f_q4rGj`1uBuvNr|aC30g2J< zY{8uj)OWdnAt#+c+4ZEXblrUnXwi%v35tq`$ImZW{C4N-Q>P&lABJ2;+2yz`z3Mp1RO7t>m>Sd}=F3Uakc@txP}M4ozJm3=hzW;~roYOUdX zTqUEDva%P$E_wmwc;9;TnddBeVsqS&g1IiEpgt>8OXEb8^xp^NyEKo=xxdm+mGVyv zW@1h$zuyzDf(v;(Tz1(gaiz5>i`8o?*qhd&xGn>T=dvQcm_NU&P$lUq3Tm9s$MFVA zN;&GL5YrkyY!#WrlL!dO0c0ct6X`tq4aK`Snt|DSYLnAId`X#jASp_n4|^2R8WYfe z$aN*+OWCUajAZir0GKa~&%r9mtO{t~8h@9XtZ1&h4^W>b5uXy#tY~+B|7d>yL_Y7~ zd>);slQO|alr`n=SKpt7TIH}IU#UZqb#_u!55~Ru^Ec*x+$s^QhVtJjOJn;5NqLrt zS%rLVBYB=zY);3K0hpS6-lNjKrkvNcbmy%bU#_T0ZSj1!wsF(R$=ZTa|nB_c=#L+VY$kgjo8l`8eFHXr{eZn-~x-3rFXe_ZB@ zBJSpKdMg7e&wEx8^Wz?)gcmF@glTqaz;odxwZwIr4G^~JQIC34K(kW3DFGs>UlTEK z#Dn#&>Qs>cv_jaC$H#(ve%1Mr*4fdle7&U1krLqq z`TmsYGI_jK*Yn!E9u2F8bd2Vos}coDdCuO?>wO~FbmTyof>$!3wLi>2Lwv;rw1%Vl zC53s5G@qv6x;mqnZP+kzX&RSdZa%W@`FhmlBN)+9bp(kU&}(&AjKR3X7HNLnLrd7{ z1q_<0o_JHg0%3zhbh?=dbOYn_IeC>-uT!U0DOMn!iVM&f7KCF`w9|ZPA5_kOX*#ad ze+fhvmP-*fYjUPKop}sijjPZVmuW|nO`!#qu)qaeRnjB@z>UPS>H3B_lH_=DJY!oeFeMkz`QYKwY53^BGjy<@R$9_vb zp5c6dY;ixH$Dm7L2}a{~+fnB^Q_&Tc<$fB-PC3O)m*%H@d#Ko|SaM6%8SUuh!L*p~2O4v;6 zPLEm)+7}O_92bW$d_qGWU$r@uqu`)Kyy--39E_vH6Nyq2=H%y?9r?c0ns+3_uEk3j zj0e-cFw6^Qi8oCSFQ$HrgM_8hI=5a!97NeI$?4^k-581&EkrTAY$|b+Nf37B9=@3G z_lw;!jE?xcXE4DVo<%Xd;y&?3Lq-V;a=+}$o^#FPMD!b>2HkO8?7@_9Gb|(Sa@uvm ziR4K1p7$!{#e8wf7Z==WX5v5m+z)*2AJM$|sTogA;-edy3QcDTdqYb&OW{sf7uFFQ zL!%~~bgeK#7%^-&?uWO+dfaiubu`*;0EbO;2(PHPjAp~;;=Jp6aKsr~u-6MepoSATAxNS6;se>n-ccf zW&{Ua@{g$ei#Q?vEo%O5&HcxFSo|A*L#BmAhR%*2zL!Y0(k&-+b089o*NBc9M0UdJE$sH1qo7vrzs2_Fr=EI9&HBLe;@ zJ{<2lDm`~h&W->l32o}b+SGr!UQic)29L+DX+!q0hD}LvqS`FOs}yMk7Xx- zDly=(aUwv~8Q?)gz_)P(Fy=kO5&@v(0q`Hj*U3tb1gH`Ms!tT(J`%wDUL%hp0Uovg zA6j(;eUPR9!^D7xaixb}|Fp{ghw-fH>vwVlc+?)X|4-T@0>Gp8-?M$Mq5vLt0I0rx z5D}oduvb6tgRK7_e*Jb40FM^sN9|Gj^WLft4Bzy1Uq-*LrUHC;ObLG+J6uMWJAOq{ z@ct9@_=;b|m*W@wSNyJHaXGFz9lwmL@ju2<3cpeKyWv+EdwFbM`B^^pxu(DJ`2WEF z`ozk=JpT?KJ=yrxhA&X=AA5Z4YZO2G*t?G{kP7-qQ9hJ2L{nj+#u8g`&#>uagZGph zeoIoqO~?Lh1-r!r6D6zk3D}nl5pU0 zL;s_lx)y@`UeHliy7k|S9mcOhH& zU(N-;k^vpK6PKHZL9fS4`7f4nJ>QF}3iMj3U^lEKSt-W1-Nk)N%|g-I*o|h*8nIR? zfE~-f-=r(v#el(NwH&*wL%+pww+BkS6B+p5o~?t68DOq)KO`m7rFa=Mcny^dnBLEh z2qt22fsXZXKHrVIsr!GBpnXzZbUK<-C z>@^`IXN1`<5%=oP1eDVFwMpY40Vz$nfO#Po;P1L=FD_UbH{peNS#ok{%e#z`e4gce zo~5jy>eG%+$DP9scj7a|m*W}>hzBf>Yl#ge#sc5`$~OnU`E$fol?`zdj)sllqLc~S zj`>iC(Z0MXh-p6~1L0J<$B7*;dN0b$K1A$(h9WbLRM!xKA0!!?JYY;|3!b zF-Ms=KU?B2${D&9jf!X+F9$zR#`Wgo*grlu(oa;c-5v=bSuf3_Xfxggo}Im z_>+Zr0<9{Hr@U8PFgE4hO;Il8n9i$^&HszJ2Ww&i`un{iWrnA5f`VQ-WV0bGj&1tUk(?jmI_Hg|-f{)PTocq| zc9@fZ!3IGWF^HIJv`(i7=SP-_T>^ZRus z=W(*kATGsc)Zw6onGn;gjOk{m#qIp{${dw2DYRxqd22<;v)Z zmAC?R7KTM=4{vEggIVUF)?m()uQ5P8tKR@&b_Pxs<<+=3hsBf>!b}XAD@6os&VbrN zb5RNl%s^*S-p4~qrV{4o^}B9d-~Wa-v?;~pm@zS&LvP${9~!)DHO_@P&k#F2ub;5M zpi&+$FeiWRs8&trvMdp+VzUKkal}oO!?xH-Je>(9Q&L1pSeyxJ&t<2FR!Mn#D>meD zJHv5Ib|~$e!zxY0<%x(IW@Vz!bm@M(MVnT1*d0%!$%=fxD1}2PI&Xs%*i|9EVnn}j zC#-N-n%6Cw()crA9y;PYhtOiR`DhOZO(t&9Wr(mTkLh&^nfR4j)$ly6UFoix_7@Wj zVpe{B+ZGSIfjZM|$NbP9o(0pg^1u4~RhXl?Yv7cP2_Kk)q1_i5qdxD`6H|LU(!lW<|2MCkgRhFWd3OJd^<$O&B zr02f*m>3oqMoF^{>A7Gsacd@c?#%?v(X6blSC0G8ZF6$Gh^NAKw1t=A5b>Ph(3l-T zDma$Ub|4cj%IW&)iLbklhA=lCCBCL5yo_maTAa%_>%Vb#Xf>ZX^xKus?4tQ!Hvik^ z&oSrZoU?OksV~%@s4o-lhEjNo$FA5NmhjkXk1dPCguC7{ow!M}ErbQ(aM+1M8qL5& z74y(#*hN%a*NRzTl!%=CkFvT^SP;}QtG+U$v1Ex#sSusa9uo&$+ zG)NIbX&%*k5fc^0tFCu&#Tgec&0Ch@b&0q>qQ!j*?}b%i8DqVbQ28W3Jb7|#{~|wo z=VwZP^Vj&f2^(+j{srFqM)@n{Pg2-iSo+w@#D5)sDGs8^!T2QciWz>8u-HBkb@A83 z4-;>NUyOf)@K=2zMR=`Y}q)H@{+C??=>Pv)q;C&J%GNhSjL zaQrXnHO!Zk|5ZnTY9v5s`hJ+kpM%44~54=qX)qM`yBzQP5|k(x@J}t z{_$JBjvlxHeEUd%KUrCS|Mwpe0UovQU3-`S@ZAFb4=epYNcsQp*B=D$f8Syq~@J zs6A?r+MmZZmKo_o`hAgDj-zo9{r;QJ;_Etn9^W+Jjt5ZyUvee>Ji6Vrl=yot#W(S* z@l^ax>4I`@cmF%?$V z#phioo`{Fz9x8Jy^_9(3wp0pZt0^~>m3Q)9?R%B?cJfZ!@H5}6=ZmYpIPHtm`0Vdq z{LRn)EMNcl*Drnj5S9CtC6$Rd@2Z6VmR%eNg5g>!RL3K^ zWY?`Gro!fs!|07$9ml9s&Y)LQ?8U823^s1L8(HXbI!;+#X*%40&lQ2nb z9K;(*rx^EU#ZPb6xDLm|c45T%tbl9Fg}0>eIhPC0x3XDiGob~eit!Hm;_I0pveqF9 z;NK}duosE1XG`5KrBIKenwV6}Epa1;-OHN5%lakD#{$;pznkI<5)fNLe>{I03eCPd?9qafs-0F7!Sd60q76%cxTulNDq`cnkXt#gXh7Feqh%CjjPr zA_~O)FRcS2Im}wS|f3aw#6d9SdzG9#PhVPNi&7S{Wy0e5>|9 zwdr2-3YB%0tz(;ce8uDUYxXnY7bhH@@JBrH%l;;*~g<^SS%8qJJbGVhUg8O5HG~PNpW>~&ryIybf_f8lqd#7D41H1o zug4N^qNFz7m53EDN=my%+(^WWxG!JJ3(~HyEdwq+aZhrn2(xseHy(Eo{Z`nIVI79i zqA}ix-sNT zo+l3oC{?H~{kM|GWtu-V+2pv}UR-`XbK%eso5Q=x>Roo6q5q&BV zqT+e2dI=NaP9<#10PXo?Y99B-EBU&18X&CKp@c~m#D1L8V-R<97VjjJ6v;a51nifI zHyr}^lMX%1GcN(v3D}JXv-S5&&MINZtPDgZpmdsj%EVI+tKfdzqe58flmZ$p$^?ty ztl*xQ2pC~vy5GdhhOkh3QaFdAM!aRd3Obz!FPIUp;$}=*%~!%YH5gJG&wF6CKbQf! zvfhw@^+YTvD5%bxg0#-2LUyq2Ag)!fA5-Hh!-VHDg+Hw zK29q+=f2`qiD;8zPg>2x9sRBmUvQD|4lM3sI}unZH>;9fk6J{wKIh;v~Q zT4J9A=nfOZJmPk(u?w@(z9dYP?i6b!r=l0LhWVbRcn8C-hi&MOJM^QZHe5hYSYwE| z&0y@s+zh}k$N=g*lVgf}=?UrcRyc+UalZ{{4eQM$Ue{wP;l;eKJD%^4Gfd3;wo@9= zVZR+{i#yy#dpMGn`)Yh6970oA6_!ZP z1synIR1Ib%qM`QuoHC>{o<+a6!!{J+F|#lfmV_qaZoRReurSxq)@5gvyZYiu47wbq zqZ0SUEocaHEhKI>QGu{F??9#~YQReOVjl**mLr&EYec(S;WgqR(_)%$BZ`C-s@D9Y z`96PH0VR`D1XSGbP2$b)OxTSUE%7d4wqc1dQJ<~R)BL>?Ukf!nR<>1M;cJt>*7db5eEPqhU2^W@JiYzt(@*~|d~)?C4@{dwq4BY^g;oly z3LS+@#FombP@!_~u^C|tVc3$m1ItYes|ow^eQKIQb|NY`ldiW{u*x>i8YbK-44KwkA zyZQQ5qje_Y0Rdx@XU(7x!aId!#D5ca#+xj8cX8KW|3CQrWB=uow=Q$|r+)pLXYS%3 z`}x8N{D_|q>+qTQuVO1Eg{17UIaC-Fzn7LWNP@e4T;U`{+KqAC16_4q!m zexLYz@wa@9Ff05_*nlTJmy;e6bbMaJ{)F-Um*UGhWH=8#R;H3M`AtUB5Gn!iUsJwJ001BWNklc6|_WnqK$2^{i04Wln^d}+#-tP$T zAQB*Ez(0={N9}vs9uWW@wf{HmPn%8hX9fPN3vhL-@Iedr!$g4U??3DS@Ies(RqOw6e9Lh@ zT6Q0`NA1sdD|^o%ao9IvCq}&M|H2>Xa!yjzegWO?#-r%=`_|xI{G$I%yy{=azk;*Q zTZ%3(`2yiJpNhMvY>tJ>4rcuFkNn^de1iY!FV6q_&wYc!bA`WG*g$NIpNPMV9$)aY z`Iu5+@l00GJtyUerU&F&GrWOr^%h~j6V73?L5K0Yoz^4igE*_lNz8ChEl%YU=?t3< zqg$^DDB5Tc&6-Tai(b@^0Sooug7rEu)p8e5>w=PG=)DU~ZrP4o2IDK3X_o86nRdj@ z#KUn;oJeI~<&Cj9l#i6(9^1)#<+0i2THe|H&bfE``O3U|8^5xJiy!~YPhb2+zS{TI zXL{x^Hmf{$>^v@7r$F40vn6+^&6boWVkhpa52+yDo(nU5s%mhOQUzwK#8EV=gc|h6 zOK}wjtc|-Q#p?-lWuWGAQpm!F#h3wHUXfn5->b&xNfEhB9!L`e|_d9^0D>(fe)2us+vNlL5VZsjy$o7S$=; zT^rqU6L;d;Tqu7oZbiXS+b}?A!VZIRn0UcxRuGp%GiubtbLfxTY`~zcIUBn*_DDd% zXr47$=?R9iQhUGK@doj&xXUXjI1*3bj0SCJ%mu?l0x_=Ys_qQ#<@f5sTB{k`GS*qS zM%|Goj@Iqv`(OC}pZflv;lq1A{Kkjh1f=B?szkgi~g(#OuO!?LaZcN+K)P&GI}-HPTUeVIf+|gcRYs?jrj_W z7(id_)sIWgy1?+XZ{8iQCmya`t!&4OkG=F*0tk+~iXq2iQVO_`ik+C9%h9JY@c(uOSen&oMkVf!J5UbKxrjl> z;~TjTc1Q)n5^gIQkO1ri>{W~qvsJ!(s@A&6iJ>oUw+16lWkBRLqY_}fMw)*ks8LZb zDgK9XJr`_Oj%O7Y66qiw%Gc+nlNgD8E@8m3m;jn?uX><_y`K6pZp`ELvZ|GT72rRm{6EKs&p4B*>b!(;%jpM zk7VoWjq!CO#Jw6akiOUup3Q*z4bAFMlMBN2*{P$;Xtvy@J^$URlJ2Sml=n!^2N$Gy zQO!KB&BtAj(YV(z?-+?j!!f(B*G%?9}=oJ+v6D=Nf&c|2XqfSRmShF#J+G5Egg zTgcaO$Y?x}{(e}1vf-R{pVoqcns{6S@Ka<cOy_e{F-Q3n3=p?Eo1=Bont35z>$o=0|AJ!~ zfGyxs7|1K(8%8C9O>#;}M1-2SFps+zl(EQECBmHe62v`THi~;@ zD&S?y)Z(U2LxgQECV(*R&qRaTOoU4PR2Npn4irqv_kdx|B*S^K?*OAl;tt8tqbNB6 zjbc3;T*w`FK(!#;mw1 z6BnLUAncL+A}Vp6dfW-C6);f~F%n*4e3o?UFc)>| z&6lDCl4DRsiFj1W5T>|p7#KLMcPt_d1YMoxx zoac+Iu)T*wAWQen)Y~<2X_$-FaKLi(nPoNla#YdraYvQ}@V2G(I=q=3HM*py_vajm z=TKvRURNf9=J;yZg<2C5p)#yAL_CxBM`2Ok58jsMz=T9-2>Uc>!k`P_uDS6nigB)f z)YueeV5TPLF=WUzDcgM%hcj{FtVCs8q@oc`dEOLs#0!%1z!VI}wP6G5w8q!b9TuyT zBA7;r2QuKeKllHv4D5_*(u+|Y@gjy?3sX^!yW{IayNSKIbyW(0Y`YJ_{)r4l;G!lD=E0xp`4(01VD@O*@=IE)i#c3ZHcZBt5 z4lC>-9yLWhW@c;km-2BuBW1KdXIkt*kA3>ksyn=jLcA4ULm^Ccop?o!sf5=Q;}H6D zWW}sZP<%f7wDdWe9biVod356$;^usRttc8HRM*Lwd0bT;0ZOX-wd!5yu6Eo~iF=8M z9oA3S?|$e6t)UHNl{nym3yG}2tr(7%&~H`<5Gvt$(35Lu z2lD;5)jbWE>PYNFx7~^87cYdfXbCH=BA&}p0@df0uDlb*h9FL32?31X=p@OOc4+-g~^x@_r=#S7`7TEo=N+Sur3n;mT1jw)5Nn?fj4a_Fv_x;islP z^;5LgJzf9wWWs=hg)4-0#n!Na!p88NX2O+1M_~?5+7;izj~i3mNA z@AsX0FqGH(elMz*2!|!fd8mXDm(^pg>4pilp~fFmUN*M3a*WbXJ-(sT!OE}ybnD-I zn%`Oe`M-4QH99_Y_g{2xqtN@VS@yGaR_@&T-&&Ol&XVDZkYQ#t4 zulph5t+2^d!cW9gK7_{bcg({_wE2DFm*Qu65t6RiHQ)<7=B420{l8^!;glozI`OXIXv#kuo9*CH6O?0-zE~^ zVR_J{!RsC_Tn zce}7XyfA(c5#WQYRvwN3c$nE$^U%*{2Y_+K|Ig>w53>HR5&`norEoeQ?Mjc@qxPu% z`DyQZM=$=^S6xDk6=N9mhi>22_JlCG=E_a4Q2uFYB=h zckOo#r?b*-WvDR#yHpSagK{OS))|rWuxj=Tqx%fQsjd)WnaYDQvFHvca z!<-?3FeRuo2Gx($Ve>Bkl3YRZl?*H6XzSMo^*S@rz z_m;jlee^CCnjfxWpN@DITU6|m3J$l>8~279j5?Zu|77I5FR$fSQ@J^I8I4KNRvVJ_ z;Mq8UK5u5QBLR;$b0Kyp6{_RSalp2c0h}R2QlW7@D#UA225+(|PFdpzGLUdPTU6HT z4(%9pBd$WxV*TjNfZxds5GVbZcquF9`rOuxp?J_m^f?hXqs}cO=uvMqwi{COKxv{T zE1rAf>GbM#ohW35XRmWgxSN#Z@j$jz9+0w!2jV8RXbP`+8-uRJbtq*^&vGslUdf7< z)wuvr(iqy%8{dpuFk(kmvR{Zh(V@vYoKsdH?#T+kF11;abtPWHXx!rrMqG0v&5H~W zRMWKPq%}_%W<7OIO5HC1!axu(KHU=q*loPZs*S$%HO}6u3LD^^01Oh z?^tJLn1-nh#fA}{-q`lm(<=z;Lv2`rRhD`Md+fI>kB0>OSCx;$8Q8s{OkC))BPhj< z4r3tfwj__k#(WGT9w`1(UTz`|3}UBK))TM09Jk=Clh&dfZ%B?030NM?(FOh4$>X|x zx_IX&-}#|;<`NIYxs~T}(vrtkqsyCSqbB#)u>_#RgBehHR!z31ZFC1CF1digc+5F; zTM>7oG5@_Dt!i;1&!@E+AblqH&&BK%(X7uIN$GzN-Im1HP>f4MQY@ZzCy(n|oXLgL z^O<0imA#=}lSbmnctkDw?6X;-K^#S|m*WMLGR5VNNqOB&3f9vJvWnLd&|_9!M;hGB zgsE0L(H-A#2fdcLh(;^oadcVZRrI*89#irj@k%E2Y|I7n8yOmF8HWs-vkm%1=g=27 zx{6_o978ECjF&KMewd7c=Gd7>aDt#8I5AZ6_(LwMKd|Udusd~Oi2^polSa{DXD-}N zRg|)5lOxWN@1$elw~m`n8T4} znP7z|gc232GUX6LR6+>FL?sHPMAadLsss~RRS411A(*NvN5+^CD$9goOfbP1V~klU zvlz3O5X|BUo?tvX8INaY$D^yu{q&FLxdW1|qjh4p`Ge;i>C3%y@ArPc&+qT&{rSIEwhm%m|g_@kf-Ov&TWN-RhGXplGO(o^)tw#=2PcU4* zmov|<<-3kds9W!b5iB+|4qViT1FjiH$9=Eg0&ESHx#n(}w`Ll_6Sg8t4!2;~DMOg5 zyJRM3i1v5^o+f%v4+hJ;+oQ)IS(gDFj%O)h-QyMo6L8yU3veR?geI3-s%tnS1GQ61 zPb>-sZkOIPx4b@I>UW+zXErnIbB0)BeBPQ?j=klIa&Osfiaf8J#Z6tM-ztQ)ib*n2 zCufGAG7%GGFXR1sjS$NUh2^Ffiz3EjhH=n&b#z&5lz1kdHi{0b3&4JjyH}@wt zr58|1%}mHyMUkP!EE(|cC$_1TaavU;y*O~sH2X)n55Gg$^yrx1r^i;*r_8DO`(Us}>6Z0U%84BDRwU$HtZL|57teP}g3 zbz*YP7>{@I{xq#B`|4Gh7+|E#x3{cx3?s276FJfzYcXPq3B)c;CM_)c!D`uWv=kt> zFIL4iRK1b+!?7csM|;|n<`Wx?#qCm`t)#t$ATddIYD2#hQNzu6#tyW5GLN^k)toXu zCYI-etbkH6iae%2yuWPLdW}MUm7JEEHob^N|IG67~m!E^om&f$uW#sp`9j zWh4gCoe4*2PqCb-=uwgPA)RQ8Ot|h$&&7M_D*bqKv0ST`{osx=z9*{0756Q-D*Dm^ zj2cTX5^tIjL!@4#Zn%PfI<6iq6!9SIc$IEA6{E?;q5Srf!VJIg`+mo{KkeSGyH>M>X{@`ugaM z(JOrI=*8;S8cbgEyVDCcW4{jTaM1y8;DA@P$cY7;G1cqpxa+DaW_aDRXtkwe{MSnVpJ@Xj-E5QG#!&YIwS^8xQr^hhnl51%5wCi}c5GF4gbPcOjEXB=YRn(J-S#CI_pXxt- zukuQ+vAJdv6};2h#Ue{sw;8 z|84}|?I)sxIOqFxkp8Nl@%{3?cs3^Z>GVCg?7MvzCd4o3!ROK{zl&~PF@SIQY9Ypc zSDcjzvUBiRUrYZ;whH(;;ne@Z56+lxF;ESkwG=3YO@@V=24_X4;R|NQs z9Cv9RA0PrmBR(if0IlPe0H2cQuTRO(!H>u=f72S^K}CS{fFeMn{Jp6R5D)zKAVToa z65wI^(<+&G@^8zl-z~?FvylFiX8iwY69IgOuOF6&LqdP2j&N`QL;SJ}LA6;|KtGyHWY{L*V~md075)C?9q{RdwSz%aUCO)6W&4 zY|IYKHq$&TbJ}v$3T2?~v64xe1Fko$u|k%dzlwgXCBVPc80K2$G%ejl(pbek=}o&03(+)QX9HVjXM~LVXHA@QJlog;ao|GQiM@K%F;gQ(h?50S9n~rmBJLQ*fY)u1CI7F<-pe`D zqDK`c%N@R60(PVF1ALqLaR7H>yN#&W?IwoH+Pb*_n&(UAX213{1;g=9yn{h+S}%KL zk7BaP=`HjdixJ#VGlFi_5?GvN1hqJ22L{Y8lG^QMm2NGoaTDe=4vc4@cQSY-PQ*IQ zHNOA>-6g}d=}rIP(%dO@%e#mj7$HWrr%9xJX_GzN+kbCEeF+mrCiH*tCSU5D_@iIy zqIUd)DYX-%HEBg!D+8~!2hQK3S`-H+JBuw|wiA`uABQm6pj8-+z5;PHC5)T>F8}L5 zk?`;Lg7w5sr{irLiucAdhL!I%6$diFk|md?r|Aw7o8n+B;Di7EgU4#WOFY%M78gjf z9kYNqr!Nj*hd~u$TLJzr6zh?eIO`ln9Jd}LCdXxr+GG(X6++AA4E)7~aUeaHffD!} zFi{O-aWYNCfNha8uV0Q=NQJy?h^r^>iloi8uWl==5Y3D`eYyx)6cw-e}d!8VL~t7PWY;tB@s%=1GD zJik#03bV`ku9tRLSpdBD@qRMVAVwVZHu~Z@yYl(twwyt{TF&^-0ql;rjJmr8cx@>e z{<&w@%5ic5>U)bdtR7vm;&#!giX<@qP>7%G7OE;Ss`D`%BwY56x)_28;0>X?Ef z^7w6v+h^dZ=GJ)6S87xtCuJaY6cfki#Vo~Lk4yPmX{`z_<#j~whrATgRrhMD`%(|#g~SOsA{(e9U8{?&@6SL)N2Or?^`lt zWr+aNKrO#UdZv7CwAAbV@;cXVWn4j^Ifu@a1HK<_mkFkqb~`OA$n=!+Y?6rqrl?ph&ds#h`WRdZz^zJ^gV)#P=&jy*Y0Wl0mI_J&qcY*MkncWNuuQiG6u|4i)0ZII$x=AwMZUO(8i#n|bIl)oOWt7$P=0 zX%Ia{io0I!ZDnL2=|IZL1$W|-2BxIdrC0Q6V5H0&&2_mlKB`*^fhJo(4B1=yU|M!iXif>`5bNE!Ido%P*WL>(iw2OKZ)D^SE1p#eT23iqTk+UO3rj`9@4bt5v(X;Fv zF3MEbd4{Z$*P%>!>-09dZA^2}nifVcu{8s<>DjV>eX|fAhFvxb11`sH)M8m$j1KGL z8amRVGzFJSzdtGy9dDI3-&*ReVrtw%zXR%MiEZf#bf)Vzq3)XJiHk-JmUC1|O(1oW z!(~32u8MZ^tV3_CiLGciD@{dDdOrH){dZQ{$jSioi&0IFb8#BOPN(_kbk$>MD?;yg zWfJf{)JWUPeXOJqx|IH%`*Ev0CT?b;NNjKXT-MR&%))e2;wmbxYa?#w@tK}41k$Ct zb)rQhc4EZYv`$u%SZjPfj2n49N}J2P)>RZzdRKVLgi>!c{<0B2(?&6x`E@O#SM^Lrh9yDwy`+-ia zSZAY!c)Yy$tE`IzHJf&XUS;KPacVR=~ob0{AL{znbFg;C$qTmIg_@A`(H#*ltr zMcoJSEez=Mm+@P1(H{_B_kYCmIO$Au;;LV^27lk*@?R6jtEjV zrRD!EpMK@jzxe5CG+u0MkAF(#GwD5lC`-wHfDT9fI9@c_QfxNC6ihD)08`b9H@GiN zg8%>^07*naR6LvIKu{;@C9tJ)KqeYa{<&woGF=^H;t6*&RK~yh|2}w=+_b%NE}F==#8Z=Vc3?~BTEBkP~*1B z1Hk{?0`oL8FmJ}f>_zYGcoXefy@jh8z=@YiK!0@!^bKfBc@-ImOXYgA1oib8#w8u8 z9j_RT8gaW^Z><1zb(eMFW^8d1H5cPBx=b_~Cv(P2>?+?IDj9SYLq>5sUXTO#9dQ+{ zZW+a~45Y`FlJT~rgeHee2G(dCjU(vyW(KC6j2p7&VguWXbo-$KH4c(`a{nuypC_%v zkW0AIg8dGuC4be~O2 zgC@bDTPv|m?teF8U%VslIEK+(h$jyM{u#W<^?St?19&{9n@^0|Vi&cc_b=6gm=jau zb=>llImDBWXqRR7M=($_|GKpmg^;Um$eztvGJMQUbZ9XVD>G0L2g>!Id7#ECa%Ob} zqt43SywArbjJgzSWWc-GUPHK}QzzEvc8n{fmNJOS?O5qOw3%rgTHJ~=7;;)29Ud<( zq&Z{ycsb9`a#hV>dL~hEyJQen;<&eQ)0uc4qfW~K?<1Z;Rkw!hv6=fzy9%+foM&li z$EtdfX3l`+V7wv&_-!)b;ifGZa3^wBuJ9k6-+GSrEZF>ypqpfDH-Bpp2jUh&d8asPs>EKZVVO6h(5Q}amj8~ zc~-9AM%EOHrKO%G7R#jd*^^pBdnQxFE+eG9jvK`j2IDF^Y}1bJw7#@Nt<3eUalO25 z5<6Zk_0-If@0J1J{_?ro=qvlb2_|?+-dAQNoZ}F07GS&Tnh}gzp@NBJ9`1?lMo4Sr zT3wc2HbEXoxn-+`*i$dWw0a>bG+R3>GIbcRL$*SggX;zh_*sY8W|umii3O03cvU+N z6v_OK0;n!8GxC7@L_g(Uxj$9Pv90v$>qS$b7QN{6T(&@o$5Xb7S(FJ7X@9Bb77K{8 z5A@vp`x%hiT7bBvg}7K#Hw`1+iOc9Mz;H`EnSti?X3C_&sTRod)$~FngK4GTXI+2{ zF!p1qfw+NTcU{M*n+7ouvuwibbjK@bF+~^dmersy*GX(IQuteS8p8~ivZ+Z;vmPR+mw7G^Mbx+93KqHu& z$46RK*6-%}H|%um#i-M18yc}cR-!9ya)LN#FfGgdCMvR3UW z-*=Aj+>B?vhZ*U*X=pD1AmyIeKjLRZR7RRsSCqijVr{8SdkW! z&ZIN8p<8Eqqts6!3XRXSHHzT+G7~cklHZp zN@S&*jcFqqaU@n@LR#vItT;6r{pJ4F8q~7j21hWImZs-0y;vGd zR4oLf{^)mq{Px+9x-r?AScOKO2jay-FxgP{#p{Z+e_gL(-1TZ~N2k7&iOo|}53U)G z8kU#wGJ_by^Ui8u$X#!v)8g2Vb}eZl?&SVwW@*39vahb`jDC!`q=qZ8BrV3&blxG{ z%ESZb%6zi0tg{nJTaP+f2$Z)Yd#q1#1|vpO8?h(%-1JOo)$N5yFkmEgpx?&GgswNz zTJ)q>q7UsRrK#LIQQv-Vgx@;;Z_2%eZNARxGf{yI7!MF>YIF0*0(H3+GDwV5OsOV9ZSW(P5eO zvI5rgm~4Rss99t^-Y~;!c*7H(#r(4Wt9h(Q&`&M<{4RU2O~aFzS@wl%WP;*=m&#sb zy9PEEB2%YDT4Y6quaGvS!)YD&{{FqcckeD!zW2+2ebQ6>NXN>*uy~A3=l|iVfA$;H z_tbwro*^Bq{95{p_*Fj@U&5sL37^Gxr=6zY*W>?=xtNr;nvO5T5z~o(ll~Wfj`Ww~ zw0r1If7>uVr^jy+--xgJEb05x5`Q7TpSGeSF2+f8q#yRAY!$Erzhi=*LA$H*&(W?s z{hw&p6??vuRs?8$;Mh?2hw}dAQCSfn1OJ&2 z&?ErF1J(c;_>Xamfb^mF{Sl!5A@KjO{MnT6RPz7h6aYRBm-DR!03Vn6|Lu=l z&%^StJS_h?lqM124>Rx|4fo;?@hyMg>-XRHdwSz2uKTL>=yf%APf7}Wpo#ha+*Gn17+4aWhTy9jx0qBLq=T0F1PgIWzTyW&v~p!k5)W^ zVN=}1Uj5EuYLS*b?>QH6(NhMo*kY@(+)g>uV~G{GV7eAeG-@~TbWC&t8{&!BiA!-H zPSR*JE;Mj&&b`C;UZK9=gGKdW-XD7Zk>(>T#%K;5Olu_l&t8fIC$Jt@}y<`K57)B1`_$5^rPFd5geh z!{{yH<2^+J|M?Qw?^_3E*BXA@UB@)Pm7C8;3At zVVssFW;1}60sf=o0qz{Anmite$*=F&<~T;3ie6bjx{5bTy$)$+GBpFpeQ_PP<5gMV z;6U8LsE*Wz(?+BIfI`7JIjG-JfaS3`>H!<+O>$yY=1oX7QOLpV|DG z*?i9rPW=~Cf0$3b_Nlf{jS-C)iw?Ztd236}44~q?^~7>#V?PeZaW~Lqpkx-cX=Zfg zk^$A4VcmGoJ_oT|{@y!rEcTb{%Ne0rlC=r^H}h=UO8}-X6IWuh3-J;$7>9}l#%$-P zJ^R6{wO=I$+%lKg<~>Jnrkt;}0FQ0Oqw;QSEd+oy&dVO|*JP`bQJg9DIl0_TTM69O z$J=qF^y@t~V%R?KV$|`tD`y%Gpj*!D&SW2Pt^l2j%J`_249<}_X&Wj|#T)4LqBHJi z%8g{HZ#PPRf2*|f<#K&Z2iHdNBEA&wlnl{Iv7R{Q82Y_xCaQW&L0bt7pDTdF>!ois zLAskI@Lbhf0%Vg7;BLI^GzM)O&qQCH+rI#;gGKtfv-IEl8SM|MRx~}dE2UQ3^{U`t z95zO5cE~7RDc!}n_Bg2;$T~#A?IIn?=Wqxh;hn51YR8+>vH@C`ty;-hsn(Qlo(1XCPBGKRCb@%6i zM)8ELmfzbEHwM0U{aYk-YfH3r4X_1x?4WcYL=W? zo+WN;4$9Kb)7%Gp>eyY{DqF2!3jWcl+Ee14jCuIrt*6aoCT%1+IoHS1Zlj2AQp3>w3TxDS9R$R>UU&;5cmvJ#S zvNFS{nn7Y&nrw{pat!Lg%#=s`S^a8Q8HZJH)ocyiO)r#weOCids}{myUl})paS4ZG zFazajVOd9q%Y57#x7;UkQ7QG=DD5e(xKDIws1?FQ>o~yPUiw#lT`3ATEs+%&T2r_C z>%*A3XV9X>_VQi^Mw;e14Lx#3;vjD7HBWvb9G1sb3$A&ov~>m`y9!;UMb5zQh>B6t zK2NJ+x|g(JBxTE#$IOdfnGjMbzh5uc_aGsmr6>i})jd`|cLbeUvKO_A*HPC5EZ;VU z-gvr<&&}$@`T_*M76*+Ir!$o@y>7Wybfum$e&Ot(KZ7zAt3)!&cGeC zJAW>+;zLi`o!*c$B%dn%s=xH_ImG6C^7M4+5zET2wdrsNGmBzZ-A!%ij~%fQV=ksO z==O3ZM5JZfaIM^VEnjc!Ds|Lc&z6^Ud=ilX>03r{F=mv^>=o8wS~^$=ykmNBGxyop zT!8m2ax`OJvD_GONk4jHLFD@!OAF9#i$l1O*6JwzYn0em+W+}7zs)IQVus0)*Zr4r zhI~vj4V^Zmt!Pb4yohsozKnf&|B#;4R8(ryi91GPFZ!+1hg!Up@;p8*hS8B$LL4uE z-}K@Qzpku?tBe$B{v$Dhn*Q`Us_~Xqbf;yeU{F_DPOMjpe$tAvA9&nl6-?D>6gOf~ z972!vX%)KDI?v&bVM~Z-^Sqr7t3-`bS9H3XI&eLv+bt66j|H|W_y|nu~sTH?lmIauQ zj+u>`8DXwGLMWJwht|-rw{~Ni>22TGl}iFpQe>%9=cJ!H^o5oVaTyG zy?p)>CgyoPwrkf;dORx;ct)!hEY!3rx~&Hzamp-orq@(u1&#_%6s?-6r5&Hp5_e_7 z;1~wtO$*UTtK&`LiYLoHF`s`*ega4@m34HP36U+y-qM1WIA9Yx(;^LGPbOrgIc2@s zpiL`UjA_LkJK`O*#B1qgOiJ&jV;FTidht#nbWK+&<8d$(lj1pJn3(pZY!UQKT*Cz; zX$Em5KOd!c%DO+J5MM^zNSTQ8M49JWn}ndai+ygUS-gMp{h9Bd;p;Q6y!7=6T)6wy zAG~mquIZm&_xa^iU+f&NzCxOj+R{zZqRO+?3#2g%(^b-`)RK;1R7<=@I+Bj0y?D}e zi_v3&Lm05lZR~Ktvv|qt+AvwQ5SG@LdGC5zzt32O*`^!9d8=GNdx>(~vd?nNavRLl zWf?Xa)Qy@^S1{^^R&-jUX%SPw3zYp|e;EyTO~xdTsqjeWBaIGla}zhRBY5?DU1({%g?o&J^kmH?j~w*>giA8QHFQY-0m@+Tz#e5Zi_#}NQN3Hbk{jQ>w64}1Q@@~2WB z5&#~SKaKJyozOlB`2Q#Y;8P#@+(!ujA4ddeK9+p~@SmE%|J9HD{UHJ1VR=~o|12Nf z@ZXa&j>j|qqv0OD>FZ8nz`ys4_@>*A<9A&5HhwF9%{Pdz7m3w>;k2*fte=kGApWIS z;-`tx*wy&E%>1S4&wc4DEc>Y?fB2U!;$QkXhk4|SkJKMIggXv-OP+at4$M-Kg>jcs zz&Dm@$livP0u+tOnFD<;;IVR!2E~gqOHwW_Uc)o3QN=+O7x9EFtxLmGvWNFUTsFZ8 ztn{);*zGMV^2SOopKa+vec{|lWZcYF)yam*xPukv6_45?`>`@q+YL| zsITLLQy)C}!E1~h85tXSf?uC~Y5lLC?{gN&x6itcpc4pz$i|&c_`}emJKyKp5A?=l)6w zH0Kc8Sds7_@@`xi|0@Sdpr;9Juhl3L%-wMagR#|W4BAwr{wJ$q$GDemK2LX9YsTD3 zZMYrFVh@IGk5zJJ;)}9$af8@f0L{U2pB-BCVCam=Vz zIgoG-{juL33_7G2HK&S1bGIFou&+2$GF{t9ofy*|7cdkzt-yd6O9*EuwPCkLj1mV+ z?o^X5(4Eg=C|=cvL7Qzv)ig&+KWze_%}{>^0CE7ZO>1f;HpazRhk2g0AGfr5P18yE zK786-*?Z+NbE6#lN;)81++~7;^O}sPl3g5eK=C+wH zF}C9UTVpq=EUnD1yo^m=wh||uu@QT$j=k6yH%f-H@%w55_W24k;ND_F$%sE-53xBm z#a7I+R<9iJI*;}OWHrBEFZI=-(;zN6=S^ab*IdEs*k+|n_?VjSJ^E;zYCPWfBJoVT z9jDNrvNZjam}3|tuH^9^uegaZZ#sm!!IG)kWw_L3mGLa$(frz&wz4}KvJ-dXg+h#3 z6YrGv+={MZZE!%&l)oec{})R;-YMtnD1hE*Av#_0WUQCHn(v^YzhszYplDwnS8=5D zywzpoj+OJaXzmu90rXx+aL4voCleB8%Ya@6#51ha?2|`Izg$sXS4&{K)lkk*i>-Fb zQvD|}Vnv)SzuZyIx4L|j`+#mUv-_i^DIwfdyid;+p#7CtQ{<1c^2^bZLDo?K{)$^} zl;6qFL8nut|MZu0XMnp>=C}L1=seylhH*GqflmT6LJ8fj7a z`w28kJCl`1S~X0U6@r@kvB~ndJ}m=#{piJnto!fy{e?wV@**Y$qFkQP1A-M>E#0O-5*K!M^skcX)o=V$8VlZ2fUic zdn}9f=(H-$lIQ0&=uTVBHE!V(C*^st-F+pODrrk094swB=&=2T_%jl_(PwR1g3ef{ z2i<9{7tw0Etkls^BaWBRpA7<}`7()YiB1)?x*l0+=U|$LZl_I0r}<^gsTU$sE(gnX zwwCeygg)&uvEg><$Hy>eXIg}gc+q5Zr=9lVN+ANgRL(Okev+fu6L_T-+!YLfNoP zdPy~E*kD3YnrX8Scf6tnBe5w1(rI^OqHwDg;$Q(*w-w@EMfNBkal#00>&qGIu|z*6 zcs`Hk^sI$=rL5;0N0UI++zz8i8VO+~k}R-nZk8w;_wN}47sB)m}OmAR!~HLU@f zrBVo}ZAD4ugjd}l)>{)Vlin@QbJO#_w5ZMG-Ak>Uq4fVUAM~USjK%>Q(Vljw;!LqR zxK#RYTOm4+7>YXX#_M3r&GaO?J?|hIX{{B+o_zgjX4#Q!*P#;=b;OYDVV@}|qbAGV z^|J~Am^_Y`Dt|D}yJ|X{pP^t+XO-!id4>FUk&?7}R_|yBT>0QcJI) zO*Q5HqNt;{T<6g;QWll(SG|{Vmi~G3Fcw?f#86u4arB$1fw#-LxwbHt2~P?%gjZ4+E4)PDQXzdBzD!xywlv@T+Hnf zm%M>WTIhM=ootPv`p~L z)=pDpg4@U$x(tNIw!k8C{s1{+Z7a7vpDqA8BcNEj@*aaVUO(_71#94gKmpp|Im(u@+4n6)A(Pu*ZOVano*VB*7 zmH_+kSznBwz-NjQKzmUFXj%gN2cM6hBTe$TVhQj$(`7=yui(@1d%hxD0(>_f)$TWB z0>F3SQ`*Y0)fdX~-^sxL=lt=C0H2i!0BtfMAQPV-8CL=*icUV|J^`Q!{5Ld-oJ}i$ z=8nG^O|KL?fb@~*dKAFF3H(1K0z52#TBSSzr{=hvpGEnkjQ>wk0{A#0K=bpT1pGIT&GK;;03THV=qSf#aIyLO56i>yu>5~nV*G*N z!))Px|IRVugLprF-+iFJ<_~=n{eC-+;J5vTAHgk`<8@qfKK@Hw_KWd8uEsA%4sdPq z6xPJd#*Y%eeDAsUKg-g8y!e-&T*kD&^F7^@4inY57gtC>luo6CIO(o2tk7+_ENOiL z*Hs+F8dcBAzPecoxM4LGm}nU;S}*&#=78n`4SO-wlj^wQlq%*pYYa0z?HU#svH+u= zHi*|uaR3J$c0vxMRxsa;lHvJ`WtiaI*n@LkNoR?@T4D}X#X0+E9B=H5+r-j%qwy4t z-Hj=Y1KfMHao}E+`qKJ4S@Qq=H{M^u?=0=R+jpGze)qj!|FvJ^_m2Et+uZ@8JFdrV zys9g85VwrPIn;ETBL`@5z;IUy;AgM%X5ceB0E(ux=J^r`8#5e(7_?t!zQ3HZ$A1RZ|Bp$Lu(WQM;^?19Urap#X}#`FnArWbOr zi(xw$&ojTDH?5pCmv?iYiMI=s`+}x|Lsf^IF}DMixZy3*?#e{x`QWh+4t;QiFI@UU zN7p=N{K1T;|J+x3|J2xX@82ZtO8e7G#PrC3#(;Sy;ee~!+|NjDl=ip}?{?)3B!>-Q zw|>LKChs|gv*w$NPLoY4-+OSEQZ2xLwRo<-;gVg%I&0%4oG8iV!vFvv07*naREtxx z-|W8PxjM~k49AcW?hQ5mT;u=3vnINQ7frGm1MzwZtgnidsN16xJsLLSoeWUK%cY(t zm9`p?GpK9hVVi#Q(I1=RHb%TvLclF$d@2?m`THdx9q(!e$j3^3y=NF_W3HD_(G|N; zFM;f8$!ISD!`M=4=}2kcF)c;XzFx-ss0HYa=WLWcq_gDyZmUYo4xqnC1;3HoEe@A) z-&F$7$5lQQc(1$e7H-7En2CnHHkWqWRQh4bOfBBS5I`OO*O8>4J zl%?7;(IG2*ydXoocfF=g?2N@)NF(NJ$M&2V9yepRcG5d(uP*G-YlPU6l`YZ%ZMyJO zxt>ui(X7L~9yOv@?g!02)>3}Et-PO=UmEE~c|T{4Ht%fAm2$o#Xw_*euFF;i*T=`t z1+6&lf-&N{{Tk(S4Ps(UGDfPl4Km@W zVTqh^nF%aa$8pYBQ8wsRBbJ+IjPzQp&+BH|W)RDBrmqEgoiJXjF29raX!W#E zesVr4&ri3@-#cV$4a61)WS}+AyK_BZjI`d6E-WqgIa6~y+^5qu`(umy^IWs9k2qB9 za}LFMS=l99wB&u}aO_W$(UUSUa>SsSGNH0Ulzl_mS6cNMO+s#a*-H;ZR<=2smSHGP zcwSZ_$mF6eS?MdigBxtp$ z#Vz#3Q#vsv4W$0k|2ky=u0ia~{XZ=%?YOI~dlS_SV$7{LikeK6yd96F>6ntP7UE%h zsuDYlMV<7rs!ptPGj3w2WR|z+N%Qjg^q|cwS^1?!gLt9*{?t5v)4QerjOvTKvgOqn z##~KvFwGV35a-SG80o39-^F?Vu_QfR*s1`!;xcR|H_PsS1qaR~VrRf-prLJOP zx}b$PrcVu>>M=w*T*m8Sr&ATRLUid!3tTJpIR*V{o+fVOYfpO$P(7urv%^kCKQ2d> z?4Ry+{PtfRSOo*lY_B*#u-kQi)htL1buYQ`Z{Jp8W zrcR}&-t*pf9VM-(KU0}cWrOF_UHrf7-Eowa*LfcL-#!|T#^cdwG#QV^7-K>x!9)vV zqHtAJpMB$VYpGNvDp#SZqDxsSS5XN|C72RQ2_}@K5=saq z7!yJ;CYWGMDZ%5(c#KEm$z(hpjSlC%f9!o`kb1S`rfz%xV6P>8oHOTq=lk}zzjyEN zeV+GuX5I2!dX;#kwmp`TYL%vxt?HhQX}HVMbT>vFu@Mg%GJp=1V%>JHMd-1{9L({Q z1(;&0xoFd4L?-NK>$1BwVwDc}$j?a?6VGdR>2qGTQ8lQowzgoGq>YR{AT<`{Al{;7U2_d(8r0dreE-3(xNzSCT>rk z^%b<`=d8FAzwfV-K9l}>`p0PVF~@OxoQ~hY?dc(Z39ZEvpvRrQfZO7H?7(g5e=n8* zKN7!Y!V=&kBTu-Mm9?wm(;^eDFtZwwvw0Y9ADEeo$u9 z2Lb=@rvy;n-uj;Hdo2LoPx}A81c2M#^Sbpt+neoXyV?Hdw)}ule=zutZ~BkKNDRe) zk?Upt6mJ{xEqv40{3?bGx`?;*#!-Ade&0VL{?PCEd7N|9-@!TmDgGY*wO@#TMEsqY zQu{;Z{@-(!ee&m7y8e+b|K{M+*uR)B^&NlVOZRf=*{@&u`f{%CtzNmFgH3>M&Rbq0E3M*-r8#$lBq>t*6Wu869oO1XY;dOSs4PgD;Wz?h!M ziLO%?;Bu)8ZZ$~->vJM1HkMS_WUWPVH&^EN$7`NOpYTnsZ&oB2jZ@k4G`8D`OVJfqF=$Ik#AgD?;Q}O%qY$N>153>;-pxN0*7W0&K&5R>AX zoTz?SmUhjG2U%)%OHNEh5nPQo)urn*F=o)H5e&snhcOtNy@pHC8PicUH16|D2GVW> z*z04oK3@CPi6}YYekk^X4%T5L6+RD;zX&u+7_z}63Z+zK=6nm;td-O%azVqktWZV6&c8E(BRdwy{nA4 z1G0+45mYtB>#~G)hFk_?1Sbly<3j8;hE1{A2r)ml86=j(iw3Yg28|M9UNlT}Xfh^~ z8HUhV;(B$QsMJu@87kf=$GNE72U(G!Ry>az;t7nZ#_O`w{L3=n(2f>EMe_PskwnfC z_WKPO!=ciDedTIzj%N&GYusy)cs5%S#FU&6jb`^5C3watc9^3^JgU1$L}xGeQ)*g> zcHLUA(?+?XJJ&f57r1A%0LMcmp!W3Rq})&E$-DI#9k>Cu-GS*ZcW+`CMJWp{^t`SoYIUwkONycgX;q@ikHaz#M;u z%6&g`X~=M_LB(j~^+zqHpov(R?~9^FGgb&q zd97E`=*7}M=g_9&1oo@CilZft_vCu+s6?|qEQ`ekus%8r$`bpd*cUsDpwE#KuSW}E zN|~ug;!!jhjWaS);bOV2%T17QDjFOquUpWWS75Q$R%1k8WaW)(vAm4`#d=HsW$-4i zlPc;@%gu2LHI0$uS9P2KG*Hg}bQ#C}Wn5NqJWII8vS@P++u}vT*b;dia!H*4m0R5! zXLOv9Qdf4W$IE&JV!vTrj!6bF;B~F&i{6J>_W zdSpm|bvo4Lq)v}%_L>5EkI$V%}@L^daWXvT`qA#8)@w-3H z$#FTa<1!IpLs7apSe^(jJ06E|E?T^R?s&n|^18gf4r?-@0QF2ckC8Gi8VaFyRDYbr zwb*K<9PO?VCp8-(X3LfltK|8os#?Z%Yg|RYH)0kp$9-Os>3&&pE3bD}79z~c6lJ;z za?XvdzDB6!=e}5Md+flfc-$uRx#BXe%1Sjgb>*!3+G4a$5RS_xEI>x=@q!$G&dBkr z5pR@A-E(S@k0)!C^~CBJ#E1(eo{yCC&d*ziO7EU5zuKg(XfxuPydHX}98ZI6y)mMG zuZw#OYQURid{iN#HcaD=+UQ* zw>#cG{`P84uQ~nX>3JMK`^9^|xRBx1L;ZhtirQ1vP1n~`J5^g;J4$VHtctzF117~L zJncY?60gS-dhlW#DV6m-<+`r14*jx%)P8Gqpdmj$Y1C#eb{ew@CoM4<-5#Cab9Gk`&7oxm~&HR2hUjbW<> zf0q>L*V6A%8LEs`Mp*Kgz;=k}$KJkmh1`A_0ep2{p;&^P0c6`y6xD|h3 zx4Vc_{%y>}m;74%2)=A@%)9_D* zJ$?s+z7@wXq|ZtGneRA_Vf}Fy-!tHk@O^_W;roVM!Kgort9aY@vW1HgeR#+BUBf#@ zy(Pzm!Ll8a6*#{~)S?>Sljr43`o8XMIc|-~*}HejHXHHQrT^=|f0TQ1VjDMX>;ExP z|Nq{Cp!%oZs}OLr-E8k_>HUEIKW~Nq`w;;?2>8EQ>3_5R|Ek?o0Jz!yTiSaA)ejoD z-tT)K6ky-W*s8bpDge~Cbs|8W08sy(I^bV_EW7Rhdzs|cC-D@XfY1_ zSKJ~$xMyJX`{Q?I1>f~8U&LEQ^8YP=68{O8ec3<2*W&m5HhO#^w&M5gkKe$T;tMf^ z`9?fXJYD;X*Voc`y8`xU={F<&(u!)6)9 zq7r+0_3Oq!0jf?F&%ZH;jNo3`L-a^V9MmgN2KC4itF3aS=}Awa+W}`W(;P42j8>De z+FIS1Y^pBo)#)|N)!`sGZ!dQ0(~sruaS790v4L3UwYY@YG21+1X3R56oQY$#A+FE3 zzWVw+u3x;q?D{D0G`utN&I(4V-&;Adg|l5u-wTc>Yf__5)ahMyoFv&0Te zE`anBqqfP3|EuVWHRF|Y6**DEgmnIe^4E%5nNI3;%PbI)QBs& zKhuH&@Ez2inlT#ZVhhIXF5b?q`f$;JX6!B3;X$>O8SX7{5u?u7g`QX?OF>^PgoS*a z-z*aPM@!;qOnb_ee%E3R24b_VsM%AbI~xkPmcO^Z{O)-pDNDNcX35Oh>RI$#6$jBS zS2$lNfY^p&iEy@z|89+`3j?t!4&a)cKpK!M%Z}s+@z_&(xUM+RsG3@EEjGsvSxWbu zEFIc}t2xmX&zDN9qve7AN~wHmRyBxg@wAl~w$Z~f;E@xQ6TtQuS~R4|vN!ZLtcz#u zBer-=Bl=3>x!FX;?~S!j^%?t^oVY$%fd8=!G^-ja#E0w^J`!g=kE*3{lC;<(X*Jj1 zxPIUDyJ&u*xwW~4X+QmAf8)nK$2%L|`RZ67>4dAPi$zt&})^g7;!Y- zkfqt{3G4>Elz%_YjRWl&@V}zpW%P|JL+mM}ncjF-P8j#ep0Ld(q(Ntw{hcaTd>~6? ztIGHJNSt#4gQbFQ$TPC{^QcE;K)a=k`+S}`9$ZjY4ycqnc(jbqZf~GJ);WNF_t*a( zC**jXDYO78zNqfM^$j8C^Q_?saXaI>q;SYQq`sMYtQC0 zi&N!ybLD=P_;1%)2rEP7KFAf~!-YWcT&yunyl$sqba_ZC+VvTcE5x(1MMWo?brdP@ znxp0S>ZGb;r62AofA7w3$7?dsH&otVQLamtsBhGQ1Fjjt+Cyr@ zYnB*8Pdrw@)4Ei1md2kO`S=^XI<96>!z=a|+m9w^(NwHPsOc!jSGO9t!1&mm=+FAd zYbX_VS#o|tGPPz;`FwlX)<@dqvdt2#l{l04msXVbua?#2v`P9g$4I=6VU2~rIhdxE^E@nH^9;mS z%KesA2`b~;#&W(j&BVHKWtHZfc+UhBQ#`DOdGW9Y(mZoC;t7vw!VIS}FrPM*aWXZw zqs>48ETyR!F6)WDfYnyjugNy8;#!;JB|u z?Fqw&`u)^W;?_VMMW3f#MpG=(gJ$>Jh<2;YLTh@oR6^(V#89c+om2MvK#A}76zTkP z9*yI&@mF5ojHZ=ni6=aaN!~DBwjk<|*TFSea=k`cU*@@~uE+`;&+A8F#npmzTS4uDY9iKL5ekD$i$ay3m=PHw|MhYaoU&LYh$k z{Doy*wNQ8TpvOXkXz@^b2~%9M8JAR@Bi8CPgEYGk6FLh3|CqdXYt;}>V$>n67>b?g zF|?)C=AzG~w3T?p^a7xcsFL!Ug}ZgeHe9tTJ&fU4>>Rp0ZKhlqK8ZM%*URaF5+9x` z0CAgMZMbZC>_lT6N_)_iGBLW@nAtaspB=J7)#`HmecH65-!^;D80$>MqpIji`%_*I&9Z>FQ~>0ux{Q#X(HK?S3?yqcEBASP!G zwX{K-Di-L_fonF!D;SM6=|!|!U`-k4WqwjC<0C6^G(;w{G^PhJXjfJWi!HGiZE2+u z;>}D1ORtPSmsN_Q!r>T3lSk4M=!=)52Q$)P72<$yHPXg1kFV6G1KnPUwP<%JJ&qY# z>;P>A^zSzrhYO*)soXVlozaM18#56s4mgRfw9IVcw2EfZ+&a;+5U~gCl%G3SIg4rO zNUWFR{u*>?PYs1=j`Uy|4^Ncq+Fs(;VC-=M*V1dT9anXy)x-vGI>%d2_Ro8(gD<{( z>{DO-9G^ThrFY7=`ON;Gd~ohjDwA$`qVfo7MOvG-keV_;Tf3NEt<0iwe|j?QCXRW` z25e=9mE?BnTN?vc^y+N)Pi1X?8Rh{dIo1b>rLG2n2R{)LQ%vy;C0M#zujoG z*b4NPRYaFwgP3QRjV3I-_Q>mi;qtn{0(0<)X<5-^TzP12vHZB~DAxLy{t0&4XCI&X z*_rdEf0`$L;phMT!vO6-62G70pZt||1HUqx%8yqXD?6$EeEchahdAlq=p;QFpN}s5 zX!;d*5?_ulm`7TiekuJ$+*vFEE~Z~Jmo(pWqiA>3kZcLii;u?1v<6qwBYqFJn^e~A zll*1e?o4_Kx9f6%=y7L!fix?=nqI?gX<@Mh=!~th62K-CmH;0~Kb2l2`imvNC){3? z0NRQrz-^A9saOKsnx>iTMoWNZT{moRv;^pu2~%ydB0!sWD+1Il0Y2iX*+1}mW5BPsSMSvf);{S&Y z`2TtFwVUl``*XFM1c00EhuJc5o$@Se*5RIfe!qj&Ew)nSCcS+?(|08ro7 zi2yh6kDKjg`(N3WTGV#{K>>a%IV@=(WIF z%+REZ0`k+Y$4N99akpHNd_PXgH9&2prfI3kT5-`Cb1_pzPORMxw%e(OemUVc%Tx<+ z$O=_lG}TsFx^WR6vs^!Rxn?@)8ioal}guva#RB)byzJau8RIRfL_@v zwn-%h&|f@<*A(FYZh7|X(3~rboivPU^jV2f%VMBhXE$u?6#xy!N=40-7{pWYqNT)( zo`?Ih(Ct4kR+exV?$$wp25)Gpz!Fw$>+J+v_XUTsLMU^5$%$P;)pZ%o*c&q^Tb&H5PaMe%<0Y{DExDIa;uX!}K;b0tb60L<`FrlE3TSH0I zx0Xcx#hjQ;3(_O01Fh!UAy-6q%hJIWxgrelQW=MJap9Uunu!r-<9>|9fyfo-uN3+0 zEa_UWfV7yFubL9i_sly;NG|Rv$-IHLK7- zY%b%ZrTpS*v}@OoBThv(D)GD#VvA`8WowBFW)=Xmw@ALX-assyd@ zq#PgG%J|CTH7B_DJE(%*IAj=&_8B3z>Q%#KYYX9^Q9CYca9mbcxGSGmsgSM%+0_CN z)@&>959j`k6SC)ZTj}3=T&VYWyPROm-^qaNws_Sr4m)m`xae_>q%~esBQ|@~Fm{)- ze!Yx`nky>mpn3*yE7+eC?V5|1dZk>mszxVEzwIS*AUFU3AOJ~3K~yZqf64@~UXiU2 zs;ZH#BI=&>bwEDImD}ZZyi!^@SfTp92|2jcne1GG=(@yL#i8tLS*`D96zUTO>rGmWP zFUH4dgT<&&6j>o)bJ<7zNHfuH;{M!Re)lm9YO+jLEyy16&E@y9N=ZPG;$Ri&Cdn%#FURn2;Wbqq4F{lT7r< zKvrGpq*`8&+ZLtzeK{FT1yZc2c>wgN$%;j=D+A!M&xK-zvAS}#km=c?FI3$QyA4q{q7n~4ve)J)n~ zV5X+DLIb9mTIRz{bexbFuN%5Fl>4bm2gY2AgYtcsl|vS#RTzrx`Z1h3w4=#gW)eqb za!av2vA^tZdKotzYI^eV$65@#pc%bZq{W!*ths11*RwdAEf3;x4Ms>C%FJ?aIqo5c zR%ABSW@K)&BA#d0FABM-{+)ilj<07Lc^0Ps|L9d~PVmpmKaUDgw$q(x=D zwZ2rSwwhrIu6Qz*p&<^W&1g?cOqXq|T5wOkPt!}KA7_ho)3FXi-b|}89h>BNvraIo;cPkoSq5Ss1|3UJ=I@DbFm#m9?^qZY){8ADLs=OAzA)js*Q2w_5ad- zrHwECpT{>I|1e!kKQ{AYyO?rm$~{wdQkh;^QW+tws9dX@;g$!Z;yGfaM`I4DC*5lf zhU0uXfTpzELQJ>Y2`n+mWgIfXdK(%m>6yW?JbEWO}vd^~>Br-}3FA8I50Ongx@ek48aD(>_be4qH^IOS(ZpGk|; zTHN8|zJ%N3%W*`u1elN8b)~EX@G*PQ8h;eOj@Gm=y@A_&G(L|OA5EL^k+>3j(2{;C z{Sq6(T^TWc6!qF`?{vBOxFw z1Ss#;$pCeFz>WW!_)NXkl>m}-6E?ls-qU_iY5(^tMEwDY0IB}u_51Jn`}^TyAN2S4 zdwsLrY(JEC6X3krei-cs1^)lM765h0fA4wyewF`qz`wrV_mlpAF9Dzc|Ed0Z#LafI z-E9Bk+l>qO3f}Ry@8ZwA&iV$v;Wy02S%;m% zCHMLFIGcXMa;{&yesA?#bbX@pt&cSDH@g4&wEI3z)2yaRw|3)m{;t=t&Wq;ZqKyLA ztachR^mquh;{9DQ%~I?w35zCK@^z(t)3CPG=P$QH7tU$YgL~a$4X%{`Mm%OOX6i4M zc=-YMVYBsMs;YTdR3!0Ec-R~h6%2z`%Zd1$pgv=YZmft6@ftRG!9&FISP{<>Yid(# z_fhM*zNdDD>Oy*FY>Q0NkZ<;JM8(`eTq?D`Ssb5u81W8_US61E!6sQ%;EYU`w_% zh|OM(EwZF$s|n&vz15SOb?RN2dE@yq{ySx<)@vnkIvR%!;F@K&%ZcPcieP@0S{@}{ zOfyU-?yqgF&82zzhZi-^XVSm?_-8-<3Et_x{?heBqy=dx4Pt45m~4 zVqZD0Ms-DmsaX;^_7>^SB}MYJzex91;y9+5q!Zf;!D3e-BplOT#!jx_Y?39lN1e|K zGI6-vH%nz1uCy0n99k+oeT??CdPZ=o*INWT|*O1F>A6F?1Kt_Bxl$@k$)=q|$WCuC)h-pKRRN!N@KFIs09t(F!dMVoe6VIdQQ zT4YJ$nroCQ;)%px-d9#K$oFZk;XM$@gzoGEs;z z)%1!9;JI10of%S>WA7}HcjR3F|HwGNSC^*F1d9HmsL)s9=)AJu`jf}iI=o)ygXY*% zDwG=wU_DX@47nnFM!Khv2l9Tp%-EtI1_tfhZ;_~QY6#w(ugUA_|uT? zEfsi~c-LEw=W?7hiU(aO^Wi+rCM;Rn(i9cSES(8d8K9k90RB8{+-0D|%i+>rlhtrV zw#2yRLR`g6v-QjCfDA76drhVfOh==ZlnFJ%Me(4nC{#%+%lOO+1r0hG2dSu*O2w?; zK(?4@HeCmXEO!l?Gmsy%ixlnw9meo#JYopT^7*G}@rD-6)LsDQ%bDPi9xh~(gesO;TiX<5XanQ zl(f5iZl(=&2^O)J-JrA(ukLM$JzoPDzp1RvIiO7?_K zyJANsy`;wqAl$AQHSKW)g9b`Xe}mcibkadtNg!Lh>~KG>ctsDf&I7qJJ6_dHS|)pw zZ%j`X0z+L9psQT}q45!zU$>NTc(DNA3u2Q@lNmsB++z-=rgJG1&E}goQDJUIredVU z1z6r9-}kG_{=2jo!+UAka6A(0F(d6tugHXrbr?3;5b;#LpVF)4jOP>r$dE13BTLy|MY|>GA#|iCJxA;_ z+XB*ag_`?nS?A7D)rJLXaSR=$vV6qWv=x=uZY^5U92;?1r@OFDR&1GD#^@roxQ6yz zd91IjFS=wR$58A|o6wOSwTjqU6lV_SStRY2=ZeK;J{~k`7kXoD97mJcX)8L@L+&LG zW~y;oROYF*<+-7;5U;LyGM+{?Hl^hIkhSVfK7v**CaB4(%ylgMJ($cg9 z=S_)z>@V@TuPFc22{Dt+Da7erE@DWl*~DgThDeJ_f3GZY>mE(92mNI|I^YEAh^2WJOC{roKkq$%UzT4v( zTAb627PC{ctUOVZiL04ln{$yhdy6H&IvtpjcE%>+HM`Pk((ZKFtBh_NT{$|)nL}S* z^OZwPzis+w|HALm-rD|pdn32E-G2G@Au0zdPgZ7;j#gf+G*H>)gym>)#5_Ed&ZUK< zeO~b-W|^rS9hP|#D^1pkiym?>M%}9!15T=7i{s{DrXg)O??r=XHN|OMu(J@V?y&;x zMF-}9$H9D4J%~A)&A~;TPNCJ1S(K*<`gA#jAxG6P#XVMHtr;rlHp|cADZl8Sa>sY? z`1Q8m;s5%PwU?fLk)_N2_Sc@B&D$Rtd+_=p()G&fTRud5F}@UCq~&S5$(ZEx(M6m! z*Fw_IIp}9F)la2Q<4y;B7#H1TDmvq&@8iz&gm0nCj~gSd`h)lb(q~L|0&OOx7tt1H z{0`dE&&F>N-}Es*P5KFUrq|HwLi{>z^U*pHz`sF@4xdJgE53kccbJ8@wEHc5*zH+y z#_e$oO%(`wF^?m)d`J zI_3~(9EybBjN|bsT(LeHsQhO7d%C&)XdJu#UH;nQMgQWbeu7W+{rLG${vu|{zL=BD z^_TEXf9l6D#YM;E%IGZLH(36^&ru8*(T1~f0`ao>c4CTSmSCw)Q_y9*UOZ*C?bvO< zMVREWdojrzv$4pqvp8gq0nGQ98cy445HEV&493&7P2O+`CoL-g%L}fe*$TUGR$pu< zdTYDmUSdh@WbFvo_th%3gIwQRJ6pX#b$j(t^(jWyeQ)4<&+_%77oYz66~6MRGhhD7 z&+@(5-@Ej^W=yld-9%$N?Idx+Ih*84we_-Ocb2N$q-G-Gj+I2ol>$+8lnSA$rjo#F zatVF$f+jS1QzP0-V)V_T7;x06Mp>f04qGIR=(F(6bkxcUtB`P3ua-^_BbyC#Wk6rfLLE1bh|aC zNf?doaS?qU_82PqJdeq`3ZR-T}Ia|)Bqd+t7uJ5hSK zal<&_AXlc2mG3uYDcv;HRAN`mcbK>oyJHWoL?uQ^8+48$hSW5h{UFkC9Z$6SizsAw;%#j){9`Kk%vbff@CyPYUNN}CGtcp(T4 zd9;AEmsM~;uMteuRw~?^#w(@kfbqq0CF;`DxngfnJB}L41d-@1aq1uqP`tDRY-x+1hY%@{C-fT*-02oxo#W+z`)%kAQlz%^V zXHRY|R+ftCQw12y5uy&~J+HxJ%r--NIgTvF-)1}7jd@kBIKQtP!=$n;mFn@PtblR9 zOaRCd?X@^p&Sz8xT;Yr{t?1Ah+hqbnBhIL5#r$%$_s6z;z0%AKR7V})&p`K;3`|77 zL3*OZuU=G$zViFm#-)m%Da5+mALq*`9ClX*EMmF#8~VM^sshCIs$zpC z9T<(L2XcCrY{r0;$&PzOPW{W zW$m@`J z$r1y2(2PPhIiIDt;{^?*d(!K9{*4|@Sm~;EY&SLUJIyZfu`!l|wn8MjmhP67DB5M> z)C1)_X3JJEc_d78KZfnnLaesU08Zu_^H^f08tHW-8qpFfR4|gZYsM07rpWWpaap-w z0Y+5g_56EjarxbcFthB=j>8aRQq?7M1m9djGVsTn%Ca#TJ zjPN9s`CqZH=`hRvIN_pxG2i#?TboY(kp{O+r<_`%z1eYa?FD z=bIiW_tCsU7n!NgEc93t+c6R=(!-dNwpv8IWQJ83F{Tp_<(^BM3zg~3BHBI27Wp~g zc`M=neje3MdZx_#b4}BRCrUqE@j?NTw?|e$X-Ow>N;R#__gh>b zUeD{Hw64UTxkloEOpF+ji4`xSMQ^!Zr)npTX5wgCSdRb2a@`yBrzz<5no$hKGFN43 z|I=tNPamc+S%_v?^@7=Q z%o!{|exnvmXmdVJpgFdsg;;0ER6Ly4Sb~|wdahQUM=E8UjW`k~P&1VBzPpN2#DJ$j zqj|ET*a+z%%`q$!+4J~Vsv;9!HlZ<2W*{-m)KCD?8ZPTsA-z!6U7f{jX(*nw63rg6 z0dvwC_sB|Q!+5Dgrx!~Ls4H&{Wbh#*E+zjfMPI zEd;@)V%^gaFUUm3WyDMQi7m~M35v4{abUen@~CRJ4~=HTdek%*<%p3qjX0Ip`{}6M zs)aByXjk;1IkseCTbdC&@ItIgn~CG;h&Onv`K`-uo#jivd;C|A|2)$cPy5p!UBss* ze`@Wgwve8vY^}URT9cNfhe<1M*?h}-(u*kr(v4=v^Vnx^dKRl3GzEK$g5gyAwPBvg zMlnNod6v)5e^bq~6vs`|i7p4qbN4+S!DXY~K!@2L#+d#>keV+m^EG$~-3BeBL>=}Q z9ijy#&(ff)D3U#*Vj|Ofq>QV6EgJE4U+^d3m*CUC{^_}&`aC~(^x!*R`z$(8_9aI4##H=zX3 zsM*Kl%Kr}8;_90wtN?Db1h@?iH&_BRm-qAiaf>Egcis1qT-WGEBEW^r?-E99OT9gHUr6kbCj2gh7 zy51^Np7$TP z{+Vi}dK;7f#mAPme1gAr&tI+1L(BiuqPdOek9RB~J&~5#hTGk$8I3l35c|d}ac648 z(pP}7b+(~aS{do03z4r-A-01skFoB7z{WB~y>i$q?R zgSf{79>Ec7bLEWrawXwW)3MNUV_5Efo2VU$CGi+eMVs}+wHVV+ZCRX)UTRxv>#r}Q zdh(rh)egosynS(OJ-ttUYi{2HzVuJO^ocM1EX6m=H`9RiTPZ6h)PZs;ZP#Rh6nlrK+k@ma0_CrLwxTTvV4z zsg^1#VYLcNDAlE&99WMc^!=4+|}%9iU4<<}io zJXzntr2YAnB4xV=b0aXku@D*ZAswjzE6?P8-0^zlaHUCa?UO#ajJDpk|D)~yCNIs4 za~~c{Po$+d;;2JPpsI>qSM_7F4W1{zn@{Bv3b59rWcHVg@8-va>wh{kKFOA z*pS-N%h;2Lt-zBp4ld?b^A@ndlc?&+2b4_L4!3~L-39p1@5KGw%HqE08Yc4Yyc|ta zUd5h%X({|7QoVSaV(h`aT*$(!>#MltSn z@UTOwII12Vp|cGt{@~A+>*QyYd22&CG) z#Cqp?CWsuR9eNFD;A#-28d??!b7TH!N$nTvP@h87o1U3ZTGk15WuC3%!%CojmRtLa ziiTEZa}6Ep`Me@LKZ0tsR3VoYWfhnHy9gPf90Vs7^ zfGg%{$0f~p>p9^`Wqg#3#9qy4cTxXEsi0&$-q5mkX=Q$vet%hC+|Nw~uxXJeuBemu z#`ByEVpE5UamQ6P@@qkKs>XO~I%66O%7{$&cvd$~=aoiL4=be3yiyw`N`J}2sZ9rI zV?JjZ=R-XEftWwqoXw}vonEjvslNaKAOJ~3K~#x)tcRjSIZg%9w4suBqEHmdI{GXc zYU!S6zr*NLu}LAG6>>?_OQ`A7hdsvBlzFiO7ade5@5{vs>4xV_V2Nuc@st;}lb$tK zJJz}$gondLsz0sHm(VaAgbP6|y9I`n@mEj7pgS@eEAd=6HE`01N%E=yx(b*mJ(-_W z$4J_zhVFblk6~UaBHRo02O)4em-Vq3(*C7CR8`X4XxBB$*m)Y43$Y}xR|&}XP!K+v zK@2#ihP45GcPQ2sbyKmfN+lb<%s(9^!&+0n`_Ns8NcpX>UU^c>3%(Fgck9=I(Xdiz z(F*D_M1YnhMLh@sT{68&$h#BDY@(&rIwY}Ce=KE4rR2A2Ys!P zSElW#qyuR!hTWUT$@@*4CT)rR?xW_VZsonD5TnlJaWwMkbOH0yKD`(!1d6-~Q=~%9 z=C#t-&53<$eWw2vOOZ+2-5|eg!b;M*yc)cfj;58U=nf06dW`$d*ax)dVNBU&3LP$_ zLKJ$!ew;V0pZr>^KMSHg&%0X_;~IG{YA&aZXwMhZeq2fq=bMUBQw3*(2(nafK8uzJ zf4jTW6ByOuAo-lpq9CTtG--M4mp8?{IS~qRW8U!^?lG3jIy^@kd7nvj($dh?c~D#G z!YVy^3M1b178?0Tei3uiTShVHMw)~5McK^q7>^6%O|q&ZKZ9C+J1s+d+F=Lzhz^~k zwXq)E*V?x^o~JRC-$;*OUfLRjhaMI3$+F)~kH-GAGy2JhfqVwT`FX?WO&ijAw0pp8 z+%T4JV53T^;*F@6X;Y~X+zLTPzG64|LRy^nla}W7X$6hd-<)oo;5RN`8~%;`{F{!` z-}i4;@Tp4g)=#aX_nA*ke5!*xHm288jmpuqDy<}sS!yvxD$P6Akxr(ACUM$Zs#xna z_v5TWtU7ABCeC8e{q!%A4@JQ(jypZ8PVK);XpA-adZ>l=$ee!1&?$I6T)z?~nk1Sm=X)elhu zNSf|c0R0vr;Js+cvM((0z+2$|EsKC0pL2X}{d=ptpAc}H2ynaHD&G$H{~)mc$E^VH zUz+*Ur{E46OfL0>B3||KpfiRsr|N@jJ8t@CP5b?(K5B z+%A8VCC_Z=zje0wy07_-0R9IQLcs4~%#aiKhX2=BG3|3g0a#UK3f@Ba+`v}IP29!h`GC-D>h z*O}Sj{iRPMq@~*opv^Wv+Z$NA<%-)wKJ@TDo9*>;-&{a` zBfnr4);Q;!l968s99+hmQ20KBpi$|>xlpcuWFWF~qRVUJ{@_hMqCA0J}y43T8BGud=ZwRsH2>fY=62W-h<2a_Awp$4t zt;O~7Tr*Y(tpGgs$wvo&S!DhvOJDH z52`5A{q^`&D`Zp7Qc7!uJ+BZME=9f7)pRQW)J_b0&C94coQwSM{M3yjrt>rotD7Y6 zRm7z`%{QOCuz4i+Q(075TxsW%_w;V;-OgQq>8=HL{Rnw(zBex*J&_(ykK>ipZx)8~ z8_r>yGj@?L8qGr(P!D2GeFlgr07yNar^__<7GO57@tV_^onOj3aNScz73tTK0pAj< zZb^aG)NsQ=qu67c)8tq4mb?bXopc5dS?B>$pFX|Z`73v(JI~>zbl6^OHqS~d$@?Qi zY;|6Wiaw8FL@l81ZcQ_m8u@LFkizeZ=PH2tbl&1^-1JN?nR%-s;9LN}x?&x%E5>&r z$8c3&nMd;;gP3;3YD{=OpTne!?n9?OD-;EYUTlf+bTaCBNo4qp8;a|lbxO(DECB8$ zgBbIAE?{g+p`xZGm0Rk&)gPPD^U5qg9unBQ3s9C1d&wjg<(D+DH$208w6tG3BP88$ zQ2~~UbaiJ)e^(=8zVzq)`P~2}pEpgu5|aM!L~dNwd2MLdJp))@1RZw8olYoT=*7~b zGoL^sBz`9Xz<51Rm>`GMLh7|cjeIt*(vCwmge3k|6;#9XeL}l6@f@cW@7w|;x2H$Y zt}_7j0{l%x240Ur6&wkV@2UJUnC%HuYX+Qz^H=q?bY)0U{878V%w|&6oyuyT>S=c1Z=pd7m-z z;h34OyE`mEiY3F1$b8@LybAeDcokpP2xrS1k&`gUUSJdOJF$^z%Z@n^uS@^1kxDbRg>UdbE2X z;`051b>MOIsD%7^BdlR69>N)C zqkmS+!#hDldC(Dc@~in#HQet$lbB_TCTV#tF5L6elCWCniTS7&0Ds%ejJ8rClyxcA z6Se3o^ArV+^*9@!r%DEWKBQ#mkLKr05qX)?OZlxr#7RYzdvz$%%!!Q9zPRR;YQ9mf zn;weiJ*-H2uTv~yN)B!%EMA&skvBSIinKbP(7;NkwP9X*RcC3BAn0^!DXNtIT~B+W zzm<&Vsv*S_x`X_JOX{R2gZ8#OEz^ek%~!>okle4$(7D>8HAOwvW>)kX8iw*#jCd)n zLM^X!Kf2S3Al~$asCB;yyc=hk8}rYEmZi^NWL6%|L+J5xdKowKQuEN4UNeS@yS<5_ zLR`!1bf}TG1a+Y=&NtD`mF7 znV+!={b^fXi7|6b;5qO{$Gw+r)|bS=yYC%!Mxfj%ua8*tgMp{;a&Y<_tMPMxW|MlX2tkx zctcTosN0K93u8Ypp^tpE?2}SaJ18W(LQoX<(Hh0IJf>JJHOV&}OS4Ja^QycYv(mO8 z9`?q3U7I;WnU97QWu;XCB(6@!(UBH;0o<*Q!I($(Xyihmxe)}7y^f*ZD|s8bVxFo7 z;p%MJucjSpI`L4{-;^^&87jY-mZCqcEyT>y{zhY;*dmj)hhiDK|9G zYgjj~Td1A9+PEpwJ2CGpjr$(5!wBkmnHO+>x~LE@#eTEApAN)qRSn|Nm~%Q&&ns=j z?6f<-iK=@EB4ma1vNHdykNr$f5a1^r$%inQ52ROdA-&}?`HB2wevauw(;eTa@TIL^ z`lT=ZGwy!x`+xE7f6M3J?z-~%A?`SM$Jx$hq^;?E<#lXIm(vqehP{zbkSFuw`2y*J zXDSb%nJ%bclQJ(|a@`^vwb9Es=Z0(8?xKTOqTPHf^JKh--t9UD9Iym8%r$_9ZUZ=B z(gRrSj9F;6T&v7Orvd#KjotP+59r367$4&?ug!NA%no7-e^xK~tOa^+g_eF~!4JRk zg99x2iN(7f8sca6{)@kR{FkU~s(h*X72f;l_kJdSf_x$G%j-ygBkfGzjXB=UE6Kl- z4;M>-^hR2UPx`FS;=BE#yK&Xs?nGz)g5N}6`k&mMSfR-{qOS!Y+ z4tF6dii9}`0k@O@Dl-ZI6$Rce?O1^SJVOX*eKw;G@WFB$_PkyGz8cYes{4*W0As!n3p)Y>#Z?o+6zqH{;|F)6|ev;;! z%|D-esQhr{Z>MEwx)_1xK4WOp9~t;iooit9z(BVk3>LyMHJU1Co zUzfJk81@!08A? zJ`mSy*OA&Wtt}5=(h=J*?MA+&NQAdzFalAXQBPfF8B@FtN6~bT;{<)7Rksg^9euH8dRaBIqy_bzLBq=1hDPWOuC6jW|nb$JPqn8`n4z=YKr_hKjn^a6Lb62RaSp zI!>9bf|}_(r2ua=@^<|Jh}{T@@*R0I`GGt)AEr9*j-Ki+KKVulRj z>h1O2^-j_=PNiiykRNmcP1~#^zwK;3gcEthO(mnb1Z*1t!WF{7upWIFbi$iBY`YV9 zAn$S$b2XIy-VuOhJ%Gt()OK&&|CCXz_qG+}n|YsUT+?Ya&br_-+EgPGX1;l}&1?H| zTZMEv4W$Y4{yabTKVCE+@&Q*AYmVnpH<%A7!2J!()~{2s1StW>LIgP-nc>56 zUwsB##Xw%>wBjkc2h-lkS1{#}bxOu9Z)h2 z+oE2IvPUz&qXeI)6arFFG`MI2=kuu&=u3-D;fY*aueTNt`24c_1L%4q=G&4-{rZep zeI+u|XPc#DqL;qdjEsGe3&>=-ul#njTzlMC2`F|&=6p@NVxiECBXq=kdNgl0jvHxv z(Vod$Op!0TuAwNiG_c4LZJ6UgNbA3;6T7sm3kpGE+7%sW*B?q2_qd>B#*Zriz++LL zCs1L`l zPAm1G%UIs45D5#gRpz@fm9#(sgu4iEl}=6f;<5!H;eR3sRz=ZbtBocxlnec1v8C#y zEvd{0-2tROYAO{8{c6mt)A?ew`zlm*cr2d#$+&(YARSTmB}Yx;0TXJZ=YkUXWLmBZ z_v?(z{ALhfDluPFg22*r75%E-Q~=jb@+)32iP`yCZKO9W*NG)*X^i6sG_fdvy2+@o z>P$~>#(v|fK~T@HVaz6TFr8mavoXsC_n;>|Zqh(K&Hx!^fy^>x=-D94^Nkisid-Sm_u>-pnwLNNc-icmw)8h(3;Z^i`u~-qL z=VDzR@eKJbB_sa%LbS0u6t1Qm$@?&vmxpD`g0vmoR(J@Fw8Eq0od#mQED8nNf>7{m zAtW00Rz8Mm-kg@9lGdloIBOzLC>gvB^72q7SRBOFRR+u|&tnj6`D!6drj=nX=A582hS6inO|$Ud&^d$}grDF(2YP9*$@P}o&YQdt@S8+^6PmUW~V}zZwsQvU=U?{bi{j8Z<>X1$8u2+ zDar*^Q)xN6gTQl5Jr`nb0n}d(g4m?0K@8=M0nD$n7!41n$8pefo>VLys#vT)h+rp8 zVKBdy+R&LE&_=#&i8^U@%=%k{aB#!jx=?dIpTuxpl{TO+?eI8el_aHnD2OpDW7qUb zv0O0ioI-AV%mMNZSMn~>d_8Fc&9lwMd#^EiY-IE3O1}8ynei_UG506uuA2J~`RrSt z-SOGkR908!R?bp+syVOnEcrlsx7ki!TbZcbjR(@oynwXR3h&^Om(q6JoBQ00rRkFW z*lNst%(BB6PTK1b);en(>(p()Wse!ab(4A(OS5i;P&*%eido6KMjTYE28OV}N^3D- z&=eMj(&D@zWL%H2(-+o8`-8}`B<7`Z*yTjgL8g5e+J*5f8OWu*|f!v;4Aq+egNN{ zUh@#<LR!e|p zL=tWR{_nR0c)tz6Ejxhs=l}mG%B#zV2)JH}U(1Eytj%8VV8Mr*PR9@^9c* zJ#01UQ)$Wp-unmdZF=uVY5QjN$KQLKAN#qdwtapd-~E~XpX)tIv$y$B^D31cm1inv z@L6?huvd>ZEVoS?W_iP6C7^o~lMaVx{kZ$kWsYvVGy^b|W4lLnU`YVXYjj26_iV{j zaoJHUSGN*Ps~y)0jMv=l2f(-r?U{#Fzf+xu5>h|G>b%{Ay!hkmmmP z?tSkHdAY6TkXJbG5=IoS>54wX7|yRm#@WUI&dOZAy#)C3Z~z?_)zd7@GAkd&M80G> z>Q?1ZMfwpQE}^jecEEUp+ES5$uH{LL*jYRyP3B>oD$QJ^76Zr5#XQJNClt( z!azO0@6D$%nNK-_N!x5khiYoaBdWPbIaebCW~c-#^MPo`rlpv)Azx7d!d3wM{lI@K z%eF19doI6_w_%>MCEy!go$ZlX-pZ$I#M!#zJOu>ia5?77abNH*Zsf)0qi$awLQPjH zS*Vp$*eR3PlAp`lx$B<02JX7fC+B{$|C6(+Y)o4#JMe<1 zy?_VOqaMbVk^z^u=RJ8pu7r6(dnhfmGL0(%NK{>S6&F38=PA&atzz|)Epe!E*4 z@~w>Y)?TMAjyJ8=MqV75!-wWkl%dT*N{e01Pm_gF~#yt_Vs*8_6yWTfrrP@e`>`NYjO5iOF&Y8pMzIi4w>H0ys!7i(Qt1smUjoPBa9%P> zO8~Yj%|nODybd>Q%der~nj`P)AJusB7fU~mY0xAtm{nO)?!_PcVt9N*hgL`3r`?<$HKZwK(*8G*%0WMuby#QPO28j;D}=6tkb zk;W{5`Gox@$j{nuQVFnEaMn}+*6qd=qSAA2Sw|Ge3MwJN*X(KPp_Xa>w z6k_H^M(Z2;G!!L-5-2`vw&E4P85Q>`4~PX zR5D2Cg@I|nrbLd)S{jQL8)D* zBDo&Q1o=9qf_Qd|wov*@n`*x47C~=PV@CWu0RKE1&o@FcK7zwzyg&*7>TF+Hue+P4b(e7*sJ_ z2q$@Yc#Ic9;j982rLC$)aKegWp_0~yEk!*tnrjB#nl~ycLEvb#2py(NA4pdf#e_0W zX1f~CQT8hnRw&j$FJizx6UsbZ+WVwBd10P!jC6j6urx=7{A_x_6lpJc3gd2RpOk$- zCH0{r2z50q?uQy4aG9BqabV&$kh`N@2DSQtE~jdU%o&EvS5ian zQ|M18)8pi09_i#he4_B~0c`7NOh24x^Utv4p(KydbKT z4CKv0WbAV}#_{#M7LyL9rI?jBrKizMZ{=ZJcQc4JrCtt4znpJS531JY<7nm`mZCSk z>YB2C72=6dJSyv4e*m^)k&!)WjW;l!@6P?`2wK&ww9y&zR&5q3)?*FQa_zZ>SE84X z+Tjp7^8shjkzNl)fHn)sM@<ZsMx19J?sdvOOocMrDbt~vQg#PV zDoSwuPJ2_aG&_e06+6(Ew(29FD;efG%etC2#C4aH_6(BKEk%lPP2J=jah->q&V8hp z9B>bw(G&J73(ZF*?yF)}5KFJ+%c#4OR-?<9WoX2{;!Gh@q_=~hJy&}w`_`d+12^(g zb<9skb6FoBb&h<(NP2{HT}LiTVr@Z4FBT#LUP!CZ%Wz;-SPWVMLIv1@za)`4gzjjFM}|z8t)BL22-a(ASenUooNU8vJ0+~PI@>! zMg942p04lX%8p-czw$Qc@Bh-+`2l9#nDy|i<@CJObGm02m5r6D%33OqRxYJ`$wRr4 z7m(JZURQC#tLYRTch=KblAg5?Yb~-6_jt+)bXsg9mO8H+S8TEao80FFmgu$^&wIeP zmOd|Gx%IknzX|tafw}Hh6tS8Lv8sW498txDqNH@rUdQp29*^Q-efrIiCEc%A50#&- z{8Z(Cr}_7rZ!|x~j}9#Q#UHM-;o5{AuUYH(kAryjI;Q7{^k4yd_4U{i_z`7(>4t2_w)EJzn*^<-9DXmqsym48Q@cC z8#?n>9m2=bgMJ9(di*Q5lmR+?S3ZLd-Dwp*V$AoVU01%0yL6@}6h(m9xHH~++jQhX z#S-9t+^O9se5)nEce!N+a7z*3j)=Q7g0Oo>>nnDujRM#oB4w8Q=IWWfqnU8NR{u;pU2hKNTY>c@Fy&dh3}KVEEXOtntixQh z%*Gt^y@W^1)=hrFu6z_v6z}%DCcm5ylF#N-`5y9#_trL#^WNsh&BnWYv$y`>H(%xJ z8>Tl+-Q-&PZ#;6Xjmy7u`RuR$NxpI68&|%ugnZf>Rje}UEEbx`FDaQcZz&nHB{OT) zO!f)_rW6kITu{s9g}y({##r8M5F?%rkL;3>Iu)7Gn*;ECoX9LGAmMmEAHeWqc?j)h z>BLw76X)W3^Fy3=EWd#gNWXvy@8+WlU|3VU+S^Fg0%_zc+EWQ4oXs~eW=md%x|?|q zx+0@vDAueAE${bA@odbmLJu!&)3lrQo?T(pe4T%0jRdfmmJJ1@=}aMCRv+V z#Zy#~=)V*|&&3FMj|Py?qbpy>Xx`;TOn5a9mikCl>{ZD%B~yM{Q7WinEbj^sVy6q} zvNn_nCgKIYX9g&EKVa6by#W6%3&K{=fD2;rQDH1^7Q(jPy>2IYjWJv4IQ7w~j$?fC z;wR_L`s*}n&57m?(o5E)t++pz-(Sm{^L7lHE}ot51MXT+Q~>OfL43$@z2v9!U|NJ# z>9M?Bk+>|Gma|$JwKFx*f)onSHf9VjI&LX;=9Br15}+M>U(L04NF4$E_e7@aBbIoW zkNk~~d|$_lq@vV+f3cuf+T4vPIS8g4wmob*YmE(SbN(94k@s6k9KVe zd|iz`S)^s_`Gi}*Xm?1gpUDLPKN&9Z_qkz;yu;h3aV++lZD9%0rfN7^vjln@Azj;y z8LKUbGsRQ+WPVp&0Z5SF@s4rq3CZLsQ>wV>sFEdK0>!O7?xs$=%k}azQSYuLgmk8XmB_BA`7MiZ&gpkxAQ}0lrI4VTXsK6vo zD80WLe=p;pc!ambY;ZmAP*)^(r*SEO*@jIT<0JxGdmH$BZ<6A%axG0-+lHppjoKXG{Td=N3(PGCrSkD|53M65=)2TSN+N zxa6W~MZ&#;xdE_W3IJrb5lsw*QpABc-+ekFE4xnx=ki)pc*X)1GYT5{-N=MJY{(?( zCA&k4zX0<0EBc+ezVeRM)nn;h%mXb_8)v(V64f2A#&?ISF06q2mrfKx2HQKSPwxd7oRxy+LosXImgqE5n>6zGCEF8@roLTb7z``UTf?_U)pR5`I4$S>E&qOdaRGn z=+2|487PWb`Epv1S!tymASxu$9gCtS~`a6a!(>#;no4 zHqNWLm%PrDY0{>U+V2T(`dQJAH}Z08Fwag4(4HR6b@CFE>ZCmZ(9e!tO;cOmr4UhG zK_&0C2A%1lJV4%G_WkL#AfP=T`}&G{5Q=A~1z^w_jJYoeXXQQUfvA~5Q=!l^k*}f8 zt&ejbJ@?eP!~8(|pZu90c#e-Q`skUDZl*F-*;Q$$ z(qEZVd6_$&PGjj1d3Js<6$Pw!yg)ja`s~4ePnpJZUhy&>wkr0Qi@Y3t^Aavw;W<33 z-7(D9A~%j=lIcgM-cugH=JR79ZHKy=D*rh7oS!k5v?Bjv{%iP3`o|t5U&~+cW27h3hV+B@-uwj%$iI&d@Bn&T6xC^WV#0X|-=ph5|tJiy1D*^oXT)tCD|8Mv2-)ZLmw*&k?j6m@1zIVIaE`OxuHUZ#v`Qs?x>BRW$2ml|< z{J--9#}5(#K8yhHVHN-%rT}o;0^oMJUH&-AE$RQJ_b_S9CGt0OJ%0`V!H6&7>%QhU zG3vMT5&W*-wj9HL(_Q$gU&(Lcs&#`At9qik!u$kihd zTITX?C18?=B49ES86~xls+@Gt3kop*I8KM>_^tpdFUId$5||C+-o!P_^JOKoxdQ`1 z6gU}ymJKsdK|OV$qBHNtxHqhi>#dCTX~VS$=wH{$;15aFeB32WTBU%Lv+Y#EYXv}R z#`g=5TQ`!6#Oh)1DxR^IiQdB5sGqYlfw7KwuJeX5Xs(9B$6X zb#g3&a z+edm*HN8sS8=2)3v1gjj??!;~taGTvc&xdYPbzebI`)+3&WGX-)<^x{n5mx;XB6d% zXE9-m1E^}tXK^v4Bd=&P9e{t+tqi^E+5^Zh^XYir;{-;$=qQ@ri6D5fR%x1y@z>h> zwTLODj6^GK%*A}9W~CbWVt9n^4KMe0R|6>N4a%VpS#m*Iu$AS3YO$UCQwn!!{|*bBJ*@S?n=HG?OWQkEdcixIMztL zXsU+vei`o-jr1sH+?lmm5oamHy!OZ(7X+Xq0oYDO|1LuAo9!@(NAlxf+ENYDL-_^m zcrm@K6YcIbh8a+B20(vHS)b=(FaYksLNLrPd9=)T`6(4V z;E7NsDH-1@-KUDBX`yz^Hs3TF+VZoY;i*z*X|+O}S)>s2o{Rgc;ewmm$SdMGp72Vn z&vRm&?9m`S9K@x~>6tu;PJQv*^?2KErhAq7eJk2bx(9V*>f~2LiQv&rQI?jQG7GnzfK zk{vn!n0pSqr>d*!z3+YRulM^r-{--Y3@6sCn4T)PRB|t?&wr`KG7?E{z#e_5#8qJ} zTEjtaN`Ol}nMTOEyr0>Yzuc}q?;{#=|4CL^197oUXvvw*tzo0lxR=fxS7iXc_I$Ef zWA>o$GbAYuT}OXhXf-B;({`XKSqbS&0I-L-zunC9?OG4=+Oj$BL6b!Zn2mcKz>ujr zPzVW_JC^AyH!{U+dM2>Wbs?_8kCcjv`!z!dD|O!Xu2uHwTY+~X65sZ z&jhz+ZaXDe*!Ua!_>iT{F=@fse+1z{J)IvjSRH!O%{?8(Y) z9U0hP;+!Tl#ktu6ZB5vM=J1NGD4MMf2QqPWM+WknHEP3{!eC#D@yAtVKbba(Uf zZ(Nd;XTrg(Ni^L#iGZ2D*BT#$ImA0*alD!ORhUHO(UayUSLmGbhi`PYaQUxadgb!p zV)ReGuzYkk&viUkc_6%Q=Okh^9P210+hiCLPpqSJoU zQ8B|6)T`*iIh{JuXsKx!Yo|_}HO~b!>opsjEHw^|CU_I)RkAfsmqv*|+loOmTu0R+ zujGC|R+`&7a7NK3jL-Xr@!1Nl-Z%ved8m_7zdY(6j{1944_6OVFZ2B^6H4R8^4XtV zxMa@H@ugq?@}YnIt33IePiFZi6n;9a9`!cyh4>l!@P%+BZpY|&%qP(i_Jx=5d(Oq5 z!5Dwd58-3+-}wmf%VDEW5oY;5U&m-yl+b3pKg09!3t<~N!xCRWi?MzeE%A2zZG1E= z3VS7mfD6QKpNMA&KN!DcE{k?MnC8lLk3AH_R9phe33PnH06*%IKn zOav%ucn=YvW(iOyDF8et?IP3sR8s<|t)xMXxbbd)|IecY@T~k*FYgEJeFET0PoHGe=iZB2K?7@ z5uOnMo|R|iFSERpB#+}a<2T}$@x(iZB#HmuLXSs&MIs0+^i=Bq_v3$v6Nq>GQv49k z#Vhf@;I@Aj+X-_+dO*ztf*;uN{eLj}U-H?%vvB8(6rw(7B4J8c6dvM-ELX*KZF(?0 zOKy+XW*!>MQXta;IHAQLmO3c~LT=lMCa-00>bcI~me;JpRBu>~2B#cF!QvdK9c>M+ z*=7Z%7^4lNGZ2%q(|M%NVE%gw43G5^dTi7{TosRa6BE6ri|X09uX>zncXe&`7}b}m zd#XFBbXFEUIl?;|-sya241?YLCQo)fJ$H7Ws8*2yAMrTa@JGIjIT+G z4=NbOu(xf;qqyDz6x`G#1@tRMG7ICCEYaSmHMF5Gz7^j>k9Ah2ddB4an*yudDZm-G zDP_;gx|{)DiHVrdpS@*^u@j>eLL=50jtO8b)hG%fi!sNUDC$Vwmu^^!dnsHWH{}f0 zO*zm#q*bS6f$#`rZ)9Mzz9y-Rr`7_)IpEx=IkaOio{DGj&>L|cM!ON}uum}#qa(Nf zt0Nh)1^p;{Xf8^w#AIPn=K$ou+f#}AY7Y1{8bHb0RuKM)FZaheJSo%cEl?zn>oijHAV3aF~fp|QFQxDCW3?xO6ZjTm-4 zUPn*z5VqYIL&R6&K}V<`{@~2|aeTC=<;9O4q54*JXLUEGd6>PhU)CXwy96lKq=nOY z2eJp{%*11jD(H)c z4B?(x4x*qKx8(kD3#EMC!@bC0cfYE6)G=8`va0r%r072?Yl8p7NR%|6TkNmVsxft(U-60x#^nA~$ll0@atobLfLh#^d&+^(jpP_2J%x-F%vY>=qo8?i-p0FxwD%TfYV&15!P6(I2L|%>Tp#&_`u*R7B&0tpa}&WX_m8z< zb0!ER0Iew#A}YDRR#oG@T)#uP{g$I%(fWKpUc!KqB8sjXz6Dq(T9@L8M{X9iUhz$IBwR8+#4+$V;leZca3ox5;(q<8cw;;xsKi2IyWB^-%s z)S)pP)PUErw{ulpypgUmyebhi+VipYbiN5!5`ix6@iddXLf9PVsSt0Op^k7YT+H)w zUp$f9sm)WO1wz_CRI`Nl4JFB}qk6)jusKV$S92@Y%tC4ejbeV)l}#h6 z*}`ULJb-F^BdkSxc+>8DT|>m{+OqV1Ie$N8;%~_#>J@Km#DH=3L=5ljkKw4uRxONbklvVu`ng|IvC4=3b# zspRe0gJGBQ{^zA|9HZT}oOr>+EXh8sKvyTI=(jm3GsV4OH(J8humuD9V;}K)0?NbwtlU&nq8V~O9z-cV z3MbGKUNZv^Qs%n)y#BwG`%77G&T!w60OEKqyoJ`VB9GU;Jij%l=6+kmPPMtSEpA0M z_rr1`+Qy4vu@Yfp9yc>b_CJ-Zz;irqMP0m>)G@*en}~PP{w*xX$_CqWecSYDkd)$1 zK)ew4qba;%9q~&3{X`2DPUd;JASsh|+3o}iaeI7(F=3Aq@lm?}VN!m++NKyw7?%kr zCD%>FKs+4Rqa~~ld(oNa{|ov0X65JJL3ctUx^0NV7#+_g^@y-K4&t6J-F$QDHxCZ4 z;a2h1i7$?4(y#sC|1jzM`HAa4(ft!mj9NIVf7DV6mkO^GiWDA)afO3~H?)TBSP%|7 zgME44pJ$QBC|P0?F4}DqmbhjzCTGp9t64jxq@YDooN2-Zue+j5*{xmh@7qY2n*^2nHhdSi^mFZm7UvD0t+8l(1(S~uzq ze&%n?-}&Qhoc)nsANZ|5tV2uCAhw&Ak_93*!OSZ65!w9BVGvqT2cZyjwbD9;KMro8b0h}rsC^b{Cmj~ z;D^wlIsOhl7<A4!@2E$=#xQs=|oZ3&QwE(OIA zB0xQ!sQ51u0pPiBJ0?Yd_^xA32_O*wLZ1K9>vx0w!T-M!fOmcNnG(QX#qyni`#*1H z|9i`K`}x0Uk9*crpOwFq@(kd7R=$_zFG>V>uSd)K0srqu1bD9%zz5%Rd@li@@qJ#` zjy1mZGYf!cQFyK#I$FOgBh_CC3zk~a(`z*c|ANza6uh{1p z{%;pN#BIN66uuaK#cMqIhfjX&$;T-EFQdNl&Ow&`?vmg5@h{MNxAkGm94fC?);#$~ z6i*g+jQT|>gZ9&sBww8*JwAly42vGqs1GyL=S+bFqzt?5J}%p%3D+FY0K+u(xM+hT zxS_)}w3=p|lqGoulgu`NlUXvgL$j^eY{+9N%(@vXtka9NRyv7kl2`d{FFS}%gXR+l z;_-Nsc*~+#Pux{KUcJkc9hEDU`@GZj&i%?{N*haCO5=H0d^qFbQoiuBU-+$?KhHOs z2i_W(f(3DH+<?Vi3b6cCoBtR3g@X_sos2Y zn?g&tqC~vvsMEM-wzK(8*MPhPEG9r}Pa0qGTJ8~*oWWMeQoxVnY6(C{zf-44n-r95 zl>*lZ_)Hm0>+|otPA0f?8bHOcn|KtbWI$#pCduw2Idi=wx5ZORNqSvB($5Nb5HG6| z=jZ-W$(f1+mZgmMOfaIF=hcE6`StaDEamHHz>wR@xESwd!2ebK(!2`;x!vf^xyE%P z9@e!C`~*Cw^VMsLk1^oBIy{aKl!-IKl$607-%!Q=1SqT1md9qLCIN1{1oW=V=UFYy zW>Y0%K@a+KFKmv-lyJZzgOW6F6)je(U|j~J$~jY~ppY~7Yq_QckMecAk=tuF3d(VZ zlqole!JI)?$`Z(ZnPAbKGW+8JY3y80ndZ*gm%xWOTJo?xC@Jq0vt>ZdOTI7y8D}Mi ztiVu_tXmr6J_%S#?cNxcV#shjnm^x!c5SM-mc6Xo<4wcp3=>m^SSIdtX9@eaGXPo2 zCNgEmREb-(_Bj7Nk?^Y7{3gxC6vNB;^BZzI)#umybM0#i4olxvk7^zt zRn;ubTrgRh=X&y0tjg!DDVHRGyqN7?syR?x$hrQ7{Jp2wJtqHd0!oK#68|HFgf=wk zQo;$l)DhR@zaLE3A79EV(mp+gaX((wgt1B5JC8d_toL@>gLfPHOVsvoIqQi!OihUpR@bSPhMw!Y9TNsEt_yx-Hh(5sm^-vebV z$n9N;HKJ*&nDk3YrKDrFnRlq{NiQ29IoX3-$55 z3up+_%tlXArijZjApL5-kDGFRD@uCNX-%?-i6`AfW0+|SN*WB~mZX5QFweJ*Sxmp* zIit}TS1X_+oYF(Qs4)>NRSgj4=Xq_H+WPqIr7*G+uQyCQW^24dcsU*mXRt6V(}Zcc z2i5lZH4C2FzN+M^tI~7Ybx9GTQBr^y!k$e0TB8sv7?*+RlDqC;C|-76Qc{>h+?xB# zy!`v;wPeCU$ry>Sy9qsUuL)=h^Fu3&CdEGVj1bhC^WOZCGWs2{8y(@K4ryPsig+?n z+QMoz3x+f=HRgRu)nMF=&bU0>#l&#Q6tt*@0{RrQbboDidMqg*U9|~CSMv^VUYL!+ zl-cigZqaEoU* z^(eb-2VOJa07h$8#wu+l8X?-bk6uj7$^@+%Orr4d!tWK%^W^K*e_XxAlwbR6eUo~b z|NKw=vme{fAN<^xX8+;mseYr{9R5DxbKxHpeimoq0rzkt90(IIF&>Yb(Gh;ZPvAkk z8vZVRKm6nPS-cQ0d4c#a{8QgYm}$H}!C3#nbNHBX;h&>bhuiq7|LCSf47edF0{k{w z+zET}(X0gU$6k!*k`h2ToX6X7d_?;QA>bfB9RD!>Dn1;3H2l1z2zgPm1lWiV`KU>f zCBWzL!I+c)J{ZQwJNSUcum~UUVV{%;lB4kf4e_gZPJQ@HI!fankBGlhV^s^vRn z@PD_20PpkuUljQNUK0hLm1pJ8Rh|(5o|V5y`SSw(->tODdo%yvdwf3&fZFl>6ae0b z2oP$3|FwLqy?&+u@T@#5-;45I#%;+r{js#MuVwJPg8{v6cxnMqd;K+k6n_KvU5}r@ zZI|O6+>Gbr7f^9E))W6z^|z~ko!Aj)Jt;G9;ZNN9p(d6NFZs!z`V}f4dGg$o=O})> z_%owQ=yF#-mRPAON&6Mh=I98Bc@3`_)PRHTdw>PjSuO=mD_HJrcbkdJ9(#bLIbd`{ueG?K&sO5(xIdo4LDw84 z?u|`xCvp3en{g{orax(~p5)2ZCvz$Xc;`U*(6_qjpWVNqeFwkz+yW%ngceQbK4bjCPgV{`jq1% zt0e`56H+E#g`D@vj4Ynpp&0LA&;#ALALoH#7u1mju~TM!6|d*a{5sw761w9-M={`Z z4fwEC%A~Ku`V9EjBkHkHh&srNC9PBsiN13R6@52C-pfNP#q~SPByqY9D^(ltY7>xVkPDx@p0ZcUtLRn3`mITPA@tEE@oIJqe2FG>a zbz4Fc9vg@W(5U;i)v>k$=d4NRQU;nO*#o*+zgG0Snlgdo`mFG9A!j-!VCHhl>@$Ca zkkFoi{~aDk$`f}{uftWzOSe@D1XggO)_(DXV}w#DhuM65L)*o+Nffph78QOFr(E*} z+HxkzQ{cati7TD@an(78FiE#Z7>H|~^wcZ9R?2D_W6imh?-)dc)n$-l;Pc)Tj1L>{N-c%YrQT7+>5tWu|8+y z@AWWeGB;$xLdyuS{V4y&BQz_=O(IWxkJF=MTW0MWxYFw%g!**(x`gymM`FTE{?~tb!9Lx>I#3c)I24E@QuUdv%LzZkG@o;xFpTA}kG9$mg@!Q)w zc1cp<^CjS`5$z@`p{P3^!0mV|&mT!@wJB`UKwKKP8z8JP!4UCiT$q8g$;!B|UyI~b zn*#228R)Ld^*XDFK@FMkQ^-J0li}PSj^_GK&c{>vx{{Q6VFXyO%@KF<-)o@WgnaDG z*Lypk=dlD(%+B{}4(e6o8L>8L0D6JMpwm?U)dEWNVd%oYC8^5lcg|Oqgk6O!G$C-wY{+ zITE0GTUw77NrZ&)#5Z(m#X*zx6K7@%jKvjA8xB3P2_7&+W54 z_v2x7YB4}u>45>l(ReA%tKk&|%*vy>KJPPY^uVW~=A>{?(4Lh_`ob3U#I+8g!E9C3 zh1u5NLQ*zxS5lanmw#!Yx@=97c5#orrWoApvg{v9-hxw+lOs}kQ#iellFynmZN zqF{48bf6lS#Ybo~Gb}+z*yU9`)@mN{^)&y7<(WV-dt`mw7x$xRLYRQMn5>2B!&GNc zG)^yZonfOfEA4~Bg-r0Q7^?$=4#oYbk4HjMHdx^RnzV*S;zPr+hwxe+fAh2Q$!NDd zmH@)5lBL8jS`3DD#B(aKLRg?p1*`L&nXfJ$!b8d3y(3-z^n&M3j7!$Ue ziHe8nFiE`zPsvg>a#?lcSk3#@)Gscl`5+#*#{PoGDI9Epce ziVMO_w1+F+Mw^+Mh^O=##@uwi@Jc4MEc9mFEfMCcnCMLh^s5odBTlM1elk< zHQ{FI3$_kj0 zcg9naWs;t_Gd~A6T7h{mJOcNgg&oSo)Qn-2Ry_{>1I=jJ`j5`3q|( z-Y@PQHIc&dCxs__DHOx{a1UcgZE_5&Y_%9AN8@}<(Hibyyw}~sF%7O@svcLdAwQ>W zw$dIvGSf|5@`he)Fj*^_EKtO0_uRo-7C4BD_Iedl?JyBj_3FhLH=V>SbG2ZSS&^Yz5)G&6eWtq+#^;W-b4~;+Htz@f#i2Hu2!M9`5Y^ z+k^>)&-p##7h_|bOS}Pzty zn!OO-LbK5^DFL*F{{u}iD*=QbF%|t}M4Q9i)CECHSp0p6_ykSGBuufLFA z*K7c4Dgd>2YoB|s62QAri)Tszf0fF23)p|R3IX2p{&!oxlaj!*@~r$fEzbbXXXU@9 zydQJvJH7vY46OGa->U@h-6{aoLPHJjIlk8d;JwG16~HqBz_aqKd@o9EgI&$Q&XBLW zM|=|Bi9_hm9@5|NH8;_(JN^fBx$krMqxdCXB7Vu6zJcSex{fcq?k;{rvuW6CQ(VqR zU;N0AeP9wxe)Mnt@T`Bzs9zY>J?c8uN!7n!y^S~h?WquW@i;Cs z9%UzTCP#A)%%p(l&7ApPpEGwWIRm`kK^IYSPY>EN0CqAF2C@t{)$F<4ANT1-$uV!C z?4o1=km~t%4qWx*Kzpmv@s0%GCn?7L7NY7#?3FUT3V1WuZ}mvvDhKN0RvRTR)h!aB zQO4N(xfKRfu}oUE8Z=~L!yd=cXIGXEZVWBBqa4e`6FD%Rg15=D?;D$zKDrwxTJ~ZL3yK#Vc-obblmmT*8?rMykkckY%Jf3SS@b&aNacj<8UYVt^`}OI@ z!?@BpN&5UPRJxI2xFYQ0`!vFljFH@Zqr^gK_IxI;iC+NMLGiq9l)rvDV>&IzlT*Um? z7cWbISuHcQ;Hh+VF?$;i=`t1nbdz&USZK1F(e6Fwsv*QHoaUiVqI(prR7bS414g;zh zh-ajX(>r-w)qviz`wn2x!MGjtrvRu{v!$%$B06&b`c}G<>_eI?P8v|}uD$4sXEQNp zlL3_7@mg-hx_lo}4buO`92gzQy>-x4RXm7$REaAsF@TzKNXh6CY3JemI|*Q}#LekG zh0(aE-8QskY3G6XcK*GChH$_Q1u1}?2t5@i^8KnQ3Ea>1O~6D;Oc|QpFCZvm!y0R@6J5rS{u0@u=)v?#maY4ALc@W-4B*iOy!?*r~YA5b?P4%GhpU z?vI0cywqo6P0DaBlQYDt&ZNtUS8^YoFIjAKOZmD<0pvmMk11exE?zQ7yy$`wZdj{? zLBkqwE%)DMjT&(_2ej))fbN>awhZ7_%#;F#M|1t&%=Jy}REYi3cqrp;d`mrs+&7F9 z*^_v{@$6at2Eh*XNAqfee(L)fn$e zAa_ZU1a83u_YL7z?26Yh9A;}lTehqj6ECIv6vpKJMcUuY%-b3^N*Q5ea3Xda#H-aWCq%sR6vTH7V^2O0{vF0pChY3LbK%x%gJ<*E#dPkgZ5s%*p*bN%vQD zruH#IQm!~o+-0-HIFy0#wzLk%ovunsCaFJ8iK|pGV5NG(sq~B**QOOP91KfyhGKtS ze;&nNlrsc1tbas1Ak7!GS4m2rqUq^6MhF43a=*BT7H3Su9c8`5(;4!s0fV;_02SuP z{hF~O?{DfP>D^*j9v`5bfG(x1pixi=?fJaRa*fj5-fXT!)NH}2L?npo?Kgylx(pMh z$K{G>%~m3Z!c;AIq%~fX=A$&fCqiOTC1yp8a9gtaxPYq;nk`vZG!S3Wr;l(t9@Bz} zAwjU$rG7X^F}^JkO_LHyH7f)Z9VU~Ns2XRkM9>_-#WWwswZoXB}fnMS^-3o+VdH=pP@6WqDj&~(# z|6$a{m-F|Jnu4(=8z=4mOT<+Ps13XGh-l0E?p~`CaUfnW2}P}OKOTjb6mT^Iu9tE< zUQ&(M(P>XojEO6?q0w@EXbDpd6ECOh4eRp$yp+fN>}17Z(0Q9tj7bToH7v5hQ#F$7 zc|LE=?LNn2b!bwEDeL&2HcZf#m20?1JZ#7~!Xn9XWsP#4Z_{d0a^Duo3h5Q;xnKkF zc$VPbqE4B-Wx;f3iLkgZo{I z=Ow~+5tDR=UFb5^8^lvtx#D`>50>@kanqN{_P5+aMKR347*k>|cISQLoV-tvm3;;k ztVWxPeQ0!7JNiuu{VJupWwm>47?8wIs9LoJ^zD5mbHXQGv z*U`{{dJlD=$)vCl71fxCOz&3lVZiNp2YqpG*o4OLa=y0<)S)NOch~c7v_VfEH^&t) zs1y^yz7j5>T~l}+6$7!4zM((e^{0=xapFe*7mhRO*MD&Nq!uQ1P1^ngj|p=s=L-8N z%q(<9^ev7fr zQinYy0Qb3_E#h9b9+$F~$UIF-6#lzHeW6U{pI3hC$qzH`*FIJHZ+wA& z_M`t|$}cXX`pN1~hE~FcFu(A1{E8Ft2Z`4mH;(Xk<1feW$Jnsjj}yNb&zMbkIc!V) zF<$a9j1B+9i|91o*YTzJn}+c5Oet#hDZfYjs{a^o6F%dUZs2(x;eYdPOMuVDOT=z3 z`su6$@UPGu=EdV^_KEPX@e%D#rei#fCSMIdPyD)%#fyX&JsK0jik@5LBc%;wTBYPxDneh7oIk|8IGg@&Bx(^5;!R{cbb*|FR_i zpOt6jze#xpa6T)4ndN(>1n^$q|NRsI-b(=Zi&_HIAd+X}<5_uD{vxHuu&tGE8P-Gm zrf2jf!~f_!JYV9@dwc7|BBxvPLBV5 z^=GMWsfNl&`H_D+^}`cRGW~_me0kz6s=rh{Q!P{Yc;U|qhcQjjFGzq(MassTiiLTs z7hQ8&0+C)pgXtMCUX%gPlyP#;MNJrT$z}9Qfc0at_b$iDL9YZ{U&0DA&BmK9xPZIH zIf6%y8IK0jEWnVeS=eK*dfc*1Gv12(;xWv2#ctxFxF;5Wqf5) zrJwTc^4#(zdglDeww`W2|CQ@M|M@?q`=|c+Z~W(9BtDAkRM2ip7?v{j&!MD}rDN}e zEhuGg)KY%@ss)}0^6RdVoD{W;Gv`qDI9|>z+k}T1IDR{4GIZq(k46o#4}C6rAZ27F zpelK*59N%V3z=|mF#{EJ#_JMLd=>RBn2dh+<6WFkRv_-qiUIvfp-IZ=*-BO)&-rR8H3)Adn9SdW0C}GlHg9j`1wpU=*$_=L(=Lr7|+^;UaR9a z2}V!%H36unQp?5%IWX6&!A;+o;g>=4d-SHky$J5qfioNlG1PEU9RKmHcnt{voFM*2UwhZ)j=RjrAaPq8; z$K1l8O>t2=zh!93*I&w+JG(M~e=ld&HYmG>ZaZ_o>#`XoLte$L3^d-&#D@W`S%R=& zka#Griqk2~2{Xc3KK^e%{`(*QU1DDxs&-+1m=7L%>@k`&Ckf9`bP=cG6laJ#uB{`1%jQa+dH)4PqkH^x7WZ#Gr}Z zkTO6Ua=$8jn(1FRvWIKSt#dQY5AlHtaf{7{a3qIzuVg^CE(2=FKz-FjY5u(^1+bDT zNhS8;M!akQoz@#9p0+>%x3sB~EF^{*>El%65(%)YO2Fn~38>wT>zTlFJZ@4VUR9SR zrjzITU8g*hJiI4L_I;EWJQOp7R1gKXP;zNn}P{Du)_DjHQ0S|J9V9jg(?L>fy`%Tn~ zHXAfymz`OZyw;xz8PG}qQj@z9Fj36X+A?HRm;X=75EYfUSOQ|VfTDwvU;9;0J=g0r znJ%ph32;on>ad}#IMJ*ppCd`xcaLZwqM()*5PT2 z#N)~9I;=<*HF0CgbPMYf0307Wtco-7s6I^1{dkNS`f(#(%-4NYh45NZjL>6-VdCSs zO#@+^1YnQLf3Ha=k4eCFeBAzVHa4;zY%85uf6cQ1$MI{~w?RrxG%|w|>w%TZp$0dMhAorh+ zG~O~%pf0|h?q}GM`k{wt)?x-DJ!4q1?x<65v}9$}iiZy8b#0G+;-T;qn_?e|hQiCKp79*0hP0m@G*MdL(tYaA0R9QhSZ9F> zVNF&9nVB+>Rkg;KQ8f@|N%PDm3>h{XC70Dp$~JYx18F>l!{K#JlE*g;jOdD0M)qr| zHH&#)(2xlu5A{eERxhFAQg}^L9GQ-CmZo2wt|Kgxq|O&+BHe7ocm<=ga@e5j`Y{+6 zh20nz&NxjxZH!`W=MrIG?wxb9d4jL9L_|aCUv-(t+%dZf>KL)Wj#3m6>rFA!?HsnyY7#YY!l0rNfR$y${ zsvpD2sv)jP7EIxIevX=x+k0@NSEW+SqqNhQ*iT$%t0An4_rfcL(_u}nYfs*P*Y@*u zd7XYJ5!x3xi{`jJ?m}BQVo2KGw-O(w{d!oOl*hcTF4SYRYD_9K55qWVKeZgC+)r-g z`c2L|zZP}bl4x2U7s(2vpgcktEaFU_&z9%)bl5;VkH>L&n2$#D;wg*^Z{_`BmxfGG zso*s=OMvuT*c~^7iKsI=S@dOb{f2CyQyQUYrG0jvBe5UFxFNKmEv&K`-P#q1hm-P6 z*qZzC#7rFQw>REKT|6ANqB$IhCG_Tu{{Cz!bv&;pv-1A0WRpXviwojIj0=}F5U-gQ z((eu`5KiQIWo3?G_Nfbv7>vmxp((75*9jAi50j|A{$yhHCB8D_!R!YYxip{0h$$FuT zDb|7}JyuHV|9Ny-trPR}u6W(Z^KKy%mwSAZ;<4h|>{wLd?{2a^X{Et8R*(?0Y zZ=P9tX%;tUeR0-d9^zw}c=Oe;#DB!|J{1!Y;FEqE&$|=$NksJv zi3l)a3GhpjB|x$QXpg@vSppnDQ~bl2lmLD->?D3&Yy9_w7qw_Z=n5C2uq7WieLJ1`*Aw)|Qg=l%Slu|+|506TyN~x;V5~>iE zvV&(3{vlqqH~w`R{@41~3;!oSGWF0&U;EIcQ$$rDQ=$QF9Z<=0A&(_+r^_YO^S^L`Vrjx{Gr{gBfH_@9^*To&N zi)wwfFW#nlt-7$ffCnR$t_Mqbcj3E}-krhM7LTs@+5xU#zdrf;3*7$u?~L631Ij1M z8^4i&kx3TgwA=9p@m2<+x^p&iPkd2wZn%~e(zV3lv^{b;Z)lFFf)vz5Hb}DYkeXWY_{QXBW@P9DtWbcn}RNQt7{kCT1b!V7> zZsl0T#k3(7_expCR}33LeLQ3@?pu=zczQmRGg0+;tt||Z^YHO zsxMm_H)f!sI&NWI@K6!8Uz#l!=l5!x!9($E2EumgN1gUC0fX+v3R#`O;rzX)GZ0yH zCld#5IE0GrE}_MhcpJBqGAC{@Y7ConXh(lM<+2nhP{4K*Vmsl*LTh0$Z4=slyzSo; zFIT%`4`HR}!x~9-ya#=5IDt3gs`wJICmzs=F8xv_X*F+9)PRuGUL~j8$4-q76L+}~ z59IS-C~bTt@Z_5n?&bU~O*$2byS!!;`{ODjIGv+OS~Z!L>;Di+%5f8(v&0SJV7#e= zhLsJ^KYoISf8FqN4L`$IN58t`tDRDY>mYGU{^cwAel2LwjP87W)p*5g7}jM3qqfHj z`7;9&QL2c8>CTVmGSTC;?4;6?frI;TztiY3BkquhRs#}n+?=mG0V~x^tV(4#`#T(q z$yB>P(|d+(F@moqHhQluDkRmP8hIUi7fUmeC z0pzcusu<6r$(TvGUnO8FS?%6W0CBwNh9ZtwViczh>Oi{*M$oA0NN*=YomvO^9PH_~N? zCFy$OWl4GTM(P)idN^iPRZaE~K&~hlMx*w)3RV3!k?U55)487&^%p|2hM%1`+~0^t zj7m`_NtrrkjCjo9OkA3vK$w#N_P9%mC}{AUF)~a?Z&p%Yu*?`b%+-J)7mX2jWJ~dD z5;@^@&nluTKcfuTEjb4z0@Z+f8GziWj1kuj5m)5Y!uuz{BwQcSw5nsylSa0?en46UGVQqX-k$553 zN3&__2n$lZ=`*So3*!MrbcW@sxv!_lpwtWQ#zTr|3o9h0W|J~THD)5zP)5VlvmK(%;>ogFaj(as=a-NS~46kWNk9HksHV}8Cq#Wkt`lvZtY?9Vj6C~^L ziMWuU$GF&5gIFAQDifBPp$^N;(ui5%g*+dQ#k5Yj9~R{Mb7%hk6}kOJa4=`3R~$AM z)02}%d_F-t;pKQlBQ}Kjnows#JR}iP3%QOGvFBkuB|=DwpqOETCLA#V;{JF^iLfQC zOF&*cr~`H3*&I!kN}WPjE)krb!Gti&a_lh^;_~>MA;Ok$KoeHy@wA$QnEJDlxjwgB zH9LS5v}Wh86Ja98;!@9`$ueiq7Is-JjoV8joWvugiMl>tQu!hx@h=&%5Mlloj+5mghR( zl4pYnnJ6~sdR&OUxF)PcTX-p?=Z_h&kGL%n`NEt`xOzDgS6c1P5l^iqNm=tp(Gs3D z6+;SP7V*_Y@C(~=`*dU??}%dtQI6XjMx#aXHME4K8GvpK4R}#Cmas277bTY>dg2P} z(3~UMI>O5iV5*|o#1jd)4SVvseQNG^-JTEaD94>PU}8wmL!C-t5lV()A70OdiS=rZ zUoX3czPQtRG>3T(quqQBIGoqL#r*dZ^1ajMo7d%adERX|InV$5G-FrXryFa+v!b9;H~tWKYQJtU;sk9Ev7{g&1|u zAxt*GOyYqQ*c49Yd16{7CU@Hrd(dHHNQBXw@f3#53<+Q!h$EPr>!meQD+X=Uj3#}$ zq-dh_`D$oIuWF9ms1cf5O~6EBPNO@%<`Npi!mt>p%!@J`FNOjJ-J2Ny7qTXWEkcn`&RIJ`vc4=?B=?6=JlzIOC$d%kvw>&LIZ z{W~l8+>d^)`nm7n>Avq<^?fUN?A6CwiWMGPT6puZGlaTuDV`>Zd*Vxkih-~iyTZYE z1pDj=`*6!%{g~>mXVK-=+&>p-Laz-r<0+do<8>`kWXu$^a7&v(X>Om59!=I@VvbNPwR~tBJ0n zHQsa?9}hnqe;ps!8UA4#zT`AM;z{3)VNbe% zMj!Xrq-cQOlAHjhq9J_N=TPq>-pR*_QWU@^-gEqr$Nf=0wn;>Q6bbNQEfVnmk#9OC zCxB{p0w{(LhmWD^fqKTH03JpHBnN;Xj1vMr$O+*6%Kr~?0(kHHkB9(&naiIQ@PGg3 zzSaAGUV^}*@~He*Esp@sN98Y~d@JjdZ#9s5LTH0@_T*~5ar_x(TkUB5x~PvT>73Wb^B zZ-<}9<9^-eFvH(ghtpYUG9`~02l7V9QiGPGJtsX+k}P!ZCF@tGO$5(*Mu)Ufv;mFo zdIK}nyMd+FTaNQC*@DTL3E$#Y&d`0?%UEGw-XKVdqoR{`Vy+eT;9!mh7>%bKC(e$? z;w`L<6XVmwn{jRRRUVvq@cM%zynCl|_1#w99eDT3yOZfHeR);yC~y7WUH|f}f5y<2 zp8Z#c=?lLs|xfsr3qOo`i$Fh>?T)wVi-f$h!5GG;s zDVA|E*T>1Ed~#cJXhVzJ@fv#Vv>#Msm!yD7HBiccfea+H8o?F=aV_zZzUX@fd_uI81~kYBftZy(l_Y!eKj?7mePbVzb8Xo_RG{VK%QvT|@ijwBdzCn?V2 zYR6Hs!bJ@0i(NREE%1*eD^bg{qIS?(S0sb&jVL*%gLojWRHQI7OfQ_L?T^~N@Z^)k z>9H>k;8{z|LxbyDvD*QI#69tZ`#9#FPD#0)?#qXOb=rJQ8^y1qh4@N*##89`jO4H| zrd?7(B;c{8(MrnC&OGj%w$3Of#AHD~+3= zRjn8`;)JBUpMkQnlxZzTThwL1xIJFR<#wCKM{azd&H@c2r`q^p)bCaom7&t zeS4U!iW_mgLE_B}&{izU*6FV%CxtwcR`U4Uq&~N6)dkeF<|U;ZAyLh#yM?$?x^GtJ z^Ew5J68WVvp1Gc4FglE)BlpLP@f9s-4%^jZUXDUI65ljN++eX`OpB}3VS1jS+AE=|@t2 z52C{^WwgcT6m!3T$=T}uvXv@?Lvd;9Pa!GZr^Gi^Fe9u~#4U4_@VdeHDz@hOYtAF` zpg~1R8C;UqAqlvx0kjF^Y*8F{LAr@Hlf9VwZP<Y@vGaYofWrVoX9ThZZBFOBd z=++jWHHsE9AdH3MT5&F3&%onaMND!h?ja{hGo~EoO7ri41pG~xtoz&Z`Mrv=$;Qx? z2t{$PGltQT6sX~qn4D%7Nl_jb!deZOW@_)Suuop$GI?$_Z5O-9~ChoMx zFyX1VL>1G*MGe@Qfx;!O!RmnLZucs@S7*|x6mDyc6 zq9s9lWw*4U6rT%=(O{koTy4zqpW~cMzv!wN8*g=iU-jhcZO%s7OvPT&A)SrXVSVZEX?Q8AS@nhq+wy8*Vm8~aQ;i2PU}czt(YPuTFAm37aYa=F-jIlN z`}4YGP+xW+yQ+dQXR;!H)F~9S#UbLEcn>peGJ=7)IJ|}l zcG^n37*?inP}wM9L7txzDd%A+t3`CBdFG&#aUXG$D`6hta$M&uUJR$g9NgC*llHx~ zPECZLYJLtLv@Y&Lo$jzwa)8(+0kds*(P$jQVq+n#5AVeR48()sIZO|i!&Hp88@q^m zv$g+<8u0J3+UIs)a@-d-p(U&f$5AjAM@e@(mM1HBi!^GJ95e1=DDHP2)$oFuXfsg} zd$V)Tk-YNUqeXH$NX|K9abYH)ZHp!1k+4FAa6GR=y7GPBsWaX{Tih5XpedZNOd`I& ziEAqAaVW1h=Vhmh0Vm>})Gnz$6k<2AD=YS!72;U#yNTF07L(IcYa-Bw&X6Kv=4WSw zKlMj*`=@jL?cZK-{RjDMY4ZHZ z=lJBc$M@GS;lcC=&pjv;mV~;1Ffl9%J%m@oVi$!%^x%)&;mOXKlW7qQEr>1dMHkJn9ihx}bX001BWNklt0El@HhN`4-?)ld}ra~gkC>vEsMYU z%#VHlI*$DIFMjdNW4!Z6cQ$|NBg9|vw+bVK)!`T7)A(HcMbpp~{$>1LOo{)-QhX-- zw5Rb-{I&3-_*B>&{|+X^U(-nJ3I9+h;rm?Di%6pYaZQb$JV|*$JT4 zr(Knt0Dew#1~^ab*BMU}roYb#pxGzl5j1HJKQB1}oJ3Rj-tfpUKN(=j}S4`txLIDV}2k$g<`pBw=SinZq! zUq{tr*-hrL{2crs69H<#e@%Mwt(^eUyJ7tA-tPqP2!{P{rF^@ z|I@uZV$fTt#s~2m___gCCBXk2zGfue!6nMM4vf9*SP#J}}L+%hNrD)BA9 z9@~lS@gG$O2+xF{t=wV5(AwYokpnc|Z)|$vE5y6;AFIO)zUptH*Es{yh*HGW3?MZ+ zZyx4aWPy~?TgLR98CO$UjE(DeuNp_}rbkF6iyxE4aJf4gTu+|H95;w$M@lE3Hc%gcp2X8)D^k6a%_B?2L zFqKMo++6a zj5w9AxHY$90;*4C1^=!*Hs5zGRxlDzX5jml8>n+JCZH_Uc`~9D2l9qWcLvt`Qjb6zcmglm9q_7^tJ}ct^wChfp!HVO+KM!Zt6zjnGOzarS{hC2T zxE-fwMR2m{E@+C^F*2UbmOtJ^AC^~{Mx7|m7oE>+f>Sk7@HD~k9 zWN}`Ls;I5$hVmL~Q`~3_ec4jH#|9;w%K+z?io=riWU~G)NkC3RJWp05Q_0HlYjL>> zag7Z|aMW!j2{23w(Lx4F3%YYXU(WS>2PO4du*FF1!Gr{)#I@N9f42mrw`k3Z*kt8j zCeBXR8#kh=F-%0gvDhckANnyAlcKIaY0Kjx%M4*xhK?K6XCh6CB52CMQ&pXH67Zke zmouqf#XFKCONwwv&JM%zm@%A^0PKrSE90VWWt`KcipH!!Y|*GB0cN++tWK{4oKKMy zzzJ9{#@i?u$=R%FL;Z9fAu4fIwld#j4BgIXChm@j=yJ*~B^=R`?~I%7qng{NaeSPw z%Nv7L{ki{a0LgKnst{AeNwW4WWc|igOk4c1#1*x5Kzbk}=5}^2O?hlDbR<>CJZj0Uv^VH{K zHQ)E8ya8L(E8VT5`TM5k*NgI1UCr%tUvlcHwO1Oy+ccs@)e(tsFkhNGrbvXmc2qRk zBN0_*=j)y*MU zrZt+0E5->;+l>-7*`kQ2!;CzBH{~^BQwFN4@sQO26QC%cMJbO5DGH{dBS(+)nI<`4 zJd6HJu;>|gbhuL+2{X}hjw05%n+ZoV3=r1GV_L8*Y{*dx>GO-U=k>|xcrPhS1er9y z7Q%~?wf{Pl+|A>1T~=I{)e$$^YZTLS^uvmHTODC@Sf~jdxt~-N;?3NisXmHEC15KN zO;Vq1a^GYL7*Eb6X*@rkLY(4SZAJ*YV^Vl8&DS$A?20`YHIOsZEB2@Fw=aMHY&5&$ zfE4pmByMphtz+YJ%7k?xMd)nHz*=d%pV!A5>HNbi)S{`1+N{A%{T89@b)&@XnYcDT zMKpx%QWVlG?U|TXj$J4yhZ(v5Hs&7Dk3PpBZq9^~&P0$3&%|S3UznermJ-omG(Tw+ z-t#?a{V|m1-kotjO0I;3((}hF={!6`+>;556B5xTEYJ6QDX$v~?!@cpiO+>OXmnpv zP8ZC^XljSJD-r5KB9A1ZW;&1SIof7kJcz0Bc-SRbqCbVa-i#;H{TkL~r>Qei1k&QX zz8G^puEjvy7gnP&Jd+7|CC$V)6pf)i5zE3p=}BaU{&)u?4uxk>F<`GWPrXb$k$i^2 zYZ+L6Q8}-B?&L^-l9L#U+gw3w*kz97w9!aRu{>#=P$aypLlH0OQ^0_ej-pjriiT*i zn0Qsm2;u2WJa{A5dr^P9i+-==@oq4jz@$_U@pc00!*iJ${Zw{L7&9E&)BPLEs0*E8 z7aAq zJwM33Z#4gRBKQr(_3;2omV_H<2y1i@_a{PKxR-sNstVc3;*y)V8J~(P&}>awr-!v> z;&vwDFUgKcO-8k$-^+=h5s$>fXbMlO5-(-K*Hh^V!=X%&sn-(+G3I*cM57^3VMvFC z(vA$D5gOv(HA;C1;$fw4ZbwZ8}ZEVslME zw|$nQKh5I~XD6R$bUG|WWo^cSyxtph3$$6Qh47f)cZJv!|Ht@?OuF{zQfECs+_3oC zynEdGJHL17&Cd{i(XH?sxaNoBr}3GvFMKEQdi+9sjqpO)<9jg4uZCxcH_eYfMp)w4 zavbD$n~F~VRs->#NxngtmmQ|s!dlPcNt668@k_DGJJ|`~XY>2l&>C;X%V-Th;vzoo zQ`rfi)34xTem@?=$4m%`2+$FarDOPceAJixDw=$Ur|}g}`gdsbq*+oVz*RgE|0Jx& z<6*MT;&C5!TXF*Uly8m%=s=w(vJ*gx0(fsEK=XT!H79@vDH0$)$W8zs3iaXR67c_F z#-jnEs(16TC=mi4Rr@ zm9}ZWfv>plisTG%8~?#Qzlbk+C;mKoy%WD1zwftV30?7AJdC$(vw`sArpLp?De<$_ zf5f623wF+!!RLSa`!4;pe?|N!@p9Zv`0?;!NJ_$F6+fCaV|TL!=jv?j-mF!Rq{zCB zem$PSB`fq|R^G6`k(HbC-2(&J8u?sS=1t6*oxP@c6|)pCIoj;!dir2BXBc108_-)M zCxD{ioaOnt9Vj{E9PVhB_Hf11ZLQEFw35Y+ImG~>v)TsB} zLw9^N9>kcdR$|7wx;11g*GA5WECJ{HpOU}`- ztl^D@Yt%nh|LOWCaLW!mh}RTN#bT{-H@f2m^H4CFf&Uu3RL&d12_SsUd{yG9cr61E z&%{$`$Qzh7%iV{X|MWe5`c%-ZN0oRm9#1)r%!0TjE|(%cl0v*S6T>PQ=%bne+Dc4>jifxSkEi1eoC|Xe zNx*YbrC&0NbK`gIP0*f|-W3(s^7(an7`;I??vViAH1<|wFGl13+-~)`e+(HSp0&Xk z=D3pq?5Uc`#=EIrYT!T(V1GqgS>MUmmo~i{GN4zAx6z}V!0WiyAl^u8<+wFFI5b$D zqjJ)HI%K^O+|nhfusZTsQq4;AItidmb4o?kgxp@8`R`7p^Ngv!lLEcbSW*(jv&!fR zQ*w5Cy1w4nrA$1OqI<$T(=(u&!e?$lTxo58uRbZ2hFBSPC^L~Z7@04 z>z(|)b@{xX##J4X!ug5{ZfVN*+q&G&*NhPlxd?Vhjwfwys1jdyQ;9G+COCJJ7xQ^0 zEBiSaI2sM>HDOVvY>i|kZ$%}0ZB#RLvY6|k5LTg}WL@eH`p}?g5t!gUN(R*tx5eZb zb;}tQ;x@aCVp&|PLRfF6BJSoa_m=Q<1|08Y5PohZHk9Lu)DB_2MEJOp>u;eHrLYP^ znE-S;Z{)YzY>2ovK5c}s(kcyTHcK5^!Xgb4FrL>2@h;glhJw1#lG-;%1=QPxCJi~; zzM_Wk->a<#fioK@cd|Y6J_@a(PT(D9V^TISml+DQF zba^~-;J!o%+=O;b*5kfG!^FK_FiN-;U&xLiN!h(D%*;fe$@xC4d1lpRB1&rplKbLG z+>dL*Drx@hMq9XK26~N}M?9)%gfKM&_$&2j#st@M#7|$Ci{bdJgXj!tl&Y9)9&u~> z^)NFN05{}*GQ~&+-d>7F&=)&HJ6f&q8YYD|EF*U1bx<*_Gr|7$&Yok#IV%^IIeWUr(G9`_O29Sc^({-Rs1y>NVi0)F;E*tUO(y zE*{6Qy~}(n0xFQ#uyp0;iB7Gd0e4)CchDPO3TMz6_J$5LYluC>%lSID zsu5L->LtQR31cbJO(~u+12@7VZN$BXjS*hTqv#8Yu_6(`su+$ZZAC+PB@@-IScR7G zd?uD9N0<6MUZ*weL&vWg0ke>Z4z4T2OT>HjXd%25_gjU9;pI%cOc3(Jow+ohmt4sG zv)45=7&aI6Iu)_cSS(?y#!!zTLvaKH_Jk%BY&3#ab=DKFD4RuiAw}o7m;1*eBe5U- zHYAJwc-$hiWdc-hzTVgJbJbF#**5-4>_s^~s|gdsmC%nS6T>9pHKjO8sF$2ywrDVb zk`c!+7!SscQbfc);#IS3lC1bij&!MAoASK4*C~|a^Ik(o*aPvVsSpY0`cT017ozG7q&$t_J;(pu~wn&7VCbW4fqn|FZG< zJdH}DPCH7xry8#lmb(@XVWk(t%lz@JKR*1&+qnKuum6><&+)kppBtI_vrOFc_}a(M zQdnJ>Uf4*XukcEt$YV=FF-#S>jhb8P5?qJsJM76bUc`jqiyBn1Y7z+4wf( z|2_Y4CxBXc6b0~?wftFu`TyLOf7EjxmH%IqM+AUJ<^PTH?OLwXUcX=Q|Lr;ed=Mev z0~`T9h!8M-{2(sjqw=UcDtz;Txqt^A_=d#PPC(WJB@Daoiyk@x{E08ee}i7PEkkd- z?K8x?4*3rJf?snTH+@(9WqglM#GfR7vAU;vi-u1={&V3U@Dt~r|C9M2<3r#1q0=9l zg1_gd{1Y_g4VOC^z_^&Lg`aa>1??tUgR9vZwW!BtNu8FIHT9-qGy|M%87f#WWv9-v z%@`J#s(=<(GO#+;8f@}Z&S38L29Bt=T-pp@gM&8e#CCga!7RgRLnt;oiY|k37IwMr zHL87jRjKZ&zEVBHgXbTttPWCnqw;iR7w^t^_vE|#`O2xU+!~tAjn!|>xUqyk`0YQK z*!>e!FIR`+E9f!VEaG;@<4cm#Znb0ypA>hg-l{q6w2&XbuVv+bSKbI5(Grt_anve| zI_nUMSz%GjI6s)lRBz^uzy>X0BJRi2aXSVqi6^9pfd*VMs!Tkb6$}p_1d~N-cYMK1 z(gr_?P|$!KX#*s7=ij|I4w$rI&RD7!wMfq4+J(*7ZJLw+|oAq*QX+=q|y%^1o4hCWbtv9ld&;LyOZ2xbJY>A#Ft7!L_6~k6ZHj%k94|ZzNVTFy0%V zvRH~{xRv{Nf3BgV6mH5RML7fHsTZ|o;B-ZN$*2TK*P+deS&^84*7jT<1s$G}0HQOw zUJs(EB`F=_?xf(hTA8>j))d-_ZZoP~g9L0H&F678UsqDT)_~;N8MY{5wadnc+cMza zs6!p@IvM!HnJ!=S0XW-#lwq~!(#FRF@UXsSs1Z)*Duw2L? zBZYWg0@8{Y%l-&;*-79=cwHNDNnDw?ViUn&avmY><#E1lTq#=4faHbj1dHccYpyf>^Vs{1*tMP2k_C06}6>C+nKV`1Rb-90> z%0P7`6RVoF;^$Is|B?LqmPAlEmFsg^KGx-9G5>#Z zY8Z=`QOWgGkepWP^SoNkpDHWqlK`D$p_=Z_lCqvuZyM2|#V8KMV;YIaRE!cj!n$|` zE8=qoF~#*l9R^u{BJcPRb76af##63($#qXJ?)TG zkjViiz2BrC4Qde?w{4QH3iKR4tEjs!0WN7JYgx5fF! zFf+{>VQ<)_8Iw%P^HUA5mit#V?oIt6Ov|rF^LbCt{bT@)>Og~Q&PmQeFyfX9PPk!| zxZWfMjOL8%qj7;E1{_k4+b$|&YdED9b;Lut9up*$GOMdnlt)ojpEPgnlrrBJ;I@h( z;`Uq*g$#r>$7EsuRM@GBurLF&%T@CFBt;O_Rufgif&5=@O8qz0YuW3#m>r^?_pD*G z#mx{lg~OV#IV+g^GEhh%CZbI>EP79WDQfnb6b&_a_5)cnP2#GKlDRU_IkWOqD^Vx~(?(i#%zUA6-^5-}#8 zR?QaYNuj($r*_Osz>*QAFkN!is$x<&uU{I6io`SNcf-1TM!PjCqQ`(f$+_xEKCg)w ziPOVzjD$-PA-Kf|aerDrhZA{R97_PdVQ<9kD8>0<7V6D(7_DK0*|?|K7?}o4qjJ23 zAy>!y!%nmq4O??f?8HgKIZCCNoeXM3qhh>=VSCej5uXoB(GgCBOK4Gw!^GPF#Xvg0 zX&n?6tHv^(&(`kscG-_gToY$wQaI?CM66pz+?9z0X{-_sWJjNpTk&=DI}kQws*>b@ z)~JrSL&?~C>Swl5br`Tc4q-IT%LJ*NdeNrIR^kC8MhKhp{IOJ;KWl4=hdaHgA0^v) zE~pD_#65a!C+w6gxhJZcA^eXX+(9S zPXiVj(U1G_H7}zx9E@YQp4YXlg2H)NQwKF^k$)P>sfGxWvn))LQ$?eRF_Wpl!D-d+9f zn#x&jUi{sazk8Jb?kA^ho%$hKZ?v9iE%DKFA3gBVHB{$Sk5^wNEDu}5Jsukf?O_eN zyd3&5FYL}v46lbe%rIs$PUbZEiT8jPUV4L5PmZs#$< z^F}aTyCtYM&&#>qpTcAXFJQBx!@1vYLWes}VK@_Rn>{Z@x1@FXsDc^zMSssT_zA16 zWa5F&^`GqKA8y(B^;P@X*zk`U{`nB$lZDNX{a^Uecq-1tXT#6=YsBmESe!|CG5iZZ zgvow2{7vFb-yeUJ@T@C-0Pi^G!|04xeU|u#VU;1my!ac+Xb(TBA`t;@p)I}@egc}E|Atl*ohRP+srV~|zZ!qv58-3s2f|@|%!K#_$q8UDnqzhX z2(!(>u_-?|c7)hyahuqw=VHPC_Ok^xyCmdztQrILGJCnckK^$@YXN9^@X?o1z+Df zc6qD;hvKsM0k)5e%#h@xOtmbFAtw2Go=SgovJSu1O`n8;d%$g)b&s#FT4C9I+%S}jWm zVF|%3(PCL)DS|1M5ShUgVF|{VV2s-g!(aw8OdI#~^z`)f^t5~0J*}ReJD2O=%pqfblrK#p<*6)7BVPFhXCSx3nvYvOPvf`3@Wj?xf#|8|< zO6M?cb6RN^0DfI6Ev~3nilVbeKc<|Hr!nLS6N)8zQ3N;V0A9pM)^j!kRo7!#+=dbB z;spf=Ybhp+a=+|3s-=@G8l!OsQaM-xl^uGbf!#$((^3>UM=EkAEKmX$4}yAHbq_`P zdreEJTEP5b^1RwmJVVTj+haGb8#Jo`|1E22Zi4@vx!qXK8{0B~JeUCEv|)p2uiTqJ zMNwkZ&BmCLvAT=O6WMOPdE|B_P(SNJyoMLu3L?;yQze{BE9o_C`HYmiAk_Lgp zB}GOob=Uy$<{Sy4?R^xL(%!AWf9aJ1AYCYclCz4J#h~k|3gA1D?fp*KFOFrK*RkCz z>cni^X_R;)4wt}x6f5!`i!H%vC!(9$(c0Ayt>j}q*7dO|D$iG!Rqn+hFGLBjAB@$C z@^l(k)pQXX^Qy09T?XfX|1w?&;x>1q-TiSGv#zEEeD_?ciH`UEzO`mc=Z~aQh|^B0 z6U#G2#cXTx@2nbWy?M5uebj9ewer8De|P&r}3gR59SF5wz>J4^>^Uv9wWaDOVU}{MC}+RxFm^ zsw^=}yq$>(2JBJA^;8^B8B<564rSaoA_4JKeis0=N)%#6r*VwML&k|GVw(o>V%%w* zc+4sjZswk^C-B&j= z^15l9&i){U~^=xh?Y267zEX1f<4xm}y{rM_`zwts(W^6G@+!6N}!B89pYh#&Fq8cxnCJx!1sbNZLk)5$hgIHU6Sr_qOQP#ym zPa4B1+fCw3++~F5^n!6>vB!)OE6ccw9*-EqkU@2vu*EE~GK$syC5KA?*kO`*$aZyH zjt=9*%WF|!QbIEg%EQIGiK5m zV^|ZzcA3S&SZsng6;BnXlh~aEuNmmq)UmrGL8eyk%WCPypU|*~=zzwxk}gBZ-cu)XYZ@@w&3Uda|^G^*PSqKsjD4 zwaElA5>J`LwtSi{)bi8$V63i{La99oCS%2EB}z(y={TTIQ7X^mcq@((rCiH(rR<+} zJ#iJ&PR1Yx;t|C;V%!Gwq%+0-oZp|y>%6X&vSq$5%;-0QZjZ+bbm?}ln}p!$?6qj zxn{aZyPrb^wF%yt9~2$DJ0P@_L@{ z&3wM~XxEJi2V*_XMIpdU$BqQXx*=BPy!T9TaL~y8r=5&KESbvrVLI1AZJNYJ#UZCv z-_|<*{iNRVxti;o*%-!2`)$OCqo&*>zP_JE+@kVyqG=)yV5T^fs45O$`Q8_&v&S1b zPNq~Vov0g#y_j(+39nOg??`p!eXEKsb40x|PW$722Qe5g#W?1d6ccg8>|DJlsVd5Q z3ll86Yj7HYjj{cnRm+?@c^uxn)@EWiR8310Gi9 zsRdZ1;j!$S;;^&W6X^2j90Bzr+AMYm4Yyf<>7=sW=AgfXE0w#Q;lEk*_|Q*$iXY#6 z$Fke{i2u3ybn`P*W-5Jt7@v(#c>tgGFXP8?(Wm@1T#lphllWan;}PO=9F67Zcg9Qj zyp#Sre9`at2k7^2{T=*4oU;Z)F4}}I`AlpihT^la8DDlOwqV$0zkuPmYzMyL_hKhT zT=kCfezY53(;vT#G1vW{__{yvF2)rnfC*o6jQED(_%%!#aT~8`5 zx5|IiwRpttIE3TY#a7}>^fccgb~R7MQkwTS$D1#4 z<6NV9V}S1*u0Qe}eC^4vE&bXvT==yMU;Ol^`O4Mdm0y`p^Oa_2a~ZMM8P{;w)i{8f zX$R3rtj|<$2!DfJaN&F&M@2cfy`1 z%B$|^L!YK@oXG2{X^#@H8`q2RIA8)@nN#_UhDCU@v{P)(+_%Gd{@K`9DN5VLiuHay zfy5Gc*_ib^l~8ESfZ{N4C;%YwQ*t7p?Xd@4?xK!f6dcQX zpUIkcB@tvM4mpp(c+eiqI2-*Kvo4ijZF36v79pl6cgk@uCxK`~lpM@!)mBxs>GuQi|X;;vpSi9G>rFD735yir|5V@p+bi@P>#9j?zRctdstcnK{ zaN3f0U@iNx&8cj))n&ZJV_INDQLYwXxWG?CaYh42V~r_drBmuS?G00?yJ89x#`3;w zGp^j%Tgy0(`||kb(5@r@UXQ~{Zul9D#SXLB7{v7 zM)c<#SFXElj%qSxSOIQ!DvJ3+tSQbKHPy7{=iMB)gJ{>D%IlWJeW7N}s3%3Mo+%6p zFgy|`OyYR#HIB1!y3AjNFyZxh(QE_ln7VnIHG$udvJ zj&z)vNNfAyq9`|RB9-;+5F4yBORU#t7W=F>Lp*Lm6W0m=?Q8+YsZs2Wy9^T>V!2V`#dx*=p$Ub&9nYA;$vBWizacQ3DRr*JzA`T3 zN&@ybpKPO;(H?8^dd72nuFvuCq%yA+LSiF7H$0K!=CvGGdz1tU`|^I9$-j4EIsxRP zju|DMDGn#`h=)uPx5r~9aXL1t<4h_#uf@T9&d=oB(oEt}Bkou7+wWBX;Fp#AyEUFS zE6Cy+AhCP517&ctK58uQ{cjKoW}DOT?biL>STA5UdXw$81myAn8GV-!QNISSF{ zvhx@+qDefKwO*e9=Y_fTXfx;aJK{OiUGsPupGGmB4p%Lr;yc+2EuwLIrZ|~$!U@bc z7kiZT^$hW1w*4Df@2lE!9aEf`hGJRlz+@csijoSfZjQhcFXejYm0ZV+yQ~wFcE(PO z#ts{m=T95yf+AW(fHQNkteNbuy3-i8-geA7Z5R`|I=x#Vn6@HU9lFw@|3X~E^;l*# z8cE|B&UQGW5QY!s_?>ift?~ZSo=!AVuEa2Q#hVUdj~Tl$q~2OzRXW^sZ83MOLb#fW zT{b8Va3_@cs(}q=Vg~P+iWw}juu@V#Y>hSOkH@{Lq!cK}EdBaKu7~?`9%vYeevI4W zQH;i$=_pgnIkNOizHhlcM@VfEO-7th2;jSw@m^J21X}C=lIErmPMaoNP>5$8*-nUK z<-IJH=X^gtcV|vjdNJUUbjEo#HekMm28ca5FCWSKq+44Ozh{i$YCPmEOgS5cz|f{f zOyi$p>Y58!;{jXHpI82-nn65nL~#fjQNu3AiA1s8-ERLem8pX7eu^?3;tF7W#ZHEFXKPQWyj(%T#6&{u%i6`o4DpT z;^*JD{rxx_f0y{8^YJFG`>psN6yX0K;!8;c81h-0bGrp!_Pg;<@fDwo{|#Sp#akHh zd)_9#>htk`U^KqqU*KzgzeNCue}!>hbQpgaL-DUM;mb}ClfDwap%4JhV#?Q|58w24 zpTT?n(C^|s6LD1`ynX@SGUX32>zf8qpCbUw7*z<$U&nXM`a@;@n^b`RsoYNIxc-)# z4gf6zK;(ROlL!!V+lHI*$oI!3zZZ~y3*i5=R=%I`^!xq(-}OAV%B}Jrb*X*-pWG_9 z%D;E{eiQ2l0srsy{r5`+@V$rt9|Zn?;Cp<|ZKd`38{en?x5};ZXS=-L`u{^8`2GfF zOu3G4<%_^%D*wj}I*K7z;~m8Tpq|?g<5K*3diHr203iz13&1$v^R5;5k3zUt`)0cVST~gcn)p2>QKcGY%#I(qW}( zEJ`g}L#G~G^@2Xkb1(yH4;oVfe`nEeP#+#wwGj6jbvO1KZ~`?4J%Vf6y^Rj*()6yF zmCu?rsJsBp!>*F^E;hwkr-&D$8r{V6aUptWJ{`N8d$_Ue#sfF5(0IEs*?5@uc75xm zZ*8G}pnq-uN`CLDD=+-sU+3GWzrFL@eb^Ci8pM?6T_?_)PJrZ!ehkMp&`3SpboOJ; ztf@j}z)ValfP4vNJ*=q&)C+)Ee!n+iuT}t}LtCXCla9q+40tKlDFlKYZYpsO6u>{u zr80jqcACbx{fhnQg*ZTl>*y=ziM}}nNXgYa>s(yLlw+RDx|aZO$sKzv0r}lpmeNIm zIu>tu8xyv{F~SXX9v&n>OM_MPqnR0yA~j z?8j`3>%)}I`Y_^3T*tId9hlL|72C2{FQ(UHaoA1_SZOOd%u9t&uNq!U!bvKUE6-}^ z#W}~E;3MZcU+R1gKkbJMV%nxT4P;A^)5L8hux-7KHV|*w8r$$-4BLn6CQX_P=xR|0 zW^=95NP5h898@PxTART4bJ~@F#&GWSrZVpD&OM7Fy@dJ>6^qN*p1{GRVo}8t{5 z9YUvST%fY7vZC@J&2`PUn`ij=;g8?{@!eFnd}woZ9XEF0IDKOe9H1LE4sbCz+)GBR8vlr7jA-2zr8io>Z-fMw6@pimp z2Ai$aK$qLnVWg2nj-ELH@Np%eI+@oyj)^?~ba67UEtVI8hnLiGXikq@%l}QMTtr#pz(XlDobHn2X|g zFbP%lq8K;oZnMOzMZv6^O2UR~3HYy0;zBiZr*^a~++E0i-&@)zQ;-zrh0>c{sk~^FDdKd_>wTF*qG416&*b;V zOJF-*H1=Y~vQd)0f+O^1KVPKDTH4wgBCp+`siiDFl`F zIil1ebfrS{B)aonolx@lw!3Lbz2CK*kFTi{Z#a?jNJ(We-wq9o#j{X(#$!5&OWrX{ zWmO?K#L0MEjmlz=X~+D^`%CqQH^(4;e){R*QEhY9jY=+7mu}2-x z=BQbs9{t&Wvw5Ax38S;J0d1~ZjYD45B<_fnW~jWG&Ref}O}mo&y#TkZk$N+hSJr2{ z!IWKb5>2z_V_s~nY({TohZl)mNt{?*`nR$+pYKcZKIu-vSKX97Xz0&*V>a*I9t#o} zE&W=`{YjV`^qe~CvCUB|s_ZZibv1Vp=hX6@qgbVH$$4>w0fpeSA@-pjZ&a3JUS)kc zmo3muyk3Cf$_u%Ee8_w~m`G=-k$9zY7v@*CDa5y>l_kWXbgH_e%%_zDxpJr#0)|n~ z#X7XdBb7Di_DW?hdMc}9oY+?gXqEl>JbETm=ZxAAo3X%TbXL|<=`s^zcqE^zH8YiVykS8MV#Kz} zKD5RD*oe-`5bxikZ)II{W_?;XB7f^Z?02Y@71Lp7Ug}t*hHlR^|)T% zuPXQ3fy?>~5F28z-Mn}Gy@%c#MHT&xa10zdnRSyfYa#oF?TC*k@M(?aX*HR%8zDB zfRFk-KAcI5en6*%WgB0{pY!3$y=e1cKaB7A0Y8XZZa?JD`N;dWH$IROpjP>T$`2|; zfFJP3Qvy^})DS9eD5(L;Jabd|UwPlZ$k=}6yZ-mxrTp$@obwhM@Ske=|ElNyeF*}$ z%B}JrMY-hwaI5^kS^l()s_(bo2OR-E=m79R0>Jl51@NbJ1o&X8fDdkOm0RUjd4FjE z{jG)Zgs=KdVluuKeee6-S6z1i@A*btQ-}b+jlsC=7l=_`^eKGSuXzfe^BeJV#2@&r zc#`U`R9CwPUGeUXU*l&N{mivbKENmb#=^Dpe-Zz}e#h~X?sXVPY<2_}?N5b%v0)rn z0&R;GE8aJ}SQH;ln^7WTJ^%n907*naREO)%*`owaNAaS*xj@qbtV^r7x@-2J%j*eU z^kpEo!283N+KDBp&tByLOYn-ft;V2|b#A2*PvLgk&BN_pbT<}RsQAw@wwmm-0ytu=NVu9^*hGLh;?z=)5J0- zoF+E99;eW4$^|e#1G~csbf4G22`$A$0XQ!wa9%U)EUw4BmMYeY#jHc0W3joF zqugahiBKbTloDQ$Gy|sNWGYfOIf4!yaS`JQ4EAN<`*JGL#x*M~V5%r>YcUTE)fmt5 z(}tJx+0sbM*x9&X68*6}p2LJQu@wvTRBppdreczKH-Z2546xN*Dmhl;l8dNn&s@SX z8*gck=?pyeXjHne$*j}FS|>b@bN0qS)+iNtbNg~LAb6?-QsX?ST$|3o_od9)d(t*c zIT2%uGNp#SisI;M1{&MU7{p*aXCp3Il2*7!;xtZb>LyBFX0a!0GV6K*B;~#y@JuR% z=0~v@EV)>VI#-;UBW85v*jT4Q9E|R`osWF^Bd0&|t9YdHs7EnrGKv*)%j&;4Q;Zom ziF3}nj1zIzX$&L~--4D~6A zJ07vkH1SxRG>y&}NNfGt9C4s1!P;C^;P~^zK95;N^S0)29OUE2K7M-P9;%IMvsx!! zu**AGT>`4HCC@u!aUnLvTZSH=gd8bSei=u4b$a%k( zq1aX`1X?Lenwg`zBZ}gvYC=(Vm2J)^Np#vAj~XZ5u+x+h_$|uJi9Am$wMV(<3K&{| zsg+7#d^Kh=SM9kpfjv@ECd9nB(PI5V=}b-PJju_^L`6oP|uscfygs;*ef7a*ZSQL=GGnWfI< z_4ef$I)V1AS3L<24ehZz$bQX6>}PNwDW#geN#mc~7Xu|0}~{f6Q|;JlK- z{D4iyF=(SHVvSktIF`hnsRaI8DQnsj5UOUty-hXe$eKa`X)~!j|611Eg;-IwBis3| z+`m7+-(Idi?k?>S_m%65C1wA33GJ$p^GuZ7xaGc}E62A~Ko-mOM*gm<7U$5Wktq&j zDx_iwUsV*(HR1utR2@y#IYsn|-0sQ!H!An%rgEON-EQXhRcCX%-Oc-tYW8<=1{qXK zr<7U(M^id*F?05gloTSdu{aSpUivGZ%G4mcole3@Ne$7Ag+_2B78%Cz*lrq^Vp|~^ z#Y&U7n)8SxqEyonp-@B1bH3Fd`?H<9(bOKVLn zcRiO1@{?wWC2>|A8*{}noJz={Od`~-BfXQ_QZd(=jvq}ARnUV>#a=1aV=|i)9IBnqJ_#y?ICa&j9F3EC-1gX=$7wmwEG+eRSy8=?5F5Op zK`e_yCYW>Y>C%?Ke+w{d#)kacKE(-P6jw?zlQ@>CP2TmgCeFr*Tt7Fn7OmE5mDW?Y zea^>l0yFyJdBrk6*RSeIN+86_^3!-qD-~Byrp`JW=WsQ8Vi;3#+|!Da%(y~mMm(MC z^=#2X6`Pms)gs8A znyYUa&;9XeEJ59dp7E zS+g;MP7lOG=&3yB9gM3c(W12LfYy6Lizs}vl;?jf$%RvK8RwjgtvG7LG0f8*7xUMh zxlfA_l!W3qhvB%xe9Xi_ipET0d(#Q;)Q2FqY0eOVUATG*i@-*`>7(n#lLD zK`qi)%_fZ4{i~FzT$jv7Sr=7Zj`PHo(hspV&o{0S<-Mnt#LAI) z8Kd6F=UE~2)sjN^cGyc%Qzui{X^O^?y0nV7;=%VQD7V_)`v zk9r}j;3g5ED+!Wy7h(?v;}I{R?rNsUE8}>6Iea{+anY0snIzm5O?=HKJ@osGYXFE|~42SYyNA1O`%|44BF_{YSTU5c$3_PenS!#)=! z6~Gn$JHG0wUn0KhTI|Nx;tPHmU%QzKATkxeoD;w?-`@#fI-LNf|CkfNANhUXl?uR@ zQ1@Q6QUQ$m?ogx_}|)??Hc{R%EQ8BgPK{6_q3{GQ+PDj(WV{i(`g z8h`gY+Z&(cuAl$0*&lwFhc17z=P&)p`>Jy>z7SXNSNvB#j+eaS1>9|oAsjGc1|w=# zpz3Po8ojKF1y*Qax#by_@? z8m?I2E=(Htx?)*+8@gS08LwDs2eCLV#1-OVT#UzPJ`wvYB;ILOn-^%#-gxxJoiwgC z7B$u|GdnXrbAamyub=w;JzU%M`L1hQs1JX;T3?OhR(lld>~~rTOT3I({c!?A@u+r8 zyP!_$t7MpgK8oRYIBVc6ln~iB=crI{Rn^PvwVkDN?fKgATrFEBXHv!}pC^(f$xr=TG zcgJzBV3F}CV0qV^t!RV9dTajNUYhE#Xrcek+QX z*0Cnh?(PIC=O?IFOF)4pl~ozw>rH@RC|-9KS1k1uIxWa;QOq4Lb&uEc^EC@9^B@j5 zgle3P7jevM@hl&Cr|UPn`lu|oyz(d}V$xXle-o!%Qml&~_7<@>_QeUz)0=J4%m8U~ zZoI)n=7K(|0L~|(SX@8tc5Mnlr2r4o615TA(5BNlyqibbkpSq~*pdW}j#Q9W)2gyz zC+gbc4m8ci39Pd(71GDuN%V(kqj%ZAR{NW2g)5~JBp-AW3Q8D|XU zczO_{o{vMA_HHUld;dg=NDEFlUdDN>D3^0vB4zK8+RKawx)u9+UmT2dK3Vlnw~Q?hx2;(=lM66>y3xAzwbr6THJ+x zwRjLCO19)~H66GfC0u?bcA3VZ46z@M(`N8iJZzMBIo6mU?un<;QDrjobZ=CY#zQ6L zjMe(l>9z#I%ez2_0z$Nrl!B_AS?>$kj_+oFm2EQ~DgBo1+DxFoDE?;EJ)>B@uU7!~ za^IBuzDFZ=D=GUn;b;}zgz zSg%Fpb6i2Ek$4WX+T%iwhw}Uwh*eqN=?666mj~rq@Ox26X6fTmfv(lg98ZH;@A){TQzs628Vsd#$<}z#DDh-GYK&MPyK+7%^{K@fbtSiT z588FbMfB*5#bsQ^9XbA5KzeIFo^_K@bX)lx8;bKq%(u!I)}$5v`6MEABw@5>Ha3Eu zC<@K_nWCW0_Ux}?d3|LaP>4_67U&|Lw8A9uV!Uk%Z)batX3CK9L5^uzT2lf_lk1#Wo^Xj zc)ol&lL){3m>DrKE;7+n_Vz<3gbcg5=^rAM4e0>peRZ+!5L z7>M%y!H zu^+=8ivkp0a9Wuy+lb|Py&LA%{bh~Xq0@CtIUQ>;5gS}Zv!oORmmNY^5)V4E7lyMvyDg|xF>IS& z^v6nl=rG^{vBMz5qY44!jFv;h&6VBzOY5DYt;|Pp)cJHyI+0_dkwl%FtHW}fTD}h~ zj^miN$5tiv*8qC-R^|~iNpQZbymO4Z7JcaVP#jTGw_Qe?j3so^QykE_8Z8 z6Eo3gpE7R@6U+0tyDQ)OTK(UZ#~aDifKzcWPNJ^2(t~}45RiuRbmf~=O-H2%V-C22 zhVu?736I){jk%6ImiI?PaSH14RJ@JpIO0Vx6;s59d=G8C@3n~c9p+UEaeXolW7=6S zE$^**?=>#`{ZD`H!arr`fuUE1PVw!#>TlN9aihQa@{Mj{SM%N* z<20`~?`@6|Bhhe%m~Ug8!)1@yho|jwPH_cVs-(QQipx%V08gj$;w}yAF>R@pm@tq| zPtRC`X`AiFMLdmOd)$X*IT~kN%=h}GoH5Ks9QlEN&W*p-xbHhhsNAT0)*ZMIzY_N= zDFN;#e$T&&mAL4TzltyTjd-4D0smM1TKp^q{7w`no%8WO;Y&W_AL2`K(MAlp7@IKU zv#}XNajBIGKp_HL_6zt*T#0{%ulT+AMTH3P&+%1Xup3{~AHR&T6zGf_@GDA6fM3Og zA^#V?Vc1E<$?LR21UQE&V?K@P824GcXTs+&;~PG&5CQs?lmK7EtZ75|w)fJ>szn5t zog)H#BggX}DMWy8D)Ghlh-Tb~Zz=Hpw-q8lT_FNAKCo>O0B(@q+}y?=``jV`+@t~g zNkoBG-1AoXvrujk0dAE)6Q%b3e{!qbD&MpGKbppKlQWZk1c* zPgACS!&Q81j_La?U&DLJ1pbDv#c$&eQ}O7x&M(H_!7n@IS$xL5@vra?{G44x zU;O>}uetH<8%w_Zi#)w)<=6kqUt-Z8eB#gj$Xzr)(foS6MD?eupR7FV{eWn(Aa7Ik zD3v05Y4x4EV(gAV^L$g zv4r|qeYQTs#Df#pCm!YEZ+zyH7k`Pb9~ygW{4()mT#bczp=cQ6oPl@)?YeEjcpR;C zD+a+$%+FkcjSQ5WD*?3Ftx@SlkK0N>Ft*!^NiU{?v4numWPq`ytZ(LV#^Z>i7`4j< zbfgh>%do#>eikjqfx!gcr(&yZ81Y(cbTcq=K*>3}ITh)hdJ6FCQk=z@9iGbT97m@y zy|_jy#v2*HZmaZSJod+gVs(8+0Sq3+)$+S|IdjuLsZm*?03okqCXU;QkyK)x$t&+q zMbHi<2j{TqN-w73aO}jGeQBLNRq4Tij+nuo42V6IfwihObxg#X%vE37uV#KiT#Y0M zXes83vPDr)Z;6RmL%d~8Y*lh?PoqOmhMHOdlJdWkxxI=y@m2;TCoRd);gHLivCaw1 z&j9=3OpWk*9&12h`I+629e_Dy3H;tNZr<8zD3-~^U9_^JLG@Oo6tcz zU0JWAIVLu{X(ireo)>V<#iF!|OQwj!89u-0#Uzl;(}qiKvj_`R4JZIkanPyTsVI(* zqDM0=-wOoLXP(=Mr{ig3XnIl`7TRXY&79zMR}!$fZVcTzDz}&V$0H>9tE{Ap(yErq z=5n8O88v_*_iM+F0*J=GqM&!k+h)-1tXT#2=*0rv2`HaPYx|xA{2S?P(bTe1pU8e0 zRUA3mbNr1eaMOJBr$Trv*W_xqCSQpoI<7#C|Dhcn_g@w+k<53Gu zV8HpzhJdr?bzsGPj*I|Q> zYA2p4&J>lGavtf7CpGbimvv#d@~DMaW}zB-b;S!9H&J=0w6BNq{DX>8dxJs%ywCs5 z-u*{uecktgf8B@icr+f5$K&yMOfjJtV~Q1uF;-Zjs)VXUt5Stkv{dB~%5o@GbyQY| zsvK2Iw5*OwIa-xcRn=0W!%~)L6+#H1tU?G;38ffQf-u1tPw<3}2_26olgVWKc>L($ z`RpI}J|kPLPuiY#&&h^+j?Pya%{zp|3DPHeHsDDIDC#!0W3r44h; z*NXWT=tYa3xQxlP)HvGBNpt1>;CmeYQ%FMGKnR&8OM?wNt3q3DeYL4mK5U5y@hZ$SsWXh zD}9%>*zQF$(4o&TvDz+G(i^c!1COOcreoBMl68N(If7Fm7`P=z>GTlWyilSSPM9Pu zi`TT`O*3_2B0U_}W$Wrp%&MiQ(W$$5l590sCO(W2FWPH@v`wdO?^#*jDm$$f&5ZKN zLKvJLnK*H{IREUBoxE1+Lq~eV0{Q)Em^hZ_pY*8gX!1%S1ot}>*;(RN+JHv9>T&d@ zE$$FGjc-WA^^cZGqbrP+*(oAC1Pz;mSY1M{RdH1aDXePkLdWXT_nu4MBNR91&)4mW^TdHTnqDV8kzTP3%Zz5HwgS9mH=pcSmjAtyfyLNt z0&QtmoI=%XZN$r}CP-Tg@o8Bhs8&_X!DO7x#MiXcE#kPE>7*@k)XZ*edhvwgaRE1D zLz<1*=?xc&H_c0(n9zt}%HA?7&a>l4_JA05*bQ`A>^|9v5B~kt1l*O0}u|b_I*IM4sy= z(h^L>fMe)QkEC`Csm2KLd_Mp5O7Y@a;!x_t?Xs@6#i>+BS6Vsc6gNrL{(156u0* zUMg#*t)BJ}X-T?Lxk2o6JC>8S#Vcu?crv`CXY=Zn?F>lXZ7{@UW7{wqKEIImCt7a#nWA7$F#nD&WE zJN181|K-MyV}W0Zr}1y&7u<_$>7U2r_)7ds4`O!u2k9^4cj8}LfUl;feH5RHFPTMr zJ#C6jqz5h3g+A}3o%n>$x`t1f>+7-;z!lPBpK%$z=A?g$USG|T06raW69CIVG`~YW z?Ih{m=uiI_deRENh;E;X!}*wA$4843Kv!ClULwYPB2JTL`b7Hs=kIu9*AAMRTT73%N(-FUiR`;Yu_&|vSXz{`Fe$|Ww$Pri5yz9gAx_l4r zxZ}G>B?_Qonh(nF6D{7021vp*8Mx1=KnDDiG=&It& z|3&*@Rx3a3=anDw-_zdr-#?51@L%c-@IHdTloLSB-FCPAX>RY&!m1aGuBtyWKr|V+ zBZa{`>bBp+xBRXnxLp{>-|&uJT=B2s8m`8f_%yy{mw!a%waP#BkGNBSyct&erN!bst}= zU+?fgV1AGMRU6}8uhwPx!eRvL;6vT}NzY(3pCEBMC&r zx2(<9`i2ytJx%}sAOJ~3K~!RgtQ4$xFZ$rBx=zeei!*4|Q!MHC=7N@MaRs|``7BQ7 zf|05YE;NiAM%HlU7v0+T z_5amuh3t*k~ zR94Q%rb4tCEDD_t9mVOOKQ>~>Uh8C_t*J6BKu7_ObGBu>aeFWs=gq@}74~9WEhez7 zC|}+z^UJeS8n@oKijjETR#a_?o3bM6B^h|VM%%%Ae*T{QIPYFh;T8Ms$7!#)ip!-y zbj+i16bf+H?B`~3YBOoKp6^Cn@OlQ|it%>S)u5ThO`|B)YDI~1O)FltNfjFkur_3s zcC;HRR^Tm>6+8{2Xen0Bt;W=FE>5fAl-s3*)vJwo%Zb=dr6WyGn^^EG3;yDQg}nWd z-}uLG*KqH&HLhdW&B#`oJW@u&r1yZ2=J;q9g=+<(yOw)Bo{T*vu+Dl_>@%k*iJO-C zY{~r)Z_0|Ot+KO4R=?gfM(p;A37HVmAro}2%LI}=GC+M;w$@*X?(+Pe&>chA9~+Gm zui37K+r@Ie%|t2rca)6sYH?s_nX=m*K#SJ6ifSBCC7vmiq*41yfxM~AYLw4wnNoIN zmw~*K`Sao}bQI;}a8~@s3-Ll$>Kc?4Tf55hRV|jrqlFTXfrQDt9-t+jlb`nW=qiBA z;W7@#4Vc8q*l!$dHmjoUm13RWT3kIEuE_+Fr_0D)AuHp<{Jg6=yM4h*C_Z5-s6* z`T3k(#{E2W8S*GDxTTAD%o$^tSMJMvH7%rv-KP~B<8&rmr3WKFXYFO4$os!axvm=N zoa``_m9tkZz?n=)iM{$vlD5VPz3515w8``5Fy`qfkz!TTQBhBO%J(b+C-qX|CODx( zo!H=BjMg;^o}c=|NQVST4_-PhyXQ zI*Fy(fhFy;Oe-Esk7<)5WE%3ikcmf=MX5bgFGlT%XE5nvS}yO$)}o=$W?A_^LA+G} z$6ZtJLwR2}VP3q35wGe%HCCo`m|?H!#9L|6l;cYqX^*@IT&OQDW6T*1^v5Hy8m;MU zI)qmD%MKISB7RUN_*BaKLc?2e0k<5=<0GE&I%cIe3gFspIt~{?^1`CjZ_Xzpb`GXR=BIArX%jI)x?X0Qwh|>W zUYxNeT{D8NIBpm{=?N8FDZVECW&LQ^tp(%GdRK zEWmebWP-=8^a^IAm(3?Go2yP*R>nay*rQqDs!z?2`6nG^A5?MLew>dNtib(gZF#@w zErgUz%&1I-t2N>>#vM$v&=UKsz(9JX0Plk)aHI|IV}Dd6o-5|K;yq_=kLc@#klJ{=;;% zcWmld%(T{NBhxyl^j8*F21vK!-n5u_GHr@SNvGp>dIfvZGPAJ7iu5d&T4Dnw0E!Nq zJc;|tzGYIYr*Oq)qcYic5Kmf|_azRPB@OizT$jz z#jyDpE~`ef-ZNMnq%LVO9cP^I3*343&Z~F+h|3|uyc*n2A^Q52gQ2J~5j1%!w#Mk_H{sQT* zIPYG3!#UIOsrWL)@1(yik$xgBX~8GbU)PUMn&<22i?5`Y@y)c_6@0>H{1!eDSL4h0 zc>1Zd2faS+H!x(DJN6~F&`uTi}UqY8Zll~dHeABPuBl;}Gm_EOW5Bs<;;KO=c zKzoe%9NN=dpTj*q;(9rL1|QU6W;uRJcKGyY0Va`%eY_-w*izF~`*W{r~BGfB(k;{y)qa;DY*{&xYPJF zjo)ni&Du5o!vFK%{p|d2GyAX4`k7CD4r^?*k@Vp-n7)a7d`|-uPTB4}jyhWuuQ&C`*1_4L ze10iVo^k~Xb-Ril>&(EUx-A%W+B$4=#2#W@w8vcHg~su?MWZwNVmI|Q_0xA6)UMU) zwS^47^{pqq^#bQV^rb(4{?9UYV{FUV|3c&OM(dq3*r%2r!Air<%NEX8FdDCv0@Smm zB%Xo)?$Sq3=YmhXRTSXWI8_t_FBWCTg`$Yb@Y4B``FXe$iiV~Dk;^3`c8=%ene}iTI2E^CP1%n25XQzNT zU(RbxR$`9F+r^4JTkVb%i`64Vi9cDs=P@0r6IB;t2ZrKV$7CS98-pcVdPO;_UU?Oo zR4tm3PH&^rBhI2OXZ;-~YQ%my^X{rzu`2Fz3st*{<#(lI%eIv}RVxbldh@4g7Wz%b z1>%s~4q!m9r)4Y5tZ;3Vf@yBem9k$3L~c(3of)vIx$XvTl*0D7Q(Dng6j-m80{N=) zIW2~A!8EQrgxj9C6{8N7`CjGWaLqODIdacKZ6~qLECX2SgpI_JxK=E1hh&07*AMh_ zrS#bCLccgw09*xVey~`%HvvxS#j?FtfZ`tOWMlAdylA5l;)RlZJgTKAT`J}G>)tB& zCtD}y((JM9G+?hcRf%&cE2?h9`Jzm0cpk^%XzZf$dO9#|B|my;!Sx?qiC^)o1L%$Y z@djEws#^xe>!nBEgVGd#jrWK*i(OYC*2MN~)$EC)(9T{6JzA$o9k0v4|7kfwq7`qO zRK@G@l5t|civ_SgSH@$#Sk|`MCIi%OmyuP+tzxy?8b?)$ZO#{9Y=0R?13J*9rzrC~ zo61Qqpj~%7i%tVpV4?uzuf+{j;(&z(K+X!Fp(({|i|%qi&gAnd3ZqKw#4PQ$;if*F zxEQ;Q;f!aD;8Fl%q{c5RV%gQf;UVMZ)SQyT3A+x9IjNkUGv32Zl;<7U+>Plg~OP zE2cY&#d5ateuL6~LnevGtTc$XwHZUNK7FX$tB=^KZcNVjZkK1jVO-Q_2C>ShHmojm zmYI%d;7Wd;Vy(4qW0`vk0U-D8gRw>%>1o?^5GPY7r1r=(nMdtcL#GUApDhj)O$Uor zX|qm@7GSGgrX(&gSBqv~K>q)kKv#*Q`F^LqJTBsb>@@Iz3|OuMS<$Z$4LY=1BxiZw zAhtSTAr5)7oKLGUv}PhhJR6T`kha*Yj?-~SJLaTki!)T8c3d$Tm(ZtTh%yT?WTZqy zR0;sv8F@u&q&MVsdtN!ui#Vyx0vUjvAlAit6Ifu6R?@4nP7Btj=gN3k5SL_S=%n`u z6$+8Ip(W)=lUB=R@OFg^!qoAm79+&dM%78XT{MoBak^aRePzAK_n`^YP0H$HTCI`i z!%PzFQNuAqmJpjgV+dXGM2R3-u9fsmc`oOrg(gwgQ>>vIC5oWUVwuQLL$|ZKaLAZB z#1>oCur&4>BR!iQ(}|_J^x>9~$m>~i-zjaAomd{1opA0amS^kev{@$RJrW19qPdL6 z7L)N-?$@*`kF#R!-{N76>DEa+S?2rpc(4!x_UgdXQv`+Ek@t}^WXB%qS(&J}6Sq9A zl~``6R?^WptOX0wLxu2@i8D(|bWzg*s#5kn6W)rqF<$!rXMgTH=s4 zb4eTI=#Nw7Zq(#Am{qz;1i^r3aXYq|i_Wy(EaHeo#xOer@abRy=4Wb;fjnN)LQKYK zH_(+bp=x?r2d|VB;Vo?@v9bVjm+gs{(H=L`ZnUI_it|g}S8XjsuO-D1V51fTa@5*R zjJx1IbQv~69M`Rlw5$-Fw@uO4M&dR`97(fKiS6d2lD4OH#2NR+1Ziy{65neq@;rG- z4TJVMgudc{)vnzZnMgAO7Ym`Hx!0Lqj`gxGc9nJHb#KOD;)2oi8flxs0=V|tEN9Ix zM>8UzNhz%qB6q`B**CNlhqfLS;!q~?rGr|cj`=!Lc7nMXnaH#+J%^68PJ90UCUE~0 zQK3=*`k}au(Ku=ZRXynijHi`$5YL&Zm6YA2SWs4k*@c)h>2_>IuUSTjE3WIp?R-De zDtV7{P$N#EONUW8qTwO5SgMZBa{sF3y>n2#5T0ii$B~1sVR{^l8gVGypE4<`H70OP zi#E(Q5o750Xzu4Yly;yet%*z+%kSw;;{Du0=;|u__?oLFTIae4F=nv}u{Zx-+EB*V zWVv6huB1%3Tdfb1+FV1YwzPsfs~V5p*~ZZHp|)=w;Y-zXbH4O1`H`WS`+nqUK5*d! zt6N{CWlzi4v@OI-=}@Jecqly_H%V`$4dxL2aV|ATCsK}P*=d0pxYvLO<*2|3%uv&d z{Y7&>Y>8nk^MGNQ_>=b^J3yOZPhe?L_z&3OFy@%&e)PC%2By2$1kStZCa!y15AG{O z6y}+UC6;KBg%Q~ir>4fVebfHeX+MfZ?zNZs$L8<*%(wZe!+&+dPkfGlvG?bH>8(wq z|2-X<)=A8Wg*M|IN8&!*8^7rDxRib_ejIb+q}7<0{-KA_A7|3%@tO3T`IzNCAHwfA zYZy0tUOW2Y9b@=pAp-RIYffL@{Z#xWF=V!1BmHRf zr-S%dTHz2r=12TheAK7>3c6!3eia`{KbHO>F=l#k0_aU!@nOC3Wpwyh+Jp|jZvonM z#n*6;uCxkmI?clOO!%|-pby1u)U>BB%E14}Wg|;Qn(b!2i_Gd%xoUhaKPV5b%CNz<(-1pm}Vz-FkAH{T@jC&(=V#-WNZ(1V_R;v2#xKWV zW_)z|&vb3)$N&A3_W6H{wpv@g?HY|=Z(NW6k;X+}TaCwJCyhC=p|OTLbMAE3ALZSl zchA%=@ZAgFt$p_yuGgeEzcX;%c14Jguo6`%T6;E|x;*z3Rn&zgJN%#y(7Xt5`=*FRM|b z+`o3iXmKfaVkCBX24}qyH_%qjr==)Rn&s5Fr64w{TMeVm#17et{&`d# zk87p>Td=d-hZWjW2dXZ{ZB*1_E9y~|73RzJBj?wP=e23a^9J4Iga7P<|K|rgu*W=I z#8pS)94^^u5J$?m?<$45$x=}3HlqOW$4wG@V@I(VAD#l*`ecRFfDGiWlNEZKFvC^D zc-0F=iS2Q*s5-~X_*V!T_1Gx`FRPh?8_zhVN^JC`aV(5Xxfv|k+8x>pv7`~NV9=n~ zkv%_ra-eTh-)26x@ME9)*pD){dTh_w1uA`MLz+Rn>XmqfDH1?y`L~-z;rMI@dQ)#a zY7#rLHMUMY_LlM0QTl5-T8WorrG7i!$N+5YE>`6WiuG}=6x3U$6x+?HgjzJM?|ZSJ z5JwKgORB{49y5*$MZq+)D10k=OFz_$g10VPi+98xoOi(_u`fF=q&{3>iz__kxvnAzAF#|mK9ZJapeX%pDwhMElQWF>lUaWrVi8s~;> z`E%n0CGnbzuE#A5#uKWzl_Nc3wJqv+zGNW}6yS5jY%ORjz%`Ac^j9*S>jltk&rUsY zLO&K2%lIebm{ttBXb9bQnZ$0lOrl$_F3d7nA_nHzEJq*AF5lO*Z_h-7M!a3d@pu_g zv(aX{3dT!z`F2;d6T^-e!{XSjfg1$~Kb@&!@oFI!)yv;^8JV(l&w#?r61`9>D{*7W z*7j_<{%m#MkzPcf=_Tr-VnSBNPGUl58IQTmD?tA_Z>Zw695JBV;-XwUu1XyCl*%~g( z#ERYJF64fg~;&>DfH5#!eHY6@_RpJw2u!>&?)HONHn)+eq}6^Y27^ zAp%TNoGGN~XgZ}d)GaIH@H(dJv=sS?$v@wO$uf^L95h0_I%OrjR|9?7LOwl^_hB($ zv3Al^M%8e*D0{c1&2de3NXge*HJZOCHsthaG(&Wx-&5~o^%1y z+Ss6mg&0|=4cm-?yswOP4r;+FH;j`W zEl~;cQtp9y1sI*DE#Ahkk@QgM--$A=*I|Y({c=Rk!g6)Da6vY8AM}I{Ts5;eGPTA4 zmYYa3<$0l9o|kgQa9>(26TuGPx+mPg=?o0UGqDlUy;iE?;q;&`EGUjrh}Th5N%PQB z-YagKVI#5Kcp+4+hxB~B26m;L`Y>uVj$=|S&6L;AOcA@`1$371l48*v2kcfQZHyN+ zurWQM6TLdj!=%yJFB3FYqTMWqFrFg_VwES2k+#M&I=ZNA%+5DJOiFO$uqy$`@tW+PeF>OXIwpxbHw7NK0%{ES4$nO*BsVQfdh2~?_YnGxBNA;pJ zZSn+hv=F{lX*BomF@lYGs6dRpNGaZbZSq*+>w;d$9YdyaW=3B$2HbzxT8;|1cV9O^VLzXzmMr5`uQ>uXJu z(42_{v-FsaZlda~G#x|npe^V~n{2>DiJW<{ z5a|x;D)Y`@>XFym`RLYd55`q(!X8ys3eA|O<;br2wrfM1H*}+`yx(_~eZ{UkFQ=tt zUfiuKE?~kLb=->DM&izt#R=fA!lW)gUHlmVVO;^z7KEuRylTjnR ztQK`Vti3oyopnhjEI)-F-I3oH$5n_O#X;a%9fe@iVkY`+a0&I;1JJS9_Xw2`a!{vP}@1>{~hq4hb#dWmmPwUWWVO+&nUO%c2R0paz z_-g-Gf9~4P@QpbG|MxdO$48&)9{=dQ)MvhXecCN53o45%BgBcQrw55g?Muf=*DJH* zERL9-wxQF*8uC7LK6YDg6gymT7#*In1S`GbIm|cPo<0 ztq0R1nB%zR#BcjTJWN_yh=qUFeHPBsy8 z#(csVbozuP_^_V%x9EtG^f%F-KI6}!T~~1e=q&F8A2u7UKIG4o<83(#;N#zSY(@dR z7YXnI9WoK%!$c$Q#CJ&_NFPkyvI9VCIcDI$QGowuh+TF7_fLs?{fTaO2>^H7e~b2CI??_xVE>Q%y&o10@WX!ZkBbOsIsn`y z0NibN+xNG+cYTNWZj8qO-jyx?zwMh&;13M>H@NMF4`aYr;w9X0DemCkyWvgr`?r1@ z?|9pODu2E5sq_alS{rSCngt*I+~1nn%8#x3V%MKLNxT^UDBhv+k1MaIz}NgNXqZ-B zU>~pq{if^0qXnS7pkk$*Vf_qlTIwlT!PUTq^33m1w;Sh77G-VL7_70Y6c`(pVut%% zz_y}n-0A^~aMT%X*zSTpZ1=3C*skFa+HCh6*2f`(m|=&##9Q&G3XM17O01!AtI^jO z6l>FTOxjnnr?Zm#cGh{ti=|L~y%Yu-#^P0sd81^JU$p_lI$b4RQ;n=F$x7~u zp45Yzu_dyl;Z`rnmb&XGHrzQ10hSkFqEn}KRO6fxjM*3$&}L4WCoA5vvZFbBw?>Ba zD;~jQT#W;mu&EFbdWy0q7x<=^>lxCa4P%aZ2@}pbgBG0*$xZ{=+PYByr>t0+h=b9O z+cwD=tka7Us$P_2IV1OU`MautQV?2Oveg%q=!4U#1J7uSDsiwBt_I~y?@11<3Ut+QRRvcgD=fyHk7Jl#vch*2;OcqVLUXJ8l%1Y-J z94(6fCdfRbtw12xvSKZsi0zoL-+J6ArK_EJT*a9}kQmUGmAWzESq#}2&tuZ24D6Wn ztZb2<0pVN-YZ!5h)>`WWAAFtI>lH_^Kla&-S#Fy}N!F$rEYMzn)*D{Vz<&miov@)4 zL~}$yhsIPk{cAEHe-796Yr}f$O%TW9WGO5)i7zdBJQiY{51w^Ytp?LvDzQwTZR znpV~Y5YK>Ly#VV?e7Iho$8Eag=Ve$8Zx`UZy8wDQY$F458AuV&q3Ik@h!F0L zo8|d@$T+ddtU~bVFIn|%oTP7p4F8oUI-&$120vQGodaQU+M2{ za#Y6m&sPe-J{*r4CANC1I9}xII#8hUMu|>oH&PUXo#n4*mQQOEMp}xa4X@<;9~qdg zl;{3EMPQyUyNsbH4#ZV#u-9!=3*a>GoR0u zQgCd3e~V6&Xhz#q^q1?&Gfb}>;c^2P%lLQ!?Izri>0M8hUcD?6W!8e$CP5}UEm5Gm z3|uJ+R>ktTu3=W`x!fa_be~L6x>0&)P5Ha~bAQFj^7E|pZ=}WL^M=ajWCF;f5zY9P z{JGo9-#siVJ2UX#UMN-dIDmF-X=VAnIkE+L1|BMM_HQPob?dbPBL-ZQm5e14#Y*(+ zE9+IB2U-j8*c@$VY&MCuSfqxUJ*rc40=;p+3DVmtWnG%3m9#9qtQ%|e7Ug-PC;}^m z1W=1>-UGx;tuM`IEj!}W)zgaHpYD^_>RlKt1iE_p-1cI9J(wL0;-vz-9XG=S@kH@T z8nQqu>1iYS@JJj{#r%{0Ws~zA4Wu&&byPPh#A#Vd6!Hv+_UIYmgqYTpMPk#W8@H=4!5Q zLuEYfK}CDoAwNS;%T6C7*z09g;+WB_pf3PlN7*OUOctksdYmrzc{p;B_`Z~*a9dgkF#6{OsNh{-Fbv&Bh)QL{> z%X(Zb>s8H`JPy2u8*Zu+o9!@8Iv7uaMd@GxGG~`DTrIudQm%8b>?3E!6%59T^q4#g zokmyQ2gli>xWAeEGQE-al~Yk-!>&Xoh7D=QT&?M~e1APj?7$>t4pLmN=qX+W!!E@> z^xBXP%7niqn8^F*xR}2ty1HTAMyU5t~c#+kGL4GZIO^rdzK#8FGkBW);v^Nup^ zDz3&Z40$3wh-y5cj+yC*hj6k0>W9jHY3bBDb36ty;(D5i@mTDB%t*)5Vq!4w`_pq% z>(peLiH3ow$&o>;QIFN}Cfd>=J;X6{jFBEJMCNU3#Tjd^DtgkR=@E=;cna54%6m|r zr{+xg+T>`lVK1tnHFjH#>1mrC7?2%Kn(jDl<^I+DV5^ncufx^2jkAS_buF%?Be*v` zSysNua%_g^v=u_Zr9w>aPMMfK%TuNl=y9sdEUiji zSYt9KFsBd(n*{N?GjSZZ;z^HTRyyP*3>O0N8>K%MmU+HgS6sx9ooNYL;&>)qq-9!g zv%DuXqv#r?=PP>SELzM++fmV)_7JyB#5nqLluCNJ?4##ujoX;;cFOBfc21fo^G)-6 znvoBR0)E`#)PtV55fiAVHR(KN=t>V0=NnsNg4+YXH}iHk?>zX<2i$jc=v>q%$uv^8#FiEeMA z%_)!Joar`VyF->>i>r=ex&>z88A~0MiC?SoII{$UHkN3WSIv|6`Q4aqQK|DREaN)Y z51LVLO>*)AEtboUVA)A#iM^!1Yi)X`^xUtr=-(`yKmQD$fA`Oy`|KC_ji38hzwlds z2YY-=FFxu!K8AN3jr;M1_;r5`SJFR;6Zp~ilD~ug^qkM(8}X%dKfad!UU4q?oDboX z{?6 z@bUDMaRl9dBpr|)0gmCLX2h?e%dPY>G3JwTn)D<3(l$8~U@8`H}CJ1y5AP18~ces@eFl_-FU zY1$APQ;`5U0w8JdA2rlshjHI_3EwfMAER!^Y5cxh zegpq5e%q_WzxNGq;_EK>`}i#<;(s9ZreST=f34nM|KGUhw?FvpJ3r2Ue|5!Q`ocWg zX0*+0o57vG+juj+fN%O~he2-vt`=)Wp9hSf-Dza&u$h=6E8=Ei5gs?9ffe2^F9Nx| z`H&X(Vneamy-^AmXIuq!SDnXgmrEgf!Xj+7*GVjQKoujl>%jvamo5Fqtd=7Hw&1cx z+$Nri6>*!W#bo0mv8(Y&V+MET)t{-q$h*(Hd;hytCL5E}Cnvela^vcaPQLNzH_i{N z<=sbW55Ic|ZRsHo;ig(#k^zaF9bZp9a^ZIp)pFg_%N%*K6kKj-DmI!0^-8e-%*yqO zuE+peV@he63q@JUHSRDfOXavC+n860bw$~5rF=`9n(Md~n`0G*?3Q0pXPJ!y zs!=B%E;`cTa=uNNuRj);jUg}R0$nM{yj=(lTS`e|tYr9&$B~p(4%KD`c=Y3SRW)Mg z6adv$dSODVtUS3PXaAn@Ucuye`JRDN2<*_3Ix!U69FrpcnfM;CMZs zgNjju7>ZT0qW39TY1oABn%Fvh}f*9 zjQGh?2)?0;HVa%uTOl~~Ppzf-^O`;cRoC-%#fy$(!g%d8x`U4Z|lLqTJTXmGjQkDanJ#HG?78UDJRf&Unp8ke~TZpTv^vV+2Y zv}lV={Al|D+Ut7?_+0WFPdyNu95snUv8!0tXW+1vlF8X9S?aA$<8}djpOqEsy9!`) zyA<3iCS5PrmI)#`JHDk5Ra#tAla(ryI2$h;lZh>T-pjIY5Lq!a@vKU?2Qx{@vztL4cu?q-1fv0Vd4Jg$mS+Y0HVIyDMj zD?N5ZR-oR>=M|T5(M_E=7@Ld{2W&6%Ve3@P$W^(Za}ZSQKznfz8ID{CycnyE5pQL{ z$mya?@6*iAu9j?IQ|9;C1T^2jT3pb;DQDHNrw|a17T~#Ee>tC4CuHED89i~e+?O{r zL3CboOFIt4C9ODBtgJ8UFNBV!-npe@HrF)))n%yYD9#nF(Jw!rEjSh@Rq<@RYJ%8p zTLF-B!FQlo?6;}dC(lm@%Jr_00mV7xd^7N$XRsMXDSjr-s1Ty=HnG<8CF7=PJ&g&&D@t{1;vsHJC67%J3+HthyWKWr@hvcH`7Zg~zK zl?$19zG>K3`gf^3zaA(*pN+ao9=Q4*HQK{8Te~cFBaBqWxlL9S?$QH<$Bs3kcnyo^8BCI=0OcynKIz-S0}c{eQp!a zc*z)U#6Dvfh>PXAYH?MLbjS_`l>+9~<9Hr-vA^8+4Ah$<3btTGzjj>8z;|pkpiV4} zWk#?i`ix>I@~k~jJWJYi6lgN9XAO-4*mFvDB69qfy+*)U~k-O6mP^~RczI77*(xPjw?510Bt9zIrjgucmL6O)%ktkUwTGS zRIQ@u=y)6-%Au4H$`Y1PmSu@UD5aDoETxoEN?q!*l)5Z+IUGu-AFCaU751IF94EUdM4fj>n_X7>!1w5gLs~5gLs~XoPrtKl{h`b0tGFXOf=n zX}j_F9G~k)&-2{p-tYbX{JejBl<{;n@4F2L956>*8`m4h&e(1SV>)9xpT|Sxc`b|+ ztrmf~Q-v56Ym<=jc52a^Io~ys7)2G^^ZBn(=A&~;N}n0x8O6f>`8c0zp7Ffpci8UMq{hn^Lw+3b$vVWRJOsRNsOD*)Po7HWDfd0#uXY_aj=-x zBzENY>g#SUtd!^CEavq&oHa6(?WNR9`TVn4V{fMuQfuZ=pYe|6Xljp>=-1xTL9EZu zzo3eF%;tT!>xnT;IqEr##a?9wYic7-WjmqoLS`Nu5S%>B{~2 z!90IigV35p!Ra^>`@y-mK%7yCxKHN&T+FA`l?2(5q$AEcr>sZ1Vifna>@>#gTeEvU z*g)?GpZ}k~@WXud=AoOu+RsO~G#~!xAug?MK6mMLs=4agY7?m%N>{R-FEACN*B%L}uO3P0+{$$Ia<#M)c zA6aqDv8#{rlf%pZ)oqW_xV^Eu`roJyRa-CpQ9R%Br(-V$;#543FFIx=(dS4!j?epy zpTZX%wSwq%IQ}f&bv*tWzT&rH9R}lctRcSYT>N7U`|bE?3_Bki@t)7wgb^2P&f^;x z@%i}Y_?q7MS&Ztl9bb3Rza+k)Kin_6@&*ZyS%_!i@KQ4j=fYFJRU;UBq{M%Yfo|@f9T{K<*=bU5PJ#LrF3EKAJxC zO8kcd?^>$ zQ^x(KMdkmbF((z}|4EBZ07H6n!||oqg?F8azlZa2H2#vZ@%@MRcm7Fyl{gwZa z-)_ayf0<%sc@|fvvj3!O?L?nBeJrTv?n#CA6LzJA{zJB4z(XFxJFe4-*Aqs%;6}r^ z#k0AAFX4}eJgg{&PuhpOtaXxDWyE@7EVjCrn6Ad-A*#vh^rZ=!_g`9f>00K8=bQ86 zd~@kHul?pYpZmAx|MdBvIGk3^UD_SMtX}6a5|0-E+|dlEmB7l5 zveA!S8IYJ)D{_Zo5M%M8bqc|u0GCw;xMZNV25@FfU_9PV=KW-DnA>T>}NqcNla&aFx+g$i|;vZ3=b&^B6L0jMfHqU zEA&$NA4B_ ze2zm2>$e%vMGSZ?w)1_@ecvOkSJAS}RV_CtKtdhFEuU}Z?-pvzs@P^0d*ehZf9vpN zooYm^1MQ~KW=JOZ_ecH|ZI6Bb%I{x|SKg^vX(iTq+YIrdF-=UF_m0x`wH?Oq5$Q*qQBaleO55^Fr9D6U*fc?{^&g&v)DmG9>`U)h)S@M0co!dD4^m#nsv zaXe1qOl&N`M1xx*OtC`6l?c-k}$#ZI%tW3j~y@ubI15Sy|;zTlL3#e%&ReU@oMZ>AXNO~-?= zbYfU$skan|n#UBNex1^H>*w)QUhf;(=AOxVJDmOGxqQC>d-Az8q7Z)?NvLSVj%;@& zH9>09Eov>R7|!!eA+`aIv#B%DdY zN4v9m9LT?q<$cvo9!E?2i(`3A;*&@7_*B;GV_DBnpwbrifF%iDwRt_yTL=why*6N} zXE2)tjd8u&aN3DfhQ4Bk*ys_H#G~<)N#e;^X_8nGPng7uv9b^$VyAiZ#x7&nq9;bl z^f2XmNAkW3VWLWkD!cPowApR;DF8$1Co?%`lzw!y%!{$gRZ3 z=3}U|v{-f7{Z?9|5CaQ9-D8h|T&9*pE&c6VV zpU!&fSBOBxiRgIt^XE*VHwgx3<7@#mV<3qO1wgJ;)+_VrN~Iq@uMh<$iM7sZB_8#N z8DeV`$CO@!<`m#D9Sh|BTb-|;$on3^Rq04}&Uy318<~P@CU)oZnqMHE9m#rGm+j;^ zj4P=ECXDGKUhsUex{lYwyHn=WE7ZYhMuk=S1F=dO&tFvtVN0^l zH?byHW+Q39zm-bxMk>1}Y>EAtj)V4C+`lvm5FBsj z@69IVqFq-ydJM-_OvE;u(QRqVRTdn-BG(S_TGrU!RNA*%8W%Ac&w3cMaWoF%y!MuM zg$P|K&UA%yxoukIp(_9K&9TqnIc}LK8*F9NQJg zuCw`jZR+Gw#W7+u*5x|5IN8jU_7nS*y~8{C+e=FQUIv~ubDdP2#`?V#gT&MEu%|E? zJJV^SJqc*dBodVQch1om!+1R6G$vxbT?!$3Ec-x1Ns(3@q-tlOnc`3uN9;zM+mg6E zYmC^Fgo?K_HB4)!%3?P9F%r+)h^7(a#9+3A6Iq}2{)P6K#-!aPm0KK-af}p#N$f~K ze<0gSP2jD}n8BpC9YveYOodmqELHZyH89zRHdn<&e*UyV&#N$(&#B6PcVxfbXD&*= z+7p}58;{!tnNn#$N3LfU3FM8ew^odK$)nj0wp$=(#|2fCI6-;Bty$Z1hFaP%6-D4M zXTnj;xuxYAs@|yLCf>XMy(90<@LT(SYv{KgmHvX386hn1DC$C$@0!5QPa@PNA<$F&YC z!hkUcaF2aSI4>!P=Cb~4di{J6C>SsM5R)1n!xPGS2w|@lmFh`6wNyK1u>W(}$*foCuJ_ z*__WWB>{4g2=LJ-j+cJdV<7<4%72&rKNep3#Q$9Ox9?3DxKgf^E9FZ0FR)x809+~m zIm+)fx61FA2=IG7eiGpSUZ1;Cu9QDm<&(<)sj|S2W_%chkz1I!O~sn_L$mR9yr0bA zi5T%K#Fw1)zvFX$)nCSW$KtQx-+J9|QvF)hA5Zg#e&PH7XxzyC2mjQM-*%ku>;1mo z@9U*H9XI%49C6NP@RWzO;wlen!^3G!J?Wh7=<%c*a9YzQylB48&Y*Iy^SDQ^E*yym93sxf z`na1IitFPLo{#6N`>CFf^+oxA>G5ik<|`kqXg2t;n!E4A>$q^?LfhwOd3VLThx(u4 z!y7;B`tVU~bB$Y+z*X4*wG}J&=ua!Z!x`Y2&A>vrySsCP-<4xrGq=Lc4B<_A+W-bZ z`M&jNm@=&fYj`IK1H%gewCN1&^=5#3E){@{1w~gwQS22ZQJ*G8<0VCjFcT*ffVdkQ zQkhc+WR@mmJ{|j2n6lT?Xw#Je&k`spnYhJiB^Tl{-7P(siv6)cQH-pD4E#3Bb;X$s zOtmF2)ij~cqGF_0PK@Q}UMhjbmishXN+7f|wqP(G@;b(B@dg@ZqA0)$fVkIu=6;$_9hSx%u{jmbV|n+}X$3wK_eBB)QEX+aD3-_NKJyqSGe9$m82M38m?E~tSrratAh1n#W<3D_03ZNKL_t)0 zDn_fgC7)ffP_30zCA>OiUm-xniz@7hH)0zt2OMiT&JV5pq2V98nosZj^!X((b7^(; z{H2#@xyL$th~@F537m93dw9g zPaEzkMwP&QaU>bjAU4O{=E!s-#W|!nA#`N$xqSiff4tOROez3E4`yS#CUIXZGmhO! z1sQW9frtWtc52p2?YO=?m)MC8ozahDvCkB7e;h6VTij{_hZS?$X7-@UXaY%%%*9@% zBS8Uln_6Q;0phxdCtF_8Ni2yW^F)ukOk>25LJ*r;P=4L(Fl#S+aB56fexhk!~+ZF)qz4<&|%kyu}W3gOqjdO~^t&@1VIA6qy zmg{vBPdaawSmhBD*kdr;VOQ2q?F>_TP`k>ee1}EAtdW3!t11>6(^WZ z;<32SB(XDYFiPCf@|1Ss=>qsWXF~z}vK98GRe3|x9ENfnpHW-i7GR-6eQ!C8od_8X%bH>W`$1Uls zQo{O6Tb@KVUEC2G@x_o(9uXIf`;*|@0wusKptPp=eGhhqge14 zf=jIcZ_~M;>|2Jm1acY)B<*v&D9ar(i-U$CwiOsVmV4CB^F|}vS4|}w&VF4So%TAWNjzYUDIBxa9PwN|ADK3f z(c;9REtRni;*G4A;=oYV;A=dNR@3$?M8%@O?onZHI(VG&mKoyC0xF<8Ge)sHCX8Y*o=Ju9lBgY~Y6qTl$Z((H zXfur&QyRnpy(;1vkDDg8c_YW!+8Lt;&TFTEa@}p(q7VhUl2BXP!H`ob;^|ms0+aEW z8O17pLYYtc^LZ8pciC?=6DaIf`p2O%TSSk$%n-N4a`U({R6H=Uo5o+)3M7%g_zqQ`Vzo=I|-s^ zbtF-CG8MarT~IcL@L zW!Z0({n@eH&($Q&apN(j0P~yjZ?oC13P4=yvrg&NrB2Z>p3h@XoL0v5M=@1a&+^nIzcoYXYcS@t8RBdbb7wDmQl(wa#U$p96+&<9 zPvJzFT`w*WmaE)fb?18QbbfEr1#&m9rOT3*NBQ9R%)K96&4qvSxi4S%H@tiN-JS0q zrg=lNt+|{_FIVT9uTkxZp;$#c7>!tsN31c2h6~Yw8Lv2jyDYaK_qfTmc-{J#QJm2B zVy)LK$CQ#1<%pZWgKlsJ^C`sWah2QAU5Oo z)k!^PT9HJI+dY=^+^DrQ9%($$_yIoZ_~_P;zQ7;*#Ty2G_zT=S_$U6{9lgY*>WSvJ zsot$lRevA%`;pj#-;Q61yK%um4-ox+J)T9a{J-d!ze-$mEdHuO2>9FhvQzQ5@ufH! ze@k%!c-`d=0OxJ8=mhYd&-tec0ibpO_!k(}7u)c4U-W-q%tbqhG5zs>VmwN!&dZ$u z_G8kp&tNj%a|GY?HNUDj0h~~r08ZoEekaaabOM+)nN9#x-o>16`7-8wI~@~eyoV3d zsj+qfXf8Mb%qJ1x;{N!vCM_~!Ys>%f zWCnlPZ~MpiiVN{G_^L0&zrYv#`}mvqTomAc#*n{{pZ0g-YU0nuAG-9f_|ZRiW8c;H z^Aq>n+54kU;yKTGf!06yslLWP!nL{0?np-ax!j5t^%zH;UI6-U#@!~ogl8NxrLeyr zK%0l$g4>N)g4;|wfev>&r2qtPDgo#>l>k6dm=@*fa>WYnS`+r;v^9?6IV*MGEjQ}G zc1JYO-*VJAo^?_`vD>q5rdk#UVkehwtmZD=PxDms>SjOlH+*zRC}TIUqy`1P36-Ex%@h?yte%0ONX)=tO%RH(e=B${cZ zTL&CFbNkhiftz{bEhSKNDlNlH;J=yImARH z38Rf%Mr1gO(Rd|uSx?6_PUdyLngN)niXtzLWk_o}o;Qdo$Gm_>0j!)X8_#$=2^8I_ zyqrnv`r&Ag5`cOwt!R5vd%9R(<+-)xbDTDY<8dUGVs{31I}1RULBz$)Y^~H8D}ReU zxe=aCZO43C=Z<*JB)T=?EG9BA{wfKi6(FvsShX6Cmum1jq%&9zIE-zBTBVY=nF`bSe7^(~dt;M%;=X8_z3!C7yOvg@eYk9@|VQz)20PKW-7&tu4^241`X^Uh}x1 zqz>pSgbYoC<`qR&4WJ**J1mOz`6Q+^;sQF8NVF|VF6oJ4z3;6keX-XANvN91z;&C+ zeBRp>Afu4V+Tvv;xLuQXnm7?hG>L~(@xCIJ+ZQrt_>{(iQ$hhSEjSXqt^frE;BHL^ zfudNPbubmG{9UQZ*8wSR8W-p`fHdXj3_b4vpBR z5G}4nhmO>ecPH_#Sp1I1KJ&!GvD_Fj8m&ffB$lS4y8xd@k~q;9cjvg)mH^mX0%dJU zNNcDa1#VY*%^C$DOF-Dx(%zyd(L3YOypPLQ{fz~Wkoi;`mG(TJ7TFVVKr6;$wtQ{gt1&Is*EUue%!vHpC$o@nOx>QQt)Ykg3G z{LaKxc~uYO?{CTL8&N4lI~a&!H9VIydS5)GfzjBmp*Uug`rNA(eQ|&O-eeLG`x5Zz zPvTieI*-&!;F_S(ZW2wCNz`b|T<$fQtWr`FG!&voTPjmqJ(uU%ldsDim+^YsplS4Z z-h{IDEDk$wnj-Fur;THM6oToxc-ss{jixhGXO3HQ3EZ{DghEW&sf?#9P-({9c^$7S zqj3RtXLG&LFp2GPs}UTFtBm55r*vX4P80%WuCF?^rUHF&uUp2O)+9_w6X@D;rFEgd zcPRjQAyX6r+U8>IZy?T@Rjk;{dO$j$)bl_U_hfzV%=7l;*-O1mYbRcJzjk8IeoZ`; zrr0xS<=-%wDJ?oOZBT0x3oSvjtZ z)3@b4cj8DA_Z~^p?5^T`ve5pk>?xIom-0Rz&v%MLMj;eTOW?nXmvr$C`9HI1(#N;Y_aV+qLI-Rj(XcW0Nw^l<~NvGB|9=EKX(0i)I{L zXy5Yl^}48xvpou6cPNfy%8s}Ovrb#50QGa2(W8;izFwcU=lz%Qya4KRM&oMC$5HDr z>nck~u(r%6Wj$Q3XUq;0I1{buNK^7na`zRNfHl=Z%c2C#sN&k1}|lM7$&xqb$GgvuybKO+YuL)R00oSG@fxUx?I)L zLz(TcH|No%W)*c3nXL~Qi%O75wUt+DD~H8D)wPdT(Aed zNtA2N_OrOZ=}ZF9$vB1Sc*_gQd^3#`WnUV*&1TAr;s`cpIEFA}jrGdBxE+&P4HA!< z(u(y-1f0!w(Cv|gx;w1Ie3ZDrV7dOdE9cAAIS)2nqZ6Z^^g1SEZ)`z(5-UzE5M0VU z*h)S>aZ+&_TdFv!?Iw0;Fj(q!BHL4)BBi0EHf$P; z4QOk*KGvY!)j3`iLc`YV^)(r(%9JEiNw{fmxg(Ba-dIa3u{-N&+d{n+V)dLeEyX$L zCF?P5JkFuRwc4=Nbe!kC`Qg{zTgPWloW1_Duk!5;-`+7j#ig~EuBu+3I)3Tds-jw7 z-B)!`Esfz=Mcf=Oy9uY|PJGL(YAO5NcRYsWp3=ni3PJZKlZMb|*1mkY z>(FqwJ8@Gw;T&?O`*4dpl3+3CNj%~aD{)8GQ=3($u-}wjm^Ehx+q3m_yVW%qa;FNgrA$ zuL%Gje(bpD0B|`0;6HQ#`29NpTuuzQ;skJ|Tq#$|e`Vzgz+GzR=%#OEFN z*Kp3ScnqI+Jf6aJI%5a%{UI*W`ds60R!^|}H}5=l<6mOgXO>MZX`?z(eWm(Sv^>@F zbjuH8%s%Ha7yPrQ0s`R1%*Mh1qDqV;Fs4`2Q(X)iDRzDyg}!bKA2JLzCT zHqz?0Ehd!|1~8t#)5t(;Lw9BkZg@ut7cbk0X|H4ets|dleHW$F z=Q^&m=hxK1_eO#oRa!H@;DvJcQ5*mo8MtGfn6PMtI;{k3`xM2=adcS{=P;Vj>sVgN zKqh%;(^izN(W?+P=F)n-gxG5sdrN+AWC4&L)T;!-j$_KpQBnpJ<=MKjfsfs4LQ65N zoQSP9U^wn_8uQVY%EhJHxpeN*@#;<`Ogw9`-OpxfjANcOi>bJf%EYb=d^Q~{*BINC z;NCn=JEy|ok}KIvn#i{5T4-VA-kNDG-;v7SlPawDj2YsQc)%1!V_P~BNTN%zq_51! zZUtEA!c1D(4_jpx(@JjQ(FATzXmyHs#ZcT&48+Px6w9B|S+c4cyeZZ-7SP+Jcd0Ieg=C`z<$ zY%*?|c-RYOus=0Qt=V20)VYk)O1+Uv)$!Plqj6L>@ocZRU~?dIf^R6+-tk~b5n+e>P2!0CE@u7J zAZCt@p3Qb!h+M@vqa&ZkQd2t67pKh=tK)f7#7d8uAf6~z-}dILHf=`|7CMt`SEWPD zLhfl#m;RE<_f9)7uQgu5*$hbcX2`oQwPtVWQxVS^(j=a>IdgEI$doC?QD9zE7xrjP z2ai_c3ZPIw@8kKL-p=E;yzi%6UaBa$cDrJ?V%7X~UVpKs?#t)Yn)6~K0seP1ECTt1 z30U{14)vmkL7xXT(60d4gYE<4R+p!o_tTN>YdoLZStI7q?{I=-1yHDg+Cila_a^{* zLaSMeDP9KibA9>#L5-}(0xS(D06LxRbV5B|mvfA(t*A@D|7f0nG+)=hUw{4`G6hp3 z$M2#Z-;sdwxEfTivR)dwzAB%eQIpn|B*3se=erUI9LdJnObE$-cEwRd99d?L%D96Ph!zrB+wtl8K9)rkoQUzd-DnI&-PNM zt9dfp$!Z12DMWx-OYn}NIpm7|}Buu@TqGK?gE#rF}Himv}u?BP6 z;sUyo*ixxe2sARqLBm`5dZ)_){iaT0rDseMPk6!vu_o4yTa^?eOEF}ir0%iY z1h&R0GYUPb22Rt7q)vU|d2)^*vyjK8GM>a6aWPX9EfRM+^7khc2dq6x>ZmDVP5%BG zTg>8w=QYuhPCuOqjQ)p_khujyz!FT^8XFXA`a-NamxPY8{@an?dMB;Q+miq@Z37CC zb}GMj0sZF85*w44xIXV^PMsoaCbpnI9`+ zl3J%h()S91udI*DOwrU48!;Bep=&1BPkZwBs@!MH=Y7pOpouY?bKQR=i8bep5gT)U zcsAE{{R{Ot91|Ff72ZIbajnGpyq+X9XB#eSy{1KnvU<(in*UB~nj=;@X9otd=XdFD zDfiV}pxV?#fI{@%6FV{Mq!Wryz!+)J&YNbVI1zN^c?L2C&C{_0)6RMc-If?9wv?1@ zUQa^DxOdEABv!_=7`M?Tw7IHfi8>uyAu>aM?n^s#y9VR7DvlcG3=nT_UR(oWf#^Tz6= z_7&oABU2UBj(zofP`ek*>WzIEk5@f`+1MLHm@fObcqvoQoXPgpz2G#qI|^~>n01(P zE{R~RE!Xp%L*IGnJDchI(ii?h-%s$RqhH!Ou$t!c&HiRTm+q=wZJr<=ig)5kJR7%H zC-AoQ)(|V>yfe7Yn;F+B4ixveHrIQ%+l32C>Y8iaY8dNu8B_?w4NPP`)h+Wv60XkZ zPsgRh1}qXG+tROXSJK^vopcZnI-UgNLL7Q$;f%|*;U;%z$Ho$IY24EIpz*J1{!DXE zv!5URft#-SV?WEESa#R1{r6ucmRA3u`2^MfSlwK;;>UEyPJAwYG492Azu<1-g3rVQ z_<|$x7trgMJ*qeXtVF+GkH4WP{(l-@jnBqEBnF+1HTm~U0pMpa;(~vg$2TyNP5`5N zW2@o>kf{LFsQ`8o-^kRRi%tN8{vF;o6bCTrs|!v5zoHNUeob)#IO%tD0+?_fANZy| zB^5w_9xrzS_|OMN6sMK1D~^4II9Hqi7E=OzG8Mo_NtADXj0g}eeZmRg<3s=p%KzUT z*uT770r;@392K+_59e=O-Wj_7$pZ>$0%ed!r zKY9MY`#C;!&!_JF)I&IIyNB@C{e(Y{r5<+x?Utqm+mv2(mB6OS1P1mP^@Nf$eGhK; zikongLHm?|!#JpE+p!}~P_3-4tERX#*nGYDI+tE=-r0Pei6y^tbm9PC z{N@+G@x}jv_fNk6)BBvBP9qs!x^;SB9zQ98YCrp)DNGjr`jg5J*dT zjObQU1w4T{2V;^{h4IP)@LjcZqScHGiW09^u^_(2qT=cLGFHax`8!i-!8{SK=5ibZ6H_LilXH=fp$gP9AsGiqS5 zR$teEdr5#fW;bAN{n5_vQ zR>t&WE{@p?p2 z1IcY(!;F2gUkOCDEBS|ub$De8Bihnpe%4O($K&xdMm!ed7%izE;@J#1Z&edLdecc_ zvk6>qTa>`p`IchQT5A2Ja^-O>6@l%#TRJfk_Zh;hUGWxaEV_^zN;&e`02HhCK6y>?@5!ygK<93+ip|==(Z^e%e%7O+=Tw} zJMo~GO%q$=naue)yP&u}uLLFr(5fR9rWdr~)smYy_Q$3=cW*wwI@v&#me8%~m{80) zhZ5+Xv^^ExV=6(B9xj{@#!L!VUkB#z14F zalN8Yn!sJ|T1axRTTuoU0J}5$#|d-9<5ra1&j$1Jjm*JZ0Oxu04lDh&0276%wB8}p z#Ok=yG>)d9Kbq#T4;sT6~XW>WZ#ZU^WWj z1JbdesPt;kA_LkQX}Ntt(=ZOj>g?}#8pSqevL4FwZcl)&Od7cdyvK|WHc~ToD?N4B=jJM~bSjmp$w@0HW*8AKI zhOI>b0$?^3>^0EVkpO=)0j}YM`Ue)Y#idN=Gb(eaSfOE@*s3^)^q2V~p3yW;+>cS> z*#z*?F(qCp<8?f!X_Q!5-j8(}rirIj#)t=1Mv3+1{PCiOG2#(TQ^X_Xb9!}{BSy8E zBbH-`c%lH$@r24`jyIFUZcWp~%5t4H7KMGR%Jc2jG(+5_GD2*~@2xLKyH%MAqbijW}4^QMR*U(M~gVEB)d?p63w8a0mwg03ZNKL_t)#wK|M*+U&!C+Ejd* zF5)S#nIdk8+l>;dY%@(fRxFI;-XxB#F{%(YrZe?OTNDL#6`K`TqgR!2w4PJy)Cffp zpN@_Y&C<8vC%X}vp;m{O!anq2H+dIV1jeOF%ev8sS+v4G@&zlwE*_)Vip#W+&nk7znvk;=vvE*<( zoYvt}F@!eVu~!*)m*%kmL`^SYDpM8gbyf%V#hd1c7nJjzi~=Cl<9+Q2P!V^R`nDYt z<{ecWqK1hzIX~|zDM}p3)-jaCs}7AQEw-wOB@UoXhtn7|se^daTC+Hi0Q#gQF^Ntx z)j%_9BI$E^e?vH`IAol%RfU&gjd2XbDRavB)Qx%baZmwbw<-YNS?qGoJh5EAX}lSC zna6?Htq^yTw(+si?DA4pvoo>JVT{KMh7|?&xdfmQ?_~R^lvF?iN-B>juf-M&#frEQ zRh)K4u_o^%4yzT=^_sq1$EfY`HU>TC45nhMHVl>PjW?2tv}FNk@5rki&-Hw9aH&%# zOlo%yZ{!^n_Z*hy>rrcC7?ZI!9#jC~ZTVj5pQRq=vXzgP>o;v}jAA5KdJ#S59VB)n z5qfp56AtBZKKs*@ZLu9gu_}obM^!|B61KPIdbs}Gdfzc&SG*BM7K?VTblh&QxabgG+L*!R}Nf$8ioFRL&TYjT}D zmlP;1?Zly+*WOu}`I<=xdBu55#tz4n{bdJH@8fsn{<_}9HqGnCR2%KO9MmkxP3%#ydJx8iwCTt+EKk7Cm6YY zD%7-O5ZlV{p$3M(@#)cxb$YVkxRXoUaGFAIvJ07jMy6M;}|a372DBo%mLh( zaf)5}uP>ceI$Y;gEY<1;Y}e)v-0Zw2&bvVy-pqc#UZ_eWbYt#8 zdd%P^4|x)^dYr|)^MN^s!U`l{)oOof6>VsQ~^%BEZKT0c1S%_v!?2 zrCcdj%9Zk8Nx1@WUMc@2mESAS{~!Ck|JdV|a;5yiC@osF;8J1G#zYi_f35tVPfM)fpbI&V-E{@3C3eTu52Su^I z-WGc?7`LYKIu-F5sGH8$b9!P5Gful16ZScU_GGY6YFa|9N#(%ELSUyq15D-bLmqTD zDof1c_6$7@7DY%LG~3dHB?^!=9IM=bSwk&LF`FU3n#jnh9KnD-J;bxI%>?m$+@&a)N>6G}K&Y}91fD^U?l_E&G&5gY6qfN! zHLEyt9J5rh%C8}WH%fiSs71g!i53n!Ur9cqYx5W zlR)rJ88>3RX=1%sQ$gKpG}}t)@l|Spn)YK}GfL`!s}*(qkS4Z7aST{qfa`e9W)191 zB1cyeBbusIqO)EB#7jFY(8NRn?T4H*M?BMVod$7dae9cyyq*EaYb`~armGbI=3us$ zWqG}Cqsv@oeQ%EwidAO=`(s;C=EiGgh?^WWr2vzKs36ZTfv#ftU14SUz08H%i1X;w z9Yqn>8t-7-m>zVb)63r2VIDh6$hzfjn@piA1Nd`h6GSL8Rh#Mj{Tb(!dF@!<*9kBm zcjR?kgI1kMIH=uEnrXp3p8cvPonP7$@IRf3yaMc>kK0i!>PvwB_3|s}NHLW2`$bP= zt0<6rSB^uc3PA3dcC*U3JA;cQz!+~9U^`w&K>k_9`g>=o-&m!9FXKuoklS)Ry-*;C zct*Do4COr8mPEHn-R6lEIX)c7e%MiRZfojJ?|^2i{JR(C88~3V1WqTA+-jL#%#@Wv ztaR2CHW%j zx3q`x08sybR7N>o)xt0jt-rBthM zRF$%-N?ENAtHWvu(JGW>S;A3NtWe4lN;s6NR3VB&DWQZAOb8(aV~jDzV>}*D#*^`Q zJRV~sk$LIYkufQ;Qmr`8c7sQ4a%k!My zC_g(9*Ly4|7sIh0Xl5ffN7FG)B3%<$DNpxASUX>|SOY^bBMs$!<+$^U3c#@;)O~aYSZ)uR#nsY5;qzH%4A< ztr7Bz`Dr6~H`Z@W+Co=Yao2)EQ4eRMMmVE1+=)#pz<#+(;{nj^Dv>q$!MxEVw&ra` zi5$@glSTsI?F!;SEx(F}Rd6xdA_pl*r`~&muvVo^s*}Y^ostNH!1UP*-up+QP#^f@#kecFzIMMf(}oVOz3>TV@kI9c>=`a)%g4y0T@pQ6_^$M;cPe`Tq~C4W@*8xAm%ph zw!4DZS2gYyM(m4di8IdQf=S(ks#MHEOhykKvCUD8=gl_ZRzBh&`A{LMIbqMLkO!&LOOswUa>-zNezf&F$Zx^dL;e4M-@zvd}a%?|Ij=}3@iB0#fMF_NDN zQh2ehp9%+q4dDcE$Yd__W2YKM9dsWi^6_aWpF*6iPZNhrYeur2&6jX1uXOM1QPlMuN5H5;bwk`SSTt)z_!@9TWmoSx1zJzIL-BYT{NzP29)>q{pKFy%Y0P zlg!yr&8IPJbCcAa3xU27fO92HZreuGB^e>>}t%clJqbLBy&W z4tJlyJm`+Y!qMnQZ%;q(^&o~lQudD2L8q(>=IPXl#qM>J^z&(5`Wf=&d?8I%e@C(Wf6g@UpPLQz>v@7Pvh&Z=6~XcodAB>4>|#S$zjC_;0Q*2CI1@! z*e&nkn|W~B3E&jIW!Udv!ie8hoB)0w-^ooPKyd#~+V%3t7buUPSO56`4! zq-Af*ZW_PZIGq>buXt!WcW_d%mb`*7*UZ2LD;-sgPM2b#HnZ@snx$Z#rI>FMm^5Sw zu2`#vc{aET7MhROJYpH%2bh?6WgX(z7Nl)N$la^wx3uytC zc{Z;iPvq{#9&(Q-^A#HHjkdg-+ppek)E}pQqJFdfG-DgSx#62nbM^4mPk+9_@Wrp6 z9{xr0b%*UzEZs{XW+<;ztV`FUCG`ii`H+fIkVHv5C2tP^wnFMr6ptGfAa$3be4mWZ zH3*)40V&Ei70cbJuyk+O5WoyG@Kyj6PsFyVX`MZuF9mS8Ka`_0^Df0Wv{NZ8)W~nE zYD2&Nd=7*8^S6iYETHy8A^$=Fc=JoH2C(x=K8GPqM}a0xSz5FB)&$C@;{H{m zaMQHx9`uq!m~z$yG|bUZELrP#D1ej>GmDbO+W`!f0!mL5Ah$+;x)cSZrei}xn_Fl# z$9lAyk>6FE6gm_;-Uj(h0A538ramRhb1z2n^WH$+fqY0&pf{~YDZpDNPMBK?TY0~O zxE`70jkGS`z?=Yr-ieKWpV_*({c8PS{coa@2lG0-lIJ^uUSpwbY_(spc;BZe;_gEu z3Pd}+ZIXOZQPSPW`vVAQOcN@OV8WE;xapD#j^(1{JmgJPTr)!}T2-fAC5lF{L@_j@ zJI3t`rPH-2^j$NBIidW%fkE2%DOFU=G?O^G(gSx!pDW6!0^nYD z863<9jFUInQ40BKaZ|Z!zXEt&FV`YvlI|cC1`|?wv?0iEfF6z;VZj~rL zw>HP2u%7QSg?iqpQvnvreOqq=Pq|?VSM->PHeKPYQICF54^!#Bd<3)OY;WZ)Ch%gR z9_2$`F9aEjbt~h@O$C^_5YN<^`0O=Bse1(d`i9Y*iwCW||Cgkn85O?18lrh{4r-wQ5Zz}ptJpgKiroEo` zDuwM=(Vx@@fhgFYQ=CAm;V5z~3h}Mj2s?@sl7=ADVJkRQQy%OJC2$6M#I99R99p{%3&lAmSAQ@Pq{s6ETv@_qV3U;_q~0LZ{{A4MCH;?6@BC^Kl;^Fa0aMnV-{!IW`yK zU|JYJXFb1&7L~M7aol(UefrG89+LrTt}sSkRpya&M3=6R8-PYMWH$$Ee@&Ta1f0jOB=LdZiIw24c(g& zVpGoP#DoXEj#l&Y2o~y3%P?rvZ1U@c_>!K{B%pQ&dE}r`v{~phdh|LG&)FLCmb6%n zbbk=Do{i`DA)Wc8JL}?`d1HDI{We%aKA%?VK))eX(&5;rbm_|bG32EnkM^gdn3eaZ zZd^<&@-TU4d34kM7~NZgcvV#og7m?(O>vHxN8TO%`_XcK>7Zt`*JMO%U9qb?r}+wc zG|~cG)yM;iQ%i$%IIiyueQ|z`^csfqvmQWqI_)9y_5yIGjp0P|NJNkfSm8~~$nO-V zyY#qc$$QOJC9Me}Qcqa)&or1vaMSYi5N5jM80mh?bd#?cH9>kZsK<*m_W`BdAp|sm z=0a?`9uZ%coNyiwo8?huZ(qivrWZleVW3v_kNHR;BB#}9F?qk%JWSdeo;$5tf_O6K zgkr(ptq^zCV9>aR;(!DXOwSx`u^#Vt1ugpXRdlMPS>&U}^APE^0NR%*&MH$T?ZQZY zHNT44>1>*Ts);;;a|(fZfodMXxSeSc#`9WBFeB~LMm`+`fhiMtjP#tkRxDNKv6|kz z85Q;P8roe?JIR+zBuQEs``eW|QXe|Z&BejtjWmI_v{tLKudln~ys$Nhj?V@GbcP$Q zV=TYz0D98nd7QjcTk44ZR|wm!aaT)y;8tF3kbEWW%m+zpTu-NI9LT$JgPYx78oT)} zpZoRCedX%k;m6+ku`@rmgnNeXIeyP+?%96NKI z&>H>ohAvOxes6>aRM~6Ih?#$m_OPBGaTXm;m`BR#q4c}luHSBNJj+L(n(^JfkMh@k zYRUdZf0y6+ozLvP^h@0SV&kMw<2$b9e}ykPlm1?L&Hn(O&%c@eM_ftU@=xOv`8WL( zej@#>B^b(|OMeYtO8*m>Ws!s*_Zc6=parTJ%zx<1_(=NO`AhhS1#XbPman)*`czt( zK8+9igg?NC^EJPRzO+1_L7$JOU%`kuejUBOoPQNR;>+n*Fy_Y#0l=(W1V2OR7ZfLe z-zNQ-8R>sVrysS%9VdVeV-{h`hw>NDt}8u(_v-R-w0XZDL(NqFI==6_=`Z`iD1f#g zvekS@aXu;cqi)Ky6F|B*wWSXsxyO5yappb9D(;OQU4Z`-_0NCT380_=&3{55b%zFU z2P62w-!zE;Y5M(l+ue4z-EDuS+Fb&`-S%g({ig!(|1stNzYFO9$3FL;`}gm*yY0V> z_JhpVq!j$WO0MN<9>q7@atz<}M}7yR27MHNWFQo4SMo37ir>zIxYV>TbIxbUKbP0! z#pGl8bp4xr^6>l*%)G|KOCB1z?_uh{SpSv!w`loqTK+=IPQ^n0`)F}ZA1VO=_36`w z+3M!wykf=njLoKS-e&FC9tFpCr;Xw%8{AOrs(aC9nPq5Z{ypfp2CjO;Hq0~E3hOPkABVvEPH)0mf|fZdBjZsa}Wx17~OV?$$ku2LVWKYV)|^$qns^(}nA z=lgTMzlg8w|H=zrnZ@Tn_WA$r^S?{=Ky^>`8XoYFc{pm1eb^KQq!w*OftPm$a8x1y zu7u+M^-x%x3(ZTbJ{=g&TSHm@axPZn1z_G90QRYP{|1fJj&@!7tWx+dS%dYkW-I@i zg_X(ZJ#EG#Blv{p6wCYq0(YcN99GRW#UdD9jn{D(^<&a;Poq`}FkXq{Dy(ky#hPU- zAIonkip`=F8;Z=u0%-3jN}RmUlw!}>oeKbdLlu*bMb>0djP8&34aE8P$MH4{p7Ybn@Kc7lL>tKG$ z5PBk`w=rFKDXqC;n-TwgMgjcZiNgM{UNbS0w}vJ73wa0H%(d0DqCUSK1&k4wbfKE} zxPpq^R-?re`4Wz43Cqx?lBq2UnU&}Rm+io?E%}6^yzIpB0?6l$Q6jz>rj+%(t5~Rd z-BXyfFYhJn$CZTMD1gEWbrYD%Tb1m=U3nAQ(h&{xhGP7XsuuDFMUnfi^Jehf1K<0{ z)pqi=d{H4(T-Boheis#h_64-7xrI}yD9!fdWyZ+|Lql`Ti*by1G;l8{O2zA?e;Y%) z8%6P#w+6^s&ZJv2qkdW$o(qs(l)R&%(Yck^nnY(@w;R^$!`r3MpNBN^GYa^AiqO|` z%L^tjkF-bFvM|3}_p@sBM2C!bo$XO4bmDQ^np*Yg1obw+`;DDmqW0fbfZ zcExFA3@76L&2&|T{6>D#1a7#Z3nTg+LC>^;yxD4bn>!8-jZmJy7Mb#UZ8eEg@%*%y zsWYx?QAF0gTVC^V1?X-;HSaKiXQwUc-&H5S>0rz+ZMx9zm_n@T^NLcKx)$GC3fir? zd4Ia_LVmIIC(G5b&)NV?hhuzh(~ep=C{T@*QhAd?tSSoqieYrcxIK_x(@I`pQXwLZ z#CW#f6s96dq0K-LdxS!=3Ai_M0oZv~v7~OtWB>`LLOFF`L=)`vwiTxcNCzd0Ndk+Qjl)NgtJ=El^#{aR4zo5(SW-KY>x4? z8PQVa!Fu$RdW<7I0oa@gz+=>uIv&-ho&2h*FO7tHJ5Me^^_@$ z*q=%vyloobE>`AG=tfU|Gv@u10qj5SLA2$Eb)ZvG+PCInV%(S3xP&eb$2c{0PM%Z(V`aF*%dYN7A+>Qs{k^2Yq?+P!5~~brlOs^L!WWd zLS+tmq*$?=^lku?t60N+3$zjw|7GrfhI8sT&@CwkHu4e|@c$;N`bR-JSvoh(3Ge!V;=>Hd5k zb1c)2wxBB1;`-Ip(@bSPT2lVLbIQEgMc!_gDbh=t0ZlXY;=UljjcLp4(55A=SBPYL z6u`Y)&#@q^6-SHb^7F<>E3H(){|jgk001BWNkl~ zIM_^>3e|T@M4r^rp16MfXtz)UXPxo{t_Z91T&(`3jrnR^&*DT;oCbzXrRQ*6k5|ZV z1zoN;KV^)xPQNM4P20jjVus=9pJhBA59RzB*{2-jxVjOM@ zqSx$L9~8%w;k;HGy3>o(`?wbJ858QHjhe1Ag~B`%P9%eQjqT_%?2M>FNFm;+P_zK#R__4)cxJih&>)ZH?o7MqM{%n2ADUc^N}?swqT>Dcp>H_I3cg zYXY!tGh!H3XAEH^zo;F(sqAdd2Ek%q>1zREGUPyh3my4PT7{OhGQWaO1BP)~TbhMd zm0VSva*B(`>AVTumZ!%tme+U`ed+O7Pc)rQdg4Cb$k);39laRO&!smpJH2id`Gf`P zq^H&MBsN9r`%pNgP370^AfHS7OJ;o8-{!NWpQMceFfa7O)#T>9*BTBH*JE5fo40Dm z!)ad%N^>6np-(hFKa{Uw-1f8;GqmLG=v2t4$J9(=Rsh*c)$$FDdMk(n&!@}iNiU>Q zCzzE-@NCTMcbs*O7YD5TY+8Vt6@}Q89!uTWW-^asSFF$a_2x4eb1}W35CL97Pg|RD$hZF-6`~@=k;Nt zL{{ZJr5~o(wd5)uDG@$ydfBt+jrC1kU+N|wGLa`pOQ)}JTM+4n@-2+pogPHHYwky{ zCE68&<3xO-qC_E-_3C}${C3gXxRSQJjCWi!kBOV#-t+BAE_PqM`1@bwlV=uwe8IhZ z;-PsDeqsTQ8;wJai{$l};LA$l~;z6~b>J7Mz%f>Co;i%uNi0Aog^rv~2c?1m?oX1ola(T^bmSLU8 zf=Jn=su23iUVJpxABTO0%B@Ow+D-1rGx9&>$&1S$_{nwr;>SMyFMnkQ-~Ns7^nHIl z>09Z6dmbTQ_Urjk(#rg{hwvBEp1g|udB5pN(ogvfe;pt9Tj{6B*PYIPkMxKOK8!)1 z)r~La-}VjiSJO*ALRu08y^pw@cH$#G89y&@9Ye18Jci8AmodZV3lYGz^#5SkJikpI zF*pBf(kJtm(qVif{bcOR2J)}rLw+p%5EOH=}p}i&*b=4`?OaP8~Gs`y^SS}5gMx+TW-HaeNlb9ewJ^}{pJ(j+{2aqS04S`>wN7CU;EXseT6)f z*I9@sy`ztO-AFFPgI3EhnAfRd+?D{|iXrr&06u!uauxGb(o9Sl%Y|66Ka~7qX#=k5 z&clSxwJ4eqWobt9TP|YQ?)^()w`s)M{g6cTNr z)U3G{h5ZX*aowIvVX6Rjg=8Y{4#h*WpgEY|)WCQstJ`&?qBN}K0tg5|sQ`=hyeDtN zxK++7h3s``YW^GXy=~J9q7xbz$;WI#tJm{-1u&b6XS7&amUb=vUs27=XEg$ttm{$; z2}dw&tIY~fvmQNWq)yyY&r?_&1jy8WT9NAf#ir@SI8 zCEMcp>I@}zEz-an`GjIYTP%wQz~N$LoX@AC*FK$#LH(pc)~Lj>77Z;Ej+KIIUKbY4 zlL0KXXeV#e?j6ii&1y#IftaiMXpaRhzonbePgyfm*Z{XE9Ix~&ROeqAZPzOE3E+VOgR zLm?6s0z!8vR$H`0)@D7Px1wcbY7kOvJEECZiQA1 zMIpOWQOehKcnu8`xd6M}2GJJ%Ygkb{j~h@Wul2lfoD9NHPdGv}bWf`m3o)b~4hM~C z<<@!(xD^C|0x%ycpUD?&GKxb6G;k?K?v8-pTeSorT(LX)Ujdj(KW;?-?uz@;%o&e-VOlkVuZHCHh1nrL5z7a z?t38~)eWb`=(ao`N7X=j2qV_yrFaG7wyP_~%*A1$tOKsw7eH6fw6jYY58Gn>QGm}e8x%L1&LFb12La`{ zMbQ(dqJLe+NPZ}Y0n3z7hKaNU70YsoxTvScFcgj*y=j#mOy)B#60>a~5;0%1i#fg3DE5~#${P(C#lyv8{2>r|zX81P`sE8_uV4F@5qCDvV2 zK@7MOw9%3LRP?{4arevmr7g`>N0&!H)%8$3_vZu3b5W=_(j(=V;t4D9NR~jWKIf(Vh?MBpnUn&`8>;3o~3*L!a&dpbGF@(~@3O#_QsJ)8={5?m=9$ z#VGluP9WTY}JOzeo!yCGFl3#RM4ZV4v zNz%*dNgY@m4izJ&oK*Vra^;!dtPm;6b3I{}LfD&0-f2$hzj>`z(qKBRN3mX?r92OB zDG^A8pim;k+I2++`Mr zDx|q-O%Rvo=thU}m_J+Nd&A+-ITXvoL6~V; zqE~{LQGP$zOdN}5{r?us?m=kc@gg$k27)@`XTfY^! zRo3}=Yf<#4Hv^dO3CEf-C-M#q=eN>6^rq#WD@t;8B2G>^Fim`@6bBR4ya^50(uCsR z)IvU9oQBeJO=W(2^w0B-V#+Z$(Q8&jQ`L2nH>s$S-U!0xlM$UW=;?e=ncsTQo*qkQ z6laGPyb#aIv$2nv6_)o6Q{j+t%`n=EpIts*q7u@IAQ;~t{bI!7AU@Xe^XSc2(pe0p zRpyb8mg|;Yh?)6`n4ia;bp~y@?87_LN>5_U+_FE4{mg=Yua+k23WCU2&%@+b45X!` zV=m`Qc*5*d))Vb{Tp_SDDOZJHe51tYjamCjV0hA!tqM0?A| z(hu^xI$ATc(mG&$1ds+XD z5)Kyd=rplpG8bajku;lp*#*O-2lK1mB5!VtHD2M1H@@)V7dLR_J6HaX&wZ3x&wlig zS@(0#Gxyxrd7OK?E05lOjY>~rP1;W0Tsdhgo=Q)p8tGk^W8Ubp6hlE=TB*Y_cOpfu zdBQ@Bxu6?Q2CKJvv7-rdK0ORfp$E9Jdn5i!a_{9-&kZC8984B!wR+)DS zQD}i#ii_D*RK4S2(od$P>0xf4x&52BKgQgj`-v}o>?8bS`_g~9_ckuc2vp$6{=ig0B@a6PB z`w@K9B2|3VB_C0o0KSUBeA!npGd-QZjIUYXi{!86&$&+eRQey%FX8L1`a^s@UvnNG zPCu2;;*Weh9mI$mj-l7hd<1{&W9gsckNvpcz=sUxe}fMiO4}4CfHR~Y^Wn4+-`1CZ zAMe+j{+<#A@HxECc>V&uYa;zL-s=PA;Jv;x9R(0h01*Z7UO$R^y*Hu&YQCjJ0DKVl zsC&QS1W+Zlr1zxed|E?_aVBfHR{{F(MV8!FoB+y*_QS%c@*D0r0o-kO+ue4z{kd#+ z2>^H7pN01S*HrqaB?8=?%I~)Sy4nv~R22aCwi+gk`U7%3e?L#+tFHPb#rpp`zGc(} zd?ghBUv@cv9AEZ_`Fi=;4qWlu{wb=yly{S#%X1n(%TMh5@t^LUlRpor=rZfpJ^rL0<4Mxi zOodXi-5hhV+|%0egbPuayzC}A?C=C0_NZ=*TWJH1sM(GIBlcl1Z_fvCzq7fGEO$0$ z(wNoQkhjx#t8t+53b&8no_l*Mwbiw2wX1yj%WE zvb-5%PTGrc7b5$)09)e@PXo!^$%01|XltqbZcZM@c;09!s$S0f6pP?F7!3fwF94Bh z6gr0UZtaS~z8%%b_*|$@6F4sbeX+dn$Zw_@XiX32N8`9=VJykqUXENs~%8VFMju=0EJLeM%v?Xp!ns z2(1TTPzr!UK^%EEZ?OvxdMUr;4j@+vg+|j#v)M+=OWv>a|I2Y7`YkLT+pZL2P_|BJ3JD~#o@d<{?0o#U^JW* zHpcbn)fNsCxAIvG}> z8-l?<9KcAsDQ{w~WxA;D`0n6$XX8zn^l_sape2P%v zOEWa=Bkxu7paKNW#Gw5qFl>7Om*u$6X?GI0G~ACz(r|i?+AFnvwWs*#Lm#bw^a(!s z&px?y!5%K|xOnUjw$i@zy$9OYar@!C{&um%?+ggG9!FIyqc7=D!`_lbn_u;8JO|?e zkawhosHx|t%IEWj(hs%afa?ZvH9r|ZR4Jujav{L|;_y;avr_@W2NXba3MaxjU{Nl> zz+|zc&F|O~0K|^a+|F=bDZt;1D|@CENLR6{ceQM;Fl}zfnE}9rj`{?=Xl)T2p}3yw_|@mZ%DKZv|G-?F#vZ6J=gCR|Ya7R9=WI1=?e9Y6!V!W%wJaQ>!hs!EvE4JNbelGoIv6*^s zDt?~ObVR7@MSpzXNUS3kYC6P#^mzDDj0KQ&F@E37Bz`)s@7rbuF`yjJ<8j_oW*JZ- zoQiWm6JRaGwQjWZwGMIXEcDUx+-~{GRH2DLh*8Rkd_eZ;{v>_Rf+pr#z#Sb zY>wlj;Y=}BGTr0TwBj^_nsAj+pl!%xjEcVQ~aVFI%b|^U@RfGKSqWp*XfID19asB17GaaeixY*foRb z^}I3ib9ucQ=}1}?#NEg80B*Tu2o=@zD5!@ue~See(PJBK84M!mEp_b4yN%N8&y$!%Y2_ zV24cx$s6)xV5wJBNiU`Ky6~c*d|jFQA5>=FvzV#GDecqZG4jUPzpTqInjjrX2X&&w zWO-h+cw%h9RReq7biOn{%$%(Rm{j26arTv(k@Mf2yoLO43?Q7ziGA((w0~^&5iZm zm>n8u&2Jc>1WTYb-KS59${JCkL|X7fte+Q$BiVINDFnisp2SQK1`%S|I1a`B=b2EF zRt%>$+{{nJeq_BzaV2f>IQf79qomcE4mKV60$OzxCzSklDiJQvE6Vg?^OgAuHpKek zf*U~uSfPd)`H-XNNXzpmd9Sjcxvv~w+Sa7XS|9u4RZgNeU-UGF(h9>$wtOr4V_(#( zdwN|ptc(J?kWi|C! zKXmCdj$6(Pr2Xt(I?+ua*5q zdNT;`GlEz?VNSk*iM%x(RibnrAiq@r@bpB`(OwQBK)>13M62tH1KoMd)SG(9=S}7@ z(&4y{-Q-=0%t!)G3D3K^hnG%{+sNfr*#CUF8pd z?GGNi^wa#sp@qM_u$T7@zpwp$X!N%1ZdpsCKey$1RPM`j(;#U_UYysEA5Xi}{iLep zrqJo8`MB%_$FSRd?nhtvS*`Y%br^IrB5jKDf4LLZ;<|V3L7ROM{Ws4uSP{+w6wrUl zbpyEQs7btNqX*;vufj!jH?UL9EIbF>Ljv?S_Tga4irz?BlQ;d9{x@E7tGeAs-y zk6~X(zl=WD{T6w|$MXr&C-cqp7Dm(G@HTpUCBK6)x6&ST=RqgYo&KuR_?BU3@qyTv zy}#5My+4onET+;=ScvcXmg}hcfS-uhTX>I-JcRd{N=p=B$&V@y0Oj>Px>5Ii6S&9s zy&t#T>-|c7^Skl-Ud0ihNdPFXWgVPkE&PBZYV)|$l>1cpv1VFRhMHTM0 zyX|iKGu-YH0PeOw5A8p9D*e+c`R_Ua+-?8$v>(i@`hFDhzprYPbWdtY?c~qrvw1zf z;a2|j@@g%w6NK|Yk9&_h0v#~dUt%L{IAr@p_w`}R6+KU06CKESuD-@f_nXZh00Ut0L3Q+)mB zzy1ru@1rr%=x{T2i-Tn8>^G2wLn+#S*d<7V)32#n82vjrqH7;&BTi)@)QN0Q!L)vaWg+`0VW*s z6nahN5u6GI`C(&Gx-7ua&HQ{S!2ISsPq926PymQl^4?IYUDBRP;qOwuf`R-(o{gFl z-b9y5Zr~kLs#q0;nqD1Y>HNI)NH=B>Ox50Q7<;4m(l>3MXT z(xm`*O=zL{9TZ@<06>Kx(Gdlp8=$(PhwP95mCYX|Ocy2x7_GdcxshIKPEXJ3PX7SAO?@ z`R@OXGXVrG_e2hW(hVF>^EAkt^GP)vRI+lfd1Bg9`gpnYku}d)^uHQ;b1q8pE1~$G z3_?Js0>;%4M|8>zviY0p^ zmws0iPW*^0kQ1QSVTHKyay&WZIB)91^}O6D`d!mXez_0;Y_TV- zC)=Y?+7=2eww3;*046SNkY9ceEVrxkUL{ATpr zhs%8n0Jk;nM;UKg0w|nt65Q}~e5xysx;W6(<1Cua4VC!(IpeD2!=b=@SxqOg#weqG zi$eaZ;YK*f2;jV3p9)6u#zK5ZW&O}+j@7u7pR@|Sp3bi*O7?zS*I%Ml@}s&?w_S@u zKnpUKQRTTViuaRYxjb_^wx))WIJWCbzgjd64BUB7nSXkM0M^inW8r`kfPB#JrVH_@ zH}3WJ_>MX8zTx=Z`7uAti{Br0r`0rJ>!y#0a1{}{+cKUs$GnDSe!YC<2aX#aot~#l z3nEu~OtHML2GH^VLFB2ZkT2+Rk@SoLJaxqV5`@!A0A-W$mn$Ml#&`hBTVkG=3ZhOq z-?98qoa2nNK(P*f85eV3C}wB6h}N{*)5`odr9=QtDg>Msg>Y02;#?ubl`~uvKNs>w znXk+IUI3O==IOvvqcLt*f}m9BFqh-_roz!;!f6eR=Hd)6Kb`&|!b~I9P36jzD=~;# zIK%YlNjKvTlyPyuD0!!Li*eXXCde;^W&cQCWP-Fkto$EIujT8wWlsE^v52;*M3tzP zn&({B-JRCN^?m?n?KF-F&*>mP5sL0@xi}!KNSF0sRIdRgbN*7C&n#3l(lUi;c~EiM zsN$4YOp@=4|(%$>wf}KG};FwbW3EUd3vE(iC}vEhh0$?lVPt zJqTW%X+yq>(RivWL9}RSq`7fj3o)*44NiI2DEYa(RE_kK7j$47 z6}>9nCTKvM@dHVQ001BWNkl-qq=OvXU+pG6(bvcgfIv&@hu1g))aa`AN9anXX$K%mxJQ|HgBQzR~5E`M;h|Bf;>>tnP z%4U-EobK6kHf{WzGjoxpd++zh^L>7N-oM=AK`g1BFiUJH{jPc=fy(=GHlDQ8Hq1Ec z21UtyOd(wCBzBw4h=VeUJdlwd7frJ=~GdnY0CK0kz-CXW-wt}RrbR-8Np&*)f(cg=@?O>r`o7?<+^-{W)iz! zjBU6jNBp_m2T!N7Ku_))#xhc%nGr)n@o04bssjqqbE#=%-%{>zYxI`Sk@sD6?dJ8<94nh6ZBEtE=9Q;YHedgNx zuRX^npZeqzpM0L?Wb=k*o$A)AxAp>Yi`~@>wME*afjji-$DOgG+KM--V_rl}iBf9B z5!c|Rs!$@=dRP}8)ax-^=XEvgcc&W8X>$;7+F=c5J#VujTqs1a^KMn5pePO}g}}JS zaopfVNAY|ai=)+Fz-Ov|5D(&q;*7tFFIRu3`e9s*-_nUc zQT?1hi7)zXllbHQv+u@;o69~TKI2QcruxYkQX&8biP8A1&tKsLutdLe7>jH+5dwnSm;ypvvKgXo&Gb;4mIEpEw)h`m${#g7+s_*x;>hEC2_r_U# z(|gs=Doy}>=rR>wz_;{N524cshFy*VsGBvWH~}nC>XnoDq>gzffN5OHD1c@m^vyc~ ze6sqE>U$I-z;`IH{zr-g3^!Ee&uTIrh+aIphQ1=0Hfg4|qf!K?=wBVY_1^Rp5^_zIt=lv?a z?6ZCepNanvPvO&!#ZOWFaP`N$MO+_^=AC@kzv}wwPrk$d{BwWyQ-AU&==gHSg^oAy z=iI5ncj@w31u!Yvn5I)oVRZmomE!gVcc%iWM;*i1gz;k0=!{47<7R!{P#EB^qTg-$ z6^DQY=&{;Dyp@Kh_qg9M_BiBaEHz{VPgLJ8 zZl*aJYvUA`p1#!IT+F4JOOuzT`Doyyg^g~;ZyMh>{xTQ;kI#Sc3*XD^&EI_Go14++ zE*puv>~#o}rs82G8@VWmXQ~3c6a`~f&fzUv{va-c~Z z%`!`?u-)MrV_4!PM^Mwq0&61y-cn#6NejVx763-#83z@GPbrj(0))+J5?ivM(QUd~ zg27l3+c4}AuYgh4U@DdBEv3v%e$QkS%hPEGY(~4O7*v!lh-VTQo0&hZQh@AmM?8Tx zi=$W3SNGu6v}k-Ft;{>sVhFQw)=Eq{6a{1+iBXJdRyAUBzM$DE2=qFyl&MOV>JG&M zwk|g!yXg+VxS)~BOgGwQ} zozy!P1ys2Y12KsyCG)bD1^-FyaSRCY1@XCn)>ojNm{v0;N! znBI)0E)!S~2Ou7_)g;b1o;{_jrJT!RZ{4YKo#VL6M2n8p*p{bTjKo7p04V^W#U8k&q;J!n$2F}}vCb~U zjqB8ir@U$!8&c`qsoS_hjOfqv*_r)mO?gt{M1EcYf{ViHEp>CmBk_t!;x=nd;e2_o zE(>yeD-i?@wX{%gx(79FaRBWm(%GUY+fT-U0;t78Bg8>#^ZN!gFr*M*=2AIXSCg?C zp3dv}5Sp6tO8NJALjhzj=CMsG^LJ6;6+m+^Ru$kl3I*&!0-r6Qzdi5TNEYHVawFcz zg5KLop7Xl=d0%;FJf?sQb4hR*O6_^O@jU*sn#{ZZoR2$_95ACee@w(J=#A@R4?0|@ z7Z*M1sG=C1Rw8B!fN>^4@RIr5$nUG?s6AW=dybk>l$*twAjc`q@|W>enLp!+9A_WS ze*H-PoL0l}aQ@sPi;U-MZ@#9@c)aQ3Z6IG~m2vrO5+M#Jj60Vz%1p7$HkbhKL|O=6 zNa99&5&~QIb|T;3pYuTy0i4d)xo>;jpU3yI(pO&1^ITDYiFiF{xqW$Ep2+Leine$v zkEdU8T4`4@mFE&@n@p#Me&d=7v2h$7N;trjw@sG&7Dq7bg?JH@4#wSR>WEFK8}}-v zok|K;fzjJ_8N`%9Gnh<8VO@KU(=~I7W%F#l7RQXHS>j9q6b&Sit>ti2PlunnleoM} zs2c%e>7&sbCBk7i%Ic_=(M#ruEiLj!EhA_eQGg3^SDxR)3UEB90OUg$&R~j3Z<{6d z*lC)$Ep9Z06Y)kWe_PkJ^y4)A9N$kD0#v;0P1ATPN>s_Q z%rdVTod--ypRL7-a_<#Kji!6^{7SUfIW=O9U1o@zoiu}k=?F4Ce)VEAxRepS%%opb!uWVXVE?my@8?j8_$hfftnsoB|l0QYSW)&$BUB6=$B< znT|2taatiz72v;?MA05&Fn`})gBW+aX+?=UszjqSvWH~MN!*g>c}!9Ccj34<3!x{< zeApj_65OdhT7#oS}ZsrKoioTe0&g+L%K(PrY@&RBjz7mt<6JC`jhKy{ULy`9(EUOJ zX%}-p)i>V<4wtB(C`8l+Wt@(c%KCM^%kF8o;_kP|0JWGwhb5+nN8&NpD$ie=@_aQu z_MXmM@09S1saR_moz-%;DuC-O(U;f%w0e|vOwyK|cTOQ{4q+~zx7H{+p+z=mIkYXb z0JD1CtoRRfD(jpEw&tjCA^*PS@*Ztg*(DTWZ2A7FyaLzGkKSz`BM{Cy=@dFLQf@3i zv!3VEk?W~hr;K4Twz@-E=au=ZSzUucB{HEef&YfKn81{S4q?WHxC;w(R11jHN&J7M z?1MEm)2Xgyao=!X=|^#xIH0bLxNCmhmi`R(Rh<}#$LzaGI%v)%>(<^w^jmFUJ4sYOSKJ5>=(Q<4uYClGtca8G=KbF^_IC6|7 z!S-GYlzANbj9G!YDO+%xHaCGzD@d6_@$0E!krf`LQoFJ0rtO8c7uufVFFf+&|Mo{e zq!!gr#vJ~ZzZ3(gV$|OwKI`AbN`(;cmvPaF_!(lre~iD5e#iYZKJR$^RpKk&iC@65 zbFrbESNtM|i^@;04*l~zf1rBd;QDRcC}q?SKA+$cGUskYWr`w{l5k5|7#rq zuC}Y~zqc0iSys#g{P97&7oWyNF5tiBOa2w!^#$L7FM21|W7y~78hqMs#;@ZYKjJSF z7o3QHN%hNC#E;|UxVw3j8*aLO&G+r*mW4O>-0;__uC10-pTJ{&%EOq}Z@DWAgUgM% zyg?uJmI*A)!sM8H45K%dn=7oe3%6S6A)GOkh0z|jW2wby(Y{|3tFy3p*od<@q*#$Y zZb>S2UQw)Bdotr%GX8HdhV5~$r?9~B=*65j+)2C=JKRO=Y(CsvM{{BG$!0H?Uc6Lm z%<#<}-+FZRDF(*|mkci9%U}QU`(N(l(jAw&E{$TjNsEZPoi15^xL3&-Zzu(`R$-3I z#ktd2HhGFvoK9!v^<-{+FK07zdFF3r9yg4d!)R==6O%SaQJ8h4va+6qqgG*}R+WN$ zSL{_B7z#*L%c4lj+PHk{c@r86!}~Dk@j94{2~5r_yNV+JaK5j-WguPMR?aK#)s9I; z@vt)s5|8KKcbP5PUuT@GNxt8pIfuCH46yos00 z#GIluEmnjjf?y_kox`;CX<0rVqj}`z`j(QwfWhd)w%BG5u_v?oj-=wJOGjElH?tt~ z@iwPr;oO-S-~EnaFdmCXFzayjFgnv(x=q8J0^nTf7|@pYaYk=u2}^6?a=eGLA3ds7 zL@x!XadS4HX*RZMl}*`OJ~v4W3@OFGdYrZcv!1Y4DX2e*3ki^%&(9ysvQS?)ES%8`|6Q!WL+YDwhyP1Udj5b?m>tf~87!}HT8Sc9i1SHcSRWfrV@q1wcQ~YuZavxm+nmeKX({NB zD22{WMG05O>+!q^VmJ%Z!%0MVGea_JI_=E@`KASM>LRwGnEd_LMmu%O#$r;og z%E*_qQ7p2@QrX>7eibOAW#oQq-iy8jR$2h~Q1|68W@!0&6 z(3+oHvvf0`lL9EU{;FHc(V=|aRQ`QOUbiM`P2Xt`#$u1_FsaMU3eZ;8R3!>&VfB#P zF&m=}VcK!9pn9+q_UP&QyN39BVq}dr@g)^ZlwdHnh&Cb++|f z-VDnetfD-=%Q@$j^;~)XK2w;A zTVjJUj!&b*(&~OJ@>C3A%(m*)ybgtMd0TO!s#aO3jAyNJzXb@@usfA!k7#C8L^-Y( z^ZqQ%aj@m+^LWnxE#PcApYD26Kjt!cWKmUU3JW}#M68+Aa5j^y(OTIx=ZR%&mGP}8 zpuPRsK_Is`PUoAP@fRU8XO^O`@1 zJ`3GRthe11)hqc#oHnY72da{Nev4)T_ia%eU>ZpbtyK>yMAygBaJ}U?W1UIj-niW? z)k~hxiS^YBN$9*T&MJUFag1nICEBZIE9!bYgdsDgh$lU6ifX?x3vpwd)xgr~!ONaW z3X$hZuZs@Xq-FR)J;WQvU5Aw((x7@gqqLS)E3@ZyX3lrhP0IZB#1)_SdMc#1*sYE? zb7eo8juOn|Gf?xGvd-SADC_Sbo_5F_ZdWr+wKg3MR#;dSg6&*BBW=}AWjwx7A(YjL zRmCZy+K>R}9SSk?7R@Nu*s6OKg2tW7e0MXN`Yb2jC{6;^bD6=tGc~lAVciy7T8NZ$ zdSeLF_E&eIE#C4X7FTb$7c+%;6EBqKy?Q-~7Z0RTeb}Sv=ygX``pclLn6kj6GETSS zp(HN1>#+c%)_Wd3Cem@L%bmoL@;p?x=RC79v%%ZU7{;tlYp}qWn=#@#cN1@#GevbW z$E5?hb>eJXxZ}z1_#YAS&*UTo-;*NL*)3M7C+N)q zw@5pt?9qd<*kKIURohG`gy3tH2#7h7tjy9Rcr7+wfXeDI1u$-CBaW+?rP`X~!;NZ5 zs43A$(Z{6e>&*ScNoa%JiG=|)15l(Ab zh&yw>UF7!Mk3Fp)vyOQX=Ur-5Twnby|0BNacg$hLXLA4f8DGY`@fpK- zw|YFjFE|?B8P2SNuD? zAMeI*VnOvI)juS@;cM~RRNrsB`Z;`HBHqDwd9V6wiW9)+@IRyzz?=ouPbdU{VSMPD zM)4h2I01YeANfv;@JZj9kz{p$1Z_U@O?<*9=OX~-^7TX1d?E<|%_IP{UMp>WH{f6W z9u5Gl_FswsxatIOwOwsj+aIv@`weAR+tv2pWBdK4-m6pc)%J&@wV17ynor>U!pMzT z(=nhhYTw6K4f>a;`&N7%?IsW*V=5aCxK#%RJ)?|QiQg~jRg`(EnIFJRf zoi2Dnu>f9&f>-8@LM+3dP>p5~3s$D8e3s$IHpX@rlS|7g`mtC&3W z-m3SO(f6s({zBhBWNP$%@2|&Oan302u+JV$8nfS(K+;%d6rW3_W&t3U7bS4KHLsL7 zWfo)cn(Gw;Kv4`$6`(T<5gU^_Ffw1DpUy(&m@O__4;Hnt)HhvLG}N*TIu`|)Y?w-= zSoyTQ=`iqS7WjJ-2%L(y^<%>J1hq<`W+;`BXY+d+S@>wgkQt1|bDmKw#`h>zs_j^j zkW#yP_Mb(iK;&BMz*r38d?}R2YxzBUvH&@i3Z8b?WM+6NJ9XrF?<roEF@|(nD5{=3k75zpZk?jAdKfc$qZeISz&e%h+n@KZCky9usbQUQ zrezjcbzv$MT5sl2PwGx*igQk3#L9TI^s6YAwQc6mau#UW|F$K;U@p#QR`l^C6HI48 ztbA*MpT*w!D>G3td`skp8OQ7(hIKoRy>7FdnYA-RGuzSYu+tcfeN{WLKCSd?Ntl?? zuBFs_E_>jG{Qh#jubLz7u-pW(+q90nzC#M|Tt+UjF8e|014TPKX0;j2#?e%Q*31&G zs>id$v*zNByiSFfQ3}BmsY#oNl2KobnTrK{FK*L}6}YGtr!bR+kpXuVg>-DwLAAm2 z)^q9PrL&jLvUv02$?tuDALzK@i67WXZAq=C)+83h-R{K^Gu7S1YX;PDY<{mWZBzc& zjY^^A2`p5swKv38b>f=nF-AP)5i=M!oWNfzbF`^A1(fU6VOkv*i{)*scg7s?eB5n< z*p^oRbMxa*TPl8)WAh&6*Xr|(O%T# zP0e{iK}+F(SN7v`*^gU2c|?gCX~#&cPvzvnGCxEynIBM|`uelU1g2cyiF&upRMlFi_M#Jjzd2T?P>7<+# zLe&9fo~c`xz25B?&(AhyJvg}4`QYG5YU$t`CwNjzw3 z#FKe`r!eKTE?gUDl9<{4yNFFK!ddB`b4huajeTes_9P}_b2^X><$Wy98Q119L>U+v z001BWNklu5%cDaaXS6 z+RYMES_G`NeBXkWb3ycBF3!hY3XptKQRFWqp3dXDF2Aocf!XHq(Q-64s*}4h>8rtOIWCQA(LQT2tq_RMVp=6P{IH|11i%VH?(x{c|o=;^VqPNzyO-wr)2QV5h#UtpjxLQEG zo#WMoc_L#+?mv&kWFFVe%Ko{|JPC78?nhhqrEb(B49DYfOxgGJqGmzWtwe@3$$+rp zq|tH^DFm47(*b0r>Qsn#O>8k8W!<&VwV3j}mz6rgdXoG+A8}*J1l( z0RwRWXB~Bp*wQ>33;62Z(G6eiB_;o*ymNUQ?{kFe_ zL8q-Qukmxlm;FxseO&Y(;u(C|JMjaRB%wjQXr!##epL zcEthUpJL4CV<*1mqJO410qh~Z?u+p+@O6Xnmf{3(P;mnIb-ZuHZ(z!(@5y)poUAZGTwWWy`A4<}I`0 zqj{^WZz>AXahEOrzvfHvuQ2Khu^ThqkI&)jh8@BMzvXACHdH?wXSmdM>D^0zk@mq) z{@A5U{OEVzv+vfMX{)s@YeA=8&^qX=Ax|8AkJQm^+ z`#gc0-DD}=wAW2o;HCuf?sNdVwHw7IJH3YI^tgyFyDY>3XFQLYc?-t7bYO*34q~HT zXR*mLbu92mTuZ!aC{`0|?Q|c`c+?53_M-hXAG_3h>1`UrjprJN_;BLGQy-pT*q1j9 zAL8P&i`QOU%%zQuXB)Q=o9%OgIO<%ysT87iDFxjr#mb+{<&YD(t#4WKPNkBg%N;R` z?&?t&l#KCW(_RYa{RyOw%mZniRk8al>B2RQv^E{c0z?5o-b$tY!Zb4+i;Xd*WO5e3 zy%f6p3vnP`%L2soe8H)ZIod2z6!r^aH|El;u?4~vm6a^M(NovJjYhn^Ne1nF`Ca$Ti(w`mixw22|Aucftra_Zf>zx zamKg>-MZo}MXB9^71iDDV!CVkhUq(T$SH?$&goRpKV=487AgwXdMYSe{ii*xfCm*2 zccnI*kFiutHm|tC<^PMT!E}=o>xFSodaUAl#pNJFcE(4H5spP38pw-GEZ&OR9YSS8} z5PCMxZx6cj{7%Lxh->0O z$5Nb%?!1@dsqh<50@0)qB}$}Si4;f$uyzI5C;)PquUbm}mHF@c6$Q{p66%JuEPKni zG@0|vv}OXJD9*Yk?!~x+aTo($iRUnCr(s-hN1VZ=w@hKsvqmuGbh@sz8&CkW zLWCGfKyx$!(gHwDI%qaOzbN5m(-MDwY{BVR9NTds7Q|AF*cNAS(eu%V^B#!4JkHe^ zvM!1v&2zCChhijFVMbq290=aRg}C3Nn03)1Wj%6QQE(Ol&_!qRx?jNTJPcSYjJxxG zZc!}vcjo+bJ_$V|IS-vm0^5q5|F$HsF_ZVZS9w+@wL&T;bH1;q1^9uu0jFa&UciZ% z(~px;2#O=|N)n3dX7YL$rRdcBbJe9No5zXg%J;--%^dm5C^a|#U*$Yobfs2gz(w~# z`a3WjYr#a`)!G%B{fy{H2c||8z`7YN&xQxGe+;9;kUF;IICCJD8N*!}eRJGNb<)oS z^MIW)l556&%KGL$Wt=>Tkp%YZ=91u6oS{Z7)sCZat8oSJEQHIN#puuxZzuqMA*I&r zSAf?x94O;(0`l8*=vM&s6M3cjFycb?`$=s?d(@5LNZgn6 zdJDMjh@E*S?pEOJ7BF52K(m^}`m_XpJ6bFDmW6hs+SM`8|y&e=lxBk3s~vphr9LnwK<*SK@wCWE>bx^(amt%>+hSqpa74(C-Yy z4c3?@9*^DWgf^Ux7WGKypXwpSGJFAgEHFeoZG{=)`q-D_`e^pD)+(Se|61nt>(XiJ zrRY<#$cq!if&|pc`mgi>EwZL&5?5wyjUyP0mDzvFbv>_Ulqh|W9l4HZpC|mBkJVV> z<+x7SCl%sUnJ>=dIxp9ux^(Hpum@ehbnGyw5H?G{DFow|d(_}OfnYYzycUPhUM;f= zHB;3RWp1vylBm#3K=on_VI*$z9O{PSG)`+&-AO2FVj$`Wd@B+2I3;|fMF*wroAdo0hgVLO1m7IGObwSm;KB|n~4+Z)gt0yGbUY* z&S}q{cOmXh;@o5DAW@z-Bg^n zs#OZ1Wh%C#Q+u_@Wvl)cvA)feE)2vSv0NE9Rw?6U+ZAU$Grwr0>TBY$cOQ20s7)zk73ri7(L^tv?noRFo|8$u}c}Bw&wk)6Rmw;Iw+XY zQI)#ETQQ(G4{gSPaVN0WIxq3zf)7vCmvZ)sQ=dbGtp&rsc49m(f#p|$9-#x1BhZye{{svmcG!_!!&5SeZ<<_4U! z$q05kVwK_qcAMgmbgv>r*n-n`dK>%9I*(UO*n}>}Ek&0n!GJl_ic{h8{JdotoZrW` zoHiEf!6N(Yrfa6_-L4J%==c1uXMf~bKC$Q%<i6KNW9dneU2U!JyyvH!u>#x_`ha zFAx{vaQp=&0^p~WXrFcEXRGjT6ifdh|JmQgfdA-k;9Z~bPZTGB&3HF1w1EHkWsK^J zZNzBwMIiuuP7(m@#Mh!k0gU@X?7_G%+J}i4^p@fTa1ifhU2rm;MBk5h>MupydQm_bp%Z@hE^osHyvgLIn6gndd(q1<=SS zfJ-?aUM2#Rndvg{Um^i61OML+_{SChyRy0(-}ZX7U2Rv})%FLdT_pfqZGRZsRmK0+ z_J^yr7O=J4Sk}`ztM&S!SzpE1eZ^r+dN+>a8_CceFAMtkihlnTXZ*Sc@s8h!zeIc{ zPQ=sHR@MGQ^)>ve1E%;ZKlSkE{@gPD*!L~@7YoO(IG&&PfB9);1}de@Qh>WV=cN5g zcIu6e7{IKNEZ{9xL&KAXFqwd0uSw5id8QQ(8TW*e$#x76x!G1oYsfb(H;ggo(t>$? zs-d3CPgvqM#VT}MQBYpQCT~=aVN)!37>DC%+)ljSybwES9=NorIm)Hgm$oz~XiPO; zZwxcJesafqZ}HBLp8H4d{0ZKB@x2!&*K_Ge^ZIxe>kSp4-=O^@2*GGP14ccOg@=;a zw^d6QQJXJ_v|}pv>cdz(YZa#S#&KMuTeqSpXkaKe@J;7p2m|q)?HISy5+y6RsaQG| z%7{ghYwa?}Fiq-S1UMDc%UI)>hz+kaM6>GA@F)`mm1`T2$ z?lF!ThZBG)1^ego@B2~#Q!{56qp{92zMzN(&IRsjv>d31}7elrKymc&H`;)rYTFs<4n3n%;x#Nt$`^g zk~mbdMUSbgD^3*ah;8Pg^uHGD+OibgUKDh3HlK?Q6By7iq!dm|zZg&8>SR%}CeTpN zetA&ISU&7Fr!ea-XJ{U}bg20j%bxt9&L7&s;-T-m?)&EW@aTtc&mE*%SbMzo6ebh$ zttkqZrlu!wjYY+oBLTM!vC0gF?a2PWWS&sbpJ!Gytcta5mcuXP6TP)6M2x;v)VCSR zp4pMlV$=Ha{ZW)UHCXPl;L2Sk%jX0tx0~g|=VRf8!pK;7Nnh^vYd7d&2 zyrvKuC??sB*o1N2aSk0u&EkSlHDYBvT`aJR;xwN3qAB!PIIrqzDMVY>eOX?=0(jN) zy0nNVh4?d<+Q0FHw}#?HFc43Jac^g#xDfTqXK-4{MDH!Hu~$(&pVBZxysBiC_oO0n z##syV{`6tidHXOHo9w{(xGPTJY%JA@!MHyGk>lDGhlDG~+rE5lMUkA$bKYLAMZ8(Y zpLi(=YO6HTIixXP_%22La(wmde{=fnQ-}{GdwRkwMq;yb7>t+g#ksi8YV^mmaSz7q zjQerk!?7IaVny77^Knl+hjE+Iq2*@nO4LUojGfblg*pDTC*fc)3-t?g-0I1n7v%3- zKaaOe@soJfawh1_bzfKZxe+bEsr>tFUcb@&_ul+@umA$FHUF-qyl>0z>B-|+kl){( z|6a?VYmOvwF0Wiu18D9>7@a zjFp&-!`@KltF!2EtsQ8ZvQ{CMmdKU91n|rEAJw!-aRTX9tm+%Y8)e-SuW304lhHZ>j(H9SR9TTzNAxy>LT=UE%ak3TdF`5ofB?@GN zhDl>fy&}laUqET(@vIt5LgGtiU>au)XeiD}W&bi`fkL!u#d5Shw-0ZmMSQIQWU((+o5HRr(I@BPkTHxHkGHd* zZqD~_Q&w@4dERs8*TJzO2{9*Pn;CSQOaf4Mj44EqH43oswnC&S*KMmY;t2)7-x9AR zL2f9cY!<{IIy7RLvhFW{YQt_Uwn!g#+OCIqEe;opivX4h_XX5`vQFPOvbIA9|C>mo&Ay(Pc*1!a9O zs62ONT)x{h_Q$L0F3%T@3`A%V%vw~~*7wfoi_@5ix9wK^nA()=@*d*RJl3rVNRR6= ziMk5~u#KZ$K{KDvMW!tz)@nJow4UO!Qa$g^+#8G<#JDaOiB-9uc{9JSIZs$9g!FM6 z?7&p)bS6Km5UtDitj*{2LXPKi3Lrlk&p4tu7ahg8ZsSUHNSm^cD&JSjV_X{hl=XFa z-5kA`(4`HBa$h%-1cg~=4C1_-y@J^|;3RP}=Y!e2-bb|@GDIE2p0^gm@tS?O)(zD) zidFtJIR|o$W>t289mUlo4tZT6wiLo~xi6cTj~-}{yT;4(kIOrsE?rd1VzWKyb1_aS z`?Qb$WnDLF7RL!p+YxVKGG10QA7xS9o#ULn2qxp=~ec%EvJYBNm!n8Rvj1PwkZ47v)TVT%@JGDdG2ub`^%9zWjvgY z!)`)Te^n#hLfDmn@|;$LLPzckwmFZfD1^UOe;LaAd#x5BNlc*KweDA(0CuA@0sYOn zzucPjg%+K@Zm7CeS*MkIwjgG4@!NK+i*rVrGhKBm`}MQLpz~4IPwj5z(sh?Q8VyF* zk1ijbkcX_t zoJ}6aVi#@00=JmL+v*w7c%5sNpT70S{?xCq z>~G%m3qSAz&6k_cHGhoSPuBjYY9BrmzaA^_8UNOgDS-bfe8F$U|LL+5z~|yv{1k>u zL}v^;8|&~D@5Ba0@xKM{#)a6TI05`p{(DRLzcpXCVN{=AQ3wDf3gC0`CdOQhUsW6c zc4ORtUsIw0_G7}A;(!tb@U}t#IE*PHep7J*_z##i<`kxl`%gYb1aMw)0_elHOvOco z2r#G+0lw_xP5>W|0=Vo1@ID$ons)*yq?;1W)Qn3Xa{_1)0WLcMw4wkm696t{UoSmB zzU>LP-2O{||L;X0xZ19^tLYk zd%p0)JLvkmU4OpoJBSD3@%X3s^X_*$n&uJ+=+BJd!o(jis~dxsxD!n$QwcI*j{5=V<0xsd_A6TUdyHP&1Wv%#-+~Ys!L1x@W6*_KYW$1Jn)q_MxNpG z`}+@k{#oh=<_>?j4o4kyj=1Q80i^)kkLlPS0}2pP0Pa$zZIweFn^)45ZOG-q*;!MV zb}UA)Fbmx0v#>ESuVg8f?bFfg$#PYrD1bWSG?^F6l2j~kO|<}%u`3H?uPGX{qQL1% zrh7}V*3hg_s$9#vppKpxiUxgPVCC zHPL&6kByyQHY16wkHngdFx}BQXp$xqf!W!SFyB1s1q%vSF4a(H>?Z8p4F!) zT4r1Z`A%u6Y+8hfrY=Q+x(#(BF|5Es3$$|WOQGn>;~tM4Spe7+`_Qhv>LE!UC6l{c zj{=x=SR8vXWw+}v<(WK=o&;u#f`5;qz&Wow0h4m<%~W=EYty3?S|tF|z=>4Mx9c;d z5LEim<2p;s16A>47N9N|H%|4Or#-^N;rEVAyhuFl$t;|e>)5V6qZgWKgwcT_2PZH7 z_69$;cE9XiLT6u@XS=w(_=FoV6nz725S>zYgSh zTqBhFZwf_f8&1T?EiZ@SzZ@(_%;CBL;YiY%1G%JE3+WoEa4aF4v_GbR}hBaT5Oe9211Xh%TvTq{tovxLTgJ4TEJv zS%b-P!VcUh>%4|x8_N?I@m|>wJydpM-pK?u+w}-VY-GES>&29tx(GN*M6JY_idp4M zuIuNtoCsO~Qna(7Fm*21zjF&eZzgcv(8&I1eDImy4UI1bffpSDI zE*t$WBEzMaRZB~Goc-#2^ph(I$V`f8fvZVe?KNd7rtM9qh8N4L7_yWDt(wA#DZCFBCo!g_$G=%3GHWpJ=Nlz< zVUy(pP&bmmXLpXs`4S4?W(h#MX-~d(=J&^a6vU9d-Zh2y%UY9^^{J)3R<@Z#ukjLu zq@FUG-`gS@1mIkA#%(8<$yk@mi>{iZtS`@-#7J3d0)2UXI(3$_XlRxohSkbybZN5> z^>hF^YrR>@7F*3x-Z3JaL*jny(plnKHWtS4dpUk10wsXCYZ|&K&j^Q_W93;>!f~Vn zGrG%|*fYP8pO1Sg0O;OS^l!I2B45g0vpA7dr9q2x{5KXzORotf<6(4L;wmnsF8+*N z>8NruiMjK6r?s^l7&2Qt9D?c^VqN(_7iDXSb#jMVk~w=9_BAtky)OwroW&S7pAHLg z=bq3RkzP8IK+sI(Wi!KZWd8(llo(BunU5)6vyApzZ&yWNA4$v%f_^^A9WNx zX4EKW^4~Y+yf>XkP;;q-!^?+B;G56=OH;Rn2oeMN_qsA7V%C|m2jgW!Dv>9QQTl_x zQr6_WTGxuiII9Drp3#LlM+DKZz3NKBQUk|w3@#V(2W?h{BZ)VY*fV67awdse!$}C} zOk&%t{#1NV*@GDaWdyxBqg)BV*o7nvG{{Ja>9P+U7JExXpG;8>2*;l|)|UUp?aFh* z?Wlw{%6s;@hBM`57cji={M&loweZQ<&v#oa9N7ZU?=MFwM@?%`)|)eny-ARm)_U$5 zwFOg7I)|cR3!!Iww7jtDe?}yB)F>54h-VoXfDob~QKgiq&4i z7xa5ptdkFb8B1{1erGXd)-)c?UTB(g0^9Tl(b_Y5@q$N%1Im=;m`!iOr*j|EZFr$S zx8WhT+>8Ig-}4Vy^7sGvkM=#nPk*vz>ZksJP}(1)_77@nYyT~N%bD`mDA%1S&tagP zC||&JzwAG!4EnJA9emlZlsEAu|H`YlnXkW7e%;Su$gldlpLuOr{eRUpNeu80+$I2g z?0VTt`M7+s?8C=?+x|Sh{{vquH(LaNa+oraQ2>+WEB-Ix1n|#96hH`yG76xKrLbsx zAqwDEMHIll!MA;*{D#ju0ZeBUz|8kV0nD}t06rE%rtggc_@?iU0+@B%;k2pYJAwev zdT#pt2>{LC69Mp9W&ig^0sMYW06z2kciNqHr`>7)p0qmzfIIC!#8&+Qum68Pf2ZAP zf4EzVaayUl>of0jgItPIK6RT2@a^1iw_blIt--z=%wpg0)l@7DJ3;xfe^dT0wO^|3 zss?EemAUdN4}S3{zVAoQvwU*d&L7(Ind3QDovDuDkLplF!6X2(s|zWaQQ#d;3){(5 zw%p7I=^^OyGnDb#~s!yfjB--V8q%Rxt z5xl0oL?PjPxq>PCQ;D*~C?@mw)(5eoToOwDnt?Jc6cCX;*sT{M2_SDz3)8I$+;+NF zCdC6+6gWH6vT(fI5WqqwWm_r;<`)VTbr&&J4wMm5Q0c_wEU@%vp{qwN6=U@*><+u^ zw#DqJRQeu|f>HIbFo_>4d&>Z(9r2+kc!bJ46kP8_Mre6gOaI$Zbz#^G_Mp=vCeWdy zs$q)Kq-;}P0I;Ieai*LV*~c4Ev#5;cH%6(wrKGP{p(yIFR#LWE;#Dk4<#;0t11*@O z!*{ofS{ALL>}eU(PnO+wp>Ey{LD1+BnZ0wAmqS@@R(D$4j@gF^d(yf!GA}1Zh{45$ zGEys(yfYP&Gg*|Hs}^HMv&@r*!nX@UZKl*QRdyw`Fj!V&Buhv)6OixD>pPRmq&5T2 zVywKJ8OnoI2l`Vf*aC>UvQXBM<8P*%c0&~2dWBVZD9T!+EHa-*OqB^ds?)Q4Yw%m= zzx5=|*Ka-5dUMLODUs>kXR#V~nJepXJ~NrSvozjv)Myz$50=M;Qm0{DDE^O7PH8xX=~O5-v#{Do z3ddC0Y91YC0*J;Qs+DS4;0%TK+uraR23&QW+Ns*f+Ft&`A9?KO9{Umc=KAjap%Lca znSbMxYgF}W&KWdQVRzh+2IX!Kn54YvE%QPV)dK!Q0ogDr3T*S}GMama0gR3jB-^(6e9i0>^Yl1T7E6h57?)r{Nsb5oDKqL3b7cq=tLtgBlY zz-^Xj$4o-TqiGdBSY8HK+?$^Y_-Hf><_$fXxGplF4@5z&yrXF}fr=RnYSWFG1kyVa zAe#4~e&Mw8F0OgJJS&v+Yr*xhO<4FwF9$K=bgmO4x!#?P-Yc8peqYF1KAh{!74td; zP~9a8xS;@?3QO&B(O!&{9S&o-ykDNcXxU*aZj|-j$AG8HQf=Zj7bXo}@uE6;PzaU;0lo?J)v>(1->KIYZSISiC1ZNx~~SMI|N8_F{n zwAOA+mSF>!(v}MAMG3IBl(G$7Nv!ClT#dqU*&1WFypzX&Io2aL^qLU!dsxrjG=VWM z8N*1~R9+B3)H>WKkK2yvvQ;R{`<)d)R|6wqL0#U$xKN8vQ%(xyZGWx{Hx~8-!?56Y z({k__a8LAWc|A#yGYLfXCg9d?32NGsWHWD*NRmD*){~aSdJko*BT0-{XPmOuX4AM< zK1hgYWMN;}8{b!6h;dz3i+edN^qbCN)QBE*xv7q^1XkWD=koj-NgQlsR8K@yG&IZW zaokBf4Z_c5M@!H3ph?+PcA7!mcsfe7mqB!E%M~RYgW4AE=LsnHc-IVemM7A>KYVpsG~?S&0O3H^ zG#ySzu9X)sQ;ui!Q;RSxpN|?jU-adCaMBdUyj|7{0Pkde{}K_SQzK)Wf_5GbDo0FW zsJxO+3~}8WIe)bru=XrGPxP7*5d^DIF9Y7dyj~ZCb5#J`u})2!%j+7U2oqlOIHt>c zK94zzOt|gPaw3nbmirl|%B!g9$!N5;GLc8Zg7eM7{L|0^cSkd3pi{pEtM}3(CR|?V z_a&BM((!T*6XlTISYm~4%BEQF%SJ7G|G2_qUJhbl*_II&qt1wkjt0aKJy*COI?owU z$8cHiq=;G=$4t(DC(>bVFxD$IQ&kXQ-pg~Ca6bCqJh{u4yEwYiX=cV*{g^JtU9jMs zS1u<3;F^{bpNuw{D9>TGoO6cOQ*=3><1P0Kn&zu`KDsxfud9Y zaD|GO#q+IsJ+uD7B9 zzSjXD2>>@D3c$_skAxGzA$&cBLSHxJ7cgnK{351|_~-a$&Ii-Jnoa;8yFi)AD1hHJ z;n(oHCjGh~0Q{zK0{EiaP5|{3Dt%(sh;RbXN{1Mzo&|2yqJ z>{ic>^K1hAzgxcHH!)?*d5lB`m_b*(i*J^37bz_#fC2x)e}R6d%QIAK{CQ_7zt%j} z`~u}io3G68;K9H2z>y!_$PazzhyG;m{OvzqJ!_l4BP?gXBY@}2=(WbY0DQ0G2^V$Z zDSbXfr+3|pE)O}7U)G5MuWE{7#97=hZ4g)7uu&+v=dmgY1aDdGCSLTMEQthdSwl)lm|VKuqi5z6yrru1>^?5*`>4YxXP-MqDo#-pDOd^*q9 zAD!4V@i<@lmp6avOSkxT{oBLe?nJ}AmQtS9p9PLK?_;){Eyo3*9SZeEt1t)N&oV|c z3-l7;m??)vA+^I^Q5ao>OY!+Kl8-CBQOGh{b~%l!9!?-Jv>BJOAiqC>{FQpE9?X=h zVa=xBC3IR^-7S<+Z9-`g1>R;}o9;3%0H<@9^m_hF07{$9YETZDOAFy}KA0%`JS{Bw zBjdLt6_asX>!L7I_NZ5#s5=1cQ4he<+VWSBsUe8SKyS*rY|LdaQ(uxTPU{Dr}8s#z?Wp@eU%bVU6g~CwE%qL(P zZ8Sf(Eyr-nHKCSzgIx_L#$jQ?6mT9zAX=QCr#cec7L5Wnj1_|{sgbJaOJaLqt@R#?~`!Q~+0l;^!}3KvV1z!vGVO5BGB zKrKztYYBKB*T7JDHoZ#%;2yHX3LG$NoN^|WMRTcnn@obixJ?0|mS@bM!%BUa(sY`# zA%T*knq|LGVD@25WWLX*-f!A6bAs4$g0fz{tfA~MpNe-0L{FRMuB~^ych}p@zBapN zb}xVS+Mj*qq1D{|#NAhZY(KZg8H zdJ$KRlwq7L*R4{B8qfRpzEr}6^0S%!HLqFLU|v@Vi{tkE zo|C5WX8Ay!a?)DkSZ+`gi>z`5ZQ5J*;f_Z4lvnb5Hw#PaE?jZR9NsKv)hW-Gw@qP> zliIO39Vogi%KJQuyfn-6pi$ldZRLVc_>Z~`=+)iO6o4OG@o*OI59fWoTn(4wel3TE z!g#ZWY074G6O^^Oj0<361@6v_<~D5(W2C(0f>2(+g=^)h@&c|~TQ;G~y?Mo&;2e4lnqIE*p~0#&41sNz|RNy zxhwfT`^hCM5CBXg`(Y6#a{tjVQg&g+IuD7clJU4-%JZ18-y0Y$Tdl>ki>?ZyNLX86 zbx{zNj^T(7OWn2BKfh!&gr-|}z zS%cB?Uc>;Dla^y~p4ZYKIC>xBLNz`q+-0Uozm*`;G=!s30Je97aff2xlDmZ|rvwpc zB-iapi_vaLhEdhZQ{tZ7Ae7EWgab*8$1clp+T%%3*=GjtmIG$Vy=DN7%h1%lKpfki z|Ms>p;2y%sAfS{d0+?zM3(C5(#|#daok_s!O67GpZ!|Tn6NJ?*SZcX;9C1buvrtPdXw1IuD!gUKYuBXtE@(^AO=h&vF07e%uu$K`%GfEoHd8VR#_D1S5D^l zyeZbVbLh0pq=k8`43=k1;zAPBrgFZknYTDUH!Fx7moVX4Dv2*>P_~sfOk;7`99PLi zX*nAm7wcgsy37iPihGkt86$Ojc{!p@Oz6cDjgo5ZvQFrY``w;zhaAvBd9{RN&Yp58 z2^DqA1Q2*Id$oq%jAoh&pshS(%rwrFEepg4Za+VK7V2%ar5Lj&;=IZQqk>qqj3oCl zkl)aiUSZu>DF`;P&X47KP&1K)oi=RGd8ETY5@nB=Kgtcj-{q$Nobhxig>50l$~*b{S2dF$-HHyI zD)$Hi#ugEYGe$X)^UbF0!AY(AO_>uBB<~0!?RBAGZzJh|0h9%?wkMr?uDXFKXIx^z zuOUHe;|oOZo~ni+U(klh5(N6TB%V&^=LWLhTKC*%Tg=amjCSfQ&!f|vSFzZlBpkFd zx^owi#DF%-wV|te-hINdKGwNOqgb5;vXO=B)m`GbW=YvAB3j-@o6Bio-^RDGaj-x9XN!IJhauw|!$jG?CYB{cH(@xo#M1!dXg4vv25dn4- zot9NgF=H-?W^-ydt*rzI->(~^-pVM&wz5w++{{u=s3+mPnd7b}9VCWIzi)6C=pCL5H^Y&~NP6khugJ`QBvJstT$|#OorHgOQ zesk!XPjUSxzxXrP{~Xh2rYEN_(OiFPU2_M`dhH4(Wqfoa1=(dX%fetby~>{0vMwg0hpFD4@rWa;uh@m$|}{_06P*xMh(Fs)~HR%?UX%E+2D>MW*B_*3|{Zs(LyV!2`w)z4I)`d@{j zWs!Iwx(BnFecNMRA5K^q3U7oc@I`YA)!{d4dShEgys~N@xp&5MJ25;aA zH%(!=6NYg$vo$YSY$dL^pa)Nzu?hREvI_^x{Wemzc~TGMscNgmG<$AsZr(@pdh=|v zkLE!0wU7QLw^lWtx^)me)t>4Yy3Cd! z0JM7nb1qg(FlSVqG{zMMrU{S|N|L6?o{Un+)dY^`%7+4I>~OpAJD0!JSgb0$kLs7Gwalw)N)uTw)5^5X$0N;)-NRXb)~D6_)iGL-*ASqKkj zfs0vKn9mYU%?f>}yO!Ft(Nu7RqVi@IdX{Qs8upY>hTWUl;JqFZmfT@&8Q(j+K%nTZ zR$#iEDp81iyV{IyOG_Px)JvVRCp`zI^$11LRXZ`|^(^{bOU2oeJfis=hha5+%A5w} zgfW|N(6SOS1TBl!R>3S%A+b?sGH@vq7P((&>p zIxQ~iP|pJH+es9d&c8FNueuM7@?JTLDR0{%vdY`A)08esi)b*Yl}X;n0^^&lNQZJ0 zmvYZ~IDwY_g})OP{I&9O*-G`eh7*)Wn}emBiT~v5&rG~d@6P{dY3~i3amIUi*c0Bw zd`3((oynr;^|ZC@O(o!bc`ti33J5bG2um!=|jzd39TCj;#XbhYbDqDO}< zZaXY=YPSzvMq@rGuVxnR`Ygx>pnEg5${lH?TsLb8nrhYwi~pNKK^y>45Fa{ISzj-^ z%u;q(V=m7xEVpMIMqQW3@@jTxf4`RRPYY#VDDFpH!&rGQt?eiBemswu&ze}~fgE=+ z5ARVoP1!4E^3!=uuI2IeSd@U{xh(qjdKu%X)EzC`lIZnr60Ew?J~aqxi!!ofJ_^~+ zpqp|@%%E5De(z01;hcCny`1Y-n?k5aD>i#(1RKhN`%2FK82&djuKzFC5^4TON-p;%awdB71 z$zm;~YXE=qxgLB0sKTC?;iMVeuW3;dOlGOpI-@ycG%RW<=Z#}HotI*avNGd7QHT(v}v>Ltwt1Y7FLRpq1r zE+ZOXU)dhxx_SYuSdV6MEKTJ5Zmh`p;cTpP-mJ!T zVMp0*2HkmIw^z@UQ>anJI#ahNP|#dQA`ngZOnhpJyJ;6=ggX?2~1qgIH9(>op4z z1Lb`5TD2qBr4>1k4tZG@?lGcISoXJwb+9d;W1dK7tEZiI74zvN*QK{whRY_)1V+-i zYZWDk28)bi%8}|}LF@`8cyqzo0G8xB*|NZ&(`vV$j{^9 zcx=!4KgQ`~*_Z^-!HDFlj(dvonx*QvC)V3)Kzp?aBN>&~DYOu=Be&g*N&~a zbzqgtVeRiVAK+e#$`0YYRm09y+%HKY#WT6C4BGA@YUNB>i@xgB6e^5YccZRZ!eOj4 z_v2zpXs?$kyYgX&yxuuLy9m+bwePZsLw8IFNP^}P=0bP`lxQ5jmxgK9m;>x{-t0kBy zyDdk1^_B@dUOiwZ^(~)tfAS7rdiZAJO9vVGD<3`k(ZAvcul?ZaA6!Y>jk{iIyFl~s zU3U<6f+A(GUjhFd&|Z9>Zc&PGg1D9uT|4 z#rPYR`jGOs%WszdjUV`_ANb=vck}R<9%}yh6#sbXKm8M@Uu6D;PhY(C8r6SX{Y>p| zP=3QdD}NaSezE*A{!~P8`bzoLYCUdNK|uQPa*gBAO8@{M07*naRMm4BtTyPS4EuBb zB-LLspbJAuwO#JFs_&zG?0Olcdf0FINH_qD;A3B`ejXo}FZwdZtDklgU-R3p;cMk) z8NfvKoJ;t+FIWE*U-uPf@D0Ny2ml{d{{-Lkkzd9)eYN~ce9OnxPT>S_iE6ot>c7LR zZx|2}JFO^y8~Bcy5(I#m>aPkXfRB7O3Sce?oqx;{;Q$a$0Q0^j2mrt9yPW`nSkxi_ zwCYi}BLF@HHQxuHAp+c$@1xFIrPHeKiUO#VloeLLryhGpZg{8NX?NPc!*+)NaHrjA ze{j3AMBizDxLc*lP3djRDwNss&2k+~y;V?LZMd!5-M9pI4+Pf$!KHBx?%D*`9|>;V z1P|`+?!gJxNPyr3mq6nLf(N(F-nCYpQ#CK<&Agmnz26w)9nS{;iOjc|+*dyO3vT#; zdlUAZC+&87d;pTU=d5H|z>eT(u=+7R?JF>IdE>&P=6+T3VmpxA{iZGWpKb7M^eXvh z+S>?gK=5*~X)G4wG|lIuW-~yN<}HS`#<29tLyq-Q?QdQ&hf?2~>AhECr8Y>ElX0m# zt$4UN+$~=TcQd@yYg03k@pt*KhYz?jwSD!&w$GqI{Z_^N!dBv8OM{;C3HN`Hc*0$g z-ELlk6;{!)?-vpi=X<{=lKF=uen0(DviWX%^6>lN?pJ!xzcKUsuK|uTpDjg*j*v9C zDoS?`x+bKT-@hKeD35G4G@3Zf(*fdGBAkpfAz2MfE}!ah+{m``xc~bq4f*ZdKTtYl z7bPvsr@7u=BJPC=@TN)M${Fk2(*n+`g1_ZuM)<$6SYIC(F-_Y4kpF~#9R8hr)a(@w z)XQ!y3y_cP>iO8_ZBjcv$cJI2z9$&VxW@apf^}TTdeE8iQiJC7+v9qaPQ}7l>;*|# zZ7W8zFaG69OK{mnCkZ+d!z84pivb<;H1&6dZQnOeEc368a4*wffWmHzP8AgkE;{=& zE7jO(zLco7H_0bQhh0w##U9i*i(_&?4vwGHBL9 z4;SGL(kIIFGbOB@=gp}LGiwIxET_EZQ_LKT|HhdS&$! zGD0`wI8r{ea3GKXcGiiLlw(ICY1_}QI*G)Z4tI9wuYI|~n6RIpG3`=*FI#Gp!+tgA zHm(OO$MEf4?YHB!=&}fw=T3lrWIcAO{L{GJ3vlI~w?8(*JYO|pbzvXzE1EVws$N(y zv+nT@I++zX*|;V|JCPhsihmxYHNBX{&V9LPl6jgltM3k8loLBP^u#Z05bYJr;i0fr zWC7bYRR0wSgFPOp+XR2)W{F$BPc>8>pWCR16Ok?lo6oKcG?3Dx`|u z3NO>#MCS>~Dor#rR&&%cYyE+3MndvSU#o345$-O-0KAeHeg|FKq)K=f3Km^*p{8H0@u#Pqw$X{ZT-h+!GbL{Ztir{O7g1v3D$-7y& zJlU1aggB)r&y&2+x|qC7fl^~U?N2*l!~rVjPbMdVb-P^x#iC7?v;q$@YJSl@oel&~GfG#aT|IU_uA4ebyC%CeZ z9X1BoTWMhi3#9gvhrQSc)1j+tLQksl+yOGyp7Oz68DYa6IcOArgl5du3N!`K5x%~} zfM?@MmVhzgxv{-Q(l>s65$|QkT}X8qIkVzK3NLOu18e6}w_Hd7*7jzUw!y z|6U#7kjo0#!oIjGkX+H3r66w7YB986l0NIrL|85=mKIuv=CSTy=tpImH+~eTO-Z6_ zOpS*F&OJCo`F&6&k-uHe2Rm>5+xsnN+b@~pSN4q@z?62dT-i}ob?52aC#J0m1so{B z*YQP1G28l2Kc6ki-fs@u!j|>4k1Ovt=MUYQ)AvUW|J_Pok)`Qb{1Ml$^T!IDcW`zw z&M}X=E6!0XQsTQ|WgeusFo^3li+vXwV-;bMfwK>DwR(8kR6I}bI(J=$ zA+_Xz^Fvf7S^n;qr3jt>cE#Mq7dy~oz3!A}F>+2O7%-YnzDr#il-a`k2t!*kb58p| zgvwu0QG6#nt1yfacv@i*)q4LNx;U=ceL(%&$A}?H#I#Za_tW1Rqn5m8(>Q$Mho(Qs zB@P%)VJ(lb7e%Nfy5$@{y2$wsX7ZwM?;He~NB~b+6uaW96Q9B?_bOV`9sL@L{G`^* zea)-6+XZroy&pb&*17RXZTvl3cAj*ZrSs5Li8bcQ_|2kqFtB8WZK0bSpY_*Z1efDL z%SDQks!`#aD~CX~+lSF*ve@}HX_-#l@>M=IO>mfP?!|`%FjZ2RiW9P z)->0oMCBrAq_*qhZ-|F&%j2MiJIM_Gu2=3d-th@D7uB76EfG19hFkMGyD{?c+v8f= zJM>8r{28oW`4-C9!=6Lant~V%h-hS*d+_V}0E6|HSOeYMX7d_}Ci=r_`KvBhGGoiK zf3FD>y<>U*mh!){oeHrUt=X=)^RR#(!%tjMh1)|Kf|l7nlN$*Su^lJ`*wsHSmt}lo zF0u55(N#rrD@h6`Dgt%1zmIxJ31QM(HNEm87B;^p?{*oG<`c}&)jkc5wR7bVtt&-* z)lXUim$%c>us!ftml%Zzd>yrl>(Kb+U5bRTiYphaW}epTHh%^7I)5LJ{4O2q5CP0J zaA^pDhU-_;6?hwjtF` zVVBi{%C||T=Oq`cFG`vtu+n6{GWI!c){|aqi;2ly@)tes;>F`C2WEum7XeKAUn*`i z^V|K2b$J`Kacoi=W;+R*%%nK(=M!z2QlDiI&V-W^l!Eb#RQ&8Tnv0E^zT9lGVZVdV4S53T>`Bge%J!gUXH z7sD>Oj^umMSA8U?*@H(0f-t@Y9M)UZlK!3$KMg#|O#RRGCg0>LnEM4K=rwZ19DZLJ zSbVKe)hj2w{wm_Ir)*RP^*mC|t9P0_rIWc=K631`bNQzoN?x+h^BMeUWW23%q#0dQ z3$TKFpUqzw@19!L_Y3E_lRO5vRxE_&36n~Y5)&@(3S-^{hP7+MRN7acqQ$VRN5P^hiA!WWB%bRBx|Jk{5qQ2XLSzGHh*M|OP(QB zhfh{-xA~zjnoX0NZo^LfNEpjCpS_>g3*P=!aaRl#L|XG z_c|K1TJyyqE$qv{A4ON5-rh337K=I)FFm5H^`D7?EJWjlbQsXekN?fb`ZDaw#H?=F zkN@E=my@ce?$p}+(BxW@=q6;5Zqb~{zvs2ET?dF6P32&0DIyr+&GnwNF1E8{e={mt zd3!pJ)_tvmJ&~5&pX41O1$@^6&6+yN%JMbglb_g@HarG=pWxCEDhe)Y!89?wYdSKV zrd(ia{!Aeg;jcAA2sH{O5CN&SYP34204iOk6NQT0<%GbWw{joXuEi$h({yY{-MB60 zyjDZC-qrls_6uqN^Hk`X+Hq^AL55uZE6zk|XrF8CAlknn~TKjxIfbxv;BRG&nWT5?*HxtvCd>z%JZ{ zm)3?C7lMvQ79DirbyTWRTT@kbId%SDTpxvmjVZLwas zXC%k6O3MCt+Q)v-ck0C^z(!hSRx%C~MASM_0~)`XWFs6xSP3;rAz8k};7}7vAb}@i zoOzLzblFT=>bMHeehr|R&O6aO}e6uGBu@?kI7{Irb20^`KrAc2XkI!$tP$;j_7+DnClB-T;*;F92(212h1I{J0;%3?B?$_5*fRd2H zX*bJpioqC2z5i=w=Xc{GwzY@hD;~G#OJzIlM|jUz^xu3-wP?3Z+BJ^)cM0Uym2!UbJgJw99RPVFk{6tWZ3%hhbh+C82K<BV+I%6)wYfA0{M8_SFcSQ-!biW z7gNLdx7lNUF{`FHpH{AsOX4X=pb%2EA8dNpsIKM$@>1WOqV6i4Cbs<;rXJjB7Iy(O zCUd2PfqTh5&1)PhrfMihx~rPrT#Aaj_76OIG-D>$Uz8e`%*^@?47I&1hgvTr4qZ~j zKRvC+`&wEv8(5?AUGMr$oA>*5HsuVI2=e(~+mY}}atLa8tk8e%)JMC|nTh%;e+6Nq z)>`2sC}N0W5#&t{sND6N$qg-g`xMSo!adc?cRDV090Dc*%dwOmxg5$3xO9g=XR(F| zm%1Us?Hc#*oy|L-hG=6LF)731oRR3~-zSX8IP-6inMPI2;7-EF=w+kE_;;GuKQ=ha z39I6I7hl7WG9B6W_^WEeo?Pk42De@WC`R?QBd|bWoH7D~tocI92&zSx@Rd6OU)=$` z;$I?3jPmLuk@xHY0thFzKqC6pPMDM_-qINKG|{ z-Eu1dF5LTrTn-FIvK3`U@;QT4YsJRN?xW_EH;I^r)hj4|&8#GauWc ztQJk?<$VRC_&jzYvXUvVwJFctz?Ei!$@&`Nht@XuO!Hp;eBALLAwH8+l+reBIhG^MXz*0&sVod@&bR9m)-*#Tl3r@myU_W!F~ zqs^OiT(8&1Ez9MQq6(@OqemBF2Cs&+NPgoQ5?RT8c)+T&C~^Afw&u=rG*gf>5vZrq zyPg)O=D|ft6uOHQ$&(+s5cSac4P1jEJ@?aH`fv6WCdj?hbwo-yX}In76*?JMT&#Tg zFsZJ)xG*=zCL+>UGeZ!oN)`@@5q18xDueFQ=2kw?m|-nUrRrxW%`-%1+26?VHnbtM zfuj#oMkw@$!4L-%GNCk&O#{8<8+ONr80%Q0;sv`ohmS2r+NP$jk7;dP9hdS=8+Xu# zagl${cHp*nRD7PGoKn%@`o6@CZ{EYhv-XZs7`-9ggwZ5u)@wE#3jL8NU+Y1f8&Al6 zB-`BMvJZ7zjUnvIraw{KQD;#S-%lOkeY11WAPydy^uS`d1gE`nY9On!?FWk z3oRz;L?QZ%JOEA!h;2tU5S3GgBPHSIlhQ1s^L%oYZB{iT;b7l#Zp)LA;g!>x(l_L4 zAYhqsj6aWzF*wE!pxq7K5~+>AU^-VUb6Hcb!TviN_@MZL%Vy+FbI@V8;dFowO$K?2WYMfi}XDZW{UQh^?mRK??=OiMLyXSd65#1_2 zsF&Lxxk|7~FwX=AG3O!w4Ew#66$|ngvgJmyC2#uxccYnp!%-R+24`A1KvH(HVN@$Q z2IW}_KENh8Eb(y`m|<_@*jEZvG?gfQQCQqU(qT2!I|64Mgo9@zb#EaFIQKBAJw9v> z>yTl%7=ajQ0nZxc1bYsk>L_kL`7)jkYf20zxU+XS{<`1ebJ}|+i5NCFzYpW~2CUW) zP$B7EFdm`k$&p+tz=bvtw4m+lH>+qdmys{T84VIRNS6PWxPhM*Z|t|yl&JKA{31xIN1p@ z0vU>{bpAyRpngk6`yUO8MyWK6HU@-F4X{CH0QRFp$=Ngrh6<)6kDvtew59a{-wIa!j9_0=tz zQ3Cy=#23)?nmGk9r53zUt06Z3;bkv_=5^;~uK)pE&)ed(8{z-uQqfRIAfK*J##qJo zjsMJKkYeVM#j1rM$(BmcTBBz)#~z~T-%jekb=0tqjj6N5Zd+1W#W9X$?_PQ3j55)2 z(=pU0DR)B$!6>Y*(1!8Q<_9yyrM*FO5c-T>!%@wgGsuzl;BcHIin zlPxWZx1S;8G?4oX8Oi{F;+nBlxbKnT~ewizB7n;7&maa&it8f??e23XKOHH=fvn3|EI)hLCaK;CM8!ZWP6 z9IKut(s+kK#8>vDbNg#mP8yy<0q-mR+-J7en)Swkhbmss+tI^QHRL6r4+iBBpu zV#Ct5i6PSu1Jb3R>nFcE>7PZ0JA(wukt;g3T#fcMYluhJE{pBjIt~ygPwBsxMUB7 z!T1LZYFKp{-|H^1v5pwVNiKM)3S(^FKLl!35&wJouJ;pxa)YeFO~*RyiDt;jDGg2v z1mo)7_o5{FClNB%mpdsO12`y51$hs1 z#E%y)#-s@HPPJZ}VyJ?H!ar!MI@Cof7h@rTlWabLspDC`H@cK1W3iSq8jRLIcRM)laQn=}5|* zcQB0a&@|~|K;66m38W~@T(gfr>KDc;BKV2YpGKs%EzU!seL|ZlRDQsAYlK)ri(@NF z2BbU}Ir=j%YDveC(6r)@6F~PnR;Z^|Ax@h}Jz`-4uPS7-4l|!~PzU{(5o_l!nJ*(A6 z0)21T%3Xvq)rDi8o$t3HD+gEm3KcW&n>@Uq`5LM2}8K#e7fATTIICf;V~TfyG)iQJ3RsaX7rwXcRd<@asXqF z&C(=@kgEANJkmLxVce?@_@0vfP0WFhGDZB;x;N84MrYx+kb^-1-+WctoOz=}C&O%Akc^`Y4>h%=FerI~{BTJ` zEm*HRx)k{wdkwuF@2TU5gWUbqz@o=5Gi_v~MMWZ~k7_vsm+ z)$wXoBsnwU&C_q!?rxXg2o=vwtQqTAdP528{NOk|Z^w3>iJ;Ncm;;Tn9RJ8tpkT05 z3_hJgHBrfdgt$CDS!?=FppyGa@9=TseIYRND_H0Ukz0dyvo=uF-k1fzkoGo;Fj~YF z1a8km1@letZ(4=0EpgQ)pq2g2itMaSv?);jA@U@4@Z+Wv1A#M8x7Lc30yAyxXkAcL zs!`JHn6-cvN)IqX4$Na?d%6LjKRP(6m~JJ)yq?8XRd&e_lOM=9sL;FDd=*OZVK6voFD5agQ(suh%W<0Vv3aPraF!Q0Y~<3el}PtZrb< zxmy&|725}kkG|Tn(DsFDDr!}LaOWpcH)#(X^L^>`D$J&b#4}dLu9Y|RbtIV$W(^*# ziF|NN%FXvDc6(DnZxK{;BgjFy3S_hD>=fcN-e+EZEi@wgHh=I++$@X`!VU?fu)Vo@IV57$ z*eUEFTytjjTLPNKBkMLK)oG`;>p}^Bf6rf$6FVx!B_a*KItXH!x5HE$|L7KpL1(GI zBa8oauy4}-Ca8Cz_bqUp+94@Xm;OQoZeIRuS~itme?Q58rzoEAt$XbUb!eB%rL+~J z4&nR{zA;2CqV^$K0dYk+pkgM8s;(yP+vh3PeA`pCuCdiibaON{sPI4 zGNPXTiPZ&)(HvF|$PdIN+mbkf($}Af@eFZZ19c5=Pi^0Ph1zx;;j3c1655r*=o>hG zjj@B1_Lnfy^py2Iu;)Ex18?!-L*#|!8rE#=gCKU*=O=zFtN|?pp76Lr^xzc2ZZNy@l!mU zGGHJGMgR5%3lbuM1Kik+zhj1+@;LMYRe9}tF}q^1{C^32>J29Z2EFl#zz?EUymStt zew`>^o9W4Rd6zn4GSLCo#^5x;+qQN>u;Pem!^!_<0RZh`qQEuadQ+P#2yUea;K2v@ zpa;N3|AFMzOL4tH2gAhxGb9PEz(%VU7Qp5 z_UgvUa&A~PH!zO>&OcBc+`cWSh`oBZ(Q1yw8<742D47tvpiS6)uQ7c@w6TeK=KK); zL?BBlr;^Abdo3Hpc@b~1Tekc16#tC=SSxuu+Nsj}hVM`2DT?uCrtS=F)H6;`pIIm= z5g|A)CdD6(6-i~89m~W#nM7O9=HyZpsoeU*%AgVjltk~>>tIQX1^vL^L?twYJPYO) z90Az2mpLsma3DiO5e){S4f$g++oNqVU}n!66ul*ZYaq`gSwr$$W8~I>EGK5ltmwnP5ca z)MTn1^MfXIM5*s9H@>zMosD(D+s4#maHfPus)`O=3Y|qzF6#{KeheJP?uCNpQtk$y zCtfqN!x>A`1^y!*Vt7wCflmPL2huR1)7L3p59gN9oK>>{(hiav?M(C*-m`{`9ezZ^ z0a3>LShS+Gjmj>ZnF*~_Hb1-)2SwaM?Fh^PKz}Ja&H7Wi+sWS-dq>D+F{8yM-k~eDO0wUhu3j9q z?R^xI+4eXAf7eossb(R2;8+6 zE=6&*t{fm9_yQ4SSrvic!)#4|8F^qd{qrhSpd-@?acAeC9EyJKkY(<=5N% z!6d7auQ3yfR~j7kd?cD`6ka~**G7?FrX>PA;c$^EzhyGo+RZ0*bX z36NPUgOVl${!J~ddLvZwKD%$9n>oez?e|p-r0XtD1|%YkVhIX2tOGwobF^lV<|k0d zr>yd_C}6~hCJO3LLg=wAn(x}muWWXyZ5`pwn{dwS%cim0rw>K!f2#O!WilJ6vq*Pw z>H1B&0g-PHS-wyM-66JT!evNSAE*fnHYMv1eAsrD&{f^%^Z?sV5IlXd`whRs?o3`e zlfG;`2-z^!3y`NY^L-`A6^2X<(aQXR)S86_UjEgEnL<_?N|+n&`okJC!v?INS4NXT zl2}`jNKNp&?&0Z^!siX_xz7$3nId)D=U1FDM3I_1ba>3pvG9~`r&#cMoH2ERbwoF| zs!?$+2$QOLTgY{Xq%ANDe`uUq?eJfZ)RPGj>__c9A3fCqhN2KFBCy`f`*8kP;Tti% z)iDVm(8SUzYKp$qtXHz+Qt~f6fm#Fj+`0#odNlL>iI#hpAqTNMzFC{yIKBk+)-K+h z%sl$bz64K{OAeD9K50=8)AX7<8NLDE98EJRgjZ*6a(z{Fowqf}K9xmVl~!8pq(_uX z4YvAxOwPDSwCTVZlJdwI~_<+&>jc6Y81kSQ0~^ zN9~yX-&TAuVeW9QL$Sq*;DtX=Mri$i+xLFk^xJ*45atpmXdr1ig0plwG4#-I1L-1+ z9n*c#cYb2{a2<*GO0Lhl$ccs;hd)Sk_5%Z_ z#Kh<;km=ucASH-~w#xuw?eOYWzF zt8nq!ecg$pnFL5xWC%3*HfVKGoi^%;X3NU4T^WPy{l+pQe?EBb`rzfk$6<>mfr*_t zte1(F&=*D0)?ZiuoBaq7 zfZL3ME9LKMLj5f$=dVP7%^l1!)TQ~LC4xAibEqaL2l9{qT;LySWaZ5$_KE;xa4QED zvsK|TVz%SjVLd=^N+Fr9ygb4SyF9&i7$ZCARTZI{57cL--{3FafyoQ3G8M$h)gUpA zB%|p$24ceQ&!Sq#$p+xf^txG<#h5YZ8gEk1@Z?9^we{nQy-+KXlA2%|Xd0(?hLim;WtXeo73YL>;vvo4tvclr5*r5Bg6kh$y`0 zY6TZJko1D#Zt}*ffBbvqeF0jCbsv@#Ma{4aDsJCJpPW4GSgZBFGB|2MEDkT2VQdNc z?-m`YtMvRw1c;je=~Yowfvt*7=_0rkGI4YE**amo-0o-w6MiH}#w_mG=mrx62$Yi< z!1$~XCttiTSk5!XRhD^mui&S}XJ1F! zGhw4U#>kwwzeRwU*)cPdz877Dv;Ra7X3Pbe6AEQZ{i+v&6ZJ20Q}k2YSx{Ea8?$SS@{y9x@r3L?aJ@MgZReJ&4R)jG zM#>CWLtEc>er7n6*eIsFg|C03$pM_9*C;OhUxhK?_48Yj6XY{zgrzVrNCEk6cj67FXBiCeqXoxa?0~Nk ztB+%?Z*G+lsa1rGg zkn`UXT7wwUkCyEy+n?CP08AZY5@P;m!U&Q04lI7HEeeg;9C|d4Z9H#yo}dt@&)yN^ zqDM;Sd(S zZybn`GLoOicuCdqBaOC&Z#tq`QzQ7F8)-%(bvwa2mbN!CG{1mDWv;OlCTrEf%Mt&L z5^eIoZRKT~wUz1R!$RF|+blKXwv=zet1zV0iS>Owm}17VK~W!8OY6WS67kTFW-myO zJ_@u1^A>0be23&k%uVGT5}iBJPIRONqi@d0Z~PKuN~T-prxsnTA*H>r&+I_{qZ`g2 zZ-|DhRm2!2p9G;~F-ly1<<(&-p@_m(EzNa;`7=n%+1T3sj#B%*+&(I~DO+}$e1TZ# z*(VKQX$OidM%QUm*V0%(C=V{TTb0)S6e!zq^2_h)LfC*D5ttpTaT1!wcQy-$P1DAujm|b7Sar^)#^47frwUK#(*MX6| z112CXv0)rKsZqc4n$veKsYX9IQVs^B?;v+^!Ek zoQSzpP2-Aue+v^ffmNBz2cd>T6g2LCJMCQ7+Ue|Qx?oj2OF+Bayug>-Qa0C#7xQpJ zvxMdWEiJ|Y5OpA2XvqQ+Qc#wMnJb>h6(Ikij@izpe^~SZe!XPBirW0ECPY^$Y@O2y zb>%oEH%vAml1biTR#ft4O5llSkYqUTYwQ>C)*c9+9T9lLl9V+hSEo>d9sWVeV6N6( zVR+$GvW>$9p8{ny+CL}8{VT6V8iNWpT4a?DhO;j1o8d74bWG%q;XZ2}49 zw}&Qv$7@_!T%^-2dD_>Rwxp zx{u8Ecz>Tq%AeSB1fut7_jK)S0eW(@bi?tEYH&x~^ut`yBtC(<`W=H5E`Qli2p(O1 zSCDNSw1r04p@R)@5hUyJZjR3$;30t~)QsjIYp6`l5@u(;qhuOIGSO1r$}D`!C@kB{ zt%V`gD%+3W7CMe@?*sbdH@qGKs6&!JK*a(!sxQUr7qhbzWImZHOL7yiX&@1AnPOyl z?vs!D)%SP89rJCeh@!C0E{^yLHzF_tg*Ph%pDqJvw>GkgQ;SMKL3&5i84Dd4TkrBj z>XIVEwn2Zt^PAx~=Jv2dA#L?4UT2k;Z(IvR0jqoI8+r3r8ztL+=WlMdJqC$m&$=Q7 z-@fH}*DCu{d6RN7oxux@ zefV1r@J<5CesV>rGT(Ls+Idn?5^KTRom+B_MEYNO{DvY|H zZ%;ck4SV1-2y`#JmKQuK9;Es8eHhl( zi0|SmB<+?rbNPhyJ!;DqIe1<&+s70*>9GKNVJc78eBOp-v8+9b!Y}fQtZ(LUn*{z5 ziqwlhRv1kG;$>6QwMMk_=`p^u$kOhw66=o&*9M0%9ovd&A@Y9f@~d|jIf3xGk#fH! zhxB86;xD%k63v3M-hBj1&j^(B@eDqHPWvaQ`ZhrgBT~ zc3+(B=XI2bnCX|{0W-{1j<@iec~;Z(22!eval2`9tnh%3g0f^b%Y@f>Dc>pZ}e|ZkwJUg)DL$O{=xLY+P+i`4}Knef44L@BP2e zShAn(;JFFB?$`mcf->OZ9M>wp9`t(4RD4RLU#%&%w~rE~ZbV^|gkmDAsy$RHw>g2!@PyJk5X8Bh4w8%{4itA}?{)`s2>2yx~X4KKq|oS(&P8Gn~ki z*ah^KT!|^`#F?QS&3lRz2gQbzp5F!KOjo_k{)@1`Cz{u(JZ1)<&a3G5+aC}Rn7f$py;^m_hD4=j59y+i1c?>Q%`$9A!21<*L`<&uN0;m;(ur}nOUVyRKmoU0me!K+5 z*>9XoF$QAuVXh6I)}o~dMV_`9f&C#q6yxY6kWqWNFp==-mmDKdZ2IF0SGf7UJ`)WC4)yr5g8^A-mRFKSrh^5+(983!dEg~Rfa`ZWPL3h+El)h( zOaT%E^fwWYGwwvHkZlRNJc`xpR=~m+UtQd2x$s)FiX|w==vNZ9_#!%8hYB?`S8K;q zdl~?-y8w*zUGW^|ke4(v5_;`1mKK`cF>>8wjCNDxek19#Ggui4RWqEvVKM$t1+vl^ z)!+^ov?e!alH)T2xHYY1{Qh+#$d@fgJ-e-=3OAtpsGm}@o57iJt+ed%l~=bQ%;wOI zZZ!1^L!%^ilbB?!P*nAqPMUN*+@7`H=BtJU#sKidss!I>;rjt{r(Lx#%1C0PSQGBG z1=i+~W6*J}3U10rHX^+)fOJ944OlsQnn|3a{hcGg!UQuRh6+%2Op>RR1>kz{HnN+? z4!rLQnnZ+teV=RmuhIjXk5VOt0i(c<^qBYLpaBJa$H_GnJZgU0`-kF3Ap-j4qb3Lx zEtJ?-|MG?yN~4{c)ZW(=Eo_nP8aDf$uEfCP-(~B=Vfi~3=##skYh->Ehm;6C;G#x6hK~;mpisRjl{e1wbqEFuCWi!#`f+0VeAQHE zPe|acv&y9!u8o}nGSaM26pS;7LXCMlJv~ReBF%pVy_2U_d#4C`L;shhaVX6(*OQ0j zRl&~BE1rX8pHz^Yglx)~;Bo#}-_zzyJd}4i=1$M_ypvG%9Tepx|w%6MqHj$Gk zN`X`Q2#~mQ?Z2N(9Eu*k z-v9i&F33BOyH&flx61QC@%W~v@neM~p&GbYE#LS$#1Y*tQE@|US8>oV5On=hi;w?6oPMo>Sm>Q-=cFwNhSF(ND zXgEf3_gbypJQlzxpey=lxUEv%kV^{N%D87NHtaFc*1#RXKO$fNXS!V;ZS;v#6^LW& zWLgoSg;HdC&XLgs6?n=yv&wYb5XYcv?ESbR@5rUT`tPy@ z%rLQrCi3SkW^0(U)vHdHDCRnL|C##GDvEmXPENRVks3^`REK1bPac<025L<<8wJ-_ zv|3+T=!TM)f4)D$Sz8`qz>=>FakfJ8ZAfiRCU9M5`bQqS`Mm1qX%>Ix`>PTi2fNiH zhG2hHu7Wi^6%~Nr;uerA5qtVjj|e61p-QQH-uGCUFkiw)G&z+-OA-c zS=ij^=q79Uej-hb1Ie|(3vnKi%TJoB55H*wr-TZxdNxRBW9(|#+>#9od=&Ew?;?xx z^sBIw`itvawx))Y?}Ob;l+3NY)~g9-d+efe2N%y%Zb*F_E=3-;{XSKVW>)n(A8EaG z%IN*NfZY6hbc;50Z;ZbQrK*q4B5hp3?MPQAt0bwv@>0D~(FA89?b3r*+;Rt4uZ;OL zJw93J5)~#K5G-CwXS|QEJH>5H0Pl?c4*a`lFH4|Z)DUjG zQVFei(OF%n7ruoIeGs^yA-w%MKS~ivV>;+vZQyiDJaf??XEW40g3Vh9o7(H%)8s9k z7$?Yw1wFFEJL{)!Ki5G=rG_Yyw=4%=)UdYdiXmOCUH8-d1ICl5)`l@c{#Z!_%c!M6 z;rk&q{YBVdzG0E_x)&l2m%ITD8K2Z46gl-Qi{B7GzJL;W)N6Erh zVbdU%K91ozAb=w_hPeP3b4sNC;>7R&&L6n0*yXk#OO~QV%lT;cW@!k*RuO^FU8UXW zyI-~vgnKpoWa{Hu5*EcEBHN}p2_QflA}^yQgZp1&T8F!mCal6gvN<6onOL$;kFwK~ zNE8qYNfV+#$RFC#tXLbV4j9L$05x8qlYUIc`PLa7vCd0 zdeDbkPk-bo6Mv=~RkX)B!Qcx-@I!UNoK_Z-=jydge`R;%(SA7XK#dm*CYzUKj5neoT&a>m(ICWW1A5gZ zRgit|ubPgh9-jW!w{89ZeB1POiR`z;HhN)cdW^tVUk4dol<(S7;vLG4Q#2anG;!|; zo{jB}>60Jx^j0?Qa?zLCDdGuf6}fK$66DFwVc0FS{+%#rXShe`G0Yf}-$vW0i}&R4 z&u-@w0lo%8*zHLGaxMudtvrR&!$ftBk?yEupSY`G`jxh{4QUY^$Ta6-j%P)x3=L7N zCg<8V7^vkZeK5 zK~3aDiLA7WR})ge*-n%5CG#YckZ)=r`L}vmH9I0#;ZOA`5#qS|zj~ieP`=p1&$v3g!8IHi+Vb^KLNd>@YsE{tS8c1|1B7-sEZ@vnS>aB}`| znG1*cMa}_-S)+V5^R>S{jP99O)CL7y8|0HM61!UW2CF9%jo2QPQy%Q+d2WS$D^F$K zlz}AcZ=o~&Zx$f#Sgu>ZM=B9aQa~>Hj(y#KVW7s^H-dD(8zi4n^#mDQq!so&Cf<C|AOiF_Rc^v;s7e=bXsbMlFpv?J;Cn%n{FiB@qVA`h^ z&uGzq!6BSP3qtJwBMrV^l&=y{2V8hs`2MnK`|?3nKz2&*6sc43$mj!~`r^dtY(*|| z!6ybVtfHf6-QLc>w4{TR(aJCm6L0<&yGC<+?o?sQDX%OKwP3b20ZH^f&l1>MnnmTj z%@|*W{OvF^TI)h-5zF5?@P)De!_--Ywb4cYI#|)-?#12RzqVMhwiI`Qd(hz0LUAd@ ziWV(};1V24AQX3kThU;_ox_p;^PFdH=4S3@_N={rYrn7ct;7}9?$<<||1!zkk>Vm$ z8``{ief#NGMNQc(Z}Xl=6;7VHy%TF?!fu z5+;-q25(098{u42IhQv0b0Zi%D6ii90-hZ9=p*wODD#;GD|T3hof#`Q{x=|vgdsy#5{7wikY$bkex0Ox z_kz5$QxO(^XW(s~9qx#1@b8AEK?#ca`n|fL6jFdx;WtabOiopai zNhsO^s<2$LWRNZB4*ASdr6hon(E7xLvvxcOZ7cJ?Dm1UBebOHNELS9cGO<&H78U+V--~bn zlmwR|7JGgq+bXE}-&>mIrVQYB*J*`4)5G=-tv!XfO^*Fk`dSU8YO6z~Bx%bZO=Rf5 z{@?%%Zkx!!-uOb?-GWINa%Sc!htL2LEEo$%!Wcz&!vnX<3~_j17nXdM*+2@7}Yja^MUfFLpCd z-wqqhW4<4c_555x-V;C(tjlq(!X1MkhP3dFU^5Q_i!)wuIF#Wv4e6&~w{kf=a>ZGa zW?~=^^)iIm-oXlocF}lH<`o@NM3kbH1k~;*A7!VMqp+0OEt?;4BD_%P3#PCWRo+h^a5F^;c*R zgL^X&DmnwA&(y+jM5|0{6xc5LH|p6(0dGomW9DJ;bP!&xe&ln`<^E7glWCn`hT-Y^ z7FN+TAQ#=R7qVQsIng>S#`)ZNM?btUF~qWAp2YKg!6}kYhE~$;`cbK8bhm{ME)&$O zu#Pl_?JU+^hT^~dFAjv2S#x**pp8~F?rwdn#7HV!|K9{7x9_}w$h? zk$>9-5YEONJl}vt<4UWu<8&v+4fuSzn^C!qL6dG{4HLHQ4E6n5o7?*5PI)HU(c*hO zVH;+#OVLqVlN#?hb72ofLK2DmDo5r&Hb$`w4z}FxUwQTtyMfy=(DdybiZBxAQ-VNb z37OhNfm(+#Tl5icWti*+1oK@n>&t7o_h`s*=+Wd=1DB>{W@GEKzyUxi_Ws49QaG2# z>|MCcVc>6H-0B^AjBV-l0bl1Q$VH}ILNi;nN{&=(%8XJXT2xqE%8?pnX@0Kx#RsN# zRHJ04$fIboY^KTgK%AaOOJ@M)OVN&=Gs}#KiY5X>Cet0fnzY`>9JPoy-8_tSw1%1$ zvkOw4oKk;-f}WPJ8fufx3sNX~y0Iu7J34uH3Vt8KB(^ceoE7JyWuwx-;m+N7loLdn zAT{J7hD!JwmqMKBq4LdA^4%fSZZr4q;q zMl26(a8mQN8S_}N54!)#_EmVqej*dNLzoSK_}a)7M!$+#njec!-Gd8wJ{{74o0Ba4 z_kXwfepYgY)!_j0qXF;N-{jy3C6J-LyPwwvgi@Y7omY%WK9zF;?w&BOLz@z1|96O+ z?Hu}_Ya&4C|K2~9G{3)LY7#ozCqsL%veSe97n1S)f$)T~dJ${QRRxL}^i{Db6tms! zvHL_TBtM~B;!)NdzMRpMIIpaL780Jn zehffMg5tuA-qBK9QU!Mt8x)6KU>|&iPL`yJ$aiy9i{QoAp{BEB&N*XV@AZn z;7^gc@%``$7y}D`h3;h=qz9k+hqXEI`bW6bSOtKx^eM`tkgCR-jpZynv{&oW_eHJImpdURZt!XSCx&o=7lZw969WWq0S!u^c|7mcFAto?ljCLZbFf(V1p-IiSnlKBz#X8zJ{7)qnsQ+VIiReywYaIe29LFvENShAuGBgkku zuy^1@q2J2U6MGJ6F)7CUK>r25eO33B!CPr>P?bv2>5Hkr+}#6rbX7uC(j_`J!dVdT zcR++TOf0b2!IN1&T22tlG^Wkc;MZh0Mv%6R8nX3r2Jo&+;AI0Kqx?jv`{~tE#8eUH zB+o8`6)km>vK5CQ$kb63;F}WLxQTZOq)p>zevgPj*Ry1-!dxAr6bOf${K?Dxw!tyn zl*=C<1uzcxS4!dT4>QRrqN8qZn+}KANb|0@d{q=aCxe`nm|5@y?_p*B9p)oCCEi=} zEoLxi)kH&^h^7)=p0I|c^~`eNuj$LaBf%b6YGjLNM2Q!?BQ}cTO)6B%-5wJ4%@sks zHo_@$C^X;M0&=W<$B|oQTC=|cE-F4a6MyXJiO(afCbcmV zSiUbc3B0q!jVcdgSc?tI_wwX&{E30hq3z5k2#e7?GCT|8kYkm7@!iGHfYn>T;n^B= zwZo2%XLe8JI0az&39w2mn$xVkX!9as@<5E0I#$p@Ck{@YjXs z2Mb~;mU&Aqjo*F47-=$v`)eaL>T^Ul#MY3elaNM;0VebncPSHyiVGoZf@kCUxdTUY z-ugv&q1l==v+MJlYq>=Ki(Zn`!p8MEUM7=RZ4HapJEVPY*BOTLZ<>Y2T>#W+htrzW z7s5nv+wiA#?K``EKMw#W%0#ML_9{h|z{2flV=&H&zZ0d7$j%R=TYiK15;_!q;6eCH z5ZKH+5oPL~8#vZch4H+cMTa>w;Fg zK?GceZGdTR5=T<>9~fwH(sfEXq!-usd+!{(nD%iUfD$s+wdQ_%tzYqsrM00eIYwV| z>cVnm_8rl_O)n}~PMX)Gb&FjcawKmnH(}^DX@-rmMv0x~TxX@eUfSu9u@>7H1qc&! zVJ)NMDHAYjFvp>8Bmn>RYLvUBI9)K3H}g6$iw~%q!wWB>4N0~H7;|)ct~AgPzN<;| zA-TuF9or4sY~-&nN1AZ`d=~(k^Bxr{-LZ^UlRI0Ur$96rsH}_(5Vd9g>*i@$;le9jL-BF)%2?KR{Ad*SE#z8Z zurwqsiCrLbeZ@&r78JYEwJ4&qIluAU(FwXgy zCBZjc80Oy4&w=QlyU(x7-;`_Mz9M|Sa*{}2Pr%LX&^0}UgGQL zT2|a3+rwqYzY!JVQ$CPy2vLi(0g*V5h5x1yBpoUqBHDXtXK)kG9Oposj!!!o0B{m6 z!Ob|IcKABM_ zbroTEptx9^)J@0V*^W-)3qW_7JR7mMsw6rRu&jUxo!M5|K#jl$zrdl3Q5$+?17Ol;u%%WeQYia`|ZAK=mGtE z0~ASw@-cXSyvf^X6KBY%{1u&|&M6l^fv_ZL)%pRm%Ed} z5@kW40%S>Rae4sd6;n3hEb(Fsy273-<*C@nb!BgUg;Uih5-3D*=ah3WtzM*+)Vj4W z^Lyv+(R<(VycK(y!oi3kr(HbOVnsX^dcTcD zLvDGAapS&P27|+2$e6(EOF{WTj2V^-6NqOFCX;BRV0MMsWi+SLa?l7fXyzw4pboIR13KBLvTl&u{as0X%b(SCqI?G?a|2r!< z{-p8nbg09yO%!sA-5PqV$g1EbFZARGy+NMMxj(*m{9Y!`UelF+?ei4a9_C)^Rpx#- zgNRP?jGz?^3mL!)MPq&DKmSXQ2%Xjo9ibwBTIhZ{x_wx!%)k1#vq9y~N*aG>caTZ~ z2&LPkz!F+#4b_oBqwnDqK499=Wqky7s;HpF-*SrJtz`(iF8S|adXOld#|%y4uJPCb ze-{Eu8;bx@#bn*lf^X4aP&PoZ=(fFrPaB!i8U6>#b>f)-~S^^{vW}PNn2KI*tJ!VVioY?qA`-JD@q5sLz7x%iKvEK z!2Qgw;;zm45pc7lCtStTWyEXxcz$8ECmsHqp)Rl3)w`XiUW@Dbr|?pqsyhV36SsM9#k_OdG;)kRA@-7FZh z!h35i}OqlFJ)hb^kTl$=5^?ex<1N;djU0=qWJ(8eBh*@Y?6 z6sh1g+CPuz89B<N(uGoq@o6zG= zN3V}JDSfj`Ld}pos+lNo>7cP_W3A!u>JRg)De0}jvxW71;n{j8EvE09TdGfRg9zh>`@ZlIc(;}`Ji}zqfgFiOY!EB5cZ}Qx9QbY6u`P;5C6P_aPsOR)8cO^W znl}$+`*&@Pq6GFp>Quscyu`j5%o^De@gPd`ZMry{pV$13Rvj&)&FrF~vK|mTie*a9 z+HS*(9enM=sc-%7ngNgzTNGlnAU}bKHaIhhF44;Em20Q#v)Qsq8@(S-9`r&Mn6Hf3 zaRN5-X-ZJ71Xoz}zwr;uwJmoFj#H^ncd9 zyl<{oGD&j`p1{IJ)!8$=T8X9F;Mb(}h=xwKj<*i$Fx~APJ=V)z4}KQB|Jf*}fBnw1 z5cCt&BjflgM=40O&M*tF1s|11bDnMw=V*&P5z_@~e3chr+|=8XO2Im+-tSA4a!E(* z@as+En5leAmU7YLZ^C_nX5P{>ls1gaE#vGSfzG)=?i#>N_<<9{Y&XjrC_I zSR?m{-}f;lm*kWINz&iFhIOVZI|6OHOMJ zEcvlow&MLvLuIGWuLk4g^0frNgWi|Uhh+!F^_Dq+V4a6$Hp+Gbyn5hF{w<}0PC0}= zPTtXkVezn6Pq3dCN;(F{-%OO@Py1X^9MK8q-@5N_O{Z&2>z&7j*8>>cks^_sw}*YC z6$h_H31!0mA`X~2D#!k`>7rf)m_i(W7@TWt&5BeuH54ElCWD(tk0TcWtM@Gs!qNQZ ze`h4sGk3FX{~{WgbuMn8A)0+5$JQK|W$cbYyUcdEbxdTaZwA7&N$TAX;zKsCgm;iu zf|jt}6u>_vl25a{-6GC>uct1JtB2Ey;7-d@Hsyr4P=WM!%K`)$BCfUxUn`1xhaJ$- zP_6M1Qicy}Z_zNno;&}{{SZ`eG!^p$%brgnX^0Y;rY&Hmth5I+B*E6#e=>D5SJcm{ zX8aNQtfp11;7fA0{9xMi{ZKs&6;!F3;SNTxUrEXp`E6Cr=BW@l0saHbj6IyS=8-V^ ziUQ9LeLHEwst45_4GG_sp!?&ePq(tK|1tSMcxWGDc9D^>FVmji)!b5rtP05e&bD`6?dcuM~R^jE)JiC$Gznf;*J-d+I?;p*K+7>*6q$|UwS z9?>)oygUEF_4?q&CaKy&{0G@h>G*!ayMMQZOrPfFq$seSLYCFm61DCiqx=ZRVk6p;5t)J(# zmy+L3xv8H!kf`Pg@lxD$>{hGQ_&2-M%}ob?tuPn=98Ah}7*p(aq1V;A6+N9;3br6p z*^G=0u@Y>Bc>KhXI^#n;T2ux1HJIHB(YjOjYSPDv8h#?7bhRF;{pdZmC&-!5xYBQP z;7I_i+GoC;Yjo$`g~xFT@2JuDd^zk4uR0~(FYQOVyph4jWQ=<=Id6#@u<->0rXWu_ zbmPZJH0QO%r_{6;D?AL>+u-DVKwrCvlNdI@9HY_lw4d)p9Av`?7#OI87T^3drKN=3DPS2IOP zrUQG^q8)QsYeA|;cH&MJv$#6`QwyOT0gLYYHa=Zf(C*i7`tPx*xz_Y(F7anuZ5{KH z+cJ!<(E?$Fnd_*r`NA$Ifm4{_SVqTGXmOX-JT*miad@{crxVPyd<%pOM>EwBUy!&K z-pxjalwSJj)-s8LdX>)|B+}3wJf+FRy+jn{7K{4 z5m$}%nD(a7$`#gW*LxkWf&X@e7erWO-b^?JnlyaORkK!Qgo6`8gKwSXhPxDLIh{h< ztiSXd0ztrUI#nT_52@9skVp5!7EpQ?mEBRE@;^UBa6^rY;u zo9Q}O@n6}B+361D1Ma z?geo-4eUG!uD7MU4LgR~#I2&=!w+YlwgAMTL#~7X(1WBb0Fjgg6#51bqW*dk^Ga1{ zZ!yto(vJlfK%?BM1cT#HYjwl@Iivpwe-{CIa&(n$47 z@$~aYw$iklc!Q7m`1m;hgJ{^5qL@cN91941Eji? zfV9i$XR+|20?C;-(^qU@>5vljZ9rd}#=fb|gw6((&HURw%06DY7a4(!Ea!KPc{pF! zu9HNyMhOrkOf5|xJl?aL`h{*fS|c=zBOUE2R9f*32M&7@78G*+q8k*Id4qLFnMLVE z+x!YdAe@`6OUb@!{R#w>UqtD4;^rS+(E2y=@gUkk4sPoU_ErU)S+@!Bp+7ePrl|n? zuS+$}LWb3c1j~P=HmHAS)AWa>GZwnWAV%4a#}{{h-ATuDBR5=4D_&13F^1-pk0tCU zNDsrX^{u8$sl7F_K&^mcEgw0uC?xojrmr$iFD#3z@HHn4>RSr7GnUAWbItTI-1cdD zRWtkNDSLO$i4THoj+6TLx_n1K)g%qnwo#b7>|ZPqKew-~(`rmN7U$SUow4-%=35gm z1kg4w5!KZ!Mg3b)J%6=8Yz|u-*ub zrMWx&+3Ebsnx%?-3+S@`>+~#D0d9C#()Xr3^(pp3WUAlRNbH922n&}Q zNV-Fo3d8 zE0K06y3JS7nSO~FkvdG@y07{ekr(^fE@np_h@O!vfIgST65yTAk7|GZLFD?BrE5f* zn%^V}-aFs<)V;e8-r535=f@!g($Woh-*g-*2{9h;9B<+-3K?b{&B;*-0!K@vKL2F< z(FoMFF7th>a``1SphWcDs3ciQH$&`2lt-_Ld9S#8pYbrQcywuxRD|^0hD)viC(26U zt8&1aOG5M9?-N;;#$>9v)28XS=wDHtanwn3_)@FH7QNABo6fr;jH))J_trGwHPoV5 zavdgTf1+*!Irp8YCc2gUxpPtr293M|K$X#i^5RE=zRMKe{Z+%@gl4loo60lvQrAR3 z;cb#^;cY7>%Y}YKq$7M^s=6NwH?)|wTZx+>aDy-1*onSuzm=)t2I~4UsHn2ZZ!S1c z@kxH=H{UX!aqQgwszv!uM~zI%&rz4*RUB?{=Rl z6_>ehHV3}(_lLXWOt87ZT;Q9BWi8LjcXj463d3Y$vv-LC#7Wz6!{71N;wWC7<~@3H z?DC=;=3C(=v;95v$mwk;+YF93qC*Nfsve{uV>yNPY377!EgH4ap-k`47kqEpIfOYV zern()AMlsOq3*B1qG-8@pXEv5^6lCc~z)8Qw(mv9nIX$nQW|>4lCMJEz&M9B(B3JbYLDwkEd;3XR~&UA1_M&$e=BoYf0z% z5GTQ2=pv3y(Ly?~q9u5p3J#@GjZo**uXQ>Vn-;7ni=HWhSkmKqqf8CUnj)>0bL}K8 zjM=QC>7v75YiHT)oP*3WLLnPEY1Eb22h zPBY7Q{wr>L8{CkzlkF*S+we`)|A7_+++{HwhC_KZg2a944*cz)l%Fr=Ike zIcE%My_8i=f6>wvL=bYHCDXZrC1uw+>RZBLM_-2tM15?JEJwKV2Yllq*>P6B3n9S{ zxFGMo`j5URb7ZDVmM?AgQoZ}$IvXS~x>Rkus)1FIv5^>kfB>0DT! zOx1hq_A6YfBq%74e zI#D`YxL2TPjMh)|YC1{(!2y5n@lV%n_S1f~Xr0x+suXUwDrZN?`nJ5}ap#S=v0wwo zCO2Ok9ZIZe-jp!N3SXnJ#WeU8CZ?2Rt7zn^#F43tH6kNyUjkg*^8$!J|OH!39 zAWHHdFawV-Z~wYxVw5f10M zYTpTq@3Bu7Fx5w+d;g8LDwsve>=TpaaN~9Mbpn*KnfKAX`EgZuwf<`MN_i2@aw!2J zm*6Hv^$zq1{*5%&SGdez4j#)iIBiIP3mf!>%z1J3xQDx+rI>2N*n#{9w_ z{x1tWbo_`I@c&rgkHL;FU*^KfP#xE0*H*$diWOKMQ%ONO&jfPp-p7)z*jG<1O&Ss1 zt9^=+YyPwkw2vYa@qcF(|42NooxyJ&x~}iiA#!k?&Xd%x(1}njqzZECT2xF-;jH50 ztMA=*72lD(L*Gs(tn14Da~g_vtUS$glLIbol18g1AJ>6~18}m8+8Y!?N&IC0;pEjU zlMF8+zhn061C_d}H&u9qgLa{Uz$9R)htk(M2f2*|DK$CztH4Mw8)Iw-tfQ7!#i3&% z;C7pCIMg-dFi5aI+g>#kO!S%ag~3Zg(OU5R0nAJ+QQ`%`#t*A!%W^9lKKFAmflIHA zFiOwpAeOD`W>PKj@wCwF`!BvvrHJ~hiG4S9zQ~cD-#1;PvR;H>CmwcJ=MkXBQ+->* zix!1w0I)UCYS_H8V(qt%Oa0iB8+o!+b--t7os!qjG7NR1WnDQX3=oZ*NciZ{Ofh&k z+@HQD71sjYi2ZaaSa^kDqBrdGT={Z=PNS zKx)WYw}FH^Vysy=u455aHb3`YX2mS&b+vRn=Sg`r)8r`M1MzTOZ7R#}m>Cj~HObz< zIVT{Z%@VTY_zoTHZarSFZCQ@I^-$9pCUtk33D%4pGIa64>s^VLw0YG=r-~1i)-NgS zE2Vv)ju|0biz+L@I{O7WD1U7kQPzN$oR#E6IzeWm|yTNz?Hyu+hSNn9NkpT{#iB9)eiFKqlJ&y5vY>?jXfYs(iawAoRMpv_WHcT4k#s#*n$ zkF=}${BkYjG_HM_nB*VJr5p$`K!4~7rR*qE(?9*}c=*!9;|zThv3Ztu*N(6r1V+h4KU2t9~v^WfDDvR{6BgFk1)y*b(%9)n03th^S& z#hUg1z|%i#RjweqE4X&9!qaQ5!3`sv@mdTK*uhUeh9Ku5Wq=cQMGn_AiTn~zo7QsBn^yLH;RCaU!V za4tNZ-j8+NXoeSd=3~CfRoFk}!?0*mRrOI#!3@wBg?^nx9(G|fnvb&KPQvCB6--;g zZ6Dt6f2qOO&oTsgowTJqpmw^j#bUE;fm!sRthrYK@&{eiEaU!zi~8rFTo|r4{TU_n z1QqqZe1X?7^&7jE1lQj>hCIIIkpOD^hhY-O?mc*%(IDz~e8_I&#A`)P#)Y=(4>HGx!r*;7b2koEmcktS`)ohau=cHo> zp@FsAHzRJ`mpjXzbw+l2(#v7zXtQ3`;ZUytDpO;du`|O8?_o7p=5& zcHC#u7{XJAU#5X-g#vQfTdf7Fz`}WbY2XEpJpvERsVZprgp`XZPiNVF$WHLUU1N1; zSCRQ5&0=a(pSJ0x_@Xd9oi+Is$mf;wg8)tWgt`lF*y&4tGM`}C;?&n=CKIpfNlO_k zlcWAh8QZ|~SQ>oOTm$L4-2{GpnM$#2{SHmaW+sG5YFc;OdWoD`Dhp^2L-6Y4o9HNqQdYAihyQf7(&0r8LI zT1F3RjCf9yHhw8|zzl*d@s0(Fu?#Y717!o8IzdTn-UpD7$v=95gDJa4WKuM6Z>vAv z5RFo&1N8{t*CUoc5?Z7>0exZ$9-|FxiT`eV`)pf6f-v~w4!WVaD$xc9Y8!eaRO$Sc z(Xz1%bBXRo*;{A7Jg6t4%amUbcT%IOLir zgNi3nHcN{a^qr=>El0)%TkZ4urp;#IGCni68zHI_hm0n|7I%dvO639Cp7+O1r5hui z*4U*lsk^-&N_ZQ+GI@E9azs^x4l~ijfW^_AEnTwat6kNXdduR~nri6Fra_iC{JeBS z(ZMAHOchstdN9Nn*M1=qx{qOp!yzFSPN8kFMz`bo?G^Fe-d{x=`+WM~$dCsSSSX-%6j z#{kQzmHAplYp~cI()4_E3Mg_(SzA%me?z~M_$d@QdXa9F!4KEWIkWZ7=+ZHPPK21t zG#1TK8iYEuhWQtPu%=|_%wUTba_L?_1dq96*4QKwLYK#m$yI6t%o&GQiPc(>V8Nwz79JA81v5G<0z-)$jadP9wUHg7E`xSo?WPO}qIX5_eox=e*_rzx_c={o*Ifmn>#6{| zT`|L`y(krbafO*+hUxGG2;lS%Mo*fYVbA4cP)IgecLN*XzQ8=xi(H8m z&GJfW)59^D(C>bb(6cvZvxM+%d%$bjDcf8^TFfwG|M0;j;wdK55(GlVOv zcC+OAshGNHvy8_d^dmbWA!n~Dhi2`teMG2;iil0OFn8)J`L))9o&E(2i))1 zyKb-pV&I!I;JC!D+mcjs(@!A+-y=(9jTJhe+@ zT`qMTya=Cn!zSmaPsc@&GyB=t@Nvidzil(gukM{gSBy6+o2!AJdo1YhTarSs>oe?D zb8|UX;&UBwP3iWey%Mbjs*tcutsjQ^<$-36Bzb@110M7&-GBHpr26(t7Dw*Ar03@! z?ZM;!FCb+>$p?JKZ@A-OVwlAMC>a;?7)j@^xqAGFBx)rn}95 zyc9gSv)@aO9*k#%Bf^M*K0p37xclYCmtawOSeVKA2h@&>U`9a7o+R zEkyV9w~?T+6`eQpfb*HZTx=#B*J4{^KwRO>9%Iz|lT*42A_4wsm*u|1t!^#pa(; zcj2)OH2Du9Hf|Uzyy%h&i=wFW5Ys7_f;x1P(|3T>dA2y~pI}COwOk)TKf*==@poE_ zYc)wRPam0LK2Os6uwUwb>T7IhZ9vq-eZ*}f+00Aw6SmN=Uqrq;s6b!*@zFsGj(r*= zY17|G$5GQ9me3=UU$sxAn~3Z#{ybYa6l?fZdj!gc)+3jspta$-oFsi5NC#YjkWP63 zh0PsuJTkL$AzBdrc*RRpRMOb#yn#aCT0Puj#cihsPA42Tb9(@PrB%IFV<%0|SMhp3 z7MnImHO_vO5~D37lT z-nE@;m;}s|h(ep1wQS;RTYRWvO>3vzs}2b)!mDskw+*T1^OOC(GbTtrzJqF~k{cS~ zmFx;Sqw`ik0d?*XclQ%r*Q#9)yY~0@!(*#YXJ*5P*9U|4sbY-Ia!bOA8rsw;G=KMm zgy#%(SFX~n0npErVEXzJ5|OZ3D?z2A>LkfZV%UNHGIn^*qUJexo`30A?1%>SG6a7hj8 z|LASv#%}knwgaM4I5hKBUte)w7)c(0PwmzpFHhaj<4j#I*i`6jwIbz+)kJk@Z9oz0 z_vxpf1zJH{MYR@%!VeR0cEmRp8u36^;uAR1oxe_?5(%zN>ZD((&%vq!m#_q z*`E=0iO!r-eHS!xqQ+PWyh!uHNY~|S3PDO?)%@AgEFZn2E9xo~MOzI*2?eja7540Z&b>3J+=JL53N&)U#&34;h;; zHNlcGwh}Oo_(0Yb*q25WZNI$Hmn6yd*cdP;V?Vgk2W>=ZkAM*ALGxg&?2+A!h+zHD zt~aKt0eUdLb8e?$6nX7rqOeSD2S34=guyxW!dkx$$;xIC}f zxD7Vj$|$?A|9HJ;^O8M12fq*u0cso}) z`aZ(|14Oy{YN-&qzAdwzRfiYxQdd$;JbJ%~W)PvZH0cOY;|47%83!SvehBkwq8~oWK3(R?vFc0`EBd2bRCC6kF-Qv7~gR!(%gwEE%E<80JAd^0Zulqqn zRx2!iKdW=vZx5?3-sv1Br9;bBy2_7^71Y;8&O-n4fdp2>K08P4cY047HJT*Wm54&}+1vahmVtlZ?}zCoQ*Q}|c93rxtWSNh z;~mJ_76|p_TZepj84_gZ=DTEg1`D;8TxG??HYqnA<$KM@scdMK3DGi% zrCa`@r%2Rzje6;1mc1jf^+f~9c(oArUutWN&m^}?*-~%SxG#=w$ItrNda~A-{TtxGBBhp5Y@I*D<=`}*8l{Njy%{hB+KM!Kq@A&^gdrUM#jxvtMlJYLX{qa}M6Q_=;2uD%172DNkBX*m>RHs%(^Xzl5cn@FW}+ej zK|jfREkyr?$gSt#O98XrP@|%kVMkCmGT*+U(G7M%7>Tj{W*J0xJ z(-Il%dDRVObtF`$ZJhHaq}2({^P}bZTYqXJ{-)&GJX4GHVD5>|P|BAIFig!H*O$5w z`-pb(6RjM~hvkw}G-$a2rr=0V_pulv<+a^L4Cf6 zx z?P4^0ti}A3Pb2%5E*K`^W!Dgl`_W1+wp@xVX`3Q})hCZ1PlepTxp%%=RYr7)YiQ4A z@M@Pwi5n8U7&%hnBX4IN>H=?I$V-icq#5cyIM({YV5Z!q73kC4tLH><%XNFn)X6!x9-6&^i>yWHJfmM zJV7$1A4z00*ap+iCXK0)b$tKK8|Sn)Jm|TQ=M^Qf+5AIO5Tgvga|S z_qMci|Eo05%Yd?5$9={#$KgtZ;|5k1L$Ij@Mc$}!taI%G8Ug$Wj8oJ^8P=ls!seB) z8v3nK^1Fiji&hoY;1q9315AiOMZBeuL;#*-J4IW`#mOD%FP$wT<19hJK0kMER!M^{ zXeGmcDXzb(4&!Zag(;2=lR$#~ahcJam8w&VAQA=&_L?OTUJpe3)+BmY1~u2()r?G% z=)wmJ1)v|=L}oVei_W{o0y8hIQ&=xQ zDYn^Ud50N(NeJNQI2uC|TTF>*1o7|mLKX2tQHkl&2i%sox%;d;gReF`&{VU&<^pi` zhEoX%_Nd2;%EWxkujKNgCul`*QqWU4@MyN$X#Ve4SIxESyl2KCwRHepgC_?yf` zUB>SBa$Dx{{VJOdMpnFbgX@k$j3O@^L-rEojSWrf7runVdHm|X@MkEA9wpf@l|MG9 z=*s0oN8F+>t^T?gWR*7VKhw*Uw@|uJm)|0&F~z1#yYO~TC}SwaXKtgtn>h5O?~nH* zO}_elNPVFuO<*Q4wB4sHv|Iaz$1{*kXq+DnM!1m>U@q`UF{B<)2;4fUhgM#gQ1lDC z#)ZTO%4=K8#(hDugn`l9ax~kO}>Qr)7XyxAsrI&>`jo0++)Gi zl%}Es2{U?=?`$fhQdfBVPGk`vAE%K;9>1KuZETL#$yHXPZk8t8^b8U=@7n@%u?AU} zg`86{H)?#{qt)PyQxi)tpAuj7(SJe^Rn0m%u$;E!dKGQ|)pr5#kIl4nnLoIusw5z~sN`gs40~AZ^X0Q)VI#n-`F}BWmQhi~UE7~x=#{7tC&*Nbx;NKY%jSE8ee}^PInzzw+v~1}*!PE_aUdCo529e`c2%X7=ZsI_jm43nJ?2k+YANj`Y~`nL?*N6c^gABmB%;U({tHq zCsjzGI_N|@PGZJ>h=N!fb1MO8e=2_2wt1`Q%;+TXjjm>;6Ip2LBwXFvH*Yj06DUG7 ze7HG0$?RZS+WgF=l&8)5cr?pBZP{~)ozG6zD$Y6#KLxHZ(1;5q86>@1#5io7 zym&DjJbv@4!~ecf;bKOTI`sKP^S)fqP45l(_$#SX#aLiuT3q@cR-*pDfAS8E7q>l{ z_Eh(O8T53-5PO}$&SYKKJMw;bP&a%tGT+by2Ug|*XK1HUud{0C_k+IWn{NxBJNQd4 zi!u06j;E|mR;5rh^(&ixUcsmQ+z(y`FKu`Q#Y?i2DxAwJB0t<0JGu2!{6-M;;xeYS zb#8ZHUoL&UU+?S4Ngldg61y{BBc|b;6?`URs~*Y$Yi-Nh&{xM zz6V9E>;Mi*VnI)30c?kDx`4EE)`x<1V0Pi*>GIjXMjt?w;LXi5N-UE5cl)jXYhmo1 z|F6-tjmPd=2W4et0sA8F>+_&=H}Or@Fyj1gBezc+9B!-azNz1-diKO!JZ$nPb#8|B zI+C^?G;zv3q_XzeedN0*X~Q1QQJn&Gd`{6|LJS~!bcwRC*1jFly79MpVOR6x!^C0?kJSkEXe<9 zTy%B=UXx!{@M!<#3?>|I-?jA&;OL8<{SBOr=KOs)rzJJLN#WRn+%}W{-*>O)BAj=@j275*PU@m8UYC_%}SpK!!?Cz!AXgjYK z?kn4}k8k@v)Gfv)GIqCpu3P}Dbd(J+WN_P`2wJzpDU)Jr-^G<(C?RB}rtm;T! ze)Uu_>^f35$NX0 z=Wg63m*K4nt&0JOtd--6*@%Z<8Wz{rs&W3?*WWHDIO4u$2OPgMo@A?L#;+*azU}#G z`UTfmUlyU&?&L$_S_-SL8Cz3s%%e0kI1RKoXb52tp*ya4b??$>%pmj#{K4sGi4;5j zVTnqnU_VMOJHW-`>+9iHmt_r)r6uc10j*|MKAB;Sl9fr}`{ggci^HVte@>({Bo$_0c4_YdhM&HR=UADCqhf_LZwD0i# zP5XKL2NCW48-?>P#UJZ4EaS?P>uCu$h0+{whpVWabf|UAQyeTF;}rGyniDarFw^H% z@x9l?ej)U}KJ8n?H@;y<9VzNzk?#-hT70*!P*XREGM#xUMjNL#Q#}2)h6x#z1uo}eV(lf{tf zgx4J)Sz+o0R*Yb`;a)-us2L(0nd$NkV{|n~S$!8qt=&+e4pxTr#sfmzSciy0CD3VZ?yPVfY3BVbf|?Yv>%6qr~O7W|>2ffGzDox8_?)v93_tttoM>A0_2)-}3QQ#z^<bH64}QIVLV&>RWJ2^qB1o< zzT>vU7y$DGUXKycR{b=9(soO%uz|-NS?OZwNS);yQRMyWUy#E%Bw!;mxPx2`!y@Y60Y-E+OlfKT(1|LT4J1JX=a2uJk}COivWsVDLaUAbS*U8}M1- zdt$~Cm$J)ea?{_8%tlayuV-jdt{4dgg{pv>OM@|LK!<+63Y|ZVRh`h*?)0LQ4K}^`cYvO)zeP?+~HVM+)7fL#o->$HQCS$q* zrDC7`anQp17eqmT-e&$!$T~R(5W^M=myfEbec1urd)r~7ykd=mZ^fs;)8IwV<`(lS zgYZH!ly5`BiKp#p1w;MGXUu$)Lh6&aD^m4eml4vjMeC^15+2YVX*KDbV4`Y6-u4E0 zi+732m#$=?FUNYa7RkLF&y|SlK0OwR0xe)8U?a-2{0h$#9|G5u41QbI$8k3F_2sZS zrOB%d;xx+qZY&W2%KIih9GY4vXlAa-#LxeaR3*|Nidv|kGqtwP2r{NE%ZQf57b0H& zJpBeVhDX__fdKlZzki|>FdX50HDmPFGOWY|OU!&l3bbyaL!BmMFCw73j_fbo`J9B1 z|2iN1ymu@I`}g_*T;d4HC*)YU$t+iUaH!jiVa1O9E5}C_>nH-)2xy44{9C=k{ZZ2M zI!;VML-v7z&^qY``0|0+0Tg{?&p==6e-VXQlt(El5=uprGvg)Jk`*jq3{5&*}&)JUtcj#YvvPJ#HGUu7MFL~6Us`Pl~q^8h6f;qfp$;WQd1xAlI z_=$it3*1=OJHWDN1HTo7DtkWMw8c&7{OuKC7Vf|DzHT){ny_k8xnC7gR8zYrFs6XL zC-WOTsyQT@hk#ARj`t7_-F;OvqfhI(%$LU_g>_X7iP34@{nM6({g=m%As`!VgcVD_ z24h`J&Vpl+HsTd%@jQ_XKH;0c`R*RLKQ=NjA`*BhrFiKpK43v}mV*q_h2DZO{w;sO z^W3_NU}+A0)tm)x)&?;{5QlWXo4tH%?4O-lh9(t!2YYm_4luH$2+LeMnOl@75r|j! z1IX5-g*T@hrHhen;Q|Q1qJh2(>LwxKN>3`bXPr>~0EM}U{WbX1-iP}U^m5>qwUJb- zda`$i!8~-6x3lx)(Z$eg%5B*1o`^0q={t&*VH>#BzK z`-D#7txnUK0)$_S^8yr9)|i>{@c=nOROmbuP zCbW-nxRcgM+8?BVeIvdkM05JuD7?*CzIvOQjBS71^L3-+Cr<6J`Kx*M)u83Dzb5%K zi9_hGaCr{p4fqN)H|zBjfYV~cB^NpbkMW*(&0p&z3V1e8`HD)n91@(8KIN0mcMw4y zl$*%wiJkpZ?R7@a2>>_780eGY4yA7$06(jKw*ja6$4&D~NZMXj-&uG7Z=QoDjp3+q zz&TC#!ox*U>F?3@_Lo|;Tu$4K1M5gz@LlcxtymjvaD6#7xMAYA9ys-{E6%7jHHggD zS_Gc4u)(ijf0XlY8b?UYJUAD2?)PTQ;0l3Zf9I0&R!Psif@4RDdFn+SCh3*Zq&}fg zF$(gxdM%Ql1i_+AkX$pR^F=BMCp<8-b|i^SwTLFwA1|}{8~s!O#c1zztYj^oP!ki6 z@ox&8{PYeUi%(TLV#CzWdHEjlmBK;)e9CX3gSiPa4lp;=+sD!c6_DsyzaQ`LqD$E- zp&FLD2?}U(0gHEtkGPCL3xQz(?Nf|9TJk45$=2C`Mdv3+?$QTT6wx|S2gAV4k{L2S z0xR%+%8wlMi#{PiVW{z^f_0?LN)r~Kj1NJR>_mxd9TmgNEbKb6`N%A5_XTS#Sga>k z<((z@gb`+*^+}iEPJ88xQK`f|##<8>fxFzj&6w)Qz2B{b?g#4!SNMI8HK9 zJgt)B+>sI`Lde!Uq?+3Y*mMoJHQTwS0sRfD2SsV(pHC2cqk%mGs$fE<}E z@#OaT5cBhw&He7i7j;Ajsz8*w8rDB{Pn16nITO*JvP*tkta=>_G1S))X5BffW*v%fGO5iBI>HGg@@<|3iNisBJ#PIBk)v6A@M2n zh#kiK?2tf1E73W4B{lIW(gyVtk2P4exXz~xazY1xJ^q2|Nfwms&<8ZWA@dWJl(`{9 zlA0xxQwI&7*G?S=^iVupaY6i~n zv3@{Co0N~VMZk5O#3=wP#1s-l=h|J!m`}6K?h*?i6=tW-0p?;@jY6gM8f`kE?o6L< zbxgehK`rad=p-Xw@WA&TO&B+)GcSoNaVxUiI;jF~`%W6CU;}y!w{0l_O-|}Si>ntG z+}(FWd33@pw%S8I#$9K|^viGGgg)=au^GpSdX^1*Y7X@jcf&a8w4msBMF0iTPRBh; zj3C?x?U(h&L^Zsfwc)Z z%d2o*OHq{OzCJ)E)g_x~dJ2fg;l|1!>SA{-d5{j1N$`eY(n(BOv9nIrU!_Y(hCl|5 zogp$66T=C}j|}?6_gvp{5NH&Tm3+}9W8nRd)LHQbCZh=bd1r%~X0@i`kCCy_*Of#m zL_x0uc~b}R6!jr{IX`T+9P6=IlVxs-+APkLQ9lXdnJM9Li4QLdN=L;RSXy)BVv_G9 z5K&U+s>09Avt#!z=_CHtAxe(5kPTh+3NO8}e%$cHqD%>B!E|~89T2ftZl*SPJd0)8 zN&0C}Sq;*p{SJg?Ij9jlr|`CDHwI+yDuZ4g%Hdk!V;wjnf~~eAc6A(n!xMUZNw8L} z(mxeB1;iCqY<(F{kv;cZr2Rr;!ZMJ5olDZ9c#LuwMxRFugJXwH$MR#Crs0cc_-oE^ zG0*ErS7WdR!W#c3$1@Ur2i2d)=U}a-X%Y8h*C=!Wl8lB%CAy0WNx!BB zDe*OdrH)RH3)+3o{`%DLAM@iQ@(1t`P}72Gl!WUKGi!iiO91|lzD$3Nug5<2dfb3` zpOkyGF9jDG_J*hYEzSk+?}qk371*dD0hV zab?GG8S;8XZ5{+ys99@s10F=ehmzFe05CU~0{n}J^9v(m++6H|17Juo8Aj9?XiqY5 zNZRudTnK1eebhnRR@dYT2XGyfs2K1f&kQEx>d!m5FxwG;owVR>rGt1|5SySM`qOnu6Osfu~T*Y znYF=u`IzgzRo#-Q6tj&{ zK(f>7{-(&aYd0V)o+FyjmApUs;88T7C8P3p`&F_|-u+ zL=p|J|HJ?YF-mU|XYy&J)CX&DaUMAf z4k%bY+iR5 zuV3FZx?UsI8Z*{l@zkWF)U$9C_6IlH8;u7@KJ&T z#XZm74(C@jQ=NZp_R0%v=fRwdYoSb#mgH}(1gwzC=qjSwqa|mkJ~lSc#XZe4j@D-y z9Wg6efhn^XRJJ-=7+z$YrgGcUD5+VHG(DX-9t4g;QaMwm4Lv@4bS_dtH(PONVYGm3 zG%Lt2VO4=d=}Xibqzg{lj~Xpa=qsz_Q`59?nQ_E*ZV1wJ@637I?L06$v9IXd(&@JjrR*>VFsr<4{le~|kV zM6wkl2l0g-x=)b(tvM`LvA-wzEub|J2q7PAjkA})dH(%_ya_b)DiCkkZNF;!9n}Nb zWBnPXl}Z0za$g|g?KM?L`*Yrl*#bKt_hT29kB!Le766rwNSGSfu_lhC41sZ>p$#-D z`L4w3!nV_FTAVw1^@2FmLc#{v(5z70rT6yEBU%X8Pq@nq-F_6MBnFU)1uY~$yBXs| zv`j2#vGVi6$A&_s33SrgoRdkRG0!ro$`p~J|AYk|OhF7JsY>`Y?wyK#!XLuJbOna} z&86zANHQYg&O6Rlyyc*F(pSmfb6SCyj|9)Rlvk&NOl+|xRIE5~iB{|Iu}_VDj0EtL zAkWk9Cw-Ulr3F+2!f-+!)r#GudfPmG^TEfR6f@7T`JJRKp`epFW|m$Qy^|QQrzYtY zOzD%ew>r&(+n?u^`?$sT528;_&8mDj9FYjULJhET&4*)5lxLC=JOy}MC}2^T=E9;l zvt=-5VZ*>u6?>rLxZ+C7&e2Y|UXaCw-b`!5BL8dn*ZfLlyP}U=G%4^Tg+Z|CUVWxB z+{b&wR(T`rXQyEvC7oMy?<1J{Cu^&g~f!bkw17WFivhELh=%p7_Az!&%l>h$RxD? z(7(@Pea8yJd}d_C1tltj{8|OC9FLz_&pKDmC%pufMKV8Dv+w?=+JC5Zo9$VBS2qUu z;aa%0oS~B*wCk6m%i1C6|00EU2^0Hie(pJMMZ!pfNz(OrR4jXoW18dXAE||JpsH?Ep5hKmo)&wY0bflCkmlJSBaAaXkYHr)BDKcu^6YAE=Jjh_w%hkJ9HpKg zCG!T0JyVy8eFs!ws_H>mkJNHr5`&t=VP^xBR$(Vr7&*sdy>QdNfNae#o=}$p)r<+9 zMXnYFz@Hx0c%F}J$W{r)St~_6KaYfBN~L$+R%Q`H`hIYT)cX(ZvlD>Oh~~qoqIi}8 zJ-tM%dG7a`0O=slGlmyaZIAxQy?Ed3Q*IQ`x*!e5qZVR;_u`l;ga%a-YA|u)9wj@3 zOG%?;RonoYn)0KojiUjVW*9~3*M4U>7pbmRE-%Bw{Lf-m2<~p@t?s}FU&p+U7aSzS z7bLH7ZkFfSYeQCxZhm``-Bj5fSz+up1=B-7zLScAW=coC>U~Om>^*v`sFMSNxn3wO z#%6vvxzYJ}cDWnPzGTO>nZDZTCg;A(Z1P zLT*G#P8GBQCkTAKw$$lG94pAMyCpiVU4%E+YOze9C0Ko$2!M1SOgh($@n4fu65>9N z!mLWv@OLR$g>s;p^$`Kitb&-sE=6rC-*w-q%q-Hi8<4lEVDjQ=BHwkXmv>R`GN^ zEB-=cTb>M4qeht2f*(Pgo;ldOz4q(HXlnGA#K>YpjlQee52D%AMpes)o-1PfUd6rF z(o-!2=zK1pE0K<3XQM3AB-tk9SbW^bE*(?8$87T&wwYvO%Jhn>GcENm?rmgfv$F?a zKaP{uYL`n%dHXiTA~Q~wy{)9XCxUctKaC9DAs1SZURZvm)O}_|<;5gp`oPFd_ci>U zBxsyI*po=kL&5Yo`J-pBBuj8-3F})a;s~xmA(C$|yJXb+*Ld8KY-R;aQNs?5dA&GH z>*b_H(6}^&W_tlr&dHa?geVYdT=F>UBZFhw#1%8h|7dB?`9=r)zDWhr zqz~RLX8ERR&+Ei>_#3CpU}?A=6Od91k{X~C06g0HMRbtnpM>;7EgCB&qTSc_bB?Eek3&RwAm-$Q^f8cfOz_X6SX5hIqQW1s+*?$Cq z0Kj)!QGlcCBz^#w6<{C}gpowxBg60u*oK&ZOvl!D)Ec5a_a7{Qa;g-7S4bvOsyHY2 z--f0N>nq@#jBvLP1pg_Io~{ zy}ht^6Hqgz`4)i}u0agQ60Bqk}ey7MY*;>BH$1>7($p zqCKwXS~3QM69hb}5>K*Yw)kFHgEg2xy#TviE8v^IOaBfCw_cS%*y}*k@dMxD7Esp* zI%{^SQljmg9wgAk*Zk;3yRj-R>Ex?LO*$Uo66Sa^lzJZ2n1>%j%TCND=a%aI~L{C1`jA7YVOq*5IyV|n9)*NDNL9ry}!ONf*pjAnL z%I{tcK>c2X5%I#UCzyv|E~n~Rv??X+I#* zTF(ACd?w8My!9z>`}361KVCwl?4Ea%&nl^8GkByb6@+daf$N0J$B&1=-U*g{AGrX4 zh+;s!N~>nuTQWSib4r?whlyHbU0QA3puDx%Dp2xjJjf#P?Cjtv-)#H4>JZ~R8(;;q zH)=|oVI0vCt7QVEu}JDCW#aoosE;cO6~X8V0EC-i6+gqce+E%h5t4%TV_G-Il$lR` zTM)!{*%wDAla2P*f?oG=yZ0oaJm*H@6vAm#nVbf z9YZ!=@)mE&B#(;gI-zXOtmMA}ri{pQ`?CL}eK>fSLyxuU;wBrK!0Rz=jPBDSxCDb_ ze}P&TzO)RAJP1%sJP#D=-6#kBS8D z5=e+3zdALPtR~I|sjvAE&b>RssO527BEUQR=cX_sMFC&uS^Y5w#UC^e=xwrn==Al- zPcBBZzSg8yzy5cE^^KSURGMc!U#q4YC`LsSi1qrd+vBGggD|FbAZ$+FpsVi5GsiJ#kgsaq-s!?UhgYna;( z0#|_?7wS$EG2JY*Bvu4f2mJezo{a0`;28R_g z^W?{H=8-`ZAf^J*oe$&@HH`=Vw0%GUW4s!!McMJ+c{)pa_0GV0WYxQ`wv(I>^oN9D zJaH~G&mTN>=7$hUc)G8PF9kAlDwNe~r>R{HCx#AT>~>qMk^#}uG5l?uLl2BOn!w>y z7W=#wlyz#{9_n?zHbVr49KUH$??R5^fscOp)ncb5{gCjcj4Ll%Q~T-ugIs={R;KZE z{sqE>gGDD1TId$Qi)^y~h0{Vr?WBjdv`N<-n_$P3hex#*!3A<-)kqrgWgmwC45Yn# zCpGNzoEo?lt}BZ8Yp!@fnj%R^dQM%u&dE*c_F9sGkg|N!*SqTdT~b;}r2x0zB;2bt z)*SCaKV-(S5&2{`G30LGmx&8|0t2>TSv$zL!;~HMRahzdw-qTHvi7^vb_cVJZ%mp^ z7EJxS!Y1o#yuJlp3{4&J+ckr#6BCWxjFChR@#!>}8``$0+Dh8(XF^zNXFMe_A>j zqdpmqQ70Pzd*MXWt+mekd2*lhNM>x%XcB|_ZiI)K{K;EwCYk+x_2@A`zBM~G!2ujd z-#9QsD7}r9eHxAoO;bLn;w>N?m>kDyT_&L}(Z0?B9Wz_$mq?hI8viX&X(%^e6>e0( zKl4#_EWGi1+XF{Q86?3C9QA$`b$W9D8kEZTY!}HxM35J;uC>Y6#kg>nn?YN9;l9R* zPL#;|6Iw(TwQ%v>&Nk?sr>=R@dw8~kG=Xu#%X(OR`F$fPV6S7>pQYhLMO8|9)oF1G zS!nah_Mv~rm`3ETBn7P?H*>|!uzgngmp4B4#-*`~MYZ05o5o*O(6$cZB*5k#j}EYy zRfSN4cYF>{hnm9OdzT^hUQ3K$gu@IOTQ?x#r&u^%{lWTUv#1oigw7C~5Jy?8l#rK- z{CE`3i)&C^(34`Iq3@fe;)KT#cHb0CY#+=^C0VXL5R>Goa*m*B)QT4jvhV&WZ?mk# z#+^GvA9=E8&Hf@93_L8k=o?dxzO->c33+Pa$lU2#gpH(Zmp_#~CR;%87DJr375~;> z@8+_V<|c}3Bc=GSu4_cJsq2XV>@i)79Wwfo(rBfzNx~CN*`-z5B{x$zOKPzW-`kf= zy8H1BJ;R)rOP6#o;#=KN@I`j!sXl6D%`QP4gX8fOz_VVt2u?A_>*G)E#pZE?>KSM= z2*r#GqmxWM$}PciPs z+Le#Y@z^MWbtQ1R9sSBiJ| zmf$(!j&}y+R(RpHD!sBfi*maYyyIMLE@sEH-q36z(_$a`BSCs>EP9+dV=AHj=!2Ff|; zu(0SG#e*p+qE#yZ3LC8N;JyXxvJbN4Ig%=vMG>A1;6QcT*<+EA02BbW#|dl)8R3@P zhcRNMfLtwr79h|FcaRu((FNvd>B+a zcii09NYUdXk(wD#-su@nYPCBW5rCNvv;Bbk!pz(-TbDgG8eqDE^&Q~>_6_n8EUY^X z5OzDu(rN2MWO_4pv|@Aey6RxDySw`ZT+zoC@Tuf8XwEHN(?F{L>4Ud<8JO&CFCRY# z^vkE=lr5IPU8mqN(UEOMa=FcbdA+O(^V|@5k&zgQ9-(g7ePYPPM){suvpLooG{e@=84dWju7Q`7|aE< zWAD_$)jztK5wmR+E@CHG=RSJM=0&5RgkvfC<46Q%kUKV=2&k#ahECBLY**W(e!gOX zn~p_;mT&1*zPzV6$N+7MC{~TsWlnFiVR3wqZIOk?MR%tR!HZMc+M)13*pfM0>GGg& zSKIq%HN;rf!RVf+Le7G}d}RspF}|`qgEXq(VH&VrFuB?U!g&PQNu>8slxip<$|kd{ zYmhVE_&dz{nGZ>n(Jqt`K~HBHAx*%4BXqv8xXIqh*ptxpW{pP(*yDPJ73`Uxw=Ari zKCj0A?LJhlPkeDkjZc-bEpJV}Yp|k|A`3~XEeZ_=!=Drb% zp-*s%3o>x<$lWk@vvpX1Il(IPV?nFJw>9{b^yY~6T%aK#(~^!2>g7z^ape9D>xJXV z`({CoTylPSKEgLv8@}GMJXpJ*mkYVku1V|Ucu$`q_??EZGY;(%9_H3UJ~hSP)N$uj zq6Nt56=I-#Cbz5uDrI5-MQze``cF+nl?i0wt*45CLMi@eV;gql zQ3Ac_B|-DftO3R}Z@GF+09w8|(r$OK&N8DtG`3sbd$|mYtyvjS$V?!}`;(39+c;MC*Gv+>zh@=|gma-2LY}I90x1O@ zqt7+dsp`%ee%5@6=kca~z7sHad-5~*r^9JIJt5Z$$3ZV4k|8;7bO3Ane1Tx~ljGxs zH*UF)&juIZ%R1`eK1FcJ44NhTHA@nW*)?oHQ&7b)zXDjJY4b zoyNQif*cIlj0&PKeReep(BKd58{tr4_aPVhzVD&P_faVR07+@)h4E`4Xh)7Uuup-T zA#zWAEVyxGoqFhYjongofFJi_oH5ywuyXs(f82KY*{+zemM)i%NSswt4LuKG`<{y0 z75;{6ozH-f#A)@PfWUE6F$IHWZRz7QzW7WY(dl8ATuaL(%BkzX#HC9P3>8**k2lsQ zB+i3SA)qydq%S};lmRA$31&TWAjhc|?j$6)WX0lYgcQD{1HQ?8h%V#;D8hU!z!=w& z2?28h__JCVTQEavR>oead}aP)SKj#X>(5uV@5*MDQ>C#Y*7-}3LS-}%p83jN)t9I* za6*F`wLH8l;Ht!2EG>ybs$r4?Y|x**cTlMa(gke*5boiO!Xu`+44Bm!3#`75GpM|_ zOa`u*Jo$p1R+uhVWiDe5CAZkE1c`g&ZzJnY%NYH3lV?JIk6FG>MdZySk*a{_6cO%+ zp10v2At6V51TuTy5Wkm{R%tlR2`5JsYE~&9aYC%^t3THHqGnsHK*(`szolx%-F;s8 zo^J|4(^8)F66aEA;_?iq8$}s4c6JLRqq3WaoAzJoo5#m3YaUcRgZno>p56Yqr*;47 z{?0w&;KPm$S1q<9j$8e~ACBMTedY z4shBWX>YVCuh<}4~BdFzF(c*Yazk2IJ(4l%p6 z*YlohP3jpW=wEzpFt#N!tjFG|?*T!+jusbOsK%KY53fb_ic;e)FWgy_0=TzfzA2Mc zlb>XbEd)M5&S~2G!<$%0PtS0KG}ryW8FZlQLsa_bafP^PxDJOir_4jB2A@+63`-58@EYGbVG>0QY+sUo+W9*u zS~w)^EZS75&7eFJ zhWBu*Mk}7XcKKVjx#7yr1Cz`($*CXmVo(IcIN(pamldl`q@5-~zLTb6+y2(Sfy#aW zlbt76h<=Jb6nkJf^xvPE5W$KhBw@q&zv4ou+FfI zb^g9>SQZ}ha>)s%nq)AAXAfW-eLYFMS4Q??1)|^+mh%jlUPFe7+*5dA3dpex7FGXQ zUaL?I$z&47Z6jZDrC1!tG6i@GBG$2(gk1lB6&t#Ux5}9e0PzCq0SAXcZ!4|tbNB$u zb)e^p4#3rmLo&df;^lv|(1!uK>37~WCr9px|gcF4AI z)ehpD%Gd+l)z>#MH_tHVUvgYlokEQSK=+TwE(i}qUH^@R{W5b1TB!LY7(zr1hIZ}x zQ&iGuAhgA+-dVaMi!zJIsQa9xpJ&{bgDeqlBO48G%i+$>jgOpVC-gqPz=(Ma0-1?GHEe zk0a@gJRh_TT3EF3PW}8@TJdjcc6XGP+%O;B3p%VPJ#g^>w&&q;4rp)C-#x8ioHxWBZMrsO}RT%HJ*n2`ZsI>2|)2_Nq!2QJ#~j{Mf}{XANmHZ8@5V>UGW6rNz| z29z@*i!w~27gCNZ!#1o@7CUJD!2T2o$TbmV{W6>TSqKTA%EbvkJODiP7tg|SB#Tj@QQ{&eH;;;}~ ztBs^YhpHVSedK0@uad3;r{v9NSi>qtB^ybZn?&dhF=C`tvNg8%uSD##IcW6| zNYLVY>_-UpItOjkFu(@dwg(#+_(AZgJk|>4z`20p6KxQ#;2SR4h8lg7G7@_)@{4os z?JHGf={3U-q#7hu_49`<=c{Pwq>-_mI8-UQnHqrF+(BM#lf&cUQ!`mUui!2?_a^aF_biY+Iq;iCT9 zDsY+av1ox+=2c-A;E#T&ulU^Uj3IGv@fLJK?}M<|0bT5C;6u+oxrKH6DYJT{s9%Il z_o+VII62Ls1c{uW zXMb!U4hA7ilH7Og)~sO97bauaVWXZ!VYob!rrB2|0vFio0ipX$i;?>s$4ikb?F7{n z)fD^BBA<(7TFznpj#hv4!f>^#$=_h?Bd~c?&le-jTC=YESUh4}x1GsNx#vs?`W19q zv984U*|5h;!q(IhX}52o-M-|2epHG2;RaB1e%KasH5-RKDcg~IL%W(nDb`y0<7ZXh zVzsCa8Mx26)_L6y1|;VadE*ihiF34%Zmh6jvfK>J+8xy*H~wiJ;7g|A(;r2YJn3y# zm|mxk`({IUjPye#?ep_q&~J(e0t~+o?SQC#3hvK63vfh;mM4&fGHvQ6V4WKHtG7{N z;&`cM`)l=KJ%)rf(A&5>+)or#V8Ks?!gJq|kz>6!o;xn+kDk9gv#_$MKgZtL_bQA+ zSDk%g(ZRzp5=sW=Ov5cJeQ8hKzd|RiYtgl2L64J0-n6V_cMTma0;q#EEb1}Y+%LxZ zEY#Y+E3bCQ3#&z;Im$X+ljKp{d5}0j71w7};BHucz}+_;H(4uWXr>g2!4(Z zJ$>geSrBhlg_6dPB{L}8Y178|$yF7(d()SKKe^U-sO>goJO4H#(*ZEXNfH%+aRk)p;d;wj z;7>JK&DbR*A+I4Ztn7f73;!I-+GilF_{@JFi|&;n32rGddaX-v_8vJoSV!nA4P`wMux zti!QR1{Y$`*C5Fi2oFZ(4Ay+kxg`1zStdqXT?oVTe(S|xyAvwC4IZ-DGOF*yjUEDlJ*dz+w4{e=QfQ=Nl_Zz%orB`w7P9~btM>fJN{XChWhF^ zcVPY9bg3CH^TX-0i`5Bl9bliu_Rja%Uc6RE-B&;T>6qB{BIsqswYH%QtSd{&i!!yZJ=RYUNApMc>A*1wb4B=#fO}($-0| zSOQG^>6-&i>a)^32dkY%&*ORG*839Uv^rN}aaBJSffe~NZCd&-I&d1aX5;?F_N~bf zs_NcYY^vy|LbbZV&m4_7aBG!iP?n8LHqbmiiIUe0Mc~ICxd(_mu9h6?fJh{d#0$Em ztuOGge^T4AumK0zcR$;eXzeDsJ~shk(SEW>ei$D4RhuULHym5$l<)ZKLETpHcMhf~ zIY&{f=lY)XR%*%k#qp)jCkDM>zdy9ThAFSJ6YZ5&yq7>IQPv}mP<7m5Q%(6|9X>17 zA`bBLRBmr>f13|zXz3D`oY*07+1M60DbnS^vNUA$5?K6#N=iTXhmiWnarsh+h!}v` z%!%xTE-S-^oE==wSvB@ux&huD_11!8;!qJvmJgS2G76A4X~^c83oUtysdFXQUAT_o z1~!@2&T$EC8Z+ni{Xd${GOWq}4f_j5cQ>QEy9Y{&G)RXulB1U~5=g>1;7kKZRxw)dYk2Nm|r z6C`l6Dj`C$=QO~Q9 zV0;N!%!UD(X!dqP9LDYV-|KSb5aa*yX={s(a2#{laGttx5P1wg84Y2oOse^lRA8FQ zuI_2&c-Q-WZ~-iS)(kn><0g`5%B2M+fEF?LZ*KaQLm&34=T4_i{e-`Mb*d2HZ!XPp zQj2y(6Oo#HM&ds!FRWAvWudmuQ|v zs{Vo0e9&FeEQ?Al%gOw)Ue!IIt-3*|HnH^M<4)~d_(ke&7w7liEz5plF6qi=g$^|C zS}!iYgs!tpU%sF>8xx}*beZb2QhLSo>8xw4k3SM;?Rs{lz9s-ouvMV^1bMrNs3sia zM7<~|yCs+D`%IF*uEGR*tx`%jT7*1xdQg5233fBA8fDbs= zyrQU1azK8CI&OT~Q$$>n+&VV%7_Bz|&xOAcjA!FQ8>}%*hm|(vttpJ+*jQC704xA8 zNLheu`TpihN|;qIiDSOgRME*j4}#?pnjRH7iTN_s=fsDP*`JOF1v8AC4wV85!UYgt?-Ry`=v7X+3w=wA0pCwO@Si+<0v}4K z*nNE7v4270dZc`Tr_-@7^`mmd|K?$}QlK0#_db@BE`;L=4C(SIksQnnbXzN72~M}~ zg>X!2ACQT5k?4pFJb(yK6_;^tnS!>AphanGqclH_PL<71|9ila40YH2RIdHzd;)Bm z(-tWkGLE|#h}s0?Z{_f2XK3{l@IjK|=fH&XZY_FD_I9#W%LD=rvU#(~+dw-m^ID{u zRRwnEXTTjA$mS2?l=zQs?`cA>|5MKq`)N|4k%{3^ghdIFyrN-FlsA7)`C{cm%t>c zx_KSv0>4_U&MNmFzG!gpH&DEuSero~?Z=0p=A<66Z%#?0QmxbRU^BA zPhu~DHN9`gg=s1dgWZni@fyv^x`r-yXtk!AB%SYp^VJf!_T7)IV01et#Y>^5pI)2e_>Y@^M108br8BuDR0!&|nFXt^AH>&j6A&5< zl4>f;s-K74{IYdx2|fB?nK@H-Cp8G=#7w-)bhh4Okff=D?ejmh6Lnd?gR5@U$w^hj^b&C6Q$bRUazTo ze+^ce2{pgy6Zp>do!_;cx%+az)AN&!@0d!=%M-pHd~b%Pch4(fi*pCXuGFWfo(gk* zgKPXN0Q2SH{a1jBkNa%WR|OH)7bBoJb2Ua+0h^8#8b}z$Bfzni&aXqo2Cm#=$@Bzl z#V@Tdp3-&HS{^Gz4K9pM%aLzHjbapt^%V>fo z2TD|4o@itD^uiAaIg&`@5SXm)@3xp%rQLe7CT(7GsVP+I;7CWuHzTkV(OtR;vk)>Q zc`C-!ufjGzE zeCcLjn;CltLwbD&el_C-R+7b!VIP6b-JEb9i9RNnvDBCXlr_##h&200^FnVVndYe4 z1yHo6<6M=X0G3f8#=uE^2-!H?fQoQQ8sZGe@Dd-Z(fK#;;otMAohQHJD7FYav{yoN?Lf3Hd56H4 z&6YLMGvJH=N9mSnnP)OJ?7&1CUf;s#KM6!Hk_ zu9ODtje)|{c3|GLe8xYm_#4+V1W1C64@rRkZ=4?fROS7wDN2Fno;RlM z#s%>sc6lC|jGA$) zna(HfJy&8ZpNMP{gQ&T12#8{7DNUby@p(kKxD+x)1QHiY?o2Co<6k9TwOyU-o0*td znc=Ou(OnQnhtB-iIEsTkvy&0QFHtNxE$Pvht7t%I zA<}xCeS?xv#{{PgtDrgQz$-cMwExHj#ZiTRDVkw- z2rO&w)rP0L+Znfy+ZSgLO2gjckzrqZDrbw;+;2Tz%RUw(VTnc?sMb_k9IdvRLk&@c7kF(DE|Jlf+TeF zj1E~=#Cq~ABy*0C=*K;+YXS-j-{pHEcF9=4_kPu9g;IpV?3tDrwy4UW@ z0z974bC9H&L21|;Mq>^)f6K@Ni>us37b&5=6pG#Vw}5j{_yw#OuC9k6mRa}Jl_x@5 zP&d)@us>Qh>8uM;in`d<9J(OQmTU{C4&A9f*PQ}X^-TnZ6mJI{y6-^Tl%u@^0{)s& zJqu^629;5D>crq-ByP-b1uEZj!UQQKfQz^-w7BVxL?Wv1)r(aE#qb4wW?&&{Ih*M? z_S!U=Mu?X;)$HNuZg%;SrVzL#D=@)4At2$y$;Z>{_1^n{oLiFE_XF4{hB*Q>HL>U$ zv3&yAj5!Yly0b1&8%e%0(qYzLyoN8!X`HL()lo+H_n?_%vho|q*R<8=xA{*M=@fJ9 za+Z@Ee!oA7PiEW@L#$%KXdB~tn+<_?#E(B<3+zLzZ8Q@KG!o&*aY98ZtDXpXOAaN1 zQ<`a`Yp`6nSx2J|n?SG8Y=l#qZj%#0E( zlwc%KrQ|f_<0;B^Fh4^tiwkFxa5OEep{sojV}AYhDSR3*Uw8I?<2R45vBBZShsAe+ z-OZx>IW84OMI^8C-HVg(69Bt)C*q4!+#dLut*v96(9f(>#gIjI9pEWh_Zpr87%KT1 zI^=O9kZrK=R|)T|1pl8G7~3Jkmmq!|;*JFE;sSk*X8f10jzy|vCO|GiBEu>*V6j$B zSaXD7R7{v&_h@u#i;u9TjA|JJS7NED z@xOtog7s*tMMj9ALuw5mAibLglWJ7p?Jgd;5ZGU~YKK*xFfIY$)oQ`w;dcI3m3v9W z1*$dUaKXwrJ!FFjWLQ!n$eqO)WCnSu!BvmUf3SVz$sR#+lh?QG1bC=< z z;FjF-v=WluAaqaQ?bySDuVx#;-rhMH#Cj3(IAqD<^8Ebyp83VaPYs;CKObr&US_;H zwGn25Y11d+cE0@q!#g(ys8~1xc*@>jxu5@v(pd_5?6~MZ?}^{+cBHIUL%yMXpUb2| zb#MoJt3IBg$j$EBI?fgfubuc^Niss$R?S%LRO?f;c<|0BFlh6_>b6(Rt7!N4F1XT> z;QNh%S`F2QX!TW1dd#{W31Tvpu1k$Yf5%lq+v;MDkWy1qnzVS>yzWlL3moz>2Qnl( z#f46w0VGtE@J+<$e6vk^< zp?b_!`b)V*uRj*XaM?&zzvuu%inJhkRvaJCzXLg_jxwozx(8U>k%1tGZOL)z&={!l z%aN8RGhJ7b)S3SaLV^f8U(ilTe}m_Q;^lv2z?TzP1K6z@Kk0Ka|I>r)B(-yM|Gv7) zUB5i!3j#CCC>fy3V02CSUE0CLWC#IHbq?dijm|^U3L*K4{k>*!K!#QynS%Bxz}`h@ zTZdOdIK7*s@N;T6~|7>c(srH*%@)cVE@jlLGg!G}1DJ@lFKto9O7HxAx@usC!!=A#=x{lqV z|3W0~yqFvO@U0hJ`wqGATi;GaevpCD()y0^0<(->WgQfjnPLio4V()g-#`jrpwTpx zGDT7TUmZDL%I(0FZ4S8aDlYHAe?ITzT}dh<55bcN&xoV>7L1U;OPBVU7VRI25#q{t z9|Em3po=(_E`h!(ffL%k>WxTK4t^FOanw@Ee~i&#U7-Rq{Ue*EB9 zUo2b74p^lqyH73x;#m?GztE`G9{HYcItPoMzWkiHeNsZe@{vLtR_r|d6|Hq*2)Et= zjXSnwAnNQnX;h>}kDf1AOAC*tz@w6E~_;Pk#Sw-5r*b^Wx$ikh;gF2TQs zpe;Dx$Ys}Lb;D$P7JvrJzZpU9`Of=TU8)sEpebJbG_Vv#Z8nUp(C+15FB$^0Pbw*ngAD2H?^G#~qY@rR;$=)qShC zlvJQY^rf(_7L8#*H56cM{y^KRv`O&=Y}|xBG8%6L&X8qLbBJ5GVs*Od6611YjQ3qO z$B&_NkSDG9#{2b=(%XA20GP@lH%23_6|`K~^;O#Z!M?-1z*6;+0vBR=wuwn0H)#?`SxBguSr$MCq`mZbHnV9msVep%BD>6Vt`8!H8 zpB1UWzXj}AQBG2#b_g41&~B1QP!`8;G;OkJq?}_wZr8+9Jnye)vQVWPGi_mg-Pn4q zzxe>_+|3tdlOHyXn<oOjz7C@YXQ<$y+{Fj|9#R+_-XRP6dy+L4K0A}?34^TM#{-! zeZFgeP)-KjlN^eB6-7|O2;=2#sU8(>G7gkvTXGGsdpc#hOZ^M$1YcYKA1jJuV7H#~r@Mes!j!I^Q5UeS$x zEGhbo1+?qs9dTF?0oFm)nd=DgPt7#xmxe7;KrQu6nW7Mo0KjfUJK9=DpMb-BSl5n* zIS&~dLrBkSFFB(DvD9Z9z->xWYy~dvIkJw3E)1M^=D&Ld4RwlMKx~O%W_=Ey==keTx$`vRFaNNTF z%`;Q+EyT(B>NmJ1!kh;aqjJ%l9%vW;$*TF_wauU7hZW&s>C&uN=@U;%lP<#}56R-P z1UMYwSEV@C~$OTPWmruD%? z9JcJTIB;dcOoc|A&U)w}R<(rR`Dka=2}0wxu;N%}$U4Q!n3#1HtS&`xW@m9GXKAs# zaV%~2Kw80ra4Nx7Y@|$s6Oo3=C_94|7??nz+A`(<4dT(HFf+KiL-&D*ltda48;aP= z1ar^RJ=8t-Tj5P<p}bI7F_FP7 zN}B%uXLS3dG2%~$Qu8^1h(jdC#}13jFIGO?-0nlm=rU33tXpgbHGf@9A{GD=3@*L1 z5nO38HU!O8WG%s$kKnSgY|E8X4I`hh1UhUc$DZX>L9}HPaR^&JHv}y-tV2-Z!R0fT zI)Y=nj zT^u-wn8PZ%5ub6yz0xpJU=mI+GOvTnxpxj^{=tLvSlC(Nkj>C6ISn0C`a(4FqQbmp zGRS0))_;*Q6QYpl!>d1*v0?B#gKFkQW_W*ttxCMXK@kma1vV$o#|uSHB@-h^3{M4l z!Q}uflXo&YX(o|e_68yHwUqCcgKVLsgd)eT%mdrd>YX}tidFV;yiM^Orjy}{N*iB= zG@rroHAgs&hBR^#K*8<-ji)=-V43f4QSnN<+5e{jJtGZ@WRzuDIf)&Bc&=4)25AYoJ3JFPA!kr8s*$LylWn|WK`D*K?oP683B2GP#YblRu+x?zlFRD1c!rqwfgWy); zY4b#K2*w|bz}jlN>~nUSi4#Uy?=J^!2Q{oPY+S?VL>LN7g-4u(YYW5)o5OV@vrK)@ zl9S&Y0MCcB_of&?%J*O5#+RPnHhHiToQ<=p!ua3kMy%roYzG#;K8Cu#jV!_y8IuAS zZtw@We1H8}I{I=8SB~KbqF^F7PUMx2J>`d>6!AD!F)ql#r9k<1>wTHMawe_bMHrFT z{MeH7Cg}`y&d>3si#Xlc8SgWP5Ht$cnbF2tg?j}ykXcRlY`bp_hx@(YcN$0uimDm2 zCZUQ^N!bg~=8j9&mvUcBZ*7ZV5j0ZaY|4?Gz@h#xcBYf+YlHQ&wv(;v z^x;FIV5v*<-z|nHJS|Q7)z~A$Ac{`OqeD7NB*PSM6+!qk_(Z9>u^m;idUsxMYpQBDI zok`kFUNO7)(btJ*hO$pelo>d3?#YxLxUFcI$H3MuYJg)CqAE9r9X;HW?GJ>dn@{?2 z*+b?gK+4dky5FyElp-4H`3xq3yb^s_eF} z-+sVgnZPnAo+3W^i(u*GL>saH0+9EwyV&>bMqU&9e{9I-&33~EVdd|Z%~$3(-tv@r zxoMPnK0d6f89N&R#gCg79}^FF?0cU#qhl8Q7-+MV@S*jA>X#Gd<#q=4A+H53gonH` znk)cr9U;LJ-?%Gck~Q~Q2{SW+>j zWmDJljB|EdA)ID>WX>6v=&Qa0vRz4BVhBT2Hm1e)t|B2j60DsS=Y`V;`fJ-cmW|Lm zA?KCA$MA`;DsQB!tUZQq#i8^5K1oh`nZpkyyWYyvAp@_a6=|{?;orr4qevXPmnr+} z2^A`XGnMZV+CAK{maR4wy}$vizk{Ww+vWFx*53KL&Gxa^quJNCy!E*efzZeHwwcGC z(zkK|fAF!k)$18tgc9^g8gKy*#;#=e7ymd2M61CB;5rn?S9mNmbulskaLnQ&zVMJ? zu6O{Ant&V*95#9g;-sYj!1K*J90$RRc&N&JnAd*zzuNVI#PdBsdSy%=TJK-OA+Rd%p}-c)twc+S zB=OGepY`3CjnuM6+2LH>tuUKRm~4iXpe7d-fbC`2~@dNXRY4G4Tk+|}BZP^ErG z<8toZ4t9M^9{U#}sGg48tZFP@0{$`oQyseJ*X9d&T||y<4$3HY!4SJjUVIv} zpTjR6<1e(aA$7*q^$2t|Q` zNw8?(XII97O8;s3p#g|*N_VI}zf+{FCIkh&jfuOo?P$ymdj9Smw$X$RaNELcnjB0n z;R|X*yin^n-~p6)Kgs&Un|-tYM0!N@PJT+@W<0_+mN#!i^tuA4v)@#Z=bgwUl6PM7 zVb^{v7g_=d;Me6RoyFzYDy7;Wm?I%9w!AKL6AwUoYHd>t%|@-JpMGs z{Z<;1C4x;cvcXHW!8-pPSdQ)<-qEKMS|Ai4Te#v;a{5@axcHnIouB9ET`L_JtJ!qu zd=?S!m~SFtD>N!yTkc=Eox~)RWi4xO&1AXoS&HL5-HH+YWr+vws2+gO{TH!813eug za!oZW^i>fmefnOzcyKZBJ5O5WAYew)wd9rl>zSzUr|3|1Jf68JK`(TYpx0f}0cz>4 z>E2%c>0(cts0EHVzWB~mCrLBXdJc~xVN}f+SgTFL@^N&j(-cZXxH%fQkXxM1%h_UU zCa@H&?+j@)fCxBsgRTh2o6P@p_cp6H_L^Ck#JVS8DMI6%qC#PmlV(CKpguhj+@;g_ z_oZiC4o?xLrB4xo{QB9-*`I47KgWfi%U#xNm<0MJ5sJ7Udm^HMH#T49{UA4p-VyMbomR>W4tGi~H)vtF)N-*<0wAwf||WIadXfFUP_7YL3Ufi!2$k4U~TEzt^u^2_6^z)%uBcVJ;1 zu*=P;^@~#@Xw{<_5~%@a`>giU<)G*o4`kUZ)|%yH`n{wF;O#rSuds}2-abVk z5M37!4zk+A34+=JX}{J?2jQ!$jnQ+6*&B${>qNJ@>s<(DY$JYjU=LvX^StAQaRL{# z&DM+X9Jyhz;x)FqzRRVb8H+r7=x#IJV4}!`I(E?)Tbq_ufyQO1CMGhOlGP*`xTSl-f%Wb}csTjGwua zbi!3CxCu7s^S6**;~a5fx0!`w5ep`X>AY zmk)+7=sQnWfWjG0U5#Vo)ML<;kIVHqaafXYoDm;gVgQ{R>NS)rbpI)ylibvvOnCow zqMnDlK*}>&%kll!;%eLlXpxoW1ach`kPvSkztIJ=t8%v;U_Jup1z)5PEN@V*O|QOnNw$88q=LaqYR{@ zk53_U=Y;6$hUqOt>!=C_cZC-6l0ICYL-e|D_xmX>ukW+(6{(>Z3BzM6U{Iy}&mFtr z?{o~#0&!?pC_ODuSH3F$R9};3m_YG_7Vzz&xv>&+@+I=PVEr!pw{i`xD1)>Ow`ayUZF6Mx90^w{#U`fm5PWaxV76qjcloMYQ5U zzR&aumHR1PrxKZA{p|c4Od2Kr(ky|u)qD9SZ!pMeZsdbRhpWnNecic3ILlc?<=Y@B z*W=3oFOaXBR9r!wqO@XT$_5?vBfRjmld`@QNM$T*qAoKHy7ai^Ar*u6C9c4%F8p$8 z?uz<^$0&>Z64YK3r2*k{FBn(iX70+!E1JTaj<}lr-KjqwHfttD)wi7O4!>1CE_#t~ zd9iLWdso>fj1{l6c$xuKw3S1kjKZ*jrOT?)WRB*}=JU0@v>n}0sstsYd2v*q{z;GlBy1d4P1tYXlF3I# zM&fCfDL! z4#w5uMxn(00iv?jNjzgQF~RLs*Qs=?hvrDpZw~G42M1kZJE;=fK@yE^ti|ZIC#GJF804 zgaie^NXqg7ziRBHP!(Cv_g;GuH+_o-g-oU6?EDlZp@pK|-yZm?^2j>G{a(qkbkrFB zf~Oy&T-G{c`Y2VaZ~?crJiy}g-N(MuGr;k+LG@=Iga%>R-5q2mF-@EzBKVk^@Lx&`+<qhy@_-Dgj5 zd#5b+{}kl>Z}2(_|b6aaE=0y`ER8Hm{~+s zT%;t)cFit62z`~-J>G?P7OHmzs*4Q&omlih@NeefqC~tz9r_vY4C(EgbqwV8y(0A) z+d+NuJc+`ZWHXZ%Gb)D&N(P&v-eaiEF$%yjWE1ay(lhqoGV%X0y(Hd-@w&BanrS`FC%zz#xg@$(TJT}=z@Oj^9qfi}c{@CH3T*Ea-*I|UsrO& z&-z#u|Ka}-DB$re1`0lOqGPDy!z*%ZdGLzq%JAL`c~vB-cH#JlseajK90;WQsH2q?G=`L5P^Qh^CGjzZ>A36on$8WK_!I8{<9+Nby)k>?M&;=RQq*`J~vh)EUApSxi2b zYKAt@B=9v~ zB|o~ft*WRsM~eLcO|};zCNTGYb}abxk)CXuF$m9V9tmQUestA+soMz83A~tV&3GYm z@bP$#dY<4a>Z522+6)8vMpmPb&gF^nh%dTEAG23ZFH1Zg9-aiF-DQPn`rU#^y8NIm zLM?Yan44nL%Q4Lc5&c|x4Jo&@sW7_m=o zvW0?6p?o5F%TAw0jt~l5w+WpQ5+r{D+%s5fd^#6}>TUcQLx)AbXGfzyXxNq5XvA+} zvqI;3Ws!OCV->P2)J=ySNRdw9T6u?MG{$<|b&5r6K%ZLKbL zHlS49g{W?DC+~{{M83p^RuVLEbIPIW5RZ%D;z0W=5Z zGsfe2F_Nx|oM04bxT9Z0EN2j=1Fmz&y^7Oh=ZG^5?KyBECk;z2niz`8%ED))v{^r_ zu&wAj2^`}e-6<`mifS=_9QY6XuFb$t22HAUpds_FvM;{w0#71jC3!?bsBlG!z&xxU z7~34b{;{?!P`u2o6d<9~N7*C1pn_GMQO?DD?>L_@;?57+Jg!_+c|DtJXnog0m$Zjj z_6@H>S~!Eg#<*fNmrGv5yvnG*Uv4R&?E82{9^)Hv4NN$OtJ6%@Q)7~MvF&KSc&;PM zM~`lF7_w{k$_YmjFU{fI^vd-B z_XwTu5KhFO!<%~*~B!-y*!;LMvvT6%;gjBNbAiCNR8~$x%*K78Hkzwu#;~0#vYLH^1!x+kF&|>^L61 zHlx(VtFpRu+E}y@h41E|EytuxG{^-M!LID(PhNH179q?eatsc4cOv&Qf4hNSN64VwU|6; z3wsxVYDwaUNw!S>SB4;fKV1w>A*0KAMa;Ijn(pNvHVP_(FYUAy=!)xaFRa|nR9D-i z4XLD1(ybUQ&3Fs9ZMh5Hw(W0$WyBvmx4#cG?X~3ituZ$A=d+ufp&f4aBJe=uZ8~C$mGA z9rR?b2JA%nkMS;(#0tjN$Cja3!oEFt(604dc+GdWVJfXxw@*gziUh*`Dui)~Ukepk=${X6w1QV(P@)&&XNd5*&QcF_j{d4g)lhskA&}^eMGXuQQ9bm{7pVowzUV=*x9{ys`^LS zSFJ_xA!j5anMzc4O9GIY??|G*AWnR$OU6`G%Cn4n4HLv=Snwrwb z&q#w~BcLWJDI{9CfLhNYn%&;LKVnlV#aZqdfZ}8G;rzxhxJOzy`Rx7PBiu~(60GkP z897nRE#j#Zr{-6SBgrkYW;}xI_laVdz!nvmmw4)i$baY2BQrQZd)md2 z?L(TUM7;(>55z`w0K-$g7m+C@Dz6VVg{vL}!-CEKt;HQ9phRhaBk@E*n6aEJ5qzdg zcoVbAwwDBc|aga6ie zpb!WP=$E!p0+U3XE!MB!3Hn^GwoO2^o+aNB;n&e1r0IN|OWpze&Wuuk-gDF02%OuI zD=G{y`V-;PD^YPo$3Hw1^plY1Wq|zGY+)iG3~M794zn27{UYBUEjvEPR=}<>GUn9s z6Y-}(nL)JtU+ieu+%iWGG&KhkikZm9nF>N=oWAl0xxM^rjj>(}Yv(9|8ZlnTD9C(m zJHWr}k3F;>YaM8qm7KZ56oLC`RAe1AOovH@y{WM5#l97K0Ee8s;p&sVBEpT3J~`%U z9JtMXxDsBxqsOw0>WB(Le2EFh`xjz*B1tJ@gAFUe1=Of5%P^xVzKA(=FaYvq23QG3 z9v?bY)G}yo(_(jO1fR1X$%vr}lfF6?F9s_aOaF7AWYb$`XVA0d2`dbi5Cam@Y6SN8 zTb>RNm3K{}xhjq4!`{&>27eH$L%F=V;ci$xMmvch~6 zH~KaGe2tA#)0${b{b}n=ZEX_eVjXPuROxrOZM<;XfW{g(Y(!lfso-Eb@~!AHll6%y zl*bHdr&ff$+&Pmj3Yn$vh~ezyj$CCIVBnox$6tG9SxbxSw3i+gq`7XRN&W z^kgB#o)C7ygAz6{@kq~_-{BA$69_NVWx}NOtF_!(H6cJIXOKg!Ap~Vml1Q;>5*a@% z+0wo}Mob%lC#y=L59PJiaT3X<(-*aeCA=C!2uKUQ#n3-T6lMPA*RTpx)5xU&xkxX% z0n+lxAVyIvk1=u|5f5=akJ(jxipOEfyEFc;UsIaTjx-B6)P2TEH`fu_fr}>M(Y53Z z#8jA3I|!9HwGfUJB@Sgs38d|j0Y$v@=f@43K^dpp%B?E6^XPinAoTQ6(Gab6CY zyNZo(8UvZ{N)2PbPj6z$c3D@EXMQw-L@avSwH>WtXw#>o*{hLbb9N zGX$MyAfME)2!gYjs&NiCZIEg%DM@~2^iLg$I!Y!(+; z{i>A#>8QnsGoRV8#Q+H~YgOTIn53E;g!#Qgi{5Ude+EWOu&3gy9{c1Y_Vx^x#w82l zaLo!dW(#AUX(0AqcDeih@^Zg}%nDkYwgg{ceAC?p;Be~TakIB#E`C>~Eih)3z}JCw zKn|su=s8&am64I$3Dfzu|0&Ixxmb2N4)KWGfCUUy9sfTIP@AC1F!MA6YXsk#*D1SU z{iUqcHYIXSbAfF)jow`N!`GiY2LkXbDq=9N5bey2t79A+J1iz-0!Lln?Pa=D*6;5E zm7Dr$hP%i%%hcq(SShK21vfrcw{0j!E^!|;moEw3_>>QUE2PO^2X*1W)Qx!qjB0Q4{1@;D5vdPXm< zZ4cw9f#G=<@^*AO(>Q7$IE|D$n*htE7*D=Rl_|0rgTJ;nelsHNW zJ}_S`ZQEF85S9|?1{tU`RE=wSd*zBB|C$nGT;mwt zC-vcSf6k@erSG@H=|oCRTeyOI3~RPU3q!_8+D1~osu2Sr$Twv4kPmVqZtOEO{9k33 z@3U7zPNj(+M#Wmx48C3&uT^31jKuIbmO0}dKMM5&meO5^qbg8LqG|M;a_jAn_&6J;`czeb<7HA5w|=n1$Ynx9A?O$vS}bt!{D_r>irAD4e}x za4DN^$w`Sw=czNmjOll19;WIa%&&Js$Zi^mQ*lLfvgm!jwG^#j{^_o1A^bjf?O4Ui zT6;CF088G?%*|N%kaSD`NI%&cOYh~5!xTV{%h%0u^@OPwX&TXAycX7K!s(Pcyh9HC z5;6QQA~!KR@+ZQ*Cu1}ZpSw>&`$9MF)^C{eA1vah3lnwj6Aa}e#qX@Ju9YkthXcR|oVKv6P>&`>}=f5|+#b{IuP5dZ*1Bm&_9RA$1 zSRZBP|Tw9nv8pE!_e$fP@l5r*yZ3 zg475o4T3ZXsI-)XH0*ibZ-2+$|L#A}pJ$G_kLy|2TIcG-1Df#l;dFQipL+c3nJwe@ zpOqai7U&GZQ%`|GHncl`C2-R!CpOW%kUED$2&zB+eOjc9yCLK{n7AB@QxnxNego3b zh&r2^WGo`n)7=exho0tNG8t@W*p@onyJj=;D^})jlK?$ycjBJqVFwzw#KyuYwA2Cp z8@NcTrqh>MPrk78n8P@3+Hp5_1rFAVs-afK!K#B#Gk~Lmi}-AtsiGw8rXgJRlkdDE zj@c{kbclx@y^tGHVKpl|u&h01FcGh9Y4brF9y{V8%MYS*r{yZiHzL`oF=cavRn0T* zQL1M)E&-oGr+&|AQlK-$@}+mI5(r^q^IwsPX|LyeA-|Fc*f!Z7!5;ZdLaV?e3<|u@WrRVC2&OY+MhLGL=Sx?msbqKG%nvWB7>rwAACT{ zmh?YptvWl-CJLRaCTQ|F+QTp($m9H*vgvgxJ zQb&+yA`});6mt50HuNhCgNkzVyy8BE37B+VCwzM!br+YnWZb zCc7nC!*;4{S-BEK=XH&QiIv<>BFnmXbYOV*sy#$qE(3oC2~Urv)E{cE&F{e|XvX@- zqfv)&uBV8?lU!Lq_=w(y3|h}ou?K8;Evt0>&=bC92+%$Tn9v5{mIb|gvF`Egq89_)o#|;Y2C!}RmR19>6;?U<<&`P=R1ut8OhJm7g+gvQ6u99O2k5bOssM3C+#jz! z{9_rbAk5}(ar|(rmthV@~4NqEJTTNk1>rh6(Jr-kB#D|@K2=s zt$<%QZ!k+bVU~I1)7|a0$j*T)m2jL5ty^qP`{8cetMjWuMDFC%hgG#0C)q$q?^i+a zW8+kyX^COC9CH9>K(ZH8t6_{D1h#*5l{uaj1^O*22n~vu0_=6oqmKYl@B(3RfXiFo zqpz%xx)*X;NJp!6pjQHL4j7y0|*e7vc$guymb8CI>WvPAs zcu4A@!WQz~|NF;EC4EWrA}{=k54sFtqTrmvz&WSf&*m!Zv53vHzks0>NBqPxgRNJv z*(#{r=ZPgp^l#GKsQKAA!Z+GJ=x_rFc4S|euir(EQh8)tY0^*K3S7IhW>!IaVm7Av zYTzsU6Tr|2>nOLRG7(B-5Pm_ps|e{s2^&WqOQKZR&$Ir}NoEo1$3f#*Yo3SYM_DPb zuEZF?H)iLezG3D229f0pRvRsyFltw(<<6Exx4SBdpk zo%rk5!W~kjYq8_@@^%Ll>^h*hVV4E~x2}e~ko|9Qg$2MIjI1>h3zeb!5)AY%az<#w zI+pDnR5u0NzH$Pycy?78GHHh^|EOfbPI~Q>GsF+gL;Z`BvT5Cb{^Z!iPtwLRLS+FW zE9s2r$Ah;}Uwwb5`Xo;3Nigdx*^;#$ChV8yca2cxI-a6JRJXBPs3D1RRXGU4^6G|x ztC)pwVib>9x4G)w9D>W;UsuraD~@Xd|f4vtet%Tf*rTYMTsKq!V_CF9W+!sY!1ZWS@( z6AO74EGw3h0cI0*nsmnxt6d;?626-)M7_eVYm{4TT#b-$p{n(thA#zms-qP|)iJFV zgtrA%MasVbJOJ&O_&4_wG3jK-Y7Lx0os{wzK2mlyMi7nFZrhq*n;T`K4Td>9S2{_* z5t~gCq&4;Wew5pz7x6B-O{Dj?_Aa*Nh+2P%ritwtn^mD~(-A)qe_ zzojr*N`N&ki&pE|<1HyV`9&0%FxoLO$c1)O8nxN5f{nkD_5%GFR^ChwrTTE8zkZwj z?`@a+WbkqEHU*!Lq;?!1iq+nQIkgPg?(Rs3zh4L>J8AAB4ALI4@cTGD^u&Lx!sCem z*8o42M?tIEz>7xd9`=d@Ud}|ody`rUQvU4b#YX@}jYxl)=P9iUWqEtE(PKaxdw5tj z7q?#z?_bBEuVD#te*Zj`%B%GN5a}uq=AX0bfM7tU)2GwI1_6mxGgq`Q!FrD3h@4Yr z-CaBwbFP~dvs!Q*8P!veQFA;PuArL-QeObXr$bjb#);`2sjG@&ykQQ%`8;l(kF3f% z1SmG$d@*=t2;airGMSd6gR?Imd|KR3%bPolP0#LY|4~UczhB#>;j_j;q&@uND?-DZ zqZ3)S@5qeG;B5w&XtpP*!YYtuv+_@u<|)=Y?ExW0giW9Kg4g~TP>uDd=T2+RmA&fR z#6@i;%>Xo#Mr4g?&5;dFWIO7l*cI;byB}|GMnp>gtg0LXme(zwv%3+2J6rm*jiVOmkHEC_l1fL`ym+wS`zacb z=l*Vy1aWV^#RflZWMfa$>3CxgkuT2n+_*Kiwul0WzDBvPsA{|+KouvK?b z9d@KRU+^1!@CNzwvy;alyIQ9pKA+3-z$#=HO1<3F#W40j8Z4;^dtIOoM}w`?2-Id* z0>8|5LyQxx)6N`7zGCSsKHdSc3Otk=*LUarK+##`Rn%1PMOe0Wbd2HaXH0EQ@<;1! z$pr_mf-n1q_JVEOA)#`odA;{}g$U1{(7(w&S3Fktml+Y^S5!ZFmm?fLZ&~UG{`#%N z)Qe>=(Z$w<)g_~sS6~B)DC}KJj%=|t#5m-?_)~%}s!GY!7edwC83OU%R&?+Tk|uL!U>uc_O;mAvH*YH>u$5q8}3O=Xk=l7Wy*x zFd+e|d}+G^gPIamFQ&>!+!`!WHKVSbdt)&O+mnknQm)@sm*M$onr12A$8c&~(BKZW z&*T8V!grqY@EUpQ2o>2%GWE2IxrWl6aQd=t+&4)-p6y1j0os$u+~0n%5vN71CJL$; z{~Uuf6E+bNDVrr!OdKP=1kA@wj~#1Umlo*y-EpV8TAI3#nEzn;V6)995jHhfz94CnAnN7?h`% z)TLVl@&23p{ITzNE4BJE?+@B7BIMeI;L_ls-4@3xqbecNPxGx9&|BA+OmZOnC4j{2 zv%xyPjyo0xej?cPx*KikN&^mARHxs0A=p{pdmid?jYzC(B@cLf1{~e3z){cUWOlgG zNXghhvXv5o?5{iU6Vh7&C9S}=AVTn{yL{bxa0!fRw-`_H{kO}Nw&N?kh{G*1y9tt& z`MWjjhqw3gXTQ-$O=-zR(CY`9ptn!2A`sLO2vJv2x{aC>B?^9=d1Ogxg*ccf^z2K9F zJbd`}FC$hAn4AlEd7GR8cwuwr)F2DKeekFTWdA+F43uM;izo8tFYo~W_k3zPLS~S} zuuzC9BfRVtq`4A4o}sQ$aj1Kt@pm3=nc4Y=|8c8^$S@OFSoN|ON%+Wz(%J8x!87t! z%Y2V&y@e|4Rf|2uxaT}2jp7T<`4vwgp8^+;7VR?{d@nu-qlNnw3JCWWCj)@f z1uiy&wotQCF7lP;xML2&r-)NNb|SWK>iO8ZE%;`tOgxZRS%k+TP)ZP|Is7r{CWjR4 zMategF)zjqthbwvUYS};G+6N(s+kB|{xBbKMdS78bJ3u;-3Fe_&wnp&E_RYW7~FP9 z+;fx9QG6wU*nMn?c?4rfh|_E~q5W=|yrdE{4z1AkTsGfql>$902Zv{HGuM$lAq-Wu z(l6q$`?bA~F4A>}v^JI`4UvDVGJNIpWrd8wxHif{I)`LHYK(fM&Qq14(gbGS=}DcB znr$WViuZ|1RqpxGw&BJ3Yy>1{vW1&pLX?3&33__W_scMXNq8_*FZ~bvajjIOG<7YK z*q44qf@%bp_Alj^$9w9pRbr}?Dl$rf?C=TbE!*S46jM<{OqNvje z*(5N(v3jP6*L7e9nuc6bl6eFRl@^dzGf$mZ26RA1NxR(?lD z&g+<3eTH{tn41=!@sbTbjjelAyU}Soipr1eXt)yY-ZEwZ2+vIzM{28_mvpYQx8BzTE>Em3alsv|ETeP&O*R08U9KBvOehy&&mQRuv-a^ zGj|12`18;6RynoBzg;U`WEmq)0c%m0bW=*+`U`LY$hdbc&J3^?hgA(>A60%{Ud`nE z9{4S(U)jNXS0=v+HhE<7r}p~i$NSrl;in&afQ1XfM@wBTLf!Mr>jzkz14Na?8x8K9 zF=QG(@VMyV)J|+T53~K&2puXA(7YwYXTeK8{&_XNB3=I*p6?qTW>%2)8`X-W(a{r9 zbuX1qNcw)`;*`7lgsTOIr;}U$x?*#|`rd3EcnAF1?;2=i|uj0 zXpbp{9n-q1ej$0n+qd+;u8snXq?|ok*6#fmEGl6a9)*&cAoVwzDV0)Ofk?tEzHPTR zKl_lUNnZQHAW#Cj$epU^GBp6l0Gk}Vk z6^2Emn$VvL6TuZ2R~?%&7On=428=V%0FrL7got*}bVQf&Wm3R1^D;x&odz-lSObFz z0T)C~yF5~7{%uCIajKAO*af#*#f=?kQONE<$o*p2JTy8ocQot|l3Og+=VSdik8plw zsWE2e1DjmNRVyZ1HH8~K4YHzqPZu{DvWP#h!ET^&>x;=%XyDu&+{hr>-P18Mi~FRiy|I=7^cW#G3c8ucJD(5%7fSqCUius}WNDI{}*%n-d~EKYbH!^K!~@t(GrY zjia6+lAJp5Ao%7$is8e{SU!-PUM&zY-%)cnApqlj>Vm~GW2s!fB$z2zt^8c$k@7T; zLWO!3FfdeQR^w|s0XelYviB9 zQ%W6M?320|qOMuoQzIE+bE=`=!otYnL{+GF%40!Z^HqK3*V-;6Sec{JGYy}j3vdX~ z46KwCn zQANy+n1)Um77jn|!1sCmV;}pg1_~Z8Bzkal^6r()_SG~*m%q}Cc*5K19Y&CS(ki2d z{M{V)UFh!D*{cX<^4K?vl_n_p^xo?YHc6dBscrI^!s~%Vy?li2a!0^&qem3$n(RsM zU9IhFg2J1vhpR-r&&3~!^&XCT3G+TglzSL4%)F5QP#ORUx~R0QoQ#aH3mH6O}@yi5hng1HYVJXXj8Bg!YVmctkI>>f2DEgW4Q7L%{y28(G4=LgEeHTshwhA1J_OLkbAAj{ML&gW0sMm^pK~Mou3N6*7ex8 z#9EzTi;-YR*X@d&A;ifRGF&Nrq9qz$;k?PxR8>Wan1ZZ+5!_}=fmG~}>OLH;I#Z5z zco83Erak5gkkq@%7qMyXO#ilM(>&QJ7HJ+Li60#&^rnI@0W_b0o5GsiALR$)?s)M} zVdfP;`aTwqJSiP!r4zNJ!1qhVLxK}D{gSiLu8@$6G&tlj3f}zT$QA#yz)d)uyq>2m zlWg0%PgQx~Uy7aWah-?pu7Fa@83?cAGsR571cER@-X|mRj#eYmJ#&`ub7hN0kON|J0V>@mcv13OA1`kduFG^| z6v(DwYKZU6PbmTQXMah}K08vDVwDRQ6|iOLt9-R6DqwB^$qf16W>3E5!?7DM)DgLDL8nKJ8D1m$Jny4;Xnunym^UcWm5%w%Z|V^6!C zO1SAB|04^UKEbY$Jd3%-IHa6$L{74GVf}gK#()UObB*cP3J^6MGgShD3eP6XK$rp+ ztZKkmA*TImhz?j}hlL>7@JI(76K@&=Y`7`l=6Em|V9XeBeAQ_LyqtU$PI>vjlwrOe z@!v7>LjV68BW*x<+=KLEM=4usRju>Z>pC3mIAw98g}Y82I9>ggX8@Yiv&ezj^}zd# zmbZiJy+0oo9*Cpw(RXuaNBw>BR>w|Ep0V2&tW>O?0Pa+J;62cGCV!doDu-Ev6GI`x zi7{6rr*>i@L0o0l`pVPA0hH<HGQG@E!a^+yCq)xPk7$-YCq1zbLmS4dL zIST;1t=hyV{RKNkg0kX(ZZzwZ`d=tw5C-DH_=b~=!-yHpkG*&sb-fF=g!eBa60;DM zgM}|&eR{OIcrnot__FUe?_dAqJXA6F;LWNfx89PuMk!eNjxKYNb860olIxHN^ z$p!`D9rRR66S(xvFWp>A`%01V^8RphwRc813B$leoDG_E-E>JP2Kb2ljRpuBbo7gH z*1wyzF9l5T{P^?k3JV(BPz7!r(k-%sQft&6@p9ZnOcod+J*R6S*GM5KjT*yL227$= zzP#EGO_HND>HtMOSAT}a-Mge=A9|fHq4uo&5s=IWNnA8UY6Nctjr-)%Lz*rWl#X4b1*q1Mkbu>RB|I=dcQoQel$0mEaZd{rYnykMW zmFCjbyJNI(uw?UA@Fx~vB z8NTl`U-9TSFw1hq0Faajxq;dmuk*`Ux1HO(<_m9+849G(XOg=8h;rEhMG*4+ooLe5Tu^#HP+VmgwICU-WXjdEKgS=62tXwlVHz-WTswmzw~ z(m_w~Nf;jGnz>bHJ7xGy=uPka@=^avO2-plU`{#(J*YCCS65U((zsq@oW^RYP=1h)}vfe9#RTkR^R{hheo6SG!- z@#iw|1@ocDXjaZjV4RtN344HQu!9dkpI!5uMJLm4!^-7sn~m?8Sk* z0IZHa+;{82$NtuZ&wkKb-KIv_2}+0Ol|4G9e*d=&+U8=ih4PSIeU5Q;#mae((4RG^ zR5)!Gmy=74*%%u}$m>7XTmojL`xyj$m7udDoxhR!bGEioJloq3n2-_IJNb84H6F=A z!}0B^7XlFp02?)%Bo&i=x*ksl);9nXfyL#KxI-FNY5!)oZ9fG3`Q|!g1NNh@lM~YPj z$*02ynD#LVFq3x&Vh~+#k=%$Y9TTa_!4{E5K0XEXIq zF1kVy(C+kmBW8B{!;{{57^>^wMnU_7UOqYgw`73%%TXRX#k~dM=bM=oCBo&&B~b0g z<om%R7TS-ouBbMd^b}|ViZ-zvH zGmlCr${5%~*4X3pNp=!|r0*m^&$AVTd|E454AxDnW9>_u+xfn#Wh7Xk#Pghh_C%JI zimCu2!zkmbU(uhZ6+Urh!;KQ7v%k$e^GQksu)U*2`8q56dPPvJ{hMWs2SY+6qn6%# zlRFaw-yYmQ7C#-?_(2+MtYFVE_1H6@Ud=2W{ytg>o(^d>lQE96>SI^a5dLf$dvfXP ztuv+Kq=O;B<95aIYUX>tlXm<4Y&T2V!UTC3V}+f1BC>2CV=>uQ^KQ;Lz=cBPE5iF9 zokF8|yr;2L2Al!-Sx(=1RFh2IE9N(RdcWI%mE&wFxa0GF63Cnkp8vyL5icYJyWWcj zE|52EQq;PYmd1wqnN+<+u59$!wR1po&aWu0jI#@Gam?RX0|uM`$#`yR{d4omofRyI@Mf{#w$cjDet%Sk>Ilq2P0{SJIo~$suYD7?(P;PMW6x#d zL)Ohd9h`i5|DJ<;+T#L^t;(RpSoHD*fGehjw0r^djT zveeLdw`MORv9KZ$X2(Vx11$F{toIRyZ*HHKpxrp`Jh2c(jFd%Z;vo+o<25jKQ4idx z_cIVj2ttDYOWL)>+Hd}A1igI5QK=?C9x!~GbQ|Y{3plA6&%=9B0SbDc0l`VVHVxK2 z#J;(50PS*1pqM;WPvR*YuL$t#t!FhrP8)E!91j>n-ADZM?HH>7{m&BoN#_4sf_G)2 zoAPqp_Q1w8cEo$fA#~$c)HuIHMs!exxzTfy;Cx7UAL11Qb*k>Y)G?LpMlI}UIP^rk z>$r_->nR~x{?e)N`t7F-p}^A>BHvmBzq=DCD2X;4x-i20YF)04lD8$9+$)uW9HFy< zA(J^FUhgPStmE4sg18TxvDLk>sQ7xN2t`L;*}WOBgSblCO+RQNr((4_)H z*Q(s2*dkVSmeKIX&d;`+B$s>ojjE*)r(z&Ryj>u^wv<89R~Cr|E?M@|@$r{X{dTqu z@?53AxIDv55ZWVv=vafi-}VFV%jMLh<29XvVWmX*Yzc z>vQUz;&o+(Oy{u-zq~&mQu(~?tW1lO#>yTk0zKiM#v$Zw7ZcxDT*NqAHO<|ywx#{o zrL;5$B8!}({cK|R_MS(RHjS`_Mh#tapC}_sT1OaQT9qnQp{Y2TWC4BaeEIgZT!7qX z!uVDy2aP;Qhw=`y&aJp-k4k{f_A_iW1nh$?larJgPv+t#>2q04O5u-Bct?CXh@-2# z6w!|UFd4y|-!rUkDf)5;XvMi_aEpnbV93j17nmFRl*6}cX8DGET;Z{R!6G)BWD?oaNcEQx{YrFBRzKOFkYS`_={J{WSi7?$K+84SKx`F-4;k#+)!x}RLVn&aWrnosGBr^Q+swBO@BZ#*0EH&%R1y|%fO!8*en zL$Y6iBv&uBk^m`mmp?mhFX~NKt8$2--)Y@opbC1;Cpk+Ao_T&+n@JjrJLebnakgsu zwe&tdACM-UM;s}?LvmT#RP$^$(Zp??S4-ll`(ae2TK8KU8A+!fsuw&>DQy!Wowfkg z`tmwEXqv+o_1q#<`9Aam50>tR#!W=py&&|_o3d}`mCGe21eDy>fG=#0>$K~iq_|iq zi?by_3+XHCvfnsI$AaY?*NkxXSrULR)PXlb(`Q+iItQTCj zZ~pF#D7%kmrGQV;J+X<-6pvlJJaDvZp~|`=j-7!Y!+PwG@;;smp_UllhY2~{(ZfZV zef@8=b6MXf_oK6;*>Muob#1UzzkJ;8VZo35;wYhSr!7#59wH@W_QdKHa)I?XnUnH_ z&?%NmJXyYo!qr%tdyMJBvbWe9XWN)!f#B=~pl2-GVT02Ng7B%p85 z*+1ly-A05R%NgpE??ZFF-_jcw@hV0Nqi5r+r>$P#syAsZA?OdLfn^;7Sg0*oK@i3M zAWpND1D5)bKoY>E3)H0 zUc}{qvF&bvm2(iOA*CjRN>{5>I5;32a{04%BTnof-Vik-&PX#1@SgA@&Q5={ugH4W zFWzH~vWA097!6po2fns}PSSjaROfMlK*30!N6P4WpV}Y7Tn(3YyEsHmdjnLdwR`sc z@;4_W4}SyE^?q(E%qX4aDO-TM9XJmWefA4D-=P59DSyON)p|bK|H$Oi-|-|@!%#OZ6Ge3cu)ANtFA%pbN-ZAnNg~rByjYuF!${@vkjicb4qT$v zjNtiB+l&f@cylD>ytn0mI~$E1VY>sq-tY2rUiHTm8~G%Uusbv|>4(H8d?@3DKVxaW zD#&TIPhPs7>Ax8P?f<^G$#?uKT;HF6_+jbv zfNy&G`s?iS&(co0kb}}2J6*>e-5qRg+rPxxOpv3xzy%rn2}yjI;QpPz zpC9-5go??-;{I?#Uig05!B;BA5BDOc0pMEf;4;kR&DC8F!hi(p)s z36diO`YDN=2`ztz)96DvG|WI#+IpXENPWH#{zw(C%E&5R1I91W5zDi)`>ASsYCm>= zJOAuGy;n{d#5%$XMe*WiVlLaO%s(aJ$&V`jk%|98G{j1rS*cc7snMwbUsorA^i|SY z$b#7N%&}XcsrEu9xlS2?$WVatyC`kItm{Wf&atGL55l=zi&w(Swy9eexZt=ef;cD_ z94k5(1*IyjIJ1AFR(?fR2KRQPXQzItHYrhqwXO-wPc&Wjc^5UK+W-7pFjQ?@i+Upx zc*YPQ*Ic};gMNdDhU0$xci~U0XnhwSOqoQpRs(dh$ zO-BE`@9?1n`f#F+8EOr6wOH|sB*3F)E>tz z-?~QpJfl2z5YbbF5mi(L#1l2+P?sgK!W&giZW6p0%-nMyONp={ar1@&cM0C~l6|aX z&YDyvinym_`jfaa2n(&Lwt=lFt_(i#o2~%`zX;ja72otjjqn)zF>HSK@*Fmymz>w$ zmVtso$Gk(pQ8tZv)Ea(3>Sl-ZI{nu;RS)0 z!l-TQuLw?gCBRTT8DLccq?UtwY-9|C5owh#|3|bGvAnk#;RD+J&pF&i(++?={eUdae!9yO{4{ks7WAO84lYm!1)aqLvFQP#b<+9(i~|*~SufX-U7a7? z4BF_aOAAIT65rr_UfU8(n-vPPzy5hZpxD;G#>6Z+8h@NbDupE~Sh2Qx_NJd?$e za!o>U2`j?q2KFNv#GK}X@SF+WFfO!AKTCN~nJd-~fK;64{U}$DUeAJ7;!~$FRAF5e zoq@w>t2uCpvX3?Bjx*T6#x0h<0+tPn`6}0;SW+&fx)4V-Z6tImkov>YT@dk{i zb4eGh^2UcIv9%Uk`W((1#g2mjfu(kv?^niE=xFTMlNh}=E4n=a&nY#8@yT!dxGrsQoN9r8DRgFv=78Z0nS3;Z!OGLUM@v-t9)~0Q&9&Y%|F$ZZ z0;4ODSfpuBtFWHY`|}`pNJ;qg#HZbf>C{CC6Pn^Q>_!GW!PSe>zV1PkS6L}9RFTp7 z7?c%@4aMnr>6#iiaZZ$=8qyoaoi&81=2Sy2m8fL9bSRL%Cl_(~%RK>PgyfXv z?-gsqrVImaRjCyQL*JeUdL5zv*4y?t@Cy9P>2wpo56MVRtt=$AUtP+0HmyzFGdK3g11-=TUnHX{$qZQP9&)}mUc z6^?3ENkMbElhA1CzZ=lwXa#W;4C13Q(M+1Lg9+4Js-Q;Ouu0n0Nao?!E^PQ`i$Ul0 zOi>-AY_wG$O?UJo(^pXTU_gng@@IsYW^bJ`!?eJ+5mH9=6vwfIooZ|ggXuA$b;IUlH{|wuJFmbq`7k=-B&S|};l%Rz+5B6RULU|o?AqGR zJu$9FUducKD25uv`%eyE@{7Bl^K&)QTA6N=rR>A6H?*9pws|6s{mgr zb-Dp2KrVJ|I@>weu4`mTR7qaSPF>uairQY{9Xz@N-p5(l{AH-NFWcAIjxB>?Kf{E%}%YCCZ5FXE_ZdD z=FuU@L;NA~Z^(E78L1RcRm=GyBO_{~uHp^q{j{(2)ZaQby2M*+hl?LCjvlFB2j(!O zPMzoT&FA1moAYua33K~c1^HE9;aVpB!sp?d%tQE5@dBl@-&rX=Ms4BGBNFm|64orF z7g;S4I+NfkRC67Ci-N9DXO>*x8muIiL-nRx{`~-f>xDacf$!(v$O_MC4Q@ z{2>7QV` zz=S^wDf~5(ES+&i$`^q@dYe^Y@N50oNZlfpLsG~h&yNlG-02Y8sAzeZ;Eq}m*3rcu zX?~e%l($`Wh!)aBEU(^O&+TD%yUb3cEdKCEDxpcBx!|;k2@5{&#O_^L#nzIRO{hLA*ci+kJfLbP zJj;h2Y;Kdnx_)#_GQ^l|BN65wB6zu7d8EAt*v{-+>Lz$_e%LdrB|%?d&`)Z%548DL zb2+w`67q;f>y?cAC6P<_FHRD#0)Vm+cUPU0^3jpD?S^JVtA8s6gK<88v6gdUmgLus z>I9gLnmV!OlJS8Ehgl|yqnG*Ai!QyB(8T;G2w7L3H>M!XELqh;FOrZBMZX}NfyMoO zrVv&6eeT%X%5LndQDd8L%KF$=ZnGX_o~!a}O>0O(=3Ff5+;i0&L>||&x@C#AQE|Yj zO326Um(Xk&PwSHnXYK=6u5PJBEgHy~7z6QiM<`&-mF+JseCi9W{TPV8zR>r3XSk;& zZ{PwB3FhKOyq@mET{kZa&sjGV5I|+NJx3}8tAol0SGSwGH9p=ojQk6Zv%pV*3BlJY zm-nc+J}EnYyV|!Bd)D6$&GwJj|M2KDn}Vi5mN>fnjjrYhz0Yi1n1ZH4l~2u7I-Wqy zMv>DGS5Ev1p4wRMK4JCVMJIkA8ug(?!;uz^KfY8Z#QLE;uG=|yBAB$3r7OOU02NnK znbvj@{ASF7;!~q7d^?z2ef@26MG~M&{6<2F7YgI1>WE4j<`XK;1s-|4YLvbJ*mNK7 zW&X81er{_YZclJY^N_*^amjo^1IoR9>4Ie;xlNB_KCD58W|7vJevl0oTW7{6m(*tP zN)B}g!~~%o*LehmqpzJPK?ilkM9vNr^=Rs-OmVG)vr?-f0AcfZT!A!W1s}Iv!b_v{ zB{u~^0%siYX*KyKQk}XB`pFc?cHV?UJ}+8GDFMwH^QSwx8?W&GPEYW51M4zyQ*Q&W zU1r5Luo>Oir6I8ycP&Bl(~|4>!IN9%GL7w+>HhI{u<5Ue7tbR!K_K{5jp4(i6U0Mu z_eJu5^2oCC7lzi>4W{HBe4}q79f`k|eP=HFp(L%Hw=0x=#*8J(Ks-vOoozFA_Q8DY z*;rGw5TQNpX!9H5pI*4Nb}?LU`bZgKNOMf$N}OrxF}Y++U#x}cXmg!uZEfv;n_g?) z{`&q=}Bimn$=BDXW}lC!0_cYagfHN)d#~Hxe}3R61yhbF znsYrs9Fc$~{r{fjT^;417>+?4=cTY;R5sS?``7VaqmTnIw)>V8!j`Ab*}Jo6CI1&8WZ(?)v3X+o4R*t~mm(PxA{N7?MUYG7!JS;uOioHf zQ{*+@6-MAgnPp;w?T$l8+VD)+9wt!l0~!+k%C(2-v-=JKV~rZd08#0@XF%>G;pje6 z=z0UtPlLcQ=C4Z2a!s}h5VxC{sOY7{Fgl2P%|J;CPs$0O+}q(-EFbPV^+U)5v%}>! z%|}>GjG*-kSLLJm&^cwM-#%#ucB${SzR0kBIoaN%g^YR;(jh-*EmtYOEdQYe-d+7cu@io0 z0_E;+5mHu;N~D~asFTIyQMWU)kX{&!otk;IfQ62mMSy*H<3e)d$vE-KB(+3IAKUd# zf^y$U?%Hm@%Pz+N!WqG;Vvn4^Dk}f5@b&otdL+EZMo_j%`v@Lmi4Aw27@@GLsN?l+ z!SEuf)xA_{^>?Q<*QHhPVGMJ&EYqL)FwLndjZQ1FnvY9&>)y#njjm`5;jwMvh9b#{ zrm-)Lm(6(15C;9~8DnO4FA0LzS$=b<(1?47NycEW#=tFRTOPmS?vl+%FePax>J>&y z5bKEP@*(Y#ty06#*he1%AMMx=LDuT$UDii~2XC~!88+xcH_5&UhH)8`k*N(JeJaLU zA=r;F3bofqcU4I7V;QL?Kz$lll0FgP)Zk;3&DRZ>mzH$-;?mP?Y#gDzBPp}XOvrU? zyX)spbAt6)B7D4W`#W&4rdr?%O@kp|_a}=vrXf5PT!Zn)z>2^K7EFA?gov-LpgC3b z1V%Mv2J;f0LzO@v%P4C#aOlhUsak@3PHmpha1g=SpfzX+B zB!cW_?L0~V&jFcCZ|Hd;3H{~zp|nH8{VGPfEzjm7)=j8(z~FMPv*5nLY9z zr{N^rtP5j8NiVP(aYU?~aP(o02#f6Sq8NlQdG?#gR-=hl97)f~LfVnl4U>RETK&0y z!I zEv*u3D~jdobVwI-enB8!(x@hESiwaV$v#fjh%(yog}ueF(-8snB!^4>x{L3>C;bjV z_5WJ}UO9x^`Jj_z+T^4h3fDXbf1j=jMs_`0V`{sQsb~D8d2WFH10dx(zn#wLday%I zO8Z%4>P)gcBFiWw!pA~>TV!H0fq`?sJ#P>f$7i}>68bIw&4`E0r@xen@oHhp>!ON*+9SR0PZ>#a@XpUsRRZo9!aVu(9zRECr}$6Fy=kAg^OeSZ?=h zJCErksl70~k%E+lTYYeW<5!hwPJnU~3E3)^!vHTo2d>RI z;_t6Co!YdmRex~ko1?+xf~r|~S>cgSH@Q%yPv?Lt1UuU_u&5WQPYtm*t`F|5!agqD zXjQe{dr#FB#JB+Q&*(ISo<~nHA1(xk8NX+Ri|znFX`ZI8KBd5$Iv>F^V3~f)rNHMv z_EXdt*}8NZu6bniZ!yhhWG)_Z?MR*dtE&~{-N7L<6?`Tl^is6X@tspy|6y$fmU`mC z)y2~FHH&7Mu8@kkv~`P%u*}&^q25SoDOD*a+3Che-AvA-xERH&>K_e`RzZXO+^l* zL!i@<(<_g6%YZ36LnFt%OuWoltk=8YiCx$;`eh`}sdPS%7#RfSo=6k>4tL1-s$AwA7S`Y7 z)E;N7U5-5J>;(*N>)!tAy_fJ>9|uQxuRAoon3Z?2YylQn+{}Eaw25}V1(Hzqmrkj< zG1dc*x&o2D>k>hU_ri8WZtiP-QTTT6p<&YX?;6akjg8pT;7K$cZvJItzcB3rwDn;j z-<%Y(QBcreFm#9-*|}oZ5ev)RSK3n8-4 z9`Y@WDYNiw*?+^c%e&r?Rh__;#0A$>MctGxZHBI0XkYKDO`Tg4mwmZb;l(%I-a4n_ z3LVqqQ83ee6eRcUw@N-y{)X3{bTSod2lRhL*al41>~4VPm2db4Ak^P`5(4KWb5`RdHm0)7R6p=+ZOD#C;Q5P@OrU ze?Nz3Uw-s__3W3wxkKLsT9^{^J-jG#HLSPzc>lI#aY-Ouc!C*&;+=9JbA}rNmsecSi5PV$z$^gG+R zw_@KE2xJhPLt0G71>EMjXFXlxRaV%m8#1@V?2Z79zZHH(0|-x$=SW}~FeujB1*mZx zcJ*ime_hW2@vsKg$O%axT^D&syG6)5G6IX91BJ#va#;e(f{gC1l5Zhih3231K?rU@ z929WrwjM@y%kK(VCkOO^PY^dE__AUkc*AqZv79_W4(9eghtIPZAK(d2*2D+Yv|5xM zGxH+Uo?mf+5IlDo6aWkY1c2Ks;%PPT0qzMLi}}(Ym_|TAJIvvAvwrx@o7mV` z0kQA!qyz|S6j|vR80NWZ5>Mv)&*Knup+&fc6#*6*rJDu?l}Y{|qRuiZs<`d?6U@*l zAk82k1Jd0L-QC?t2?$6@%m4}^Akxjy9nvKXDcw>cAku9hNYO3llBnE-Tu*?47+0g`?pOlyyI{hai_4kgv^5ihDPXNWc{OQ zAn9rMIE;#DBZP|R>l>({zaquVTM(BiGIGcB^}Z@QSAhuWDlG{xX^*lYFM$Z0Bks+V z$s&j$PH!N0{l@Nqkp!cset_&@-(~ju4-IjuzU^7LJB!e53z5i@ z2n6=T>regBrww#U#`sZmm;&Kr&M(xUsU+)zbg&s z@(+<5q9TLKOx;|KuedQ^y#T72vYjYOF=t#lpKPEB{d1>-UGwYhFI5+A>ryM$ol+frfvnkJ0XRtuH046cLKv77%Ulv zU3&FBD9_&y+hQBx4WJz& zs!;BL`Z!ZL3)zsalXdOkPhoY zw$wOMchmBnUi1w#kzPuBMqgxING+Q7nT9)0KX@5VPJKfBk!}^o*JNr;;+&vF`ot8h zBG7QB1_6%P#Id1Ll+?f%M*85AZBZ6G1Cj<(wJZh2H0z~`$uCQ_&}mEST}@g`{qeyB zAt;X1zB1}TT0SvR`+~#wHa3ZZR-*c51~I;=Jm}%B`5OyYC5)$-unPd7-{TfBj+n z@0@wpr>V14O`_%0uXJYVeq~PYMYasruOduVkN?ej!UA5KER2TJWjb`!6mys6>?Rt4 zpC{7)tsbo8dh~eI){WNUTXLj4gl5D9)Tvno;afd2J^3sB4tT>}`bOr@za@4SR;=K)mNwu~<9chx*)G7d);H zb(VBUfpqmJ{5lE#;FJXoj;hU>XgY2!aBzn@P^}mdo=DlU-^oQV;mSv?TH@Mz)b>YE z&e=G>Lg|fC6=s1gTYdRa4w8SI7EM&5n6EPic)@;XU(k9b?)>RVz;W}HT9Jt~ExoOJ zV)eu3ZtfgpbFMRCQW`JVJr%R`EE-OKxm6=Dd?N9EF)SFQudrcbj$5*W*MhKGoF%}~ z(ti_zkOH}pE2$4x!M}lJoJNZ%wy&h~^&{WqIsw$iB&LA)Ra*blsor~i!A3arGrNJS z_CGOf*Duz_)OkS?P_-i3$<;dxEprsZR8diXN$RBV+ zw_-gG3&%0_M#!@$ycOl#r$NC|B7NOecEk$Vf zEy;R&M|{Sa;#4{75o!FGfh9*?%L|W8ni2k?a2ibqx=dBu{b~0sB@A z0($-|-~V>*f~mG1&SDs?KF+Py74P$)rQ+?E3-OjWcI%f4>6NxSC#_eSG%TNLFH`9X zSax3_DH8;NC8aS;{%hNP`xnma&1Au|THDbKpnfCE`*8z6(>yBvWU#*sPjrZy1SE0w zaVYi8ui8IGy>AWUd>2uy@xb6tZHXe!lj6OwoAByoo|i~|$Qgh@?I9v@S@wx}RYp=+ zeWWE^z>A?I0m-kHVXfQP{PJB2&}HQljh=cQxf`JkWeNFH5%k8}1IYrMhb>>Xsc$jv zXA+Bu=cXS%v=gs?{d0QiM94;Pw!m&-?{#7|v?hVai_;dVlY|$u3=rfg#&*f4Ti5_i z=9LLzg+|~6;>+pUa*H?eFtV{)@+fg0AcXlA^cEj>?3wPREWhI08?rWV5@=xyEFruk;&o$ zOiZ!@y1hT)Vi^3`s~4r!V18RQfZYcGI9B0&giLHA)w~^-R=`A%ob%mh6>_~@ zKq7UHFMUTBtAE|#cR@cs#o7N|F5-wNxMz~>ayU4<9b7`vuN5(tsCVvcfbVmmbf^|; zAIMiFju8Pof5F7D`<;CVrkwu5>I_8jHy8YeOb~)haxQU$Z8fVOxzIR*v(?w)p~#%s z%}JUW4~l!frYsjb!X_>7iyCJv0<@G3#Xxn8o9yq0&!z>*kZ;w<`AZfZRUWkmYd7yE zUyF|UNLtNQhdRice>SiAtuMjzxbHD+k{}L7Tcsp4^Hd~>?d0)FZc}ZAtfDparn>cg zU{5ThBhH0@gpQ^J(-ge=lHdw4%XaT4h`~!LGb}rvAZY#vU6_a=r)rqddS~OJhwRBV zcuXZk4fBaSz$WJCr^_f<0B9SrW19qsMy|hXG%c>epwmMFvSCh5SIOOoLBZ%Ur#6T` zy?G*3cmZsnnF1jw!#4yJ4K5RIbB5#~EkZ|;5&=~dNGO$`5dgo{7cdETYsjwfe?g3x zt%mvzZWD|=Vc>ta0Q43Z8#Dz?erM59)r&R92=W7j8ci0q?ubEXkkYQLP0K{%(*rl7;zA}$S1GWGI{^&NHvVCrfyo$+A1 z*NNOK5W6hbzgpnO2Imu;36@lY`#?iFg48c< zh0?o3e%S`7*E`>AA6wi~NbK$;HzYK&kPG}0uBwO1fjTibkd=H! zkKtVesG=Y<1nINP#Za2QazdwvSgUB*45UW~-my8ce5t*x}gy|Hedzr*7$x)N_kO@2j*i;g*xtH{7J%! zCaplJ7(yPE5!gKVmzPL4uzYc#h(!)OBi^|?U5up!^tigZnMBEU`y9j={a>R&W z{|EMX2#IA4D42Iba&{=mNqXDjl!>!u-!3W>(U|H-xbdUU+P^wd$yYwM9^SULGf4EK z8==T}oQik=V(8;=-iS+2wJs_%E5ew?DMG2Mw=^R~SBQ|DP>Cyp^kP3v*i8r{Z5k-ul^eBa>HR;p=fCG*6X=Kx& z&!Uc5N_7mgyd2lHc~h2Q!?dLY73d|ljV1ng7li_#i&=GYb4?*IGcE5Y1OEWjrYT=0 zk&ARqg~uWv>aOiJ$cazn3ds5OXH_s^XS-XL5pYy!d8>b(cC*6U@qGyMoD+-us>XfAW>!$=?3n$r z?qApY?WB4~?*NmHL@OSUKE@6uP0EV4YiZ~D`qjYnqFc*RmJ#_eC1{$sDJHD`>+>gx zW@Ysp#Nuvkmrr8#Akx}0R0x^zl5^4B!K}xpcIf*9e`bzAS zz4n5D<>PG;sRCf- z!iP+DL@wh`3IduTWV5gjV+A^2-!5I_rEDcf9XVn2*_c`r|dco9XCrPs7qPJDV0e_^j$TUBM z%{8sIB6)(U`u>so%C{&6v}^wKbR+2I_O5!J3BJzxNBS^2BJ}(fV|80!M!3tbw%*^? zo1KBLkH{DZ(?_12+x$omQAA{0mdre7Z1E7Bi}h3y%BTmuHJ4{an|I^b1j=Ps5l0AsP{_5SbkIn+Tdq-e{gQ_r@(?-e=w~_hJE!0zrZ-A;M@cYY={YgO~;n>S$b(O zUi`AKU3&Ozk?&D6n5tDLzu}0fHAtbBGeX;s0dlU=o_Ojpw^^(BhG>duG=bd|B&C}v zoVLmHonRb=7Zt5n%HEbf7vZ%b2SKRNW#WLUXcXR@lH1jizpK)?r255$YA{WB|Fzo! z{@xAO^ESKn4?Zmxe1HO?BNU{c#?X;dr$Ak zv{cLe=D+Km6M8Vo5cgH0<@O=z8kRG_xl!{ea7;Ik5mpT^B3&NyAOfg%C_d5XKE+b9 zu&4@+#21(v_3!WKN(*zC3<)L#AvKSuC})OPOu%9Oo8a*Zc3k1P5kOMeJ3!EI$T-zw zSKI(Wbt&im>tJXFz;9@n$8qmr`%Yw(n!76^>Zo2dKh0H{fz*@ z@%>8oSqAWq^Pgc7o1x&D$mt99E8E{88q|PpbzC3Y_zFxs7G;X`+LYP4!QGTG1dL#f zZZMYceuk`Bdl?TnM>Y@X&X>UrTS0mt#NsY#3n<8_5fr3G!49gx=DEwnu|p*j?YAmV z;AUd5RCp={k`;7bI1%v=4+6-#eD@Cd?;-LYD?U<>-N!T{0A~LgGr3cl(|+1RU1K>a zaPqeuLkWUL!0Sca7xz8ER?fli&VXmt+f;7rY2lmNHhY5n1DD%5oA)h&lW#%2CoirP z8-5Bs2|p8RL*He{u8>0&w7_`pG;FE{Ad|y<$&LWVN{{P5ftW!9y>{hAo%KOXTsi!AY`sx zfjUVnIKMSBgpr=9CU21O>Lw=g{4`o>fIj~Q&UVnyXTMil@cg~@Uh9*7l|sDlZo`F~FHjT#V7yIe#QJ=E-<~UOsC&FPy0jmV8|^F_ zLz58>>wA`svPfY&;n$rH+h&V_F0Q?B->h1v1V<)I{|QC3$0co}=m*V726@1R*#!E! zpU~S~r&z;tgcFT=vT=yz42-$Wxxzj|N0u)Nis9x-qXu>swRBr^b{Ng!`3V|!Bk^|| zykI1&(gY8chbHAOR(f$n<2zHmZai0zC;d5EoQb<293d_|-*9-JRn>e|7XIqo>f{AzW=eq2zZ|&b?#nlaQr01eYTCh<)V_zBY;=QSsO`}pR)@^>G;aK7h!;0?JSw=F5xh3$=IwpO6K z@jL2!=Y=j)q1i{&X1V-SZ~W%)21m?cR%f5o?^SE9b7BpFzR_fRD9#REj+x+ruLXqK zO90v1H4txu@*nWYPXbQZ1YCy}@s{vySGUJ2>&|5d+7}`!%cDXLx4)_`Hi@!1tK{dX z8(|qc!sh-~oxi${7nXiYDubIYY5?vBk4Uvvi1g)KE-sU=Vju?KWCRcSA&Sy`YjdX? z^99duFDk{4_1s8W^7jJZILPsn+{%x~+_qPS^>;>up))`F@=1L++y3o+e2mT*GD0@% zH4BiLL4)4Q!^W-6!CJF0Z3K@*BgXopWry+D!kj@=N>MG(=VN2L_^(A{K(T!wmwJ-2 zjG>}k37fe0-gx8Ss!$(IQgR9dB-9~YUk>&a<6EW%EWT2DFSO_wC+=q4{Z#K&q7Xvk zPb0aSp9VImFImc{g`_$hEe0Agnlg&&4iV#3v6Rh?NDsi1QiW6o4^zG`_U!5PzfTNg zr{C;aJAqc1~4+4T#hMB?xbZf?fk?(CfS9crWa9 zP1Cwa;F{@OduF8x*8+#?Xr_Y!gv!+c&eqSk8c4D)CiF95#YDK0g}(PsyiG%PQ++-= z8OL}6O7s*s@c1FIRYq-qO!@KtLJ}Rk+CCcj0IpZR5_Odo;(zKNr_gqCK`bR3m6$;F zC$QRb#d$-{<;CWql`$05RgbVy2HwsG_&Z^B%uAU+SMm9_|8W9{z_Q9IXQWz8lAB4l zUW6Jq9v?PdtbEtT;;2y!jlYa;ahR z{&J~Jt7viD{w4fn0b}5b2*U@!kt}@-hn8C<6FaMlI=z6y!XYb942n&4M>uJ>$W!Th z+66Z7j2Bz=?WTe+$AK(TA6WVl`o3`^Fr5S}KI(8{t-Ph;OOw%rttXu;-OIRz|IjWd z*ZoB#dA$TwAGeczdL&_pN%|$)qnkcl0P6efPb2T0if@= z{3JVEVuV6KBQAVylwX4~Au?AC&;jPKFKB!5BEbsS7(b?N7g?OERM0ezE}@upxOD`n z9t(c(I5fw1(j#QVd#{A@V|UseK`~#N@>qa6TG#%?oSdgDMfmP*i8Ne)>iv08e`EO9 z=*Dn1+k-zN=gAZ!ZttkaFB`1eTovTMfV|K#B&kGe&3rh0p6c-bcLBoEa^;1{RrN4Z zpgFF#G%^g;7g9<_JU7}~$#n+WCpw9ANnX4uU`aOt=SS9Orh3g2cHCe&JJ5bvGMt~M zd<1B3iThgPF{Sdgx8C8jK$4UoTpJ_5GQ?;X=?85-8e5&+Q`nczbfm>kBHVW3^Reta zKMRN(Bw;Ed<2W+I=^J!^Th46<+(YQw9ujLbrsIDqikyaisG^g$$4G`cjE@6({1KB zE0iH=Nm77ug4@QZ-{vZ9hKZxA;jEhPDtI*3k>4$J_Xa?aq!gtQP+Jx|kx}x87WIYH zaHG`-R~y@(oR(ixud@@MuyU!<%S?b$1QkWdipSxdLbK-Sr3>p)9Pg*lg!A`Zd zI41SZ3chwP6`0$Y1B3`LWQjDj*R#@&1pDK`4hTlgXSIbFzO%b&l3jI}KcCW$9~0XU zYo1(j1k*OsH{Gt#bf;yxg&a`@ov(o#Rat^W%qTo#(1Od4V&u7K_Mi9bQN5*_bbZ&BJwr@mfROZ;KN(?;$yaAT!|oW*6?-P#?9!LqKv~X4 z;iN%t$vXhuJns1CyeV_9UCygh@4qANWjG&za)0-}ynPy40zt9@VzG`l1;D5h_RK`} zOy2;IWMhQ-?v1=;1R_g9>Dd7{GHQv}KP8jC%M7DpoSZ0HK$##}e&x@kK}as2?I7G1 z8{;QPQYCzVGX(h$2T+c~Ux0_T&1K^NFlNxr9{B!e;rECdZovKjv%n+&Z|=Nb9df>T z8N^-GjnT?k2+rsBE+U+7gA3`VOk_T+;!WLfu=)@2^XvyM?DV2b>!!#|usdb0C-(f^|wG=q4u4FSj;sXk(!SnUPd zaq#)lEDr>T7A5BiY>I;!Aa0HECoeGbFjc1y$0)!GS-gTC;{v41-YejAYE4D0m1F)) zRKXV;+IVTqZz^IcvqUO=R=cYVb4F;y(lohl3de)uJNrH-xb}mn2~+@oeL;9xzuog$ z^pSewsXV{(qCH|`fx&bzVtBS(k=ODUB6Q%!uanFEbpi(jB&P!0--^m@+@NioKc4;pDrh1f7X&q(zRMzE5 ziTZS+8Ps`ko+x6nS;Bkc?KCUfZ-DtKQHB2W09A-sJ|iccJUC@yNDysh*>yGgUHXXQ zKvn3@RtdZ}i9rK_PiqQFeVFz&25C}isTY`^QmYjjH18Y*2ri^?%cqftAVH7=po3B+ zu%qULd$OI|bOV$GK8E&lW1U!BXQ|z8L&2Hvcpfzo4^No<#4+w&jH<{?;M%Pq0$^48 zMp_O0$(cE*{_48h6qYeYygU5uB2e}I-BQE@rqk)ODO<4jGV?DeinEMTTqJUkI(rnz z=$pYssb;#l;fy%=OUU_6(ZcK#i(R_8n=qMrx(d(t)}}g4zX^3r zd){eLg3k-RyiDh>Evg2L!EYt806XCd@ky1+cRJ{P8Fbi?)dCwo)CPW7}NQ!br+oCQToPVomCChPx z5t&K;M|%^JTuyzvMG1S6K(;9dt~iSO&~ZJIoE9xu#_Ws5c$;$9*PT=SRB$wt0H((5 z>SIxE%XPck<%iD}4i7aLmc1_aBflp4G*D^XnH=rHGnpHzI4Uw)7Td09s*@wZ%>;1u zNATHxvT`q<<*Aidx}EF#NoF@KbpfAlb@+CiA_>UqpI%wqE@*SyEb#%C3=e zL5)m7-9e{*orMhhGZkJMDwth=Xja-joqaYwY&`e??6Tv$2!1XxWP^qU(kRrn_wP$n zfh?YdGB5qJ`Lq0k9}DSt^l=U!hfSZ%)4&MjSlvzJwDa1t@tPT&j*c@-SQTZ*zpKz_ zPZ2{1578JR;;hqueBt((C0b@(oN^nZ&3_hh-$?kBMW5R_bR80>l@p?1U{uNOGN?Vt zz{DEqeNl-6*;q`eQc6`eeMJkM^kVlgVUjpv?co$?4_+06P1NeKY5^WJMpYxSbJ+Th z%BJaGD`?vX+Vh1rwzwQ|c-Wtn-<5OpUU4*Rr4=w*eH$nic_%7MfQtCyahYBSm39AU zpv*oZ(4j-JO{J6No04)BF#Xar*WrEL%a~fZ7db)yYQl=~%3`+xej6jI%2S}g7Z6S< z301oNwqR)$wOk5hf^Le6iQB1T{CixRl&_ER*S$_o{ogbjElc}mXf(n;sgE++K?_`r zRyXvy*FsqA@-y0rum|XsNg6WIS5YI5SE>`&lSqOjx5qS!1yb3CR@}88qJrkz*fNq)zbgnT38|g zHqo|+*}50Nok9KFO>5BBrdKTu@b3Ks2+^4=$ehFk@0-a(O_`Nd?oxT?$ z%a=p-x5f3hj5pQHOcB5SPWNY|KU;6Aq?Zjia{R(7Rmg9)e{F~3q$Nm!v_0bc^902O ze*CmFMRPx-5P{#&B2a!5ev-lYl4MXbPMa|`_Gn_O=+kMhzMB$H*zcPjqQZ20N!fkz6d7{oAwmHfRg&@a-{ag&0uR=UvWvw7d0Vr;mfVB`sm<`r z!ebAymH4vvRRB^Iy+U^o?Eb9R)U+xlRwm=7#C+_2Iq~gIopRA2#h~kom!f zy&CWDZw;yse!+c|)C?)B_}SS%_NG9^yMFA(vKo83FeepTdjW%4D>^RhdOtf3F0uzd zj$h7Hz>ksTOtN7WY`-G-7R$`&qVJOf&=3w*K;GI%kmo z?(D3pDa+m0zs!Rh$m_tff?heozPEj7h8R2Z8ES6aN&+vaDwcoe-ej=GSB`QwjIXqV zv>>PyxuJ{MTL>_C8)ZskFX1yuVT@j+9697k374ow39XAP0yN`i1l`hYsf<40(>%>f z(EQj-O!;i1>S)p3qc2`Y?rnv+Ni^PDWc`N%@6;>77rJ+YRoQ!XE8bzE77_S=#S8w} zfXE=^hfF#Bh6`t71~)&$~8nQJ1~sQ5`8m!yUb^?VNu&c6@F) zjRyOCj9CRC8_W42i=OkjsvU4w_;dVl=moyZWqH z`q|tJ6r8+ zBuo(HBCaxn>4h>7|>-;^s$bfNXZflQx^VLe3bIceggBqb#^KIA#eN>z{ncyk9|wcXEN9iM~IA>;!6n4ldlqPmSubm)taj z8<<<|-Wj^i2s&Gye6b?{lfali5EXL%>aI<)fw|Lrm)C4&)Ct8$61x$1qwSQMAlqll z!yoM;%jbQQ1YqM0zX9Z2Y%yGrzo|O~iVHMJHXg}Xm9ppfia0a5%UvD8o+gaV`Sw-Z zuH$gY=PReNr5fS@pkmy1vAGj zEvK_lpk5S(Mmi|XXtS7_ly_$D%5Ctf9K=^n)civkSX2b$VDa#-MV0J|j^o#*Kpu0G z?ZyfL4-1YTB)g!sCE<~|g(&WZWhM6O{c=**^d~hq?q)1cH!l{K0zZa7G>|&w=?%oT zXsv7Bg}{^|-O<>@1F&w?SORasK#@wXVPcf*uuo!uhTM*?O`MSEgK{De(qS@|n|06U zNo&a2&xWWI)OpCy3n3KDz*qcL7_n48K*yD0Dxpb7lR{Yf{5$4U(-q)IR3RYV8l%tJ z{yRyv*2W5L_(dM9U&k0aUq!PiE|Ju{)AaNN6!6L`L_q(4%2mOkXUGDOq3$# zZH*HZK~M`IrSY99k~T3rSyhHSi8hD1yq4Dr(2cO8jkgZ~79SVktNEm{ku@PbYbQM( z19jyH)|OJQenhK}6^L$rgYKa$98^kX{+%}h`5qo$e}rN_>(}R>&P}l;r3v{`zy&>e z&W#O}gx)E_Vc%ngkrMF=DQ-IP>g5&*YOJP6=>h-3EDv{L3NdHuymAJ&0btp46YGQ&?k2-@#4w+8HgDEB085!L-{ z33YoY0!M_9kIcEzY8#6&v`s2Cli?ME8e*Ke@gqYhF)s zizYAUAFqUdLe|PgopL3#N2~YarVAVhJ}8{S^CYisb5NJPr_mtN13Z+lJ1c0ol6HEw zWdCf&{TW@`l4gyJd(B71iME>A09p6F;|4#MXSx1g!gf7nC?7qoVz2s}@-*@-Cf;*V zOUSK|kWn@JO`cc|YrznrHeth!@x-@CIMKhy>%(5ZwMPL-k<0UFXF6u=-#jwP7XVLI zl8LJqf|TrthgEzEi1vN$^7gB)?mOH#&Ctz3Ts(U3gzdZrQe za*Eti)EC5vuS3e>QT>;jmy39o5?#GX`XE)Ou3X^U+&G|<=?(I|AwMg39%-}fk+kSQ zup1874%<^$JIpll;@rqXdE7AO+xSvXxBI7G4FN7ETP;%G`nIFqA8VWW`{`d7d7;-+ zeSU7!C;)4P^d|$8h3sL|N^&d^b^lG#I`6|}Ehw#qWVVp}744;lZ zSPr8$$7QSdgd0+t!oWZJJk&1Pyy;wx9yPN^AnBEi=xVLbWl;yZZpWQWuNkM~6GE;( zX5M}zc9IKhC-GnTB{LXP`No2v(2;_pL|*}#!Bz8$#n;@={8yM(k|QH&Tt z{JCsffBm6&Wc15C-~sCh9mz7uW#T%2e{)I z84)yacdGwkKrQW6KO4i%joAAA@IC(h&p^_M!}I!nz7vZG&oEpiQx#LyVm&zJqKpOZ z9pT-gvSr_Ri0M8cc~0T7J48g8oKEBDQaTu>SWYg=aiHu*M4sf5i_^;rfd7#0lg$Pw zU4HNMFi~c;#*LAw9o6q3EGdn0gaaO`9@N;U`p}p~%*axTDU3<53UhpPUvSWSLlc~% z>n@WQc&SNP_1kBlP7nVzyJc2{-kPK|(E>#>&WtkbDN6o;1sFZD+9PFjm=nTnws=kC zF}sH?Gi^Kpds)a;mnrz)f7z=A{1h~AgwJ2J=ATGIs?8yrLjG|UCGo3L_Vu8WjX&n| z?d{-JzPHOq?$lpiT*0gZ_ITJG8pAmhukW$7I=HH7`GGwJeq~?h-P&5>RMMSk9peRD z@M#^jMywQe9r_KTo$*C7$kH9m1E~rP2$x`=XRHWIK15rnt7m7Kp-rX*odhC3lf*;G?=<1Hh^Qfjin|XmqBxJx5 z^i3p$BMze;wv{ssmCE`&(Yx4%k0QI@fPT0o(YIn-=3l(>vzwULU}Bq&wE`x-%;+BH z|KQ_rKgcw)HeEC689C8Badfu+>W$-ry-2QT)qekWV96tEUp$)MTWg?|fq*T{V=hl< z6?aomzrrb))+8C%cbgOFT-U_3JPLYAx|;&56Np(tGI-G91n{RgW3)oOz>duVIBVZK zCkZV+dDQk04%XZf?B)uqFwZEzxkogndz)H?IaUV>1}%io1KNFDS@m%pJOfM$=U2jav7LA)ojuK0P!r?+|c z1=B_CJ(1OaAExdXIM<5>m&v7nft@YY-0w`4I5NrbdGASqkgRml=>mHI*kz>zAQYwn z@VUGy@)gbL8Op7zr|i#E#SE!Oc)pW zCKf<;PRV%x^@F?W9uEJHwb=v?2d{?H{jC8*%$-pdm*LKRhM+PalgrS#N-OPtJ#Jc) z4VlsXj>hhe;yD)E7J}k%`DdF9k^?-)qB~)#d`b37cSL{5@6+S}XQm(dg4$TRS>zrO z&ohNqt)1h^%6M3ueX`B}-L&!ROSjNI=z>_-u9c{Lnratdn#KHK_bD2q&WNoM0AxB+ zqmSZIT^Zcp|KurSgm>qlxpvsKUQZP>Qeoc=zXjjHw29n~5(Jqti7(wUhMTESe%%zs z%4R$|B4Q3$O9^hob?U*GB*h3?V>=ZobTU5v=R>(rq8;m!lQv|E^yHSh{5YUzbM>uy z2Z}Cu>`gnuQ(MeT?eI0F87R7C2C4KGnuBx&Mofj~OWwN=gf2W8M2Gla!!JQ?To zn6lp<2&ypWS&VNw$o&Nacv|4n8aBnjVu=)3c?)84+tMQO=|n0PFX1@tM2Zu-K<@lc zZJm)Xxe3thO5iAqfArWzcz#eh)6f1N=|n#RfNt^Z99+jTt+x2^9hwY zJs5_{iRK_>nSNdX^>Ob!J2Ka1fMypY_jRRt;V`oK_#2FD&O?V(fTH4%a`U}R`ShcD zAn}^Xj8&Pl@YCm!Ba3Mmiwf9F?YwNX;`Li#of*LD2<>qBusn-M&jmrrKdMP0UQ7@s z!QjS2KZD{b?6#AyD5%}yXgRQp=JavY|e!R3kG zZh9`b5o*OK3h)uW3g>%=ePM&@)e#x>hG||s5Iqr}v{DGOxVupXOQIq0un6g~c7^u- zCtfWKGHx0?Q3QV%0M~Jgc?MZ~MN7fLPgwW9@7Yz{)r%21+lTJ`?Jw{I{P9h?#Yhjs zqjFPZ8fi28xCz;eZ19vkZbjzQSVzdf(h6y2SL^J>fy&qA;ToB3DqWn}-eb=?K*IbZ zWCROrkMnk}0_HY%cs$X7-{UX9yDoIgy0C7!QsEQJFAbV6+^khf3fDl5)3$=!&r|-L9EB=`k1GB zlCj*Sv`v>ws5WN>R&L>ni}K@Cdc;UYMRNBmwvlk~>erWFy_QBP+QKC@=tf4MM#?s6 zUlH+cbGQsGSCUS>)m&1LL3)%*vK6G!H&s#5hILTCH6(XP}}RGmah zcstaG!stOk$ORuQ%Mh?Irk2k-9-zq+Mb1)-qDgw6APjUf*OKGsr8ftsx@GVn(pWlh zj5y;;L+r_D1YtfSNCI509QxSfhK(-APq_MW6=~G&aUD3BA{}+XFoSc|C4bT1Wugzu zGkYDD@}2h%X3Y)Dx2g5gx+=DwPXL_QA8QwrGsDNo1u-lu3Uu0&Mk+kbpDPQs8D-g? z5`26Pd5B$)KwFExhpuqvT*#!#!~<_Nq_L!Y4$?+_Q9)>_YX!|i)`8#sh zxR(U(wgk5-GMAxofe^9?RuoLRMe=39LFV*XT`z`HtN$>yFNo!d7v-h5lY2j?h|)-p znjoaIe07TIBql@guD(v8GGY$=- zLkCK27K3+XP&}mDZo~K3Xs^2GPrh`QB51zBNKyI{Q?SEmDzMi|@K+OConWbye{6`> zkt0FeZ8LG|DI^uHDN&6${{1%TQmE6UTuk}L&)+{&{1xgx;`<2obRecj6>);YLM1Cu zvxSo{3yHpjotDKXnkJ68&$f@e_||G&4x#zHVp=yYuYqAQ(ZeCIDz7-<`gD9*SB%pi zgNV~lhUK+RX$j>?!kmBEA>fJI{3LFWJ_cN=#3h!Mufdg~k zZ8v^)|J>noALbUdo?Kv%p9?(HpolgU4kzg@c{lM%2G0Zeeku}Jf?_j8J zW8eEcNB)m5a{k;&(`__`F=_Q;_NdavEFfa#z}fuoDo5b`zok3YoAvvk^H05(;J-h! z`Rea~hW_RM@ohf_Gq^ce`-bE^Zr!V%pnDkP{r(U5OGf9d?pn>Bw|ha-5qDeq%-VO0 z-WPn$o{{VX6fX(!k(7mdyY|Q&a=;x1PnTn&R_A5J1ng^<_@~&JI}xwwI(h9D_P|o` zz8GjBsWy-<_HA7`(=3sbxI?9mhSBT-k0i5OR_J9)@i$}eCcW#HF{b?U$f6rjGN(FcL) zd|ZQ8Mcc@bW7DP+GCc@=B7DYj%{}CREiZU09FZgM^l4)HNYmCa(uqk~Ch3AT2gUU8=nca_t{F!|SflEkTrxjAuP}UJs-#83*$jf#w{S&SZlbAsxiY z>0T=&4Bwl%q15wOBD;{KE6(ZjcVP&O&K832$v#NOCsLX}iqHx?%tN(WEjl%^^$21o zHd%vPNA8GcHYn%lCXNBY>J%HUR=3aAr;*uKoNxx?5shIuQ>Lp~yppG1QpGayGNU zh&0mRj8Pn9Tq!8%N=OMw(V1_|fy9@^iN>#*X7s=T?BStF09We^vIB1`0XA$n=l#99 zX_bP;Wn&wKTI7JTvHy;jXVqG*cbApsY7&TEws*9EIG1m7 zEl|b$DOWpBx}zuiSJ&k+ph4$vF^;&M%#Sx-_KK zA`*#(0ndn%K`OKYuh1Zix0#=4(J2gXkz(9_FVYWwBe|2Wt-zq&;BiFuP7)E)|FvpA zE*Zt2*C%95ne7xL11UqL+Pdj|UA)#!+|N|1_Wx$p;6hA z6s9Icz}Hd>K*wDrpLOK1{kVOBL+2Xwr*8tUQ6Yhd^HWd;{% z6x7FHOWMH{Z5Vmug-1)~>^i)6C2|4)Un^b#;t`?k%D9$U(WySaYDU~S-nLGSEs$*w z1h!Ds{RVN0PH*o4Iyhfj6Qf-bl}-c+k-%w^&9^I;$wpcoSxJV7ce|5qBM#bo^cV(9VVtxrMkpSnX3Ju(1jG|@YtnJM7m`39@ zL-qq}d6YZOFl73+@-ijq*Pr0ti;a@6nvX!kBAK)*9iOXV9OmAb3s1wWgJBsZ`Oi7c zV*;BZ-cNE08*kjod>K1?FH8%rtIr0Sq^752qzKntdiO;DZTQ4wH7eBqblyKyq~cOW zr|?dJKl-k4e+ldQAEw?iD(VMn*Pf!g8-@-M>5f5=?vf7a?yea?K_o^%8X4&ZX{1I( zx%_FNSxrU=4o-F?BvXXZaJ}k9$Vi4WxCYC1N^|kYxxU&wqs=BR{pm?*X2^OM z-^)#+4i&Nr<&jOe;d~?gdcgdx+eNq~u^y;y)LO#@WxUo|)g6yNk@0pK%fp^)@T<&z z?U@d|ZJ_#G9R0<{=5aAl0mnw_>_eo@B0j}(OecjmXf^)>m=r5~&=~JY@YB;!hI0I% zi!2m~a7dgQykUtV(_URSpaV$C_?L5x(!xmF;L++{MHfawM1d`AOTby9-((dE4B$ z$RI~}nupK*D2zC6WU05brVK>?7HB4=CV{jo;DN5OO3UxKs=S4uMt*a+VKI`IlCOUn zkBw~2#r2TqGb~{;{uc=1^%il5V=7fvz0y(s6ET1}hjs$_-1BvMH>%o5SvEmQK)Pzs zVT*kty`-h{q?6mj2OD&?yY1wMOQ6FoQ`$`Om*{B%6!B6=Lp66LVrfW@S$ zQVAc+Y$1#l9SV2@%XK7Hf-XyGQg4!G@xaH@eR_SH-T8`R)tk>22rG4OTdm>*fTTo7rRFKPBVuImx6zFlE66lY8So z+o+6kV%n_I8F11ln-me{7KeRMAs*Wwl*i0@v2QuC&C>8Fkbu<1Sb<_fob$Ytwi4u}UxXU@F`A#tD{R`1$3ehL4xKRp$^d1x<4mwYU3^ zJmNy4^^wKqp8DU)fBlI5DAYUgP{1#3>KP!R|JZh*>cxxZIwdoQ!g4e14~i+HSXI#a zrVQCBj|&Fn6q%GcQXjHFpM9*`IlcngdkBoizxY18n`S$k%!iN@LJe2lwhT&J-9#k0 zhHdl@qX4VG>h#h%c)y*t372O@(9c>C_ez|V)ultuZ%H7fMm=j)L^jnNu2bFXl@N>; zi;Hx~T8e~2(jGFk*P2qXL_gh99Tt=%s3xcOr1n=-24LMFL9!3Q4(f+ZFaVEPKeb_x zmFiqkX+R2IlWb09$Q75+g3L6`woy7xS$a4q6%(*L1w`yJ z6o`pjU>j1$Q_@a_U1lzI3jotHhQTB`x`ab{O)oUAf~_U2Jg}qR^?vKc`g-uSYdtU| zGvac)DRj!G$!_h5)#($7Xve*J%Que~cZ0vAZ=d~UsE^pNVf=?3ai-zFz>NbnWwOLG zS8R>z?9+xdfp&kX=gI|oyeBJJTWsvoO@eKe~gj2C8&R=w=?l(d^{dcly(x_J- z3vG$@=0XPuy7sJ@KN@}H4{4+x(CMC)4I&w7Ds0Y>P->T4VerD1;;U_>bwN1U) z)!|A_wTO!Ct+)1pTUB4bLV+aZz*mLM$5xtR>?sA-XWl?FZ6K5`3i?Qlb^OQ}h}}-y z^+f4kxZC_gC_CXCJmTIGeC-Z@EL`sGoDAl+QeY{#YK_3z6!O-TIn5T*2f;Q0=*V?& zpa7EO`fUV>HrDCOIb0$IF~vEGIUpJ%1d5CK2d4+3GC^o5K*ktw9dBc|rWPZg90pE? zjNHxT1GucA04>s=rsuEt;Cdgq0doexu3d~Yo#k=aF%ee~6C;goWHNX`=>Lh4j#dAz z3@nei+k65{3|Mks7-#C=h@Tpsojn4iENFYZ2SF!ia>!uXKe~u5{`IH0(Y%)AQCNLz z1o0mu8RXAvb+01-5&w&Q^JTU&HTK^p%S_Gn`_I8?o-mQ}3V^@Vcg%0N8}LgzH6lp9 zC8AZtgFWaiz63moeitOZ{H7y^SpX2+F~qqp97~B9^>7kf7a0pcy{1~h{vxF=Cm0KD zoHGqxNYoR~a4-3GPSdAq_sp@o`E1ad_b$3QX&G9mhI>Gk(3C;|tGyPpI}q*?!| zAN{F2`e^ah(D+Z~z6}tK?^*|PJhmX#!&2Tc>z-&Z5x|_0H+HQSjwV-JG|5#hWbp3b z&;ps&!7t&As21z}EXxWxaxY^CXg=_q;dX%^uxltjpg4 zHq$%=-RIl4N(kA66T0okP)^$BQ=RW|9Pp-mhksa2Oc-u;J-h96%tZ)`(BbF^zdI*A z#vL--P4v3TMM>KK=`e&L^CQbAUk zkqegU7`KLg;|yAgG^#NB_{H}d)9Tty9Cid}Hcm!|{fT-!VKIJbn5Yk<0eIcbWNBiy z6r<^3_eSAo5@aT#Ug#hekxF^kZUy8ogOqj2gt3iE;^Sc^mkks{r*CRhKNR8rb$5}n zpPwP_?{OQP-o43xC21E|Y^MTm=3h644hl#qdNSiCNp4$sH!&^?+j<^s=fous`tI|` zZ}Y^$6jS#9ah~r1-*94(XF_IP@aP=h3?v!Oz=d?b%?m5MAqT%04UnP;!XO} zGe}d=_lywYB%&O&>zy_>C$iNbDT$ zdSOVTfs-(Ip*I-7fyr#IANpsbE=o^Za(?r#Fmrlj^)XI;R?KjC_fZUK}C9hgSa_ zrya6x6~=GW#e>X1t7)-_hxp&X>V}kcHjbjMej>ZqI*tIC2%8 zrft9NYXya#u84gGb$Ky|kRW8$54;`k3RvCSltoX7mp(sp(;uQk1=|Fu`eb~#d~ha2 zU$PIr6WNWJj!zksLNffRtLoV8B+B-mKWF_U7n;V3Vk1e2UD*+Lv|TahcI_vss9jX8 zsD1X_p9j~Yi+9%Rz;VZt^ygJ`KQAfHqArONw3_Gh)W_8$nH6dEuVLLMCSaaPpLdGT zaVvr1gV*|Q8y+s_L1~nsD1J^UaDdP20$5Uht-sraer*2xTB9vVjqAmjx>-JS1HTg9 z+Ly3lVUMG#4F{%)y@}GON+e+ar<3yJ-Zga4;~xW#H&$*4CuF4PLfmVD1ZdXTXn|uQ zMF@)p6*pofts6tm#M$B?tv$LUN~cbtJraZ&W|Q=|$J#Z7PD<_E5$u)(EHc-hTT|uY zqPtuJ2lp?0{^fD^+>h&`Z@;dYH_H!zi_+eXTFrZH4bN$Sq1qbQxabVy)TG)pb>Er#L z(~m!Fz7GhgHcyP09T*Dbv9$2;;^*B5$koctrQQbPrZq+F-i9TAG?2lbzr8?{a_WFc zN*69QjXT|v6YBh5Oy_|if1B_)S7_i6saI(ByI<``{2OtW5CeWYtR-*mN!6yBEXZXh zSN4lEbG{C8lFAs){7NaV_6HJUIzXde3Kc9d?q#YpAp~ub*Cu=|Ztd`agEv&T!q5&> zLa@{PNA+G0Pj)e3z3Ptq-grlOmU0~QO+4x^Eg5S1EFPB6yl{`eVWhDO9H>5fc9MgekT>@1ubn(7yM-OYfw6-mbRO?t!aYR!ar} z5(`#KT7gUzT$yhc27u!srw%+}3zH#yR9>tlD9yu;LGU?KJVJOsq&W%e5a(6RI$;CS z3mbmUVTxDd#4tN8Hbl41&(MLzkIEyqr72efUez$o_GbeF3`-bHRoP>CSW(2;qc76X z{1%hXK8=J0tkmP!{A-V<>Eryp?ZX@KJJ{(_xA0!}U*CTn4?Dg1zn=YPVXbie_}%^L zk?NH7MN|T4(;N6=+Nk(MsIQQW_c1h;3`06TeoWk{xo3|-M>~+S!sakDYv&^trs%Q4 z*iH3!z{gjak7rElLaq-@1@$@r?_y3N&mgc&M%f|CUCSGL9T;2CD#0$-ikv+dZLed3JK z?lq-k?F_s{ALx3KQXUW!q4*zYJcA7V@0to#qO`zP|6sqKmr@$_qQJYkSGqbwK%m3x zLnpGKp3_e&F>k;B-ha!5JAu7ri{%jPSnl{z$=5{aVOAB*v#69f^3N!{1* z9X&JaJ_0l`{5Syp;v)#j(6Xa85XO}8H296BaJeu4W$CZ*L7#G>I10-Al2!TQb}Dgh zos+OLt_8EsVM!&jAbf1KwN%@f+>vl`dRh#wI)>E^c%{-A#mJxaDq(3kYm;#@Yq&Zy zn-_b@6C5;Hvyw(nJAiojO|ZkPsMNYxA!kqqV`;XWch**{M_+p`qc1Gh8&jnD&p9gqQ>tcG}d*3tAxoOa)> zg<~WuONfh_KgsHHPa0sR;PDc;yQT3Cxoeg^te`Y1TT5j+id+KgFD>0Vv1cRmt{pte z$cC!zHd_lI*bCTee(dxF6dLy4%+0*`3lajQ@%+bueJBD$t=2>x6v4tBxSx?61<$!% zuu&mBU3$HnqGl7k(OTndt3c*r9(`UQqu}~Bv%qO?1hG;4)NPh`mC*Rpyp8N`@2p{X za3V#1oGnKMcGK?P8}sLN{*#R>2kQHU1?B$@W_h zAjHFX!1iT7JKdGDqwZF0M@Bh#(<(Sy+5fg%ew{EY@i?L~J<2>fp$PJ5=?&JQZ9DvD zzuOt1c9(6?``6RLIJC0 zD>L7o|EQ231ZMu0#BT-{?7mo8i7n~Ki?5Ro))~@JL4?m}(Cu=%PTC0DvI>@GWmmY# zQ5LX}F2r9h-**P4_=6kfh&d|Bfce#M!@1z)mifi-?g_x#QOt_zvh+~f<*v!rz!M*ev<)aSouauYMGGG$ zh1R~Clnehz5yV*Lv{iR7&}<26Jk0okZtwak*EtzEmrR%!agA_vZb~GfbkE*1c8Pl3zCMHdc6~beZdUH{{&b3wo%I6M= z(ina+Ay}@)Xpp>Pi0Cvm9OwR7X*x(C=^9yv z&j*NxhV3il>}6Dosf{1HP-Y<+d{F|&@ksjydy;#%TxwYbti>5hL@!@F}T-1kF#ZB;+gFf?meGDY-n*=$D>dHWY09Ef=)@Jcm#pDcwA6<47%s)rqL^vo$T&T_~2HrGPPkMo69P1B3-Xu+? z;JHy+ZxB!&yYfi!Qsv1-#>IJl5+GD+Gz#@GtRAmm5G=ZtLjFUEowyYh*L#2YPpS&K zaoN1%Q9#D-c~|sg1@?5SMNV|f97kh_@iUXZ3oosTLvm>(oy0-p(biQ(?T_raXIB3a zsXa5uARGz}62Wy44b*`&*&iJkI>UdH${^BKKF`sQb0~Tl81%h8NjiUuIq0fAX!U>p&9?7X9w93-{oG+X@`G+N+%Dzmi(TXY#{~fNkKOQ;{Hetr*v!6o zOoKq}FS{0!vi0ImTocn0$s|TRaQLoguz$H<&w>4m+m*-WDXjR~k*bVfzAq1%?Oj}s zA<_Ttf8I6yUd1{Q7^a5uzft|Bk4rOB_f{3^>q<(e7?`i$RA@%mnav z0Y0D*G_g56zSWxX^R1ik^KdyldWqn@lcSpjfr-c3A8UpmP7GC&U1F`PYmGv zrGyzlpW}wG@#XUsPgFT-mfo_moGM}7!#)RuCQAdlVli7)JY-P!`x#87NE-;ah8JoB z_53jr@g^dsd~UmYxDo)8siJ@-lR__@htA{Ry#%Mv(i1?K#!w40jIR9u528atLek|G zKB1v%X7b2hAQyjphO@iWzJf+h!5IzEboWZWSb=2&A~{vp5a7pDinAu(KRcV0@I# z;Q6ju9}~PnFa&Zp3J8Bc{vjRJ_?e)A-17)ijAe||fKY8n-)qn;#|A2mf^fAK^au8RR3 zMf!;d8}JD$_8QPu6XJ(>8)*xn2U>e~2`U+HnL#_+yvWua^@>ty<3=qopF=l?+jMzQ zrhwod{(B92+$<9>kRx-VG%bhRO9i0}!6J=++1pc`+jK+r3_PpH3yT+>$wNMU871Q! z<8I^5%`TL32qe=P=4SAP|ij`NzKSM5y;8_Z zGg>3>-YqSRKuh)&X@yTb&?vN^;T+(ks*$P>z_$d7A}irK)0UBe&x^sZxesQA{d` zq}W74$LtUI#i(6mJ_U7x#`FuKiaPQ}vTT*-Iv|`OBtWVJQv$KdED}FU?#YPSV~*Id ziQI`_y9uq}s;YF83(4xP{zWC~-2Db_uLVZ+)1gMdi*bAl^*auB(Q*r9nw$t0?+XYw4Ks2q?JUz<=hbbG|zUq_hJ7e>f+$EBfZf5#uA`= zP>oag5%`E~TgW3COS3+M_2%2sRq>moY5h2Z-oY{^3sk4A+@8FA;g7&c8Wuw-%V-1) zlj2B~c(+Nym&`1kkF;ylWE`Q~;WaFT;cip~tq;}3-^{=R^heTnzQp`^{wBlkvGFl? zDIft;mR*Piza#2WWenM; zZ2y3}Tlq7vX}^oL))J`Vkm3OvSX3d=+sw9XJgK&L3o?p!CaO2RKSkE_d=E?>*9gyTtW|ND0az&>>tpK-E8kWd&CaC zt>w+j)AAyN@}0g7llw2kUVma=Q6H(xYuyl&d3?jPdLr$&Xk2}goc{3}!bd0%=hfve zX;6v3&S~`d~fWc5kt3oCz>Mt z+GXMlN&6lvYHlH4MEl2nbsw@;!D|>~t8DJTqL<;$_2C7m{>HIk15b;9l9s8W2>_-v!N1CvCN(yUFSY474T*po0bi#W#KPcb0fu(Rz@KSrclEu0x8qM+PNI+gs~bEW`7+>M&xk`3-PuOL)%W(VGIf_?eWB+1>hH#2`XMBj zQZl@XT{T%P?@XK?*g`8Msa3Z?sVxdB_Q+I%6}P41z+!Ux(c~(uRwjn(xfM8mD;Yu1 zXM;%%tIzSfzR%z7s2-?lCmXD15`v8PS~7I_pco3}lUZ5am`XCEzfp!Nw&6p)m=!1IG1RqY6IX;^V;tmfTKF15}GuoaW|4 z@C=fGN=Dt18l-_T+zXF^$Mh2K!XLVk6N10HI%U4s( z4m{#<90r)R7F9YB`{TNxrY#6&+$x2a*w{M4pH-P?mbc?1@gfhtcZGRNZ?bId$R8s< zr?d^O)jbz8Sv6QC@Z(q`wBHS;`Q(h7q!&o|Mx50F!X&FF_gn5_yd(>}U= zM5*Xvd)olxdlgR)|9hjsoqFHgXuvOX@8rkPmgAe8CxySRhS%a!lLiy>W7l=LmbmEA zcPUpaUG@5gGcxF9vy&ZlRgHg-gk6KF*CKOY9xqEyZdspW=(=5QdXQ2C_ zjGgG6&wP(tLiRI2*=?qqI_4XNX-Ysk6XxDTiAIm($r?_S+w)3tsR!>2+$kJceGoii z$lezM2n6sXmi-TU@+lQ;kr9B2jY;@YAAu55hhCT}#u>EkOt0M50-39jJH z?t@L#ws-Vp`2S6ZXU}uk0RNK`jWH{W(PZER>pza7G{?Be-|;Jev!qcQfWnrLH}GT; zbo*Jzy6_Z1Xy^|LDP&2k3Qx4eF~59d5I^k!^@w^#JzhF3I3? zgpMhIC+JSMw-Zz$WN3dtMfp1!G_AKVAjxkM#w~Uz_f1_I!HzAv)2{mji5gZcv`X306vg?aDOgh$gLKmR-kZZE*QkU+i|(XPRGSjsi8g)$&}d|2twt+97N5 z$ym7NwLQ|`2~LaoI=ljJ;+#pGcdm1b3`{zwe4Ra$JM9RsFr_>-}sVL5wDY6iF7yrMLU(YY)pixZRGR&sS(2 za8I!|l4@!mok?(QqUI0anc?h&OY<3k2#yzePE=Vx@JS#*tA6AzTw7uwXC6&FhZZ^A zUm$WJd~8Xh;;0=MA3P1n+q6~XfL!jIyZ`6YhKLIP{+&act?Qh+qKT{I^I=H-# zv5I^XoYvlQ?ut@QO#+yKcfS-p6w3+OcYM`k+!hzqV&_Fo{yNXVLO-u^+6u-t=A-F% z)odQ@=hv%vI&TlN#nHq=U^m$kow5g(fh4MuG*BkFJC4QIGYqE*J7 zH9}||yEb{_#JkaMM@x9{zu>BqIi<%B4_4kc>-AR>x88t3$v!+(3iTNpSG6K0X$UVD z4w>agzl=P#PBR+w-DG_U5Av?9X$YFPteLp`)?#nFBlbJCOYw;#@`}_5H9BZNxi&}*lGmOL1Z*E z4IuP+Ej%Qtdemd7vt~Lcv3%H-%+s(6G19X8uvH>eRdL3t8?y*itr%fIQ_(w63l{8c z{x&-_I}uqY7aN66-O=$IKJy5oNqP{A%F0d;3!P%@jzr4x^!nWUZ*J3JX2LIn6F%MLN{+mT96VynPaG*o!hmLiHwz6s^W{7Qv0NTf=A zztNUiy7vRak>g>aFJq_jH9-C~xQ-y`2`RTM?hka7#O{q1oeA~pCh8`LXu*gpPo@V%0_ zSvY^&BxdK`{z%+wFzrW{bmukpwM(RR^7e8`cfA=OjHQ|md-0o6A{1w@40KjzS%m9Q zTj52c!cg~`5vcn@_2G)Wy-bC>Psw0I!l!FJ=B40Nq4PzGKJ%PQ>d^z z?1gPVpb(oJme`__Im94jH>JK2{wI=5n%%sjoyR=#GAQlCO*|ut=XFn2~YO`|5yy zMTxxV#4}AiK(_NuN)|r!)kZ?5c%H;yw$oAD#BuSmni?mu0fYDIjWIYuWFNA=cDnS> zLh!#Ox=EaWMB2E zO$!K%M{e--W-=How`<1hFR)=oa#uacrUd!Q3tL2JE&MpNT)=m0LB5PsZ}(X=;~>2Y z(7-R2ZAdDh+jl%)b7fYJaHwo<< zy0=jYnmHNHkWK0<$=7uXBXjdxVtt${wr_OU_pO`nhSz^l)6xWHk4zWw43Buuh8;~o+GywMu?oTGBOvGK9lQa17n=6qM%#|Ri9P} zC!y`?*TCOjUjAN_zi*57yPRz}TdAjszK4iX(`QMvqG#9lV)p}(%Z*T3!Uv_3kI^(t z3I}kDR)uj9l)FZbu0n2KF;PPL-+1O?_1n&gSd>r!NwYXY-ph zW7}|tX6;OF3;xDfej3hi1A#Byll=OE35zmFBrH$j^C zH9v<4e=N{DjO*ji;-u9zeQugb>XtcbKxxO@N1mwZi>GP&+P3INRr{AjjcVg&Q+?h> zw$VhBC!>x0qjGY&A2EMrt`gb@|MwXD+fSX<`<>g=-P%_ZYWplZUA=2Ncac3dJf@nG z^re%0G71&*N<_SwO8?Ere!&Tc-dt?fb3cl0PDcB1+mHxT=6_g#X{2S|L!XqseTn!` zvke)l`721m@v~3EcA!&}K+pZIO4#26ayerM`9tP}V74x%YM<~dL*ykj(o_h-6sDA( z#iGrL&lr9Bk}AkQ4eOC?zCY<%)@cY7WtEYx%CY5xyD3RvB%=22O$H;*GtHGOv*!Ryzb?*hw1u!h7W^u^6g=L}qAc?8 z_^;e@Ef@l*BnL9%Tvsc^#{mopuix_k(PRW^v_QBuRMiEDmNNpPSU4uT2vH`0R0_ax z`g?CM$#W3goQYEGcOuIw+W2>EtF0 z1h&yLdE2t~dXm2~HR7xdF1J#I)usB2oa=>k{4hl*WV)edV^dc$(Wnmo0)~s(WDX0 zPNu0V!RjmRq$>V!Rocsd-@jvk$Mk{;>s{>^W@S&C=DF3ehlYe?5=f9>H|@rYd?40B zAH5#lL=B^o2-C)l(k2R+!92g}pyaC+$n8}3mA#M39to{Ih@+kl(Ni$#|8JY&Nzqe4C!fRe`ad^ zc%Bq|W8aot3`+7DMM^3N zxfay}O1*xwt?|dNtN7F8juj_S8*(CSz7WCO8B%119!>ku|4S^u1Dnd(E_6$R2cb;V{c>wbhlIHgN|mVF#yOb@bE z7CFjpBCN7==g#_Wg;lhj0FsijJ6jgg0sCT`VrvPhK^)4*-)*~2mSDX(yUeF5%Tbn_ zwgJx^I?}6sUf#DUeK$y0vE+5Nfp$8S*KCb(++y58h=x0mAh)$gcil2r58{bztN857 zns`jh(|X8I)7uE#C#H!Ln(=ziF;5H6zXE>n6QMa?^2e$iv<<2Zyts?Vy6{2?y+oJj z{J{Cq)`~MOi!&ZUg6s0R+VM-gC#wGwn;1H&*$@)OpZ@rTk)7yFdQd$!UzO9-aE{_d zcX%<3y`^=4W30OKi>hD7utiW{B>KH#%F?~15^&p}2VM-}$@+AnnYiDMv&PT6pX5Ty z3KY%hJT}v$(@UJCuOg#W~U_L}MjSMSIB8(NhFh zdVuwSft%i|SBz@u;;0S;HoAOq{w~`vmbB&cwByyJg#9E-Tj9yl`IB|yuZwz;X1C#~ zR*|Cq)=ht^*L`X)CguOkfnK=11v*QP%LmvUw8o&Gn!v- zv+5{XSjpBKBMb8=7=3>e-9^$E!@nKfk9om$x<{%n!w(kh?ry~yw%hq@VQ=g!HXlYk zz-NBxc@;4RcnNf$>ShP7SeYbdybG_|9Rh4mX60}B@M*2e2sn`+6-)Qe(SCO;CRW^A z^YPoC!x+i5#iSZ7ou!c5+2&Hi*)2-UEVNA*qZ!Elfj}3tAMjM{IUGlvFVChgZH}Mf zke3DgK#*%#6{@|tD>Y}Btr9d$`-L=}jR(CB40?*_UGTQ>BN*BE(2^>yXjSDExk~@@ zac)7O>2bNC_3x9No_1>L6r*1iHIT(|fgo`GDSbVNcfx$$=lf-SmGG1o7N)5e`z~i*dFY>A57LLo+omYFeG(&O`NNTPefY-Fky~*7t?*n_=`>y!}0xLgE z0n}&ghA7?UJia7&un(@dARY3wMJ9G7g3dIOG|2#=Ui4p|za@08u^}ec!x3G);eQSW z>N%i~pXopx7@b!)L=Yc?|K=~KkZG}?G!DUCKY|LY^-9@c#Ddy*?IR4Ei1xOz8tIYN z2gnL`#{Sy?VJ*CNN4mZjMU*wYmM?-A>DDO+F#_b0g@dh6?WOH?A*Axrx93j_*RXNq zA3Co{{!uYruMs~iA)fV}Ti8gR|5LB{Yhq3_@LPYacwRMfeM2>?A5PQ0ZH2X6%Ys!h z7W+WBpzodm8S>0y@%n>X8}>)TH-lD?dyuZ|3rW=Q(o+@Novm!1-@duwFmtcvP$?zy zY$3P1h9A)_g&u$S^iUs!GJNomjSEtKK7oaG-JIq9!5uJ~C-Bk69Q^=Ulfw^ngEIJO z$Fb)%&E77MbG-Nu*v8%*`@Fw-|M2>Xs8b+|G3UY3_zZ`Jnyoe(d4Vr=yq4NtDU%t8 zNxv#?90XiY)@#xypX`Qy;^J@u|IGy{vTJ%q_S*Jij0ncwcZD#}di#+?;wI)Bsxe&? zrXdhEig3y#2X?q0Op3|qnj|$CzA~CX_49BFC_%b@i1(x}_Beg?rBi)dQjU-<5C&hD z$QdV`)>=15F#=ITgj7iN&}96Ek?;>HraS_hF-}7@!`CNF@hf#CmpeL2J{n6LfKUNb zK6gZ{Fa?L=8wUj%M6xx(B+%K_PNd;IZZV7r&jidcR>h%;6O1_eD}w7$^4b`dtI`D6 z{X>c@PyT_%w-$R{ODAI!kR$eI=2SLdIn0FNXAYHD@qCV>TLsQQ5?kSB3NPaO5F-A{ zH=1RLf7A>-UY+;&&;OB3{_aXX9NiMI@&9%K{?49&)|}x=XobHYcZ%Vv`YII|2eJBp zHt^tU<~De6cF~LavvOFj>kT&F{o@HD_^I9As-UmB$X!8PFZfakWfR3=1vN%Lz8#Bh z45~E;bZzltx=d&;?FG>L9Uq|U8^DK!6R@d%{&WuC7GeyzCf3U+)B#{XK&bvmCq#S^ zhHuHc6jeGT!$Y=iwN6Gdj=!#s1yF_f-~)`=V4Ow(JwR1 zsYfx|9W{U{|NrL6$KKI+x*RX|YdGWD3yFMh!*OW1EyEm1NEXJP^RSAR75T@#&gA5Z z^J^uRwsUH}_~ zq|m^vGU>878elcvsv20bdH?Md`3`u8b6s$8Rh*xLF4(XJDrGW3!)m9fA>QZvgg_|4Hf* zhmy*+c8T$e41F1j@zIt!8EF2#zgYb3As2GcO(j}9({%xLJ@cbW2tV-rb~LXh$J0r8 z#({9ze%=ofk~&w`^2_CeDO3OrJD9N_A_#bhgx+DtG)Eyh_|)luu0$kbzPjKeJOW9M z@oyF)Bq!$AtaRjre~fCZou+<&P zpXFYB1m)p<8-jPlPxn9w0%O6^vl29HI(YsBGNL6!z#*07bhK59YqH>jM;H=-=;1G@ zD6hfZ9?g{6>S9}sG$Cwo6{mV#nh7lay3uKJvOz7VVY_v_OPYx6^lttiE5eheaJ2hnW_U8@ZUSwGoNe~Q!Gd7>MwKs#{Jjyim79Q` zL%kbx~Fc7iSg>8T*6~{BXIDl){i-ge%NeoPpp1 zQwq5nUL})N-?U?0pIMee0vJve$`PDIt;IPCODqTc_UgZnOvd3E#0T-5xd~=6?KLQ~ z&Rk0o)WKQ(2fga(IK*$#=s~Jcv zwiHiC&0|{+P#*(X8;$|!q?8EsP)g>_%$t(N-b>PVU7_Q2A0#}j{Y{?89G)=kCRV#w zQRCEEHy%)R@(EI_F;qo-g89xRF!Wromws8z=v3j5)xuY6jF&>?>5M)%fgt*!zd*D0EUh-(T00=^vf z<1=CIc0<1xX1Z^}n*#I!(tBJan}<6xXI!qxd+fh9>EdVTJinMwTk3+7i6Jv#w3w6z zemh^iAP%8V7RU!5Yh-emQy7h6gyOA`--l}mq+^fx{o;spe!J(NHoNoQEI?ii3zTa>%T2(@U1PMe2zjmTo#MNxCEM^5h*__D&LWq|Il@LnibF znuYZ!;VSh!L0W5~|>)`*2g zc>?cUvFX^v3JIx*s9nKl={^5%chGsg`j_|Pz)J;u8}k;s2TeNDc5*^Ux#Is}>MWz8 zY@l{MK{p7zG$Y-eA}~mIOLup7%}~+|Ez*sMf*>U|gmg-WbP5R4NS*n4TYk+TtUqUH@ONUqc} zhEJ5~*OO+-@uQz(*m*Fkybd#kj}SM7B~-sjCNXf&e84qKjP=)R0C(~oRjEAAijoFkLe07J^)d>`+*wf|c7agJ#|JzB=T0wF$s z(?L^6DyA3RSY_=MtGUd=Jj~|oM_TMUJQUQ|yKU~qxDf?e4JWEvpH=i(aD+NhKJ?H( z_IPyNq2GQ!>CRd<$Bf^Tb7KHiRH-Ic>>@edo(Tok1yVn%Lq7yDy5h4btNg=)8LgbK zzOh^(4#{U&!P-Y!YREPIu$rpw0kT^|!HU)BzdIJRNi<>S{v&OM^8`yY=o zrnf@GD-nJIc$v9rwO3_qfpyF4)LwEA810kM#7tqi zCC*M6-@^WNuzSvG@&2mT&%YjgZC4z9dI$Yfpy;cH(#x`KYQ`r6UyPyj$83Bw1A?X3 zG$*qF%9XGI*G}c7izcJfFT#oaG;ZD$O2bw>rDYZ5<%3&%hkV9m**NI2LqK!}Z)`Kg z-%#%cD+Vb1vsH00$~!FE0k^}b?l?%jX> z{_#lg1{T3?fwdO7A&s_<;MqWblA@Od-q3AGImLdoKX7=z`^9Vp-f~C%#7m@zb_)xz z1)%TUU;6CuYGXfl*H7w0yK&B*g^<#m!>q998~oddqH=b?!M+48jOHTr#gG9vARh!{ z18($@1B@sYKLegH%7-uo2h%0e--^{g-?KIJ?SXnSy z<-H&1G_91dRWth;n7-@Qh27zxV`#LN?E&%_zHtPeCO(9%f$pg9QXU*Oz(IB;W$TNaUw8%jYO{LjS&p!Tt4!ea^Fu zov8k(|KR&thiAm2!aO>*^f+-Y&EabVddBu#$fl$?1F&8azZpVf^m-&usCcv={|)kI z{LC)ARLu*WZOVh>568!+TKAhyGIHq9&pI6sfe{vnO4NVy@HN1}bW|&z@m@r95*wuK zXOCYkgaA(q0a$b`NhTu~<01+4gDUWN(xEdkSP~R@g7@bP&wj&dzva#5tL*)Ea?sTy zRreB&hcu33L`YO?c%uwj*zg}_igxDfA-5=rqqvgXR4-hW*#|iy1s6@(ghtz3w8JWT z%vx!>z}hbJMDSiB{lAdtXyA*hS>5r6qN&Mra#M`>U~&Vd;o#yoYbLSw16eYCZjP|o zOtd8a!cxq*nS)L&H4}`5Bw{D$YC%Bfx(ndv@jeTYR^}13sJSt}J}I4QZ%k9HSHHNB z)|>1q$qh~6I6T1$BK$=Km~TZmhpf`2X?2!v2bh=&`c@MePIbou^?pkOvp-|Y=V#X0 zQ|um!uRvR#cDB8Ke|g&PWNe0Z-30R6)IbA$gKyLJeBs8irWVR^HaOj1IC!8Q3u2FFGvU%ps*o`!#-D)oq(E14+37Jbe|zGZx`M7LzaC|MR}+`UP>H$i@Po_9jGE1i;S?v~6)9sj{=zZtWP@{5M=kRnReBDLI@@Rrvb z?>{wCmh_{&fEIG1Bz~n^ST8@w*Njjbcp~evx^`wG(r3 zJPo8-(f&}yr9&kT$dG@&<@c$uh1CLret??z!SPF;P&R z=6Zak^U_*HY~Y6_KVnQO3_Wh;{OGn(Jol#V_T%uJ^;29qb`Wk;j>$N?>kp_-n*gA^Y$_ zhk3ooAIp)w7-DD^e708+F6Mx({gO|>=m%gJ$&Mapw>3&V&+}_OrKVw9Fa;E1{H!<( zJV|=*>++e{lN7q{jze_6n`BgeV3Dpy{j!c`E!Bh-zXR|72U&=SD80ld7)z$%K@`oy zRLE*D?bk6i)?JJ8BCFydGjU8($89`B1`lI#<`@TbP_un}MuV(R`BZZ`oJ(069g=G7 zL+Y4u1U3KSjl;a`^jM)*`bq_VXl>B)8y1cnvleKRO^byYRWFr)2k*F~`m5Jjis?ts zj9Dw$C?fqM8KVDkoQsc_cNhc0OPjCwIXrec?2EmnM6qEa>eeM@ZMfHy{ z9&hF1CKAaez>Kqhxja?5!(02s>?|iTW%H>LW{A(!dm~JF($RR*_>Zc9E-f7^e>btP zv>`5>TG}Ey7|RFD_MeI0gdaR{z&S+m!Mdv%eNe)HWIhC+YPO2lTTuIC>s3`4l9t01 zif!nphfRY%ima>1u7I?#jf!W+Io?Bb%M%Qx+njWsDV?Ef<-JUN8W4}-qv}F=DmN)* zqizk8U-Ig6jC>4V3*S*KI$!yTp!v?#C>L>p{JRLM(LGu|ukbFuHmG#|H*bAawNLje zD2e}vP~iBQy@z1nr%wGf6}Hczh8DpD&WbKMbJu+fh0CX5CyZy4owDoFw;}bxcf1}? zyA?#QS=)E~utYFF;~Mm&-g!xbk_4c<8yNyFxXenaCils)j}_MY2_3{w_Tvni_m6HN z6T7oBShkL7K2T+W9hklOmN3GHlnK9qx`;s~dip}EUXO&|PRT4&Dhks(Nr<}MCSHZ=_F^B%#lNc2DxN&eykC`)dLwBE=|N#HsssHX z1jQB!je&nZckd(v3T!CMQuX3xy2I?0j(Jud9maLoMzJ=wL%j4+UQ?RhZOr{qb{SrCnk{Qe_7s%U4om?dhG!W<3MXaCq*glDM_}mt}xM1D1GC5TE zNLQ}jjA;XTk)KI1q$AET30uwZ!2=s8d*e`8aUa1dOs6k!v{j(#_?4vJvZ)~I*(6i0 z5t>Hr$zBL1K9$@iXi9}Erhsb|@Zj5{LZ*T zgUtKO6I3Phlol%Y1Y}B&&nvp+;ChUzT627b{elkA@rMPun3y7EK;UJ`(Yq`F`K>YoQnNk$w(2>T8Tr4%W5nJ6 z+eH=y#2Xe%jVRs;&EZ>5P&B!hp~gg{z++b0{g*LiR)lT3G|-+hBLe)OdK$q>DAbs~ z9;^BJ)1%yYmE{j17!^T2W{#frf{cJuIiFmAmY@nDS z2S9tVv0zI|uq&FeZAJ&408^AsP8R`OM zm5elua831jd5}#h3g9IPl_Ht+Dj>964sQy*rv=Wog#=USYOjJY>}axrlZs(^?yLI0 z>s$+)D2?UdF$%dd6~txLO;AePq;vz^{`dqHA&Z^Yhzi*eXiM1dc&%XZmmj{aPU=HO zX$N4z*)JM{@wAkk@I&t~$}zk#hkRstw6hRy)8H=OO(sn+r6T1-m}9XF<$-Z!FIbG+ z@XrN_KfTE`9!^#|K{-gk9iATy&QD;GH?hxu;m88FAHK8VBX*$=OL>)!cb)V z>ubUqSPQzZEnXF%xJVZvgKK#+0{QTD0~|&!;Dja1%I`sm*du5G6j4%w-3|A?j~)=> z4HaZOssU$?iNXqjBgk*DnYQWgW5oVltx0B;rk<-QH9Hmm7F{L9NN_no;}B57r4ZMspr?lHfPPvnxaXG#k2PF4FX5A7+k&z-YJsQvH4qp^v5H!$ zP7A@=6hQb|5(NNBFwC}FMbV4=Y^+S$0vy}f5u!sfAVfwIHLM({hVCW=_9Bn_nrUn~ z0ZWvLPAJl0Nc?c~jxJ_e6C0 zP|$rlVi8VTnpgIucq5CzZs@_WWS(pwMISIjQr5u#j{aNqjzJ4UzE9#;(BJGuN8{w7 zab;m>S+oLJ<=FWuNa;ny;hyEd#4^~@93us4HZ~gkO^HyaF2+V^+4#)oZ`y#1tGB&z zE;Ci1!}nmXv6tcPz9hh9Zp)OGX^{WKwmy(=LArk30FG#AO0!>6FtV2`7hva;z#H$- zg$jGf!9=qV5Xz$*6};9#p++P-@9$se7>*k_L(9eDY<+cRPffes{={pyd+>;x$tNPJ zyVb;G%0M9_$~rZ8%LKIpN!*n4c8T`++q&;5>}L_&pi1r|L&X&9>*cQtponX-of}_MTPm@4#wcA2=rMR zHu?#{6nE?|P$@hmL^$t*&F?(v+ooHUrEcu-D9ur zc1fLz&5VbEcDco9-f|jg=s`x;{Dj_e*SQtb@(qyosj&yqlVD@Pgk4gcOHrdr+YHG; zL@;pFWz3NFOC#P)9!qD~sKB<1wtTKlCED3H<>v)zV8b=GrF{%LL9HdFHX@OW83*sD zCSB{tOa}2W?^4L18vh0b>s4E8aX&~L`FiMO#@0IHf5X~M;bOcV0)%SA!VS>nY86_M z_4cGEv8LwrH!QW1G}@~7>JSae()BL{Li2wY;z$IoxfFpi)u5=T*RrHyGXDi3E~>5H zX#CMedpo6s=J*X3o(yc!&L8|9c@MKgaJE%MFI&wmJ+FfsIi|XHj|q8}$GXS9*nyuw zrCd$>`Iz4MSq897S7CV^eYP6GnBwR!`x7H_%Y92C?wy?z19=lI=*zoYTIo(1jd%Ln-BT{31^}?VV)9zUECR z3ZY*YaY6sIM-OaS+8jr|8SGt)p*wr^NPNmO#k=iIHgrJ4T*a2h6*vZ%WoL{&)@9&D z;fr56Q)0HsD-(bX*z@L$qJTx;UyOUs?*&L2+=?}p)ohIjlOCLc(|7O}4Pc#FG-P_4 z@+3nAkaU-)%C?DZE~BS`qRByFg-qB{KB%D+WM%2F3HUV%g56K`wA-X{`M*?ao#)&)b8bKz%8HIOJn07fHg4T z>vhXu$9>$TpuKhWivqP{*I&EItFv6YcybDE_HlGV{2R1N%YO9klnPCYuktQB1^ z)EM@nOh5`5umNo@mp|l+)fkOpU5Z}Kzgo<6g@38L18J?1&S^w zt45Z3_OQsyyw@EAgefasZbJDtUwy6-Y{1$g;^NrqOejlo;I!TL{B&BP*mtvGtWDzK zvsU~JoxQ{)B6I;$f!<1$TUOVI)3_&%wjabIj6&W^zdzQ@Ye`Crz}dc548+xf?cKzf z|I>=}!B*Fs4&SNu$W-Cu&G`t{NoNM<@3aO`(0vINd-fFW2)X_>o=d>yFS)4If%lW8 zO9;wGg@@)5nV%8F6J^UZKxG+;dd{*otzsyMso)~CkNBEPkM4~}XwbgAuwnn;`IUB2 zJ%&^ZGAO3SqAKATi}M*Nppt~D^r+GuIMCj}*nW)xKD`%A7EV%XOrV9rg_&Sd_bZ8& zL;hL1uL;jPLbHhDED|i@G?BcoyM6s;$m1S=DxS(YU;#Z(MHe?7K{%n$fT6$H56p;c zr!HXmozyxMc-LL*jDAL-`@rsu?gr1a$!v6qp)!#dk`TsqAl-X`LPh}T9SRpo&o^#E4j_FG zrb{3J(CK8hXyXDD0b01QcM5ENaxg`dntDkEKqvz;LI`Mro>IZj(a7h??@uQqlR8BI zd%%9+HTeINk?v(V_Sw(Ww_o`+Xg8jTOG9zkJ_yZWHm8lBH?Pioa)*smK`N*{>I$Sc z7vSA}7i;uy9zSc+$3Ju4w&!NKfrWy!;7GNH+WVf3pDTRpOBX`&TzO7p}s9bMy%vLh`QJC`at8FTcRw&J*ki z27+i093pdIwB$p7tW%#`i7H%n6Ax;P z6eZCioCZO_ahMd&?DUR2%!Wlhc;x+&7O~yzU^RMa?O8L>Yjo;Bz`DmTAzMb57gekc z2*ikMOraSG<%M@RVXiWgzQ*5B)L%0{&j+bo@?nmZ0c$1wwF1&bUc7D zFsz|pL{kY=FBxTDAa+H3pksiux8MVA)wu6`edXrgr_??=$I)&L90dGKm7%DoVU7w` zXg~hqd@Zl9BIE(jCvUTXEuvgeU~-&7jLnc@oYrQ;?wK1$m?pS7dA5XPTG)|D8qfyw zpwxp8-zlIBI4{{3v;bTEcIQ!!M66NV+2{k1|T`=&PBn{;;D%>M#Ut8^W7Nd-A< z3|2OZaI9Cm0%fpZuket4nxrUs*NPYGro(_yzDp5RZTlCZ&!AApuDj~DR_&dJ#Wxz9 z=_tTqmfGZVw)h-nOn?TFQ0IR+shYi{{q0G|ik+xpS{2|Vu0%kQE`wYD-)CvP-pMuG z+kRV|IK;OQNf+oHqOA1iL@O$S_z|iEQ%JiTT0x%({K)i$VA3MlvG&zCjD~;Krb(jo1nIaj9 zVZu7{QvsbKi=P^kKO>AVf3Ris>-_?>YRxa9Z%=#05iPwmXzhNiB>iJ2^g|r6kx=n_ zGW@Ze_k{b06!qzBEpR%@Oxg|Zo0}k38S_kxC16kC#+4=S!|y_T8|n{M&-CGs8TZoI zMQaa-+kPg+=ca9s(*RUL1EokJeQ!OdJfi5#qyFqSa$V`$d*@{19h1b!b#xQeFt$otS(OBg17Jwb` z>zEb2;lHer?qP)egHIyYR8;Wv`pnc%F4l$OnY|fuJHjF+_a?FwCyvxc7BU za}8Ghig99gDRAble!ASR?79tpBD)%TxR;sUq%v)ugKzPl=!R|t9WGG%@o86xlC4m5 z>nEH122IW|$Usb)s$8ES10-JQ{-YtQZ!F4{C~Hre3o{8&E?3j;J-&C8z@8_Ef9sQ= zD&=$idO1h`oQ^2Vur5yJ8neW=TUSTBwCsApj%9Og1WO(PHe~@f7@6A>h`kxXa{d4m zS7jdqHdU)Ac@JNRS>dN>kH1P;S$8+IkZ?a;@>sAF+a=Xs9`-Veg_GR8;Y36s^E;4u zH53h`%qikA#4zplPo`pDR7LiL`WlCdPXaXZ{1o|*MgN$OvIX$~+U#x&JR*Fc{!4Eg z#dt^kAX}1soKSgV3e0TnVshKMlRWd5N#%Dp6(>fvYWDEVTA?Fw6P|N=mIUQrEAn>6IK%+rK9k7z$3NNm33@3{!DFMQ>j&nxq=|@}Y7+P06Tg#YcM0nVos@L6 zbMGi4h+BVky9yJ7TiEZvf^74>D#xu1VMxgdPf*;4A7q$2;==a^vembPZb#kN=eAQ~F^$U8*K^*(g)Qax@}Pz> zaF^cLD|VT?ukGgcMF^~g$8z%uUM3X?@6mRGeVz5(#7ln3Ar~^$G{E5>)uHzJI z6j~gm?hDjxjGd{L%(RbIR9EJnRJVkYP{V%7Iie-F?idMe?)q&Qjl7QfBQpv6=*>1= zN@+MOFkgn&_1Q`@8Wp=gPe?f(wIANnEhUJ%pgV%|P9a&bM}MA5Uad>rkTWfl#H7~A zFkifb?RQq)p;m>b!;rbLfB+h#bl%JZ8`;+VC0p&Ih%NWcsjVfqoXE%?SXX zo7q3V7y(G57;mG>&+m{C^dIg#Z~$ARfG19U5Oj?cfYb3wrJxdUhD2SfhwcU7B#FPyQg|>kOATtTj!-jJ8a6)denPG$2fVoc-GN=&p zDIm;f?AGFca*z*hBMd;x|EbqB7>1kw5DE0QSo_Zo?I`wqaNxBc@@ZvEiPN*_#uhK@ z=~-1z=XyOdG}THRNUAggw7sRi+egwjvIf4O8aR5M>?b$u+WW8W@r^WB$M-YVo}3=( zZHvDQ&=;ddPB)iATBD-_v8mIzczFiF?Z7nV`E#z{w8r4qve_>HW9gV8BxhVxy}&Ib z&VZVZ1{r9t%`xea^a2_Fwt;x@%?nOAD9RPZfz7tx@QXD9`l?|1A%WKU0HXmrd#L#f z=|w^TZvJ@LdhsF5pulfmUO#wpcCrDTjfAliF0SL%>=U!2|0ZMieJq8 zQA+d3ju8V!Fm_~D1w!w+qqZvTeAuBzWr(I7FTCftDj*g9>28~Yz$ia%`B6_R&ug~H zKz_Y9-(L*PxUCJKhn`J1#+m;+lb3y^d};*I{7>;R#g4qXWJmrZ30|ew&kJE4v^`r< z1Fh6)ir;n?K#u}Rk7)ri4grUaI~qY~j93%fg;eqHzsB`ZA<%(ZCZVH6Wz1&XY!dz9 zLC4#aU?Ffg>L3O0tPV@RuLF?-DU0JttKdN_>f(L;&tK+cACE|>SUHaq-Aneuz?#e1n zNt#?;&=Yu7aK&eJ_2W4wnjs7~Q&B+}<3tG{8$4o|>vr*RY%15il8-NA$5FS*#UH_` zf2yBTpN^^PcT9KWb_9m9Hk>^RoQq#U?2%Ryeo)qcCG@f3_r7Pg13C8|0ACZpSWwQF zGZC#QW2v#_dm782Sm$}2TsnNx5&o;+1d4J**ShE<&Pt`5?)2pu+9SyKV=;`AO{pLF z(cVgHGk&<#1-bhak|%YsbhoQKgNyq+cdD{#`_gEX<@UIs2w1x$ ze2$b6U$xQ$AT&p>isZSrd5h^=ZD0x*MKpXYvX_x9ze0Y5kWuUqm7N{P+1-@+oK^T8 zSy-%NSUg`ZMA$t4S8Vmmp-!kaQgJ&qcEoHWIZ$_vV#q(e9IyHUj@Kk|%GO_yc47*^ z@g0#WE;I)J18qTA-CnQPUtjfrB0p>vW@Q|M8}enb^^7PRs?-3w&0mtvn7km)0M&RW zYh-?H6}r-Ja1hyhhdNW43L^)2Epg#1G9{m-(fI-W(b!tkQsVbHvc3Re*K~DgAN&i(m7S$piQh>s$>MBE3Pw%TMS}TnSMH{7VgygCJ zeyVY`Be3l}W=21+Ox|~If2PbkH8~KzyUz#8VN)ORyX>ZamSCo4-DRC`3arM`!QNM0 zcrxbD?2y8W_(D<=cnQ}cO$80O}Mm|f2M&MqiA#fFGD z#G~%0G5BzY#mF)Nw;axSPNiJ@j@lMhp3jVLYWtpKisL^uN{E}zy1GC-#un}7@UQka zR6}O>ci+t>moFUe52RWgC)eF0Xa8%}Ah1>O=g0Im%xvYC;YYh9Tl^Re`{Q=s<#iu4 z8FwPol9W(|S29UIU#-I(g3D zjfE$Ut=!hVbRJ>8X~o>x=>Tnc&ts9?c^(h+xSG~Hoeg`^m-izC8s*@%`Fzlb#Xl18 z$Urzd*?~{$;{ChNtb@Y>n6_=M=GUT*GQb`ewwJE}r{Wrc9&akT8Y<3lLTk2lH6xr! zuHEjJ|JHqm8+4tI{P#TlI?$z~X^jGHa5w!MT)Mq{m=H$Ypy3V@|KwHWDopXEuZBqWG1^eM>cP8*Y@(2CsK~ED?=1 z*zXN0wRC%|m7L^c)7k|W*n4^AVlyVTj%^bTQWTt1jKNJUH739gN`fi&FvZ)m+Oi8} zbS&FQbBH@@CFDV`_xcl{={Ds(BN$1^GlgBANu)eR>P%PHQauk}{pz4!8r9Rbr%~8w zx|hywNTz+%@EZ7T`f-s4k+JeU-20b#9cww86ua-Z=5osdfK1t>Q+=66OGIh;V}m#| zMuEP7J--%TSVCk|UTWbwFk4qYu7*QJ-@zZ;(i!G&!FUi#1az_)f_dr>)$sQ^#U``e*tgiN6MCpA1CI@8?JY@y#bB zFd9tWs$f5m*Ug-wFEM}xpmTy!Z}>V4*XKiQstE}iTbb1K;H z6+ip@>szo1pcLF~;!ngbe@)-?en!0ahehc#Z^$VZs7`&>GdP|KEpx=4&BaB(`feg9s~lTiAdO{L=gn11qNjl@?X_gGx;&gQakW;I*S zFQVh-@h&vtwMboxG6u8dVMk7>BidWhh~=3OmHxvVv8hR!C3M#_0w0RXzX6)`(X-Sa z7j*dpGXwR~x-e(dD|BbvAUV4YcyKip4QnKTY!&#&$HE+xbCh7}b*)K-j z8tt0LvX{otceVv70H_)npfYVuWfTf`XoYE!q?GlgN6Wn?9QE6LF57$GtWI9 zSKAxBAD+Db3WWYP*pH}iN9({}qw*lD|8=yJ3g`V>*M`MaHWW%aHBA)dKD}0sRM{YR zA_s7)dGV>Fv_aFt{Q-SRI{3aHVkjN|%+W0?0Uj&mq!p(lw|Fx!dtFPwN+{%LJu9%%Iot7+rlBuxL5(C*!(pnMM9RcA_;!Q9E2y-A~Fz=mZQK^1zNbbnDXW8DsEo zjl&bJCp~6tqqZM!d~KxTV;M;U{Rwc~`{)FI>@eGy2Q22rO#rBoF(hT=Q}I7J!cc|q zZ>NH9TDG`o7<-I_5PTfei-e>H6<>&-v4F_D5o+A$=)`TFIA`OO#KY0{0_ z?AlJhsJzf>FfCm0E92oYuxgStn}>z2zlol346FDxXo@>Srk0VH8D)QGLV}*HPdQyn zt)zXgIzAVSj_=z9Mjv3t7t(pV3fke?A+@5@Aif3QvoULb+TpY7g^tm@O!v+nukMw= zuY3nna1&jlt{hX&o3m9(Df2(qh^Hn1El{xu#+0stEYk}BdLKZaEZG?#*4M-GZJ2mE z!%Uuwuc?&Kfm zP+zZ=Wnz;OhX^WzF+7~1hJU>BY53SP=A{^AECXiODln#e9~N0xhGC|n%oY{Nm{L3r zjl8tgHFX%RvOO@}tEcJ)uW8ofNR&u%@!L3Q3#esn|pN-<4|TzotlG9NYA#-m%YlD0-g5DGXyF*2)# zD_SO0ZWc8}1IgB^4bX3yu=*}(BSM2&AI_1>!ri9Pbzz$kkMj#s7#E!T7SFTz?>W>y zbI^iLn??U5mufKl_AEvOnTl+Ijoi}|;du--<~Q(*`3cr3uR0E_MT2R~OxvNodtGmG zth5YC|3WS;8@Lp+74evkdlH_u8*qiBiH)BXxZ^0wiW`=CRe9N70!uJ$4mYTOGIIjn zrn8Uyq%n9$Ym6Uvv?D@gKI{LYj6}aY3#um1D{nfu0(2EIE#LR&m`#%@h1yR*uwj=cV*I9_Ry<; z9*zT=r@R##K7UM}a0j0|c3BIaqYgoW&rc7mrjG+$S1>Tnr{kN6638bsA#r6+N`$?i z21={(65Cswz(`_B4?C>E0xq!Ra^aMRzBTIGOUS^&4<1`{8kG4~$8lyZBg!{P8sJ6_ zJGGV0fGEo83a&OCjWw>Wb^)IS2b{dnq9y%lMHLSIVK5?``71ib6k%^&UJ7Hx#m)hv zK$4|L2aVqNN+Sd&29Ea$%enz8fhVL7Ha*%|bz~Fp=+U2eOiSZZ0F`XPc2xQ#m?LR< z4vZ1-=5r96Eq9Z4ipfu~t)uOK2!vY$j#-@@Ohz}W))Agr4%^vFYdk5afnF!nxzY^vWsx!>T!b4r6 z?_}RM$HB%GQ9b|#$Q3@t*o;d*n%RGL_*32T@uRJmf;i=O*OKVL1uxX;rHEJ+r~_4x zY0dc=v?u0KWnWe?TLO)Ml zOgw%|Kuwganb%P#P7Pd!k{SDQTAlOv8HxQ~AY8Iw!UFrJ03M!CA^Awy65&MR=l`xK zk0|U&%QHgCVZ;J@W$n0_5BEJ1G3KGpFdx$KX^!YG+p5_j?8I6gqzZ?CbTx4-gDy1eJcp~v$**y5eVb02L)*P{he(LJpE596=1<0c2(qR+8fTNNW( zq`%&A{xuAE6BOG<*uN{pss%NRCzdynj!BNoV8BAtV|)2gZV7uso&i>%z0B^3&D^lwu&!8mpU?PvZaGY2u_Lnr|A1MIs=UuQ zi@J_+);WREBcmcTH!}|j&cq5%%O~+mj7Ee%Ml_`oFqAkk8vMxIGox_qGy@P|NlpT8muko^>|i`1Ix}d; z=KIP7Q&DFCT-_Yi+>d?`PWgp0SsfW%r3%+fUC0&9z6io0dK4Ocp%A$|3OIw=MZ=`F zxIpB(mcaTwteC0`i%hKKmgwyO&~sN4|m+o9M1&UpvHEU^R8 z*~g}^e=NZ=Wf5%JAJIr>KmNQ=o+3M?haQer3>=D|HA>SHz!rhZt2Q5!%QiJg)#fOaTAUGZLt;3&_OAQVy0WJkxrj31kTFwgW+p z{~V=ZvJqQSr~}Uos$U!s21$`2na+}4dle7qDi>>@D%e$^_oYK9aQO!RsV0!`5d=h5 zfQbIe!=Lwc0b{Qx(4ID<;LidtHy(XqMv+L@T<%6YgJzS_VdFyeG}ZfL{s5y{DqqQ0)PA1%FOWpP^Z>N>GOa}~QvmPE z3kiy&fEs{4AwHbr4Fq0PYB%&cDnjkUqpa4V(c+maXzj5xp!?}hM06E((I2*a@M&fX zlMo>r#@iZ0K-~%{X#4hHfW(s7>aWb7+=ixfzD`uWt5M2X`Hwe+`4k|{cdHigHQ6_s z8j7wz3(CL&4s`-xlYzoevZEakQI1We^#atc&i&BN&9aH|+Ly7&ie%_7%mkVo6Pic1 zoJO}IwvZd+_-4Wc;xG%fYMTEe!V)1KU}?m<9r@Fl`(!)HwCN&cJ93wD%Mpf>JM`$> zcQ8Uoxh-pw?mA3M(QL)^-ShqBZ!$1`pVveqe)Pk*3JUiw@l6QqpT*H(xOmOQJ$O~e zp5z6%sN;D1EGGF7;$Ns;M(mYzFa72C+ zYfFPSO!m`b<&1M_y0fP6e@&H!TyY#tKm^(KDp<@CDs9H_hP=ArI!JY;>bTG7`CjHs zL6-<`+VvFmmJyMIUYmq5orEcTw8O({)C$(B|ALc4PuG^fsGw)4vHZyu^L$4ROc>l9 z!o}xbSi75VW`*;B;Uh-*HQ)vQ8d)Z|3mvRSEtab5?hF+k(D_z$0_C2Qg&Kc(f!>zT zT-FLC((bLTzsRm76aO?ygxE-F`l8`tK?Z~fxd)_!t=F7Ok=40f|4}fb)u!u*OONGB zID`jMzpf2iyyHV(f0}CPzC1aNTFoByCNv!3cneBKS?)Jj98hmg2hyhFa4Gc2BRl!9 z?w{j44bZ$*2%+r|X7hBxztGBXZPWoumK6Hs9GQ9kh1F5Q*ZI^r^cC!FQ(*QlQvaU(KfgPCj^rhR9N!j2GZG=!UwOY)*^gmVN#5#hFla={g1Kh@ zuk#ABVE0A`0&dW9w%T2`7<<@ybNl;U_jPjJlTUT`L*vnJ2`dgkeMw>Z4wKdMKY*t6 zEh)ribM>}zjFGRbaG=EJ$F>$vLdU+b6rGO!MthQvitB zXKPp&LRec?OMtJ9LCaE~Kbbj~HSyhdJ?R>&#-C?10|V82AQ5}1n2Q!<1!~?O@{k+~c-TU|!qlNz`G+)89kEjm^*Jf&9G-yHx_Ilj1^WAGD|VFo&`NEnl$aE8~EIIR$N~i!9PQWSC+!FN`7Z#6Kqa*qSFDV-n?bqhNXbbjQv_W4fFwzm&b_Nf-@xBdwo ziDP`(+x#bPh=){(9>B6gBZUxPg~iS3+=aE?V4+GEQcj@L;(*bWDnhDmF! zf=}0G33G^t$4@KRLvXnw1d4}qGF9Z2IEOmAcx2J=s;TtfudiK9Qgt zq{JR%KnK5xH6Z|1vb8*!cKQOx@ddfno^1vH3u zp6ZhPW4Md{HP@H%{WzOdbaV6HJ5IVam_yc&(H~etu-dZ~87g#2 z^zVy<1eTH)Mj)CU9uwFcO%-OGchWBM)t&(0^5>|eC0YS>-B%b<{Xo9a-p^6|;=+X~ zJ!<}W;Fas9pXKb^!Oq%pjG_7uK?lKIWYv54Zw=dPFvtx};_Cac=vvr-!d$2aSMTW= zHKZ>+hqOPX-#nE&QnO3SL)lFDOh5PNChDQ2N15h4Xrgdl~lHsSC4wZrNhZ z?#+`2Y5gf+Z4>kS6o%c^X9W2n7BEE$9IuY)_5mDxD|vsu$TLC!NM%+6LU_<&jC>F1b_}v90Vue*I6!Gn9E8+WZ8P4${tYPpXq0$f_}SsS z159cG0b~Z+vjYnMQm~DCf;BPi z^ol>LZUL)snK9u{%^VzgU!A_t22;l znOrMgBuI;Nx zuLY0}Y?{#VYA6(doL{M&rGuJ(%eMUZyo3o7HVLx9)|p^aqL_j)l)?x+bpXNCJ_Ov; zgHVI7rk!wxx=pB0Oh^gr2_LY^iD4J6*ks+K7*|{M9Y!-0=v@m+GUCfsoVfa^0SddF zF9Y1$X5CeYD88R%=_{f9({kO5% zo+YgsvE@SR9LQL+Lxosl+67Xs=t)7*b0Ek_f(H>3L-Fd>sHnO)R`eLi!sYxy-Mra3`{%76~jh4$o*#oe4$?~-%qb(Xcn1)M_1`(oTm?11m&z}>8T-q zD2tvu6pxpV>|j&d_@7wq5cOrmZ0-9!;bDxsP{uAn!{bBt&|kE+GMi}EOjM6?MM+; zA>I~tH}h{qj#@jBD&;<3x}I_3_6WWn{0=_K{|?sfOGCUezCBvT%l znDw%eK!dcLcth+)BkCf-8Z*Q+=apH8WeM~H&`5~IS$*i3rX5YqZAwndCw*=}hWTrBoeA9+phF@XnlSnLtb&fbEt&7SWX?|%)+aSTG53*FXCwo6v! z&AlhZz0|YZ7f6)4S-=A~e?dlhMKt++ztb_L;TJj!!3D9VD-X(Q6aKgwjfFrNeS8kg zNA-n?A;u@(kn2AAa%$qxWAcTqRF?Qppw<)|O8Y#Oj~itM9H3(%V$3|#0TIK=IGt+5(rO&jrhmXk4wxfOjbG?H*gjYzOK^I9 ztaha8f2^ zVH?HqT+n?g<)so=2pgK?U;(rG>lk5r{#2+jGE_ETqls6xh}D`J;nom2cbnt<$v40r zt>Sk_6}*}5AwDxv;?uwp+bkuVMja4Eqecm=yp4h>%I|zQ&JwRyh*FO7Cm+u*m)vQE%`{bpRNh@Ma?5W5`NS!E1ft_a;aza85WKx($CAOA?Jm#eHrd-5}<8hU0~-B&iaHbb9Zy zw>^*l`!GyxJh)Z&kUsW_XPD&}HZz#-q*TJAC+7Vsx~?MbC^JVy#?Aptod$oD%AJH{ zPyP!`bI?OU+^Miu2tG_=t^6MMk20N5|43O2?@MOxkHP_WRjYdIgoYraRuQ5;q1RpE zdYQCeQ1W6K(>%$(mS3|wt!J}I zJ8{HTxU@$nd)sVZcaqywx;}7KRpxvhcZa;eMKllL9{}hE9VIUZPHtuz?rKA4nibc+ z+7{ybq()LYSqqQra^McTif}6mCtW`pV;_nEMGkwFz|!65)G5*~q2AeP${asTz^?B% ziIFeTby4<*>~M@5fjqe#y?klIgbQgkz+U*-{Sz(eG_|f$1U#s?M^=@Ft|-o?!6BhmT{qHC|0pQy|A5uB=xf+m7-JpQ! z0q&`9>=dXVwnp8?SWgs-#NvJT=xTV9C<-b*fMD*I1*GPo=^NfCuK?+X=s!vK^Vp{Q zH<$9H_rnUx^RTU4OUOBXyWaGT#6nN|Ld91fEb8wknQlGSCIdgm%2QnJXWfG~BGN`r zfln8QCW~N~B#4Vw>}#cUaSU!GUgN0`iw6maUcsPLu#;hP{S z=r=+X1z?yG9Jn7o=Jyqrjxi<1AajgmdcU=ojZ=~HhX;RGK{+0f3_!ylQtxEH0|Bq} zpl0`1QHcBhiRe78@EkJ%LjUb(a~?-L|0*nh_P{dvLJi(Vm*EYvT-}sGQ9Ny+pPE!& z{mpzt{9*-r)sUmj`rX==IGUmR&jZEfW$I4Kz_T~OiCcGHmJ~n_UH24=*w1XX3txEy z#aG124=jy&Ya6*H8a$I|L_w66?oFyOK;IgRxP@~^(Gl^rQLCnnXWCRkYMH)heBmX8 zM2lKQ3Tsc*@dHRmBU##(dA-8qnI>~PjE2Q_78fhDJXYS81!tjBiztVr(K=ZZeEH*b z)*9aTMD49g{m*H8X(nD=va7jLmy$s8ch5%e%$2Ex^sFAAZ`45aFzf#|7-GljpM+I5 zzcT`f?@i~A;1&$6Aso$#iu5|MF&Kv&Ck`wE1~$|0>Ix0=L91G9j2j?ZF;9TnkUs(j z7pL~C{w#d$pNexVGT;f-(KK?YI3eA%E})Z9%W+5i45Zem5&D|&`gM#=Wu}%O$e}#( zwQc0xOf>IsDc0Pl88=`<-p?$-7XxrgT_;zoRC3yt*cEnt<|@{mA4Lq+%%Q7Zp?a0# zIdsP_=>iY^aUr=op0$Vllp$*ZRr4_wFK9mznT};&SW3GBwUS2e=`MaI@d8h<_f;%y z&!ad(3_x1MwB|KYj4gm9f-coaR4TUD&p&maR}cLd$ymyGs0g$9tu76t@~7$w(**J! zV|pbJ%j}^D{&_;uIk;Kw591Wb8@~AWFI1*YIymfYLtf@dYc5qAK~1IG36mPMgFwPH zWfbj|YiT#szw0El*UR$OWdS^kKnESWpy5@Rlx=3C^@ytgkfmhC&AVnq-k6x)PKbh1 z)!5qsTx+T`ywS8YQKt&tZTsLz^0aUI<(@oH50NI!cc(H%!T6a&1!rl=npsoV23d?X z!~HQ0hjUzZadU;)G5s~Pe6Cn9ut)6Hh=lMXQ$6h}!J6m&!S#(CX}qf6J89&H?-!ed zNK%>+e2Axm6VGz2+YN2Y3!YbAYkqI-%}TU9+Vu$_$kNQTUYFt}(q5i!$_*ZJRewKX z@T;?x3c!rVe#08bPk3Y_r`ZOl=&f)V^1HQ|5=^&fNMzJqV0Y5*r(1Bv*G56L+fTlJ z)_rVQhF_T|I|!nyOX*GR{~++BY(32}9V$J@#B@n)zijd^>5rpN0!peOUOA~vBLHa* zLQnPqNb}k$ApBfDs0rpDIMT59rh25>-8j)!b9ak5>_C?B;ZOW?se9sXtFXYUh%THm z#hN?*OY@DA6@Yhc8&@+c-^Q-Y}9S%P5nz;x)FM70)CbLFEA`bV$t0=#SsqXKa zy_+z@%8mDQE8<4!d##1}kZaHg{-Ko{4+#8T)GB#Yj~x24Ll1ug>;1Z%9V(5X?~^aF z5-`UurKL?2t{sT3;$?9sX(MEoW}6=ds&7#8AX^#}C5OoL+`WQL{X{)Fwi3sPKo=pV zG(Hi%7x()QzoZFGluV z74?-CnK^3RxTU##SF^6Zgo_hgvoFtfZf*6*5pe9yd-!o}D`I`=S%;U6432?1J(DPj z5O9VyGzU|j)1?WpnX&hLmBjj9i#4)7k+CRfcB17={hH&v-`wO&LueO$Pc=?lqT=xJwovo3C28Hyq z?YqjyE$QUUsS>N*_G=$My;#IwvTUMpARY3Hr%q?CL8aFx;BJPA*wBGtO7ywH6F>EL)-M%P`sho%+kr#6Dc-_qaPbtqG7B)S=t^0N*QTC4&V*3%^;$>#$Kj7y%WiE-#9 zG|dr@rn7D_PTL=rBtkb+_hzqh(MBry?4)eVH1AQgj4PV?cAT> zmwss?z=|bCwh$BF319l*qH3XlyJzXU=Uyqxcbkd=OCbkT#?3UooLhpRA&Fj13avVi zv|JS6gcgQ4+rsN*$rTLWflGRNV87qqpd@8`BaN1fDUTfdp|UA4WU1FgLi;2kSPVLr zE@x?7Q|4QgjLcIrw*5O&I&+Rgq(<%1768_4s!O3I8{bOGUmI7(pRG05dDjs9B)uK4 z{fbxcF2r+@woG!SGI{CbQq6BRgt5s4kT0EL8A2RLhL%uC;Kj&&aBXJ>N zz5iw$lN3;HM3%d`iL=7S@+`CzJ*8qLAZ`>Z$PX?8Hv;YoEhwsbA2Nq({PCpsg_MM!<=YU1-Qe*q=2Qx0W98tUvg$8;Mv@w1jz?%0zgCGUqSpZ;4;_fpKVD;lhq3QYL|0H#3|6gi% zpYTl^9;=RPdS4rpu2hf`%pC!g<#Z%iP?rU)8kfLjHy(H3jM*i~BS|!MsH4yixqrVO z#Vh3AiEaN3L7 zep!=>Cp9=)l_6_8SSp!q{03CM(%^z@`${=1#banD(0)C#xRPI)C5HS{vY8c>blv#d z$*HJhNJtaQO1q- z0A7m1MtfrXRN%4SGUXAQNCNfVl7wQW2&|QUNb~``&t+=L?D%sFXlGU{<>axCN^hMBv|6}%SQIKwYoy&wl zj85q3wck8QN1hIB@3xR=WqzP;%u%K|v2>UGyX&UanHXnMo~=PpFJmK5RKzbz&(_+E z*T7bK8p%_sC8>_}IP{0KS*!odU|&f-4<%rA%P{duc4|mS75U=yy-|xx!WpSKpb&Yw zbnyjN*{w(I@~Z|oPgODXZyZF!)?W1jwzA|py_5pha%%lVhQzNv|1MPNr1v%NEArS_ zx7udvPT{4(^>=TjAh9m-Wo$v4?55*#cPLnd)3y0Qod*YE1AF4S{#hX1O4OmVJMK(h z!G(bynQZa4?R!~*x$$w<_@Hvq;ue>|*B)LfHtOx!t+)g9@CkePYibd;5we&Q_B>z-L$)JeJELp{n?JL%NYMVcvcHH zC?Ak6k8aVz2}WbzZ6FkPrqUUDu(KWZuD(p@vOq;=m#?U>j;JVK|L-k;>88);^u(5m z6>pP%e9OgttOf)gJ~Vtq)wq5IAJni@CTbT=MpGa-S^CI&<@T4-FUPl?_wsJ*I&*_9 z&15g_gX(O_TSiRLx4@?eyu|_9n&_S+tF-4}B^3ucAr8(ZhTkR<=w8)` z1DCnC(VAY>ul>+&<@&_-^(>&9v3a_-qD|#Up80@fBJR=5!H{4%d2T`zYz7cJ8e>3?r;%@ zAJ;0tzb?zmG{2(Ld8^+el7WLaYPSfidm;MK{q9#Oyar_ZeplL!`Zon;NWqeRru*9n zo-tpStW?5Yg>92kJhzkYf}dZ~lO-#^zAde|HH}^Sz$=rL94dF|N2h@v%{_lj*>0XK zsGTeIO4p+6BjKEd^M3nsZx*Dpi~_dWY$B^#|4tS7SrwjgxIfPpJd4o66TAR8ka%t& z0&-wHPxcpI8Xctcl0zIK8L-Q!BA0j;uXgvDzU|$IA)`KDSN{Ts)`9o?2WF+MJBb4J zMYf9kc7*2-TVDIKBk;UNcTv!m*`nyvoM?K5>DTkzA;-|9a#=MwQBD2XmB4_Rd4H0 zx)JnIct!k_V2G?XODoh{6k{=UT*SA$G%^cJlHc(oCW}y7Y!(t-EoL-$ZEL34gMREnW4>+@gw3r`NhP zdshPw#}9i~;L8t(7%$rE-HTuA;XmS2E)@S+`L54m;;;Y_;4`++o?X~G_H~psqoJ(B zy3N8nO2?std3C%CJKJcaOCMhj+b}e|3euxpY!05CSkUaV2tQJ?=b z0Yr0Uw3)P^LNj(0%5NijR86ZF?OpHtxP#Zx^ncP_%YXz6)BQk^=`s z#N*=c(sY$vaON|a=Y=-vYgypql*J4$qoQc(%|&JyBQRj0pb6COwH^^yLU!QpfN2#J z+(Hm{&H{&PSqMqCh?ryEEd=Y61-!h{ z+zyn~Tz1KWP$E32QxatDz!Ylm`y;ub8EtXdJIFS@*|&Xu)gsVZH11PRYm5oj!i`6A zHwhQ{B9ip|A8)?SbF(L?n>mFa!4B`p?0C}wOxICU7fM}rZo9Ktn7xYMMpLMKII;YB zPD;2ObqQg&_eNH?^a%Bp)as@n4|vn~59&C&>=b-B#I3vC*$dG~#81x?h26G++KQ0rsfd(r1fQkZtz|lAm z2@YSO2`~(In}GTLh6Q*FrbBo z_)GZrIwzcl_w>)eZ)k1V8e&0AC~d$0E4qDUrlOn`1evvlV(QmjJR8taz?+pot4)VBjHg4j_oX3jl#*>1 zJ83l9s_4IiGe8cvk*u_3r}3Z+y%E4qo$+XbByJYgQGvW2I;S^9PMFODL=Ql0F(j(N zO#3ctk$^H@n;a67LHp}q@^cqG?dY^(cB5lJc}p@xvL7*b#QyCu;JqURAAA+W{K!IS zpccz7$(JT>l(>UfWt$a0Z>}=S^ZZnmAk6IF8;AwPBxH50KBF6A(r<#q7V%qzfV#1Z z%79EGzdSrsH2u3@VK%NMro+G@SiCglHn&0Rw!k|ja4v;kEWkEEQQ6y&)J0_1)|)98 zj&IhWy{ueh>I*z4bsNWP__nGH3B(S_iVX50!d)NLrEE`*JRLU0hs`wR#8!zxC)*rY zdn>hsIG`Uk*r`zV{&U>F{1l=HNOzV;-{DAUr4k}kMW|4owO{#yn2020p^(?*g=c(d zwwRQ$I}P0X=K7o8g#wZF<2E#1t^Kh$3bMDq6pt>36{P?JIfSdl*m-AOHvw?#G8Zhqn2@HG3f!dO zS_cGKa18$xOzsC-wLA3*p>h7#U)4QZhypn-XrWf?46l$FWsHU#mq^ z1+pU*6sc;4%zZu;CSp!DXQDyBmf_9T@8%Jji=))&-hmDJ_g~IHLcH3JT*%*@b&$aY z`(f99HClt7SIO-_1<2@!0=zjU=|UQh0=`f>z<>s}Vpvb8>5}8VoCz(2EwTc0{gh&e z?j3U^91`Z=*+a4s=rk7E)uvD)Hw*Hx8k^%l`)M9HZyd?m44e@*E?P*%bkujmL>F5G~C3!lkDw^&#?S%kKKchd!0J z4M^L>fW@_t>A*<;XkR&yPgx_Jky?cHyVkP`pb}Fti#O!5=icZ6I2Pb~WXAV(87305i+tvn3=#j;ZGIK=# z%40T~Md*;HHbIxUeF)p#*~}=jN)&GlQ=3|u{Sus8!unoJF4EO~Y>wgBNSE5rgX#x| zo!}Yc`5{u<2u+XV0W-7PGF17osd<~hv9)<@nXlfS>-});Z@d5XR8EiuoBeN4^&5x$ z)sKu#^uwh*bgVE<;&)&*U1Mu8v`Dn~O))t|RiGs1A1(#tZFZAAnEYZAQHmm|7&0xA zcif#5KBxQ2a-pOjxb8YM$j6Z!;F~WdEF#umk}A{WJQCu4forl zb~hE;YoypxiVCV|d12?p38m2cuR*f0^`W(j0zPZFAzDc_ER3h%m(Ss48^oQ@<=y9N zS}x2QBktg~mAf!B)S)fZq{1I$6@aTz1G@kh~@8U7;l-wYPO6=zj_vUYlNS&E|o|`pc zRBU6VxF%MiV`E_>bPwhtzjdOW;=x3x-@$}N*c(iMlpjs4=?zv%+Jzq$k6R1y7Z+a? z9DK%6z4)-34cpSc>q!75b#q}Ko1aLgrw)Um+$vn1W zea4g>%Am&gxKg&pu5es?XQ*mJ&Y`cRgi+NnHpc2Bvxc8;Q0eXo0}SEzG1G74i&yCH z$hQ=wjVY`K+TaXmzFMAt=6$k!T3fJ!PE4grs~baGbAA5v@<+|z`Qb^!9M=f54jq|S z-VJZCH3~JoLuP@8b(+kY&tj_Qsv*W7Blj}DH!`s6=Uacj&XVo)k_1@WXD7naId>47 z)~(@c1wUX(F-hR?WIzVZ^lZnhRKIxdTe;bgDzEh6$e_6P^H6-$ZFdVI2x!sD@=Vy2K`L3@t)~{X=h_zc~RK*jibU^ zNgaB!szkxy(z%TAR0bWvX@~xo^x}yl4&Y@E|KU&}&@y!mp>#o^VfZ>=%LK|K{qwFEpQ3)9KIT>SyX9QT| z!;k-6nE(zICO|j;bJy3W{QuaEh=b!2Q)8eFOnzN%wZh|X;V-6p!lA{;S=!Q6m3Tl3 zJ4+`zTth)Kr#`ZhRs1G8Nr!)&W z;@XsKgEKxJKqOgSJj3N5VWYO~+WHFDTD9dNZK3BjB!9HQ=r(L=r*%v2>P=KbXyv^> z=_>b=a~1fJ2i!g)HzbSaB8 zOR-{br>Y{@O3Pcyco1c8v7!1|jB1G3Edoq9Z~9#ycO%cbB{GNO1#hF~hFDaSNS2riusU@hQmXUl?lIw9@9D66%{Z>jQw${!Vv^pQ^K zK2b#yFX|F!dvlhkvX)oHKwN}n2~TOs*c{pB@aaBrv3ulvdOiF)WUTiiJ_jSuCtFuM zHb~`b;U@%X9E%gUAn- zM8+{lT0*r!T_6Uuv>r5ctY3W|NF67sUFY-k#bo4pS7OpM*vnb{10hscY_?Rg@|zivzJE7+_I7$whD&dY~B4LEZXM3v7v&R@VgXO9*h% zi578M(_AB=r_CccD~gVjG)iCtyKEHLFfxgU7V4fkME#C1^>O`XimI4gUrJe;a@ ziUa<3Er>`_TlrH~b(WY;#>m+bWwouozxAIBWChIWK+^^1aZPthC-r|s`-`XpmyiKi zi=vv|5_1LUjPY;P0;^c`hzz_fcMxu(KE&0Z*04VF{KRexTypoxJUj0N=(&HgY+I6d zUYV1TJAcV`?mtrhh1FPWQdHIZv7sBPUV?p38mA?uNT0)EPzyR9*g-`3ikqm)^ax9c zQ$`XuX@t{~Bx#sBXyHtn*kMzE>H4+wRB$b}sl|Lzbm=i+ne*-4fk)0DSzUqb(>92l z{S3VLyAIs?h2T1h3cP(d>=~&24rc?wj^X6kf3U+#RD}>~^?-_BKb)u8R300siwh&Q zmkKv1Q)bcp-R@R! zl0GR>gH_*1B}f}=OB+-NGf9Jo>7J4lwjJ&aipOSIHJS9X$-tZQMCM5$mvRgWyJv?R z36=qee>(k{R$>lj5;zPN3@l7u5!ff%Q+yKJv+isPcP6^sd49WNetsAFYSZY)uzBm3 zw9~ZpD>I*uooy?em@U&C43y$zi}hR-#e?}u(jZsID^j(cjRW8@M0k^y5YrB%5kTAi zxxyZ|e@|zNkY$7G`Q?D{PixZ>CMk#Tp7yP_t*MV|I;gZVAkNI7$$SO4$aDdEbtVya4c4NBmMhjW+xCR`pZhKQXo^@NS^;qcuyc zL!v)hv^&2u%3+VtA}O>xV^k`D%knJ411aK@u$(Yi#GEqhLb1fN6C#6Z|Ql3U?pxm4NF;s8H z5C<|j_o4U0i77Yf3t>~3qM9}z<8V~TLCc}1<(x9ZZ zk7PBu-Ayp2dLX|gxL16T4Ld%IdGh*n9ucw0eg#H8PiJbcT1U}3!es%2iLy?Sjj8g0 zokyZy+x9LVh&I?()8q?)8!htRVzC0pws3)K;3MZtS~6JgP2TUmx?2)lz@e7y-A7`; zq1+bW$WRJ|?r@3fma6^pc8F9GAj=~K2pd=f=m+yh5Xf>&V%6M6(AX6AV5Zwu^?ZOl zKsJG#6j1OM@M;dP2rwjy1xEqV!RUu|J-}M+1_|ZE+QUVYXX|+D;<ducPs!PP0gpja~*e411E zkFa$K0SvUPgpKOVBYJ3lnsR!{I{f~e@YlI(;ND%)CSpJHM_YbTNB27yYk8f7M(MG~ z07;ExMGT?59_=11(O__{4eZ`LT_G4!2~YA>RR(fo{f%+LJm{=++0)s@6cbLm7nDF@=iLw0PbH zVBf_PQ8FgVs;Y+JhO9Pa@f)}S`<9A^%R(%T(D`j{Ocg{ZfiOaM8{i1ZTb+a(2z`BA zglcdpXrcDn*`pZLqRY2>KQyHzh&E!gfhDnO`S^T@$gGRcr!UeV$(r6c7aB5@X$ASJ zuPu84T&>Rmc;`NkOy$|(xK?gELeNib$}3!;z>Hn7IEJ- zdrT8`F zQM{x#PykGcz&SOf1TG|sF zCuqob*ZZk~Zp%_~Xx{^lNM;f}n9B?Yq^Y`T*S;mJy2pRSWZeyf@Mdy6uG zQH7||wXPqz(#cQ2$|1?Ib+=d_&y=$eNG^{AV9Cf9KF@*m3`a6dpQ#! zEqie^`GxD^wcj|`p`ur4vNf$kp@$=%WNkjtK?pJ`Nf_I24t{%c9>%djjgb$Z`;m^z zdcp|$>FJ6lHM9si6y<|?C?qt+G4f!h6^I)9u%(PXha|tfyv4J}vlhUM=%0t^4q|}H zW8N34Dm{ZQ_s$S!g@!jTO|y55zjGcUK^+smoUjQx7-?yWI_zEccx7)-4MZ5rO+bH^ zd?`&Gh85_QoqCr9zS%oj`@@|E4V6^Fr`_aF3o0z+nCLk7m-=!U`m~7YyHfZ7{?fh* zH{W!)-%b^jiMzNg=L<|rZwSM(nJxk-hpRWGD?c2quXkM+sED@T3X3L3y`uY(jc35jcijj zi%?Z7AWnymd04WT*|p}Zl`DyqR2*4GxO-<44F{m{;2C-~xQMUs zp)&15ltZ~5FBn~Xs7WDS!*)j8ioW<&pFZ-v$^PG4fW8x4Mzz}+QHMguXzCP}^fD@7 zCoL;UgU;S?Twe>JOr||Q5lys5Ol8Nrk-`@c) zo%Foa=5H%qgnuZE6faxg<$+zXUYaCyJ8^FOJHITDp4^ zos{PR^`dLn>!962a8RFL>uZu>)7|Ha672+Nev#kCa=qaxJTJ zvEjF|y~Q)ma=Z;*VSfz+^}0sGhz8yt!QJnLq->?mT9pV(R7OU^xDRu&*|ixZ5xi$- z1?lq*ldb4Awa@l1XLGo)UzOZd+um&0t}uW*u>GQ0Ki|Ctspd3XC^QBp>(l1_Xg?<9 z7}*X_NX6k?NU2X7;j{8zd$+tT{ej72B8nmCL2Z0kAc5~<@9qhYjOb-2N!F-~m>I>( z$Jo5=`9X8$2#|3=Wb?2m8-0c6^RqA^%AWhg2W+NDzx|oP96l7^no9Yl<=?=U6!X-wJ0m@Y;-%S~^BJaAL6>ccC?kJII z=d7tC1{ghL} z)IXAv7}5Zq*F21&mC7e*Lw=T=TZ!TOMnAE{-LM$3M^b9Kf)8iL{?a{~d7gbMcz8#? z@kCBw;|tpRr0b3d+Qz}srf4=oWC@xOdE5CeEy;&a6889oi`a-(K!i9Jzq6qG^ib3t zDr~|ZkJg!J9c9xhLXyosriLc#>}TK{vjNjH$TTz_O8dxjyPH35mJdZBJe zSzW@scI>&RQ9DY@ts1*+K71n&TZ(u7Hmc!hl4h^|K{xwk`>S`KHA#kP#*a@Oq#=F3 z$G5%VH+@}|UmhshT`y#cClUTO6)WmNHe80a4>zdLTk$p?@V;@G~~RiH>cB#HJw8eqF zqloXYd4&tllLln_)M^w^YGD~*;OGB_O0i?UH~{zS6fkV{8JG)Rc}`CXsNkUhUINJg zlfAE3t{)<>E+5*3{_j{xQZY^ra9Z}r^=#Td?CLN%0->d;CJ54L!W7w2>VpR1DThbu zsGCeg#wW;rSJ*NoV(pi}(YIsu<4{->W9Bk)fpP8fcV+R8$BzfPH6joHAgP zNf5ZB+yG%Sa-5y2;z!xv+?av+jE-0f{Q^x`uN~&hc#P|aii?zo;Bi7JaNsdNmX(33 zEsgVE0QPnjb zdHnK@2}*PO<6i1W<~F2{LF7cC{obK1AWL$!88z_SNE}$9x z(Z57^b2F1lM;UAJXdHXNh61v5dMo3ZBM<996QZT4ZOQO=p00*3w+ zaej|l&iP8H-{HftLy+C;C3BxU5r0#uN9M{|*eEwZqiW6yc143y<3xANbdZEs7;&$y zc+pdT{dzF^yYt}*{8Tgs+#?`mdN0G!ffbFb4Q%&@Z(!ucg;2oX(x9HLr@)IVB_jhR z|9>BlQd%TJaZg8bA`Y&X+$Ww9(fYe-#c(ECBh5047U#)sv{U>Pg+1W)>Vx>nkF6CE zzqozWpV-f6qjk_vgVxIOu#BwJ$b^*T^U6acXK1&-ISx#?OJS6CxtPh8OPR`NA=!B> zc|J|X%tGHVhT2$B^Z}ka!fPO92Uj0z&Qry-8~e0aYrJphKMP)hmphVC!Pf$ za54REN(1{LG2FEg40tPi_7w|-jr~ufEW^x}-(inL$Q4-afAf2*zJc(iuWNWF zuzZ>_rR}PL_yqoy0L}n`MS}etVTW#Nf zQyySb5hpF6vaR&ZoWrU*(pSsty@>zJb?j)MEoETX&^qQ8!RkY(YpVYY;RK#@hClZ9 zOX)nXY`XV!Iq{z>N&0;K&MYObKYx@`e-ORJoF(DB4gxXel}|9B*Ur_QjnEkIok|@s zI-?~+DvGKa;+{7w@1>ry((x_3J5T-zF=ogW=BCtK3hmVSyX-J|#XwC^6#az~0(M9j zYEf6HP+^Z-c*%iFS&E-f%X4IBJlch2L9{{vKOTVDQfU(2UNdaUZ4QA!6^Fh{t z6U@ouSt#MI9YZtf95aS0c%wkIDyEszkzNimh!3)d%VbccsLoq)o67?0=RhGB=y-^=h`PoKOX`Y%xIQ zuqion_C4>|@2?odds{z8nwSKj!6=dTJ?tvI4g<(edp%}=qB#hZ2nDxn-7{k6Jx-n& z&`E|UP#{VSEo^JSI!pp6Sd#M;ml*{zG|~f%u-2jz_UQ8|y$qny3TIG&tq1Kt0q~@t zc+sAe@81&wXMm{nn3zF7S%S!$0zSxAImIN%E)=N0&p{@E7RD`#L7gVTgro~4Vi~DM z0wO>QnCl4?O6RNd>q8z<1lcZcGX`|Y1-lddcKjIwm|SVHBj0DAzs=6B10@5vl-&rr z>@{ZRSFqjRz#c+ryGpnV2#VSwr2=)8#Sn}$3gqR0>;c+j2gkr2 zb%xw=kZP%x8kjli9ho@-D^n}4tgMHB@!Lm!=WyeOJei)-_lIuH%v8Z8OX1$9Wkd!%LKfAzy=nmvQm&gM}0`u%($Kgw`cJ$GGP88@ig5D*L+B&Wn ztf_-&A0wj1D1h7-?T16Onv+dF=oh8g%i}W$t zWgkkY?z1Z&dglGXKA}k1A_-!03V;#r00q*e@H6k3zb`OC7f3e;_B-Pi*_dnNRG8U;W)L{Mi0a!RE%zt)G1ap{mems0cH|Go$_#IH#Ob z?nz*jKIyT${)jSBA#3ASpM`}KXq8ShqU{z?#E!utXDcG7aY-BM7^aIC$a(y5mP-cy2lVy^iW`G3sfpBRijaz*o z5;%lO7M>+B*wF{RAa%Gvm9x#}ovd_&bl5m`)_P=tf;l?8A-92Q=b}Zq>C>LE{p=l^ zziUX?e9=lT@Q}lD73gM|0gyNR&Hh$M4X2K!&cTOEv&XYNAiMoxKMr(CHC;fFCY?`Y zBWHmu^C$wfRM7)0F`8eLC7eeIJ==k1-lhgfF^>sgf(VPzn2lS&+tiZ>`dMs*rarWW zu%0u(GFGvWa`fMnMYcea37|m8)~y+C04daQtDh*Hz_9HPi@M%&Zae?hIRO5ogo(qC z?wmQs{9jh|FLtz`7*e_Q*pV{h0s9gQ;~lHq2CJqb@UcgekS}+V}Aja ze-J9n`3$%%ZXx^_XyBqV7kHN;8iAAy@q3g3{4}Gq@T^t8z6KWl&nWv#0KY~Bd{@5y z-0#cE{{Zm+ulBPl|CIocl}U2|m=uiwNE>0KOaM^Ff+-W~JVyYaK$a2UX~_W~$9GWR ze*!3)1Hd#-M1@ratCN--0E`GwjsVEmdJ?b}oYa4qx(r9}++H^5!{bVQ#dlF1`RL${lG17CWs@3(#TN z!BGmPJgjFBwRTr)v9q+J#Yq>KqMI-<&o*=sj&TQAVSq(F8O=5)Of@iO7Nd7gds%~)C*p_`cK`|&| zii$U=2f{40LY!{VZ9`pBW(PBCR_Hu|sEdL}E%1OCS&*YF#RIyCS(d6#C*a}Ae(eu31hlAyrJSVN3U}2dRir@$ zvIBko8-Sbi5dk{rAZN!J0ROf2ck`aPu7jdh`kh=LhdQZ5fIfQV76{@?JA}?wTnk-+ zp0|5)-@FHZ)$&(ohWfzY@4w^k0&nYdWO@@!w@(jFM__u{^rGp-;BEIdPwxfqsCQs` z6L`11tJ7P-yX-?=S zbJ0KMcY?%xtnhsuwMZSeev&Xp0^bVd9vx@_b3Wiw zW8=qlT%beV;Q=_8xXN{?*y`?gUx&=Vhw%@0!Ka27-(J)T2S5MCZyfv)*p~cX;@heq z+BzpXXB-M$g@z{`P|+6Z4YdMknivJ9xW{cE!U}Rgty%n<63swAsS=3BgE;0#RmGcU?%5f%v8&=h)+ zXCg)d0tcm@@cmio0-je78ko)Y^H*4OqNMiX^azT4JcRzZTd-6oF%;QIe#7!&3YHdaCh(c{T%Q zY+ih*=PU16_WC^=Er!gIpi!T9xnai>wa;5@#H=R!{e;~Y*T$C|!xll*BRUT)rxqP| z046yj@7Vp>3#8_@GN51@dpIuq5G90CH!`1@5sf?gA>O@j9XK#Ge}FS4v9P6^fC-DZP?9ZpcutLd)|h?I3H!z-`<@gU#ia9hH+hgN>OeqB)bVAMltr9` zO7{9U>~jMpwrk((mtWY8uQ|E!~LoNLu;d73FjHq`b zgw8iQzC;O#z%d|#C-;EcRB;u!BiC(x_zqd1Xc0fbdf5-wl_;4gPmwFYLmto#a#NOY z3S@^=u^nVF8zchaNlsjlCTa9{fxk$W`w5s?J#*J@hnbZ#Lo=_#%*4#p%s9-PnK?ew z4Bo1lC0-ajyn=TSyqjL5Hw4q6>0$36OmFg*d3(Uy@9p+h!t~(!mv|L^TxpoPY-$vVP>nBpQ#0J;mmw5 z3NzW6&`bgR{r(>RAovshh(8XpMYhOp@Za*6$TF%&HO|qQjz#jJV4$#0=8c;>; zI2tXY&QaIdi4r-UB^VU#9@XglC3!SfqtW)SX~I+iQHu-;sWP|(&M&ZMu7wbLP$g~x zo!^!4nWYFc;~U^yc0kkh(Uk4KuayV@!3d;es(`3gMGZ>0%mJ-jP$hT?kS#|#+_JON zbJJ+E)vUq;Mk(0-*0sn8pF5}nS_&AT3l~V+ybvmlh}r_@u%c5%6u3czB+yNjJ)h-O znh%T_Vf_MqG676c#Z4ejo=IRm>)8Mm9d4J~4uwU9bYTf3nqI#7@@4pyAK&-xulynW z^WXmGFYNdfyfpCA$V*KitNc~|QgG|sI(G#ckuh#hcouc82mz~XSCBO#-z2Au=om2} zLgcwfy+;Iu{pVZE0P069kr9xitl%`@GGW&}Z0B6Gexi{}Ij+e~peX&Eq)go3XaIbY zkfZ&eD0;us<`AL%B$z+@ZQV0v=M^SKA5iO@WDK3}e2^YH@;kaeB3#;+r!|9K9t9o+ zP68~~9HV*BtF2cQ%?Th&BU3<;VMmWoodB*`-60qc3#fO| zi0o$qB?wia#Cknn?K{EwW+_sIMq22)KI0@P&+2#VdUp|ZbUoB1-5?{<#2KKUEb~Ez z<%TrE)Yhp@Q&-^qnyLHmF9C1w%-)$zAX)#UYzC>5UO5hOKx$`g4IHMMrNEn9 zrxge@!649X>x4Rd?gH}(GXm6dnOi`Neg=ScS^%B5bcMK_9^ioqVTv@O4i%&919IFn zC!hg_fe?F*U^_t#P+$RZ)Om9`FlI!wKDw9!XVB?(ZlO_1iy?V9dG?i`hQzPEoSO4F zko$67UIp5vO}+xWFXMa-cuaM| ztpBr21`Yu710n!E<^YfhA^?;CAX)wjbzB`m_e~Z7z&PdlZBg>22!Kg60zjXcr%VAe zJS{l@d^`#uj}ies?f~!<#FrWQI1%942!M|(|AFs$4gUWJLI1OqfY~EsW zZL@8*{r}ZIZm|?tJmoD*E34L2Ofbw>QH$oUQ_hll&n&dk<^=GOEm*%JgEZ*h%bx(l z{HdG-eoMB?K1lrQMAMv~f>%FCu1ahG`G7d{!Fi8=OC4~}Hcp+kVOxM&2-Xpz2H4CJ zHUlolI1aqcMq)sMNj9ODw#xwZ5P${jU<0tmfS+~r(hMBt0`gW$n?Y0royhmPGAq`*2N)^s7zj;SpGizhSEG1(E_5nUd82YX)s=>l3i( ztK>4OC<+4)4M@0cipwgJk_OV!$TlF&O=l5Wj>rP14Jhp)u*#pL08GkdT7ftVnE=N0 z2xQQXKWt3|(g=i1!4@dh1FJ%p5k`S5tz19> z3$y&Rex_}#1ibsEXzDXX^SA+GVFOaigcSP>*^62#528vV7woCUSxKOzS3=1Y4V(jf zhK(U#MG~B5yKeQS*esaxaf;KN2g1ykHoNjcG1Mb4c!l|@^pJMO$OCD6nnJi-16<2G zF4$k+H7ocb9-@j4RW=nV6{Q@t+*J)o#-b)-CCZ3r_g@Q|AwteFw2+wqX*Y#?nqDi+ zN3Fm5Y}G3$4|q27vx_1yYye+it?J^E2gylBhM*!_QK(462Ma%V^Mf<+pFV&0fBV|c zKxltxTj(^@9;j`tJq@q!fAws2CsfB?TV1^nUafm|V|5IYhm$vwD`0M8vSaRLnCs1* zKQ{z(*HvwrdlafRRPC?Y1Fy_atbgTgh@W}+R(ut_)c4ZlOE+Q8m1tA+B1DLcMCu@X zsB&ZY0934~c%$L~xIJ#K+Xl`&XTFmGPH>hJAX}ASB`tDX`oMo(miy~LPRemPqUYyd z1m58&M}S@$cxe5$2>6Zy(g`EnjNr2rNQ75x==Ab;cWfqWy(U6@=ow-8X7tiTd>fxQNR2SBsEuGi;4n)SP>M>FGfd@JCA zT;LLuAU8O|1Q4drh%v$Z3iItd>-A$r#}(uZszjSWv*cais*MK)X9-b|W1M0VxWXl- zfC7h%5ctr>$7gk<@PmMV*N)mHMioko(EIy{o4~NF#0AD=6X$?2c9@dyyb(d-X2KsP zjXKI?fEvQ&LC%^*exo^VTsA_S&HJ*&l=}PaQw$KN%f^xWrn&1dz;CjoWYeG9$lCMb z69GnX&0Qx>5vXH6wZNoYqzNd<2;0%9f#A7l0LJ7LKI*J+3K)@d+yfrTPUZnc8KDk{ zOSdYRrQZmT%ZLEuq6C=0$~kI8jDP?)K#pn@IPuX40w1_;4jb2v2yosU0s;qvcPv_9 zhXMOhyOVWBB&jz5Hvj}YQ!3}V&pjYZJ09wo(GE(p3mQ3TM=^mG zh+P!u4xte*KFAg{YT&X_O{Z-A;Nq8DC4v@z=4T~2VdNiVhy6Z?`Ur@lv0&9glUawW z2Sb>oRgc9003ZNKL_t(V%tP0WVX#;iq=O*yKE)((k~7Y6a9iBLiWYdX?#aR@%b=#? z6Ax-Oz?Z&!_;(KdudwIGKL4NhdOZ`Y%5GaXny6YP!ibA4z>X|@p%B! z4{``tMBE}kTI`9B+WDykd){=Z*mYEr9;T{{JVOXSs8MbKtI{ z(_IJdgd29-pyF)kO6VMfQ{jBL0Fi4i9*CTWIrr!Ib29K!@ukZz72)OKmy<6y!7C>c zw-Y;|DpggidL8DD&aIw13dx7bw~|ZY)eXtZucqMD_^YqKS`XFruWhc5!)u#gJM`LS zsJ>qvtsa6`AG{iWH4e$$$yLeiF!yA#b?y$BJ36;8_W@LGn7g}b8C318I$pILUcQtV ze7O(eqw#(535czUxv>=xT^4;aS_hF^k?u$%gz}Yz$}Cj$R>Uis!CCIsyXU~^cB`El zU^{Q|7RV{i%2|+Rxh1#3uaWgq1JdPJ`x77+BrIXzEGIbyq)9P>Iv9n)i2*T?>-cg6 zctDm;pqBL{feDV2M-|d})Sf>J(uv1r)R8FBj$t8VFGeA(rnbU4vRh;B5Hu5XO0R{wgA5L z0mwbMXY1rp2|(6Q^=*9>Aqou3IFCTiv4$f+4Oewup{hi@gVO#@8YDv+7~)Mi07S^B zgOn-0ixenA#e&evih3wMD8`Bd@WPtN-4_nPFAV&`!CyEGdp@`4$3OQQ5We)n?H3-x z)7aDcr&Higxs%Qjln6dVnS6B#b%>fWpgPK8hJl>)8j)&!2EtT1wa*;y z3L8h4Tl8DTe51lFkjp@r8aWH4qYa1)N&Ah)}4b$oAsd@Eu!Xxc z0H+AE5?ICS?6f{`5Ln0+d|(yt5JTOtnt^)WVimBEH|PWEiLo7+$6gY^FpF3Q>|-^x zz##Rk0~&e5W*DF2!0Se^k6Fa#YUhk|0^B-h(n-ObiaG!C#kug>x2vy=m&DVFXjO7JOO|YC2#=H2mp;+r6 z;{fm>;4v-F5&)i!0tg5IN(}tC1HgYz`7fo{|55Az@AvPsQ2?`Tw*7-^q5u9{X4`C= zZL@8*{eRj5Yo{4o_~n@5&w(5tuo%e5Bu_vdbBV`5qb*F+d`H@VG-K=o-sP`(1^8QD zAPVwX`Qe%W0I%J9bmMixp5bv3{ypoXQk!JJ1G zP)iM)QEOoz&8l^Q?X0!}m@06q2(cPiW(Dmm^`@j%aPb85i2xbqvk*uckaHi+qTJ4I zI??R1ZNL}_Q&_yM3~9-58Dz0PNgc?D%;N;eLCH!Qq{crhVR+L2ghB&+Fz5Xro%%8G zu6bu?dO?<3fp3pF9~3BJ2{HL3VT=73L6Ex zt_j|x37F!XsA5bDrw>fw7QuBC$jnJ2kfob;6kbq*hHHSjF7xBKjuk#7$Pmk-FnR#A zf)WOdg5Xr63dWNFxT4m2s^M=pz#(jf0FO~dfE=w{1B!$s4Xo4q?rc|JS9iji>E z>iv^drkGR<$6NNT%SxY{v+sXI9jY*^0Vb>v*kJI(+jd4_@@C=PX-a3!E=-uhyq>_? zTC?Jda>*P!wsRh+qly*4F)bKL2SK4q`*B8koSQ(7#qt(GFNS-16{R&$x-sJDIPkWt z1u}G5#`hrefZNv7cRmBK>%GWGx1EV+*IxmvkQL}vhvS;r_z)*4pfF-UTsVXR>GOab z8PXs_as(e};i46cstlkn(t%nnr+{9w20tyUDF8jR8lWGx0-8rV5F#p%fUKFPPn0s` z&3nQCLM=V&@k{{|dcJbW6yw82X^0RprJm0inn4+YnSFk<-vyO^<(A4r&~>A0RaX}F ze)jYGf8{F>+86qC#Ro8*o6b%DBXB?#9%EeH5BfLGl3o3V1 z7DF+Rg;FCu;HUh&-v<6A|A>DD{EhxR*#aEphMWc7Cdu1Cj234*(94^20UmLdl%8A| zW0#Fzw~Y`}sl-G@_QHV?e)Id-gEQ18{e` z>)f3%vu^shR|S>H%3@^!e)`-`_y6=Zc=g7sOJ3avzxVI1FaNy@@QrofxZiaJW_HY6 z@UKF}<%%m6J-}M&^&f!Tvhizn7yl5D(J>a(Ekr=`o55TdY?Y0GROsBiYs&i1zhO{3S4s3 zNoS>lA*QWfA z**eN4p;_#rQ35z2BPmuh2;}50{Xm)#cA%Nztw4yPTmUAyu34*c%6S8bvPg!26#Jc( zKvp(V59GNd8tYPYmH{CWG7jV!c8;Ld)oON76 z71QT|38&i5G;H&Mf+)94(Ha0MF}qJ|^nJ3PLA&32e~Y2#kbL4Q@D%K!Fu(0}{?Q8;6qCXM!i=`}Zv0jw4WJ7wk?x(CZ{SP^JDs zg^`>MGLJ{Vgmal%AjVp<=&WhPF=vr|_9FYv<fv5p?}*fR~&A>cH7(_xT{;iV~dC&K8RxSZM2j zY6DV>atdT8zOxIQHbU$M>XFd+Cz?<^6O}Bz~)En|v z!{f~3(Bm%naQ}xbSr;-_GP^SC;KSn|CO_N+xzB&}Hy`~hJYMggt!{*meM^ru07S>BNKF#WmdKb!s{_|MS9e2z|HW)zF_q#dPQ=EB+S3Uk|?){u)Ftzxah0 zUxYcA=bWDNf5V(rv8Gr%#CfUdrR(r=bD|-!243-BIr2&r;=}PvFAc*B3nF!qK?uKH zd9ZRLRIaQXuZ%*aSDCHML-^(kHQ~Dudc9(EXcb7EbchdfUk2qc_-p-z{ygv(`-}ah zz!>9<0WoKS6 z&8!1@$vGQ=C4|`p_@a&~YjTkW^Mw&&M zDlzayawc-#_mA z%#d~Mx7YU%|0(x%!83E_InR&#xu5&T=l%Y?-#D7BFrKv-R85ShrSaf?G-DO|BBJdMc)tdL;tn-v5q+I10ECGYa^V(!PMnV9?W zM3g@f&uXKzzTxqP(+nLPIyW?zhQ`wThCvpdf8f4PKgwJv8ON4@mQ`bRQ|c(`|<~jL!3}CiiMJOu!)bi&Y(( z(H~Eljn=SOGjVUO&xN^u)@Q=Xpv#%KwOb3ugjJcSQdSVwWP-~=O|eTN0z8RMFUF*Z zGf{!PnIJqPubZdV6$ot!V=yM}Z~*176k@h92^aGG^{Sq9es@VqPF0r(z4AG@-|fd3@Wbf>oKocwE0nvBMmT@sOm$56n@@U!vf@$>P1lkt|<;y4NT z?;`ej&1-}o&=nE^pv!fM0B}hn0Q?oP-y88S33uxWCotemewys?|CP_f~tY=ghT*%-ALkAT>+qO0WhKfQ2RR;05>ZD#9<|XA`^!Gt`)$| z3INDi{^|F?w-5mWH|_WSPi~c4xZEND+$y)qt#YgU!NK=(9VdEVJ%m z;1BU+4vci=KuTepnP|2+tO6(F2AtGmjN~<1#WU)FYh!3cmtAqb#H=r2TsnTZFI9TH zkfn6{;&#pG^q@v*!S?r!JAAQpGUODH++0gN`s z5}b3+XktCkS@#^Q#x~bc%HEAti4<`<*Ur@pK$r6Za6pG737w=U>%slH^kiL4-JAOyp%G=Jn1bt# zajg_SNty5oaPP|dpQ*!N@t7tw*=Z&Qhc!Az?mq+TAxRleh)-j*adA6N=}{pb&EM+y zmU`=T!WAjgZvh!z5ua4|R3E1W{c%e?icTvnktF_;1wg;*HI){~-bG=eHo{uwE%FM3egs$QKrEV#Z$uv1*vYz!_%>lZX^ZV1A zYoa+Hzd0U2*+qjm5lqgr_Mj3RA-ignLT!OIs-|E6prDO2gLDu7({n{7w1!hOLzUw&Bf& zRWy96+*|$=%3m%&TmDr(@N-Rjny%8)^`RgB&}mwJyybga8W`O>`p-uH2U_>Ep8fD@ zKD@WJt92Kx$6H@&-NTqkW7dr6;Ulv?GU+32jG2GO=sO;uviY{TmHUVf7W3kAim7o= zv54Y{;?ZI)cGwg)5?_p~;vsB}2fc`H?K&md{?o)=YVj1#YjqkmXN|{znK_%alH1nB z4DgO~2>TVzV3}InifZ;;FI+&9luwzumvVp8s!W)#>LBqcX-vAJqzNtgJ@2+NpLZVU zj2HFdoU(<)eUf+cseGnZEm`XKMFWJnr6{`62AMJWG5#V{qHOD=gG4Oj3sBf#Kdk4os)t>-XH5iFI{P_X`G8 z(3+KPis5q%=5eOkUi8J|I??GxjTmP+5+Sc2y>VsSiHh;&p_ba0a<=H{ustkAqsi7t z#J5CdOz%@E&-*CFqv&(SI7#s&N$xhsqv&=}0uE}~`eD#)47e7PH1Y$w(dT4Xfp(YU z0gSdVW$?vqaX$uZ2se)MXKjhnV8jT%SoHA}Qh2C71th$#l#- z%5-M}%=0$u!i021akc512&>~^{a6u}X5j0t`gj&E=c8rvX*g{pTeFmZZq1U_=N;Ei zTo<3vNmvv%8;`{q_-G)e>K~hQ|4Kgn%BTPI(;sF0?vDZRa%v=BJt&I#!9cX#?dl-6V=r?K`7`ig_X6@Ig z{e110ht@H4a;SUgs}xTR-Cr~^bgg)PXamK%VrNk%_Qj^SiTGTxsd$2TG@gvpiEA7W z3yD4PVsQaa#WOY$o+!-^$0@B0Plr1Ro5MhOiSSsdsdSkz(Y&yR@KBf-PEhJAO$uu% z9cozDa5oKCOV5=ar}Tpj?F|ztf34w0`G;xvNcsC4E--3r`TNTIDW4qm`BBID;D!&b zY5og7^s^tjF?t~_b3gROme2CxUmyLU4}X%@nXRw3j-z$3^$Q>V30lXt&TieuN4AVT z{*gnB-86Rh*d4U?v_9H;mGa8+%JO3jT`u~IF5-mZfp`%|V|Uz4Jn2#Eao*Ut563+3 zgpq!7khmYaG=_F8h(~mxIXr6unk~rdsa}_fmzCpo!qZCOxHQLZ!C*`l8$$o^x*!pW z67jS-Tk0K&X*@m=lET2$45Tw`9~5>=K>TFlg*2}Z&q)37y%KqWQoM*lEj%qL7$m}B zTYg`z_lG5fZ_;l*htE{d(Dp25~YwpilSkaNnQ$ zqsF9|5f8`1l*-{!=@`YlqE_5T>3$`B+}C^GjQcim`^?)*x9{fjP0!8wd@F6Izj@-D zD{1Iz7+W4sxL0@VkqFZz47i#J?VaIHY27*&16c{=qSS}Z&ev1E>Dow25$XL;>y(xp z7fEa3RO-nE_4`U|x@*IPX+{VJbt?NcmC%Yw+G9TkwTBJ)c`rw=-q?%dndrJC*Xw{2 zS&OUeoTQLdC1$07@QkE@Fi(G&g0dw!WBmhUGz_mdlZHgyVxg211_oS=n=u&M!hVbikA`K$HUqJTustgR zP0usJK9^z-n!=orl%*zR!bGaileu=MD2ECLbt~h%OYsV3TODRlJzrg4oyzO~rEB@? zml(J-aM!@U=fm?xul(?J;-PpfPRaMQlepE!xSX&}C0s?9b}!>)YmLVl6Exx_>y5)h zrseVCC08-mc-PQsalY?!7NJwOnd-E9&Z-#1RIU1PF%$mg=K23!wo1g!N1VbK%Ph$4 zt3H=agw;D$@nwJD=kO=m9peKtKTvDxV_d^`Jaor8;&1u6;&#F>i1C*sfc(Sg)fs*e zZ|d?v$*S~k(4{TDB1z^a;?pbP$8a^Ci@%0f!&b}D5x*LiqBA_>O}r6bF%_?eHSuK} z(jLB(h94=-tNbAiKUw<5ZSBPW;0t~Vzvh1xe?$D!`1RrsDb5tXIMh!3En9|mQQTQ{ z6?@PZ{m`iw9Z_Ek+nIM{!TEA5R;63k1 z1b}yS=I#3x00uJw;Jut^R3`vby^Z4AC;+^l2=I4-|8J)R@U6gqyb1V^`TzRww}Ag! zZYsA30JqAma;w}b{}AP-iC7$nZ^f_SRbTUm`R@hZGoX_UCo|w}UpHbE@TTO6 z)#k6gfsS}7{wMrZ?6;iKyzquue0(UIW8yJ|73i~Br<6Ijgt$4hg-tjX2a0KU%u{h9u|^z2JXh=~E-=(yJXAFE_Wb@Q z`X|%7qW8((zn~ajtSfd?s+3Bl8N^fC;!bISnk452a@ImxC?>~Kp(TA1cjtPlWly(m zFW8BR#@K?BIWT!VWiF~16UN|jd?+r#py%T*2_`P^RQCSu$qU%4PQ@Nc(mE~pM_VWb zlzVW(Kp2m1Vgf>v0zf6)6_24Y-kZV41SlWQ&~h)K1w97hF7!L&vZO4~Vps~+gEs*v z39v{KiG|)c0&%cA5es77JFq2tun(GM56T*2JGwJ4bU@VrE=rjQB~7lNq$Mj6^xK+S zOr7X(69FK;ke|qYt5i_2ahNEON~*0qgNdi|8`F}#Y&+vFV{pl4Ycc3dJd4RWU!^rO zu)FgaYr5-zhO3fyc?D-uea36bnTT**H?GEqY{h^hv0VZ(%7lq2@R5S$xmN1|x@!`> zWE^(pyO@!;&H2vyP0S0%&g|`(pz|#KANOia1dI4`mRMYAHHw_!kg`@}AHbBco=U2> zKKtT&^ya|#3;C}Lhlx8WL!u=-%hk0jHLIM z`dl+n9=bDSWpFs~BV}d|YXiuDSAwBBb0Dxazelxv{%R&>Oh{CwxHN9ij~DG24lI`P z{wV`0G4d-};iM;LDz)3IkQ5Zsaf@Mj^c2J@s}VP4faRzy!!0obrkNPqXh1~(03ZNK zL_t(iif7TBy{x;!dQ*v;;;eXtu&nfA>2aE_HBD>UMObT{J-91-Z*OtLL5kDyDQEG5 zJ@FjMae2I!Htc@@*8WZ-g#qHbsqM`BJQQ=ipS$b zVrOwQF2bd-HcX{7H!KT}5$-KL7{(Ev3hP1}rRLJ6&_=_jOG_F)N@H*14>x{>rp~6{ zZW`eBXK(+(+gH;3BOmO%MCB9nsO-IM z->4o+tHPnuQ-m4Lgn2mPn7zb>@t%md$=tY!*d8Bo{o}iS=DT;ZbK%a%e)re-%969|zA}z5rF1^*qtsJsFI~pN?h6lMo2A8d6vjA% zG5I~+k%9mEJ5}!u>Tl<_gU=H{E~fD!eWNdr|63iVs6`S>-q%rO{k|8bk6ZH)L>A9v}PMOYeZKirXpL>To`KOdK8Ed&e>s8YtDZZSQ z2vjfPdfaG_1mJJNgz!|{fbO_ItV6pE&ZDX$o=2PO8Oko@>$;|08mCi_S{@z=6VzFX z=kk8nZ@R9MWED^hhs5jOZqb#WTk6N^7DGiIDeDr`O_@lSB%=GAt!D(r&5)Hl`kji0 zB}WHU35*Yq8;kb%On%?)wF{Ln*;t9F`iv1t`g%)k$%+>jvL(^8 znc}uKU(KfEJK&;@Hfv2;;&Qo8DKy^>+8| z+h4t1)(I-DnW|7HEcBKK`P-9h=^SM;wT! zi6`S_FLLAZjWah6F?IAOFHJqcW3N8;#?O9<8UN*bpZea#+_vquO}G69H~MbOxG@Vy zoN)6n7cO^YA)Ikrf@{p43l=by8;K1|^(HM8Nnk@o~Zqm2d)+w3s4EeD~wJ zReCYW3yILER~K<7@j=1{rLYvUHF_Mq@vsT#&q_WM!i!ok+5^Von3_|>oqFPj#1A4SmjEM*0B+PO&E?{8AJ5LUr z=4*4mR=V~)mp^>@pI`nyu7tmBy7FaSz47Y5eRYU;e)OF!?|hws-x>%54ZM43;MWI! znD=J9x9h!ED0+(H#q$&kCl>`XNPplGo0?wjex1X?a*)x|=Yubfz?$()lnate`Z#biDK; z<=-ClyXD`a@!rOF8)x!?Wgpnw^wZq_Pi~*u^if)VzvZ`EKF_4T_{0xQ`e#hr_{pF7 z0`BXhRTd11~hnl?7w{ec0VJ^gI&vwuM6w9d+F1?5xargDX_OtWUJ z&>h>*E_uo~#l49D9v;cH-kaB|Bl8VL)~^+fDrnReyD=EghUF-Qhs@8{7-3xjx3|3RBSIpw(#66)#BZ`=)#ybs}YY5^4S47hlqb z)~w@nEkCK%x&F51_4M6Zl9iEbu3);FN2rx+6KdD#nb32tXMlHRzB8f!9^&p;j`tJy z$C`VIopGbflxD{Z;aRK*Cr!pd)6GY->zN3CmxWm5VW%<4T9YuwA}>k=|795MOj0Iu z%u&p?S_OAYgyg}jL)Gc1COl%TlweTgyC29363ynJlnIQam_waFSTR8h#%a+?I2e8* ze3iy08~?0v1>?T-9h>jCMEUa#-(5OR@oM}{7bW2O$Ikq0mA2kAA&; z7urid74D+pCmYs=hX^l)zYd81B>q|WGm5G4W7U7c&>s(dq1r<6UB&zx=OhJyzs5V> z2xlef|BDjA;bseffvjxsZtP2nU*QLb2>@+wCIGzSRaE1E*Ki|Di?5^Rz3>?$1b`vQ z3Sh(npynMnD*@DUdrlUyF>PavMZ7^66&gcbo2sq=@V_Gh++5;K|ALr_0JrD>x5};Z ze|ahWfA4au+$y)qt#YgU|0*LBwKU~=%{2#%OdxM$si=3o9j~LyH{u`THQ$JbaNS?U z-@?~ju!Y#^nlDP;TVIhTmTfp`f4rO0meTjd&ob#hPW<$^A4SPTgM`7*8g8Ifk3KBS znODtO3V$Gn50)5f5o&fw9&;%yKG9rd?6=8yj5pRPJmaKAm}0+6m}ja1Y;i>gra5Js zB&ptm6$$9^s6GI!KvTb0aMS_YaNK_L@v?^<#^V-Sj{R{*JcOfBe3p1I9*aA0Z?V2; zrC3%>E*_<}thT5uJkh_0cOQJW_1!g?;%uCVE*+ZCt3TgSB?H+H=ZvYbO2kts z3>%LO1Cs;#Q87K-DKV>8pi7q?JeV>U!o1;ye1Gi6l<=IVP%$wyOUu(L@qAvewP#7a ziq3$Y*9 zvb5sKy#LK`dRfY7nvKFh7-u9yqdFY&DCY%zU(Td^*_`yfki24YvF8W=^K+Xg$GErj$R`#6)z+bPF@jfE8JW_`#P|)lQy5r956MiB~>5oyCyi5~-lG;IkOo7X88?%Sy&90y$ zng65fnZ9vAmH2|53?LTyye0MQjPoLwwnXiu@HxSx0??k_G9n`28nM|{kR z*hzfB&iDeZx#$w^iJQ#8nec*>gr`c+gvFGmm+mU9qCC1`T*Fw(z2$*&h06R} za`$bEE4_>wKkDvLGig{;Uf-~W(z$RkEI@~jc$A{O=q-Aw?!IyH#-sGj>wCHHZeG3g z>Wf z@|K4C%iAgUmUol~2#dmku$Z_%HpXU(rLi@R#tCPZSG&=!~JHv%x#5|Jq` zSBn>MK+QGD${`U2&ZZ3H_)sSBRF$O+s@M1`Ro7l=|AE#^OtmdW-cvT zKDe=E6~&pM1I0rWn}<#hJxVBrfp89El}wUk{0q#={o-A@J=VcCMo0ip=k31qKF0GB z@R|b8Ny2_?d{!@Un-_9sODzXDeC>@@%Bz3EJ49M43( z@y;e$rhYlsPf169Cobtm zkG*jZF2-^!&=og3AdNP4BF6hEh~GYqqIh5HpsYg`R~^+y+#m091!v-+Y#q}*Jikfv zk|Lf-hssJHatjl9;(mSQwR3x*aH^JrXu`>MufK7I7ZFMj$({?o5+eP_!T_k zUT$OP{LtRo0gN-wIBd4j2IA6W#TD<#^WctQ3PoyPH63~0nJh*c^GxEpLK9)W(r_Pl zL28!?OdO+xF;-~AV5Y{_m8PyK^bj9bH6A+@CZn9&e=VP{Bd#)l-8MKt936`|fJe>M zLU_1zv9yo!-15}&bQu;TZtDlb59Zz-a<|~`d-FNOZ zzxS_Rxc&ET=ZVj+`gfoGeLnLmKk>6m{vSU38>@cuiC^G%?)mLwzcY!WSH86POS`#v z_2S`+Q~COqudn#}9=ayHwz}(O`fL4r`n$NX>BhsgofPAW6U9tSaW%}MG^RAY)J((P z^5HTnPmX$~a)?S-rMGg1QRhcpAJtF8lJe8#3zW_`TyN;4)KY3KRR~MMqA(4+!)`BN zn(3K1*BK8I?~V7wyV887I72)UkHzOG9*d6_izyby`-+7Wlj4?QJ#kL#Db5kc$Cfyj zxXN0O6AyVg?v&PNy~OP%g+*8s&V(+)uF{Uu^E50iJyIH^JiFoEQXivcmuHt}F>3Ls z(W4%uQmve*^fRhsRCUyK8pfBWG*l_A4y(e0#P!z3^$c|u4-T#1y}|b;yf>P+HoWy@ z@3V9qd*$hlV_cnlwfE}1oSS~`xpPnR-)aZ?4jyFFFK_zY-}op${gcby{pqjqFTeiK zU;oP+eC}hP`)3>fghR&<9XeFz%J?hyeDxk)d-}CX*J0k7^3L>k?xk24*Ax#?S{-(T zHI%0`yi}e^!%Gbd%4Z3C!ojeMcr0Fx-PmGIoPu^&v!cgfeoHP7XO^e=YLVBC&DNkL z9y5-(DkhVT)49K_TZ$mAhdkfua8ZqT#goJ96LlR;-C05n;l-IMowC=;r$=vKj44>^O* zxIL!0#mRVrxJf09#+CfM>+_SEc1a=XvZU~o)@LK@a=D!rVM?y2g*Vkyp5w*(*pyWK zQd>ALwfBS4d>~2Y%k#%HPK?kQQv_?!W#f&E()G69H9XrJoe3m|Rf$*a(uJ{R8bh(X z7>Li&|Mc5S`+In2`@qC^S25Hc4-LIcTwNTC8;KL*r1&iHa@Z2D;&6N-?!ka1_F<;e zrsA4oE?~S#7GZ+*CZof2GbBR73CRNL&iwtkxxG!tG!>ngnw5h3oU>h0C(-VA<+>e)QPHo3?N3@mFaZFG+FAGk8;{Q|R$({4@0E@MYo~UU3X> zXdfm993^&Z_a(gUoAF5cJRTu-`=<1JecSE`u{*XqN;nmc`#cTHOTT*CCMs`Lnm)9b z#@B8u?)WJxvqt@B%MUQ>m&^a5>C2Q3HGE;zLPA^kYU%S55#aq604Y(ct^hEY2>{g` zzkSbuS0xL8*L*t#fT}l*C;-&l@U{^mKw-oRV37A&0Q{dQ0eq_!z{qyw^S`geZ`s}| zx5};Ze^t4q0C20^D!0n5@()!;2mwiwsoOXGiKGNDMw%$jmnNEZ#^~F4FMCYA<{R;k zBx1mK;hQeHpV;BQ$35KkFDk3c^BLdrkIvokCE^!d^5Zz;M|>|Td1Bb6ElXR!oCB$2 z%|_Y%F5r^=W=I5qL5#}*)RlJXL02XcEVJ8AoY(6aEWCtSxg+Z@EbI!wn=i?tDF#pl9mVl_@Nm118UtCLtZ#uREBZfv-*gZ{a1 zAM4-CyIbE~Hdw_*_gX+)5g&|e(d0q<&>c@?Ks8BzcBcCa+jA)5XwLjTqLde^J@Kj( zcu2|!jh@ENoEd*6hccSMs%HQsDaID_a{%_FLGDv@mjwBq$E%ejHFVRxlLl0R7}di-8yS9U|BqdcC8wTXC+a+x?Mrl zRcEAy*a}G~`T=xirGxXs_1dBty>W*f=&~|r@mFn?fckO{S`;{!ud1dyXWFE5c9Sy? zhJ#00X<;CFJ)55cDre)MBq`o41p?B&cf~4t;y&9@wbvlJa=T5!^kRDslwHi`0xdQ> zjy^|BlcbVM#NGKi&KZ_o)QLeSazLe)fq}Y0K)p5Ay(8P}-lB0w{#ynxFapo@q(ENW zm_s+u=~0$4Rnjvo+?(sB8P}7SVSGkk2A<0K{)-I27j~mnV?2ZPah4iZ*sY4@EdE@m zc_H6p%6uxh7cXngvaBiN_>3tzXf`?%5C-+5F)J?Yk1Ogik`^U$ke z0PCI7NZcM5Wo3z@IW*Ynm_*Dtj~*2}aX2Od!@iWk>IH*Y31%P@a%vtx)wo0riI2xi z#Ce`}4!d*UXS7QWgCcGxZqu9smhq@(h}+H4h3z@acEJ8@@lbIRtHP?VoY1M&H9TgC z6@=^Ih{rKC-WRHP$|jSD&l<>Wd7?5d#lx-?P1;<;7^UnToD@kI zk?4QcNao(rWV#Zck6U$OhpoCWI`yLxbxN+ARF33rUFtt6x1{&BDFc#w@6Y7G)r6;+q+IZJ(gM@QoPN|u}i|>wq_bJ|5{nn{>cF=jX z^X|@WzH#Xr7q0K%8^3n_-EX|gwbftyrLTX6ul>=r@A=vWUi)vI|L(P!m>8DorBsA% zrDqA(!oKh_VP4p56OLFKmQk8e>MtEdODKiQxSEMgC!)m-M&oeUXa&X_uN6;+XTx?vMJZJ9fQ{A>)`VT2#na}LDwyf{ zSjC`HScO(&Jb^{=A!~?5F%X}}1L59ykk@y-zO;Kb$IkxgOUIUS^f$iL|EC+Ne5mrN zQQMgGGavtjkKf7UrQcb6=PxmN_vC?3e3p-|n>2gUP9~lEc=7RF+|hE!qj!|Ky`$;* zrt923&@{hsB}4bzxLljXjg>dLZ#+(%AE&yHa4sxxhVVkTH$01_o^U@VnPRLF;@SA{ zf@bXY2$)qD_SYEd>SGT`1ewJsVp@My!|n{R))kEUva(T4A10Zq3DZn|-?%*j{ML!u zY5jQ6OF9X=9djM`o0o}81K+ZLNsYKXp7JbVU)ZIpECZ)5uI}w`0v`k<- zU;v9f+8RE!_EQI^Z{t@RKR5eV53%*9w*2zelUyDA>YT4Gp|Z0w zzA}}eXNvOBT3qp9ScjI_lM)5OG6OiQQx!9ABH}Ruy!T1A4~O(ROE{n}cHqvuPd$6x z@b{Wy4Nc*`umd%7Ex>ps8au~iMTZwmL~lHl)|6ps>_E3c6=}XwyXjgAB@0o~ ztAnh9#!meTJdhRd#(6q+VzdKcBAU%{O3Lg{i34f;oSFgoPEW>5=#Oi|O3V#M!YSfe z?eP*}okq=At|=x3#gkzs#_CW(X}J9q>cqinZl7b&WNMy+wS=i?Rm5)0%=4tmFcCp$ zM&Y_AP|ZpXWn;rc!n9n^n}_L=Y1HnFhqYrMT+T{5&&B!lKhv-ON&594>HkHFLqn5` z7m3HMi4WtDV{t!b#VZyPFPA2UKEecB+=q#t(Sk*K^E&U8yRbga@e&%tOQvC>rJ8ZU zVpp)oN>e4mKnGTu?Ikp8v>XHWn1ch3<#FInaGw?{ZfZ}L@_e>Kj~N(iw0m$>mp+_! zmlEMrI3K=TX{@Y6QUw!9X?Ry|+roR=t6OkmW&13kG+oeqQ zckzy1U&kxH>P0D`=`gyrhhLP4^n-ZAEAdb9h7MCC%YgA|Ka-`D|vf8pXV6id^i)v(Xg}hJC*0~S-%)6g!?@j#uERP zzlq~0elGrEY$Pr%e!cq78TzSWZ1wjjJ{J3it`pzWAHPYMR*L+*001BWNkl00^nA;Rc@7Ai*If6P_zMt3l`USyNCcWquaAawh*?J0z+3#pp`VRD3Si%eCCT$C|GP z1K}~3(H@&J;U@*s28IJgNtt0Fo;8R8PsfXBRB_#i5<(p`tXq`yJ2;#PfAegznxD{= z?4`RQCg6X9qiUF*r3l+~+AK+DrVP)4OrTk+9}{g>L!%~RrG;_=xSQf0)KZ47tHxv{ zlX@QPNOdh zfR~-qh>n=NUuR|a$wLWH(=rSkCgAIOBBaEp9aF>3T#L>5n$l-f6mf@?!PraOprRj# z^8R&VMj`n(mxtR+@+j`GGiOHEGqO`)v8pNs90y&I>b?8othl}yWIpRiJ;**43p&Xva zlh(NhoeoF&_rhaX-^sb&Ft|G2ewNxU~979E`(P+0-uar5QtOoirFqhtvS-C&j zp8#4-!#ToDd5=vFVlWN8UhO#Neyo;ms(NB^2H zp4k8V7x&UO*tVeUZc4iwPBxsSJfZx^sJqebaD0Z?7^lWDlG4Gt)MWB|p2nf`2GwvZ zCP~sA9@9g1ydDAe8MY-ECIakDe~*dq)R>7wX?!^p*Xbrc?n%AqFC1pl{iy%@ zyp=lOE_;U8^w|e0DUj>9OX#*M%bB+tlq_os2{1=|E=kmf^*Mj?z;F-u{wrwB%07dc zpi>IX#!40v+t3lWW&+c5&ZEPY*qN{I3Tk@eJ`C8J$FcgjQ^{9d8lH!gCC~do;#O@s z2#+O#NPI!3E(v&VB#ce<5VuOo15>g@|2~ge8>m1lL6}NzEbvyq~@v{)okGq5RyyG zMwM`7zznCJY80rNNf8jw*?eoMDr7ywxWIaQ4%LO@Y^NH4<&+f&W;$O-a zGHjneYoGOabJKBsg`Zkt|ayb>c)R*H^g$P8*k;5unj&a^jHRmfzy- zg*z?T)7b`iX#GQz4>iJ?p5MN{W&l<{_nXhJ{y4mQ<-5n;Jqx^T-U+W6ymj75IR(x* z3t0@*Xg?-kgpm<>T-E|Jopz@a2(f_qKw61VvR~WB*>CIX4Ahc5NxRLTtBp`pXJnp8 zq2~eg;&BB9%2uNDkB1T(wO^?N%Wk^Z2ZBVU9Gn!FTac|LdpVCtJs!_(>yt_ZPqW_x*nW-`o4W-~8Tgm|)_UCLV^j-hS)J zx4r;xA5EQk+XJW7SwcUQRF~A1)WNjt(`o{Pz&JzB;~>{*q#Q`oEgj&Tq>>bHhV!%n z3t3JYNYTb|07A?`t-%8zhk+zGyK!xX)_qxweE`g)4Ht;8(13=lbOPWyE!JNZkgO*O zT$2`pzTxBGWNZNNta^i*g`r<2h&RNWkWQ-BlxplnClvvXfQ? zaU)oV?Of(N@o1`;ey$rqOy{sbfjE`5C-ohn61HzWQ*iLn_supZwJ1&Ke5KFRLIR{) z*5iWH;Izp&5GGg1)vgXx`n_A618fAg^DtY$X>ux@2slBf(wPO$F6!A2tPgB(<^d^* z(GDYfUS0L-)9}NNA9nw+6Wp(qNXbbkf2#b!@}GeRRzC215BwF(oc`WZ@BLNy#kGri zfAP0qPQ&}_-@gMMy7W+I^#yn^{NSYrv*50Ao^m%qw)sx%&SJ=~@%HA@Ae+3oasnu) ziv&2;PL*>3SSE*A28=lyto@G|5hftIUT2-7K!`F1fl+#x0d#Vb6!5U~q^8i2Vd(;b zgq$W|kQhsVHf!gF)-tZGH@*W**oYw$grym{K)FzYF-We;nJsG z*|8dq{KfO9kGSy4(!nFIEQiR&>8+6qkl&Es;;D0Bh*5N(TaBi8%Yf5Eac#w(M9&9h zHZxtLAIOOk-(6=PmFRkr;clV?fG3)wEZ{t1{aNdA!fG^#ruNI=iYkaBP7_d0z^Mb- zOIl*!oVRgWZs*6W5f)-{m`gyJvzK*1!icC5eCleY67V_ABR~b?=8#f@ItuyE=g;r8 z&P(i0hOAW8@?Qj1h6vF{n$FU_R#b0%2w`drG@UY~9Whmkf}i$Jqx! zN^~9!kpWH`QLM^F|9o6gg>}-P{j77n*bhWw2{WyGFdB+gG6LRmV%R&0T~7MI~$xK*Fs5lf-xnNJ>l{pPWBn7I^WhzZZahbsQWQ-!WjmzR&pp3j9x?#DXy( z&g;yy*N4y)s+D%X_t|S3I6riL;NFCiOHQ{F1OC!IHEjr{{j&3s$R+SzmS^*6@K$>} zvcCiQAupV}2C~?DPwo+*Oj8F)mRsH=N(6Y5qQh&Btfd0DLz1Zu0Cx%w08x0me;3_&Ujbe>rtRnXU2hxA+Bx&tpJ{*+ucW+W z44fC7zjZE5`MwD{h@!dqt^lLVCk-T-V}YPS27%dTb+wrV%(M3`0s2&#%LMCL4_v2? zS-@Iq2>_3AnKmHBaSi}Uo-!bJkSMT{5zYbw4D%!~Ni{oxi!?JEI8QgtAWPUHtAR$D zWHr#sGE%@yNr(q>O%8gGgE!=rd-ZT@Zf0lZ8oc@8*o`-T3$p97d+%%j7U4MufJ0p8 zB2Z41S^hR#!23EL1;vXT#kaW4*}?gmGVA3KZ9t5Jgn>ya!~+i7akJNs>QyXoDp9Lx zwOI9J4Bg0wti}BRNjZ8T9|k6Apbe-tV7ZBuo=;kuOgg@G@l28N}r};8HFdtlR2AT}!zgw5u#o?-8~jOh(j+ zKm!6z2L1Z#=zuADz%$i-a7ysIXoVOeNEYapL1Tnx3OST>Q{Lx;%sv5N3_p0}2M*LS zIZcmQ5Brw&8tB(xLooq?WW#jIYc**;+l~b$_()L@6R>h zFeSZ!X9}r=-Jgc9ajLEDqU22Zc##D_nl1}qd89#(uUNZ{6@W8;WcHu|v^Wr99wCrHvqJQ( zpab|8lbTGy&jsJE)~T|VeQM2a3je8=k)tSp5C=vzwSZhRYhbVNgz7#4n02t`hOaRq z#$~Dr0OwI>g$g__+4aw(VL}&Go(6!~EV6s{3UxeauLtb?QHly*Us; zi(1YDa?Y;WVBcE?W=V)?MLgL9_$d$K(nlf~;b;l!0^3S?O$q;ApTp*bCFjrp=o+3(}ppMs9^* zV%cl6CeFYM`(CK)z6M_yc>eIwWAKUJ`1p(4z7C)L&VTbX{~GY`|6W{=^2(wV5TwpUefE4CY}B5y9Q7A$)c6Y0pefsY%VL*G8%O<&0x@af91xY$bOKRM za23drl&jXR*MW#B`^yQLQa)lpfAFqT_mBYrg9d~?ZA$!es@#`Dj4}?4ld^!j2DCTQ z#}Ep3WPnam#DRSbGY<5dVsFC!KW)z!F03aCq70jZK+3GxU0W&34A4p8+5PGJ28;+g zM258eJq_$*E38M_pQ^3j&9HgV_BV3M`h@|O z24?E|q1PFcwZO0}p%sYBDFbLP(S{NO!`8MwG45X~-aCGZ85LoWUeX|2Wd);X?)jXx zzXC_dCH$WF3|hy$4?ES^JBHG%PF}^78sU?Ndl7`v+HT9i5L(C zd5o;A1iElJ0aTKq24t2bWj^H7`M$gd(jq&h4T2M;xzc_J?3)&w)(^Qk`JK55hz>@t zMl4!qI) z#@;tNAiMc?OLi23L&01y4bxUkTNa!T&LhqycRfg%oD~;jEz7-bpp{lR0(6;Ehd-Xe zw(p(bEGb|@PFMZV-(f;5;tc+tYX1qd2298+s=xok6iLeAK8mC1D*XHV&U*}f`4 z2xy^J_cwB}u+k*$zLjVbCW`KF)Ve-yKwKRFBlOD^kYgN^ILK02EM*||Y?V{srrpKv zE(mTdZ7Z#ZY4ZZh0y(%@bu)G|3}Xw&Vm~rIQ(w7c=l@tzP<FR6%lS^3+@N!C5Z7&Q>U0Rl2$~3Df3HTO4QsZ=tuy zTMFKFugU8L*-o4*sH2w>+WnKAE89@wbsI239Ua=7#SA z*~1>n;MS5`O}A>`r94CIf6F#1-H;m&gIvND%|(Q^_O1d=}CT zTqDi|&}fN$(w15?OqmjiS%wSrvB2s=Yit>lv;#|7!k+*SGlOkV^}@SvRQxf&VP(1fZ|~atZ*S2tc8) zi;)1NKnD2VaRQJjgn@hIUb$EPk1qEJ0Qbthaw#0{JmS0u@VAE{CYTSbW)ACti?kB}T1~e!OinEt$wz!+jtZOul534d6Y_^k5w!HnmI@rP(e2rQ42{Am|!0f;BmE_l`eL& z7UUTT$p(-UvX&JfVR@9p;4P3D(gb%Zvxn}qz}rLVrEgb&x7=&aZv$qtilsn`xaf2B z;h{NKJurhhXwiU(v(yguL4z<;(nTLI&g1ep5Mr)V4IEW~LoS}~;2)`RLKaa8f9f!@18zeWpRO%{4!!T^l0 z1zOa)xz+&aB?Sc{2AIyG5ePEFSxGT$fPRl$vw+dCiRB)?cs4c@$_?E5w`yNFq)Z5T}ddK#r)a1%j4h!FN(P zWA~M_K)g#OXV3tL4-~s#K}f{6maevX9+R~^0^}GHRW3w`pvsK9159CaD)0j^+FwTv z2rfECXc?7fOksAtkb4tg%&r^p6|RgjiaJ23C9@vjM+p!H+6sU(_zDmuBDiwYo^I-H zGH42vF&V}K8IaRtfg`@sj3L56gfP1SpK_2^;)0wv`i$StJt%0px&W6N%7K*ZvLM_! zbCxJCDD%hcvpI@HmO)DqQO+Y42uc+Kg+unaejseXZ;R;t4sg`~GGE#0(y5n}LBO+m zOt8?#ZJpI`)|ARvNFM1$dvgG2k|xqX6U#04rw{)Z?%#+wO6aJQ4l>}(rOOmV{<|>+ z9r6qX0tuEv#Hq1)uF|gK;T6(Q^w<>?Sg6vJ5zfOlFQ~3CuH#R3;}TaDJaM4R#z~O* zbORygGlnYZLTG9UZwgrD6CcWmFbKqChyy@97r6}5B8 z{>WXaPR6vpWDRjr;8ZzbCk$SXoby`Y=A4_eZq9%iXWrw!CkLPT)V}GT5!n8@?XP|E z$MB)OA3FV^I+zxpb|r8GGM$-YnR8I`NXe?edT?>e+)7}GInI2*l@8*-Vb)oHiW>0b z8qi2VA-Ti)oBlmV6`Dgn3$k9GVG^W`#~1E+?*H`z?v`uj1Tzxy5YGR@Rp4Xn=6J-VAAQLYl0*L6m z>JtOxg6(%IY(G(D&IVa}s05<4*qw%%1B|gtI)M>+ibKF8r)3k6VVDLWBiD#fBs#R& z{_muvrrBt#w7+f|A;#!SFlzg}Gy(IB$jDM)h*`1{7?oA>C`v#)iUK-1e)Kwb`{NXg zKMF3{erU{qiP=V2c|x`_2}BvP6bQaEOtwJE>#^5^cE#&JrL7~C1gHYXBj)acKx@hN zz!}I4XHI2CL8@e!#js%Wf)fiiz{eUsw&ck=`0Sl$KfeEG;r}|YaPPv!klK2)HMI}& zJG@Q#9&kM8gmVR`p^7S?OY7AqClnHD_`r0KGAe*LXJnhz^g$@7yX)-z8*P2PQcw~H z4REWm{mo??uhGJOFbkaJ2)*EKlHFcCx4iya4`VAC64BUd1JDtKbr5V)1jkgF>7BsuW*$Ubim$VIv4^#Z3jCP%yGb_ql{DAw|yS!HngMcM179 z<1K}iI=HyDPpM{|?Pq6N>Vz@_fIWG}`d0%wYe#`9>g)`0)vU?K?0bTgqy7Fmkhbv? zkQKzi*~sI>fqtVXhVaaT!%yp_ju$o55eBZXpA?X0($i{8E6mip zHAe%F3h^BVp0s)x0g~)8V(1bd=q`*@*WTZbI!^QhlZ>N;nh_(;2k?o>RTKfuPF0`^ zGE-KAY>>6y0r1-7oV0+`OCNioBvn%8o`=#%>Dkf(*hmU>|&Rsk=>nm}1`O?b|zg!0K=J@{j3Ak@nc;kIZ zxG#BM&3#G8pUsi)gnVayQ@$UhQYxhaxJssm&Zk*Ew}V&~xF1 zLc9Ts1GqAQ0{Tw_0U}O0MS@$AU>+g?WaKKFfS8=Hb5V*(V5yyRhArL@Gy-gzF=q)7 zkY?6^G!d4hU0;PE{`=SJxm8BZaV%|XfIj~PTQ9HUdnBoI!ML1e3{|F6F`g(hJi8$Xag3|%}Jn+B=dn*dRPQBa+XG5m>OmPkFpF8buzSbAoaikvWx=j zP(n(Eq_sqbZNR(fryQIHr^WdqggzGfPoa76(5{F6pz_neH|5LnbHE$CN;AdW_DN!V z2UXU0q4CTg012YSq1ekw2ND=&i>@Xih15Pf}}Z`*ag#odH}Z-V%MzMnE6 z#yCFEKNaww`ab{ln-m3Aar+*hxRBrtUbI&w0BHR6Eh7Nb?NZ>+X244Fba@WB2_PlzwO0_a68H+}9K8tK1Kvq0%2!oPofNz?hSoyDRqy z0QbthaWaaQBxaOX|Vd=X}!n9FU?3fGo2u(5N{AS25QBvn!Sx zeb|(J5o3TK=LE2VC;?yx0h)m@4b%VwwBiEeWSIvH)5iob##Ocg^EpTjFqbEo1Ri5P z<-i`ssYHRm0MO0~E&-1)myO^oV4<@d*vC_{8EBx1%^*mcVyNs6Q?hbHZL6QTqFJrK^-wNMTh4$c}l3sT1npo*i^ z0j}j>uQPx%jGvP{Xo2)P19^g?kb@qqD+<7ezv_CXpwDs%wfJrZM)8~qplgbfUJvLw zN3*?Uc-Z=tA9(VB3VRNhwBrI1Rx<>YvzZaQ&k%6c0*k)BCuDasCOZhC0oGxPxtoXV zJ_amc5TIQy1EV}GPXcMPTB|X_Lz$1pTH+ z2pVv!-xs#}_sCjG3k|$StnPQ}?a0{zq?MuyNXZ#4qssh4r~Qs;uO zD1cCD0SZn1aHbHT%2`0anpz;mg@TFa)OJeRPfL^_;Vk2t)qBb;xyuTU3$6C~s69^* zXs6EZUoBZZTw3fkist%tfnnzv4XCri>ML1LUiyH$0^O<@bS=d}im27A?=0Z?*2>at zzpGP$Dq}*0k>ZnXlqlc_+$PPcwoz6R1NvyO;8)m`|DFM!*Ifl&# zBu8-;(|JbUUt|5jGi~jJ9HbLS&@7jMBo&l_jM;osVc+Qo8e?*i9$=hP%mF4iD(ZAl zMg_=rCKv~q$xhi15|*I!fLD<}=M6yqX#UCE9LS&by1cUxdOWn}zQ>>oCh9zU;(%l?h3aIyrte&Zw$PX-hdYe_OOfnsO5YPNE*NrrV1ChWHnuBy`~>u z?;bJ2jcSpj@)Rj_Jo)vkgo?X?aUblvtl@H}lOd-MN&+R#C3SG;ShhC16s8>r91c7N zk3R9}4)mf zbD0VtDtnk?uWA8$RF0uUA9b7buj2*h3#BXg%I^Vdm#g+PH3X?e1LIj# zaeNV&#fHC$+Cy-)<8lZ~VR9Jrwp+KuoR+>^|9JTZ}WxpI!Ykf|tBA)98 zOeAfb6vwBoznX9WQqpS5v81jqX62q?f~JMr9v|fC)Ly zF(7CPw6u(J&i+0DMCBC6fDzfrAs{IlfDTeeBY+d)6cCro45Etr8XzG(Mp&xmG{tqR z5eCUAmJ16bf+cF<_Ocs1d|j96w;`~0ckP|*eEV(pw32C*xEbDEVIhLEDAtI zZ2#0R2T&)R!$62y>QDkwh@yqC-!og)F+z4*s*?jY8~d%|r(Me7F#{z&RipEH92k@J zaukTmX(Jq5DXd3#Ls#7On-82N?S2jz@G+MQn!*R45K?LNSmqPmq|aU(fNHAf0B5zc z#(fk@j=85w4nwXiUzb}7Z^hs0dutQa)z*1+LD+I(%l0iX_~ZZj%*X!tpJ3ewKKh=I z{v$*hBiTqbWQH@>Z;eAqd&yAAC2+zFIMqOea!Z93Bx&F414ACjVe8Km_JqO0J~^fR zg%-Jh5^!tmeL;}bMkHv!cZ9(9t48I~`A_CbOcsIH>s|DE!E2Ic?;r&B1Udp|q5SFc z&Uftu_K=fq_*V2=?cd74$*=y!Kc0LI4*%LA`TSSm$e%rb-xt0JUpmvc?n{^9#o-qh zzt{q~OS#q@@Syu(&4ZH=91CWG{g5BZ599|RpUjWs0q;?-&U+lBj53LX9OI0f1e%DE z1o0hr8u9mKO2CV9+Ib8Zmy`6PwAc_ZZZo4#(5x)%FWTq^uFFbGxssy^xJ-yipb39Z z?-M|^N5wf0=(tv3vdSmmN}Kh$BlZb(0_g{ky|RTE&?c7&pw1;m1fb1&vjR$bpJg_m zh6==uBEf5){geYj&O8FZm^mt4m7}D9u%!gZ*?xZNP7;tbon=^5Z@BfR=te-ALAr-h znn60Gk%mE9l23rGX&6GJK}0}uq$Pwu-MpOlI_KN|w6DECJ?mNbZ>^g( z7uM_YX{^Dton@3jC5A*%>R6LYRUN!x@vOHI)Q|mwv8p1xe-e}c(^ZbriTxP4)MqSp#6ru=J4x33Cch2w)I=)uA7GAjQ_-SdmdeLh0*0+yG^7q z@r7KjV{@+(3gLP5E?FtYeDx7= zGKRQ5Dk#^?6S9|`;<*X(iuM3n){gI5N>Wpyc3&AnRpimDw3bu`CkgsmKi2fM$Y}Co zzis_1)lfI z1zorA7!(8apr->qNtM2PfQs7o?}~h_@X>|K|6F+W5bu`GGjbN#rZtFVRTF@8137>l z_WavXzUe&5{&5eQK@kKg(ys){Gg%eV8&x8MCJyE8=T|s9TYt8ZhicB%3>N+G;jD3( zSY(E{MZGz`g8L4ssDs-%l&SISBT1k{Lms658MYRX8R3XEINMkx(z1FD;GSKQ4RNT; zKE=pU71!F)I77#64Z%j!RbDtt@j!KYNys!Bic|gN*z|*N8;W=H!kIrI@-hG3%IRg* zTNcTQ>aEko8_Mr=kn{MU;kS`(-5LLV+7X4`r|1N&0IW*#`Y;SM?}Jka{wf&&J8Dg4R96PsfKuKIB0#s68s1>mLvOG( zXDKCU{l$L-klKY)t8_P>|KPzOBnA1l%39q$q=Vyr6bSDkDvmyurMfT%Va#vH)ije? zfX=QDK3?M;q-AVD3(%~7jEml&Nx^b1G5oYbVRwHnXWYHT?|eyLbD@g=O=Bf^)(@IN z$XS;79P0~x^Z}LS<)uJv;y*5p3X@f*Apmqe!WeFJ-);OezTXNXx$0IWXfghm7G}J` z48%TI&i~SaHdfj?yo%C9N6IQBvyaM8?@6F;qdM}J4?`p@y#1ww~4ukI~W`q)x1 z=@;QQph3KKyi3zV7Ke$O_n9lWvp#~7!ue71tHiHg5Y}aLy$F!cBZn<`{x@R^5ON_T zP0Zji6r_NBd{lxPT_35DpJ3$x^!n7dhT(K*AotIBVW$hXW2)1wVH~2^WOvUFtwh48 z#eg=O!jIK{IL-=+!g~N-|^kT{fj3b-7Ge$OQBM|X%91=qDQG^x36zY^EDdaZuIgc5x6SiP&DtN z4kmos_5`SYwN6Or^d2QjlmGVnvyKyLqBI(lxabL}9}jM+qOY~2j6r@nod+vB82-t! zJ6I#%{Q74;kL@rarm|Mygo#ot;|Es+Jp6dtC1fFlszLGkoUm)zn(Qbve+Y-Na2P{n z%xI+Yj_`DSwk#}+P>a7gl|;cH!^8uaE$vX=0Bo~R=ulB(HW#hMz;fx;RKo7RA zNc<6e@}@23e!Me*XGP_Oq9YfUr^~P96Y0rQMaPuG9Si~^$0`)TZ@@3})Wu3r-`U6D znKqg{`LS>0{WkSssz}DyOR}m!X3+R^jBPYKc>}rrI4GNS#9p2?%bz~lYmmyWi>F4% z`-i*t%qK8>5qTePS`ip2AeMmRWcj3gl^e|NBm$Rqn*NY&3Vmd> zs1^}P4lB{oSG1}(58kktpXbmm&-3!NCWJr^1(cg!Tvhv&e)w2%9IszCMf?bN)xvO) zI8j356@GrKQsR?nMwq5$BC(_1Hw`lK9~N6t@Uq{-DMcBS1q_2C{Dg>2S`fVx8uyUC zBjr-m-O=*jPR=ftw8eNS&i#IK@WXW;3Nw%_%fWz6DA@k?Y(78elt|M$7^Iym{rmRY z@4EYi>y^;6Su7?!?{;;|wRbi#O!nxMv!(Tk`0i!^{$~QgOq%ei%&E31n3@_dEtrp5So-v$c@3?(5$Nf`{d?7w?>GK?X3vR_Q#fL)9#jwOGbiks2~%IYXd65o(3j-lPP7eLz}f!rPK*&zsey>EM3+8TllD_8y6vFH?qlQ5FeLt+u~I?E#V>` zqT=J(qsrj)hfGJ;xBEKaZAxjpP(z3UzI>WWK2|?j;T+EtVR%NVgu0VJC+lg06_1K3 z9s)?9QyCzXH{t1>b~L4CMK@`@m&s=UTYVfeB6UfhEWR#I7DJ1-L4_9P%FHM+ zqy6~SlYDS6dJo7csmX#)QzzZ^kpRaJ0q6C4v&U`k7&oNH*yClk@b-KhBnP)Gb+4m; zEm&y^xR2`NUyu@>5{u$`CqaRbp*a~n1u}Gg4mWDx1P?s!fok~` z+FcS#ThF8z@sD^T|L@Mb(i0XO6>sL@Ps(odX_M6Z@b>ZT_y;h%_ z6IzP@WJt16H*LYK%>-(P#H`#)FWZD0SwO9DA1L0JpI^9avkH6$T1~A@@h0w^?r-tr zKofUA8(1U{aU?qLPSUz7k?D^+gNyxy`pNnoyIbkPQ+hCsMdZ0mpIZ)~uyiv{RzJ>J z|1#>1c;ihYpuowX5oQHg`qvSpHmKkW=4smoRL10Q5hXGX-aVIgX)pV`MhSZ^`h59sqAcAIvmdR4B!NvbwNTLC7$=_3I6#(LUvo2w0~TOtsqY``i|oCmyblkZ=Z#tbZXVL@> zZRdy4KpQSYD8Qe}nT7k0(z~42NR-|Ovu@G_pSX(gaCkVsB1XbvpgN4E!V+HKS2Bpy zsy7z|Pe`=?hWyj^%WHqsK`69!+LQcE^GuKq_4eRuy+-GT#E?1Q9I^3y@N;|T({`Fg z@p1Zd;rwyNyI`X0)#lc-4)woyzm?OI)RRY541DY|GUqXVEet6HCyO2AI9Q+Hpr?Yj zX^N`0^U>dV{yv2pZ!Lueg#`{#p~jLVsw+<@D6jQTH|YCw;VOzZc&$p)Gk&;c~8! zpZz{2|2mqH_BLNaHJ}_*+WT99O#@mBX??x#)dBxPY<_EzA_n70m(c2=>o@0fw3A%S z$SUvnLg{MRmDVXvaMWo0M;ZQdQ1Um}Dt)@1a1Qfximcjw97g1WG{-*y5+RjaHe0^F z<8vZJ(!vsrTHs9IO-K!4@JExbO0iV?jX=rIQw02fC};px{^7P5txXs~3;!k|IYJx7 zZ-G}#D+cPZe}qAtzEmec7bQ5j)8|Y`p6cpbPw9I?9Nv8TPn9f$$|+fPiu6dT&-3FG zXzo+!4UKw0+N;-7erA8Wd0zj@W9JOPFvK67!}pk;mrCq-({K6csRCB&?@vLjaO;qg zFccKp^(~CcpyobK2`Tu`6M%ktV=0Uw}W3T1u)- zEa~TFH97@l0*VLeE2RO@eF7iQXMSBd%h;U5fOS~(h7zK@)i=8c@Jq{$^Nk;E5%jV$-aRDipx#nY?W^svA82M=SA2f2H{HX;kc{4a%k zpZ84%2b+&tz6Q9v?;i*f-rR#V@cke8=dgIvL?7{nsd|7zBDjS>asKkp;8yD{N08JN zf9%F}CE{x8Z$lp!#@Y9?v@JFmc`hYS7U@rgj1=xP*LpPTHk_G{V@D&h0{H!s7fGBI zK)GF%q5)ORXo6=JIelK$&@V3um50F-Oe34>nKH&4UL!*t8YpRtk`(e2DCYG#y=hFw z9&+>|GL^$}f0KW~waubYqe-dL;d^Ob`e08ZGj`n8kjvObo|e{&&HAhc?7nz~QAG(H z?>!yfCWRv;nxdFNZCITSFS!w1c>$npjwlNk#Zr3oItd1hjrsM1h6pq+d>Y zLwXLEZX+)!Du6U2)I7pB)1>pv3XXD`lhZ^#<%PVeJ%U~NxbKV2M9uP>7>#iJ0FvmJ z*Jsfbyp*25J(Zr#r`U~oz^_Np0h|!H7x^&rctPx40#Y@~bjq>jHq8Y61rrv(R6k+H z?s#wr?#oBnJZ^at+vU|iIxpq4zw!GtNen%CoowI`lUH{IY$iX-ikNbIf)OWS98x~Z zjIv7yI@@oS=WCdF@uS%sm=>L-3iE;QmQ#1HWevVpoJ}l0cRg=RFi8Jo<~IHc>dg8T z>>wBrb9r`S%G>mo5I8|aZ$b)o6!1}a?8UD{!;cO%+rPCh7ytUfJTE$b=DSTW(c)^z zHK1cTYydD|!ivAEc*(j;#^%JEY=cnxnkk~%DfHxw@#(ALU%6}C8vANRkVeL}J+O$< zUpRHwPB!-UjdFn>w_e4{4x1yinUd*daqaF}@#0}cRhE$STiG3fb@*9~5MXQnT#+z) z*y!)cI9x8$V$$9vClZU@PdfhIJ=7+I)VRFDYs|jNa@WL_ zyWe`h>~--BaX&UOd}kfrKo)W-e}DQ6d!2OPN9-MLk#3*`{~I;gqszALax8x7dB|z^ zxtSbaqz9tb2`tbHZa4BdRP&6%g_gB?6MS-RAOq~z-_6Q#z&^v(Gpe|gR9K^sjCcd5 z*V(4yT4glZKtGf;i>J|L(Iux^V%b)yV_&sE18G++gWP}D=3yy@b#ugy{tRP}fe_rth5!cDt zAU-7*d|fEC#T$IWOzaVNOMQ#=~H}+LgMiIt;LZ zP|4D6&G$>zjIQmo&-jkCrk7W~-^R$P5X-v(YuVf7f!Tt)h3mT!$1s8qH+M-o z!GDyU7H)s7z1_vCtg3Jd6O}&Gsm;wrVhg5HdX{wSyNc!N{wIFu`y1ynE#RmD9xlRJ zQ+{Omu-XWq*6=lP@5_IBj;-rOd&#uuN5`rKQ=SWs9zBvV2T0U@V#E{)qyh~DJYiJM z$>YTw<=P4o1-k04YAKNxAn)|syT}G<>EmUjPjq8nlMFYdi$!Z#M|9=~hUz3?4bh z3atoN`Vz1I9}B=^5BZw`{0BrcUw;-olaZYM4>vzA!l6^n5bAvyl;~R(0nxQR4(%&3)BRG?m6Wr4O_B#tK zk*#!;Jn-L-070`kKl)2kDd3sus&|WWDDE`(R z`^@1lN%|Ie4^tqr%RdP1`gQfTW$}4ZclgxL1Th{pUC!SG=YK>WQ)#us_OXpX{Mz<| zm_thZbYv{zd_fEGd$B+(18!Bk+`j~(tv-?CR2z7LUi@{>ec~)`)9F+az(j5H_CC9E z+(N;TfDMi}XogV3-G)1#P+xe(|FiCc$3po~IF0$*g2GR>Z~i@+vP^X<-g>9$35pgT zhH5NkXs91P@;^;3BK6mwHmF$oyGkjc(t^MbaZs8rX*u*Yjjc^twH8gMyaq0eS@twz3sy*5}eQW z_V#`^y#JkIQ=fbN{W#e1x$Iq8?X2wi=5=6`i;hWyL(M_$>8)HI%f!q41sbK*(kFVGJbjr#QtWPQMcFTt~t1n7;IBZ zpKgZ1t7!7?gN>UGHJ^HyP*@le4BfJu~;f zNZ(zleakU3omZh2v(hFDXd6e2rrRJ90XjG~bG9r=$ddrm24{~L`P zpExjlS32bD=NAUJ%S=)oS=g($&Z9dxh?;=pC{Kp4q7ZA~D?yfE_pv=|;T^oR%GzrYAs-W2eF zASnnTNcDg$3AFgDVNo`Kj3{0fqv@lMHs}BK6bJ{jP{2AcIHLzH~G- ztma5am`gS|R#)@h*PAU(`SI}U%TnT>Vs0Yv9tDhm`@MSC7z=P^OWKp{qWnAs_f6uV zk^f5R@IlA5AL}Cd4v8_+crPIUi~$|=eLbD5Q;9M)6H*nh=W}8Q@!O+>zy5OS${?u* z^GZIakN%PugaLv7`BK^t9cGlQBSoGHlOb~&!33|I{#A!SoG{)T?jIi00Y2&v`(ULg zUL%dF9hltH#X8}_Bz6kgUhofq>((B1bd<=GU*r&l7vxbDFItZ(IMwVZ_hSGeTcWL_ zyl4l>9$~~2vS4YX|76Arq42DUKceBSOpcFDCf5``JR>weD>{k8dsjei}$mjw*iwLm5!czZ%MQ2|v@C4Q$87rJP~JkG3F1!+Lpp{~$)*_FOQvh-q%a*zX&%C>Auh#QAnJ!EP-Z!Gei4`-moHs9;vClgZr zDGq(jp`oozUP{NQv4T)7AGyf_AS+I^ZNE_kTU!#7U6+gk_)xF(2UT^8jxBvgIsuz| zu@;@|I1~NeITijmC3uG##%Uui&2FAB`D2qw8T_xZ+yL-7kCqy)Ew%o%5>f-yC_niM zCL_jlIO(Ku9LA#J%L@g*XEYWePrai?B5~|`l|BLLMG%sfYg37!KNM(SkaihdePQ^I3B~ssy7-vt z@+Ot5;v~jNJAnFtC*-{VmIir(#&hqWuI2#kIVM*85Yt^Rl3enF6awv-{P_UFr+)dt$ov|BQ-4w! z$f7~2hp^r?1^+Zv7X>M8r)$HyY1cDuUoxsfCV!V3`@#rMyx`LWPzAd64$BPTQ1H>kQP3eL z!(|oW^5n0_(Rkc(ebsIqY4^*#D#h^+!(+2Hv$#LqUGAbc*3G?JjybneTVYh8TO~yI z`+jnuFt6s2zLhsozfT+TMsty-&)5LwXd@%oS+f{3x1{U-Md|J}unJObGAX zSh;5(82|hJH?8n2mwrpc7H%;2p-oMumCsXPn!ToYzmYGh28~*(!B3AubW3!eOI|@pWuLwWQdu{ zXTSH-8|=2Fh-jDD2Oh!xEr&0pgJQY`Vr*ya~5pJM&lFrCrxFp)Xf0OHN z0&{Y)0<)8LpyYS*zVbdeu0K56gYe~CM5)E+#|QNU1YA%?Mhr6fA`gOStuICnFjES{DcUFR3e`-ZPV zrDjp{XutR$j4tR%&LFhZo*du6ewRC43g@pfbsfh{n1Qc67y}ubLQHr(Xm2)8W~24< z{MhFqd5sSOo{$$s5a6UO^y%iN8e$rf==UkyyEoc0hg}`jXxg2~aQHG-a|k=5OpP1q z)XwhQ6c}O$d8c5dR5SI!dsXVe#XyGUI{&_&&d@OxOuYg)=l#mknaKtOZUa|6UuuK< z>eazBo?|mZI0%P8p7n5F@7`C1SSDAuE9Jv)g3qE8 z(s8qP{^uenG3@?A`VZDm{&=?gg4)EW^>trmJ9(F(cgZ%njOBlgo6e-qxfGjk6R|$*e5SS&#P^nOBi7k znSTQG`Nj2ddwLKqbqo$d2|0Nokef#ZNxC>b^bZH{Qi zy!|{P4n@R^AfA7S?&=mzE!-7xZ=lKbdfJjO{x;2lKd<=XTDfAcTq-mN;@l_sihAb@ zBgYgwQm@r@+@_LU=u6bkmP7W|uo(7Vwddp|wXZ z8NMiE-m656KmO@hqkmwRtsYM8s0KbRUdnC4I*B1aH@E*VB-DedJfh2=j|P}(QUg#t zjv;L5onIG3g^>5fd~$ecO3`iND}|TphP*asXTPOi zEnqFd96B0;n5vpu=73Y?;L}NCV_D`1p_{?ST^CU+?mN2AMB3o_R@ z=vz$C#!%$_aA9gycllh>%ZfK(!c5m4_-W zuLZ@qD48m8pg%s;S{5FXOT`w=2rWq%z6vV>B_BmgrQ+uTnKNPRw*C2a`}YGIB5{)e zQWh=pwWFVOLU$ShNM2>+t08 z=i$${Fg;0+yHh-vkzA86FW6J>pBf{(;0sSG6Rj8voPUG9MTW1f=LSGiaFUHtyswXr z|A8f+exYiKn}E5$d+7-mPvZv(dZYuf6ns3mGxc#k7?pPtq!zE3Mo?lUC*WU(b(1QJ z!Z3`a*JMR0mB}~HV3;4Msd{#rFUy4N&EeB8q#b?Bq1}Yb_qGS}mZwsK_LoAQ^!`!Z zsbKgA^;M^i`q>X{xp9Y|omKHtr8nB+f~25wJyl1uRQiPMy6`)a0bM-g!B!$6R@xDH zaNl4E9Mkdxxc3A7_yPA5=J(yhEBO!2Cr~%D*Wv7I9nVpN=vS+FOn~B*TsJ8ov?x;L z(V_+MI6{Yqr6;G`ao+hq2QaerP(oGl)-ca;P009H38jC?q%y(9 z=^A`Hwdq?lCE1`w`U2k-c8Z_BQ=mLjd&fGPw2-ZdF+X+N53HigT?+WR`dbhSh&Y05 zHv$YZzdPJ6IRObtMkSCNUvPLuUXq#q{ld8A6R#!hmfKV|@@0!bSDgL*UloCXrFY!W z?t(OCqQ9>X4Z#tw1xytlnyjz$OrQvEvTU5v>{=|R?kIgj?@U7N2Jz|3M`vQ>v?@TP zhru!r1@!g#PuFu{8{iO(!q6iHOB2NyK~%Gl+laY@F%_ePC0$R&>|*oFxdCMwxgPBY z@rzCH=LtB3W$*n6V^u#YsgyRCRc0#DdF zpveB?FrA99%sflKm`5VwKG}R-QvPX}7zwNM3gt z^sf9k2-^LDe8ZzV%$$s|eJ!B7%l{hua{%Y05aUZ+oaWFl&+=u(-A1x|0VGH^0V z3%QqK#Ezth6+q|MvPxCz!c{6+gBv!7!#YnskE_C*$W^fSK4h5{{mO3@by1>Dhke@uSz(^c(56Ii?ZP0 z+BzX6R27WoKH`mwT*-L$AuBjX3gzDGPbbTfys9RJHRM*5 zQjeF38&Vq98onb$p8Xb;ghaepF%|YF?&`Q7;YgIiPCpJijwqAE?>-9ZJ|a`?##xbB z_NXpmEuj($E_1&?~XBt`oLDu77 zx(4)zxzYJI#~2=Id6zX0QaLZAhE+br^I1i*n7C@_?h^BRdzs|4dHHJ0%^ z@M!8`r+7|tXCnp#YPWc@HnSiDWu^wMYZU_5vZbU0JH$ZrQ1m37!S*yKF_;E6h3?dVnsr_48h zDjLbVr2|@%DJG)*6W)NGJ?DMKpQbTt*reXDGERGF@LJ>eReNnVPdN2^Ks7UBe4-hL}Z*k8L@|k6v|2uubg1#x81DUm$qN$ih?>Fyg4(>v%fCG%?6^u z1Z=n_!+=%X{noS5WY|_xYOCjH!+~t-2nIst+|=#Xyi%nKg!tHbkV+9sNOZbKo#Ho# z#?xZ5){`Xvvq*Uh&u(CZ=ubJJ`6X6MKNG#`N8<1!fSIpcfRK?0@gB~M*O@!HI}wuw zhpoEcY8T6AZLX3QAsb}!SMTNV@&fLKLXIY9v5KEIX5|_|%aSIP0u_-%nL|fIg!ryH zOSx@i1=4ql-4xs@RohY(AKT&6jhQHlL(0o7PdEE5*rP93du0!}bkP)2igB?B>r{xP zSboW*?m5X=C`I?hCsdRK`|A*sMfT_G;ifywAdV!f^dFD2DovKW_ln&?hg|Z<1QPe6 zLScWJ?-?^QGk3DS_MB(FKL`~fZOv(wZ6zV!4N+Bp19{&3{9!>UOkB!`V;0~kn!!>H zpx;hcKs;x{H3?^9Z#mC8+Y%$$R7L(D z&B3eS!>9GJu)5^Rjwipz6pi&3ew0$Q&Rcw)b0c5{DrDlakcIG&pGHY52tvVrfmlReO~*~zx#VmPt}ovMmqzF-Q%?LHk# zm-D!KhHa1Q4!UkPA`fJAC2B&3^~?V|!1)lUDoNaUoZ*1zwy2x7Bg+e7Q`N1y2ezfP z?Cm=~((Qr8AqmXXO}g>dZg>#!^v*alb!bim+;`!Ww?@u_um<)G`fR;)x@cVKcDu#< z_SdgMGU8au0YMQAH(CtSVSTlY=awr!n*}~XK6M7x4!E4TV!pS@&9np%1>XqC$#q;> zl6TO`q_#uPIoQFdJjdcA|(Foih-u9#j|jae?2)XBA)2R;Lmj~#oS%8DB3irK=Z%#f1Cq^E_neG&lxevHxGqc9;pU9(AApFt|kN8;@{))3Yjq7 zcWxTaEK85JIvykWCDj2$Z*qS-?0&`<Tf=Rc3`TdyCwSa((XteG2F1@ts8{j9~IP+6kEi@a1JkJo7M!!dC^9uwcB2fD~= zBI!4$-b<~%#o;Y4ee|$mC=bbQ>oed2{>G7F3QcyYR!lJ@fT%()Db&v;VIw z|D?bD?#Y=kX7++e5G3F8B$+BwbNp)A^tgKfW?h;e8TPOi_+8Gq?9uR*^EhyA>Y?Hz zz2o@`GKdYN)-!CKcK0aQy2~}JdEx_i{+4>rQ8%@};y^J8yUna$WaP7$;}@l6g8s5P zfD36tZCsvZG>bQYwr=f&3Xq}#7?i*RXaZqF3mpUAcz_qTSNuAV!6TZ?t5cq+)ViKV zTN-vKxg`rkCSpr}7#B;h3e5Gl8Z_oYs!>oy^%nT`BVPWfcKY4U`ZUOQuk#>Et(aS1 zA5`GZEyG8cdvI9*^Y6NIdvJIk{N5!I(SFDOuX#7DYn@0r@h)^4qF39udtamtw4r^7 zC(8=^kv!8NQMO8~#=`lk!>7~4BZ1Gz^E}fY22AtCyBpAruE)29gFF66d2*}Aci_XT z4((d-g?(tu3Mf!blx!}OY}<$qRw_vu^rmR8_a%UyyOdZ$S-1})>naR5@krvulDbHc z$k@ppqm--dnyBVz}2S2*)z zSSKFK#(Sza9)d2J;w6L95(h?b`hOK}zceMKl)v9h?6_or`LNDW$pAJ*2VjFO8&f0< z2>MbHmW*%^dL=(V4Iuj48_`p#nIU8NL-&2|~KPY|JXhdon7{FkX$*D~y!- zi07Gt$$zu{NRR$!t?r0bs7Isv|CAAjTse-oT8=*5rjaN4@;#;qNN>ojIC_%&tr z*ZdaIbHQz4G4gV4h!^c90l97bhpq9zt`=%d_IpW}Jj?cRws77z!THSWMDgoj{@2bj z+(ADWhfM#1-&HeD%=u_WC*z0^2YFTBiNol=EHDR3*=c7ORYM@?i2F3lb_(_Pw^?mupvUUiWDd&QUHt1gi z3tS=%W}=0e9G0XJv1f-~!$}_5K6W1op#!+PjvN7qamOnS{pKQBhub-uTR$oC@{h@C zc}vz1wIM}=vy(sEPXsL$rRk#+@*jeZ@HoH8@p;6okN6(a)jAVdJ)NTTU6F>?ArgQ7 z;A;Pl30O(&^p$J7;ZFaJ?6ZgI_C`lqd2Sc2$zIM(QO~I0dk2UU4wRfECaQ#5?WYUI zayVM;NAQwlNhq7{o7hU4R!zdm+>Ga4VFMI12umeXcl%sZ*cPdS>#ITH5?iy)+NoK*`h%YSi901Y8{q{6zR9^eouuZ@WN9_`26u!WJmF&fay_Q##*FH& zys6skHpB0}wB_nP$~uS=?Y^3t4c+AlF6!bqO9=FL`EH)(rVRBKF{I1H3vFN7w#IuW z{x_Px45bQFfLE>;!}jO`(4gf z_uUcSVa!I}+-;0-MuYu$g`_z~ev|1uvCnYHaDN(%#&t%kOzRa<%?*&c@#*#j(|~y- zzv071ea}FTEE+6Un+yxq448OMI_DhWYAHQN1X+%+NlL5g{(GE``wHG%ZHK>|`fU$T zI7*R~uB_0JO5sBVWq9%ew>Z~>6aHCrn07GW-4O(St}=7=!ufVsEwsz?IFfhB?I(cU z`RO<7#6`T-#Uy6vi##Wdh{i==aMP=A%>ff*A1Q)DRUu!lZ6k@D!ELJW55oO`2Y>>~ zMQ4ZK@-d9mNNU-5qZ~ZB!D$!SfZh|_y^n{G@>h??Ffwl9>IgQ5jsy%P$M|4Iyar?G zl))#S{q(oqJ=a$&->=QEMF}hkZ%jxW|v5~E8d$N(e2!G{!9NTMOX~(b_j>-TfY3jruRnJ7J@&_r zDqG_Gp9l2#ZZ%7d4@Y zD|kI!h!=It#agk-vu`QP!vxW|)2MtLpUfYI&!d|33XF*0&4Je2*G)`EzSr7++kXV2 zE6sYi_BJNH9mA3jTksj;EEoLi@AV`(DjU))l}Z57(ef zv*!e@+JEW4aPf|VliK9s>2D_{YV&iRv((Prl@Q~b2N_FfhDo}Kx>qbIXp@4;|L~%1 z(6nlCHP@US-yZG>(&5B74=GUOHMd{9$qi;x))B!ZQIB(V_fnN`DG2*^kZ+YJ2qk$Y zTPFFia?M`cguhQl$MEPFGQ&zps^!61F@rfey(E+Cr~eZxTmVq(4v`LCP06H?crWhym*wJRI38^5hJ(U!h&&MuLg8J4s*1mw}*L_0oNWnZ|Wz7$*$!?a((b-_-;=k9-rx35f*D&p*gT+&sA>$asjUA ziT|vCEDH^n!{3?1o4>{R|AIfNnF8@UBsEX|(S>hCV&giOI&{bV_P~r^?m#p6yCv)#XT$r&*-659Om6B7h3}Skkd~_x@Rp@DP9w zH-0;!-Gb^Yt+CTj7c-fz&}I!)FOAOFX?s@aMdS6(G` zg~S$u#r!CJM0-hcaMCU#u&um|c&?X`8B|q{AU65-Y6>nXtn%Z;wF*g0R1UPlwn+-5 z)l)^+XO&<8na?ZJq~n2P&InTSl61oSh2+}o2H)+5^RfG0yi3-@e*x#6g4|ar?#dU! zhBbjJ$wy(3yO_{cl0CaP0^4P@6_$tK4%pPevKGK`Z9oY34>vAJ2tVW*lE_)7zF_w^ znr4Mh@Nu7=nz%z?uaLnjskfWN&<{}9z_WO@$t&=z9#&p(-`8;We)b50?8Zr6{U@XY zAomgR;Q^ck9P1*gBg0V27^P*)%I|(3;S!95szuoAE|#w? zeZ&fg2i<$$Ix3iVI{WgbH#oXOG*1C?Z>Iqf z7UETlkPRn!jxJJQZKt2}3q|RuN#W+~M5J z4p41+N7v;kz)oG4f*%sd{WNZj!dV5?90>5VB4}eJ9pn?}j0%wJy zu&L~?jm&py%E-9w6E;qQ@0NDff(XgibzSN_1oPq6RBsmI8y8f*_CDRC8&Ct6ycx$6 zraJtY;3xS|Io&W6-#A4U@9}~j$;-tVA#8ZJX>bO4J?pv+UYi~Xs zA~MaC5`a@P#^no-W;RDnvNNM3STeo2Ji!F1)nxQ--Hyts%pwL@2>gqqLaVlL9!!)f zjqqILmclFkNL)FJxk~!g1mvGg-25~KB&&Er9RK^mH6R2md^WxT~g0$oG5+2klWilvBkAjqGeWD$4G=6Dc z$tKfMHvM02NuT~2BSOBioW2l|lhte5gh#_oY`$=k33BW9E&#;xE~wH0d2HYB0sga( z;Rg@TeIt!-q}u13$5Z}Wm|sq?+>tt$K8N=rJ(Kx1P@Tc+k(0#1E1NL`#X5d%gFn zo1AjK|CM+a@|F#UR-|0Ky0k4Lf9y^ckKc~e3$vi!Fbf&o$n;|h=P($F*ns^`mdtZT z4aTU6O_9lWdH(nH8yDh!<+iu`{)FpK$^BV!b|5vW;r(iobqg7biE#HWxT;5f+wJ%q z{#hb@3}{eRroAZ`Zm6d3ZLzeP#3Or&0ZRUnd#kV{u8|^8aSneRD9Wm`rU|?lu z>$HF~`TGLC@r!OHQ2u@Hh2b-T+N{i89`p9a1J`iptZW}@hufHPraET%?`;Jq1!Qq= zWD5vrlf1G4xEpoe`7=jcz`R$ju73X*rKuW8&D$dd0NbANe7YfO)We<=)wyomfP>gY z;cwRh(qB`c1fKn=V~Nx)6OXvf)RQ5SHvIrR|JKVcV}r+o!d{uePXOt}bAJ61jkyQ- zlqY-?sMKF8`4l{#KY><$N3~CroR6B8#Sru4Pa|1SWX%UmA{+1B z2EU)~`$&}sdogI7@+73{IC?yY#COG!KD_5T3aKqtRlo7Epn9vY!(`&yTS?YB>eE=AFli1Yw)R|Pc8V=MmY6Hr+?_w8*u2ohkozSU%-cImk)pF z3e3J2dlWkZnS+_J%y!6CKRcFd0}il+1K{;}{a!B+uz>j>_w9L|l0Qn7ITbwMA&`;= zx_|_=)S|@3Vf1|!0eNiSTVl^07$D@EqI`gx3Ho<-;PN|5vDd(pjH+*{M> zY{z9+Uc>Cxw@^^NI?@{yRzed%hR1RM1(fbtzw%KsBOtvv+K{f_l61=;FeK;50SRfg z_k4-1?-jUqM&TKT@PQ<)W@%p-YufJvb5ILgY7Xs>NxOrb5vdA92gCvHgA`U@^>*La zytTxDa?%EjlTRYBh(hYJ7Fx*w&9cXGd>5$9QG4D&l$db=XrO~)po4p6N$s3l3c&vK z64TKw_c(7B$%Q0gZl5ty_`Y=8f5(k58!4>MY@db^FLYj?&jbnwBSr zD)l3%vq_uPqa!>P9L_K*kR!6{tdyeB);}${{iUv3&0mUQa=-w$NCSNw#}Nvque9Cw z(zKhhcZ?@MrMH6$pu^gGk$r29-BZ@AzaO!cCXh9(m31KVST7sE8}+hY5+dtnZH{b! z&`y7u{{qBY;_+7p;m=P!-0g@f| zW9tg%`c)`?e!m(3fn+(LZ6~Sx84%!m5j%T`>HRs9--K(85Wa*5Kwy+& z8&@o}=PowKh9r+=5J<@*M`*S^mDanXrMOWTHSfR(3vC^m!3S|`mn4oj7PI~4fIUwx zPt?%sxOhUj?d5cz6_;Dw(fgNPblo<+T?<5y7|xTR8Ym?#NsuPH^P5JbC^zC$j)*)) z*A=5c)LTgea%-mc<>tZo)7O4_{Es1<&Gu&xfSi<^RDq03MA|`CN>cU#Lv&LHoaCmb zgoP7qLsP^lQT&+g>+Vqutgw`kkJ-drpo6O{v-+G1RFY*mI(~-%n1?=h9ftsDV;mUg zEG0l03%CX>&WgUL9A?L& z(f5==Q6wBLE>`CNM+}%LGi9dy&rxOw05fH#%#@k(Z&3tYQR)9YrZ14(-wQdORQW%_ zs5ArLXOKUkuyB4#f_`8&Ilc^XoX^NokP@kzdIV*Q%67lA2146HqoEP-j(bPF!$62I zAvD+PGE^C?z(<`a)m4dF!a_C!#Vn)>c!6_7fcdNhU?ndQ1$MEJK41-NI1E&nk#`dl z90dls&mD9lQvvMZ9&3U7+@uXyON<_%ldGhG`Ru0+cw|6lAA95iFvd>V4=k552?NK; z@DQXosFO1g>0cm5LV}P_NZM{eyrqnQ1LNtj$g64b(D?`aLO{~MsEACriZ3WA zHIYQrTWj~f!hqQXPNAdcP5*A8^nd{zF_r1oKw;aBvg4Ny%t(aTd01ncgX@x zHS9yJo5R3)y{z1}>zA0x;V@@;0*rHAG_^woF;ofUYBCIDrH@u%l(ljO1?qhA0TpkB z1y+)zy%M0*+e94@W|_1BC8Q_;*(mI>%9BM$DWR0(PN+QC05F(chCRWPubbNrS0`^*+qX_Bnua zfTJ3awthLiAN8ZwpWVP}v+8a3)({3Bv6LuKW=i1zpPhE>Mx9KuAa}S!21wA9SM)n) z1khPSfqA8NZ1>Jl3{*4U2p;MDOrnaxwAE|11^izyV7oUD)c4u-FWGaCq5V4o^m~Ub zuvVbYxc83sft+-s1eFpXAvy!5%pyH&u)|6M%ejp?Gq{;fb6ijGP|l!4nn56C0mE@z zE?h@EiEwd!xRW72C8_g?Q_afHgwQOJxGPbb%WE-Q@B!b{R0v1@y-J2qJ2Z~C zk()nq@<-OdmjC#PSGNdUmm5EK{XfB}-#_(}zxn5|D8A^yqEj$?|Lm=?1Hduq=Q2#S zOqJ&PU~13QmfS|*8rL`nUWK>DTMay7r*{!JXSvq*Ge`goTZ_8@e%ShTk`~&42-Q*t z#8_g)zaBEyPhvpEl(=RQ@2#Yi5|AVGGl*L0JBpMe{%AnCgc4v#PICe1XOAoeMz|oS zfjG6&h+26Aq#4Q2I0{BNCBN&fI?rBE0)kZ1MjLpQMo=0w!oe|9v>Tu<#|_}W%Y+3M z9q9LbKpqN&JM8HCv>Po7*sIbgf^*0T=jTpG3{$0;-p{ZC{IrlTfKRX3zyuQ@+vug& z&QF6JQ9^+n)s!1py-S_tVD2&?q~L>+oA%pEuuy_TN*)2DT$MVYTUN_$phq^+2qdMG zhv<4>gz59VZ_lImIoBLfM)Y~|&Ib;NN#U|p_nLxhSoZ35WEU_Xdu0IyXN|B~6{l?c zEn>U37rZ-OwYL&vCtXay)UBz@xvP-do?AV&6Qn}gWDZ0V(QI@R{Al_|OMmnr9R2o- z2abLi?tJ9VpM2?ku;Ziu`>*Zz6ZpX4424!<7!cK?J|0h7BX7fh~)j=A65_svuAnU_BE;X{*f;UmAj z<9EIa-8cSjSNB86Jbe2>rWHaBp@C2@goZ-N&)IkVK6-G7Q3K+N8=oz_Qh+4)X+ z8rXX?Lze-@0|wma`*=`K_vYl+2MXj)@Q?u@PAyk}Qf~Ihm<6R6mnYJTS{pd z6R4s)E(eX^S#5+`?cW*P+#fb#X1UF~I@@&_ab_ovqzR-_sw4o;dmFrA2;UBE3tt2; z=lNbEj8}~pzrGy4w(If5uRVby-}vQ^{PKI?^Y1$Q(&wk(dyBqT{=GRcbw8+^dH|sp zLhD0oz&qog@=if;ENBXDfb8NXH-QSToNB9Q_l^uG5VTuJG6;0a0Cnj5N>f8=y_8t$ zj(TauN8<=>=zd7&zKp#Gw1q0ECJbIF%e?)-4eqlWD5b*z1ehSl0C?M3>K%gI zVD3RK3uTwe9+X{#-CzGdUi#!O!3Po_SU&#=WcN<)m^=jj1@FA4M1Pk8t&t@_LQe7s zT}=;K|4@gVh&}hP5!z0$5U8Y*49Fde*PJ0C>O5F!>!M?MM>oCi7(RH%^2A=Z%Wzit zRXFE_fIrn~(tDkgYgUcI6Bm+(A<;T?Zl*dnKqNP5|aJ zRv^xWtsPU+V%{WSdw!?TFToL=lz?5zI-r=Po|4dXJyK)+*zOM~Ho`=hO+Z2}aRr#r z^&Z1yMaQ{wI@9_XkS%lr%P40JOr6bzr)uD}Bd;xfZ6{35n_M#a2qYm9sR4N`hou?h z0#z~qbjuZK1Wqu_4xoe%)}kprYJl}dsJqHpj-dpV%Rm(a%mWtjBBMZ<{Y(I>?Y-Ma zf+#Q_P1&-XGn@io1@nOljxrypA<7wGm?#^8L3~@0s!(DZ>S(h8mjc0OBk+Da-UhZ& z?wx?5wxX{Wy$sdwu3lQv2n@-8=l6h5vX%D%uQJ4+QBdF)EbtZhe#WGYqpS%X-k=xw z4zKVz;8huthiH8BtHAf=+tgAJK)oRatA0lWPy)cK&!q_XA1M9Zd3h&+>A-)1V4#G9 zH$@2uc?SSqr;9?0gSVLATfkE(5CHxGcxovC-nMz^ZQjZ|0Q?gLM}(}U0LT^`0OWZG zfM|eEbXsUpsa8cwP#V|V>jlQQ` z2?FKiN*E|H=YZKUbq*+sC{e(lK^RWv0xOneuO4+(OR7nb3K7K%9RR z&B3k083w6lF84up zs-iPE#xALbV1Cdwm4U?E#GFJ7o+eW(o;E>nG6)B%(3tDZM~!}yKwK`Fa`&NLpA2|w%_(45 z8n};c?AM_Ix)`w2YGl6k!mI&nKE8AT0VQ;y#DgfBTQdiA;c~-{n??6+Q&klLV$(ml zdLK2VL)?y$A2`qdfzQMCI}xkjj4901Jg}UnnnQB8TJ(F@Eg)NN+U9Y2%yA$fDK%)I zP@mV8tOdv_m_V%+d##;SsilF5q5Rnv$o1x0f2he*7XtDQ0Ww&4Zpi>?X=53XW7wOI z_7}(Wc74$Wlr^9k_SOPDXo`kjJ;&Q>0lqYI$O411O#_|Op_ZhopfI47tN|7|(Uc;k zY?i$!fT3zOpB#8D7rF10Q{H?ur{WS^V8u~6rUxcn?%D>%$pVemKb%r73lbeO9z)L|cGB+Q%b$!c# zaPFc3_)=g@+DU`-NTuaOerV&koH2W@P5M2V0JbW@!#l%TqCm=ef^R^6jvQU6^?d|* zEKOuUq7q>Y=s^|4#rd4S4scfBu~{yV0y)lRvkGqY>Btm>gS+cFK+i229T@vy$PJ9uPUL7Ic5qyCB6*X z_->|993-l_TE{pCjLJ5y04WRCJL}?JtB*s|`jAWUvKXC*_5tIJlLYE{AP>OX<{ji9 zcrm}xs|WvB=#qaP{A{Q=lz>-)&e~UE@Js*U(BB>Y1^E4MUH*sPe+9m^;J=^i>4(X! zlS?zZA+oI~UbGZstIU@dAlM??Wh-#Y6xQQ5UxY1`pQWETsx+JnB;`Kqfwj(k`tK+zVQQHVDoJb@Bj$NN_2* z1pg0v?;jmicHQ}Y?p09~)zz}1rzm=A1!D!X7=j6AFu{aij0qtOCLN|j7}6n_5P}K8 zZA>thc?8om?hry4j2X-#Jd7Da2v%zdR(K575IwA5SyqTFE3&M}imWJVb+ud+MNt%2 zcfUXOK2@S^XV$FoWUaSG=bxfb-FweHKlj<+@BZ%h?Rx*#r3>NYZ=d>ipZy9PeDtz> z>Mvk*YW2#0Hw^z~|Ex2!=0WMY(o1hU0AnwXtr*(~j}GVd=gvd8C|njU2Y0eZr2qgR z07*naRKL!zE7=9!K5w622OQ#{_bRZEh0F!ga)#qTAG;+5q_{y88056|mjXS#WXOUX zGQf94fg9OE7d?!3IJ=!DR6tGIr~vw9Kj(oAcjYEf#tKU{QEqd_zpG}VC|cuUmAfSj?(}P%1KLUl%oMqi>^rI z=t6C{Yo-if$^|afgESiuHd-JeBy8WhMjV)q@67{Vq=ItrW;5)SgMY|BT5W2TEDNJ|JU6 zfP{_gZfysdXZ!k9+pjAN1QjC)N-yOoa6S#lm>|1?vdC#V=!CIDVJwV;*Wle_7$#*W zRYZ0{CiP%trVPHe8DKX7FeryP1C$e^4QRF%;jXrU zx6bC}XaQjCE7+;n9mm_PN}5o?e;-WH8xD{n57dyN3dj?YJ$Bt?dy@)lzYw@!>qCH3 zZ&GQ0pK?|MaEVf&!H60yUY)HUy*B@%g_X?_543-MYxls2$;g1c$q9SjC{SVbKW-;6 zm)fa}&;WTX<$?lLNt5=!%x-Iksb+r!lD22x0dhnc0p`&`3`mL+L0xJt-+(sIJlsyX zX2{yVtDtE!;CfV?1vW~7pyh2u2@g?Am^J=1p<+@Gr0JCDKskN1fgCi&sLMFQ zoZg{~b({xsnu4f6hnR1_%NjAEpFTMR(m(_KK!bOg9C+9Kl-C0#yGm~Ojo=M=gI+J( zxbRmeZ)}5|U;Mq_`N%KB#kw!dyf^~ij()qZcP)g^k3Ao5fM{v7GMWGx4quhqAUDF} zqN%|W1;qtD1F5ALm0l`=Y7Vdp2)$~uD8bq7JG#y#$bej+!FvH1VuUJmzBr{9J-=zH zhgO=o3G8IG^=rC7DAxXW5%GG?TJ5bR2fV})R>70iPnJJf18+~iJ^J<`*zwoD_t_o) z4^;1eZuGe;5ZnzKgInNV@f-a%U@1{K0nA_;i-0^)Z#KF=IZ)hE%oqVC%Y2j&n+B?F z{WyXuJDq1#QosyWd5eIIber zDlI^UR?Y!=Bfz@-eVvWxawE9pNlFsPODk>Ko{|BkTf48f^M|u$%GpN_CB*ky4HfXm z>Y20WRZ;6 zJW$SbuL>w*y9KhO2w?2?*vQyfc+ilZ@t_RuH{GvKZHMsa*b8I3L2gQelmbgx#Zi!E zy3Otwu>I%&4Zut)=?2zP#$_;7BIu!)GGG>JXU(w)@;;8zhOWD(fGW-~8(2sk5j4e~ z+DqCGS5ZpFX$EKm=5vc%z;e=TLj4v~DFm<(qUmcwG+AQ}?_mjeGrdd9gGgT_8%e=) zAFe+76aN+%;UBpUY~we1Hx#7h^W=CFc*0}(9_q)`bxZ;2QB<1$ktjg^fH(ODMWEe9 z-lq)sFDe0yU?~Ck8=fWtJPqtWohsn_CI3}PAXT`}h$#RRrT(O26J?@Il>gZ>UUF%CDPa-`khF}Nq?G26dcY{1s6^E3 zK$1bZi85*X(Ubr;KpdmhF;eIAPQDAg%BSUbApYN`v_}s^V#70grx9;TsAgc>NsJ)NhA4q%%(PNUqS7Rb>`4H|)x2VS6zBv4P5o4_r4 znFI9D&kH~&NlpO+Twn-T#}+z)e!5u>vW`p!HAkDxAnKX)~E2xyhHavi*iLcA(=fShB%ZnXjPdQ5S^ ztc#qB5D~p*lx`FVfdcTvkhxt_cF@exX^xdjW&u%ZOp09r73Y)+3|LOdWqcqdSGj{a zRwKY-b&q)q?e}?e17vA7U?y2`{b4oIgMG9h(LWQ&ahE+n+5qJh*6$X{Dt+d1bdew6 z%ieKq;2fw9-VI19&@R1P1EQ4Dh{{{WK^o2R>ZJXm7C9eff!*P)Hb&8b2{1@M0Wi#v zU0-xWjxWyH)ryOv%v&z?8oGcui@1aW++}DaLkOHiqhIcs<1*xywO5V=8VSs}esVb_ z14d0cw%htOM+~@Y#EV;2KbLbgCr#%34H!@S7_ge(q(c8gE)f9+SZVbglvaRo((XkF zN+TYcDMo74+TRQ`ma{0qp^_+ip9)%0LP!LS;0Bi;)xjnz2|frUE%$c0{eM!&M)`@Xjr(fj@MBY+>|y>81P?i4(Gsf7OGrojzD^Vl_vRKKF(3>$PY_U zhqgxCDPZ2uEONjm_EQZc8RC-FrwessmjRdPRcUZm762O()?Vaz}qJngdgRKR}lOvE?=& z!@|sW^|@hp1_k{5ai7J%zzzHTZhI~$Py{f{S^JgtWZJGu7sjDqxX%bMN&_tv*CR)W zx@5m^vEL@Z_K#`Y0Q%V{Bd8-Y0;ad161Cb6fz8W%bO0GqN#Gnk_~VPDh2%)SX8=d1(D|K~ zOAMgW*-8-7@t?7N9x(tnYmv@F3@`+olJ#;CCe53ap5(*h_~Y(e2fS8azxcH%y!>Ma zzwq)uz@NV3>`(vcyP>P4Yu(?cU`lRE>6B8K{8DsZbT@>{!};MNkXo54x_^h33wAL% zpn|=!6O}Z*48)03fhxh|!JB36KF!`MPNdND88mn586ZoWoJ8Z(rUDtuk=tuZ1MM0C z%oV$CR3pQmr1G6l`al+i`7i_TZGG>`g)8Cr|KQ`F{rykCC;$AD|GDlnu=9oP4agmOHo&-gIxKmjdsgztYPQ_nhjW@1xdLQuJf86LGl)qC-NgL4IWD)g&Ir8GB(BTs&0c53Pqq0vh)R`*HvV(==_p0z_89{zZG62|Dc~Mi(jb;J+C8$j~V*zySM5qQs+SAR`?#q5x~k=DY4UY5}#ACW|T>q`{kI>qZ%iyv5+% z@v>eHykp*3{{(nTyk*{EV5anO4W8_M@?yRg9wZ)ax_=nP%7dY?B-HME$L@Dj!!Mlr zg|1&%0>9hyyT`V-!zaJ?$v^w#Yp~~)z5n-~kHE6SA2_ir4J9{9p7%FHelUOa@eZJ$ z^K1l$X(tNIqKdNOe3O^VuIn6UCppVXBQd+=A_~X4HMyMP-kPx4?m(xUT^%Xh&+Sjc z^a43_Y9pK{ORj1e}~U{e^ugW9@WG?x1#411`Ny zAteSGYqyxKJ2~sOJRM2^(DuU-?S=|gu6_nO{wQaqw-l)HcIY}pjw?U~KGh%!!oe_3 zaZA7VQ->0Cqg0~6x3(MPK+d5`H&sTQOVY}G?+cH~OL+(-}b>!{-9ToxY z6FQQqbfETNBamg3O7uJ&0s6eTMA7|O&l}DnidcIpak7_Vguq=}ct~=H07%Lnv$LW=QHklSJ);aq3@%l>j6nAbhE17Z zfB|4W^Oy_KjnRG4dGKcEo8g<~aQ1y?zw)PJaQM@&eD|;imm4m3|9K}2o*rB{coAX? zr>u)jhsgEFtw=M3yj>#cwEoL9*p5M>@GP{k5GFU73?ozg)$Iq>GmVU_?1 z`i$u5D5s7vX+#)F%W2>`Z5#(WjWVdg6BJr{RL7f~GXO!$*H**9SlPE+{|wfAo|egkV)LFPH=VB|r27;0`&i1LY(nN0Go#d}72>L!|6H z+QmIoNi7DMg!6##3)ArBGVWlD%IC6pGRh0u%Hyb4hQvl33SqKZZ{EwBZa zK-d^wl#B2vms|U&7alKsydZxB!Y1hvA7l@s>;$me@zUEHPT`OI@)seBEjgWK|3;Qg}q z3seGGQhXBy%Kr|;KDqxEN&hD*c`r^%|3TsNO*$wBIHh?*zFxdu#uEX?r3R33QvMFu zm%jn|-Z+W>r<4Pv0Q}2Wf%{UtuOk3_eOx^rj8g#k21Nyc3@QE|X+Dgk_dYT59qPX+p& zpZZ6v2=Ffz&sW6&-!Cc$l=vl)$uWpVCq%(L_QC1<@$@;|K!Y z1Zp`^Cd!YbOiZPTGEpYVMETJb7jdtKmXm(UTP~>A`3?;f0DeNoctnw5Iz%sjMlsiv z%T?v1w%*In*i(EWFlE)0FHZV4JhSVW*JB?6FXuP-0dSrV@Y6uRcX$((e)oYqa|nRh z%w!Gw$*{A6|X98J;W+%Ey+2tfhf%AZelo$ZF2t(LzMDra)*ix6jQ&~vekgVdv;)RZjYj)KqL5)GK3N}8c~Nw9GGKAZU_AL77l=&#{5ru6%-vx-35Y! zmg4bSBgsW zV)>{;O&#eGFMa14DY3I1;wE8Zx_sJ6XqNqcwjA8_L92ZIdG<=(pTSmO_O#)e^ zU0bcKEA8N)rkepEOQ-ZxbdWaL+g~WOzk5Ppd3<|4bzJDk?zAU62M{=CcNGiJ@#p%W z=rY#&`>2A5Mv`d6O_@311AL2;3ur`@2?8J`^#;Br?Ow%Pu@Q>WrL8K(Dre0hddDP~ z6ZU%-!Ry2>eK|)6T*Aet6|G$(MaWHUOUsSuo8#ZTb66k+S-xYhnj+9wYW2;q#pX(> z{Uxwm-4SU6@}$hc>mU{f&=-4pz@DggOxd@)2DnA7{>Ay=+CNUQ1ajE`^iJ!S;{Dx> za?}QZQg5lbwCF|v$eY^2YlZu79&Fk z$bih2mc-dczriZ)HEhu5dRzHsCaTsnQJ`f>#v`oPPt9r{0^{#yO7)(=B!Mk=35 z!{mFh*^_I)Kke81mmoYDo(N9^-Dm`KiYpd@rNDo=0{?Q#2tIZ8KApBAyYZQ4z@&q( zGXRXrdF!`?wWnUc&wyhtrj%fS z?Eo@#aRP`^DVu;S-LeT7=Db`40@89780Dty0J8LP4;ZD9c3@DBaRnHZw3*X2}ikOZ{Q5AI8>> zy%4U0{FeOo$NS*%s>cf-uY@2MWP)m_*imu%$IrsgtzVe=xd?oy{zG+}PQ$@Z9eU5F z{u=g8`oI3>lYa;we6;4zKllpN&i|>p+7Srj;ZPWZ$2T9}%(a1cibLKd@FLWCH9(&% zmPx_E^;Jn?V&u4s!xku!#V@ zwhkV&=Q+ZqOI72jVLlOCH#8R4*@Z=5JVphOqff2^19D6*16lfQorp1rDs4q6?k$cO z7@>^kt-d)RW9Ndo+7{jtRN-sX2yk(ueho++06DsC{VAp}YC%(K#DIP!B+5&cM55JO zW%p5u@Bp9bcAcKHRH^3zTP#(GvwwW6zY>VbsH6>OG{u(NG>`=%Qj zcW;Tk#|&W9a?~H?I5}XD5gRv-P^WV=f^Wn+r4sfU^*mS5y9x`xcec0M_4@8RrI{=+ z%!e|2e>c4ZWuMR@TaTV8jUGH#kBRh*>+k2z>>mmH1K#vWuu}1p0~4 z4yGzmRE}_x_EiYayHwPM0e1Hu#O+i@-gG=>j`*jxWVt)%g@RKR^KB zO}D?+Qt2gtUJghz5c8&)JzZl;8-Xbg1x7e=cMs*5{ri}X9j^ksD2`z7XeGK{l(NFk z8*#6c;(33O)jCRG=e9EG2VyMbA`qoqhJlnR3iR1^L16^zem*Ma?YSwyr8C56&=9B0 z_Ju}W$K(?8P~DeOV4?b3h}e5#ifJ(xa0$rLLQp6r1~GasGI4T9uljx+*u!j0jJz$k}gD|l%2rOFpH&( zqABi<0%h!A7^q@7{Xh?KE&-=#?(>GUQHcC6JU?yqaRFCO0pKCu6Q=<1 zEtCMzXYbt)Jdz>-V31-egklPSq5{Bp0zgp#Aa4YKCuDe90pRHr0AoA`2_=*#JRSM3 zYgLg5@Yaa`e+l&eVWfZ`7TET`sJK)ClOmDGGYKUGl$F8c*yN~ws&arM4wOWEe{xI} z1SW_96J?_OkClljGf^hWM42c*%HpAhTaKc^=nOg^pGo6>>y!YT0qCyJ8UY|JYLNaj z|G*XSmS|+P4A8~rApVQ-Hz)rSJo_7ox5tlw*W#b^^5D((e%hM_^k@!8<{0#{7R@2n zgB~OzL>L8fr075;TGye{lhsz=TR=BiYJrWcr3)A!#XMjZ)occ4a-M1+%WZmr`7CBN zP){3Oz#U@j16I(+QD6?e+yoA@mqkE5mpB5lg_~RkStf^M8gPc`vH>K)UP*xDr9uWF zm^$`qFaQshJ!pNf62`U#JI2-mJ`3mquZ*myv~Pq9K!mBDGW*rR=py+`Z4Y!gXk7|` z6c-K1a{!ng$UDq2&_P-wKD-4C08wg9#$TD_oj56M=LkwEQ9zE$G9bYMIbi>*j&Y5= znTnIP%}c*MebmOq_=xL6xGeCYr$^WX?LdrL*^eHKD^N#q9+jfkgRw>eCA_69K!IH) zF6f;btz8Bzav)0FasJpv zVp{DN&Y3;l(PhpNslzv=f{gXsd?G+4J3Mt>>jC$uIYOJQ=PJBu8X3rWI{+scSATD& zImkjIfMjX6oUEtmMWqj;)<5Ix7!Zg$&UR9dI!r^H6Arm$HLo_PG~v}r7O3EWMa-&0 zaG(9oMH)v*5&(m&ry2;&k*x79c$GNm%QCV+O0F>vNOR4b52TIZ?;I)P?{uH*s` zr%F0d2YVFcv^ho`@EJ2`*k_tayv7QW`099$m}5p=_SZx;52{#i^-C8Vn&*HJU#}CTK()=9^1{q5Mz+n= z`+L(+M|l9Wlfws+=BSR~7y5V_x(>#Hl>NOyt{L%Xq#zmUQaHGF8U>=Fgs80L#LXCB zU7X1ZK=}6jyk)a&rjAme(+B}EoJ4+D$Ss?)_l^J^oVJLVtlc$Y{|e2C9HEwCL{U~; z54+m9h@7H|fvaHv$>E?XCqg~+8LT7gk++5AphJGgZMtCgb! zMJ(dE(jr)*rct1Z9?eE97%n)d6|l+5Wir4JOIU(B0K?+_<*Im>mLfe1<<$k-ES==_np_I?U}fNw;!h&RUoq-)dy zCpaUoLU=DM4J*N0&{2v#?q4&Rh`IT?NAARY_yZ-3!p(Xy6 zT`k>^kL3sRWiaK1DRZX;FjhHsB)AS7kV*~#HB7T;LMk2D?EnBE07*naRFyh)q?RIm zOvicFR^JHKTm^E{Ew@pJzbauk>1fxES}t4vb=d#M$(t*+l6}Bbk}L=Rq!;t+!N)K6 z0~o6xyE=9ao?OhI&tHMy_LJ*D6Fj$}df#&!;kSS9w;yhK1V{e*$j|=apF!PM>wfnW z{{cSKusQdkCGh^PWdqCFVfyiR`tRHi&n|y<$FtiYw<@>w@jgiJe%SKhCIp9qFersc zUF3G;Iz*}>Rgnbv1KyyY1nM~I9Ry|&m~&ing^zI30JvV0p1lL8#IOUKeG1b4a*82_ zP^AG~mlS9@#Q?*oJ*7mdn0=~Lwj2F{_0O`A(oHYm2mnTuaKr%mZM}D3O#~$rR8va;Okdp&+9u$ncj1S2zPe+{82nhpVZI<22{otzP=4*j=7 z-+bkF;4@7p_J3v&-fVkw;LTQuwNLJeb%NLH^?02S_Jq^JS-^Q(qy>$9E(0P4xtDsI zEW*0S=0((iuMi)^*}xeCwBoiNC#jR|_BV~pPuO~^?UAzf8NmVOzS%$>#8D-eZooGn zrCWhy*=P53Qq+!^7%(8+Kw26(3sh3WRG`7ufn)ZZETIAaQMmx5IDryu?$AE2J`Hc# zmqxi~fb%kMI?yY-EJaC{UR2p6KCZt5T+ZwfSq}`#A=w7x$TA8>a)6xKL8BHiKf+6P zy-SETukfY@{Yet=DWwU>8Bu#gHd)1?4n<$J-XUh-T^BO2x zGkMk#1F}@xd1u(p%~9`pyLteKFial28rG;{0CNq{@{OPu7(iA*6UbFgkpgDQT|3_; z3=j`-Y7TpWti?9ZW(GcZn=G+ZpQRd$qRLQFLaKo-1B^RqwC4}m`11?)np#>B8%qIz zba0R~&?grNfEeZ0t^ud4T~v8PQ#G`3Ozjohfs3A7M}SID0c5!&7lE`iaNhnNqZqO6 ztYK&I`9wGd4t?w3S6=>GIQ6~H{`9H$L&v<1NXIVVHuao^ z$h}FOk@GONJX{E0MJi@5$m_{6j_a$#qz}K|0?hs+BkCWA2&O|$+J-c!1YfjfyZkh^TA5oy+?8mFN-ed~nFE2eP!B`0i*@FG<{4`E+K$R7fqCj^G zdXCI^F^~ghe|HpSM$)c-v2c#7p{VT8Vf*7P+fPEGUO5nDn(PNEy$uWlx4mkb;mJ_` z!jlSkxHq#c6NT_}_`=ut!1=%pY=*ew3)%0(5c8_R~14fE-)N z0Qb1eT_B*t<^z^G5#9vvE|rV`?VRBZO#X|>AB`@Cw|(f@>(Bf=gg+O)H=GUZ@V2m& z@e%wQIscIR^iYgwcR;x#2DraF$$Tf(KQ1KzssxafuLCLGkf%}u$Vh<@@H8=?0QAe< zaldy2g7K37ZBKs}QveWq5BWRbfs9Hgkl}msbP53V%VtUQmJ|T;g9reRE%2)t2&M`E z!S@jWiYWlb69C?-0N@CAKPUyj7~>THbpFT>B?QP@KEJ>GD+2%jQgI3b5mOF`MvJKf zCP$SZFeMg?RaO=W0ws}>NG$f>zxPC$DE~W`2?D@GnJ5!wqWq|fhi3goi&mq)t-32VfXC_Yg5N^{=IgsReBItn+;5rQ)09Kep z#vBiRA%X_`9#RB)1F}p5q6A(k&`T(J5SME-XYCTD zw&37*hj{n?p}mhv)b>a(;8V*nAkGr$L*dHUxaYglNHM}g=as@WX>J)1vPZJOs3{Ai z%+(dMdPUSRMJdZTXDz4_mSN!#>>O($kd|ANqKXPCfvGu_E6i~a$3aWi2r zfanUlPFrueT~{2}zDd$`$~hp(JrclNC1!Ys>^e(WPO@J1!%zm#fr+7hIBWi1dM%qPfM)&Lc%6U{7qtYCefdLARFyQ7>V9yz}Q~?1l zk~p*#TpgehO39v`loFuy5XOu>3mogF*9LZj_z0GXge2Ch< zc8?Jh_*Y5N7+DJQ%|HVs3`A_?1VDxs27x&J+mn9Z49buZKe9(H- z>dy+1QfJMvT}BFZ^etgTpJ$PUU37ySwNxBQyZ=>Nub`hkU{sE97|7CLiUV!jLlseC z6p0YM_S}$yG%6X?k*g7?`(z)`Yd~0FlIJf;L}DvVVQTel#-HNNYa0}xh*)51~+%Vlo35M+x{ zY&vb9DP~soX-6Y)2Y?h8Ef02tyC@-N0O+xPv&esqkEFOBMG1^#RD%Ld3OlEz!2mr~ zx|zdl=7P7%TkWj^zs0}n-vRHuf6+e=LEG5vvAgi*tT$)Bxe9`^pflJH3zq%t?gcks z%NMqM`nP@^cKyE}`!65;W7t!&=ev8p4!`@39qjltomD`TU)b#@VCe4d4(W~|q&p=9 zMEWl+T{9qpNDSQ}4N_7Af--XZ_>v{HC>nC`9Vc7B0SBb8@ z_F}v2#Vm;I56_YD!iV$O;gbhG#8N(0O9#?ClhsyYv~8=P}1P# z+OxMShgbO5Z780L6Co7ybkK`%TKf;I{Z^khWh%MoH%KFJfk@u;;7I^7hb?j3{NOb<-ANfIwq&$t3cs%~sSWkAQ@|JQ5g@d$K+^s_d}e(_i2t$J?f`_& z>E3j&xSt|Z-$f(^t2<-q3B5|_cw9f(gW2pp>aPR?9;`NR0}{Rzf>$}-L)zIz*z?$r=ZJM5^|ja}&I z&ta|PcV)xl=bW-O9ufL?A9Q|B&x6L%x9Fgh>}{9VxPvCUXe$0w0DHD#R*woabLYqt zmA|B75q>?=TXYdzUrXQR3Ng%?|GW&Ir@uZBm-}Zee`k2Y@#5+9SHcepb7Y9mmgyDL z`DT7AB`v&T$$Gs5@b+sr*;^iH>3~coLH+1uNo>g6t=31)*k>#@5qeECbz(DZQ#xsZ z`rI*{y2$H-xC${XjS=(8Y+yYpbGv<1Q@Q3WX#?h!Oh}>cUt@jyBK@N;#49BzpvABM zJbb@=_AuryJ7%*ZKx{#-U@nG$z0MLe&Mo{}fNhl+jKd+Z9cxfe{fRK{z;s>#OU~0_ z(3q6cH0V4&c~We^*O6;a0*kT)vSXiZilxje9`czRsU{02(oq7VE@(-S8+uA-m2pU` zHuqwvh>_ykuEG?agY3C={X(rj{9K5ooV4U{*Ez#4jjxnz#&JA|W`SG^e@Syo;eCK+5>Y7Tyd-_abL}7=WmGW8p@ABU-omFL5NtSp zf8eBV>om!{^xr|~OM9T{f*(bz>{MPy-`r5iV}C^TBK3IQ^K;3d6(a{n3--CQ{E!t5 z$D-H~iB$=gd}=+-qB{iDCzkW=YA~4%+fI^|szBR!K$EdZh*zD`Lbh340@Ki;_ey&f zU)MqQG#^lVSj`Z4C>DGxF82^;njiT&#QLx2DY_bcz*|!<%)H%CSG^W*4ti~T>d;tI zqzkcCyH#>LxTF=cmv2W@`^Vwjk3F2FM;^-2&RO9K=KaY)-#-HaSyG&ei6`aW-6-eI^aCg?;fbhQ zzx~3~&-jCo@JQa%Gy|hXeNA&med1`rR4WlkQVayu^YwZomls|+0Tb8D_iTZT>JBYiy;#AmU+8uAoSp^5~R=t~l9 zrdMyT%pCrW+!!l1JPidTvNJxL$jc{;KCA_1b=^1;H|vbl{b1xTlDJ^l;Td*ZzNZs@ ziKQfJsj%$|GM@BS=3|?Fv#-)&iWS@c^?JqCk(_2_;E?0%nfK~r{rS}05R-(Q3Ar1F zS)Z)|%JOuRcZ_wr1y|V)iw16NB*@UxB|CxAPci~D8F|oguCwC6K2+ID38ZUGpaixv zAa;~Y*p>yUZY!8zawo%X85xCwBl8Y+yQ*rC%L{$iQtR;X6hg8 zV9lT0L93ZGr(DTlv}^8tL2sAAFV;na#NqB4lg>6U3$sqq)ogG#Qt1^`RIm4)5R~9w ztl%-tidmmNqicMvmv23J#z^4A&T0|*t8Tn$;Qnl%tc@IYboC}}HVn<@9c0ZY5xi9& z+W`H5K8yxw?PX@P-|_S948`4)id#x)SbJJM}ybydx%f{&UZ}&@20?woEhju6G;$aUKKh} z1D}^XPXx*!nUyYVY$_;02=lrTfp%opqn~TPtYhFnoVWdB7Md1B-kU5CmF-PP!F>CY zEo&X}&UE7KL-pv4tXu>OBWt+|iKvi1(^xCw%4e6?-xkgjDTg zQ`A+gOR4%NSbmqcnb66aCm3}qh%1sIwvv#Tag>;x8avVg(v&m*VHc#YGk@%(P$evf zdZ)NKB*(2^D(d`V|L<@J$`vpOo9AUAz|CM0F^I;B@|{#j{z7>g660W4-}32mG2OR7 zYXI~0bG%hEi&L$ED?fHra#sy+la#KSh-O=G0=+UqV@s9xw2O6Vs>HIahI3#7mLT<* z(jTtQ7q#{3liA3wi6Vl1C^u6C#b+SV&q56>6AsF1{l4`jX-bk<>`5tE37>CptOQii zgF#Nw=PHx1{LF zeF$KzAQ)e@Re=xDbd78w0xU=jtuTMgVTSVf!Duh)arzAv$TRE{o&MvL+Ev*08Qv?K zM6~DdOtzMz#$9HNi6~d}bSMyIi$|ID!Q=Ku@T>5PAv#)kS<4bOfX|bZ6DJ6y` zTI#6&ip1s_chpo!*tdf{EQ#xzh!+g^0{5HY|E)G@3skTLzL*0gCbNMP-7wuhcz55R zfI42p86zTw!(;ukyob18rTQV(i8k!DhU@=}t0QGn;atxJV-sa6hc#b3ZXW~2}4BKvRExF-lK&yM^}SKj>UzSY8!S;!BOYr`Kbv~RK( z^q;x$^BIxD|Eg1!b+7sF&HjJ$OUMg~)phHIJMW+;+566Ug5bALjy6vxKX2tTu=X#1 zdR)(xDpXsy)%kMUWj9>W*F+3I9u#8iujrqYZxbQh0~Zh-c%A1qZ|Xo@bgQDyXtmuI zYro-1JfWHcd?$|Anh$I%hZmQ(ZJpA;eU2dl*)A?{prj7Hnm{+E{SQ`n&iUZ;49cxN z|BHTzj4oNl24Uz$qV|U^1g0rS)bzlskYhkvHz9Y%CnV+YPs-&kzGjBM7dAp?*Fi*a zCib)Tm2yZI?eWM+^a@G}16QIzNFXY#2@cgUlH{OnopZ;g$J%YaDXJi&elDx&QI|xw zbK1lnyYP1?D2{<08 zd4SG#gPE=ITIpJw5}K9RlVo!~DV6fJv64h=+lq4Jf%Edem+qN5pg6Wd?ok{<9xE&u z^1dr%*FAUgr|Cf)otL$)VNX$Ekm>uWEP~*ZtChvOt>)1XAom&B6j=l!=yZH-!PmcT ztFsbA+Es=1je&bHM?GFUguxxhKkAhNoj@wSMHEkHL5T3r>uF6OVLu=ORY%*X_QShe zt0Bh6Z?4^CD)f{*AtG|hYVfZdiOu>aNI{Zx3Y>Qn-3-58c!AI@d}nw-y6{C;vJnCg zHX3&D@9IS`4*tXKml^yJlArG@PnF+NPc$$r_ziZ! z7|@6t9j?OV{BkonK$@Z>J9Qu0iv0XzM{de?{k7pa=?rZFp)P%f!33rS*7(ATlzbld z+B-sIE&2xD$!k{){w7?oV8g%4NiRfGq=oXqtTQ((h1QNxZOESGEX6>F2|bAxc}3qG zkg;7a0xmN6^#Z^7KD;aD|5K!pKXk=T^;Q z5rhLN!v^I=+UF(lH6rqx7%oRHruv}~$MnpiZLH@xYH&Vq?N3aNgv z_GB@_KtH|qc+xG%6`hTDt0r7mL<2*Xj4@3IRAyuHlu{ULSnf)HTrm&6f6ZjVxU(l! za4ZV#16)!q{X;=aJTTRg>_41tzoSE%?I!yoT`) zfVR;d*D$XF_0V9@V{+ke8pOt!yqcHDtlh^8VD|mV_af(y@#>y42xfgfN!AqpyQ-|5 zHTAhHQ_xl+=1cgVv3ynxW8EVb7k4EoiIo$cs^qBUq+BHwiHK&nMV>Vn-&K*-N{ntmuV+MS75z;O{~ zzcfJF7EOx7lVGpyy+&C=K)*cLT>#2*B1=UsD}GO6UCOz7%zFK&{SEPhdxj89TKBE0f()RKt<5RY5%hU^D^)U{YnVABmzo@tr`7|3dX+$ejxA6XpEQ!5o>{) z3CAK;#)|byV4KhnVx?f=ol=k!%Mg1(0)-hGN}vG_;rE2JXy*eTzjA{2S`}%Xn7g=F zm<6Z7ah6O3@Bj4ku5jaAKm84QIw`OJH}cQBrt<68mp)B}PIj3)Odrafn}%(>2)k@Q z+9;Ah8gTn~`##t_p9T74D1|fn&`4sPV+EPeNT^A)1pb&{YGSfy5M~l83b4nJlbEE5 z)>oC=H&vN@F67iG`FeN6a2!;rJn!jyIUAA}z@D=WS6rL^v7P6A)Vkfi%-}BXkx+CF z&TeHjRLHVVeYV&YTd;Q*{YgklDD8@HC2+8#w%Jkicjg41kL%K5zu$&6T9P&CoJ;Ea z1XOvjxtRcWu--*vHb*|)gclZG`;7|;zaei}^!iI$bnzU#100jhGY2^YK=U*hhkSg& z0cTz+`>RPPPOX3=aM1)CHggG11xw0qE#Tx+SMCQL_`MsBrF}2PiU!x#`#2g8y2=Zw zfbZBhYhhXk0c`XNddM4R z1V4D&_7!b#xKf<;k;IgZz8o|5RbrVE5M6TcW&2V&=JhR9#SWN|)98VTzE@iWZ-5mR zwsglQ%$_Fl6ycSFT5%58ys!{62iHPtNvhr{qv+hPv}t#m0DDY0{V&*5vHJyLETBoA z2Y?AXHL#(m5feG8?9Z(v0{=Tqgri4VgtPAG6OQM9GyH~U=dS?L&d>nCp0zvcr`&Z2 z0-00$r744JL(8WWTe_C;uyOy&qOJF1?#y=IyKz#0P(I0dk>oF9!IA*ax5{3B_VNL< zeDi8xI+6JR4L+O7N@fOs9Bp9eXlT0NOEbM4Pc8U!C4=~!i}XCGzIQHgY}Nt}f%b91 z@*GkY-Hqz%UKcUA@lwN@zH(cV!D1OwhKyj) zDyI5p?YEFHFiu`hKjz19x2llkG05shy-Nf`)%xnu|AS3z6JNAuwLLe$rVE>F^Uz`> z6&F*nk+bT1seaH^`tmY0@2z&H=@6cXse8C0ss&m;K%VE(WTNYx(d4w!8nq_#%p!KI z$|so)GjlVC?KIAo?+up~OANO(AY39=Q+SNm@>WDspq?1z!oOf2`VrRlX_2n zu<;d{mv$X@Y+pUCtyp&+hn=Isq)#A??oXY68F*nyK5YLq$RpmR#nn?4Th~v3ClQV$ zh(z|;x9eYU&@;Xu&Q!!GQ`SD=eE|ySxwHz^PT;>EVs8!q>DZq7%~V8At~O|=3(R)4 z1FmU^4MboGDfx!a|DsA$7`Q0-w!xh;OhAtQ?~RjBi>;IB#-O)C4K3sso(Vxb(C?Gx z5wTG*&l=f-KtN~hLWT^P-1Qnpn9r$Z-I2JQnC;?dm*eA!aL4y`s_QO>u+xS+c}$wi z(BR{b;{x)R`SByVUDp@KKOc`aPrOg}eB{%^9sOj3wr9Ns8U@YCa-*V<^lbE(if-dY z=&fvoR`~lEFCu7H>#E>Mi=Bl@fAl6Sy&8(a;Vo@+=P-*+mG7G?N3E{>AcsF1qJ&3Ho*BoG~OzG}I(Zumj9gd8!$CoJ*-%6tY4Kv{TO? zL%1!RitvgDXgS?xgLaui&VixHL*ob7v_;|(LKCH9X|wJUyuE=HhUtv9%JBr$R@z+Y&^T-_16U(85`48Wnp$!B;6)8Jb$p- z59v&%X*ga}0xj|jboAi`qC2?e1;y>f?W|Zezb?MZ737*sJVS^P7_*)1%|N8n8VFI` z8gbx-7@PU|PJe{|#sPiiU9d zP79n-Y4{J6_MPO2bYU^f@3;KxkE3D!$H=QtNPKm$sKhj|7TIpKD2l(vlb1!G4`KVG znWb_2#>rD8#EEQ7sdh(7u+N0lUo@Rhswxy~C1q-06y4!eSFH^s;$#&Jk$Ltqqq4|dB}^!h}M<}k!%s$l=cS}tPF5dSe4at zxdUszOBH@;KUm#x!}oR{Geq8J78%o+9ohhJ`{rk(#@2h0uAA;t=FyY^beZA13Y7L6 zzhQ)`&*-5|+C~OK&I?dAl1XOVOz(1cW?uD@+Rt(KeozSQ-S|VA1I^!-6Nw5z^NL8# zGSHlyly<1-VrCwp82K=z@M+{{XsG4w#WUY`N%^ZgdGTn{;D_@sJ)0TTlFXW;h;3#) z=XlCZw@PBGlG({+EQ_a#Zu4+fsuki|u2Ul^?EMf6sv+RlQAkR`UxMK}dNZy$r60{g zoD+1mjbN;-emHMhlO0T?wd-a|0i6ZLHPtk2l1Wm%=)F}(Na#7gCpa<3g*Due+NG>% zZo(Sc{zG|M>i2^3r@yXHonLX+-ci@v0$x8I_w*EX1ghKzPgn&)5-=k7+24g!ik|FO zxBRvQlDU!UZS}QHL9>Ccsl2PqpnOfwjWtY*gukPy3(-%`8Nq@^ffE{w=qkIPl1bGKq;dQx;~Ar|vL&z`(Q+mkMEy9OH8! zvc+aJ`_j+G74foqb7)}bWkDK5tPo92wq|lmFU0DIxD0E7($bnW|F4daKN zR}HJ_1YmYf^^U$ef#2EeY*85(jKKC_<}Ca#4G1<$68E7Dp5nw#qFr4c;gXy{<6o}JZ|{tCdAUl_ zc}F&uzz)|>ck2z2MIKl(vy_8a#TXk^B?2<;?$H|3N-rFJ?qf!(oIOZv>H_L)Pxu$C zeLJK=Fd#bkmJAa3vBeyFVEiEyb+4Vcmm~ zeyxDiZ!HT(^cKS)n!u!W2^RRxyO&seUn%j<1wVb|e8Yxs*FP5=Hgrj`UICfQP{M7| zVo8P4P4O1&p!q1|GG~s|o)%U+X07g~6X(YsM;cwu>c)@xhCpdrN{+zoH0V_f28}0I zgZ?L{qk8lP?=eq2^=ebD06`4$DgTuhJ{@y`{#||M0%D`VR$)Im7)gOo;cuaE!j=eQb2+v;1xE2ic<>Ep8%5qKhKdA zDNk2aI%t>-EP(6Fn2(acYa>9!rQ`w-#^4P&;R4j<$7~)x=bUi;4f0aL3^%cWE9wEy zM~=-W*F=W5Mth_2urjDuVe6MOnZk5im*<7&&nSL>cTmVZ;=gCyRlcF+N}!5kIE(?r zbhT;0Xq~2gX3do9FLp63&2%}C^nQS6rMZpIjfe0AS6*{m$Abqs0K!`kA?xy20l&@> zu{k7{MNzKB0-L`$tRQEHv6fz_N@lS$I1w*`x?;?T{FgeACPD#GMO!1D?i!sHBv*kkARiImo*hqW> z6qI7ZMP@9?#s=u)0Zh*0F#A|9QZ-Z5FN<~4772m5TzjC)=GU|=!A~f*Q~x2*c46GohNoB?dcN8 zPir7-l=r~UDBJsG-g^1jBP(@*7GTN&DxDVOj{)cyyr?|+=euaIlIBzy{xwH@e>cTc z=1UD>W$=EgQe`>9)eaVj6Wfc*xTkL6D+|dw!uzX5wUwl7H8ig!100dL#m!IIW{w;DKtY2E*vPSGK^&hi-Gx$% z>tQgBZY*Y1*uNYQ_o53DuPL-$bDVm4{y~QaaK85=@jXceAZaoy)iKS=24Ca7WLb#H zG-#Db_8rE-C$n=5g@knM&iK)MBgRC*Z*V|Lh_v(?0_WJ9PwoRcV$b9^nS=`**}=L&u3 zCsLxZcvD!=p_|QgBZu9K%6?Gw`H%vwVrHN1L%^P(jGZFIKj`E5Gy#U zb@(lROQc((1*Sq60_(QZr;UCFr#`x*p0I1Lb794<|DC@8w=j5Vt-2^AXtiRZ%uOye ze0x6cI53opMfpLH7P5p!sR{`0=95`lD`G$lZ+G!+hPY zbpCxm#}dvyMaaSM_y0~-7tT%@OYHXQM`l+b!bp{gA_<}qs0;@rS`LoP_{jDq}$0ZVa=4SL~4EsynA zYiY3TUTh@og1OlDI4H;G1?J~skV@-eHzdx2OMHvciiy`?E?S!Bz-xfttWS%t4RYUS zab?ibRS)b|YC+12mhK@OQGo*b4p?EPNAX0ND2BR(ZlG}cO}0(!IiRJ7`tA(YfU?@>lkjh`mlta522!J?-H>x-mS$SyJbiR%#;Mu{RWBR+%+@g)*Hu;9l2F*(T z4CMKK1gQ=JPk z!J^|hyg9D`7^v99kQm_W-;K3?A&>Uy;WPs$jL2psS4RpT-~A!Tp@J>u-ya-@T|Rg? zpO#FxS4BC&tK!m>*0k1o{-{E2lhR3*=Zmn$xe83hvXi7YXYA9eo}>O(f|gvC6<1t* zkwKUEfCm+UIYs$OJCmeWT_)_`Lr(#%?$XEa5{nk6qeCpwZ|&rrV+Q?~zrXB#U%{p7 z-b&3_oJ{@xM{ePD&8Z#A?u*}`t8S|IIxKYdH|-?TR|@0lU!2@;kLQqzYnO8QU960% zU{UBWpq2bbo+W?P4A`PJ>V1*P_FPR?ciZSvS=8aZbMQz28=<|kcv*$zYN#UO$4=0O z6!uLzRaIWe?~$dq>w=sJ$`Lc!6sN+TPG1X2@yw(po`Nss8FDWZcTBWdi1h49O`cSP zsxSq9;YIIl#1nNlm|TH+JEs79Y#5R(BF#g4U5~%6>W&3;-_zV4Bg9? zY#!3l`}A~ZGt^VfvV+#*brnBK>al56bWp>JFZ>eCzwFOtT<9{0Dno^laT%Vy`NmQQ zK^pC*uv>1`0l>Z;8P!J;hh@3{(8PR0_F5?Ari^UtOi&YyK-OY#$$z|%vxO2m*0&eO zzes8yf-IM39xUsBloN*~%sz?zy{DM{UZpA4@5`uwzPS^sb*28dMcoiP$F}((f;0Ae zA#O`=rwS53iS;gtWi?LJz40QYGe7u@CoJHMQ()lQ^}DhH>e?VOUb| zT)JX&_@_S|&GE;Q?sLI2rc>k<9#|N{j^FcUdeaOi)D?ZWGGO<X&UmZ|=G2JV-qMQU)%7TTdpz|uk9A|y{mu$?@3$y=_NRq9(e>~$~Q!y8e z*oEmo4t`|EOI5tIm<=0#WWufL_amr^DmU92z(?47nf8U}B!8>IP@Lub1#`LGMGKrA z^|E0qv4r>{*wL#BlBu9j8VlIBt#`;jqz@$J&yQj7CYA87cBBY9avE6ju%nFL044ty z&o6ILtU8J4(;0?c4n-AyUh$qN%6cQ9u@Ny)RQWwYANr){oz=x$;^BEN`CZ+6bP>${n0i^$xA0 zSJ3)mdkLV8KlU?3uK!F)w{Iz<4I} z-K$O?J^u4_ggrTKc3fR^Y(6XE$EX*&m;l|uzrDvif zDv%lI0HXN~@}|Q01l(`!F|!dyN}y@kvq~0x;>Cf9R@utbC2B~)2NqI8pyI~$M68+= zBv4;X4HsyV0hcheW>6v%E8-5~PH?I8e2aYRbY>K6<$hok=Y>&FGG@NVi3X>>6KJY- zyD7zAA11&k{%*$<1w#{F^gs{E1&&hH*AS}->gWKtO21*CbCM#a*Ju9T$m-=6=`t5+ zPS5teLgq9z^X8k`6ns5h8yHT9qA9d2fw=JF}D2pbV$n8f;mZ9z`Xdywj3yZA7uaga|0@bH~W zw;mk>y*kRRKS;fmwJu|S0f>Y*c+u@NFRaNSkp%eH1-4O3^5hyGlp}sr|Uw*BQ^b*S-_9qZ^o#;lo~$!>e;v6GaT44kt^m= zzf9WSs<`q3WUf6+qE2!M&BAE}a}Aa&gTH;rU0$wjHl0Z6Qc(C*0@ufrxJX38<~T_= zbO-eTw`!o=X)F4%^TG6JD+k~MZE9Qjgf!qNYpv*4yWm9q@?416;iarGptm}H?x$Q! z>r9_F6`6`dbh}H!TL8I7!T=qpAcorLla+mS>Wg!q^d@D@*uoe}fjPhx?L(ivPSkvGUh`}4tj>LLn24H=P27!Qj z7GOs({ByqUnzB~Ion^c^G#$)UN(?L-v+MvaqCr281U=(4Aai^+`K-O~3yi170M{GT z0pP#7e;=$rh7(`lW?{eNOH>smH|BlGsOnlf9!p?!3kdjF0!@f4A8gSfmndB~5F<$h zs}NHYT6Pi_sHS;P`N&l?`o?iW&Se<$`J66Npov?|>u?#Qt4!}e#B2%$me@CtU{#92 zB(oo6??WM%Jt-#T+pA4*bikdYTZN&4TPlsVej-Iu8A1Ls#WuJKS^b*0dt`GPji7k5 zYWw|ChrJHNmjn2Y?R(+x=-+~Qd7Yz@B0HOtexEF!`>pdCu6*vejWoTIN4LJeel+d4 z7P8y2@3Y(L{1Zhyl$VE5A8Gs!NZqO`e3C_^^!;$I*LPt4US#kwOxOpSPb)yIv_PvA zN}DydM&?3Bt`` ziS=WOgKn_vpCVlug8YX;M}~u2-r(KH z7qa&gI47wclBYo&^j$n17p+fcgQhDiH1bL2KX9!ob6@|PF!uKhUYwvXRXEe~x@pK} z>Ts|bK}q#D5%B(Aj9iF^kHB$pSs`LueyEkx`}R(I0g1pm=Q=#dztxt`PXhj8G89(f zCk`2SN|=rxak^g$ybs(_^T+o$v6m<*PQJ zRlw7>+~c4%>Ql$l+nYhv)&6ezq!%FoxvSjKAMRIAknE?kj{7#J#$f=4 z>%Fdy*Vi)b$ju*y%R$tAFQ_}bf*Fh)D}Nb@E4k?I*}2HKP^%bV5a7%IyrIBD^;?L8R5(^kiWmt_=Z%J`x7HR(a}v&b zK~1Q4(ao5H7TzO#-V4x_cnAKXl5bw7k2{5?f@U?Eh6lAJAtIV_TA;wcx)ird-00rB z3YV2d5tCloDhRAeHM$fXs&9>r#7ogXJlEr7>+bII>Au}XdAz&*x@}EIK=)P3!8fJb zaJS6%+h;;$1xm}0oMa`1LWsp2gdvIuJQ81@gI&-CJ3tfwsGDZXFp?hbaAUmZJzjnT z{dGpK+pHu~H_TC;p<4RQ`&{_8?9M-oeBA@r$?Og;$Okv$>yS?8zj_LY)>3Fpv7Dk- zdnPX3y#hcPBoRK4cgLLVcpz|i5MQtQV9HHXvEFAp^o>TV-T=dn{MAOzaSeEG23N%c z?e>h;qb%{bdpzAD`W_c47U9gHI28*n=Z9Jy`KUujpTTiYGw1zvjXO!l>J;H?*K5wk zuut(^iwtbIDEGI(5@?%+vt&~P|nLGl?ZON-uOd5M{9j z1yNtW>m+Nc@bVK56qC>$FLJJG9a|@S&Q|(!a;01Juz{89iI}mIl7;4%2t|`!QV2lG z8AqH}cyl)tTv{Eua5bvw3PFI{W3~K<5IR8{GPB!pWD^i!pgYb~lrCb-$j7PAHff}f zR(ueEg#&1)8EX3FD45;SH17dudWC((_p6$~T@MY)b5JhypLV_?OSh}{JF0HZf?n9I z3XRXEiipb_L8<~JvAKVh8YllQKfLai_U0mzR246SYpn6xqm>Z){|>AezVzOtMUslF ze~KtBHgK_VdNWBYswl&dPg)EAf-}CfgL&V*H2-NHXVtHx^&v$1(bQkm`~ApQAAuBl z7n(hI8F`EzHbRYdG6V`s5%pbq{H@!!(a+CG#_oyHAFP$%5 zY1BoK&0Qhxg%Lnfdr@(iQ(ZVkLS1yJQ_m4jYG{UIw@EEHnaKg-pPT1-BYG^#Q5D*% zLGk@4CW5w^6dWpt9gFzGZD^1P%YzSP&jZ+e;e2=Ns0lcn>~Rreu+5ON8RHCJ?uR z1sJ3b_|PQhqJdLJf{?;iqI%r3e~=nHJ4P*BerzS1qIV7qbO7JEESqHQ2b2K5{8r)Mr5OWSO7~b+y@!kfd9rFzklQ| z1xpTQqE9w_a#^8Hro@RA|I(*Hu17#Cw)V@1WiFmW0lP&z{3;@Qi@Y`U>Bh>-*VgaPRT%Xym`yo4b$F06h-?;t>Qy zJySY@Na-vYPGJlM_<$$ejSWEz*c&c@*L}1tcBBG?-WxzE1cF{08US$p0Ch$H=ICc@ z@@n1aDy$<+{$7Lv_WuO)@6^8?q5c0?FaM8ht|do*G+sT(e1*#PfqApubff z;?>?42I_10@O;&7-hSPZF(ZZHz}Z!jK-{j~Q^RPJx7vKv`vcxol-<5*1=HT*aEGmA zj6S{JoCTflxp7()F~$Z(xZ&g@bL5^hsZb6s2XN3|6&?@M+W~k^B0F_woPE|Xh9v)8 zD_Xr#-=J1>sY?y&J;IHmch!>u(2H6@7;EU9W61zXupk85m{UKHR;UJao z;Zqr#WbZ(q(S(QmnBUIkM#P!bgIkagXoy>0;`QU=*ta1qp$#hq*i^qX1^gw+E?Hob zs_T|$rK)52lD>aHaStZrs9w;T&f<}M9%?W9(%y%U8kPszs?Yi6q8J_a> zcnfP|tcDc#>9NJQF_M&$YP8-2Vh@>F8<7N|m_c4%-Btg{^?{RI3Z2#BHdl4PzxHm= z;c@Tb@BebRh?W)p6{VEhl`FREz>LL0Ki4ZUxz!%1#A_WFCpggA_Kse#6~QY|lI+32IN= z=;#6Cf)qI+l=I9>K+Q|;0r){Z;+=91c}z^H1`cLkGm49RrHWOASyiu2rB($v;!t2Z zoz;t+01tjd&$tNCFhdo0=HR!dI*S4kMV|mA|8l125s=ADV1Zd0Xl%#?htz}^G^7{x zDRW1n8W|W>pV|$5@m~qhebS0G#n|lO2q7Y*EIb6;7s}R#W);=rgmk39vn!6tX5Ss= zH3NLDvi@SBj3iyRr>~NbUB9*(Q19}E-=QV(zLi64h6BZ%!S5U8W$`%NV)_vL|33D6 zl1HkugHvORX)RN&Mh_yRNF1_S(a!7R=%&N)Y`pm_>((9rI#v?8>F=4QYYBh`(5c}m zW>wTgikE-KtxAfyZTYgml&A4T*acjtHUxjv;5ksT7TH_cp_h^`;-GC`HyKm3c&O-d zJ}eBvf4BB}JdWh&OUmQ_WC(p?S$+|@e4Dy_JOA8z@!{5*T6UEeO*Q;yQiZ^z^z#cg zzDM?e7HF_sh-8g>4lWn39}jxb28TsVvuB1Yb)VcUQ!oVA*2C7_0-Yi3p4l2U+^Mk& z#u>=53)PsgR)3D94@9EhcM3>~;U?_Bpp61)oO40V>4-Ls;ap%8jwKbL_wA!4Cyp8B zYQ>3>KefL$epD^cV$lRiw%~=#AzR`9{`rWuhd`!@Ka@CciBA6FJ)Ml-aqBbW5{R7r z?YEA~^@_^Gf1CcZZYR?IByavt=$knJE*~aCWd6sKgRwtK9B+1Vm8@xEY*rRqueNCy z!Y&^37oHsb_fwH39X_;6bN{9>ZWB5qM$4{BOcl2Fy16n_5f#HJvJ2?5xdcdu284x7 z9g{d1VvZq(%gWdx7RJAfR?j-9{FZTaCCiJg8IqZt9u(PScDKCyFJwEGffsnom&>RiKQ?N`wlrv! z1}Jgk!4i<_d22EW=qYE4D<#&0&HV96zBJ>ta<;;qm4rpaa zrE&(IHMWxM1cue;UYv@4=_o8CCH;(XMSXbxA6$gX4Itd2!O;(CRpV-Da+Bt=ftX2x zi?J3sV*uAwY%2X`=2)Ep%&utYT_xYay-qJbrF@3TQR8B&QE(2pIwpBlyxxFB`#66et4mj!Sz>KQ7>55&UOXgxkvSs#Z|-% z7M!m;hxK0PH&4sFURO-bya@szCrzL_?+7avrg+0e7mR`me<;=0U}|* zAmUrzfJHl+?c{g4nc~|BTntVyw{sapO$aWwg8zDg!0R=?CT6D?vd0ym;{A&bhC##d zUM2&(Z0Ug`TjxQted*$RJAIdX=z;k9kXZMNjj%TZFV10Aj@4CYv$S#PvMA!TI!ZNt zoz_Jpu{O8pMYtySs?i)C+Le|4%ehDnop(TDt@VNjU5TpP5DkRb?GBpX(BhhuvTBj0 zK2_|FdTG+kn}6Qf3GYHN+Jjy8e>Kxbic^0#{V9kQ-p2MVsRG5vtTHdLU*~NKKm5sg zAoel2e{z5ga?E)OtV;#P~8C zQjjJ=p|5y_TM+NV-Xn=ZD+vEA0@~CPGtFd;g5gw^&~V!0`@tl69rzLT+acr{C~1PU z!1@^6y0nr5pqG(1;Z8xMAnFc=tM*amim_SbGA?NuzVWb8>9_>K@6Uhv0xTPxcgi`w zA?c(bd7Qr`=D0JirPa00LM0 zNQu@Hw_@!DLcEdh)@29zI|5RxWx4)GIlC92J>4?>|JAeZV3;YD+qj6@I2H;+xn2h0 zyP|EC-cj1J@-KE;Jm57or_g^SJv(5b_RbloPQCU|U`13#2ZJDm#!=6$CN*3z)=uPv zH}#$uVT08$M*HS_C)L}FY`fT9elSkZ4#;7=$I7U6HiA3GfHTLFyu2*Q%|^_O9r)h> z4We+9-(}1{nQHQj#z6y$&P0f~2{dU04mk&VQx54M0;QbL@I980IR7ZK|QgbZ&q}L)c~X(t9j2 zwx=p5rf7DGX>{C)I$npRL2z1P?I3%E0)M=6?-1&-0K070u)vTEwUI;xc$JV%F*<~O zR;7u?eev(Mk@{pjsFmpoHAysR6ee9f5$X1!ZTv)+xar&!rjc+Ytkm!I%$KX}@m>O| z?CZK^ah0Cgz2s}o)&}M^(C%5m_sFmlo6@<*-%kEbZ9jWiON`tO8#PEeD|Tmj8u_HCPB~H+jNM*(XBw7AKwr2>(t*>=S0r^m z@)uY%d(bGcW`uRX*F)Oi_in*joVpbw2G=%z%4owRy%8_w-)1%9yc+w*n zb1^ZPE#(XoZt@tuS8@V5^`Xw_%=Hs$M4Vc)O>2=qWBl=UY+9=nt6kQiWz)J=4ID)| zUV-q?fH?c-zEiKIISX)8!ZZIpGWy&iXpgqYKILMQ`F#o-tW6{lqlOyrHpUCozUank zWk!JTYwCf?_04)(t%sMG=zU(LZ*uW7(vq+pl_Dnft!l10b% zd7KI=aqX!1ssN2uk1baTQO`~eh|pT=dTsqs0L>%2eFoWF{No1vl>5&EmWbQwf;QXp zm9lB=a)+Fg#MVnp&em`mShVEc)9yB``y&P;;36>YnJ-|>=S{w!oPc3?m*1b3UP1ER zt^1HavR^n7+ERri9rRi{=6@GT0?g4?JlsRbj~T7YI%WBhrTd=cJ$jj8+OeA#_d`UF_|?xN*~)9Yk&ZYzv1Hgg0gdOz2^a^+^J-!}7L z4x4bbRCUQGXfxnRv!n4%>HwxSa?YWN`le1t%dz8DYoQ#sG4>a)%!M2i`AQ{+sA1VW zNpnzf-g+7>&q-Cm#Y1oV3>r_^HxTGpX78t@hiuLICEUCxC3$4#dDlhEmO>r%V@n-3qJj=|yWx*Ov1UHA0e z|3LTS{^5Is3mv#(k3A)y+(S5A9{y!^KbBvk>={CSy^vmmPsm=kbuT`M*X`9>{X5Ig z+{ASc-AuI#pzh+dy1#f_|H$91VN}t0>zhk)MK6^rQ++b0;sdJFv)-h3JT&LLHUG}9_+|Z6|SY_s)GVMh3?Flo zuG}bJE>)H{0zUk7uMTjg4Eg8ZeZRRq@gJr9d7nK&2zl74+1+nO3%H3E55;G!p5zUu zNdl5onrwi@PCOkTr3feRKiR++ZcUTdg`fo69U4cZhW8iJmVbQAB=Rk<$kOW>>dp%C z9S#kEc4Z6K&tEwuXIH{Mx%Kmx1Z)|pInhaeNUOwe7;Jb4!NPUdJb?QDx-xl3uS3&7 zp??gb_#A~`KVL*P72y&&&aVZhTL8D*N{(iH@<(~Wyz@#{XW>uU z&rf-jI5pT_q-?Eu&*IGFA4XpBA_D23o8?rg+k|YI@;KhgQX)P(rzKE%5`K><$RuAJ z5yotNW)W|6=ruL?m;_Vitu*qdw}uYo#|3$ZsV{c13i&few>lkty~`2CDDt7qmpJ)R zH-1n(P9Oz(e&Rw0%qr5b&~d=?OV`d-9NwrvQzZhdHb>iz)(JzlF3`h(qzZ#wLKPGK zh53VRFITDRpE@$E`sATV6!663HDFa%_Yim)hhsPNmK*2wwJW0S8>`Lj9Z9SfO)lK(CEca_1evel*-S0g}^C0oIA^cd+Y&4p4&L-+M)s2B=ajGkK3AJFL%oXeS zCY$@+v=qq&NKI{qpl0Q=-IA(mf|0%hW8$^El~rm4VW`jV@S90YCeOR?LPHO?5(ObVQiBf+XoMQg5)!hi{zE+dq# zRtwn1^*1E2=RuYGq7j~}(fch_=sQ&QTrBo=MEg69bCOE^_|z zjfCqS*S1tJ0{z094t=9ici?>!v@BWSnt;TOz16Iwfh1xY8sRLkwL3lh60Ke_Ozu18 zSy(nlDjd7xGbI;A!$oOU9OTY=%X*h`R zrTol|4jbBPY0C!QX{y}G%wY^bME1&5X5Hg3Jp9dx=0=`LXeUET33&jkW7mX^2LQPb zn8e3B-G2^!6<8GU{8a;jaR3i^uhvy6?iq!4!(ZAF0OY!OR}zjd!4 zW1U{D%X?z~PmB18YlIYp`oF>N6XUKYU$KcC`Zhq;Zb}%-Guki z1phRUkqXB^`3=Um!l!#)y0@Ec*K+OcJ{-Mn{e>oAff%c|1iH$aU9o1RT4)4b#7!A% z+89|5OQD&QO3}YSGYJC{8Q>9@uWK=GvCg_|KZKrXoVL+G$rX^XSF{+6k_8*lSH>K` zm_yrDuv-OwH}#QQc0mtV1tU1@;oX*Mf_~t6D_s}KCyD7&n%N0Kpy^}lIf}5Ep)W~) zs(Ggaee`;?2m=W`M`)8CNgw-VbnjckCc*qoXe9cERLZ??WpO&Jl)>zRIJY=$u#E9y z!|yoH0qjU1@-yiyc-K&$z@iQX6MSCb|4-ELO-`x-Oo6b~7FGZ3L~f%854&zMkP;pM z4Lf)NdL7E6UYZyeUxB?SvWFncpEmkk}7&FS9S?l8O+t zj5vC1p{ohDd_>bWD6JZRp>z8ler}bI8jOsz4HGR=&i>D*@+%;2#O837yv#;cX@X@e zQ0Ix>eQx~&;Y&wOWIUVU7oa)*ti#dmX&X9uYl85{Zw?y=B)ZBQ`VJc+pyQM@IwCb$ zgGst5%4*7K2M7}sf96t3R=G&h%{Z677tx3T-AN=wEk00qm*4u$+?CDih>s}tGm+cD z!^%s6``eMgbn;$ApI`V~z_dc|bG6&dpXgL9wJY?sIsI*nAU6IePu*j}$GOrQ{)Z!~ z4ho=8o}{n-cQ`Lz&1`wUd|Jxe{y>bBtbT4Dd;uBT8c@+qbPI5JAh$9XoZ)>gx61y zsy{w6BLnOC#HHvVBR-ZBq;_8YpMC+HbHgRo`(aEy>2yA;efSOI z&T@6lRG6lb_Go-DbPZWfF&^L(RbJ!*!ntoBr z#odxq^@(!jS{*kM@hyOP#ur&&d$AZA$Q|Wwd-|IRBA~I&^V*JZfY#6;I3B8_=Lxd*kKO7_ac)3FCHoG0VXLy9~mipCGn3n zct0cRWL=)Ao~z=mEUSc@X?0?`0HvWX^ULJcg_Be?>TZmcGF= z8E~Qi#r-rkF2vX>MlngfWf{bvDW)spmttCATILM?x=r*mrm&3uqrQ@_(zdmOUMs`` zwE6c`H-O|vu(jAO;irkcWSP0=M@&|w0(YF(u+d`9(PL z?9fLLMa4P4GrU*P+xm^PBQ%SX8&I-lE)OaEMCD<(WjKG@W;}C5Ho6qJkoDua+%*lE z=4B}XQ3<^T${~M+U)r&}aBn;Kyu*qQZK3-`(C7O;|F4zYCk`^!%bFsiWh%_$5_4L* zsKx1&wr@kHogXu>d0%YqS}otsWv&CQ4)2!FYPBNoD34oyeo`9RT>Sk^jMhr@Ahc^r zqtWX(7p7!lwz|(zkNJQN1_fg&TzTh)ZPfUDq4@17vpF`Q@o**i=O4vWd)cW)=F08w zTvO?F;kzfctFVJ6DLgB--@(w@Og4nnqzLFq{8`FPXOy#c9X9^uw_{L{6!)8S=1MZt zV$Lj>dY`@pU#184rVU^JtX(V-Uv?aJ{s>#-kH{qK9BltT@5UVyu3%*dJtU zq&y8KUmAI)=3t6;rj>I}3?_aaY=|zMhy&O(WGS*5Xr}EC^NOnf zfLKh^MscjF`!EAi(F9bx$BGkas){0I1ZzOfgSzO`BXV0PyRv)U)_mpzDqRtj>fX7v zduMflCBxBs(}xm-HcO35Ls&L`?V-yAX4S4ObS;c~uMEQGFlUPaluVTJVPG3uAZ-EXfo$ty)9puJ-e>W4JVO3FFiDtPA%!s zZ;g~zWlQFpGo=Y4F;l&2{+#B|&_BaeFiuqot{tiSAPp?FWnl&LJR)$##@xEhYyV)9 z>OSiAMA#|gBfHOvbYa@d1%ExpngA6wWtnh#axBSagSZdLEuqV&-esTD9>C^k zE2SP6lukP?LT&?r_wA2@wYdA+n)|F@;O*|)@pqOjhtwscgKAO4ZweoZC{#42$eh#H z-10%#?o3M1ss1S`^NGHr+plNruMtuwUReh~f#;O;|Q6%A?1+L1S3i-(*Lr9nPdo%VVHq2tUDA2xh9a2ANiXAVW>uTn`kR zPyFb+ELy{HL!?x*XdrGm$j!^JM#0+POU)@DKQFNPXo)z9^vnPnJ;jcuJG3qfUDe+JJBoEKOfGgzODX(+iSulX8+5dqzl)@k< zU!Zs4m=+ZP4)`z)l#v8fXq&~1lre%g+&pD*VP0rRo<4ax{Cnzg*|4%u2Q@uTd_aTa zjo*ehgHd~=fG(XjFceWy$=3HTT7#Q~o#r31*lK!u{^SV#!@?eDBR@g38|H=E77=1Id|W6vP1*qn z$v>yM;Y}Qt4XFOxG&AJSG*8k_(vD%VCH4k|hqxYr=6w*?*44tvYOcz5%*fh(U}s0H zU{tM@d}5x|WDMMpGvL8wNO~*%%&;Z^ef6QVWgXhu?G>vaJAn9S`Sk0(p(I& z|Mvg707&EFit@2<*l$xRMIGrFJC=zU7E)l}Ov9WZ1Hd}Mqxd1B8~RK&hzjBRGQ~oy z3_|iio4t1Y+!1oZVj`qEs8Z9jVfvr|SG?C$8R6(=0u#`n+wo{kzJ62V@6Jmj(GiV7 zkv3EXFr0!57vR{S8tJ|=s{So$dc9kf^xj}vGwCbfEYj1U|JFJws{SjBwgVC6Z!uRT zWSePrk^$ewq3d)r(`Jf0kWM0enRjqKBZ(ou@u+f9i_?1i z)0iQ0NNq;w8n=5l*HSGwsp;^JRYIevic#pra)Y0^(X81|btc_enCSGis5Wtj*^)X% zban%vHy%ZTobOQcR-Z!o@hV6;O=(;8+s!I6+c<#pkWfj_7X)VPdYQ=r4! zg{R_xo)y4gfgb$BiF7|pNqj74Nlrm0Z7lQ@_(<_Vv_YaD3GT^@0U`me&-+TeY3YVZ z>`?EKgFSjd+Y}(=mnhX2N6a`l70Vex#ZD!<*-_VH9{yxj+ z+$k*RtR}s-kRj!f%PP}X1D6TJ4VTwqUnZRJjxsCc<_jT7+`I;?`#`sqhU}uxbafx! zvQBy~p_kCdl+n-^%sDC-Oo%#u1$bqC#sg9N#{XUT_xYDA9QL(}Pz)u`ACl_ch0ReA z8rU<`jT^ex_2%ZvX@hE{1LJhz-{m9OAn_8@3WCj&R3qm0=ns)(Ycg{p$pE{W0LUvv zN*OM_W~L#i-w5!N?A)JWV^%E#opBNJF8H9&LHqS*Ec*69PN9dYy2TT1B^0HAg}=^e z#wBoUM;lO9QRaUTbGtYT;PHqS_Y@h)E=wUxe_LQz1P(VGgT?_0ejIav`jMYv&@Q35 z*s;*Ur81`QcBqSJTe$|>KrSh+7N8-bOcoSza~*NSXCWpfh-n+GW<=3@r4)2Y5*Zxh z2#e&1#`iLK$LN&`x9@$u7%>rYIFEs_@H&#$DX5gq|Hb9b@ zd>XC(rP(f-s&so1ago({9i5#bfd=WI*=J?;#0xE(-D6-ZjgDI5Hb2fE=Vh|>`G1RdwSCFETTFH306T3nz@QpGHB#|pWW}iy zWty=!MD4keQVOu^$BGy9UY?SY?sI?%XXuc>g5~^YtsU5;`ufwihI#(n@2k~Hv3O>A z-nq{jy(`J;h0xVU6tPKavz2oxDSDA~l_*%GIBQ-9SW6aXN}%awl=q(<<@0vUSD{8d z2qE5f)S(!hW(^~4u;jH);MyyZ- z3kL3ZsA*K*IrG3#Io0{-`MnEZPjBvl@qJneXyVo|AU&jmll! z64_V@;& zV-OjLVtY5kRBZP}Dj@n=)Vh$8xU3h1TBdDl_UY=_kUWmWRZMnbb z@^)!>csYee>1+6YHQCk+=&&0hwHug&+m%7%1UY?gL-c;ZxU{82sBU{N{L$(p04T5b zm(>0KC3)I-mxR$WW?0nvZ+gHj)fdLHI&uCt#`271ir1xrwafEEZuGyfnsDxQJ~s@) zd6>}2sJ`H!FKa+vA3gZRu)-9TryiyOy5-x6jpi~N08@UTh%Rp^3XM_{yc4i<1c308 zLNJGjF@==NVpF%+b$i~?zQ(bn=^(#a6<;wgct*00>9geoCRo2jJI(!S(_AHb5vo7X zMwj;sK!ka!z1-R~*B=8C+AIm%_DanMXz}KMX2bAq_y|eU_{eh5$*5Ek)o8Ri{R%LMbFSWGEDrAKBDCJD(EXNkMq9Hq63OQFi^pT6t|SE z|G8%Q+pTQ|MloF$zYeCn2mEr+u@ZHc8>9$Sdh|yQRc=!!E3N^Tpjjlo40?e*-r4M+ zKTps9nh17YA)fH$Hw2Rf4s7K_UWM&oZIIn{j{2bm#844&-v_^Yl9Q>WyfLBshI(T~ zkLMLK=&vBhWIO!yDIRc2{2wPVlpbJ#1J8B9fy->aM1$|iq%y)o^l$)dfR_XSN$FpD z%zYzh@U5zCmyPwlR4aB+>z-cNj>>)5^H|t+_WJuMG2nm4LhoJv_JDu@2aKwJR}DJ7 z0AEd$KOKS1Xit%!?1-|qLc)+egzU zszK@c@*BRl$REDbD06k~Q>2;L%R_|6i5)B79kU>}BOV&6tdIHe|Dm+E&5zm(bG zK85@LR`!PKfJkQ>FsZhQSKuoao50Cof?GJl$3WbG9~8?7M?NnG)%rv;*kt9|GMwv# zM;7H}ChFU2ec9bASANQv?bBPdz>E_sN601T&9HjwER@;EA72ZG8pbn zp_=Vg24S&AEpv(4Zn!q065rRC?q)OsNgGe8%Gk9)tzVd|+M<53RzgmUzLc{Q01fDp zfU|`1;NF)dn>`)05DzAEN z+Mr$<%Kr(=?W^Z5DbZ8GlO7 zCWfW_=LJwT7*Ir-=V|P~L&u5V>X)$cO#bItjj-Shw&dG5HjLnM)+wN=+|z1k?VtzU z%B4*y17`o&#j$wmbNik5X zALz{$yD_b7sfn2Iee0`r*N55YF_oEvQ)mt*9!O_#!WU_9HKLXzcI-tvSeK)n^wrB; z8@NzpdaH0Xti=xJqZlEEaR?g3m(TfCo5DHDzkpOtQ32nY_5fZ-ZE%wEnzx(prSNMa%Hq0IZ_) zcG$gyD^{}iM=*ra>DZMTng4EsOGgbEWSEKBc2MjbGUcB(nWoOg-G)o|i}eA*!8OQ* z{3PhjT;Ye>v9}zlw$H_R=uk++%wop2O!41gPTIvzefwH1RZM@LNJ+qe)Nphbb-(%V z!#}0x$Yy_EWp86XxcgzwJRGYu{QRQ(U(?Bdchc+Y!hRUP7!$f>!)u%0%e>0-`3P?$ z=Do$w8e0h=-{YQvW{!ROATXu1F+Y$&@{F6hz?KnZ-uIQ#Qd`wxU@K!ky4SnAX9;#Y z{&}IGy|PZ@B5PPr9-L_0hGDn+9mqt!8FKjEqHaP`(HNMi4$T{j&G^B(DO&NND>3S9 za-6ZjHaCmwwB8FHD=WqPN(M}pbj{==Dx|`0allo8MhcCW3JzNqa+6(t&k}I(UGhKd zTH>sXhi8rQ?LOe_xsi(xoK6YVDMs|%QDK(sc2!T5*r35t2;C#pwUN1~lT@BKt z;!JF0Pg!O{v$oc@KBzn@Q3GAqhM86F)8cg_*pW?B71KEym^qrwWPg}-mL^W9J5WLr zKx?Xq=WtG7fEh2yn+KIKT$4s=V>7;R3H4j^(@Yh6?1$&=2c6SHwDWl;N3`-Zic?8& z?7m;-Xgm}Wh>$l^v^m{najvv|j`7J=UF>olgbx`%)5WUa*jTTdyA>FK{sw|zU)Ta) zq#v;iR5K_+e_R>87c0;af=ijODW!~P-Q{+@5Txs=3VFjYCuNT|nm$_y{fCc)wuD*@ zUxi9B&(Zkg!rB^<>KkA8gM?#JtbdxV>0yK*A@57r=KrFOPF8Oxi|x1twaJsx2Z|6h z`a*bK^J}yk#V>i&cMyWjo<#Kim5ayTjJT15YBlN8~rzm?WrWu;;<} zYeL5Q$CEpBZ$#!+0@to6R;&ojX?J6=v;%SMp2Ml2XVqU#107Y$fF{t9TMhX)hMQ9> zQ&}U>;lPo``5?;b{upucuoWJGj+ycXH&HQ(ko_5htHc1Q)#YEs491|dX@zzlnqwfEkfUd8e8PJ^wqe#5E}&`fgzF{bx{7VoRM3Ka zz*Lh|ck}37@@gWy!_IFPqMXe9d7xh`yuwEuk~gW z2n%fOxTAs{i9vlSDs-v0w5ce)D?RM0?Kg&i$ssTdTZ0;~Eb)U27TZS$%&3ohi^946 zjeejeh{n_Wuqwz`Pbu+A#d9d%czLbBh%8V&O&vd%1r~l22HI(|4|s}v9e{pH zZH;!19X?$UiM~MLqP+?aeDYme_!Wx3^OW4ONU*m4C3zt_?SMd)KgpIXA^gCiRy{z4 z%)@hXuOw?C3vvMNFMdx1Cq&#}Aq!riC3z{r4Q`)^RmGmy?O!4?0pVO66g$K4r_Ac7 z?kLdHIB?^W-tH6Dps<`+X`Ie;_@@HMs=Ir%UV5P58pK55#%6#}#DH8doCQz@hQd6z zq5-E~IDk;bJdb#tVo)^M6N3Kh`dE6K(CbH)KQ2S*Hx_ zD>f3c{zn)5g<=8WLPP|y;-`n+A)}P4 zfH|X%uu3lcI|p{4Oi2V8k-ca;BCcc16Gl&4j!rQ(WVS)yzXUMURU$UwB;4VJ#nMcp z7%C*O^x0N+mQ2KESr| zR|08aE$tCo&P@@z1|AAEnYsftOn!Dp5@ zr6y?~n}KuJmD1E~{(_w6v~!q;udZQwU>nxd?u@`y+LhjfDJ z6HVR5S=ldvmToE9haj>I{>{&?Tr~~L3vo8MetKw7YR8lwiLspsptaI{xyp#fT_qng zW$HV;Vi2vHJ*Y*)vO*uezGkze)$OoMyXMu-I12?yaFwz8W*+@qQ|6KS|&he?Ow%R=9vI3W@Opc$Ikta3L*tigfif>?5}`vX!p^JG*k|kO4O5ld#|k zl1+@eZ;viG8DU!x`&K6|a~ulzMS>HO;_4M{89&KU;EU>?v75m}$#NHMPR^H+!1K*h z8O#G|qwSgc^}HFs^cQa@dL9;>FFher(Ac*C!@BXXuiInM3HGFZ@lo44O{P2IGlcFvP5j8<%fO0f;&FstOyw1L3X?Nb-)Ri5$psBml z!yt%)x$wtJDrmL9#&$mXcZ}8q67>s99A(bQGeBrbvXUB^-P||6q;_abBOX9dZ)9E8 zE1gHc0jIZu2=@0sDK4g0yg9bLqr^(pzPQuc6b=p7C}OJVk`Ld9c-zqHRVmbkdnfwb zN9ECMjcoC4X*UyPM!KD2!CI9Tej_qXnu>di)vf|Z1o_?2MqBi|Ds zm-TVTxfVNH7H{{6Um*P2`iayxCjXwlP2E}QN<`S z$m866!s0@3g&T;4&6|G;dWmhv@?Zg!q7oX&L>m{}nE>Cn`-{~5vlx0Ipco-D*`uZn ztX@r9c%I@y9f56Qtk>|;GhG58sh1)FKuLM_%uz(~Z3F=<3v?+#nHp{Kx*lo`yY$=k zPS(G9#Dud%rsHMto61*;Y#BtTS0Ef6_Xq^IULSo=y#W98%C>$U6Z6B8?z|FlA(fKD z^hpnNHiCobQso%zzrWHNg=iO^n-%pvO!ak2C&GOfAX8$JBU(w8ODHtm4YJpIrNAcE zM9m-JhMsU8oYP%7phr6Cnh-4V*(Ql?HrB>M40>DO&x=yE&yiv!^fHm^P)^#e&sRXk zyqbOg=PltK?A_65PBwlW#3aciDT*;ad-d)=lsCYvx6aiaf42=*%i7}~?>TN;(GT|daYgYF2i(-DvV^48R-jkI<>FPkk>N{}gu zVxHtWV9nt3zWHX))_%0cftrn)Y7ZJZNENejOVoCPGj~o$)M)s~n$@4DK{w$46mq|& zl~@jYYG?!G*p@wax}r@EqJ2Fra1im;J|t^i%r-H=KVH3Ed)(uK1Cpf0MdX9tad-Pc z7BM(nfF;^4_wgU=;%s(tQdmPt#L~Wo?sd0w%hzp2`m53GuloPHUYa9>(1O-N4Zmbe z;QX1RRj`gXLOrvkB63+F@1^iLne@LDq9p({2gzAx*_0N9-Y}Mdx-$E2h)Vu)Qzuy- zul^-to4$p-*3<~mJ5B*RjY*cjBuY7CC`|MZM5Yg*LHO7VnJvm8DnKkAHkIjU_U{a1 z0nV;@6ynobuw#oHZr5CE8;A5Julv&`MP|7>ggK(#eOo74q2*l~ z=KgKys1ubE;sVebso^-KMV=#NgT6bC8T7_{ViOC%LT4wP;~d8H?iC{JEEp58b!dPXx=&tDWcVdnox$_iG)cDz0Xs zW{e1PVZsPwW77=Xeo ze}nV@Jr5XclTS0SJdC(f+`| zDhM!ib}8CXyaI@NEJ{l08fr2%gS*xi8>i1eyWMtJwU)nV<2omzHr z_K@gM(dGqtLcCLY24MI|q%xxb`%|{+)T7|cg+a~aYrvW$C@o-Ir7Yr62fO-$Z9?T< zFo}ib8QDfyyq>tu#?mh^m9zGfXg3ts`LC|njmnl!*}c=>RK0Kn!A(6#BqE1m>yG#CIn@b0Bi z@>!SOl1xa8e^%O9SuB|Uliw{A{{Q@L!hG19JJi?{SE2=WpTszc-myV#aP^Pm6d2ww zj$j-vTUDWqWkll6o)Dpr`_+GV!rmzul9R+Kmk)l1WqT3*>K1#F{^tHH$<>xVWqZtf zx0Er^2pq#uA(KpSAKWPtM zWD>)Nvq}OGqg(`1(gE8T>ZvC9w}Uo9(L<67*!C*@wUXT{s%wgEaQdH95medwnuEDg zrgW|5hu-IjhJfP!W5VYAr0L+VPA6oFI2E8`i8T*}HB(ZiVFLNdWlENon5>9!!q=73 z=nQE5+jy%<12NVi7;B;e_xo(qx|zJW5!L4Xgm5(5VJC_lW_UQpz`Y>zpxxvVhr3L-|sGXBUBT6QqD+5&p@eYMe_GXk9JcZYo-EEs9F&4F_M#rz7%EK=gL$<;LYDYY07 zKO%^Ol5GAGnQEar|62i!(18!o4EBj14yxx=5uoFu_w)2_{wV*NC}pc4RT>jRtpIAs z9ZPaTBhVb8Z!8Q zU4RX2?ZBP!Pt-)Uk`fJ#!(1XB<>i12*)WGa!pKe;>&s38XzbV;lSOMt^9<-^xdKT^ z$k?!!vR*_Ah*z7m_%i%r+OpE*%KiG6-AJNfEGwd@rH5=3R}HC7k9q&{z}~eTJTLdt z;VD`P%Zp&5i0-oLjW^RT^F{x5;| zv}wKbg2U<#oFyUmEpUsoS9uf5bgS;8Z3e`p@U(YvP zoTf_S!0+lI?`5os0#rG~;S|eSk_NWJ+l;P%kC#`8J20YetvNbxpwa=$1>0io%CRHz zgr`bjaulmcsoq_gzW= z*2{v~dmqr3_nP}oOV^L*!?xuRmK_ePH(nQ`3;3QK51^wuvVt;I_rg;p&Xh(`OHQb5 zkV#7dE`-@>5v)zkYrUYa#r5Cs_w}{wao`N#M*;x_0=wEjDS0T@<3T-VMm9@Hjv7XK z{Hbeg@`f(D$uw49UYwe!XWO+-;5WMlwqt!dBJi>03mHPEV^fq?)5xwZ@=<4j(_+Ao=RDVk38gRbGxMLlN>51HA)7qyuOjp z_x*P}Q_U%~s<)NfI6+g&qF7=6uoHhO`IdlL&AoU|0y9HdV?o9(zW}2|!sfgNyxf#9 zQ)XZm4fy)sjn^rOHdpv&s|VXN2X=72xs z@`cqy>FH%n#*c+croBC7uS3{cUZD71lcI;;FCPyAwwJ$UDi165R>Id<7`j&6)=REy zx2--bXwsRe;pRcnHAX*-96865^|b3?ULza7_%t>$kl2&hle(TZJO$0PgkLfK`0*g0 zZrVzazs~zEmau1F;wCU@#BS)|Ay^Iv*}k{GOi_5FlKxObr7WJJ?7(N%X&7h~r-9f% z*0>8dW;i8_PG*bIFh|eij5+=+YzRts5y6ZT@vml-*ux8z8}H%f-F67?1ltw$&96IV zV+@%*`JcRNEYMhb=qq}ux}S1*#lIenaR5Y~Ag&4qxrmq%uhxw3fuv_xT7QM%QWj}Q zAKQ}fU+iQrV#y4M$n5+Du)PLne2*O42Hu{|53{htUDs%<08+o-(bgq(`hXu~wlF3K z&<=r%F5?nER{_dYyFm3wZh!%+DSEuF3UNRj87^YiP7gCv+75BFnfNZActghjIg5+G zK?C|D7*@!ozrUrI6GctbrCp+^!eim``-Hclb&%x!pj}2(M?ucD&6?td5_=J@$*4^R z5pY_VpKH#WVjy?(Lx^HgWH?g=+#lfIlMBe*dQ2sPKM}Ejs08GB`9x9vSRV{K{t#_M z8b})4W}4qi_dU6wtUeV`{e|3y89c_3ke=C5W90w+7LUBUxgI%Se8$BKv%~j(g%GV> z?-c>E1VPZ>-dKQLE8k=^0MLFR~%4U@ zqim2l6e~1_Q`l%#J2XTd1stdqLl3agbS>t5wxXDV=%?oa-xHj*!IX+(5zgdE+Q6v$ zOmzpZ%1xJrJ0-!Q`DhUSrvKq5^&`#IAzY>`E0E}+l^(JVlhduc;wS2e?H*|bZ~%vc z$gb5qAR+w*+T_2wtiW`Q1C~pHe9tz77xtp*Oybv=-Tb2f_~JTX(!S_{nGl$`{d0cj z`}!^IU|}BRSPk`^R?!-NLE!sSae{;8n2+Vg%hy~eVq%;shJ3dT6$ikyi%6w9dIl{I zaxU5(LEphHBCzasEgs<(DXRPV8J!TlgTR)IBcWfr@B?`Yr2s$jOiDzI$XZ&{j;J>u zhDLiUaJKYb>b-IrHCGnbwfW`{OvVe@m~avKqt>K|$&OF?jD$ zkzN5~QWL?fAmI;sixW@?6nA%Ae3YzoZtwvmtZp&r!W4lLTZO1@TtmYlNKz)|Eclgj zr<2IWb0Mv+A-|+0+7UALuKz-k2u!h@H@}5NgU*j%v%qQ@9CX1^w?Z?zx^%$mx8r~?qg9|y?rs(;- zZTM!CpAH`zCZ_|^wRl2ax#;4s;qEF1b@IYE9G%4Q&X7$zThbAwzPgqUA2F79#dN(U zp5gh3`lzSGT%5yA71!H_8}FIYjuLUTMvi0FE+4mluOe*C*l*sOLN_#59Rf;?_d!0o zKiEX1UfoB<^qXRGx1Ac{W#TZoBYrh>;FJBP@MYKAQV{Ftnn7`;6_ zQ7uyLtIa2eJ;Zfnsxeb8reYeJBmf82O@qlqxPeUq|J&U+jq?grd!I7FkCQYr@yBr%iSse5J6iiNlCG9N z!A0JP-hD1rQxx@dY%GNVFylPnfG^Fb{MLUd6UV>;RZ#!cnSnObqB=I zp|4Jubr*7t+ROqRKRTk76sKDvpCN8+ztdeIdk)V#cOzn$D;MItwfWDz4-zI3=KV;0 znh_9p&-Ps1tHqS6IVnw59l8tb``O_9;d67BG*4c$_TWaei?J1T-9#>gd6YcCGW2%XNnbu-h}hpiCKZy=)O9B>YlFKrW&z|?3V9yGuP5}vX>jea zGpC=6+=X2EhQ6}W=qUEjE%b<>NPi!>(~QN=igb~i`niKCAZs~0_-rsY`D38dOYk1= z?q^WPb7+x5W1!2=jL|qKYw%d|!_$}^3^Lj{2;po1Y3GGhJxQU&08Ukpw=XG(!S1%LIWcPs7}DWQvek+K$}edaM2j=Fug<9iiq<*o zdDV2gTsr)q7033orf(y}KrmFUaI6^V-F|S1YeiAEL_mAO~RCQNsi~onIvy6)B4ZHpn-G~SX zICMyZbPUqnNDE4LcgzR~NH{do4N7;zAV^DhBi$WJJ^Y`wp7p-xd^w-*59hwtzV`m@ zfSdeHV&P+90UCySyIYb7K)|6`UVZY*cuDtqdBFaG?;B5(&b`DBFLk5`>>EA@e()k| z80pq44N;lFago*$ zaQJTZ@&3h&$FYJS>GeuaE*8Dlisi2Bp{8-|JYG+^PBR#|yV5Zr__q2ISrh&>?wU#dZKr zp)=cJK#JeMY}o3X9MGq!kbQfXmRduSuIsm0(qHwX3rXCwZ%AS%-d7*AYd1;s8$f$2 zaRHazD$rFUUDj3#=%AQT=uvW_==1ZW{UybiaJUZ7fNW-10z8DMZ<3R!V%j&ZM{x36 zF}6pxAS9uW3(_6#qwtJbFY-%|TF)D_SW#&#VwaZ{i>>c!{XEZMLlb^#$hT-zHke7j zFNW>I{#5_@_5zPE9rxcSTxZpKH=sG4kPzA#N1`hp^MFMvqHD5-dbTTssC>%CEQJUk z9I5~7WA?_k8uf zwjnG_n*EF)h*iV$656AX9sC5KP{So0qx}9-uNw>6DaH@#wdO;03Micrzl5Ve*DSVr zz*38^Xryta08MRY;^O>ImneN*7d&s2<20bHwO`S6lC5yR_4l$W(gEWBsWgcnKe&_- zO_hI?)emLJTvR}j&)!HT3Lk%XvHgDW>2E6_oya>y$|Y}zzlZN{s)_&27xtW~BG2@X z=AX7fZZ9~M{&|PJM50=rsQZ4LEpeAWx!Sz zT%F3uY5)XD3O8YH_|Ox$@aI)ZgPStl=);MUDUs$vR%3Y1QJ8`+E0146Pi*0k_Hs>0IphK>CXS*%ms1eP~6Wk(>i;yZVdj2QHb29V~lP=(5(~5UiZ*)E&30B|C zZyRy(bA5U{zhKrB=hWxHXQ9O6&uAN5c3)zxI7uO_VY-QlT#LF4+jRv2L=J90hfivA z6d(2x*j|>X;;x%BKUFJ$qre|Yca$1MnEg0khJzk$e#nE>Ea0Li+S7(dqqpW74Dq*j zR*5KI#VFZAgv0V1MyQ~G8^1NsDa)(xJ#JOi-~Eq%t8K<#OQ;)A6%R#PBdS4I=&AwN zeJ~MvTjJL**wCj3i01Ip6R;J)Z!G)&+7$e?N{$1exu($5LFF204PhLWF-65X9%WOv zy+DKC|BUCq=Te*FENqhW0hbddU?Nid6?fi{(Bw$8lW(+A6dTO@WgYEZfIbID1srFi zt1*0KbyLEO63;q!@6ue*hJx3)CPFFCs-QN|o@XdCQv&kleT-}2GPK4ukv;&ECZdeM+hM>f5x zxx4s=3B8V%b42K9(I9hngoW1b%EXXBO%EGkYZpe00RP=+57@TBoB;{lF3^ayJMbPt z(8ghLmKvYV6*xfLbkl;IlyV!c0CQ6X&p&(%!ewzLrUt48e#`|=0hnI}sfvVT>Xga+ z*(mTF4$Y4D(w^7IQ4Z;LaRMXGhRwBm7M}%6)j0n-tE2-J4ZZcT%s>fPk!R>Fl*yqs zmvp9CoS-zQnV2{9T&u)tY?{PZ$F5f$c(~B2XF98C7WJ}IBSS^_fOmLp;5Ytoasd=f zlb>GiD{}ZWIy0bc=oOwf0cQgt1qv97rFvM(V@|hAU~{;Dm`C@3dM$~ic*&t(QVz@; z%X$lhw%WX;KQ=FUtb!F*g7Dbr11q%#(8Dp7pHgM13Tep!_;Ud{ z*Ax4|?zN05%z{2P=}oZFoZl zb0mil_R6ep(2PJm>fOUta)v5~3aQb&WxJMmbOd=UDQpDa^HH83@weulW0%YwGbnT<mYc;@1`6GG^l1am0j0k^CD3n4%#sv%^)+5%Qy~(ak4x_o3 z*{-2Dh6KP;LudC0U)O3gzJg1lxdc9ooNyA?S6B#Pi6)E5u(JEbFUy#&#$}3n($uiu{1p;F7b{#JAslLP7`^qaX4Y>&! zVuQCUH@y-Dwfg&$uRgY}?0bm&_Mb^~1u@amCm253-Sc@!N{Sx>vQHND_-U9S@$TtUek;}BW&+aaAi&&gd{4ki7Gxn;+fp`R@8CK;+;1P zOYlD$n}%t-k?Rd%2ZH2l`a%67)(~_X{>VoQ-IqEjaSL{!tyd$kkDSJ|&4AN26$;^c z0kqN83N~1I19;KYPwyP3vk0cv8gyI*+LHSs(eXiYQSi#oL`ius%ScWVC`dsJP0UsZ z58PO=uO7>9s8SPy9c<4ht%Wc>V@_}am-CF1m@`I_3mQC5a6uM4#}t8n)UylzQk(Mw z7tNjEyMCeQ8+8BF#;t*bFw#byO~o+~vD(`dm4*Q{Srwo8C$zTwIl^(lSvc|m(>Yup zPA`rl-#0tvP?9GNe&P$eW`eSsC8=fg&!rmeFH}pO#i#AaR#7^;vY;0_1nKrNq#psQtZ!5@4g=XXmb+Pa?g!g6#abq2bxOUOabN|miKhbmLd zobfn#Q)tLQAC(DH7`QCSlPu;8>XT?}F^w$AKQVGKa%nM=8Ccq+npF<<=}q?;)Fl;I zeAaj>OJ}pQsFN*u;sDI;9+W;k^i5Weg4=BZG6C+_vkxD8ed&J0DKCA!Zoj@4Jod>v zPv?$gqq4-7f3kXnF16vkcs|j`hs&UD*DLt5jV;AMQxPm+Q>PwWR*`qMy-8 zvbcg_s=-C5J09@S2Qw0$RiSJ?SJC_wSvu}a0C^CrBZF3q7vJ*+06x2U&-y0lf~UoC zK86~*+}Dwa2fNkVK>X(DH}>)N+NH3}KjVX-a%DoO!P2SM5%DJ+Kx4D~cgBLbdxtTD z5wry7f)-Kew|1hU?NfX4p#8SWPAxenF^-?2wn1p$r>cak%4^ypD~agnva zH5dQo^5U-}Zxt?mo~@QvZNIA7m#E%nRQcfZHYVlm5Y=&hhB5iy1K8eM!Df&2MD|OC zF%s;A7=-e|X&!%|ZImxBXV@s_PahxYg!9?9;OAFYmfy8@^?XpS&@P`OkOG}}?fTAh zoLv?~bbPC|>JjC&bRt`A;IZC)`8qx9IVKAaOn{5C*P*t>HY1imA}_qT>PUCbylmdF6;u(CJptmHr_nPR29CUqHek$ z^MkByQ~pqQ0q<EpP5R%im{Z-&p2w-bdD%WAWRp%8u&K})b8?e(37_bbK&YaQur zIo&mabST`04W1KZ!zQSY(5DOm-ybXpe&*L=_nFga*Fl9Qu@peDH^;O|0)dK+V4_CIC_#%8@cjEj@u6!E6if?c@X z62aq^S*WKFdaZWSMN+m|yy<$3ooE@SYZWBP3I{Ysl~+VF)8t}Sf2CH0HIz}-ndP^F zk%^5EjnpEzx>=8*?V+~Qxpah2jp5b?uA<*QOwNNinjYPrAp5+zJP#XYAvlPg;LVSg z5LGE)aql|5r&)jde78n)Q$a~TZ{IG`IOu0gheKQTa>1uHjvAQ3l`A+pLFZ=(DEQq^ zPtUxi0wdpHU+5OQ6|XJlHjH|L@|6MxFPa>5>O()mY{B=m{`PIbq(NB1^XcJr@v|YEn>0}0XK7|VBwMT> zK^>ouJ%D+ZUBI8^C!b7#xdOalB6B9%m?3A!jk0!yuOM`};aljwBP{j}49f8GTHJ@O z?4NYV^O;_M&HA93eYUD~e1o={gzsS6S!=(qI;2%5T%YQ}{2u-@HCdLE<#sX!e{o;~ z3;i6J%h-%yo%Fs5O!I;)m6JLIA`=mOvj1M>5oi1Hx&QiNUysv})aAd~y;)X1k2Mz4 z^d(uir?1hlxQ<_yBv!p^BKH;oXxX3rJ;i-RyZ#|RB&V?<4C{p7JKBUG;ri(%__-}C zKJ(aQa`P+bAyTI$h(NdX@3ZT7=^+H3ft8oR#;Xz+uWrBAm6?;ur;LBDphkDft2@y> z7fi7CPav~mNChctd0IbuC<5sk6LU;&L#LtuHkmb4dJ0BgP!CA>s<@8J5A$w&s}<>Y z=UoB?2nrzvsQ11#IF6(MlgHeOV8Lp9D-R%%9*GCN)Q+I7PMV4tp1mukrg$;CRxa?; zWF|48NDa9zT-j}xL;dN&l%6bPyx@hEViDAupgEWgLe)vv4F7$w266t%J%?k2+>QcH z)IY8a5sjnZznOxExB#Ww4o3h7d*0W`z{Fj21!odiYF+34?6$)Irb!m>?C0P>=m5S<^g=t z4m>(mg7mehB~zdju0>?v@7g(`kjCTV_~&x;T>U|jHw1K#m*Tlu_%{{E2P_71*=kX)} z@o$)w@`QS9k(&}F)$)L+4~r_cq>dkd)--fZ$u~`j7glvnDN;ogfh|sh?-2ToH$1U? ziR8^^>^)B|v%!OW{Nmiyk)PYD)5-x`4bX=b-N%I=W=Kn2MdIS^^E-#9{!bax5PEX$ zxGJEatCC{mQWt1&+yp56yFM8F!L&MA`7K4PT-=0@F_Mk^2*Po z(}1q1Dy+uNfI@_$rL_!V2KOX^xC^B+%#Cy7s^ST6h}882mK0mO;F9@FQYp~bPh*;n zwU^V{lI~9)M!=aEcyxfoo3IGS zRb$82?VKjcSy^E-A$mJpWi5>6!J7kqZSI9xQuf@+KIo6MYwtB~l`pZsAvTufH2>cy)xLG$C+VD~)D0yW(5 zYn44`)pA#&K0SNcJd6D$tNXnE`5)$o@3JL^5EO*6LkbO4+w_G>%4xwq-jZn@28#2; z!8-GKW{4DO z-)`u+#g3u*vV}RD3Wd~N%x#m!O3nW6-W$ShEw~bogp!LKm1hV%tCtzd?QqRiWF6_x zg0^SY*Bmpj zZd31D;`2$7+%8XHt$vX-Y#g1bN~WX>L(mbR>v<_m>)l!~guq*90`5MuU8Dun5=FC|5~Ie#5@cv2On7N*RD9{+5HX0_iKjvCKo z9JfQN5f0Tj-ospK2y)8I;;F@ z-@v|`Yy=2Pr?5qtL^T5(Gk8&;x;Uw@q z{!BxMDoSEcP9tdiNj3C*Ki*Sn*!HKwb3jtK547C~O@=ecl4VqHXhmS|By&L7-&wpy7Nwb7 zwDoi)eYa;~wGI0{#$`ADVB<4Gbo@Q7D}? z&C>XaTfsp@&XMcOe0un4xUG6({*43NdT}pzWXk3$Y9yho!o!tZzA`2a_L+JQuA&%1 z+Mp^FnpT{6QlEX^qQ&vOR&Po4*ibAW@)rlU8Bv}7evxejzux^HSy3GMNLjw+4ct^k z7#4=_W5U#6tN^7;skDJMg>QGtw@Qu6MgUEX3Li1LTMb$QLBE@*;fw2x zGOG~^|3qZCnU#RX*TQhC3qlM_^BUmK)GtuKsZv`rEIno`L+BF{! z$6uo~DakuosBXrcWZAFV&fJiwKtUHts1Vf{V${oVVH zo3P{#bSbrthm-yNY+rp3!%H61Pqb1f?PAz-qN&NPK`jjBN|SOBc`DnbLjQrR9J2<6 z;{4S!F(Wh5AJp%b%6&19lUGJMvfx=KK_7P2M8mQktrh|ww^xGAgQ_Lw@HyoMq&Ry! z_fM#O2oRL_(`wI0v#S602J}S4gazzz(FUwpv0stZJ&-V|P+PB|`@!i4qbm(b z&q+7ht9Da@*gYY6I-_m9S>JWqr#e#Apq0<_{u1K=^VL;|vi3;VqM*%vG)xMCLOK z)J((sC|-0QP}NFtJE5UptLDL^NyHU1Yg9>XMVSAd9aEXDp_?06(BY?d} z?VpjL=~pTF?cm|_xI}JJ(D5^7u4CG>$EZ-E+oK7%|JXi?C7 z_B(U(c|SLQhWq5>#yz$n)^jxR>#(f*#F35cf5|@{TmRu$OaCD|L3?=lfZvDbD*86h z?&-j#!W5#6QIr-*Kmj~)zbIj8-`#>I>=hv8W0V%`^8#*O%)6Z6X zz@nk5J4U(Eo=oV_wl{OD6{jZzFeYEV)L zlaoJ@vsJz;?Ab4jS0-pS@rl)-@Ub6?pd>e5r`R5jt~*V?m&1}8T&v~s4M2^q1MmPk zhmh$NGlx~ZQ`AW=`GHU*lx9&~Dxqs$$l=4J0d{D!IxP9>p?8D%RQG}l_g1xu;0mZUz!KD=J_zD2ON0Bphv;2q9ceW21? zg0UXb zF&oC5lf;vfy9A4Jq4*g1av9Bf4b9V)WscR-FM|33-WdECvTWhsAlFgpIhbc8zeCeY z2q$PKT2B7enSWfOa68S#G9f`bna~4&w?C=N1zJRB!rUeix!WU?A zTxXYEq}1tQN>Bw(e=fGpR!Y?^1jEWJ(`8Z#JSug}S&lSz5`Zn>U*Js~sScexW6~XHW+PS!C#xDL5@eLL!sMV&s zGl)340*}#PZQ+;G*T5Fcj?1O}pzEHFPvsK#!CAZi2#IgS-Po!yHn_qz2!AASN5{A^ z=uXbvc}B2tjWE=Mwes77cS#@%h|w`>UTzu>*b_kK@kQ9@P$e4r#Z3c z0JK~XDKt3{4jl3B;XUE^No!L<(bq(EwLKm!`@R2LG%9{t@QqVN>fyxi*EJ)QIuc`Q z25KFv(@BWrhBeL6r;6YKo-Qz+adKu}{2|wLN9b#>rf867|5t~KP&E=g(!WA;T_lS1 z6W8}dAHuC-r}&6~S@>j}&P(>cxJ%4<{NFn+yU~~1{CwCH`sB#x_^du=ODr1c#1Clx z4A2qBMj3vbvF((hX2PBP>hl^-=|ysbENaEM_%R;YKq9x{aXe8crR$hGKu2Lyev1ws z-S{-+hMV#7S$5o$vut%mlZc40Kw_url%!@lyhg(@yIa$^D$=r}>2d=2uRXSkQ9n%f z;Hc7$gWg>l0$3st69D}Zn~8zI430TRoU`9El%b7Zd16O}!KxysJ?%W^het0RX3Kfs z`gA6mrd!`JsEie=X70C36_&PRfrYhqSu9bzf=7GMilz~A64#MayR+x&NRT4Fv%(Vi@U8W!g4HV{iQ)_h#1pOx{VEegJV3Df7C*zrDsSeic*CN0_^=aTwaLPM*S^exdR zJ5#IBNP`i5*|ElNURf$9=@J5!+aSS!T|ovnF}t0#SH8Xvt*Q&6c${!>UVFLyco-^y zKv;oG9=t(6?)QfGNJjU{vJ;&%i<0Q;V6s?C%Yis0o%rRHA^z$iGc<4RH^I3mWL&fWM^AOUJF#M89iRdO_ANI|M zTqZ(XVO6;pW78kNK-X=#3mI=F^}dZRuIb%NW01j?cMJ8>_|>bQ{W;_XhEv6FT_zQM zsLYrlaA?5A6KK<9`yKyf8<_@ci1n)WuCpTWL{2^M zb~84)NYb<4M<1)T-{AxFdLwQT-LWb@9+i-gf>!Um(#O#|2TTxDBE|Ec1C&}l4}*Ii z)li+x^^uzLis*w6KCsKI^3|~cr_b;$RtZ(uz~vL&s>;hssyC%x9I6PQHEBY+oErxOGa5f0F&16gNlLrz*qfcoU%?>E%4caL*F&l52T zW$*Scak8NI$M8qyGl`MM$U;87V!#P-B}en0geKqyXBCY>BWnuBl@0RnS_>eJ4Zy(y zyix(KY7Vvk0A!zU$rU`lzc>0%h`Pgj9SMQ|s{U`v`aAgIJ6AR718ecxOFAAxI)%bw zZ|HGstOU(~kHyU8RaK-dblA!op1L*??Qbch-Ow#k5`cVOE$Inx@JBp(R?pzSQ6dMc z=*>iqfI{XfB0Z@n;ng^xUYU6~c%iY+!;~&8x@l3C37OqX+0P`1QJN3KpB*r~0EEq2 zG!0X0f|9Bbcqoc$O0cIh!VdQNo)XPqP8E0dpskBNJCxTIvLV_>gY2y~EQdo01o0L> z@G|8Xou3_^F)$x8M<-mtCl%xE(XjbOA>Asbl`*`TvdH2VTj?2LpP9v#b6Njli)Y-> zPKwWC(ed%n>nElUI*Y6VNwLGJ?t)L)7@m97S5|=Z@F|3~KRLhSj~9l3w&FrBJfUG} zzD4Dq22>DzId1fRiI`YyXdi=%|m)nDY1ceDBWP6@wGkMG9k`$fG`lpCPMh%#Nt|J zT>~gj9KM|%C9e9?aApudHqRbgpdMn-xe& z29z$vSX|xs!`UTA5 z05Ngxt{WUT5;@P8%BmX80DrTt8Ps~3(EZ@5{Hl6Z9Quz#f~|7FZPtKGJ{uPWOel#r)EBm+8Wn7ohBd+Dqrj?glos|E80P zymPO%3Svz$q<(n|%!PlCFtL)l@l7!b0KsAj^zEidDR0?~+G_ZkbnA$y{H z!DV0A(H}iQ0b!OSF9eT8)7P!cGK?liSf8f|e`ubS3Q`)lK|zbPE9V<9XVqKe0&%eHF+7CUW&mo#ukcE{!^F6_JoNa||Jc+Q=WZ*$* z#NSQUV&SbPVmr>oNs1$K%05X425u{bG%0;?gQm$V;2;a=XClHu5}16P`Qi_Xk?1u+ zAn0bY-@^h&jVrGdQ^3L_6sGFS7t4Tug0k3Tg(x0ctW&kz7lNn(T7z%&rlfjZ=@-B- z^*6~>l%^8iTFdzYSe#zyhQU-P3y%vs6s8Hjd_OBU=9MYoq7Ii%v_=#8gL^!|k?~1u9~%vmMc6 zsp9!RwE9y?(+{h)#p30)^HzkJhU>ddZw_RD1N12lhuR+!QnIhHQeX(qrFViX-T_Q) zIc??VT6lvjpvwc^#0=kR>uzgYZ_{nn*~G;k#`tT2F9wem3`i>}!)Z@>>(%;F0uGCV z0tLmXK?-qEx!7+2Gf|@{XZ-q#8R>$>Ci_KkI|1oX93F;+D8f{n{q;bzRq>@(MyvM#0wS~bjHWG5_d|X7|a9EZZ zy+=Wv+z?<*{g`Yp(%{*?uf0W4X z7!4{461l;9*!$tJnsGktZ3WLbFlQRws2j!3?^Alw{5XE!|JIMutW3h@u;we)2Uyz+ zI>2$O*O(uM$x!k*=fLP)txxt}9{ax{k2?f`M_y|+zeYG7?MVk-zpqaKpOmL8%Zy!p zjph%sXE3`h$vsR<8pKr}d?^Z4FKFhv{HaK(GRI;##Esu=5l2sy)4JsOt&V0)Sc$TD z9Z4jX9F|l)EW)raMwFu#QRxx`uIr}98Mo>6n)~w3?w)=mL{w%QTtq<%_A#Fkb12as z#uT-ngB5;5lAqKY1g(${dpj#N4g$P~ z->3pxzQ+rnT=^}uW}rwl7_w*De%I!HK@&m9s@71anB%>Ji(NQ_1pA;;u$NBUkc&U( z5S_(+^e@b(I}Wybc%`fKZpFF3pp|J;d?24M$~o9y1mN7|yx@Zkio`Fpy(&ud{p5h7bIPp+6jXmEoQ2{4V~E2g?%Yv=h$VN= zsGjS?l1zIL%I{7tH~bMK#Jy_Vu77&317B9SdXerP^wfYAWVQ!zS?L%Nlus~#ioQ=U zMH&L`752LX-+tQ08S*C?<>xg$DY=JMo3WhP+0vVF9X0XteS{{77boa z#7w*U_)ZHTczdBk3sXN8X9WhyVcz7Q?S26qIYmA-998Q*1euUx0sePs`0MPQj_55X z4^s4&n!J5rVDfkvdj8wv9}QZ&R6YrE>uHoSys?Sox)Uu~s|kxg?ba$D{=u1uMG%^?KMdfnkmIL>y_2z)80xFzT6Q zTL3iJHFz7PnwpR0-6Il{?)raT0C9fQVCGq8^2d`8yOCX-<)4g@23G(T6W-s&U5da6 zGq9mM-JWaY^a6ULIX;NlM?^hr2%WaqKi(0ujXlRshrtyGw;z{FtwkZWB-orIq={5` zZ&3M%G~35gIuQOIo~en=%IgAEx1E7f0G$aggS|DoQR#;-)Y;$c4rHn37~bxRIpKLL zkifn1hX!aE$K+vd`4p#8k#ypa)u{!i-U$9J1-k}{TikGZ#^m{;NJwO6JI|A@ZS%=@ zuz!AsT@rX9f5rXJJ$nd~<5PYQWy6Y@!GI#4LxNRY>V zMCW5{w~)^e7z(9xD_&s3ch&tG@5ScIWHutenzoD1_>|<}QUZ|S8D9kMRBI6OAZcis zE;apz(e3uDC3_fp*baXl^mdbk#>hE+ZL&#Kp4Z6Zai{bEz2QTG&^L_FtjpJl)kiD` z*|T`%;$MLjxJ~=Eik1%Q#r1hYL5an<%!6pzy0>XFsPNxe6VqzM_|`SWXE4SH%DYqb zkF>;pGb;JVgfytWvBVF1#8fm!t5NN*t`Az!G9aR6%-25#3tgOTy**=>vz?m=FQhnw zAq3dB_iBX{KM2Zvb+A@l0C9cR4C2v^*Nwc0akWAxCEw!xqF7j>eaKSMFzhO}SD7dR z*?_allBIIXd+Bm~ksTUQlHig_H{fd04XD5lpQISGEQwzD)Ij7hN($eePI`t;MsJgg zo{|h+tlTeI*P?P#I{2q5*+l|<+IQpk^_dlFVA(O8?ci?Hj-|W8-Qd0YKQWP}iPqhv z!t)LD{(%EAk*3aQpz|~MIxM!Gi-HH;RhA&`39JMdZP!+4H@KJtlQb z?3z%XyQ^w1&LvU2>xa{}j>|-e(6i;Uhcn5O>whgjJS9)q`p|t&@MCj;dIOB$#XUCK z+dRnUP=?fd_g3+7Oep!~JRHkM&OI=Vf0dJ{{3OfM7-KTuo_a@z0e9~0*E!CH6tqGM zFc_wLlmb#^&#sp8Ot$PN?A5`b1ptB3I6YU4RA3d+Hl0~_na8V6xaUCnVBod-s8F_~ra5)Cb z-+HX@^u>m7E3eE~teK^Cw?BB04-5U@MbZlJSGGoJ2N94G74F>r>7498-%h9J{uVed zX|B?b1n|IQ9dlxlcz{2|n3o}SZg6!CI=zBHk{(5OL$PPDm$6g@a&ocv*iaD>sjLMV zQIS+DlC?XyER^Y;gUV#hUMcBd*Y%$Rv*f}1dLXHrIToEr8=j|0G?5;5k^xjHIcjbp z6^0lks|06EB!BjrUXJB5Fk_=f3OO*p=g7U^;l{Qvf@2jj18aDQujJoNF2DQry%pp$ z{+r&y^yifW7H$8nq#aG&c8x44Rb9YRR82)IX-j*Y1W0RE<5pnUvIZl0&Q~2*E*xw+ z2n{%(!78n~(y26gEJs;C!QA4fCIMen+~_(RWo#K$hL^XAunBhq1LDZMU$jk30_NV4 zj4ygK>zCQ>@QOU)!Pl5Cul}I)QpN+GmXsB5WPO;m0d>QU@6seJ-bLw;18{d@4zh)_ zyYofSzl?WrXTzc!AhV`d5n9O9LV05AKXB`T;QYgq^xBS>7;oyoQe7FSTYNi&!8*70 zXFvHi6C*E)VJ5OR(${rB@1nzE6Mw#;XrE?II= zzm3=^xY1R;3oi3GOrSEor4}qEy2e$RuHz2ew^?-n)bn7c%Uw@gn$KY_uF(L6?J8tu zs2PTt$U&J%D|Y8ZFCWbGy3?^9%zb!p?dXRQF??KJMRa*ynOEw)FNd<-JH@OOOZZnE zV$S)s+lu$T3u9Fr1{^xQdps@%p;kZ-G>>q8lH%!m`)}78{dZ2eFppT~vlZYrCoaHC z8t?*`^)wrOG9P-iTmB4qx{@rxq=>bO2_!-t10D%ilNBQ#?_NU?inN^}#*gcCk55ey z0Y5;flGsPIEp^%_=4ctY6xSk0LEaahOmV)GHPs8$E~( za`OVcggxoMp$$Dz284QAT>huARc>N%zsl&`BtJQJWqd?iS+kS={Gk(9vk3R3oxIWK z;gb^~d5kL2s#PmqDX4ugXybaVZnHwHL{)NX{6~>a38L3OmV<9xD8jMT-!w6Ty5f!8 zavFLoJ$rjgtnMF_Z&DRepFaJy_(J29`XF0nB15SZRWtz{zut{d{)`j@;X`2qN!9OS z9{oTrjv=HXRvBv{3Q3yimRe;swg+k^?0`(H=Iy|Ho5EPxGa^IA$k(oh{D|&PhOQVU z2i{c=zcjsFwtjtiv5f!|Cr84lJZRjEI=f{llSTeX)XrC^bc-#?$EX7aqV&scmW(VM z@{C>yn@+kU#Nt=OVt`wteSYDzdT!5;aHCJ;(@L#VnLLfv`#sCpJzIs}KCz6SA+5rN zvtub(5boqP;sfySs-1!gN%H}NC>@VTg`l0Dm$Z&EFYDfqd#(sJYs{zwERvnM#R0cA zMU&xi3Lcyjw!S50@1L`~LU$d^3BzAPNt-fiZ#Jfc-FOr8X!}DXZe!^b9sY*V6g(ITf9E;)LUVfNlBhPEOO9>)op!M z8$LyyA#<=YQo1W`|pi46r1ixbs4EY4v( zSP{y2_?MN6E=GNVwGB|Z9(dy=2hl_8R{7}}W6=$Z(N{e)QIghB`hqoSmL2j!%N$vQ z?k`alNLYjCf`VU0f=o3Z&XoB+Fj?ViCs#sUwS@!%DPPg|qPsz+L%)MaZmy+1J>9Ug zqG#RZ+kYOZG*C_KZqr(v-@3l{0;=daJbM1W+2<76id^(ba~QiCCkghrcIYHY!~2<)5TK9C#CDz4 zVp(4cS4Rz!?Hwm6N0eIE`5!mTv7;%Y5b1SR)B+%xD64#U!Zp4Z++aAAJJcmx1akI_ zpM&W;_-y>w8vyYcD#iiqHeU(LTp)_W_FQ&=j?g*brAjr1#8|!RP5``>iBDlIMXr-l ze9PeenbiI+xxz~d?IhPp*p!5MfRF%~Qu9!LKcr2*VLltE5kR%J3sR)tg*{U!&i5jX zPG|4X9I?(Uy^C7#KDJCC?h_YQ27WM;zF0i2TDGhYcyMT_pSI=Wc1{%| zy3P4>0t}YqFf3*YME<%9=CLKOY&Hg$;{pAygYiQ zEZua?FENoqnv)3J(Lpfu_3b9eS%sQcj)eSf_uH<-p(7DOGV#q;3czy5f^279NDLj@%aD~ za5+Ly#(VC99sBT`aMF|VCgJHhU%8PBQ51-M(s*e|hVXt^py0=c6ZV`(F9;j^6Caki zPja}QzR%Nf04+NV12@Oh>G0F*J7+J}g$!G=8tZ*AO0+McX8%LgSvW=Yfd6`f1(xoT zl6gR}zDCEb_by>sWz{SVH}nKSb_@B4Y5 z2PZDr5WQ;vQnx zFg^^U4KDq@3fD>!nA9AvgRZrY@^ExoH?jUl+`JL&Pu~5G6<>++0%UZ6*Ccwc=C5hW z?@r1A&q0WXA*EzFvFEQ9{*D|P&s)KMS^>1b!iJ+WMO~6slp0e*Y?&}N0Y7c(L??=g z6+BFG9S`n%(*hNfh-r}FzR#}cV>ZA-bh9JB!10cAZ(2M*&UDyU7j4BY!U?XvMF&FK zHRG(`lfO**Yv-@xWQXZE2eFT3lOOp5i`w09RxAG5%!*r;#S&<-DJLGs_TDB-g+3Z>2!}bcYCL<`f%B8yRRRImC zF>I}1X0`Y?4vao?^DjWniG8nQoIMV#_ljzVfA^Qx=PK&v;5op#x^!YAPch!v#7o+; zVh*i~6{UuLgajrBcy1FQfnsaAROiW2S#l0})0~ASCSO|En~qej_CGw5%(Kirrv+-w z?MTK4;&Tu?3a{UPQcneW>|c zFKtA*lGxyziERaS&8kGW!t{~vY6wyi^&|NEwEN)2{tf-<^um9W6b-v9FqrG8k08wJd1m95aMT6N)f+N}^Dv0&VPJzXOifB6%;=NAzu!T*9P zhd?o>09$&q{aoANPkS#bAGn&Ql>9F3!6uCLZgA{=a8>S%^4N;OxqZHgZt!w&%km9| zCwaBjr;(e=Y-+#!bnADmc&hd9FnvQfP@$0g=(?AEw?;xK{2><>F=eJpmg5Ihb|MRR zpX%=|Cr*(*zk||6I{YTh2wn|Yt^ohV4oQ#Oz8rBZfa`4i0!=*~F3G29OxLdOCots{ z%r_M)>~D%BKHoe5QP+idGdPSLu1;2vHe+1#ac<> z)c+TTa|KgavvM3Cc=R-ow)zSBV$Kzr`~rkfe&`?r)G9ypR9*4t|7TbN_@DKs?phDt z^JwQVD^)=BYv6zS#MU;h|7Wwgn)v_s?)8-Hx0PONxvojDl?qd>GJnqptlF9{ARBmw z(;S91J(=YoWxzYltKr9#7sQW{Xqk`hA6$x747-884deTxVx0m+OA2@( zM4L{#8B=y9lbN~hk_4a{Kd=L6M`nQrSy&=Kv$8fXd!*}cW-=9v&?0V#7u24dG)ejj z$S?*4<9>FvXNeAxtgw%51DDz08kpr@B+YCPmd@W>8Aj#Thai)|X|M`j;K%0||AGId z;6?mIeJ66@M4p*`WUC5k@a}uAmKPasQJv4tnzHF8Nb=Qk1;ZONS2>=6cXXmwH!EqQ zywEUqfMf?aI6Xk7<4I5=da-iK_9@er^yY4FxViXpudZ@avERg+;JdWhc}E5yB}wJx z+r?~jMp0`7K?uEWlu;7ZfLG;Zr$p9&I6P0^ln=JE5aVq_OR18!i+-wP;Qjb-@8{QdLOD_EnN&g?OTpmjRjyNua2!J@wJP!A)koIU>U zxGzA}Vbo{N$YR4TR`Ax1%@_6S#4@=|F5b9mN=CzkNPHxov8pv?(ueuYQcZp{@otev zQk-)S4-mhs$g9%XV_BY_7%RC555=z$taO{k6X4nk{H-MP`TGlpOB0978LysC7>Qyo zyOFH?&}fNs0)7xF844?qj~h8Yu|+1NfSePe(VhNd@mEl%ZmAqDSq9t@dY5QEUs1zQ z@tv3b$yO6I_IZL!-Ff0#NG*;eVS|Zz`#%Y+jkZ`4(|-W(q20#bLo&NU-HH#hWBh>{ z2)6XVJs1JCjXmHXqx=}|&4QG;pt0^W9Q~Yh%(+G_S#wie?HYrSi%ZmOG+oW$#J@`Y zy6D^=Fz+<%IN0es1u2r?OF%Cv)+q$Xv`#FH>}bBQ20TaaV@z~D4zp+p`%fzeTDlYcBIsT8*J1-V@J^bu@UDBTvQVNktbW^_uhv z{8kJv07IS6mS8}r9~Z@md~$<+I&#%;#$pC~J$1A^EcY(p_F=OmVD5Xw;{#IqD&#oe zs`O42RvOUv3=*SeLi5xvRM^=`;2x!;X*BVTcPNq{txK9gV?!s)!nJF6~ikfS+ktT_)Uxq^xga5U^0sb1M zmjE;*L^gpNC%Ib@&(FQ71`@4l%b1^J4K^6@$-3m^`;#PFg{&X&@@EEovLC%!zTgiF zx+S%VdXr?PiB96JaJBe6+n^qM;%Rs^JV9F=qk%3Oze#~~a#fd1yIVM!seuG64vA6d zOkW+`Cmqla#HYlde-Rv1@dC*LJG)SDXx>kWL|`NHq`kA^LGJVXS6r%P8?76x%o4}> zH_Q)!RQ4e(OON*#t8S0tJ*Sm#!*+~3mR523Yf{I$U*LwW^@lLngH<-D#x>vLN!D`J zvyC*(ToNbZiN?exR*e15eGOr3bJx*am@Uq%)`O-GGBb_}F~1rg+#ksVuPGqra#a$Krs%fpeq#^ zN16E4%eukrGMPQ^oI>}2ebia`l!7kr(07uzh zr>alwJYmC@(ugnB_9#VLY|~=j%Kj8QnDbsu?I2-lgXOopIZ~NRG8F^2AI0eF)U7sY zxuAa3jF;nx#ZE*rceZiYDhDrmqfm)8zFsNP0z7mSy7?jfYd+~hM3gF4 zF(O_qsHW@}i4CT7b*b2Vhs(v`C-}yEi7lZ`AE@dgH)mTF6e70_F_-x{$UCjo0~mN~ z{8B08##|a7(>PKaE`z_<$P$l^?y_?T4AUmEaAqZ=iGQD61>Mfkwtgd1-O_ca5K?W8 z>qu5=Vt01HQH9?ID!k!*rn6E(frfILl5`r?j9%+zkC!O!-K>#!{SSLh}m0?H_K>N#*$5X_)1sD{k*i1w)@CBEo!)E>SQ>LvH+UwF4&( zwrfx8<=>e<5dpEwS7=(q!@!{~avi>Ow?X*T$*UnVIa#d7?S!z0uwOU9 zM62Xsm(2%6zUoG($y@93I(Sp@+SSinTm05E~)-NRCzxml_`o`K__xu-q)YJ-F>;`XD ziNSEkev2Y|pdkDc2FaVhd^$%5%z#OI7BnkMbo7c=#^(tsmj}t*FuoyDHF+_)81g1JP%+6S1HdWIv#0y!@y3Rt;kB22f2$Cxfi=4V@JU4{FM-dtSvpGvQ8^>5v;f5#Z_UyKFmnHN9%qLnU;CXM$7Y}@cc*Mx#Oz@Dcd zO|)JXwE~^s@YiHMYpGq@*7t5zDqG|9Yj~G%FxBTcqOvXgzX-U8U^GeoIS+m$8V?SS zB{_pE^RGs>_gDomU9kopwkF>i-3bYz?=y_Q8;yVYtI~`1|3r8V#K{R`V8y=k`4d>i zzXCnCoBk!xGRwbkITO@F7D5B#CnjbD9p>x)pbt7 z4|$^aMX^a>v0RTCBmi411YuRE2n21r0nlNKe-^wZXD`@r zXJvcOPk(iJ`u^b+KKjulf9xT+jVELCAA36wDIk5w+k|gubIV|tN9P=fi$`jvO$@xr zdXCLuo%9Lc^oAxxR0bltw;@&L3yZPF9fVInk}jxlkb?|?Ju(bq}pKE(qrxmh}#VbkVyN1IhJ7(E3S9SqQ zK$H(?=aI08DTH=A`(~?nHE7GtGs?GOI*m375B2?CAi-krSwArtvxslTolanFCmw=5 zc?SRZf&j?G`AM;Qz~ECMs|`&32d8ho*rvK@fe8m}l6IuLJ?YZW$3;vTNEe-UM^A-Q zPJ>Re1C*6ozDGWz5c)XMigBtRd5S?;GPFLx-VUYURcDUg59d;;dHr)Uu@s>~J+j0k_|Zn-DhnFgNTP4Fzd$93yPvrN=i$pL!ZDK9w<5;hSA$ zGNK66VrSTY-`o|_Bo_)~ooZWxpTuT%9;txsqKRnnG;Gv)i2CW>sr@sA3*8BqXQ>WVRA?o{*JnpSWomQ&6vfr@rmxr9u0uz+Ha!5flPTZ* zGjI(Xp&|*6s%fpdmA6kiKSgy$qc#+*l327tzpZABlX=!k|M#Rew(q#Zc{Ou9dnfue zgfg;98SKnG;Z=m^kw&)_BTsKyJ&!G{l0l3XqF}_uKR)^G2f5o_=EP4OumdmS{;f-5 z!Dw9`?H2T=_#_Ijf6ojXJj?ab-@y5@Ubg&?rn(=SQJV@~a2r+jf4cyS=#BmhHu z{Yyn1op$Ac^%&!h_g<>)9DvL17O$EWvqELm^xF~YkZg~Fm*h)k>CYrsW__dnyU-dd zrEvClYQq@zc^}oQ&Jp&oM}tV4!xPI9Q;5@!BPoc-UiThIHE+BK&UKnAhm@ORTM;J6 z|2h1y7{je|P^)FceVpKbS2&r*^WSaM>H~lG{WHddP5BpioddvDhK>3&Rk`t(jX(lH zdxKlOg&Oe@2ScEyd5V;?dVZ<(MttV+sfp50f5|XjL}wr55aj-*(9LeNZ;rEVaFCP7NUkhO z_U}5x#zl<>cnneq)_N>rl3<+H=WkHHalm>Ddn&<5|E7x%-`}!W0f8JpDe6_)>nJ&0 zr%>L1`?D;ZRo;L(za{p9wa9T(>}`SzrY?#l&IlUnU%oIXpux;E&K+O^eUrZEjrT?I zyXQia`(H)MMUhb2|HuQAaSJQ{wM zd;(w$kzZG}t5Vi;X3v1HfpFAIhGm$%2aUYAORwS4-G<)Bv^d5^HE=uMVcnB0M2a7O z!SC(`X=1t>%xGKksQW#M4SDp;x@|-LtmS)yedXM+ROiymb>x_1M_$1GVEr;8ol^r| zY;uHk4&ShEqMvE?p~(eO4ok7uU5c|Qb9^3@@@*~{U(7TY-t+W)Tcc&Jvnkl_p$eid zbYz!)Ckd*_cs*`gaI8^;096)v4N&$t)sbnkpxy0qM`}k}7%Jww1?ujO^RP=W;w;Um3?Ue zx6|G5kRKu?iFAgf+-^az@KXQCQaP4_bvHS%+1xi;;q4$^jFtKx!o-Gpzf?zS%R^Le z2hTdAk*?BxVs8CPs8)TR*{myJ%!R`!sY@~ur-{^ln>cFSh1l<6{KUmYDua5`uhRE7 z^a~=Xz&F2e57CqZQJ1zA)v@Wlz;!9TEqJRYgIQ!uI6R;<+57UnRwpB4^v&mPAAAb= z<43{+4<35dk>U$VS#utA#!b(3#%|P~Ho|x^?eDFI=6AcTq4+mq()8QGV8eZr`mjEF zRQ4hd0`Faf5Y+dJLDQmvA|vVbyDqL%bV$IDXt7X>w5A@T^6O33 zfHjEMK|FoJ3x1lKJgEY2Ag7LQ)^hxSxI?;Z_Eh74-qU{Q}L#pD%a89$%(i z$N45hJpMJ9zwfL5*w&XqRD;vufd4ilZV7|_6o(SgO1;J-;C{a&7D9&jC|v^ftCPar zUwi%xAIhRh+ zPF!RIoRKnUuZtwi_p07t@_%KDDj%p*2QCB$OeDCE?$GVV{6{!Eg!#qMPWQYG3U%RC+oG%869L`1_oce*7BfT7tT-0AAA4pboE%~5FkrA>o|Mr6z#1VvJ-YaX{Aa3uHDD)cGnVo z&9Kq4rSw+flDs<>lSlvLlcTUs)6z8V5+nW_p?CA93X({Iyw?BL6o-M7x^e1AElDKw zqLKK^04N3RMMDi)vE`LQgbuNWyaUFAU(hBu)+c9wy81eZWbp{2EYOCB(Lx126ttPl7&uE5%Q&v6 zNzbK4_tBx3605tKKuJ5qXHec>Dn_s<&=2upc<}^|i`c;&i>m#P3&2pvp~g?=d^ocJ zdszx3uSC0OoyDG^W z;!#BeO;GA5TL+X@SeiQ)=4jXopYjCN4L zz@0G*IX68%L%54<9bjwUA0H#SwaLLZHQ5DEZ+`~%poxN|OTQhH=KJx*>2lMrvwp_S zJ#2?!q}sGDwCJcN9k2OiVk%^%lm}fMj|GIr?_Cx#@MJ#Y?h&7d%hdOB6Ev=Qmu>oy zZ-|yu%YHD#Ju&@-b#`8E#zS=89*2uNYZ(*W)JUyL{N)^Nr}wIM1KWh`#RUe+?czUt z*aRZ-JgcDZz>YgBtH^py6|KBSso87)iDhIqLC>G^W@UCAXb}=YIz0v0fUENB6s_{) z2-_pxmofCw&{bbn0Vl{YW2#>mEu0(#K1UcyrO)G&z32x6{yJl@8C-L)SD$Z!$l=Y1`Sd0cUTD)(ow+YwLJ% zux`EHYtB>d`0bx(Ca=yfU){S(DETPaC9*F@$=djmi0f1?rPGD$YOY zqInuMdSUmOlBNR|L*+SvnAm|AvLL-~^1!FNvemQ{SXu+EVlH_yS`V_n0Xcnl0w@e) z@AA8;GH*G7|G0^af3`ww`}(uo+&aO(=aEytPO}&pq%1#rf(Sqgdw=w@ z{`R+DeakM@lH!U$<0B`ysSKYB25QFM1+&eq_Z^hpn^0A^08eB}9XFDHAQTQHQS@Vu zVM+{;805UVVDP(VUwvpi?(th%33MVH*t4mmjciYo=L6V>eUVy%Hc44nwN~gwNDZo| zQkm3;mX$|*kWT6^1MBdsAG@{OlmW!?6|&>(poq}6Fua`t^xCI|h z8u0vU=j7YlbSOcP+>1S2C9$zhmpzNE8Jnh}Z$s}50~&?i?D1-o;aU`iX#2d_YremN zkJNt z6etj6+3x>MZRIuI=6-M;t)0Sc>CRls$+e-+Z1NhY?N~qIh)vxK-56b51^=1JV0XKk z=I4~$loVjkaK}fTFL?IDt+^f2#~aO)q{+plzj8S(DtYI!EzGBy5-MT|7Pn`*ll+kIvN;s&3eljy`@;2 ziZRkm4?1m8)R-OqNaydk9G15KMHtigiS8R7xfp*Dfe*`a41!?>LJ-t#PJ1;uxy>Kg zSwI`^bl0kuC~T3zobyvy9;&j!=GIZT!n&s5rGBkxD|@QhRhz6jCrgCb=*X1)`R~ih zlR?$ngqo>S@AT|4p&mT%sT(hZ5!wjfm|w;EmSa5fqAyg+V}XMK|4j-O2UBQg2|m42 z^L|XUr1r)pZNDz}#UiY-WZGuwM?z-^zx?El2^*-~4I1;g+NvTQk4K*S2mm!~=Y=IV zkRcWWow(%kM}|04U--~jj1?iE|LwkyT&}LME7_n@LJddHly?`mWl2rQsLxbK^|Aks zcnjL)^83}!^6K){rB>8&T-a4y82sUK?J_&`@#d)YyHEL+We6YC-U7>HEwOVz9`zNm zYjRNTjb!uTtDySLzoHw_J?CKkj649}UYT!@=gzj`+Vxca>SoSA^kDB%TtAvIcq8V015P>kzo^yb404$;u!A>Rex;aEAN(vFL;T98< z+ue1f+j8+Uv$2m+bGyBjZoq{L+Gg8`3XmRB>YB|t+o&1}r%egokLdf=r!NZqs6tt5 zKnWvxoeZi=7hA#j#jEm!;!f)t26InL)9K-P(axiBn*dIMy<`GkHAF!7MG}xV_A<4g zqqi~lWp=jW#|W)lJssFX}31; zKpuuf2Oq=S^W|9l0cB4Y*?y{5nJ*wu_9vY`%da=XW?r-L{HqTH!D3in0!}yq>7d84 z&>!e9ULfF4{Zm4dd$|79@QTd%X*#AIXu<|~8kzl18e?dc?$G)7YUDZYe^?gS57C)a zYd%8ok}7_JD5K;%?5hMabXpG+)Ro<1R}>Jo09*j5;VV&0T=O*wf2j3@8Mr{EAa;-;Xh2E zJar$LP$|t6)~`^rF;IFCKCKNejm|tKE%O?a0H;M2m~E3T2w@42A`{@1vL|u2Rj2`Q zEH!6Z+SdcWUH57H#vboOn3P~@Re#OKOAP+X$@tmqYmWPVHr_zRYkxIH{<#e%owXLA zS^FywvCS#eKp}-N)MXa74zc$d}BPf&{T(GF*^EJVnh(qx2Ea;#DEs*V7rR^N- z0xQm=L?r6C@-BiR6e@>r0MvxK8g~okhs~E2K*5nVbNPq{ICB}sG-jnOI&3o3=o>fn zjA?V4TZtOiGg!%(S*(H;Bm+F@(N!$%oDs_Cg!8U{_MwmCjRgvtxlXHD=An}27qsH1 z8*CEqKj-*4yb2P2UQt?2!LIo!5rw2??1%1vg?JJ{HH%&rCB~{#d$Rys^HNgmgIifz zxvnCD=2iEG+u3yk2~#FRbks$_!J{@$pFEWe<(fYcx8;959xbP}E$kQSH`->bhIq&S z&Wm^pl*o-~)Sn5%yuZonIkwS~+%R^L?f()vZnOrLP_=(zAxJD$9mkfo1~vcD*O-cw z5P=PN+-L0-r8}b%J<>yx)Y>iC1yHhyPxTF+WV4)Oe>U1I%Jo1-%xBOP z*X+^5LdD=w8{uE!*k|$V$5e9bf(IrEX0z5_AY0*I#^eHfgcV{8x<|h0!e}>2M=DL| z{O9A7p;N0K)N8;eSXk?v06yVMn67ND$#CEcFu6nYt7Zhb*8}eJ_^t zRn`j^UIXP^QIcN79e_U203|n+y@c_)lf?+pWZF2W7QC*!AH3r%J>~<-OesvApiM(* z@gZni*FRqDLqWK`l=!Mysl>sfIBykin-}d?D`z_)6)dzRq-6s37_n$XLUBjMLjCxo zROw^72csu&*>7Q`W(pB)gF9T}26E25Xqz214$ie%aPPKqkl_|vw7hxXqjR|rHeIWc zA|QhoA^9uk471_>G-n$z641h;cYnVKX;TIuaHfPb@De|P-jMrFZB!h zyRT30w+Xh#oaQY4_k@HE!Yzic#Tu(YfiBoVrNQ|}kX^Ptwq0di6+{Rc04{@6Uu0K7 zMvqRTvC!l@Np>7MQt!DUWWHR%S?jjA3SpZfPR=07U%M9oi#HjhXhjm=!Ved;Ctq%r z`nb0%#26qOUp~}yjDp}TTm#I^|1fc^SAjIn&m(H=$WSMa!-6c2kFy?@dzCaJN9$#O zOu-B7vh9478?*xkHD1q}za2mZ?K72E`_G&#nfPvMxMgbSoo$uVet6WHh+if{c6SnT zd}QOSuS{6;{F*FP$_9AGwI|3{ft-mEv}*v2xh2s6aIEZ)`>>miu+xA?iM!G1BawS8 zsk^h0eERDhT%uvDh(o@}^WVnvcyD~4{R)p4Gj(DG(`U%KQN?-UI^N5SDZ-k2f-=+@ z)u<4~n<+Kw?Xq0s4w3ndz6E=!@Zf)@edm)$-y*v&CmmjvJIw_m0#RDI2_%23gte*X zziK_%$IM*P&kP7X2En%vZh@`zuXsy))zMwfbD#RTb%$b~?CB1aiH^c^<6e@Cm}nU& zKT_PKmS&>b)+d@PCM~wmM}!EunCF~{%4LVe0DU6IZ~mQ2BiXyJSy*sANOc?&~z z>qi+VF8yEmYoB*HAr+^|vx~6~gte-* zbQ$*FY6>E|FifmRlh4WC%@s=&ZfMM#d*2;$}w?)Oxe-;JZ_l`6%uUOxVREtVQYJV1YQ{S+W07u$? zQn=M4>Fw~>`~&^$v&+HmNrJc`Li#Skx&LAq+9bnKXu3A6$kzhw;gK5QIj!qX)yv6$ z-$0lW4zlD&9u*fu9Osot2HNbD$y7fC;7#2p)B-~YvjUf!LBIntT~OKuX%EBPOI)R( z@sMi^X`tQ~-GQ9Z!4mnigvq8xh~~)*_V1y8uLFq;eX9nl2EK139Xa&0KI=ZA9J}AW zuKhaoJ8b6RjEu#9&iz#t1g^1?w2mgd;iZ1pt>TvX9J-$#rHpqm>JX~53#C=R&q^A~ z0R&9s`Y#_h?;KF}q(@vFULY?P>#k4>J@dGSOqWYC)}kvWN_1v8O9Ck0fgD|-7XH8% zmX~RdBhnZZEV(2>P2EO|-ONr$^6zjI%SbaNty0ZNwwppy*(K#)b2)Q`O9fd5A(Y=z zTlfB$fIe%*F&EqFf4+sl;N&DCw%`65Ecf0&4v%zJDzBiNZW1jJT@!H5_a^^U5;dJ% zj^x-U$K0a{sTA478c zw`BWKwF(_U>h|(?2;&e&9GcCro|^SfDw0z5EhsQgx)Ci&QU%%l)k~&R6j6z0$sGn9 zyb%H>9+qC3&^}Spzi$WieBBKOUJ+iC5Ns5fr*aeB9jqN;I9d1A*3P&53458V)q{73 z6Na<`;M}RcM}SW6fPyG|oV$J{Iv@ySNCcjvXME&jeMXrs3GC$rN;5K$g3=|yFEN0+ zP6)#1+>cL=-_is4tCktQ8cS1axK8Nuh^INH6Fy8D59rrxtru?#oSAeH5 zYeMbE)#ex1L2FfiwivN-g98Wf#EaXfiECsIc!3Rng?B5<^SX~`XnISudn zgfDU|NkXfNqQn?CIQapE!~ZY_bT`H7@D0{HL=VP9RNCHirGTxOwN-)mXD8BcKUU>n zWPSQ0GC z8K-Ak_P#knxe?L3CrofE&Yu7dm2r0a+&hn0q23`v=`@-nmgeM zQY)Y3Gvo3SgzMEOgEw_707|T~Aqs11fz6q3$v2m*YJKI&A*|~#asEM3MvbqC9dtDA z17A}UaYP!?cMFM9om8Xr8%@V3NTB+#o0c4$hBJ{|bp{I+4dt&rbRhskO771zA7UMe}RW>YQ^j z3sICUI^x`61{YRF>Z-Q9d%^lGNJ5b~(Ara#tHP$ap$0HgmQ@Y%=#sMedObri%@q_L zD}^8UWDF;>J{28wt93uS-+7Lc7zeC$VFPbSM3DGU@E|hkSa_fkND^Wp*iY}d(UHZeP1wC&(n=Y`Wj#yGdP4%Rr4c=A+#BGP<16fSnn93f(%nqlPjD1y$pr^SLz(eNb7D|H{ zS-7tT|8w@nm7{?J!fIt6HF5E_#?5z>;L+V3?qUR+v8uYP7}Ot?OOj_QC+&px<7k~y zpG-fno_x>r^o3l*uc7NPL^b?5&riBy;83JkLW7n zO+g3_n)DwTfEkq7bP4C)8<4;H@hAP5gB`DWxzMj`yZb7S2+=@**9G) zt5W!1-3}9_u)Om-mRK=^)a^L{9ovo!$C4I@n$un{kyLW=p%XRYd6Wv)5 zo}(mi#hLQy+k?yQ?O}&KmFo0CR0eg{(`JyjAL&IuAhT97lAt6FqvAfUxHx?j*RU>^ z9mE4W>?AS6Wb}rCbD2fd8wAUEg`66B0Hwx;5dZsQlRhj3jad->>(7)MBFqiXzMuhx z+wD#`Aqn3U07L!2v+a%>?;&u!)9O3&jeTAZ7*#iA3l zxO=iN;ZWY9t>(26@+}L`J3F+jRy*bRHHyeWw_lz$h+LDY_Q(@cJAUe1G0(#h5q@^u z8+!ElrC-(fwI53sBn6Xx%nT>%(AiS*6|Hkkb%yrdPg$R!B)uj;Laa_s?Cd-FCITI_ zX;^;CMW-iVMze6>$6mBE-P&FDMt>K=_~fu3eI=unj5&Cg9WLc*FBI~DO{$wznBF+HzD}aLGoNkF%X=0iUeN5F&b&zdA;*zU1bo!po}v>qf)c{dYnojTiH}A*iq+ zidF~JziaB&PB`=DZ^8BVBjf)DGuX28D<`8`g2mhECvWyxfaV)45RuldfLF)v@bOSS zFkEjt{UEe)dQq~5CW+Qn%`fkZ)HAqcU$LT-2Ikt+LePTF%g)xL}fP-tMW+E{i( z^*AJmKw$P4`9OJ1vH+gjysL8K(@wlo@*|ENvLZ_u$e)Gy55{U1hmt4)DO zJwx}kcF*-mUk_xpg|8`gDT_D8TufkL&d zc@px*H(>x~jNfPju#&h<`&^6n{j-(y*@)ti;ugAAs85 z8=^Y7E%v18?25Q(eW9jEtQl9Z4wG+M4eW=?fs6L<51r^O5HQ^NV{98GiP2XqG|!r5El=$3W@uqG=Gj3FCJ|<}7?2 z%$7ty$<^&^jf<}EpuI1&**_6WzcDYFatQmsX%f}oQpS=A4`?t3+h@Ol48HoQ%s2!z zMR>Fg4Z)H?U9bq&v%sXe7w<_lpH9;Ur7?auI}&BC^Ex8o%Ja}Fn>;cdDl;1WmoNE;8L^*jjr? zr}`iuQE&SJ``Eu{n7>{Xua5Fs@cZ`7BfB$gV>*Bcyo7TX{53@)TUq@k|8+98ZRNeU zraFQ%(L0p{WsJKt)cEo#0o{+8-enZze^kdvyz12JCBVqnf8f?->bBAb=wJc(uWmBE zUjmK?AM+9V*MTu$wC!2>hexICsPEfbV_Lv9G*-Z@Pw|USP*H`0&#%qMpQ1IS0 z`6T0`!i_x@3+G%#4}Of%-h+A_^$W&oT0nP2;>S)dl^q4~i*qz_>PZLgD`fd^F;5Nu z4{=REpBxA(MNL0Rx({fL)WcLA&2H#PFhbsUe&@Aj<+azv-8Mp);Lu{3Qn3I=1(a~M zQOH(+aX*uFGQ327WsN8SA?*E{FI;Mbz@W2(R2tL{@0DC@c$4Oc-S~UqE#^j0py+?N z#)-OY4 zPJYG|2YTX36t%{Uzu#91a299|5s!l<^)F!w+1pcnv7<;Jo$yC{{)eTzcLr|*VqoxT zRyAoF8?&KCK(5bX%gvk6FKN?p5g!C^jD&u2S<8tp5!-&eLd^fu-_y{*qFUSbsdTme z&(!}IN5JOurk4oTpUR6nTnYf!2_gcPMBEB=X43>Z$AE0|e#;GD=oHNXs)`_!&9a9| zDs08Ee~FeLk;7jM$*ju|!T3k|D8SoUx;pfVAwUD02&+5lpo&vnE8p|SO}@unCkei^ zj%fqTIg5#LNV%1igQJKA?4N%+5g`4l$y#2qORjdq*sb44rjwOKfu6#p z?$T|#3Q{Smg=d81GJqpY^<3jeE}Trof*z~7n*yb-4fk3laBZTjP5QyQO3_?`;%!E% zAomS4wrX@D=GJ-o%nA@D<*}`FH;4< z3hKI#gs!yUh5bf~qGRNuinCk=;MBh~&vMcc_~<>tu^A(jF20Zo&x}yz=6p-%{~msW zj~!F4mv1O7U|iHsra$F9a#$ZLIpz$oIy!nE$Af>-g`5ZD%{K^ zp1}n7SbYA9Dp>&G{J{^6`Q8}vae0P$CWCP~&+@XEAoG``-X{}CM)$w!o=_Laoz2wz zZ@E{B%ht=P0@w{HybY8CDUK9HA0uKxr-uT22#B5tTfttatbV?b?bM3{7Nn(R%guh0 zENZxE#7r|#C7nO~;a=2F+FT9#WrWuf1UHb}AUU2VtNZ?strS^B%u4dN?t~|9J;5q; zWy>t+FA?keVyaT;wqtsbb=Rvw-nUqRy^O~I*2KX1pQUHlCN-~d1*6V{38WL*moPuA zS8ca%E58i-=oCFByJp3CX9$p^Pquw0iNV0Li?glEeejYIBZ93ZZ9@B0=1XNRVSUV|FygNP=WW4#th0psf(IDu|FqeTO^twXIfyIqyt5_LIfylK zExogN3?|{R|bOv3pZU~3Owa7u^WB%WZJHarB7q!3|5N<9w}IplTPPZ z@z|cB2PeIw>%d+{|z{9&F8Zm#z1e|h~KyqClrQ~6DNGk!$zr(lLU;sw^|$n z%Q5?p2F8`|U4b&vRJkmQbR^xL{*pXQhpuu?^479!@_{!&4~9~12{Qe5ogd|AQr9J> zf1ySU!+{Qe;AQlW-TIoJv&2|^WKuYYtATzs72yHm1=L6Xi8|d|C-eOYDY0^*I2n~R zVSYFtKv}5#R2oqh(v6D3h0$+VfHXEyr;{w6AOT+Xk)*05uMSTctvQ*LCK3?$FGq|d zdy!E1w;^(U&ODIe6bxHv*!=@qa|eV%V(v7~?n63ABCD9y+$)*~+P)1$0W%J^xdh%! zCrK1Wu|NwRf@Wl!b4A|$5^yTV!gOXKWPvVgbtDvScS?fE0u=z}NiI0(DqZ_zbmc4o z&Pz%t?1rZ_B*rjXuEGPi{qR@xD8BHM{-(ohUPZWQdWwB2%-&&5)(M!ItVH~ge( ztdHI?sMx90;o&$}i0k)VQ~>jI{%|rc8 zz?4{b`EwbTyoBlUBQAdM=T|>%tkV%Z1A4yIvxrs7o#1>_jNP_m2!Kk^wx8|n{(Me# ze6T2lkEnK$#+eaoCf)VBEw^-lgx_9U<8dzc>MyZ7g8$Y#wjPe3F(`yyYF|9si?h&A z%hc>)uKe|j2a?YzQ)D{U78`TV2d{C;uD}aiIRh`e@xLfgmNJ=Bi$#vq{a$!~7Z!vq zW_2@^Aijl?){!;o#`t=JVs!>MW+rozjWYl%hCj0V%5_+_lGmFNvbb!CqV>+Zj+sbD zT2`V;BLJ!$aTmdHZcFvVUE$jDx`N@GA}USv7E$LPaq1@Wq$pmp#3B~gRvLwG1)Fh3 zNp(#*Oa>A7Z!lhaq%Gp7+N=8VC&m9|;6(<8U*W=%U3`Rs66}clBl+L!5y|2&ev=*u z7GhFbW83AJ>vv}+%GDK&Sads8NvEu)OB?Qtv)H~nmacn;aSHo1lLMr0T%pzbdjJnM z2AJ+x^9v{^(Z0=A3qtl6y#VZ^;xZ6o*%Fl^DOlcTbx)9+F}Bp$CG3p>FADQY3D8Xa zb~m1RlBjf~wPzjsJd~S_G-L09pX};^>6miaYApjHso}7j3+ycDK}&1L0QX$+#~&3@ z9B}2B_0Pm;zKXg8Jy35sup}n!x}F(!ca0|qOD6&U>CrBrcw8+t+<8>1d~|V*!PY=N zs>hu_-ZGL;|67&%@?-E(ofnA6A_LgYJ|=DUkg!lZp)brHxsM-zaRTxn4 zgJK?q68fbGuazRmi&t4**4&yDqs@CzZICd}oU}~<$IfD3CJ1@bI?tQ}$xPkf32# z0XrDV!&hc4HCA@!81J6r}`E$G^k(<*iVrv`1FE>PYQh_zJJ8XuSWAV zE**PVNeu9r-rS%c&IZEKP%T4d6`)g~z+AV8$Z2uLN8LZ)BA5W!I~PKY>tG9X(-r=M zV$)DPE%LT8X0odZ^z0-;{%I-=@JZKb%~$zHrJAigk41L(x3@B~=CizYzMZHGuZex0 z%rxeE1Bn36=lUDNH2%DvU``<+%ve`|YF+~wM#TUIjWv}mK8jv^Y$YSm0*=nT)~Zt>UNy8sueE$~ME2HhA}L zDPdPoQ%1)o93Raio(Z85g>7Ffl2$ieaGFHR*h?0G5T@H8@3~!>cdc9_!UX!ClIYQH z12WD#joyVX#?x?HMD*DZnCFD9-37gJ~b73KGS{V5o_L%O@W zVdzG>O9Tm}rE3OJ5a|+-5|HkaW)K9Vr5mKXJ0CvpwZ3aTzukYpeb%|owO@Phk<^dt z38>eCO(G7@Mg|sO{`(A%yYhxzF5V2mqCCW6fr^GUea*4Y{7G1fu~?DX)Z{xTh}@!d zGNA0S%%EtvWOeFX5IvpK$W7`D_66lOD8?8&i?yl+hjol8Mf_u2DtyJc*!2ZIoidoo z+H$xGH8uX()4`6FPGDKyx8+npIM;Ryzj;k-D=VnjAKGNZh=w#5TW$I|g{_h;BKW)H zvXEH`t8e;|x7%eGQOACFQj9{&{583(trS`J&Yqypy$hsam5&vR5U6*sv{y(-x;PsJ z@COML(u+qo992crV!IF$=fG&nk(@?@&EmEgOurzsABb2%T=B$JGqKXRAaH)vv91u;0nZ<$O-dGk)N#DAqMY3O6%;%qvccMa#N}F_;N+^oyK_1wx?!=dU`E zS<{4RyBl#@6 z;D5K--K*QeeTlbatLjnSfTMp9ekngF^?iHCr&+(gR6{vCSNU8u<1^b9aPc1Y8?Zm= z0aa<9T&TS>SY@%!Nvx0nGbm{_TfpL7%vex`UG^j+br!mY>Uo zmIrnGfGU4gWwd|TPF(^G+`jFbTlRiC5qJ1G-$#b>A%(z$66MhaAh7NLnp^mGNp1fw z(l9+w(rI1=Qr`_rORgykssJrB=Z`mCmt8%#v%~k&ASq_z3y@0 zX68R2r&*MBUMh*eDPl333rRFvmH6j+c*naQla^)1z0t=~h2I$$Z<)9m*Q?upj>Kd< zwz<+no_BxEqZivR)ViM!S3q5d2!J@!15+jOYc1{7-w6S~(xdQ(<=}o3G9bSTmut@Z z97v8mZP zhg+GOTN>EI<1OjlJl$Y8!#~l+S0XFaxh;7tFc>#I31p(3r=4-o{rg8y9P>t!b=ku~ z0r2jufv18$7ZTL;PT?;Iogw0r!+qc7cm5AO?(Z#48Q2}zS~yi=%iWaof_eZb*6Dit z5IMDqsit8<0@J9fCZyLUoNbmRal0{cYr1|Dr$jc^PBFuv(G_w<7Ex`EXayo5zFMdpEwK)QGzRx{~C;2Ms<;&rZ zTP9N~dF8H+JJ^d;gppx%-IsKMkB^i9s&MgIRR9kQ_XG7NOs_+#l4xm{Ry+D|VbZtV zS6@!So-d3`uAkz_oXVfnbui#!&-DAx$EVcnRhf`M7D|Ax;f)p3^XiKVAkBmFEEhiU z@g38E9|`b5ztWedK@Zt>4^Oo}ApdEG_fM_=pIOml;&iu`EID-Z(=GnVuXFj}Up_iL zyH{|N8-{l5`_PS*dAa~!%upJXt3_A&qq$FpA_H^gt|n3kwIlXm1xvpi z$OlJ5u)*e{8WFq%APxUFj&_|hk#WO)y?pKVF4_2V1p*yqbNpQc>pdpEjws5#9MoXS3Czf8f49OU@@EW_dAvmr_PTiJ3YG7I2EYG{HcNFib= z)v=^u&3B53LH~eXb8v5ZCsLGgW_0WvD<}KIF2mQi5`MN6RN1wjhD$l54(pIDL_P|h z$aa%?3(y#ac?Y6)P66&9VB?qU>hNYr_b%1{+vC4BW0dWkQWY!cIAPKi-Yhs;iZn@6 ztsOJ8D>r&wm|Hkbgiq$Jhzula{P8e+(9OZB|0mIVk1Yq|rwJ`%M}B*&bd`Y%pwG@y z;WNI8-b2`a&E*wW$w7s-!)Nza`QA{f!Vn!$XU3OrX+(O$Ul(jc4Df+lPVD**mT~F5aWxlG46>fq-u+vb zQB&(DZ;Cq@j@q5iMJw(QLw;04Rm8tHm7~^2ka`zRpj4-L;in#DB4w0&Mb4XzPQ^qV z_l*UGXgv~mqnE;9dbdY>mo>6Zv61h^VS?*0hNfb6khX_7bHp{A4cZ{fBU2gs7l`8+ zp=+VQhOUc$qJHPqBjp+vNxGvf@bRnmUhuMamT&&=4F1&Grq?q|XHn4S`{uq;^#C4{7)}~w^n@Qu7{q^L_$tPo+R&CGk6{ypc6x= zMtkHiobaoeFQ!7J^0H;Hht`B@vU4`OiVqp9{FUEt7geo|{hK1ka$AK8U8hGRYGX9x zUZtSqd|?^(n2HSjh`Ww6`ul|mt>#+7$?9?gWF(3w*aELma;$~RZG@8H{3!48D^L=? zqx|FLr^hE}wQ?C%v?vOs46FQk=)!u1Bx=pViUsXklE#09F-h4zna0&=Ak+=2Ce-JI zib&R#^n0>w`FRd`a$7H|-MUVRR9c2e;5?=ejMDWocc$Ndp4fd7 z2D>Gqwto5>(4LjbyTNrd|31rm%TEnR|Dse4FFIL?c@4X+g9uqzo{)F>Q~K_F8l&8v zWt-P16OOWaG7_8S*D9|!w|T^(|2Jboocrz56}M3JhiIBgg6ButSPz%Y$4Vp4fKd0A zhjPj`N2YB-eHD-gGHqJjek?G56GuqLwn@@UNejC^e*sik8W&s8ZsY zDOr6-Rqrb3rk#~LtgN=8m98sO=f0bGbR=FniyGHDIYQj3t~!YZ-m@ilaI5qrL22}Q z_an{Lo>x_NAr`;lXv6oR`6Y=#Y4cc&V%weP5p;&p2X7^ zPgPfs)jDt925)V(5=~D2NS`CG>~)v4jD0Oe-Ro|gqD~na(JRMEujR@^&y`|F_N(R{ zCS90mQCAJ;D{US*PC4@iMYJw{tgm!fvSE8wg7TCp*SDrIz15N_(`)XOv1?wf?FAK; zu3kTyn~S)YYC|MP{FZCJ9~}e;FgWu|>-xO9E5GU$+me#WI*NrF=O*CTW>ij*d)>Y8 zs}WU4(i;s)DX@;B?r#EU08q_XvarqSl=O~sN@0cedY>+$B;i%7=o5J+-FT?z!+g{?k^1}FoVpvhkve?5T zqg-p`9A|2I^DlR~n2a7^uKpM}>9|bP_>a3tl4U~#LpzBIfSA$-JtEa&5a_H@@{!bk zA!8{dOF}&OcO5QEF|ft28d7C1?cE%(fE)iQ2U0u74_(=)U1d~YfY%t zx`kZMEO12Y&!H~hKEm%&EN;#7t`hCzORep5;>!Kl{^7f1z(xZe;D8PwGs15V2jpbS zXMnrOVA5ULp56`njUHb@lmW(CoM?C}^LLuuDRh8@4po-9kQoH*5G>%dTe6q&W zaKPzioOQ!ceK_=w5oRF`U#|?T}am>*w}MG z;@=`j!1>d4N9SR+{XTdl{GQ&O)=?|kpf85xX5YWasPr`jS};WMoR zGer&lDy$R)F{uyk_@mVT?&565PG<)N8Z2gfCu{5h4}%^#$kV? zp}h4`_$UoCp8CLWhx#rU%K;~xs)53nX5X@2jdz7bZ7Bkj^X1LAscsU+ zxD4pjAJkdVU!i80-GlzR@Io<53(-bhkqN$xj}6A6%0;@9`ucw$!GJ?B=gK^2=8UKa zSQ3%mreaO|bH9IJkIV2<1ouyJFjQsKx)(heX#@w&P-oDW<{(bXT#$ye)HPr>_G+kP}j9oI9Cd=(=Biy<||MbSn3^8@>bV1N`Sbk)tDsnxlS79Z(iZU@<_ z0{QBlqKYQVYQvzhZT^o=a*E#>#u!gPyg3=h06Mho6K0t5Y;7cA#C_7#*3R^EuF~pU z_C3<(rYU%Y=Prcq#qW$KU}u1tmTe@fTN|=41DfJn0CZFpienxWJABRw&7_#kTYib+ z{J{bP6s&8eLw=EdW_sj_0F8o!ru#>-$8IfcKz%3Om-KK|%CzU;7}`FRqu2hpY@VSh zHD_;^g}xJhDYa8BEKWX|dpEI#_wm+{DbivxPrlU2&kCb~M#pJs;;v%!>NlGh`fi(K z4)*Y`fajRLaH){((QTFiO~fr!1WD^_@0uVRqQ?^eIh;Y8@= z$MQ6h**tGn{7cnQ_$vDcpo591deFcqR%WJYZ&h^R13+aw3M?oeJrvUSZuF|K~x#f>1-M)7;7Gc|q+xK(5)~=p&SwNgo z4Tc$e&Ki}}Qi*+g#{#$scZ5Nig+7v_V9h3;U`Bn=34=@|1{0p}{i|R?0^k`>nfzt3 z>nlf>&UBL{Rqn7e$>%h`Gy1$+mAX_7soC*J-Mh!BE=QzO>Ge(9}wL zhC@;pT89+_`h8^ANxKts7s3uhc2eEzV+HaE2=F|_)5_tc3|;x$H%6z?W=uZ zorN-9t`_C{Sb_@o#d)(XRSUMp8yu=|+ojks81|~ZuUhOp{QM*3Kl0h~Aj+!jjVuE7 znr^h-2vUD@lIqLYzfQ{V1kE!%)@p0d2nJa{nY683RnXaGowU07=fu-s(c_jEgU0w6 zeXU15bTr$eC*42#`uLn0_B;>dDPgC()WBTcuM;$KkjCF!0ho<_ik|3G3R4QxL@Tu~ zWm>MzSpzRm68G)5tPfcJs=t*1-L*T{J0k%iDPH zM#ualf38Kbx{K^+5+dDR3`$$<=oejtkVHvNL#7cZ!*k=$G|!wFQr^tb3@+v`ihe#v zu>c7ev7`g87gtNbuZrKi=+haZTLIBzF@K#Cfrp&X8P+u2f5O{AB|uL8fti;jDgXk!w??RWo#nhZz? zgD<6h{6I^sB3p}yK39du7NKl-jmg@NFL(QG9-G%4JQ<=I) z9@copL#S(3;Ywsbo4zK@2Q9vPF-YecUX0KvZ_PFICOM($B^ zI@AnfGlT36P3EgAem)-S)2Z6fQwsaAl7avSSL4oIHp-BR)bG4vC(;e^;pf=+S8T414?A$R}y zXNA%4Rb+t5p(N{WArTYS41%`onHdt_z)K__eSchqX~vnYm-wDH2J#r#CT*?7j!gdx zaD-%U!DKb7O5-!q1ODjIFI+Q&nIG}Ua#G9+2+#qd7;rp{ngWnYs`nk91D_ri5Phy# ziRihT;1ke^RApP4v--Chw~b^DX*IJI5}}uSGjw7M_EIPB{_GUgx0|aAK=+IkHt@(c z6!^=8(w322n)K!-tGLUI#JEUAqzTeJq*cHAb@UySo7BmYtNh!JGUw250`tQ{Ez=%B z=+zM@!C)Q!;sT>v9rJPrf34BHM~4|M3BDxIrgz@D@SD8VGh+VK=u32JyM&gvkejm{#o^9M)pFznKAQ(t}D5 zvm5M}MFgSI@km|tY(dbdul3ydb=XqKXG%v}N9j#@+F_+})F_URT|ij$?NP#1NRs9P zB;h?j2B+hSPi4%@O#e)66aBoPJbJfQw#uy!w>O_Zy&u=tMYrAOa{+iZ3`r{`J@7%` z@i}=EGzq4$@(Kt)@8Szbrq_M<_zZ5kIzm={!@D^%Yhg#PWR<_5)_xXEW!TsI_)?*_ zt;#B558=8Sf5}a&h5N-?WX7-nZj2}V;P{HF$z$Q&sQE7o@nCya+AtQ}30`7PC9fuR zQB1FwA$qG2JRzYu<<;F`+JnX%*e0fCyfz`8Yd2*}&JvcR(3Ll!5IiO5Q!4eFv(`G+ z?T;m@Yo*vO71;Chz$U+>#K}vU>q2SCo0G(l>-A~6geVQgOW^Yfq^g?Vu9ASWmw3nhcDtiT$Ll5!U_1jZic@F*0C*Qhv3MsgYN8HG@9b<=5mcR0(m~&|5uL_) z*Ql%*&&d#*-`H~mABWt$^k9pfJHtXqDH3DC7+#yBVk~$Zf0+; zk`!(04HGiWU&>H-GH0y~*BW;>k<(E^!M$HNN^iMEa$yX2-9D{UI}ZC}@<(1q$R<9M zp{kb8&qsarkj?tcyheS-*HN@#y>xQ7Rr%GwGNzAyyLSVXRsJw&Y4c;e8#`;*J5fL7 z1b&Co8(vzO;NXMW=tkKTK3X!}8q|cV(YjpDkKYPTSGynf=H%f4VKtcc~LD}X*TMmqd@gFP?IiM z``5LF2TWhjC`{i@^v4xH=7d8)(u*Gu4ZaGC zWTC6Z!n?or#ENa-WKPA8Qr<79RgJeo8Hea_z^a?ZkO0}~#lyBphKXJ>EzdAsyH8-( zY^OV=G~HjvQ4e?#PLYN5ihAg~C8PwbU(~QZ@5bciPoRq2z56SyK_5ed(lg{}YvE09 zQmG~r_o!33eCD;hOZi&ubfM>B$jMx-Ie*GaYufu%di^{|s`$c4zo@0V>;QH1z}*Fm z0^HV=d)tVwoZ+(;hevtjxx55D%4pgN0$J_f+OYowyFC4Mefm9LxpIfyR=e!_$wz6) z?+Y79!Ocdc%=lO{Ts=DxnzM63ZPxc+X97F#=X4 zIl$)4+=X37_>ThuyH(#HmukXyP**el39fQ7ofLA38zzh9UrYnKcUUlO)3ykB|DZR3 zzhtZlALHNcpyIe^p;am1*24%Tp0}TRIfTBlhM7`9E+D4WU0V?qh-jW_`=xrupC#J2 z4IhF&^QrQ_J-E7_wpJQURqagoKH>>j4b+)vluf9Ir6@iER0Q5;6PV5uvOaXZd>O)X z^c4?8$;%yrj*fz39dhBN0H6R|PO)7WiGxK$k@F!P_h*x4WseulQx;E5$B}Y?`=_{5 z-wME!)rp$S7puJc=XrIbKO}qf_US+Yp3Da5zLj|osA@%hTWuHtIHhh^MKdnG4-pVT zK95zU8#22!Y5-%d=Z#ZYicGX_dmOt}W82hn+D}Rfe$gNU=sm#`x?6JT0`$nJHR;9` zdAGG>wJxSz`MtFK{_38K*MdlcChnE&S*J`scIv9wSA;t@8U{Kn$<@p5>TftiH^xn= zK0nA8Nk_j9hn}CHIq0qgG8ovxExA1jjYqJ(L4@y5v0nTG5hB6$02w8oE)~&z2(KzQ z9Ij_R9_{^e6V&$h=ZA;Ur470n@wo$`s=a;p7P9?U^VU9eB%>z0)F>z#l1d1S7;>G^ zEut4mP28XKGJ2w+oU;`BC^eGRKJ_>mHVY4C;8Nz2t$FA*kp`5&Wk?4Hney@C+_&1B z2;iy%{vL}r&;oJiXreCMhNx-0Kp*`4BO8-aRH?0!Vh$sQ7k#ki8?!<@2Lh$gL~Vv3 z?q`=i_;mviE;%w8Y30!>_EsMnw!RN&!B;;)rB&;`4WkGlHTL|T&blWE*b&Tq1=9kl zKd#l*A!HXFujuYMcgH#O>ML&7>kjRT_A z@g%Cgw4fgpGya}_8{s%&=)`EtgQ@)g}a*z97w?dSI?ieFVV06A4}2AI3t zXQ&pCN(V*tlL=$^X80Vz2mh?=8iAVCLY3K$^+<~TT?Qp=eA>*C=MSrS;!3w zOQ6UmiYUk3?Ly3*GQXZm&SbG+KYzfLlIs6rG$j+p%L`{cd2^vj0%(wXbZI%?et&HE z@*hy(GO9#}(R>YXh$7|6w;i1jO8ywT>Y55WxtqGQc2)nqi zqWzFr5`wewg{IEAzQtfoYG80y9`z$%LSZ!$R`&wQ5pT>`>P{P z5`V=3(oY}P2N?uv2tmlqI;6XrNCAThWBF?1ybAT@7L^KnZ_$y`+Vn5!eMxkLN%jRr z;En;QOtig42XdR=Jzl1V=bJ#31mg}J2f8&lJYm?%^~3T|Fy1d&^g%mvM?hA8qs#K^ z*hS2@T8i9dV(3*IY#|x;7JtgQ6f=G{EdYxB(&cM^y{RrpuvA z(8z)DkGmIZ9xiIa4aD}nq~s57Y1(#X%sPIzJ+A(;RXLsxnU~17QsAe;l5pFJUmu)h z;p^~&tBtXoEx4gNnsw&e0weBa+AslbTmw~&vn`yhe#z2)Bo3ve*ToL~-M1la(ENZ9 zhIOH+3ek%~0^A~N5Ri({b!lQmKN9#o2P3s=?;Yk0hlV?ayOzhZXrv3lkR97z~?)-{9`vO68 zl|7TVvUu4LKz*Fyl0~;CO;be39&;0hx*JbK{@hEd#U6w4Z%T8~|7z8ZA;fEI_GP`e z{KqqI%Z`rxkwkWhYzhg8QqO_`yKd2;k6278et5XJ!4fgpW?_C;;=X+0ACc5LoX%iH z`Q*LjF?g~RyuL9^1^0sGo#K?hVi=ie# zVA#7&hOxMw-V!`t2sHf*q6g->fMo;d99hGJOlpGkY*K+MAKSMM)672H6z06Xeq%y9 z2WaNSt z?m{FOBKB_5pgRGSQy-YWcVif&^?a!{*1u8Mlk?Y_x^yb%+DS9V04!5Z3-2nR^{ZRU z*h=w@hKc=i`m3Blm*Beqy~XRTAl+Raht(E1;L(nB2?WFibF8^iNYA{&fySt8{2sp? za>R@&PSnFbD$P?E#Bb854Yq$h+B4d1XoDoFRX<{=?AD20gkdvz!=*GLIo&=BV9aPZ zba>p+X4i(Xk(YGG|E}9R+qeiiJJtwaxu_q*}2Y^74S;%Cv;_X#zn;%i(a&+4dI@0y6pzJ6(LXA)I|TUhnRHkNg2Wboyn zF{2cG7}Zojv%_yGx(Ec&IWl%iPhI>KOL^ua17YB}&6q`8&N&uI)N!Sc#i(b1Ey)#g zO06{VoH_GNFl_~;@k>HRovvr|_s$V{rb_ctk@+5b%2Rq`a=mp?#X^(EB^L%4rOZWS<*Jh! z$e5$Yp`-gD8u|V87M`UboX4i=?Dk;z( zOz~3vst>Gjf&u-K)>Xrf?-)~;C8_MkcP;tz!Xk@Q5suhBUN2R(xSKSyl>36`#p;M< z?Z`K97*!Xijdt5}6@Y_x;!92S-x-#B;&g0=8)gMySr7y3!Ur=-)cLjSdI9SZ&rD3~ z*i$4mipTyxoT_gw!=Zj*%H*OiNm=4W=V?b3NtNN`N{*-%$83cNsr|q1?=UIiMW-cs zHFdXGV$WbojsrJjNR!dD*VUgzo8PBT1AuGNji=HTfxPV8d!D(G zfvmlY$Sv&hCzR`u2NEd2goo=TP#fp|D?Xq~7;DBU| zZ1?14!UQNw`A@{lwsoI+sszRgwaWL!c@56Sp;K^=a?nh!j#f$?|@m=-B_a< z2$U6RBQg-P3V#IaEdf$isR_fjcnvT*BKZX-;=B&8L!C%hbtBl`BpZTdacBTr8V4t1FV~ulx8DU2sYJA!d*M17XOHcY61DTRM_i?{+oJ~}-avdl zP53ulLz(!Ta*Ef9hPNkxfHe2OCPk_gCTTd%uwiPpM>K{lB-+)OOe~93D6+way zwy0Pqvqm#sL1{ySk)e3Mr7_EsUo?3s+urioKr2pZNV1}f;c9IpbXX51qDwD2wRkeA# zu=186*F~lYS~^NVfU$VZ1f`1!ZNO{B?xxPm1Zcn)bg2+Y+IFnB2mJxGqt87P z0{{zBwW~O!hwS9}H#lV~j&SisbAVM~!}dvA7!J`F0^S0-{A)Q9s)6I~dB zRPDU)?OmVmCZ{b&=pzBc7re+U2Ec{n_f^wOy?wj3Y(A70&SP@M`omuA;$ z+4f?_DwvH-*;#9T9{6&@GZOElN<9qdRL7@U^h`6^SS+u)5zS(1>b!356g<0Wg z)6EHMi;`nXy1lNB+0^sS0sk`p{qN-qZ(f^L4iYyf$xeM+-!M9s#fb zq58=WB>BTEyF;!QNJlTV0>ph5K3et#d<&m45kA!NN3%=mMq6Q%v6VQ^iH2$lhw6T;`D^)Y=4yE)l%$bKN$yV1MZzHVLMEH>&bF?12> zf!rFZ!ZB#s6?BnJVBdGk6m|c{0=)U~xWAvPe6E*N!as7pz564uf+vJV-IQjR_e1TY zPj?-w%e#oZpe><#<8T%Iuun*EN@wa9Tv{xx2e|5p4s$Z?%2P1`9uRLzAWRPMj< z?pPAvV#`((eQ-uyQfV{!#b`Lg`A(oJ@fV~Z%b+8zJ#+`4@D?ZYnh{B9Kr32UT4^HW zG9r+BlrPYE<(w`3VOS5Np!kQd>H7aGB$#RsokH<`$!-G=lz|)w0D!sjpeZ~=idFop1StxncdAa>frp~5q zpN=j4*G1Z3C0nh*w6dRtjGv*(i1Zq)ZK5>uADM}HYBk|nw8L+PoI3)q2r4M-PzZ&%c6ldq!(#6vFWMN)xsIu|t6t(M!_nYv zQ3VdUMI7V)K|XteC`No$B334m{>$86aSSNH+ljd6goa^%Q}oXhC>X++?^n>yUGAgO z8CS!6Oh>Zi=S*S}IXF*Y(-(5(8W@XH?X<4y)>r@7klcG|Ocm8AskH%u7dA}NGtzAx zV%oVA{i{7`WkVmL?-nmnx}BDagITb5GI?kUtdOn`AD3@=LiU*Ql`W+;V!P(XOhXRn zuiJuSm%)PHnCI|9pPfu{2`F->UG$UsA52_Lhs0UWiTp9aReWbgSHXL9buvybAEU?P zmM=D@cw9exz1)#=+)TmY>G!l)Y+6ZouS&_5x>YBSql z@lFXyMji(+d+`RUTYB#TDv4MR9xsx0e%)^yVA@nvj7dF)xz3uPw24V4kwHK&xRs2z z+-Zl*v%F%w&<9h9Dng13ZT{vG%#zd>sHLl|TAZnGf{rV1D$^i|{CsO&>F4S0M@Hy~ zt!Du1zMmrKc28Xlz=cyt@Wgq_B*UoxC}G{If}nYx@9lbtZ*S1Ztg;cvJVXP0+)8zDM~C;G~3zTE34_t`Vi6&XfAm_j&DoO_X^qTKb3SAPhp zh$jSoJpMb;f*pQJRL5OmzC>Tz|MWZvJ!+&Ffd1P&JtIzzNgl9eE>4RW7UM&}N?8`A z{G@!@Q1D>v3uy45`fVrmzo!)+r1$LdPX?q;LoKnxD(N7Ud>enIzMC>(o*P`Js|hlG znV|}Kw3GuZxYNc$BC?B>j8B(30nS+PPj|0mFZiV}UL3w6WU?kT5e5<4ZbQ7)xD6Uc zduiR^92vlpZ5ygMAsSwEeYZ4fUgr#3$``+XLg8fGp5)tG;$29~T6NBYeeOG~eVu?A zYCwugB6O|HVy#Tix(SHJbvDVbf6=@GcxZHrl*2T*c?y$T7mx)oy=D6PifRPTNM#7< zEJGDG;$Q!`hrJMycUtA(ry3t$Sha}Ee;0P(WsYNw zPDILPjQ*Y^O(BVsPkT|ifPcn!AjRkJk`Bu6Bx0sEb071ktWF((?ON)_Csd~~S!>#| z-@Nb^Wh(5Hh*?!RWyqC2j=4^Yf35Pw2F|4%f0mu&+~*dK2lNNrkS$*|8AF@Y7tm&nfi$E-3|(VJT8H0(JeU9|`a zh2+5beIvl(=P3=4zAVZ^#0MoAUN(Kk7NqxqaReI%Cb0Emxuq(-gp8pxD&Set<=3DwUO-mAo@UfAR76q;1>1EqVOq zIik*@8%iio$weT_6rB3ja-1X8Nvd{mgyB}&nF(ETswzDzVPAQdm;X(`vqAGaZq&AKy62~LtJ*D} zVU=N-q7)~H@4*j5o9AaAI8Up(Vg+-oG*PYv9>Zi%-i|2AL{o={2npQy)<8NQ4$QI_Z?S#-wl<1C&f{I= z7H?zC_?aD8K}v?87{`C^X{N7UoA-#_6&HZq9)8{rE0{hSkn#VlMKx^KdV^jf@M#nMw5+DnURPY$w?=r zO^W2PWsVA`*k14+(tlb&Jg!^c#5xX}5ux?bt$&B-uxZh=Zd(ik62^YV*l4sP=3e3z z*p$a6Nj`bg3;jj8;Iec)p-v|!V1Op;fv1zM#bEfCk9Yq3KEB2)*?9ctJRNPxNap0- za_-i06u5u2IXj@l5i|0#WGV-5QJYpNi?0;;h^ESpzq+7y|sE z|c>kF%ZP`Qprn-0kRLl7LP5fSH&wfy^$jN+_f9 zOdnWXlJ^@TlqwHZ6C7EBQ zlB}ggMHDzh7NA*CJ?*X-L338U6-l3B~4 zL+}}i=RtnV2&@Zzz}|~ZI_=-`oA8T_Eivssk`!=9ms(Qeb$Ul@6+MH=Y8>36R~mOG zm>96kLkS;;1-5>wQ)F(>lTE>-8f8ubnKhT+b5Ql59_TUt!Qv6kjpVWNnqTFWslsX| zcZH+jJ>_GCIe_@_Hv^ zF8<1_39S|&dV)hwYJ`%vmmv!r?yEsD+U;mCh3iS|+avo4fi<)bI;@W7bc+Gn!K`x7 zBsYOy;aIhd2rqM65xgx7Ww_4#2-%913m>>{E+7i%{wLEhP+$;hedrd&T7`7+2Ab#= zpnjDhr`T1DY<7RAjeJW6qy=yVMUn&9is_lY!}Imh8(~hry5kng1(1T!9i?Xq>=*nA zZrO{EWvV0xl>BKyaSR2TF{!^aMU{8*!_e? z5ZI^7Z-C_GI|OhErZY3bba7Iek|Xqnh5zZ|pt+g6b#W(-NSL@yxN8rEaAxEE1vr~> zc^1}Z-_2!ZHT0euybN<9!Tb0nL+8-RFx&kT?5}MhKHP(7MkdzGB5djh{12TQE#k8&wi`3ZPBaV$U#lbAh|BYH zom>DY=W5$s8l|nmn3!dDzz@mtmi*k`rHgGkdFtRV;NZPU?0Y~jxQz!L>oZ7bfWcr! zANBjI`r99|ZVYAvO7t*+OxH5CGyjYXWjTR|OEDDdj8`bu1SO+a<$73(@h2r{4PP`( zt(dTx14_mSF*h*Ef0%jGnB?>>(c&@^qn)v#AQj{~pb6r#N&k7TjjGr>sX86nS=Z|EE!(SgA z1Nsh#Y}T`N{upAD+!;o@1fgmo-S10a0dEpapRE+M4QvhZv(4=vbS$BK ziWQ9BHa9MT`XW+e+zWCi91rc-m@!1Dox)LTj%k(Zq(+NDx6`ExNaq5&)y` zvh$|M>O{N8uUd5C9UXB*aXk)!QLlqXMFg0IcT$A10w$PN8I*D zV5+Zvk+@jqiML3#cq#D;nO*O=g_^y9aILD~w68*sgb>HXr4Y#Q-K+k0j`wQ};``GA zB|6~l$=8Xjp9ZS7?PI>+&m``#<^H`A3@m?cOHJH?y(oo#LvmC4%R~LNfOK!w$wjr} zb_9D?Fe8pQMmXO8eF{Pym6B^)&o(J@wzSP+ooU#M8Nde3jjg z@2~GP!z=i()=-Hc^Spmv_h647b3^oXfe!aU6`&$UI1h)I?b45i7g8sNosRg^Oqzem z;%!wb4rN(PFQ>V5vGo}6h3Dlx2wL5S{IOZ@PW5Hcc70a%Wz8~HDJnXduc@_oQAezo zHy2|8349dv)vgXDn8+H*X@*)VH#C?5W$4F_q8ytgVMG97*8lFQ_|dN(Uv_v>3pI+B ze586~8x_2z+ERhz`xLwZPj6C>@K&@bS@(~Z?z>I(-Ff!IRM-hXmw0p6zA@Ql`aWM$ zGXeEWLP|U>C#)9rq`HA)`>n=MQ}debc=mgrg#~pif=CshYU{U71_TNiva()-9W=`c zmzneOBzLFZTsUJnwi>1{#}3-Cdk|%G>NSvL4f|&nf_4`F6Ks|lB)@e_gU7Gw()0yj zGg<-%R+_?VYEjU&SDD?5Hk5FV4T~u?NPe%qmsNT=w<^<0u+n#1HUOCWZDh>*84a&5 z?wJB&opt_GdEe^cDZK(jc9nIYHP+DK?;FHX_PC#)gZY1)Sntp{)2{CNe!*imzTp6o zBnl~%uzWA{-2(f-qO??Rf5e6SD)y4Cp7=NaP^$~+9j9rZRRhnyCS4>D^=qk7+xA>} zB%A^179(Hzjokd#=``rCb2D-N9a!+Y{j@Vvt{B+3sI9`1!k$J^6&s|elZL7}23^3_ zd0=+q*Kb5`pGpV)4jB@7Uy3sW<0UeB@j%Ko3h{)7S3dlc4G0UhEqT^y9cq+(JSR4D~(h2m=YA zWoZB{l5G&JlvGCY@rS#~;?8m~sSVjwMm}1>j|qWF`W6KzdRCU~GW5>&d}aQUPO+onql#ie#*9RS zgi}X3kvz2~F2P5uqqedc9X+<`AqhBPjMQ)+-+z`2aUOa$-A;-%n7Q7X>%E-=FFL)q zA`OYAB=l3Sn(j3}&2Z{!6UBGH%;d*7iZ_mRX+^6$tB5{TSlKUGpz1BUdz&Pw_zTn$F8If|^YN*Byk|>jrrHy=mL5gs@BzH4%c^Pl-yVDiDbgR1QH6Q3G~a zWG;Q^w%#W5q57I0WCz)+n7uCoF>WHO%nsuItL7(#^y&R3tuYB8d;GZVykEo_O$8hu z#LBw1=G>$Mo&EjrWc)4#aL{r;0C>26Cp(A*eST`+F8)uJf#LgKc!bkE9~^1?ZX&|V zgo~FM@VS~o43GszBBl&4^m3F$RyWEfe;7^8i#A=wS6oH*+@s^TPrpG*Dbf>Y40}eV{&<9m3WK!-O+zE zCF*$?A&p?;--C!clmlin9CPMM1cpRD#BZ&^IQ-x&U|+DXlmp3+#ti^nn&R=kq#6UY z8NS%4Pb@4rI1uI7CXdFm7z+)`A#w)zKFf3jm18;vH1m&#ZGvh{(WL}bgtLAqqR)Np zJV5(o>UaZWl~hIfK85-K<$N`Tt0;E>`tg@Ki8Z8{sde1Ta8q^MQ%BVQ<3yc(73~&G z*ez&45+Yo+dd?vTwhx-&PIDagWdQcjw3_y$)#Kp(<9H`y)6*U2cJXd|wWU-*irGGj zNWt6siupqfi>Ep$sahPPSM~fGPrr4*fX-0bLXoHT6d8j`3lTQaj@-3)h9s{+gX#}f z`f96ikI7|8Jnl2E0-T5+VZB=-lrzRJ@t8=!@*jq}lRy7mYt?Nw2PwdEgK%pdj#(wr zppn>+AUIl(^)WN9lA$X*SDgfV&8&xxl6u2>F1ba=Ff+WyriiCc|8ep;q@etT+}M2I zh)%S$fU;HzDIpL`c7lj0H<&#*T;2Z_w=8pxvtqVO#ERFD7N;K3k|#n7cEGf$r~K4y zr|8hWLi^$(KvpB-PA&eTQmyW zz7X|6KPXiz8!2MLbE_s{_hh-P|9%moIE4v!grPEgQ`3V?eXdc=WqmJ~>Z%&?vj2vg zCQ^{91`w)G^9pW*OISw?=Hr#y+$<<(&2e^A-U7euz9CbARXVQ#wnBAUFr_bj>hMCW z2ibtCjGPAT#^%~THI83C+mLK@UN{vfiok44vMVTVB}jE9!O4@))?+^?2g7@y08d(9 zuuNi^ADv}NCYbPVUj;iiJs*viJffiIwle~c>yEi%s{8M4oc_(o6xxZk-!2O5LjOpw zF-Q*NwH3-=&0!QPta>tE9*~Yc>ZyokY@r?}MxCC;NDrWF{^6r4+oC+$N7QOL*rmsY z`Mu-aAhsINTal4MPF}O3feq8GpXS#^^!2V7DcrQ)R|;`3QY>38Tu z8n^w52+FgA1k3w6VnYAwV{s4u4*3f!#-O3!k=;A`L%6(`26$J(@k_}mtRy@5HM;O^ zP(PYPPa2DoD%7V=jEQK!r%7Z8Zw8(G9kWgjmk3*i<8quwo}E@4ICR;w~l{Jc{s!}d?qVfqQVZ1*WMt5rMXxb@Zd67D^)4oVj3jli`rDR{EqudjrZG-E~}vvJ~Ge# zL@Hq8G&A!NI%ApP#GQ@Ie@!(N>LmFc1CWfbH{t|B=(QlCpXIq-Iip^WQs{1E(;Q{v zG=&7N7fdsLXp8mFd<_HLDf(D|0mtUU%oS$W-p@0J8qv|it;OpG2o3eu)|lT2ccCK6 z3D7<_I`%W_#l6dEItIDu*ZkEJ2WqSnA_e$MeQq3i9yEcJ3IKolV;{}kSAGm5;`QU< z3*r`-x^-pIFCvcMjRG0t;AGz!c;ll%c95Z;bC}9|trL0NKbois#fgaev+pJ{r zHJ_v)i~a7hczH}PgS&_`R#8#)gO?<1u73pVaKiBk`k8j#m)45kSmmm30je@VgU0ZU z(Vo5pO;Vv3&BryKaiAYP`jO!_yw8B)U5c;r3aP2zTs#H-R7h~j9Pn!w;)0TkhK&Yw z#&}C^iEi;GDCMdRtCe`j>mrtfqKYuD$FWx7W<%zpBxJG~c|$Z(g)o~V;qzOH+^|1- zR*vUYu9zp*qe1PY`bWJ+kHKz+`Z8~W7IQWNTv=}Z^@WqB; zUsPT>tQ2Bo$?#t1%EVfSo0;oNq8@EnB41LERDuwaerjrz!LO%hzu?DPfH;i!cVaGY zi~O5vDv6l>v-;y=c0(gx56k+YfKE{LZQMs4AMaayil5twN>WeSpDnr>P2OWwy zjG>d^s)rBE1GBV>-vB}C)wCajF#phz4Y{$}GTCUkXq#*Oj8b1AMh$_z4Z(IB&T%8o zWA4n?gp>${rp*S?QNi_VE&h;=n&LBY1E`cVzh9nQ&`;8C1NqLD; zS*d?BXwi2+bl1p#!I+-E_9$75a+5^dk3Gp%y|DKmpN0Wgs9?+4jM&qlRa>PMgB%9R z^aT;x`V+99d2j&2EZ$<6uuS3`UsNF-Tv=pb6xvSw#v#E74ugB*L7-^YI?l2{B@fa$AEFfxS$ zL4fHnK048(FdoaHfl*|Cz?kgT=x`lC#2#EKu^G0~L04u)>w%3uC zm5MaS!m&R9y9~^`AkQh^d4M89_GVpHq~3S>^6_)rq92#AFzJ|AD9_}%Ny_TQgGA#y z!W=Q2D2zk`rs#L3iUf?@@)&IlPnlc)mj$3*V&aj>Wp!MU)0p?p=zb1pw} zLzzA4)1ZjK+1tlZ`VUq(@q~Zt0uM=;|QPc(xS!SfM?XEbfXIv4N*h^Qrv zGGSUJhb|b3C-W9Nt(y4;MH|eVm&Ko0qJQnv<|{B<^5C|_rH+*srEk|jp_77pwA1Q>1&u)RSpE1nL_raS7a*|& zcu%K7SoeLq(Qwkx6)JKjp)@fIj$`+v`2I~_7LCNfWuaMk_UR~Zs&XllHULbu1b}@h zebP`sOVh&n=)%I;kR|3KmgfKd!=(@r9OXHzzodyo2YRUhaWWaQ%#7+xIX~Or)CwNd5JdR{+HymI*m8`v&#YG7)B=I_gbE&{ zc{;>arobW7h-l@qDWL!W1XeR(7TNhwokhWb|K`34QJuAsI>Pz}gP!!HrGauefcMC- zJMQ&C!2NG%1xc|)X>z?BKkcMyL9Qxk-r0i7*Cd`pm4%FqDFq%KR9tA6nJg;Ywo(?N z>_r%8UFsi4-4+QkGoRcY1eP^IQ zJ?Bq?df~bBcO7nUNjRcVsVhFj-DB_arwU(geg&AUHe6Ezf+DnWi=~D8)Q)E`^68m~ zP-ArLAV%yGl(H9ej#bjjg?hV;jGdizECH#KF%_=4PZ1Lt}?dOd}EjIyyK<{dDa$gNuA9(;_83(N}GKN5?-rOZDrRy zR|3JE2b7M^avWH!DB(G6F+H=;JtzsAG^dB}n_V^AX4FiZYDo!sxvJun>bp0of2YgI zTSM_GHZ!Gj4$?4-V4T~Lb)b9lI$;}pV9A|gCX_ECNNrT^p>p0M$XgkVXxx59Kif-6 zJKMymv`$RDZGFvxzUGbki5u+`@Fu$Nfpj zx&SGuc?~`(-~7{amprd*BGS{?=|=V8F_Anx2%8u2HId%(iEp#Cl*&pbly;pe^l083 zA66cCrE8mnbN806PQ_gOAK0`B=>aOud?2sebKSv&x~h+3K5^hG=wnYuJlc0A7u`fE z%T!@mTm;kt0t`tc6Xu?Ro!_5yoRNiGU&e%M4SS^R*bMMiMW^*oVLN}LC-!(dXqr&^ z&IMCv12KS;myHlVq!+?n+bM{kXZ$Z8J&;G|ayqCyNIe)6$Llven*SVJBd`I{^w4wo z=eD1I8qI2S41(3jhxZg z9@=3o_@`en-x1#2W=DDKS>C1?uBtS(jcrH{#`))_41!L1)C;aRpU_awy2NW7p1f4e zAKPb2Q7!Ah+3kEn>Z1IUkBy2LfXjz~3VR+cy-!&=_R)kBaPa~)#$i6)rJ+JB^@{aX z>`H=>roFA8(-bERsPFWbb3?ToYJyYo>CDwEBO*#~N);cPzl=H;+O~E6kb#95$g9VJ z&hBMwJ;?mVyQY;vKymww$jX(*y|F2)PLZ{y_iEUirm$l0bUXTvvp*H78Q zo{Pigr}ZYD&cY4;w=_^sHiVR|61ihQTr*uf0+9GYU;TvL6lWR@&qNC-;;Dpkg>w<9 zH&%v-GM5?sh*reo19woF+5cy~67*$0KDF7}yqpfRSQl;eFaD@&;|V4TBsGxQR7K&1 zVn0>5K5lW6#lZMX2ymm#tcf@9-}E?~aA6yZwqf>3Pudo*(*I!{RY2*9{_W@Y%9GDl zqHRA0o_!kpY{jSxIQR+;lavj(_p02$5HH)pULsO-v&s(Jl`5r(>D+DU zQoMzAWcd zd>>ctAtZAkcOb(``={NazB=?q%*W0F{b@h70_)VZwb!s1Gza*iN*98z%DP>stNC?Su6y>i zBY(}B^?=u^HXB{hwfcfYF~3ClECIRpH>p~SEbU>WYnA90#T!Emt#P-3fJUaO3H5&8 zsvLsQqdIT&@3S(r*tEweB4>Fja5R}+7D0LxIA+tJp?c%L9Rc%Bv=xS?HF zegWp?wI38s3t(gcNP8u%t%uKdbEZ@YO$pNB(S{6>t zbBr8)JN~%KVVwZ;V+Lgz5;B|*TjNYcw5d{V8dgD9WvvZK0)+=fgP$IUx2+ z6tY`FoAx4-K~TPPw1Wtw-vTl*0iawNXb3D5L4p3rCYLNBjIe$({e{-jJuVt%t*+tB z@l0Kig8_KC;Hj#*vRvr-0T|%0hc~q4lq+p8OFHqRB79`*DDK#BEdD-M}Y!fX$zP}Pk3{~QX4h()ay%AHhI_bdbJmAI4Aevr8UJj=+0^-sbwWLGo z%8K8v06K6MQKWPf4ALK`0N_Su0B?FVZi3RC%$#b>`}ntSMYn*V^m%_!XQ5E39#|&M zJgCty_2;zj9iwLx;=>@w!ZBK9Q^UPO7O>;20=OTgaH~s;2Gj<^=6R}n^6jRCHY!_B z0EKqc#gKyKHs8864?vr$S@nS@4&yjez(QMLgR%%8Wn~;M!2}7{9bV@wrgbyLCbesI%7{d_HHcjY&}f z0r(!BH-MvB=4Ug$gpe|;0p1+kwyPT$Jt+uJkS*)jRp$?%*~cb{mqCWCK~{nd&w5f> zNfd8mBgY=5IEYS1Af=bO(;)@tTBiZ#7}@;k#tK)Rk*(=ewJf-q6ssfg*+xtXqq56X z1hdqA)oO#r7z3)~(mPZ-_63wSsYH|+-+!An-GW`lHOG|Qpum%e)U10;?Zg6ZDvSPI zohD}wu*_UQ3VVZ7%gCFaaF-G?QdEb2@iR1E zt1GOs*nn`jRQE6V(jJ!|@a>^y=w`bOJwET}f8SZoQ3Ozop)#x5Sl`FHS8>3*y5C#+ za@8>Kh4N4wZE3RdZU`?S)Dz<`0Ppe4Kbp z7;;^)uEI!iZoDL5Br`}@V#qU6(@j{GuB)Cm`)H)Upqd_NyF3~1+2H!r)JSi#!H*dN zol7tc%t^gA?whbRstVMq_oZ`+Sa&9S z%k@+=#28%X;n*(Wv~S}D`A0DwQ~?Psw*ndfO97KxAz&8ewH-^W7nr|5c<@bVgxM{d z-D^;Xg<--xrEKGD?!DH7amURg1Mm5kca@W#ymIDbn(E$aCKF0Tf!eF|bMo{+J+_jx z3|DYr7p?!JU~7(FBW%B7|7#3(T5x`F!6)p91&I*bUG}FL$I_={*9g+^w!h@lgWqu` zSJ0@VuHh^_SyyZbebR+Q=*!51Bp-+FkaK5F!Na_ABH1uzeHl_|QN5#U* zw2O;JP*h7ZD>#UEJTAg`FyQF+_UiGDdh%T-?Ll@mzEI07Pj84lVXB|nM)G%?SwU!7 zK2{Ul9l17uivXw3Ak0i2jH^IF6RPor0gRz^BGJwi?`a2QKB0x*&4%BZ%Rb?k_10hg z+4K0?j{Rr(j7G7qmemD4hwHqf{IOiwAFvQHQXx!BJW*M)Q~c9U+9?b1vga*NtLwA2 z;4e8rLEz%Hsbjn*&S@}&pJCjxm^CA*d_{eUS~l(}h5vH`MgB8zjhHq1WG;WA@(L_m zt1wP%A7FFzt&qda=~?5^e_z$2sx?gM6kBz7ohx{ZU9iO-%A`O7{ZUY6vC@u~k+Aog zib-*zVI3|YH<_izIW_#pY6iryI!)4&sq_YGql8>nk4R3u@j%n!@Ih9Mjb z4H0$Ts0YYo47mpMr}tKR0KvxPFkOmN%U_AqcjN$bQYY&elp%JaA2QSUD;6!#>WFGK zav+Q~`RF#aD?3Jq@v-wDP}WtEhS{I>{VNY)=!polyJ`zW6pCzzO^F-LgGiov zR)9WwNJPqtmB_kwV!5G`-3JW@p(o7&Ufq2mk0)K$(aFLeb^kSY?6FPAQyPj9dXMl7 z%$SYHo4vlkGi6u`3NvyI0_Zbw@?$Tx!I&XKvfcxmjueh`PpAtIbnVs}i(4^eo;nHb zsL#?~?028SqOZqZ>zv;@Dc!s*faQPSWA-nhi>D$paf&;&e6qS4P&oU1Cxr~9`**X} z_uL=yry)7Ju4VM?kBfH=xnU@7cA~#v>4D*yI)XvSBsKzr$i08BLg$eq>wGEjh~5gv za!0nO&2{_>**gHmUOqkWRqu#jS*rhPoiN9x0^2qQOn*sX2RAves8JNAr@lxgF~=66 z@$j+ORo}OjX8hCg6_`{#oXVo3N=891&RY z6h64{*BsWU*EOjLyOsM3{?vaI7+!kCJtcn}q{yFr`Sqte>ep8vBXDkD>MuC$%p9&1 z>&P!iX+NBJ6Q?5_UuVhdCMllRrl?7M+o85bpBXP>`j3zOvaj2siEWSrND%SrK(lQxb1)wSRoyXmh2D&0Jie0wBPGtPcdZA` zZ~4f8Pu9F&zT8O2q8mKfZf?Y*catD=8Xmlw5l^JXF>1bQoV%;=rYJ>1WHRTe((F9`H6Hn z&)FOenS%5HJW0%4Y(#DR<9pD6Z)~%S0%NKkZy1%8d_9ItJ@h~e z-&}Cmh7v1#XNSQ}lPyJ5XsMyt7CTs;am!1<8mC>sIVI^^X#bo2kM=3Wa1@S1*w;#S zkanOJ^;x8HcVx&!Z~(4J75qENsUXC7-jF5?tbfEYhW)PRa}?Tp*sb8dUTD zE>+G~r{dXwgYDq8GJ5 z5i8fwmw6ad;B_@w*BhnMZh732lQu_#h1>$duRUop!>u<(;?m=d+770n+BsyhL zocv=SR+H?tuPt>*7vtqj66FqiHGGy`JW;ED=9%e|It65R%@e&L)YmVk?OQ~%`+QZHjx$lGhR*~rOEYOqrSjLClI@L zu?9w(UL1uKbCV-vd-m03CW!1oks~v(Goj{;>iu9;Qk{yO_`gB4_-Q9D3IXiRgkKuc zy|fmK_eaJ`^(}|b;#APjgDKf)iP8={I~s8Ixvi8-fi$~;(UqwN zwvs^jhGUAcoL&{`Q&g&B6HMd(Tt+f6vz;gJ{^=71|Y&aGu*bYJhUy zJCa)c3H_$HhaRvg@6t?5aJ%Z5e<;ZSUGV_NP~W*D||<5Pr-ek)t0QqcIxxkCI^ zP);<%nI#8cmU34dr6y`@=<)1+Wwtcz3zqw{W6u}lb}4*+asFUF`^+^L(L_6VBf~9a zCT99fux1#L*8}@}!&X?OUZ1P86Eldq^URDY_Fk4vdY3!%4R|&0E!p_NUHv}J;&Axy zxEKWILTZc-Tb&#biN{LxSqCmrwJkMi#!7c{hS`pX0aMuBkf4oA^(z){!Fo*@f8>KP z-lhbD%LEeu7Rs6U+-ZMBR0G#sj1Cc;=Yd*fZfeC3=0YHT0~qbvM*!m0qv1z(+EeEk zXw=}xjgU5JPOR9itWKgu^zyq$2S-Ia;7rx9GKr?T@q%AH{(0-^UhMAc|7;CLO%F|L~h0wBD8$aVJGtY!!1N((f)(n=Q5O~K20|{44&)pFQ3cbGwcAt@x)9} z-~wnL^%H&evqk)I$fz&fu^sQLKR+bcPnbh~1sBg(=a+qmMv1=~U{T^_IfxK9N(ZfO zucsbW-k=Z@u+QrUdx0l0VMZ%s(bg=oj@q@-`ajlv`*zJV+M8Cr{~uNqe^s zNeH?P^$emLX~ctlts~yd7GFNZek8AI=Om67G^PsN*Va>xAH8trh`JdF?8Q#!Yf_9a z`qg-!y%p}rF&E6itVpJh)tV-eHW%*jjXC%Sf~^QBkje8Rptl5#MzvUCY)HVQ8`C9Ef}^~#!nIOtzB(?jCEbKOV3@$KgC^rMSk9V*s?cXwjx_UkTd&T{k zS~_v}?NN)z^Lzv%wTxqR>E~-S>*_(AK{qtfBL}}V4Uft8bdm*+Dx_)<{ZXg`mOuZg zQqXQphUl>(B{$XAZe)X?3Rvfy_%+jW2efDzL}Y8J2$P!IoneHB7rQP!G(vyXME|4Q zRRv$W*@2uq2|0Hv4d`y>T? z{iYR6amh9gsIXWK+eD#;My>f7!(JJ#O`Sn8HyLOpPM0&$5AUIS5b%j0eQQBB9EaH+ z%G3Ck$1~rE4tNrbIB<+*n$t>0hl>@z2Ch24!|9#GAx~c{Bnak|0x%VD0KZE8Wj%|~ zJ>!E8ev24(iT78@c0x6r0b zKSi&Y837htI`4j-yu5qh9OzR~F1=C&)GUWZ6w2OiD4a=&@vWff!X4<5k!_nfs*Pqp zUNu3g{&g8EDi-x9Ko4j2Z{J8(6UBNWHAc$kL!j&gXLjYZ&y zh3=eHf<+dIu}?Xk5+gxw0p51hCRblx5%<*{EWY;*h^0P)d`6nokE^!}YCS)#s@^v)BUgp#Il?J>s7~G@+woaU|${2%5+)j>gC% zI?#wVV_NmdICZzyd?pR7L~9&NJp9Kis8Te7q40`wO`R+4T~{Q{){szLm!K866$KKD zR|4QTd>X?@V?E(UlN9n486D1WDAwk3TUjvAOXckS8XSiH3dr+nILmzcmHlrgpo0Ny zWNXqqbRViXWJ}6Frgo?X4am$4uR9eYInqud0A5Vt54S) zI8Zrlb`IhxPSq*4H)bjW_%ot_+Fgp(iQ|EU;J&2GV5Fk7?nuR8CE6qew=<31ChyoC z<;@4}PT3jD=~Lq%)k1^%q)aJMv3LT8Pp<>=`I6Y#nlcg|VbcobPia-T+Yr@a^NNUB z=GTz~y(8Q{kd{~wKT{H+k;43j8ERpUw}Y$ z%Q=e=V?x#6z++E5%`nN~;6e14#@++JjaZOQr7EG=pA;XQNb^Y<3xAr}1%+hf>qu?U zaEa?oM}pn2yZpG=P1t|r@l+AptYXQQ`@{n{;8;`H_+H zQOn$HG$bk*zVa9}5TS0qqq*?;27%_3)29j41p&6isc^kOo*2wA30J|wiUhs_zO)cU%?n0#&{xl&cIJ;^()Q(jZEIXPVaiAxui{5Vu}3Qi_gJVn%ti;3eOa=UQ&Ey4%rTGW${rkfu8K z>5`x9(m7%JR7Cd|H2CY;IuLQV>Rv}4f7yN9ryh2Ol8Hx5s9_^h^3mV z|K1J9NA^>}f(?uXq=TwFJBpTcQ1OdDQbM2{l*^O1FCvzrT zeF2Pc8G?y5{*)xnvP#L;*IWAZai*u+dR&NK6;N1wD%?J!nCLnYl@k3r0k?^E7;zjQh9`Q3_{D{}O*$ zOGSVA6~^~~CwE#k=#6aYjC_O-_lqI<(5N8@(I*`L zgj;W$acn@gns{yeLhK2t5es^(!XnDEu&~9mROHqF?(3-}X7va&qpXkaKekJd1-${h zxtI2)Ba7^%pF_MwDSMF!mXXv8!hT_Q&TmQ#;r6Qqpsq>ue0X*C^`8i^HCeI~gl;;d zUKTSg1&)2=ZY;oSh=3mZ{sZ55TEcqTl{=|sL1)^juD8yOcFJZhHX3&6Lr@V|%V17~ZG}c*-YB zYk1q?1$WXA#g*D*dV~fypV7@J#{7l121|9;F}|1VHvuD9-haV=!i7MykyI4)`?~9&(G*banJ`U1p5mdA8eEr^RIk5-hW*2HeZkN5 zz>S#slaCb8Ky>yf$yfrQ#Pux^Ytz_pEzTJsA*H9vw=}s*k&)JG9T*$OU{Fq;Z>4n4 z)|eAm9fynHRqP_Ey3YRF6>Ts_Kwc&!MZujdt?EA-Pn=8>VG4b~FA>rIxOHYRQK>Ey zr6$YdwpJc5-GJ(A0Ys~MQU*&DTKX2HOfcy^k8_M#{=*um?ePKYsnGOiKJfHEmPtZ2 z~y1v2>yI2@gz&(M}W?rmpUV`*&6DokICl_N)=_kQ#zKh$L&@4FtfY$S< zw=s6LUEQ}}EM(Y@2wxWLQ5bmHyoA@bi|$vrtoWjKkB`&lxETnJuY0?hlD6odMD|yq zs5DSayG~g(vtNOBt{&|eOJAb>tCHTVv+(!ZjueuGQs%Jm*kOI{xu?Bl8|hh_&{k3W zyyS;_BE}olzF-VkaLPy)@JLo6cp%U{UQSYh57@e9isC@2D~+{J15ZjLYiBf=y`Aey zi!R`=xKn>_ytcQ-GvKJRZ<1R5Il1HPxCEfkc^x%4Gr1tKozb+BO1XyHyJE78C=VV_ zCWtI3JU8z0ryn_Scu%>2XArn6)5HkCH&eB?0``E=bYSL&-#!2(O4=leXI97_gXG7~=4px?>` zP9Wnk=?MHtp?~(CG>Gem|3)Li09u3B0f@8HC&tk3KOG^Zw9qmNDQp1mWu7)c)O`=Q zt0_W`G&BLba>zqjO1vfGB9%~k*wXCgsa$eUJfBFn5Y#W(`)Yf3L+P_~RgXcSU#!N% zFRXjdhq{a%G2!4x{fB-vJH8pUFMgbGUsEZw-|tsma2AZrTBOKXXhxEW&0|cmmhE1N zf6wc~yU;c8pr$$pqf0zvtc~eLyWv~DC%5fcZ&^w72&6|b^2Y{}T<7=Ga%_t~C<+0* zg>@jXj8#e8e#V$keRUeHQXPA4rW2^-V$|5v(QV#ecvkHP-E^^7R4fTI57+-?fgd$Q z$4k)4nkG4syGT#=)^fH@tk7~Dcex7r6jWRiq>|ONgyEJ(DvwI4GWcE)!LbOQj-8l(2 z!*Rsa#M@~|tI%`*CaoxM#ZaH_Stib)F}f<9!{1lnekAT@VC3iAJheG$Y|>s(x3tLc zDd?}gY?X=_%o?*?Il}$U>B8SmGz+zVZY6P+hkSobH%;7Ij25IiQqVBk$7H)qUob;e={c6 z)_H~G&t5)hCdOb>E7E^Q2!^1PBBXsPBa8N$DXVdc>wMJgNj zok8CAAe`xJ+l-zl5^}f^pMBdYeA$K)LCpjCc~VXH(iM*Jk~(Nj6(L4y&c4as{XyP*MFO!3 zv3+6)BKtOtJaNV8Q-R_=38WD0J@JZ@C1CT9_x`SL|ET-2QAKY&WeP{U^h=V5KdZe| z-qL@S@6@rtfH%D(euhX(3g-k5v_R|Ehv-iBl7mZl1-2z%8T2-61iD6=0?ZdH{|JU0 zx}jM@Ro!XPX`eXP`6lk&r|ADME;LMzi?aam4#Ee`VQcZcJ-E7aKTuJ!o_w4`av9sW z^6cb4h%l9Xvox?p7Db>ne_QUWA-Li`!qSSAoD{eLrGB50;@?@(1&s#Hm@$m_lmJgJ zi((ib-$PKXBOO6c+*49r+qyQiCW7ah>0ycAMmom&8TlJS*M?+N(`k2wMmE&M+(LP*6j?|5wHCPfHM0qA&=Q`5@~JvEnG~1?b8q+LEogey>5AE@TCNzO%gihjM zGTE(bqm7dIpHF1GjfX7#qW($re%x$-BEgZQo??Fe_W8SU}COVvjzBKo#ZZwogFqP$xuKHIU_8p$O@~EoDski`wo6$xa zcj?>IE}PJQjsX6qco)zxdAaJOz+zs=O+uiO8HrfXawccK%KV-pOYA(<;^_%*8c9Q- zE~^#S>C8=lqxYqeyYkgMaC6}Nc6n0Sdw#=Z| zI~(bWD&aiaL?-e++J^Oo*HcZXff>*%Vjxk)@MW!R=R=_rGZ1ZjZo@q4C#k;RuhbIx zv@Vr+pn$F#&P_C&eKZDpmdl((fAU~brW6=B!%=F2#gR;5>{!sDQ z{LrCNoo6M=(lAHtoFH-a-BZXh`}*kG6$BTvX9kFBeT0=W)+ZuFsGs>$yVyX9c{k zDUBi&kd61>=s$ZaBw|Eku>+>Vax5PqtN@SQMk^%^z1O z!Wv%Ig4L&bHo<7ixR2l2{%h%r|8w0C*A&-ZS}>jxP>ZTPKp9;~-)cIKpV>RzOb~j` z1{WjDT=DUiy2#p&56Fm{HIyikxA1n1MNhyu-uF+GH^S-hFC>|27HrUKT`WUM7@8n}Z;=dh zmC-Tb;#x6J-HJUe!Qref@DrI`BWiMa@X-(dA6%$ip{=;uI+y5^tcVjVnWERw?6JZ7 zAJ@s#BzV(x(y{bUY^)4r1%R&$S&DsX8ug;E8E+%D0 zx_=%8&P(cCwBOtl6&_`!74xurStMIMNboirz)STn@J$ikuG!t?Au@>ii#MH%D_pyu z0us?V@ZWR=$~;GR!(fvJ_8$#XwO@p5zo#?mcS5gqdEPKbR4v`##R_BW=PC<&1KDiS ziNcW7F;GI!7#;v6T4{As@t8&y6qf!^U@`F4&#ZIyx4#6mtP2V^{ys)GIuneqi*?j ziX;B#@zDrZJ6z(WLMqtai5@XNa(1zahj$fuqyV?5F_YIrpjFO)6J0hBY!G z&`zS&^FW?n0TF6}PI|+o&Krt&Q8(#TFa!UuqENInvORD_qXm0zdTCpN)G99He*_`S z$;G+69q)vORNUnJ|6m}g=nMxEx;3!FLZ{5OSf^E+$8l8ob2xuH&dKKZBFHH!u}SCD z^@j0E^kcjOLcV+Aky=FHt54|$z$J{gD9(~C4B@RfQxKWnLjS4<2AXOnG68`k;TBLw# zPL5juI7+`cSCNJ{RQ2o?_oHp90Yc3%5A;mwv9wL^jj=A6r-%#;Ap z$?EZDI1h3d5B=4EO)C&QIF#?KFeu5fZ>*miMblbX0aC zr2SPM=>%~!+-!fN9G!H_>`dZ}@`*ZnSrfyRr|FkSVdk>yH z%><`3=U-fI#kco}^D=#KOAW9Hri(L@aQOQlXYdPd^#CNbID_KFGwNy1>;$y8$)epv zOHc;(zCP-SGO7jU{N7=h9(|1sq|IH1dUgG%hjysZPauOs6TnDaAG|PfH?C3G^a0x+ z!VVmh7%iB*5bGIJir$_GNKj=^PDwugq%~!NAerX2Wui$zZi)q-Ut%he@p|6VTyuc^ z{7aLeAPW3?UTZh!`^}h+qxqR{YmWg+M%+^j2m&^S?rF1K^t{&394-(`&AEZQF!0!s z^FN0K*H}959ZLat5J~u+tJ|#`n+D*gPgc#OvWx7Ev&y)E+;t1aS5DZi@gdvcp&4wA zG2UL_Bi7Cz(F6Zk_c|$Ay37{$=lYUjaL7XP7LVAXnf2j=k{N$_>k8Jm2+bSV%z^WR zSAt2ggf1^2#>i}Gcnx4(%utP;D7oNjKV9D={#{*z2tJMkU%%WqKB)PLr5TnX7)tF| z46nKI-tkEx!I5lF3WsF~IGWdUC&a4(+5Sr=Pu@aNANIipyz;s;h>*vxu2d*HVf5Cu zkw48{`u7p(h>yF1)pHJ8bSWmN+G$)1$0Z%)w${exBS->S`qc~Yqe2wbS)81_tDys? zDCz_qWAK59CU8Qv#mx6zy7x2;1vN+V;*CRT`rLIpEFb-Ue)FF2#%6JN%-cyDQdj+N zwkbGzb?{vgG)5xdLV2j+F1}L!Kjezdn@}+N45(dYf2A3NV*Ee&Ulu71nc%#NXJAVdJOk>Di>ylC~wWF*M*v^#Td!~ zDR~rDB>5v9iYb2Y1c&OJP(=`(IsS5M?W&<9NGI+4f!dr}zLx>8Y%QB`ae*&+Rv+UG z)k4VHr@W}BFG^vujQj0J;!AbcIy^~T2AAR-hxaI=)bhM^;dm7B_PEm{R5T1nx^(B# zKp-(h{fog5Kq;KFDA9KXhu>}fEy};upHBSO(q9;|*J|@|_a6_kM#XHp{QMWP^FM9kgnjw*8eeh;(Cd{GNTbn9#ToExa_${;y0joe zHkk+hrY_m{qrzKF&we0v#*}TkwHiA-U^V|2R)+{lCmPkCr(t>=uCMAo_G9W|Wmgrd zy_bNJ#VXor@N0XRxL!@egj&Pm7sS2Jrpuxxj=xz>>UBH zF~wH_%)TOvv0Q#)m-@}etj?f21CIYP7c;sX@W}@D=g^H@9$5N>YD3ddBP}p_*euF^9WT+L91j%`G4PB)c~Nk-g1k3CL3U!M-leGYBf zbD)k$Z)7|Mg+};3STO7bP>%L}W4Ok2f2-uEDlSD%DDTwd?Vu5y&W*DILa`3!rHeaO z!}uV=J!J8MH_K>Ffpj$HXPz8sbN?x8xjz9ZXr1;SJ=h4y>fOLV1 zFCKV^3Mnm)-(CL%#@L)X2(XQPad;?zmGX;XK6=reTNB(w z1%y$|iKQkpa$N+|-#LBHO}3pAtr$*s6Db~4xs^zXZ})Z@Qad0oct_Z-$PkfHx!QpF z_qJvnqJ9-V4zSrXk@ui7rJCC3O(b78MTs9C8jC%xTB!+Wc~eJ0v?JBHr8cgPusq2ujean zq}DTFT}8En;B4%ID=O3=g8K2_>f5fXP-M{BL-#p}#ma8eb`!dJ@98XV0zvKkT^)er zhlDRqNfI%q+|uT~Sbylny~J7gn1oZ{6K=*O=Nj$@z{XLa&Tn_dVTCKJR#$x`4xkn{ zJNp-Q4`2s&ucIB-fe|N)3DmBYdUP#!cDpC<2(7$;>>4VPz)~?Hf^6C5c&ovnG$#kN zcVqsIBK2AaQMw&hv_)AgwOMYqVfR+uJRa3tENWfStwYzBWSzL4JL33l1p=!^TcP2r zu-hl^*BDhPI!Iw?6cyw(-t|w9F;IfIMYk*(1tkTT zr)e-D9|wQz@^d_#9IBNRzP~WLRrW$($7_$G++I zrW-mC_`#|XIPzi%elAl7u0^18u9@=1&0}1zNt8xgR7X>!fzI|9HYwD-=`2i!Nv996 zJzkA`2DXrrcW4Im-Ym9vv0EpTuHo;rc8z$JN(#!$VjP#x<1$Fc15&PpR!0AO65$?$ zx{oV4{+sCYz-lMmLIoH}o&=cWhv-@=Oj`(4DLoRkq85I(2$Bp*%~Gu1U0}%4)$)8< zSK>`WH^F#7SsGB<6!d7q?*rAeqnaK#U@h znv-R+Z&o7Juo`l63N*i5QS-X1Pd+@$cY%hHqF5coj40q2weTSo_xue($=5emfaZ8j z$ReACMe|Q1hS?wwV^EW`n^SABBJwt?z`_xab`H(0m!OLGm+R3fD(pMuA??;;^}C?} zLxK7!=4dKepyj(K2LVDoRxV!i(G6>3Z3OCKDyre~rD7Gtugb+YZt(qQRaQ!a91=2Z za9CFIY}K!-ur*3{K$_Ld`Q&0ddrcYajqHBHN7=+ks!C=dke2qML%mLG3xPaUZ6L+D z$KElv@E^{xzb4R&ztXZy_W9w(Zk{^x*DN8JUyUxZ47Y;|mizW2X}p#|i)Lx)J;|JB-ySw5RdK?|F914Mtx@pz&bM(-!CnU6@cE+Et+ZqS?GS4cv9y;F!gT@l0_A`P3Pi=rP{uyhFpr2W_C%oDM zvYtqfO_qc|7@(#&X2+7n^UJh^2DORR0*BxJPrOHHaIp{J^|UA^Q;gTV6-nmsq%uoo zc?|D28Lon%QHpO`p2SNE{3_Q&82Lxp{!X++H>jaD>anDNeP{dKU-Op`S8g2f$_z~#4wlx-IX8XN&GiSZSDCu}@PXUeX zahvuaaZZt(*Nk*a9jgWZuI$tK2j=Ntl6yhMsjEJjKEG#iK?WyFI{CvO-e;k}Q)+UZ zuD#pfpF494-Zf5+;;reaR<{A-BS*rfV@(vpN3_v?6cN!RA{?|4G*W2c%h>O#+QZRk z>#!YLmx&#|^g44nwBp9;M>a-mHDQI5X3%2oG{z6p_E9ZneaT&p#UXLEIbu-2pG%`n^fTNwp2Zv9EM$1ea`h?xwy9vpIjRaeR;AXY2mA@l zA3Kywr?>TE5LmjVR~h~C{)AD3^Jq!`-qQX@$H-ScC?$2ZcH$2~Suf z1kZ~NUxqq4!+NSNPorXA@kymM`j=bEV|fT^MD&fTSmu|Jf{OkN0-$m4M;H53tSFfO zq-rFwFM;@orKCotZpXK{BJE%bTECC?@N~=vCABRzO6&U(lkGaKFR8HsNkIuwNqU)N z(5##(opd@NOP27ZSr)-t@`AXHqpkq>N%7;f*Ys|D&0Ewe18k0v_|yGDpf#p#Pkw}R zC10vuz4L@1n|iBv-VjL@u&=6$NR>oBDihrh>m1Ql4B|#>$|!`c18~32rzFZsJRI64 z;p2QHbzy!Vme^t^ah9WgAZ~NTlC3h7-8@lvz|(MLRN46!w)RE>squdsGVA*i!D}>4;q&3!8v*?vEut-5IHcPWUGUsAGAT_tenhAI+aJg%EIusL$#0mOB+pk|PoD;Q z&n8QKO_`{|dRm zpdJ>hUkj;ZGneD6077pF)9?9=tIKO3+&$*4vErv#%^<}qD$Ki=H+laJYe(t)fr&OrECnIJUif_W90duNz+XNV#{zC0zAuqUz8!sGiNy7dnoAc6~cffpXt} z9!yMo<8fJt8cKQ07&vN*5;7*a7m7-?>f}Q#JWeGE&M=l1#jFL)8H0+Br2ub7sGK?ij&+s<0E42MZ%x>|T*|b}Zh~bA!O(r;&!A_7;a3#-%&Q?y4~ry_XUK`uPrvS| zB-hUj>>Q8vPLcK>oY_STVOk0vcn&8AI0+P1?a&r)j9r>=-m%De#}ne(5xkEMpBG7X zLMKc3$K@G8j1P;iQyhwJQc^mRpXo`fpk{vayN_gaOL%P=jsJ-9iY8?j1tkyP*&IyA zBLSCY8iMP7e!G)~QsVd8U7h)0;fbrhQNi21r)-oTXmkHX0;>IaH3}AM%8Lwk2WDe& z(#gWp!g{}Z77fx8!`%}ol+iZLuYRKj#E4V?)J#-W@t0(*D&EU8RXkR{rze@sDK{$M zONbNqPVqx|jlfU3G_>*VQBtvczw|+qF6o$I9|00dhovmaQ!@YJs`HsKEyGZ*xoECT z$))N1y<^TWTda(JEMa(o!712POK!{sIo>tef5Cyiv)9WTY>FeS2Tj-}0pPFubzXgD z)o_djaWiqci4FKC9Ju3tiIcr{kfQTsN7|lKDVQ^_5&BIyvlM{>Mwr)tHv=u}nIBIW;*WXNiQ@_vF_RkXVrW=UTM3p+tG zFA$hO+cX1S5hMhOylvR6g_Odi=1;? zzTHhIW6)!_lLd?nrtek(gk(#E_^b)eP&33eKDV-H8li9Sn8INjP+dnaP#QI^06$P| zsg7^_OVR#__wIPCi8|=rCw~%q>lb2yLfPcRy&^-$KrFpEK;1fqk-PBxV<+He)-`fH zBF2~5@M%iU?OM$Dd9mTS9rq})wLd=+iK+MwAa2K-rW&I4`QtAL;3^9g`S}cDU+nx- z4o;sLe#?a~)}KL9qPbb27f^5;uWAWvFr<5I*#`b_oasR8>Y)luH^r|)+1kvtpvP-w zoQs4W^Fig|*_(u{=FH4QFhva|j@xq*5>G=NnPMLwM6Y>dCscWsD0TCvmrdmb&k(7V z`P)~jP`jcn`qM^Vz=!9!wdcQYZ`C#z{=C)qyQK2V?X8cLL)v3UBuWfncy zCo#a$5WPABoTfoqrqeOQ^LnZ4XIgjGdlza~>G{}xoC4lg2F{HzH6eNR{418yZ;b#c zv?&3C`3&+j5wEjdt$!$g`44S+!A5c>z9OD6r&p<#tX-h$rTYoCNU9O_GA5 z882>sO3S;ql*QK?*^=A~NUi<%J?gp1_cB+^kRD%w^XMxsm;u2*K?^_P;DK^>rSW4* zvs%svaF+(C;>-2OAKofRkNyWt(9GM`Dx1^MzzyMYfvr0i6CwI*B9Ijl#r-v#9z*-u z8usxuuy~)~(9CdSMd=Xl?>NB~wAw1l-U!_0poH3_xtFOdAyz8;3E}%0C{^5J zMYFgyKdWjs$=2Q0>W_&d-`0E*1YUrAm`L4K2Dx0KJeeHBpM7iMmdrHLPJ2`Z5KpXQ z_sh^>6O|8OY@HUT;#*?mQ9@v<|6>r@7v36J<(~(^naX=cv!!GjZSb13wNdZ%uJiRV zm@+A*u~2f(Hw%<-#hB(W74gUzwr&P+H+j3Cj_vu)c=4&-J_iBsNN=lkBO94kB|gxW zilDB;uLzGmOP-$LEghx&bCwM2_l>~35Sc#0RPV~PdBIM8l7nlmY;>M8Uh1R-;)^(Q zIXXsR!O7-VZmJ6Eq=_?5D9?*cUEf_B;I5d|Q^j@lS1m_zfKgt@AZ}rHr0vwN>;)AD z3-ZC@2F$feKzFE})o9Pw+;<{?kvSGist~JrLt;`{eG^eE6E?>hmpoWuTRALW3T^j# zUQ%UFnx1y+?J|*T>Qr-72`n z2?>)__EcZsJ0b$a+CpeeZ4e+HG3Z_zF7J4rzik0%YCMfBYPj(2&$}C-c-Q&CoZPof zXvok8#=xH8gxDeSCN|1oi%hH-xFjk-VeeVCyq`o31zsP@^eBFq1<6fPMrJ>L(T zYb>#{wzrsOyx7*W7O2VoT~Q;ZZkKp7x@CQe@y%Gf#{yzt{#kj7js~iH))PJSazWb( zo)7d_^5`oYcSw>hR}Ag{ z&W-mux!-4piBp#%F-)8xrnvMt%G@87pyx4E&{nfxSQ%vYD}OFr&Aa z^VuxZ8-xrn;5xGDeK=xw%`k3qA$dIE)7-yJuGV07_0)cBhBUnP7mB&`l<@awN*AAU$Kyzd}Eup2}arL=48i)ZQJZ7f)ArBM*5*?uhYXrf&HXm!yX=6q}eCQy(Km)7?~zF}k{ z%+ee-c}Q4{0wY#iKIVn9)hF)A%ASxh{QJrbp&|RaB#*GkfU|ij?;w?>?25tCl*g&O zxiMfH)5CLl%+8(>ql+~u`C2!4^93K?pJB=A3|4mB{2l&EIGc+t$#gN^;q@-|m1od* zSO(n>dFz0hJ|$S0Hr}v|u)pDk!AEC&4EwRba<>#d9hA1_b-=b4JCf$)thlFFB>Ge0 z1bUHqn+Ak8Z!vmMrjGgK5komKd+r8l%IL+g@P!oc9?h)>Po90Ic&g>&Ad0^b^nR%e zNyECbs$vNIx7uW|_EqFL4mLVzZ>De{?Di!_2gO$0yK2WO8j*L0HO*VU zb|Jo$I=S)&dk1zjg!#;dkvINqaaKiR+Q*nCNUqnFLsdTDS;ju~rmqmq>=v)|%}LPHe%{uxcsTB z&Sqo7WQ-A>o!@mI^U3>LXKp<`WW*Hs)%rGxh#>H^{djwo1Ifoo9n4`Z{Xkqr2gQM0=Ye?3*V)Zo9b zT+LN3TX*SfxLNV|4x;aeGmn%6j#9~{qkp)(c>M4UN8zNw^rD$}Q1$Kf-%@}^jBR*5 z$cR7cFHepGuxq#Libd{3!+v?aahUq!_qK*MZQirG{C3U|r`Jr8p}x1iZ{dTZzElj7 z;R`1(b5{6G%IPvTn`uarv7rF^0Zmd_I#MgH!)7#r=?Xx&|!Xy zMKX)PHcL3Gdyh8(*&PJK7j~3nLeImc`Ig5^oeJrikYj*@ZAsj@Hx z4wl-7dt6lqT_S(&9VAFFmn~ee`Jlvjx7&&1m8H}|3(4{GBT?RX{VUE--Z*3U&Yp!3XS3Dvh?%Wpd?_EuS z(!2k0MpV%s)z5pf^QFP>uc~FYWmpk=7rs`}Ce1`&mSWAZf45SektTGdO{#rrp^e~H zcw{(AE@i&hN{i*qQQT$af~TgVDJ@0jod2L$+K6#s@$LfJ?{Y^WT5jca9CYoa7t`U< zEL$J>myW89c}KdVb?})Fhw*3*wg+q|8X0Z&04)XDDi;~GPVwBPT` z@@wvX&UzSK+-79c1HC*Jeu6Zei*ab_;uyN51#u3#h$7?Uf#o7yrJO3QBcY z{p;AyY)u3?m-c>kDpe7J(7=bOej>lo{+ec~chMIIi<(dCrCju#Z>EH?T{X~)jwU+G z?6bFj2Kkb>y8qI#!KF%j)xyY~MF+i;04ep8AddM9}fyUvAoi->Na2)I+QCS9I_aUz0 zrDj9>5B)@xQAO$Tdq;tuRL*!iYbwNi>hNAzj8As_yWioyq~)V8ogx*Hb^QHZ@3>tb z=&uw^wHieWYdCzZ(2V#ig&L{U@mE8duDXi)!?nQ`gO`z5%y`}i-1xlSec9xPzN*jT zsASVqMu_SP&YIYACoazz_RafOF_8c^mGojof}o=$*T=fGXS|^6Ti?QvYtT*Mee)}3 zq-3k_u~wsJKsyJe7bx>4HSR1yZJT-LbYNuaF`-|q38Uss4J5V6GMQo`vn zWqpveEd5%(k+p37`;!3L8nNR(iQ1ZBnn&I#gKF^ewO3hR(|sCEU+q0!Hi_$jXjZvG zdKYK5V39fXU$W^zs%E_7_ZiN>j;fH4@}ulU5T8j?K{-U}9>FABPoVv^D3XG2c-(X| zQNf);SoV`YhIOaqB)IQ3c?}8TsRx~`my`V+i?Lime~oaW*k4TqR`0T zkRu;d`Yb|TW<*xLQ4bsrEhN-{)yZlf{^^B=znIe-dxhr`bnw?VF?i3m6JPqGg}ld-u0z4T!$QV-bOVN`lzo)TE&c8TaR+H1bD6qvN@uEDwThxt`&Jo7LtEn zYfX8^JL}i|w-H=_xZy+u@Owi93&wyiX^s6`{d?r}KeFiZUuID)0pR82^rDP@J&!eI zAXu?fOUa9U?NQJ9%64GGX~kCy`FtVmBnoOJx_+h9K<0qT)w7Q;YdlM9J}IN_z}A+whrJv z=h8rnf983ogmaKm*ZG^)!uov&P3o5`Vw@N{Uz6Q-u=!G#SrBhAzs(yU649%GGOKhY z!umpv?t(XgsB`C2w*TzF+A+BJS4a57F8e?cMaX1V#-{q(PO7ojb=wZsNuJ6I?wd;g zaZaOa8}PFRhaX_M;kOWp$zWHVr4HW>eLTyjM~cY&%z!svaT1wl)sjg89t=0>W9`$# zL?Zj+0;_myL=M|>aqxysQDTm-2Poz@_VMt%k}!;Lkp>>uqJZATbk@XE5t>n3TioHY zq+QVEK%eytCtzaF%9A)c*JZD99!CV?mL`9}QlcT4(V%U~YYu2pp_jWz9XiuKwqk-~ zH1IcRJAMU5}a70=;%TP?aVx@_OqqAXYx9xNhwt!Oy>^XGpYQFmq%R zzEaQhd6l+7}sAS`_Q+k zX*Ddr0aQvo8`a<5e1@JnMGBPJWNmEzRnl)Pz{VGS!s<#Ej`+;8)T1X;4!zOgqIJXA z-T@+CY^Lz&4(e`u$A0`_ZymWD`rtisZQmlXIGPMw&x=OW)r&k_E zszB#frZeR_3>?BoERW#z`bJfkjd)Z2*5cSg1MnpHrJ(ij`Z~zb8LSIm)5OPm4AR(J zV~?J&DuUVla3^IrEjj4YI|xy@E*~@I2acm2C$%brTqGg^t)sJ;el58Z^7T{r%Tt%* zdUs-#Xj(P4Urg%jI(N$%Dd01TLhjNI-|+C(^QxLUhEgz_kQ8+3&&c)iR|iX3W^&|J zQ=63O^1LGTJL2`%DIuEZYi4(&$%#2$`Z%0X9;*45yc?pH*`C_oEYk}$FeYKBpTbfh zb{CwV{&=39`7<-04#Fp!d4j6R`m>8%!ZBYj21Cmkq^ilefyU?E>liPtaQ`G?L&OBW z!2~KJOPPEsC~(2_)rYTZTt7ef2jUZxWD0U#4KzFrO!S}Eyi~#+_SBj`(%Sp2b1$9& zYV9P9s0SVbQryi-$PditDWHZEB4YLZP7H>bPbGnW?f)cqlMo%OmcUm{B^TtKvNJ8E z()silN!nJ}4CUJf(G!BiltJST3EAf|7;DB`5cHy4T3UHlp7Cc)$W7#zunI_#LFT0mqcG16NagibwU>UE5b@Qr04qMqc1Fle=#V(~Z()Hbt z4P`v1XDmsglgaQ2mU`n9KeLBHjKSBOY0*@kn@-HxBONP|t%hf?sx-Op)wL)&cW=9b|MsOgyot+S{#}u3aO3CM+Qu=PL zb|%lb^5enG>FOJN_y1%82uhtamep#(6q#S|yc|UsneZIWG2wRXU6TsIZ|629qPPte z?p-tGf8_Rw7Im8(P0SoTH2(C&sNL8TloAd?0N^}y+iou|*P=JjC)m)dkZw>-M}&L$ zLQ?g+Xa!zv0e%_9XuC#(zv7f{teHE-jKy-S#A*rt(=2`EW$&<8?`R`}uyNcQUq0e< zZ74d38?1eKjczi$56F67(Bhbx-iS9;k=rZ({4>1lUlpj^PtUH5@IwK|k$+Ol&!Ap4 zK!wpsUF}t6>|#xi)5Sf9$sqFh7oX<*C)f3#@^?l>E;JdVJq|NRU5|xYG8j^$SAgaB zLXy+YsIAm85euv?No49oDC0$-ga$iU=H<`2wnUb->S=crE^Q&PQeRTkpx9l6Afxy_ z!+S@0jfQKyP5RHZf=5L`H^MmIM zulGJAkwvu9>B*CS$^4$C5biJ+a4;vt7HcAhDHX58Qv^u|>2Qnv^;(BIPIZfkjCy=- zsJuIMkm!=6TqvzMN&T}#?HRXvX?fzWnxde|W4WqKkZc}9y4uQOgX&>-Uo<}O9uTrqw~Y*F?yAc%Mj+g8NMQqeQSaMaU*>qX-Kg=-a)ZcUIp`b zVLpAo?4L~ufgHEkov0MWg*4-hC*#W{R_!wuAL*yK-{Z<>na;wLV_ZB%>0F(}?jXX9 z&5|@0q7&FIm7tPcmch`sdCbxlMVY<`Quj|%i=}{L9+ylqmnl+o(G+C5L(zCgMWbR4 zznk$j@J+|OG*26V>iv}!H&nzP8{yl#)#6L}deZOFR4hw_w+CkrjGYyZr`JQz(ZAbLq8gBhSu$d;wnD%8{EAW?L)tT ze!Vlryns4Q?l?^vL7$giJUAttMRdT+x#)jXlJ~F536~b#u;0x2M_B9a(Vu{(ymI*C zIOD0EK-&TG4>#>wHKBiXoLY&TQ?1n@_sl;3aRLKH%x!jbiczw*@IN6r+Wl~rze;o= z#Nubb6in|4K)3?HHScf9+oCE+UJ^3!D(N24^tfcg@%TBK-+%NO2zM$E%$s%H?ZDX|y{!1&H{@`EY@Gte`23c)Kf1W`r6 z!Ua&qwj&Ig3F?Rj+jDx2E4s5EVHC16&_6dsUXutp=~CMA%&GBBk1*X6>KB_A0*4i< z2y2DiDD|@z@-8@~v?%Fq^#zA2=;MXiS+b00657R2Yw_tQLEoKezpwN9c_Co_TxUMMwumz)6mQ>o>C7{Y`Z0?Efa?x4R zg4lkGA|GbFcG)){_o&=1L}ob-X1&@1D|9InG{RyqmRF`z=!V0BrJ>3Dq7ruxM0C)j z643zhSRdk%6*V14*T`2$EBv(9$C-_|!9R_P=z7PJ47{RoyM#ngxuPW^K=XHu{OC26 zyYz>4!YhW~A}B-i?qVM=Tt5#mN0<7c#~dVn+T}<#uMsJkB7%!F)N}9CTxpLMIcB26 z#WQt$gu)(Z4wuA!1qK$rQT)Szj3`v7`ZN0!QbQ(uA13k1oR*%~A6SBC z^FOE0X)=N;MBZ}w^VIA+2*=6N zPoMux8K6P3g_B~u4PDV|RUK;o_<6iIE=iF+H&gA^NX5AwddjX>B+}0 zPW_L8{lWMTA)#>_P@kWDP3Q87za4%mL(abX!YO0|;1eym?_ol{901I&kUj&PeP$A_ zyb0sOXj&8wu?5Z%0{BV^-&U%$vF0BAwt3s%EWr4O0$du_d~tIwI|UH<^_Wof*w&wq zr&nBBmaAOngsfl*Z8A{z($5m=jv)-_#a%15Wu4hQYvDiEW!9l=zz3cIt&V$~&=Z`~ zC)cwdP|UcEA83Co+ME7@apNK2cOdyso25DXi%&>w-kf_08I0rMaX!8Cy!s_ksYwcI zzUT|Cbe5${?a9zg;v8g9(Pw7fK|*;#fS_tkSU-*8^|8jDiYRxhNTL=5w%fjiB1Vjaj*=5hH)^zv%yR9RH4~~DfO3&T} zzBk=37dCQ$c#Z^>L{M$Wc)!m4?xfm4|9QHs|G#$AVpg%iLEhhrFsfYrk>5`WN zSRzk<(S5qtzUw!!`&wP^`7fm1@lgA?1(x2!rb~!XZ7jR@EHn7w5~0znq`H(%D8_Ht zRRwQuk$N}fG_#K(?^L$`l7uPgm3oUyU+R-Fe@+`*&%wE%Rdlskdy5ZTTyo?Xy|gJz zDax%45?n)IusiPGYY$M(_`ass^a8|Wp~`2gIOY<2e?0T6-B+PIQUxj3O!9q@a6cha zx1nze(M8w{eGa4C@zg0pmm;4?kxV?eT*D1BAv-3;`TBGy@1yFk0O#%;Qf2tPMm53u zXD<*KSdJxkX`SP3;xco|Sw)7^)R24?QsgsQ^(U&UWl>4sd`JP}2GO_9VLL;Hyb!Wd z1?%oE>{=taz%~V+fU|r2?$-GkckH>Q!Tsj}g}li#_aAf_OaD2YHyd$L()O8z(tbBf zJo`QCBcFqLc9y{6cjG*N8jCCWo_}Ay-+7xJtkF_@>G7$D2Clt7>_2^`rkyRBv0(i z-ZgP5zRDBvipxKd`iOE7TR7ysZjmXi^{Y)y2^iptgX9METJhEJ1HoCTOZuC)qF6Xj z&Cree%4hnAkfn>|3&I}H{rut6b;LsY!nh+rvOwZImlr`t;-nJL$BxZvgZEzGUBZfTUur4a0K6dvGAN5fJl2c|^(UpR`l>S!uV? z;jlammFdQYEr)NI_V$iw5B}!tpYp)EaJ-L*B>m=J+vf6TUW&i@;0 z(lc8GJ?#mMvKw6&F1)H9LuW+YihU$_!4?TTQ5quZ9+oNq>FatD3;p1CHr}-Qfcxx6 zqI=He(-kvRhNS?itSyl#IG!robZ{7P1ldp2ye&)*q*gsQbeyL+^)6Q!<=8fcibf^o zRrCNgfaEsMf0Oi{6u>z*&dvQF%RR!1V;X$H{Y|$hY03fG6g2Q2V3-Y=Ty-ZN_$efI z0FvY@4Z;Yr9qt4k)3~StmzD>4>^tVq+`obCvz)VBM-VFm*nAj-{Oz{Jl#&Uygw!$7 zfRsk4wx1EhvCUjat{p5!ZcBCu{1H>;-8;cyf!69JKU$)LhSAhRz?q=mYn1HTf=af(HBN@RF|)rp1D7vIS=FdD&Um zB857j#{Olu)k%jS`pKmql78%|p-$wD5)(cIoNdR0jxm%t<5o)XZ5K5Fh^l>F&QH+@ z_esh9j+ks)?;BS%&*FO|@oh8NtPoo@m}!(L-PoCT0x1}S$2%+q4K8gvR~Q^H<0WaO z)N3gycO6XI1v};L`k|DI;O8gQW zoM2DptnWybMJn*q(0(q*iK%+c^jd84OSjsZl%~GC^)ma(l$KZIc?Es`d?JC1-P}ZM z0g1u~Uz)_z6BvTA8|2JK&4z0_8xT+*kq`kA((%L_5iy@}W<=c!i#_4g(ipDWFS#5? z(-<^(W4)i4^vj$%n!=nl0dk7A)13J&TZ!(>I3ig|g$Dv#T*xpDuKQ@FBd7M=nGVX| z^r`Z$M?{)TibAfS4e{xKFlL3nbR9-fDe_f5Fi@d^>o=3MuplPkNibu__!?tyND|t# z0rr~mPtFgr2B`QsHGS$ntIoZGbt| zC+)m>Fq)3bY0FyZt?ANE?4l9YF|>>7n@B>UisQ?OUp+1nbFZn5DZP1M`d~5!J)P6( z@9!P4ip*y^14V=WMM$fANR0FcM$jH5%^&#Ul5b9;K9QDP$Y={KOs?|(1J*z(zy4hu z`c67L9!6%n`NjhRD-!>C9*_fyI$mAQW9t5o84#eC7QLPWr^@0;wj=DbNoc4v_zfpv z<<_5ES-A$k`S*VF#G`)(-|JXzUOoY_WUMh(f#8C@V80}abbGx>eWxiB2XlyC2Ep7n z+erh%l*s{$I-k^nc7ML&TG{==xpf8RN$5P^tJ3|g93%!DWe0Jfg9F5Y7EWk=G^^vj z9Y^>8LS2(LMTh@+iX%L(=(^HGKXEXhm`yB$Ic4seT|gf#`bPCq^o{`VesC;!AKo5~ z?Td}TAI!fx^QsJE`QLtbtN^9K(okt5n9t3pUIjSIR!xyo2q_Y^we>>Q*)Ua$Q<_NY z6FcBO#ULJ#WrxmLzS@^EQd$KNG$(1L6*tS(r+5NMosk2Y%wgt$CUX!+*a3-b6gx$f zDsHk&4vC;G%6ph?ND6{}AZdD7(dQIJ98u_bS0&gzJSAA=Xa-VjGn;`VL$m=a_B^MM zh|8qb^qV5{-1GG?OBu`=`zcF6iefm&Nkn#F$FzRO5IZdej7mM2L2cLFxZL28T8lfL z)8DV?cRncm97#(Th1fzfS0&Y$`B;gF8GQ>WO*KbHDv?O)CDRTB3vE(K9SiI$U0A(8$2^!GhDQV4vEfV)CIi0B|L z^0=ZauSZO021$(rBA@ONsD0<8{p*#EJO!?*6cq67#|N{E6QqG&k_t8lW|&&yn^*{& zcup0}Zk(MLUB9CDmmKL1c)u!23ieC2Z>##$o&w#d@(=*_f&MEU+P@A;4A_c9)NTSc z@R9;>l>>N)Jqi#HDL5!$G_Jp%1B7TSN;fG@1?1YXOb<|Eg8=jPlmbfgdPdwj&7uv2 z>y~i}SX;FoBBJNo;(ClIxW&lS0iMpbNUHr))d=#65}j0m#5zR{C&lk<^|o1NF z+8ZXL=vIRJ0ecDXN!Uxsyqg8%l=%Und@Hj5 z>(JV+sQu{!oj7H@wZ*lH*nQg=3DeqnYtEB-C`kq=^Tb{ODm>&KP{KE9FuQc+Nr6$~ zn9YGr+G4ODVn^OO89NEHXaCUu!{hL+Z{Pafx4sRfqosFCXTa-hc(36o*l8;Yi5V)S zz_!_L+Mr>up}%1O2L7kN{?5QJL%cCQ6i)$HxoNKf?F^eOpnF~F$eeE8Xe69(jZ?wc z5Y97>0F-7DQBIMF_No!`jf@zlQ04qM3w)x11$mtpJOJaAIr_m!{fh!!+8k5~{!X)B z`j?e;-R;jRwu&g^41%3!f=|GVn@^a4hDQw-{m;SM;~(;3K(D!Bb^%FymnGmc(X}$y zc;EB@dl4dUPXE1)y<~xyy~#P?G5fg;OyRQ+Xk&^Iguo{I-ahsNqhx6YDiqlcz$Pwh z9WDTkY+(;jV3u)2$>0N^OH<1PY*jm(dP)7-&!smWzp`t9`ZbdMQRMzw>Hb=!fv>;5JFdR=Jnr)v;J+^N-}!fIi2(JH z{xc5r{5GgH0k^bs`w)LrJ>m&Zxi2&jZ%HvR>B9dimE~B4%g3 z6q7UHe0<&kQe^n|hzvtV8~7G?83z`5Wq$>J`0xMlfBDhR!fNYkTQv>lxH)Kk7AVrg zFpy)J&0wF9A`P^%qM*hX$VN@F{_WsBwgN-6(+S*H=xdn-8-WCE^a6c!(FnBYR&A74 z`hj~$YJm#3*#w+pfXBcfjm!f5G_e=BNgD#hR>%Nx_LBkol4-sGHrZtkg1HZLgDILJ zI>FpB(;Nn~-{hGEf8O`}N6;|PFz)XHcGAue;z$tJx3~ya>@`~f8g&c0OSg5Mx^XYz zq&u4wfXZ0sfE3_DTFJ>DItNNcH%3lr035g{=huG=8QxRiC#H@$*}y(mfTH4305GPK z#g9lJ5hx|#ki-fZm&>z7k8yTr#Bi1-eYyY`l=n0vq=*5_ykHJ!;f&V%D9wljTm{Kd z>j2X#P~Z_yfC9Hz07}G-2Rv0r=rT^iRwTncGU@=XjfIf+4{E;2Gs_4t%bYoa&?a2e zzl+QU6fDG?LnNWw)v+~ePpfq4C3+EucmSG*T5=77M7YGYeVhZW1kCDtPKE9~b*r&~ zWgt$M0+d1kn38(7)4Cx`sN<;2D?SF|m4^LA>%(4q8FhMKOD2fGUNL?Pydi@fMp;AC+&3map zrhOIy5*c;WY}Ik#hYo#@C<3LV4$-}4v$nLWEeEtYP}1Wm5?|y47fl-_V2Ta|NG|L9 zdLgjih6CZm!6-z52+ViUGZJ|xj>3u(3SOxT(?!&|i1kQnS^Cc&wjnt>i{X2@D3x(w zg(`VqKS_KbtpfWC>adSd<)mKwvDUi}^a!!QUgHu1#HTcZG2k(g!>>(ivN;s(jv!u@ zVKg0e^{zxB)2EJ`KK;HFMoPQrM(I}x9cK^qTjwg3(x}%><8q;jqd7${CxI%y*^Wfn z<&Y>kInOiK=4W4c8hgwnf8JW^s* zhmu9g1U0EXy3~PEH5(WKvV3mt0cC_DkW<3Iqp${|$UNy=NmcTQYwCa?jA*QY*@GjH zIO%N3^_(=L^a8DBMF~+G$O510{J5fbanYrO&l%AINUH<+C++A0obpGOG*Gm6IRa!jMn4efyq?wTZ_|j#MV%F5+CG8C4rbV+ zkyQg)Pn9|l!hzbgL?C_9B5>SULZ-IeU8kJiKrgThYGB2RYd`(AQLyup`w5g z7z%apUL6Jl+#j#wIO%68g8 zAkAq2Vx~#gL+LlJ{aq@Et1PhurY$6fL=mGRncq(tXfeliZj5QabL))sRF_)7&GLSD zl$015cAI?&;ieN&#B%dxZGCC#3p=59j86fvXLrzz5c~vGmvQ1Nw7DSdXD4go`>NWG zGHwd=AONs@?}fJ4*Mo=AcQ18)d_s>B-QuDBs6ED{^>Y(0?M!5UjWSJ%NOC-iuMX@h z{nrc;VC2*RT(ovt>${4t?Ky5Q0|k4HJ4F3hfhXgXgq$q5k5B{>?4biluvrNKwPNo= z#&gdnEm$^EZ!c8=Cn6M3^FB>D>FAR7hf$4WFRMK${clp=+Z{a}Au+bn1|-cMjg-w% z0?OJmhV?$FaC}SaP1zA8IV5y`)u-0+TTo4*MmDkxWI4bRA~7%RR|POb2xQ%g1A?Vi z;%dL88P&QhC@I5dzy9744KNQYil4>f!R?`Dy&3-lmIaVlw*{%I> zgI?7UoMNPLspx8f-yXehQTJgLo|!g1uN|>V%V3>CUp^cU(qF5#pn$M^zo_RuAhMUF zU54ofd^$}FVr@$Q^6JKEoL0SFn`uQ92V}fTna3%bEi2)okwG9vBb~quqW$IeuAbI^ zl_he(vi(BW@s#cls=A-3pDzf1@Ag+RUp(fO5>;ApDHx>q+8-rFM4TbB4e%LY5QtN< z1>m0AcLlIAhgM7s>_sDX>l7t~xY!F^VceVszw50IKM($yhFMc^^VIR|Vqm+1vI@;=*uHqLPd$Z}q1lxs901d>xg zoHo)xh7r=hOA6cr9#9|y4CubRg&w57hL{G%>1Pp0u{m51UC-JGc&hAmo6B4RT3F)y zK!FVHP`$F6Ts;myiv8#pE9a1PKLh*@&shc<@c9OjKhs6}yQ3>c|ML(c0K5)B3n(3g zDFB?Lz5~?V=ThD02zW2m{VoFb*M9y<0RNlLtG$0c@c%l{zc$jp{_ph)0B@4~cL2X5 z1k?imYk__j>0hf1VBhffuP^TJ_Ro3#dRZ^)<=^nKP5@Xh>t(&Hm!G!0ZY;T6SYpt9 zgCsvsy`fxds2Lh~3wT>2O`QSyHt)~^Jm)+7EFpuo{2%`4?^Vt~bzAlD>U+RG{(F80 zc+313G$4Rg2~3-PibUBq>M^TQ+~RHHb#L)+PDNH=;R@Akf$61R(Qy1pul^?qp|$J001BWNklZcnN$*2Qj3@GmGQ>WKO}%vi%vtj;Cy@v~0hpXH zq&PrbB$i{CN7B(QhukX;16AfjCu0D-)Yh2`0TYcRFvIKxGVCzB5eI)6*rIpp3mxj} zHZlV|B$U_;fz4T*<*mGT-k1WfoNN;FU%TOT9P;el3jZTo#S`_c-W1B1Hv>7MFi%j?_?2JW+GK zG6J-EfPk9uFhX&$<~ptxoCIdt>|h9}lGDiYD56~)xz3T2QpJyc#u1>i1niaiG+m*) zyO}DGHYaFD2o!yYBfX^8uLbZ1fEbvaG^(SlUWB?rU~d7?cwWJbdKNGa)j;%nqsG;`MN zhV1?DeCM?FR64n=z}qqzBr-Y+4Cp!^ufI;6{H0TvN!9$#(|!~;&N1DqZ4l-1b=PxF z=c2xO0BqNO)W;A>LPWdw}-)G%@&gZ1{tuu zaAWu%pZ&)>VS0M{%jp$}U;oCFZ(M=kroC=&BJ)Zu*}=7)tSOKrPaBv~x@iSQ%}H|@ zST>tD1mqP^SWBn-X-mBzcx_zn*WKZ#^$j?HvZ&*80Dwul2*7lcHAjIVbH#iLtRO^= zvH~~m_eDw7VEcofU;q+@L@Kca<74B8es>CfJ%9Jey%z8$%uK^1m=QC?DDV-d`2@(C zQI&dklHT&4Q}o$@r0n^CR@#6bRfs64;!cLGrXNVsZT2D&hLH{VdTqtSn)cS56IY^Q zk1EeJh9Fs$h-l^dWmfz9L7Hd+3OEVqDic82&M2UiLjW&7BpZo6FSCdP(ZN@8<&wPt zB-uhYkTJ(~j#~iwHocq_PK7#<}qWIIP+E}feSB0i*XeYV$ zcI);gP|zEk0C08CiVXHZ;`;Yc?7i;fih3j&RWoQP3&JK@`efkK29;E zXeHA2f!gyzoX}j;AsMfmh;X2GjB!ADiil7!rspq)_PjiO6@eWq3W@qk98!B!5~e|@ zo)xD@iOgAc>v#3`x0~-1nu=?JA%u9cptU}S*iCV;r-)?W(I=96F6c2*=BQoks=AK0 zJ7OzCYUd@wmU8prWLUSNfD(Y&LBEUv(-XFnj0ul>dcLeX0;n$An<1glmD+jNt#hd` zlDu8*!Dv;AtvSjwIf98>^}TSdSwM)UOTdT{P@6QezkpMU^TJw_ltdn={ROa9>!Ac@ z1JaLVCtg-NeUK!WA==blj_f5j{+|Iw1(;#Cj`z;cjzXWjws`s^aWkOzllO4%mI$BQ z5vkkceAV12>i2_so+BeV`tP#+^8aP;{bQr*()`ZPxh~2@b#~5*w``ziq9nW96CVk#UA}ehx##zJ zzTfBj1odA2^eB$vBSg?VgR~+2umz}9#fNb{&xIlBin?MHoq9;HzXAdkgcvTQP@WO_ zo}ESr#-cp7n4p!QPg^!(?`t`uVD@Of+wfF*&Nt1-{;W!CM)t8`ot4+Huj`htM6Iyi z|MVo}se(y@eZ-&w-agZW^ZC;CG)4z0AVxC@gh1c}n{=H?fsyuGgAY{G!Z7%^>}7i$ zR!l}-u6PK!{XgsYSr0r~`RLn^{xA69?H~62@D!|g7<~}E0d~wz*hyf_-eLl5olV;Y z_(tzHj((#Xnm7E~-R1^hv+c8ez$s2~5@@E*)DseDODs?e6zqte^@=tJc3j`=R^Ue9 zDbQQc(1H@0EvlbS>NuOnDad%b4lUR_$i6dA7(%Wm=+|*wQ(n^m%*n8;aBe54lMWxX7p4A7&W> zid^R~FwPwX@-Nc@B)Q9eAj2JMft*?@ijFGCGn&9&u%`g*Av-=z-$$@U|kv&0_iJmt%Q^sgu<0?17Dj?mM7 zF%e+#@8v*#Ie`Bm;NN|}{5j}E4HpUv!W6BjH6~VFvqkSh%#!>=rLmOSu7nG`YSt+#%5*^gGX6RG}g!g&~&PK zsH6wZyd9ze$ni>J2u9TaDEEhk6xWD3ZV9>Q_U#QOAqG}Gi*xoS7M5!cH|)5s0JZt zxSh8*1J8l``ndp^VRD|v&3d2nAR0ly&p1K^2tg<)S^-+~46CG`XOf6_iU0&oT2pdQ zne8fNDiZV^T5{*T9VRJX1o14M)BJYG`FOp^1;j{FO=u=<)?8vif0E~C?PHbv zoo5=MZHOnbB-cKur(S|}h%9-`bR)2031}tsjL8E9`;sOg&r7ooF&H|NuX_)G1@#bK z3u<^q?+V*Jg^Sn-+n6E(Y+)Q9m{$W;1mBThY!2yP5u{%(g&@SU%~vT{$+yWqp#-Lh zXL=Bi2Egh$y-w;?ybz08{snD6FEI9OLB_XuR)`|U9iC7E#+jx7#E7v987DUZ=Mi6| zohUHHJ(Vj?Xj_z2iq^BQ5PC-pOr6<*5PoU`4>K3_eF!K~GM^#znjFw(j*tR!^r_Kt zLA|dc>WS!))^ZhrDzi)5LjWKbQ`M!HcuFprqlgfGJRrq-HKd9!jtc?cLXS8pX`dnw zkPsl^IVr8RQJ=F`@6QsE`P9y_8Ss_RH^jHK-Nm+-5mEhj}T_Y^xJVT16rARdl=D#Q+ zgX7~-I}|5j?r3KbodH4s&=9JkLD*H|Irb+ z|Lec^U)=wjkbjZC_{B?z+=$$-xB+%Ado*VCVqa5V+cQayEYQn3>cAZ34m-hIV~6QO z_Fxj~pcp8>{30egv!Cn=atXE@A1$0qHuJH24vl=BLudbw12A- zQj*fI%`R$mJqT$xGC$|-8)UxTju4bu2njB(KPj=qo@SCsLeIl65Qji>V;m$2%-aX* z6&flq`H0d+fe_eAyLptj=>@VpLPG4!l0X!U@|t@Dl-`Ef8R*2g6xBIriswk^p+^Ye zPlyNw7OxbGlbh%3*+UhW4!u8C)(xo>dsHz7 zWH`cEWFIdi2M@oDXyyk%u*A5}a!v_RGrFG1PO3)VV-s$y#B_a~Fe33hqU(HI_ba}x ztFEqnea|;|NC*IVGv_z#1y^4`j{(q=ALZUQizbGhi!qYX}*XP!0 zxjJ!FYi%jBMStI=cQ`Ew4=CAb?Vowq1FR#U4iYN$JPXcc;cVmxS)&M9bqdTjrR4UQ z4MKEPf^Kv`tKuVR7N))XSAtHKq z%Tod-bf5Z!DIJgDj=cOFhK@6z0w?sn>p|7H-~}O2F65G;eJWRO>;0*+`^(SK9#Ca= zYm9VH%O&6WOnYjYGy+JkRbp|qdb$_!z?{RKx8!>{W*G%ajPsn}9B6vB(rv{?wj1%WGUIyotu()HVSS2IiI- zH#dPNJme|ZbM~113|1Cb##au)um3NdV~nD73mKpLP`H|AZFUs z@)R`*pi1AXTUUw_CDVc^Ae;qawApDOBJ-D>(7Kt$DF-@*khHmi%tuv(1gwWR0)0vQ zNk*05>SzYyhyu|Qgg7vzb?(-U2pL8Y1+rG~I!xRgfasZMfAkovm{@T+QV-OSqZv$x zNt+z7hCVuhv=s-9R)*OI_~tp?z+LXL2FS9VHee%%R4K29T|k0ObOSF`^QBeKdE3~@ z9pFCunFKD8MsgJl)0csfo8fc{o38i%wY(M`i z-vRs5wlfaz{$6Qq>35*8zHq+yOMti{!N1@U-{XB{(~l*m005zVvjTB^`X*4p3hm$T z76IoWpzeVG#X$U0;Qm8E{>Og*>gV3~E_j|J47hT9*yDe(=YMz&J^cmfe_!(d9p#?? zp#s2Cz~2G)e%aNsGz5VC2w4B`-?M+25U`w<(=TND#WXG~r{%PqmeVgvai#`jb zmdZDHOaJbEePka8QsM@_8vp7y-u^z6?v!?wt^j|`|IA}xnji5a#KY4a1fAHcFvg42 zg8Dtd6i0QVdmA6PO^!W4H*x9_gU~}{!}|c}ppz>=JA9&_WYkz%34O09Z%Hz63Urw?n`x+skuchzYX|s5Q6E05CwD6jW@lSYI&! zD+Zzuqiev7n5{eprtCOV2%sazR0m%=I8;(9I2f1o09mgR@Ez*0Ev+;n2S+;|+$Rk3 zgz4fIaxfH`(3~>xp#;{20w@Q$Bo?To8UBv^&FDgbX(j z!0uAnbD|2EM9CYGE^p-tuwbun6UeKxpazme(Bqxg zbrk|Umw;#5zaDA%6PlBdlF%oG9@~fYvvMy>=OO40=m06RN-i z3wD$eFwK+#xtA0vROqiV!oR z&LhukL)w21Xi%Wo84mrxfC(p&e%XXbl>$sz86U5>&MXioty1kJE=vt*%w-`!Oxcs# z9?nl(`o#<=AmOQjvZNtIYPb(XNm~JiN+f|!LP=Rq%O#$wRlEXf*saE3DPOhDAL*bs zxLEKL>N%g)Iau;_V0b<#p^UErPpJj69Ay9j!qdQZX?c5J?zh|Y`vv{>g59salO=tg zBdkc;sP}DBz@cdRL;~DArwNGCw=xoa)@$@wCH32j4!TV2N11(eu%Pg`Vhyb5ZubyF{kElmLi14T0&Dix2-BPi>vKzj8dgq7fkxA-`>$-!{%-9mZ^!?yQ&@_{ ztG|FKkRZ(jkij<%KsR+}50Iiqfg}gWl@`6xQ=ak^xMgmcTfj~8(AmYVy#le+T;Ggl2zdHz2(QU2)3DX@&^@qlMXwrUk}J479|z$;Y_h$&IU$9GCVW&r7z1t4Y`6j+kyIwHajB_g=~ zT40_8kY=470;<@>17MCj3Or8gIxef}pw4*rgPAV`ket$m^Jpz6$o}d5NoIsJoy37^ z6`_~CnZ~74e*I~pHG6%tK%}M{i3~IzF#4PCk=|0;D0b(V{*{%A$ zoBDYs*ykh^{EL+BnM0CeljdJwh76Eow|xSn%n7a`gbk6-js)-GTEh_tv%sj`W!D1* zB{sE6J(#Wfta(Z*?OtQn0C8G%UnuV_bVkfAe5xU!S-JkPpvrIMM4f`xcOC(-J>V8E zDFGw4T|v4zN3}M4q}=8)BHca@BxoT9bSUN8C$Bx(3&Qufc=NK}$!zGG&Oq_OokL{* z3S)#IUV+;bfGk5gf5u$@QxEeJU0MUO&)FpFjlH2@VA5_XPf)dV5f z%uysn)P4-FeLseI@A2tUaPZlEVF=0PYT6PU-ItL>b6lR=_k9v^!c(>pnX_(Fz`dhWJ8L1~KfMCq`A@&|?eF{$ezN~3O+VQMD{e(EthfiZ+VuEC)rwnJO5Mt?OAV#&WcO{bmvrETsua5gHF%rNm=Q)p@Gvtix5dk}|`>iNx zs(>61?NuOWFYp;KPug^VIZDLl2pwKrc(|w%6P`29V=xcRW$z?Zo~hhc`3Y29_bz%5 zfy-Q_1?*niZ7%{hxlb?9Y_>72{pC9Fk`vSc*SSv}u%3Ig0ynt89I%Nqyg`(po+IPp zg!Z_{`kwv3MMlX1o2g|j@PZ?>0?k|{3)Jbn@I(njS5(PkfHtzgxQ0N3IvT;Wn_hba zh%q6`kG9T!8`#e2%$&3^PqQ*QSbl$zNh_CAbv3*|6u|_=;8k{#eopWU;MoHrT*Unz70M4 zKLq%PM1T&;|9=<}meX=t zPRr@fOZw18DP(ZUze-k`D&!!aMmEA8i#K%gJ=rM!j(V7u#A7t~D_>ms^6$XglW*_7 z-3lBtv-}O-?C+PrsNs$Gnxy~r?jEm+j zFm1=F26LTmTEMiJ1N{!3Z@B1QBK0oopJ zYRvUF+J6?CIUG3bq*V)=Pu{-ZF=8eYg#tM!HcGk8dTpmHIa+~~S*-?yrbQlZp+tGO z_n8BVc8oDX3C#^s4zok=DN?jTGUz0Yc#t_@)Cbc>=zAufEzPt5)m$;x0AB$o=c5w< zs-}q~5^_Ptsb}X9;z0!LNt^+@sQK2?3?y00e#BrpPhjw%+~DMD_PV@_eL@gJ(RARX z*M0TWOQ;ND+HBXBm@jKbm!}$f?OJTX7{;HfqRAU-5Mo#nc%$=~ zdzPn4Bn2ku0Y=zI4dU7515dS-k8yB*NrATpUI0nO!GJkd}PF1E8HB!%@QPj|{D!wR@hntr4|RwD!?AIxo` zH<)co2YQUe6p1}IKdZdxFLrfun<^~{2 zjp-$vFUHAJ0DFXS#xP72<9e(<{Yq>jpiJXq*(#gi0*4#{MMZ2R-WsB$P>NGfAO^t%wI9> zPieA1qgg`==r?Q3Q(%>uVH=o}?4uv(V~*{Jp?j8ajA?(h=QwN6L1Z{GRxt!~mw$Zt z$2Z~k|Jva14gS}VKbznG<)`4qZh=;i001BWNkl9%`sT08*JRd>4AcUP0!)&oze;{jS{S={yo83T6Xo(qKNNi3VU+=eLLw3~D({ z5~$?>8<5d2BsW=C*2(v2RgYBX;T*Tx%C17bJDCQ4h)z9jd5Pk`NcDis3Q9#Sue6WzjW!k zSWB%EfWjT0+o$yEXC*?ys{?_ZF#I}|z%H>_6_Y0IS@{y`n10#As(6 zNHBm%fXCD$SqKSR^m$E7N|(~vH>p8a+-^YomH9;b!zNva7f8_v)bd=Ff$AwB{`?-W z9tU6sLCcINP{hnJWd2;G<;nqRz2Eg|UwcRjk=k!I*NmtM8VC)4PX|AMgDgO6$=Csa>bNcs4pn9+s>969sF8kspb3=)0X&u+4K*1}6 zj2~%hQBax-P8Lonz%wrFgAg8N{b*Lt|N5XF!kMW~uT_ZhL!`AV)#Zy{^9H1UtoP-H*%#L>0hn*5{wr`=)tK2}rom0%oHU z0%bp3Uv_$t{X&na2NGtRhS!k(?sN+qaC1ed03hcqQFe%eNdPbO{(_FnDt2;MueAuV zQ}(a&{2@J;rKwlKXPt%&E8&A#rFAf-&v*O8JkPXDlca&1?lD_IA%pZpMRQ&eJ zSMcK8_jbK_2H(5;y?ft#0j9xJd$nMSCTD!GBX-1&z`HH)*1xNRs?jR`ll9O(-@dAS z4-{$(@j@ebZ@gFL8KTT3=b|mtyIYMIc@$CX3u`Z$~^(4J! zEi&Ki1W+QZ63xvf-Io_|#AgYCSW-Jd3<*&)j0-Iw$*qN+uB$iLVf(?m;fOYXp(*DyBnoP{%=4bR@hwp-w`{>Pk`_6FPTIXPX7w<4QkC_ zN0d(G4VMDi?w=6UR;c|mPLf|m)`>6mdp_kvfDm9W0=^9a`NhEh$EEl`=Ao~j+Yf!O zoOtk+zRl9-yE-wPRnUI{lAr5tgLVFE&g-ho79`%Ec@Ms2uSfwRuM{M{SW+)_C7GiA8-rDLY5KveGjGf*Sdm<@Cb|JC*H*5oTm@#>yfANo zQN|fX3^oFEJ+e;365zT3koKPQM+uJCVwRe>XBC7OL&|~}NbFnyphS&;c~z_hB1B9t zkk^B#0%m~`H1x=BP!9+JmS*I+cAuEJ>~LV{b*phkLm4Cjz$pUk4GfVA@M^^RI1%cA zQ87^13u<6Y>%p%CMm(bmYG5sCt;o}MYrau6fM@Ls?I9745=v03A0#`8c{fOE5bk@*K^>;*mnra55`YUzdG;Rqm$ z4S!+G*3zQSogpf&kZ{B_s)2B|#?77AkrD~O8L1B;Mw}-}9EqVF)ACL0eTR{8kph|p zAT~$!{TsAAc?1A;F+#_+gib;N&(98$m)>h{4TQU?t8P1Yid- z@8=1|x4EEC7|U=gzmwME#*8VxK?;7Ezet%l8vSvuGEmlGYv@%8>RF@&71BLDA+EqqJf*y)My}8Fx zz$b4GYDTnJm&{R92W%#3P5?*nGIe%ZHP{P4lvN6%YXS z<}%GRgE>V#^@NHP4p5B-p01dkNdGws#7sRk+FsJ1U99j>(WdM<_(E7ANf!-3f)4Sa zHWBqQk0|j^o|cq-lfB54DloZyhY-K2*ltCss(~&bYX|8@Ja)^qt~M#Xsw$utN&Zn9 zl;E1u_0+*kKi>uv?t`R$TxfxEaLWB$r`NRBOBTq;d}>b9tm}h&x|=^jWi!S0=z|3bwYq2cmHb~(a%?6#f%jqM}!B+EG6Tpr2A8uFkpQTl1br&;X4`_aw zU_Tkopy(_Fvj`y}s~)If@&i?edBS-r$s{G9$&LjS(YW64!W~TLQv{$7CDp?*Cuud( zpE{BKS{^xXd4!(G3H%^0r=;T%?wj8bo?_g{kn!yy%3MWSfM?WEBs|YV35hKGv<o8XrEY=XzPEU43M9B`*LDygC z`kP%Vq4=P9sdxv>ar3En4%x4ZVoRT{SM?g(zG$;xos|DGoRWiYYLNY!%#ogTP7~5E zJgqOOk7^DwjjW5cNdI@^%Ln%BsLbJl(iOE|MRq%N^1^a|HTEO$Y ziHa1g{6{PQ*~&kHiUW~&#c?o0=7{dU&QS+ur#a0IFh}@=&w(60v;qrUW*cyitxN-N zc*A{QklpMB8kl4Z7@(d9Kr=^~07khW3Ri5V4#+XZMxYg$m-G0v0sA?RsOS{}k9Se5 zd%`r3q|_>7&vC}T_`N{6yezQqF7R8a$^Uw+qD`T=}-vhXLxM?ivK;@7}F zwST}nz@vgnL;*nT2oegHa)7^FLH6Gk zs9y&5m(z0kk0SlqHYv+#IW4E1?#&8Ed%2K!T+vws!X&L%Db zLmZ+A%yU;gL|e!Mv)pDkB8j~T@u(C}S&4)m<1%M})nqsg++!odKvJc#``F7iV1@_m z0-D*&ec%EUB!NxLQUtE5S??rCE&xM(#yHT$8SVg09Oe`-YId5lU_UjVsx)eb5|}A^ z%oK2gVG6nFEXfN%~DSh;So8C;)|h zq#O|-Wp;24NVD2L2VSwD21hS2WCA2uXW~GWIYFlv#xMArhc3rKauY2=JR$;4`8=V=-#A9AcK~4-D=E?IfOL zd1?s_2WoV%(>O!F0E0PhYdqSV#u!eL2J^WBJ)wt(lW29Zd}Vyy(f7Qm9*Q+|kOk&A z$5Eifh-m_5)ez+f5H7ZMwb`YfzXL|R$8!2U5xp*M&xjgqJ(b#Y!jx)cG979N%-b3D zOq$caQ=>k=MfKQlfQ01GXCx-9Gn6_hScup+KvDZmy^gpMj*tYNF;7;@xgP1)b)a#T zA*F_zqPDw-13Y~`10cpc5Mf*mVuJuUA>mN+JdA=Xe@|$AGzLA+K_Kl?ezO{pQZ4{P z8Y*L6J(Qx_{yrj0>;NNY3hY6E`n6g=IYJ3m0ldZ3_{8id0rr^sJUI`_2&m!4g)k^8 zAYZLBR+E-H1a1^q3_Rr=FztX92o*=1QpPsDFIxtrNO*vG1q7r&v}g~i#u>m1>M_{B zG|*%&+Dkx0C90>@pgS5EMg?$Cq5yotoTBS@`Nfc%(BojRgR2xNRHIpR#54h1ax>^U6GCR`^w)WE+Px2ih8 zG^GI27!!y9(LgT0GR`5SZ5Omw#84X}3g!e2)B*MC`JdAMR&s<4lOY4-c%?w%oC3Mh z&dut%y_pOdFrDfFoziykiD+nxn0n4H(1A#=$3g$<=nWweAfY2>M%S-81%`_{k3@;H z05)zH>>;SQ<{huN1~XTF{Q5`N;Lbm|^X-57n^3y;_G0NKn7w9?*@Z}+I|<_tCr4Py zs{y;66qqY?vKm;$b-KY^rk0IhR+%H_Goal(p$TZBm3E+o25Nw61!`oDlziPfU()^{ z^O&QEID(fW?zwu5>N;OkLQX=*XFW|oJMAREJkomZ=QTZG?r_3f1#^UR<{p^O=u+u* z*FqmAMCkfrFLIGfP|;S=UeN$wbbitN#RmAj|MTA8zyIIC&rW}_K6?hdDX-*>f$g-L z>^g+Vx(~pXGCEHBM&pujlWkoi+X4CsDB<_#qjn4>yA+CK2HFC6F{d0kl!J zUtv_&AE&Gm0!$O+fC8gBZ+zTS_(N&6w%>5@q%bK#PeajoTp-*Brl`|(qeu6#ZpRr? z72R6UN*H6@t!WO(pAXv6t!obhC5!_|`=<$%g97>ZJva~DDh1B!ji|>IIIlU@Xl)b- z!DhFf`79`)ebopdww3ir>}c^E1rO|9tw|S?JVJ^YV8Nba2#}ctUdn2259|9B33n)N zzvvMXRNdThRj&?2cjtg=cI!M}%?adu5e2hH@7tv7cuxC$j4CCydAvf_ktk3n&o|dW zJ?LGEEV+hBL0PR$Nju0sDxUOkQ?R-H%S8h zrk^Mh@p2YCRPRW1TnPfK^BPl@mfzwHAi;a|a;D0-*dHyAisE5T_+1 zk?W_902d)cH4vpGAo4Cgse~n$aW`kS0VSpwC~Jq1P=L;(F|!%SbC3PNyebW>)mpx- z`G>@dC>Ic-PLz;L`B1M;Wyi<2BU-vKLM5*eEk_kj@lQr#6$h9B5=x|X`>HVXz=u;w z=fQT?n?~S?Ij;MEH$S@BK~Ag%Uf=_>^w9|9>~m8M)RNMA_DwlZp64YUi2cXy2g_?; z=4SjJyW8)9%Av~U=xZ3g_k+(z_rlh*U28Mx`>}C=;%nUi;JRZZqA=a=7cuWUdfdy{T1r%A$ULeOh4k7ljb3h9VEeW zzMLrh=2vOpOMb=#@Vnf#PY4~A8nxKIE98NS6|2fjwi{ACt{D!IW4E<^zWLSXTJmT-3AaGAwV{AD~Re* zPBzNr_W@K8VI}a^e#HV1Cutgh-{u;_`u)EEx!1Y>=F0*UZ@#@&`XR8FP3!^+e8DXo zxB`zk&K!`XpPRre8REbhx|sq7na0I0p9Nm3!6Bj>*;eKl1Zo+g2N+UdwT{bbD4Qk; z)Ul5TKrQ#V56p0p7T^>YxC1=o5nF((Ofd}9@rsK;n#+siHJuIhd>F zQ?nbq=iUo51r9HFPi!$eZ_$I{ zDq>2En57wjoJ!vd^sz|+pgjuN7bqI>pjgW=P{noxZMA0FXFuapAg_k*Htov2YUs|BRRdDH0xQn9tK4i6 z8h6L>Spa*2B(uOQRi+Mz1XKyMHYI61S$jzV)SMbtqr~Y2Vk$M=EI_*1riQgS=9mYn z%?|p31U;q;k@(C3xAcIY#Yy0gFa=B@u`zw}wp3RBP@+9=i$Id?Y(hMAolo<$=2s4^ z#FS`L%XO9blNhh-6LP-s)QEKT&Jh{XmAfXl7 z)PUI-jf}0p!W?O8bU0ssU_KgKd%clD^=nC%FLTwKU;@=`)`x z!J=L3DMt<9;TiEN^3|Zankbm zm=c%{wvh#%64zL}C3@uj%vL0pJ-`u#GCC1McCn1I@j%~qP_I!fl@IjmwMR|ASr_ z|COip%57$c-tRmJOIo`ra~vm$DS(80?~UHSPitX8$4`VRa){w711ylF8q5JD{5;e0 zO%Ve709Aah((h|%AtWq0k8_v8P#_|upJ0oIU`VS0Hw*#5qVJ31OVN(&dQ()RvBX{; zlXlXu0Og?yLfPw4t*c(G*CL{XVZ#odVOAO3j@sP6*l(4djBuSu+c;J~^ z0*V?TH$oLtK#H}d4_V!Ho>I?W=|`(bk^*y+7FvPr8bTl+)Nfpk<C|4g%ZFS+f`Dp_wY6#|)4Ks!hKT1WcO(FtwuiVOFyMM8)Hj0t?I{ zp?!ofFii&Wh)x4FrpN37bKYDq&%sK` z61&%2v3JNe@GrNGi9pVr&f6XAu7g13E ze#|K)+{T0XT0Fc{Y@-HfGB1N2+RyV;4QEFH%sIM{nBDo{8@~RV(0iKo)BOlxG6ke~ zLk@V%Ip%>WUH>9w)KfPugm5BhSg$Yj8V{hfj1rj#%m7f}8PAY)X`Vnq$Mlq~C$dj% zqY+4RlxYMox{jO|;#wZS+|}CI7_9b5-G`lI3lKNm?mVFDV+6o->-^~?^#v4!v^k?8 zUuqP9EC86TT0R#Nz$2+r**%C?Y$70r02k11+dSx1z%Fs z_HSSo$T4iTBK>GB0=Vaa)%dD3! zE7%u|DUm5=+Vp#}Pjre@61w1;xk?I%X-EK{2xADrVG3x{^WhZpN*D>1mbBfC5K<&$ z%YwGxH6D`(9pyqe?bdqi0HREi2YZYo6o5g6E~91C!Aa!2lm&9s5CMD7h_c3*Qpug7 zP#B^@2yb(oG!g>gi3ZJzs3M5l)ky60IGv^o$go=h^;tUyrcc+eR$ZrZ6o?@NluHO9 zp)8b!smB4eo~n6e^}H~_Q!QbZ@Z1#A9NfH;MF;>h!93-IoksQ}6L?D4&e>Byntgl% z_^dH?V74fs%MmeCx{Ipf6wiT4yH~>lB$a3p5{89XkT$y!B9F{70+7~gzsuk}(tSNg zPH9MitcDJddaBm@;$`m!;rv>Z{i)f`W;%h>L4d6HldLNuVIOAzA4r;BI|+>H2_uhZ zrQRin7|r$+&|n_OIZylR8r7b0=bAJT(**CX`X~Gs5TA_C#Gk`=zV`Tc2Y(x;-u&^K zsWepdR}55a1ZGXjRKZt+U(J722fuv(muG)@FLbTx+Vj_Tz?a+e(R?#_cquO<{mKe? zB*Q(xr)YBu)H}jW9&sdS1QKQq#{i##o!9z`Ami1Y4~oDTyG<96XGDoSaa#mjXvK2@ zv9I3LBB99A+9O^fgeeKNRnk!a$`yu+Wa=3C0c%N5X z^^SoVHV^p(%zd-RwANE)>i_^C07*naQ~^88s2K%XO~RZ8ZgHO>;4b}oexGI^P@sbZ zu)q=412eql4G?F98$bhNOaZOh|JpdrMWC7M+yh{i4M3bZjsY9F%X8of?dqtoCJ0?L zgv<+aCh4OEp})y_HBS;KFvB?5zheKk{o7!RHfyu+_EGU4zWp|Q^-sV0*TsJTd_|ra z;3?nZ$Ak_|;5_<0DiA>bFX^Y{KzBs#pes$1zeG6@A9}VsVB7uvZppPAXfIa;_z*Df z2fr`%%zq!qFIO6PAK(w4`!Pbm&-3&zf1jlQfBEO{d-i`!;{W5G|9s&0f19*S5Liyj z>CbgqCIBp_<+PlZ)4zK%Y5;Ns0NMB%{oHLVQ|6oeX9&>$HNuUhlgLW&OQuzGEQ^(8 ze~YWU0)EJ-y$V13pT78Z;kV)Kzj)hR0@%kMa}apLFzRrhqFn z(gKWA;3@Ec+sp#jNUNmkEDwPd?i27SphL-q?#cNkutO zm+ZV6D4g`GW7JD>aGnEP^7c8;fEAmH^C{dc@120QPe=5a)3cd>#{8&Yg(iB8LE5fF06$ zh~i?AM{%(%SCy5kJUN4N2B=m^!di0ng}!&3a!GYbyR?kzxlAcAuoW2s3cR7*qrn;I zJ=Ip2v8O2j3#xqK>#={emOrlJEbXNs7b3wDS;pvbss4@w)fCwbyJ4o0X4<~XT<>7;$GZ!VraPO?|V$Gl4V!ik^- zGJ2nDyF4(B3(X*&In^2jqf}GcX|sUaTcxg8;Iy0jj|z&A(+*rFbf zS^S{=Hz9AJz-L-7O+4SiGsb$X37nu0@R+=HtpBEb2_SG3MWOVr2zpRGKjgh1R9q+R8Vn-?~FM~ z6{2KQh0Omx0%XcN$o=(NF9ofa0#9hvdW#YQ?2Z88<_lkemy|ikY9ON`qj~0-2HF)$ z>Rj?(E~d2uGN4?Z8ZxTja@(|#0DB$>D2)d`Omg*u@zO>J!Z~G`#=tYMR#%LrKG5$c zH$VG8&OTv15TnUl($CX`2Ks1l4dFXq>n#Fg%z&K&Vle}70EKnt2o2hv zdw>$NMid{S!JJ*bUQMWU^h3?ptuI*xF4JZM1)$0trxol2YRSXf{l!hiPWUJP*)j1 zW~;dhY~{E)2yCQ>c3`U=W)j%WJgb2Pn%D`<(8($wX4bF)IAso)Gr&o+!(0J&nNQ6{ zFrTxJb3i`{<`7Tv9l$i=%e;Zl$N{Ta#a8W2z0c42SeOkl)nS9Fu3IY)& z=rk=r9Y?7K;-*d4A(_zjbB<6`i;OR-hs8gIzxlzww}20J z4?QFiVvIA0C*|${oL;@89!fxhjJAXLocoft9U4(l3 z1jv}v97L4As*zAoMFk4QYghIO9!VpFu%}$qR#}B8)5yFc?K_JD*xg%9Xni^lZb$Es z)D+CS=zY$kxfB4Ou3bTtzkJZSAXMs#(WUcX4^#S_aL0jl_ZM{?ic@DAfm-&P^9TT2 zPNa20{Z-OG$nsLpH_@P9OYV-IDesgG_IXjQ@0K7>*H7GYd_s@xyynxXJ+OsXaKF3e z^?!M1Q8dbFXrp-@7ZLm*{F76Es0JcB|8KHSwO^IW);@reS&smNJ-|FymKMo98EIb3U&r4 z*->T)2?BGA?vbBd{a0z*mcUNxJ@Yu?h0HK%22?>Qt^^ku_qBSz7qoli|6%X_W24T~ zJipiTbx~AT*VNS3cxpUekI(D#`n*2N>+?B;I9}p&EX&I|gb;#QLI^E3 zVq2Y7hjcm!waA3yI;fZ7*cKrz#37brIWJ*Yhh-U-bvTdXAzs$!^;sTwt*55Cx+uQi z{P8@W@3#ze-|S{Cx?KE`x(io*e|&!bc;4^l{fH7SQfxqHxfIBty{p;sQ3>->;Er7n zVP6YvBWvy2B90*Jn@6)=>p;(EL?Ky}thAlGK%-pXDUh*X1sz5#DcX3=Fu+Y9A$^RY z$~pieMj`X#<`Fm$kNtf?GMljqc@_ z(0yN?47%@q3c*v`_qfnBE)-3UeWH@?d3%aJ&4syh%0C6>gE^ors0}jU?e`9N2Vgog zJv|LPIR1bK2jKbp&)<3e0eGjqx4kP+>8oTayCKt_*_vsAU-{$qzuW$Gs7cn;*9-th zITGvz*~W;R0HDlfl%Smg+N~aA)_+PoRR@9KJ+7e&Q%N*bgU(|v-@5+A$yw;RxT);< zrUpeyH_%6pO~5fz{JFtVwgJbu##LaP z2|Kr6r59M_9$8?4CuYN2;uP?J9CJXCT3UcS`{@C8P@x&PYcs+aN-WQiv!3wS2oTBO z5O9xiJ_4F}%I83d7+(W_(a-yN_KT?{lAS`1-=9PkRS15G-SXM@PZ1T z1FKlgH-N8^r31B&#(`BN_y(|=H>d;NAjMxJ0_MdWqh1C6{Z|M8?)S=Fb%hHz-2wuKs1@K=>N?RDFpbu;0pk|?ze->OhNEx!9U|4 zz)weiy7!Aegy(h7cUAr~kX>?ut-xn2u?~Pd8&Rh16JVZhZdK*0Y(S=hHfjjT*e^GM zW0Y6`9y3NQaG#wt1C0j2EYZR^uz^m-fjeyF0&tTI=TPIyLkPB8480PMNdmKU@F}p! z8rp$`MJpYVbFvW_r;`)FReXkk?Oc{Cz;1acJHV@W`{h%Jf3T`))d+a^y(tf1g84uV zDo%QD-s)D@I4Al3ftqE5Tke1!jGO08ze#nb%)>~D0-HmFM&=iR4eX&>dK5dLNB`EOP{R_}xCB&~2<`)Oq{MmP`$X~3D@1^lGPqS5@~OTz zxQ)hW%up*?U?KRJ^FWD5!9$epkpkImhK59#mxR?vOK4En_i7B?FhVXa)?O`70gr4b zPg=dJa7Mb6mQQM_LxIzjw4w&Ka@BqA-yJx^X!HyRqMb*9C7;L>qYDT0YE<^5I4SXF zGsG*=VIJpE?-T{K-J2EI0Y<9aU{RSvMw0e&WN((@NJVl^ghDZPh zd509xV4iIyGf;SVv=A92ht$(h*7AWpw-kDWbyz*`0n%tFfO=*OXj-(~#=<^S?SZCd z9)d9*n8C@#1ov#djaxlvD1Nn7=ttCL+E1?o9up2X^bG+{H_w2j9E1@b^j z-r^+Sk&s5fiOtSinH|9*X{%5%xM6_RLz52fU=nCo&og<)^5W{x5va;$$S-i+=3#}~ zUF=q80Cnp@2*As6dVwSZ)*qbW0syiHrx@a(A~nFKWE*`tqdtt&`&> zaouIgL5n1TUJW54JE~%UJMhQVY!0Z9mqS3DItz8+6m+8Z`+#{+yV&Q%Z5{B4(+Z@d zhXPQ~eruzgt$kVxiwg8flL4|$Nx%VE&RASxf{iE0Vn0a3#FmMfiMPNT@N2Y{VyvGJ$|_kP}^2<)}>uSt~=D1=HCKP%Ni zQ!~vpfn1R*avdHVdC>8PCt#xZ!;T+*3^jc_hWn-Eu!?8vh)0rEbR9fw&ut-^4-+^-j_!j_(@HbYV#*&19sx$ofta+|bIn7U zZp%jz*i4QbaK=KgG#CLOP84cK*WIMeGhNniRS_VLQvlI?wb@P~W%Ga|LU=aLYUQw; zK-cv~D|t0(G3u9&AlYC^TZdm2FLHRZn3VB83tbUA~Q6 z70%_gL_|=RqauzFp@fPuk1Sl!k|>b4WB`AK63Aw|Z!&y_Z}p%djWTk?Vy&++!lKg# zdzq@DJtfBnB!OBvLO)Qna+zeh?6RvH!v0jTyBCe$UyGr0ts$!8NPF2`h*8xpzqe_rs7+5fE69o(DCARoe1# z+SZBt6o4{m3l~(e{irH^?O>QVNFQZWeDVS%h7!2(}uB{}=O-fAJTKIr#x%ipBz0OHb1BcW1-?6meN+qkVT8{9`&qr$(Q8UJ-qUR00Z<8Mm+j+Sisl8UbT?|`hzVQ! zU-r4z{cM&k+yS74tw4kAJBD$}1{EU`Pw|0pW zdbkIl*p4|0=~pjV2yQXMIM5^=v_W}Cxud)Ve(&%6-ml;O@1c0ExT|;(WKg=K5xCA7 zj#%5Lps~O4{qL-Sx)a|X|MpRM{;)jy`~gTt3eteiYdX*Ae0wdVwU$G|obJ<_Wjngw z6pSz*1NuWkraRFTf@yS|p46fT1ypIz1J;E#-YB}h)&?h0<(LzIPl|e=8!xC3I%b4@ zZi#8upvoNyh;6FbUb78Wb;kFu8Uh*cc1j8)OOBnu4D-?n@;*CcC$L@mC;^>(#HYX@ zb>x9AM%W6JxyLkck|OT`o$L?y->Q`7`qx_WKn7LXTH*{oaGnOP0ZZJa1sG<5R$z`= z3jv@GI0YWEADHJo+n<$90qZ`~rUyRRl;;4RE{OT*GRV5D-J{qGePiRal;a zm+pTV$bK1!U+#JD#@eg*zYNg7pc-I*{d3_}1%j_40=x|92Ve5{mr44+`hD;v-!H$X z`kSu?^#AJ004r%Ft)zb=(h31!C9R~Dw32?_$!&BU12)bZW^i)Az9t9!JEd5?NB|%6JHZc7iNsm>X;1N4`M2Tu*Pai**a_6@!6Nu5_&E3om@!ZI0u4-|o=ep! zZ-&cHnB*aFnmiAIXWZv0@V3RQ-fxET0qV#Bb9NwZ;v!AJ1b3(f4l>CTV3;Hgz*@#= z1o?oAOaXBo(FhFF${wJdo7@2&QeXqfX*TjU@RaN91P16fDg1Tv2>^ra2YFDlwdN?q zKaTH?FM>DcZIwBo)ne^B$z$IXniTO_H24Z%gbqCT&fK?gr zCGHvE8Vha!J!%M(Z8$k;-T~dK56oHJt!QQ0Lsj=7MSN99sxxIKGxX# z*V;jR&g!`wTrtDm6b=BcPR`(-v;%+23{~@_0v|#@2S?O!z4R{5!^0U$UHv;r?`c_! z!rWz`!wmiH=FyQffAJJ+)$@fV^Y(QF4QE&>QUvnBb@T3+rXR?g$Himo0cA5;7J^GG zp)n_&vBf6>6zf9+yz=Y|TxCkX37!y<8j4mkC3|j>>lTA=-kzo9d5DuFjNat{y?9lB za3LCcLSVp2llO50NZ1H)#wZ6qHrr=~$VlakATOKHsH(Rm^7tSfCg|y&0XT_raYO=@ z{&WDngJQkV!27OVAIt&Q8KnZjVU^Y=ffoX@_w2s+(RRxLWm#*WdUN=EH$n>bd>vOx zaL91PfWK%ybamDE~~@1 z#(ob*DS!#dYPn+J71eNz!4pzvM`rL+G4XTPt|SX-l+47^B8xbTJ%>(qDc^eA#N<6Lf4N@RLZ*ytWytJ`Gjq@?lxP$ zEQaI8wR<(t>dK$7tLkh;a%NTU6@Y7ba^u=5tK_-D6Clli5&m>Ewdt%N`;8)1XX`;3 zKP0g10g`kCI)~4j=UU17i2|rSCat}hoGHU3jF95MqB)bW-_2pvGka}SySTDADfZ*4 z2tb#4Qq~%P?;D}5VzrfJz}AV2a=@Oaz@t9bJjLa0nrH?&Lo2PoHj|K#h4mP>dYNYq zxFU!TpY`Vt=g-0Sf9LLh`u#tJ%C*YP=eL1chRLFSSC5yK;4hz?XS0@TktHBYk|NN} zFdndvG;=@~hdB(?a+xbYgIuBmS=zwWd_k zPCdE{QP3`CrTXen6ECL;o-hG2EweHMOQS!z_LB+t{a^b1=fD3Sz>B_0Ph}18DK|qy z_z>EzPWh!8By-S<5e{iF(d}H=9~|*6M-oWVCOww#S|DNj+%kFfl(y$(?fzy1>I?Q9 zM~ZR;y(F!qfi}*w4amx{&Cg|1+RI5Iy zeNOQ~_qSR-Ex$^AOLH1!B|&chFD(r%CQ=&6hwpWLN_TQTMcxP7lSJ|3+rsM|AQ`vy zBq3YS`DK_05OhH2MAfsA>|2L(piYip?sI-pYeG2+&q&nN<$Q1Sn5vdKL07pzTVM#}Tq zWS?oE$JT|U>^EXVQC!b!Lie%i)!slEq|?f&eJdg^fLp)RL%-8PChRfV!4gSPP}rAa zxV;#rRt8J#u#wwg#IH(78qE`hI(lN~t#iR8BdotXz8ry}OaVx-o_&Bv+V?twJ9in}HG!J97Tef}cFoQrw_Oce8M~V=f zw(D=(^^wk`(TNL?N8?oHop1AS=7V zaZtUULD>i_^}#3TKK&w4q99qIIV3Q<=hs_kxklba_h%ZiL2Grp0pv;BAC;J-2`C3Q z>4%^$NYetbd~7E60G{-Y-}yf_!5?jXaN*$%kak%kKCqT<>cGF{-}i6Bx3|Q))`m zA?oOowE0EnsmC}aJVyXa8-b!l&Y?ulw^8ELEO42!#DNFaZfRn)01J#6NqLD1)at6=yzY1Wl2Iyb+ zzG`AY_2;YiEw`V%{CAZ9<@t`@^KyDw;(x_+e?A5__&&%%IV$ggHH@h-V;YF0_#Au^fhHAEK%#{*5VQPyAQ?iBvEb9tpkmV0w3sKsh=D_%Nqtv? zi24RK;G`HuJ#?L*R)Sgx*7ez9P<} zXTk0*$`PPKOuA5SH8qH7s-RM>85yP>sN-G6ffS1*hz#px140wx4B>56-mf8$F6%;0Vz`~UzT07*naR0Z>>S`LgjKp=){fn2t{(xuFhH6OOYWiR4hnZew9$5 z@0ktf*(NGLtz4uVNOM$jsG)xeB~ZnHr*>a41kM`C069*x51rTBwVfyf8!SIVmWPt9 z5I(ca0x34y-0XZ5wf8xt0Y~(5gomZzTsY5Xfh5B=->M@W#gt^XOLOr)%ya>R&(IBD2= z1D+PG9Ayd=OrkyumEF$|RqnzcTp7DKmV$-KLTRA_UW;@|3WCEN3XWQByO#W`p28hK zrSpt$^Slp?0hvv8i00kJXKtUdJ_Uo~is3x_ zS1E%5-N6MeaS5bfI;0Jr9{bVIkIum3o`;c+A88o^?pU`#jRVdfret) zh!gQvsbM8-G#Z50ZvB0bta;44`o;41)RcSlO$k~op0rb<(RsGt)`Plm9J*drwEg5> zGN`2TBsxzypUc;^nfuPob3Pl$0KOa}XLq?hYm)3Z&-O_%lVbLX zb{Y=sD-r>y3i=|O!guJ*SE6WyjWxkTE5|Jqm{($(uGfxm)g8V^=jjyvs3-HH?VlWg zuJcg8-RDB2Ic0@;4qE?@ak(nrckJJ8Uhl?vrp{YApV@nyB8i4B*<;t|a7qs@=#3vd zB=Yd}Y@V49_uZP@XW7QNM?4ILp+KOv$$(uKdAJvYSu2Msr74istn-8n;Rqbjp2$7n z<@R#x))V_RV>$DH23>#1gb=AOj!?P-B_8--fh3@lFI7&2)ft=>M zq<|UOh!USGHV!=_hUP7%_Ik=7?d&20^iXg8tHbt3MLBQfa&=h*IlyClV9yU z!$G_SvOt`*lp$DI>}BnP#9!!^T4&lI}PsRZ-Z-X8%zelQ6} zzKYH&O1=Z1vgm$$ngR42y@ZC2i=&|mVnpZI=&Td1NBXu4MyPX?(`a_KmKEJsrsP8) zMuxq>5`HiTvW2*X2y#kQN>I$mMm|9IO=>65_nJ~*xNp!Mq7rN7^zA_zILJ9J!iyGv z;6)RB?`s!+`Fnp0zL@#qT=@iWPA+i=UR?J-d~qEzqhCLrnSh3dhRqG_P!p@6rUJnL z@3S9d1N+$pq%?$t9JKazvrG&nd?aKoO4!yAG*_$^uG+kwVabSP2N_5A{o8;FCCLEe zI0YQ147eC9p+xXcfh?Pt0OrV>@{W$TRMk4HXTcucLkZM*h(ChprK z{a$DFzpARoi~a3FrA8y+XHQ=Zkbl{AuX?<{4EVq9_n##??3zVUiR$&mp}LQ zf3KvKw31fRSEdyLz)D(4D`_SDywVFa2B?$5dXum7%TzO70|JmFX3-E9FH~h!IMm7fj9t7P%Huz-- z_6A#mQ@}Nnp%3l|D$&;m?BY26z$TMEzDkO1z&*Az4$QNcJ-{{6JO&2&m@EpAH3B1y zQwyvo!4059H`D0BWB}O7UP{0{jGl$ zWWeiWP*ULKYA$;NkX-jBZ&qMc)2feF4Fc^v;t7!_Nrnw(_;P@(Gnc#MjvX4ac|JIV zN*}7nLq-i`a@hHqgdPQX1JHgAp7ym_!3FlY7FvSYzFGhN1)LRdQ)K1|8dzyCmtfiT5W_&sx1MVE~L?H)pk$q%J5~eomo= znI%-_I|lN$J*{Y_yBO-h6*H6njP(=s@_}CK3wg@)01a}AyOx_0a7_(A!I<@@gc-XWjsk7~cgdRHO-5 zLqCArk&mcFJw2S~mWERB*$Na%Fc0+blo-%#ruedXLU=^-?ds8~<;wKbW~ABoFu9mj^e=tFdxj}0XI$5a><_W**pnOmbk2dqYRJ&#tmq$ z_OP2LGPcjzh~BFPWVvmgXSI~VPyvUmyo**ISN}00p;q-?Rz-;t1Se4gR~-ooz*KP5 z`g+y~LM|OM^f)V5P5Jq!)MG4_jeexCpZHgM26*O226O& z7^vJ!9gt=pI|0noFQ?^@yH@tTkm&Wy0NVErxG5PRt!gUA?L8mcdy_a~LIZU`R*o3} zo-_lq)}PHwa?Iw{dFIKZgsl;vQO0Dm_q1q4GEyWjSl#CpU$xCd>_-&Lp`v>ZJYv#0|y{l*BlV)lmwgvu!obg_2~f? zxj`FHp_B5t z>$>CK`13i9zr4?JF@9ah4?k2iiCKF`Gy?M;4)+jC;WJ+MhW}@|O)D@T6oVOm8dhzM z7vqaC`h(HGKPvFq;mB;Q04PVh332Q0FcE>n zJ>8MpVz{X0DI<8^k{+NOJhre{3fwqCmzzu5!ujMGd7!`*(S34~Ep|;can~u)Xw z6o^Zkdg3ZUL58fI9l^luX4|=-9_Z3<>y7q%x7X+kVZFSS>n&4M*-r|HQzBz+S3tc) zs|h`?ORjC)&bHp_K#2Lcfqr2S${vNS6^FBkIN-be>TnwD#9$QfFkC zxLxJu;i9QxXz+&9sYWbIrv6pUFL zpG1MrT99V6f3)G00H%yw-arew|BF>ARZLnxcf?Ge87=?>OM%)6Vx)mS+kZ7#SyzSkZhwFy#wMzM z)g7$v+nNE7Msg?tUB_%uk|?gKdvu?wh^gGMY@ z%Si{1gNNX4_gZUOV5)WM;?yF1fBXM-{_Y^Gda`PM)grt&P}%z8AS6F|^HlOYG=9Hv z)p!0USlzjLWOWPpJ$}OP0S>U8y%5~C65bA173a7yZuQk;bF=P7obAe;6FjrCBxni7 z(RKSNVZRRCDbKU|t*{`v-riyd5T`&B8os0qrvHJ_m#P&xQo#+7+ceMvt2ZaQR(Hai zd*0mr#trcHdquAn*dfRRkn3`U83-;jYG<;`JODPcnIf>0gX{)I$a5ChWcfTs7wge= zYcp`ml;e_|VGYp09D~3;df0;!dXm69OfV13vKIB^-)a=1EGZ*pAzAuwej02~1A z6ipq_A9=*UVfG1i-%@>Gc5qSAp$cMmTu=bANW=eg)uPNh@h3{T$N@ z0bnJqq?NRieqPA|`Ee3_!@l!?EOq=E8VVps1oS(FfN#?xzd;l`%Ml4&%JUa|4hRW; z71+*i$vXJS-~P!T7RRBov9hr;0zoo382l-)i?8!B(9QtYK;9t{T(W0nfI22kitHKB zfNADv29~(bAaIpEWPxcm@)qFJO&+*GH|K!|+~z2-z%UO`V~_%ow^##Q=MqU^fjMpi zDLR+~nrJtIz+F!GfM8Z7<+!E5gN(|UoCRWBU@Le9@BNx}@Wxo;QsM~2 zPOh3>^$4UxJ|IuT?2k*20pxmsyl=-0XIONeK1G~#>X_Ac$qcf(Ha-oHC!qmZGH9$n zH3F(3Cy!4W0vFTJ0n9PdGyo}jIe;1vsyzu@OuMul+~d+_hRL{jZWcpBwhvMp8sN)D zL>P01J6UIaO@YTqTF(bc!4v=mi-8_D6V-=SKTc{dPS)PHg{MG~Ma~0F#6@HGsX=Gb zd1wc>0zJ4tel4&RMIF}|;ql-uyMP2K*$O}`G~~T*H*y=_yxd)lsps?ppYjX^Fk?U` zPFcY{MS<(IMFEV5{#fdnwhiY2t_Jb>;4E2Sft&OLO`$Ym1t1tFCTci+7L1~RzKNGg zx+?dPA=^Apr3oKMvd;3S2He`vkff|YNpHyZo0BqxEpbTA7{8WfTU2{>?5 zKZ7|UiRDc+5(Dau_))wC|MYu+{*X#t@ozG3B*=%LaC z3LvDxSUY!Fxmzq>W%Ce9(Pl)YxJg86Pjw_g(v84>F!jz9gqeI=@g`;LAquLDS?r0ke2R_ zA(ZZJq@^3_!}pzY{_X49zu#*=?^^4*7af0UV*u|UCkEpybcz0Vc>AdoPIC5xu1HM# zSjs$~t+;|O7d0~@`@72ei+xa85_N0+Hvp5%BNtZ zfY~Sv(TMkWcgtqERIL5%%ljSAt^dAKpmTuiLLs98PE?_jA@#}>Q#2p}u2JnX4Cpr- z3Y3VlLU^=L^RP5_{89kvFTCd&XKb_uk_*RvRa3VO&>V+n%4Lf```?+ z!p)29QA^(G3I}(pF_s_a&khNHlFQ(x?GsGX0BKNX&JiQd9H@+*C{gDNvGpRB?my+f zPzlL$kdZ^~HQ4@{lp@c)@~3CJ)j`fp;mv87Se>#1tO>_@AqgzC9j%i5+lc33f6?r@ zo@Y1Ld}+>U0z9s2N7k?A+D^7y$^JcUtyG`zzyigawoZ_b6{U^=3bl&S2Y0h((C2)7NlK|r z!OSl}>>b+^X}cz3QN?t7FmIW;#5ijor(nG_CVHOqXevRk;j||17dT@m`&;4MJPIBz zhy-drvdt!Fs(3>dEIO8$w}|zdO&zIFtEQu*-FOeg^r6raE&(xE6aftzuzr2S7#=E6 z@BgStq=yPl$ohb?zh&Hv&bW6sc(u$1=Vbe?fWxbRu|<`E)OewQGox;i*X}|nTFC=M zM;QQ>moZ>ZFScpFzxuM9h8wZ-rYK-jnot%Jo34i8VM4af3Wqz2PF%Gj(M61fdMN7M z|4ML{ihN&&nwvO|d4NH0T0xGa+r67245`D!vY`LRjdSQuwAoY#v@9$}9qjV2SkR;d zPzSHW+e_^^s^uMWkm7WXf84i%);WIhdfA9Xee$)#;p4UGjoY!jmu)X8!(rhwJ3sr|AKDC@bB_0L}7v9_Q!x;1|5SmTMcxTX}6QG`{8Y(1fF7&YtoW~%t~ zZ>{TJ(Q7Q4ek9y-8JsxIFzWM`w;Uh^8upPj(&Yw;Pt%)oxkzRB>vT$3O;&0{8w)Ke zr-<|RRmt@5yRlEsqj$=6xXOl^U+{oIN~3e?A62z~e+Q!;o``mHg z&RtoCXg5DUzflND_{5|#x8$XLO8VhXgqj))dgD7R-7uT%>lUI=BLhYhR~gAalyFAN z$0gvVx27Z+&e#_k;O#mU#T>R^Y%`n%|BV?)K}jsOIq8c{aW`fOQe(klihJ?n3rpNGaXL=80fxD%wi(S9~=Wo#S1bNC%Z z-`}MU?1`T8%L)0bm>#>4Yli)p1F2*2%yyK>u#&q5(hL#{zS{_%!6js&JA3_y#Q<7E zc~(QK$mWbQPj`_4Sm4y%W~}-OM1hhq2oAdhGp`3tz&6CK&{8Z|h;z~f@?okiDd5?v zF0=vgG}wKopU-TNhC<&I^K~y-df3&2>lE5};<(wbN^WF2=Mu zI88mQnx~&Oeg(h6T`!^t@Y%oU#2u^D4LGOAbXDXYcnhLFV^PWT7;(z=P{S@r*bplQ zPw@ad5skM3(;c@0IR?_t?gMPO=aWTv^r{u4Jdx;oD+m3Vl|H>=8H{gIswp+Ugt=Chq&@JHkT znA6!wE)oo9z3(Aq42rY{$2XOEQuYQv(N|yUyP#@y7>bzO5^aUm#C`-m;fQnqjwcZB zXnXwQA#IqDQ2u0%od>RU^U)1pt;z)W&^psQJYo1k3RoCz|9Y$d9|w%NY>oX{hXSd_ zz7{+rcMPJ+*d~L&vE9P?I*fVGO9S+@NbrYnv}XWBSosU{< ztHG%k#l`b~UR$D;i}E$xcJap;cZwqcpz=w)@c7_m&@?|;d7HkN&2L(DbLCp^cf~={ zL6MBG1C&FN@nIPGn>5atUDF)Y$GGizGW+Cd1bfd9miphkTJMxPsSuf47NN)!KKieN z=YE)iSZg3<`z`rW8kT$tw?85#nXCaWhztdxK58lC@1S zD~0K8ilgZS>C@3Q<(%3D%ENDk(}tuagrh*XV8~G(L{;u!;g8TdDyNVj?z&g7AW7;n~#m(6ZfHEgGQQyzbTQ6BD=d3LRbW6c5#`fpxRm0LWdHI>I$C5ddzUwutndcFiOdrH+I>ix*uq909Zwc6 znY*=`#m9!YN|LyWA$yF<5~U{fMr;8QND)>?Rs>tQW3+=J`aHIZF8uj z-H*j@lA#6*3S#4oCpDO-3c|OhF4T6iIVQVq3(_%^`*h`yzH|3x=~Xl&4Cr(id6>#GF zjP&%Y;FjUyMLp5tGpfb)>d#yUVi>VY(Z}sE-6hoLD}e3FCFm9XkH)YmX@UF~+^8@u z*80qb>f);-aS5T+tde#@?` zrAzgsd5vtgGSHaiU;<8Lxt@ihj4tOe>-?gqQZ_5R!^tO0sD)tc-k#)o@|>vor%AZl!YIaF(7YQw2!=ss##sE95{CB{jU8ER4sgR zB9PQbkfoTMY)OdWg`IcLuf2c%BeI_q*hkFp$mqTr$4s4*XAnVWqW7Ysjne-~m8z3y ze67G3cpQ#?b2xRhEkOWNl2aR0rDf)#gxmyT2(wq`zHM2ZJ!6SOR_d~B09nqC11>od zl^bMtgR9GY>}4b@Bv|1M4JB56t4k1CXkw2`lvb036(L@2X5XApHv zq(RX!M{A{T=S@~~rw3@D_+!;yhw;FwyWwM0yR9pAYOn!muOs_WPb&cpW69oQF=jo= z0en%;W^e3g)^ZraygwFA08C-Bq?1pXLaZcZ5}_< zt9dl7Bp}Wgvd4uiFTegI60syo&0rU4i$1&PhRLcZ^p!x@uapG}N{%)?lD26&`@1BH z7w`yQ}JQoDpAV?2CDzz7fj6*m^~0=5{}|o+@FE4Tnp503?;W zq_xFb&UU_Ikc?{&q74Bi9iKll)0^0|4^ISD5R#Kf&!saN;^I~tH-NHVzAMub;j2S= z_tzcnemDQ*tM?oD!)80?}`~S}Zq_F{0 z$E&3xGK^>GC3woCRLLyjSh~neC0Z>}%Q|jboXZ#5{9}B1nhwf*I98(TjQ0GX?$raS&LZQMIJ^D+NW>gsMYiYbg0=1*s}QJqoPu zC|r{a9~WYb&Wov+nJ-=aw)WMU_n95-+9v%o$7zV-If6%Bo(7)eG>$x-BeNkia4H0y zY3phX4+qXnUVlV}4sk%dk(zvY{7>3}n}-JZ;>bw1tg^ZL6RsM`N~ z*(d8bJo&#c(BP$0WQ5uOhNGXZlx8S|t$*pg5=4DN=*Ci1JhGbRF`UweuW#D zH7<_-)P*(m5MaC=%VL{H^1{`@{=#NT`>2hge{pK|LUEMbFsFQ=1lExqATxoz;_8%9 z;bx^&{ZmrN!-n72t5Y4=dl^wIEGhKq*}CIy5tX`NI2IYCLncFqmc>^Xm(dokv)PbGdldJ_wYWSY{bYZAa(8tz@*J@6DMe((WPizRl(V6 z5Pz}78?5-+VLMVop4w)M^A$ALTOlP3`o%ysX}B&venqE(r1Xp)aw_#tQsA&xA?)n6 z(7ZNs&V-6AS8p`k3ldS&dPX?IQ z?rUH+Z@&pg;IH9tZ1I3HbzWS2|26PXPX<{H0b>(j7)4%Xu_-?UwKV`JU#5=R!3e$t zkzH3kCMJDhnsNo(n|(#9O2ya3u`41yfPs+7knZx636Lx=OtWiT5)r_5B@qR9H>zBI z>`RH9?E$83)@SaZ&AW$nbhz%Belwk}BKUC+ZP?IW9+&0Tpw45D9wq-D#GHc9PJ(F^ zg=14rOVJcPC4T@b;cpdn#*Z72Iy3W1$PZSFmz67kKx|QGSk@qgz+2vMpKteg9d1C^ZcHe6?u<}hk&del zimwh18@#2qpn;nra>TCQ@HvT!INfLuo9=5eVt3)*Zg@ylcj1=OJ5$*lfu{W4fb5B?iV0hFqa-H$nb&1&9O?xB$hch&`4+}PlLP8ehP3;v4{B(p=ndrqV7^g~s@ zq}e#hy80AxTAy;VGiT#)PFZVnvLgLH+kKinr}`*((z?a?@Cu7Hy3LToBamwsChCDw zR8Jk$my~Ux{lpNoHdMuB7W?H^2X{+=5r%?;U#n)EoxxIiE&u8>LZWjN4dwWP(mIGw zJ-+;B=>Wvm|L?z;;S{dAss{eEFr$Pa z#xA5|254U_*5mc_HefEfpm=$x^S-9Dy@W+)?V$bK*K(l<{Fz;nO&g~AXkl4tPG z9KuhJ)kmdSh~d?@6qzEp=JA15-iOp$X(rz~_E1i~dQP>1#m$0PAf3Q7F1h*IaeQ8- zSH>Z|-`FAVfJvekjOEG339u&qy$)UegkY!YZR7sJGH;o+Y8QUT$2S_tRxdZM$rW ze`DvmKT3`l=EdESIM^{!DTnQgu>2#sGJUE1DDG&nm$WheJzGR54&3;{N=qzWe>Xrn zU*?JPM*-Jm%9+&_fc$w)7IwyLs&cP;THQY8{gWB1NjF>l@FV^};lTMq@K<}b5AYF4 z5?lbXf*n;JjR3b#sj%X0fytvN?#bzr=X&zPVeKi7ER_W_~yd>=?fww6M z6Nbtl4#yb%1ypUgo79_CqgsX9f~xN&p5{6mp6Qr1!zZ0VDzCnhPKmVX_(dr>(<@TP z+{8H%ZTy74Jd=)kvDu6*g8~~-h>UEK4i!~pofwm**J2H|h{2pKtY@95#_A&Gm6LO9 z@Go2v5Jh->70H1Oozp3WPpeZX6LqPsXgqD!@gh&3;hf|_0?BRo>3?20c}C*PGN*ts zy7KUf!xXS{R(DEyFB<0b*EMP16MDkJ5)`GJd#-`9d9(a3Vf^q!Wvm|_Xt-Ogf;8Nu zF8RH`OsVxSR8f`695%(rr4(HYuhr$oq^RL$Tw~)G<#B%WmdxR^*toq%vb7VQbQ+8J z@f&}djUUfo_-#)gtpe=Qa*KA# zO8$qxP93Ra{8Z*E?9*v@W9jO$)h%_+qn(U&`mSV-dL2P!974zLSu_V!GquF#`=|D9 z%rWp9@MLon-10UJ95|`=lIdN(c+hG_-(Rcf{1^!8_|?eXtoG;j&+dJ8C2E9XEhBA{ zUF0jVvK5Joe@;mU(;%`1iwgyOc}5`9HQQ~j42i>Jm zT7IT}0_h1%kM;NK{1`P6)*tt)_@*(;3&^XYY=a(No5K`pYfZQje`jI|)w-4-org#b zgJo@~yaN;UkTx-m>(4=gy{a)(<+H)lgGA=b7J5htF33 zp+XGLig%7(w6KDfnKbR1h}aMe-S)SmzN6k_-lG?fl51h*2p+F&Ip?Y4j`YxEf1c;# zA^+2%FScXJ_fnD@YC%M&YFjnSNYoc0_@5A+F-&bZ=b}z&V| z3wnWn2YW+cb1y+N0^I(&v(KiT$2_+WLov^#eq+zk7Y}C_5lEHH++NZ_(+^J$A;Gf0 zpucMLNQOR|>oWp4lm2_|{J9Y=kPSW%;N{n}W4&9uT03Y{6oYRG+;Ue-{Ui8CeJYCm zAde6fVGqRZC=NJ_?Z^nNTzkHYuXGPyp)F?xONPqPS|Jv`Cbz5bg0L1n&MJWOj~1k0 z9k<|C1m!D{2+@GwP#m3j08UC?WvFcy_&|SDe;v<31z<;JhU%PQ#UHmx$pT}HRY%;4 z3&FT7Zn3<&_^}aOCeGxfapmXeRk80~DYqK7g7|33$l@|-v-{!Vu!4aC8qRhMWmV=A zrdX&JX@a<<6NQ$y9C^xSMzh@c4*dM|owPXoXH0T=9T-Se@k)WPg}_;zs%-L=h~&;P z5qoqq2J36q1DJ+Ys+1cJJKjFoKCpB=yx<+{YXZRL?348{zIvGp)?PE;&gImmxLFQf z<$|h^YVD45Hm|ANiUxDr{*L`J6B;9?*0LKnm?_c`>z@Kur0W7;G_pC9xA@YUp{VSN zX#61@@zdNjl6RbaNmeK;{p`c8!RH^&!{{iRw2!Q(euw~$Im+EA)V>NbT7%#3!riuD zWZW-#gTqX4Ar_RBug~u{AXw2eP7@O9a)XB)_b4YK!{8Tp-LCWt_Y@ri%?cWZVbOe# za=H80gI%g)iC)8P62%LG0EbGA@OgR9cpkP|Y1K4yLFnF@8_ZOeAJQ^0Y{41`2h0jR@hnBN#cFPTnMq8!oF$v~pX^ zzkVX9&qPWWs5&kf^?I1?Br6Z1jbYJ#*wA0F{p26H8ZSBhCK;I;F2yw8dXy!5vXL;g zxaf-2KhZDjJnX=mJITckS)@;V*Ud^kuqL0~FtL9C^QVE48OUgU1t_#cCBT^D%dQYC zUPXqX)U>wTPl6&!C^i;hz`NR=NF`^bgUyP(-WUDP`$sV}qGEA$)lb;E* zHTBtes%7lCF7cB;6V>j8RuKY@MahFN`vV4Y-UP~K>B|ge+H|PE+U%f8%LY>Xqcbjg z?l(tISr-CQJcXYmpN5idIM-Rjf*bzBq@_kyXS zb3<8S&h=hjip+jSxq3JKgKW`nQVxUEvsLBu)Qu|&uEL#@AHN~P*@GreX@Ah61%pTq z3kd6@fI-y>QO+dV7THj}aRS*9?gFgvD_bta3e+oaR4$;~tlN$@0$XM-8UPr(8fz64 z^g!oCC@wJIIBEG$u2EapzZ(7fDNg|L8Q<$6kyf{G(j4}srsG)`rjv06aKCS1+0-Yz zZSMYW+~h+iBiFeu5E*SnJH(`{{yWhS+d*uan4WG!W2tva<(ERW?3+g zd&fY^KktFnLobgKgSRNN0l>txPOxuMN(eqjj!nMxFTle%{TGRxyc;%N>$Q7@8y`c@ z5;-HgeDFMj@3wHie)IY&c&^v>1}{!1ZZ1A~9XId-xAQsd8GSh8;WjjNsmkKr3QNSy zI!=q(*N8RjsEp(*qGD7LCCqYGz+WIJGxn-klYhzYT3rWdDa70(NKgE)Z#IxiL@coN zI(wP#lT_yjgWJR%#k}tVBMsQLB~=PNWOE`Vc4;BIG1-cIVw%Xiv=Ia=fqc)Eodswf z6JhKzmIW+ka~wGce^Qcu-|(apEu3avn>p8ur@r%pE%l+~VQO8oo1gTx?^o&%w4Ph$ z@sy6e@=r-e&Ek+kH(O%0Cg2wDt_|qA-?0XffbSa5$bfzzBHnb;Rm94aJP_MMk}hP; zItkcX;Ccn6Y{lxwN<|)uiuMZ97JqU_8LXkoZ1izxOB$)b2INPC9>go97wsjMUK^rB z7gy$fAGym|bk*GABEPD+Tq3@M<$p2YcgBZM&l|gH4RiOOliDP-W+0!t2Ju1q88=z~ z@GF+>CA^jmXT}-A<`-%n9V;=~%$r3$y|6I7&{^=-4kg@cnIMq(scRQ$`Ik^I&{y$- zdBN$rHMT%){{9%7tcd!6dv zxzJCKEm*02xKh6OZ~DqP6kmL;q0>6=F}AT(+OCul+S;RWz)~r@wX0~sC%Q)U4tS&p zCobGuN9Xy0FALUsLko)|rD1nI@R0RzWUc}07`ECoFe8ObT*Y}jtKS{|vptyNt&$?% z+X7*4A^NeaNA~Ky3HZOG{$5yD1u%I=u@om}qhyWPU8KAwjH|j;2&AZA^H)OeROPSv zsFNpiHY0OU(dw{k+?W^teMP@v8WUDlV@D!&ZTRe-+Wz#77{jPVY*}V56HnzAHaDyQ z`kCN8@B@!O0Px2mEayay0gMP&{b7L*5Ioh?#rh3};_k zNs70Ltn-9Y@2_B$XcghFt#-(WNnX(p$t;-57Ng?{8C8e3G)&>9Y)r^7On z!b00ydJ33`XCkgTau0ozycQFHx>rkMLNeI=vft&at z=zHG(&_=!|)Y3W)71a0HIt|~D))k4@;Y@bf{B?7`S|tcND&bn!;dG(DReaMKRsZ@Q-IZ z{{A(Tq^g8QsL(CWGquYxXEwbly7Iu^A|facXV8`V>IN!eZMQSwC2ukC>Y&39IP-Tu zKDiUMV(qGV8$ol1{1J%zWr&?@ph+G<#r_TWewY{M%lSCtlT~rfcLlu{eq2m1+dBT- zPk=SHm6uedTmoOe)tBHUG$PwVwB`IM!BOpF5N^sk{_FQ&F%b^e`dh=KEihkI6pL6D zSJEvBk%2yh%V;g-9$gQ)X;L|5@D_}zU`tX@wCPg4hS)+$Cj!*NpaLelQvh61^3wM* z(p60Y;LHb^`fWW8DlF^+B2ZBi@WwRoewa>3{wrI~;jt@W%8no(r1jT%C0|%5DoUF!uuVlSY{P=j^cyw#8aH{9n$=_)pAA|&G9D_*9`r~=RBYCMVh3cHg<|DGi~%*H`*U)Xk3Wt+Sn;qM zzs3AQ7%u8jXC><Ij9~JzR3mFPU=ksa0mn``;gUyt3R(!$7Fg@Pc&I@#z>;% z(=lfhZ?0tj=q%j(mW5m8SFFeXRcZTkz8#+!3`=4%S~Nt!Rjty(79CANMud6prEw{- zhZSG~v=Zpd)nPwE#viY(I*$F<*(K%COG zW-PmbS7-?Q_T=(mV=h(SF3=rocR`lojZ5CAv6asiXLi@r(F>1ubD2Il8_dF(3Ep(+ z>Zm?Z5@D#t#4k(lj5$Elq!w5Rexkv)Fe=o?;}l6@(*BBj>Ko{-rD^7`aiK*O0fj8e zs>yH^$tyX7!&?jNB`68b8F0McV*#77f8kD}K3oSEZHFt&ZE{gQ+dBi(D5O`+J)Pjd zbmwXKZz}%3hwa_x$6cpxUEI!=`x#BN>wXh`%wv+5j(Q7JB^ov|6pulVTO#+!2DG8k`#xq7~NiWEDnR-r@5^-m6c*JeicnR1#LiSI&5c=g$t;vBI!1 zZRG@~iS*t>q%rt&PX2O#3DB@C4#6)WV3ZQg>;Gi`aDQV6>|^I6f`TZBQj+RP%=FKA zuR{c`{E~IjqYDrY#zrr#{BDv4eSfgLhdM6) z9T}wk+|ye!uKw0hQ|AXK-%( zr>u|EXVE-A)RF%wnL;aNDulAt-mf;?tc@9(oLP!aQlFma+FZ9^&k)gZz^E)(K`#}F z7{jl>>SD3#cYbUr)smWB8thmNcVOaA)G_s%@QAk>lMbYUh#w8%M!Njkx`NCP4Q9krO0LeOm(;@2pvi^geK+D z&-4Le{(g|{eF5QX^kMQVG0S`3PL`=Rd9o3S7>Cwad!@;F9yjxjGaC%4iO}!4nxa6N zxpt4*SJZ!Y0oj8Ny{k)nvxSPSc5ST_J|hcvXK=E1N%K8cEUAVCzxeulq^$vf?V>HH z@MjZ73O7YrmCu--KZS_(fqi7@^|W@*#C~-j(S1poyC)1Qv!Nn!0p$xplWkS|kBUG= zt)EIaMz;zJ*bJ0^B^h4(mh@`c%@xh&*0TwIR@ACr(~soz{CGcVEZ4V=VyCFqbLC5& zy>A;yat*ve{{|snQucX_q{?>Rgk))wvvC_Lf(RR?Xc(BCksuLa-$1gSv9CNN%Ck)# zD)de4Uj8w z+d7`EO#Xe&CD0i>T?*@b77Fym>8LGzn)FOtKlnM=KL=GA1RuX%!})5Hb-Jl)P)6m4 z0l`Lr!Xv$yVv~>`fzBKTftQc(Cq`UpIZ6wNSNe1zJ`NAKdhb7Nr(lSzi>Rf9tou0Y zk3#l8?f?EjTm9zD@e}zx$IUitRko)kY11}$ElvJ{#17ebAO8tZzpx)vB;2KFifLRD zt`OOSklUFDW?0XD0JFN-ga@RJ*D<*vauzy~P1FIi>N|AKWZE+6HQJp$vlAo~S3+c! zbiUFNZw4Vn8F^&OiZ`hgD4xHmT<@V{P2HBoSURh>cVj>PsYR`EJfhNe%HsAQFmEdR z0Wnaa2u%Pd(|d4rt}TSB5{Ry~FpVnhZTT_;#T1}T5fw`cK(PM#0whfb+B%u;B&*kN zZnNDd)-Yq0+cxe2S3O)0D}+#)4)0azpf2f8L6Y(+NT-O-=O^u-XrG5l(Lh1{jRll? zdL$A5J8$VG$bt}`^f_OKuLpPHFh}XnWYzU3*|DT5@rfkU&QD7ahQQzvNX&^6%_&J| z7yG)eUp7_omM;Z-gG(R#-1DD=H_k@|mz^PO^+#VG+%_zPdy~!_&hbg>n(H(7=e@T8 zp+iSrq-FkrX69o)6sfaqyzk>CBI< zl{rN>BUQ4h^Kb8M^4$pci|5erR*J21vF(5~WIu6)m~8$nhq=VKW;kYO?#wHNv#@DF z#r}nNv6Aa@@(9rY>4b6PZWV0X1AmW-IN>W!HJqu+$p3x25?+~);P3Yl^;S@+LrXa^ zIy>6Q+oiAz&}319Nln8#K#7+egkT?Rq%^}skx`IrMS5@tEB3mi25Lpwx4SNR;R4Q$ z)>ua8)Huv8*_p%DBlL2+oP- zEyhG>x#TGS^6C1eiUAmx1&FRSivE6nX@7|R=86Qdm!>jD*J2k$x)WB#w-NdUkRSNeOyE3WFpJx6U&7; zn@XK(nxK7sc@DTB{RaaEIm^VEUU|r0BVgy;PT1uZi%oE-_yb%i1DQHpEWGFHJHn0$mAvUm;PM*}nZ( zU$)#_Z34}tD*j$l*cJ@ML#gXn7X^iF{zfq#I`cHI5-cn1n^1uc-vo-CHN=NcvbjD_C!mdU$c2Wu={fdZ$VKOMwcL%^8I--!5`k=|GT@b zA5!iYI!|rIaCdVL3kIu8s;54E#(mg2R;zf*$9>x9zdXIvR!AVMjnH=%XGL7akThtodKXljLlp~m71=4X4$yM19>5>b@33G zw0}#Ag~#ORUlyG$n{N3G!FZ6T0DTL0hDJ~tF$ee4GqviKN5n_`50~s+@}eR*S}P&4 zOb5bEj(y3eA}3c$sp0+0R&$pjEKXzh_xC|Z}Dqm(KNlS|ZHIEdsu|^1cby714 z@vHOa77ZExMgfj<*2SQ9G_hDb-2W7Senf zs65H1j9@_nJzkIJjMQf8MiysE6~pFT!Oc+82Z&;!v(8UpA)Be>eW(r#%R}H8? zd^DXnQpMnzIZxDP0t(|_g4GpBUw9|yStib2&%2BCCmtL#6iT$X_Rkg(`i)S>DbeH_G9$YM@ZA~OjxFR$JzGw zIoH3Zy&GLm@t}`yuMX4#ACa^ibse>+-#N?RQDxU}ah&#A=DlgTzrHD&#Ywf1aB_)- zF=9&!P~yezYJ1_z{63sT;RX{6ZBS3wMX@~l((`C#>aLO_-M|%j)f;no8G+ORJ*JsM#;vu-p^BT62iC9l5la{Z;ZI4ROH zvpcckeXy5CV=6Bt3S`6Yq{@xfFBg+{=I<~w8=@F zqBu>wr(91+40_<29$Qd5e1)x!@Mp6Ppi(#|U!%kE+n@jhVpaJ9-s-z$hGw6+tcjm! z_swM`>p4G_qJ!78Nc7Mico*Z4Kc4eicqayT$Zz_TdHLM zA>b7EPt@CgFKiP66A!Hy=agk#u;slYVbhgk^gT|KKUNFfI{115Z2x0I@EO?$N)kf> z`7p-sJPHUyS89N*s1b0klDh8vBbB3Kj25poIz*kvT`m|@U1wO`p>_`ID+Aw+V|}yx zYYKLTJ1he$^kQaku1_iZhv>Y4ahS8Hc90ee)rz1tj`(v*i=sC8d-xOMqnQs@&4AG0 z0wZI^ockOXY8G!dSd0B-DLP+~KPWE>us2)YgtgExuS})G76oe7zt+#5mSF`3M5WeI zj%+%DSoyjzY3=YoCXY-A<5L~oZZRTQB*8ByX!TNQ_rPnEOVl3 zkZeZ3Q1PrK7d$jk|VJtUfO(^&yt6r4JFxgrUOC_6rO?i!n7YU-; z2Z&pI|JaO1dOqO;6w?UP7b}4P`lVv@Vm5skerugw2|#tIN_iCs_O@a8_=Q-D=(*vO zGsSQ}fJ$CSxW0&OZ@em)HY(|}4AmrcQ{`fMeD!K^$``Mw7J5r;bTD8LMaxFTB3O}& zMa5znYVA3-&rd8eKUmU4?@#h$RuzRwW(2T=eQMJcZ`PK_ZH@EDH3{2M!G=A~p4c7j zGmuQgy#s!u?3)U4zNf=90rDd$^A0a|t zC%<70YVBqj1}ZXhcJpvkUA$chnNdT3xBq(8F{V=j<&i1%1R5O`IOHGu^IA5JBuXz6 zF2M>Zv6CBwe#oS`a|r!hFC^kobGO_l8^1{9mRH<91(owimTDjksflMMpSYdon6f$g z_I0Olm~Oe3e|$LL_xN&;67=+vLrr}0e0g8Oyq6_AUc$t;u5a)-RJQmtk|$wn0b&27 z-DX1HNfR;Hbg`G?w%-sU26Eh&1qsd*1Ws``TTMORMLRzs9Sl`Wx%Fv?L$RfoDPRxt9z_PQR6bhl~z0PEjdFh>3?t50cgR$o&eUgeW zVq56<$$^nsL8a1*;_=mWXtC>FtaVh3bGid{F~wav<5z?eZAbF3*_y!+Ru_vHf!>SI z!DI&1qZ6e|K^~ZvS6Drq)9Vhnj%1_QW?zhU(^Xciz=6 z^7avb?jUjcn$x7Ihc@1KxrQaTIlKuAhP3Xz*CmKIV7bF?SGm#+^?}8_P;-BQM(C%B@k?ubf{mGc*V$=GD)?Jz-8DE&P6w#-AHTm%euH z;Wxv{k?ksl9wer(Og?XOuTCSCEfbM9H9Ub+6E-926wYoV(U_pe2GSfYJ_o+|Tu>e5 z0=`}DC9fMXDW_J_3GQ4RTlU;Yjc!8+c~Sf;$C<+-?2-fq7Jcl5FCSU#4$F;cR%9cR zZGGO$(mF7x?(U)=T-erfm<>vRcb3gP(WAXaVd*siq}BID{fc6*M*=QbzNMds5?rb- zoymTX>s9_Piyk)y{Z@DxkFBHZG^Slymhx zOzcH(XQNiS*#R@d$$jmQHVKQ_*4`64+%&*TiFw}o9@__7VTQ^~%Yu?CRw+A0F)TVh10nr4}nvG z!WOv%!fIfEX&uLM5<;;nj3!<^?X;U}%As`Z{cZFeAp|@(!c+JZ>~Z`CMZ95}bW^+# z`+c)3nU^#}dvP~3d$&--GO-mhfc9?0zVWQMb{FjEOxAR)dX8tL03&kF5;=zabMfMC z18xg^JSu)b_dC1)SoicHF@CzzJBH?^2Qiwnd>XWJcY=LB849|;>J1nxXmex}COY*L zE@>nGS5d3+%~CcxVG}5Q~ zD?Kd&5V3ORmE2h(#wuxWlglTV?eaS0wnm*}#tT z4NaTZM8F?ADi%rBP|x0Zl)1#CK-u^hr-XNPxgtBdc{me9FqR+Yn*r=W+O7zCgov3JTn=E)BK~G?U{GEb)HjQ zX5?{&$ZP7fFF#D4zhBL%5ZV3@0G>c$zcuM5fD|1T0hFa4*rSel*%-k+KF9Y61z?U@ z=>fV4Tp8GEb;=mflaS>WaXsfF5Un2-i0s2l_h%GXmu(ycQuN6V^u3z__F8-Q;{no& zfpW!2mQ?|E{hYA>=SeVt0zwyokQwPkl>rhUtE?qk?Yt_XNsKodkga8hedh5B7iFD) zq@B}1f@b%rJzw5>rZ(~~|Io*fY|p+tfN7p>Q(fUHT7w^**$q&Xx*Gy>W? z&(w{HyCog=4)s`nmQAibFrYpm`>Y)*AS)Rr0SwS&4$?9wh$FQU*3YvB#g5o}ks=Yv zuRcH>whz#V6M#K5ld#@a0!J7{uWUre?;T*0qPk8pvO*)L8IU!=bpeT? zK$U0KA36_o*a&;u>N#fwg^=fr6FaVb#I29o`^Y|r?0!XxOaW=>vq+jXY_RXWW7prO z*6|n`pitll%|Jkdc&9FaS4Z)Ltcn4iDVEU=kT;`_=@M{E-qYOVa*I}=k9A~G2cmaf`Zh2~Kw41((Ik+u8T6j)A`i08-orL? zkop|&-`o-U@uB0XAP2b$G|4$n_>yA1cT5jXUTiJEKcc=D0ZW!VFinUJ^9 z_p^v91cfz3fMx^KdMqcqr{@*Tp_{V^>J)AC0>^?XP>I*;wDsjsD`aD#58TM2bngR8-9`1zjM?LS`ypI`ob$LG7CbhJG4 z%SK3?sash$0EC=&AA|H-iUz+n1gO$VlDwtZs8A1N>7xl~l@ECiwDEx+C-pYJ>bM^u zYsxnIz8c{}R-59)db{6@DTh=UGbNKQX##Sx63scSv7==sZGG2%+Mwe|hH0T0@B{!) zB2ADof>f^ouLor#kRUG~TYHs>fE`xq{3Cu`4%n#oib)}JOaU2I8D+}@%|(MwU!7_y zVc$>Ld%rrWzqk43@Dv-1{Et*i@-@%XV((GG?9uxM2oD>u3W2xX+$b?|z|S#ZbR8}4 zT0KfAVJX9aG^0d-cY%;8ORuCvthDZzWQ$!ZOJL`}APr2reGCBs)7%B7D3e6N<`Bf& zJvjr;D$JUVmGw$d5izl9XJ)6YK!; zGE4!OwRUf}{_*x;(SXhhqtXR5%R$?(G+F)T)0Ah3Q!C8^Exa%5fV}KyC(ywpv*2zR z(EiM>kTmNs!^-GtzK{HxS8w%KyQ6^w$Z6DWSz`cp45S7o@vYQ`q5_ZZEFCD>tr{ss zJVe)n^QfLi0_b54NuW!*qqQRjF|~$DRq&8%&W>3Y0WyC47wvoxgoa=Vnjp(T+vj=B zjZj)q+olCoNGXGCHGQ6hG+T?8yglrW+I^l`z0yFpr9!AB;V3ycw0T@pmK|k=5^%{V zH3gKoSOqy|*VA=N72eA34iyxr*XQ*+q*(Jw38$m70w~BZgQ)!s$V#&kEcF*&$)dz# zS%wnB_gJqhu_TPzPVb_t<2di~2~e?!{J@BcJ$BqOOKp%adPG)s8xeV$0A!<$^A?i2 zpJRkJpuh(HQ}0fUqYNmeuZaqc)#=DfiIc58u~;v{?J88b^f?WV^N22D6%5 zS!H%fmO)_LU6KJbWl$Lyw(**`b}N~rdQt}X2yE?#t=3?0j1 z7SyV()Y@X+uJe1gK_Z*cnVrOFw9l>@K|}4(q%3CzK0O6^dv`WkA9Ninxx4fM6-v^M zj>9sTDq8$JIfhsZuGO{kAuPF;yuRcL{KbK(-G4C*_x|AC5AOZ1P`y>%QN0hZ&89|P z+Y8_OPn-USrX`R(ll(M!0o<~%Gh7C;iq*0T2r0T5py)m^<&G2(r`{XHD?s>ns$~25 zGJRS%S4Hh{@M&kjC#g%&pu{*=wBU#^S~mjXKn={!g}h1Af5;U`JV|sexdCr%%3gY7 z2Lz9TMmY@9C7aj?vPaI!G{{4GM2Y4V)&rBa|Eo}@ADH1Xr+_>M$pMe}hzu~rha3ai z2zVE`$U8Iw?F=vktYtY3z%t(BFp#B*ljvUWCU771^F8An^}sdjzj0H{tDye8DN5W2 zZn%T)1W=a!q(B;EEv?`ZZqhk$N8LfU55D@}ziO-$;fqsW{PQnW;V#eL1ow%%!ebEc z$IMaB?*Olplix-a0lrHNK*xbkuhRtLBmW`xvd@oX|8{BrBp?z2{4A~cly3m`^MC&p zpR(}yg@Au@-u1uj_is}Y2o?|lz8(1Ye@o5pFkcBk793aGe!SxEMSy>?ESANxpezyq z7RzE;EQ{r@yHu(2OH|V8*MI^|@&h2j5;8!QuT4VmC1v2H{q4(})bsCyG|u{1O+HR;U3V%YLh0v$!Va0 zJY7Ho1=a&wI8O*%=Numc_ZeXvC~%Pbz$QMV6L^mQ!V5CH@k8i72U=>|NtKw%N2DT-{;(UoPj1a`cZq}4Md z09lKdJj5hqLq0+yrINrXp{oLe26aS|wC;sQ+%YU4qmGoUoo|j96zHFkEU<=kJOg^z z;qCw>%jF)Bh@5l~ODKA#e&l$S4pyMjmEN&aMuER1(1nUEmhJeoxm~>=;#r?P|rnFDWPBhr}pPTJfLsDs(UQUffD!WLgN^f zzz~{4)LUa-Dz{{^F>tb0BY91h|*p z1VUmOG~RHX@6Lq8!HOb`P#)bx!;$Z3R1mvmSJN3%s>7Y$$t*ln$6 z`F<$@E8GnuCZr?Bp$83i>UfaNKu8ZoV8nf54rUd}Oc=l%qN!CBgi}Xgh(@w%Yt4s; zd|auQUJk8)GxV6#w<<=UAcN-O48dg9VaA>}OQ%KVbXmU^&9SVvIut{Qy&Ai5G$j2$7O(5h$yiR2$_&`XoODzb@Erx zT(A%W`&j!WrIQSCN{p&Se0JLV<)iM45lo^H=^5F`Fp!tSCZns4?lIz&Cq#XVe<9$poMoMiG6*; zW^G9rv?#-2*h!1bCvs zA^SUl2S`jxTiTdFBLtg(w6xO?G_ZvoK#Lp^1&&KL&!}|#1fy;Y!js`icN&&_8k|XP zg&$r0(K|oN!=IdcyyH(Qka?7O@%l9gABPWLY6_%GO>C!*A0>u);>(oHCz`9h!d?Rk zQ%nQP>7{omQq$Y2aoXXN^ETV~nD}`2^5u&{-N) zbgAfgBp?EO0gbTD!^^|rq3{S~cE54tjbzH!^Z)=L07*naRITuE^2fsuo8c$xp4|D# z`;eTjn^^i7T*9dm(G=6nqV|hlXS~G!2SAlM83yXvEXS<<*Ps!u%Yd|WSZa!#fh|=4 zdB>C_aytLWUi-U?q$$kgnE|r2Ne9r(5!M59+}22bch`V}oDq7pc3sv_ZKeR#VZgtS zF!k?r)rek=?2!XNMwVHGbOd0K1a|5=Dre1JS#L1ow9Rq}n}>6(rx$3F3-TV2q}_-Z z1Y;-&-e3@SFrIGZHT6t3c%g7=PprY8U--7 z=xK7s&aWp{vhs7bC$di1`y4XO3{c{ZdkUmwH5GJznMH|PN?Zz}HBM`z&zEPfDV4Mu zp>GAfK&P%B^0C!_O*CK5Fpb)+!$5<4Y{Wt({P{TeUDh7ccHbbf7M3vtq@<4zt)JUb zV5vkbp&sivB_s)C*+wUE3Lx8G$QnDooxlLNqO<`GY&1o%jJ@wgvoEzb`fKLZ04Va< zK*bjZIQKJ)Dt0A7-bM+J^=7YS(Aeoh6hl3q01yz+ff6Hi9oA7XNEZp9k!AxvE0I!E zpMB~IphS@h_sq^r+Wt4Rq%omInR|t$=en-Bv8W#Q>HON>Z|AE$q3dtT>VdT%(Hb4F z(vDApG#Q+_-o{OeZ?1l|cExN2`}@>H7!eimYCi3DL<#6&xy=)v@aBmHNsa&=x?ag{ zREcWHG;?yy*?ghI&mbCUYA3(oh_zeoY^%@bcQhJEu*_0r6l~8>CIENM#!H%5c}ta) z#@GUcZiWfFui6D#l71hY_VCADDWJD+iLZ_#w;nI zmA&o(Fv~?+QTs4$Pp$T?Uk{Q@pvp`$Kwf(30-jKEWz=4rzhAEy8K8tl=LcrDYPlcn zR^ntJ+AfI*^w$3Ovz|U@6UQVAjJhFKpvq+-aNG6;&xz-Bh{*s+8<%60=m$5>Ap6kw zI%9XQT8*$f>iB+a?Kx`euC|6J0A%d=SUDue29y9FbZEQ6~%23wZ6EqVk!9;KWNVJ|-$fEo7Yv}ua9|#F00n%?R z-hwBtss|*`ZdL$+w5Z|%x(>D4xQ=bDoVA}4LC!PB14z~4)7^Me2Us#N~}81CLlwn5kpcOC7PQUv-1O+Pco>&-gBMt+}Rb z3qIrTYn2HCS(sX2VXA=n-`4{FzbYjF_;-0e@E?QwznU2EDkXu%vRD?&|1ZlT0bsHG zzo{&YxL=IGUo8K26>oUeQO9e*YrJ8(gTKq~5a+z|hU#1VhO7b#e2*WX4B6ixRtN|Q z`5MT|TXci_L;krrmVTT63`*O+oT^-e;vW_N!_x0Vcs{)FayPh>Zm;`YAjLS}1u_N; z%#x=bc*+xQp!{#m6?>cIzyo^71EY*`892%+9s@5}73Joh25#~Z6F`}LmLvQwT_{kI z2cA*S4q%cj?*n;;7y+KpNh9zf`#A|T**5eheT<+|W!pjaGQbX?gCT}M`ej6VK+bSV zx*@m~oJs6}Y}Xrmv)dpslBg!O1Kl*rAOIP2Y&MvqsANP2&-m7&PX2ha9*}jrfdmO@ zB8o)ji8%;Da|~3Om1aAy1qI;rdj;N)+H-kX$j}_bS=Q2y0!bmTTmeZLz(?wHp57Q-2Ghi+z?!npEc`BS4Y++yfG%EfUS=eD&^` zdP@cIjGgwqk~H*)OVM@JRg;t!r;fF5MuD74^>f?m`Ggo|({|iq5!juyptOz<%-sre zmU}fPgERqIhD0T)wbifN^?c-xmzK@T-iUZm1fMrvw%{cwiw42!dy}M@ejx7Yg~bD! zdf!Rzm~uqY+BRe*3P6;BN%x!(n2ua&Y3nB+5g$b3AO!l%@!4YlN~OkeIjYCGd-goD zK$}GfKes1VXSHs`+wgQ0FOUgM)}nz)1Y`Y@AVD`OWt{{L$`%qJH@Qg8uIIHxMga)i zy8x!#kfe_QB*PXPf2n9b-=OEqcGQuVK~(`lU=zm;=&0I#z~>QGqK3XlJ1vRHa?3GW zvT+umX&sU{w0hu(Z-Fl07encLuwWIf4_M#G~D?If=cFP{1fzRYUJ74Qv zjiRR@8rPBI)w`(k?6s68+jtIS%t7oU@)OZ{Rcp@zjX;J?M%YNmUev)>1RL8}x&)oa zbbe{FNV0y}i8{2^!LQGE$ewSL-OuOiu8jgSAYYnM2fWU^J_XD=a^S{jCk@On69KUm zdjdblsUuq*>3LOLapSVah&2uN-eax!?R!GKe#!vWGRuIx?BEOvu#Z{0Wr3V2;k;)p zyCTX}?q_NRzLL_y6woY3SpyW<#A+aekMmR|mx7IhP6Ha(YmW73efH}zs3dlh0?lZO zp6x&bTVyrR#KDNN}QJx>PlXttwb#WxzmQmE>;Y1KA2> z8IV38O)CX(!|sGT0jbBS7fa8=_|%_Y9$ycSe*Mu;KmP~d_Jv2?E|5>SET00O@fn|e zYfnHeg-6HuR5aF=RHRUhA4{GfQnb%mO12(0kV11Ot9=j{;F7d)lZ?hu63tx=weOYx z)!#=Q_wVyQ??W&sD`Yi%-Bnpz>4JwpfB3)r@$bUS)nDxRKg*DuOO}$)z)iX7PziW> zyK0BMNA0M~jT0OOnq(iVfQ%Q4z$B~JM;XY)dm zD)lH3qPfXiSOyf>z&=!JSQQBrV9!`Pt|3njq|?TYPX!Ri-zS&?8rV()kdfsUxfoh1 z3>{;t$ARp(nJXEc9Y->&{hDVENYg8a(H!qP=AH3PJIH?@*7RSC*)iR8T7+UtM9A~! zd7G=%&Nm>_o=+pD`&dH; zZd(adn4xU#6vX5LpXw^Ir?awM8c=)xoIP(I1+uEd1TUY;CFK8N@BM?LI@dhE&vSHW zns&S0ZnyjD_SMzZs5BZyqbMpZVF}SNM8&WSrBIBD5JsUWLJ=2BTn-@=Aug5>!Vrp3 z4j~R9tczud%R?9s%TO-jWeM>Rim(hz2$v9D%uu=tSJvq2D!RSxzU_AVoc!@T?>Q~m zp4m-ildZXWtEj_iogeRcf4|T7`+OfqaPZiU0zXPHOd5er(=|IfMTWY~!vQ5*|ER)R z4JAzXSiao)%aI`yv{?A8gb_z|Tyx=)HsHv6zFUum&w(r}DWVD|%|K4)JK2c?7O`4V zs&9@VRsjXJuoLxI*8J(ZNW;rOb2QH>;UpE!L|CaHL+I?f1<0T=wL5M6teb>>1s8%L zUKbUK#|iZhM>gAfuSz7fFRnlI07)`bfrq9fao@%@7rMd26IBcf<^a@#Moj83C4xry z-g!>DHA?{DU6zvoro{zeo7-~~G>j$fQznt!OUAx85Ld??R_=P8u9jP)mAa!`dKT)S z#73aR3MPToM(F6_0RS@=YQ`t9@^hi#G=#!Ih7A~Zgpas?>v=kw5!LH^*1lU6b=smY zj0h=46kX0ZkdRJmCv|IAI{*4iFa@-6PEG->a)MLQ6Et^P;#C_@Tdke$lAS<6*$6pG z2;Gef6;v}~Z*BOyq$HNUckABbQqcTO5u%LZK_iZj@jO(9{D3>(FoE#f@gcAMh z5I(T)AG8)U!xQ_CJP(0pSsy+D9vN|A#>&a{vpQ2@8EEA+n}|YW*=W!hqAxx=8$$|s zN;SNW5}ux*9_WsWFt+7ldv?|t;WXT>)m^(6Ih$z=$31S4PV05+)yJw7?hkFMkLS`N}?vs>QR9BI_mGer}PNT%YcpuY9pomFjx=$Zq6U!ixO_UcMg!Gwo zPx?*proCI;3REq1MYK-K_JC-o&hCJa}V%2#WXO%R@MO@ z(?=C3&`B>azUfY<_WNu1N1<+Bg}=95Ke~GFa_b|;6m^LR5R6=zxbEn=YLYV^7%gk{yRCxQQ*Jj zg4vJM-s$7>5-}j|+rIK;a{%&5$SXjC#io{_j!+?U6#&HQSny=N-{;`e;aY2>01Z^ap-`#$^c(i1c-lk1c0VF=W~?-n5PKvb%FrV`P{$9 z!2X{X8sMKKEf542(n9(xofZfH3uz(6X@PLCkp6N~9P=tgGcgm^Jo`!WD%}m|uS&E0 ztH5g%`PWe8fEMtH$VSz_1}cxSa3Yt z3gLId=5Pu)$&dI?fk(2JI?&If@H{Zi3-$p|8MoMBx6Ctjl(&H_5BUHn8*u&s=h+0D zqn8|z;sdS%-3+iBjY-x9e8MONpo8TmQT{P~zzKGfM2#^MK!UBD06fOI1ZJdzyOEWCFoZ7hL1o)kcj`-~$??^YB09bC)$9+5i zW_dr_;Oi#OnMq=grW#O?8q$BP9`aCB=>Ll?3 z15gsQn0JyI5XQ}L|J2H*W(I(i^q6$}TEXc=$ z;XP)ErU&QYI%{<|MnCG$n+Eo1xyX75)f3mnpr2tKvDCVI?kY22j95KY$eV#%eVk{F zxZxya`-zPYYWSOtVpyv|F8&rZg7{X>CA+u8Ah7|(0ie@!$^ZhUtSxvl3`Sy508$Np zE`&tET3XE{*Im@#xl-ZP$nd3rzz)`vKx3!2q4lq%l4^Jr2&B)9_Pgvkt_9U2vW$8~ zdy)pGO`>w#B;vt~jPhIUy1n+R57cFo)w?r8$H4d&wB0FDAc+UEmTr911Jr%LGo+29 z{i_X_Fps3NY&BDuA3-H;dXRngyLtf6*z>YhUxf%dxMBD8T0I6pyKFK-NCEYz+i3l! z64kdW*I8hd#nMe$t(45b;p=uV#6A=zdI@9 zQG*Zyo`vJ6XK0H(Uk$@5q1;cbe4*_!u=cF&(38A*$0Q>u&;;;YuQ&489K{#PK$Y7T z>R^hEXfJqS<&hu;3TAP@l6t~=q>c12GY1S(5Qy-K{Wi^9@>4)Oha3gKlRnE)1t`c$ z(jcvzp$NRm7P3Iuh(VsU7r+dkI=@b9|B*vBJ{_@o+iLwR1{}X_Z|Ds16$^RLM+V5r zTXGmxWa%eXY-l$r*VEQZHd=qLHq5(Kbd>1>vJA>eAj6>a*>|V{ikp{o9PTA!Qpj=+g)D6-`#lBc(?Zr*Zz|{*QJD(Pq--<4n|-}`;z`8K72a-Y2w*s z_~HH^)_!;fylvo3K=^)mKD+@`C^3ctUN+vyHlUpobOS}UGmaA8w6D$BdZ$boB`#Ef zDVvYltsallPCL+M^*3Nr|88C9JWEq_lK}Dzqku~blR(C#{}V=>4I&Rs0A#I&5E!s_ z;)o~#(=-DaR>%m@B72Rnl(xCK#tcd%NC0m}k(Z?*e<99XJe(;iMWNBeaFNYE`8P$eQI%FW<|tvX{*dbdWbM?l|FQ|?J|6!4`b z0zYbCVL&jLHC`P!qLhoRjRE-1BiOA;JEGoV#3h?$bL=94h6eJ1VZAR>UUKj8?O&QV zEu>7+pkiImx^-BfpXh6QBmLTiwzFrij41iv%zn$zLjrz%J zoA4W2XuM8&n;oQp4YJY3b)uSgbGw@#0+8)=;sd)W;-R}aw?7)R8fXJxf(npA^X*5z z|8=WtkG=N39w2Y~x1tdSDyFF9QL%pPS#Ufhd-yclKIH>zDPFYqQXo)0*dJ=hobVDi z?b~Kejm(!-cKu1>ez(?kbZ?pFTCD*P{d#R_&FZhZE^_VAh=+9H2)Diwp1Ros)M!OR zpJ~5x1e1&r0V+%|iO$zb4L%2$u+1+ub- zUX%!?`(kY!38I-wa`v88S`Lx{Q!!A2kB;Y#uw7skkdmcz5D`G6)AHVFqn&3V!W0wks1LK^D$yVY9mh>ag^9w>8N4xk?NgMfz@HY#>t>$-qx zvM5o%2dL3(b}*e^i}rmJIHE(<&OhQY$U~{fO;~(pv6slflA$G&OAdjI$ri}~kEL0z zfShEtJOeh#0j>hexJ4BxhPT)OY~Tf(fupv*nBfjJU<)fb2Xt|TB=C%-jG_C8G2kFK z$pP(@Xa`y>#AgLn)G0E=1Te}|jsg|l;Ujci0nka(l!lTPYVA25FwJu#JQi4s5-fiM z!pGrw_$dSzgH^#Q_1eN|@2IMI6n<#Pg z6;uhJ3nc*ji^N2LuT1eYG(~_$z&fzszaj?4zYgg8I0YsL@Td4DAV0o7HShk^yuZK1 zHxmU?-}1ahB0%H$wW!j#xh!D`UVi>g)!Fd4qPKhgL?xY=9q ziZb_G8_eG~xaPVdvv%My|!F|CtAVE!<(b$av8e+gh2?J^f%7}WhwwRvB$85vhhVvfG(Si~Ny3v^EHQ)yIuns(q06jG*WI4zI)DSyuU*tTywUnzQferNY z0%R%6!%<*{5=mk}bgmIwH|PP#`}h_@qhN-~DKnkVm#}sQ0QD(O%OLLpIW~rmiHQ$R zCtwmMFKC;8pJz@Ti&M zM6-J8$y!ptfc5Vg8;5;VG8WWZ&b61$22Wc@0BE=4Ui%US8`1`(KeBOW%nZCqBYgyX z1k|a?R$!?b9Aq!&$N|&bwRVt=u!{@~FLzf-*ivpMTjV_jFo%O4V zJ<~ICk0)vXtyz7jhy8QblL6Vv6$7Sf5s>t4$w5Y{RHMNqf^detKr=^0l|yt!Dck(j zr#^AA%W^e~^DvBwTLIupUPA`S4$h2<$nJRtAI+dEIg`|xOjvzK+^|nUG z0cm9bD2ES?2=vrENoTFUEAZ559^)$&D3;T7(gBQUjCW?#^Nv^^*v&Jl)Kh0h2?x@L z0tBmNCs1HDk0ICN%*M&-aYp9?}8|SdM z{qvpfagX~zCmpncbjg5>z~~Q0|Km{)#+Utg{KxIEct_%D@@)v;4=00tK$5Jy1LRpJ z7XYa97Lbu;N(_PP4Rq-|C#TFuwT+dia#Y#o zwK#N-BL~!o0jwDfArO9IKxbZ-nSw+udY@Z!v|E`Bp#WqG_}I#DgIyCuD+moKQRWiY zfl7FmS)fEK0kBD*FUQe7(2OHY*2w`$`sH09K@USfn$@gCfv!5Sl(qA;uh_T~SjdTl zd64@mflbM3#+5~HRA0I-Ptr>bNXae(%oO;0r1=UjM(bT{oKsLIEjwf{kd=dxOtV|_ z08B+Ct#S+nU_ePN+84B08R)*q zvwezs(6<>x=M&g^Ur7%x6hY4Bt5sY@iMjWzk2=WPvzchp)|Zzwl#JygWB1o_iUa{0 z(D7vk1)x1($o7pTsur%xW4%59kd<7Pc%NC2gH|4Oaf(qJ(ebAWtW#>7>|~cIhqYS& zt48y-gYav>V;g^7&_+ywiN_K5KL@~P*?{VqV2*8-}1g3?;^;KF!B z`;)pUa3pBf*z!gos_A}EPUGl9RcrG~pvuXcMv$Kkl~kea+mV8%@ho)BweSp3-i*wjO;<4VdOb14a|l z0^CEv)(QJQ--s*ie9T)YA*fM-z>%J&aQzD_7royp^Q>oSI0N+1V|J6dDX?)SL6;G4 z*76BZlC1QIOab>Jmlp@SIccZ2|E7hOWy_96PbM$i1lU7>YIQ6+PMSx=U<sX(277zmn;ncXPr*T1elNz73#X0PYvk|6l2w7gqBZW`eK? zctw;sn=ntr#kP=k=kC~KfM=34Ex>hd^1p-BB$PZX$Y8Q zG8_YPbeVyv%?u;D^*?P}?nicXjOj9WthUl&nV6YxvFO56wvo;a{MBy-S!Dp{EK}igASKKA7?mil0i(KM4Bs%rsFhL7Yl()GGv~eKZjta6*p$6R~D&6b|6k1A-h~x2G^Bq1S22IT9A5KR7 z$=$C6g;IEmdnmy|ji35t2VV5xfFeKgyl6!|q*OZGdG4yDs`Gg3jSTEblPexD!&Htv zK;5(qI?3Pz6V@x7YKsG?0(^^oeMe)E8WEvx?bQ@Os!eKd13_%XAE^}Agxw^Rm-ObY?D(o16_<$2L{+{-fsDC1Qg@sfJHTEr)8Z1 zi??Y`7zXKPP`VJ9pCkSzHJZ59dkW zib}cXfi5o4rAIjgv~id^P%@y!0c!SK8CC*-+@YU7U_CkV4f#mnJg0pdC%q_t>rmp& zG2l%eup62lHtlF?h1p%Rhkjm!Pydrof9u)*1Yc~ZJ^W%lcqy;bTMpqRE^w7tK_>wyZ> zOalk3Jw0m3r7KYb>tzkv+mEA!jR~AumlC_2>PiWyQj?DXKbrk>Q4IS!u*!PSDmQ!6 zYQ!YN-d6%*%;yoD=(YxWvv0T zMZ3m@tn%>q2pt!6o!^cR49ab5TfO$Qs%R)C4c{={t z8>MFV$)NQ|=Nayj&Ng-1r&PF0C%WHkK|?cyq-=fHNbAt~sAl<7g8wa3MoSqnT(vTq zZGV!2P>I=roB&GUMfy>~K@BWW2W+?YUXE6e1>Qg%0#w;b9ULCoI&#+5Q#Ec=MF|~x zy((>`DTieUD`6>|hD1FvnF!$7#%JYctKi4^AJ6-HYcsEnzP1yZM!g43 zHz4c|yFv~9P_ceAZRMo(LQxs~&Ot*1si9MNrrC69nQx zq<4}ca;UHnS9>`OO$VExk?In zn-94UOwi2{V1~ZF3(T`_!t_>Xa^dq;tnv*T@C|N z%rFgn!gYM$CO6p$)aWz2fg2B2@)(_`t^+%HpH;wN?r;Oh(aJjDA99P2fD&i;5Wc+h zW$V0zZ%;U;lk~-$`z2SGA++R24qs&KwzER0_m6Q zoQ70!$&1uS@Y=rD9=!G@c#pkDasgC!!lbq4)$w}(>*aox2R9FIv@|G0Qn48VO4AazrBYKByFoQ^)Dic5@e8dqHU_Ajmr@}Ol z!xJB5Rpe2o2Cr5*$8x}@TNE(Y4gCrOe&X1Z8rwU?2r7wKjsOe~LKhwYV{X^NQ3g-| zCu!fOMmYy?tHCcR>Vc4Ez+@Inq8<`nScmYDz2C*?^9|tiX}1snE_qfC_UO;88bqsQE7VxR2^{WMR8!=-vbb5 zP_0GZku*vDw5$SJwLTPaUXoH!>7K6w*Nsn}@k|_2j zNi&S4WyIRmQhQ%aebA)sWZIsalq>ka2!jMbi3%O|mSaHKJdxKML1D-gGrkV!Yr9gv zPNau*=Fy*zOyr%Gk4<)ej@T01iXbsit;SOQ{Y{hT zU&A^Aph(>eMjl5{14t5>HJD&n_K^ZsafB=?eeN_59MDp*@2R66a2_hjs>bkIWcXI^ zMc<^Er_~T4J4gamlavf1|4ZKt>z>6-H7Qt8;nsEznSn1)0J4`lSzxmnNUG+c*D8k$ zJgKAOr-r_0Ruic7D> zFH3QrI<7u4CO!WSLsnisv0>a1Q`+t5LX;$=-9p2xv(Pnf$Z9Jk1&nHVAQvomri?*_ zr>4X(gL)vH)A5`RGC;oph0E+dCmEfzaxBO>ZUJeAj8Ni{CieVn^qO_;)y+LluJ)!K z9f?9Exf9euPD)?of#Wn{wEYHA8K_*eCp)y9q!pc)>%bk^N*?45E}OzfA(~;d7XEy| z*(Xg2$jjRt20Zd|-QJ%-$3^v=O9IFh`>NGZNQ(Gb<~eCnu(K}Kup9=mth4s6&&%q( zBHJj^402GV`{lTKXfL&PQg`jlVpyl7la2O#A1L!swgEl~>1g z0B`7fiOEK>c7ih~`+z3}@({kmqwpi}&UtsdS@^~A>buob@O0?u)2Dag^H0i4KVJpj z-KLvO#{uxe8^ExQdcy`F*UdxDg(9fqB(#YDk08ng4PP|Z+b|A=G#`M7VU+nmmi}`R z+ipEnq6C~(3EHMoQ&-al_}RhfcYZbif9gHk{-+lqBpf0S9F&wy0QXUkx1_WffR{9n z>`Vkw>H0&$$jkaG@Z|I0@)jDM=NZvaA9!te_Jp$TkhxAUmypPg8{` zoYIg={L2QD`rl+kfEY-snPN(dt*_V1epG2{1b~{Un0N*#DG;kP8{{3;w~#{?j3|wx zO8OQu$i;r|VShem1}m5i_2a!Ak{PFjTHS102OjnfdOl0MpWZo zG_LB`ry@H^V@Tk)P_!Jqk9A(fDKy|DM~1N3!N8oz&6X@>W1rez110gR|2RpX`b9piAa<4 zYIgOVq?;U&mks2I$H}EAxW3GeZVYge`!O*g4vygZz4is|=SvL`c5P(J^658(kWliQ z?gLsGAq5mdr-bC*h&WQl7Ryhp1qDfNTOOy3B9f5(_ICv!HBDIgUc-gB$VJ4;yya&A zRUAqKt*o&5Dre)Sg9)7qfR1yI^bO$y%g^R07JN(yRdPs$aUjV$e2_QDn;Jyb`i*Dn zcuXO{dFa0&0H(uHQ`qn$;LH&Psz96d*M7^#bb|ub+`+*c~YyxJehBF`=t-d>T+@@}NL^I)e3qe+k+TvV--rN)u z;dMWgWY_@jto7l>6_D1Cjd0Qpq}V7&P(=qNcPdf)w#{>s1fm}OJ|}>*3^N6!b)J;1 z)_)%u^q-+qazL7u3;-pjBnz^_sQld#@UQtwo3d0jd}7LEf$e{MJP7WGcfK@O0acTA%KO#m$R{7Z)J^AHM!8um3~v2AZ~eBM>fQFzf+ok)=i~DL0Tl zTwhSTjP}<_BPL&9230K4IYw8F&!QEL^RP~8=r2@ptxP})WGQ|a081l#ODUW|LpQwx zJfTKAG_Cdb`&Z%hFJAx7>wf^r{mJ3QDe&I)E_i1E??4d0K-NmLcMRx|TT%epSfAT1X3NA^l~i zMkyy{Y--G_kkAYbFVl_!{cR2REn=}5a9UUcyhO$TG?mm!@jAb4$BiI=i@zs-1k=!@(H{i>QUv_h@5BFs_kb=EGy`Y3z+>QThByc0cww@`_YGkA*o>`e za2}+`7Vv9W10-3&APQ7m14>NM3f!TUnRW*%$45Sb zSQWt2vx&&Wqy~tLtmQpmnyX9z1@qwFMIx*Ny&xH&N+!GtOojW|3se~mr-2M<62RTa z@LvtpQz$20K!TO*M*VLAC=H>(9_%t#r)QLuR7 zemDzMK-8d$m7gY$j2Xn2^Td8>OrDinnPgZ2*3ilbFhE+?pc{1Oo!SUY?*URECvY*! zwN9F4pZ)(ZX91r{^1zhU+pIIFhf@Z?K97K3HDtJaxtyAzKD@>gpv-mi7|WPvecgF^ znIX+H;PyIiqlTVD!*kU*tOlKSAjKN<)L(9foRXDzV{}_cNEcb4C?A^Vu^P0T;n&43 ztXe-Uag7QpWm!fI(g7F@j`T)P_Q(PW>E#5FpeRd;fq-#)?hH<%yO}bOv*@9|iRs3n zDfIfh^`9a041B@{1MJIY7)+QkUV(d`4(h-TxnRIa(dxTKzm;nONSPUISXAP@mpw-4 zm@&hSZ=NxptN@@!2}ngIb!Q@XCL+v$TQ{S#8dz_cIO&v8eOzSPVBWu?DGUsl2HL4KNi5lFiK#^w#Br6c_N6-x6Q)1vSY42|}!i8^AodF(qt^Txs1kw%!rl>Js zBiUfo6P-#$9J5^k_#QkUZFGXF8KTp6{{t|fN)3F;NKv3l3y@=bcnc)}B!E>>J9Kb` z5_rD5bM1T-=GxR3tBoDO6ebxgh_USxm2ET&kFNFh%eKQOe%@FH} z8rroT8^9zEh^a*HDbfaHWjDuxfJs&ZbzU%tddfL(PY+dyF~c)HkduAZpR3_>)YDGq z2kpf!WXwbRJ_pkIWLb(zRJQ_o&KOZ@#sD()bUkL*ueJBj+CLu!)&MS|ZE+d}vV5T3 zfS6@$HR<0txv|Kp6MPJKcqW~z2Hs^#Sqd+)%K(JYDDPTNe}0NR64fx)A$REl3LKEV z#Ph3XSFYE7DO)1gP*bg8J_g9j8dVJ85<_Tg_zMj=3QRepE0XTd86hJ>8dzf<;dvt( z`8b7@3JEksz*>DS%YY6}vr)gq0H=B+=d1Hw-Re7m535kV2(oK)72TF9v37}mr(hYKs zEE|Dta&iF3QkAW!XK&rUPsfd11T8p%OtGOp@-|PVtUsl#MO1Jhbu>nEl>|AI*s=xW z1DeSKJ#wBTFiJ^I16SmV+y_QvSk}Ue13%gQlNR{N^NHr408Iz{51Jl8xGG%5E@0LO zPIVhWTsx{oFu1mdE|WaoY)TAktzMgr2+&0W7gN{~A5!+D6x#2f0qq=P8c0d2DPm-; zohKr&x?#oQlpk230I{qyB7pP%^^FjgXJhosG|(c4SdJQgwLCRf!!{qSGPrNM(ZAAW z(63T5Ai7OG3fV4)fhtegj;>>M&Gl`P|IGQTr{k8io9Fg`tS61mB5G*&qki6DcPNpr z!Yq(sBRQZ*4=JEkj?+v`sBDCcr|jrJew{}&PfmKjBg(1v!yJ2P0b1mStU{HVRuHe7 zp5hclG_~4Wokw$x2X=gDp3eHd7QNj1uo7Igea$cnq*!SR4QuElCcF*V^(*Z;m1x{5 zT0LJUNGC4~aDDq-!(Zo6Msik^+Lcc=hcq(kRVB60puJyU(o0~PgjmV@jd z0j!r@COIBNq}O44u8v=I8~1hITh2-Ybjvu&eU-NN4Pc(89Z0jo=JvK|C#T61?U~ve z>U5yQjkD(A-eaM&YBFTcKMhoDU%i14Kcw+83uB)k#)cnWlA8&EI&gypk9f8?Q&c9`?7)n z#3_sIvJs@4W~PB>95CWwnPDJJH&qC4S$Vm2olnAuO9LiXUSI@OCMp5l)(?FgK`SfG zKtei<0_Ed@xOG(HItHt+Dp00EwV}T$*;EPdGeDJ+90c;RIigloaHBjHz5!E*({k57 zuk~BDb@n<1jOn!bdzL3M2qfvTeT=T#)Vmz}EnY9h<1yBrv>gocHfw>T*;`^Fl)J~x zCPiI`%eqj<+$xPk+A$kPrkDu>po90&Pz^nHzdq*;8!y{&3Md-xYL?U72ByP{1VjpG za@KZBJ){VL2`=imDV-LULEF=F`_fOi6W)VxBOAh1&~&D0oj(Qlethp=xc58o)6G9! z`qLr!-res_6^}yG1@BzbNeKJHj&M1Ur;QPmu%g6>I0ToLpIZ;)LtTGuVyjEu|GGvBko5t>i9n(AHBqJXQlf=Q#}w z(QEB9&qm-A^6UjN^zshym=eo?>rC+pP$5MgIKZ&kB2@XY9giU(&wV3uT%(TK0lGnU zP^J^Yt>H*G4B=3?E?fgV<5ONhxGLNou7oe&|FZeZ9DMe}&;D>ag*qVp4d4&?`;>qs zrd{Ifmj+}@8YKc`c#S?F#Vd3Iuks!K6<{&y`R|h;OALfNMFD3gb-?(1;NNcm;+^My z`Ww!D5)lz#?s5L_fByM=f`EI!&mwX8F@k_NWq?LPfC~-K)bM*_hyWKl!G!{7JkD1F zXqt0AHzWY)xG|p?0LWY-z?^#^ zzl<_ne~ownxr8)7AYKr<1(+iYxU|R?$Vx_UIg06a1RBHW`Tzsri4oVjiW$S2`Dkn zL!jBrH6L+@5->%IF5n~??gA;cQwLV_lqH)sKRIKv3Amm>RsBCQs)bSDpiJ3OZf z++#JjQ0em-)IhKqxXvf61=h;PUN?BF<(xEwH^@EjJjgMxQ?A3J^^1-q_P{HCHuFjj zym!3eroA9-1atu@ixuyH=fD6s=RqAO2YB^M3TTm!Sqo(8mmKh14T0fhx4n$+(pfai zTAEQ$F!iuegW?vW0wm0k04a;T*TOrfK`=uMpx5w2jlVb}JAi`hr56Rr)KIR>|2>f> zNmdjPzZ*USCfUJRph7b_FfVq*Nwm*K+vDZ7;Vc@%T+8P}`}>&XKS@sVKvp)g5lGN3 zZGcBLtf8LWvC*Q@Bk_d+5Obj;X9&rXlq_(ShkO8h#N+TI6o||c8vxvMO)fM%jd~Ed zSn#Fr1_kI80;T`}AOJ~3K~!Lhw+x_BgUM#^n3rwE_tT0q2S1>eG3JcqF75^>|UDLY)cCudD$MP-7Ma zj~%2Q06{p*Q=m?sRGd%QZU)e1^O0|tYdi#6IfMerRZ>Kfs$WY!z8UCzGl<7V);j9J zmO~B2=TS+|X}i;vRWR>)040MNM;SFDNWwhA0*(R!_3#{OuxJLx!n4c(b(0{ECGQ>4 zL+h!9Q38;yriYL-Q(m1Ql9Fw;y!$9npa6rT;>19ON+=_JU~L~ZTD$Fv4ELVp2QxSa zqU}d>w~Q`4V9F$jJ!0Q`3kAR^YJf`uMJBB+R1L83EG8{-z{)v+dPoN#SLsv0g{*nt z1(A_;$iAm+<>Z5OvBMzfw2gE1sOLH0x5e(O11V7hVbX$NR1N6pL=BlmV!+S?in5nw zfKNdbOejP^loE?vy{R;BmX+3CcS<{uq!s5;9)P&HE)ms^^Me|t4pcdB=jw^xt@)GN zc3-dMuS}I&D52&kkYFH+!wMMPLBVq$1vn>BVC(?k(~9#R)AFp(Y1gh_1kv9UM&Rj} zeSlAUG|oB5&E*fUu}tsF1342RF7bZ!-P+%@oS)i#H|xXSo&GVeU-xfkRG~$wdBYV zd8V_Tyv1@YP(X=QbqFqnm%y)7-LwHmWf?1g0@Eab4e}0kV3}-@Gk`A}MS+f;`=;9pj0SPJcHrmUR#GaW695F=4r;~Kj z4!Dp4GuE!PFK8$gZSQp(Guz}7piPc*l(=t|?YSM=kL0+)Q60AWui%s^noTJnFBbuy zX1NCBWhVzw&v+#$#GcmQlpJxQW~0?|4$}ghmlG6F4|vbotpnHE?dZI1GsFr)ol0s+BgLp7?sNn6|O10X@G&2v>p?g$S7Ia0g{e9RcL z5MBxoPyx1uPbmX4B&7?T7p~g3yuj^=04A+{yU6w!0Yw!6W(^1)G+=wkl#FWOlmY)a zr;rq`LOr|3P(VHfaziF*22#wLQj#x9SoXLA%ur<*WT(YiPm8YCCT+c=b*tsAYYPo= zm1hhOq{wA_phnidqaM|@Dwa5fpc!l5j>3j{hQbqTUsKW3k(F#yLWXGQsVXx}qVvmj zl*m{D*3eH9~^Y&8#6*53A9E$)bAauDe zM_1~8v(0pPnq`kYM`yuSyULHA?e;$<3xQR)^^0586SV_PF7!b?3PsR(UAzxWSzYy_ zME4razzbW?x}$GEZi3)I3F?6vQxfpl7bF4;cPxAt3OlC40^i1u}ya-aLEvW+8K zc?9HS3;QgeN|5`Dt?8b9j}j#Ia|Kmua31Q8pzOX~$E9iWh@a#GRDmJ`GGfG!56pp} znLyeAL_=FSrI5On{}X#^OGNA|$Y!8L&ao3{mCa!p!i%?K$4i4 zvD&W7>--kn{pxz~9A3KiQst%VaDUhRlmDmypKkm#`|L7&zyJH)-!DOO-;!g=Hz8~f zyDU`2H22Z|G(${UO<8>?q9QKo=VO56wj4*w1R4upro z!{I^ra^TBugVDVLU<92$pWwOJqCf7$nvXp z>;%5Yugbp#e1~6=VSCOH@DKQ3@PO~r%^UF3|6_Xc=f4YIUj6d!m%jtS7_Gr`2!Een z3ok;roFfz<+!dY(R{%8zEQaY>@<5GVo&yOJj{cZDkI;?dHDEJCj03XPwOn}8d1G73E71Vg}6p0Nz|c-ak{rk!SBh-Pp1OJeJ-oFp8^t^KLmDP}VGjVy*IM7R-w7IIX8$?!Bqpvprld44HTvVR4Xa>kQmUTmtEqJ6rx~)6|$(pQbrx|4GW@vK&p>O41 zvXBZ#IRJPxO93^=)xo@oA&rX}nPf9c)Y#up?ykPm5kTc6zR$7?HN?ff7)oeGmjY;i`%zxsTw}#Hc)3OROwZ%MJ9ZOGqozeY{4&-*0`(NZ!!s#o2b8Fxak~tX1R1el4^=bZ zd3X(=F9ug3>)A>YSZ7l8iOBEBGmmp;IMwo+HpPPq-S*sy0q$ND&$zpxJ~#8i4AjZ! zxvm|W!CHo_J}W>uykq%(3^?IoWDhzP_T$JS+OK_bJOQda37-QsW=vLCp^)Z?2#_!U zf83NqGMog8>@W~W6+%{+A>8%5SOC@PgEwUhkY$Gq1JkDX@V*()W{Bb~vlYn8IaUJ+ zT4gCPW1jUZv|UEh(;YTaRZxJTAP30;NtTL|dbA!b;PRkFR4{4r_T4%Q_y1MaXgpB3>2|+$t?t841kty`S4e>~57PTAcz zbMMSX%FXzdx)0?#b$+}*pZEEGpYL-BM+kAHYCz4Rt&|n%0V>Q>1=?(0-fzEm2k z3X;GjE(8}rmgEj!z>kOgWc55e`p%=j^80@uet7eTAN=rBXxQY9cpHG5d}c&R1(P;2 z%Tu7rFl|6u?#c|%A?HYed?wG?3UZo~JOFlah-1KhxfHw$@*(%+0x-*N`2c8Vr(6Q* z;HKOJ`9dzqDUkPBFIPY=v7KI!+g#xkFu)VJ0dkX1@)l~5m z{K1w#*zoiS_&a&~)g-Vq)h6EbIJ`AqDKFiAG?L-QOullng+L5fMfg zfjm2i0gddDy=aP+gk9f_Q-HLslbg)Kbcr>hlv9{OL9ZK0)SlOf>rUbz8F{Wm6&W(p zM3H{`ozBNvpNsfZK=!fUfRvcoH_l#+qp1|;=>+bYBGyyhBMaoE)d0}4wS^~#Q2R>T zOIP2g3hd&6SbCsf&YtH3AkGpg2wpNy0=P?u0s3Vd4~|F~vj~5k)puG7rt@;z2m|vp zq5xyRwWk79MKm&hqpi^e`_>Q1dm3$CGxYtbB!ba78l>-WLRrUfNo9G4^WQj77l7>^Bh?A8~z#K=IA|kBJ*|Xd;<*pn(w(m^w z5>)Uf?H~ToEiz9z%ZRmU!r&aBkpknErDj~rR`@Pz=Nh5X^ zjOgjh1_)*$C;>CL2-`UpQDT})fu%%yP2F_D?t2GkS9yUdr#)o`DDo8De#rYyRCB8P z^+pI5gEn7@fXHQ_3esBFpVphD=~AY|Y2_LaC(k*+*5OEc6WSs=qC*FdhzDTZL}Y$BbQhjerLUittu#2V(jHjpP$krrS|G-Xte zWaJ_6IgO-%lYGGoV3cd2oj3=~^9dgU+quFtu!VlE0lS#x9&n2XB!SJeaSoW`9=m`x zHZl#gaDxZvz8atfk7vO9sAlIFPnZREu|NX&fCoGUKISg%z}tK-+fYLE4A4&x8Swu{ z|9|oKg5T!1_)SpxTR%GdqbB(NZ_c;>NeTExeoZDJxWWI061?*^5327x#hd&(u$FJh zFA_!cN0I$vwoaN~AqtezZ=&LWY!@ltup$!w>wtayYoC>95a$j1Tz{V8*$ z{HE)EO&LHUB7&s`5SJq0wYp0KS0$usp*5CjEndc`m_<bZr zUyuP*F`yU7)6Cxld4q4uckNn2luPS%veE^7#0|a#3be`JhWXSV|Be555UPLs$G`pK z0D?XKWUw9B#;*i1;9+paBGh_#0z41S2Zw--%uocHc+4=cpAvDPnG`z!jVgzmXvCM3 zwmi=h1CZ}A2V6JN<7ZswKG4G>%0LJ2aS+%@w*e9gMqlDOIpB$H)b^3)W8eizW`I$) za~(KF4|jl%xap-p9!sCZLGn_QbC4f)a2}9TdSWb3mo&lr)fIKaD`i zB1$?fl3}xL7?T#Eo0dt-E!$~P912u#HKM}~+h(|kp@d1ayIg$E0lC?(-xfNgH0ykp z3n<{6$59EK%Tfsdnu?)WcF+e5a=;|xs-e7Wy>;RoDh0hy@X+2n%Mbur4w@t6IUewZ zIWoHKy*eynVvbKN$8|9%*R{WkEMBtr^OeL$LR zvYse%rNy4SlLf1fi9ns?9<9JUH)#g8lcox+uY+8DATO5~0HD<(0BV#7b6+xN{Wxik z%?eMsho(B1M2#4$5i>sHk#)_R4Y?Ij@q6aazoQs}bhl(QWOT1d72I zRDd*(EQN~O*!%3#){`;oPi3G{Hj@O|Y3-B^Bcl{R@$oFhhSp=3Jx_<#i*xd6UF-7< zT01lWDLG97NHZF~U&@Y7I(L?6UTQSK-fr#!IuC$4#(gv=u{z*ggld64pqUeLUGFOj z;J8R??FSC9u9`!=QMS{Ay1yDxpd2*P1z-ywV#hVz(G|R^enx<%K@L^fJK0h;0P!R5NesS&s77+(z1N@3814P6!_nbuoYKj~H(lW#)Aj^mh0fc~zYLN_> zQcROZjLUulc=s#7jFWUrO@RWim8{t_PMTXID4W>F zJkZ8P)N#LwEkG-$b7n4&1lLc>b1XBh$Qsy**Pz9gvog$c#X>_3Xo5s#4s0G?W4+7fE>5qwHnYi3E)x7Zo^?&+Hkx>z+kxN5!$@ zHV>A}p4wpdnXqFew3j-h8^~}%jsP)o1~k>o)^dR0a$;v(uD3SG%~-1 zhydWD~Lfk098wImS+)2bBYQu8Qeu9{FO3S#g|TW93_D&2_qsX z;J#qQJr6{cpmaTR0RIAMY9O09h$<&FnGISCqr$%+$~8Z15!;8Q-INfVq6|`>CL^Z6 zXYhXT2~}W_rjTHY)ra=Wq>YOw(hih@&q<>5*9!=~KnaaTjv!?-MUIoq0xfcl{Xp4> z6i&6kMaox^J$WC?fN(GZNnF~E zFq$;`#t+|A>(fQT7r9BO@L}owU)y$e{aRALNt;RHQ?HM>l}q?CSwH!<&WI zXJ5~z9z$>=I76GYT^EqW3#uU7&GKsx2}v$BV2Tmc4{`)09;AW!kl^6vnUdMlw>bkO z=~TrFDuG+m_3WxWf4dPtn`s5vCL_`huYa6+oH`5HeQ({*UI1^}Yi-y8-h@2j3`m~6 zOaeWmRGG=m=B?7FL)$(&$RtW&B<>#sVtbqKVMG#o|{l9NQ!D{)-P?obQBc^L$-+Dy3vs_NB zSNxbiC1QjoNbyT(?yXHAzeqbfP=k9t1h;ueBhbXJ@n6Cp|KlJ0e(AU2$Ny9H|M~IX zgP=Lc1>NBPbN}~)02r3{C;^8VXxQ()-LM5xeW||GNl5K`J@xt>kWmhy(s&tK zfh+?SfzfRdLC*c)9KxOhoejWWU@uT*)^h6UTIq61H`}pFE%1RQKDGSWGl2t8V!#oL z0B#~C3aFKMiApsd0TxM078nofI|&fHu!!Y?Oi2^aD5nj`Q|ViE>LP<7K;q!jyyY;i z$rf}YUj$y7W1)mEnt~v0BHIZ@QDCzQG+I6Mn7g@Z4upg>Tf|1AIa+kPHcDLLApJP$ z-k3Qb?pu944PFAyb>%FMlGS^^#gSDFpn7JJNQo7;iTh+Aawzfcz_65T0-%NU)PQ#> z1Vxa3H&+SdS?YWguG)V#&;DSYvSHeiLjaDB! z(SBS8CW3i@;A36_@X*>V4i?#i3=t_`c;?!U+ej>#W6nbX7gygg5RDMSfNtk7b;&*= z@YI3XEkMlPE^V-B+~TJb)}vj-;7+iVB}vjiN>tjvkt4xJKuRN;Ws}{1(w?lz+RHg! ztIS%YYt}$)9XBO=riuX%F&asukx8Dlmjc{<7Kyrq53=2QS1zmxjjYaanBxc!?(hHr zAOJ~3K~zADc8gpqhmIDAK=T4FB}`TwvogjLG@?<*!z?jE0+$Tn#(_e7K8qB9wCv;* zke4%Z5G-v7Y_;)phY09_D0iwG7jZh60a9$W=T(Bws1c1^j@ylPeo5W4Yqr^58Fw@A} zUKv6q;+ue~0f<>6SWIcex4ff3d>HYq@1*Ul4*s+OzfTMp(1@~ia#xN6SvIj7$S`aK z9$(gJdyoc_2E1j>VLxK2dA2Li94rO%!6K}=yk>iB1itL}H}AdJ2D6>B&t|uv5#3o} zlrb4aflLFWLgJJ5M+JH+nj0A}1oB!#P(lIGb|XqDL8oZ*Zj zDT+ACln=}^$2`bQKIK#J_Xh`qeK6fWotxea^E-af^!-m@&7IipHCuuGK{m*Nj2Pj< zDI)ZdF$D^>1B%waDkNA!=PR{OCS?%F%MRJDuO-J(Y5yHSN;H?WOYM*`3Zs+wcSNOb zlg2LCy6Nnhl&#YVyRXJNV^%2?m{Li8X*c_+X#J)X0-XRG)UJ_n8)cT-g)}Y_+OzSW zm+e5FLT`CRQ(9L-Y5WC zH3(RH%O<;iivji;ovNkT>U|RJQ^R0wql70PmGgGs%DgR-!}$pBl|XDTmgFR$I)*X^}>t z#-e@c&XQC z8&L#zD%1`+V3Er&L(AP2-|naYS!-|)RjBzG1@7Z0F&m;(NFHu|%LPjKD;O{hm<uh8<{x`Z&;L{jSyg2}@v#YF1j(8IpwX`P#Og9_>uiP*Zlk-gX^>4+B@MFAs2GkI<(raQnn7BDvJr+_ z>}gHmi-)!o$=m)XrYWGLTPD0Ic=P3(58tf9w`P+UzBLct7BAtg18L`Tc>=PNLDqxp z4L+t3=rqNRhwKc7(SR8x_}w>>#&LRpMOx_wcCeW%zyvor1T3(f&w%%ACAx=8iCE)P zV3a3p1TuU|C$PjFW>Gu!0no`lQ#{ZeM*$`HjZ_?&mR2JGMrXCQbd7z<($l?8$>|A&nvT28)Pkz zv6QIwlJ*|z9euUzdNH%3VnzUnlLn~={#QosXNZ(kLuFN2@tK4jh|3%9x5n#3aMT@N1B5ALB%>aJKG)?iQ zbOLYEXc1inhJZK7(@SJX{(}4!HUrcAfM$@t!{3*G4wV}}I$irm@Ppr5yi+^?ulBz> z^r{bn|2z2KgNqRK2NS^_;5>tL0uPyxBft%&`5b5_$#c{(9S0W8F?EBdOasrj!6IFYOg;m-+_2I698w>pzDS*dH(KAwrS|~48I@B& z6HT;$WXKxOmXszSVZh>Xg_>nuxPgtB$elofzEH-wN)!>`Ho(4Z@AFJpWKo+r#1u&T z%p4kbEkY#%n3iM%kY+GY2bFI49@yQT(tu|Uv|@1GWCqJ2KnlwLqPEDFY63bk)`00|mr`=Pb{i z?U6#GGZNBbf2((j=re0cfvhLRIM7U7T8JWhSC(pcbded0lz|KzP|4C=(huxa0!8qi z_2cUn$GP0jOAj=sUMuDOjaNEwG4IM%%9q1&d_9!{sJcLV|DglhSsQah}`rE3jK8X41)Fv}Q053@8972Q0Qe z9cJhB!`QxI0BV-PA*+&@?* zzriVjX#Z>BD2IR?<1%dRuYix1E(1;~%&EgqRI#B^ZnFhQGbp{l0!hliY3(24B=a4C zpu#-^nhJ6dDAFohfGw&ZAeZsNx`POq@R{K(5U1UMn%&{|9vF#9=jAx+@LsU~)B`L8 zN0a{PBi8r^G{&WgbwG+iISy1v(F$}hYs3d70`%EP+i1U6kW|ZQ z`@9VWPP>3!b&$(#Q=Zt(DU&d6!bz38e&-?&x7(G6Q9ykOsL@LjSkjaL%<*KIvciH9 z)#@eEmlw~*Y0>T%;|Y+HeRKgC*)ErWG+XFI-O)?H6U{;^LpH_f<3l@SUXt>O=SO?ty?*0Gc z{u}V4qt%1e6X0Ev%W@HzW6tF%udCtu|HoE*b~HFQPMmgzBeb~xoYZl2omlv<=_g|(OV+PC0fG`Uz=Ew;Gj>ecys~6=or^-=W|7A( z;?c93@=?35!b{5)-=*tu$L>bq<-wga~y*t7}qec9mW|TC@$8wk~upy-Pgvm?9{pAH}uc!i4o^2=) zSOgyP3?Jk)N67)ZWLKD*+gZHsiZOdeXCE)r{oUEGbGVdRssQAm36BgP0x8+bK49Je zy;;3WFl)beDU@QQ&0(Ii`!8|AzHdVTPE}yhQr7j57{1OkOa*g5R`${lluV+0098bJ zWY0Z~_UuT~e2GRND`)u-h%v|j(Cq9<8yO2L#+yr~mN43#Pr{zt2apLIaOwzuN(4^P z8EQId65{4rHM$o87KiV%Q zfdmUR0!K9W<;bmhERfs64mv3eRf>5nu}XXzN{QD(sK(Q$e3N<5nX&6 zQ8gCm1uDTaIjX%XaQiS<52}37%`G4%c_ZHVMgY>e|ES%+Y6OckL!$OmLe8P<{+to( zlR%f%Tg}ExoYs)Q<%8MMFiMmL8?*Vls;M4>-N8ukE_gj&Z$mp2w-wup<1iop{=<16QeNsv z>LoOcdpEom2+jrX2WPY&N!*?TU;w8p1Vx}fTp6owgoviZ_=Iyn zl6i_C8%RhDIAQ0H**rSONqT{DaF-Hzo!&z)1=(G19e!&RUVArDNjwMHC@Fak(&bHh zDUg`A(>n+B%EwfI+gzm!*v(FP3T$GM7GNXqa}c=C3oZd)a0w46+pcVf)ngwYG70SA z37diUxWO3kfG2DL7C8?<6F0aE6ga_s;1SO(1%$SLoD?&tdZ+q}vg`nEaE%KPq=KcO z8(sgOKoASw2o~Yhhp(=^`V?l?d~f#q`+(n)z49%fS^g?}P$2!=Xr%u-J<4B00c;o9 z9w+i|g8Dma)c8}7IBUrQubWc98WQGzN|2+T0MKCT_tzuy9k8#T*NThuuTQDEW(BYx zlkj_~|9kvv1c0?)yN(h8*8T(nz?$&5EH%JSPy&b)0U`x}nRJfaOGh2=HHd ztOx$Ti3k7@u&@9A*~=;^V7084|7gl80bsTK$5eh=BEe6q2(VgK%b%~f9^@jc>;EQ1 z3|VIgf174D0dL5+r5DYyr2ye~_)mau^GmV`$nXpF0|nanyTEVAFz*2WgWU4|5dQT) zdr|$~KY&+PUR`{(3xZgnxyP?^p3fkd2=c)h;7D*c=mwTJ#U#+jRz`pU`X~YKTTa|= zx@ZSl*~dCymWw37@|USJ;A3EvPq+>YTcqa(Zj%Q--~c}GKG!Tl?-)G*#OMWzEU*#C zGDrb9E|1s@G_r$Xpocjg1Bc})BOo8jjO+&4C|T(Q?3FuY?KdlYSt{I&)msLPrzS=WsRnQCbW-^9)eZ z4ZVxwNSdQ2PO~aE$Ypk*8?$-9!xtCDLfw6wBOxj4EeB#Ubd5k5af3(9906rM1!~L( z$Mx?NQ1^n1#Hrbp+tEnZ9NJG~b@kx3(=Ov{oPs$~TFl{64Qn8J8p413mJ`mb|1FqJ%y7mb-708%;EZ+ zanx;*02e(j6F6y2jl{{y9xm!z22W6hhM2tB>v|nj|bS_D~svA$+(a7PGCPD6U3u~K4k(jO* z?Un&zK)1Q@{kqp z^dMW%*-BGlEE-`$d+snAq2LrO7OZVOR4Tg2U3C5UjA>M{CI*2Kp12p*v(9@t8DrRf zcLFFekBhMPK_=}f%i-_T@w*fpHwo|$P~{AjjDKe1quGAfY3-Yp3nrP|XAyqWJOk!T zIVEE~%Yoi5aym{28d-cn&Y+I&ITS#ug6y>OcR~pG>D=LzDzx9G*d)gRpR{ZQ#;yK) z?DzBGc=5vZVn2{%l=DEFJd(XYnK5d>7MAdUL7fd<)U!FsT-25pmC#i{t3-_jqDaFj zIYS=kr^N^#OV*yTFc#FJ*n-n&PS|0f$$G>=o&TkS1LT3@d_pU*l?@hgT>LYL0Dids zb)xf#0`qOm11<82Oaf_oOzog-xqOob3}oyoS}xgqJ>j)Hf= zJLjE4b5YN+5{CbG6>r6-pY)4AmoFgrn2&?&5SwV&*033hBgLWO6#VWdzkBL;2ViX} zer@e61Q&uSe?QPmk_0eomQKY|71fxL?LdsIoCTUVEQf%+Y~vV^lW}z3%^7hk$qOJW z8bMkUg$#C)rvRL$ofcr5rWD`+%@lw`w9o`}7?2q$Vz^wwjn+;Fm;stNWD$5(&Y^Ig zTO&PSouz7NH>Iab7Gv0EcG`?xJ!X`X3io&dWSEdWKvs4ea5BvdYA-p(hHq*eH=DQV zedQ>hQ3Q@KMFv=B5&z}TLXE5_2aan*vd4O$!~!pYe%6x#xysuVfSinw0_MW&MDv!j zZ8i`^ny%Mp4Cg1Oz!S$woG;2Iz#}CtmBoV9%N)o7eM3u!f=pQCZ-OOW07*t=BaoKO z90PpfECM;Tr{tj3k*S%m&E~Bd&1U~^ly}kfU?VV3oENBlmHE`oC#qQD69K4h{cs?U zQ*NjPFXa?!FXsqJ8M497bxJ-J>p4lA?KKm)-rqsWO1#l|u4?N}g_qQTE+Ya&v8A3x z1Zz}nju=b8dZVx8*=>+%#;)!g(Ce9mw?_OA(MSwfXPRo|kR}?pJ&<3w$AJN}&wFvH zHX;=;->zRkBmZN-jE%!4Nm_f=%ceX2O^ z24rs!9@v#WBO>RRR6bQ4HKi;YfjN%J8KTrejtp@dM|Y@%`;RUlF0DoYS3UVf)Y_g|8&@28Yux;wp-swm>ubdV@&Vwo03pUHlu`!d33(0fUGk+Z&MhM z&<{W($LR!ivzIgACB2;I!&i-8<-b}FUzWan@NxjYJ(%B`zYekXHN9&tLeR_JpaY%P zlSKZNb|dhWS+x1QXoRk~G(&LS=8=20lZxB^KEp0Dz{_AnbZyF+!iZZHb^koiLQn+S zIj*+7v~d&~zGzrzcpEbREb}kk_=m9OaJ(^|0_l)NIR+Bro*V#~lczEb+%`Yg9xm_z zm@(z1OFZBX@BxqL2fEDup5hEgQG4KXV4frF17>;7XF!2zT7hFUaRbQH#u=c@W!?d* zJT`TN1ykfvMT>iuG;BX-$f4`gI-rR>c?hlqA5s8%$gl_;V`p#(eBb|p{}#NOc-8x= z3I6EKna1z`D#(Aq0r?J^YIHmBE#9CF^;>oWZ_&hm3Z!_G4kF2acTAI`hbRI*DH(oM zuOoJ(9eAa7Fc_fSKm$n>xOY0n1YpghT*wgn)V?Ks~`>xe~x~1%Q=AfUhe9I3<7x@Lx^@!2Z7c zKfp*NHqm0|X#Q6R}1v;s~1y8Jzm|C-C*e*=H`J1<7R_owjc zgIAxtDubW%oBU0v!&9YBuW%lMFGvK(fDFUIHhb=App85!U*9#$ifS zfv0>x8F*CV^%?XFafuDMo-ngECH%rW<(19R`5ARA~iz>7ojp z3C%eyn|LJaL2k)4i2;{nTBd=sGQ%c_-;W=Qr{VR+*Oy)&gxFw1u3-##k9WBS zbTcWfXr!Tw1cXrH+28~_)sesg=gJ$)4Smb~M z`W$!>=E5{UaY-~rNF(#z#@a;|REY;=pcLFd+o>d~AfS$zC!qsE9giv5ND|0e1Xr2` zlz`y_1W$1eNOh1FxM1~>;xobxvg|dtQ@p^*6a`y0C&m8Ja;WgC7 z+axEr3dG1$CUTP}h;ntOfQ*dt2nF^Z0!hum$YY#jrF*MNpag_ZxrL@Qm_z%QIxh8T z>1wj<`r2Wnh7TFKP@MHjuELLf0t@k#ThyzI(57bdpVh>Pd z-hf}tMepjtIYB)V=BQ4I=1NpRaRDc*>fGBEb3Vr`QoXpWO`P*6ZZ+AgS`rfHAyt-3 zk2^_D1;X?y4}-_}z(XD_b3}nU^{e=r^Vj-))*LuBypY7PWY2NfuHS-2{13ib+ z2vMhI%s}iVi@@GQ5$NQm5mZ_MbwmTfDO9?20?m;dvw5LOjxq)0nGgkx7pMR!bJ%UQ zXLIx967!USX7=&{kYkHEKGX&7U;^h5_pF_gvXw?4#coEmK8@JohfaJCo&D6I{z4t6 zvYtL5!--%PC^JJD=++)8gLc0JZk&}3)Jw4+NHHRJQDTWo$^#&i_Pb)}m|UO=WMns8 zXzp8$e`s-dF&i5=B$=6 zbe=d#)Nk8#yvi^~XapMRG)Gh^l%REU`Ek2fH|mI0AV?)ukIPQdAOn`7;yLpMY{qO( zi3levi-I&Rr9;U`6gfswhj+nxfX)v(K0EA9`?Lnda;k?p%Hww5r7!|b=dQd(lICQa zDQ0BY31k@&CAGLwp+IF;?ISsb0v+28I8JJN$$2`=K2fRqlFh#2J|=)BIV?MY9J(&XNXiAkCn4Ps90`sy1>SRSS{}mOhJQQ#Z~I_=(|qsz5YWRg zJwTJ@s<*j2nmeL8UQP{&E&KHUUn!fS##zqFQSd(qJ_)YE_fCKB@b^x`A8(zn{P6@d zY-`x%O+qjljIk9}xJUze#%#UYEu%m?n)5u*q)Ei@3Zvp$&{3a96_Aod?N&CTmZRCe zP`gGplOqSRL)%eyX}!r-BY339*x2{Obx>1M?2rkdS&qvgASvBkLDwl=uXWx}TFs7X zf0S!BGM%zZ+^CZt3nYL%$LIpuc`he`X88~YmOF)(<(AGjmw2d@qN6O$4ts(Dl0<;q z^51AV1~`Do0btNg2Iw}+>Xd9H4Ybi>1c|ael^4!0@7wjdiPruBdvcd{%0&eGX4j-_ zzAwn990g+5o@V6*4uqaU`)t9W;3`=eL)XKL_Vj93<}Kn@-`5c>+?u#x^%^HD&1i}U zRnXB$?jHSK9FemztThF`vz#{~#0AlPKsyznU*A(M*x5+~{%g#T0@CcF2}sF=iOJV& zort2?LG62&x}zCL)5j4Y$40B?BvD_Py)J3 z838b4icX8<3_z*{H|>tos2x%O(ndus;`9@u-r(7Nw4O530W``Lxr!<$jiB?60^H6b zuiCzE6LUa@?PgDDTRKAIKuCK~g@znk=>w9MGrVj`VtQG=Z+7$VQgDSC6!=#no%Z>5 zBLWmn*`mrF*@qIUHUddf!4d@T;uJp|VKAdgEwWSI0T#`U+i35#)5gO*OF>Z9k%I*J9U;vieMf-@y&A=UrZ0#CPw)fV3f>ZE{+Zb7}x|nAXf(OBD z@F_?;9dv-->1X^#_%itNAAI>ENdHFqAEy5i#1gS>v1h=BV2mLkZN$8cJ@=B?!HuTK zm6J)EOO=|wWaDAj=HVocNc_ZzA$^olr6;vl_4|%+-mZ`UX_q~;qsmfuA$~Bvux2y7 zaUuQUjbjjt$L_Bg2gypaR6rKJol*p@@{%*aDU$R94>`-bKr;{70~}+N7%<9FCV?D# z*#&$=Gf5yv5A(nWjF1EJjG_c^wIlAb#53S2``KZASx;22jP)Uq=D_UnNomaMJk>SazvSom76Dwd8<+!0eEQa2&Z`c|^eZ8sZk= zzcxHNN&jyE?7tE4&((ciNd$-p0nul>j=1Z6vm(IClmN?=0K}yNh=l}zHDOAC*XoY- z$_YOy6+oPNz&}a}&`|dozOD%10Df=9aU~&ux__^d0anXu`Abt)2>`3*Kg9C0M(Y1r z!2VAQ@UJQWtd_r62?(tBsG;QyOecwzr-d;f$1m}p6EZ?2O^$WIclZ^?iIf2{u=C;<{v5O{LIKX=h0WGLxUJn}$06u7jZN?)m~BvFAkIaj4yc-_qevO_d0S(fSFE*Fp3@3cd1?T#Zt&L|;4m0E zergsO(Phu7+oiZ|WP8F5c-bP@+D)o`z#Mc7EC4h5+_J@w&cPbLp}6tx#eS zRe;!n5+Amr5vPklcj$=4uIHJ9wU9O(l&X6F^{{S(q-fZ$0cfF)j1 z1iFowQLuJevIzD@ImYKej+3&<+Q|Ws+TL2fa|S1lF+md8Z4SEyqDbY&x_%KeN==N8 z5VUfoV$WX$D!3e;D$U&$3MNPW#Uh$z3mWO6#E3lrJfqVbx4uE$9$W1CZj76Q5RZtU z0FiUBXzi^I$0C3XTDuiZqS(V%X=*%kT~#$gPloY8w)2tYoOM7+)rdnF(4mnqDdwnx zoR(1%z=%1t=k)KyiG|>TmKuP(%a|!G426+Y?kygpj%MxOJ#+&J>9Fz8ZBL!C_j16$ zXLY2|Q=B|ipoznzfieYhAR`(vCkO2Omhi3~E;4chI^Q(bwVR7X%iHf3%^{nlixiM# zj0wOaE8QpnUITmDsJI-e2?p5!WaX563S=0QL12aw3&51sd$0YjUcz}1$jBb{07=$K z7f`hKZq_!EOLqP`o0XFcD4~xH%-DNALi-ZE7NLJYMo5C}Wy~VkT>p!diUz{A(C5se5vfH~ zLBRtCS)>Y#(MSR~fJ%k8TZB^-SNiqh2m+FJat6q<(;{x?D569X4~_5! zWK35HId45|!dBW|;&%V6MgFJR02Jg9_kc7*=4c+a`Ad~EB1vXVxiDf9^^Ry1Nxjz$ z07;VudPo{Y!ATKUjVM(_Bic%Aw7Zyyvs?h0I6^0oXPh=*hGv?9_vDt$!w=X0aIUfq zzD#|2>*WXp*Vv&_@wCu`=0JA#g=>EYxaz;PUzS3mLj*5-b?3X{+2>ez&hqmk;IU@o z^BD^utk7wygodMqWy+cFLmf0f1ZKU&1H&f(*7J1L+f{e9OC9F47krD^=>0IZ=d5#3Il@Zb)JB>(C zG2qV;c|1I)Fd~=jIva^{zdN#?BP>?&LWlk|04W&*(rD@i&j@P15q7Mlq{V)-6#g|! z1xPbt>H>{6*UyIpMGp*&Q@}2=#dO`*^|YB`)DGQH_x`cEn$><$v-NbH3;}UkWIsA? zcM;l+VO(Apy!dEO^F#~17N5_-NzG)G5m?i~14TVEAmbxJs`c2*`NoXs!~ zG%_WY8pqCYgi0+n$X14JoH^|?O)22vlSZZEAEC;3NeC*^W_8{Y zw&RjrSNFHtZW%P`Ly|pa&$Qb(sLG(7-wCAEq6{vxhZ?ZNjM-a>&|+9grB-!_1@@x~ z6}>N{%rt!VnNC7;ekw8AjhB)ON%T?21v2a z#=J{)q%D(Rc}X*-K(kDl<)rQT)aHYixD*Y#zAo_*9|Ps!HZH}Q5;@$PszqA1WB^rW zc>xq;oO$r?2Ty}C#81b2*A(E(6ECtac0qC>*_Yf7v87nG;Ti;^!DuiJG#LS4)cR}5 zh|pO!NFQpyDOpALuTDYD?GfEP=f+)939B^Pde(1$FF|1Tv=V42&*3 zW02eX?L)b1ux8(yi?I{n4ahEe0dkuYoB~=nC;uON?;jjxp6BlBW|9KkZ?FhwxoFvb*xIl^H=rYM35MG=AtnGlK)LJ^8g z2*wj?Oel&_gqxx$ObA7E1QU!ot*lkFI;~FI*W1(X?RlR3@%en8rv)>+b6aKC`BvYm znFmSFkMHjvpZELo{%irVd_)T9VuOX6Y~mcMsxku1n7!-@E4U1FbBh6VEnNi+5@$b9 zq?J>^Qzn@LCb-0AV1zPjfP1`WWcS_70@r!LTHqxftAS=VkO2mmWf|~LLvRMCgHyrB z!1Lha;3fp;gZDWN!J?oy_VWe^v5dcpded2mR;MeEOwK^8|qT^yeXc9^n6Z*H^b7 zKkxqeG@pL4^eI2(C+NocTR@UDt*8gmH-R_{$pP=s#2~tX&I9l8RT&}*1@JZ*I)Jb7 zm-xFt4pjvB2H%lAAiu*A`5W+Z|LA}6N4wzDu}@32GvNPU{saHNgy33mCwKr{<0N;1 zd~i2-2^?lea1VIO7zrR_{uw1&834}kg!RBBo^S&=Y-Wx@GhYtzkQtzj{bopeL>?HY ziRHjbdN_-kC!KLwrNMg10o|No1F+K$tR=2<3phn58-Q-cISOpy03#q}xhHo(mP=fw zK}vE{9zy)?oA1RZA={f>lf4fMI~V#3XMoKd4vIhz(;PrO$%cR=OYs0FG9U&FBYn*B(-j&py+DmQv+5x$J-i2a49Ots310-3+QB-K_@A+B(LCbS zAfW!(1eeSpkTTD^cnH+Do1wfc9YCuo7&s3I-wYXPc5whTNH~DWn{%z10VHDvxvYr^ zM&N@o^))$3@`EU#oi_uXj{=EFX{HaTl9hJUqos<*GFJ~R7gG|>0MlG!8_;MaAGY^T z+kGBoixpZTg90g4U@?dXa?$eTfcS){0jiOUR)(S(f}Cf+9~$)3;Mr&fA7@4cK%6Q^ zB(d*IIZ5dN;*=->FRcBa;1n3t^QR!ESqT(4Y2a$iJlK3QBw_tm0m`hbH(*>n^*U8i zLQdOz+su=uN;|!P&ol>7pwCIw`9z@)I;^!jWGe~aiTQITm@|g{8DtfZph@0C zf!9X6-v>Esb?jm!&sgqL(r=Q{`Cx)b(s;n`%iD8G&Hx8}R@L(gpD|jso@E#vud_s< zIUF$KJl-{D&?slE{ko~3p+!K!3Bcg8NOHTzs46wcR^CUY-t&Y8Zf0;~6E_Pw1A2-o zkd+f=IA3lC;4$e(4Mq)MGW3|Yyq4GPX5H@!c6HvWHvylxw4+kQMPR9{Gf$li^`4Os z&9zoWIS#~#%LbrmlI^Xso*c+YIYAC&yBwksNYG{D_h-SHT4Lv`H31~)BM&snQLFEy zoCKOV#SrT0R0O6?@_)JY&$UJbxM00{jR92?rutRISZx7Q0*jUJCoO#_p~$%PguRQUg+Qo+5}ZEiwZ?-BP2WL&wOq_k4EQgmp@DN|}lNZ!^#4Z%`Ii8n(U%qf)k z@3&R8(Ex>_0fy?82^luXPM}eaaNKe*h>>-S zsFNJGnM6#!T29(uR36{6*ySaw&jw;3LkyaSw~N{CD62I`(2{fZo@GQ};W%!8tKZs< z?og(wG6uvbiz*g1auY~MkDVA2b8k0}zU7RY8w_#j8^ zxk!z`50wgz05O`ZJynXhZ0nE%jq4SWw7B8PN>pit zP>)GTU&sbx23XHnt7;Aka?En#2)MOSnm=d1^+B#!zglA22qhzIczC9)5Tga9VYY`6NZn3{qoJ*dLaL15SjUoG6F z3bG`4ObUhnOQ2*;>o+ND9|iI?G*ni$*zd<}W{#tw1$-llX{_@kBet)06!j>oyqhm{ z=B_Ye<#~z%=Vg%9xbf+fk+e3`Ax)y}+6N%GYqRa6u)iqPC1*iBrd4A@R@(`005@hl zH=oHhU@ExDDqxWk0%X6PY({My#h8_0AWjDZK#Z1P5(VmG5WEOyA16t#^F>-#&<_-; z1XVOtfd@?5J}^ZqX&@>62EfK`UD5HLvr@-HfICkkkd;+*0A-!;WhpvCZ6ap<%ZR8( z$xqQ25@0~j`f)IlNVIoy^LEP4+n2ZzJOes-MjGg+L2~GNTeH^HdC0ZX4kN1hHa}qP zQ!_h>7wGt%M)%QAO?|~Fbh!DzoeTB+R^hpwcYNEQB#l7lh}BNX$>l3XGmw;Jw4xsW z0J}oqf7bG=^r{v)PrJ5@6oA7)A;>`NSgb$R4u5#&5BHCbLn58nn#jU}Q?Vnl6%cG? zd$1Wjzr=wV+kYic<(6@duo9RKPRKH#NMkSyve^ilPH7^+N@A!If)Z>d?Odw$;YbV~ zC5Zu9hKxwOl_y39s6hI5x|+TUnG>0|%oHrRv%rg;1oq0L+yrTsc4-0WU;}-?A&%L) z(@g>Bqm>SHFTNPabAz2gF9QG^rI`!Bev}x~jtd2oqzCAsiySb;N?L#fAJPgO=3|;#%57F580&)?|(9q>2!>-`Pz z!xd9+OwT~&A62CK`#>jyat?Tt6yF3=(jebN?UCOC(tL&Qf~0we?-DsKMbiHc$X6iz z=cRfDfFyH)cIWwD2lz|<&kF1>mE3f?hv#%lWFInIXaqo?Y2Cpg&e3?k`;B{qy zSAqXGLIS{NDFG~CfqZr-fat2B0OS=Sz|SKDL_`4h^IXsW`A`7!X+Hgurg;LueEPGL zz9``S^F05*=zG5?VPHP}vL^Wg8>6`l%ejn8m)yqANng2?qgj57xf?m%0PDu^OQKBM zcPYq9qL^7ElRXEL4UIJ3YCUUCvx!V6Y|dAUQCrxu&KksUye zV=M=jvYzw6Q9j}>u!{~(0pqM;GjNW>d;q*)F9X01d=3L`2J9VSEeT)`&p8JSGer&< zVigC$>yh2w3Xn(gzSMxroZ=zGjxVTso8U`B=~Z7^3k%ODE-yRb^Qn8B_{Ro-`d7=&zqt21nyzqG70fUk@%O+b=X10$M)$3PeA$$P;F z2v0)~4>J_V16}}Wc9I4PYF?5xW)LXRKnW-XSEL1)bJTA4#zTP58CLgm z0+ldLqlPV?D5mT*o*81a?Q8fZ#jdiom+bo`oX2?0V#HqLHYx$>3~_*gdG&yS$05y+ zEVFW{RJp4y=dl;36-dhfXMr*W=?0df9@owg-T-DOuW=tJa?6MnB~xths6lWytUm{X zCk=pZHEBZijJaX&eTI{Ktf~|y56$z{wW~`G*3%x`9o$1bWgg=LW%I1{sPVBr5KIz! z>Pwp(w$kQs9{mm=SL1e7;=s5nOavqJ8{ifT>ubVt;(&`P>YQeDOU`f*7w(lkq3IIQUTd# zBC777uijGH&(!ly=Z!Io#d{q`+-R~sU!_OOBS)>YS?U!_jytK@(14r_bEfsHp66;% zkBiH#wx3A~(}IqHoQ)?RHL7|f%mXdPGj#kHfiYdrf(Q03N1#fXhhVF`&k~@6k4Xb* z^C^m1JC4}*lEf{a8ZxFy?#dXDpik7Jb(SK?Rh>8Gmi5=7#l%c8$V;GsL*Y2?L_0*AkV2S{}B!L-5C<9YGvl*em=98a&#`LM#+}dac zTMaRkmx~MoWuv0y*dx1uI5`;xW(~k_z=#GUK-_wEO8sKx1TEGs6^qy1U;tKwD#geU zOMxcYMFr@Q=W+vR=9mF%lca%!5w?11APMv-04*2kU=gYakOKBmpcz(71 zfL`g6n?S3alrfOIvPt#>+gKyxAUQc8>*2?vKR)*3l`z>gnV;MOa)U9c0S`p`RZ7;d z7-*LL)Dv2KT6e>8vm7#s4jXbcyfLZ71>6Atwn#F0_mVR&-F-m{Bn|7)JqV&QP)uAN&7OdFABgX{&;tg&&qpDU>JxRRHY zz|&>pb&q|+?cW^OBv*h=IYkC|!W2I6!rCJj&T^`VFwP+jRUzw{01`@!l8Z{%kTZBjfQbNF z(9mp}k0n;mj_QkK>|PDY03HO_EjU`Iop@ALLGRZPWHr?DxPc@DSGl5l`QQ>2R4K-d z>mjQTUAN;_zA=2@MsU-Jb!k(sss(qo{pmpo%1SW4PZH>o!=%w&p%EHIJ)h(30;ZHG zA)DAr8ssB6VMMD+SdNue-is)qcM|C2V-mnY64q9JNXX3Cb6KF#_M@$&@KAtP`>QXz ztuNk36(veQffnK*XE{I$7pP75Ir=XpO2>@YlvG$&)>}xX23k>I*+H09o7Wmh0~xln z7KqVp%4fPR=56JT$SqC@xaF+xRN)N#NOV>P91 z+?E&#o&z(%Ig`$xwZ0s$TUnxU>Cs?H1RXpflJ9p!(gH37gwmkKf{jM*x^H*rF8UO{ zDb!%~;5`3}rli&{yÛ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%0DncHGkC<%miX?tXjPk%mTDX3RzkC z;1|zhYTk~5CI*5c2Mnlr7AZM_Ylx>YAe`IowyPcuCZ7XFFabnLA*KI5Z2Mzck>a4#Ts}i zifa$evwt35W!zCre&QWM#eaXe9hP1scswoj%R7QR6$G9C<;Q$f)1dID^^UO5 z2`dPjGyy~xSCY5d5n0(-v5u)3rUvw0sux&QQ$&qnEER`~6$}9W6h5Sv_CQatTvq-C z&HFt;%SSFpj?Zbb^eU$9E^`;X1oOm?#Jwc4#Jz%d;`+=bSiA+qdm9e8@^XKWig$-H zPlXbuF@|bnd~B-3*3N*-8pyI0GNvdqR7SH!r+sYV2qRSRP|+;c;ixQYjc>(v=uK^*7VXzt%OP`MGWg&w>nlJNbyMbQ%o@!1|NY9%pY0*3G@;3_fx{7u;ElJv7MhNO+IUG#dJUb7==?adNDHbk3G+gHU>H#|+3bwFG*33F5D(IunlS^oHEZ&`-$Ob5hhjJGM zv>=Mj*ngTErEd6%DljdnL`zC)UJAy**X=h5CyeS2y?CA~|Uu_~~h+dPIV_0TmzN&svjx$G9Pqv9# z*)&x~k?z}clXbMa!2Br7Hk$7tV!Ht0Q*20%$OJ0?Zfph!HH{J{x~K>w?|#3|tPG#M z3HB_Ac+dW(qH^kZ)H`;8`5Bmv;p?D-ygvjqo+e%4cO0GVFA^<(ScwA4yN}_J8d}zX z9UU5NX==T+!oZW(LUFOBsB|!gV{>9^tH9)QnW>Hvt(HT+k)`#*YRC76lnn5ha4*`} zpnWq1TmAAIXUj6_os}oA+s;MySf*)G!YoUJOIPy#MZIP)q>U1EWG_WTgyOk5){Z&& z`Cjd#CFk(Ca`xWjVv8btIhZtkq^84e-IMl1fp_%|I{4&0LwQ0!=>>@fUKa$_Y7t#8bRN0 z2!D%wynKL2z8Ntwk-%D7&je&Ql zUd+E7Q`Cfc<&m2pn_eL1@XG>o6Y2|my5$bevnY%ln6i<wW-bQ{9QO$Kx#SE6rsjrpLfu(Awu*QQ-iN%Wc1Y#_GS8g+Z~ujq-Nrs zG}Ib@F?pm9Uu!y5mPJu7dfhfQzewwg7(*4udih=3Th%$E%SEYaw=_(zl&^~~a!`V3 zqzEw5^BRprN2LN*Xdqf2veV?u(CSu2YNN1ULKIg;?z_e zUU8tRPP4+fPGTHBg8CO#w)M^&*-<(re`m(Vq*M?K0b4mm!(ykW_CiMz$>XQY3C7CF zq@-Hrm*?e2=DpSH`+oGR7#SG8Wtyaa%F!-LLb+Ij8wC`epN{1?Cp{v#c89qKn9!XS zS?PCj68QdeDNZ#wx0c(`wCKhgR1AG=!#M%+?yhh{qk*FjkDz!25-y1vL+b$=2;cCl1hVQ8%kE{~rVl9Ro zt%-KgQjR(ks^?As7EzxONA_wq#m4(5;n2ys_qq?Fz*jRO#P%znNXl8MQ^v27?)qJ( z<%kY4Mw&I{D>G#G>Nk1@(X*%R_?^>vBax}wml|ngzH$#@21nMHFDd3N$O^JLw5-`}|t9gAOY8#q9^oETI^qFvilyjM{fo)L@H308)(7pTLZnFeW3XWHsMUT#cx8RCOQN ztdUZrM+lIQ>PjCW0pl!b;M`UUGC;f3AJ`&Fw+GoWXJyY=sCDA#YA;*mR?L)uXP}ke zG-e>1zTXWfQ;>@oNUx$#c()mU3D~pqJ?Gm`OeMS|W4qM^Y`)@6<4s8^;0wA^rAg;d zQW53{p2A!)jar~2QR0%@$5hrLSAC(bZ(xmzT+~iaut~+oZHC*(IRTWSAOv`bx;L?Y zaZqe(E$-jhxz$ip6Q=y1>sME-w9XC(<83MVzCsgsa)*Y?H~UB@z4iTa;^U3|S#wz0 zqyt)br0C}wtWJ#O1np61{yMC!wDa#8;iJ2#*-CQu@G0UFW%_=T(mBg;25>z2%NiE< z>^Y+e@pU@$f9qD!Hi=E|5=)(MpzO)q4$V})OU8Pu)~kJr_4a*a5bxtBxXbSk4#rEE zPl~r!I6)_PW!qnC{!Q~Df2GAg(ymFXJla1JdSNev{=HmnI)r872U4+}s|I4}_uvo) z^%Opde(#2=D)_x~7IT65QdOH+E8+WIczN0NpQ}peU)pvBvjA3g?xepS1o1%5z-v#j zDTIWGCq*pKDxB~@l(tLI5^+Ty36QS3$GKj_kTCE559$G^b%KuSivSEJfd#Q&z^Jn+ zAe8MXf8AaX3qVybp)v`C+j1bD{4fwKKq%meDhmzKcdZV1WL-=?9QbmG1za1rs`=>-`=Ap3q2YLsc1V?1 zl+7ZuM(uv`+C>r36|y6BPSNS~SbgmH;wBDn(PgcaYD>a7HvTX0UQN*92}k}(u2J-U z@uXcp=sNyL5+|tne6&zn9Hb=qm}^1s^4012z$aM!YbsTIz%i?S((eR^bzEx%WW<$r zx1f5d8UG!AL-2E(Ms+P6C952cbJDVwNf&4P-L*FvrG@;rH+_b9L*jrw(`|2hgKi#Q zq(|j{v~#~$Ef8cT7QB3@eSb8a+kP_5p)(-gK_=m0&hi#izJTdA1dZAi?vQBg=vZZ|G`Xd{MtGv-KQ& zUb*vuL=G5Y;Gax)$0@O|!%H|X{Zq~W9~g$ezOUn|O-cyiW2-m4?@TZeCb02y`sEpx zV}X}%5?+jNk(tiC&X)^ItA9)3RM!#>7tK_qDQi>3&)5(E!#K??PI3|ne{{U10DPOe zpofJ2!0AFP5Nzzedfg=L#=daCq^|nEt`r=Vf_(nZxf3`wuPidu@k2=iamUj7SgKE zm*2`95T{n~!^I8dDo@^cE)RdOWw-mPs6WQ*oazUYIb>E~OvcW*$g2EuC}@w2bjsFj zPemk9yLBFoveT)Z7=-MPeMNC^5%XY{*(Z}Z{?r=-SJrwx=XsomO#ZH2j;Eu4T))6K z8Q507e@jQs@Y=6JnaI^-CX)$A=Nk|7ZiFc-dCU_ptk+GAuy)uxZbk|+v#%o;XKdLS z?*OuyBoS2N;yj`=ZBY_61Y1Nc5$h5vWT%hepP?H{C>DYP@U{v@`8H=8R8bZJinIp` zhTbhI-?WQHe6xChHgn`qb9*+VV|tUFT;FSU7OJg%r#V2iK_!^_&{7!|584w73ugi{ z63*|h#5+LL0IoaW*AJC$`VSSx?8fBtA=2?1FgejbZq1pDbAiI_@D8Kv4=O-Gj7U>{ zQ_B@}1cOZ1vM>Xv+lZY>4lb#;a)T>=vNH_sle9qSEmmKBuPN%(v+AU8z@Lgk&JnvV z^d3Nzg}Y@6`k~DKL<12R@CK*=zOCbHdFXD_`8!~h11>()SB>$k^~b9(nH=VyMFn7a zE&yfENJ&_Q={7f1Wo2o?NAF>{&ks4|`D_A-(jeDPcb#A-RJfWGEeImN{A~ z`?L|R@*Bq;cikN+%S1{l zE{P#9B#}6d1*I^-yV?Ff-%Nqcb{#Y-_n-4yv^RokiECU}Q$xOva)I4J%vbY^FlyFA zw6Pz;#sn6WMUd7}8cU61tgFZJjo{AkcJNsb+wEv)b^sOIKQ2SS^=VvnZQ?$&E@-odjLX8@mIU8cBc^yCr}e z&%_*Rjs^704EwVGwqu*tg zqUPY%NS=1Kz6iNyoZWiWE4r7*#IMlCdo8Wgazl2vEc=R7;h!2}u=#%C8rBA6mBi0$ zE+7s)5qfLYRYjPUUaV;7j?uVzB9{0WGd3SyittQ15|)kE=8BwrBSUS&9(`H_pWf zLmKCRo*RJPmumj*J28et(nap3iA0(#KY%t*-~Zd#-hv9UPTS4ngAYxbeu`)W;bMF_ zM+NtG^WmeVha~0w6bdDk76R%E`AZo5geF-37#V*#+LMLRVzZK`ajQ4}5-!~61+!L@ z4_5Gl^v@eLuSf5wftI^xhxyq|f$!|Y^Gm)G1-*wIv3Gr1d`B@hurpwqHKK2JgjfEK zkvwfvPKp{8##=TpgLJ{f{6C$UW@PW1ApL4$F4QWeI61NEXyuoF)8b*!LNGr%0A z15Rur(_bRrET6J!pYRBmeyXdQ7P{A2@$f!6R;YcIqZOU#p-d*gs^H6_E0?dU6!8|z zw;5mmh+v!0f1DD-L zW?{1Odr*%bUsd=&{<~=vvBk$5u??V4tXsouG@YHtBef~QNqP<=;vGaDmWI}}@85W@ zIp+TX9C+kU(a@QM6(d+Q!Q2}%Y@q3@%90~&6_kHGmii&dS{JiTypUU?H3b7~L zZ#gvTI_kf3ih*71iZ$JScQf9Yk2or@kQ2tc;2ULhHt6%%!^P8!oZ|n%CFS%9Jvez9 zI~Iq;LLQT{j)8U+pR}w2v6J-)ai|y7=JA+;?NN}MzO}Z2wq>?jYODEXAm-&|lm`g! zJMWKJ@ado1baTo~_pr1&TM5fiDbtSMv2K?KxeAtUb42+pwM~#F6O1G1@ zQx5uW)HZj85LrAK?y~+%0>9PT8ONVBF5ZY&?ZgkzxPV{qSA&Q~%TDEE3G(JR7)Xz? z{DihYxtxY2uPv`JFGrx!Ov?yu+ZeF>B`T(y?IEB9wOQ4V6}q^_j3@B9{c+p8s2KQw*_yw4LD?q~Qr$ZVa|=l<66UnU9W#_xEY z!z%pIFPwAHPZY3s2x>9iT~dht1^99EF-wOkHIIjs%K8(0X!l3!7`|_m6G(W+$_w5R z8F6{$#LVLi)bu@x+^R;}yD(LE=UYGdi=M_L{(mpP;ri^Kt1hpd{H3RelauQWs>j!n zfy?*{N^f~w$q)&?7oxy}4=wmJWACuWbOyzVpnw(8yt+^8<%&URECo*q5mP5RUl@++ z1>5Mg0Gn)Up~*D^XHWa(XVM1e1c;L8pseVp62zmMe@H$!uV^|@ZS`r1Y1Pkesxa)l z^%X3!9xqt3ee>}yJ!Qi%m6MQOmIILhVo)D%qbrYB)CQnMggnoQlm1{Y(2ZEaEf55A z2H1d}jsSnq5SHvGt4q8XLyW;^LF^~T9uK=x4)LYs5A}^rA1;@lC&nv_`&lbLS%7!_ zLs#9yZ>>jZHOw21Ur!tNHK50?z5D+eD{Hy}re*g|m)@=6>^zaELr!)CtG*1n^Wpms zFBm|sK9hf;-A=nU{r8y`@I3_lxY~SNN3d&7_5?9t<#c#`Lh`Ti!Tjyx`!nk17dMOl z6v?}f|E(WOokvWbly*r6eKf;)X>XAKS?(Y7w#u6{iEKdQ4B{N;;eesm8#5pSSK}RQ zLF-y7=;2-?t@1}3n)m_MU|F&{+6T#{Ag)DwFi$cC-)nbtgW}@)ohSM3PjdZqqwfRu9M^tsqJ0ATh%JK>4=>iRzln{NAY`)N!}on%cm>K~1~Nz< zj9q<>wO8exOJIZ76sH39f&FsWbE`! z>TNF1w0@cuYW%6x|rj#`q^1-Zlt%%eom zZK*00V;zczHGD}GtoJ^iIeVLDte1=$-8Z8#*KYo~YR1Gz@NK3K^taKM6O-;zL?x-L z{p3|YAt^t8!e?cdzg5dTG5h9wPh=0((VQ+gpZOr}CtrMO%d_%k7ngq1r_}b@FhyYK zy!x7NaJ~4vj{)L|VprCg4o0nzKYhKS{!o;sn z0RK#(MH{7}Dnt(ApMJObA+ljTjM-@yU0jY+h(JFjQ2?(d=*(fP;e9FxKc~ke<29n4 zbRd|vR2r$L|r@&jzr}`Dw8p?yrfEj09 z_25e+=Z|!$2!6W8;RG|>(LX-)Z0BJZ@`nHgxD>O-)MUZFr0Fc#{2@qV*{2Yi1=HM~ zW`Oi?IURO@Fhbg}%+2)MTOm3&qz0Bno8TNUr z>Ekouek157d#b*wt81{Oc&`G0{O|=noc;$e=bp90|*09NA-#xSNz8!76wbRTG$u6$=+MveH`g6`vA2L#k-I+;w z@0xq)SxTuRs<9Uj-ht1Ge9YGUK(b)nDE-wJKlHQy6wk(2xfZT#DYA`F1nfXVe8Jvs zC&sQqzmXvAM%?|V;|fQfYaOu0T`;8ShgG~E;@NJoBHd@9Bt04k9nDB7eY6;{51jDj z-z-y~B>uej-pVp6zbIWzf;pTdQ+NXJxjKqF#qskcERAPdM;Z^dk9T?Z#Z9SVdy$v` zjqUOkfsXfY;XgAgYPj>I9%c7zTzjHz6}~vpPyW~)p*ussZSpu@4iYuHJo~X|=?FIz zc=<_c`BTNhwv;ZBuKt2(LGHDKq*|F+)M)Z|9?x1QVpi8M>rWEg>cj8R7^6M0Dc4NZ z0Ef-7w(vZ0r(Z`1L*))O+fLoB>K4v>t%ypwo4Y?!W6y1&v_Eo(eJ39OZn&5>7`D5L zdd;bP4Z|>7hLb@*Qxj34BMrAb0x@Q;=bTvGwHS+htN(gk>r~@s$tMcOX@X|F?T8r3 z1@V2`!$N}2=0$Y^942|Fab1%;r=@HCDW_hX+{44->*>M?AXL+DE}w;Shv#Zt-+ zob*hQ7*kU!k6GVjdKf`|6N`aI2yIw$XH;RdG_&|m#EjnIt-0l6ICgc)5>Ym20=Lfp zw*7w1%8@cxo&xln!?U1NJwm3IW0l1T=D)F9^>N#Y<@ZZw`LB&(EdcRFV0BgeYzSy+ zT;sLxR1aU?i$}7V6o!c}dP zhlQ`bx4xB@5(YR(4KVwmCHO zr?w9yiCX2TXoUMKOz1XLD#subnX)ogy5VM|xI-Eb3?ito&D)(6vv^anFCmjqI}wf~ z&(@44VD)Sw;o3J(73Tc$vs4d6_p)X(M%>|+>LH*mU|=zn#NR2JQr8lB zVw$m9`+TI(IUFo-GfGlt5sRCt+m^5C!7T>Egh#cnFgku?NujS;vi?LdG7AGMD7WO+ zz;8s6;rlEiu~~0CgH7QU=m2Y9@~Z^F zq~=Zb$ln8_zeZ6%_kLy**q^X^J#LQtvp?~pIQ|zS?N9GL`6#e}?$F%z=@alNc(pY7 zi?)q8?}adCjYSeFUgAkw;j@ivlDH z|Gj3a-+I;;xm-Yzjjsdf^J-6SYrwltY(HB5S5~}wiupfbk=Oj51NNjSdDQ0ty5WF7 zMG%1kO)wCw?0`Inr?VE`-`_~Na)^n6n@*C`y)C!8S%XjTFfv!SrW4gi^kIm5h3?HF z%In7GUbP@Lzdjbm+l9g^fQ3Dv*m=$+ockYbFGkl!(xh+NgU)FFot{cdU6k6d{W*;& zrK1bE(ei)kLnP88z2^9KVO>9o2R_83fi_qVbKKHJQOz%-)WR~39wRsh{V*M;m;iYq(_Fi0jrtqBZXK_3;ROk#3H)fR!x) zjglC(f_J8(VxzA>Gru^SF$(Q2oZRUOM+--bUa$Sly^TMMIr-7YE6?kXeXD++S$Yiw zH%m2*gt8!L**Eoz%DuzCBz1J>aM|rwLdxBsbM^S_2~*WM$9Nz2!OG3yldWL~fP`dX zZw(Cw55hP)1mg`b`-@C0im4@K|-nOy9Z)> zL_1BbHjFcO2sFEN_S)yeb#6KZERSfvhYSth-3MXu4!HUo+hT~lAfdDe3yy3%yxvH{ zXifc(1XH7GhHZVOuG$+LS?@i-Uv@wzaR;(C3M$*6m)slY2Hd6!IyxjZ8N#(vv+$vXS`v>UMgaS-sZ9@C5dzW0fufZbY_1|}WW3H;h+;m6?fc@fGRDng=w!FIrB&Vi@ zV(fVztz*}sIBgMZjUO5}-B_k=btAi_8pW{@?acc$=UOM|%tpn5x(r~QA-51u7oa{= znlK@0>*ZL1nKsN2@VgY`znYfBsiHX;pJ8uTy4))3Os78nXYksGy)^ijHUD(0_gbYI zkgbiZrqd~JL)a<|1R8#kae6kd*R;yT_XmJ9T?@WbXh+y!yf+7;Q;{dDBj~7!QMDlw zbHbKA!)z2H7M4YHixlsJgfSbxK2_F{Sv)JrF0ax#8f8V9kdAeEiBi<)ez`nf;m2=9 zv(?Ft@dM?0C171P+O6vq7`wG{Q^@F{zpp?m(NoW+NkUt?Xq{0Z$a+j8D8w_JYwTym zfF(T9806GZs^&}OfJm6INK}AUkYY-DM)Ma88A)}6la8hcqioiV0X?pp#gQIcPAkH# z0WG;Dp`1S%Q%QnVAkF$awn}~f!P4B;HDYKf80=XU3VPIVZmS<8>U>j!&cBU_%X0lt z_?55NM%f)@q=?iLw|@mI4X768N&;I!*03@0$k)r)IZ9!l-aK$w7p1sVEC?6Cldq&S zwiVo4%&xTZ!9T3fhUmvUX6*cpio^#dm?8Eu4-NmpJf(AC?WX3WyS4H2IE}6o zCtca%Y(s2-<5$+DN58uX)H{hMUw(|tfP*CFYc|MjgGrFJ`V*_Zw!uS$TJg}|Ho?=c zyFD019NE@*$lT@NCm*r3+T9dqngQ3XoDg@40629~)%g2b70>xDCtoVULx#8CX_f535FW8$q2o9mQu9qp z+jM2(o2+!+`1|76sl+dG=O*%UTO*5>P`Pew81ho>bM5GmZVERjGS_)m2>05M&}^_z z@wLDwDMe%VPNBUZ1$Gf8SI@EQtiJehg2s9K13)x6rg-)EP~=JKv|G_Bw3z3u_N`8d z<0zjj-fnG+14TlMP{-#Q<0bZzEaJu`tp!@a_o|~i#yFbFN|%B4a-!c>;oMSm-hO1M zdrT~HuRLHaEd(()=ZVaptWRmC#1X-c+S2_E#2-{GWNJxgiq6qm#fr|XQvDs~q|BdH z9(I4)L&M7D62M}0maE33HfIVV)#iKcZ%=ZYx`8R#rQ=oLFjkee8;7P6Q$NSKOQ!<9 z2o;e96E=JKOMqjih|E`Zg5p@6?D^nt=FT12m?y2(9U z_2zsP)aXml7;yC!^J^755Vg;o#Hk2KIp0LE<0n8CQUomDk7~YqsmM;RzMn_3=q4iCZ?E*nz8R3myti=8U*S}dBuyr zaGm{2imbotzyBB_D%!}st|octj#wbaDQ+HVyb!7i5qoyj@G={|5$xNB0c^^iEOspj z)n&%8mZtrsYgRAq-xI{?`iNzskq3OQpY)w@75o05SienYX3jIqd0GLq^Ws ze|Wi{Fxlos@)*Cs&|AYvPVa4#j?}dOf_`%FL>;kswA;F z37e?evY8CH2|zDQ_+%&<%iXLw5{$Q8dVL;!rrc!_2mPoY=16JtT&(JRcxIko-kB$kzU+0L8W)P-0HiUFi! z)9e8>Wrf$#`$(e0`5-Kpw*!BEH{?M4)g)D_beDog(2A} z(S=*gn_%ifVUtZzZLq*1!l`#2f_sK82cu>-f>K!vSwElnEcHflv8cf3xO??v?{kG@ zKLsoky#-0td?xCg&R@MIUq%fJxq1Krqmtq`!`DwA$FzYQD=-Ae;XX0mG5* z#;kTfF2u5t{^@oF8Y>jBsI3iR`?#Q`a$f?wn&38j{%y(5rOW;ip!`L3Z+IbRDxiNV zjU1N7Zcpc8PJgdeut3rgrD&9ls(1) z5|G1*LoC#jg% zI~#{&@Xn?22)3VwUAz+G0UFsfeCVlqGG)J~UBq@jn>;|r!MXKpyA@hnU0>Z6JbCr6 z-W2`rmimh0Wmn$6^a}*uY0Hf@-?es-*dqlm>iEH{E9f}BcdbTmhWybEZQaQK_RlBT zv&B>Kfq=K~LpK30aRzJzFgtplBhq_~Cvk@(;fI9nnMF%a(% zM974(5q8Mk;*f4J9bkT)+^3m&x=E1K+3qADwNzn?4MBUB6DKU!O9LBnp|&w&dM>q> z6aH-cLm%mxMSk->$w&Z$)bRJdH>v|qKc&r;WvR53uir3z3jqrG4AdpB1kse*Q01Jg zMMr7qT7{~J;cD0( zfVp!UCtp&Q1t!6wV&p9{)K^m6dWvHcIc$S3h23o7l}`9*jbqrG#b}*1dI5%A_Fq`~ zH9-pp!SApuv@9gsBz+rqv_2ygdR=BC2m@`Lmll_Wf#-~0DqR6T;uo=6i}!&Z=ABqtvU zS=N`QUTIkc8WkJh=%rG<*IWB274Rr4j%Rz^lZoqvtdCoC&}R=hw1}7W7 zXrJI`TKmfE=wbspu0Ltke6Yl;OF_NQ>mYqlpl*tRAp;k~Fn-)ShsAQTb&|?Z>7|o7 zzd0Zm`F z66$!k@zdt*Y0#s$2M-wk9{}h;7r)zV6K*9Q<5s?YeE^cr^`z_|j1K`2tjf~Ag(E;M z`OsV`{{jJc09#NkjgjWGRX{2n-{#Im_M)_~b=w1U@UHCw8dO*T zl$GtaUG*R(ubm_~Gx+^<2skJyP#y>pQJN*!pP#ZFWdNwy_to!Xo75e*sbADouU;Ry z$LiU~-EQ6IjQZDg?T@G)$94ZjnsZ4+li&wUSD64}Ea>m6bnY*7TyPQ?&^{0auG37d zaf2Id0=sCJtOU!iWwvF`Lv%69MRy_jlsA*NfQxj|26l#^?5m4FHIUV_6=KD#RNiRmkj~!cAgIa()F*86N6eGxGNGs$%cVW zt}z7^Y@Nm<2WTIEf5^~goj^M~*Z|Z#*_y4FuhNXxfAthV9oLL$Dp z%30=9VxWy+WnNC-L*pgCh&2vmXmjAvjy)z zgN>_226Wvzt>l1KcF75;k3PJY)$nzz*H1_};SN*X_JN(jQ^afl+SE?R(l_2fc<{R^ zv7XI%DkonzRg(oB5$Z^FW;uMEdk@IkTGjxqT3-aALJ&qo(U1(-{YD~(Q$4Yr?YrR;i(Q@|7%`hX6mcn@gfRc3&roM8@F zK|ikphxmj^U?;5{1Ut_z?gC#><~Z*7&;uOj7z@DLtmQIJw3-5X=wc8!!zu3IYs4!+ zjxCx|Ce>mOr~+^C4!0ngNQRP8NY*E_$sa)c@5bxnQK%oNAF3aKyTA4azdHNB!k-Mz z{p#Y^VcGw*?8>qiA^BR;$$t!V@Ex|{O8+sMz;~H%@=G|t{Q^zr(O}iT+yQHQnj+uE zQ7ZZ_%6AbAtSBde#|Z#UrG8NE2OvKH`;YFMM1bc-1bE(lo<|7+ zk2(Vcg2CfX0A7x!13-!I(iCJpV@(1;7w!Pi$)hO%I%uYFed@6k0Lyub7T?>_6adS< zBn7}%IRHEb!2#eA>;K1z0FM#^z8di7hkXBJd$K**{+rD)JmPO0jm$`-UEVE#(bSPhF)f zANDF(6nd#|fr!zm8l4v4_&|EoBA&Cfzy<;14J+a=={1@G`K+GXk{ly43K@ogVYkW| z>Y*k}*s_!XIflvLK-kj2)`K+MRB+{^O)!lUJ}N+7ft`ci4mKg6H7mo&G6zHwC|EB| z3&&}dr@#X9K#rBJG~|T2f~%-JkqsiSkfX7rJ8rd?DB)I?$8dnN4`lC%Z6!^=kj&zN zcqdX!*%n+W?14r;=k@ag?0kJwo zmJ)Cx8=)CMTP-5TsQO!#Mw%adQs;JNzxSNI+$9fohO7u6UCKG^in~C9hy_F!T%ltp zsZapcD92`vW}iKRD`Gs=gpVqHY$XpiCa5Q`-^4U?lY6~jUBE7Q-0>61#j#wJq0 z7>JWu+}Wapj}z_y^8pR8jaQa%@w^x+*-ax z<@Nq?PoT+4Mu7qQoLxX0yOaYrq8}&5RB2l5N+~KI3&_()8R)bFRPgyKSi!o3if;kD z4C8cF|0}8=7Ht>%fEGI@BEdcD0~To5N>F+Yw+4?$t-|RP5U?oaX@)XefU=$EWuU}f z0dHk$xP@%2zDN@wO~;jB$s4JJMccwLAZG(|8k!bxo2N&2G7o9+yr6NUQ|H}~e(&WC zV|h)E7X{nM0lXg`#;v}006E6ZLDL1be^t+ILqN0xoLka*^z#QWsFWt+2sD6LDLs1F zgy&#?6X@W&T?Hz?g`@TsKE65`WS#;rCy3A68b)+|S;VIn@?rnF%2Uxk zI0>9k{e*EUxB)b167am9n%4E5+6N{781M<7Qv^H25sP8jsm#gDS%_{%m!ivH>yqod z1FRF!wCL?)`vnxg>@$y@*8YeG&~26a$$5R=E?{R``xmW32P79cpS%jo#-q=c-GF7C z%kC|k#4WuqLo&}o3br59eFYWz2AU*@I?Zv+fjHj>HD)+w2LZ_ThmdG zBPi>e*2ZCej&;s*s<8F`F~9;)VvlVF3QXEdK!<&waiGHcOyUap37|ku%50ypLTUz| zAqgO3N{~6Oa;%25KRY35$UM;gicJ8moHtjh?&37wZ}$NuJ1!@j`4lK^sJ;M#V@Oyd zHc1nn0;$Hl1KPAw!7ct>$vZ#?PH=KJ3ny%hsXkxTc{G<%*K<&lC3uE*5g*!_#>XMQ zURJIQbz%{C(D@=fH9JbRUqeZ51>vC(++g7 z(;d!ikYRjWt1qdS;2sgylW2a*(jyS|YH|grC3iHUWCS>R3}B7U5tPZ{`+{gY1zWA} z>-v2|ka5II`b`&3G}=aUJl`*1ysjCfPBYC{u;5>(&z*Q`ltr*pN+~mG$2G4Ov_6WZ zm<{e0k=8Y_faDSp*cl})t7simB~De^`)Lw)bG`z#bF3x@9I%5#z=Gzjh%CLj&J@1h z^)awW4Xh-9ZkUjRKD0@!IVmrtyE|S~1?+{K>Ny(eJ3;94PBv|5EmR`{8QD^B#WO*nz((f7RO`&q0u z?9ls3g-=O|jA8s@T=Q>@st85y9hR{+#(-GQQx_qvNm%{*4BpLUcUZ7ZwBQa5b)cw~ z@oEv=TJ)YB)5bR3LBz*Ozv~_yHP5c4VJ3?e{hQl1PFgaZK2IZ@%eWch-oDC^q6MLN17)yw5wkh z^}RoDfyh}*=`Ug27-bkwg%_Ul2F>+BbNw8=N9ug6esPbc+g+r76cQ5T=%5ZPCf8Ww z<*)+Y|6|}y5w9{3h*~zT`&1ohy6- zPwmTn_*5VC{NfA0@xoK^?9syZ!U0%zAvzijfgO)F+dg2559t9uW<=MC*apP!Z2kO8}v~dJD#7aH@j*;PAU=6+kX~owb;kdY5}W zr9QL)pO9xA@FB0W2<&2>67VM1c^#6zWM#4glF4L4l7(a{*_aGL{Jr>F@%JD;5g&

          twI{GX%MRsuzH!ob&f-hKgCj$7P6O@U6DfOb%HzS}4>|zQ>Gy3F;HlIBATKAar{!>z69FI>2mpKyCqz7l3%%q3V1WP- z8~_3Vz=8j!1Hj`1fQT;x{+s(RSN=b-^nbEF+5QdPo)7?@Z2w={e%w?5Uqux7VFZC6 zH5I@U2Y@HrUvFCq?(^9HAN~A;1Ob0Ra|US04HcNBt#tBtfalB?u&sQHUje>u&g3oO z3*vTOu+2cP4ciIeyZnOv=U~13g8dfoJIwL7fb;g>TORBmMIFn37Jhfjt>5{>Z^6Re zKfk@W2I9Bkdb}Ev--xH;t&p@QrKAIrOUce;2XHj0CTD?}gd_wvE&!8U;2_Y=O>W_q zfu93!6LSeTN|kAxIldjZu5j@U7TF7oG3-i5O3dQclm7DU%FSJjvISRsya7}=!)f3a zx99_uIFky#?3)wU~8 zvdK#NJ`2hi>cDUah|U9f+sF)1V5@nKz?w=DlnSu|%_RyzAvw)!KnI`M6(B>=f=yuv zsj=k$K@n3Xr$EDP?gJfmf!#nKJ6Q|VxW@yqOA3Ivy3_-YMYYcnU>?sQ_(9s*4FS4s zRDqIhv@zVeb`V$W08&AFV8Me^v6S=~dhx)1UDpeNqlhN32Q{~rm&taXk<@AxVAA(? zTD4YH2&us*xO2lDfqP!B0oV$CH&&~3*a7YWIYtvt<>7w`0OpGhOjBpki6OR?(?AO| z0{%SEH>`eCPYD37{A#sh90E#gHwPK(qGm*CAj|L8w=EuOvpvc^9aK&YKww<*J`VIp zz<`^c+CBw(Lw(nYQV>`GmRq^XRC(AAlLv-G+-Ojj8aQ|x7J#$LwLLb%DiL;? z%9_u7m)rre3eeqFV7k|xO>DPX?!E{MSt7pgEs?mTc9}e|-mcLCcA5*+a6l#iZrl92 zb`=MJTJe+sZD1SibIM?^+UNeg>Z7K95fj-Z9Pn-dRx6}AZtJD=>co{n4fV4Cd_+<{ z#x@9K=%EhW<`hL>C08ipDHwu!I)FB=?v3fipAT0sPAZTbdv(DA*S@W7Pz>l+1JIR_sIbewNpKk)aIS_fWU(@p9Vh8h562#Q?p-L2Sdc0Tp|fjkv|X13fG35RhfSwyR{J-#Veo=Z{zYe(aj|mvnzYcN_XpLsXiW z9tW9iBddU-P4XI0vA5U?)Od#ppq+PYJ&>bc?b;W}g+~MaUD`JR2Bh?KE9)Bq_!sS_-GuD!pi!U_!s!tbM2YO}_x$bpkHdNb{K22s$W$r3D9USJF#2ur--s8kSElKb$!Z%l9mQ zb@@%8hhFOk?la3>{xA04KRC)e&+~hI9@-B*Jxy=B-P3Njdt{A9)@WpnqS0s-jYg|g zv|2{15KgC6=?Ec;R^e2N!V-=mgb<1&6rni65tgF}A%qY@QIyL^5y#~a;&mwEIK=BA zgmbZ+Ls6_&tJCTfowlc^OV@7t$seE3w_D(ucy4R6Te;IyWjB(#pMIY2^L@V0_xpMO zQsBa;5^Yhrh6$?bWd#J4yfkaScedVx`YI=_y&l`o4{U!U1|;^{_+3{4(#rN-Me74A zMiJ8IM2*}vmylj_o;V^CKt^tG0jQCi97W6VM}e4((hjVUrUvLC$0}!tidFWD*Ug<@ z*3PR`xsF-0)a?mofv9w_9a!QWZla2Hh4#w!yw=aT{cO{5Kpt6pj9WVtZR9CcoKzx4 ztZ5G(0x3Bzi)cTdM8}^TRl<@HCu9mo2y{^@&dDKdh3s}(fjS9GKaiCf98pk#b)AQN zTABaqs~ZRMteDbyMGgZ=F31=VVMrDGGR6RqFeQ6Vk0)5N{q$F6fpgaG8hKMMN8~-A zLC(;OJ_lFqcs!6XJHJf^*=EU^wRxuu0v$3dLqL~!atV!o(lNVKi6;m_a1lpcRYT~6 z8L!vLIlF3k8<#_szVGJLP8t6M&20BU4zXG9OSx(DtvLhWeQCFA{24l5Qvym%32?NV zlhbXRXSn%qNLuZCZt8v*Mk5^xKnFF1K@KuY8mN_VBgrhes3fz2cTq{cT|b?PZ9(qy5_zH-d-HaKLX@w4n09iTAL%=7^B9-w`#?Z); zEY&sX>g!jk5GInWfLvk^4ZtX!)S*I#64h0vTW5x-mnI-9vs?y3G#W`#?@HfBLgz$M zrldq7skQqw!UDQJ_fh9Q-Fw-H8+v{rB5VehNlKlK*XoF)l*@S|x@I{eoj^+VaRnv* z=fT{%U@Pk2R-kNzrVNchm?VQho+1rEGoio{q?PbdG$KGF9uT43oO_BDBD~fO+{lq* z7KqRyXMiwua?{!&f=2EYfwNYh2w6l!8Fd<)4^EoHK>`ngOGe+gV)K|RAyLsnBbPuv zWsoey@5T4W8=?OGn^)e>#G@$dkP3U}Q9B5;dz38~{1a-jJ48+U_ zYJn1ufjxZ8L7>csHsaND6L`pNK7n8l?{fr#Hb$5M&U1=SpnSdjVflZC;9zhvI0?&d z{n>w#`yKf7KmW=8N8bl#gMY|>4Z+_DE(di$hBx^)KwdS$kW<`8&GOy>;7;KmC1LZW zEI+0SO}%TgbjQP2+Q*k z0AXvVssn%$Bz)FaA^`NBe5pbJ+dwrsVYLIm^AP}ge^ng-obulhhJHTaU#&;~vVi{@ zF<@<5+x|J<)(8M=+h67Oiva%@|NbJt|Ca^)uMq&&w!ir8#fjMJQP`NXvO#oW?5wEV z1UI0}7r?93@~?rU`4)d2jR5%ffH(Pp{B7V3d5eD+c!Oqk0N9$x#0ZL<+rzWrxYKYa+#TA#(9-GygO&&tnI5S$K<1v`PQOfw8Y z3m*nPuqeY$t;0p&DSJ2rd`^ZY6o`)kLzL+Pb{o*~0Vn7MhB!(;uocZDy~8YF;BA(< z3QV#{GjN3zt2njB(lNB?IgW!Cjom zqAGfHGi9|j*h0QYDNtZPYBt6ZYNp>QKuSxl8o zSs>0vj#15&bz8q4zjP4_=7AN;G7Us%=6zI2kwt;zGRSTN;x$hl$`obBT6mAOz-mC) zDRbsnrU;y88xfFwOzKZ)ixd9|-kyhX^MdBdGtuz$1g2!@jE6~E37T6;d$Vl5aVI`+Ub7m+}M-qsz z(d=~RY=NlPEk{*NqE_=Ia|}q*zN&o|ZNC@o8CkKul)Z8eNO8zA*<+GHvxJKvEjT9w z2OK_N5GXQhz+H|-V8O1(1FEG_Rf(+F!Z&IFZ^R0P+K&6|{f^k+qAMbF(Fa86wWtKA zA#qU@?k6=J_1S>}kxBdZvME$OxoGcKC1T3d{ ztPnX=(XXE?TS2yfD%l^%0x8sjGz8=*F=wr{3GL(efjKl*X@%;F9^zb*ECVLM(A-wI)l3=@(O z?PqvEqi8@x+R|tv?&z$yZ6id~`jb-v>bP4rSD8EqfDj3pKntyEIj!Sq-u5$Z$L^H3 zWhzTeCjX&qGW~RMFWVP!oOA?5&`0} ziQ7PvB-jXK<)+*Q!nDgNAj*g-qLnBLG_;|>3uq+53ec)RyHi9{SNU1n z=WTmF-?6_tmFu{@ZZc<*1n+VaylYaDCGZdUxBMws$GX(IcHjgb1)l+3a+y&eE@S58 z;+}9Wi@erc4RS{CtF?^eI(za&&3ab}O^wt_I|SpL2@b(a`IkCgD#1(Xmug;m3UY=f z>OqE?V*wbj`HWM*J4<<|jK5^BN3EY3aZNT`yIjIiC-r$z03&kwcKkIgqn76S+>hAY zpwpD;b)v+QR{7NW(NR0k4}nI>OBsmEICoI1W>tVIK<6BC9PufGBj9N}nvJo%Yv*~* zh-$U=`4VLV76(P0G^V5vh%zBpfTZk}+rSEK^a8zdhXmCqo09eLX=^8)6KVfhK^2w? zwxq1!US|j`?zLby(DqvLTCN?=rASbMy}D+F$yleX(qCPfnvr_Zis)PR>99q6nphbsP~ zX!J)GWRHz=WdllMblC9>8(`GS98e->R`{VxY{+M5ELsL=BcsF`xoiZbPz6|Y#DNxc zHmi<0>d?|f3qHsb`GhpkD(@3Rofou!mfXF@G-^>Fq4K>lQk_T4u)tHm$CG{b zxg0ugQ~2DH0g6bw;Txup)K#ekB-aKe4D8Im$Moz_1=4OXN^enj2R`23#(q5op`ZslcsAl+gOv z-u=GKr+o5+fdqTG1;k}DI^SL}WqZf~<8tLS1Y|iZlPH0499UwWJjjF*{-$gtlcSj> z^gdByNRf}N9c#d1ETBZph!&sN@9wh^jT+MNVw?v<_ z&RGWlX}A5G6CKOu_!zP1s14pLu=e^>KK$>D3QXb>Q7!x7CY-*WtB!QJ|BHav1oS6AS>2 zjL2=^D5vPP^HGxQf)U&EWKcoEG7w|X#?4-Of%^<_8@NwDhk-nIco)52AEN6Cdlu0L zTw#*iz$13>7>II%5O9ZH&H>Y$r3UzbMZ&-tRKQRl+~O%P6MPt4haes#gF1M2v;33t zT`0B}w-vX*AOAOhykq`2{G$hdI`mII1@Avtx7+(M1c{(N_>X}!wK4=`_%>UB*J+S{ z6Zj_ImF-j&`6;Q9e-%iQmEWYQSpOOucms_neUmESzZ#HUUC(sDb(pARS#9;Nmix}? z-wB!=@b3Womr1P#{KbHMUglNlq5|}0ifaxAgPKYfcw55tU8_zs|Wz< z0HF0(BQ8jUUy+~h0I=aX0)Qh*_+N?u2=j`yn~MNY0>GCe0G_x0cLacS73Ken4gk+v z|Lges|K>RRyhyG3^Dh>wt!-=D+V;=UwnhM0+x{}QuTt{=qSqHc|BHbBuK@moKQAF* zZCl&^;y0aaRVQexCu{-FC<4#;f;`m;;WzjuzeUx$DoR3{(FyIZ0x$C#zXtNUIRJc{ z@5_Hkh51VjZ^;x&0JsKhR-nw=;BD{(=Ktx!$3Oi);ZNGbN2vgKDB~igl=F5S9urMXxYI}D&^mH4g*PcvmYpPo?5iPy%Ttc6C49>vDFF- zVX`2fN>28Ici9VhQy`7JBP|db3eAM#@S6YHne+g>w)wTa=~-BJV_mQJ8Cv+62WljR zs?_pQN7V^n)=CPUwv5*z9mHfCcY!ed6$M5J6rKk58W38G7r2Z?R~(Tv23r%ru-^Kkj)s>EwR72)bpk>e1ml!&24 zs1h({*VDJ`(k#chgj&q*2No$wlqzu}VL+oN3R%_3Ma{0}tc+QEhtVv|GRPpR$ZRBU z1<@wC3PkCZ-Kf?16EuTSi3oai3+5@1lzpbUjM#DNS@&0f4Oci!1qC1}TUi21merUw z3(td)E3AoQ{q1{a4&C1>=_W~*-_;w1MRX|mG=fHSC1IWRQ8PIk>@E; zEA>QxHV)dm61K;jkt$S4=HXePTmg`|;D!~-<|zOnJywgKYBi+xJ=v>N@OWI8)#`o3(gVXsNHXioHDEJkQMM<4z|Z_ zz@r>I0+y{{=?Ak0Z0LBjWUpnrzZ_^>#FGvnO^!Jrs@d4mM>}DV-OQNMvcyKTAU0_2 zK8Y&aw9uZw1G&I4VyL5n0`c_}Q037kyUrH?9r3Uhf?7F)0`%i{-LzLMSfRez3d^G? ziRkkRacYTK)WKp5$g*F?P~}(x%=i>JU_Gnb_C9Zg`8-Pup@r+SKrIK&*`iV3&bM$XwdmNA88jwsN|lJ!5`j3^_!?72CM zD)w_Mq4UgH8nnN$jNa!P(Tw7AKvX990Pt9%1?Z(3)#3IFkhS}JMwP~dXb^qAm1GkT zVWXS|!ZKh)(FNwf$UD$(*VmN3GHx@D2^Q`7)Wi}R^-}`k9Oe*^mK)}H5VrZFwwtNm zX{#Jx!CI@^faFecKn*)(6iCQMn+L2=sP;DpBFcWdk9Jr)MtI61kYHG9fI2zL9w1E2 zq85}OF^ES5sf(c}kM7 zMIlvPD`wH>SqT_nfG|*F-|Ob@9-cU-qm8JuLlej-?RG59Mu@C#5xXW+_PJK{{w@PU zwo=+EqeNEq#}XmQ*!f*TEzV;=6SWjT-jjpGfnx@k=LrQa{>x%?*bX${vjp_A%hqD` zHV<-+4W32ZlsSzOjmkh1t%QMT^DZmNpq;-vGq=uA;5S4@=RabQ_?qC~zPAWS_z5VloEJG$Qda>ct~ z?`uRI%!Wlj-^oEBqRttWc~+H>JZzt9r+3vkyWTNsl!?Rm;sZ(I#DOHcxD7;U2p$4U z90T&q1T#R5&C^|^+zMrzCnwCA>Z%cuv%vxw%@1nrI+l&< z9U^5>XIZ*|FiWx(q=RsvxrpA3*-j2&ns;S6w`+cW|fh@eESYO@?3Aru!#cD#Ct~MZzlv?;}TTD*qNx!&^)P-$Ek*zR7o)1YRLSFOZ?0f1Ro#-U0Nlkm1)s zHi!b_4mfv&0B4c!6z*`5qJY~^H44BS2E-8nlC*)uULXK$;AP%Iod6o`JR48~KpoFT0Q_76z??l%Re=ACuWQ@d_VYL4tF4lLe)iJye|L;cH(~RM z@G4cytT12an?Qt^)S;GK{XmKu27%X1`Q(89*Qn=j0N>(!>;h@zhnxVKE1--GqJ^?SnuKnHW&1!-l{Y^M9ziWW4qFscgo ztG4_LS9Ht@2xjGq90i=Y<)TgCjR`Mx#6%0#cX%Ht^27>+J}ICP&lIHETZ)weRLlyu zy&OafzzW2u#s8o!)LZZj1WZc{kYd_0gNwF+*W=x0?_YATyA>#$MPJAm{VO=7yk|#Q zwzGRm7A?G|s4BCXtN@U}S@)I*0}-jC6V1*vH-bO`Zv`%0;UHxFDk3B1G_c>u3r;tP zy@sr?uuKVLD?SH-T2d~jzM?JlsE+iBRr_!Xwq+n`it#XgRt(cjcV|WH3K^cYZ_Ls@ z| zV4M~523)Fwr)2%3jUxb7SajBn+w@dT6|ZWyD3A{p_zbmN{~RqS`#?$yN-|RE4_eTS z(Z>kTByaORkRvZ0XyGZ30xZ7ur-Jnh1w5yD9|g42DB)oRI92IK3dKgHjUo_b6c1Iz zYrE$w*IVDOpPSG^ue33Vhbq^ca?2Hd2hi;G9-x~Pd5~Udx5Dh0^|y=_HH$daG5}e>7 z5NE>rU7hp*af+mXUK^SSKHK%b_@d^nn5}^*wyuJq{G8+Cw32hBiSM%V#_q>E8hfxQm} zoYO#rZd3P%YuR3F4A3oF zKl13bXpb=UK#57&fdcwXdR#^t$;crf$#FT45*=>=X*t42Kw8dm0F7Ge1>y!t#H?LQ z7Tw{TBsLm>DreVQ$%e>?^@}mRKOKOK1MYJ6Twk>FNwU|7ReR|H(wvdAKvvFj0*KH+ z6H07sLg%f^C^4o4veWL{8k?s~T0cE(^Q0B>EC3xOECOts459>xF(4|#au)FDmPcsj zwYqtf`P}+;3FMlc-;kZh4kHo`Qncqs)Bv7irbxcbc_1c}xPDtgBSJ!8V;pkA_BUef z(#(>%*Cbg2(p;8aAjugyV%N>Z0VrWY$FVMJZwqvh9aMqLGP(|$2hwbpO+ZXKP@r5L zcM9mZ+=(M1xOv-x5w+rGvE5}35pgC_qE{GLP=zUj`dpBMxagSYiG}qjfiz=2XK@)Y zMevF}Aw!jX_buprH-!TBd6272Tju;71$AY!Bl3#QUp;mKZhq#Iv+JSM-FDea0!Z38 zQKlp{_PJ|zwI@&jyB>`WihvxF%fx|ZlK8+fWoGO+4{4jR2c1WRs5son9XUb_*e;Xi zK(=DaVb92LK1$?Upa9e}sRT+R8YC;)f6oX89!F4`ZZ8ngd6jIXn=sI8<6g;tz7Vk4 zj&lShN=88@86pJq(LoqpKiS;dq7y<)p!2N^5I4$Mt+e3-N!f@-93<`fm1wtDCAztF z%swSRh|V+HjH0trnWdHOIF-T&TH3jXT2kO$JT zpDC2cJz~H2tsl7gR~bmsM-s@$8TJBEIxGrL$G>hnUkCnI$qDZMR>zM#F=+<67-JVO zD*dLst-2bx@j%<9#pWxXJy$V;knZwV{GDM zAV#}%qlD2CNWWc?VOwcC%YD!KRYcnCIHTel!2;l;%JowZ51$%c2T3<2kUEM%4(Kx{ ziAZI>U$!;=W9hJd)Nkiq23zgGlvO(Nct$|*rQce*)?Rf!KxMyr6+-3=&__KGl}!wz zP8fQ}g~Sn;m3ZL=MUWmDX9&2+v0wyZt+7HZ4sUL0IR7TFp?|~M8wOxq%vxHlcN#%hzHaHkNAXZz$P1K7rA3jA33fAle|qD80Hi; zK$(jsKndID>v;-%h`NAmVv-Q>DLx6{T~^2f_ZcA%3|K@9Xus1I~e6Uq=9V0|nY! zK`P4sRf>NH{Oh{9qUe|B0sb$)c0d0rKLQf=_tj1S&M9Cu5uh41pb-QcRyhH*@FfQT zzRs`Eps!MoMgY`4*G^xT*FmZd09wcOMI8Wq!bSk_pCbUQ`;ztl^9}$~xzDQ+0M7&e zUnT;)sOVn<{@1p(ZEah%tq}m$w!e(+pOp~s=LPp8v-~db25+$gc!TfB?*c9I>v9qJ zA%9Ii0%_t$@_RrNKjH+C4StK1zMtQPkG}Q4{r(>wgxt4thkiN(r4LJ!rCkvGZm>Q0 zcYv*E=6oZ20}r^!4bG!h`(a?lmTx|JQy`Q%j4FZ$fJJ<6pbOh8z!0ASu$|4C-EIu( zcCG+WLqGGtZ3D92W}G-svP`yn#MlFbnCCEXibtFS8d;$cxWxcVKrQ>Y40wFN1W3OO zN(;zkdC%Jo@<8Tf2_lV=`bZq=2EV<(E(;sBZg{w%4Dv+Ia0h7T7&Sm0!=!;Fv!>o| zz`rT#rH)WV*#M9aJ}{;4qG;x`0{Ev{Aq2sD5U7e^hD|`4J!DaZf?E3*@Ia>Zdt}rK zQ6BZdJdl$8%mY#4WPk^hf@Ktl4WUs03Q*>PWgsO-*#{&TtSF$gkfVj^8eE(}Ty#Oy z#U8*TEgOLdWr+hHTEQc4ecH23$|AF7sTXFRYGI)bXU(cv&k;6BHyTLLf))shKqtP0 zK*kIRSu}vyGwa_FHI~)9>@@!st%Dwi7FPP1MFIFn1`+yBEmkS+Ks5@$3TrZGz+v8H zY|3_`XaPA(wXov~B8wHBh%2Bepy`v52DHEvL9>p_AZ_-!0=^MF@_d9UavE@Y6L_TW z53b>f4}^oqrr>BX0!$yZz&wlOfgN`JT%bVFO72Nc$O*tFD_N=*qoxp-UY3F-AT8V2 zf-3sej`*o5sLEFO(Jf`yF>j6rA!62^ozw!&N}P~mdIv~2C;_0b>bkpveZdNkmn?&Jw`I*PRR}X)B^PrOj^qK|!8|_5 z0Xx2w?PrCm8M!)I6i5QK)Ds1{DtArM*=q&IWxL};2AYJZMF}=V;1D4rknF$*q6}1= zJyb#FnH{)BD)_RABAQ99ilGNa1d3M*m9Ai}CGVmr5T*sa1F{>nz*Hz!K^h373U&{q zA62ZyflU;Mf{a@K+FdCSyDVgndTZ~4K-m=kWf>t1q~&drz-AipfjDz$A+K!F3m#)A zkfA`JMlbAPD-n=M6o8m9MRnO61FDKWPY&qk&CMfXh2cv8)R>b)jy6gta2__`Ee-~f zLK8(J&@3?kWY}r;+eNbuucHOMKcXNfweTuq)^}>b3Nu>LOv_RD z_M+|6oP7!#_0S?t(rS@$eW15;8>!1?bNMX}K-(qe=Sdquvi3Y1vjTY9fT_GGR5R2n z5G)%F7=!(2!S4W&<{FbgR^I0WAj@^R0%YVC?*Un^%KLh}GKD$`^Z{`;8!+7@(?FE0 zG(d2j&v^h|uWXZP_}aekaQGC2{Lts20t7qQ5{v@1(oQ3gbHoAbmq}GzlDAjio=*`2 zK$8?`1DaT27aEoD6lkWMP9Pb?f(WetX#M>9yRiQL`q27Wpp#nafLWdzk)hjwf-X6R zI{LH&5vF7#5NBFke>nie*)8XRTDi$?pjK|N9mvQHQ@CE|4p1lWnv$)ZMf5qR^Nq62 zik zWaPNK4W#4@M}c|fNdZp?u^H$jOdc4q<8TfLwR#wGL;-)fK;AOmEn%Go*$fnz6U_`B zRpN%c%QhfPt6T?aS+M7_0y}M1Al_+xGGXVt)1F2}(iDIQab^LZHfn*043GiRMz0DR zfojh5?Tyxcr|tMVZM-T_q6SDari3_lsFQ&BTmgI;wXvz*9Icd~Q)lB}jUDG!+poIl zK$IGBkuyhuxO8$B1uC0>IU6S(fg)}D*+!TJAjuGMAVHt(0vfp?SAisBj8Tm^$?CjI zcA*OCv=!3xMtzMLZ7prHpt1q99$`0E6eCeGZO1SNEZS@?%Oo)%Desa*0cQPtu>y=K zF#(HU(D_T7t|X+6qa=VCB1U9cvCnyxNF8Ulo&&P90?1+M#RtYMlEgV2gpADQ;n9Zn z??oW4(LHjIPE$PlMuKyeYb8pQT9lBe#7P$(5Vmpo zeSBa<&RGP9i&iO$&W$~$fUwPr^DI*U#*HB64Bd5Z?Ve5gEp0$X`?-uVYK~m0&h*pQTU(!Mvw)+X8#<>xt8SsurEq6DswBz%A*!K-zTQUkLsi z&v=zzm8XZoBOTV7KM)bw?24i$b_?6)fp}45e90YpNQCgj$9PLaIQyV3=D^g0*FwBt zhf0=!djW(ikpTY;LJ{|4%Nlry_!k?d=546jp+*xLUheI`?&tlJk`~6PkWr9N+zYc;1!6Jrl+#KR^$u zGSKvwVqSSg;1Q$x3V1B2!I!xDTxS(3E{T1R|3z@D2aEPS+w)M{3TTetq1e}38 z3C$orhWjx_Mwt;<35J}NXYcUO!f7>R023-FQo}^+=oghjI2|OxW(Xu_q%gKZa3UTV zdIm~Sj;>*rxjp==wHh;M*>c-$eqGQmD=c&MVKw2yL;vG>0w(LK|FDzwh{F^!_~jh; zwLj72SxL^}0H25PC@^Qrs$_|H%kbX~3O7Dt1suW)-*ba%mm*Bw@Q-98(9v^;Oa zv~hOue!?-@u1!#?>s5Q*ng2qdm@;5_J*$_$c&2%j_>@`%MWh2Xz{e-lgqK$Nu&gc4H5+Zq&*l2`%w;~RCO@4b`pX$PreZt zoMC?7)YAPh9bs~xrtVFqk9Ov6Kg;?l@F{|2A4eltD=h$vwRe`c?Nz2~f8 z(9p=R4kfY4_N-0(12|2*AfUz`!%E565Xp23qC8QLc?OP7DK=ph*TCEpB6s=Vuzg>MTxM{tz zYqoiH9~od2LP%cs-X@)TdXnYWSeqHfQDVmIaJHBf+;Mz%ZZ%oK5neep@z)VLWhQa> zTtD@RmESo^zogfOD&pD3Fo?1$eXg@q9=G?MVv&4Oj^dJq$;MG2=x%dqb2IGT_4C%q zQtOipeKTmr2TrYr9|&^1H9x^SL$hYo1t^y|L>J_u9STDC^Dz8{QN?S7P- z*J=He0qW+r$3;#+$!b@>4fIxDxsy!8!LCWLks( zolRg3&HbDH<2?+F7P7mII*pKg!%|OMOv#b`u|E>j^?E|t=hOTraNGg6jtIW@Mxa|tST}fj_FJ{$S zlV3^p!K56}-WxBiIe(NzAq+G7RpD43QIe9q2~AupM|_DBBHEnimqxSzdj@$)6xqCM zWqsOKDJG7lfo6l-kvL@o~V7{5v2q&5QRRuAUJs&gFmL6c#9DHH0F8pL~r z9z?^1hGFPtFYG>#)EBUDvkiQYIHntgk-&@J_)7VfE9Cy5Z;Rg=UKGJi6$FBzHt#j4 z^$BiUFP9b^F~jN$y;;nSntnZ5i6mm7LcCMd;QjJi2%sQiL=;V8fj?T=PPjHx#YpUq zrP9Qi2YPvscn_;+>4k_$trg~sazNR3B=HNkKn^;b(G@U__zd!>_!$GpSFsR?<)C7>duxGqByLgF$}ky&;*2cvUnW$ z>WqYAzzv)A+#3`}A%W$`D;y=avInQM|EeIIILJkl{oj0USv5mq@=WMK$lLg0QtAa; z0&S>34(!w5o zpA_B)(P6z68XzRGnJ<5MLAkn8^H2oeqq=R$^&juyZVm5{9P?YvZzyL@|AVcfrUPi= z{Tx}afi)AFT3mW|NWv7T^EMuo(;~Zega9eVw)CjCMC{3q6lvXBZz7j1w%SP`tE6X1AQPto@(kN-oP}eh zC@^VuGNLjoupg){Im-3RLSM1a#W1IRl=iudMnNp7ZOQ|mqxvZv^vw#d)%}IzR1D*{ z-JpdkrP0)mAd{5H@B3+q!7CtcWLJx9x=hLRD1--%v6>IjSVMbM#{DPwHDO!)UiYHz zhZ~WdQoh-;poQBGVrRLpD@>$-QBlA|iaIEH?Kn{!R9;v2C z&)tC+wSx*%lJ6q~Oy}L9EbhP+0SE5oEhHB0f z@RrUi{}CX}A{OA6td9klht|pL0IWy>mYm@0pg4*X-BbX2u*~8G294}}iOHK7da?@p zA=PmW@c8WHxctFT74RnYQ9uQ7_YeMH+4IL2a|CCm{?XFyf5Yb6+h?k9YQzI|=%YR< z&~giKGT2tRO;Cj)E(IF;2_7H*VfNyfMgIII{u3!rZ}MSw;}G(k$Tnr4&VTq-FPR6- z?&VJSOs-8Gd*&??-6x+ulAf4{aD`I;f4mf(byv!Oy>R{WE*O~_(geJ#XGpY8jJ?YH zbo3vy*@ODZP6E=e@Y>T8r19c=yFmcKz~}IU0cxnDLs&C9q#nnO#B5Dl5I5o)UH;Ph zK25=s7GG?_tu^(e$ z)l}yq$=;t$cr=>%O3bOA4ngw18PqRUn6Fz|72Ct86ar3PDJNBf6c|4v8iU(AJ=9vN z$3DQ_xQwvgx~g>KBn5wNtLnkWZ5mn&7i@t}!8n9|HcTYpbpBo$HApokNivqJ*a$#BR8D+FY`dr46N%P1sO zt4Sv>{%D8AXO@Q0@-Y6gkn1U2LO9t21&k!=1A)>ZPDsayc$GAG%7GZqij*Ws#&W%k z>c;FFFWU=0=znJHgeiS*^4X@U#aZ#JzNqqot-rEHgY*}w(&Ge^dk^xzDy0^2K;Igm z=)b3P;mf2QwCFh^+?Famh3SU1vFpiLK<@?L4m^Cv*EV-w@uuM8B?8g@8SiX1W5@GK zCRYFUk=O^9OX_X3+2k=fWQqcoleXLis~qgLg;VW?8BaY|$dQ#9G1B@26mvcYIL#|l z6y^}CX#+omYio&hKtbi~}z!DW;!8`!RK1>Khct)pLU5XwkR&3qzm z@>&pW3XSfl-CtO3wS4+=G*GZDcm-e7QK6a9ag!_@mXfxLH@!=xCq>Kk%}pEY7j80; zDuXl11hOCOlT7|d9C*yku$8m(p-qnX(6@Q{UBe>gLv_Ycgf32{U|NWd&)SDhxxkK+ z?>iSS3%)g8w{ui9Njw{aHD0fdi6UwIx&-x>4OeslZg-QJoWTB>XG)A$lLWOY*ZP@% zaCz^GpBA0fV!d(IkoW!`axGjm}lTxTRGQk^(Dmqm35*?~vdnzC|K4 zPq8vF;~rqG&|E-WdT{CN#Z<*Q7?mvdZo&5m-zu+*QRx|$)#6t>{0s`H={A#|1adq2 zmq=x~tGzf$!!$()-Mq~r+^}gtANLZ%jK!?*x1vZs@P?`Db8bfPIulCZfT$TQ_m;BN z3P+?WTHD(6&F^q$_njOG$7T$W8JDr#f(6Af;M}d=Atxzs^`>wUX-)A%I2Olcv?rKevkicR~);_qH%{pGD-G zuZ!fqY^Kc}Iai_Z2KO#Jv@rPzG6is%Su6(OCT+-!lEF2S}TY z=I>v=>K5P7td=CU?_1hf7YE0~4-1vWZjv3vL$X!_y$XvRnnGwQpyTsWP}f_rN-2+S z7bxfyWQWQLyXjGy&)$&JOsx2nw-@;3g*G#Z_BXtP*wEjaUa=zDGj|k`bL388Wgv?J z9~F(7U4zRqCTumJeyOi|yZE=;_p0CE#weZmFA#%8Y{|E;2flIYlodT?;L83FuLz#g zuwmPA>5&fLMAz;un6~CjfL{qK6V3I8tXowr(z71;{E<{<0?fJGwCYbWi9|aD-I|%rCsc5^_P8x6X zmC#GJ#KOtT)q6=3)ygS-2bPw6pN8zV^Vb<$rLO@Pd;CREY|?gnq{P8lU+ljdo?iWI zLAgk2%_i~)%MbpC79dF>UQFcxih=PkJUZp&C5QPs?{A&{BRKcB+aLfW-Ys?$|(p| z%~tdyNZ>I8YiufhFer9>(As@yWlV2UW#aOlT_`>dEzsAF`=lL1th9ds+w$tvudR#~ zS~lF`P5Cj~1J91DrsjMqfST)MUUnCGX`a4ls(YIjdpSJ*PJ)Dm#|?rUH_5K z(r3RE#R4%S{TYSsjibZOE2z->|BIR@Gg zjuT|Fl=zK+xzP>6IA)w3e5-^TYb>jDHP*}#O&-b;;ORmAvhB6CM>hN#-V6MYcN#b0&T zHLS+;AQfntesb4MP?am}%+qN=B>?{PCUAWSP7<*!&;&%nuVN)h+UN3DC~tirk5_2c z@1bewudo0QQWtNq=WkYI>lBvp&;h3@AlZa_%}v}Bf|!BSr=O)MB!H_JIW^cXGdB1u z7)I{%wkuf_gw_+qfy*RF0D`RX;d3_J01zo4&8aQE{BfTfu;jVsx&J7&YRL&w>c!mK z5_?wwc>l6@;?!`{h!w!g82Yt$1NNBCeIJ@cj^02GjRu5VlmC7c+Il1dTK%~u4!l#| zgbTcNR(Unfg`?j^7)O;fP@;^mp8*N{)u#vk6{*gY@`>%UTG@lO>wA)R~$I6nR6^{&?u zPs6 zbCEfqW=b={0dz>SH7CpR-&az>SZ!Y&TNmmHazjOLoqRb?@Q)Wlka_QV;3@{|(Yfqj zjIAhLTd>1bP4`kn0hI4*XfxJrTzU`%_$WowztteNX*w82$SDC|YqAI)w0Kh%rTZj> ziw7pz8xRCO8W3yPlV{&L#r}HQB-Q7AoYM(jA~Fkbn*8;E|FLsj*TSH)*%h*#QLkww z&ApAjy!ENDM101lENNm!;YE(WqjmHzj2b6(3EP|_`7%AZg4We@dUWxS-NqX zuFYOYJ?F~-@&5qjF=}77X0mA)H3brFntebX>11tdSMUJ+ie>P|caLad1is#yIkXaH z7Bi5ZU#a$YRYRp|I50IvumDgzYVFD7BN;h9M3QJ-+ULmu(>#M~q@SXmeUe78^n zq&66s`>I)ihcvf346PaNQ>)9=K8WjXfo$ z0OzFCp;e8sX*8%|i1B$QMKSL)8>VTBo0zyi7DF2_4oryWB?yE8TgK z3{qCxSxFvE=~4mm45B|~=X_^o{=fjEC)v&5h~LT847(%Vn`s$#*3zrID}1#HUysPf zZvIaP+KW{L$9MAXR4(!XK(knMsX_D*aAsZb z^HuxPXjoe6ObpJ5x$zEg=S69HA0wBp(Dro5kF8ie%2kr0R2AsE7rIIAe;@1({UMI^ ziqKwrY}bH(%G;(!UNz9%ffT#bDQ>0p z*@u`&0R7av04!ORv*0X>#n+mC1e|m9M+hW07Y?o8jo;tv$z#QGvS#vT$Xbtw&91_( zfpMvUvPfi4JZ#ICbxCSjHO9nA1+A2DR8*WI{^IDIypq7w@zeE3&IB2Mx?Bxe{h(4t zzi!PrJlrZTj4K>lTm|NA(3PkLw3uj8r+P5ob2!8r3U||$?44?hcU-b82-u%lSrko( zOw3nOl*^Ss@Uhu>q{+y=ySc0Gs0aCvtizX_Zs00`v%kS!zS(gSU%I0Jvejnp-@?G* z&rvoYkA=EQql&-E-ddYMl!o_)Q|&b^+Wb9wHcY$ISGRRM!RUct|X&Y|UXcVqDffCilZlLEajhc`;&m7YTIk?$gm;#RN&EXO? zzmPc+#rRyx<8v5;C_FWUp4wyjyMN)^xQDt0n!^(LAciFtf(P?8eUKFryU;N8T@PLa z$FRV1ZfA#YR3CK(xXk1V2dlofeU#1_UD{gu^}SiUct0o^X4Vx`Y^G1j`pfnr7~T*C zmNl85F`OM=+xVa!4^h_qi66OW(t{3={S$uSk~eF)|M*0TdTUG!O(-WPW!=}?v|PuC zj=db%aU&kHHdMC#P*l3BcfWuGc|QiAkl=z#4hCCgl5y{8LUVq_7%zVS)H6HQW@*sw zlvw;IiJbd$n{S|_J|M!wp=+^k*|`s6LvWNx6G7_y+xw;9D$*~+wYM#dfcrYl?`Cs` zq&s3jft|#d>ao6`1GC&jy8k)H$x{ZmN6i`&i!3}3KsYf8J`sbZM&Qy^s$H=~Z%$u@ z+m%`=d%Xh6&J-*NOwU{-D6V_TJ`&Rao~^MznY!w&aDGnURUY%DRt3st7nn)p)%XJ0 zK+K6&<<5G$$xA>XIY5eZ_LQPFZ!g|?u9fo4dZq_KA$v(gQjkoEJeTG=rF}nj#G1*u zOkYeUMXK3sdFX|V$>=^g4Z-L9)m)=&CQ5OL(`xpSj-@=A?8s;u^vZkK0LZr)iTGYO zVvN)rzuYIRrY;t8VzdZ-)3I<-GF*Bk<3<4wLE+)5ln?&?_-S9DefmVM*7cowgDs2a zQ%`wM<}iMjb-_6UVMZKBV5!s}!XO$zN0 z)dXM7qXW^m*$$i}HfdT2;=Z3x8r9es(QZE)iCihynzWjy7>)owxd~2ynd$@)j~FVs za1W6K{0)-J&rKeHPS-}(CBXFKh4ty$%IASh4O2VZhfUMazu}>0!PobpmpIIF*E?3K zjn49*Hs_U}k5rC@;h}^S72OX^KC3tWfl+cOT(yMtNT=ML9Z&f0oCn>R;;Z!ii@|HT zLt4MCfQK0P1`ObvZ|yv~x%tevIB+nyPxZmbz0ouzc)f zZpTY?wd?&4&(Fv|BOn8QQXpvF3RrtO^C^(!fS9xM3fiK`#timXnDShGZ3Rj9vDC}P zN=rsE`o(EwV9TwMuo93=}fo;kI_dS>tiqnm7<{rMAu3wI!+CdXvdRiol}vYtLNJU z!g48OF|uOG#+jJu#fSDwi2-uh&A7{NBYCChyNgE`GInayCj2#FNAPUCdY);RA`w0Z zsRHP2HQ5thbPnNqDGo8bE(53S#&gwi!2}rjRT>wHd=4r$Q*Yy3>QOg~l2&DmjJ+|F zO(cf9^-y-YfsD%D3q|5Y5Un>ov@qRAR-Ud8SG@B^`Av8MhB$jUlYz%?6m0t z8*A%?K@=G%HVJL97;p^GNI+*VLRSKZy<*w`_~bI4Vw$G}Aj_0k284f6www6$2b4tk zY|}jLZU4SgoLsx&A)h@_!uMUh$kDti0NX4y> zk7g-2b8gbWhm^+sR8ip<&yjzXzJ4gV7&EBLGiLBB1BCl#u+K5gd;yvKi#49El2)*i zT(-nY>_+I%r~+JVHAlr0$*~C6qsKqoH!VWPc(=^QiN1iOB)H+SPr2#`02i>KFkBfY zCT+-mja&8VfkEk4CrBjty9FW;77JO#b3Gr+_R0J#m<8!7M=wLEA}Q_>DZ?E02+b{A zrn)EWr)C{QfH%&+pRhK}`I>S6+2WrUL@i-+A$yK?j|v?f@8KnyWT zU5RA=5seeuniEH&ZFuv9%c=#Nn9jXG10U!2@@YZ%bEFkU#j#0K_g~|Nn$Fepgq`qs z1mjaLBy3|l)~m|5hR89!F7VTIJx+#=M)V_%9WwP7k0L;{`42a@{kPo#sl~o$&_Pn} zwfaQ`Xuod~tR|(V`fpv%uMz%>c$SN*AQAr6i!8F2aRy{zOfx#zcu7S= z@ZymUZZzhf2J@awNtt|I3wDZMC>Q=e7J$CaR08mbooL_M8YSJt0K#wK{`e}I7O5bt zuQW4GDhZs^xwr~hwlu@~Oa#0-lhKwxHo(uCeh+|1_u?kLO))^CCF8;VBR`4zyoWG< zn-?<#g;9$8Ibso`HniEeTUZgQsVnBsRswPoc7w_<+Y(%w-#n%ug@?f02 zSBk#3zQ2#KVAg3>=XTF}6RIPt89gA%v0A1B`=GNCtUMoML-7^6w9u6xai`E6fS+AI z3Hz<-LD*o+zZyNC+Q>FZLQ?bs;DW$Gr`#j}{D_KM2TK=!xs=WC7Ed|17G9E&k}Z>d zdySRL<_qXsl;kYc{?0hpSE#$=rxD#a`oUM%ka@bP{GV_)uQx17ww^w+W`ME7bqMqP z0<(Pl2C^lsqS*|4vY+DA zjt_tYM^i4=POc@VXCnu`0+YOa=Xt`6rvtW%-^9Zm<q_-Bxt(46<*vEUtRQZF zr9Z0&%t^npAuAaYE){4O|8xn^7tm+eXG)qqXPT_>xCrc~{OM}Lz)2{rnLq@g_hdA4@yRj|(PZDZd*H_h+AM&+QI;y5Qt62fSeL-{OjQk{Sz1Pz{P z4A0cP|G(>6>`fAFQm5iY1Ay}4f6tcut(p3w9AzV<3oE9tbW5wa@~Mq~tCk31u==M~ zy0=pj7Z_Ms`|v*B_IIwKaAZ;L%U$7+m4`q6I!k0CUqHHqRUC_rG~aiEMEj=H!S!@mijqWTO+Mr9ALwQImIiAiKDrK{ zvO9A=*Lq&$qd3z;1AM#r!cty;>Z(QNEc#`)dVn+SzKyV;mW`j`Z5<#Z@lu|ZNGVFY zT1-V?%n{Ll6eC(?|>xl59NlM(Z;P0+!x>(n5$Ej}oHdv2RX-=ea!MX>i~KDNT5< zG$gz-hBfMTZ+EzVG=?8f<}@DsO#D!S!f)&?s|6YQX|u_V0L{x;0Y}k|-np~>Pv#Ci zKP95VCrPl^f-=HC<1jxUZxU9|wnt6nwfUgc;T;nH5+7sHnsB$$bl?g%2lX_59=ZDIE70eUDZE=m4}*mLOn z>)n`iFBuf%6%&wPssi`Tj%WqQ98%p-edijUqPT_xc;GZ!KwU&ve^c??Q0Ltuc9hMG zlyLoGp(K((3g;4FHsB;buL9%1?%YSb+f$0feC1i=hV$omUHM?#0)q=3c#xgBq0T?TLF)1Npk*yR#$QW#lYK+{72Ped7_)p z`9RF9@#p(H&OlzwR5JcCqgSi?;Zc1hkYOzJ?!FiC7`j3Mc!>r7zELC{lF6W+uw!+T zfA*G#GxU(4Jw?`G<;O^NurA@G+Vg+4RE3s1(wA8K&M_-zwu8_x}aQo|^+nvL_21UE_>isn$ zvnI^mC}*$2gV^I!@_V>j!AGDKaqi1=qTDmd5x_FqOT!iG=;udCtCVG1#Nj(ib>W7t z^5BFs7*1~!{$`{wFldP992hJ?9tx(X1#LTR>#Yh^=>VnFycjcBdV#B4X9w7oU+mdX z9}~Dh1q`<2Sb>Mg*Dyi5KsNy+Ey1^TeHSf)=Xbod5C6G8DC`d=N}Rrtd;Vkzx9TU@ zs5>$^(!H==mskYX=%-qfxjsNx<+quec&~z4)m}93XUYPz|L`Lck*Nk&P0JWG7z>vC z&}KmYw~+!D&xQQ#S1Q)K@f`$N`w_fTfXNk0ErVw_IU9(qE*|QWBe&1j(nHaVIqvL& zOUvtdnP6oAoJ}lk=r@4E=Y=xM(A?5G;Bsj~B-fW>h#6Vo>63bg!|Z6H^kAL7&k1ekx?N!U@RrYGETF3$5022!ao(f{G%g3cBo1*Y0!+ICE^bq?IJ-Tq zmE}LFu02-U9C7AxMb2__3Mz;4PIt(TCXemZg$RZs4Cg+Z1|DHe6#4^1@Fm(cHOH=Q<|M-i=xmL}0z&0C+R|>90hz&7YkcGKRZ?bbPFddP zt;Xgj662%~#Z227KHa&k1C&stLUci&Bvf0lymVe%9Y2Gh>L*!4ebAE(PN#i1NdHF% ze`!bz==$x9mT;m?LMt)*_pbJ}S>n;spo<`krVvim{1T`(R^&BQZPZUG2~^S;I`fUC zm{UH|!?LF(8Ivu_PN>Wv;4%fHdR|msVsBJe5=ZhXGNuq7P-#o~hAWagJvnFB~P)Op#iNJ1cm{BF#7r_ZBo2s~^f1`=>(#Ch` zI7WSy-Ji@V@K8({X*Q@R{hvyeyf>@9OiNgTyS~*@s#|^XFgxN3l3W<+Nl(1n%-ZT) z1>i7d;k>)`9nnmNnAka+j3?uHG%vv6XMWJ-D19QoV^PBa5w#BD0`^l+o@%b;k{eHS zp)2PUk-f)OGEe>$C^5~qp*V%Z_@d0m@5C>$w1>7KTC*mNA<-e09~ounDy(f4HgD~q(;K(m-1m*@J14>Um?S$=HNtJ8CA%-V1!A{Q&y@0AS3 zQ%cDDKZ#&oE~Qq?yIMaiQDX5zu(iwHNWUnI;66V$SIp zM62RTFlOt%D2H5rCk=#KH{;vV)&yEnySBQ8Ig82AhTxAr8VVc?@`c;=rf;PK*A_hN z=7@dcYQJ}k>^8mM4WXE8unBng->*ltaTBQ5L6ldTv~`)1KKwJ!DFMUJ3)r}vu;HfL z&kYHHr_rGulVf#O%idw6KCH(V1;KS>2_Ll_|JB!fCi%l7OaU^tc2>G`A_}+=-txFvjiUL9e6@Z=pwJ&V_VgY>38pH zv4n4D3^lOK=VCzR+r<4wNc+`odHHn_@Sr^9!SKzIj=2Eas-ptTJgm_iK-Fk#3I`b; z(j_*$lu#(+b>O#rp%TGi`9cb{1AYCGoR|VIPxKC@rGp^^ugAG0 zPpVk**<6+@2iWzyCHIrPh{5D%c@6Ej#lDIwDO~!Lq-p>c?WW8U@GVb}ter#ut)IZJ zH=DMUQ!_P`(=R*e;Jnh3h~wTRTI)}NR&1G;QvNAQ+13%PiM7KA5FyP7)RUVaCC9A% z($mNjDs8)5>?IZ+K9DixoUXTG-|o$RIc;8^_!>-)>EKCR75)3*hT+d}=Uq(_m(-e| zcmtFh-OBHY$n3Om?J$eQup*FmZw-Z0kcD@COoH-R0GZP#H;!EC2VgEMdY1e7w96*u zIFJ#lhabRgaFUzrP+OnSCj|7tsgdCGs&|~I$!38JIVyX++={|AzOW!=)I?bzXEA-D zId4II$s`K-ZHBQ6iz#g%C^$vVS2ujWc9#&}NlTIzk=2e7zHyrh=%`my57F%kf5%E5 zbZj|%SuYBr)O`a~wYFw)?lfI;GVk zc}MWMlN1+kv6BMzDQ3+A*FA#zzn9uh#e_j}Si}i3G7l$QcX_iRSM7J>$N%NMzB4xU zr`ffxSjG|(nG29v8<5$ zyoS5b6h~(6X*Ro{OzK@wZXNXy2Ay2cSe3L80X}Zy-%G8w8?8OIP|^Z&cX&eTt4@ML z-Bzwfzdqi_Fanvh@DjhR-dk+>rL{x>ta3A<4(7ZXK&yFGTtL5o8t_Dv=`~QhkSWhR z1%ze=p}k9cxgfC2ZX&?*Lx+7VIH&&Lsq)1`93b?> zDf7m)(CTB+Yskr@6yUCQ1R(#%%>SSTbH(GggqyH~m?(hH_K#C8Hj%dr{Qpts3V^wD zYuwieMp=&t1wkS;*`fHCPktRXz}-({7;r3*Uo5}%ko?H9{P_qe?>6wlzUB~{XMdCH zcile!?0Rh~;o+M2Q6M8PV@34Q61L?+Z2547^@{y=fN z0_sm_^8oH^@KN5gC4kJLn60E%<_-2^<{mVB$7Dr8GYvVphU*a{BMyiBX2%3dE<=O_ zK`my#tPAOp=u%(hv-c-9eAWYh@k))`JB?yYiD#p6`jBJ}nDw*3YA`&wgVV}b_fkwI znC)NxIL4vgKGBtjj5E@vW4sed$9PnUmbZuGGlI9cz&kTj2X

          o?e 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 mC)mTn3)r!Eor}p^?43| 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

          ) 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 literal 0 HcmV?d00001 diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d04efcd37009c1923407519f3263c5b757deddb9 GIT binary patch literal 7456 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 literal 0 HcmV?d00001 diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..920f8d8dc771c90c3193b2756adb7201fccd8b0b GIT binary patch literal 555491 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000000..64dc11ee7438ff --- /dev/null +++ b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "filename" : "icon_16x16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "icon_16x16@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "icon_32x32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "icon_32x32@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "icon_128x128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "icon_128x128@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "icon_256x256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "icon_256x256@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "icon_512x512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "icon_512x512@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3f1c345c2a001f6e4540a2ef31d9bfef4e7112 GIT binary patch literal 51391 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 Zu}?ktaFt@f@!t$U;OXk;vd$@?2>>+JaTNdn literal 0 HcmV?d00001 diff --git a/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png b/UI/cmake/macos/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..029dff2d62156d6c446bd806846d36c94061dd8e GIT binary patch literal 163961 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

        XzB_nT*tGBuakcH zltm{9k5YNH^8s5RE+gh9=y8PJ0~WGuulqN$Ot12-p&V+5;k@)p4pWqDDYzQ7wdyG~ z(IIdSsls1UUCr4;oq+XQ8JfAii~kdWoq!^am;1roNBeXCC<|A9jnGm!-4B*gBh^12 zX;eLL0#&|JO4I`GjP8Q7D1h88R-aWUJ|usG;KC%Z7CDrwcTL9Q-IRMV^ep&6ecS=Q zJ`EpS6Q7(=KkH-x^jD%rqC-v|OYR<`{W`$u{39QngB2A-I*%HfUz?pw_Ft~o zf^p!~&Zq-S(HAnRNM5svFC@$qnt7;i6i?d^gt?r>SGi=Gy%220(#Ydr5v{9sOGnYQ z1C$B<8^OY0JR^bPhqRRxPkU@OEd%GOhuTO@%bTJ8TS0{oFQ}Am0 z3Y?7YMwQ-5ydm@;oLflwxex0PY6Wf3>9A$2LFBITj0%QG!LH2});`>877*Itm|S{L zY9{fec2haB;ml|-&&`&?OjlL|eNsf>MbxkYY=_gdFY)tSm7y2U;rGG-;mXo{cxsPzkK|SM+?mI+oD*ITs~&l-^i;6)tI1coq4I zK0!Mj1+i%0)Gh_IyK0aMitN)St-&TUNu9$uD86ar9m;PxBd;VPojc^O{xu%VaZ}tL z5X%eJuVg7foXBBh(|wY6<)1S3klHu2c5Gq;%|Y`QmlUp2YrM3Yx&_#jkk1HE9P6Z% z>QBwckML1SQ3960ImUaZZ5;*BA*1dPa0>qA;31wT8fW%IKEF&pE%Ff0#rGP@1 zvW)!nopjYhxdpu+4T6hjmhLEB!1!2w>98_xzx@4|KXo|@yi59C5?w<4q9a9rTXY}I z^;%(A_z2J6LN?^hLoZpHm7fJ2HiqrtTyDIDEeI9Rg6JemDra775M-A0l<7xs23i zg1MAi>1$)2+PR(f-U!MP$0TqR@}>LlCf0IrBa)zYxeMwrIGV+7)o&{)t}{Gl&(Ax| z9+2dDiH#&%7@sx~UQWx81-HRX)u)>JOaLE*FXCr0^^`o+@np^cv#AZwF-GYHq#!;o zG57Bsys#ebmgb^cG1pV1zm+*`H1h9&K;c(vXL(5%+NDsuq~r~d^^kd ztv9s(g--al7M$vP3dQBwaUHjJpm;vfapJ}k@cmyW|KRe+u16eR-n!&T!jEk~zN_hR z%5`H?`y$6&YuLA!v7Lzq{~%+iAi@Udc}7sYBm2(O#ADcwdU2`3Ru4(AW__F z8-V0Bd5_`J-q(aqKez;Sty!GpMT+MuL7nthKh#P8>p)p9ki2U{1N;Ze+zp@<;!kk&zV^}5tP zVbIrgpZHgQOBDZVXT?w2Tkl)%hK66U;=h>W~VZ!93e}Y-Go#ZJw@t6GwtMe^L=si{P!FcdG#lPe$u@v#vihsW$rCSbPuke=?hNL4|^zx{f-g*Co zO2QL-qknwcIp~gY&g%^q%I$ZF_l6sLJbF0L!vW8Mr+1t>eX8bEO-eHixu1B5G&17O znf|{#rZv*ZX(Yu(pN#P{G4}Bod@06PW7LdCZoh|kjuhCID|yw#{>Ng}h$fflr}Si% ztM~Ah8vx=B12$t))b==jl1_q}8OWtPoO{AvNGGeEakL)j;lO{71A5izaXlRPV{;%G zxGuzGfJ+8Iy?V->@o;XyJQdT)fa(`Fv`^l<7h`LPhJz1HS1-0EM6bI`8lI_njY-`1>6F9Z5M8RQ$9!J)d`?;169T{w#c4 zU=bj(1mI8J=x!~LfKCf|y89WS8|Xg~fVw1ESP?4T$3dO&*XxrObo9ETPX~O6;7jm% z3^q2o;hec=VF#7`U7$=te$P;6Qv8C@H^JU+l6^rf7t_~T`0N#JXGttzv8lhAynK#@ zCYC_?M8IrQRP>9UR00k1o53`?Ut?V|(k^LApSAD;qX0hSE` z-{T%Fpx(pMS%CS^O}23OOtc}YCjNdF+_a$7pOd%ZdjT5`)P{XnNX#Jo2hopNIuCf& zdt4`Y!taE&VF}Irh13Q%KLpPod*OwnE71eI@1H;af4_@`fP;H;pS>gqZm78a-DB6F zPwf5nUslbd*cp9)afbSw`s-8w(Dtt+|M@;kazDbl+P0j|oEp|ucV{>)upPoJ)_6|;4nf568u1ebx-Ur_19tgLBb5R^?0dXn|^y8=(Csy4^=#^{-m;>gs zM1CVUg#|y!Lp>^7&1zPl!q6-yWXZn)tYpEw37o+1C{QQ#cY*mVGmiz!*;cRz)YU`$ zPAA8k!8#V`v%!a0+CK`;Lmi^@3y1-qS*+vCDOe2G(!oa3uLXzWzYOFAt0@fHQ7dQ` zH5!G=J>YKcYylflb*LUvedx7)Dyb;ldQ=5U&!hz`q#SzPuAzLb;4pmd0LN3`O7H~B zmBcH|8%$C7T&i6vu*$X z1B8ypUy8;BU=d5I`@qLZCj@VV9s-Ua2bH_na!~oFk+u{-IujajzWYu`yP{V08wU!~ zn$vC}ydrIc_!r%dX=2h#PoHAL~z;ZzFO7SbiKbFlO3)e?>9dSqKk1suabl6euf1$MgOGmx|o97+Bsge9n?rpj2 z1R|Q_i8NnwLVaMNzYb2qpBEc2MVdi@-Kh z^N4P@b{k2n(4KA+s01;%?=nFtSaHz`^OeF-sz{v_R;Wx?cM3Q;-{H!+u=CX5NF+yh z9z-3I1Gd07$wxLZMQ6KlQuK1&Xd7aRffT{Z)lqTG#& z%WKZNw zbzlJ-g@%D`)clzIQ6t?325@CEpbY}cz-%|zHoRy9!8+(%)UuMdj$jWeJMnR-efmQi zjZ_|eDnsSdwgcsxjlxgZ$@r>zpCCuImo|>z2on`x2cpx7Z)<38Ic@V0ANcf#-FGy` zIpkA<|MXb0TByBJkUCoB$)$9ZgUubIOs1OL4p$HTpj+lPQml1hCv6vG&CFVy4fdJe zXI?IN(cb)fWU_zYBPER`<>=MB%Ko{GaqHq6F8*}MP89ufE}3!3V#dL*6xR-*J^JqJ zJGpNz*;Zy1WgmdOb?H0PMv?y5@Rl@aw$H8BhC0`Rf`4B?zr;R6DOitW)Pi#vm1l!; z8mG%l6|U#NAsfd_h&2}fRak-{fB4qO8Fk&a#T4t?h)I6bezI*4m>NGJvHe zlkyf?4`}9B^=f8(IswW;&QVZLCBU=IA)1sLrK3QlvrQDbjBStKqNY(cWr|5PsZlLj_OkRBgRTpg)>Zewwzm1l_e@|RzJ|I1GX!PD38nzrY35d3)SPja4YU_WZ%FJJnV z>N6r(8h%;jaPJOTwFy7rHiYmi^-46rj(0qT#Oxz{U~s+r7TBM5ZbvQ$qTv4r=mG93 zHwUcZPxbDH8k_kgedkJSWvQK#jR4*vfE3f352Hxd^O^YXv`@iE;r(-H6yhdVQuJO& zJ~9TY!@*w8n{Y=>>#l;9qW>~b3fwA?_W&D5baGqs>_p+8m~7X3 zir!BWi(+Y{pn13yxH;e(osX}#v2+3x#jPmCPZY?M*HM1v_!nD$xQKbWg8|NPiW|96RZ{yja{Jsjxaz?*QO=5p^DmBy%<3@$2;G4a3B z(>7C4_{=!`6S4oNWBPkB*2c(_TP}+8v6;H)|7+fX+49ll(=i?Ee>5XDrzfSHo~&~9 z9xmJfU>_Az(35fa=@`$%*byTuVdgY*kV`OG&Gf!KzdaoIBXOYT(e+1S?4N3~Oz_UP z0N|%+-BT>RGRSGFC#R{PoTiR)di9Vi@?cX_T@H?EO?`1Tb=HMmh2%czf#q569*F5p zG5#V(UJ2!F=|xyAikadq9_-M0?z?)0>2W!-oHCExe_Y<#QAA) zw@(tD_zM-9pr2M_?BD!T=kRPCuhX#0_Va3CUej^KW_pfAfUZc>bQyxyv^_z^K4rAW zPUw@+UEJLQc5?R#!**LZl{%yu`Yfru9AhKcK`O^$d=Wgu!l=iSwh`bAsny}%9=sMj z2c9NXJw;9jui8m_DI}hSKE*QPGhkcLWS!K=fFo1-Jd2qf_`Z!S`*U_?hVY(Kw?wXhAG`Huz!m7tp^B zo`^mU9zd}udVlb5(Vv6IgB|Ao8O{r}@ubgi2X$hLlVm}cW&=Nr?&NH8P*BtNsXXN5 z>Msnft@;)gX+QG54`0t~-jJ57e)=}}o>`W)AagY9Y-@9Vk;4Xv+_AZr1)!fZ9_mq+97axxHN6A)}qqJI^@JHaKppQitP45TbT%rqn9uG1AlQrxHa&DcC|TBf(Al?E@#UY^ZWbu`mSOLpek@5xxd2 z393y|Fb4I&SmfO1c|7$a1>!DIk76m`SZvj=d~D(|#z8mRr1bQrix_ zgyrP|umP@Vc_5_MDBcq&^cEnW%cDC`395hYj1EAjq5>&4FuXlNih8~we0z%fQ{z&@ zIsF)%Z9F^v>~OmIy!IuhZ=!qO+d8b3c5NE*%JNsTQDi*cIOJv8sd4P_nnvg&lN%ms z*uzGFte5(|^cdl58uvA>BYt($`d7&J^t!f%ZL1lc>bh2SAvaxBd=q&D<#;G{PqYTS zH(020q8vLwi)n^kWeT0Dpn@f4@!y*?mwK=hx{hC=PU5G)avK@7VZ+n)F*aMM_a_=3 z3b7OGP8&Ev=nb@^?$3tr>7W$Gl2d&Fy&de}SN>94=73lZFcbaw*aiX6HZFCdCL2b0 zJ0IR?0hLaT#c#J|nM_x1=`=*M4U0Ilx{`1#5U_Oim&85sS*a_&$5yMg z^3&Z)-^V)<(|&t^`0ia{eBZ%1p3g;ZOg=qtm|k+}(@Ff10dp$*`A%h*L)OeC@x*&M zpQ`$SPtS8zwx2`hZL`j14x->8i5;2d@x$Vui9Mm6S>&Vf-EFh`lE=ad`5z*=UUM+&CE z-WfT$Igjw1+>=$1Jr4FPNXreEtDfOvR|Ym?8K;!;+!CyJHP8=JQ^r49t=268r_rM% zqf2;n(Mckxf>`WZ)Q!x8-I`Qc67cg8+j8Mi49YO)EOF&7_ZaIF*S+bo^kj1tt7 zr$(_U#%~L1Ob#>(P%gp>E&Xw{>UijTp&kXb0U#e-M>zFlW6DkTys3q+8jtpq+MVEB z{&(>&wH*9qbkP%8&-H!wJj#y84Os$e#=ngm#fQC=ZxDEhCu9g#$0Ng1LY03dHIW=w z@N^R&rck3jU`FRk3S@I|Z=g=SS z0z26SmV6l`Q;)6KB& z5qen>@|~XAWv2aCMr)#3_~)lWo$ybsOx@SDlk6Khx1^|NXL{#&RrBnlXG=QnrWxPf z{;%z%bNUOXSDuD$y|wk@t@EJ|@JT1y-34l5HOOZd`hua1LDXiJxN4l5WytWXe4Gy2B66v4?!e<^kcDcngFEk$mgD+i^(Edi4a0EvQM=dJtVpO|o$+B5?? zaf!bax_Nj?of#&9Z-P?8X5ycupD2zoG4CXooJ2Rpv=rOb(8BkEQv8b_GVy-{s13ps z4a@ChJc@t!ezH##=sH0!d1eEE(|rD%!rfgSd=NTr5Acdu@$dO7#l83}|7jo_0KCHA z4YF}u{)}6k^!FPCl6bmL@rC|=zo9@D2GmZxaT$0YMeKY#73p6(hLqn>QI)TJJ~ zu8L7lPFxpHX1Ua7J$BvaG4*dTY6T6Kil1z$p)t*qKrUM3G4(x<*q=0KTY|ZYG-ArV z+rzmH2Vd}X@QoNBj>9*{^o|(!#`s)}M`L^?#+De{V$=$xT&D+{k?2x0Epv&*?S$^Z z9uE9I97z9tZtA(GhXcPO2UsFEmrRusI>BT>>x$!@y#SMeFc}zIeR%Y$N1KA{@+D8B zu%@AijU> z<3AN+d5rb#HTp{(?cJ*np8`0z*%Ve$^QAV8bOnFzkc(jGOWWnux%pyEFv4fh!PTIJ{ zA^_VBv=9@4y0DN}uWnr{G_wB=9ZBoPncOKY}PXcJ+sQ|kIs#g)YT}=E5 z)MAk0vmB-c@BZYb*=#}d1Cxn^dyjPTksEG2RtKi01a2+X%KigTL9AmVMpX-FP zROni`pKJ<|YGTiUz7KA%2al4kWTj;y)xpDn%`r3Gz0jlF ztxoAJrIiMe-JQXGA^eE$V>`g@$jj>VM>7^8M|bqv*Nf$X{M1D^<==$<;lAP_1M5(L z)C}6$NjhhW&QzWzzt;BF(Wh#I;I%0&m9Kq^iELMMN%OVnec#h?!;9CkL14y_K1VJC zTk5wQ`Fs$(*!1Fz7fI)2LrclY8%d{>uOv@G4>|qJJsrEKR(aQSeF`Jmo+>s|;*aw& zjm?zzw%}GNI-EX{Pz^nv_8Jd{Zmh}8D898_3O$zA4#7lWN!jJx?$~Fwg$8ara-1Td zmiWT$v|c;;K4IHi0v7YV0(1vzs}qDH4Ynac+XmFm++!yq)8S$^bPneym5y4blV2%Z zMTeA5Smw4`yI`W)6udc@wpY3Z$j2s&cdu&z(~-|(pe$9a0b8PtCeMw*LSjmpa5t%sUrgU}YT?*?OD{n5U zL&=ehaqGTzI3<^3y-D)yH(ZpOugdM6crPaz*R>R)a4yr&zD1rYPmvGt!md+xT*RV z1Pfgbn90VmMi9llDRx>>yH`RNp(fTC*@=R48Yq+Lk3m9A{8(|n*q)O5FSzzG}(2Bc=U&TAbHRFqMTWx~^l^8ma?kzF!!4I>z^AOL$ zC-C3I?^bF(o%*bY&W1Zfz%sW*bhwYLXKNT|?#q~!ehbAOo;f9JG0`SwKaownFM6== z`h42v(mO7_wG2L9@{LO#yW}{xcb45%b`nMZJ1&0T#XR3H+L}Ky|BL9Ua`PtS-GNx% zozvdyA<`+%nvykx=i9=x+H_x z@P5YCUEm^oHU2-u6G}YDW27Y=`r<}wFMY~pCA2nNm4GrRulCMlyep;d+C}8=yOhRRxxl@&lkge4@Tm zjr5j-O{BK~6c>ksV;(OzlX~-@A0iKZG5VI;VEdf&J}gZ$3Mo z=hVqFVf)8W@PE6l{4{)S%WC`EQ>1^Y{ZwZg^=)6oAM|q-&;8@`r2jA5){XkXV5SRS z{Q0%de3<)w+CJk9=~0g%Aqs!@nmeQC87oC+rI=04ioO^<34Jq9^@$*#7P9AyPWZDL zWhebt;a`L$k6GX#T2t*_L<@ZrOcehz?ay-c^!}1Ym_{GkiEFP2PBt2#fOc=gG@VsgRAIY@=?)1A zNd*b%?h+}9p%lp>lzVht zUm)J;eQ5MH5YK6zY2)oivxtJ|v5nI<&_DA-i^hXnK?>T_>@@lg+3kVGLi^aa>;e;S zpPxZs7U^gpbq*BVD@;3v)-CwmOQCT7&wH=%D-o^Bd!>MQaLOAH{g(JqLBCR<@`e-R zq4W`u8vYXTlo*;rz;Rjv<|I7~Q1WglLh1&SBQHW1$_WxB%5Uz6DbJ2hHWCm}6YDFb z>nlqZMAn~~&*+@_%f@GUnGfajYns;othB(EeG2x+GJIDX0ozE|-g)W0LULrrEAw`& zxoFUOL1GN8rR0y!+zJo;2_OT|Fs4E+3h|*>D)$^bpQivP25X*%dW#YIlmzpZ$qj?thRFH6`ur<mN*8scb$?&j#Z?tPW3PL)f#nto%mmdPvIn^RHJ-TsO9c0L|9~=a!}07|G@Xug zz=A;UiEA4de+N3|KhnCJT{`{l-drbh;8PguD&%kLId7k(D8c&yX_hSw|IDRptX3IA z&Hz#5zLh5TybK25`}b^TxF%OqADMP}3KZcM}W~j|nq!mp6zeGSG;QpDUtdXb4D$v6vS)WL0M-_tV|-2>YY$ zm%@DiGRV03QoZn_@xO6JSKoux#G7|9t9HJGXF`<10U~yW3ziEr=Myb&cPyO)ma7`m zeinQxT_|e~vG}W4{%iVx9`E~mC^^=-qL+j_Ym-09Pv^KYYvcX>cG#TN`=8dS*{Wxt z>Zaf1_@Qw;pE?Mt*Y00b>CbtyUGKbHAfMozni9tB=1f0;i2v04bmhjP3iqW;f8$9! zEHa^AHP?$|No9TaWz-~8^$Vhau;!Wzy+fNz8Iei8Uy*=PO^e%4LWxkT6yqRw?_uoTpx^2~`yX(JYs8oZ{tE=@P zFaW|WwtT?WFiDB*Fnju5a({i8kulOMJBA^QqglHEVf_wRAH!3zT)AyFwwG;Tm>-vC zQ+wB*UcRYnEC24as&pe&ae%}%%G@oLecSS{<7~wgRf|gNCEanNleZ#gZgb?JZA@kB zt`lpvadoBmyosl4mh`52NJVu=u_-9&VP;?2=zPp>wNy!) zW()bjNe_{IT?Mdddg=mgY>na}@!F^R;fT*w2R3>rbss{P>WIyT34g;&>GK)1a2M;! zTM{vh4R6hpjsnd&?%^4=K?+t2mo;R|t%GsHRC~nffA*P-ubI-6QUGH#WvcS7z28Oi zJa3`E~Al1l6vNdFRitWV2x@Uqpf@KcBcl*`qwrgQGP3PdfX4p+hal;kv(Iwrgf z;+JJ$(F}Y|T68zI3)Ijqf|}T(>7ka^r>evYD=LTo@VuPz&}UJO>x2 zHvqgR-T}g_CBl`!zup(N};Uve#UyptM)9G|0;eKd~3F4 z917p`die&~5l=9T#A?JvcmAI4c)5sa|0 zf=jo~wpd1grPrtrC*`O`?`w7m&plRoan&@VjDOvoz+BXN9tWimExojvOL3jOdpUUj zMsX^1+RNoP-0YG_RF6Qz+@BtMq1d22aMd_sHwu|x+lT(UZF+DGPxJxjmM`CKwx?aw zZVIbmB<*2#CE#)L2ZlxApTZy>6gSNap&&Q5`;Xu6E1IUTnEi2Ycc9e)ub>im`~2}I zT^h~Ys|57S5cbWr;jG<~y!9_w^zwO<3x^uj7w?wAg^C z+VJTn=-KiwpAXD4&PRga>1aLqkwW5;&_=nzXu(A?-l6s@}go97^n?&{mLNhDbv`wXLAf& zI%J@$G(#+1Po{h~WGJE432_Qr3@soCBwxo}e}3c5%$V^q`F+qOy;k_}67#~N3W)+8 zJthQfab!i?!mn97cn&^*KYPT4(u4>x#suUsDq+2gts5yvDGADt0c*ta++3*;@xw<8Pa&gj~1A?}{%;nS{o8DLea$ z9bWHfH;3>3_=hD|lJw!cPHHJuE8`Wa%Z!NBGEEkDmR4qUbW+y$)>SIN096LMU&eYT zRk5YL>jZtKhfl`pBK>T(%19o>Q~=-DHsWky>GuYWyH$x`6R6?T+ue@LK z4Xx=LsAU0~GM1&x-mLqa#2Izk?7Fs?y24(J)Y9DN4Bx#Znxo)vN*A{uS?+C!Jw3HD zs?D?YG{n4k2fe#JG6n?em|cr>NqRxIhk?g@bIIu3v12KB`I-4-J9<)O0jz_f;70Eq zx#8+MBLgW4l&-l0RqFQ4Uv(|!I*?i68utyO^FF^ozyEV~^6YnC{3cI8XN zyS~+Zh*qtY^aP=G1By4Y7Y^&DCq+BM78;EZ^xsy2I<9?g6sRBU#OvC%sA!slM_AFw z+l9&?uL_CrJFt$)P&s8o&LXUOSPpl|P_^CY1eQT>WDBsYgII)gQvcj&U!gT#`t&WT zY0W)F2U$wsRst|iSv$DA2MDtA-eh!6uNB~k#*=^qL$6rT40wOllp6_D+HN&ug>Ou( z2{wBk|6q6z?yWr}-24S4LsjpoE549p_-6AUeOYQ+*ZG-lCk55_Sen5h;T+{e%*!od ztM-ti{vP&x*0f}?A=DlRDhjRMRGLxhKG5<%>;k&|zOvZl(F#`E?n3Xe$aNH4HhCmc zOi*G7UmsK1^9uGi=%&Efllcz43RneeZLBxmT7^t0AkAWmttx9M?(&Hdp*pKSIg2eH zNxx8a#{5=L+>$2wRft*FMP`f}$kZnO=@o{aksmDIHUHcK*!Nym>qW=OwO3#OGtBt9 zLDjLPB?i*=d%d(XDQ8?gOJ;m|#P`TTEaCovBqo*k{z0>jxc+q^TQ%?Zf9emxu@COc z?42xUGq(=o1o5R($%A%Zm(v@|8o9=GDT==6564=3@)q@{@})TeBxuJ=tg^5ZXp&C3 z+ZFZ|X3GSO1txb69)FO&FYYihkBQ3S+#?QgtS<#Q5L7h%o7GLHxw!<&*|ztX4UhOH zif5wL;zCxPYdKUPa=g1pMFfqC(jtwPlOvkdkNOtsaXv`1hJm9lEGo_Enm_e#rIZK4 znTBn4-4;8qaROE82cs{>PuB9B?knYl(fM&C8QhC;;uzb36B~eTS6T3&PBvC`nPFtL zjAqAoT=MF$v*PW2$fE@)k5vjQfGVD?BPID1^%LHnj>;sHTo$7qcs;19igp*HgIz6M zJLK2&BU>r7G0)&nFqu{;0Xn`|D|=Us1xybz*G$=@Bi*VTXs|V9=FCz`S&*(3xSXDXvSMQoDuD05Cu-0E6XSrR8)#c!-5g`=Kv+Q)ph`fdGF zt==`Th<=DBeoDp!J7Or3J`!1nsDOpmS@IFg3Dr528E02#f9^ut(4e;s_~Ah~A$T&r zByd^2GZQaFH$3+5HJkgeh!Crg^ec6rd+ht+ZLFre@^DYR@!T$Q-&akUgz?UOYIhOl zuC1hPv`1Xn`t=6@8a`LG*9&30C50aAP1L#634aU=x6onUDF={7OYB>dda~4Q3US}W zh1sXyD8b-aA3tkh5g6d*aAN>YXP)MOszw_J1tPWQfCm)L0f1F=zrWysk-vpO4nd_T zmm1%aZ|+{en*wKdRP(SGrQQknE13AxKS$d)dpL0%AFUz>WJu|*iPF~_~_3!IAzXpugI(^|3(&KTwAmkO=D0NNnXK+4V zS)YE|A9SL3CiJj_kYn8K43Q-#2tROMl^fP5r)o6%`9eLK-F}m*dI;pY2K&b^rWBJ%8){@GI-ay^=fjonbnRs~QpwoUilv-SI+F zZUnEz3FB8+R?$lh>vA`D|qe7Hl* z&42JkzD&bxL^%&5GN)H)+4RLZzSpxik~i72$e-#Ic*us`ls-W=541Wgm1X#f*J30p zNoBy~NC^JjEr9zo99Z4mdV3$eN#VOM%^UuM9+4FiD8)8LyW4lcPcuZ5)NQ;kGef>0 z-t+Nk>kh}yB&-nwQr_8#8Eg?oDZe-?E@X;p)J3>D6?Hsx_B0%_%ooY4zaU03WN5dA zomDfpEknP7r@8X&E`)|EoH^xX?C1MXrbL>VmElTy+EKUPFE|fm5|DRPIUzzul@}V# z2bs)yclCaYLCNgE^_o6d=Qj!BX_8 zI#Mrx5AikqzobgcNcT?QjtEiTLYfCp#^96=e(&Pf{geuo?o4bE; z4f9;v9;GRMdobrYfG(CTY=QZGc@0pdM4MPYVLEDfln7tb+MbH9Vs1!adqw08|N9qe z_@@5gTY;Q~YK*B#B2%jqE*1?QlLP;!rjtovMQbx(Z2xwMLu$rAj%s?^N@a(MmD z3(%Q2bos|?^|~Q4YoW2@i|=V2+ah$+QR2v7fp@(o7*X+cZbR(FBZ?@pPm==Z`} zs~^>=w|RtYSu)wYo6JOM9^$y8FGTPTD^ui{wG7f!HDYv3?lr8_3~w9)+BT&&ePTcY z4$tMC6nSnfWSAv2zbK#KQxG^5d0aC{r!N_{R%6p(P`ZyIgtat;BK9JBjeI#_LfYbV`>5$ zaJ2lo920-H0MX5GwLxv8BeM|L|IDrESfFxG+Po;wyseF!Gv7X>?6wVR_^tp$D00oz z{SC(934<7K%>hISz9H9Pq}@e0$7YN=ss{RQHZ**BK^dcL^6@HT3rwXO;Cm~9cq?Lj znLwG`&nl^Wj`!RX^1yiek}mcRf7u)s^}?a<3@Xw(8$>#$#Tl8bI>?kVc`~C~g(xRP z*0Y}drGe8Z+slrD_~}aSP6_OBvMs`K1zVT`3Gw^;o( zKxZ7wrPWcfBdqhiV>|vgHy)V$bzS2Aqyp46jOPQDSHDcc;TVZ$9Pja^x&l7bA)Cn|;d4&bIIlzjUw$mlT%=^}Y?@|1>v zAf(4RNJ(F~WV_`4`KztveV=pm0ToM&lbp7>;Wa^Dv*xUODNT8R)F6V7;lrb#B+z{k z8Iuk+hw1D8e4)}}c*U9qd=!-ZX&Mbcd%+c6K+bQ1n&OTw8OKM9+z=({zSxuvK3oTg zdWA=Je=#f36;H~e`S)E46DjiC4>DPL;P6Udk9F<+c(-imFJM%UK2Q^~KRn_rl({3l zNslG*Lli;(5O?A3nRl6 zWJQN3T4QZA#(n+d)bwPSsCn}6 zEaD)L?cQQDeYJP>tp3FGuG#(^P&=}k+^R0YnG((1ko{q*KdfKV`K!6+4@yzdq*QNa zOO{cxssvy1Tgslk3IJ=;#+qZz3QkS&jZzRgE(paxcH@1Zj@E%+xP_Mv#*jeedDxNO zIFj0w$x^bkJ^RbtAFg#O!t~3PZk|Hv{scs(N<>HouligNt{Pb~xTqq4ID}umzaeW~ zb2+#bckWNCQ1y!PSvPS$lTJMW-`YfBBPIHnt2brymYnjUT2BQ{am zlz}h23h%6BvwYGR0u1vXHWjfb?lxW2mP$*!k|>hLOz?MWcj`_-2zow5-87CRhB*HX>Qq)o;J zh4?brUTfwrvQ7tZ>;gf4POI2W(Kxy5Do+z1v*^9<`tWMj^ojNm{`E{K1J5gc3{V@7 zb)K&q5mq*QA-bkGafMHvSU4}NhFF;1!DuuZZKE?e;2T~7QtgT7II9$SJOb==ap71h z-M6Td!kz5!Mk*}N+68cTJPI8@HN^?pnaB@vd)2LI0+q$T(;NuC!PYwv9Jl{M&{_Pe z%tbPykc*4Ppc1Le-^3;qN)V4v(`U2mWX`)t5l-sLS>im~9T@h8p)u(_e&v9D*}=me z!)+VUxvgt2O#gjLldz$JE(=|&6J_qn0D8FV%xUNN0p)x3nGxg zVTn;y-MiliuncnGduji(8t(yr4NUei6CirVScIOWS_J8Nu|*BPk>#4zF`@4_3WzzN z>yz}O^0gJ!c#IeQW7*h9C_i3Mcnds8h1Gh+MHUA zzsaW~;_nGpq*Ia=DLTXae?fd^kf5l$elirg0;=u0B$VbtuhxML!ez@6!4u)F|vNdv- zFev2cP(+ef;x;vD)Ei&C4~SV-_*Lpg8l8y~kmS#UIdw%dRhOBo%8m6V?|MVQaiE}P z_<+w@{HT)7sZ8oq=oMP}8;UzEaKCN6%jW`mA2b6E$Xqwzy8KG{>`zo6U@v-dD+nLE zhDSA-+ckmaD@03`2q5PXIfnjRmi!yB$_N<}q>s4yVqFHG#9s(2b;tj7dI*d~hB!A+ zkd{W2q?f0MPKeJvm;95PlN`cz0T&CZmX{2x+AG@QE!UG}Z`FtG`f4MJ2~%&5SL)VX zAf9lU**WkPVOs_|1l+p5>znjeEmWj38@N zl%w<|Xk75(U<0Rbb51nF1$>I|<4Dr3nw9#nX^tvg%$-v67^9(SqsXbN&zZ5(qLa{J zmyppdM8k`1OJYRHzf#*rtF4(4 z{LHDVq05T|1el#4%8`ezCGIOd^?i3!*pGOI1bM$xM@Gjfqt%rP+&#u=kXd&1h zb0D7Ll?3PoYK@PB7+W8B$X^eOt97dr<20zGQo3`s-?aoFqny8u$>clL-ec{zArSi9 zMmPCFT3qtsDN6G~{rv-t06a8!{d2>_1~@WiQV{8VfNZ+gKTrLB7oI(@zP-cPjb9!oCSt7XKItdW|X81lZH;Zywj>KW^vT)T+}z#CR2IsiA>HlaJL@aT?8)QM$&ohnmz(+OjYh(EKBmaImipc=%-5=ezqJKJ1bmrcUCg&oS zV|*_$q=8LNzes_`mfpK_ef;jTDbxxsUgJ%z1*a0iZ(rY-HQ_67XHtl1pTAD3*COfz z-A1F-d23151@R3Kq;6cvzdNV%1pf70eQQ)1@P;uIfNrguoUK^Qc&JEqJZ+*w>yink zz72IPZfFWs9K-o~h_m62?l9y?^gOwVwsoreYepL%bwT!oZA?klvoUM~#clPG(8oy ze_&HcVjK8p<5fW3UHb-F)H#_qq$@;)d?fV}onUz$15HM|PP@?K@_|hKvZ#9+6=8Vr zd9nJW0RZMbe2)^pX~&mNE4yo=qUPEA11$Y4FLEMuoWA-fcD;pKa6AquPZ zlAx{2i2f9f8}Gi_VG1xOhuJxMSVA+l{88PRnxJfl_cf#4CYW#g?yPs@#kSZEC)l)6 zYX#hzJ+abr(3)aeGyfi0unrTK-fOte%dd`r27AvAoIlt2JarUwA~i;byUE3HY^oipAqij}D;o%8afo4Skb&?kWZ-9~01>l8JuZt-h;Mcf`;1@pT({ z-=aUST)ZI1T9g?x{_2opP}in2fq-GRK&H2FC=C?+Vii+QaAhrmRL(X8v)>!%R%}6I zjC9A2kX92h7PWVAqaAID-`J)wb!x7I-7C!c!?kz*()w2`pu0^GqNRk ziDP-|ziSRM|6S})y%UlfI}1%vUd0B4?7kZHi}#%2xp6Op{>Dc4M{7087wPEJA`ti4 zDrSdHh~y-cEtoH5%?TIAJ=m!?=R0x?1%ZHLU6#k?u-A78z(AtTU(v4U1EW*u!y=FL zNL!KL2HcwKZ2RxBsthRf5hPT>(y*WM^`EYCV#zchlAyI3<^w?$zRCF5B>}wZ>RG98e#F;-a5M>MeqbM5Nxw@Nh=h{mUMU&*V z%sxqzkF5H>E6<3&knzGbc12~Ov_c_-^75#7DVn@jPttdlG&YfPADEz-E;4j9jnzX9Y1Yj z);E1svhsc+3pHQo6MQ`Yc-KvEhqr#jWJa4D{VqreQ4(fhRP8TLEnADH8&jRQf;L)* z`3mn}B>61p*HWqM);S-733zL<9t0Y>A(ICWW(M)~d2Y&6R<0jD+T(_v*frtE@F@|p zIKC{FfBi-N=?-J)q_PG5mdV$#8p0<28(!fnt`U@38puIQ@p-AII43lK^IQ|m_wU#( z(r@@RIJz_Xk!;LHX-wc);PEvEe)4Rxv!K{({S;bxq;Xm&haH(d*P&(!6I6op)VUG; zI$h=s$P@cI2lNIEkiMrx{1~ea?OjjxoD<%#+?Y z^4ylvhPrNLDBqjk0e=4pM*qF|Ed{yz1~Cj&{A_NjCz;?`S}5P(u!!5xW-zh+%8<4?MQ^+x3~eBD0L#hKW$ z6*et)>sPholR5RV+anhLM^mB7eO{R~Q4r^IBQ*adtq01KiTTuw7!G!k71Pyh&vu20 zrPi}A_riX#)Pw@8c^1<+m@S!C^i3^^Ra{5!Xm#SBVU`+K2Z# z(=e*jQo7@h6L5j3t;P7*ix`<3@%<>N(7G)kId#zUH04zrX7QTZcVLlc{M=om%NJHO zwea-UEw7%rk^~+)6FRQ>6Lz9(OW%=I_*@4l=9h*N=6O;|tvyyNik&M=EEmiqEUoN!71Is!BgPB*N0I_{5@ zAne?d$uMX|7ng=@Juo4h27s<|66D%s>zhD&GZ9TJ5Ake8PS$;&%GEAlKE)SV3F;W8$Py_hEV)yo@-g_s!neoQ8cy?wJ@&0Jvg1RsCfS8ua@(FfOE~6k>Ykk z-S$ZL`6j`I@f>O%D>3L@nrbq#dppWX=~a;-WfRGM!hd|YgNbq#w4JVWr71W1k6y`G z_lSWz9XVX+1bpn3Fj4V5LoiX$JbevYlNx*uH#;6i!>>ZnJNcv6$%@LlS~TmN-NBm_jwxz#0lEoc|LVEleP~z8f5ncZ|FKhFGayuXsC71GSyUI_#hSg7o+g| zKPjl>?~o@i`Azt4a`4fx-sN*_olM1mX2`!AykJzA@=%gq4nZMT+yY!>7#QKbWzQ{3 z&ZB8P@k>P#dWrZQl~#y{&R`9YS!^;f;&Dn)%Ssq57Pv`d?L)`%zL^b1O@4?ha= z0IgH{J~4f)`ac;l{gKWwYgSmGc=omMcf=F?62dZya7tw<><5;+l(lyR`TPotaa%+= z9?DXzUEtlatE^B)C`C0Gj3Z4C52`wil4jCbvbadFcM?;+3`2kPJW**q_Ro05M$(2$EHIcRD1{A%2Y^_Xf8{#6 zh?u|xhc^?v(^<&JLckAcPRvI}5!P-=bDM?FDo}G?72mg}HCgN>rgV-Ge$;3M-QcLi z{LQy>zgc@qC6yZ5smDjIdtO^gXT0vcF#U@C`%IHorQ-PLjSMu(g~_$M^E^=Y@ZH~zO@uR!Swq=t-Lz3hTiIZXBh%;a#VioWdif>OJG+l5LwHaTg-V}hwtZ1-5dq` zWH|cnkWh?udBd18z$);AI@+#l>0a#lxMv^gHbbD>evSaHjEfkOf3NGox-Y8wyNw=Y zHjiLJ@iIWr$;L5=+xnf|n~jNv9I^?w;VJk6ea#%mR@K(-i*hSHegSXa1%a>F^^_0Z zePwuyaSx_f;x$i?62u1&Hj1ViGFXqb+eZ|C{Y?F~5ydOG;R#!EC1yN`$V&a)g*_dn zu;Q-(1+3OJ1Dw4^K#KqZTfd_8vS<1-+Q4bxOWoa)^%PBSGW`ha0dZKIDXJIl$&d6w zO1jfC<;U%p04Y~#B&%HXLL{*=W#7BjJ}$na&pwi8#0b5IW@pr+Yy3BONsGSchJ#YL zfy+w73`tmY^tGkqkh|Qx;W#LN5=99d5FukrNvn0f$>U_r?x$*p6CZw1L^)&Y&Hr0? zAudeggFlzzXob@9l9rv`x6H^0G9Cpno=qeb3~lYsv@4E>J-_^RusdPqGT@8o`toC@ zbJf{2@O^up22|tOjNm?I1i}WA5k`k#z*Q!PU!`-F7vyDo2%ZSGM9btC2)%6=KEb&i zJ%#-nR$Z^?aPhIAZXTp$#xI-cP;@`uu;HFh{C9+o+40iTna?QIvz1ZquUx@t_XqB*O4oY(Hyx|SV)(9CfX|k9DsPCXo1)QQ zIg$nl2(!e8Sdli6?lR3}4y%$UBA*=7cf>g1$LBa+0;?VURE~!vYD5DWGmf=}1X3uW z{%^k!W%z~iKQU~B2wD8*cU;xl(R;oby}p>+@;(7A$g0v0{k;L8Pnibo!)_<#kJ{hz z)GRo~g%*4S=dY_C37N;QVNhhTn*{7@oG?6My>w(n6pw7_)(6jxh}f9amwx?pn{rFc zY53|Je(}Oh3E{LrXaHQ#cTaM*U_24+ab+zzG&~)t)kqFWOtE%IPMEljOup|-7034v zg1(!gUM@a&YF;nEKiBqon7RHOs*;ZbI;vLXlG!tgi=PnU&Y~>W^zJZ zB>PQmqy`p8)jdStv>fH=O8CK&I{9w55p^}Z@fd+!iF;*63(v;BlNXet!3|}A6L0~U2fstT&f0$-+LxYpe|VJzSEUL8L$i5 znt@2>;XL#9?0118Qfg%ac9u>Vz0ciP2lJ~G;%SV1LSVE7irHy%Zcgd}iCHEuy7FdX z4^j>$ExkKQxYdLAtpno>H|gNSxfE#jJ3pq^j-@fygL}X)Irqm=mdmMghp5je(a6a_ zuiWh~=QWT#@^)73(6zVTOm@wfCe6iWJYjYA;=v|QiHSGErMrJWc%6({&lP;O#u5mM zqJ)pus|DQ5(X6h>?is?SlWuPTpC|8)5>9W+5iKW{5?h4=V^ma;ali{!2?G?~(L+~5 z-r_t2LsLv5CJmD3=C?V zMGAAF6baYT9XV}@^KA;u1bmDP$GXdX?~BaZzeu>%>zZ>~mz9H zD6jCDE|I^sfE5qXdkR=cSL;qtCGjwe!ZOY8M5lm|-ExeF|8Q$q`afx5_=agC@Ulp& zi_9I~#oDR~CSiau&>#djF-LMbl@L9z5bVCorT>ZdF0#!u27Nx32KrsqsB6=M6>rk?$Y)6XfHD>M<*c~U(dHONj^iX%|HEb`{J9g zisszS0&C*I3$52&A~5=OeW^^fI0+_#DN23z{)GEfHt!7}p(A{uO+6YOD!H8PJOkP}@@$Zc1cfDka202T!9(5W^0d}`k+*J`s-c4Pd{|LKTFw@qYO zILfO4qkioG6xqcqZ0u?|uLCFv^Y2yJ3x(p!IEPd(U zn=N_^@xePf^6VNLnKH#BDlLq*l~Y9QAsOnK1pjX?llE=iMQhNl3?6;?3_fO}3`uud zHX0jxLy8Hggo^YxO1H{Pxwi~zX=Z;=T-!*OdNeA>VpraSco`C8f#E;f*+;J9LwgR+ z^)|q{d{L2tig??0QOzh}-8mfXDgOpDzut3 zv_(v1qP0+YR4F3gd&yL}k_T+vL)s43<9w*4UAcR#M%u~40B$@nKn)Z&tfoF7jAsu6 zWps!;zkD3|mg1Fc17qQztD>AoNf&+D7w2W;%j^q_@Uc}%o!le*p@S%-5mXSc@IKMY z+6-kMX2riA_u~;@(6!b~__(o>0H1J+-5*cqW^&ant=2iI;qdu<`yTaSaOc0*mFyNNX^9&63Ua2zsy?ZZB33Z_~OhP@@ujbhhq_>(_(XQ^m~PsnirQNp*)u>1 zyg~^u@?yl;Cp{s$1j%@dlh2EmI{|`*kk}TnBUnw3gJo9T{vPwGwCWZV^ZnvP!`83$ zn7hVfWB0@liQB~0=E4Rf%MYlUGumKs@CjCQJQ{;^`iTeCN?lhIY;X}49k1-+%eJKp z0Rc&0&I%z)wM1dn@5(9IPO%dHX``I!(%DA*6i{y3zAu+dp3QfDKUEV_pgm5%$KKvO zx%&rWRrM#+rZ<$m%a|a2>3yiY!Jf&ccb_uLqEx6fSR zd4bxIZTB0!k%lyx6hE(CIuXpaJEV5tACaZ)2qrxm{z1dQ@0mN3EC@M*1&i(o(^nm- zz2;Q}OJ)w<+(tO`_$e_N*_qGV=OO~ktjkmKyiG(|=d;CQki}*mQMsl2C8Q7O?uMUM za62&sWtKYHFk!abj#=|+Pa+o%+3W7l+1g%pLCb>~{r%TIppg%@=cSm3)p2>zRTik! z>*-kxYun=9lyqF+vp2x8@mBJa-sQfp39Y3O!uRR<0qxXvwamr>2b(;dIC{G|#& zC%CrQ2)1Fk%^w^bgp~+16dinmE;QEKDC*!&)j4q6D6Si@Hs;$(DM^bo@BQIIw`#aG zN$P=7D`BU7UE3%OGCb(3(~_R|HQ7~T65-KX?7XHwn#`3BgNMT(xGklj$A~EDCrc$Z!SKcw(_q*}u`!a8+u#Q)Dnl=>(`mDO+l!tMhm3bqiZr^R776TYd zpOf2A=}hrCdO%5Yu(*=EYqR*5qcSF?hBY+95J3(jQtm-;KVef~I(poi?x9WNoU0~7 z5cNm+dy$FPl(%*FZxw@-1X!$2Q4*N-m`6aK38#Di1gI?UtN@c`tF4{aWqTCw87B0T z1+XM@*JL7nM=M7NT|e`W|Kt$WWE?+rZ{4K7tPEKZ=dY#s$$hwZWcT$x;ih??5Cxp{ znASn0JH$nIB7w*>JBEe)j+g02Zgte{clNqb?2eE1T&8_WoR_e}xy#u9S((*YnBjbj zApf!|pp{33C7qs`eyAp<*q)1V#{Y}uS6FjR@qL3XVdE$rKU=%W>3n2CbTH>8DHvAO zCP74i>+AdxH3IPG1H8EFX2P_Vj1!CGJ8_BVC~@8BPh+A|t8Lg^AKr;b#te^ISU%P~ z8K>+=dX$toyn80A>KbHqc?K!cPqX-``{{jRytTS4Sa0N}!m4`v=@P^yb>Mo5CbgyDGkc@H2@(>^ z!@b)p_omzmy`GI~tixtt0ta-5H~uNzlr@;aycFCsA#h~&8daiuvPY9tkYK|cl0A|R zNG>BVvZ{HHAEJvF@J?1Wcoz$!4+@IS-((gQ)wX3|+}L*Gam~b@EZ5WXhoIY*>m0FT zg{nY{T~9jlK5GgU`wuI@mR0>E32VdbzIT88=!4>ur4A-w=>6+laW`K&s$HzTD{x9S zNq8W;k#U?9!s_tSLB}By`Ew4v^4y(XtR}qX_0wkVKITM0F|cF$);8r~tCsM>iBU$c z0BjHdSqV$9&z^(7K4-|uo)eBpNv7z!-l-D!daxfr7dRKa_2YJWn8|Ca;HU3_*uGF@ zTxDQ3@~!7rxE<*(x^_Dqx~!p2RZak2SyVEd55|MHPU1gs>6sp7D|v>Qfc}u3A3Tmn z6}0AkDZJPhf63EBpdOf6`g`l}z-ZFj(LkcWWha!3V3=dTlHtct- zl+H_l^>m12H#*ou&QBMaiHAhK z#(d{K+*_JE3^ex(M9jzm_fhKHgol`gTTz!vZMdgOvNOcWT!r^6cj6mFoDjcC&wgzf zaaJ__kpAQsUK^X0Gs^Hxd-P{P7qx&$Gbrdp1L<0R+gKc!F#YL61QPL#eZ9^9tgWQ4 z(Kp_mqGwkz%;yk5LF}MoKqCc){~Y|0Ls|my6p#3OvduJ=K51WnxvYVVIgCPfH9yz- z~kpUuP6@V7jzl112TeaMiL}sraWkc2(Ap(WDENVf3#HIF_zq#sx}g&P0Utt--Vs7*{WO4e|?nW#h7V%GDQZFXN*xAVyo@cPq-) zTk$P28+T;jivG5wv*+a6`U5b&-YzVgeYjF7-S1zhpv=C>&5ME$akV4u93&=j_3XW( zQkKH|g2gG{XA(Ba`~Aw1&UX#Jz1Eg4_h(L>&mtM|J11(Ik5~KTU z|HIT-hc)%U|DFy(LRw-<2uO$0se*JVC^bStP{7eS8tG2y1|^i1?hfhRMmM837~9?V zckg}f{cq29o;~OMah~%&pZELq{#g6arA5okHW$SinVMa8UprKf)=^g(0b6L;j`+U* zjgdh~uww+Nb8i@#(Q8pdVBan9v%(iwsnNtd?Um4KR;>%a*Ms|4k$dH)(x2W7)>oV{ z=Q*YEayG;AI%|04oeCo^G5@6xu$NC6iGN0RgBhm56(6zR(i387XE*%;8ayD?8o58> zIrv$m_IH-)FSq%#t`d6{Da_}<>o6R7oBJChkpUfhBiTM3_+BsF-mZ*cM3plBolVgYUCo9KD3__&}+0 zzfJ=B(7~@yab)aQA<64zeQ0X*uCDKWikrJ=R~>zP`>_R^Dmj2yrZwI=Yk{H`pr&*Z z9;P53X2eBYQ#fR$)CHt|_9|FHci#Y4KVi7G<{zfiUa6}+<6<-)sEq5!ca!4=rVC&+ zzWeE{FMC}OSz}Y~{T}UfBKC|)s7@&6pS=4scSRYuwU0OTcY=uSK88o&2<6p=)#=8_ z$f3mKR3ZQ594Db1uk$zNs$j#bBcR+3CpKMrUo?a7h#Xqo^uIVo5goGJx*waj(GlMD zm!@j9RhzE|Am7RPje_McU$91BlZdnWI_;v=Ge@O)tICq+b<(cPw_DSnyg@i~*B=J1 zw_GaS6$h*%S)puLf=evCX)|LzxNod4S>np`AfOpXdI0 zteF7dH8yEUKL3GyeV#MuN)fc{eQRw2AlIz4t9Zvn3@Sm@Z(>uJA>B`jXQ>xw$@b|P z8y942c zW5TPFeNyP91;F!Q1~+2Nr7>0ig`xt9XMCUuO!$iRUE-Y>RLbQg5B@T5@7EMvnK$V@ z%$Z@vRc)>!%@yslJvkcr*9VoWB`MEIb9X6_Mg=TOsX}Yv+^`hyp}(YM$`#b4*NNDYCv59iSFjlUX) zzw)}+nV798yQrDec~m!EIxfwFXvZAJ9lU8n=716`PJu#3P8~_EHU!rll;UaPg=wGL zb`K_028hUw6&$<($0uazz;X<`5F4c9_KYak;Kpw)OxkwesIsQbr6kkiey-Gf{O)tv z+_=n-^aS+c&f2(aO$+vAEk|)myujPr)p?IiD^=@`ByTNyL6&)S=5M*XfYox%RWNI& z*|cbLNjU1-@i5)^wYPr7Us@2epw)1n7pkfFd}T*5UM)2%$VtzO{fIONAV2bm>&(uE zB(GNlrkI?*)@^l0xio4Z)8pkgLVruEXEIA!wFG8|`t8LFE}Z9q4jhHsQT9F22}aYq zTOkp%Ld}mC4g?h^`(ysH`IPgy?%LBMkF-uH1vOZ{&2$&9q%#uC!zcld?xZ*fTZTWR z`8~02J~GQB{CLUCk^_ETM0^P!Q_6(%{xq78`6X|W_v^_a=lyb4Ht*8hlq1$~ILjUj z$z%|7g<~SJ7wSZ|u;CYzKQJ9MA5vlOLpW=7MbT(pcJDcb zWa7_vbH`hfX3}?V)>qH4lUHy>FOmX`yR$nnB=AguCh0;nv2Khh(*C_J8R-U^=;H+ut^k^{=HePH+Ftz`5zZxVGlswBl08H}5mj7wp@d zfBNA1V@=Qq*Gx+x5M^LgR^|Vtgm@L#jC!n|kh;#^e~6*zK-zJTICzbs#ZoUqAuB-e zW-_89k1gEmB*5WF^3owd1G!&Ox%=WWZZ{O41&6q%2ffVveurJ;0a-_29^QHARRMDXnXEhS3_gNqq znA2^G<^UAyIfsvnn)u}V{Ccro`eDE|7oNH0D(#iHZn*DM+V}jFtGo*8lDiCG(G(mE zF=i}qYq)fz!DxJ!BA+c!#G!E)BsGJRG3sfw_Q65g#On$U@2sK!eFJHrPppMQQf`zIZN z-nVdUr(iEubq4BK2_jQv@32wC9Hx!^vf?chZ zjM@EO6NWprH7x{BP&ofQ$wWK?7dq;Z-JdD+mfs}U(|M9mfRRy2H@S<^;kPL3%u%Fa zJ=19!hsMJc=b8e5ZJrOzyDjQ=@-Bj8(rGs!;*5iKspqw6)Z~o=5AH3Cu!5q6->M zR=u6{8E&C*3>iaENcSG%JBD$5$~hdvLWa@m1wTWd-Py|woK|4Wd%>t&4XeatmZnbD z!)2Lxk+~B9Au!~caiMLR;Xkh$4kjbcohFH`Kt7Q48`Y|eH+$C zb@TN9b^**V$3GP#aee%6%lyhhE=LfuzYiZx#6*2xXM;skm$Jv?I%DfEemZY~2a3l3 zxL0IWtRAv`*(n(f|2|J{7{~Ni%2se^8GD$g)*aSP6=_S2yPwIxPH;o~FCp-ak}KM_zQ37EdX{EdsHtnQZ2 zviY1Fllv<6^D1i?c-|TjNwOIfWyImy%K>iJ-{?Ug&lGonS2e8fX-b#>nw?yZ+6V}4 zrn5rY3TCba&>fL%)0qFnId*`m@S0+e5GZueIT?ntVItd85A+TT$*uaQ0wWD5+}=P$ zZQonvNybf(!*BY|{EZEB4;kt4GE)T(*yN!IZZh0po-=}tq{C7K1bg$~f*S0s+ zY&K76MkK@@Fcjjr=|4%V8Io{0kX-9R-#!X?^$_a5PBUMBiSNA5mRT6Xv zY6mrsb$3C_f369KP#GYl~2-G#`H1-J^&X@nt^7kEEDV zgs#HxK1F>Tg>lFG9ku`nyU*ftGd!a{D%Z@&DR`L}VsoT%0ptEJ;XBgy7VB#~D!yzT z{(A8MYhBs3cXM8V@ZqI&K*eC-KiCmUyIbJE1Qy#q`2#soyV2C zE}(ZH;${(RZ6dcqhG&cIP(pfwlpr0>Kaa-#Ebg}x#i>1oWPQLrA9quyZT3G&@=ZC< z&TpUsT){NOB!zm$IFLU>qeJ+!!Oau!R?3XNBR#^n{Ob~UW5~a5f}hM~A!W#%4T;$F zJs9-qSn^hK{k)~I9%GAWdJMTx(HBFH(3HF`@B;;en&9Ix9MM4TcS@84oZ&rekaazD zoC%6ZQzj{y2pt|Q%?o8*WPWia?LzJ;PcQ;sVm|s(F;v^$b-o1Pdh-HZv?x(}spGmp z;6hPl!<|8b(*6^WzbBi^{bGm%eK&) zwd^i1zUMe$gP$$k2bi${o2cFXFir`a_Uh;DYE;E91_X{y8$m9&=e?4^7ajs%tC7kC zmTqiCR%*uKd$hE~94+P!w*JmuAdsr_hlt4nwZgWF)Isv3;nq;?_iye=D-?0As-GC& zy1k?^rkbGC3AMmYAHt%Y?E-cJS%s=rcSTYmh`L2X66r%s=6`RPhq z4N_AKG?P6i+u$t;gM4P53pXyi+L`}Y1?bbg{xlkzX4jo6kZhbbWv;M#nOrKQ9Pfbq zLUwO(!7=Xoqw_V2Q~>z-X`TRO)BH%+ym+j$%?xF|Ux$s!VO6n7&ST3wZLjKvDtFOI zK<@1)6T6c;A4lsIOklN|mRb(+skXaT!TJM*tPyfGi3V}hpALJb4sPr$)erQ%_jz(% zA>6T1(ZW{vsj0e@9q5rdsUKR__r2XK$`UkB=iTcKn11Fd4sLde$xQ1T7C)eOCK+&nShNOrn6 z{&mdgl8y~H2p*BF@D?qA22A=$C8KP$#%|r{uYSBwMcU8v*FHO(`-No!>gH{pP7X69 zfpbxGlHx7Wku0{^!;*>L5-)Ry%oDXRDel6qCObUmM*9wlPtV6maZL(ttTJi{%bNL{ zC^1zhx*H-0eO2dwF_?-zPA1#6%6!S+381{57-P-0I~t7-pis-4fW+OYX9Is#_K?** z1B2$>IK-WMo#AgM_Sdk%K2K|xo*d45jUl8aYVv|Nv!T!Age}GNpHsLAMl5(<0|~uI z8nTe-na$_Qh6k>4G`Ke^sEyXVC8jGbHVi)^o2Q8Xx4f&&onW<0eGj8{v=fU|lc}}A z?$KDkEV}6WeaSLJwk=cQQzmhss#6hAo!$?4^$Rvd1B+h%3>oSIN9BH@sLxgL&4*-J z67elpT#0?`ww~`?*LlkZli3@-@?&jKU~98zkH`g+s5{S-dX*BIa2dZ=_4(rPmk^X#aL5fZ)lzB8kr?V72v{)b zKb6|op6Cb0rj5jpJnLB1aV`z`I64uU8l!!M&BezOmQ7&`@8+-09OBNM1;gcT2QbPDv!;p$Y_BGjPqqS61?|X-@jab-Z!;FT_CJpO9}=tZQS3G2ue9 znUKu24*ZqV<{dr5&a5&=^9pY-RpHW>wjCCu<5Tq*q z90Y5Mw-_SBADFe(t;x5)sknW8uk0y?QY8X;+(I6q2+uUS_43Kl8$Yp6@eX^0G{crX zW(a=bc{@r~gH|QOyYwT!Ss=%ZIl8|FyWuGwL4cbbOlbE!ax~!VW=U!M7@HIwe=MDer)2NXno?;)6vI z(ZG!r3tb}cGQR#nJYqo)bE7;6nhEFwOB^CE17;#zSkDx2W{JU^fHQ8!Pl$9DtQ4gf zAS=d-YtbT^MKzqW;5dH$gD7yD#p`MPPxX-fnj6u9k6ZcvWnf&l);1&|chXN;)QX5a z@5DOIvE0ki9`~|ziTF-5npf(bLh;Rqc;jGphR%fprd;~xxmycm_6*bl0KkdAT-Bi@ z+T`9^S_L3f8X(iCfN6>-^Z%czspll_%*EWlnLpR4QQx^D;_h0wVeb=uFj=K)Uq3fK z90oWQ7wcR4kuNCz2-f4Q;^i9ZPVF!d9xY+JO!Dm3@?svTz25$~K*hXeK{j+yc3IWg z4XOS*FFrxyk*o7-FR30rYM=2u+urpCl|_2X0|7=Aw;1ZoaB<=Q1(vCVod3hhpDb=v z7;6qPdd7THjdU0{T@5-&H5NRvD2iKuhj$(?ed2|y_$9E(NG%L7r$7`4@OJZYPmGq{ zfHUX10pRuqpUmXQ91reYC_;9M1`xHD>ml(zhx>9mTKDSjK})?@5QJ0cE_)+%w*@i!hXb| zjZSM^YVvin53RkW4XsU?`Pdu6l~V&&4OA_}3V2^f=5@riG=A$JG% zha|K|cexFV`;d-h)?pf@+fNPqOiieuP7QuG8A>b-G5+j|Q9VaPd46ZV$PFY19=u)? z=%;dEi?EE`CRpp)jeYq>Z1h2ZO_W+iSn&s|vdH87pvEwqWpDlO3aYVxmuO3A4~VB$ zt7vd~7S>jDOQ_ilTi-lUt;{MAG|VrwXwV^qkB{jVIi>k_nv{9L>R>N*Wn7C%PU4r3 z2=|PFLA>O>MoYwoglnm$rjH8IvyR3hA1K!Yml45xa2y+JB^(FS5vGnU`uulkR<7xB zPbmL}Db%7oIZUG(f2{ev^T1W#0Az?_#KT8VR&Vg`eEM$mPmJ0|;1Sox#*dMZG0|{A zMCZ}7tiszGJ)rihZZv2GJ?l4p*Y<-GUuhsMW>733vhZF*OTqD;)+5uC73kw2>k-&1 zw0&ckf=-{Qfv9#cLtv)B8E|ho}hEr^^Y()b3wgA_BkpH#xod zzey`~h|=3>&i@K`hHJaEc8@zfl6q*056r2?_54fcA((`vAk~nzmM;MWhH%H7^f2i^ zEMrRdnS{@T`;Kr*M7hkCjq8rZ1^SC$QX7vFyFu(Vg^DCVwyQ#Fd=5T@dEYpDKx z>|o4GrlaoBR@=yaM!#~vm^fiZep`V9!-v4ERG%KjHT4XS=^N2ktAv^gWc=no$BD=) zkXCz!J6^rnttVF@c2_FrG235*U*BN4hr1G!FmjcwYSCH?<3a9!n`1=ePMR0`$ zj)qx1PQm;!u2Iqj7nA~IK#{vs5!Do%rgm3!ul+J$yf3@l?-xuW0)ku41~v6uq^GCt zO&6QG>Aq5fdegI$<2dr3Qn@f!ROU89Yy47^Y35?Re%)5)doYBo3{5_$oiG#Dt_m&M z*nD%6fipow9OP?ehd%6!B(C3_-k%|?no>)nt5_dQT-S7wMk=G%ge7`%g4whMq9GUG z-$*-AlaX*TwDXR$3rGKShdu)3;O!>mo-Z)>f?r6+InMzK?wwS!hK)YZ7%t%^GDzy> zN5SQ032wqv7co-!x8l#-u4Gs&YFxV!54QEM7m2%-#`fwtw1qR6t6yX*j;nV=s4BA? z-Y)2(7)lSSAeH2X;WPQ32I#XV>ilvHuU5q?TJ-S^PR&GAAYG z1hx);rYraS5sS*}Z`w>GZepp9?(|Kxo_5!hmxLA z9t@7yZ;uEPgJ)7uShnD72M;z3sdp`U_AM{d--I5I2^P@x0GE|U$d70eEmFZWa@{l* z;M;#hE*7(=*`*Ct5%U4yWnzEzG$ui^J?=SY&V*T&+C=jU60h%WX~DgW#}tA1_Bss~ zQl5N3HO;jRBPkI|O^M}YS3A%h zqniK=Bf0!r?Q(|OG$qF0SEcQJE}Um{9cjziM7bOcVqKA2&O(dvK5Rq>Cf6E@R}_`I z+|XQvzOs%RDa)&09r^MkPkq=+bfunw$_}_AfG;{TFLgFFm>Q};@tgaHN&-WSL{7U7 z07-iARtkn2Rze;?s?o%)!y9rkm>edZZY%adgR;zPZt4|(TbTd>lV%lK>dHjZF_B$;tn-hd z;39c}WRp@6{;JRB_S|W1UmyI)XcBMxX{n44nyUR-Py$nByzN}9@7NERUdmcd3|`Ro>ZGR3Z29t#Fu|$8G+s5?uhxUIcd%kY&!w^ox@EGc=$u=hcQ=2 z148Miyo+oe^#OJd??*oD1w#cTC{u!(MrxH|+K}KpoVB^N&ty(cWo$1MA&h3zsh6!{z4DI60hNSM?A=;9zb_F#xfT_cXSnF@GF3TARndFdN-3Bs^y8 z^wWd&wEp_SuPtDFU*HKoV0?zFQ*^-tx8X@a1nl8h?aD<>&cRH+%}{^@4}McY>+td` z?2R|e=Lzu}hbrL7*KPvT(lG*9X36AB8MrN9nFupUEr{QG8?Eed^pnkf79D_@Dn2br0$yPZWIbo7^G*LQl6EspHX;;05ce0 z-Jg-D1}&Uk=2^MjQDaWS;^Gkud6%Xz0Ml&_8i@twMG?J#WXc_`1*}rN4%~Cn-g(Z1 zdQa)S^_on5gNFSR+(@op27R?|Kq1h!G{ubO(n

      32&0!?wz%QG#IYm2h$0YcTe9j}eO1i4nmVU`xBz=>Cunv_T<5Vm}VLyxe za))zLEC+!0$#QPNZ#}1xW~afcD?gXRM=u|E`RSLz|CQf<<-H>)))@5{LV-FNDZ>0g z&J2ekU@t9O&l-O6w+3oC<^n&{RjFZddDeDDj#m}IEAL@9H)h5de@4jSu$9uecX zo@Kr)jr;3^kHm&?qEvMl=!d|}cBPtlRty)&!lY>5kno^=dm#SFG=C98*q%sP!5Tc< z9a5eWk|Ee}?}%73XgmzRJ5I~F3M=adnUl7fo)_XF^?QIG2xGnx+>8?4&cu9hjp}*Q zyKymD2ONT$%Yd3!rHuU_0-90@VQ6+VQV&wPSXjS7nC{uXbia%z^QO<2?#Sl`&*aCP z-6`hz4&UyAtiAzAS zVtx?P8MgN4A!3>nra|O~_m8cY}M!A2}M&!?b=;zLp!L zL)yWBK7;`_jaKT9_Z`Djk4Ek2D@H``kB5Q7=h+(Kx*6O7lndr?9iU`0kh7XiBuE7v ze`3pNoXvE>!;ltK=N+zSl@572DOf{sXKFX^0LP48&J0}cOY;L<7TZTUE?scMdTB2zajtx}~}NGFm(o2E-;LgPxRw&+n zsQZ93a}O_Y{?U<9*C@`HG#M!jZR%w+=Bl zMm?nSTuCecNiu}d(|=Zz%P|>*(@p^Uind%ntw+AT1ax1EX+Y(j^`8SeHb<$~e%mMU z(V@(7WQBMbkT3DxHI?`!j`;Ha-gn3i?ieFh|vzUr}sdg%ZASEE?4Z6dvV?btfB_TaTLC~71#|n z@Ilafh`2mK2xGeZzJi}nUQZ$Msb*>OYLMoBu?@$wJ;ZOP*VL200M(Wgm%6inDX;CP z7L@wZOHSzK%6m@qqXq}r+le<&?_ppca!UGHgC(a?&TuZS(zR1Vy|N&_Q#henkG z4~3&yEl&o@$CmSy&kt1UsivMr^5H-e^x-Hk@#d@MJVtlwV}*Jr@FMx`-%+rW&NC`> zK0wKYe>x(r2lMe$+#fI2dejw;Gtc@Rpkr`2%x)!3I^IdU_Cq=d2azi)fDOD&Yyyt* zWU*ehsLxkZ{seC#@CjeR$#L*zMp6nmpB&c<#q@j)aC&|w@UMf~OZN5Zn9FN|vPcQH$L0&6+??=i};pP&4lKggHBQQpTd zy|QRz36HbkKR9v%eBa$aW%0W@u(#iG+x*)ocHPFCwp_)0kgw|K zwGB>VJ~;;tAmychFIVZ|0VVJkyt*vDyH`Me`MsHz7XqK4|MEp2)Sw^GeRAZ-aXTox zHmKq39g6%)JI6yBA@`8-K@ae_1=+46%UonE1fdrnqF;ZScjSM-h9ZM^fB({dlx3f) zIq|+fVk`X@KJt5WKK)tfbbs}iu74S}{O$2ycO^S+-@hh*6`#yE7n3Oe(d;)uo-|Y6 zJGkGN{YHFuoXg&oeSml?BclQRZE&N!)W|^rUjSZU`N!9QH{m*P3Fwgle;;@Qa_^@D zHc4NP1hAfbCOeY+d(!Lj#q2>KT^sZN5b&n#*MK+#gnp#9_+qA>s5bux*?WO~)a*D- z0=5B>8pZEN{Dyob@Ot=7ym0_1{xISkf{VEqpV*z2cS` zUwG#M^dehsfB7GMCvS%T_WB2}zl-vpFFvp0E&pl!!Ov3OPh^8zl#T*Bsa>hIj&!Br zt)%*aIL3!$J5a-h?f39mw*lCNS#&;dCMq01%%A6T-4Fl!Fssc0-pc)x!0D7s`O?&D%WvB!!cL1NDQPXj$ka25TjD^>=6wVYvj z5Ai)kcPKu(i_M;;&PJ4{3h=)=Lt#FcN)nt>8G$GsujL7@@l>C>P$p(AS)fy3G5yam{a zNp(4Jkd^bhfg1Q5fd^4jQL@+=YO6H5*3?gF>-GQR{8Usv3LHRn(+kwZ{xPn5QH;?J z#?Yil>j-tK`H~`VoDttgzAg;^b-+Fhrz+tvctl)tug#=EvnIry&CIIJ9h_3>B9pHImr=hG?I2Ssh?CGesg`ynh3 z!}$H#%8)Y}nCy?eavY?R6mR4weV?bi>C+iK=iMgGwwy;jJ5V^yA@0id=YSfX#8|Gd zy!8r);Vj!%5l4AWuwCOBl;1q^&28U=1IEve|IyWr;QJ`^yor4GqbA=1>`LPuEAy>K zGm(%j&-2N^s$#$O(1)k9UBDr>THOoOk>fN_`iakeegswym-r;P<@#&;WeJ03>_fob z;^8=}cAR>*5ywmv^I1c&`FE4wdR4c|7nYGuCn@iJ=e2yJ;r}?WmzCYS}wgd0Oe)QLF?P=k4L(vwEbj^Prj(C4vS& z@j4b)73is-PlGr7fr48Vt8z2uF6!swF-`->V{^)s zd2OeeAA$WFA`PXmn@B7S z{l^$d`ABtO>Pez=YMmRERR5!Yw4V4dNe$&+k^|{PX!|49J}**j?X2zezY9ni(!A=??{ zS<4BlBh=)$%tQVd7NO>*A9;I7Yv=oZ#~1U`^D)kYI5zZ?Zzpah_Mwgu7oG(>q4cLb zX3MlAz$rL5@yES^sZ=tqxf412rq^CSAeqM(ICWF7D-$-0}U{5sM zb^yiU9)5-%ezs*hZw%7UeAa)MKkHTQ887+gM7Ux_f)}0&x|mol!JX+A?t`;q9Bw1s zI?q&0W7W{lK6MB8x>C`%lMF-9F(Gndm7Iq$=P)H17kcBoXv6d;ybZIHoT*!-eVB}a zR{W&BLB|N=Iu4k|0U@s)=^-A{>shX1oBEnkk)Et^wI7Mjws42pX~lWvP9;4+xqSg} zJG0Yya3A>^h#w`F_{bmR54j}1$I|mF-@u!NE!~kH4gB2?!T8L0vjfk3k^O~h(u&}6 z7AN;G=VJ=x7$vp8{V3(ME-T`n488-|(;<%rI9Xo2%A*7(^M-PsxYBDCurYtIBAZ5o z54}o%4b+T(KC{AQt<-G&ZTy4_Tk;oa002M$Nkl0C>^hW5648_XRipF;34?5WmUE*c6J(r z++k!faZJFV&Xn+TYv|sU;el~YL%|x7{L84fiHc`Q~vZ`HN;T|%g8@D z-=9AT^u62Xl5Sec{UcBVdPHrG+cIMIAM<%QdXDnGX?hou#ChJDKOHMo3#4Q#&4-5-4bp~ zg96U4b75FMTg=X9ac_FQpKlWTH6!TdTdm`}i8Sa$pB+KpQ_>3jB^)`?M|`ko&7E&P z4K4%cY^_Bctwh<~hK2p#Ab|ZIv{txp7wGr4t zE!N|aU+uK#4iNI;Jo4M#-L&5U^nO3EFWZ$b1XlAMa1zMT0=_5WG&mZLzq*mZSBy_` zxth<+>Ly=*>`lOX9(w?+BF+JJv2y(~^ph@|z=-jMPt%*k?fmcjZy{aY>*GyWer?DW z<-35j`R(Btz|KnH$UL1igYSFxTX`Vtq;lv^C%SqHOA z^5^)G@yp}WxV`in_k80N({=R7$S2NZ+1r1!<%=ypmu2%?ziVJVe0JkAH!i$x7Ho9z z>Lul1ewxF*z@zGHwz6tJ@%cQ@TA}~Z{E%}h-@y(iJ+#-FJ(TYR&IFr9z!$)9H*hv@ zefD<>l6O6Dklr=}oA~ONhB{#QPH-#VEz)5SDc=UvJ$g0pNn0ayK#?*?=YzCk%Dv<} z4xB-Iw*p5gZ+q^uB|qsf)eWqH!=49j;VsPed`iR76x==qJ{|xpRP+xRI{*S`}q>iHkK297Ma{4XI zfZY+ll>aQ{%AEkFWH-9g12n1!1L2LuCxA6YPkt|OQvSZclcNAa4tXTNM@aWb0Q=>8 zpF0B}uZk}v_}Y;Gj-%`RZv-ms)Ori+fUi3M#LfU52{2aR0Pq)%1h_u(B{``%zM6Ou zH3-vA0M-P(<4zvX6o0Q9@QXL3`)`VuM+lTh1XMBsEI;80@H#yv{`;GuK*@2=vJ|d` zldegx#Pc#;$!b8dL~w=}oEe5|;dLqbFF68~Gerq%DC5_{boX0d%W~g3=R}SP3j7rm zC>i*#$TD&3|3nJpRsOvusJ;~mzLh{K@4p!=1!D39l8v6~P>@=HmDtD~Of? zynGe8)&Zb2{QGKTDC53D8A@2byuAK$lkQJkCnzvMfxk@@@B?BTgq*2Lkt>||_UFLf ztiumb4F5x6`2TZO{+}TIYi#Ov5cpM0{l6XgzKoZ;%I?c-8pomZ*(VF7z-Lf6`N4a% z_|NPDkmZ*#7hd4|_VCrGuJVC+_3YS3MvyW;@UQQD;pSgJud`?7!&CXNL~*p1kLZjO z{yq?jm$liChC)e$+7#}0bN4WCA%@)n;1H_(+kh{TdIUHJg+?n-6~;oYmboWjd*t_} zROz*x`?mlG_$;TNT&q!1sQ^f4L~2+A-;ii)fKB8^0l{Z{M>qh~1Fid!Y=0P#`e}6r z@p(X{D_cv30r?PWg{8zVq5ygfSe>;;J+nFc4!nxS@fG9XdG-9&x^WZ~H~?H2qyJat zj4i*?iyms*D^p%Mgnz}^(R1?Bsrs`iVO ztO?mqJF3a=1FGgyQPW#7C?qqH3cD0K$!FLZY6w@@C553U6U!H!m9?_{taPA$YD*vJ z9sF-NSt)-HxvdEWX+8xwT67dgftOKP*?$cIn*+u(BDOFk8Y^ssngM-Uu@x^SBgUDn z@3#R5vnRs1SxBF(s_aZC!0P$WaVb|` z93nnSd^Vdyw*p&f@d=@;yINvUsCi*S<{l)BZCVYqTIvG+;!mfRIxG)&(Fa%eNk_1)R)W!mX5%> z`Lpux*tD@(V|*6A^-|MaZ)HrT{?z-vd+Nim+cVeisd)|ufXyTKzxp)ucspC7K1$KY z;Q|#`m)Vl@5#T)LQ#VjUu6^<6_}G%;Y0r$0=Tl?8?m!_do*k&{4w2rDy3+9(scdy? zE#MP)imTLNqR^wgDT#T7GeTB>2QCb)qOmQ$2%768ox4 zhj0|tnDf&WrkjC%>=@zvt;2lQ3%p1!=_UT=cl4<#3^_!hrz%fk2P>u@23A2& z=tsYkL%^j-Q|@Y#)*u=EMvA0yZ6%-O??eIG4ID*|iq8mYJLDem*b)+&$3;e9#GKLuyyyXGILfUJjU;DUTB;G|0Q-FiG9NAty>x4RhW0-p$0Cr`I z!|Uc^=?;YePmpltp?n^h?s>p+? zkaOe+#Xa&cZ{t1&{fPHP3$AqQj=DOzTBlp&3eWRrUArj(Kjn9Xxxkf%cgFpTaFY3| znAxentBHXJhC};%gjDClw#tgRUG&0y_Re|b|MquZ{HKGIu65q84#oQrbhF=@*UW3E zMG+&)Lpkz;x7s z^nN1ZZqAiT1lbPeV?1#$4c{i~p zS*Li*4?^pZFQn6|O8hpU+#-Ftc{+Lj8FEuOYKVACu{h+G8~1}(J`eMZ{BoJ+ zr1>8JJKJc%d?4P*oG*TwoUKc2Z9mm6{moyt<^TR(4|1YB+!@b>Zl3<;MSey9YLU=w z#D_3t-T|!376-hX&yjC%Fq=ZE`IF<0V<{cl6CSzp&5>ML!KTTU8zW1-cadh0mkftUmrffi&p-AXiDyqIPYT;< zEY{^afK8Z>j{)m2C@!JC_4IZr@#(Z69`XfsVrWdyv9-vt)BG4@Hpl<(j9R!_kbNN}WpPxaR8Z; zXtmfOA{+rOb2Pvj(p!03*%tNOD*hPFDMh(^iHW!Kpw1NbY`Dy|D?1v`pE^v(oy42+ z74kdpW^#l5hRZ4c5Epx}lKx8{q(C^%@*WWmBRDiv__8hJwqKHy$!A;Q`x327m-fnz zBZHWtdx$qO3Xb3OctiB)jh>t``8~`$TV6=3jzc4@+Wr9ZU+57cTY+u7>6`<)KZtGZ zqc+RwaAZ*a$(L=U_X00v>%-x+u~?NqPJ9G;{s{fuiliqWeMydUKDDLSGAJZJHuIf- z2H3z#`*}d$ejlUUW&T@6xhKglkJ!i5vZbAM>5Zd@@4V-UyMusycMSR+4!Rz3+^!zE zdT|_n?l}3SfsO}wjrh&~@y;VZnPu;I>pL#LgEQIRKkfa?-+wpVteZ5&d6_>wezy+O z9Pl;l{HHf-^P|MK!#U8Kcb)UTx8~0yb;Y+4IdB*7mM}*l>la{ltA= zzsU7G&o%G6&sZ~X85Ea479da4cqE;}B63LYK`8qIa5-{fG0@P?&#wdL&^X-S_#n3{ z^zof5Nu?H`Pn~;!bx`p*P=|pfaes#O$|M*{5Ak%M*n zkGK*)UsC)IYx$iA_lKDdgS{*Ji}Q?D5BEQmuME6yz%hCq`EJA!;P-$W2@pF2;6{;e zB7Y~(lV{2Q0TznP;(lHJ;rv&GuN?_+Q`#wjBLRMsban!8M*$oGZdBit>j?1Uq))PE1gQH7BqKK3hKz)NJ)};1{w_$Ck)n;0(AQpxkG(bk^Jp z*(dq5(J|m`@ka=OqxpvXPxuPDHT!#dp8u1Mf4qIxzsa)iAHL%kKeUW|u02-)@Vnz5 zDW;PDQ&r!ccaW;OU>`qUDpzxzf_gy(iW2QOzkQ*mS246KTTFZoKR>uHfaz?Y3SFh5 zY6w5LFCnvx&qe({19%>l$Pn;ZKIiuXALsM_G2rvKJIn-5L9N*hoJ&oQ09E7~E`g2Z zSD<*=3Uq666b>j78d1iim8gC6=Os#6e-)qi)LX1C4r*u~pT@>{(}25+M_jFXweISY zu`Ue%2d>N;n~MQ;-N@Qkd+^}D>nrEFPiNVuKYQ{|KK-w=?91I9@9VJq=Busa&rsiH z)M7|wRtKGocx5oH(veIoI@saFNl=<>mQ_$B|{As|D-kP6`L+>zTvw^WIEm*&vRA0|! zyTWkcIxE|iU*8y1`%zCmKc8DQo95<>tbOH)ENfra{!;racBK5%cmLMAq5G8wuPncE zKLuaPPsa-S6U=||v-RW&=MjqhJ}^mqBwl5(_QVItblME2gWPyp^N6xNe8u^cQRvMZA_3n+>qnrfff=_xm;oR}AVrPpZz4a@4zQZsnPgOW0fFZbyIsIa0Ju$J|K9?L*sh9PcK}`%MiBs#CZ3(ZMz+X3mUh)ki-|_1XAz)9@f)kSC zcT3RCt-Iwb)qB>HxXG)nCuqB+dy0m4gQIJXL9q3Ha!;^+IU&oA@{^t?_ye+o$Ackn z*g7}zKSgQEqkIp=B8IoLB3?zM!McN@Kxrwz9|4NTR-o8E1Y~x{+1U1YHF5i5Ik`hR z;J#2XOe6(9`(eb^t$PA<tuX5>m+)gMGY z%U`b>=963%?<6V3A%%01&pYy4TG8xi%J+s@{N$ozK%duJfZpE&H0%)pg`rY9#`QR z#!$&im#WAo4s%T1VKw z3jgEAaWeXUiB!wFFOd9vGf!gavJ`BI=Swhai_a{~evbPBOtjPwe{(nv_aEa4)Q(wd(%_#5n@FOJ*RPx6i#O$ARH`pJgmwoBti7$PgCLi~4 zAKMamC3AR|9fjjLAdG!J?cOLP|2QG3EO&G$q#^CfDEulHT~ zZ#~=z2b+tP17WIg^Kd@u=qP@T>}_xqI62=F&k)V5t;C&AGk|Ak&v97t7(>HxOpPXu2NVg{rCi~%lg^#2jA z(#4&P#NYi6Y)5mu?Udtm87b3mdT{{P5Di0jc0?X(o=dysV3V4CoE(}^&g@h+Q}DFi+t;IN4)3Z zSRlU)@rEqKu$pfH+Jl$4PR%c78-W@~XHk!a@;Xi{21|bU~@CDkv&hO|4I1Tal1&p*0+<~mS@L}IEtx@Jx#pdnm?S=4{)xj zI9<%i7ZFF!1^%b`-}0>$e1?J2sTG%mBS5y0$0!UJ^7gk0SdS@kCa{aWJ`$aDarUhv zxwNZE8bIX^<^3BlKudTJj*StoLy?YG%Y8uVfP?I?@eFXRSjHGbC)RiG zF;0#4&-Z`$w^GK@O@ZFV`!jDvF%CW16PP+3pX!jWN^|*B$6VUWSJR^7v$evHHT1iY zcn1zNyMfiXGaLri=kwzGO1H}?l-~g!l*_jT27Z4g$H!iFsCt0>-MGWcm(#O-`8nXZ zd`&(b_$(aM3p~S5ocGh3?dz_35onKga@FzXGO(@~v>(O(H{OWED2k9|5*s;X1C7!!OnBwm=Pky)j z#C!WRVi{wYD0~b&9j9fKvws(P63hm+LBaXJ>ij+=pboG@@(r^$(dB8%+0T~1PJCaA z`O;lH6#PCTKMUu|H}1KoJdPcSu4Grn$Ck0aV8-X}IM>2=$4|fbo)>?fY94+2+_!_- z+a77IYNnt0Q+ccXt-6puq;p2m#O#t!p3hEKF%NS0@!3MWlOq})23}xv9fKxjkMigl zxPKS$KCnCiWQPUb5S0gKLXPal0cr#Br?SQ2*s_QIJxY9(r;T*D9m%;7=%|{nfztB3 zK|B)Yn!h0&&3&&}L#jukS>6#p%hmTv+f_b6znIfAfNCckfv17a>z#b>LWlAHP_z|4 z$n^cu+RjNm49kE2{@?%J$MFmNncx55AFP9J!=LZ?GWwS4Q`djw`qO;x9KZUWm{-$^ zUCy84SiY&C-u!MjS}krn9Q_esGcNCHfzfW{?*P7yuj97?Z_58gY=wVg_V(fnl)nIl z(Cg&?ki7-wai1Lla3Nv7ura?o0^FE?1Q&wX5kN-`bWCrHd3;0mx#B-Y`rE>h!5sm9 zoj48wu~WcXcuU=5oOw5$cH9x*dD`J? zni9(4hS~(OYtzg7*TOUt(i6v`W!xEIxE7|F;T%b!ge6|r#>@0d_6aaSfp0GbN(TP+ zwlY!s|EUxx1=^dzQUG2HuN9;vpI%=fWC^bo(4`PPe6;Dht-t51*3$8-P1=I@#G9a;7- zZ&>x=r5E^~e7@-`ji2GGxc};;t6$~K@Ke{ldfgq=qe5SWgzKETfS!%(hkGsl@Ed_0 zq|5=P4c=97tAtA{;Y{Dohq_YCE&SVooyev(pl4(%6`!koZnyKf>W6tNy?zY1h89!= zY~XWo2XHE?0Y7LD(6d%x7b>%H;H|6+*a_UihwlO4y*LW+VT~fEH$K=;VvzL%cqQxI zp5yy$f6=OjCP z2e-TkexLcSGjI9K*SNp*)jLKfQ_oUV4YyGLb9|Z~LD`azgZU_wH@%C|+y<<|T!sRHekX&ZW)J&+G%3C?&nAVR zC&OMO{Q~7~1rBB(3q_P8XZ>d?Fa62-iMyj8W8Z!Ke|AbH_Scz*pGICh~`Xo!R1Ow-NQ%-NZE?jRJS3^57Qq z%AZ2b0$ou`B!z4jqxCWJ^`S7cpS{^`OaQju##KdB>hD>~4--E@%knKb^Ql}%Skc`G zto?u3dms2Nuk*0?eT6J5L{$_;R*B4Hl`u;9P(mps9;1v>k9ySebt&~_9&rhyp6Bb! zJdaUdu16{Lbv@<}bE(HX&vglru)GC4^AIC4^E!86^tQsHQ54qAId1%R>C# z`~5!W_XbCqKkb@*wtYU+(dX6kJLf%rp7WgNocEmPdCoc6gMo*4-=?p0>Nn!(V;b92 z$_(&-ltcc{0JkB&Iv?CW`(EHn(CaZE7lm*; zZ}!$#-x_)g!C0}OvN_7x&t0e|Navlf<}(gg%a? zX-E1bFh^aPw;8Xv5Og0P=Ap=Eb0}#?vwg)n{N8nIc{M=k;Qn0er})n{m`&@*mp#-h z(e?EhZyMM)<+w9c?1}hSFkzaDzrHHKF8fGo&Hka_{YHtev2^i3-vZ|EcFkBi&ugln}}~YL+lef2js|X`i$^} zfT+9j#rRR%gdk7xuzdIo_|*VYuT3X0fPcP}x9|(Sr#IfWkbjHu+#?4ZL-leTIKZeO z|8!^fhoG;4(OtT!K3Na+2K&TEY5XhsNJ=FB6bl8h38sTz#j`cay+#d;cN+Dx?ev;r zYaQdQd^nmd3wp2QyE%w|6{X2974S00>49~$Nu>9U^cRm8fjaXsM%i}H;Zs4f31~ku z+0b^zP?&P&%y zwj`HtFx2vD6?mtIl#W9!k-mSmyMb@5CE zbH@kORA+#P=-0FZqsNR;1l6Gyu^y|7>ENs)^kL%qJv~OvY$D$LitoE-M1D`k$lds2V!pPSd(B*lu0aPdFdNj`hD(^{*$DG?~e$F7$wU%P+^-WacOy={qMriH@!O z(xopvhI*JJ$xpAK%&=DN(H|PK_0bP%q3%*maeqkqDWmwi5Y5`FqO#Hfu(d< z4zwKqONaS9GkGd}=d5!hqqzNr8EMR?28u%}$S|v18{^>^UyWw+eT3E^u#xsz?tA*r0^n78DEJh6NHK@}R^k&s_@DpQ z|M}=soJbRj`x;bRM+xsEzumwlW^E4xkLC^XEn~}K`IX#<0uO1YTUO22bEvFWH+y>f zfHfF)+zXtBBJl!nJm2p32E(+j7-wb^yN3K$LpST?PGMaeqr7}|k(r3?RYPs$*I5{1 zo&>6rrW|I|VThV9A;vJlwyW{Cl204(3RfT;0=Ceuj%!k85C3cFXPbdu*d=`);w|-p zEcPlP`lh8&#m08SZWXt(8uQjhvD=hYM~^*2DZ>~icf zyqsUK7oGP@s_VDyaN~LW4bU2l?4Z%n4w8~P_AEX4*VI-0a zCDu?o@{?v^;NF!zL>tg1y4e=ylXtVRn_vx=?|;%YX-Ih*c`n@ zDqpUIQoN6K-%4NyJ-~b&ZLR>Fjmihx zBDM4TWS}_)omzPBRRg<$J&gPE1?NoUPXVXr_k;oSQRczTlrJu}@2l0?4o1z)KiZG= z>N7#ZrhGYM$*T#+gd=wqg7Kc3G>ph0SyE6is0vxVQa(Ao5@P~VYgka!D$ zn%y);xNC3cEmwli;@lMcUQKm3u!GjIeRY?4P9x7a4x9`A4*;K`f6F(cRYAT8O;1&VKG(F?MVK$q2wjw+xVir>t?pYV(MFBU&Z_}^sTzwO9Snbx>u@4KtRLz)bKvh1UI!Mo8;XB7pa^6B zJyk_ZVXL3&4Y@6rLsjV_^Ll{vkxT*MPRF zqxm>uhzhVA`Ok(=1)8mH`_&h|_n`Z|z&=DguZ900b&)v=m>VPgN?W8NZoD(qtKPm`Z&TJ z#Y_nHyt#Qd;c|rKd*q|_^rQgsT*)I;5i7m}sAHt%Al$PZScgdP)$q$1Di}gxOIxRU zda$eErHZsBTNL<@BI>d}4baDOQNJm$LM%M&)fsVOfOI>?8`Hb*w+Gl)ycjz{y(@Jc z{!zrJ%|OMm;+fQ^3Q|I#37x0s9fWt&KlcDHBS7Cq{`;V2FMf{dtR7LC$}tb|n&{>u zK7EMnAFph?@gy59*4=uo{zdd@zu3ON{Ts-2eq`!}sYmF~_utri!+y2{_3K8;c>(&% zr>aftk7eGf?Jdh4%F>;?PALtS4*54W@98-G5kG4lY?brc) z67D@q`jdiRU2*r_VeF#(-AOt0?PQhSD-VWrvfY@o?&5lX?Ct_NJ z&9?jT5WIKLL$=|6ihQUC{F-(Qud3#E2?6MI-lGO6x_~1HgdY$8BhgQ}B|ZdLZS*kt z;51Jk`Dpk;eZe8<#Bs1eTf=2jUdJdo_d==P_;+J%kvnC9GI9fC6X)nE-aCh37 zzZXtW&k*)n-{U;C>+}$Fl3vlaVfhkxOMZPV3w zrtz5n^9gVGIN?1Er$}$>B_54XxEII{NDWND|LMSc2vO{5{HQr%+;Wt%p2Li0rc?cq zS|}+}4AH4r*Oliqqyt(VABQ5wSyVU190UXUC&nc&3+bnuz#Ks?oM63&@XIG2Fl}8l zN3mRc<~jZ=NN)kE-aT(H@Ib(XCqF46Im?kE=GzS3=HqB)d8!dRfJYhcDUVTmPtao~ zdZ0N>{A(4YD;CMN~$v3#yLVsLkwQ1QD8?=ug9|BN>? zyEn$&gHUY=sy1TLkK__Pg*7KqK@yL&x&qF|NT=~iqD}3(}^|OJ5hGBvH;W!`^ zFUM)y6(6)q{!`WW^8!wdl2wwfbl~Klz+*w)QN?Fo;N3PWnA2t%4d+S~E66&2@t z;4li^8Nk|nhW(P+Q&L>Df?qG;)2JDaw`nK8=R(+ik3dK0&HH`6Csid3DNuxmVq_}n zQ0wE-*OpV0uM0)lVd^^cG1re0ug= z9(<9{jq#(OuT?wm8&ELb1O7+Jp&NfQ5B!KS&Y6JU(=5LKU3^)re?R-iY9w*Bsgp7p>k=Es+TBiXrpJ8%FKJNcPWH9rpQMNv$@ z{mPL;0% z_CwVUU;`$8uL4^++hZem90Y6V7I91`&bAk{5Bkin`mLLf<|E>F9twAnehXCY#*Z34 ze~NrI7ssRA<@v^-TO;q}1#6UCGSIW7&>2x`L?5`^k#;U?*X)+I9&sDT|hc&tx8+EhM{4Mw&pX;3g-wA#d@@J z4YU3whUaVY7INFkOow)7G%~dY66s`>PF5(6Geg-a`VO@!c85V43U0>o3^SAt>6Smn ze{1a5q6xSjKJAZm8)-Y!FAciP;0yuVVGki$8Gj6wA|3{N`JSJ4yFT+0WIy4*Xd5bIcI1s3`so zXQDCxVY|jhNq>?V4egn)&i`5QF~X|8JAFw+5KEjv5)he1>IFP>)_yO?#GVlM0 zga0uA$d}}wjCB+z1jPKHu{cwFnt0#C*9JUMp0!SwUcqM>R@taoyOd*FX3<2H(pIQu0 z><1GK07}Dv@@RjOz+wI`4FHm~JSR*iZFM*OHw^|-*v*pw$~Y;-jaNc@gzmjyiB}0z?3=x$^iPBn<4=4)>7S&)e-#Bv z2L7)~G#Po40#yq9MF*rZ-b6TYfGh{liLe}i%jv|#0lV~<1H4m9U73$dH{C?okb+}L z=Fjh``cdtLOZb*pR|6-(Bn2iZ@IM&^#yP@li1o%u_GT!OMzeRa{|t`bV4-^ysQQf^ z`Y1v=LvYr^GVf9RUB#EO-zVLf>{p8)!+(Tj-UGmH#CpU>Nb$E+Ojn*PYAR177x-5n z`^X(EEdTZouKY)LGD_6kS@RET5O5XE#YYP*zI#davp^jSb;>;)f`vL1FRLOnEs)*G z@jU(>mS={)$kJOppCrXz;9>-Yn}BJ5ka+cmpm#ym6{FZeL?7nAfD{U_dJs9Z18Wgw zKnE7C!oCHuw?+}MHQfBeSMaYom-cfNh}ZOZ%VimoTVx|NL` zAO7smocKkq0ONp^Pa`@t-_m|Ds=?Ym_Lx zMo^qS102ov#Ex5cUcDUev)I}4I#f2@X<~@O)oOl!bf+mD%d)XI0wAo>qMud{xe3p)3G0pdlH{Ft)2ze6R!o>1?JEbG07-C>uDQE z-;1GGyNs$sx(#P{qO7x?`=g$N^cB-T4d1|zoZ#RY4AOHvZw0br4k5XMLh8^d&>tX0T9oS6jaiD3<#~FZl zio33h$9D|~03U`Ax8Ar~q23Mq-oL+L7f1i!^;bUeS3Zec=DGJh|GpRC<1PGcBa6P8 zSvAsG`ZoeCC6$w4;wlwyBk_JKt@#{yzJco9_U}P_C4IRPB5)BO+ff|FM>VctV~E(~ z!)vs{Q>5RDi1`it7xSG#HxCN7K2j7~BaZdAh~PGkNUno#R^spC zz4-4(ac~v5G+H|e*3C~dBJph{KieNQO$aK-^E*SZH3UA6f9CNtj{-vJaEbrcPi*wt zTj3+d?1WVpe)Dx_HGBpgo{DjNG&@*Th-{4dsIY#N_x2U}Q1PtocbvDTI~O4esLQ*G zYm(7Hu_sFMBns(2iun2@a4=hov59o-3B_A&)XIEQ0|wnY>i$Z z>Mr`c{_()u@TvH%iS-zZLyG;*bXy;U^GN~aI4Pek4{@;q=%c)`ADkA#v&oR;tR)aG zNBLg&ERW-a{ibYRYke9&=asN!i?mWLM^1CNSWAbOGr{%xQci4R7V*FgUvp8D3J-Ep5tAUS(NVcQ>#`d+nOlO}J z+K&vEPH+rk_z^HOo;1v|<2>g782@dT8q{XuZF`zNnOSNe)*5&Yv-6npPzDV~d`;w} zhXywGv#C`>gnF)CNPKr!#9PG-g!~Y|-$N{SlHMQhyO?oE*ZWaO$UhgT7x<#AIuZT~ z3LxJ%;}hQ%RXR1GV399tD9^gs%N=*(z7L3L%KTpi5F_1ybWlJAK0TZJCUA4^gQa3 zKNo5k%Hd1_`^jb0IM#0|*js-_!59y$Yd;VD4wajDHPUnS4^`(8qq&qUdr1%F8_!Y1 zw)ZLl^RS;lcg9L@xmHnkF50O9K87CoLJR_I=liSlT}Up{X=_&!ODHA9 zTP`s@<72hIh@byi8hGwxK5!IR&-cmpWQRQe>2Jj&`Ln>OjIuj`HTin$jd5qpk8;0z9KR z?*wo-JDbk|j`O`WpO!SC-DW7)llmGCg@ApMg+CK8`RGv{zK-&Tw<|L;MU@Hpe z$AFGH^MIIf#eD7p{iv7x`44x6L6|(?$8mV#Cs=?P%}LFYM49kp9PMf z&==oYOuP30EBRvnOLueEkTrdO+vvZ38346FO26mO&y3$gj?$2setrZnjefNO-%(1X z9C#$HS2WDiEk_O90-VomN<0QIu-^u3&v)jhf!$fB^@rCgwtMafQ+LLsNm+8DpPfxX2Oc_*+be=us~JQ;_fRg6=ddX`e(No!d@zbD2RWqm81 zIN>GVLi~$xjP#oZ|HD7mH(l=?-^wzpqBe%`D?GqH=aC_tJ z)Hff@Uao;o`Qx==*jw{NekV1|^3xawEF-@+=%=p$pT>OTZeg}9KMQmgas+q}CGG)w z4q_c}0VAmxw=wIaT-E_A!OU@Gh?tI_X@BnYZ0_dHnaX0DmWizcEVbeS)Rp z|K|3(@_i()<}-OEKuL{B_+LwbqQQ|?=Ln-Kp*>yqUQkZgmG4V`3FUa*L|FEKi7@qu zvS++EOu62C|6cwwd=gGl;Jczg$3I#<%g%>?2mA^O z`ul(vv(Lp{=bbFj|2qE9qj>%t@YBVoT(IY#$)Cxv%&u&!e4@fAa_jWE3&l?$CwudM zyRdk6mVIQ;jK=AIhjr4)8-H5)6=s6ZPFYps64wLVU3gAIu#+sZ)57-*%PR!~y^Kj? zz&lxB-2+??)-!;u*}7P8H8Tb+z^{761@V~6eB5G|$foOKxw;B?k$AqppB%RUI}v=k z;6H>o(sC9s**yd7V@drQa5no(md5+pA>dXZx)6T@_zF>2LNf*TN7?Joz7oVHQ-STp zIR#af8Qd*CA9!D-Uqgr+gEv-GjsWM4FB#tpnh(75)H~q)jg{XR9C!#l*ojjEpQrpk z?z#LMfBYbVjt8#KA5(yGABSa%*KP!sq(`|_;dc@^D1hiIcCqxg-ut0}bTF0i(^!5c zYNs-0EOx?NVhQa6cL;&jAg~{C{7RrlA4|ClQ7Z)yA*iNS<|@5ZY50XubZfip4ucD5 z7dy!nw^Dxu7NLq}@jiktDJV_Xh(OYI8{#U74ZvCioddu=-qv;~{bLI9(vG=) z#3h52e6&Feo)hsCWz_*0nw@n6w-K4splk<3Mj3-vLz3MconOAi4rROo%mRzitRJ z`-&H0$ImFDrGCQuv*WSD<_hJR&r#x&4zWwx0oYAxrXS{n4fu!FdJZ9zf}XR{FID_^ z{-Bo}*tqi{DbrPp+}78fs_x z{nUnV)LW-Q6<3EUcrW3D?Dtp$ln50>Lj9?Ku1U9A&$pIaY<;JX!2zWvj0|JApblm4Y*d1W!-Z)9tx$Vc7uhowNp zL*}D84?cnWl0sz>Z(0f0z~FMgli6|L5Q^%fz#cCD*a>W|me-3QPd<7*)dPWTQjpH8 z(&t2o^c>InqrKhf-xc|+3Bi3W3ZHiTqtwvyN4T7;l6_ky%Y)2F4p0#2!};PFBz-c>}&|2>!^ zh)*91xf8%<>irt98#97OfW3T0%y%~Jsk5JuAFZ7P?h_K z;0UAltH8SAzUUVtjEA%Eb7evZ*8SypCZ~zNP`neD%LfVn^cBG$wP*Z5rDOfKV0t2d zUZGaPHoh06K-ixQOa|am#}AJVx7{nmFr6iw*z=5^W_N=kh5>lD5_9n$9KV_-iNB`#B(%82=Xbqg0CKh zV)m|;FA-1hLRXS?cVCQvQkULgISkNh21PT=nZCcaI1 zw337Tuc40RSD-^1(2HC(w)XL*gNyF77Vwigs^g zo+PgI@n6G+8PYRfj|xuAF6K*3U!27p0J<>N?2VYK8O?3?73^)beh0{3y3K}imOq;j z&vqI`ohEE$Pwag_$M08wgS3|Q7~#t;f8z2T{6kR^26!kC`Ld?=6@P1df53)lPw6Qg z&%r-)fc7@ZL5Y=4*3t0Ba@#O)kUxg$ed50eg-9L#<#`;XP8};TZqzY*8YR3V_jYRW zty2*RHx7j%fbD-7zy0V{pnl7>m#hJzxQuz`*$5$k5smyX@_Hlqa%CDv^M{zFO0Oj` z8m8}vvFGQr1J9%;Hzb`%V!uc(sYUpYU?He&)od`A8m zzyMgP{+KhhMoCK)p{(An6^_gNV&$ibC`JbaG!Wg!~Eko&>iWE z$>%V+Y{uV1e9IHhUZCeZKo5F<8kd|8$#*T}X8#+-0J78f#rjatOrentD)y6Wm@nN0^vG@e@Qara zWO+0H)A*Ra2wn^$Wh-0_bQaiz8q4|&#v$|eqf7C4D=`;^=O(`t0om6=iS1qd{+wgI`yi#9iWXHc-d*pZ*Y-;lqUFC+a% zObo8!m!9JBGAXSGSJdQFfqmKGFihy=M28*t8)yMJur1#j3UvDi<;41c@@YM1c$udK zKym4joH*&Ex?#OM*6$R2VS61Y+!GDG^3yR-eVn|eqvaxs;@W7jcex=;ce+c(HKaR| zFAjRFfEt#(7QBUvp^xdEr9S|?#w^Erwle|{;7{s-ZigIY}bmffe70Y)XBL7V-lEHNox3-_bFJDW~C&0_{ zHOsKv9bjj<%vNY4>6zvSHJre(4?kC{VA`v};B3cnj76M5THpGp7qt!pp{vD4c*FLe z8|_n@Z&y)IeMdau4I_c{eRg&)eK3e2uKnmBBO~KOu`f;tY`}B~I#HJ<`l9Q#gy+(z zo%qN60USm&GzfE#>A*Vbxf|F^uF`!!-wnozk!MF{k5I2KzHzqpi`2J${T+9-L)RZ) z|Kn$W`~bx~_B~zs>%hU92lM+$x0X?Y_RWuhKX_C6)ab)cLSO0qJfr9ng!@%|1b7yD z?*#4xQ|sl%0^iSIbt9d6`65W)+4xri>zQTChZ;=C7h`-q27ni6fuq2AVE-`iQdRK} z|AqnAGDhh>!o9+29uNZv;>c%r1)sdiNIQoAEV&uJ4tlKuc0v#NVj6rRepmQHlTYnG zpYqS9K)3OKeq-g0Ps4VP&HM02KZZTk@q2gt*r%{-sri-9?pp|Yca3-5SW3NrDF0{; za+&P2*}o(w7ItjxXrz5laz+3!|H#xi%CZve=Gk8@H{b9q_?uae;V)ujAVZb zY~h@Me&AP-5D6Qz?}b-{tubzVPxi(97w~&kz`v)QYlQzW<#-anbA&f=1;k#UivJh% zb721-poXS%0)7RIusrANfmy%-!Vdwx3hDb2j2Zr|CjoG2r4sM==g6f{ zRn~v&L;z0);6#Aps}X){{zJftL z`tB${CE}L`05=u=w&Tq!0gC9qs`>K>he*KkF|2g&{%u%k5McPEAwWr`N%$9`Kr%e} z<7!lUvaZw{mC%t!SNa_Rbrbz%_(W(A&`pH)0Nq4ba`;4;V%uxJ-A(j=``bz1Bn7@p z3X}}}U1l?x{C{x@{CNXaIS@{aH!-~Qm#`dIC-P}IK$ipftyTKFbkJ25{xP-H?-W*7 zLZ|e)_kyJXfS(a2Ht$=XqEG&xq`)Kv{)bXv;zD4EBmTe0`rxhNn}yRo6+bT2-0^=N z_@7xy{yMOWivikzUt`Zdihb12A$UjO_G_W2KfuoMuMmDM`xOlVxNCb}!Dv-ns(fM` z3-BNQ`5%0B#*;2gx;CxOoq3f{$Oc69K* zXyGtu^5tZM*$O&~rz(pSJXg9Z&)m2Z#sAzJ({8+)W$zprJ2JM9n-w;`HUBL}=`S7s z(gPRPA;|c}vp;t3*Rt%*O>aK<=9A>V8g<2Ez^9-S^=9|>kUMx-?AOFm%zdb+tj7pq z3h9&%>~*1?z6IxEIqwc8V<||lOeC8nFM{q$MlEPU5vR}0^N>$L) zkAP+)&?Em9pm_K47;u2}&>tmPs^PO>D;}he1^m=(St!bS5Fu|Oyaojh?MiG@DX>Zk z%~Mce1b-g_hYsLSu^*b7|87*F@?~ATZ)fk$3;5Yj7CWz0w}3bGbMJwCJ2(7eh}~#! z@Lm{-B6l{YuXGa3nWIizedKoAwLiqw9EDvRW|xipy$l}mi|uXcrb;T&l$wC5OSKV? zwEVJc@M4!wgM!$65Buz1gn#$m*f@S4uKTO$Uhpu;w9VXuT`~j37 z(mj<^&7Qg`vK3En;r7IiEn%2Y!`T=I@V7&$2Z1AS!yr&BnImVA4e14&&p@1m?}1NCc<(IY<}kYys1g_ngkQ0Y@;Dknh;>8v^D5TGe!y36-aI0i<+5`6?;uyU5*i-Q+`i(#n?Z z_v}H(2ikgL;Bk>R;xjG2Cbo|v#ndlf1=@=63IDyVRp{8EOA1-eyWrcX&%?%TucY9+ zM*DT*e~xyME`w?OVGLG9YQNYOt+@n~Uh16T3b5p?a~_v<{;SUmhC9#ZjY z_{$z6MH7C;b5xUW+Q_*cXzX_2cwkFBdaZOhoyJl6SK^Bks8E^+pPkPRyv9)kO0T1c z!o@)fORshm@}|E^eT6SVZ^P~PQktXYgFoGGIDlXEhW)si5~l;(DaCrL-j^Nz>@p; z8GLP>X6m69Jpny^Cg_LCI63Jku6wKgL|;c}%dJFz6R$Zu3Vgr4U0Oq6ZOmi5uLmYd zXYoDsYjPLi3YeiYt}zUE?2QlL^V}Tc+t*L=jKdd~fLtjP?=_c{zlNAGEC#BG9|Mkn zjnJ>0byQtWJ>dQ)31K|NP(V8FqL=ZWG4*n^V=JSa@t1Lfy7Y3Vtock&wZL4fGs;_v z>4o)w3YFTcz#jO)e!eE(7VUo*^NQ48#-o3;13$jsr9vAsj!=9-w_LhGxzeyF-;K|& z-dW&ON|_Bj23C%@D#q>y&Y*nx^b*wW1OKP#$KpGcc?$K)ALX}nnGW~K|IcFZV}1P| zh}Yv>I&cx_C}O-p{;mO~jrF4chhKG$;o_o8vl4%${w04j<70=bfwbkR;Pi8~sZOc?9Tps2!-G)l0yZY*TK&_4$gTi~P1y zOX5?{G=KHv6>E%vYpfSoO~vK}kO!@hCpy^jYpCiCN&WM-`bUpJj5HpngX<#k=2YzHM?2mFEB1Fe} zCg|aX6EEN&gTvMVn=z@OJbJ^Lyd8+SO03WP9$4RLgy=fqP|NRO#JU6=CiRQJR%*7H z@($A4t>C$iRMJ%#R`E0*yj7{wkuO(Y;`+U8&|7<_w+vl!+Zsc>X zWZ4}Zcl`DpOE}?v$H!KEY!{lQSyLXILVfeg(D%6X$;ZW~=1@&Xj8lzyt0$^pFl(#G zf17ggSOh+I12v!B5A2~m&jWoopXUugeMiO>mp_a`ZHxc2*M`fX~s2w##asX*}!kNuO)vb`6+jakj&}pi?95BTlw4 z?VtUl?Bm%VQSZ$)zo48YAItl4!q=R>|EE@R665a_|KW?D`#-Qtxc!gTeieMF@2xrY z!65rn%7yZuD)tl~BA+`LH&KiipD%vhd74)O06swYa>mtL3I71! zJ=?a49@OW1`1)(S|Laiv=LkpPpM3`Cl>on|KmQ5(l;O8!8Uk<Xx*F$1~-SeK_O z0WbgvdcWHMK)QJ)fOI#!3pfQ1cAPN0Df~(C?+F0T3*LPafYNi-`p|(Z0j@iKawWj6 z@jbE^-@<#jeoDm4qut6Y0hE^;uAI(x_LnfPK8E;Pr-J|8`~OpTc{0GwcoBK>-y{Y8 z(iBJ>`z^(OUixQLb1eNObi~$8gmSj7go(rB3lQP&Ybu-AJIi=+F)` zxrxvzkginxGvx_a;#c)ff=LQYQs93G1tu!~M_4Fc1rv_^j|GnJT{!+Jw%Wf19Aw${ zc_3E<6mJ6i5s~~2;Fl3GeUo*^m$H8qJGYOpli3B)MV43Vf&V1?MD{m%f2jCH1vxFt zKD4-gPL}=Oe`E89*ZghPW82^Nd+(dcy7@6~+y3Xw{NA6R;gkUdJ7ZizpkVBc>{oz~ zu>@WPe1e5y2XGc+lK3fhw!8tJCwLSD=^rOX8s*YmlkTi@RO)9T?Lt&_UO#Ycm>Re< zr91GgQ2SR1zrvD!4e%`S%x@LT+@(M*)eis_kSYL}OTI^e4G7ep2d>3;0eBe&96m+{@C>vs(o;D);mvQAm9F#OPy!4 z>@#m3`=!tPpESe4o>zNjkZxP0sj`}U4-+M|J`^IpUYr2m%Uzc)&8;hlDP zbh6)ydXnEuu_HsZ^b7bsdXn_)Hy^~8W$Pk0+hJ-xHA4DB)g->p;zw{4g12*ASpJ=e+0-Kps{nO8398({v&WQbYLe`O6Sgf`N4ylM}XH5 z1TO%h#tVT}J=|~jK|;WbT+@!X`^d%m50T!l;0U6i*MWVAeje1%NeNegW4txqwh+U) zBP^*J;Y)X<@U}SwnVhTukJz7%h5)e@F^>7JfrBZZdZrz@YpUN^j~=!LSGhD|FEGnC z#SRE>>`paHiXA!L_7w-6t)l-WFz*L8at_74ZZIg zrJO}r7Dt9hy}RJ6<>b3CTNR4zXK9TYydQc?e0li<=k#KZls8<`=WFW#lu0KyMe#Irz@GF$5~bqGCoI?Ru4- zya@lDi1Xx2`e>BVPkz$T{m5s4eQ><|;GNClp!l;B=>DfR;9BC-Zec_q9>)V4egLhL zJFA5whymrB-fROxYW?Tf>nGhB$sx7ZAh3thE#Fa%@Ms^rQMUc#TCq0pnu;M`e)SeoM-X>Xr+l8{w{A3nz}@)n$gv(?xbYIOlkt87aD@Ek0=*#QZlL=s zt)F*n3cY%Q{850}29Bqx9obPH^mNDPCBnVZ;(WxJ8iH?6EO`F9x~ z@MAdZFUMPsbhLd`gjr4sE2*m>RaF)ziLi4K{wU7nPX-^(3sVdQ{0~RIgDB`sf0cZU zui{-k)IdX;XtrZHp4V^~hztBIw-t}04eg9e1_1qxri1uK5d$0kT71RqkB=IOuhpK& zw?D+dj<;z~w)xcY-kZ9ui@i|1+|Mc98_7-l#A!MYF)&FoUK05F%ktcbYdrDQc~XFW z#p=W@mf-KhUkhISz)n&Tp5Ij@e!QDE#&h4ddCz6^6Ha5?PdO$<)U#k_cs-oSI2vjR z{o-wVxo=qd7zW3H0Y>U|u zUK9Li3DSx7$mhoU8hW_#(-jPqUv%NGuhK<@zx7BLdGLc@;wX)t;;|k49VG>{?-{GE z*aI|f1CMG_$DL9gRT`Y!+_9bLUMgVBv&@&DU}2u-CnxDVoLfBItLyu8v5Iq>bl)#lba(Lz5eECC@M{C8h&${&>?{(3k`x?hD`j{{YM>emph1;`F) za#lfhHS#>itVcZMBI|L5(MH;?0#D<$F&c=+qvV_7HAK3Ze3=;^^OqTM<*FMMN+RpOcEf34vCIDY4qme(I& zL3g+&#da;+WWMg-wY)as3#ZYW2uC^9ix0(1z9snAek4tyZ`H6TDIVdvXs>w1Kig$D zu#pmX07uAm5%4lpkxx>~`2E@y`Q5Gg8RflB?QG9|(F&$FmGcC-UHnt&(m1&^p2~NI zX;35nW0WLa_!a!#jiRn!Z!tdw_(D>+NC*(lsQfu8K7YoeVK zzcl7&@mu<09%)9qfPLzxh7gvo15exQE{;I&0(um89dMj^_&i_(^B40Qh3=Pt&K?(# z&&yx~|B!d|5B9;P?|1qALqSX&>vt^Q2CQKCxE9!q;`K1;Pjb}xYW(n#N2up3`7N$5 z5Hc00L9^}A&t7@U9Vuq#PXU{ulJ%~|U_vL~pdIiH*h+(G z`Nirwpw$+Qx%FJa7g8GW^WBsz9w^d6fjk@c_}`)_x)G3eXQJj-$`X&m6BsAOQWkr2~80+odDWAJG&^s?of*wHUvv}QBnJHh!o zadN{N@Yc}|Vfe6t`KI*t{EU}?P1(J%&fuhwybXU(;y=C>sr{N_M3BZ!f$uQfBE2sZ z_t`#_b}H7%S81VE{3m%UpRE9jr(w1=>nBXb#rs+@52!itao{jJ{h>dzrr_NC?rN(( zgWr7mF-?%JeXNJ%tEt6K#%SAhd#tM(7;a$(DZ#`#*fgu6AfpQ&V%gW*KdMDPLMMOIR~K3^^X5{_sET>{%}I*FAyna;RlJ zuQ8*yE`vx9>>nqq@`JU+zJh-gitPn9qOyM!=m}UGfbEQi%YkF$XZTK9;^}}3;>3Vu zaH+gJh9bWOSj+e+Up-1YzX;q$`F8^65Nf-v=b6dV&sR==1G6RJCg>);nkc6ZxRhMK zkNR!SU(?Xx#y`374{!8lS;t53`043Ovh0(MYyaB4&~x*tfBN7rvoT}*#qr-|rp!ri zHDAd8I_ZBu`&98^;Pm2GL%MrAYWEKOe^C6to^%M+w>rLOA7YgZEdFEue`ViK`oDph zkkaFp{O<*Set^{th6r3R@Oksee-P7>zs7sQ$pLzC<`C_K6yPVKo?aEO1OJ~uZ43dZ z-$hIhgf02M4%i&ys8!7h53x)i@>_it^+rV{{E=ug3)V)(xZzsmmn+rmwoTnhhAfA#ewn54jW zNdY-j_g+v=)|Ie~SNao2-&Fih^gHtDCc=`l%ka`)!j!7)8Kv(#{pFj9>B{g)I7xxO z6a`8K|4SvFO!U7D1^%)FPnqt$U^y^OgyjHR@@EOle98gZDWc9Pimrs(FzO~6064|b zl?DI}$;-4XIi_~uIQ%GFiC5J-2_`8pNrC^N6etY=-cE{t5Bx7&n7oNv|4YDXcaRO zvgA#p)=?J2F2L9Lisf{Bz(GYY{MrSk-M}p@zwZLxPyR04N10?U01jmxEb=`nxGya5 zXHc5?og(IG;8_%a1HgOvTL)Z&h{pwLA2$9E08g{r6^}MV8qlS~uKC zQHR8@R4S)km)}@)jI>Evyveh5Q=XFES~ zmC^M2*!8;W`$?#xn0jMBKNJGLUPKE|5I&Ch?l4dRgRX)YZWLGw;EqC3-JS?_XIrVF zNJsuFvVDp7>=;8-pgSK6^{!aibeb)RS!s)xik--bJ_vNE>f=m9B|OemP44a(5^$uCc>!3-N}y^RoxYk(jw( z&tqUTPJ14q1R(rtp5mJn%cGbL$bTd3Xn6>jZc-L1nn=$0KDwmlGhg?xL3dQHPm%xg z*{%?Pc122KCPhqA7u-y*kV*F{j~vs*L*B8EUi?OQpaMigeM<0%QWF%_U4WYP|GX0UqDLIw>qbEYp_!_UeX0ezK%Xh;wO!v6a`K8vA|1`x!SD1GiD)>%2c+%}=hNew35$sO&|Ad0>#=aMU(n4Sc#2*hPxtKx0W)6*888g%YI93p~K8Qqgh~^)+Dd z*E!58hJn`mFmM!8nS;PSxN8p3{pcOQsbFV*3Vd;4JfVM3A5MX}t`>}J=Nc$ty?Pl% zjsXY2+V*iL`Z^%BEcWnUb!Ht<^Ddzw=Bq0?#NUP*t^i%vKsn<73fwP0K7m+T47S5L zVtBAv7U^r?P@PB6OBZ(R2Oj2iD8egYh+zLRoq{{#@hjR#MKa?!-^a_5-{lz1QatJA z8{JtH{G>mEuVPP&k;FD8HBgFl}Y{?xBZ>Z^t| zZxynMv&O*4@{&q%q&OaiS9O#kEqn5G1iOlEIpk!hI@!^eFOB!p5nLN@i2au4I~X;f z4KQ>R_YqVPI@LYCUtDxWd~Zsoe(dLMm(TJo?B8wV{T%$d6Hr*bSqmSU?jqxi<@Dwc zNBhWk`tPDV@v3Kp(m#k|T>8F7e%5b6z9Qn!g4+Tg1kzUtmyY_ad7@_;Unnb1;E+Ep zS91{Xx5hkuaNlp*uKfE z$a&UT`K0IoL+P~*wV`;_GP|MPwEn6{^GKd{czP9vdDyPTOXfcO;FtbVk!Xv`7a9au zKiy8&i@@s%e&g~)owO6x0LT3v;2gdv=A+@3 z?bL_CtNom-it_cq7G^=afsLrOeSfK1bFn8~99=Js%J114C@Q~9=bd!YOxf}DEQ;fQqrrcjgqhzH{D(f6d08hFV2%9u`*$wt)m1FV_{q4V`Ep+6O8=#ALLkshFoe?MJ^ueFfb*PvbeAI;Eb}RmR6kC3)Pm&wy$tUI` z`JIH}$0)?Zt5vX$gaWIN+H~U|D;|fpr+E z^pCI-63-z|j6lsF<95zy77FD=EBn>O+~1cmw|X9^p~d6Cb_`7Bk?sT-%%)u1S9)#a z5$|!HcRTB-W2bo3*IsS^I>ox-u;p_i0Qu#+z}oO-`M!WdK|T9RqKm)GE1kn)yYJ7X z$2AN|mIGV!gN($|YqsAn_%9g(tYTc14iAx9x@aK32UtfxH+&GP3N=8PL%L`9MTxXh z8i(u!rt83D#rEXL`+Qb4{y8A$8p+S3Yv3=-=aawr-A%q?zJm1Ptr^oa;4o+FfFJ71 zr=y;pz+wJ}iNSb5yQOyIs=AnuXfP;!`!R7^0j%WfG|c8(aA%~e_BZg06#z=n^c`Kz zSquH9V@4<*UI?@q*hGtg58vc4$jTQH-!^kplAd*xChW;}gaK|{@pQfg|8xv34gyD@ zco%SgN)P{P0&IUAh;UET5Z^Y=6m#5b#6)^uqW%xp&P5~Iqw|jM7=o|9{*A++4g?^Y|r}OBOhD?lRVZm zRJ)!0XLDs)C-9z{m9?jVqg--x5qLDO!zjyoP&53m^Y=3TJE_UNz-e&P0bqZ&EynvD zV7?On<9uD@?{@Gef9UjR_%AUIOTUrqIDJ>cnpyCO{QY38_b_0<=iF}(UlP3;UMccz#c^z5k5#S6PRB zo%Hibv6yhK2FSq&Lx3-4pBCnSE3O340N~@qE3X9jp8UtYWeD&h@h}MB3`)n8=2(}! zzq*0teUv(j@NWQr2k7}--v{JG05D2N|9>LFzx_&py6Tkx7zD(X0OiR5DE_}?2!Nah zy51575so`by*&Xysdxz;rEH(_N&rs+K)w|x0cb!_8UP4y!EcCC`!d|GjeZRR0 z$bp6^l`rDA;mO@RLEznI0#skVD{d+OyP4m&$C>m^Qs6r&kT~=&ZU7+X>fQ@FQt8U~ zrN4wFS5Nep;S*uX?JxenO#c^8F&T4`0{;aHI2D<6lN9)FDNqhbCH(X9D+k7jupCfJ zSn_8%fS2)0zf(nB37xX&O6ZbA=af+Q9*Y0GRQxk_4%bkHWqDQaB$%YYBnAGvQefhQ z{|3v65it1H&VNk+@P8fkKMQ0QwEsE#z3^WPMaZA9aD55?my0j3v~uTvI%4%V5Qu)B z@Dtf@6@N(hzvHlREU=4_VpruKAQ$}1touLweaH(xb>G`Ra+Y}ij)UD^W5##el<_Gp zoO@V4zW{XP`S(07c^xf07TsZcyT?V6H*b>dv!tw5}c#lJHodi=oKxx#&U7+^>RcJgF@Kh+M)Bf;KP#X_njInh| zWvqIk4xc-mjUX)-zj2Q2I{+L&VY*J3Z4Lq1v=EUf5LFDK zpe~h{ZhE$yo)BE$a0373FMTK;Kljg%`+Ire9WZ6d_nX_%q<5d5Fcdm|h!Yr$5mep(_ zJq82xCHdia)aOO+gnt?T9u$(+rvD0Z&;4*Wl!Xb)b9xn>)(ohF74R` zRN!?A=mG1tUzy(2=G%ziX8?E(QT%SwuZJ4o3l`e~FAY9sM7m6VtQ@V(uiQqwyNj3N zuG2nRmA2)8(?!vfhDrSf{vLL$Q%`8LI|P8^aCRCYynQv%5{egls=sOTXaUuaX?8S- zDG~MJL<;$1h`WpTN8B3D5U{_es}0;=ZT~sPGfsYItL@l>-xgI}ZM{d}XYdERI}!5R zzUdBl4@x)QAoY}wjo;ZHOtW_5fsW^&R+GZpLe zMisA%;13N@By5jz2dcSiUXHIhcwF&x8uc@nv7Uzgb#pd$AP9tqV_8(_F@%E4@RRn@}2Nd)cL*Wi1#Y7QhNR3b~ley9S&%z=9b1YIYhpp zk(Yr)VAVZbhvn zJ?=ySVLsDihT-=j`NQ0f@J_;wH%hoJsnJycB!4oS&=Bc<%PH0oUpg#f$Eo?Q5YyL z{j`dBHstdo{37|n=f%^QfKfs|2f@AhJV8FjtDwTM&4+D4`?QDqc;5iYqfU1XVFVnUM9F6a19U=CwK4P1XyySaL&%|qtnvezq zf$s3nWVR?hhd9bxdd_3yCtv0iEAV9~N&AeSzmPu~<#kkZL!B22RJbV=fACZ67_|)R z&FGfT13KSX4^-W4y*YwA@N$%xfxnMZp$}tfI?Lz)KJb8>98usKW+TuwU&eR9x-72p zWgD&3gx~W|dVto+abJ4c4vbqWWGO!x_EZ>`mgAROE&;nq{}`}_?-lgIT<7H|=UK)z z+uMEM>u2_7e2%1#??zMhU_KYWn0?sK#_3Vd1G}?_^80{Id_|@KTTrxH zzk0aE^87m4KMzGNDoUdk(A963M{0YM8%02Aq;VZ${eQ077YaaB$5bt8MM+wr&L&xK*@1!BT47z?I+W}1TfK1{96 zM?P%?a)&y9ekV_dVQL5C|GoGdpxzvyX1Vf_qb@be9aZFmd!U>Ay@dA{2@zmuP)rgi|kr~IDeAb^z_$Z9L9i#(>sLzJdR%Fh_i{4}YgLo@F#0{gRFj3|D8R)-?Ci5_;IcUQSuYct`PkA^|Vo@%-oq_*9`Gx`ZF zl0S_f^TJS=Q}?J(R~64Riphtm+}i9+-WvIy3IncD41_xI4`SjlAJ_*sTfdj6htPxV z#nj$ud#qV;K9BDybV)6HnwX}WLpr`sv{_HUYmB2S@vG)u3~bm<*gV1DH{H45_LOC0n+gYdhk zi3;!ApodcD4{-qhWngP@GJh2K)%>UBYfl1*^}q)x#e5pGbNT-haGDBy)@ZHBn6mt% z2wl6L-izp@=AbjWFOR!AfKLnfH6}8fDeF?<7{L0IsL`g z!Z4sNpOM{;|5o@Dc^0knzA$WXU%v(p8UlQ%3jY((-bVd_-+3Z{(r^s`Y#$8*gjGWT zS}DojVG4D6np|lBP{M|4cnMu%>70t{%JP$M^8X|S zCModWhXSSI-_qV~E!>A4_CbQK7w;5UVx#y^ivBV7{(l{RU-s2dG=G(4&?oU<E6%YxtewG-~UL< z^w$WlYCUObr71+?m#!@$cdYu+$FCY39JE~=m5QM|GaxE#?6 z`Lg_fls~7SV+N_zFvA z%U9^&D7uUV`4I3j>I%ziMd6KL07cXG`~>xRnVkVH)Q=*O`ho5Ai0RH7aX639a#h=k$0$cw`W5OfHio5sGe=V{z(0uS zL+1`+<6lhWQNOg4-lL||*DEP9JO|1J8!+Qr=BG?kJBPMU9AXEn{J-Z=^Q8 zY8u1GplT1WA1+%DlqLs({wlw^@}y~uuQbYDP-F8_ zHs*YD_Fdoqd3M|!9ligZPU7v#_bO;9W+9%ozx5+doDSSai&-DVv*Itk#pR}Yw;7zp z`?U~gKhH=sL_V7tVU7}hB3l*$!Y10^{7jeH8xPJ_F}-4G>#-C3cai=P=mI|M{5=}+ z$LX!q2P|fW5N`-E?XWvyD&JrEO~O|~*{i_EDCG%YKcn9sU=KZgEpQwTvj0q@6yNX1 zXPa$_QdKC5oAtJbSWcq22URb_--ju~HQ+E<*sj*t7}CW02u)uVNQY9@b|2!6@id2m zE}WyVICk0qz(7C0(f?x?B?^~F>y97eR|STMaTAr?=WM>7d|?@i*Ud+<;c{RXip)(w z?~r~7Sc{?4gFt`TZ~MsK@^|6~VqBB@y$8`+&qIW!`lNp14%@4QUn$z+JK^Xoy==G5 zK=Tq0LxfUGynTFUxcH_#Rj8<<_InfxPYg9?+itmvC(1|d>KBHSX*}aD~)5<*f%>uJPp&tZDV#^KcUZ9eu%9N?+I>C^%H0J6-s$? zI|&r~T|oQqqJZuOw7xY8VuhIErCQ5p{w`_Z@3SckHI=4cS$+V{HvdM-6^|NvnDMtl zU(0Wcu#}H<(Wk4cSst)be6G?M{1p_LiwDW!|=-S(>zUMTAZ^*L1P^pAWvTL!J2OU2G`#N^NG&-dpq#|+{{ z=m8%wUibyc@_oc>CjJs0ojV~*8j3HaMmtNTR9|T?UTL*xxZ?(I^DEVG`BnZhj=ldv zz+~)M51(wsf0_68Q}?Z>{&PCuA!Ztk6BsA#jq;2~xr{E;4M(Bj;nR-4(;`8>or=h5n5wRHfw@0;Sx*;RTYI$ zMWG5&6-C9A%BspGgiCdas)zFE>Z*!Ls6rK8suHTGl!p*P6-pFBD3=n7DZvP1j4>ue z!I%=VUa!}i^=iG@tkJM+ClAyu7wtLElj@9gvL`DWhvbLPyMd1uZ!Gn20m z{Fgyp>3uh`()Tne?ip3WFwt`Cw@@q;ea4Z#nzMBV)HJ|xqnrP>%gYhp*^Yd2Cq2V@ zui-hO+}Gzf~+BR#8VTF9!Wv>9^hV(k&gI$H-i6Z^VE)8$k+TPue^f4cwWor1E%tt zss{7bOu~LQA-_Am^wP5pzvsN%L;B17wm)veZ#uctx^M+plzSevsrgLL4(08@W)$lO zfx~b;bmC&2Xt(?*bhMlXW{O9E1I(M`*LpZozDTn`ek8}dCsurz>ljOgZ`6lYSQ7J& zR@NofyP4i+z8aWyUA7p%(ihly@-4noG zz8iOuei2v=lWuJ-{>ECnXwGN)j%;xl!c1e`H7(LL#i>@OShvoF2_{r0(bCx;@40&9 z>f|i@?BJ&Bqwike2Fx3y72v)m*j?jzw-^Hw#dhlx52t$Av=WpgpfFH#Fb^`#%F|P)g5b!S=0NesS zJPCj{jFSLbh^LyL@dudXFe>&PCsf}nJui3m`%7L>y`Oj@UD>H@FOMe~1n4ir_!-Xk z<8GV+|IaCKb1kWysVkuzs=Lu&hQAXmN3{}`99qJ63NPQMQs2G*|D*DK_b?pK>8~XP zN=E%_iQG6+e{Cu7od%rp{da;T|CR8a2HbLhE(h`wG9?LDLZ^s2rflKTq9QGE4JZ}= zC3MQ8)8X({{-Zd3bDtPO^X!GfLqECNS4^dHR~ zOTw=MznXn1`?o-LJ|KMc=(O(QIPl9X(Ec~l{XXXcd=meK?0EJM1O8s|Gr(WXey;HS zKP;wJv7Da!f6Q6&J;Yo3?1NwU(LUbST)rq@n6n^cs(6GF+$p*{UL6f_i2}^J*crG2 z_#kf-$Dab;#q#(G;N3iJJQsOh=5hZ(GjJYaW)`X}f-l8;ej)yv$l`yOCNLeI%( zK658Ut^4xTFRvv2zOk#<9-|!Y?nbGl#rsGI;=I|Eg*olzUI+!KX~*0^O_9)86Z|O9 z!Lc|W6he}Kr9R@I2SPL|d^*oAS5CkApFeED$MysT|KaJl&?G<2ME*^D??bV%2FRV5(XQ6hubBK~dG5#( z&ZvEx6eP)~SBvFAfl>H^dQq$NExb(ZI?7uTq8E244#s;$vsZ|xxGLluAMc?n2f7((o13w5B_b zY0WD@DJ4H&SNunyxc@n~9^Wwa*-CD#A8&A1F&r3Mh9rTK_KEp_^=Wk2Q>uKU94zjxe5#_|^P6v!y6`Qh%{s`U!=8VMJh# z(#Ux7eX4Idkzj;_g6a3{INKE?-Q}XS=)gaK0fG4TQfu4hDF21)$%Sy#+Htfj!l@+K zZ=_u<=Q5Zb0iMIOViJ)3*p4?*i&3Czc=K7Cs2hqrywp9ZMD3l@&tAV3IDp#YB=90C zv|gZs>idD32iT7scg%MiDaaS&mY^Sk@}$@-4Pyp~FFgh^WH|~PfU{l%UM?naII`_C z7t)2!w%3I;{^j#2RlJtcLYD8j1Sy}S z;k?30_w!gQ`BgXzC9-%E?N-^<2#mFSxFQOil?pwf) zaL$w28F(z=eU8pCZ1K*qt;=w)CoE1a(b{^AD0u$?@n#y|ETH+;Dj3b_lBfMHW zk)awpB%xj?`Z+Hl@MHW70|iIf7UDONyYwGKJTJc99c=ywz{>KE)ach!YwfLZYcYmN z7^)0_=Q?Ug{9-EjFdi3;e6_8IrZ(pLGGAHWFQYwq5B}*c_cMet4xm2ijPY$Z^f&%k ze4P`Y;w3C8jt9wKI#}-nD~$cA{#Ssu%kG-LD_~vZBz=z8!jA#%Po|SwkJg~!hS(1B z*TL{t-tw1pJ{jST@QL23d})^Qli$qOvBPrr1gyq;)p6qOd*kcB6wq7IQ$3}>ts&j* zr)k{r&}t1U)0gWIRBXoIMJ;$wAAd+ZiA1^63A?mLgp_;=Wh-x_B7Q zx1M`Qk@#+Fl(&n$+GB*jLcYQyaEtIVXOxInCzy+Om7XkK^!_+Tp6^x|V$r+d0sCE6 z+zm8s2agJmwLtmPaK9HD0;cxUjN}x4M}rRFaZ;GJixP1~1&-?B#|pkv;`=N;Lp(fU zUw+xo3`P8U_`1PoK|jN7ixwV7>Sg>#Z5IjvzqX0)b)m2}4c`^8sEhBTe)y997Beu$ z+Z{pA9?BK3Ug$>ug#RB1KG;Qn)?XSdT2IqE9-ZMo>iIBbu~rX<-*1iOrJc?ir1asJ zFU|iX^D*+^rtxOmkMSzTgKQg$7vDQ?(a8fk^EE`X$Mhx?zx=j@RF1T;-Nf?>vl8jo zk0N*iu%}pwGS2btRJ4;<9!$kQff&${+NN<^g8<7v5jo4B_Ganb8H&D`e#@1yv2-Q+I) z938Az2Qj7r2l;Nj0`!WWPGBP{Kk?|GeEI;jP5BJs7o&?j*59v^{Hh_qa$pbR>2{z7 z6&HYx%e<$~$q-=^A=3RYC0O4pVe;trvMCH}I+=y7A>7f$cw%b#mwBY<<2*VQ^ZMm8 z-;Yqs)_Ir-U`ubSDb$GjzwuU>qf~V%#$=W|$&JVW~zcaW=fb)F@E!xi}yU>_sdR3Rhvejw>`X{4Ii z{8h(`pLI;M8VOz3bC*{c(%v~96B0QB#USXhtVJ#dWoenuZVSGLsJ-Z8TfM4F2_{PaM2tWJe z+2v>FGkl(Z_0CuCrkkxD?EAAbWcBFSmTS)f&r~0%9tUp40DT|%EMial7V=%g)m)TZ zyu>W23;zaYbJlAJUoUWsRp5G{WAr(m14tYu0_)QH2|6@~;(s@IncrzvQ?^Sd?-v6- z;Quu6I3c$C1#&hY&1~c|sW=_z)q@Yl`?UeL;BUm=$0%_J&z4BjyM6}RlYR05dL{aw^@Xr$^JcS7X%yGuNCf;{{kjD&>6n^RQC76zn46e zCw)4`=l{Z}x<)@W{#nxhF=tdgjlYB)d~Mg`{|aB@Uj%lt5#^VN*OmQ#Tygd_POOxU z7~aOX|8?Y7zl#4);PPF-Uh26A_zk#XFYt9Xz8nDdBkB5G;5TWv{|p?+z8(fAgYb#; z|1(mY1rE{E&I7+i3Qj~|d(1%epKsHD<+G9O&x#J<8^n+wG!*OszDZ2^;Z0(^4ph!& z`w0hup1}Dn>QODmyb^%E;8~2qYvd(N{a)$aoA`y-fc_G?vB&;X!W1LDSMi_T_&+`6 z|MbTHZx8Xef8%bP0{;yPTzJP!3#WHE#5m;Wxq?aC0;e}I2fnEI0gQPQlMNIXb)`fbK&kn&>j9|uXNP-CTjmz zfv?w&{0A1lhyMyow|@lu5{JHh3fPtXb{yUPx$FRky|KV6emfKf3s~?x#rk1Q^>1Ed z;Z}dGZqGIH``>T=Cuf$jP8nJ!Z2kW`SGGV3|ujigU$@Dhs@8)32?)M)Uj3s3;1~nC^tAmH z)aa5}Dg-#;M|>AYJtA<=TL|fA!M+_h#!~q>5J6}NHsuLN|Er0f`NGIm0cT6@C_hqM zh@Bv#Ebw>ZcVD;*+)Lo+dv^fa4)>z!)z6O7*ja~wDHh)B;E#5!g1vYT)Y|!Av^qOE zX<6MUewOn)@K@Q9=7L$llJ)h-eO#ymEtjK?^CloWXws3HaOpbyeTW2Y z#}-O8{Y6q+{-*GyJI~FpGj8{kK3n35>RtpmR|)TjFQn`-FaSe@)``O9i35n=qukzN zYY4hLO7{ZsQRqcII+CD^9pPyw*71}NdG`bb8o@?^KrgMZ8aRYP>wchOJn3M~by8Of zu}?PyfZh$g6aRWtY5T!z8(eGqnXCAwHb|*c4g}W1g(rBR1GGtsf7M2&mrCNJpjkMK z*yE`PU#j3Ye;|7>Ukg8PzjoKPSrqd~`Xe28kWRsK-)09PQUI5>k7eLHzM&J__^~l`k(u0ElB~kcyHtv zeuVj@qCF}6uTtt2-uJw9GQ?hZSl1nf2?~s%H_u?S`JU(<8Y-py&P1qujL4OE(p)+Z zQuE1ZSAm$1qmKFbOE*Rj+79evL_8#9A6)Hy z>?CzO?j_t**0*$t>ZQ+o%-uFj3jdu+;U8*#+6|+tN38?xniP&6b!>`h^3fo7k9Gk2Yl=|ECHZ4NYPUhk*^C;{^jG;}8Ga&Ed`U?t zKdM-61{&uwkG~vucoT{|e_3DEIa`6=buOMNUJS32v$zgHAK?>>dP9`^5?lu4n{*#< zOvkOZz+F7n&rxs^un|hx{^oQ%pkrKeCjjPoM|eGSHe4JnE!R>%Tr~u+wu|*^2ioq3 zXf4aT!l-Q?%kW$70mfDFYKEGGlh=|+*Tomh`gm@K^=piMo_t3+;$HkcA4X0wFQ4b> zRpRd`cOIzugztSjG5)7J*ByL9Bd{FL7F#YoY?DLM1dT}glv z&9@Q?UfPdCoRjNF02Q__`nNC_Us^J*VlXeuVVuq90WmlT14(Mao={yic5I4uN|)u+ zQ+Tbt-2Iu{JpmGbkndagEUCQ*H{A7}Qfo(Om-udKysy*@Oq{#usxeL(V`cc$xTs&e zRe;Wk@Kitlcj4DyWEgmmXGXkliScV93a2UHwt_J0eu?&!|0lpP;x`X5y!Z^T-_v$# zhA)hFCn^KV%bOV;c#nC(cEj1JoD^Ym^SQxqXW_Fx;?H4ZdI>m0>^2}d=I#8qjH5jA z$ffXCYW*#pO5ppuBD}s<-`L^LXq5V`Ej7UVv1EXP^6dV=Z$2tz@taS{;{OPS5%R@! zzCzZcl5eW_k^cn@UFCymG0Sn@ofOAuR&t%&?0?4dgb?e7LN55c2X)OA{0&?s(gkc} zyng}M!gp>aa6-O}5O+eS`GjU)@KqjWJ-lB;3ft@sQcJH3*|HdyXAwFD{{ZvV)xahw zcRz44d@~K`6+{z(a%q+PxA7YY{eo)n%+#yPLDWKnX((x5}D!v??@MO6$N41{QiDCWj zre)--yD@m^0(S9BK5WYF%Qph2!U7S;(rjuSpy5-p)sUKV!V-2*bE0*(n zgz;CpVQ828u9;bx{l14g(RYx~^UPeX;@3QpeDdAK;hD$L**k$9*<-nM9YS?ZxzuG% z^mliLPbU2dQVo)B5jj|oC#Z#ZIIA(AE7{680j$0_lJ7M=beIG5DwNs4aCJ-bV*#{$pSIoWfyp=|Kr3l{S+SYDV_W-UX!VT{cI2G zll|h&_vkR;E5L3&a2AJ@LszIV6m3+_|1`U(Cw!DM?0SH`eD9@uYkmNX94BXH3(5B~ zG3>8xlw+)KjbT8{yT+M2Tw*5&J-ZtLbzBy z?!~n4dEiL#WWE77fj3VA`~$46Rsbu-wm3$qHT^+g5@Qu+JDYPx!v@-0pn4^X<%!&ElMZ_kf~fvder`n0l6tRuaK=D47RKOV6bIA_4gZ~dkS{BKJx&Dp-uzcQD!=#w2lZ3` z{DJ(R=YNxYZ?9bma4G+J$E$n+qdN4Yy^hCx)GGnH@!wXQ<}?cC-T8xYwdAcBUYx}5 zNdZ3!ycNThjR9L-Z@|O1$CUsxIb+~O!r#X%Y^RX%ZU@kl0JaF~G9R(v<)o z=4=7#hosvxWaQuX#TvPxb|t_qd3*5p^(z51-LgFreEXFEorL?`T7?8HG_bxJORM)n+dNHB0sJM!m zb+!CL#iL(aPF-mb;1ox9gCRg|Qtz~A+>KLUoC5#vQQ+Gw3BN+|W7rdGaqN!&uK~Zs z^6QU){TKqA1pW!O*Di#<%3Yf-psr?LEIz{8;fn|mT#)=)akOw$InR-TEL8KK%YWLV z+^T<4G*)+I*(Wyt^uu>9VIlqXA9!*4D&pxh0JtZXZwg{6vE#5iTgakQfkHzps1zQ! zq;Ek~rl6pKnDZiRf&xXt?&rS?!L+AoDa*16_%9)7aKSr+d^ZB8Mk*C1yF(z+hk$Dl z;WM)~N>mxNDi*+=6JY&3x^Xe^A;iahz&(Ua1KtBQ9QB4t*$-TUIE4J!t@cDHR*oQY zx`O{@j?N>W;+5(Wcd}Jmt81$ZSWly8>`=V@{N^{v+j>CTt$Fz z`tN`CGpFB#+&}yEH9d`_UtZl7g0}1CM@c;{v`e#4|4Z zrGiHt4+)B$v8;CC*pN>o0EH2IG8MeNpn#aSm*NTl)mL@+d&rIaC_4#^I)H|wzz@Mv zBTMy1@sAY`g(dtj6!$C9O8L+S0f5v|;NWfx+pQ@SsH(Sn@b@83=mgGyst*94BPZHA z4%D_DE{O3%=c56|96FNv6-0#cYZ5G#idT2K7{8N}#FGPAgHGLusb0k2pFJHr0Th`@ zkz+j4cRhS=y1V%={_eaL^PXZu7z(JUeF^^*1gM9B`-yLT-07{;Acgw!KZ&^9frS79 zp+&kY7R5@?wGY*S`9DeeVcCpU)?on9I=b%7gNz5e^CzO6 zd!PX015{214VGelqx=`T^GnVhpa#}!HN9yK_1ag=j2+VZQ54c{Q7iE-75~yj3MuB3 zE@Rp8Xs44E6TyEWw^#y6w;%+a z?ueEK?#Hs+?SVaaYvW6FRx~I+m3#(pm>nwj2#Z6ZfEa_C&<&T4bRCM{8CVBC^r@7K zNAgRLJ_L1xz+U#W?*U%nmhz3j35=AEbM`C8DdXFITjGDlZm<%YBmkAC#J4ZRr^de+ zf-Uz1tt7mkJ-sJ@P4wh-KovmJSpyexLj0QeC;Zd3RE)h0Y;3oz;1GT1vti$ zu?K;Qb!|6$SZ_e7PYS#}jO6eK?P?E_J}r@N%Jn)Q znffu_LzC$LQnx7zs0$@T3+bfWF?JYr0xOv2&_7WmwFm#5$QA}hGinOVZoU*c%}eAD zaT8k3wwmAe^375H(;6De@IH1Xk}C0siWt)#KrC#HyHO9z1NDqBmcIiE`u+-EL*HNJ zO-uOe;(IJt%))P5ckraR{Gg;O;jc!&HQaomZx~)UIyU2XM7CXZ=C3nNY=rpw~}E5W5+v5@#dLk9D0;7R$#k>J!f1nsn0x=YqUadLxC4L2_#V*4Z+BCtg1O_DSxo zouS3fw?fhn`(L6^{0M_KbD+Hc}hp^yE~o7An3WLeeCI3DT?4-bz)?n_M}Y2Rya;RpYvXBHM0)mf#|agv=hKNR zbD@y=w&WW_L05-ai1~YPw&5epqpY_lB_)2W<}>j-T0aZ)2zL9u=6wr+uQ0CIpW87T zv;N*pO+F|&FW`d*@>SN4QLrs2qhj26j`zt)?UcVEUJWo2h@oKczoUTkXMT`7{&H17 zjI%?0MO*MUFnZ0P{Nwy4eLf#({s+j({HE3TW+I_o_`yFEjzdt(`gUilFg~Bx9OZeH38XaoJ-dxa#{lPWP!x@ zePMW{L4Yl0zZV}{Q~zNe{q3AIaR|s&4?&+H?tFgu%;2l65I>|B1}T!~2ELvECZx<3r^^5a}qAwBE3QeYU!!Ro;m z6PP#Cj`We#FI-=OH#~ja5P;Xr3D1MO{CzgoIfL0j71Tk4EkM7UV?c4Vp67Y2KdVvN z#&PUKz8pxp;Oi-jr-S&%^2b8ay$plLF6gk8RPxW(YZkug2`bSQn0Dy^Nf$r^jeZt`fm80C?@nwaHa5zWUN1wOplsul}zm zUpR?kwsq+TXMAuEVuZ_6@0hw9@=vQQsnEXps!DI=9Gb6ti;Df86DyW+84p(y<#)z- zK2*Gx9|FIId}XX(r!n%L!mnA)72px*zXo`YmRks1$s5~uKBFac;9I*dz7vZW4d7p9 z>ARz!^--VY_$TsA=W({MEq+hKXh8lr8U1zw9OZXF^R8t;FGyPgY$tca)A>O5@5fR* z)V|+U(womta<+fhv-h2i8~OhH#T-8Tna)mNdz zzMIDCo&}xnt^P+Sl4YOEw}t`0$B-KQ4gBr-^Z7jB+2R#U?>H(hf5veo`%v*a8HNQ= z>mSQk`HvN^(&pSHmp@G3$50^qKDMZ2#UEovOSxPL@Id}F;qT`nfzJSM#kAm^5M1_MV~x$f`7- z8{rM{{kwh@Kw97FS89F}F@({bkW*)qE8mx}7W@{6mfer+K7qH_zKN>;o4`L~kN*YM0UYpGc;x@rS(dWUeG7gi`@`Z_@ON^A+A82xmOEbo zekJ>@5J;UzJaq>DWfq$M0eC+DEfq=EdavC%_H`D{AD;C3d-)3f-OitCzw1M+mu5Ch zzNM3R|AYhPUIMPqHiRPk5{hUolY3FioCQv2IeH(kst5vDVad7_xUVL#P#|>*|7sS> z?ZBr)l;r|?6^nfZ&<(Mmy%UksllWQO$1@yDY8B6Yh!k{bfqOr->B85>@_RmTG5J~U zDGUr)(36`!1uSb>dMk)n5SW}}No{>r6`Nuwl`T^)3o&y|%Xs z4rBLSTQRnfb@$>okB**3TK;7JK>un^#G8F~*B359#^Yc9<;%ZK^XwfvI(C#b+A8+* zxNvMK7KLKY9mN~*i^&N8hfo;l(m|#QI;!C>6_T54^lCv7HO!kqT1x2Be>VTC*~}2| zlsk`)5k5xvZqk|4z4)v-V*H$iIf}!*9CxqS{Mo>VyE75__^n?$ACTAr-lPA4_^fzu#91^?+N=_c|ueK&&F)IRAbP6Y6IBjNiI7*cO)uV_+*Nhf(K z@T?DkPL;Pu@b_n{LlB|3)BIFqCC)RI^{x+kDG--mw}HtT^4*#}7rWm)Qq!-jw2_Xb z)32+2fonXF?xwdr6mZ)W(UW+Boe!iyIdp$NS|Eed0qOhL1bB>VkTqKp)Hp$Y&`viu}pZauxLIR}tF;?4Z_X zfcxpkJIMDurWhR&ejxgp<^qWl1mdh?g~tPDZILVBV>xFz+LnF^57cvPDhefXIt5hh zndp-Y4-{ugn=YVv4Uv=WbtXH`pY%B-9qPVx^RLx?lzOa(J9hGZ2BSm=@DQyxjd-t+ zul>sX`qpERcCme+QYb738SOUV??Vh{d5w%(w(CUFS)bY!861P1{O<2EoI7?y@ik2U zc^3a5EoJ>i5UtM#aKNIq-!OtW>O;CEj0EP>7X~MY zXJbdrRK!>I$DL6V6=IQ|zTQ&fowS2fMOsg!e=YJGg