Move win32 and Alsa audio backends into plugins.
Change-Id: I9835cf5ee97900569f26421a19543b485e933051 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
0ab81ef59f
commit
2d54da2d39
@@ -39,17 +39,8 @@ SOURCES += \
|
|||||||
audio/qaudiodecoder.cpp \
|
audio/qaudiodecoder.cpp \
|
||||||
audio/qaudiohelpers.cpp
|
audio/qaudiohelpers.cpp
|
||||||
|
|
||||||
win32 {
|
|
||||||
PRIVATE_HEADERS += audio/qaudioinput_win32_p.h audio/qaudiooutput_win32_p.h audio/qaudiodeviceinfo_win32_p.h
|
|
||||||
SOURCES += audio/qaudiodeviceinfo_win32_p.cpp \
|
|
||||||
audio/qaudiooutput_win32_p.cpp \
|
|
||||||
audio/qaudioinput_win32_p.cpp
|
|
||||||
LIBS_PRIVATE += -lwinmm -lstrmiids -lole32 -loleaut32
|
|
||||||
}
|
|
||||||
|
|
||||||
unix:!mac {
|
unix:!mac {
|
||||||
config_pulseaudio {
|
config_pulseaudio {
|
||||||
DEFINES += QT_NO_AUDIO_BACKEND
|
|
||||||
CONFIG += link_pkgconfig
|
CONFIG += link_pkgconfig
|
||||||
PKGCONFIG_PRIVATE += libpulse
|
PKGCONFIG_PRIVATE += libpulse
|
||||||
|
|
||||||
@@ -61,15 +52,6 @@ unix:!mac {
|
|||||||
DEFINES += QT_MULTIMEDIA_QAUDIO
|
DEFINES += QT_MULTIMEDIA_QAUDIO
|
||||||
PRIVATE_HEADERS += audio/qsoundeffect_qaudio_p.h
|
PRIVATE_HEADERS += audio/qsoundeffect_qaudio_p.h
|
||||||
SOURCES += audio/qsoundeffect_qaudio_p.cpp
|
SOURCES += audio/qsoundeffect_qaudio_p.cpp
|
||||||
|
|
||||||
config_alsa {
|
|
||||||
DEFINES += HAS_ALSA
|
|
||||||
PRIVATE_HEADERS += audio/qaudiooutput_alsa_p.h audio/qaudioinput_alsa_p.h audio/qaudiodeviceinfo_alsa_p.h
|
|
||||||
SOURCES += audio/qaudiodeviceinfo_alsa_p.cpp \
|
|
||||||
audio/qaudiooutput_alsa_p.cpp \
|
|
||||||
audio/qaudioinput_alsa_p.cpp
|
|
||||||
LIBS_PRIVATE += -lasound
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DEFINES += QT_MULTIMEDIA_QAUDIO
|
DEFINES += QT_MULTIMEDIA_QAUDIO
|
||||||
|
|||||||
@@ -47,18 +47,6 @@
|
|||||||
#include "qmediapluginloader_p.h"
|
#include "qmediapluginloader_p.h"
|
||||||
#include "qaudiodevicefactory_p.h"
|
#include "qaudiodevicefactory_p.h"
|
||||||
|
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if defined(Q_OS_WIN)
|
|
||||||
#include "qaudiodeviceinfo_win32_p.h"
|
|
||||||
#include "qaudiooutput_win32_p.h"
|
|
||||||
#include "qaudioinput_win32_p.h"
|
|
||||||
#elif defined(HAS_ALSA)
|
|
||||||
#include "qaudiodeviceinfo_alsa_p.h"
|
|
||||||
#include "qaudiooutput_alsa_p.h"
|
|
||||||
#include "qaudioinput_alsa_p.h"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
||||||
@@ -132,13 +120,6 @@ public:
|
|||||||
QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
|
QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
|
||||||
{
|
{
|
||||||
QList<QAudioDeviceInfo> devices;
|
QList<QAudioDeviceInfo> devices;
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
foreach (const QByteArray &handle, QAudioDeviceInfoInternal::availableDevices(mode))
|
|
||||||
devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
||||||
QMediaPluginLoader* l = audioLoader();
|
QMediaPluginLoader* l = audioLoader();
|
||||||
foreach (const QString& key, l->keys()) {
|
foreach (const QString& key, l->keys()) {
|
||||||
@@ -165,11 +146,6 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultInputDevice(), QAudio::AudioInput);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return QAudioDeviceInfo();
|
return QAudioDeviceInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,11 +161,6 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
return QAudioDeviceInfo(QLatin1String("builtin"), QAudioDeviceInfoInternal::defaultOutputDevice(), QAudio::AudioOutput);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
return QAudioDeviceInfo();
|
return QAudioDeviceInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,13 +168,6 @@ QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &re
|
|||||||
{
|
{
|
||||||
QAbstractAudioDeviceInfo *rc = 0;
|
QAbstractAudioDeviceInfo *rc = 0;
|
||||||
|
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
if (realm == QLatin1String("builtin"))
|
|
||||||
return new QAudioDeviceInfoInternal(handle, mode);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
||||||
QAudioSystemFactoryInterface* plugin =
|
QAudioSystemFactoryInterface* plugin =
|
||||||
qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(realm));
|
qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(realm));
|
||||||
@@ -229,15 +193,7 @@ QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo con
|
|||||||
{
|
{
|
||||||
if (deviceInfo.isNull())
|
if (deviceInfo.isNull())
|
||||||
return new QNullInputDevice();
|
return new QNullInputDevice();
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
if (deviceInfo.realm() == QLatin1String("builtin")) {
|
|
||||||
QAbstractAudioInput* p = new QAudioInputPrivate(deviceInfo.handle());
|
|
||||||
if (p) p->setFormat(format);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
||||||
QAudioSystemFactoryInterface* plugin =
|
QAudioSystemFactoryInterface* plugin =
|
||||||
qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(deviceInfo.realm()));
|
qobject_cast<QAudioSystemFactoryInterface*>(audioLoader()->instance(deviceInfo.realm()));
|
||||||
@@ -256,15 +212,6 @@ QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo c
|
|||||||
{
|
{
|
||||||
if (deviceInfo.isNull())
|
if (deviceInfo.isNull())
|
||||||
return new QNullOutputDevice();
|
return new QNullOutputDevice();
|
||||||
#ifndef QT_NO_AUDIO_BACKEND
|
|
||||||
#if (defined(Q_OS_WIN) || defined(HAS_ALSA))
|
|
||||||
if (deviceInfo.realm() == QLatin1String("builtin")) {
|
|
||||||
QAbstractAudioOutput* p = new QAudioOutputPrivate(deviceInfo.handle());
|
|
||||||
if (p) p->setFormat(format);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
|
||||||
QAudioSystemFactoryInterface* plugin =
|
QAudioSystemFactoryInterface* plugin =
|
||||||
|
|||||||
3
src/plugins/alsa/alsa.json
Normal file
3
src/plugins/alsa/alsa.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Keys": ["alsa"]
|
||||||
|
}
|
||||||
23
src/plugins/alsa/alsa.pro
Normal file
23
src/plugins/alsa/alsa.pro
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
TARGET = qtaudio_alsa
|
||||||
|
QT += multimedia-private
|
||||||
|
|
||||||
|
PLUGIN_TYPE = audio
|
||||||
|
PLUGIN_CLASS_NAME = QAlsaPlugin
|
||||||
|
load(qt_plugin)
|
||||||
|
|
||||||
|
LIBS += -lasound
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
qalsaplugin.h \
|
||||||
|
qalsaaudiodeviceinfo.h \
|
||||||
|
qalsaaudioinput.h \
|
||||||
|
qalsaaudiooutput.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
qalsaplugin.cpp \
|
||||||
|
qalsaaudiodeviceinfo.cpp \
|
||||||
|
qalsaaudioinput.cpp \
|
||||||
|
qalsaaudiooutput.cpp
|
||||||
|
|
||||||
|
OTHER_FILES += \
|
||||||
|
alsa.json
|
||||||
@@ -50,13 +50,13 @@
|
|||||||
// INTERNAL USE ONLY: Do NOT use for any other purpose.
|
// INTERNAL USE ONLY: Do NOT use for any other purpose.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "qaudiodeviceinfo_alsa_p.h"
|
#include "qalsaaudiodeviceinfo.h"
|
||||||
|
|
||||||
#include <alsa/version.h>
|
#include <alsa/version.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
|
QAlsaAudioDeviceInfo::QAlsaAudioDeviceInfo(QByteArray dev, QAudio::Mode mode)
|
||||||
{
|
{
|
||||||
handle = 0;
|
handle = 0;
|
||||||
|
|
||||||
@@ -66,17 +66,17 @@ QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode
|
|||||||
checkSurround();
|
checkSurround();
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
|
QAlsaAudioDeviceInfo::~QAlsaAudioDeviceInfo()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
|
bool QAlsaAudioDeviceInfo::isFormatSupported(const QAudioFormat& format) const
|
||||||
{
|
{
|
||||||
return testSettings(format);
|
return testSettings(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
|
QAudioFormat QAlsaAudioDeviceInfo::preferredFormat() const
|
||||||
{
|
{
|
||||||
QAudioFormat nearest;
|
QAudioFormat nearest;
|
||||||
if(mode == QAudio::AudioOutput) {
|
if(mode == QAudio::AudioOutput) {
|
||||||
@@ -101,48 +101,48 @@ QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
|
|||||||
return nearest;
|
return nearest;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QAudioDeviceInfoInternal::deviceName() const
|
QString QAlsaAudioDeviceInfo::deviceName() const
|
||||||
{
|
{
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QAudioDeviceInfoInternal::supportedCodecs()
|
QStringList QAlsaAudioDeviceInfo::supportedCodecs()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return codecz;
|
return codecz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedSampleRates()
|
QList<int> QAlsaAudioDeviceInfo::supportedSampleRates()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return sampleRatez;
|
return sampleRatez;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedChannelCounts()
|
QList<int> QAlsaAudioDeviceInfo::supportedChannelCounts()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return channelz;
|
return channelz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedSampleSizes()
|
QList<int> QAlsaAudioDeviceInfo::supportedSampleSizes()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return sizez;
|
return sizez;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::supportedByteOrders()
|
QList<QAudioFormat::Endian> QAlsaAudioDeviceInfo::supportedByteOrders()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return byteOrderz;
|
return byteOrderz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::supportedSampleTypes()
|
QList<QAudioFormat::SampleType> QAlsaAudioDeviceInfo::supportedSampleTypes()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return typez;
|
return typez;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::open()
|
bool QAlsaAudioDeviceInfo::open()
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
QString dev = device;
|
QString dev = device;
|
||||||
@@ -186,14 +186,14 @@ bool QAudioDeviceInfoInternal::open()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioDeviceInfoInternal::close()
|
void QAlsaAudioDeviceInfo::close()
|
||||||
{
|
{
|
||||||
if(handle)
|
if(handle)
|
||||||
snd_pcm_close(handle);
|
snd_pcm_close(handle);
|
||||||
handle = 0;
|
handle = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
|
bool QAlsaAudioDeviceInfo::testSettings(const QAudioFormat& format) const
|
||||||
{
|
{
|
||||||
// Set nearest to closest settings that do work.
|
// Set nearest to closest settings that do work.
|
||||||
// See if what is in settings will work (return value).
|
// See if what is in settings will work (return value).
|
||||||
@@ -301,7 +301,7 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
|
|||||||
return (err == 0);
|
return (err == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioDeviceInfoInternal::updateLists()
|
void QAlsaAudioDeviceInfo::updateLists()
|
||||||
{
|
{
|
||||||
// redo all lists based on current settings
|
// redo all lists based on current settings
|
||||||
sampleRatez.clear();
|
sampleRatez.clear();
|
||||||
@@ -338,7 +338,7 @@ void QAudioDeviceInfoInternal::updateLists()
|
|||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
|
QList<QByteArray> QAlsaAudioDeviceInfo::availableDevices(QAudio::Mode mode)
|
||||||
{
|
{
|
||||||
QList<QByteArray> devices;
|
QList<QByteArray> devices;
|
||||||
QByteArray filter;
|
QByteArray filter;
|
||||||
@@ -400,7 +400,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
|
|||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
|
QByteArray QAlsaAudioDeviceInfo::defaultInputDevice()
|
||||||
{
|
{
|
||||||
QList<QByteArray> devices = availableDevices(QAudio::AudioInput);
|
QList<QByteArray> devices = availableDevices(QAudio::AudioInput);
|
||||||
if(devices.size() == 0)
|
if(devices.size() == 0)
|
||||||
@@ -409,7 +409,7 @@ QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
|
|||||||
return devices.first();
|
return devices.first();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
QByteArray QAlsaAudioDeviceInfo::defaultOutputDevice()
|
||||||
{
|
{
|
||||||
QList<QByteArray> devices = availableDevices(QAudio::AudioOutput);
|
QList<QByteArray> devices = availableDevices(QAudio::AudioOutput);
|
||||||
if(devices.size() == 0)
|
if(devices.size() == 0)
|
||||||
@@ -418,7 +418,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
|||||||
return devices.first();
|
return devices.first();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioDeviceInfoInternal::checkSurround()
|
void QAlsaAudioDeviceInfo::checkSurround()
|
||||||
{
|
{
|
||||||
surround40 = false;
|
surround40 = false;
|
||||||
surround51 = false;
|
surround51 = false;
|
||||||
@@ -51,8 +51,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#ifndef QAUDIODEVICEINFOALSA_H
|
#ifndef QALSAAUDIODEVICEINFO_H
|
||||||
#define QAUDIODEVICEINFOALSA_H
|
#define QALSAAUDIODEVICEINFO_H
|
||||||
|
|
||||||
#include <alsa/asoundlib.h>
|
#include <alsa/asoundlib.h>
|
||||||
|
|
||||||
@@ -61,9 +61,9 @@
|
|||||||
#include <QtCore/qlist.h>
|
#include <QtCore/qlist.h>
|
||||||
#include <QtCore/qdebug.h>
|
#include <QtCore/qdebug.h>
|
||||||
|
|
||||||
#include "qaudio.h"
|
#include <QtMultimedia/qaudio.h>
|
||||||
#include "qaudiodeviceinfo.h"
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include "qaudiosystem.h"
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -72,12 +72,12 @@ const unsigned int MAX_SAMPLE_RATES = 5;
|
|||||||
const unsigned int SAMPLE_RATES[] =
|
const unsigned int SAMPLE_RATES[] =
|
||||||
{ 8000, 11025, 22050, 44100, 48000 };
|
{ 8000, 11025, 22050, 44100, 48000 };
|
||||||
|
|
||||||
class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
|
class QAlsaAudioDeviceInfo : public QAbstractAudioDeviceInfo
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
|
QAlsaAudioDeviceInfo(QByteArray dev,QAudio::Mode mode);
|
||||||
~QAudioDeviceInfoInternal();
|
~QAlsaAudioDeviceInfo();
|
||||||
|
|
||||||
bool testSettings(const QAudioFormat& format) const;
|
bool testSettings(const QAudioFormat& format) const;
|
||||||
void updateLists();
|
void updateLists();
|
||||||
@@ -119,5 +119,4 @@ private:
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif // QALSAAUDIODEVICEINFO_H
|
||||||
|
|
||||||
@@ -51,15 +51,15 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <QtCore/qcoreapplication.h>
|
#include <QtCore/qcoreapplication.h>
|
||||||
#include "qaudioinput_alsa_p.h"
|
#include <QtMultimedia/private/qaudiohelpers_p.h>
|
||||||
#include "qaudiodeviceinfo_alsa_p.h"
|
#include "qalsaaudioinput.h"
|
||||||
#include "qaudiohelpers_p.h"
|
#include "qalsaaudiodeviceinfo.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
//#define DEBUG_AUDIO 1
|
//#define DEBUG_AUDIO 1
|
||||||
|
|
||||||
QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device)
|
QAlsaAudioInput::QAlsaAudioInput(const QByteArray &device)
|
||||||
{
|
{
|
||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
handle = 0;
|
handle = 0;
|
||||||
@@ -86,7 +86,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device)
|
|||||||
connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
|
connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioInputPrivate::~QAudioInputPrivate()
|
QAlsaAudioInput::~QAlsaAudioInput()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
disconnect(timer, SIGNAL(timeout()));
|
disconnect(timer, SIGNAL(timeout()));
|
||||||
@@ -94,38 +94,38 @@ QAudioInputPrivate::~QAudioInputPrivate()
|
|||||||
delete timer;
|
delete timer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setVolume(qreal vol)
|
void QAlsaAudioInput::setVolume(qreal vol)
|
||||||
{
|
{
|
||||||
m_volume = vol;
|
m_volume = vol;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QAudioInputPrivate::volume() const
|
qreal QAlsaAudioInput::volume() const
|
||||||
{
|
{
|
||||||
return m_volume;
|
return m_volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::Error QAudioInputPrivate::error() const
|
QAudio::Error QAlsaAudioInput::error() const
|
||||||
{
|
{
|
||||||
return errorState;
|
return errorState;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::State QAudioInputPrivate::state() const
|
QAudio::State QAlsaAudioInput::state() const
|
||||||
{
|
{
|
||||||
return deviceState;
|
return deviceState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setFormat(const QAudioFormat& fmt)
|
void QAlsaAudioInput::setFormat(const QAudioFormat& fmt)
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
settings = fmt;
|
settings = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioInputPrivate::format() const
|
QAudioFormat QAlsaAudioInput::format() const
|
||||||
{
|
{
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::xrun_recovery(int err)
|
int QAlsaAudioInput::xrun_recovery(int err)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
@@ -166,7 +166,7 @@ int QAudioInputPrivate::xrun_recovery(int err)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::setFormat()
|
int QAlsaAudioInput::setFormat()
|
||||||
{
|
{
|
||||||
snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
|
snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
|
||||||
|
|
||||||
@@ -225,7 +225,7 @@ int QAudioInputPrivate::setFormat()
|
|||||||
: -1;
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::start(QIODevice* device)
|
void QAlsaAudioInput::start(QIODevice* device)
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -244,7 +244,7 @@ void QAudioInputPrivate::start(QIODevice* device)
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIODevice* QAudioInputPrivate::start()
|
QIODevice* QAlsaAudioInput::start()
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -266,7 +266,7 @@ QIODevice* QAudioInputPrivate::start()
|
|||||||
return audioSource;
|
return audioSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::stop()
|
void QAlsaAudioInput::stop()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -277,7 +277,7 @@ void QAudioInputPrivate::stop()
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioInputPrivate::open()
|
bool QAlsaAudioInput::open()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -310,7 +310,7 @@ bool QAudioInputPrivate::open()
|
|||||||
|
|
||||||
|
|
||||||
QString dev = QString(QLatin1String(m_device.constData()));
|
QString dev = QString(QLatin1String(m_device.constData()));
|
||||||
QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput);
|
QList<QByteArray> devices = QAlsaAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
||||||
if(dev.compare(QLatin1String("default")) == 0) {
|
if(dev.compare(QLatin1String("default")) == 0) {
|
||||||
#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
|
#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
|
||||||
if (devices.size() > 0)
|
if (devices.size() > 0)
|
||||||
@@ -472,7 +472,7 @@ bool QAudioInputPrivate::open()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::close()
|
void QAlsaAudioInput::close()
|
||||||
{
|
{
|
||||||
timer->stop();
|
timer->stop();
|
||||||
|
|
||||||
@@ -483,7 +483,7 @@ void QAudioInputPrivate::close()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::checkBytesReady()
|
int QAlsaAudioInput::checkBytesReady()
|
||||||
{
|
{
|
||||||
if(resuming)
|
if(resuming)
|
||||||
bytesAvailable = period_size;
|
bytesAvailable = period_size;
|
||||||
@@ -503,12 +503,12 @@ int QAudioInputPrivate::checkBytesReady()
|
|||||||
return bytesAvailable;
|
return bytesAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::bytesReady() const
|
int QAlsaAudioInput::bytesReady() const
|
||||||
{
|
{
|
||||||
return qMax(bytesAvailable, 0);
|
return qMax(bytesAvailable, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::read(char* data, qint64 len)
|
qint64 QAlsaAudioInput::read(char* data, qint64 len)
|
||||||
{
|
{
|
||||||
// Read in some audio data and write it to QIODevice, pull mode
|
// Read in some audio data and write it to QIODevice, pull mode
|
||||||
if ( !handle )
|
if ( !handle )
|
||||||
@@ -649,7 +649,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::resume()
|
void QAlsaAudioInput::resume()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::SuspendedState) {
|
if(deviceState == QAudio::SuspendedState) {
|
||||||
int err = 0;
|
int err = 0;
|
||||||
@@ -673,32 +673,32 @@ void QAudioInputPrivate::resume()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setBufferSize(int value)
|
void QAlsaAudioInput::setBufferSize(int value)
|
||||||
{
|
{
|
||||||
buffer_size = value;
|
buffer_size = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::bufferSize() const
|
int QAlsaAudioInput::bufferSize() const
|
||||||
{
|
{
|
||||||
return buffer_size;
|
return buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::periodSize() const
|
int QAlsaAudioInput::periodSize() const
|
||||||
{
|
{
|
||||||
return period_size;
|
return period_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setNotifyInterval(int ms)
|
void QAlsaAudioInput::setNotifyInterval(int ms)
|
||||||
{
|
{
|
||||||
intervalTime = qMax(0, ms);
|
intervalTime = qMax(0, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::notifyInterval() const
|
int QAlsaAudioInput::notifyInterval() const
|
||||||
{
|
{
|
||||||
return intervalTime;
|
return intervalTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::processedUSecs() const
|
qint64 QAlsaAudioInput::processedUSecs() const
|
||||||
{
|
{
|
||||||
qint64 result = qint64(1000000) * totalTimeValue /
|
qint64 result = qint64(1000000) * totalTimeValue /
|
||||||
(settings.channelCount()*(settings.sampleSize()/8)) /
|
(settings.channelCount()*(settings.sampleSize()/8)) /
|
||||||
@@ -707,7 +707,7 @@ qint64 QAudioInputPrivate::processedUSecs() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::suspend()
|
void QAlsaAudioInput::suspend()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::ActiveState||resuming) {
|
if(deviceState == QAudio::ActiveState||resuming) {
|
||||||
timer->stop();
|
timer->stop();
|
||||||
@@ -716,7 +716,7 @@ void QAudioInputPrivate::suspend()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::userFeed()
|
void QAlsaAudioInput::userFeed()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
||||||
return;
|
return;
|
||||||
@@ -727,7 +727,7 @@ void QAudioInputPrivate::userFeed()
|
|||||||
deviceReady();
|
deviceReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioInputPrivate::deviceReady()
|
bool QAlsaAudioInput::deviceReady()
|
||||||
{
|
{
|
||||||
if(pullMode) {
|
if(pullMode) {
|
||||||
// reads some audio data and writes it to QIODevice
|
// reads some audio data and writes it to QIODevice
|
||||||
@@ -764,7 +764,7 @@ bool QAudioInputPrivate::deviceReady()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::elapsedUSecs() const
|
qint64 QAlsaAudioInput::elapsedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -772,7 +772,7 @@ qint64 QAudioInputPrivate::elapsedUSecs() const
|
|||||||
return clockStamp.elapsed()*1000;
|
return clockStamp.elapsed()*1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::reset()
|
void QAlsaAudioInput::reset()
|
||||||
{
|
{
|
||||||
if(handle)
|
if(handle)
|
||||||
snd_pcm_reset(handle);
|
snd_pcm_reset(handle);
|
||||||
@@ -780,15 +780,15 @@ void QAudioInputPrivate::reset()
|
|||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::drain()
|
void QAlsaAudioInput::drain()
|
||||||
{
|
{
|
||||||
if(handle)
|
if(handle)
|
||||||
snd_pcm_drain(handle);
|
snd_pcm_drain(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
InputPrivate::InputPrivate(QAudioInputPrivate* audio)
|
InputPrivate::InputPrivate(QAlsaAudioInput* audio)
|
||||||
{
|
{
|
||||||
audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
|
audioDevice = qobject_cast<QAlsaAudioInput*>(audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
InputPrivate::~InputPrivate()
|
InputPrivate::~InputPrivate()
|
||||||
@@ -879,4 +879,4 @@ void RingBuffer::write(char *data, int len)
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qaudioinput_alsa_p.cpp"
|
#include "moc_qalsaaudioinput.cpp"
|
||||||
@@ -63,9 +63,9 @@
|
|||||||
#include <QtCore/qstringlist.h>
|
#include <QtCore/qstringlist.h>
|
||||||
#include <QtCore/qdatetime.h>
|
#include <QtCore/qdatetime.h>
|
||||||
|
|
||||||
#include "qaudio.h"
|
#include <QtMultimedia/qaudio.h>
|
||||||
#include "qaudiodeviceinfo.h"
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include "qaudiosystem.h"
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -95,12 +95,12 @@ private:
|
|||||||
QByteArray m_data;
|
QByteArray m_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
class QAudioInputPrivate : public QAbstractAudioInput
|
class QAlsaAudioInput : public QAbstractAudioInput
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QAudioInputPrivate(const QByteArray &device);
|
QAlsaAudioInput(const QByteArray &device);
|
||||||
~QAudioInputPrivate();
|
~QAlsaAudioInput();
|
||||||
|
|
||||||
qint64 read(char* data, qint64 len);
|
qint64 read(char* data, qint64 len);
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ class InputPrivate : public QIODevice
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
InputPrivate(QAudioInputPrivate* audio);
|
InputPrivate(QAlsaAudioInput* audio);
|
||||||
~InputPrivate();
|
~InputPrivate();
|
||||||
|
|
||||||
qint64 readData( char* data, qint64 len);
|
qint64 readData( char* data, qint64 len);
|
||||||
@@ -179,7 +179,7 @@ public:
|
|||||||
|
|
||||||
void trigger();
|
void trigger();
|
||||||
private:
|
private:
|
||||||
QAudioInputPrivate *audioDevice;
|
QAlsaAudioInput *audioDevice;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -51,15 +51,15 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <QtCore/qcoreapplication.h>
|
#include <QtCore/qcoreapplication.h>
|
||||||
#include "qaudiooutput_alsa_p.h"
|
#include <QtMultimedia/private/qaudiohelpers_p.h>
|
||||||
#include "qaudiodeviceinfo_alsa_p.h"
|
#include "qalsaaudiooutput.h"
|
||||||
#include "qaudiohelpers_p.h"
|
#include "qalsaaudiodeviceinfo.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
//#define DEBUG_AUDIO 1
|
//#define DEBUG_AUDIO 1
|
||||||
|
|
||||||
QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device)
|
QAlsaAudioOutput::QAlsaAudioOutput(const QByteArray &device)
|
||||||
{
|
{
|
||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
handle = 0;
|
handle = 0;
|
||||||
@@ -90,7 +90,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device)
|
|||||||
connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
|
connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioOutputPrivate::~QAudioOutputPrivate()
|
QAlsaAudioOutput::~QAlsaAudioOutput()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
disconnect(timer, SIGNAL(timeout()));
|
disconnect(timer, SIGNAL(timeout()));
|
||||||
@@ -98,38 +98,38 @@ QAudioOutputPrivate::~QAudioOutputPrivate()
|
|||||||
delete timer;
|
delete timer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setVolume(qreal vol)
|
void QAlsaAudioOutput::setVolume(qreal vol)
|
||||||
{
|
{
|
||||||
m_volume = vol;
|
m_volume = vol;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QAudioOutputPrivate::volume() const
|
qreal QAlsaAudioOutput::volume() const
|
||||||
{
|
{
|
||||||
return m_volume;
|
return m_volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::Error QAudioOutputPrivate::error() const
|
QAudio::Error QAlsaAudioOutput::error() const
|
||||||
{
|
{
|
||||||
return errorState;
|
return errorState;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::State QAudioOutputPrivate::state() const
|
QAudio::State QAlsaAudioOutput::state() const
|
||||||
{
|
{
|
||||||
return deviceState;
|
return deviceState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::async_callback(snd_async_handler_t *ahandler)
|
void QAlsaAudioOutput::async_callback(snd_async_handler_t *ahandler)
|
||||||
{
|
{
|
||||||
QAudioOutputPrivate* audioOut;
|
QAlsaAudioOutput* audioOut;
|
||||||
|
|
||||||
audioOut = static_cast<QAudioOutputPrivate*>
|
audioOut = static_cast<QAlsaAudioOutput*>
|
||||||
(snd_async_handler_get_callback_private(ahandler));
|
(snd_async_handler_get_callback_private(ahandler));
|
||||||
|
|
||||||
if (audioOut && (audioOut->deviceState == QAudio::ActiveState || audioOut->resuming))
|
if (audioOut && (audioOut->deviceState == QAudio::ActiveState || audioOut->resuming))
|
||||||
audioOut->feedback();
|
audioOut->feedback();
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::xrun_recovery(int err)
|
int QAlsaAudioOutput::xrun_recovery(int err)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
@@ -167,7 +167,7 @@ int QAudioOutputPrivate::xrun_recovery(int err)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::setFormat()
|
int QAlsaAudioOutput::setFormat()
|
||||||
{
|
{
|
||||||
snd_pcm_format_t pcmformat = SND_PCM_FORMAT_UNKNOWN;
|
snd_pcm_format_t pcmformat = SND_PCM_FORMAT_UNKNOWN;
|
||||||
|
|
||||||
@@ -227,7 +227,7 @@ int QAudioOutputPrivate::setFormat()
|
|||||||
: -1;
|
: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::start(QIODevice* device)
|
void QAlsaAudioOutput::start(QIODevice* device)
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
deviceState = QAudio::StoppedState;
|
deviceState = QAudio::StoppedState;
|
||||||
@@ -252,7 +252,7 @@ void QAudioOutputPrivate::start(QIODevice* device)
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIODevice* QAudioOutputPrivate::start()
|
QIODevice* QAlsaAudioOutput::start()
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
deviceState = QAudio::StoppedState;
|
deviceState = QAudio::StoppedState;
|
||||||
@@ -280,7 +280,7 @@ QIODevice* QAudioOutputPrivate::start()
|
|||||||
return audioSource;
|
return audioSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::stop()
|
void QAlsaAudioOutput::stop()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -290,7 +290,7 @@ void QAudioOutputPrivate::stop()
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioOutputPrivate::open()
|
bool QAlsaAudioOutput::open()
|
||||||
{
|
{
|
||||||
if(opened)
|
if(opened)
|
||||||
return true;
|
return true;
|
||||||
@@ -324,7 +324,7 @@ bool QAudioOutputPrivate::open()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QString dev = QString(QLatin1String(m_device.constData()));
|
QString dev = QString(QLatin1String(m_device.constData()));
|
||||||
QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
|
QList<QByteArray> devices = QAlsaAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
|
||||||
if(dev.compare(QLatin1String("default")) == 0) {
|
if(dev.compare(QLatin1String("default")) == 0) {
|
||||||
#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
|
#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
|
||||||
if (devices.size() > 0)
|
if (devices.size() > 0)
|
||||||
@@ -529,7 +529,7 @@ bool QAudioOutputPrivate::open()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::close()
|
void QAlsaAudioOutput::close()
|
||||||
{
|
{
|
||||||
timer->stop();
|
timer->stop();
|
||||||
|
|
||||||
@@ -547,7 +547,7 @@ void QAudioOutputPrivate::close()
|
|||||||
opened = false;
|
opened = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::bytesFree() const
|
int QAlsaAudioOutput::bytesFree() const
|
||||||
{
|
{
|
||||||
if(resuming)
|
if(resuming)
|
||||||
return period_size;
|
return period_size;
|
||||||
@@ -573,7 +573,7 @@ int QAudioOutputPrivate::bytesFree() const
|
|||||||
return snd_pcm_frames_to_bytes(handle, frames);
|
return snd_pcm_frames_to_bytes(handle, frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
|
qint64 QAlsaAudioOutput::write( const char *data, qint64 len )
|
||||||
{
|
{
|
||||||
// Write out some audio data
|
// Write out some audio data
|
||||||
if ( !handle )
|
if ( !handle )
|
||||||
@@ -623,38 +623,38 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::periodSize() const
|
int QAlsaAudioOutput::periodSize() const
|
||||||
{
|
{
|
||||||
return period_size;
|
return period_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setBufferSize(int value)
|
void QAlsaAudioOutput::setBufferSize(int value)
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
buffer_size = value;
|
buffer_size = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::bufferSize() const
|
int QAlsaAudioOutput::bufferSize() const
|
||||||
{
|
{
|
||||||
return buffer_size;
|
return buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setNotifyInterval(int ms)
|
void QAlsaAudioOutput::setNotifyInterval(int ms)
|
||||||
{
|
{
|
||||||
intervalTime = qMax(0, ms);
|
intervalTime = qMax(0, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::notifyInterval() const
|
int QAlsaAudioOutput::notifyInterval() const
|
||||||
{
|
{
|
||||||
return intervalTime;
|
return intervalTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::processedUSecs() const
|
qint64 QAlsaAudioOutput::processedUSecs() const
|
||||||
{
|
{
|
||||||
return qint64(1000000) * totalTimeValue / settings.sampleRate();
|
return qint64(1000000) * totalTimeValue / settings.sampleRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::resume()
|
void QAlsaAudioOutput::resume()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::SuspendedState) {
|
if(deviceState == QAudio::SuspendedState) {
|
||||||
int err = 0;
|
int err = 0;
|
||||||
@@ -680,18 +680,18 @@ void QAudioOutputPrivate::resume()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setFormat(const QAudioFormat& fmt)
|
void QAlsaAudioOutput::setFormat(const QAudioFormat& fmt)
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
settings = fmt;
|
settings = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioOutputPrivate::format() const
|
QAudioFormat QAlsaAudioOutput::format() const
|
||||||
{
|
{
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::suspend()
|
void QAlsaAudioOutput::suspend()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
|
if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
|
||||||
timer->stop();
|
timer->stop();
|
||||||
@@ -701,7 +701,7 @@ void QAudioOutputPrivate::suspend()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::userFeed()
|
void QAlsaAudioOutput::userFeed()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
||||||
return;
|
return;
|
||||||
@@ -715,13 +715,13 @@ void QAudioOutputPrivate::userFeed()
|
|||||||
deviceReady();
|
deviceReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::feedback()
|
void QAlsaAudioOutput::feedback()
|
||||||
{
|
{
|
||||||
updateAvailable();
|
updateAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QAudioOutputPrivate::updateAvailable()
|
void QAlsaAudioOutput::updateAvailable()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -730,7 +730,7 @@ void QAudioOutputPrivate::updateAvailable()
|
|||||||
bytesAvailable = bytesFree();
|
bytesAvailable = bytesFree();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioOutputPrivate::deviceReady()
|
bool QAlsaAudioOutput::deviceReady()
|
||||||
{
|
{
|
||||||
if(pullMode) {
|
if(pullMode) {
|
||||||
int l = 0;
|
int l = 0;
|
||||||
@@ -805,7 +805,7 @@ bool QAudioOutputPrivate::deviceReady()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::elapsedUSecs() const
|
qint64 QAlsaAudioOutput::elapsedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -813,7 +813,7 @@ qint64 QAudioOutputPrivate::elapsedUSecs() const
|
|||||||
return clockStamp.elapsed()*1000;
|
return clockStamp.elapsed()*1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::reset()
|
void QAlsaAudioOutput::reset()
|
||||||
{
|
{
|
||||||
if(handle)
|
if(handle)
|
||||||
snd_pcm_reset(handle);
|
snd_pcm_reset(handle);
|
||||||
@@ -821,9 +821,9 @@ void QAudioOutputPrivate::reset()
|
|||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
|
OutputPrivate::OutputPrivate(QAlsaAudioOutput* audio)
|
||||||
{
|
{
|
||||||
audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
|
audioDevice = qobject_cast<QAlsaAudioOutput*>(audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputPrivate::~OutputPrivate() {}
|
OutputPrivate::~OutputPrivate() {}
|
||||||
@@ -857,4 +857,4 @@ qint64 OutputPrivate::writeData(const char* data, qint64 len)
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qaudiooutput_alsa_p.cpp"
|
#include "moc_qalsaaudiooutput.cpp"
|
||||||
@@ -62,22 +62,19 @@
|
|||||||
#include <QtCore/qstringlist.h>
|
#include <QtCore/qstringlist.h>
|
||||||
#include <QtCore/qdatetime.h>
|
#include <QtCore/qdatetime.h>
|
||||||
|
|
||||||
#include "qaudio.h"
|
#include <QtMultimedia/qaudio.h>
|
||||||
#include "qaudiodeviceinfo.h"
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include "qaudiosystem.h"
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QAlsaAudioOutput : public QAbstractAudioOutput
|
||||||
class OutputPrivate;
|
|
||||||
|
|
||||||
class QAudioOutputPrivate : public QAbstractAudioOutput
|
|
||||||
{
|
{
|
||||||
friend class OutputPrivate;
|
friend class OutputPrivate;
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QAudioOutputPrivate(const QByteArray &device);
|
QAlsaAudioOutput(const QByteArray &device);
|
||||||
~QAudioOutputPrivate();
|
~QAlsaAudioOutput();
|
||||||
|
|
||||||
qint64 write( const char *data, qint64 len );
|
qint64 write( const char *data, qint64 len );
|
||||||
|
|
||||||
@@ -154,17 +151,17 @@ private:
|
|||||||
|
|
||||||
class OutputPrivate : public QIODevice
|
class OutputPrivate : public QIODevice
|
||||||
{
|
{
|
||||||
friend class QAudioOutputPrivate;
|
friend class QAlsaAudioOutput;
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
OutputPrivate(QAudioOutputPrivate* audio);
|
OutputPrivate(QAlsaAudioOutput* audio);
|
||||||
~OutputPrivate();
|
~OutputPrivate();
|
||||||
|
|
||||||
qint64 readData( char* data, qint64 len);
|
qint64 readData( char* data, qint64 len);
|
||||||
qint64 writeData(const char* data, qint64 len);
|
qint64 writeData(const char* data, qint64 len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QAudioOutputPrivate *audioDevice;
|
QAlsaAudioOutput *audioDevice;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
74
src/plugins/alsa/qalsaplugin.cpp
Normal file
74
src/plugins/alsa/qalsaplugin.cpp
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** 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, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qalsaplugin.h"
|
||||||
|
#include "qalsaaudiodeviceinfo.h"
|
||||||
|
#include "qalsaaudioinput.h"
|
||||||
|
#include "qalsaaudiooutput.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QAlsaPlugin::QAlsaPlugin(QObject *parent)
|
||||||
|
: QAudioSystemPlugin(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QByteArray> QAlsaPlugin::availableDevices(QAudio::Mode mode) const
|
||||||
|
{
|
||||||
|
return QAlsaAudioDeviceInfo::availableDevices(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioInput *QAlsaPlugin::createInput(const QByteArray &device)
|
||||||
|
{
|
||||||
|
return new QAlsaAudioInput(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioOutput *QAlsaPlugin::createOutput(const QByteArray &device)
|
||||||
|
{
|
||||||
|
return new QAlsaAudioOutput(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioDeviceInfo *QAlsaPlugin::createDeviceInfo(const QByteArray &device, QAudio::Mode mode)
|
||||||
|
{
|
||||||
|
return new QAlsaAudioDeviceInfo(device, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
67
src/plugins/alsa/qalsaplugin.h
Normal file
67
src/plugins/alsa/qalsaplugin.h
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** 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, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QALSAPLUGIN_H
|
||||||
|
#define QALSAPLUGIN_H
|
||||||
|
|
||||||
|
#include <QtMultimedia/qaudiosystemplugin.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QAlsaPlugin : public QAudioSystemPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PLUGIN_METADATA(IID "org.qt-project.qt.audiosystemfactory/5.0" FILE "alsa.json")
|
||||||
|
|
||||||
|
public:
|
||||||
|
QAlsaPlugin(QObject *parent = 0);
|
||||||
|
~QAlsaPlugin() {}
|
||||||
|
|
||||||
|
QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QALSAPLUGIN_H
|
||||||
@@ -22,10 +22,9 @@ qnx:!blackberry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
SUBDIRS += audiocapture
|
SUBDIRS += audiocapture \
|
||||||
}
|
windowsaudio
|
||||||
|
|
||||||
win32 {
|
|
||||||
config_directshow: SUBDIRS += directshow
|
config_directshow: SUBDIRS += directshow
|
||||||
config_wmf: SUBDIRS += wmf
|
config_wmf: SUBDIRS += wmf
|
||||||
}
|
}
|
||||||
@@ -37,12 +36,14 @@ unix:!mac:!android {
|
|||||||
SUBDIRS += audiocapture
|
SUBDIRS += audiocapture
|
||||||
}
|
}
|
||||||
|
|
||||||
# v4l is turned off because it is not supported in Qt 5
|
|
||||||
# !maemo*:SUBDIRS += v4l
|
|
||||||
|
|
||||||
config_pulseaudio {
|
config_pulseaudio {
|
||||||
SUBDIRS += pulseaudio
|
SUBDIRS += pulseaudio
|
||||||
|
} else:config_alsa {
|
||||||
|
SUBDIRS += alsa
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# v4l is turned off because it is not supported in Qt 5
|
||||||
|
# !maemo*:SUBDIRS += v4l
|
||||||
}
|
}
|
||||||
|
|
||||||
mac:!simulator {
|
mac:!simulator {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
#include <QtCore/qt_windows.h>
|
#include <QtCore/qt_windows.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
#include "qaudiodeviceinfo_win32_p.h"
|
#include "qwindowsaudiodeviceinfo.h"
|
||||||
|
|
||||||
#if defined(Q_CC_MINGW) && !defined(__MINGW64_VERSION_MAJOR)
|
#if defined(Q_CC_MINGW) && !defined(__MINGW64_VERSION_MAJOR)
|
||||||
struct IBaseFilter; // Needed for strmif.h from stock MinGW.
|
struct IBaseFilter; // Needed for strmif.h from stock MinGW.
|
||||||
@@ -127,7 +127,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
|
QWindowsAudioDeviceInfo::QWindowsAudioDeviceInfo(QByteArray dev, QAudio::Mode mode)
|
||||||
{
|
{
|
||||||
QDataStream ds(&dev, QIODevice::ReadOnly);
|
QDataStream ds(&dev, QIODevice::ReadOnly);
|
||||||
ds >> devId >> device;
|
ds >> devId >> device;
|
||||||
@@ -136,17 +136,17 @@ QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode
|
|||||||
updateLists();
|
updateLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
|
QWindowsAudioDeviceInfo::~QWindowsAudioDeviceInfo()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::isFormatSupported(const QAudioFormat& format) const
|
bool QWindowsAudioDeviceInfo::isFormatSupported(const QAudioFormat& format) const
|
||||||
{
|
{
|
||||||
return testSettings(format);
|
return testSettings(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
|
QAudioFormat QWindowsAudioDeviceInfo::preferredFormat() const
|
||||||
{
|
{
|
||||||
QAudioFormat nearest;
|
QAudioFormat nearest;
|
||||||
if (mode == QAudio::AudioOutput) {
|
if (mode == QAudio::AudioOutput) {
|
||||||
@@ -167,58 +167,58 @@ QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
|
|||||||
return nearest;
|
return nearest;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QAudioDeviceInfoInternal::deviceName() const
|
QString QWindowsAudioDeviceInfo::deviceName() const
|
||||||
{
|
{
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QAudioDeviceInfoInternal::supportedCodecs()
|
QStringList QWindowsAudioDeviceInfo::supportedCodecs()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return codecz;
|
return codecz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedSampleRates()
|
QList<int> QWindowsAudioDeviceInfo::supportedSampleRates()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return sampleRatez;
|
return sampleRatez;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedChannelCounts()
|
QList<int> QWindowsAudioDeviceInfo::supportedChannelCounts()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return channelz;
|
return channelz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> QAudioDeviceInfoInternal::supportedSampleSizes()
|
QList<int> QWindowsAudioDeviceInfo::supportedSampleSizes()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return sizez;
|
return sizez;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::supportedByteOrders()
|
QList<QAudioFormat::Endian> QWindowsAudioDeviceInfo::supportedByteOrders()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return byteOrderz;
|
return byteOrderz;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::supportedSampleTypes()
|
QList<QAudioFormat::SampleType> QWindowsAudioDeviceInfo::supportedSampleTypes()
|
||||||
{
|
{
|
||||||
updateLists();
|
updateLists();
|
||||||
return typez;
|
return typez;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::open()
|
bool QWindowsAudioDeviceInfo::open()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioDeviceInfoInternal::close()
|
void QWindowsAudioDeviceInfo::close()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
|
bool QWindowsAudioDeviceInfo::testSettings(const QAudioFormat& format) const
|
||||||
{
|
{
|
||||||
// Set nearest to closest settings that do work.
|
// Set nearest to closest settings that do work.
|
||||||
// See if what is in settings will work (return value).
|
// See if what is in settings will work (return value).
|
||||||
@@ -305,7 +305,7 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioDeviceInfoInternal::updateLists()
|
void QWindowsAudioDeviceInfo::updateLists()
|
||||||
{
|
{
|
||||||
// redo all lists based on current settings
|
// redo all lists based on current settings
|
||||||
bool match = false;
|
bool match = false;
|
||||||
@@ -407,7 +407,7 @@ void QAudioDeviceInfoInternal::updateLists()
|
|||||||
sampleRatez.prepend(8000);
|
sampleRatez.prepend(8000);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
|
QList<QByteArray> QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode)
|
||||||
{
|
{
|
||||||
Q_UNUSED(mode)
|
Q_UNUSED(mode)
|
||||||
|
|
||||||
@@ -467,7 +467,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
|
|||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
QByteArray QWindowsAudioDeviceInfo::defaultOutputDevice()
|
||||||
{
|
{
|
||||||
QByteArray defaultDevice;
|
QByteArray defaultDevice;
|
||||||
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
||||||
@@ -477,7 +477,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
|
|||||||
return defaultDevice;
|
return defaultDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
|
QByteArray QWindowsAudioDeviceInfo::defaultInputDevice()
|
||||||
{
|
{
|
||||||
QByteArray defaultDevice;
|
QByteArray defaultDevice;
|
||||||
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
QDataStream ds(&defaultDevice, QIODevice::WriteOnly);
|
||||||
@@ -51,16 +51,16 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#ifndef QAUDIODEVICEINFOWIN_H
|
#ifndef QWINDOWSAUDIODEVICEINFO_H
|
||||||
#define QAUDIODEVICEINFOWIN_H
|
#define QWINDOWSAUDIODEVICEINFO_H
|
||||||
|
|
||||||
#include <QtCore/qbytearray.h>
|
#include <QtCore/qbytearray.h>
|
||||||
#include <QtCore/qstringlist.h>
|
#include <QtCore/qstringlist.h>
|
||||||
#include <QtCore/qlist.h>
|
#include <QtCore/qlist.h>
|
||||||
#include <QtCore/qdebug.h>
|
#include <QtCore/qdebug.h>
|
||||||
|
|
||||||
#include <qaudiodeviceinfo.h>
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include <qaudiosystem.h>
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -69,13 +69,13 @@ QT_BEGIN_NAMESPACE
|
|||||||
const unsigned int MAX_SAMPLE_RATES = 5;
|
const unsigned int MAX_SAMPLE_RATES = 5;
|
||||||
const unsigned int SAMPLE_RATES[] = { 8000, 11025, 22050, 44100, 48000 };
|
const unsigned int SAMPLE_RATES[] = { 8000, 11025, 22050, 44100, 48000 };
|
||||||
|
|
||||||
class QAudioDeviceInfoInternal : public QAbstractAudioDeviceInfo
|
class QWindowsAudioDeviceInfo : public QAbstractAudioDeviceInfo
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QAudioDeviceInfoInternal(QByteArray dev,QAudio::Mode mode);
|
QWindowsAudioDeviceInfo(QByteArray dev,QAudio::Mode mode);
|
||||||
~QAudioDeviceInfoInternal();
|
~QWindowsAudioDeviceInfo();
|
||||||
|
|
||||||
bool open();
|
bool open();
|
||||||
void close();
|
void close();
|
||||||
@@ -111,4 +111,4 @@ private:
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif // QWINDOWSAUDIODEVICEINFO_H
|
||||||
@@ -51,13 +51,13 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
#include "qaudioinput_win32_p.h"
|
#include "qwindowsaudioinput.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
//#define DEBUG_AUDIO 1
|
//#define DEBUG_AUDIO 1
|
||||||
|
|
||||||
QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device)
|
QWindowsAudioInput::QWindowsAudioInput(const QByteArray &device)
|
||||||
{
|
{
|
||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
buffer_size = 0;
|
buffer_size = 0;
|
||||||
@@ -78,21 +78,21 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device)
|
|||||||
initMixer();
|
initMixer();
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioInputPrivate::~QAudioInputPrivate()
|
QWindowsAudioInput::~QWindowsAudioInput()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
closeMixer();
|
closeMixer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
|
void QT_WIN_CALLBACK QWindowsAudioInput::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
|
||||||
DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 )
|
DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 )
|
||||||
{
|
{
|
||||||
Q_UNUSED(dwParam1)
|
Q_UNUSED(dwParam1)
|
||||||
Q_UNUSED(dwParam2)
|
Q_UNUSED(dwParam2)
|
||||||
Q_UNUSED(hWaveIn)
|
Q_UNUSED(hWaveIn)
|
||||||
|
|
||||||
QAudioInputPrivate* qAudio;
|
QWindowsAudioInput* qAudio;
|
||||||
qAudio = (QAudioInputPrivate*)(dwInstance);
|
qAudio = (QWindowsAudioInput*)(dwInstance);
|
||||||
if(!qAudio)
|
if(!qAudio)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WAVEHDR* QAudioInputPrivate::allocateBlocks(int size, int count)
|
WAVEHDR* QWindowsAudioInput::allocateBlocks(int size, int count)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
@@ -145,7 +145,7 @@ WAVEHDR* QAudioInputPrivate::allocateBlocks(int size, int count)
|
|||||||
return blocks;
|
return blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray)
|
void QWindowsAudioInput::freeBlocks(WAVEHDR* blockArray)
|
||||||
{
|
{
|
||||||
WAVEHDR* blocks = blockArray;
|
WAVEHDR* blocks = blockArray;
|
||||||
|
|
||||||
@@ -158,12 +158,12 @@ void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray)
|
|||||||
HeapFree(GetProcessHeap(), 0, blockArray);
|
HeapFree(GetProcessHeap(), 0, blockArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::Error QAudioInputPrivate::error() const
|
QAudio::Error QWindowsAudioInput::error() const
|
||||||
{
|
{
|
||||||
return errorState;
|
return errorState;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::State QAudioInputPrivate::state() const
|
QAudio::State QWindowsAudioInput::state() const
|
||||||
{
|
{
|
||||||
return deviceState;
|
return deviceState;
|
||||||
}
|
}
|
||||||
@@ -181,7 +181,7 @@ QAudio::State QAudioInputPrivate::state() const
|
|||||||
#define DRVM_MAPPER_CONSOLEVOICECOM_GET (DRVM_MAPPER+23)
|
#define DRVM_MAPPER_CONSOLEVOICECOM_GET (DRVM_MAPPER+23)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void QAudioInputPrivate::setVolume(qreal volume)
|
void QWindowsAudioInput::setVolume(qreal volume)
|
||||||
{
|
{
|
||||||
for (DWORD i = 0; i < mixerLineControls.cControls; i++) {
|
for (DWORD i = 0; i < mixerLineControls.cControls; i++) {
|
||||||
|
|
||||||
@@ -202,7 +202,7 @@ void QAudioInputPrivate::setVolume(qreal volume)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QAudioInputPrivate::volume() const
|
qreal QWindowsAudioInput::volume() const
|
||||||
{
|
{
|
||||||
DWORD volume = 0;
|
DWORD volume = 0;
|
||||||
for (DWORD i = 0; i < mixerLineControls.cControls; i++) {
|
for (DWORD i = 0; i < mixerLineControls.cControls; i++) {
|
||||||
@@ -233,18 +233,18 @@ qreal QAudioInputPrivate::volume() const
|
|||||||
return volume / 65535.0;
|
return volume / 65535.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setFormat(const QAudioFormat& fmt)
|
void QWindowsAudioInput::setFormat(const QAudioFormat& fmt)
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
settings = fmt;
|
settings = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioInputPrivate::format() const
|
QAudioFormat QWindowsAudioInput::format() const
|
||||||
{
|
{
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::start(QIODevice* device)
|
void QWindowsAudioInput::start(QIODevice* device)
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -263,7 +263,7 @@ void QAudioInputPrivate::start(QIODevice* device)
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIODevice* QAudioInputPrivate::start()
|
QIODevice* QWindowsAudioInput::start()
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -285,7 +285,7 @@ QIODevice* QAudioInputPrivate::start()
|
|||||||
return audioSource;
|
return audioSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::stop()
|
void QWindowsAudioInput::stop()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -294,7 +294,7 @@ void QAudioInputPrivate::stop()
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioInputPrivate::open()
|
bool QWindowsAudioInput::open()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -398,7 +398,7 @@ bool QAudioInputPrivate::open()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::close()
|
void QWindowsAudioInput::close()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -421,7 +421,7 @@ void QAudioInputPrivate::close()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::initMixer()
|
void QWindowsAudioInput::initMixer()
|
||||||
{
|
{
|
||||||
QDataStream ds(&m_device, QIODevice::ReadOnly);
|
QDataStream ds(&m_device, QIODevice::ReadOnly);
|
||||||
quint32 inputDevice;
|
quint32 inputDevice;
|
||||||
@@ -455,13 +455,13 @@ void QAudioInputPrivate::initMixer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::closeMixer()
|
void QWindowsAudioInput::closeMixer()
|
||||||
{
|
{
|
||||||
delete[] mixerLineControls.pamxctrl;
|
delete[] mixerLineControls.pamxctrl;
|
||||||
memset(&mixerLineControls, 0, sizeof(mixerLineControls));
|
memset(&mixerLineControls, 0, sizeof(mixerLineControls));
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::bytesReady() const
|
int QWindowsAudioInput::bytesReady() const
|
||||||
{
|
{
|
||||||
if(period_size == 0 || buffer_size == 0)
|
if(period_size == 0 || buffer_size == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -472,7 +472,7 @@ int QAudioInputPrivate::bytesReady() const
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::read(char* data, qint64 len)
|
qint64 QWindowsAudioInput::read(char* data, qint64 len)
|
||||||
{
|
{
|
||||||
bool done = false;
|
bool done = false;
|
||||||
|
|
||||||
@@ -591,7 +591,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
|
|||||||
return written;
|
return written;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::resume()
|
void QWindowsAudioInput::resume()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::SuspendedState) {
|
if(deviceState == QAudio::SuspendedState) {
|
||||||
deviceState = QAudio::ActiveState;
|
deviceState = QAudio::ActiveState;
|
||||||
@@ -619,32 +619,32 @@ void QAudioInputPrivate::resume()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setBufferSize(int value)
|
void QWindowsAudioInput::setBufferSize(int value)
|
||||||
{
|
{
|
||||||
buffer_size = value;
|
buffer_size = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::bufferSize() const
|
int QWindowsAudioInput::bufferSize() const
|
||||||
{
|
{
|
||||||
return buffer_size;
|
return buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::periodSize() const
|
int QWindowsAudioInput::periodSize() const
|
||||||
{
|
{
|
||||||
return period_size;
|
return period_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::setNotifyInterval(int ms)
|
void QWindowsAudioInput::setNotifyInterval(int ms)
|
||||||
{
|
{
|
||||||
intervalTime = qMax(0, ms);
|
intervalTime = qMax(0, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioInputPrivate::notifyInterval() const
|
int QWindowsAudioInput::notifyInterval() const
|
||||||
{
|
{
|
||||||
return intervalTime;
|
return intervalTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::processedUSecs() const
|
qint64 QWindowsAudioInput::processedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -655,7 +655,7 @@ qint64 QAudioInputPrivate::processedUSecs() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::suspend()
|
void QWindowsAudioInput::suspend()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::ActiveState) {
|
if(deviceState == QAudio::ActiveState) {
|
||||||
waveInReset(hWaveIn);
|
waveInReset(hWaveIn);
|
||||||
@@ -664,7 +664,7 @@ void QAudioInputPrivate::suspend()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::feedback()
|
void QWindowsAudioInput::feedback()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -674,7 +674,7 @@ void QAudioInputPrivate::feedback()
|
|||||||
QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioInputPrivate::deviceReady()
|
bool QWindowsAudioInput::deviceReady()
|
||||||
{
|
{
|
||||||
bytesAvailable = bytesReady();
|
bytesAvailable = bytesReady();
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
@@ -701,7 +701,7 @@ bool QAudioInputPrivate::deviceReady()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioInputPrivate::elapsedUSecs() const
|
qint64 QWindowsAudioInput::elapsedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -709,16 +709,16 @@ qint64 QAudioInputPrivate::elapsedUSecs() const
|
|||||||
return timeStampOpened.elapsed()*1000;
|
return timeStampOpened.elapsed()*1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioInputPrivate::reset()
|
void QWindowsAudioInput::reset()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
if (period_size > 0)
|
if (period_size > 0)
|
||||||
waveFreeBlockCount = buffer_size / period_size;
|
waveFreeBlockCount = buffer_size / period_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputPrivate::InputPrivate(QAudioInputPrivate* audio)
|
InputPrivate::InputPrivate(QWindowsAudioInput* audio)
|
||||||
{
|
{
|
||||||
audioDevice = qobject_cast<QAudioInputPrivate*>(audio);
|
audioDevice = qobject_cast<QWindowsAudioInput*>(audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
InputPrivate::~InputPrivate() {}
|
InputPrivate::~InputPrivate() {}
|
||||||
@@ -749,5 +749,4 @@ void InputPrivate::trigger()
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qaudioinput_win32_p.cpp"
|
#include "moc_qwindowsaudioinput.cpp"
|
||||||
|
|
||||||
@@ -50,8 +50,8 @@
|
|||||||
// We mean it.
|
// We mean it.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef QAUDIOINPUTWIN_H
|
#ifndef QWINDOWSAUDIOINPUT_H
|
||||||
#define QAUDIOINPUTWIN_H
|
#define QWINDOWSAUDIOINPUT_H
|
||||||
|
|
||||||
#include <QtCore/qt_windows.h>
|
#include <QtCore/qt_windows.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
@@ -64,9 +64,9 @@
|
|||||||
#include <QtCore/qdatetime.h>
|
#include <QtCore/qdatetime.h>
|
||||||
#include <QtCore/qmutex.h>
|
#include <QtCore/qmutex.h>
|
||||||
|
|
||||||
#include <qaudio.h>
|
#include <QtMultimedia/qaudio.h>
|
||||||
#include <qaudiodeviceinfo.h>
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include <qaudiosystem.h>
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@@ -81,12 +81,12 @@ QT_BEGIN_NAMESPACE
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class QAudioInputPrivate : public QAbstractAudioInput
|
class QWindowsAudioInput : public QAbstractAudioInput
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QAudioInputPrivate(const QByteArray &device);
|
QWindowsAudioInput(const QByteArray &device);
|
||||||
~QAudioInputPrivate();
|
~QWindowsAudioInput();
|
||||||
|
|
||||||
qint64 read(char* data, qint64 len);
|
qint64 read(char* data, qint64 len);
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ class InputPrivate : public QIODevice
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
InputPrivate(QAudioInputPrivate* audio);
|
InputPrivate(QWindowsAudioInput* audio);
|
||||||
~InputPrivate();
|
~InputPrivate();
|
||||||
|
|
||||||
qint64 readData( char* data, qint64 len);
|
qint64 readData( char* data, qint64 len);
|
||||||
@@ -171,10 +171,9 @@ public:
|
|||||||
|
|
||||||
void trigger();
|
void trigger();
|
||||||
private:
|
private:
|
||||||
QAudioInputPrivate *audioDevice;
|
QWindowsAudioInput *audioDevice;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
// INTERNAL USE ONLY: Do NOT use for any other purpose.
|
// INTERNAL USE ONLY: Do NOT use for any other purpose.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "qaudiooutput_win32_p.h"
|
#include "qwindowsaudiooutput.h"
|
||||||
#include <QtEndian>
|
#include <QtEndian>
|
||||||
|
|
||||||
#ifndef SPEAKER_FRONT_LEFT
|
#ifndef SPEAKER_FRONT_LEFT
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device)
|
QWindowsAudioOutput::QWindowsAudioOutput(const QByteArray &device)
|
||||||
{
|
{
|
||||||
bytesAvailable = 0;
|
bytesAvailable = 0;
|
||||||
buffer_size = 0;
|
buffer_size = 0;
|
||||||
@@ -121,7 +121,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device)
|
|||||||
volumeCache = (qreal)1.;
|
volumeCache = (qreal)1.;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioOutputPrivate::~QAudioOutputPrivate()
|
QWindowsAudioOutput::~QWindowsAudioOutput()
|
||||||
{
|
{
|
||||||
mutex.lock();
|
mutex.lock();
|
||||||
finished = true;
|
finished = true;
|
||||||
@@ -130,15 +130,15 @@ QAudioOutputPrivate::~QAudioOutputPrivate()
|
|||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
|
void CALLBACK QWindowsAudioOutput::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
|
||||||
DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 )
|
DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2 )
|
||||||
{
|
{
|
||||||
Q_UNUSED(dwParam1)
|
Q_UNUSED(dwParam1)
|
||||||
Q_UNUSED(dwParam2)
|
Q_UNUSED(dwParam2)
|
||||||
Q_UNUSED(hWaveOut)
|
Q_UNUSED(hWaveOut)
|
||||||
|
|
||||||
QAudioOutputPrivate* qAudio;
|
QWindowsAudioOutput* qAudio;
|
||||||
qAudio = (QAudioOutputPrivate*)(dwInstance);
|
qAudio = (QWindowsAudioOutput*)(dwInstance);
|
||||||
if(!qAudio)
|
if(!qAudio)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WAVEHDR* QAudioOutputPrivate::allocateBlocks(int size, int count)
|
WAVEHDR* QWindowsAudioOutput::allocateBlocks(int size, int count)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
@@ -186,7 +186,7 @@ WAVEHDR* QAudioOutputPrivate::allocateBlocks(int size, int count)
|
|||||||
return blocks;
|
return blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray)
|
void QWindowsAudioOutput::freeBlocks(WAVEHDR* blockArray)
|
||||||
{
|
{
|
||||||
WAVEHDR* blocks = blockArray;
|
WAVEHDR* blocks = blockArray;
|
||||||
|
|
||||||
@@ -199,18 +199,18 @@ void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray)
|
|||||||
HeapFree(GetProcessHeap(), 0, blockArray);
|
HeapFree(GetProcessHeap(), 0, blockArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudioFormat QAudioOutputPrivate::format() const
|
QAudioFormat QWindowsAudioOutput::format() const
|
||||||
{
|
{
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setFormat(const QAudioFormat& fmt)
|
void QWindowsAudioOutput::setFormat(const QAudioFormat& fmt)
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
settings = fmt;
|
settings = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::start(QIODevice* device)
|
void QWindowsAudioOutput::start(QIODevice* device)
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -229,7 +229,7 @@ void QAudioOutputPrivate::start(QIODevice* device)
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIODevice* QAudioOutputPrivate::start()
|
QIODevice* QWindowsAudioOutput::start()
|
||||||
{
|
{
|
||||||
if(deviceState != QAudio::StoppedState)
|
if(deviceState != QAudio::StoppedState)
|
||||||
close();
|
close();
|
||||||
@@ -251,7 +251,7 @@ QIODevice* QAudioOutputPrivate::start()
|
|||||||
return audioSource;
|
return audioSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::stop()
|
void QWindowsAudioOutput::stop()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -263,7 +263,7 @@ void QAudioOutputPrivate::stop()
|
|||||||
emit stateChanged(deviceState);
|
emit stateChanged(deviceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioOutputPrivate::open()
|
bool QWindowsAudioOutput::open()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -394,7 +394,7 @@ bool QAudioOutputPrivate::open()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::close()
|
void QWindowsAudioOutput::close()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
return;
|
return;
|
||||||
@@ -413,7 +413,7 @@ void QAudioOutputPrivate::close()
|
|||||||
buffer_size = 0;
|
buffer_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::bytesFree() const
|
int QWindowsAudioOutput::bytesFree() const
|
||||||
{
|
{
|
||||||
int buf;
|
int buf;
|
||||||
buf = waveFreeBlockCount*period_size;
|
buf = waveFreeBlockCount*period_size;
|
||||||
@@ -421,33 +421,33 @@ int QAudioOutputPrivate::bytesFree() const
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::periodSize() const
|
int QWindowsAudioOutput::periodSize() const
|
||||||
{
|
{
|
||||||
return period_size;
|
return period_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setBufferSize(int value)
|
void QWindowsAudioOutput::setBufferSize(int value)
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState)
|
if(deviceState == QAudio::StoppedState)
|
||||||
buffer_size = value;
|
buffer_size = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::bufferSize() const
|
int QWindowsAudioOutput::bufferSize() const
|
||||||
{
|
{
|
||||||
return buffer_size;
|
return buffer_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setNotifyInterval(int ms)
|
void QWindowsAudioOutput::setNotifyInterval(int ms)
|
||||||
{
|
{
|
||||||
intervalTime = qMax(0, ms);
|
intervalTime = qMax(0, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAudioOutputPrivate::notifyInterval() const
|
int QWindowsAudioOutput::notifyInterval() const
|
||||||
{
|
{
|
||||||
return intervalTime;
|
return intervalTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::processedUSecs() const
|
qint64 QWindowsAudioOutput::processedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -458,7 +458,7 @@ qint64 QAudioOutputPrivate::processedUSecs() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
|
qint64 QWindowsAudioOutput::write( const char *data, qint64 len )
|
||||||
{
|
{
|
||||||
// Write out some audio data
|
// Write out some audio data
|
||||||
if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
|
if (deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
|
||||||
@@ -539,7 +539,7 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
|
|||||||
return (len-l);
|
return (len-l);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::resume()
|
void QWindowsAudioOutput::resume()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::SuspendedState) {
|
if(deviceState == QAudio::SuspendedState) {
|
||||||
deviceState = QAudio::ActiveState;
|
deviceState = QAudio::ActiveState;
|
||||||
@@ -550,7 +550,7 @@ void QAudioOutputPrivate::resume()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::suspend()
|
void QWindowsAudioOutput::suspend()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) {
|
if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState) {
|
||||||
int delay = (buffer_size-bytesFree())*1000/(settings.sampleRate()
|
int delay = (buffer_size-bytesFree())*1000/(settings.sampleRate()
|
||||||
@@ -563,7 +563,7 @@ void QAudioOutputPrivate::suspend()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::feedback()
|
void QWindowsAudioOutput::feedback()
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_AUDIO
|
#ifdef DEBUG_AUDIO
|
||||||
QTime now(QTime::currentTime());
|
QTime now(QTime::currentTime());
|
||||||
@@ -577,7 +577,7 @@ void QAudioOutputPrivate::feedback()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QAudioOutputPrivate::deviceReady()
|
bool QWindowsAudioOutput::deviceReady()
|
||||||
{
|
{
|
||||||
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
|
||||||
return false;
|
return false;
|
||||||
@@ -677,7 +677,7 @@ bool QAudioOutputPrivate::deviceReady()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 QAudioOutputPrivate::elapsedUSecs() const
|
qint64 QWindowsAudioOutput::elapsedUSecs() const
|
||||||
{
|
{
|
||||||
if (deviceState == QAudio::StoppedState)
|
if (deviceState == QAudio::StoppedState)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -685,17 +685,17 @@ qint64 QAudioOutputPrivate::elapsedUSecs() const
|
|||||||
return timeStampOpened.elapsed()*1000;
|
return timeStampOpened.elapsed()*1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::Error QAudioOutputPrivate::error() const
|
QAudio::Error QWindowsAudioOutput::error() const
|
||||||
{
|
{
|
||||||
return errorState;
|
return errorState;
|
||||||
}
|
}
|
||||||
|
|
||||||
QAudio::State QAudioOutputPrivate::state() const
|
QAudio::State QWindowsAudioOutput::state() const
|
||||||
{
|
{
|
||||||
return deviceState;
|
return deviceState;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::setVolume(qreal v)
|
void QWindowsAudioOutput::setVolume(qreal v)
|
||||||
{
|
{
|
||||||
const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0));
|
const qreal normalizedVolume = qBound(qreal(0.0), v, qreal(1.0));
|
||||||
if (deviceState != QAudio::ActiveState) {
|
if (deviceState != QAudio::ActiveState) {
|
||||||
@@ -709,19 +709,19 @@ void QAudioOutputPrivate::setVolume(qreal v)
|
|||||||
volumeCache = normalizedVolume;
|
volumeCache = normalizedVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QAudioOutputPrivate::volume() const
|
qreal QWindowsAudioOutput::volume() const
|
||||||
{
|
{
|
||||||
return volumeCache;
|
return volumeCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QAudioOutputPrivate::reset()
|
void QWindowsAudioOutput::reset()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputPrivate::OutputPrivate(QAudioOutputPrivate* audio)
|
OutputPrivate::OutputPrivate(QWindowsAudioOutput* audio)
|
||||||
{
|
{
|
||||||
audioDevice = qobject_cast<QAudioOutputPrivate*>(audio);
|
audioDevice = qobject_cast<QWindowsAudioOutput*>(audio);
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputPrivate::~OutputPrivate() {}
|
OutputPrivate::~OutputPrivate() {}
|
||||||
@@ -759,4 +759,4 @@ qint64 OutputPrivate::writeData(const char* data, qint64 len)
|
|||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#include "moc_qaudiooutput_win32_p.cpp"
|
#include "moc_qwindowsaudiooutput.cpp"
|
||||||
@@ -50,8 +50,8 @@
|
|||||||
// We mean it.
|
// We mean it.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef QAUDIOOUTPUTWIN_H
|
#ifndef QWINDOWSAUDIOOUTPUT_H
|
||||||
#define QAUDIOOUTPUTWIN_H
|
#define QWINDOWSAUDIOOUTPUT_H
|
||||||
|
|
||||||
#include <QtCore/qt_windows.h>
|
#include <QtCore/qt_windows.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
@@ -63,9 +63,9 @@
|
|||||||
#include <QtCore/qdatetime.h>
|
#include <QtCore/qdatetime.h>
|
||||||
#include <QtCore/qmutex.h>
|
#include <QtCore/qmutex.h>
|
||||||
|
|
||||||
#include <qaudio.h>
|
#include <QtMultimedia/qaudio.h>
|
||||||
#include <qaudiodeviceinfo.h>
|
#include <QtMultimedia/qaudiodeviceinfo.h>
|
||||||
#include <qaudiosystem.h>
|
#include <QtMultimedia/qaudiosystem.h>
|
||||||
|
|
||||||
// For compat with 4.6
|
// For compat with 4.6
|
||||||
#if !defined(QT_WIN_CALLBACK)
|
#if !defined(QT_WIN_CALLBACK)
|
||||||
@@ -78,13 +78,12 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QWindowsAudioOutput : public QAbstractAudioOutput
|
||||||
class QAudioOutputPrivate : public QAbstractAudioOutput
|
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QAudioOutputPrivate(const QByteArray &device);
|
QWindowsAudioOutput(const QByteArray &device);
|
||||||
~QAudioOutputPrivate();
|
~QWindowsAudioOutput();
|
||||||
|
|
||||||
qint64 write( const char *data, qint64 len );
|
qint64 write( const char *data, qint64 len );
|
||||||
|
|
||||||
@@ -156,17 +155,17 @@ class OutputPrivate : public QIODevice
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
OutputPrivate(QAudioOutputPrivate* audio);
|
OutputPrivate(QWindowsAudioOutput* audio);
|
||||||
~OutputPrivate();
|
~OutputPrivate();
|
||||||
|
|
||||||
qint64 readData( char* data, qint64 len);
|
qint64 readData( char* data, qint64 len);
|
||||||
qint64 writeData(const char* data, qint64 len);
|
qint64 writeData(const char* data, qint64 len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QAudioOutputPrivate *audioDevice;
|
QWindowsAudioOutput *audioDevice;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif // QWINDOWSAUDIOOUTPUT_H
|
||||||
74
src/plugins/windowsaudio/qwindowsaudioplugin.cpp
Normal file
74
src/plugins/windowsaudio/qwindowsaudioplugin.cpp
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** 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, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qwindowsaudioplugin.h"
|
||||||
|
#include "qwindowsaudiodeviceinfo.h"
|
||||||
|
#include "qwindowsaudioinput.h"
|
||||||
|
#include "qwindowsaudiooutput.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QWindowsAudioPlugin::QWindowsAudioPlugin(QObject *parent)
|
||||||
|
: QAudioSystemPlugin(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QByteArray> QWindowsAudioPlugin::availableDevices(QAudio::Mode mode) const
|
||||||
|
{
|
||||||
|
return QWindowsAudioDeviceInfo::availableDevices(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioInput *QWindowsAudioPlugin::createInput(const QByteArray &device)
|
||||||
|
{
|
||||||
|
return new QWindowsAudioInput(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioOutput *QWindowsAudioPlugin::createOutput(const QByteArray &device)
|
||||||
|
{
|
||||||
|
return new QWindowsAudioOutput(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
QAbstractAudioDeviceInfo *QWindowsAudioPlugin::createDeviceInfo(const QByteArray &device, QAudio::Mode mode)
|
||||||
|
{
|
||||||
|
return new QWindowsAudioDeviceInfo(device, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
67
src/plugins/windowsaudio/qwindowsaudioplugin.h
Normal file
67
src/plugins/windowsaudio/qwindowsaudioplugin.h
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** 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, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QWINDOWSAUDIOPLUGIN_H
|
||||||
|
#define QWINDOWSAUDIOPLUGIN_H
|
||||||
|
|
||||||
|
#include <QtMultimedia/qaudiosystemplugin.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QWindowsAudioPlugin : public QAudioSystemPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PLUGIN_METADATA(IID "org.qt-project.qt.audiosystemfactory/5.0" FILE "windowsaudio.json")
|
||||||
|
|
||||||
|
public:
|
||||||
|
QWindowsAudioPlugin(QObject *parent = 0);
|
||||||
|
~QWindowsAudioPlugin() {}
|
||||||
|
|
||||||
|
QList<QByteArray> availableDevices(QAudio::Mode mode) const Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioInput *createInput(const QByteArray &device) Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioOutput *createOutput(const QByteArray &device) Q_DECL_OVERRIDE;
|
||||||
|
QAbstractAudioDeviceInfo *createDeviceInfo(const QByteArray &device, QAudio::Mode mode) Q_DECL_OVERRIDE;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QWINDOWSAUDIOPLUGIN_H
|
||||||
3
src/plugins/windowsaudio/windowsaudio.json
Normal file
3
src/plugins/windowsaudio/windowsaudio.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Keys": ["default"]
|
||||||
|
}
|
||||||
23
src/plugins/windowsaudio/windowsaudio.pro
Normal file
23
src/plugins/windowsaudio/windowsaudio.pro
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
TARGET = qtaudio_windows
|
||||||
|
QT += multimedia-private
|
||||||
|
|
||||||
|
PLUGIN_TYPE = audio
|
||||||
|
PLUGIN_CLASS_NAME = QWindowsAudioPlugin
|
||||||
|
load(qt_plugin)
|
||||||
|
|
||||||
|
LIBS += -lwinmm -lstrmiids -lole32 -loleaut32
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
qwindowsaudioplugin.h \
|
||||||
|
qwindowsaudiodeviceinfo.h \
|
||||||
|
qwindowsaudioinput.h \
|
||||||
|
qwindowsaudiooutput.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
qwindowsaudioplugin.cpp \
|
||||||
|
qwindowsaudiodeviceinfo.cpp \
|
||||||
|
qwindowsaudioinput.cpp \
|
||||||
|
qwindowsaudiooutput.cpp
|
||||||
|
|
||||||
|
OTHER_FILES += \
|
||||||
|
windowsaudio.json
|
||||||
Reference in New Issue
Block a user