mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
hal: add option to initialize all subdevices of an OSS device
Patch from 'cmt', closes ticket #544
This commit is contained in:
parent
478f3254b3
commit
0113e7282c
1 changed files with 20 additions and 5 deletions
|
|
@ -57,12 +57,14 @@ PA_MODULE_VERSION(PACKAGE_VERSION);
|
||||||
PA_MODULE_LOAD_ONCE(TRUE);
|
PA_MODULE_LOAD_ONCE(TRUE);
|
||||||
#if defined(HAVE_ALSA) && defined(HAVE_OSS)
|
#if defined(HAVE_ALSA) && defined(HAVE_OSS)
|
||||||
PA_MODULE_USAGE("api=<alsa or oss> "
|
PA_MODULE_USAGE("api=<alsa or oss> "
|
||||||
"tsched=<enable system timer based scheduling mode?>");
|
"tsched=<enable system timer based scheduling mode?>"
|
||||||
|
"subdevs=<init all subdevices>");
|
||||||
#elif defined(HAVE_ALSA)
|
#elif defined(HAVE_ALSA)
|
||||||
PA_MODULE_USAGE("api=<alsa> "
|
PA_MODULE_USAGE("api=<alsa> "
|
||||||
"tsched=<enable system timer based scheduling mode?>");
|
"tsched=<enable system timer based scheduling mode?>");
|
||||||
#elif defined(HAVE_OSS)
|
#elif defined(HAVE_OSS)
|
||||||
PA_MODULE_USAGE("api=<oss>");
|
PA_MODULE_USAGE("api=<oss>"
|
||||||
|
"subdevs=<init all subdevices>");
|
||||||
#endif
|
#endif
|
||||||
PA_MODULE_DEPRECATED("Please use module-udev-detect instead of module-hal-detect!");
|
PA_MODULE_DEPRECATED("Please use module-udev-detect instead of module-hal-detect!");
|
||||||
|
|
||||||
|
|
@ -82,6 +84,9 @@ struct userdata {
|
||||||
#ifdef HAVE_ALSA
|
#ifdef HAVE_ALSA
|
||||||
pa_bool_t use_tsched;
|
pa_bool_t use_tsched;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_OSS
|
||||||
|
pa_bool_t init_subdevs;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CAPABILITY_ALSA "alsa"
|
#define CAPABILITY_ALSA "alsa"
|
||||||
|
|
@ -91,6 +96,9 @@ static const char* const valid_modargs[] = {
|
||||||
"api",
|
"api",
|
||||||
#ifdef HAVE_ALSA
|
#ifdef HAVE_ALSA
|
||||||
"tsched",
|
"tsched",
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OSS
|
||||||
|
"subdevs",
|
||||||
#endif
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
@ -264,7 +272,7 @@ fail:
|
||||||
|
|
||||||
#ifdef HAVE_OSS
|
#ifdef HAVE_OSS
|
||||||
|
|
||||||
static pa_bool_t hal_oss_device_is_pcm(LibHalContext *context, const char *udi) {
|
static pa_bool_t hal_oss_device_is_pcm(LibHalContext *context, const char *udi, pa_bool_t init_subdevices) {
|
||||||
char *class = NULL, *dev = NULL, *e;
|
char *class = NULL, *dev = NULL, *e;
|
||||||
int device;
|
int device;
|
||||||
pa_bool_t r = FALSE;
|
pa_bool_t r = FALSE;
|
||||||
|
|
@ -294,7 +302,7 @@ static pa_bool_t hal_oss_device_is_pcm(LibHalContext *context, const char *udi)
|
||||||
|
|
||||||
/* We only care for the main device */
|
/* We only care for the main device */
|
||||||
device = libhal_device_get_property_int(context, udi, "oss.device", &error);
|
device = libhal_device_get_property_int(context, udi, "oss.device", &error);
|
||||||
if (dbus_error_is_set(&error) || device != 0)
|
if (dbus_error_is_set(&error) || (device != 0 && init_subdevices == FALSE))
|
||||||
goto finish;
|
goto finish;
|
||||||
|
|
||||||
r = TRUE;
|
r = TRUE;
|
||||||
|
|
@ -324,7 +332,7 @@ static int hal_device_load_oss(struct userdata *u, const char *udi, struct devic
|
||||||
pa_assert(d);
|
pa_assert(d);
|
||||||
|
|
||||||
/* We only care for OSS PCM devices */
|
/* We only care for OSS PCM devices */
|
||||||
if (!hal_oss_device_is_pcm(u->context, udi))
|
if (!hal_oss_device_is_pcm(u->context, udi, u->init_subdevs))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/* We store only one entry per card, hence we look for the originating device */
|
/* We store only one entry per card, hence we look for the originating device */
|
||||||
|
|
@ -763,6 +771,13 @@ int pa__init(pa_module*m) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_OSS
|
||||||
|
if (pa_modargs_get_value_boolean(ma, "subdevs", &u->init_subdevs) < 0) {
|
||||||
|
pa_log("Failed to parse subdevs argument.");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!(u->connection = pa_dbus_bus_get(m->core, DBUS_BUS_SYSTEM, &error)) || dbus_error_is_set(&error)) {
|
if (!(u->connection = pa_dbus_bus_get(m->core, DBUS_BUS_SYSTEM, &error)) || dbus_error_is_set(&error)) {
|
||||||
pa_log_error("Unable to contact DBUS system bus: %s: %s", error.name, error.message);
|
pa_log_error("Unable to contact DBUS system bus: %s: %s", error.name, error.message);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue