PulseAudio code needs to be called with the PA lock held. This chiefly
fixes multiple races during stream shutdown:
* If the functions are called without the lock held, deferred event
handling races end up with PA infinite looping on the mainloop, or
asserting, or other badness, as the reentrant calls cause data
structure corruption on the PA side.
* If we don't reset our callbacks, PA might call us even after we
request stream disconnection (since the stream actually getting fully
shut down is asynchronous), and then we dereference NULL pointers from
our userdata etc. PA will keep its data structures alive until necessary
via reference counting, but not ours.
The lock around pa_stream_begin_write doesn't result from any issues I
experienced, but it looks correct; PA doesn't say anywhere that that
function is thread-safe.
If the user hasn't specifically set a rate control and left OBS at the
default of CBR, the settings loaded by GetDataFromJsonFile will not have
a rate_control parameter present. This causes the replay buffer to think
the user is in VBR mode and use the wrong settings for determining
maximum buffer size. Fixes#2516.
The (de)select signal can come from a obs_scene_enum_items
which locks the scene. The Qt::QueuedConnection makes sure
the (de)select is handled outside of that lock.
Fixes the deadlock from #3673
Regression introduced by dc4e20500: while the stop detection is pending,
it should still return false so the rest of the discard code can run.
Otherwise, the source audio will remain in the buffer, lagging the
source and triggering audio buffering increases until max audio
buffering is reached.
When /bin/sh isn't bash, the previous line always appears to succeed,
and modinfo's output is not redirected, because it actually runs
modinfo in the background (which always succeeds) then opens and closes
/dev/null without doing anything to it. This causes us to always think
that the v4l2loopback module is installed, even when it isn't.
The vod track in advanced output mode would be overwritten by twitch
soundtrack's vod track. Additionally, simple output mode would overwrite
twitch's soundtrack vod track even when vod track was turned off in
settings.
So instead, if vod track is off, don't clear the secondary encoder
unless it's explicitly our encoder. Additionally, make sure that
advanced output mode's vod track encoder behaves consistently with
simple output mode's vod track so it doesn't get overwritten.
Similar to 315fbd6 and 6071098, ignore non-fatal errors during the
remux process. It's possible OBS itself writes a file that generates
these errors when remuxed.
This setting, although technically different from the one in the
streaming section of settings, is superseded by that setting.
The setting can still be used via ini file if an actual custom rate
control or keyframe interval is needed.
The Scene Collection Importer would attempt to set the new filename
using the name property of the scene collection. However, it would
determine an unused filename, and then replace spaces with underscores,
which could cause a name collision. This changes the importer to replace
spaces with underscores first for the base filename, and then determine
an unused filename.
This commit fixes various issues with screen readers in the main OBS
interface. These were tested using NVDA on Windows 10 2004.
Audio track selection in Settings now says Track 1, 2, etc, rather than
just the number.
Various checkboxes that just say "Enable" now have accessible text that
says what the enable is for (since it says "checkbox", the fact it's an
enable should hopefully be clear).
Type in the recording tab of output now has accessible text which says
"Recording Type".
Items in the Advanced Audio Properties window now have accessible text
for what they are for. Currently some do not report correct values, but
that will require an accessible interface in Qt to be written
specifically for that, which will be done at a later date.
Buttons in the filters window now have accessible text for what they do.
All the right side buttons in hotkeys now have tooltips, and by
extension, accessible text.
Speeds up loading with large number of filters and prevents deadlock by
not getting the properties of filters during
OBSBasicFilters::UpdateFilters() which uses the source->filter_mutex
This significantly simplifies the
configuration setting's initial load.
This also fixes as issue where the source toolbar
would initialise as "TextLabel" with enabled
buttons if the user had not yet toggled the setting.
Fixes#3722