libobs: Don't return/set 0 mixers for non-audio sources

Fixes a bug where if an audio source's implementation disappears (i.e.
a plugin vanishes or is removed), it would turn all mixing channels off,
effectively muting the source
master
jp9000 2021-10-02 10:13:58 -07:00
parent 669a615983
commit 1df2789978
1 changed files with 8 additions and 10 deletions

View File

@ -4231,19 +4231,19 @@ void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers)
if (!obs_source_valid(source, "obs_source_set_audio_mixers"))
return;
if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0)
return;
if (source->audio_mixers == mixers)
return;
calldata_init_fixed(&data, stack, sizeof(stack));
calldata_set_ptr(&data, "source", source);
calldata_set_int(&data, "mixers", mixers);
if ((source->info.output_flags & OBS_SOURCE_AUDIO) != 0) {
calldata_init_fixed(&data, stack, sizeof(stack));
calldata_set_ptr(&data, "source", source);
calldata_set_int(&data, "mixers", mixers);
signal_handler_signal(source->context.signals, "audio_mixers", &data);
signal_handler_signal(source->context.signals, "audio_mixers",
&data);
mixers = (uint32_t)calldata_int(&data, "mixers");
mixers = (uint32_t)calldata_int(&data, "mixers");
}
source->audio_mixers = mixers;
}
@ -4252,8 +4252,6 @@ uint32_t obs_source_get_audio_mixers(const obs_source_t *source)
{
if (!obs_source_valid(source, "obs_source_get_audio_mixers"))
return 0;
if ((source->info.output_flags & OBS_SOURCE_AUDIO) == 0)
return 0;
return source->audio_mixers;
}