pa_channel_map_init(&m->channel_map);
}
+static pa_alsa_mapping* ucm_alsa_mapping_get(pa_alsa_ucm_config *ucm, pa_alsa_profile_set *ps, const char *verb_name, const char *device_str, bool is_sink) {
+ pa_alsa_mapping *m;
+ char *mapping_name;
+ size_t ucm_alibpref_len = 0;
+ const char *value;
+
+ /* find private alsa-lib's configuration device prefix */
+ if (snd_use_case_get(ucm->ucm_mgr, "_alibpref", &value) == 0) {
+ if (value[0] && pa_startswith(device_str, value))
+ ucm_alibpref_len = strlen(value);
+
+ free((void *)value);
+ }
+
+ mapping_name = pa_sprintf_malloc("Mapping %s: %s: %s", verb_name, device_str + ucm_alibpref_len, is_sink ? "sink" : "source");
+
+ m = pa_alsa_mapping_get(ps, mapping_name);
+
+ if (!m)
+ pa_log("No mapping for %s", mapping_name);
+
+ pa_xfree(mapping_name);
+
+ return m;
+}
+
static int ucm_create_mapping_direction(
pa_alsa_ucm_config *ucm,
pa_alsa_profile_set *ps,
bool is_sink) {
pa_alsa_mapping *m;
- char *mapping_name;
unsigned priority, rate, channels;
- mapping_name = pa_sprintf_malloc("Mapping %s: %s: %s", verb_name, device_str, is_sink ? "sink" : "source");
+ m = ucm_alsa_mapping_get(ucm, ps, verb_name, device_str, is_sink);
- m = pa_alsa_mapping_get(ps, mapping_name);
- if (!m) {
- pa_log("No mapping for %s", mapping_name);
- pa_xfree(mapping_name);
+ if (!m)
return -1;
- }
- pa_log_debug("UCM mapping: %s dev %s", mapping_name, device_name);
- pa_xfree(mapping_name);
+
+ pa_log_debug("UCM mapping: %s dev %s", m->name, device_name);
priority = is_sink ? device->playback_priority : device->capture_priority;
rate = is_sink ? device->playback_rate : device->capture_rate;
bool is_sink) {
pa_alsa_mapping *m;
- char *mapping_name;
- mapping_name = pa_sprintf_malloc("Mapping %s: %s: %s", verb_name, device_str, is_sink ? "sink" : "source");
+ m = ucm_alsa_mapping_get(ucm, ps, verb_name, device_str, is_sink);
- m = pa_alsa_mapping_get(ps, mapping_name);
- if (!m) {
- pa_log("no mapping for %s", mapping_name);
- pa_xfree(mapping_name);
+ if (!m)
return -1;
- }
- pa_log_info("ucm mapping: %s modifier %s", mapping_name, mod_name);
- pa_xfree(mapping_name);
+
+ pa_log_info("UCM mapping: %s modifier %s", m->name, mod_name);
if (!m->ucm_context.ucm_devices && !m->ucm_context.ucm_modifiers) { /* new mapping */
m->ucm_context.ucm_devices = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);