comparison libao2/ao_alsa.c @ 12811:d5f8efddac6c

volume calc fixes for mixer, by reimar dffinger, 10l reverse by me
author joyping
date Wed, 14 Jul 2004 00:48:26 +0000
parents 0b154063a3ca
children e28849cfac27
comparison
equal deleted inserted replaced
12810:f4711a685291 12811:d5f8efddac6c
150 snd_mixer_close(handle); 150 snd_mixer_close(handle);
151 return CONTROL_ERROR; 151 return CONTROL_ERROR;
152 } 152 }
153 153
154 snd_mixer_selem_get_playback_volume_range(elem,&pmin,&pmax); 154 snd_mixer_selem_get_playback_volume_range(elem,&pmin,&pmax);
155 f_multi = (100 / (float)pmax - pmin); 155 f_multi = (100 / (float)(pmax - pmin));
156 156
157 if (cmd == AOCONTROL_SET_VOLUME) { 157 if (cmd == AOCONTROL_SET_VOLUME) {
158 158
159 set_vol = (vol->left + pmin) / f_multi + 0.5; 159 set_vol = vol->left / f_multi + pmin + 0.5;
160 160
161 //setting channels 161 //setting channels
162 if ((err = snd_mixer_selem_set_playback_volume(elem, 0, set_vol)) < 0) { 162 if ((err = snd_mixer_selem_set_playback_volume(elem, 0, set_vol)) < 0) {
163 mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: error setting left channel, %s\n", 163 mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: error setting left channel, %s\n",
164 snd_strerror(err)); 164 snd_strerror(err));
165 return CONTROL_ERROR; 165 return CONTROL_ERROR;
166 } 166 }
167 mp_msg(MSGT_AO,MSGL_DBG2,"left=%li, ", set_vol); 167 mp_msg(MSGT_AO,MSGL_DBG2,"left=%li, ", set_vol);
168 168
169 set_vol = (vol->right + pmin) / f_multi + 0.5; 169 set_vol = vol->right / f_multi + pmin + 0.5;
170 170
171 if ((err = snd_mixer_selem_set_playback_volume(elem, 1, set_vol)) < 0) { 171 if ((err = snd_mixer_selem_set_playback_volume(elem, 1, set_vol)) < 0) {
172 mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: error setting right channel, %s\n", 172 mp_msg(MSGT_AO,MSGL_ERR,"alsa-control: error setting right channel, %s\n",
173 snd_strerror(err)); 173 snd_strerror(err));
174 return CONTROL_ERROR; 174 return CONTROL_ERROR;
176 mp_msg(MSGT_AO,MSGL_DBG2,"right=%li, pmin=%li, pmax=%li, mult=%f\n", 176 mp_msg(MSGT_AO,MSGL_DBG2,"right=%li, pmin=%li, pmax=%li, mult=%f\n",
177 set_vol, pmin, pmax, f_multi); 177 set_vol, pmin, pmax, f_multi);
178 } 178 }
179 else { 179 else {
180 snd_mixer_selem_get_playback_volume(elem, 0, &get_vol); 180 snd_mixer_selem_get_playback_volume(elem, 0, &get_vol);
181 vol->left = (get_vol * f_multi) - pmin; 181 vol->left = (get_vol - pmin) * f_multi;
182 snd_mixer_selem_get_playback_volume(elem, 1, &get_vol); 182 snd_mixer_selem_get_playback_volume(elem, 1, &get_vol);
183 vol->right = (get_vol * f_multi) - pmin; 183 vol->right = (get_vol - pmin) * f_multi;
184 184
185 mp_msg(MSGT_AO,MSGL_DBG2,"left=%f, right=%f\n",vol->left,vol->right); 185 mp_msg(MSGT_AO,MSGL_DBG2,"left=%f, right=%f\n",vol->left,vol->right);
186 } 186 }
187 snd_mixer_close(handle); 187 snd_mixer_close(handle);
188 return CONTROL_OK; 188 return CONTROL_OK;
1101 if (ret <= 0) { 1101 if (ret <= 0) {
1102 xrun("space"); 1102 xrun("space");
1103 } 1103 }
1104 } 1104 }
1105 1105
1106 if (snd_pcm_status_get_state(status) == SND_PCM_STATE_RUNNING) 1106 if (snd_pcm_status_get_state(status) != SND_PCM_STATE_RUNNING)
1107 mp_msg(MSGT_AO,MSGL_V,"alsa-space: free space = %i, status=%i, %s --\n", ret, status, str_status); 1107 mp_msg(MSGT_AO,MSGL_V,"alsa-space: free space = %i, status=%i, %s --\n", ret, status, str_status);
1108 1108
1109 if (ret < 0) { 1109 if (ret < 0) {
1110 mp_msg(MSGT_AO,MSGL_ERR,"negative value!!\n"); 1110 mp_msg(MSGT_AO,MSGL_ERR,"negative value!!\n");
1111 ret = 0; 1111 ret = 0;