Commit Graph
5086 Commits
Author SHA1 Message Date
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
LainandRyan Foster c3046ec172 libobs/graphics: Break image file API to prevent ABI issues 2026-08-21 15:43:20 -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
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
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 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
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
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
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
Richard StanwayandRyan Foster d7a6a8e1b7 win-capture: Resolve inject helper and hook path to absolute paths 2026-07-24 11:40:08 -04:00
Hernán RandRyan Foster ca937366c1 rtmp-services: Update Piczel.tv ingest servers 2026-07-11 14:49:10 -04:00
jcmandRyan Foster 8a5dab518b mac-capture: Don't capture cursor for macOS Audio Capture sources 2026-07-10 15:10:44 -04:00
Matt GajownikandRyan Foster f2db0972ee Update translations from Crowdin 2026-07-09 14:48:07 -04:00
pkvandRyan Foster 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 EtzelandRyan Foster 27ac23ef75 win-capture: Add Hearthstone Deck Tracker to compatibility list 2026-06-29 14:53:19 -04:00
Matt GajownikandRyan Foster b631635a38 win-capture: Build with file descriptor 2026-06-26 15:19:41 -04:00
Matt GajownikandRyan Foster 039d6ebb46 obs-vst: Build with file descriptor 2026-06-26 15:19:41 -04:00
Matt GajownikandRyan Foster aa33016e28 obs-webrtc: Build with file descriptor 2026-06-26 15:19:41 -04:00
Lordmau5andRyan Foster 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
PatTheMavandRyan Foster cb9b4f119a plugins: Apply clang-format 22 formatting 2026-06-17 15:17:09 -04:00
PatTheMavandRyan Foster b1d9dffbc5 plugins: Force C language for clang-format
Only applies to actual ObjC-based plugins.
2026-06-17 15:17:09 -04:00
PatTheMavandRyan Foster d838e11983 plugins: Force C language for clang-format
Only applies to actual C-based plugins.
2026-06-17 15:17:09 -04:00
Warchamp7andRyan Foster 30b63c6849 Update C++ files with braces 2026-06-09 13:41:19 -04:00
NerixyzandRyan Foster b8f7a1e3b8 cmake: Enable Swift language on macOS 2026-06-08 17:52:56 -04:00
PatTheMavandRyan Foster 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 StanwayandRyan Foster 9541600b3d nv-filters: Improve handling of SDK DLL loading 2026-06-05 15:27:30 -04:00
Richard StanwayandRyan Foster e29a640ddd obs-ffmpeg, win-capture: Use better default DLL directory settings 2026-06-05 15:27:30 -04:00
Richard StanwayandRyan Foster 76ea10e281 coreaudio-encoder: Avoid using SetDllDirectory, specify full path 2026-06-05 15:27:30 -04:00
Alex LuccisanoandRyan Foster 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 LuccisanoandRyan Foster 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 LuccisanoandRyan Foster 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 HahnandRyan Foster 4c97c62ccf obs-outputs: Implement multitrack dynamic bitrate 2026-06-05 14:11:55 -04:00
John BowersandRyan Foster 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
jpark37andRyan Foster 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
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
tfoandRyan Foster 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 EandRyan Foster 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
tfoandRyan Foster 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
ExeldroandRyan Foster b1a15af06e image-source: Set minimal size for color source to 1 pixel 2026-05-07 15:03:11 -04:00
jcmandRyan Foster cc0fd86c05 mac-avcapture: Avoid possible bad access on device connect events 2026-05-07 13:24:18 -04:00
ExeldroandRyan Foster b093030106 frontend, obs-filters: Add missing file support for filters 2026-05-07 12:58:16 -04:00
stephematicianandRyan Foster 403f075a47 linux-v4l2: Fix vcam reset failure
Reverts much of PR #11906 in favor of a different way to detect whether
or not the output capabilities must be reset.

The new approach will contain false positives for which the workaround
is not needed but it won't have negative side effects.
2026-05-07 12:27:46 -04:00
PatTheMavandRyan Foster 2954532019 mac-avcapture: Use fallback frame rate by default for new devices
When a new device is selected, a best-possible frame rate is chosen
for the initial configuration of the device. This has to be set in the
source settings, as those are the "source of truth" for the properties
and the device configuration.

The object has to be created explicitly first before setting the
frame rate value. The source then has to be updated explicitly as well
to ensure that the change will be picked up by the next iteration
of the render thread to "tick" the source and thus make it configure
a capture session with the fallback framerate set.
2026-05-06 15:40:55 -04:00