From 7368a6e6be5dbbdc8e13003ef6841fe3fe1840bc Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 20 Jan 2009 20:35:18 +0100 Subject: add priority logic to find best default profile --- src/modules/alsa/alsa-util.c | 35 +++++++++++++++++++++++------------ src/modules/alsa/alsa-util.h | 1 + src/modules/alsa/module-alsa-card.c | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) (limited to 'src/modules/alsa') diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index 65221764..eb7042b8 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -495,62 +495,72 @@ static const struct pa_alsa_profile_info device_table[] = { {{ 1, { PA_CHANNEL_POSITION_MONO }}, "hw", "Analog Mono", - "analog-mono" }, + "analog-mono", + 1 }, {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }}, "front", "Analog Stereo", - "analog-stereo" }, + "analog-stereo", + 10 }, {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }}, "iec958", "IEC958 Digital Stereo", - "iec958-stereo" }, + "iec958-stereo", + 5 }, {{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }}, "hdmi", "HDMI Digital Stereo", - "hdmi-stereo"}, + "hdmi-stereo", + 4 }, {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }}, "surround40", "Analog Surround 4.0", - "analog-surround-40" }, + "analog-surround-40", + 7 }, {{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }}, "a52", "IEC958/AC3 Digital Surround 4.0", - "iec958-ac3-surround-40" }, + "iec958-ac3-surround-40", + 2 }, {{ 5, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_LFE }}, "surround41", "Analog Surround 4.1", - "analog-surround-41"}, + "analog-surround-41", + 7 }, {{ 5, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_CENTER }}, "surround50", "Analog Surround 5.0", - "analog-surround-50" }, + "analog-surround-50", + 7 }, {{ 6, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE }}, "surround51", "Analog Surround 5.1", - "analog-surround-51" }, + "analog-surround-51", + 8 }, {{ 6, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_CENTER, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_LFE}}, "a52", "IEC958/AC3 Digital Surround 5.1", - "iec958-ac3-surround-51" }, + "iec958-ac3-surround-51", + 3 }, {{ 8, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT, @@ -558,9 +568,10 @@ static const struct pa_alsa_profile_info device_table[] = { PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT }}, "surround71", "Analog Surround 7.1", - "analog-surround-71" }, + "analog-surround-71", + 7 }, - {{ 0, { 0 }}, NULL, NULL, NULL } + {{ 0, { 0 }}, NULL, NULL, NULL, 0 } }; static pa_bool_t channel_map_superset(const pa_channel_map *a, const pa_channel_map *b) { diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h index f58ec8e0..59656252 100644 --- a/src/modules/alsa/alsa-util.h +++ b/src/modules/alsa/alsa-util.h @@ -86,6 +86,7 @@ typedef struct pa_alsa_profile_info { const char *alsa_name; const char *description; const char *name; + unsigned priority; } pa_alsa_profile_info; int pa_alsa_probe_profiles( diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c index ac6083de..6c947c06 100644 --- a/src/modules/alsa/module-alsa-card.c +++ b/src/modules/alsa/module-alsa-card.c @@ -108,6 +108,7 @@ static void enumerate_cb( pa_xfree(t); pa_xfree(n); + p->priority = (sink ? sink->priority : 0)*100 + (source ? source->priority : 0); p->n_sinks = !!sink; p->n_sources = !!source; -- cgit