15697 Commits
Author SHA1 Message Date
Ryan Foster 4118c16004 CI: Update deps to 2026-08-26 release
Notable Changes:
 * deps.macos: Fix deletion of MbedTLS CMake files
 * deps.ffmpeg: Fix deletion of MbedTLS static libs
 * deps.ffmpeg: Enable Windows on Arm for nv-codec-headers
2026-08-26 14:05:17 -04:00
PabloandRyan Foster bcd53e2914 win-capture: Add Construct 3 window class to WGC match
Construct 3 games register a top-level window class named
"WindowsWebview2Wrapper" which does not contain "Chrome" or "Mozilla",
causing OBS automatic mode to use BitBlt instead of WGC, which results
in a black screen for Construct 3 games.

Add "WindowsWebview2Wrapper" to wgc_whole_match_classes and add
compatibility entries for window capture BitBlt and game capture
warnings.

Closes #13359
2026-08-24 16:16:27 -04:00
Warchamp7andRyan Foster dc1e75b9cb frontend: Improve spin box UX 2026-08-24 15:46:37 -04:00
Warchamp7andRyan Foster 22e2b73716 libobs, frontend: Add monitoring hotkeys 2026-08-24 14:55:40 -04:00
Warchamp7andRyan Foster c976dfc0a9 docs: Mark monitoring_type as deprecated 2026-08-24 14:55:40 -04:00
Warchamp7andRyan Foster 646836a311 libobs, frontend: Deprecate source monitoring_type 2026-08-24 14:55:40 -04:00
Alex LuccisanoandRyan Foster 0969e43a83 obs-ffmpeg: Fix B-frame offset calculation in AMF
AVC and AV1 encoders in AMF that support B-frames were incrementing
`dts_offset` even when B-frames were set to 0. For AVC, adjust the
`dts_offset` only when B-frames are supported and are greater than 0,
and clamp to maximum supported.

For AV1, remove the dts_offset code completely because it is being
ignored anyway. AV1 handles B-frames and offsets differently; refer
to [1] for details.

[1]: https://github.com/obsproject/obs-studio/pull/10996
2026-08-24 14:22:25 -04:00
Richard StanwayandRyan Foster 6d0083dd61 libobs, docs: Document intended use of obs_module_unload
obs_module_unload was never properly documented, so some plugins use it
to free resources, some use it to save data, etc. While libobs tries to
ensure all objects are shut down and destroyed before calling unload, if
another plugin is holding a strong reference, or if a reference leak has
occurred, libobs may need to call back into a plugin-provided object's
destroy function even after obs_module_unload has returned. If the
plugin has freed memory or other resources needed for the callback then
this likely results in a crash.

Going forward, we should document that obs_module_unload is now intended
only for saving data and releasing references, and that calling libobs
after it returns is not allowed. For cases where resource cleanup is
actually needed (for example, an external out of process helper needs to
be shut down or a release call to a hardware driver), a new
obs_module_destroy callback is intended to be added in a future version.
2026-08-22 16:03:18 -04:00
Kira-NTandRyan Foster 7e22ed2d48 win-capture: Improve fullscreen window detection
It's not that uncommon for apps on Windows to use a hacky method of
extending their windows 1-2px past the supported monitor resolution
to preserve "true" windowed fullscreen and circumvent some exclusive
fullscreen-related issues presented by their graphics library,
Windows itself, or both.

Therefore, the fullscreen detection technique has been relaxed
to properly identify windows slightly larger than the monitor's
viewport as fullscreen.

Windows also does something similar, evident by the fact that
the taskbar disappears, as it always does for fullscreen windows,
even when a window stretches slightly beyond the defined viewport.
2026-08-22 16:02:45 -04:00
f86e9c1d59 Merge pull request #11178 from RytoEX/really-update-libnsgif
libobs/graphics: Update libnsgif to 1.0.0
libobs/graphics: Hide GIF decoding data from exported header file
libobs/graphics: Break image file API to prevent ABI issues

Co-authored-by: Norihiro Kamae <norihiro@nagater.net>
Co-authored-by: Lain <lain@obsproject.com>
2026-08-21 16:09:31 -04:00
LainandRyan Foster c3046ec172 libobs/graphics: Break image file API to prevent ABI issues 2026-08-21 15:43:20 -04:00
Norihiro KamaeandRyan Foster f5f55777bb libobs/graphics: Hide GIF decoding data from exported header file 2026-08-21 15:43:20 -04:00
Ryan Foster e0027ee4a3 libobs/graphics: Update libnsgif to 1.0.0 2026-08-21 15:43:19 -04:00
tytan652andRyan Foster 71ef44f06e cmake: Require MbedTLS 3 and exclude 4 or later
Until the codebase is updated to support it, CMake will explicitly search
for version 3 that is supported by the codebase.
2026-08-21 15:00:09 -04:00
derrodandRyan Foster f89ad4bee5 obs-outputs: Fix file splitting overshooting when b-frames are used
I discovered while testing that the first split would always be one GOP
too long (e.g. 1m2s instead of 1m) due to the fact that b-frames and
negative start DTSes were not accounted for.

This is now fixed by setting the start_time to the nonzero negative DTS
produced for the first packet. Additionally, a small tolerance of 1 ms
was also added to account for rounding issues present in the first GOP.
2026-08-21 14:33:06 -04:00
derrodandRyan Foster 575c77f19d obs-outputs: Do not drop last packet when flushing Hybrid file
Originally, before file splitting was introduced, I made the choice to
simply ignore the last frame in the packet queue of the muxer, because
frame N+1 is required to properly determine the duration and I figured
nobody would notice if their recording is one frame short.

However, when using frame splitting this would result in the last frame
before the split being dropped. To fix this, we can simply reuse the
previous sample's duration for the final sample in a file. Since OBS
only does CFR, they should all be identical anyway.
2026-08-21 14:33:06 -04:00
jcmandRyan Foster 6c6adac9c9 mac-capture: Use 64RGBAHalf pixel format for screen capture when available 2026-08-21 13:58:36 -04:00
jcmandRyan Foster f1f95b218b libobs-opengl: Support texture creation from IOSurface using RGBA64Half 2026-08-21 13:58:36 -04:00
Nick von KaenelandRyan Foster f40cf8dd72 frontend: Scale simple output recording audio bitrate by channel count
The recording audio bitrate was hardcoded to 192 kbps regardless of
channel layout. For a 5.1 mix this yields ~32 kbps per channel which is
very low quality. Scale proportionally from the stereo reference (192
kbps) using the active channel count, snapping to the closest bitrate
supported by the selected encoder (AAC or Opus).

Stereo recordings are unchanged (192 * 2 / 2 = 192 kbps).
2026-08-21 13:14:46 -04:00
Warchamp7andRyan Foster dfad5c86f6 frontend: Ensure pending profile changes are saved 2026-08-21 12:43:30 -04:00
tytan652andRyan Foster c568ee4969 linux-pipewire: Forbid screencast source duplication
Each instance holds a unique session with a unique restore token.
Which both can not be duplicated.
2026-08-20 23:13:55 -04:00
Richard StanwayandRyan Foster e86c7e501e frontend: Abort if obs-transitions failed to load
The frontend UI assumes transitions are always available and crashes if
none are present. Resolving the crashes resulted in a completely broken
UI, so it's safe to assume that transitions are a core requirement for a
working OBS.

Crash reports indicate that obs-transitions is failing to load for some
users, so we should handle the case where no transitions load and abort
with an error instead of crashing.
2026-08-20 22:41:07 -04:00
Warchamp7andRyan Foster 080b8afcf7 frontend: Add info notices to theme files 2026-08-20 22:15:11 -04:00
PenwywernandRyan Foster 19a1eff8d3 win-capture: Reorder capture method dropdown 2026-08-20 21:41:32 -04:00
PenwywernandRyan Foster e6f6487d7b win-capture: Change capture methods name 2026-08-20 21:41:32 -04:00
Warchamp7andRyan Foster 0043697fc5 frontend: Remove native widget property 2026-08-20 19:22:01 -04:00
WarmUpTillandRyan Foster a07884d752 obs-frontend-api: Fix repeated preview en-/disables not working 2026-08-20 18:54:10 -04:00
PenwywernandRyan Foster f6933c9639 frontend: Don't read unloaded module in source toolbar 2026-08-20 18:25:04 -04:00
PenwywernandRyan Foster 5cecae04f2 frontend: Ensure source type exists before creating toolbar 2026-08-20 18:25:04 -04:00
PenwywernandRyan Foster 4cc9c4466c libobs: Ensure module exists before getting locale string 2026-08-20 18:25:04 -04:00
FiniteSingularityandRyan Foster b790a32b2e libobs: Fix file filter for save file path widget 2026-08-20 17:55:08 -04:00
derrodandRyan Foster 6d22a9a7f0 docs: Add deprecation notice for source hiding 2026-08-20 17:26:22 -04:00
derrodandRyan Foster cc6c7629fd libobs: Deprecate source hiding 2026-08-20 17:26:22 -04:00
derrodandRyan Foster 782a15aaf9 frontend: Remove superfluous hidden check 2026-08-20 17:26:22 -04:00
Warchamp7andRyan Foster 3bf06991a5 frontend: Fix SourceButton rename handler 2026-08-20 16:56:10 -04:00
derrodandRyan Foster 8c86ed05d4 frontend: Add Encoder availability check 2026-08-20 16:16:59 -04:00
Ryan Foster 1bf1379faa libobs: Update version to 32.2.2 2026-08-14 16:57:12 -04:00
Warchamp7andRyan Foster 14e3dae77f frontend: Fix spacer in permissions dialog 2026-08-10 17:48:54 -04:00
Warchamp7andRyan Foster f5b6d8da12 frontend: Update forms to fully qualified enums 2026-08-10 17:48:54 -04:00
Warchamp7andRyan Foster 4abbcf0b6d frontend: Update invokeMethod to use functions 2026-08-10 16:27:32 -04:00
Ryan Foster 220a16378f CI: Remove support for Ubuntu 24.04 2026-08-07 14:12:38 -04:00
Richard StanwayandRyan Foster 88de106cff frontend, plugins: Remove PreferSystem32Images mitigation
This process mitigation flag is inherited by child processes and applies
to load-time DLL resolution, pushing the application's own directory
below the system directories. If there are system-installed copies of
dependent DLLs such as FFmpeg, those get loaded when OBS is updated as
the updater and subsequent relaunch of OBS inherit the mitigation.

As we use SetDefaultDllDirectories, this mitigation is less important,
the proper fix would be to use /DEPENDENTLOADFLAG to protect load-time
import resolution.
2026-08-04 17:19:45 -04:00
Ryan Foster d3972603e5 CI: Update minimum macOS version to 26 for building
Match requirements set in CMake.
2026-08-04 17:01:23 -04:00
Ryan Foster 55c3c07d52 CI: Update macOS deployment target to macOS 13
Qt 6.11 only supports macOS 13+. It does not support macOS 12, and OBS
Studio will fail to launch on macOS 12 as a result. We should reflect
that with our deployment target.

https://doc.qt.io/qt-6.11/supported-platforms.html
2026-08-04 15:59:21 -04:00
jcmandRyan Foster b6f854c73b mac-virtualcam: Suppress deprecation warnings in DAL module
This line, along with the entire DAL plugin itself, should be removed
when the macOS deployment target is raised to 14 or above.
2026-08-04 15:59:21 -04:00
Ryan Foster 651bd1e9bf CI: Update brew unconditionally
Should resolve some issues we've seen on CI lately.
2026-08-04 15:21:40 -04:00
Ryan Foster 0052d024fd libobs: Update version to 32.2.1 32.2.1 2026-07-24 17:49:25 -04:00
Richard StanwayandRyan Foster e2e0bfc8fc win-capture: Log hook DLL install / update errors
We suspect users hit errors updating the system-wide hook files even if
the file is not in use, but without logging we have no way to know for
sure. This commit adds additional logs. Not logging source paths
anywhere is intentional to avoid wide char to utf-8 issues making this
more complicated than it needs to be - the source will always be the OBS
install dir regardless.
2026-07-24 17:31:49 -04:00
Ryan Foster 74579d8452 CI: Increase number of update deltas generated for macOS to 5
The previous increase from 1 to 3 deltas has an acceptable time cost on
CI. Further increase it from 3 to 5.

This should somewhat improve the update experience on macOS for users
not on the most recent previous version of OBS Studio.
2026-07-24 12:12:44 -04:00
Richard StanwayandRyan Foster d7a6a8e1b7 win-capture: Resolve inject helper and hook path to absolute paths 2026-07-24 11:40:08 -04:00