Browse Source

libobs: Add use of pause callbacks to CoreAudio monitoring

Sergo 2 years ago
parent
commit
e4a3f80f9f
1 changed files with 13 additions and 0 deletions
  1. 13 0
      libobs/audio-monitoring/osx/coreaudio-output.c

+ 13 - 0
libobs/audio-monitoring/osx/coreaudio-output.c

@@ -54,6 +54,15 @@ static inline bool fill_buffer(struct audio_monitor *monitor)
 	return true;
 	return true;
 }
 }
 
 
+static void on_audio_pause(void *data, calldata_t *calldata)
+{
+	UNUSED_PARAMETER(calldata);
+	struct audio_monitor *monitor = data;
+	pthread_mutex_lock(&monitor->mutex);
+	circlebuf_free(&monitor->new_data);
+	pthread_mutex_unlock(&monitor->mutex);
+}
+
 static void on_audio_playback(void *param, obs_source_t *source,
 static void on_audio_playback(void *param, obs_source_t *source,
 			      const struct audio_data *audio_data, bool muted)
 			      const struct audio_data *audio_data, bool muted)
 {
 {
@@ -261,6 +270,8 @@ static void audio_monitor_free(struct audio_monitor *monitor)
 	if (monitor->source) {
 	if (monitor->source) {
 		obs_source_remove_audio_capture_callback(
 		obs_source_remove_audio_capture_callback(
 			monitor->source, on_audio_playback, monitor);
 			monitor->source, on_audio_playback, monitor);
+		obs_source_remove_audio_pause_callback(monitor->source,
+						       on_audio_pause, monitor);
 	}
 	}
 	if (monitor->active) {
 	if (monitor->active) {
 		AudioQueueStop(monitor->queue, true);
 		AudioQueueStop(monitor->queue, true);
@@ -288,6 +299,8 @@ static void audio_monitor_init_final(struct audio_monitor *monitor)
 
 
 	obs_source_add_audio_capture_callback(monitor->source,
 	obs_source_add_audio_capture_callback(monitor->source,
 					      on_audio_playback, monitor);
 					      on_audio_playback, monitor);
+	obs_source_add_audio_pause_callback(monitor->source, on_audio_pause,
+					    monitor);
 }
 }
 
 
 struct audio_monitor *audio_monitor_create(obs_source_t *source)
 struct audio_monitor *audio_monitor_create(obs_source_t *source)