Bladeren bron

libobs: Check tracks for monitoring deduplication

Monitoring deduplication must be applied only to tracks for which the
monitored source and the 'Audio Output Capture' source are both enabled.
This adds such checks.

Signed-off-by: pkv <[email protected]>
pkv 1 maand geleden
bovenliggende
commit
967e19b3fa
1 gewijzigde bestanden met toevoegingen van 15 en 6 verwijderingen
  1. 15 6
      libobs/obs-audio.c

+ 15 - 6
libobs/obs-audio.c

@@ -557,13 +557,22 @@ static inline bool should_silence_monitored_source(obs_source_t *source, struct
 	return false;
 }
 
-static inline void clear_audio_output_buf(obs_source_t *source)
+static inline void clear_audio_output_buf(obs_source_t *source, struct obs_core_audio *audio)
 {
+	if (!audio->monitoring_duplicating_source)
+		return;
+
+	uint32_t aoc_mixers = audio->monitoring_duplicating_source->audio_mixers;
+	uint32_t source_mixers = source->audio_mixers;
+
 	for (size_t mix = 0; mix < MAX_AUDIO_MIXES; mix++) {
-		for (size_t ch = 0; ch < MAX_AUDIO_CHANNELS; ch++) {
-			float *buf = source->audio_output_buf[mix][ch];
-			if (buf)
-				memset(buf, 0, AUDIO_OUTPUT_FRAMES * sizeof(float));
+		uint32_t mix_and_val = (1 << mix);
+		if ((aoc_mixers & mix_and_val) && (source_mixers & mix_and_val)) {
+			for (size_t ch = 0; ch < MAX_AUDIO_CHANNELS; ch++) {
+				float *buf = source->audio_output_buf[mix][ch];
+				if (buf)
+					memset(buf, 0, AUDIO_OUTPUT_FRAMES * sizeof(float));
+			}
 		}
 	}
 }
@@ -648,7 +657,7 @@ bool audio_callback(void *param, uint64_t start_ts_in, uint64_t end_ts_in, uint6
 		obs_source_t *source = audio->render_order.array[i];
 		obs_source_audio_render(source, mixers, channels, sample_rate, audio_size);
 		if (should_silence_monitored_source(source, audio))
-			clear_audio_output_buf(source);
+			clear_audio_output_buf(source, audio);
 
 		/* if a source has gone backward in time and we can no
 		 * longer buffer, drop some or all of its audio */