/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtMultimedia module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience // of other Qt classes. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include "qaudiodeviceinfo_win32_p.h" QT_BEGIN_NAMESPACE // For mingw toolchain mmsystem.h only defines half the defines, so add if needed. #ifndef WAVE_FORMAT_44M08 #define WAVE_FORMAT_44M08 0x00000100 #define WAVE_FORMAT_44S08 0x00000200 #define WAVE_FORMAT_44M16 0x00000400 #define WAVE_FORMAT_44S16 0x00000800 #define WAVE_FORMAT_48M08 0x00001000 #define WAVE_FORMAT_48S08 0x00002000 #define WAVE_FORMAT_48M16 0x00004000 #define WAVE_FORMAT_48S16 0x00008000 #define WAVE_FORMAT_96M08 0x00010000 #define WAVE_FORMAT_96S08 0x00020000 #define WAVE_FORMAT_96M16 0x00040000 #define WAVE_FORMAT_96S16 0x00080000 #endif QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode) { device = QLatin1String(dev); this->mode = mode; } QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal() { close(); } bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const { return testSettings(format); } QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const { QAudioFormat nearest; if(mode == QAudio::AudioOutput) { nearest.setFrequency(44100); nearest.setChannels(2); nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(16); nearest.setCodec(QLatin1String("audio/pcm")); } else { nearest.setFrequency(11025); nearest.setChannels(1); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(8); nearest.setCodec(QLatin1String("audio/pcm")); } return nearest; } QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) const { if(testSettings(format)) return format; else return preferredFormat(); } QString QAudioDeviceInfoInternal::deviceName() const { return device; } QStringList QAudioDeviceInfoInternal::codecList() { updateLists(); return codecz; } QList QAudioDeviceInfoInternal::frequencyList() { updateLists(); return freqz; } QList QAudioDeviceInfoInternal::channelsList() { updateLists(); return channelz; } QList QAudioDeviceInfoInternal::sampleSizeList() { updateLists(); return sizez; } QList QAudioDeviceInfoInternal::byteOrderList() { updateLists(); return byteOrderz; } QList QAudioDeviceInfoInternal::sampleTypeList() { updateLists(); return typez; } bool QAudioDeviceInfoInternal::open() { return true; } void QAudioDeviceInfoInternal::close() { } bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const { // Set nearest to closest settings that do work. // See if what is in settings will work (return value). bool failed = false; // For now, just accept only audio/pcm codec if(!format.codec().startsWith(QLatin1String("audio/pcm"))) failed = true; if(!failed && !(format.channels() == 1 || format.channels() == 2)) failed = true; if(!failed) { if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 || format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000)) failed = true; } if(!failed && !(format.sampleSize() == 8 || format.sampleSize() == 16)) failed = true; if(!failed) { // settings work return true; } return false; } void QAudioDeviceInfoInternal::updateLists() { // redo all lists based on current settings bool base = false; bool match = false; DWORD fmt = NULL; QString tmp; if(device.compare(QLatin1String("default")) == 0) base = true; if(mode == QAudio::AudioOutput) { WAVEOUTCAPS woc; unsigned long iNumDevs,i; iNumDevs = waveOutGetNumDevs(); for(i=0;i QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode) { Q_UNUSED(mode) QList devices; if(mode == QAudio::AudioOutput) { WAVEOUTCAPS woc; unsigned long iNumDevs,i; iNumDevs = waveOutGetNumDevs(); for(i=0;i 0) devices.append("default"); return devices; } QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() { return QByteArray("default"); } QByteArray QAudioDeviceInfoInternal::defaultInputDevice() { return QByteArray("default"); } QT_END_NAMESPACE