51 Commits
Author SHA1 Message Date
Warchamp7 34a0a6a530 frontend: Remove crash handler earlier in shutdown 2025-12-04 15:05:23 -05:00
Warchamp7 14572498dc frontend: Adjust application shutdown logic
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.
2025-12-01 16:40:34 -05:00
PatTheMav e35b16cba9 frontend: Enable multitrack RTMP option for custom RTMP services
This removes the need to provide an undocumented launch argument to
enable custom RTMP service configurations to use multitrack encoding
and also provide a custom configuration.
2025-09-26 01:48:39 -04:00
Penwywern e216a0eab0 frontend: Don't attempt multitrack without config url 2025-09-15 16:47:44 -04:00
PatTheMav e8d4224992 frontend: Change crash sentinel location to separate subdirectory
Putting the crash sentinel in the main "obs-studio" directory carries
the risk of unwanted deletion of files in the same directory, which
usually contains user configuration files like "user.ini" and
"global.ini".

Even though the code will ignore any file that does not start with the
crash sentinel prefix string, the code itself would allow changing the
prefix to "global.ini" and thus inadvertently delete the global
configuration file as well.

To further reduce the risk, this change will put the sentinels in a
separate sub-directory that should only ever contain sentinel files,
all of which can possibly deleted without any data loss for the user.
2025-09-03 13:01:44 -04:00
tytan652andPatTheMav 747f67e150 frontend: Do not enable crash log upload without log file
Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2025-09-02 15:28:33 -04:00
Sebastian Beckmann 7685a0c78b frontend: Set cursor width for OBSHotkeyEdit to 0
This hides the cursor from the OBSHotkeyEdit spin boxes even when they
are in focus.
Uses a shared style owned by OBSApp.
2025-08-23 13:01:02 -04:00
PatTheMav 272825b46a frontend: Add CrashHandler class
The CrashHandler class encapsulates all functionality around unsafe
shutdown detection as well as crash log discovery and log upload.

Each (functional) CrashHandler should be initialized with an app launch
UUID, which enables the handler to disambiguate a sentinel file for the
current app launch from those of prior app launches.
2025-08-22 15:38:12 -04:00
derrod 0619198c25 frontend: Add Hybrid MOV to format list 2025-08-21 18:14:33 -04:00
cg2121 33e8a23386 frontend: Auto release OBSDataArray objects
Makes sure that all obs data array objects in cpp files are using
auto release RAII wrappers.
2025-08-20 12:59:53 -04:00
Dennis Sädtler ef057dd3af frontend: Fix and simplify initialization of supported_codecs 2025-08-19 18:44:49 -04:00
Sebastian Beckmann 28ca612d9e frontend: Remove unused OBSContextBarProxyStyle
All usages of OBSContextBarProxyStyle were removed in [1], so the class
is completely unused now. It should be deleted.

[1] 8dcfae9a39
2025-08-19 14:25:37 -04:00
Dennis Sädtler a45bbe134f frontend: Do not set maximum_video_tracks if user has set it to "Auto" 2025-07-18 13:07:37 -04:00
Damian Marcin SzymańskiandRyan Foster 9331fb7dac frontend: Fix build failure with Clang 20+ in OBSCanvas
Canvas is a move-only type without a copy constructor. Since C++17
requires types stored in std::optional to be copy-constructible unless
explicitly allowed, Clang 20+ emits an error when attempting to
instantiate std::optional<Canvas>.

While GCC allows this as an extension, Clang enforces the standard
more strictly.

This PR replaces std::optional<Canvas> with std::unique_ptr<Canvas> to
resolve the build error with Clang 20+ while keeping functional
behavior identical.

Tested with GCC 15.1.0 and Clang 20.1.7.

Co-Authored-By: Ryan Foster <ryan@obsproject.com>
2025-07-15 14:29:05 -04:00
Dennis Sädtler e474a3723b frontend: Allow 5 multitrack reconnect attempts before re-running GCC 2025-05-07 15:46:50 -04:00
cg2121 d7cce79d7e frontend: Use static_cast when casting from void pointers
Using static_cast is preferred here, as it is safer to use than
reinterpret_cast.
2025-05-05 20:47:10 -04:00
Dennis Sädtler 0552062390 frontend: Allow selecting additional canvases for multitrack 2025-05-05 17:17:20 -04:00
Dennis Sädtler 8117c89b9a frontend: Update multitrack API model
"revision" was defined to be a string in the schema but accepted
integers, this is enforced with the new schema version.
2025-05-05 17:17:20 -04:00
Dennis Sädtler 811072d0fd frontend: Always limit multitrack video encoders to libobs maximum 2025-05-05 17:17:20 -04:00
cg2121 345fe56b6e frontend: Make sure all QObject subclasses have Q_OBJECT macro
Went through and found all QObject subclasses that didn't have
a Q_OBJECT macro.
2025-05-05 13:10:39 -04:00
Dennis Sädtler afd7619c98 frontend: Add OBS::Canvas class 2025-05-02 14:35:22 -04:00
Ruwen Hahn 9bba6e52ff frontend: Allow Network Optimizations with multitrack video
"Enable network optimizations" in the Advanced Settings is referred to
as `NewSocketLoop` in the code. This feature was incompatible with
multitrack video but now works properly. Remove it from the
incompatible settings check.
2025-04-30 12:27:03 -04:00
Alex Luccisano 6bb9019aff frontend: Allow Stream Delay with multitrack video
Remove Stream Delay from the incompatible settings list for multitrack
video as it works properly now.
2025-04-29 13:50:57 -04:00
Warchamp7 f62b13957c frontend: Remove unused item delegate parameters 2025-04-25 14:01:23 -04:00
Warchamp7 36e3489d86 frontend: Adjust missing files dialog 2025-04-25 14:01:23 -04:00
Warchamp7 c0c77071b5 frontend: Add new appearance options 2025-04-22 15:04:49 -04:00
PatTheMav 96e4d67242 clang-format: Update source code files with clang-format 19.1.1 2025-04-17 18:16:33 +02:00
Alex Luccisano e1d2cf705d frontend: Support enhanced broadcasting on Linux
Enhanced broadcasting requires system information to be gathered
on the client and submitted to the GetClientConfiguration request
in order to obtain a valid response from the server. This commit
adds support for gathering the required information on Linux-based
systems.
2025-04-01 23:18:15 -04:00
Alex Luccisano b41522b4fd frontend: Convert "profile" to an integer for VAAPI encoders
VAAPI encoders deviate from other encoders (e.g. AMF, NVENC) with
the "profile" setting being an integer instead of a string. With
enhanced broadcasting, "profile" is signalled as a string. Convert
the string-based profile to the appropriate integer-based profile
for VAAPI encoders as a workaround, until VAAPI supports string-based
"profile" (if ever).
2025-04-01 23:18:15 -04:00
Dennis Sädtler 7a11db8949 frontend: Add reconnect callback for multitrack video 2025-03-17 13:30:58 -04:00
Dennis Sädtler 73725c27d3 frontend: Fix manifest commit hash comparison 2025-02-22 16:15:56 -08:00
Dennis Sädtler 80ea1b14fb frontend: Add support for TEB/GoLiveApi on Apple Silicon 2025-02-11 15:43:13 -05:00
Ryan Foster e471d3109b cmake: Specify NOMINMAX all the time on Windows
This prevents the Windows headers from defining min/max macros.

Use std::min and std::max.

Modifies deps, frontend, libobs-d3d11, libobs-winrt, decklink, obs-vst,
and win-dshow.
2025-02-07 14:52:24 -05:00
cg2121 4e8b131509 frontend: Use OBSBasic::Get() in all places
This reduces duplicated code when getting the OBSBasic context.
2025-02-05 15:15:52 -05:00
gxalpha a562b8bf52 frontend: Add Input Monitoring to permissions dialog
The previous commit switched global hotkeys from requiring Accessibility
to just Input Monitoring permissions. This adds the matching changes to
the permissions dialog, also accounting for the fact that Accessibility
includes Input Monitoring.
2025-02-05 14:33:06 -05:00
prgmitchell 84a5662df8 frontend: Log streaming service recommended maximums
Log the maximum recommended audio and video bitrate when the
user ticks the "Ignore streaming service setting recommendations" box.
2025-01-30 13:21:06 -05:00
Dennis Sädtler b131f59e7f frontend: Support preferred video format/space/range in GoLiveApi
Also sets Rec. 709/limited defaults for multitrack output.
2025-01-29 15:01:19 -05:00
Ruwen Hahn 9e3d0eb31b frontend: Add audio properties to GetClientConfiguration request 2025-01-29 14:37:19 -05:00
Dennis Sädtler 7e24a6093c frontend: Restart multitrack output if stream key has become invalid 2025-01-29 13:16:47 -05:00
Dennis Sädtler d026c871e0 frontend: Remove multitrack deactivate handlers
With the encoder reference counting fixups this is no longer required.
2025-01-29 13:16:47 -05:00
PatTheMav 2be464a21f frontend: Split main application implementation into single files 2025-01-08 17:33:13 +01:00
PatTheMav bcc6880183 frontend: Prepare main application implementation for splits 2025-01-08 17:33:13 +01:00
PatTheMav 654ddcd409 frontend: Split Qt UI Widget implementations into single files per class 2025-01-08 17:33:13 +01:00
PatTheMav 9f887c76d3 frontend: Prepare Qt UI Widgets for splits 2025-01-08 17:33:13 +01:00
PatTheMav a1ba3247c6 frontend: Split UI utility implementation into single files per class 2025-01-08 17:33:12 +01:00
PatTheMav a0668682b7 frontend: Prepare UI utility files for splits 2025-01-08 17:33:12 +01:00
PatTheMav d846b0ba0a frontend: Add renamed UI utility classes and functions 2025-01-08 17:33:12 +01:00
PatTheMav 1ff68267a3 frontend: Split Settings implementation into single files per C++ class 2025-01-08 15:36:55 +01:00
PatTheMav 9876882e0b frontend: Prepare Qt Settings UI files for splits 2025-01-08 15:36:55 +01:00
PatTheMav 085c6245b0 frontend: Split Qt UI dialogs into single files per C++ class 2025-01-08 15:36:55 +01:00