提交 b1ada2f9 编写于 作者: A Alexandre Vicenzi 提交者: jp9000

linux-pulseaudio: Get correct default device

Closes jp9000/obs-studio#1030
上级 2c58185a
......@@ -33,6 +33,7 @@ struct pulse_data {
/* user settings */
char *device;
bool input;
/* server info */
enum speaker_layout speakers;
......@@ -164,11 +165,30 @@ static void pulse_server_info(pa_context *c, const pa_server_info *i,
void *userdata)
{
UNUSED_PARAMETER(c);
UNUSED_PARAMETER(userdata);
PULSE_DATA(userdata);
blog(LOG_INFO, "Server name: '%s %s'",
i->server_name, i->server_version);
if (data->device && strcmp("default", data->device) == 0) {
if (data->input) {
bfree(data->device);
data->device = bstrdup(i->default_source_name);
blog(LOG_DEBUG, "Default input device: '%s'", data->device);
} else {
char *monitor = bzalloc(strlen(i->default_sink_name) + 9);
strcat(monitor, i->default_sink_name);
strcat(monitor, ".monitor");
bfree(data->device);
data->device = bstrdup(monitor);
blog(LOG_DEBUG, "Default output device: '%s'", data->device);
bfree(monitor);
}
}
pulse_signal(0);
}
......@@ -374,6 +394,12 @@ static obs_properties_t *pulse_properties(bool input)
pulse_get_sink_info_list(pulse_output_info, (void *) devices);
pulse_unref();
size_t count = obs_property_list_item_count(devices);
if (count > 0)
obs_property_list_insert_string(devices, 0,
obs_module_text("Default"), "default");
return props;
}
......@@ -391,61 +417,12 @@ static obs_properties_t *pulse_output_properties(void *unused)
return pulse_properties(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, "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, "Default output device: '%s'", monitor);
bfree(monitor);
pulse_signal(0);
}
/**
* Get plugin defaults
*/
static void pulse_defaults(obs_data_t *settings, bool input)
static void pulse_defaults(obs_data_t *settings)
{
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);
obs_data_set_default_string(settings, "device_id", "default");
}
/**
......@@ -510,10 +487,11 @@ static void pulse_update(void *vptr, obs_data_t *settings)
/**
* Create the plugin object
*/
static void *pulse_create(obs_data_t *settings, obs_source_t *source)
static void *pulse_create(obs_data_t *settings, obs_source_t *source, bool input)
{
struct pulse_data *data = bzalloc(sizeof(struct pulse_data));
data->input = input;
data->source = source;
pulse_init();
......@@ -522,16 +500,26 @@ static void *pulse_create(obs_data_t *settings, obs_source_t *source)
return data;
}
static void *pulse_input_create(obs_data_t *settings, obs_source_t *source)
{
return pulse_create(settings, source, true);
}
static void *pulse_output_create(obs_data_t *settings, obs_source_t *source)
{
return pulse_create(settings, source, false);
}
struct obs_source_info pulse_input_capture = {
.id = "pulse_input_capture",
.type = OBS_SOURCE_TYPE_INPUT,
.output_flags = OBS_SOURCE_AUDIO |
OBS_SOURCE_DO_NOT_DUPLICATE,
.get_name = pulse_input_getname,
.create = pulse_create,
.create = pulse_input_create,
.destroy = pulse_destroy,
.update = pulse_update,
.get_defaults = pulse_input_defaults,
.get_defaults = pulse_defaults,
.get_properties = pulse_input_properties
};
......@@ -542,9 +530,9 @@ struct obs_source_info pulse_output_capture = {
OBS_SOURCE_DO_NOT_DUPLICATE |
OBS_SOURCE_DO_NOT_SELF_MONITOR,
.get_name = pulse_output_getname,
.create = pulse_create,
.create = pulse_output_create,
.destroy = pulse_destroy,
.update = pulse_update,
.get_defaults = pulse_output_defaults,
.get_defaults = pulse_defaults,
.get_properties = pulse_output_properties
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册