From ef3e7b256373a15451a5564287a58b595c3451cb Mon Sep 17 00:00:00 2001 From: Alex Luccisano Date: Wed, 30 Apr 2025 09:18:32 -0400 Subject: [PATCH 01/34] libobs: Add checks to some graphics API functions A few recently introduced graphics API functions needed for Enhanced Broadcasting were marked as `GRAPHICS_IMPORT_OPTIONAL`. Add the proper checks in the wrapper to ensure they are safe on platforms that do not implement the underlying function. --- libobs/graphics/graphics.c | 40 ++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/libobs/graphics/graphics.c b/libobs/graphics/graphics.c index bf9848df7..00abe2ea4 100644 --- a/libobs/graphics/graphics.c +++ b/libobs/graphics/graphics.c @@ -325,22 +325,54 @@ const char *gs_get_device_name(void) const char *gs_get_driver_version(void) { - return gs_valid("gs_get_driver_version") ? thread_graphics->exports.gpu_get_driver_version() : NULL; + graphics_t *graphics = thread_graphics; + + if (!gs_valid("gs_get_driver_version")) + return NULL; + + if (graphics->exports.gpu_get_driver_version) + return (graphics->exports.gpu_get_driver_version()); + else + return NULL; } const char *gs_get_renderer(void) { - return gs_valid("gs_get_renderer") ? thread_graphics->exports.gpu_get_renderer() : NULL; + graphics_t *graphics = thread_graphics; + + if (!gs_valid("gs_get_renderer")) + return NULL; + + if (graphics->exports.gpu_get_renderer) + return (graphics->exports.gpu_get_renderer()); + else + return NULL; } uint64_t gs_get_gpu_dmem(void) { - return gs_valid("gs_get_gpu_dmem") ? thread_graphics->exports.gpu_get_dmem() : 0; + graphics_t *graphics = thread_graphics; + + if (!gs_valid("gs_get_gpu_dmem")) + return 0; + + if (graphics->exports.gpu_get_dmem) + return (graphics->exports.gpu_get_dmem()); + else + return 0; } uint64_t gs_get_gpu_smem(void) { - return gs_valid("gs_get_gpu_smem") ? thread_graphics->exports.gpu_get_smem() : 0; + graphics_t *graphics = thread_graphics; + + if (!gs_valid("gs_get_gpu_smem")) + return 0; + + if (graphics->exports.gpu_get_smem) + return (graphics->exports.gpu_get_smem()); + else + return 0; } int gs_get_device_type(void) From 000437ff7e2edfa2426e64f7cf08ed34fe03dda4 Mon Sep 17 00:00:00 2001 From: tfo Date: Mon, 5 May 2025 00:34:50 +0200 Subject: [PATCH 02/34] decklink: Fix incorrect HDR min mastering luminance value Update value for bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance from 0.00001 to 0.0001 to match the documented minimum in the DeckLink SDK Manual. --- plugins/decklink/OBSVideoFrame.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/decklink/OBSVideoFrame.cpp b/plugins/decklink/OBSVideoFrame.cpp index 614b309c0..607881410 100644 --- a/plugins/decklink/OBSVideoFrame.cpp +++ b/plugins/decklink/OBSVideoFrame.cpp @@ -188,7 +188,7 @@ HRESULT HDRVideoFrame::GetFloat(BMDDeckLinkFrameMetadataID metadataID, double *v break; case bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance: - *value = 0.00001; + *value = 0.0001; break; case bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel: From ae29c4909f4b49d3150a13f5ef28bd5430ead0c8 Mon Sep 17 00:00:00 2001 From: ScoochAside <26647325+miguedevel@users.noreply.github.com> Date: Sun, 11 May 2025 22:13:09 -0400 Subject: [PATCH 03/34] docs: Fix function name obs_set_video_sdr_white_level Should be obs_set_video_levels --- docs/sphinx/reference-core.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index 31370c3e1..320772d90 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -198,7 +198,7 @@ Initialization, Shutdown, and Information --------------------- -.. function:: void obs_set_video_sdr_white_level(float sdr_white_level, float hdr_nominal_peak_level) +.. function:: void obs_set_video_levels(float sdr_white_level, float hdr_nominal_peak_level) Sets the current video levels. From e855bb9d0d784e217e6dc2b3e8b849b20bd51830 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Wed, 7 May 2025 07:52:36 +0200 Subject: [PATCH 04/34] libobs: Add obs_canvas_get_signal_handler --- libobs/obs-canvas.c | 5 +++++ libobs/obs.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/libobs/obs-canvas.c b/libobs/obs-canvas.c index 494a02f39..5706502cc 100644 --- a/libobs/obs-canvas.c +++ b/libobs/obs-canvas.c @@ -418,6 +418,11 @@ bool obs_canvas_get_video_info(const obs_canvas_t *canvas, struct obs_video_info return true; } +signal_handler_t *obs_canvas_get_signal_handler(obs_canvas_t *canvas) +{ + return canvas->context.signals; +} + void obs_canvas_set_channel(obs_canvas_t *canvas, uint32_t channel, obs_source_t *source) { assert(channel < MAX_CHANNELS); diff --git a/libobs/obs.h b/libobs/obs.h index df8b75443..3fb2d2c92 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2566,6 +2566,9 @@ EXPORT obs_weak_canvas_t *obs_canvas_get_weak_canvas(obs_canvas_t *canvas); /** Get strong reference from weak reference */ EXPORT obs_canvas_t *obs_weak_canvas_get_canvas(obs_weak_canvas_t *weak); +/** Returns the signal handler for a canvas */ +EXPORT signal_handler_t *obs_canvas_get_signal_handler(obs_canvas_t *canvas); + /* Channels */ /** Sets the source to be used for this canvas. */ EXPORT void obs_canvas_set_channel(obs_canvas_t *canvas, uint32_t channel, obs_source_t *source); From 11ee75d2c257258943dfa039fba4ed65f9442b12 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 9 May 2025 15:16:00 -0400 Subject: [PATCH 05/34] libobs: Fix canvas_dosignal_source() using wrong signal handler --- libobs/obs-canvas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs/obs-canvas.c b/libobs/obs-canvas.c index 5706502cc..1524bd1e9 100644 --- a/libobs/obs-canvas.c +++ b/libobs/obs-canvas.c @@ -65,7 +65,7 @@ static inline void canvas_dosignal_source(const char *signal, obs_canvas_t *canv calldata_set_ptr(&data, "canvas", canvas); calldata_set_ptr(&data, "source", source); - signal_handler_signal(source->context.signals, signal, &data); + signal_handler_signal(canvas->context.signals, signal, &data); } /*** Reference Counting ***/ From e0e132e5cff1fb727c377997b876586754cf5f17 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 2 May 2025 14:29:40 -0400 Subject: [PATCH 06/34] frontend: Fix build on FreeBSD libpci is now required on FreeBSD, as on Linux. Fixes: e1d2cf705dd9 ("frontend: Support enhanced broadcasting on Linux") --- frontend/cmake/os-freebsd.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/cmake/os-freebsd.cmake b/frontend/cmake/os-freebsd.cmake index d06d73874..cb62e9519 100644 --- a/frontend/cmake/os-freebsd.cmake +++ b/frontend/cmake/os-freebsd.cmake @@ -2,6 +2,9 @@ target_sources(obs-studio PRIVATE utility/platform-x11.cpp utility/system-info-p target_compile_definitions(obs-studio PRIVATE OBS_INSTALL_PREFIX="${OBS_INSTALL_PREFIX}") target_link_libraries(obs-studio PRIVATE Qt::GuiPrivate Qt::DBus procstat) +find_package(Libpci REQUIRED) +target_link_libraries(obs-studio PRIVATE Libpci::pci) + if(TARGET OBS::python) find_package(Python REQUIRED COMPONENTS Interpreter Development) target_link_libraries(obs-studio PRIVATE Python::Python) From 8b0e9748daa03e692c97371fe18e72c8905750ce Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Mon, 12 May 2025 16:50:53 -0400 Subject: [PATCH 07/34] obs-browser: Update to 2.25.0 c5a2092 - Add hardware accel support under Linux be8e590 - Add workaround for hardware accel under X11 00b920f - Blacklist NVIDIA driver for hardware accel under Linux a0a0edc - Fix support for building with CEF 5060 a54e7c4 - Enable building with CEF 6834 99f9940 - Enable building with CEF 6943 55071a1 - Expand panel shutdown loop to all platforms 0fb70b6 - Add workaround for browser dock hanging 0b13eb9 - Replace Glad usage with newer libobs graphics API f617868 - Prevent Windows 11 timer resolution throttling to fix audio distortion 5ee8056 - Update version to 2.25.0 --- plugins/obs-browser | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-browser b/plugins/obs-browser index b56fd7893..5ee805695 160000 --- a/plugins/obs-browser +++ b/plugins/obs-browser @@ -1 +1 @@ -Subproject commit b56fd78936761891475458447c1cc9058bb9c2d4 +Subproject commit 5ee805695d337cbea4180fd25e5b86bfff4af33b From 840ca8e0d9ec235c3088d52caa57a1c058b41907 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Sat, 1 Jun 2024 15:50:26 -0400 Subject: [PATCH 08/34] frontend: Use public QNativeInterface in Qt 6.5+ Using QNativeInterface allows us to move away from most of QPlatformNativeInterface usage. --- frontend/OBSApp.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/frontend/OBSApp.cpp b/frontend/OBSApp.cpp index ac378a17f..8ff91b781 100644 --- a/frontend/OBSApp.cpp +++ b/frontend/OBSApp.cpp @@ -26,6 +26,9 @@ #if !defined(_WIN32) && !defined(__APPLE__) #include +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) +#include +#endif #endif #include @@ -38,9 +41,6 @@ #else #include #endif -#if !defined(_WIN32) && !defined(__APPLE__) -#include -#endif #ifdef _WIN32 #include @@ -1048,21 +1048,37 @@ bool OBSApp::OBSInit() #if !defined(_WIN32) && !defined(__APPLE__) if (QApplication::platformName() == "xcb") { +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + auto native = qGuiApp->nativeInterface(); + + obs_set_nix_platform_display(native->display()); +#endif + obs_set_nix_platform(OBS_NIX_PLATFORM_X11_EGL); + blog(LOG_INFO, "Using EGL/X11"); } #ifdef ENABLE_WAYLAND if (QApplication::platformName().contains("wayland")) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) + auto native = qGuiApp->nativeInterface(); + + obs_set_nix_platform_display(native->display()); +#endif + obs_set_nix_platform(OBS_NIX_PLATFORM_WAYLAND); setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); + blog(LOG_INFO, "Platform: Wayland"); } #endif +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); obs_set_nix_platform_display(native->nativeResourceForIntegration("display")); #endif +#endif #ifdef __APPLE__ setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); From b65ee894516adb001acd4ec53a659bdaf24ea5e4 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Fri, 18 Apr 2025 09:59:39 +0200 Subject: [PATCH 09/34] frontend: Use winId for Wayland surface in Qt 6.9+ As of Qt 6.9, winId return a wl_surface pointer which allows us to move away completely from QPlatformNativeInterface. https://github.com/qt/qtwayland/commit/32f9b4d --- frontend/widgets/OBSQTDisplay.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/widgets/OBSQTDisplay.cpp b/frontend/widgets/OBSQTDisplay.cpp index 4f0d81fb3..8342c908f 100644 --- a/frontend/widgets/OBSQTDisplay.cpp +++ b/frontend/widgets/OBSQTDisplay.cpp @@ -10,8 +10,10 @@ #include #ifdef ENABLE_WAYLAND #include +#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) #include #endif +#endif #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN @@ -50,8 +52,12 @@ static bool QTToGSWindow(QWindow *window, gs_window &gswindow) break; #ifdef ENABLE_WAYLAND case OBS_NIX_PLATFORM_WAYLAND: { +#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); gswindow.display = native->nativeResourceForWindow("surface", window); +#else + gswindow.display = (void *)window->winId(); +#endif success = gswindow.display != nullptr; break; } From 235be8ca3f8abcb99c4f44e9d9cea8ce9c736b99 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Mon, 12 May 2025 18:30:49 -0400 Subject: [PATCH 10/34] CI: Update obs-crowdin-sync to latest This should allow obs-crowdin-sync to work with the UI/frontend folder structure changes. --- .github/workflows/dispatch.yaml | 2 +- .github/workflows/scheduled.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dispatch.yaml b/.github/workflows/dispatch.yaml index e7b06898b..aa792183b 100644 --- a/.github/workflows/dispatch.yaml +++ b/.github/workflows/dispatch.yaml @@ -68,7 +68,7 @@ jobs: submodules: recursive token: ${{ secrets.CROWDIN_SYNC_GITHUB_PAT }} fetch-depth: 0 - - uses: obsproject/obs-crowdin-sync/download@84628cad04d2423e02443c64965cb834b4c5a245 + - uses: obsproject/obs-crowdin-sync/download@6066f54d3615e39a228b6ccd1a9884953ba3ab05 steam-upload: name: Upload Steam Builds πŸš‚ diff --git a/.github/workflows/scheduled.yaml b/.github/workflows/scheduled.yaml index 022b7fa8d..460306f12 100644 --- a/.github/workflows/scheduled.yaml +++ b/.github/workflows/scheduled.yaml @@ -154,7 +154,7 @@ jobs: - name: Upload US English Language Files πŸ‡ΊπŸ‡Έ if: steps.checks.outcome == 'success' && fromJSON(steps.checks.outputs.hasChangedFiles) - uses: obsproject/obs-crowdin-sync/upload@84628cad04d2423e02443c64965cb834b4c5a245 + uses: obsproject/obs-crowdin-sync/upload@6066f54d3615e39a228b6ccd1a9884953ba3ab05 env: CROWDIN_PAT: ${{ secrets.CROWDIN_SYNC_CROWDIN_PAT }} GITHUB_EVENT_BEFORE: ${{ steps.nightly-checks.outputs.lastNightly }} From 91ad044e689c0d68dd62e9c0ae7e6da0b6b4af36 Mon Sep 17 00:00:00 2001 From: shiina424 <24505855+shiina424@users.noreply.github.com> Date: Wed, 14 May 2025 10:28:54 +0900 Subject: [PATCH 11/34] frontend: Add close icon --- frontend/forms/images/close.svg | 4 ++++ frontend/forms/obs.qrc | 1 + 2 files changed, 5 insertions(+) create mode 100644 frontend/forms/images/close.svg diff --git a/frontend/forms/images/close.svg b/frontend/forms/images/close.svg new file mode 100644 index 000000000..ad7aecd94 --- /dev/null +++ b/frontend/forms/images/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/forms/obs.qrc b/frontend/forms/obs.qrc index 78c6587f0..3604fd05c 100644 --- a/frontend/forms/obs.qrc +++ b/frontend/forms/obs.qrc @@ -1,5 +1,6 @@ + images/close.svg images/save.svg images/media-pause.svg images/trash.svg From caa3d3eb52f70242034782be65b7c713c9909404 Mon Sep 17 00:00:00 2001 From: deltamaya Date: Tue, 13 May 2025 14:37:17 +0800 Subject: [PATCH 12/34] CONTRIBUTING.rst: Fix typo --- CONTRIBUTING.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 60d0a2385..414864062 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -58,7 +58,7 @@ Coding Guidelines - Comments and names of variables/functions/etc. must be in English -- Formatting scripts (mac0S/Linux only) are available `here <./build-aux>`__ +- Formatting scripts (macOS/Linux only) are available `here <./build-aux>`__ Commit Guidelines ----------------- From 4510b93bcb20c6223e3cef2f9d8d227da703c311 Mon Sep 17 00:00:00 2001 From: JiangXsong Date: Tue, 13 May 2025 09:47:04 +0800 Subject: [PATCH 13/34] linux-v4l2: Skip decode H264/MJPEG frames during capture --- plugins/linux-v4l2/v4l2-input.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/linux-v4l2/v4l2-input.c b/plugins/linux-v4l2/v4l2-input.c index 80971cfec..56e92b95c 100644 --- a/plugins/linux-v4l2/v4l2-input.c +++ b/plugins/linux-v4l2/v4l2-input.c @@ -246,6 +246,11 @@ static void *v4l2_thread(void *vptr) blog(LOG_DEBUG, "%s: ts: %06ld buf id #%d, flags 0x%08X, seq #%d, len %d, used %d", data->device_id, buf.timestamp.tv_usec, buf.index, buf.flags, buf.sequence, buf.length, buf.bytesused); + if (buf.flags & V4L2_BUF_FLAG_ERROR) { + blog(LOG_DEBUG, "skipping decoding of buffer with recoverable error-flag set"); + goto continue_queue_buffer; + } + out.timestamp = timeval2ns(buf.timestamp); if (!frames) first_ts = out.timestamp; @@ -264,6 +269,7 @@ static void *v4l2_thread(void *vptr) } obs_source_output_video(data->source, &out); + continue_queue_buffer: if (v4l2_ioctl(data->dev, VIDIOC_QBUF, &buf) < 0) { blog(LOG_ERROR, "%s: failed to enqueue buffer", data->device_id); break; From 16cb051a57bb357fe866252c1360ce2c38e2deec Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Mon, 12 May 2025 08:29:19 -0400 Subject: [PATCH 14/34] libobs-opengl: Promote eglCreateImage failure to LOG_ERROR Xcomposite window capture is currently failing on FreeBSD, in gl_egl_create_texture_from_pixmap (for currently unknown reasons). Increase the log level of the existing log for eglCreateImage failure from LOG_INFO to LOG_ERROR to provide a hint for anyone who encounters the same issue in the future. --- libobs-opengl/gl-egl-common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libobs-opengl/gl-egl-common.c b/libobs-opengl/gl-egl-common.c index 10682b1a6..8fa36e982 100644 --- a/libobs-opengl/gl-egl-common.c +++ b/libobs-opengl/gl-egl-common.c @@ -281,7 +281,7 @@ struct gs_texture *gl_egl_create_texture_from_pixmap(EGLDisplay egl_display, uin EGLImage image = eglCreateImage(egl_display, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, pixmap, pixmap_attrs); if (image == EGL_NO_IMAGE) { - blog(LOG_DEBUG, "Cannot create EGLImage: %s", gl_egl_error_to_string(eglGetError())); + blog(LOG_ERROR, "Cannot create EGLImage: %s", gl_egl_error_to_string(eglGetError())); return NULL; } From 8e129b171d583986d88a19aafe246d4ff88c0e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20S=C3=A4dtler?= Date: Tue, 13 May 2025 02:29:43 +0200 Subject: [PATCH 15/34] obs-outputs: Correct FLV composition time offset calculations The conversion to milliseconds rounds down. Rounding down DTS and CT values independently results in a cumulative error that results in the PTS (DTS + CT) being incorrect (off-by-one). --- plugins/obs-outputs/flv-mux.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/obs-outputs/flv-mux.c b/plugins/obs-outputs/flv-mux.c index 80b02e04f..c3f82dca1 100644 --- a/plugins/obs-outputs/flv-mux.c +++ b/plugins/obs-outputs/flv-mux.c @@ -307,7 +307,7 @@ static int32_t last_time = 0; static void flv_video(struct serializer *s, int32_t dts_offset, struct encoder_packet *packet, bool is_header) { - int64_t offset = packet->pts - packet->dts; + int32_t ct_offset_ms = get_ms_time(packet, packet->pts) - get_ms_time(packet, packet->dts); int32_t time_ms = get_ms_time(packet, packet->dts) - dts_offset; if (!packet->data || !packet->size) @@ -332,7 +332,7 @@ static void flv_video(struct serializer *s, int32_t dts_offset, struct encoder_p /* these are the 5 extra bytes mentioned above */ s_w8(s, packet->keyframe ? 0x17 : 0x27); s_w8(s, is_header ? 0 : 1); - s_wb24(s, get_ms_time(packet, offset)); + s_wb24(s, ct_offset_ms); s_write(s, packet->data, packet->size); write_previous_tag_size(s); @@ -486,7 +486,8 @@ void flv_packet_ex(struct encoder_packet *packet, enum video_id_t codec_id, int3 // H.264/HEVC composition time offset if ((codec_id == CODEC_H264 || codec_id == CODEC_HEVC) && type == PACKETTYPE_FRAMES) { - s_wb24(&s, get_ms_time(packet, packet->pts - packet->dts)); + int32_t ct_offset_ms = get_ms_time(packet, packet->pts) - get_ms_time(packet, packet->dts); + s_wb24(&s, ct_offset_ms); } // packet data From 56f75bd3e04d805563708f97d5fdf5b2b9bf95e4 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 17 May 2025 18:52:35 +0200 Subject: [PATCH 16/34] win-capture: Add SDL_app to list of generic classes --- libobs/util/windows/window-helpers.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libobs/util/windows/window-helpers.c b/libobs/util/windows/window-helpers.c index 94b2eae1f..ca737634e 100644 --- a/libobs/util/windows/window-helpers.c +++ b/libobs/util/windows/window-helpers.c @@ -468,6 +468,7 @@ static int window_rating(HWND window, enum window_priority priority, const char static const char *generic_class_substrings[] = { "Chrome", + "SDL_app", NULL, }; From de61fd575631325170eb2ffd4776ffa9823b164b Mon Sep 17 00:00:00 2001 From: Matt Gajownik Date: Sat, 17 May 2025 11:22:00 +1000 Subject: [PATCH 17/34] CI: Add CEF & enable obs-browser for Windows on ARM --- CMakePresets.json | 2 +- buildspec.json | 3 ++- plugins/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 09d8e9e10..5456ac12a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -134,7 +134,7 @@ "GPU_PRIORITY_VAL": {"type": "STRING", "value": "$penv{GPU_PRIORITY_VAL}"}, "VIRTUALCAM_GUID": {"type": "STRING", "value": "A3FCE0F5-3493-419F-958A-ABA1250EC20B"}, "ENABLE_AJA": false, - "ENABLE_BROWSER": false, + "ENABLE_BROWSER": true, "ENABLE_SCRIPTING": false, "ENABLE_VST": false } diff --git a/buildspec.json b/buildspec.json index d1412af33..e4542b43d 100644 --- a/buildspec.json +++ b/buildspec.json @@ -34,7 +34,8 @@ "macos-arm64": "1bb59dbb759150e170796f641a4a84c59c0dea4ffef89477e9d811520af5d15a", "ubuntu-x86_64": "cb7225c7a937ac4cdc9c41700061f45cccc640d696902357782e57f8250bf43a", "ubuntu-aarch64": "f92df7f076bdc8cac2e3c77e27be418008b7168723201cb73fdbc2f6d91bc778", - "windows-x64": "922efbda1f2f8be9e5b2754d878a14d90afc81f04e94fc9101a7513e2b5cecc1" + "windows-x64": "922efbda1f2f8be9e5b2754d878a14d90afc81f04e94fc9101a7513e2b5cecc1", + "windows-arm64": "df9df4bd85826b4c071c6db404fd59cf93efd9c58ec3ab64e204466ae19bb02a" }, "revision": { "macos-x86_64": 3, diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 470e727c1..c12f015c8 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -10,7 +10,7 @@ endif() set_property(GLOBAL APPEND PROPERTY OBS_FEATURES_ENABLED "Plugin Support") macro(check_obs_browser) - if((OS_WINDOWS AND CMAKE_VS_PLATFORM_NAME MATCHES "(Win32|x64)") OR OS_MACOS OR OS_LINUX) + if((OS_WINDOWS AND CMAKE_VS_PLATFORM_NAME MATCHES "(ARM64|x64)") OR OS_MACOS OR OS_LINUX) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser/CMakeLists.txt") message(FATAL_ERROR "Required submodule 'obs-browser' not available.") else() From b46e5bb1c08fb385d19f024199557c792a4e6126 Mon Sep 17 00:00:00 2001 From: Warchamp7 Date: Fri, 16 May 2025 23:28:44 -0400 Subject: [PATCH 18/34] frontend: Fix dock title button sizes --- frontend/data/themes/Dark/close.svg | 5 +---- frontend/data/themes/Light/close.svg | 5 +---- frontend/data/themes/Yami.obt | 5 +++++ frontend/forms/images/close.svg | 5 +---- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/frontend/data/themes/Dark/close.svg b/frontend/data/themes/Dark/close.svg index 2a10db825..c0bceaa07 100644 --- a/frontend/data/themes/Dark/close.svg +++ b/frontend/data/themes/Dark/close.svg @@ -1,4 +1 @@ - - - - + diff --git a/frontend/data/themes/Light/close.svg b/frontend/data/themes/Light/close.svg index ad7aecd94..72f0c33b2 100644 --- a/frontend/data/themes/Light/close.svg +++ b/frontend/data/themes/Light/close.svg @@ -1,4 +1 @@ - - - - + diff --git a/frontend/data/themes/Yami.obt b/frontend/data/themes/Yami.obt index 0190ac528..6938cbf8f 100644 --- a/frontend/data/themes/Yami.obt +++ b/frontend/data/themes/Yami.obt @@ -651,6 +651,10 @@ QDockWidget::float-button { border-radius: var(--border_radius); background: transparent; margin-right: 1px; + min-width: var(--icon_base); + min-height: var(--icon_base); + icon-size: var(--icon_base); + padding: var(--padding_base); } QDockWidget::close-button:hover, @@ -660,6 +664,7 @@ QDockWidget::float-button:hover { QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { + background: var(--button_bg_down); padding: 1px -1px -1px 1px; } diff --git a/frontend/forms/images/close.svg b/frontend/forms/images/close.svg index ad7aecd94..72f0c33b2 100644 --- a/frontend/forms/images/close.svg +++ b/frontend/forms/images/close.svg @@ -1,4 +1 @@ - - - - + From cae8d8a3da8c8eae42f5f1df730338a0232f274b Mon Sep 17 00:00:00 2001 From: Exeldro Date: Sat, 17 May 2025 09:46:50 +0200 Subject: [PATCH 19/34] frontend: Fix canvas remove event --- frontend/widgets/OBSBasic.hpp | 2 +- frontend/widgets/OBSBasic_Canvases.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/widgets/OBSBasic.hpp b/frontend/widgets/OBSBasic.hpp index 1cfe14f1a..848b70bc7 100644 --- a/frontend/widgets/OBSBasic.hpp +++ b/frontend/widgets/OBSBasic.hpp @@ -1124,7 +1124,7 @@ public: const OBS::Canvas &AddCanvas(const std::string &name, obs_video_info *ovi = nullptr, int flags = 0); public slots: - bool RemoveCanvas(obs_canvas_t *canvas); + bool RemoveCanvas(OBSCanvas canvas); /* ------------------------------------- * MARK: - OBSBasic_SceneItems diff --git a/frontend/widgets/OBSBasic_Canvases.cpp b/frontend/widgets/OBSBasic_Canvases.cpp index 35e25afec..9b1f346ef 100644 --- a/frontend/widgets/OBSBasic_Canvases.cpp +++ b/frontend/widgets/OBSBasic_Canvases.cpp @@ -31,7 +31,7 @@ const OBS::Canvas &OBSBasic::AddCanvas(const std::string &name, obs_video_info * return it; } -bool OBSBasic::RemoveCanvas(obs_canvas_t *canvas) +bool OBSBasic::RemoveCanvas(OBSCanvas canvas) { if (!canvas) return false; From 0b7c1f7081941e2605f1c8bb7ce0907a3901a884 Mon Sep 17 00:00:00 2001 From: Warchamp7 Date: Fri, 16 May 2025 23:41:49 -0400 Subject: [PATCH 20/34] frontend: Explicitly set titlebar item padding --- frontend/data/themes/Yami.obt | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/data/themes/Yami.obt b/frontend/data/themes/Yami.obt index 6938cbf8f..2fbb7480e 100644 --- a/frontend/data/themes/Yami.obt +++ b/frontend/data/themes/Yami.obt @@ -495,6 +495,7 @@ QMenu::right-arrow { /* Top Menu Bar Items */ QMenuBar::item { background-color: transparent; + padding: var(--padding_large) var(--padding_xlarge); } QMenuBar::item:selected { From b7bd7c00c55743c821314cf1611d44157ce778dd Mon Sep 17 00:00:00 2001 From: shiina424 <24505855+shiina424@users.noreply.github.com> Date: Wed, 14 May 2025 11:07:36 +0900 Subject: [PATCH 21/34] frontend: Fix visibility and lock checkbox in System theme --- frontend/components/SourceTreeItem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/components/SourceTreeItem.cpp b/frontend/components/SourceTreeItem.cpp index a731dd359..f668a60d2 100644 --- a/frontend/components/SourceTreeItem.cpp +++ b/frontend/components/SourceTreeItem.cpp @@ -70,12 +70,14 @@ SourceTreeItem::SourceTreeItem(SourceTree *tree_, OBSSceneItem sceneitem_) : tre vis->setChecked(sourceVisible); vis->setAccessibleName(QTStr("Basic.Main.Sources.Visibility")); vis->setAccessibleDescription(QTStr("Basic.Main.Sources.VisibilityDescription").arg(name)); + vis->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); lock = new QCheckBox(); lock->setProperty("class", "checkbox-icon indicator-lock"); lock->setChecked(obs_sceneitem_locked(sceneitem)); lock->setAccessibleName(QTStr("Basic.Main.Sources.Lock")); lock->setAccessibleDescription(QTStr("Basic.Main.Sources.LockDescription").arg(name)); + lock->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); label = new OBSSourceLabel(source); label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); From ae61432c8ed3bb7d9f922e9820b5e2d5d5ed118a Mon Sep 17 00:00:00 2001 From: shiina424 <24505855+shiina424@users.noreply.github.com> Date: Wed, 14 May 2025 12:30:54 +0900 Subject: [PATCH 22/34] frontend: Add missing translations --- frontend/data/locale/en-US.ini | 7 +++++++ frontend/forms/OBSBasicSettings.ui | 14 +++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/frontend/data/locale/en-US.ini b/frontend/data/locale/en-US.ini index 15b1f4aed..04e787f10 100644 --- a/frontend/data/locale/en-US.ini +++ b/frontend/data/locale/en-US.ini @@ -956,6 +956,13 @@ Basic.Settings.Appearance.General="General" Basic.Settings.Appearance.General.Theme="Theme" Basic.Settings.Appearance.General.Variant="Style" Basic.Settings.Appearance.General.NoVariant="No Styles Available" +Basic.Settings.Appearance.FontScale="Font Size" +Basic.Settings.Appearance.Density="Density" +Basic.Settings.Appearance.Classic="Classic" +Basic.Settings.Appearance.Compact="Compact" +Basic.Settings.Appearance.Normal="Normal" +Basic.Settings.Appearance.Comfortable="Comfortable" +Basic.Settings.Appearance.OptionsWarning="Some appearance options are not available for this style." # basic mode 'stream' settings Basic.Settings.Stream="Stream" diff --git a/frontend/forms/OBSBasicSettings.ui b/frontend/forms/OBSBasicSettings.ui index 812f6bb28..1d59d537b 100644 --- a/frontend/forms/OBSBasicSettings.ui +++ b/frontend/forms/OBSBasicSettings.ui @@ -1023,7 +1023,7 @@ - Font Size + Basic.Settings.Appearance.FontScale appearanceFontScale @@ -1116,7 +1116,7 @@ - Density + Basic.Settings.Appearance.Density @@ -1147,7 +1147,7 @@ - Classic + Basic.Settings.Appearance.Classic true @@ -1163,7 +1163,7 @@ - Compact + Basic.Settings.Appearance.Compact true @@ -1179,7 +1179,7 @@ - Normal + Basic.Settings.Appearance.Normal true @@ -1198,7 +1198,7 @@ - Comfortable + Basic.Settings.Appearance.Comfortable true @@ -1258,7 +1258,7 @@ - Some appearance options are not available for this style. + Basic.Settings.Appearance.OptionsWarning text-warning From 32f1b93d72511705517bf64890c6d017e44c9c58 Mon Sep 17 00:00:00 2001 From: Warchamp7 Date: Wed, 21 May 2025 20:28:41 -0400 Subject: [PATCH 23/34] frontend: Swap preview zoom buttons --- frontend/forms/OBSBasic.ui | 118 ++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/frontend/forms/OBSBasic.ui b/frontend/forms/OBSBasic.ui index 4220444e5..47e5303a9 100644 --- a/frontend/forms/OBSBasic.ui +++ b/frontend/forms/OBSBasic.ui @@ -249,63 +249,6 @@ 0 - - - - - 0 - 0 - - - - - 20 - 16 - - - - - 20 - 16 - - - - Basic.MainMenu.Edit.Scale.ZoomIn - - - Basic.MainMenu.Edit.Scale.ZoomIn - - - - - - - :/res/images/plus.svg:/res/images/plus.svg - - - - 8 - 8 - - - - true - - - icon-plus - - - - - - - 100% - - - Qt::AlignCenter - - - @@ -327,10 +270,10 @@ - Basic.MainMenu.Edit.Scale.ZoomOut + Basic.MainMenu.Edit.Scale.ZoomIn - Basic.MainMenu.Edit.Scale.ZoomOut + Basic.MainMenu.Edit.Scale.ZoomIn @@ -353,6 +296,63 @@ + + + + 100% + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 20 + 16 + + + + + 20 + 16 + + + + Basic.MainMenu.Edit.Scale.ZoomOut + + + Basic.MainMenu.Edit.Scale.ZoomOut + + + + + + + :/res/images/plus.svg:/res/images/plus.svg + + + + 8 + 8 + + + + true + + + icon-plus + + + From 90d158cf17f10a8287837f523ce7a0596a30c055 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Thu, 22 May 2025 23:44:10 +0900 Subject: [PATCH 24/34] libobs/util: Fix coprocess not having environment variables --- libobs/util/pipe-posix.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libobs/util/pipe-posix.c b/libobs/util/pipe-posix.c index 1f5e10725..1b8afc517 100644 --- a/libobs/util/pipe-posix.c +++ b/libobs/util/pipe-posix.c @@ -24,6 +24,8 @@ #include "bmem.h" #include "pipe.h" +extern char **environ; + struct os_process_pipe { bool read_pipe; int pid; @@ -88,7 +90,7 @@ os_process_pipe_t *os_process_pipe_create_internal(const char *bin, char **argv, posix_spawn_file_actions_adddup2(&file_actions, errfds[1], STDERR_FILENO); int pid; - int ret = posix_spawn(&pid, bin, &file_actions, NULL, (char *const *)argv, NULL); + int ret = posix_spawn(&pid, bin, &file_actions, NULL, (char *const *)argv, environ); posix_spawn_file_actions_destroy(&file_actions); From 16965844dc346b23612c8fe508f9be735ab3889b Mon Sep 17 00:00:00 2001 From: shiina424 <24505855+shiina424@users.noreply.github.com> Date: Wed, 14 May 2025 10:52:40 +0900 Subject: [PATCH 25/34] frontend: Fix button pressed color in Rachni theme --- frontend/data/themes/Yami_Rachni.ovt | 59 +++++++++++++++------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/frontend/data/themes/Yami_Rachni.ovt b/frontend/data/themes/Yami_Rachni.ovt index bc22851a0..fa677c9b7 100644 --- a/frontend/data/themes/Yami_Rachni.ovt +++ b/frontend/data/themes/Yami_Rachni.ovt @@ -16,8 +16,8 @@ --grey7: rgb(25,27,38); --grey8: rgb(21,22,23); - --primary: rgb(0,188,212); - --primary_light: rgb(145,76,103); + --primary: rgb(145,76,103); + --primary_light: rgb(0,188,212); --primary_lighter: rgb(240,96,146); --primary_dark: rgb(89,66,79); --primary_darker: rgb(25,27,38); @@ -32,17 +32,17 @@ --input_bg_hover: var(--grey7); --input_bg_focus: var(--grey7); - --list_item_bg_selected: var(--primary); - --list_item_bg_hover: var(--primary_light); + --list_item_bg_selected: var(--primary_light); + --list_item_bg_hover: var(--primary); --input_border: var(--grey1); - --input_border_hover: var(--primary); - --input_border_focus: var(--primary); + --input_border_hover: var(--primary_light); + --input_border_focus: var(--primary_light); --spacing_input: var(--spacing_base); - --button_bg: var(--primary); - --button_bg_hover: var(--primary_light); + --button_bg: var(--primary_light); + --button_bg_hover: var(--primary); --button_bg_down: var(--primary_dark); --button_bg_disabled: var(--grey6); @@ -50,7 +50,7 @@ --button_bg_red_hover: rgb(116,32,49); --button_bg_red_down: rgb(63,21,30); - --button_border: var(--primary); + --button_border: var(--primary_light); --button_border_hover: var(--button_bg_hover); --button_border_focus: var(--button_bg_hover); @@ -62,15 +62,15 @@ --tab_border: var(--grey3); --tab_border_hover: var(--grey1); --tab_border_focus: var(--grey1); - --tab_border_selected: var(--primary_light); + --tab_border_selected: var(--primary); --scrollbar: var(--grey2); - --scrollbar_hover: var(--primary_light); + --scrollbar_hover: var(--primary); --scrollbar_down: var(--grey3); - --scrollbar_border: var(--primary_light); + --scrollbar_border: var(--primary); --toolbutton_bg: var(--grey3); - --toolbutton_bg_hover: var(--primary_light); + --toolbutton_bg_hover: var(--primary); --toolbutton_bg_down: var(--primary_dark); --toolbutton_bg_disabled: var(--grey4); } @@ -95,6 +95,10 @@ QDoubleSpinBox { border-color: var(--input_border); } +QPushButton { + border-width: 2px; +} + QMenu::item:selected, QListWidget::item:selected, SceneTree::item:selected, @@ -110,7 +114,7 @@ QMenu::item:selected:hover, QListWidget::item:selected:hover, SceneTree::item:selected:hover, SourceTree::item:selected:hover { - background-color: var(--primary); + background-color: var(--primary_light); } QToolBar { @@ -123,6 +127,16 @@ QPushButton:disabled { border-color: var(--grey3); } +QPushButton:checked, +QPushButton.state-active { + border-color: var(--primary_lighter); +} + +QPushButton:checked:hover, +QPushButton:checked:focus { + border-color: var(--primary_light); +} + QToolButton, QPushButton[toolButton="true"] { background-color: var(--toolbutton_bg); @@ -131,8 +145,8 @@ QPushButton[toolButton="true"] { QToolButton:hover, QToolButton:focus { - border-color: var(--primary_light); - background-color: var(--primary_light); + border-color: var(--primary); + background-color: var(--primary); } QToolButton:pressed, @@ -185,7 +199,7 @@ QTabBar::tab { } QTabBar::tab:top:selected { - border-bottom: 2px solid var(--primary_light); + border-bottom: 2px solid var(--primary); } QTabBar QToolButton { @@ -219,14 +233,3 @@ VolumeMeter { qproperty-majorTickColor: palette(window-text); qproperty-minorTickColor: palette(mid); } - -/* Primary Control Button Checked Coloring */ -#streamButton:!hover:!pressed.state-active, -#recordButton:!hover:!pressed.state-active, -#pauseRecordButton:!hover:!pressed.state-active, -#replayBufferButton:!hover:!pressed.state-active, -#virtualCamButton:!hover:!pressed.state-active, -#modeSwitch:!hover:!pressed.state-active, -#broadcastButton:!hover:!pressed.state-active { - background: var(--primary_light); -} From b4e8fa78fbaf6672ffe945ef9495a20b0d767a72 Mon Sep 17 00:00:00 2001 From: shiina424 <24505855+shiina424@users.noreply.github.com> Date: Wed, 14 May 2025 11:25:07 +0900 Subject: [PATCH 26/34] frontend: Fix multiview translation string --- frontend/data/locale/en-US.ini | 1 + frontend/widgets/OBSProjector.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/data/locale/en-US.ini b/frontend/data/locale/en-US.ini index 04e787f10..da7c09be7 100644 --- a/frontend/data/locale/en-US.ini +++ b/frontend/data/locale/en-US.ini @@ -42,6 +42,7 @@ Projector.Window="New window" Projector.Title="Projector" Projector.Title.Scene="Scene: %1" Projector.Title.Source="Source: %1" +Projector.Title.Multiview="Multiview" Projector.ResizeWindowToContent="Fit window to content" Clear="Clear" Revert="Revert" diff --git a/frontend/widgets/OBSProjector.cpp b/frontend/widgets/OBSProjector.cpp index 2dee92d06..fe64f96ef 100644 --- a/frontend/widgets/OBSProjector.cpp +++ b/frontend/widgets/OBSProjector.cpp @@ -334,7 +334,7 @@ void OBSProjector::UpdateProjectorTitle(QString name) title = QTStr("Projector.Title") + " - " + QTStr("StudioMode.Program"); break; case ProjectorType::Multiview: - title = QTStr("Projector.Title") + " - " + QTStr("Multiview"); + title = QTStr("Projector.Title") + " - " + QTStr("Projector.Title.Multiview"); break; default: title = name; From b9cd9f30b1be44b4b3862c694d88d3fcb5324f1d Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Thu, 22 May 2025 16:54:29 -0400 Subject: [PATCH 27/34] frontend: Make profile export menu item translatable --- frontend/forms/OBSBasic.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/forms/OBSBasic.ui b/frontend/forms/OBSBasic.ui index 47e5303a9..3d1b6610b 100644 --- a/frontend/forms/OBSBasic.ui +++ b/frontend/forms/OBSBasic.ui @@ -2027,7 +2027,7 @@ - Export + Basic.MainMenu.Export @@ -2067,7 +2067,7 @@ - Export + Basic.MainMenu.Export From 910271d21ca54e3687af4340801306e6fa85cf8f Mon Sep 17 00:00:00 2001 From: Warchamp7 Date: Fri, 23 May 2025 03:50:20 -0400 Subject: [PATCH 28/34] frontend: Fix spacing of group expand button --- frontend/data/themes/Yami.obt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/data/themes/Yami.obt b/frontend/data/themes/Yami.obt index 2fbb7480e..a105993a3 100644 --- a/frontend/data/themes/Yami.obt +++ b/frontend/data/themes/Yami.obt @@ -549,6 +549,11 @@ SourceTreeItem .checkbox-icon { margin-left: var(--spacing_large); } +SourceTree .indicator-expand { + margin-right: var(--spacing_large); + margin-left: 0; +} + QMenu::item:selected, QListView::item:selected, QListWidget::item:selected { From 8bf9ec69454c290d4d023663fd7befb75fb5aa78 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Wed, 21 May 2025 12:46:57 -0400 Subject: [PATCH 29/34] win-capture: Fix crash if cursor size is zero --- plugins/win-capture/cursor-capture.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/win-capture/cursor-capture.c b/plugins/win-capture/cursor-capture.c index a85bf7799..2471c2d51 100644 --- a/plugins/win-capture/cursor-capture.c +++ b/plugins/win-capture/cursor-capture.c @@ -7,6 +7,9 @@ static uint8_t *get_bitmap_data(HBITMAP hbmp, BITMAP *bmp) if (GetObject(hbmp, sizeof(*bmp), bmp) != 0) { uint8_t *output; unsigned int size = bmp->bmHeight * bmp->bmWidthBytes; + if (!size) { + return NULL; + } output = bmalloc(size); GetBitmapBits(hbmp, size, output); @@ -99,6 +102,9 @@ static inline uint8_t *copy_from_mask(ICONINFO *ii, uint32_t *width, uint32_t *h bmp.bmHeight /= 2; pixels = bmp.bmHeight * bmp.bmWidth; + if (!pixels) { + return NULL; + } output = bzalloc(pixels * 4); bottom = bmp.bmWidthBytes * bmp.bmHeight; From 47a81b1c69f7308e214d7ebf2695b5394cc20787 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 23 May 2025 17:44:16 -0400 Subject: [PATCH 30/34] obs-websocket: Update version to 5.6.0 New Features: - Added `obsStudioVersion` field to Identify message [tt2468] - Added `inputKindCaps` field to input list array [tt2468] - Added `inputKindCaps` to `CreateInput` event [tt2468] - Added input deinterlace mode/field order requests [tt2468] Enhancements: - Added nlohmann type converters for source deinterlacing [tt2468] Bug Fixes: - Avoided unnecessary volumemeters object copy [tt2468] Other Notes: - Updated documentation --- plugins/obs-websocket | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-websocket b/plugins/obs-websocket index c542622d7..79cd0c729 160000 --- a/plugins/obs-websocket +++ b/plugins/obs-websocket @@ -1 +1 @@ -Subproject commit c542622d7b6d41ce5875f54efdab1d4ac2967ef4 +Subproject commit 79cd0c729e46cae785d2035d9d7ffe1379adbe7e From 569d3dfd34c6d6d25c032405529b134d373893d6 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 23 May 2025 18:25:01 -0400 Subject: [PATCH 31/34] CI: Update deps to 2025-05-23 release Notable changes: * deps.ffmpeg: Update AMF to 1.4.36 * deps.ffmpeg: Revert nv-codec-headers to n12.2.72.0 * deps.ffmpeg: Update FFmpeg to 7.1.1 * deps.qt: Update Qt to 6.8.3 for macOS * deps.qt: Update Qt to 6.8.3 for Windows --- buildspec.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/buildspec.json b/buildspec.json index e4542b43d..b7df45819 100644 --- a/buildspec.json +++ b/buildspec.json @@ -1,28 +1,28 @@ { "dependencies": { "prebuilt": { - "version": "2025-03-06", + "version": "2025-05-23", "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", "label": "Pre-Built obs-deps", "hashes": { - "macos-universal": "e32bd7dbfef37931147781d8d657a4328bdcf1148008980539c07d4a18b54965", - "windows-x64": "22d9f923eb6d2cbdde1ff64efb9638a88629ba23a4b70ed7a52e98a81b740275", - "windows-x86": "deb4c08514be0b1b1e155305ddd9cb936d906b389b3a54b3a9e748ea842904af", - "windows-arm64": "80e6776c7501a1b06d804ad80e55718fe24e1aa3eae736cbb8955b884ecd5c8a" + "macos-universal": "7b1448581b92c6f8d4e2f9b1b10eb318ebfc4df7255638e05bacb49b620e190d", + "windows-x64": "88dc7bab50542b4b58194cdd5d7e6f4b73cde7c0d1ee7a040a6d9c9df05187b1", + "windows-x86": "f6d01c7c31f14cb245803963a2f9af42b01b63f9baadf6259e56843d94eae8c4", + "windows-arm64": "43520957736d332b0a545c320db7087762e394ef78243d72769fb59794e00913" } }, "qt6": { - "version": "2025-03-06", + "version": "2025-05-23", "baseUrl": "https://github.com/obsproject/obs-deps/releases/download", "label": "Pre-Built Qt6", "hashes": { - "macos-universal": "51bb5e2e546443ae442f74870a2c0973f1c07d2b5628cd1d530d53ff3f668f04", - "windows-x64": "84f83f1c3656b53a7c4ba8f8248818ba8684786e3e47123b679406e42d8b6a54", - "windows-arm64": "f03bd8f9df6f6d668e1f3a0bbf8c35a5f80ca27c28a5bfe4549ff230791ecb1b" + "macos-universal": "d4945fe719d31d353dc76298f58823d7891126e33af5029f763427ea9f80bfaa", + "windows-x64": "bd80383dc799c0bba2f7fae793613b3fbd2cc3a3712b3d3b63b490721d187d9e", + "windows-arm64": "35a06786c460031571134f0e2ba288a9dce4ddf044686f6af48fae52728d1796" }, "debugSymbols": { - "windows-x64": "32afba76af47f6fb2d8aa1b90b981b56cc2f2b9a5552934ad5446ddc20dec2a9", - "windows-arm64": "36bfa31109da5273e93e68faa62b0cf4a89092147c5203f1a17d2ec7d1c814b4" + "windows-x64": "9c9a15c5dbe59eb6a1c31c06b7208f3c4403671fbdfaef341cac3beb7af24ea1", + "windows-arm64": "a6229cc9e5e08a22921b1fa8fb10fc6e36e88f692fa2e6921c1b61b7a3161c81" } }, "cef": { From f6c6b3f9d1f7fee92652165e1bf850f4eb343f08 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 23 May 2025 18:43:59 -0400 Subject: [PATCH 32/34] build-aux: Update Flatpak modules * Revert nv-codec-headers to n12.2.72.0 * Update FFmpeg to 7.1.1 --- build-aux/modules/20-nv-codec.json | 4 ++-- build-aux/modules/30-ffmpeg.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build-aux/modules/20-nv-codec.json b/build-aux/modules/20-nv-codec.json index 5ec28a5fb..ed2f68ddc 100644 --- a/build-aux/modules/20-nv-codec.json +++ b/build-aux/modules/20-nv-codec.json @@ -11,8 +11,8 @@ { "type": "git", "url": "https://github.com/FFmpeg/nv-codec-headers.git", - "tag": "n13.0.19.0", - "commit": "e844e5b26f46bb77479f063029595293aa8f812d" + "tag": "n12.2.72.0", + "commit": "c69278340ab1d5559c7d7bf0edf615dc33ddbba7" } ] } diff --git a/build-aux/modules/30-ffmpeg.json b/build-aux/modules/30-ffmpeg.json index 6b06f8c91..9b7a44213 100644 --- a/build-aux/modules/30-ffmpeg.json +++ b/build-aux/modules/30-ffmpeg.json @@ -25,8 +25,8 @@ { "type": "git", "url": "https://github.com/FFmpeg/FFmpeg.git", - "tag": "n7.1", - "commit": "b08d7969c550a804a59511c7b83f2dd8cc0499b8", + "tag": "n7.1.1", + "commit": "db69d06eeeab4f46da15030a80d539efb4503ca8", "disable-shallow-clone": true }, { From e8d1834f683a3e1b723104aac7864aef7aedbc75 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Fri, 23 May 2025 19:39:06 -0400 Subject: [PATCH 33/34] libobs: Update version to 31.1.0 --- libobs/obs-config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libobs/obs-config.h b/libobs/obs-config.h index 941597e30..9d3f8c77e 100644 --- a/libobs/obs-config.h +++ b/libobs/obs-config.h @@ -34,14 +34,14 @@ * * Reset to zero each major version */ -#define LIBOBS_API_MINOR_VER 0 +#define LIBOBS_API_MINOR_VER 1 /* * Increment if backward-compatible bug fix * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 3 +#define LIBOBS_API_PATCH_VER 0 #define MAKE_SEMANTIC_VERSION(major, minor, patch) ((major << 24) | (minor << 16) | patch) From bdebea3d858deeccf1900fe8272d1f40bb9501e3 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 11 Sep 2024 14:01:36 +0200 Subject: [PATCH 34/34] frontend: Enable browser hw accel toggle under Linux --- frontend/OBSApp.cpp | 6 ++++-- frontend/settings/OBSBasicSettings.cpp | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/frontend/OBSApp.cpp b/frontend/OBSApp.cpp index 8ff91b781..de10127b5 100644 --- a/frontend/OBSApp.cpp +++ b/frontend/OBSApp.cpp @@ -230,11 +230,13 @@ bool OBSApp::InitGlobalConfigDefaults() #ifdef _WIN32 config_set_default_bool(appConfig, "Audio", "DisableAudioDucking", true); +#endif + +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) config_set_default_bool(appConfig, "General", "BrowserHWAccel", true); #endif #ifdef __APPLE__ - config_set_default_bool(appConfig, "General", "BrowserHWAccel", true); config_set_default_bool(appConfig, "Video", "DisableOSXVSync", true); config_set_default_bool(appConfig, "Video", "ResetOSXVSyncOnExit", true); #endif @@ -1091,7 +1093,7 @@ bool OBSApp::OBSInit() obs_set_ui_task_handler(ui_task_handler); -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) bool browserHWAccel = config_get_bool(appConfig, "General", "BrowserHWAccel"); OBSDataAutoRelease settings = obs_data_create(); diff --git a/frontend/settings/OBSBasicSettings.cpp b/frontend/settings/OBSBasicSettings.cpp index 260601bd9..32e2d92de 100644 --- a/frontend/settings/OBSBasicSettings.cpp +++ b/frontend/settings/OBSBasicSettings.cpp @@ -530,7 +530,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) #ifdef _WIN32 HookWidget(ui->disableAudioDucking, CHECK_CHANGED, ADV_CHANGED); #endif -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) HookWidget(ui->browserHWAccel, CHECK_CHANGED, ADV_RESTART); #endif HookWidget(ui->filenameFormatting, EDIT_CHANGED, ADV_CHANGED); @@ -618,7 +618,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) delete ui->enableNewSocketLoop; delete ui->enableLowLatencyMode; delete ui->hideOBSFromCapture; -#ifdef __linux__ +#if !defined(__APPLE__) && !defined(__linux__) delete ui->browserHWAccel; delete ui->sourcesGroup; #endif @@ -633,7 +633,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) ui->enableNewSocketLoop = nullptr; ui->enableLowLatencyMode = nullptr; ui->hideOBSFromCapture = nullptr; -#ifdef __linux__ +#if !defined(__APPLE__) && !defined(__linux__) ui->browserHWAccel = nullptr; ui->sourcesGroup = nullptr; #endif @@ -2593,7 +2593,7 @@ void OBSBasicSettings::LoadAdvancedSettings() ui->enableLowLatencyMode->setChecked(enableLowLatencyMode); ui->enableLowLatencyMode->setToolTip(QTStr("Basic.Settings.Advanced.Network.TCPPacing.Tooltip")); #endif -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) bool browserHWAccel = config_get_bool(App()->GetAppConfig(), "General", "BrowserHWAccel"); ui->browserHWAccel->setChecked(browserHWAccel); prevBrowserAccel = ui->browserHWAccel->isChecked(); @@ -3140,7 +3140,7 @@ void OBSBasicSettings::SaveAdvancedSettings() SaveCheckBox(ui->enableNewSocketLoop, "Output", "NewSocketLoopEnable"); SaveCheckBox(ui->enableLowLatencyMode, "Output", "LowLatencyEnable"); #endif -#if defined(_WIN32) || defined(__APPLE__) +#if defined(_WIN32) || defined(__APPLE__) || defined(__linux__) bool browserHWAccel = ui->browserHWAccel->isChecked(); config_set_bool(App()->GetAppConfig(), "General", "BrowserHWAccel", browserHWAccel); #endif