Ideally CMAKE_OSX_ARCHITECTURES should not be set automatically within
the project but should exclusively be a cache or environment variable
provided by the developer.
This would also match the requirement mentioned by the CMake
documentation that the value should be set before the first project()
call.
If this variable is not set, the Xcode generator would default to the
native platform of the host, but the buildspec system as well as the
"add_obs_plugin" function need a local "architecture" to work, so
use "CMAKE_HOST_SYSTEM_PROCESSOR" instead if CMAKE_OSX_ARCHITECTURES
was not provided.
Recent styling changes mean read-only QLineEdits no longer visually take
focus. There are better ways to remove the input cursor, and if we do
that that should probably be all operating systems anyways.
Splits the IconLabel widget header into a header and source file. The
source uses the moc_icon-label include to prevent the moc from being
included in the global mocs_compilation (as described in 5eb04cd).
Commit [1] originally made a differentiation between the operating
systems for the window icon. However, on macOS the window icon is only
respected for the main window (and used for the entire app, as windows
themselves don't have icons), and that got removed in [2]. This means
that this code doesn't actually do anything anymore, and thus should be
removed.
[1] 9ac92f61be
[2] 4afafaac6d
This fixes a change in PR 11605 that breaks Decklink video outputs.
get_mix_for_video() returns NULL for those outputs, causing
start_raw_video() to return before connecting the output.
Since video rendering happens on a separate thread from PipeWire buffer
ingestion, it may happen that two buffers are ingested in quick
succession without the rendering thread ever getting to them. Since,
prior to this commit, the release sync point is only "primed" (set to
signal in the future) only on the video rendering thread, this results
in the buffer being returned to PipeWire's pool without anything ever
signaling the release point, effectively blocking it from ever getting
reused in the future. This quickly clogs up the buffer pool and leaves
only one buffer to circulate between the screencast source and OBS.
This commit adds a flag tracking whether the release point had been
primed. If, when ingesting a new PW buffer, the old buffer's release
point hadn't been primed, that means the video rendering thread never
got to that buffer, so the release point is immediately signaled,
marking the buffer reusable by the screencast source.
PipeWire format renegotiation runs in parallel with video rendering.
When the stream format is renegotiated, PipeWire removes the existing
buffers and closes the syncobj file descriptors. At the same time, the
video rendering thread may try to import the (already closed) syncobj
acquire fd, and hang on waiting for the fence to become available.
This is not a problem for the dmabuf fd because it's imported into a
texture right away, which doesn't disappear when PipeWire closes the fd.
This commit adds duping to the syncobj fds so that they too remain open
as long as the rendering thread may access them.
Move 3 headers out from the Linux-specific section.
Without these headers functions like open, close, drmXx aren't found.
* open requires <fcntl.h>
* close requres <unistd.h>
* drmXx requires <xf86drm.h>
The generate-docs action started failing, presumably because it is using
Debian Buster. Update the pinned commit for the third-party
totaldebug/sphinx-publish-action to hopefully fix this.
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>
With libsrt v1.5.4, we saw issues when using multiple Media Sources
ingesting SRT. If one would shut down or fail, then all SRT Media
Sources would stop working. While there has been no confirmation that
this also occurs on Linux, out of an abundance of caution, revert libsrt
to v1.5.3, which was used for OBS Studio 30.1, 30.2, and 31.0.
MbedTLS v3.6.2 has an issue with fragmented TLS 1.3 handshakes, causing
some RTMPS streams to fail to connect. Update to mbedTLS v3.6.4 where
this is fixed.
Fixes RTMPS streaming not working in some cases.
Fixes SRT ingest failing in some cases.
Notable changes:
* deps.ffmpeg: Update mbedTLS to 3.6.4
* deps.ffmpeg: Revert libsrt to v1.5.2 with patches
CEF 127 lacks CEF_OSR_EXTRA_INFO, which can cause resizing a
hardware-acclerated browser source to crash its GPU renderer process.
Use a rebuilt CEF 127 with CEF_OSR_EXTRA_INFO backported from CEF 133+.
When 31.0.4 was published, it published to the Flathub beta channel,
which overwrote the running 31.1.0 beta/rc. This was due to an
assumption that we would not publish an out-of-band hotfix release once
we had moved to a new beta release cycle. To prevent this in the future,
we can check the last two releases to see if they are different tag
series and if one is a prerelease.
When 31.0.4 was published, it published to the Flathub beta channel,
which overwrote the running 31.1.0 beta/rc. This was due to an
assumption that we would not publish an out-of-band hotfix release once
we had moved to a new beta release cycle. To prevent this in the future,
we can check the last two releases to see if they are different tag
series and if one is a prerelease.