5089 Commits

Author SHA1 Message Date
Pablo 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
Warchamp7 646836a311 libobs, frontend: Deprecate source monitoring_type 2026-08-24 14:55:40 -04:00
Alex Luccisano 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
Kira-NT 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
Lain c3046ec172 libobs/graphics: Break image file API to prevent ABI issues 2026-08-21 15:43:20 -04:00
tytan652 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
derrod 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
derrod 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
jcm 6c6adac9c9 mac-capture: Use 64RGBAHalf pixel format for screen capture when available 2026-08-21 13:58:36 -04:00
tytan652 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
Penwywern 19a1eff8d3 win-capture: Reorder capture method dropdown 2026-08-20 21:41:32 -04:00
Penwywern e6f6487d7b win-capture: Change capture methods name 2026-08-20 21:41:32 -04:00
Warchamp7 f5b6d8da12 frontend: Update forms to fully qualified enums 2026-08-10 17:48:54 -04:00
Warchamp7 4abbcf0b6d frontend: Update invokeMethod to use functions 2026-08-10 16:27:32 -04:00
Richard Stanway 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
jcm 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
Richard Stanway 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
Richard Stanway d7a6a8e1b7 win-capture: Resolve inject helper and hook path to absolute paths 2026-07-24 11:40:08 -04:00
Hernán R ca937366c1 rtmp-services: Update Piczel.tv ingest servers 2026-07-11 14:49:10 -04:00
jcm 8a5dab518b mac-capture: Don't capture cursor for macOS Audio Capture sources 2026-07-10 15:10:44 -04:00
Matt Gajownik f2db0972ee Update translations from Crowdin 2026-07-09 14:48:07 -04:00
pkv a00854666f nv-filters: Remove direct calls to CUDA in Audio FX
The CUDA calls in AUDIO FX were added initially to big a bug on the SDK
side where the SDK functions where not checking the CUDA context.
This led to interference with the VIDEO FX, potentially breaking it.
These bugs have been fixed by the SDK so we don't need anymore these
CUDA calls.

Signed-off-by: pkv <pkv@obsproject.com>
2026-07-01 17:37:45 -04:00
Benedict Etzel 27ac23ef75 win-capture: Add Hearthstone Deck Tracker to compatibility list 2026-06-29 14:53:19 -04:00
Matt Gajownik b631635a38 win-capture: Build with file descriptor 2026-06-26 15:19:41 -04:00
Matt Gajownik 039d6ebb46 obs-vst: Build with file descriptor 2026-06-26 15:19:41 -04:00
Matt Gajownik aa33016e28 obs-webrtc: Build with file descriptor 2026-06-26 15:19:41 -04:00
Lordmau5 2b88e617a2 obs-nvenc: Only update Target Quality in CQVBR mode
Previously it was setting the `averageBitRate` value to what is being set in Variable Bitrate rate control mode. However, CQVBR is initialized with a value of `0` and instead Target Quality is being used. This adds a check for the CQVBR mode and if it's set will update the `targetQuality` value, otherwise it will update `averageBitRate`.

Additionally reset `averageBitRate` to 0 if CQVBR is active, and reset `targetQuality` to 0 if it's not in any VBR mode
2026-06-19 14:06:39 -04:00
Ryan Foster 74c106512d obs-websocket: Update to 5.7.4
Changes:
 - forms: Replace implicit lamda captures for C++20
 - websocketserver: Replace implicit lamda captures for C++20
 - Update translations from Crowdin
2026-06-18 16:49:11 -04:00
Ryan Foster db84905fb1 obs-browser: Update to 2.26.9
obsproject/obs-browser@19b1c96 Replace implicit lamda captures for C++20
obsproject/obs-browser@f76de5f Do not try to create the browser before init
obsproject/obs-browser@68af8e8 Build with Windows file descriptors
obsproject/obs-browser@951cf81 Update translations from Crowdin
obsproject/obs-browser@bdac160 Limit browser dock workaround to impacted Qt versions
obsproject/obs-browser@3f0a2cd Update version to 2.26.9
2026-06-18 16:49:11 -04:00
PatTheMav cb9b4f119a plugins: Apply clang-format 22 formatting 2026-06-17 15:17:09 -04:00
PatTheMav b1d9dffbc5 plugins: Force C language for clang-format
Only applies to actual ObjC-based plugins.
2026-06-17 15:17:09 -04:00
PatTheMav d838e11983 plugins: Force C language for clang-format
Only applies to actual C-based plugins.
2026-06-17 15:17:09 -04:00
Warchamp7 30b63c6849 Update C++ files with braces 2026-06-09 13:41:19 -04:00
Nerixyz b8f7a1e3b8 cmake: Enable Swift language on macOS 2026-06-08 17:52:56 -04:00
PatTheMav 1829492e6b cmake: Move frontend plugins into main plugins dir
Frontend plugins should not require being placed in the frontend
directory to be built successfully. Indeed they should only depend
on libobs and the obs-frontend-api and thus their source tree should
be able to exist anywhere (even standalone) and the plugin should still
compile successfully (just like any 3rd party plugin).

Thus moving those plugins into the main plugin directory ensures that
they don't require on any "special sauce" within the source tree to
compile.
2026-06-05 16:00:18 -04:00
Richard Stanway 9541600b3d nv-filters: Improve handling of SDK DLL loading 2026-06-05 15:27:30 -04:00
Richard Stanway e29a640ddd obs-ffmpeg, win-capture: Use better default DLL directory settings 2026-06-05 15:27:30 -04:00
Richard Stanway 76ea10e281 coreaudio-encoder: Avoid using SetDllDirectory, specify full path 2026-06-05 15:27:30 -04:00
Alex Luccisano 83ed914ecf obs-outputs: Use multitrack DBR capability flag
Use the new `OBS_ENCODER_CAP_MULTITRACK_DYN_BITRATE` flag when
streaming with multiple tracks, instead of relying on the single-
track `OBS_ENCODER_CAP_DYN_BITRATE` flag. In multitrack cases where
multiple codecs are being used (e.g. mixed AVC and HEVC), all encoders
must support the multitrack capability flag otherwise the dynamic
bitrate (DBR) feature is disabled for the streaming session.
2026-06-05 14:11:55 -04:00
Alex Luccisano 0943ea2cf6 plugins: Apply multitrack dynamic bitrate flag
Enable the `OBS_ENCODER_CAP_MULTITRACK_DYN_BITRATE` capability on
the encoders that support it.
2026-06-05 14:11:55 -04:00
Alex Luccisano b1be50013f obs-ffmpeg: Rework AMF dynamic bitrate change behavior
The `amf_xxx_update()` functions for AVC, HEVC, and AV1 are
unconditionally invoking Flush() and ReInit() even though this is not
required in all situations. Changing the bitrate at least in CBR mode
does not require the flush operation and can result in unaligned IDR
frames across members of an encoder group. Do not flush the pipeline
for CBR bitrate changes; instead, force an IDR to occur with the
bitrate change.
2026-06-05 14:11:55 -04:00
Ruwen Hahn 4c97c62ccf obs-outputs: Implement multitrack dynamic bitrate 2026-06-05 14:11:55 -04:00
John Bowers 4d6d9a5166 frontend: Slight change to multi-track text
Change text to indicate that enhanced broadcasting/MT does not have
to configure multiple encodes, although it often/usually does.
2026-05-27 12:45:53 -04:00
jpark37 290904c47d obs-filters: Add filter to compose SDR into HDR
Provide ability to use power of 2.4 to simulate BT.1886 for Rec. 709.
2026-05-26 15:16:00 -04:00
andrewsoncha d412d64ef9 plugins: Fix build issues in Xcode 26.4
Replaced implicit type conversion within macOS plugins (mac-capture,
mac-syphon, mac-videotoolbox, mac-virtualcam) with explicit type
conversions to clear compile errors with Apple Clang 21.0 and Xcode
26.4.

Co-authored-by: PatTheMav <patthemav+github@gmail.com>
Co-authored-by: jcm <6864788+jcm93@users.noreply.github.com>
2026-05-26 13:39:02 -04:00
tfo 17fc299b74 win-dshow: Fix CreateFileW return value check in virtualcam filter
CreateFileW returns INVALID_HANDLE_VALUE on failure, not NULL.
The previous check would always evaluate to true on failure,
causing ReadFile and CloseHandle to be called on an invalid
handle.
2026-05-22 16:36:52 -04:00
Tarun E fdca38a63e image-source: Include .webp files in directory source
Previously, the Image Slide Show source skipped *.webp files when
adding images via 'Add Directory'. This update ensures that .webp
files are now correctly included.
2026-05-22 16:07:02 -04:00
tfo bd96ff53dd obs-nvenc: Fix resource destruction order
The NVENC session was destroyed before its child resources
(textures, surfaces) were cleaned up, causing resource cleanup
calls to operate on an invalid session handle.

Reorder destruction to free all registered resources before
destroying the encoder session.
2026-05-21 14:29:54 -04:00
Exeldro b1a15af06e image-source: Set minimal size for color source to 1 pixel 2026-05-07 15:03:11 -04:00
jcm cc0fd86c05 mac-avcapture: Avoid possible bad access on device connect events 2026-05-07 13:24:18 -04:00