snd_mixer_class_t **classp);
void snd_mixer_selem_get_id(snd_mixer_elem_t *element,
snd_mixer_selem_id_t *id);
+const char *snd_mixer_selem_get_name(snd_mixer_elem_t *elem);
+unsigned int snd_mixer_selem_get_index(snd_mixer_elem_t *elem);
snd_mixer_elem_t *snd_mixer_find_selem(snd_mixer_t *mixer,
const snd_mixer_selem_id_t *id);
int snd_mixer_selem_set_capture_switch(snd_mixer_elem_t *elem, snd_mixer_selem_channel_id_t channel, int value);
int snd_mixer_selem_set_playback_switch_all(snd_mixer_elem_t *elem, int value);
int snd_mixer_selem_set_capture_switch_all(snd_mixer_elem_t *elem, int value);
-
+void snd_mixer_selem_set_playback_volume_range(snd_mixer_elem_t *elem,
+ long min, long max);
+void snd_mixer_selem_set_capture_volume_range(snd_mixer_elem_t *elem,
+ long min, long max);
#ifdef __cplusplus
}
#endif
snd_pcm_type_t snd_pcm_type(snd_pcm_t *pcm);
int snd_pcm_close(snd_pcm_t *pcm);
+int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm, unsigned int *count);
int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock);
int snd_pcm_async(snd_pcm_t *pcm, int sig, pid_t pid);
unsigned int capture_group;
unsigned int caps;
struct {
+ unsigned int range: 1; /* Forced range */
long min, max;
unsigned int channels;
long vol[32];
}
simple->caps = caps;
simple->str[PLAY].channels = pchannels;
- simple->str[PLAY].min = pmin;
- simple->str[PLAY].max = pmax;
+ if (!simple->str[PLAY].range) {
+ simple->str[PLAY].min = pmin;
+ simple->str[PLAY].max = pmax;
+ }
simple->str[CAPT].channels = cchannels;
- simple->str[CAPT].min = cmin;
- simple->str[CAPT].max = cmax;
+ if (!simple->str[CAPT].range) {
+ simple->str[CAPT].min = cmin;
+ simple->str[CAPT].max = cmax;
+ }
return 0;
}
*id = s->id;
}
+const char *snd_mixer_selem_get_name(snd_mixer_elem_t *elem)
+{
+ selem_t *s;
+ assert(elem);
+ assert(elem->type == SND_MIXER_ELEM_SIMPLE);
+ s = elem->private_data;
+ return s->id.name;
+}
+
+unsigned int snd_mixer_selem_get_index(snd_mixer_elem_t *elem)
+{
+ selem_t *s;
+ assert(elem);
+ assert(elem->type == SND_MIXER_ELEM_SIMPLE);
+ s = elem->private_data;
+ return s->id.index;
+}
+
int snd_mixer_selem_is_playback_mono(snd_mixer_elem_t *elem)
{
selem_t *s;
return p;
}
+void snd_mixer_selem_set_playback_volume_range(snd_mixer_elem_t *elem,
+ long min, long max)
+{
+ selem_t *s;
+ assert(elem);
+ assert(elem->type == SND_MIXER_ELEM_SIMPLE);
+ s = elem->private_data;
+ assert(min != max);
+ s->str[PLAY].range = 1;
+ s->str[PLAY].min = min;
+ s->str[PLAY].max = max;
+}
+
+void snd_mixer_selem_set_capture_volume_range(snd_mixer_elem_t *elem,
+ long min, long max)
+{
+ selem_t *s;
+ assert(elem);
+ assert(elem->type == SND_MIXER_ELEM_SIMPLE);
+ s = elem->private_data;
+ assert(min != max);
+ s->str[CAPT].range = 1;
+ s->str[CAPT].min = min;
+ s->str[CAPT].max = max;
+}
+
return missing;
}
-void *snd_pcm_share_slave_thread(void *data)
+void *snd_pcm_share_thread(void *data)
{
snd_pcm_share_slave_t *slave = data;
snd_pcm_t *spcm = slave->pcm;
pthread_cond_init(&slave->poll_cond, NULL);
list_add_tail(&slave->list, &slaves);
Pthread_mutex_lock(&slave->mutex);
- err = pthread_create(&slave->thread, NULL, snd_pcm_share_slave_thread, slave);
+ err = pthread_create(&slave->thread, NULL, snd_pcm_share_thread, slave);
assert(err == 0);
Pthread_mutex_unlock(&slaves_mutex);
} else {