15431 Commits
Author SHA1 Message Date
Hoshino LinaandRyan Foster 5533a277e4 linux-v4l2: Fix spurious fd closing
Make sure to use the invalid fd -1 when the output is not opened, and
only close valid fds. If fd 0 is closed, then this closes stdin. The
second time this happens, some other important fd will have become fd 0,
breaking something.

This causes random things to break (browser/CEF in reports, but really
it could be anything) as the wrong fds get closed.
32.1.0
2026-03-08 12:12:44 -04:00
Hoshino LinaandRyan Foster 49708181b5 libobs/util: Fix fd management in os_process_pipe_create
The sequence should be the same for every fd:

- Close the parent end of the pipe
- If the child end of the pipe is not the intended fd already,
  - Dup it over
  - And close the old fd

This fixes a double-close() in the read path (which is fairly harmless
since it happens in the child, but sticks out in strace), some fd
leakage, and the stderr-already-is-2 case.
2026-03-08 12:12:44 -04:00
tytan652andRyan Foster 60533db7c7 CI: Add local exceptions to flatpak-builder-lint
For some reason the action can no longer check if the URL generated in
the metainfo is reachable.
So to avoid keeping CI failing, local exceptions rule are
added.

Unfortunately it requires to keep a copy of exceptions already submitted
to Flathub.
2026-03-08 11:48:16 -04:00
Barnabás PőczeandRyan Foster 5d04d51011 linux-pipewire: Fix uninitialized camera resolution access
The use of `SPA_POD_OPT_Rectangle()` means that if the rectangle cannot be
parsed, then no error will be returned. In that case uninitialized variables
will be used. This can happen if the pod object contains e.g. a list of
resolutions (`SPA_CHOICE_Enum`).

Fix that by using `SPA_POD_Rectangle()`, which enforces successful parsing.
2026-03-08 00:09:24 -05:00
Ryan FosterandGitHub b7bc979a65 Merge pull request #13196 from derrod/new-cert-again
CI: Update Code Signing Cert (again)
32.1.0-rc4
2026-03-05 16:30:36 -05:00
derrod 944d92a733 CI: Update Signing action commit 2026-03-05 21:24:40 +01:00
derrod 1933c9e320 CI: Update ECC cert with fixed one 2026-03-05 21:24:07 +01:00
Warchamp7andRyan Foster fb5140d0a3 frontend: Only send event when scene list changed 32.1.0-rc3 2026-03-04 15:48:03 -05:00
Ryan Foster 68984b4a9d obs-websocket: Update version to 5.7.2
Fixed an issue where some sources (inputs) could not be updated.
2026-03-03 22:45:56 -05:00
Ryan FosterandGitHub db6a64ebcd Merge pull request #13172 from derrod/new-cert
CI: Update code signing certificates
2026-03-03 16:45:01 -05:00
derrod 7a2430ac3c CI: Update commit for windows signing workflow 2026-03-01 01:46:23 +01:00
derrod 9df63c8084 CI: Update code signing certificates 2026-03-01 01:44:58 +01:00
Warchamp7andRyan Foster 36d1dd8fdb obs-websocket: Update version to 5.7.1
New Features:
- Added Canvas support [exeldro]
- `GetCanvasList` request
- `CanvasCreated` event
- `CanvasRemoved` event
- `CanvasNameChanged` event

Bug Fixes:
- Fixed a possible crash on OBS shutdown [exeldro]

Changes:
- Updated translations [WizardCM]
- Various fixes and improvements to Canvas support [tt2468/Warchamp7]
32.1.0-rc2
2026-02-27 16:28:14 -05:00
Warchamp7andRyan Foster bffd5f5980 frontend: Improve plugin manager safe mode behavior 2026-02-25 19:44:39 -05:00
Warchamp7andGitHub d94abdba1c Update Code of Conduct instructions (#13164) 2026-02-25 13:42:15 -06:00
Shane LudwigandWarchamp7 af98058846 Update README.rst to include directly a link to the Code of Conduct
There is a Code of Conduct page linked within the CONTRIBUTING.rst, however I think it would be more clear to have a link on the README directly pointing to the Code of Conduct all contributors should follow.
2026-02-25 14:28:21 -05:00
Ryan Foster 423d3dfc9c frontend: Update parent logic for systray menu projector items
Adding some more cleanup with Qt Widget/Object parenting and manual
deletes.
2026-02-24 18:55:26 -05:00
Lordmau5andRyan Foster 336261c868 frontend: Update parent logic, remove explicit delete calls
Not necessary anymore in Windows tests at least since the parent widget
(in this case OBSBasic) is taking care of cleaning up its children.
2026-02-24 18:55:26 -05:00
Lordmau5andRyan Foster c1f8cbb9d5 frontend: Fix unclean shutdown on Windows
This issue was brought back by a somewhat recent change to fix slow
shutdown times in Linux.

To paraphrase tfo from the OBS Discord:
"I think the issue is that all the tray actions are parented to
trayIcon, so when it's deleted, Qt auto deletes them as children, then
delete trayMenu on the next line accesses those dead actions."

We now create the tray menu first, then setting the parent of the
actions (show / hide, stop / start streaming, etc.) to the tray menu.
2026-02-24 18:55:26 -05:00
Warchamp7andRyan Foster acd4c97873 frontend: Fix duplicated layout name 2026-02-20 16:35:30 -05:00
Warchamp7andRyan Foster decee5780d frontend: Set mixer toolbar size policy 2026-02-20 16:13:06 -05:00
Ryan Foster f9e88c1696 cmake: Make release builds more reproducible
Use an undocumented MSVC linker flag to not emit tool version info for
Release and MinSizeRel builds.
2026-02-20 15:50:14 -05:00
Ryan Foster 3786fa3d3e updater: Update CMake to make builds more reproducible
Strip the PDB. Provide an alternate path for the PDB.

We already use /PDBALTPATH for set_target_properties_obs, but this
target understandably does not use that.
2026-02-20 15:50:14 -05:00
Richard StanwayandRyan Foster 1106c1acaf updater: Add log window and additional log messages 2026-02-20 15:16:35 -05:00
Richard StanwayandRyan Foster 6340d7a845 updater: Check return values in ClearShaderCache
Invoking filesystem::remove_all on potentially truncated paths seems
like a bad idea.
2026-02-18 15:26:28 -05:00
psyiriusandRyan Foster 9185489586 docs: Fix typo in obs_enum_canvases description 2026-02-17 14:33:14 -05:00
Ryan Foster 9f1423f20e obs-browser: Update version to 2.26.8
obsproject/obs-browser@cda4f1f - Revert custom scheme handler protocol
obsproject/obs-browser@ea04212 - Update version to 2.26.8
2026-02-13 15:19:39 -05:00
Warchamp7andRyan Foster 8bd4511843 frontend: Ignore sources with disabled audio in mixer 2026-02-13 14:26:50 -05:00
Ryan Foster 9a4666e284 obs-filters: Remove unnecessary nvafx-load.h header
This was left behind from 50b0943cec.
2026-02-12 18:13:00 -05:00
Warchamp7andRyan Foster 9fc4a50746 frontend: Defer mixer rename dialog 2026-02-12 17:39:24 -05:00
Warchamp7andRyan Foster 0755f475a6 frontend: Skip background paint for invalid sizes 2026-02-12 17:07:21 -05:00
PenwywernandRyan Foster a4f3c16065 libobs: Properly handle NULL data in json 2026-02-11 19:27:22 -05:00
Warchamp7andRyan Foster 82b1112389 frontend: Fix VolumeControl rendering 2026-02-11 15:46:19 -05:00
Richard StanwayandRyan Foster 8752a20830 updater: Fix incorrect format specifier 2026-02-10 17:46:18 -05:00
Richard StanwayandRyan Foster 1866f8c1e6 updater: Don't force file flushes when writing new files
Using FILE_FLAG_WRITE_THROUGH causes a flush to disk on each file which
is bad for performance.
2026-02-10 17:46:18 -05:00
Richard StanwayandRyan Foster 95bfb81f69 updater: Improve exception handling
Logs exceptions and changes QuickWriteFile to throw a catchable
exception instead of a DWORD.
2026-02-10 17:46:18 -05:00
Richard StanwayandRyan Foster e715df130b updater: Fix various race conditions and error handling
The main race was possible concurrent access to unordered_map which
could corrupt internal state. Our global variables were also not
atomically updated. DownloadWorkerThread also returned true on error,
which could cause the updater to proceed without all updates being
downloaded which would then fail at the install stage.
2026-02-10 17:46:18 -05:00
Tristan MatthewsandRyan Foster c75d7f4095 rtmp-services: Remove defunct STAGE TEN 2026-02-10 14:08:01 -05:00
Warchamp7andRyan Foster b4ff360139 frontend: Round all output theme values 2026-02-09 16:30:58 -05:00
shiina424andRyan Foster 49c9c868ec frontend: Update unassigned audio track warning text 32.1.0-rc1 2026-02-05 18:09:31 -05:00
Warchamp7andRyan Foster c1a134ea15 frontend: Adjust log upload text for current logs 2026-02-05 17:30:31 -05:00
trilkkandRyan Foster b8b6cf4844 file-updater: Use exact types to avoid clang-19 errors 2026-02-05 16:54:16 -05:00
trilkkandRyan Foster 57c37e4adc plugins: Use exact types to avoid clang-19 errors 2026-02-05 16:54:16 -05:00
trilkkandRyan Foster 9776a227ef frontend: Add needed FreeBSD sys/ headers for libprocstat.h to compile 2026-02-05 16:54:16 -05:00
Warchamp7andRyan Foster 0df94d5cae image-source: Fix interrupted transitions 2026-02-04 18:53:59 -05:00
Warchamp7andRyan Foster 923118befc frontend: Clean up mixer hidden state 2026-02-04 18:29:20 -05:00
Ryan Foster 7a75dbe7dc obs-browser: Update version to 2.26.7
obsproject/obs-browser@f93477b - Fix local filepath on POSIX
obsproject/obs-browser@b59127a - Update version to 2.26.7
2026-02-04 17:33:12 -05:00
PatTheMavandRyan Foster 921dc93927 frontend: Fix macOS crash in application shutdown
With recent changes to the application shutdown logic, events had to
follow a very strict order as certain elements of shutdown code
depend on other elements not being deallocated prematurely.

This turned the (correct) order of events on macOS upside down and
lead to crashes either when the app was quit from within or when
terminated by the OS.

The fix incorporates multiple elements:

* Removal of the custom "Quit" menu item on macOS to use the default
  implementation of Qt's platform plugin.
* Soft-revert (via preprocessor conditionals) parts of the updated
  shutdown logic to prevent emitting recursive shutdown events.
* Handle main window close event by simply emitting a "quit" event
  on the application instance.
* Update POSIX signal handlers to also simply emit a "quit" event.

In combination these changes reduce the number of different code paths
taken during shutdown:

* Closing the app via the menu item, menu item shortcut, or initiated
  by AppKit (OS shutdown/reboot, or quit via Dock/Finder) will emit an
  AppKit "terminate" event for orderly shutdown.
* Closing the main window or sending an appropriate POSIX signal
  triggers the "terminate" event indirectly by emitting the "quit"
  event on the application instance.

Either way a "close" event to the main window happens before the
event loop is terminated and the application instance is torn down
(either directly, or indirectly via Qt's "closeAllWindows" function in
response to "terminate"). The order of events thus is always:

0. Terminate event by AppKit (except when closing the main window)
1. Closing of main window
2. Termination of browser docks
3. Deallocation of main window
4. Termination of application
5. Deallocation of application

NOTE: All this only applies to macOS. The shutdown order and procedures
on Windows and Linux are unchanged.
2026-02-04 17:04:31 -05:00
PatTheMavandRyan Foster 21f6f08679 frontend: Fix Youtube app dock destruction
When the main window is closed and with it the application state is torn
down, browser panels need to be explicitly removed before the the CEF
instance used by the application is shut down itself.

For service-based docks this happens as part of the "reset" of the
"auth" pointer (and thus its destructor), for user-created browser
panels this is achieved by the call to "ClearExtraBrowserDocks".

Because the Youtube app dock is a special browser panel that is created
conditionally, but potentially exists globally, it also has to be
closed this way (if it was created).

Otherwise CEF will force-close the underlying browser host instance as
part of its own shutdown and also deallocate the native window used
by the browser. When the QCefWidget then attempts to detach the
native window from the view hierarchy (to avoid this operation from
potentially closing the root window it is anchored to), it will either
attempt to access a CrFatZombie object (and crash) or access deallocated
memory (and also crash).
2026-02-04 17:04:31 -05:00
tfoandRyan Foster cef6d12c3a shared/media-playback: Fix corrupt MaxCLL when reading HDR metadata
The content light level metadata was being read incorrectly by taking
the address of the data pointer instead of casting the pointer itself.
This resulted in interpreting the pointer address as the MaxCLL value,
leading to extremely large values.
2026-02-04 14:50:35 -05:00