Skip to content

OBS merge 32.1.1#734

Merged
summeroff merged 441 commits into
streamlabsfrom
obs_merge_32.1.1
Jul 20, 2026
Merged

OBS merge 32.1.1#734
summeroff merged 441 commits into
streamlabsfrom
obs_merge_32.1.1

Conversation

@aleksandr-voitenko

@aleksandr-voitenko aleksandr-voitenko commented Jun 2, 2026

Copy link
Copy Markdown
Collaborator

Merged the upstream OBS 32.1.1 and applies a bunch of post-merge fixes.

pkviet and others added 30 commits September 26, 2025 12:12
When an 'Audio Capture Source' device is also used for monitoring, the
deduplication logic is applied: all monitored sources are silenced.
But this should not silence the 'Audio Capture Source' if for some
reason, it is being monitored (the user will get echoes, but hey, it's
their choice). So we exclude the 'Audio Capture Source' from the
silenced sources.

Signed-off-by: pkv <pkv@obsproject.com>
The commit adds a log line to inform the user that deduplication is
being applied. The info is displayed whenever deduplication first
occurs.

Signed-off-by: pkv <pkv@obsproject.com>
Fix an issue where the stack around the variable snapEnabled was
corrupted.

SPI_GETSNAPTODEFBUTTON should use BOOL, not bool.

Reference:
 * https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfow
By explicitly setting the OAuth dialog as the parent of the CEF widget,
it will automatically by cleaned up as soon as the dialog is closed
itself.

This also detaches the destruction of the widget from the browser
cleanup code.
Per the Apple documentation, when 0 is returned from
IOSurfaceGetPixelFormat, the IOSurface is invalid. Prior to [1] however,
any invalid surfaces were (likely accidentally) treated as 32BGRA.
And as it turns out, any IOSurface received from Syphon does not have
the pixel format set, thus returning 0. Because the pixel format happens
to always be 32BGRA, this was never caught. [1] then slightly refactored
the code, fixing the bug not realizing it ever existed. This lead to
Syphon no longer working.

Treating 0 as 32BGRA appears to be the only way to fix this situation
for now and restore prior behavior. Ideally in the future Syphon
provides valid IOSurfaces. An upstream fix to Syphon-Framework is
already submitted, however even if merged, servers would need to update
to that fixed version before things work again. Therefore, this
workaround is needed on the OBS side.

However, the plan for now is for the Metal renderer to not get this
relaxation. It never had it (so Syphon never worked there, making this
not a regression) and it's marked as experimental. Hopefully, by the
time it's stable and/or default, Syphon will be fixed and servers have
been updated.

[1]: 53ad05d
"DrawOpaque" only exists in the default_rect effect, in the normal cases
it's just "Draw" in the opaque default shader.
Monitoring deduplication must be applied only to tracks for which the
monitored source and the 'Audio Output Capture' source are both enabled.
This adds such checks.

Signed-off-by: pkv <pkv@obsproject.com>
Pulse audio may append .monitor to device id; this commit adds this case
to the deduplication trigger.

Signed-off-by: pkv <pkv@obsproject.com>
When the 'Audio Output Capture' source (usually Desktop Audio) has its
fader at minimum, we should disable the deduplication logic.
This is done by checking against the obs_source volume member.

Signed-off-by: pkv <pkv@obsproject.com>
Request a code modification due to the change of AfreecaTV name.

Effective October 15 2024, AfreecaTV has been rebranded to SOOP Korea.
This allows retrieval of the default audio output capture device.

Signed-off-by: pkv <pkv@obsproject.com>
This adds comparison to default devices to the monitoring deduplication.
When a user picks a default device, the device_id setting is 'default',
which prevents any comparison.
The comparison is done by leveraging the libobs/audio-monitoring
devices_match function.
For macOS, some special care is taken because the devices list differ
for 'Desktop Audio' and 'monitoring' since coreaudio sdk has no pure
audio capture; so 'default' in the two lists do not match in general.
One then retrieves the device_id for the default desktop audio for macOS
through get_desktop_default_id function.

Signed-off-by: pkv <pkv@obsproject.com>
This adds the devices_match function to null monitor to fix linking
issues on linux when pulse audio is disabled.
Fixes obsproject#12810

Signed-off-by: pkv <pkv@obsproject.com>
Improves app shutdown in a few ways, including separating out different
pieces of the OBSBasic close handler into their own functions.

Removes the crash handler sentinel earlier when the main window is closed,
preventing unclean shutdown warnings when a plugin causes issues. While not
ideal, the dialog is not useful when we cannot specify which plugin caused the
problem.

Increases shutdown priority of the main application so that when OBS interrupts
the session ending, CEF is not closed at the same time. This fixes a crash.

Additional safeguards and event handling to try to ensure a smoother shutdown.
Updates targets to be consistent in their order putting uppercase before lowercase
Warchamp7 and others added 20 commits April 1, 2026 10:45
When an Audio Output Capture source (AOC) like 'Desktop Audio' has
monitoring_type == OBS_MONITORING_TYPE_MONITOR_ONLY, deduplication
should not be triggered. this is an edge case which may not cover a
reasonable use case, but for the sake of completeness, we deal with it.

Signed-off-by: pkv <pkv@obsproject.com>
Fix a build issue with Clang 21.
# Conflicts:
#	libobs-d3d11/d3d11-shader.cpp
sandboxcoder and others added 5 commits July 14, 2026 14:38
* MacOS: fix render issue in obs32 branch

* Fix issue in Obs-32 branch where create_iosurface uses
kIOSurfaceIsGlobal: YES but then immediately called CFRelease causing
IOSurfaceLookup in both write_iosurface and node-window-rendering to
return NULL.
* Fix pre-existing issue while we are in here where we'd have
glClear errors being sent to the logs (we still rendered, but it
polluted the logs and wasn't good practice). Add checks for 0x0 sized
buffer etc.
* Add optional DEBUG_WRITE_IOSURFACE code path which will dump the
IOSurface contents which can be helpful determining if backend is
properly rendering (because if we have pixels, then problem is upstream
in NWR/Desktop).
* Check for invalid width/height
* Guard DirectShow filter activation (#740)

* libobs: append message/get_messages to obs_source_info (#735)

* libobs: bound volmeter plane index against MAX_AV_PLANES (#737)

* libobs: mix scene-item audio when item canvas is unset (#738)

* libobs: Fix use-after-free of canvas view in audio thread (#736)

* Add structured module load failures (#741)

* Fix macOS Xcode 26.4 build (#748)

* Fix macOS Xcode 26.4 build

* Windows build fix for spout2

* Fix NDI 6 runtime loading on macOS (#746)

* obs-browser: re-check validity under graphics lock in OnAcceleratedPaint

Bump plugins/obs-browser to 5b30996 to pull in the OnAcceleratedPaint
teardown-race guard (streamlabs/obs-browser#54), which fixes the libcef
crash on BrowserManagerThread seen in dual-output sessions with browser
sources. Branched from 31.1.2sl19.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* obs-browser: bump for GPU-process crash-limit flag

Bump plugins/obs-browser 5b30996 -> 9d18953 to add --disable-gpu-process-crash-limit
(streamlabs/obs-browser#54), so a transient GPU reset (TDR) no longer escalates to
Chromium's fatal 'GPU process isn't usable' abort. Combines with the OnAcceleratedPaint
teardown guard already in this bump.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* obs-browser: re-point submodule to merged #54 squash commit

Bump plugins/obs-browser 9d18953 -> 4002dac, the squash-merge of
streamlabs/obs-browser#54 on streamlabs (GPU-process crash-limit flag +
OnAcceleratedPaint teardown guard). Replaces the pre-merge PR-branch pointer.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Fix NDI 6 runtime loading on macOS

---------

Co-authored-by: Vladimir Sumarov <summeroff@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* update mediaconnector to streamlabs branch (#750)

* reset texrender->rendered flag when canvas switches (#751)

* reset texrender->rendered flag when canvas switches
* call gs_texrender_reset() when rendering_mode changes

* [MacOS] fix mediasoup-connector compile error on Clang 21

* free module after initialization fails

* fix merge mistake - call module->load() once

* set NULL to avoid heap alloc

* update mediasoup-connector (Clang 21 fix)

* update obs-browser

* set obs-ndi submodule

---------

Co-authored-by: Aleksandr Voitenko <aleksandr.voitenko1986@gmail.com>
Co-authored-by: Vladimir <summeroff@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Recent Homebrew versions require 3rd party taps to be explicitly trusted
before they can be used to install formulas.

The "obsproject/tools" tap is used to provide pinned formulas of some
code formatters used by CI and thus needs to be trusted to enable
installation of these formulas.

(cherry picked from commit b9a5293)
@summeroff
summeroff merged commit 722edc3 into streamlabs Jul 20, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.