Browse Source

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
jp9000 4 years ago
parent
commit
1df2789978
1 changed files with 8 additions and 10 deletions
  1. 8 10
      libobs/obs-source.c

+ 8 - 10
libobs/obs-source.c

@@ -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;
 }