[alsa-devel] What is wrong in this code.

Anders Gnistrup agn at datarespons.dk
Wed Oct 19 09:05:16 CEST 2011

From: Clemens Ladisch [clemens at ladisch.de]
Sent: Tuesday, October 18, 2011 5:11 PM
To: Anders Gnistrup
Cc: alsa-devel at alsa-project.org
Subject: Re: [alsa-devel] What is wrong in this code.

Anders Gnistrup wrote:
> The code works just as expected when using the:
>     snd_ctl_elem_id_set_name(id, "PCM Playback Volume");
> But when I use the snd_ctl_elem_id_set_numid(id, numid); (with numid=23) it fails.
>       ...
>       snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
>       //snd_ctl_elem_id_set_numid(id, numid);
>       snd_ctl_elem_id_set_name(id, "PCM Playback Volume");

When using the numid to access elements, it must be the only field
that is set in the elem id.

Hello Clemens

I have tried just that, but is still does not work. It was my first try, but in frustration I shifted it to snd_ctl_elem_id_set_name.
If both is set (numid,name) it still works, but I think the numid is silently ignored.

There might be a known bug/'not implemented feature' in the libalsa version I got. From the amixer.c source code in alsa-utils I have found this:

	snd_ctl_elem_info_get_id(info, id);	/* FIXME: Remove it when hctl find works ok !!! */
	type = snd_ctl_elem_info_get_type(info);
	count = snd_ctl_elem_info_get_count(info);
	snd_ctl_elem_value_set_id(control, id);

In the function "cset". I assume that FIXME note function is "snd_hctl_find_elem".
The cset function also shows a valid path to get around the problem.
I have downloaded alsa-utils version and the note is still present.

Have the problem with the /* FIXME: Remove it when hctl find works ok !!! */ been solved in latest git release of alsalib?


More information about the Alsa-devel mailing list