Skip to content

Commit 0029e58

Browse files
committed
only show audio when it is active
1 parent 030be42 commit 0029e58

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

source-clone.c

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,37 @@ void source_clone_audio_callback(void *data, obs_source_t *source,
6161
pthread_mutex_unlock(&context->audio_mutex);
6262
}
6363

64+
void source_clone_audio_activate(void *data, calldata_t *calldata)
65+
{
66+
struct source_clone *context = data;
67+
obs_source_t *source = calldata_ptr(calldata, "source");
68+
if (context->audio_enabled && context->clone &&
69+
obs_weak_source_references_source(context->clone, source)) {
70+
obs_source_set_audio_active(context->source, true);
71+
}
72+
}
73+
74+
void source_clone_audio_deactivate(void *data, calldata_t *calldata)
75+
{
76+
struct source_clone *context = data;
77+
obs_source_t *source = calldata_ptr(calldata, "source");
78+
if (context->clone &&
79+
obs_weak_source_references_source(context->clone, source)) {
80+
obs_source_set_audio_active(context->source, false);
81+
}
82+
}
83+
6484
static void source_clone_destroy(void *data)
6585
{
6686
struct source_clone *context = data;
6787
obs_source_t *source = obs_weak_source_get_source(context->clone);
6888
if (source) {
89+
signal_handler_t *sh = obs_source_get_signal_handler(source);
90+
signal_handler_disconnect(sh, "audio_activate",
91+
source_clone_audio_activate, data);
92+
signal_handler_disconnect(sh, "audio_deactivate",
93+
source_clone_audio_deactivate, data);
94+
6995
obs_source_remove_audio_capture_callback(
7096
source, source_clone_audio_callback, data);
7197
if (obs_source_showing(context->source))
@@ -104,6 +130,15 @@ void source_clone_update(void *data, obs_data_t *settings)
104130
obs_source_t *prev_source =
105131
obs_weak_source_get_source(context->clone);
106132
if (prev_source) {
133+
signal_handler_t *sh =
134+
obs_source_get_signal_handler(
135+
prev_source);
136+
signal_handler_disconnect(
137+
sh, "audio_activate",
138+
source_clone_audio_activate, data);
139+
signal_handler_disconnect(
140+
sh, "audio_deactivate",
141+
source_clone_audio_deactivate, data);
107142
obs_source_remove_audio_capture_callback(
108143
prev_source,
109144
source_clone_audio_callback, data);
@@ -113,10 +148,27 @@ void source_clone_update(void *data, obs_data_t *settings)
113148
}
114149
obs_weak_source_release(context->clone);
115150
context->clone = obs_source_get_weak_source(source);
116-
if (audio_enabled)
151+
if (audio_enabled &&
152+
(obs_source_get_output_flags(source) &
153+
OBS_SOURCE_AUDIO) != 0) {
117154
obs_source_add_audio_capture_callback(
118155
source, source_clone_audio_callback,
119156
data);
157+
obs_source_set_audio_active(
158+
context->source,
159+
obs_source_audio_active(source));
160+
signal_handler_t *sh =
161+
obs_source_get_signal_handler(source);
162+
signal_handler_connect(
163+
sh, "audio_activate",
164+
source_clone_audio_activate, data);
165+
signal_handler_connect(
166+
sh, "audio_deactivate",
167+
source_clone_audio_deactivate, data);
168+
} else {
169+
obs_source_set_audio_active(context->source,
170+
false);
171+
}
120172
if (obs_source_showing(context->source))
121173
obs_source_inc_showing(source);
122174
}

0 commit comments

Comments
 (0)