提交 96d9bf79 编写于 作者: J jp9000

libobs: Store linked list of audio sources

Useful for going traversing the list of audio sources (particularly for
the new audio subsystem)
上级 a702d88c
......@@ -270,6 +270,7 @@ struct obs_core_audio {
/* user sources, output channels, and displays */
struct obs_core_data {
struct obs_source *first_source;
struct obs_source *first_audio_source;
struct obs_display *first_display;
struct obs_output *first_output;
struct obs_encoder *first_encoder;
......@@ -280,6 +281,7 @@ struct obs_core_data {
pthread_mutex_t outputs_mutex;
pthread_mutex_t encoders_mutex;
pthread_mutex_t services_mutex;
pthread_mutex_t audio_sources_mutex;
struct obs_view main_view;
......@@ -493,6 +495,8 @@ struct obs_source {
/* audio */
bool audio_failed;
bool muted;
struct obs_source *next_audio_source;
struct obs_source **prev_next_audio_source;
struct resample_info sample_info;
audio_resampler_t *resampler;
audio_line_t *audio_line;
......
......@@ -149,6 +149,18 @@ bool obs_source_init(struct obs_source *source,
"source '%s'", source->context.name);
return false;
}
pthread_mutex_lock(&obs->data.audio_sources_mutex);
source->next_audio_source = obs->data.first_audio_source;
source->prev_next_audio_source =
&obs->data.first_audio_source;
if (obs->data.first_audio_source)
obs->data.first_audio_source->prev_next_audio_source =
&source->next_audio_source;
obs->data.first_audio_source = source;
pthread_mutex_unlock(&obs->data.audio_sources_mutex);
}
source->control = bzalloc(sizeof(obs_weak_source_t));
......@@ -340,6 +352,15 @@ void obs_source_destroy(struct obs_source *source)
if (!obs_source_valid(source, "obs_source_destroy"))
return;
pthread_mutex_lock(&obs->data.audio_sources_mutex);
if (source->prev_next_audio_source) {
*source->prev_next_audio_source = source->next_audio_source;
if (source->next_audio_source)
source->next_audio_source->prev_next_audio_source =
source->prev_next_audio_source;
}
pthread_mutex_unlock(&obs->data.audio_sources_mutex);
if (source->filter_parent)
obs_source_filter_remove_refless(source->filter_parent, source);
......
......@@ -494,6 +494,8 @@ static bool obs_init_data(void)
goto fail;
if (pthread_mutex_init(&data->sources_mutex, &attr) != 0)
goto fail;
if (pthread_mutex_init(&data->audio_sources_mutex, &attr) != 0)
goto fail;
if (pthread_mutex_init(&data->displays_mutex, &attr) != 0)
goto fail;
if (pthread_mutex_init(&data->outputs_mutex, &attr) != 0)
......@@ -552,6 +554,7 @@ static void obs_free_data(void)
FREE_OBS_LINKED_LIST(service);
pthread_mutex_destroy(&data->sources_mutex);
pthread_mutex_destroy(&data->audio_sources_mutex);
pthread_mutex_destroy(&data->displays_mutex);
pthread_mutex_destroy(&data->outputs_mutex);
pthread_mutex_destroy(&data->encoders_mutex);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册