|
@@ -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)
|