225
226
//kdDebug() << "--- Loop: name=" << snd_mixer_selem_id_get_name( sid ) << " , mixerIdx=" << mixerIdx << "------------" << endl;
228
Volume* volPlay = 0, *volCapture = 0;
228
229
QPtrList<QString> enumList;
229
230
if ( snd_mixer_selem_is_enumerated(elem) ) {
230
231
cc = MixDevice::ENUM;
231
vol = new Volume(); // Dummy, unused
232
volPlay = new Volume(); // Dummy, unused
233
volCapture = new Volume();
232
234
mixer_elem_list.append( elem );
233
235
mixer_sid_list.append( sid );
261
263
? Volume::MLEFT : (Volume::ChannelMask)(Volume::MLEFT | Volume::MRIGHT);
262
264
chn = (Volume::ChannelMask) (chn | chnTmp);
263
265
cc = MixDevice::SLIDER;
266
volPlay = new Volume( chn, maxVolumePlay, minVolumePlay );
268
volPlay = new Volume();
265
else if ( snd_mixer_selem_has_capture_volume(elem) ) {
270
if ( snd_mixer_selem_has_capture_volume(elem) ) {
266
271
//kdDebug(67100) << "has_capture_volume()" << endl;
267
272
chnTmp = snd_mixer_selem_is_capture_mono( elem )
268
273
? Volume::MLEFT : (Volume::ChannelMask)(Volume::MLEFT | Volume::MRIGHT );
269
274
chn = (Volume::ChannelMask) (chn | chnTmp);
270
275
cc = MixDevice::SLIDER;
271
// We can have Playback OR Capture. Not both at same time
272
// It's not best coding ever, anyway
273
snd_mixer_selem_get_capture_volume_range( elem, &minVolumePlay, &maxVolumePlay );
277
volCapture = new Volume( chn, maxVolumeRec, minVolumeRec, true );
279
volCapture = new Volume();
276
282
/* Create Volume object. If there is no volume on this device,
277
283
* it will be created with maxVolume == 0 && minVolume == 0 */
278
vol = new Volume( chn, maxVolumePlay, minVolumePlay, maxVolumeRec, minVolumeRec );
279
284
mixer_elem_list.append( elem );
280
285
mixer_sid_list.append( sid );
302
307
} // is ordinary mixer element (NOT an enum)
305
new MixDevice( mixerIdx,
309
MixDevice* md = new MixDevice( mixerIdx,
309
313
snd_mixer_selem_id_get_name( sid ),
312
if (!masterChosen && ct==MixDevice::VOLUME) {
313
// Determine a nicer MasterVolume
314
m_recommendedMaster = md;
317
m_mixDevices.append( md );
320
if (!masterChosen && ct==MixDevice::VOLUME) {
321
// Determine a nicer MasterVolume
322
m_recommendedMaster = md;
326
if ( canCapture && !canRecord ) {
327
MixDevice *mdCapture =
328
new MixDevice( mixerIdx,
332
snd_mixer_selem_id_get_name( sid ),
335
m_mixDevices.append( mdCapture );
318
338
if ( enumList.count() > 0 ) {
319
339
int maxEnumId= enumList.count();
324
344
enumValuesRef.append(enumList.at(i) );
327
m_mixDevices.append( md );
328
347
//kdDebug(67100) << "ALSA create MDW, vol= " << *vol << endl;
333
MixDevice* md = m_mixDevices.at( mixerIdx );
336
return Mixer::ERR_INCOMPATIBLESET;
338
writeVolumeToHW( mixerIdx, md->getVolume() );
355
for ( md = m_mixDevices.first(); md != 0; md = m_mixDevices.next() ) {
356
if ( md->num() == mixerIdx ) {
358
writeVolumeToHW( mixerIdx, md->getVolume() );
363
return Mixer::ERR_INCOMPATIBLESET;
340
366
} // for all elems
683
709
// *** READ PLAYBACK VOLUMES *************
684
if ( snd_mixer_selem_has_playback_volume( elem ) )
710
if ( snd_mixer_selem_has_playback_volume( elem ) && !volume.isCapture() )
686
712
int ret = snd_mixer_selem_get_playback_volume( elem, SND_MIXER_SCHN_FRONT_LEFT, &left );
687
713
if ( ret != 0 ) kdDebug(67100) << "readVolumeFromHW(" << mixerIdx << ") [has_playback_volume,R] failed, errno=" << ret << endl;
700
if ( snd_mixer_selem_has_capture_volume ( elem ) )
726
if ( snd_mixer_selem_has_capture_volume ( elem ) && volume.isCapture() )
702
728
int ret = snd_mixer_selem_get_capture_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, &left );
703
729
if ( ret != 0 ) kdDebug(67100) << "readVolumeFromHW(" << mixerIdx << ") [get_capture_volume,L] failed, errno=" << ret << endl;
740
766
left = volume[ Volume::LEFT ];
741
767
right = volume[ Volume::RIGHT ];
743
if (snd_mixer_selem_has_playback_volume( elem ) ) {
769
if (snd_mixer_selem_has_playback_volume( elem ) && !volume.isCapture() ) {
744
770
snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left );
745
771
if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
746
772
snd_mixer_selem_set_playback_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, right );
748
else if ( snd_mixer_selem_has_capture_volume( elem ) ) {
774
else if ( snd_mixer_selem_has_capture_volume( elem ) && volume.isCapture() ) {
749
775
snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_LEFT, left );
750
776
if ( ! snd_mixer_selem_is_playback_mono ( elem ) )
751
777
snd_mixer_selem_set_capture_volume ( elem, SND_MIXER_SCHN_FRONT_RIGHT, right );