src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
changeset 33 3e2da88830cd
parent 18 2f34d5167611
child 37 758a864f9613
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    60 {
    60 {
    61     handle = 0;
    61     handle = 0;
    62 
    62 
    63     device = QLatin1String(dev);
    63     device = QLatin1String(dev);
    64     this->mode = mode;
    64     this->mode = mode;
       
    65 
       
    66     checkSurround();
    65 }
    67 }
    66 
    68 
    67 QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
    69 QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
    68 {
    70 {
    69     close();
    71     close();
   387         //if(snd_pcm_hw_params_test_rate(handle, params, SAMPLE_RATES[i], dir) == 0)
   389         //if(snd_pcm_hw_params_test_rate(handle, params, SAMPLE_RATES[i], dir) == 0)
   388         freqz.append(SAMPLE_RATES[i]);
   390         freqz.append(SAMPLE_RATES[i]);
   389     }
   391     }
   390     channelz.append(1);
   392     channelz.append(1);
   391     channelz.append(2);
   393     channelz.append(2);
       
   394     if (surround40) channelz.append(4);
       
   395     if (surround51) channelz.append(6);
       
   396     if (surround71) channelz.append(8);
   392     sizez.append(8);
   397     sizez.append(8);
   393     sizez.append(16);
   398     sizez.append(16);
   394     sizez.append(32);
   399     sizez.append(32);
   395     byteOrderz.append(QAudioFormat::LittleEndian);
   400     byteOrderz.append(QAudioFormat::LittleEndian);
   396     byteOrderz.append(QAudioFormat::BigEndian);
   401     byteOrderz.append(QAudioFormat::BigEndian);
   481         return QByteArray();
   486         return QByteArray();
   482 
   487 
   483     return devices.first();
   488     return devices.first();
   484 }
   489 }
   485 
   490 
       
   491 void QAudioDeviceInfoInternal::checkSurround()
       
   492 {
       
   493     QList<QByteArray> devices;
       
   494     surround40 = false;
       
   495     surround51 = false;
       
   496     surround71 = false;
       
   497 
       
   498     void **hints, **n;
       
   499     char *name, *descr, *io;
       
   500 
       
   501     if(snd_device_name_hint(-1, "pcm", &hints) < 0)
       
   502         return;
       
   503 
       
   504     n = hints;
       
   505 
       
   506     while (*n != NULL) {
       
   507         name = snd_device_name_get_hint(*n, "NAME");
       
   508         descr = snd_device_name_get_hint(*n, "DESC");
       
   509         io = snd_device_name_get_hint(*n, "IOID");
       
   510         if((name != NULL) && (descr != NULL)) {
       
   511             QString deviceName = QLatin1String(name);
       
   512             if (mode == QAudio::AudioOutput) {
       
   513                 if(deviceName.contains(QLatin1String("surround40")))
       
   514                     surround40 = true;
       
   515                 if(deviceName.contains(QLatin1String("surround51")))
       
   516                     surround51 = true;
       
   517                 if(deviceName.contains(QLatin1String("surround71")))
       
   518                     surround71 = true;
       
   519             }
       
   520         }
       
   521         if(name != NULL)
       
   522             free(name);
       
   523         if(descr != NULL)
       
   524             free(descr);
       
   525         if(io != NULL)
       
   526             free(io);
       
   527         ++n;
       
   528     }
       
   529     snd_device_name_free_hint(hints);
       
   530 }
       
   531 
   486 QT_END_NAMESPACE
   532 QT_END_NAMESPACE