mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-12-21 08:56:46 -05:00
alsa: rework mixer logic
Completely rework mixer logic. This now allows controlling a full set of elements from a single sink's volume slider/mute button. This also introduces sink and source "ports" that can be used to choose different input or output ports with the UI. (i.e. "mic"/"line-in" or "speaker"/"headphones". The mixer paths and device maps are now configered in external configuration files and can be tweaked as necessary.
This commit is contained in:
parent
e9c70ac41b
commit
31575f7766
54 changed files with 7029 additions and 1694 deletions
|
|
@ -58,7 +58,7 @@ static int read_id(struct udev_device *d, const char *n) {
|
|||
return u;
|
||||
}
|
||||
|
||||
int pa_udev_get_info(pa_core *core, pa_proplist *p, int card_idx) {
|
||||
int pa_udev_get_info(int card_idx, pa_proplist *p) {
|
||||
int r = -1;
|
||||
struct udev *udev;
|
||||
struct udev_device *card = NULL;
|
||||
|
|
@ -66,7 +66,6 @@ int pa_udev_get_info(pa_core *core, pa_proplist *p, int card_idx) {
|
|||
const char *v;
|
||||
int id;
|
||||
|
||||
pa_assert(core);
|
||||
pa_assert(p);
|
||||
pa_assert(card_idx >= 0);
|
||||
|
||||
|
|
@ -153,3 +152,40 @@ finish:
|
|||
|
||||
return r;
|
||||
}
|
||||
|
||||
char* pa_udev_get_property(int card_idx, const char *name) {
|
||||
struct udev *udev;
|
||||
struct udev_device *card = NULL;
|
||||
char *t, *r = NULL;
|
||||
const char *v;
|
||||
|
||||
pa_assert(card_idx >= 0);
|
||||
pa_assert(name);
|
||||
|
||||
if (!(udev = udev_new())) {
|
||||
pa_log_error("Failed to allocate udev context.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
t = pa_sprintf_malloc("%s/class/sound/card%i", udev_get_sys_path(udev), card_idx);
|
||||
card = udev_device_new_from_syspath(udev, t);
|
||||
pa_xfree(t);
|
||||
|
||||
if (!card) {
|
||||
pa_log_error("Failed to get card object.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if ((v = udev_device_get_property_value(card, name)) && *v)
|
||||
r = pa_xstrdup(v);
|
||||
|
||||
finish:
|
||||
|
||||
if (card)
|
||||
udev_device_unref(card);
|
||||
|
||||
if (udev)
|
||||
udev_unref(udev);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue