libobs: Add API to mute/unmute sources

This commit is contained in:
jp9000 2015-03-22 14:54:07 -07:00
parent f04ef236ac
commit e31fea66be
4 changed files with 33 additions and 1 deletions

View file

@ -322,6 +322,7 @@ struct obs_source {
/* audio */
bool audio_failed;
bool muted;
struct resample_info sample_info;
audio_resampler_t *resampler;
audio_line_t *audio_line;

View file

@ -78,6 +78,7 @@ static const char *source_signals[] = {
"void deactivate(ptr source)",
"void show(ptr source)",
"void hide(ptr source)",
"void mute(ptr source, bool muted)",
"void enable(ptr source, bool enabled)",
"void rename(ptr source, string new_name, string prev_name)",
"void volume(ptr source, in out float volume)",
@ -729,7 +730,7 @@ static void source_output_audio_line(obs_source_t *source,
source->present_volume * obs->audio.user_volume *
obs->audio.present_volume;
if (!source->enabled)
if (!source->enabled || source->muted)
in.volume = 0.0f;
audio_line_output(source->audio_line, &in);
@ -2627,3 +2628,25 @@ void obs_source_set_enabled(obs_source_t *source, bool enabled)
calldata_free(&data);
}
bool obs_source_muted(const obs_source_t *source)
{
return source ? source->muted : false;
}
void obs_source_set_muted(obs_source_t *source, bool muted)
{
struct calldata data = {0};
if (!source)
return;
source->muted = muted;
calldata_set_ptr(&data, "source", source);
calldata_set_bool(&data, "muted", muted);
signal_handler_signal(source->context.signals, "mute", &data);
calldata_free(&data);
}

View file

@ -1291,6 +1291,9 @@ static obs_source_t *obs_load_source_type(obs_data_t *source_data,
obs_source_set_enabled(source,
obs_data_get_bool(source_data, "enabled"));
obs_data_set_default_bool(source_data, "muted", false);
obs_source_set_muted(source, obs_data_get_bool(source_data, "muted"));
if (filters) {
size_t count = obs_data_array_count(filters);
@ -1361,6 +1364,7 @@ obs_data_t *obs_save_source(obs_source_t *source)
const char *name = obs_source_get_name(source);
const char *id = obs_source_get_id(source);
bool enabled = obs_source_enabled(source);
bool muted = obs_source_muted(source);
obs_source_save(source);
@ -1372,6 +1376,7 @@ obs_data_t *obs_save_source(obs_source_t *source)
obs_data_set_int (source_data, "flags", flags);
obs_data_set_double(source_data, "volume", volume);
obs_data_set_bool (source_data, "enabled", enabled);
obs_data_set_bool (source_data, "muted", muted);
pthread_mutex_lock(&source->filter_mutex);

View file

@ -828,6 +828,9 @@ EXPORT obs_source_t *obs_source_get_filter_by_name(obs_source_t *source,
EXPORT bool obs_source_enabled(const obs_source_t *source);
EXPORT void obs_source_set_enabled(obs_source_t *source, bool enabled);
EXPORT bool obs_source_muted(const obs_source_t *source);
EXPORT void obs_source_set_muted(obs_source_t *source, bool muted);
/* ------------------------------------------------------------------------- */
/* Functions used by sources */