Lines Matching refs:elem
58 snd_mixer_elem_t *elem;
61 for (elem = snd_mixer_first_elem(mixer);
62 elem;
63 elem = snd_mixer_elem_next(elem)) {
64 if (snd_mixer_elem_get_type(elem) != SND_MIXER_ELEM_SIMPLE)
66 if (snd_mixer_selem_is_enumerated(elem))
68 if (snd_mixer_selem_has_playback_volume_joined(elem) ||
69 snd_mixer_selem_has_capture_volume_joined(elem) ||
70 snd_mixer_selem_has_playback_switch_joined(elem) ||
71 snd_mixer_selem_has_capture_switch_joined(elem))
74 if (snd_mixer_selem_has_playback_channel(elem, supported_channels[i]) ||
75 snd_mixer_selem_has_capture_channel(elem, supported_channels[i]))
81 static bool has_more_than_front_capture_channels(snd_mixer_elem_t *elem)
86 if (snd_mixer_selem_has_capture_channel(elem, supported_channels[i]))
91 static bool has_any_control_channel(snd_mixer_elem_t *elem,
95 return has_channel(elem, channels[0]) ||
96 (channels[1] != SND_MIXER_SCHN_UNKNOWN && has_channel(elem, channels[1]));
99 static bool has_merged_cswitch(snd_mixer_elem_t *elem)
104 pvol = snd_mixer_selem_has_playback_volume(elem);
105 psw = snd_mixer_selem_has_playback_switch(elem);
107 snd_mixer_selem_has_capture_switch(elem) &&
108 !snd_mixer_selem_has_capture_volume(elem)) {
109 if (snd_mixer_selem_has_capture_switch_joined(elem))
111 else if (((pvol && snd_mixer_selem_has_playback_volume_joined(elem)) ||
112 (psw && snd_mixer_selem_has_playback_switch_joined(elem))) &&
113 has_more_than_front_capture_channels(elem))
116 if (has_any_control_channel(elem, control_channels[i], snd_mixer_selem_has_capture_channel) &&
117 !has_any_control_channel(elem, control_channels[i], snd_mixer_selem_has_playback_channel))
125 static unsigned int get_playback_controls_count(snd_mixer_elem_t *elem)
131 has_vol = snd_mixer_selem_has_playback_volume(elem);
132 has_sw = snd_mixer_selem_has_playback_switch(elem);
135 if ((!has_vol || snd_mixer_selem_has_playback_volume_joined(elem)) &&
136 (!has_sw || snd_mixer_selem_has_playback_switch_joined(elem)))
139 if (snd_mixer_selem_has_playback_channel(elem, control_channels[i][0]) ||
141 snd_mixer_selem_has_playback_channel(elem, control_channels[i][1])))
147 static unsigned int get_capture_controls_count(snd_mixer_elem_t *elem)
153 has_vol = snd_mixer_selem_has_capture_volume(elem);
154 has_sw = snd_mixer_selem_has_capture_switch(elem);
156 (view_mode == VIEW_MODE_ALL && has_merged_cswitch(elem)))
158 if ((!has_vol || snd_mixer_selem_has_capture_volume_joined(elem)) &&
159 (!has_sw || snd_mixer_selem_has_capture_switch_joined(elem)))
162 if (snd_mixer_selem_has_capture_channel(elem, control_channels[i][0]) ||
164 snd_mixer_selem_has_capture_channel(elem, control_channels[i][1])))
170 static unsigned int get_controls_count_for_elem(snd_mixer_elem_t *elem)
174 if (snd_mixer_elem_get_type(elem) != SND_MIXER_ELEM_SIMPLE)
176 if (snd_mixer_selem_is_enumerated(elem)) {
179 return snd_mixer_selem_is_enum_capture(elem) ? 0 : 1;
181 return snd_mixer_selem_is_enum_capture(elem) ? 1 : 0;
189 return get_playback_controls_count(elem);
191 return get_capture_controls_count(elem);
194 p = get_playback_controls_count(elem);
195 c = get_capture_controls_count(elem);
196 return has_merged_cswitch(elem) ? p : p + c;
205 index = snd_mixer_selem_get_index(control->elem);
207 control->name = casprintf("%s %u", snd_mixer_selem_get_name(control->elem), index);
209 control->name = cstrdup(snd_mixer_selem_get_name(control->elem));
215 static unsigned int create_controls_for_elem(snd_mixer_elem_t *elem, struct control *control)
227 if (snd_mixer_elem_get_type(elem) != SND_MIXER_ELEM_SIMPLE)
229 if (snd_mixer_selem_is_enumerated(elem)) {
230 if ((view_mode == VIEW_MODE_PLAYBACK && snd_mixer_selem_is_enum_capture(elem)) ||
231 (view_mode == VIEW_MODE_CAPTURE && !snd_mixer_selem_is_enum_capture(elem)))
233 control->elem = elem;
237 if (snd_mixer_selem_get_enum_item(control->elem, (snd_mixer_selem_channel_id_t)i, &enum_index) >= 0)
239 if (snd_mixer_selem_is_active(control->elem))
244 has_pvol = snd_mixer_selem_has_playback_volume(elem);
245 has_psw = snd_mixer_selem_has_playback_switch(elem);
246 has_cvol = snd_mixer_selem_has_capture_volume(elem);
247 has_csw = snd_mixer_selem_has_capture_switch(elem);
248 merged_cswitch = view_mode == VIEW_MODE_ALL && has_merged_cswitch(elem);
250 if ((!has_pvol || snd_mixer_selem_has_playback_volume_joined(elem)) &&
251 (!has_psw || snd_mixer_selem_has_playback_switch_joined(elem))) {
252 control->elem = elem;
263 if (snd_mixer_selem_has_capture_switch_joined(elem)) {
267 if (snd_mixer_selem_has_capture_channel(elem, control_channels[0][0])) {
272 snd_mixer_selem_has_capture_channel(elem, control_channels[0][1])) {
282 if (snd_mixer_selem_is_active(control->elem))
290 snd_mixer_selem_has_playback_channel(elem, supported_channels[i]);
297 control->elem = elem;
300 if (snd_mixer_selem_has_playback_volume_joined(elem)) {
316 if (snd_mixer_selem_has_playback_switch_joined(elem)) {
332 if (snd_mixer_selem_has_capture_switch_joined(elem)) {
336 if (snd_mixer_selem_has_capture_channel(elem, control_channels[i][0])) {
341 snd_mixer_selem_has_capture_channel(elem, control_channels[i][1])) {
359 if (snd_mixer_selem_is_active(control->elem))
374 if ((!has_cvol || snd_mixer_selem_has_capture_volume_joined(elem)) &&
375 (!has_csw || snd_mixer_selem_has_capture_switch_joined(elem))) {
376 control->elem = elem;
385 if (snd_mixer_selem_is_active(control->elem))
393 snd_mixer_selem_has_capture_channel(elem, supported_channels[i]);
400 control->elem = elem;
403 if (snd_mixer_selem_has_capture_volume_joined(elem)) {
419 if (snd_mixer_selem_has_capture_switch_joined(elem)) {
441 if (snd_mixer_selem_is_active(control->elem))
460 snd_mixer_elem_t *elem;
463 elem = snd_mixer_find_selem(mixer, current_selem_id);
464 if (elem)
466 if (controls[i].elem == elem) {
470 if (i >= controls_count || controls[i].elem != elem)
494 snd_mixer_elem_t *elem;
499 for (elem = snd_mixer_first_elem(mixer);
500 elem;
501 elem = snd_mixer_elem_next(elem))
502 controls_count += get_controls_count_for_elem(elem);
507 for (elem = snd_mixer_first_elem(mixer);
508 elem;
509 elem = snd_mixer_elem_next(elem))
510 control += create_controls_for_elem(elem, control);