Fixes several possible crash issues that might occur on Intel-based Macs
and older macOS versions:
On modern macOS versions (13+) allocated memory is zero-allocated by
default which makes NULL pointer checks work correctly after allocation.
On older macOS versions this is not the case, so the OBSAVCaptureInfo
struct needs to be zero-allocated to ensure the guards in the tick and
render functions bail out correctly.
On Intel-based Macs and/or older macOS versions passing a reference to
the OBSAVCapture instance inside the OBSAVCapture struct can lead to a
crash because of a possible circular reference that cannot be resolved
at runtime.
Passing only a reference of the OBSAVCapture to libobs and incrementing
the retain count at source creation (decrementing in when the source is
destroyed) avoids this issue entirely.
Since the widget is marked as opaque we need to draw each pixel or
else we may end up with unpainted pixels. On Wayland this will
result in artifacts in the audio meter as transparent pixels will
pick up colors from the underlaying desktop instead.
The uninit function prematurely released the memory allocated for the
channel map setting, which exists in the scope of source life cycle
(compared to channel names which are valid during the life cycle of a
configured device).
Splitting up the clean-up for both (memory for channel names is
released when the device is uninitialized, memory for channel map
setting is released when the source is removed) ensures that the memory
is released but pointers don't become unexpectedly invalid.
OBS handles up to 8 channels of audio, which requires the CoreAudio
input callback to omit/ignore any audio data from channels above that
count and also report a maximum amount of 8 channels to match the
speaker setup given to swresample by libobs.
Some devices do not support all color formats at all resolutions, but
the capture card source automatically uses an available color format
and compares it against the available format for a specific resolution.
Without being able to change this format, some resolutions do not
work as CMIO will not be able to find a compatible format. Thus the
color format needs to be manually selected for capture card sources
as well.
Previously, we always assumed we could push more frames before an encoded
packet would be available. Actually, we can get EAGAIN when the
frame queue is full and before any encoded packets have been completed.
Instead, attempt to read packets more often as the worst that can
happen is we get EAGAIN again.
After adding proper adapter enumeration the linux code ends up entering
the texture encoding paths, but these paths are not correctly
implemented on linux yet.
fixes#10221
When merging the PR for the previous commits, I forgot the note that
stated that it required a merge commit to preserve the pinned commit
hash for the workflow. Thus, when I merged with "Rebase and merge", the
commit hash changed, and the workflow broke.
Update the commit hash to the correct version and fix my mistake.
RTMP was not being recognized due to a case-sensitive comparison; this
changes to a case insensitive comparison to fix the issue.
Fixes a bug found in beta channel.
Signed-off-by: pkv <pkv@obsproject.com>
New space availability keys seem to have very specific file system
requirements not documented anywhere. Using the opportunistic free
space key opportunistically (and falling back on the legacy value
otherwise) should always yield a "good-enough" free disk space value.
Frame rate should be defined before AMF encoder initialization,
because this information is used for setting vui_time_scale in SPS.
If frame rate isn't defined before initialization,
then AMF encoder set default frame rate into VUI header (30 fps).
This is functionally a no-op, but works around a driver bug that
prevents use of eglQueryDisplayAttribEXT. This makes us more likely to
not trigger the driver bug and that gs_enum_adapters works correctly.
We're currently using peter-evans/create-pull-request v4.1.4 which is
based on the deprecated node16. This was fixed in v6.0.0, so let's
update to that commit.
We're currently using CyberAndrii/steam-totp c7f636bc64 which is
based on the deprecated node16. This was fixed in 45775c3219, so let's
update to that commit.
We're currently using CyberAndrii/setup-steamcmd b786e0da44 which is
based on the deprecated node16. This was fixed in 29e114af03, so let's
update to that commit.
We're currently using korelstar/xmllint-problem-matcher v1.1.0 which is
based on the deprecated node16. This was fixed in v1.2.0, so let's
update to that version's commit.
macOS and the GitHub runners have python3 preinstalled.
We only needed to specify a version because aiohttp wasn't compatible
with 3.12, but that's no longer the case.
Implement the new merge sub-action from upload-artifact as a separate
job that requires the Sparkle appcast creation job so that we still get
a single combined artifact for the Sparkle appcast. This lets us update
upload-artifact from v3 to v4.
GitHub Actions has deprecated Actions based on node16. The v4 actions
are based on node20.
See:
https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/
strcmp(obs_get_encoder_codec(option), "opus") causes the application to
segfault while loading service if find_encoder(id) returns NULL. Add a
null pointer check to prevent that from occurring.