]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Added range specification to simple mixer. Fixes to alsamixer. Added mixer support...
authorAbramo Bagnara <abramo@alsa-project.org>
Sun, 18 Feb 2001 17:56:37 +0000 (17:56 +0000)
committerAbramo Bagnara <abramo@alsa-project.org>
Sun, 18 Feb 2001 17:56:37 +0000 (17:56 +0000)
include/mixer.h
include/pcm.h
src/mixer/simple.c
src/pcm/pcm_share.c

index 305491c7823554d3c9c07d869ef6e83052152004..5b223ed186c2610e1b45607516754b0c25bb6440 100644 (file)
@@ -105,6 +105,8 @@ int snd_mixer_selem_register(snd_mixer_t *mixer, void *arg,
                             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);
 
@@ -141,7 +143,10 @@ int snd_mixer_selem_set_playback_switch(snd_mixer_elem_t *elem, snd_mixer_selem_
 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
index 920ce49ea25ccf1357b0d44345d41842a5ecab43..4eb6ef0bac49ef78aaf72cafdbf2e2dc4d542638 100644 (file)
@@ -216,6 +216,7 @@ int snd_pcm_open(snd_pcm_t **pcm, const char *name,
 
 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);
index 62352833367b378c44eaab4b08b9066df1a19973..6acf94731165446804b322eb1c564182945f203a 100644 (file)
@@ -75,6 +75,7 @@ typedef struct _selem {
        unsigned int capture_group;
        unsigned int caps;
        struct {
+               unsigned int range: 1;  /* Forced range */
                long min, max;
                unsigned int channels;
                long vol[32];
@@ -593,11 +594,15 @@ static int simple_update(snd_mixer_elem_t *melem)
        }
        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;
 }         
 
@@ -900,6 +905,24 @@ void snd_mixer_selem_get_id(snd_mixer_elem_t *elem,
        *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;
@@ -1367,3 +1390,29 @@ const char *snd_mixer_selem_channel_name(snd_mixer_selem_channel_id_t channel)
        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;
+}
+
index 11b2c232910843c5ba62da8f721131319b12ee5c..2e57eb7c01d9da01a474b9355f1969d1d72aacba 100644 (file)
@@ -338,7 +338,7 @@ static snd_pcm_uframes_t _snd_pcm_share_slave_missing(snd_pcm_share_slave_t *sla
        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;
@@ -1303,7 +1303,7 @@ int snd_pcm_share_open(snd_pcm_t **pcmp, const char *name, const char *sname,
                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 {