Implement defaults functions

The defaults functions will now return the default device for the
input/output as provided by pulseaudio.
The default output device is the monitor of the default sink.
This commit is contained in:
fryshorts 2014-04-28 20:44:01 +02:00
parent bbda252e2d
commit 30a688e942
3 changed files with 57 additions and 7 deletions

View file

@ -298,12 +298,62 @@ static obs_properties_t pulse_output_properties(const char *locale)
return pulse_properties(locale, false); return pulse_properties(locale, false);
} }
/**
* Server info callback
*/
static void pulse_input_device(pa_context *c, const pa_server_info *i,
void *userdata)
{
UNUSED_PARAMETER(c);
obs_data_t settings = (obs_data_t) userdata;
obs_data_set_default_string(settings, "device_id",
i->default_source_name);
blog(LOG_DEBUG, "pulse-input: Default input device: '%s'",
i->default_source_name);
pulse_signal(0);
}
static void pulse_output_device(pa_context *c, const pa_server_info *i,
void *userdata)
{
UNUSED_PARAMETER(c);
obs_data_t settings = (obs_data_t) userdata;
char *monitor = bzalloc(strlen(i->default_sink_name) + 9);
strcat(monitor, i->default_sink_name);
strcat(monitor, ".monitor");
obs_data_set_default_string(settings, "device_id", monitor);
blog(LOG_DEBUG, "pulse-input: Default output device: '%s'", monitor);
bfree(monitor);
pulse_signal(0);
}
/** /**
* Get plugin defaults * Get plugin defaults
*/ */
static void pulse_defaults(obs_data_t settings) static void pulse_defaults(obs_data_t settings, bool input)
{ {
obs_data_set_default_string(settings, "device_id", "default"); pulse_init();
pa_server_info_cb_t cb = (input)
? pulse_input_device : pulse_output_device;
pulse_get_server_info(cb, (void *) settings);
pulse_unref();
}
static void pulse_input_defaults(obs_data_t settings)
{
return pulse_defaults(settings, true);
}
static void pulse_output_defaults(obs_data_t settings)
{
return pulse_defaults(settings, false);
} }
/** /**
@ -391,7 +441,7 @@ struct obs_source_info pulse_input_capture = {
.create = pulse_create, .create = pulse_create,
.destroy = pulse_destroy, .destroy = pulse_destroy,
.update = pulse_update, .update = pulse_update,
.defaults = pulse_defaults, .defaults = pulse_input_defaults,
.properties = pulse_input_properties .properties = pulse_input_properties
}; };
@ -403,6 +453,6 @@ struct obs_source_info pulse_output_capture = {
.create = pulse_create, .create = pulse_create,
.destroy = pulse_destroy, .destroy = pulse_destroy,
.update = pulse_update, .update = pulse_update,
.defaults = pulse_defaults, .defaults = pulse_output_defaults,
.properties = pulse_output_properties .properties = pulse_output_properties
}; };

View file

@ -86,7 +86,7 @@ static void pulse_init_context()
static int_fast32_t pulse_context_ready() static int_fast32_t pulse_context_ready()
{ {
pulse_lock(); pulse_lock();
if (!PA_CONTEXT_IS_GOOD(pa_context_get_state(pulse_context))) { if (!PA_CONTEXT_IS_GOOD(pa_context_get_state(pulse_context))) {
pulse_unlock(); pulse_unlock();
return -1; return -1;

View file

@ -83,7 +83,7 @@ void pulse_accept();
* Request source information * Request source information
* *
* The function will block until the operation was executed and the mainloop * The function will block until the operation was executed and the mainloop
* called the provided callback functions. * called the provided callback function.
* *
* @return negative on error * @return negative on error
* *
@ -97,7 +97,7 @@ int_fast32_t pulse_get_source_info_list(pa_source_info_cb_t cb, void *userdata);
* Request server information * Request server information
* *
* The function will block until the operation was executed and the mainloop * The function will block until the operation was executed and the mainloop
* called the provided callback functions * called the provided callback function.
* *
* @return negative on error * @return negative on error
* *