[pulseaudio-discuss] [PATCH] alsa-ucm: Make combination port names deterministic

Damir Jelić poljarinho at gmail.com
Wed Aug 21 17:02:44 PDT 2013


On Wed, Aug 21, 2013 at 03:00:29PM +0530, Arun Raghavan wrote:
> At the moment, port names combined from multiple devices are generated
> based on the order that the devices are specified in config. This makes
> programmatic use of thsee ports a bit painful, so let's make them be
> combined in alphabetical order.
> ---
>  src/modules/alsa/alsa-ucm.c | 21 ++++++++++++++++++---
>  1 file changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
> index a6ee9a8..d88c80b 100644
> --- a/src/modules/alsa/alsa-ucm.c
> +++ b/src/modules/alsa/alsa-ucm.c
> @@ -671,6 +671,14 @@ int pa_alsa_ucm_get_verb(snd_use_case_mgr_t *uc_mgr, const char *verb_name, cons
>      return 0;
>  }
>  
> +static int pa_alsa_ucm_device_cmp(const void *a, const void *b)
> +{

Opening bracket not on the same line as the expression.

> +    const pa_alsa_ucm_device *d1 = *(pa_alsa_ucm_device **)a;
> +    const pa_alsa_ucm_device *d2 = *(pa_alsa_ucm_device **)b;
> +
> +    return strcmp(pa_proplist_gets(d1->proplist, PA_ALSA_PROP_UCM_NAME), pa_proplist_gets(d2->proplist, PA_ALSA_PROP_UCM_NAME));
> +}
> +
>  static void ucm_add_port_combination(
>          pa_hashmap *hash,
>          pa_alsa_ucm_mapping_context *context,
> @@ -687,9 +695,16 @@ static void ucm_add_port_combination(
>      char *name, *desc;
>      const char *dev_name;
>      const char *direction;
> -    pa_alsa_ucm_device *dev;
> +    pa_alsa_ucm_device *sorted[num], *dev;
> +
> +    for (i = 0; i < num; i++)
> +        sorted[i] = pdevices[i];

Couldn't we use memcpy() here which would possibly be faster?

> +
> +    /* Sort by alphabetical order so as to have a deterministic naming scheme
> +     * for combination ports */
> +    qsort(&sorted[0], num, sizeof(pa_alsa_ucm_device *), pa_alsa_ucm_device_cmp);
>  
> -    dev = pdevices[0];
> +    dev = sorted[0];
>      dev_name = pa_proplist_gets(dev->proplist, PA_ALSA_PROP_UCM_NAME);
>  
>      name = pa_sprintf_malloc("%s%s", is_sink ? PA_UCM_PRE_TAG_OUTPUT : PA_UCM_PRE_TAG_INPUT, dev_name);
> @@ -701,7 +716,7 @@ static void ucm_add_port_combination(
>      for (i = 1; i < num; i++) {
>          char *tmp;
>  
> -        dev = pdevices[i];
> +        dev = sorted[i];
>          dev_name = pa_proplist_gets(dev->proplist, PA_ALSA_PROP_UCM_NAME);
>  
>          tmp = pa_sprintf_malloc("%s+%s", name, dev_name);

Rest looks sensible. I haven't compile or run tested this, just wanted to 
make sure that the coding style error doesn't get in since I posted patches 
that should fix all of these "bracket style" issues.


More information about the pulseaudio-discuss mailing list