linux-alsa: Add ability to specify a custom PCM
Closes jp9000/obs-studio#599
This commit is contained in:
parent
108a4aa40e
commit
7d6bf872e2
@ -64,6 +64,8 @@ struct alsa_data {
|
||||
};
|
||||
|
||||
static const char * alsa_get_name(void *);
|
||||
static bool alsa_devices_changed(obs_properties_t *props,
|
||||
obs_property_t *p, obs_data_t *settings);
|
||||
static obs_properties_t * alsa_get_properties(void *);
|
||||
static void * alsa_create(obs_data_t *, obs_source_t *);
|
||||
static void alsa_destroy(void *);
|
||||
@ -119,7 +121,12 @@ void * alsa_create(obs_data_t *settings, obs_source_t *source)
|
||||
data->listen_thread = 0;
|
||||
data->reopen_thread = 0;
|
||||
|
||||
data->device = bstrdup(obs_data_get_string(settings, "device_id"));
|
||||
const char *device = obs_data_get_string(settings, "device_id");
|
||||
|
||||
if (strcmp(device, "__custom__") == 0)
|
||||
device = obs_data_get_string(settings, "custom_pcm");
|
||||
|
||||
data->device = bstrdup(device);
|
||||
data->rate = obs_data_get_int(settings, "rate");
|
||||
|
||||
if (os_event_init(&data->abort_event, OS_EVENT_TYPE_MANUAL) != 0) {
|
||||
@ -179,6 +186,10 @@ void alsa_update(void *vptr, obs_data_t *settings)
|
||||
bool reset = false;
|
||||
|
||||
device = obs_data_get_string(settings, "device_id");
|
||||
|
||||
if (strcmp(device, "__custom__") == 0)
|
||||
device = obs_data_get_string(settings, "custom_pcm");
|
||||
|
||||
if (strcmp(data->device, device) != 0) {
|
||||
bfree(data->device);
|
||||
data->device = bstrdup(device);
|
||||
@ -215,9 +226,28 @@ const char * alsa_get_name(void *unused)
|
||||
void alsa_get_defaults(obs_data_t *settings)
|
||||
{
|
||||
obs_data_set_default_string(settings, "device_id", "default");
|
||||
obs_data_set_default_string(settings, "custom_pcm", "default");
|
||||
obs_data_set_default_int(settings, "rate", 44100);
|
||||
}
|
||||
|
||||
static bool alsa_devices_changed(obs_properties_t *props,
|
||||
obs_property_t *p, obs_data_t *settings)
|
||||
{
|
||||
UNUSED_PARAMETER(p);
|
||||
bool visible = false;
|
||||
const char *device_id = obs_data_get_string(settings, "device_id");
|
||||
|
||||
if (strcmp(device_id, "__custom__") == 0)
|
||||
visible = true;
|
||||
|
||||
obs_property_t *custom_pcm = obs_properties_get(props, "custom_pcm");
|
||||
|
||||
obs_property_set_visible(custom_pcm, visible);
|
||||
obs_property_modified(custom_pcm, settings);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
obs_properties_t * alsa_get_properties(void *unused)
|
||||
{
|
||||
void **hints;
|
||||
@ -240,10 +270,15 @@ obs_properties_t * alsa_get_properties(void *unused)
|
||||
|
||||
obs_property_list_add_string(devices, "Default", "default");
|
||||
|
||||
obs_properties_add_text(props, "custom_pcm",
|
||||
obs_module_text("PCM"), OBS_TEXT_DEFAULT);
|
||||
|
||||
rate = obs_properties_add_list(props, "rate",
|
||||
obs_module_text("Rate"), OBS_COMBO_TYPE_LIST,
|
||||
OBS_COMBO_FORMAT_INT);
|
||||
|
||||
obs_property_set_modified_callback(devices, alsa_devices_changed);
|
||||
|
||||
obs_property_list_add_int(rate, "32000 Hz", 32000);
|
||||
obs_property_list_add_int(rate, "44100 Hz", 44100);
|
||||
obs_property_list_add_int(rate, "48000 Hz", 48000);
|
||||
@ -277,6 +312,8 @@ obs_properties_t * alsa_get_properties(void *unused)
|
||||
|
||||
obs_property_list_add_string(devices, descr, name);
|
||||
|
||||
obs_property_list_add_string(devices, "Custom", "__custom__");
|
||||
|
||||
next:
|
||||
if (name != NULL)
|
||||
free(name), name = NULL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user