summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/audio/qaudio.cpp24
-rw-r--r--src/multimedia/audio/qaudio.h2
-rw-r--r--src/multimedia/audio/qaudiodevicefactory.cpp22
-rw-r--r--src/multimedia/audio/qaudiodevicefactory_p.h2
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.cpp8
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.h2
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp84
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_alsa_p.h2
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp2
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_mac_p.h2
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp3
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_win32_p.h2
-rw-r--r--src/multimedia/audio/qaudioengine.cpp8
-rw-r--r--src/multimedia/audio/qaudioengine.h8
-rw-r--r--src/multimedia/audio/qaudioengineplugin.h4
-rw-r--r--src/multimedia/audio/qaudioformat.cpp13
-rw-r--r--src/multimedia/audio/qaudioformat.h2
-rw-r--r--src/multimedia/audio/qaudioinput.cpp64
-rw-r--r--src/multimedia/audio/qaudioinput.h8
-rw-r--r--src/multimedia/audio/qaudioinput_alsa_p.cpp64
-rw-r--r--src/multimedia/audio/qaudioinput_alsa_p.h5
-rw-r--r--src/multimedia/audio/qaudioinput_mac_p.cpp24
-rw-r--r--src/multimedia/audio/qaudioinput_mac_p.h4
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.cpp41
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.h4
-rw-r--r--src/multimedia/audio/qaudiooutput.cpp52
-rw-r--r--src/multimedia/audio/qaudiooutput.h8
-rw-r--r--src/multimedia/audio/qaudiooutput_alsa_p.cpp66
-rw-r--r--src/multimedia/audio/qaudiooutput_alsa_p.h5
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.cpp26
-rw-r--r--src/multimedia/audio/qaudiooutput_mac_p.h4
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp28
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.h4
-rw-r--r--src/multimedia/video/qabstractvideosurface.cpp60
-rw-r--r--src/multimedia/video/qabstractvideosurface.h8
-rw-r--r--src/multimedia/video/qabstractvideosurface_p.h5
-rw-r--r--src/multimedia/video/qimagevideobuffer.cpp2
-rw-r--r--src/multimedia/video/qvideoframe.cpp34
-rw-r--r--src/multimedia/video/qvideoframe.h6
-rw-r--r--src/multimedia/video/qvideosurfaceformat.cpp119
-rw-r--r--src/multimedia/video/qvideosurfaceformat.h26
41 files changed, 475 insertions, 382 deletions
diff --git a/src/multimedia/audio/qaudio.cpp b/src/multimedia/audio/qaudio.cpp
index 04378d4c9e..b687f3411f 100644
--- a/src/multimedia/audio/qaudio.cpp
+++ b/src/multimedia/audio/qaudio.cpp
@@ -71,23 +71,23 @@ public:
/*!
\enum QAudio::Error
- \value NoError No errors have occurred
- \value OpenError An error opening the audio device
- \value IOError An error occurred during read/write of audio device
- \value UnderrunError Audio data is not being fed to the audio device at a fast enough rate
- \value FatalError A non-recoverable error has occurred, the audio device is not usable at this time.
+ \value NoError No errors have occurred
+ \value OpenError An error opening the audio device
+ \value IOError An error occurred during read/write of audio device
+ \value UnderrunError Audio data is not being fed to the audio device at a fast enough rate
+ \value FatalError A non-recoverable error has occurred, the audio device is not usable at this time.
*/
/*!
\enum QAudio::State
- \value ActiveState Audio data is being processed, this state is set after start() is called
- and while audio data is available to be processed.
- \value SuspendState The audio device is in a suspended state, this state will only be entered
- after suspend() is called.
- \value StopState The audio device is closed, not processing any audio data
- \value IdleState The QIODevice passed in has no data and audio system's buffer is empty, this state
- is set after start() is called and while no audio data is available to be processed.
+ \value ActiveState Audio data is being processed, this state is set after start() is called
+ and while audio data is available to be processed.
+ \value SuspendedState The audio device is in a suspended state, this state will only be entered
+ after suspend() is called.
+ \value StoppedState The audio device is closed, not processing any audio data
+ \value IdleState The QIODevice passed in has no data and audio system's buffer is empty, this state
+ is set after start() is called and while no audio data is available to be processed.
*/
/*!
diff --git a/src/multimedia/audio/qaudio.h b/src/multimedia/audio/qaudio.h
index a66f0b182c..531e1a7968 100644
--- a/src/multimedia/audio/qaudio.h
+++ b/src/multimedia/audio/qaudio.h
@@ -56,7 +56,7 @@ QT_MODULE(Multimedia)
namespace QAudio
{
enum Error { NoError, OpenError, IOError, UnderrunError, FatalError };
- enum State { ActiveState, SuspendState, StopState, IdleState };
+ enum State { ActiveState, SuspendedState, StoppedState, IdleState };
enum Mode { AudioInput, AudioOutput };
}
diff --git a/src/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/audio/qaudiodevicefactory.cpp
index 8804fb6e51..89e439419e 100644
--- a/src/multimedia/audio/qaudiodevicefactory.cpp
+++ b/src/multimedia/audio/qaudiodevicefactory.cpp
@@ -94,10 +94,10 @@ public:
int bufferSize() const { return 0; }
void setNotifyInterval(int ) {}
int notifyInterval() const { return 0; }
- qint64 totalTime() const { return 0; }
- qint64 clock() const { return 0; }
+ qint64 processedUSecs() const { return 0; }
+ qint64 elapsedUSecs() const { return 0; }
QAudio::Error error() const { return QAudio::OpenError; }
- QAudio::State state() const { return QAudio::StopState; }
+ QAudio::State state() const { return QAudio::StoppedState; }
QAudioFormat format() const { return QAudioFormat(); }
};
@@ -115,18 +115,18 @@ public:
int bufferSize() const { return 0; }
void setNotifyInterval(int ) {}
int notifyInterval() const { return 0; }
- qint64 totalTime() const { return 0; }
- qint64 clock() const { return 0; }
+ qint64 processedUSecs() const { return 0; }
+ qint64 elapsedUSecs() const { return 0; }
QAudio::Error error() const { return QAudio::OpenError; }
- QAudio::State state() const { return QAudio::StopState; }
+ QAudio::State state() const { return QAudio::StoppedState; }
QAudioFormat format() const { return QAudioFormat(); }
};
-QList<QAudioDeviceInfo> QAudioDeviceFactory::deviceList(QAudio::Mode mode)
+QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
{
QList<QAudioDeviceInfo> devices;
#if (defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(HAS_ALSA))
- foreach (const QByteArray &handle, QAudioDeviceInfoInternal::deviceList(mode))
+ foreach (const QByteArray &handle, QAudioDeviceInfoInternal::availableDevices(mode))
devices << QAudioDeviceInfo(QLatin1String("builtin"), handle, mode);
#endif
QFactoryLoader* l = loader();
@@ -134,7 +134,7 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::deviceList(QAudio::Mode mode)
foreach (QString const& key, l->keys()) {
QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(l->instance(key));
if (plugin) {
- foreach (QByteArray const& handle, plugin->deviceList(mode))
+ foreach (QByteArray const& handle, plugin->availableDevices(mode))
devices << QAudioDeviceInfo(key, handle, mode);
}
@@ -149,7 +149,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin) {
- QList<QByteArray> list = plugin->deviceList(QAudio::AudioInput);
+ QList<QByteArray> list = plugin->availableDevices(QAudio::AudioInput);
if (list.size() > 0)
return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
}
@@ -164,7 +164,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin) {
- QList<QByteArray> list = plugin->deviceList(QAudio::AudioOutput);
+ QList<QByteArray> list = plugin->availableDevices(QAudio::AudioOutput);
if (list.size() > 0)
return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
}
diff --git a/src/multimedia/audio/qaudiodevicefactory_p.h b/src/multimedia/audio/qaudiodevicefactory_p.h
index 008e4a8b23..2466455405 100644
--- a/src/multimedia/audio/qaudiodevicefactory_p.h
+++ b/src/multimedia/audio/qaudiodevicefactory_p.h
@@ -72,7 +72,7 @@ class QAbstractAudioDeviceInfo;
class QAudioDeviceFactory
{
public:
- static QList<QAudioDeviceInfo> deviceList(QAudio::Mode mode);
+ static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
index dce2884762..5e3adcb434 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo.cpp
@@ -121,7 +121,7 @@ public:
classes that communicate with the device--such as
QAudioInput, and QAudioOutput. The static
functions defaultInputDevice(), defaultOutputDevice(), and
- deviceList() let you get a list of all available
+ availableDevices() let you get a list of all available
devices. Devices are fetch according to the value of mode
this is specified by the QAudio::Mode enum.
The QAudioDeviceInfo returned are only valid for the QAudio::Mode.
@@ -129,7 +129,7 @@ public:
For instance:
\code
- foreach(const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::deviceList(QAudio::AudioOutput))
+ foreach(const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
qDebug() << "Device name: " << deviceInfo.deviceName();
\endcode
@@ -327,9 +327,9 @@ QAudioDeviceInfo QAudioDeviceInfo::defaultOutputDevice()
Returns a list of audio devices that support \a mode.
*/
-QList<QAudioDeviceInfo> QAudioDeviceInfo::deviceList(QAudio::Mode mode)
+QList<QAudioDeviceInfo> QAudioDeviceInfo::availableDevices(QAudio::Mode mode)
{
- return QAudioDeviceFactory::deviceList(mode);
+ return QAudioDeviceFactory::availableDevices(mode);
}
diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h
index 53b9904cac..5c7cb9858f 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.h
+++ b/src/multimedia/audio/qaudiodeviceinfo.h
@@ -92,7 +92,7 @@ public:
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
- static QList<QAudioDeviceInfo> deviceList(QAudio::Mode mode);
+ static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
private:
QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
index 55020a61cd..9645fa8e61 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp
@@ -52,6 +52,8 @@
#include "qaudiodeviceinfo_alsa_p.h"
+#include <alsa/version.h>
+
QT_BEGIN_NAMESPACE
QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode)
@@ -150,9 +152,30 @@ bool QAudioDeviceInfoInternal::open()
{
int err = 0;
QString dev = device;
- if(!dev.contains(QLatin1String("default"))) {
- int idx = snd_card_get_index(dev.toLocal8Bit().constData());
+ QList<QByteArray> devices = availableDevices(mode);
+
+ if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(devices.first().constData());
+#else
+ dev = QLatin1String("hw:0,0");
+#endif
+ } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = device;
+#else
+ int idx = 0;
+ char *name;
+
+ QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
+
+ while(snd_card_get_name(idx,&name) == 0) {
+ if(dev.contains(QLatin1String(name)))
+ break;
+ idx++;
+ }
dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
}
if(mode == QAudio::AudioOutput) {
err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
@@ -182,10 +205,30 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
snd_pcm_hw_params_t *params;
QString dev = device;
- // open()
- if(!dev.contains(QLatin1String("default"))) {
- int idx = snd_card_get_index(dev.toLocal8Bit().constData());
+ QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
+
+ if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(devices.first().constData());
+#else
+ dev = QLatin1String("hw:0,0");
+#endif
+ } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = device;
+#else
+ int idx = 0;
+ char *name;
+
+ QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1);
+
+ while(snd_card_get_name(idx,&name) == 0) {
+ if(shortName.compare(QLatin1String(name)) == 0)
+ break;
+ idx++;
+ }
dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
}
if(mode == QAudio::AudioOutput) {
err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
@@ -358,11 +401,12 @@ void QAudioDeviceInfoInternal::updateLists()
close();
}
-QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode)
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
{
QList<QByteArray> devices;
QByteArray filter;
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
// Create a list of all current audio devices that support mode
void **hints, **n;
char *name, *descr, *io;
@@ -384,12 +428,10 @@ QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode)
descr = snd_device_name_get_hint(*n, "DESC");
io = snd_device_name_get_hint(*n, "IOID");
if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) {
- QString str = QLatin1String(name);
-
- if(str.contains(QLatin1String("default"))) {
- int pos = str.indexOf(QLatin1String("="),0);
- devices.append(str.mid(pos+1).toLocal8Bit().constData());
- }
+ QString deviceName = QLatin1String(name);
+ QString deviceDescription = QLatin1String(descr);
+ if(deviceDescription.contains(QLatin1String("Default Audio Device")))
+ devices.append(deviceName.toLocal8Bit().constData());
}
if(name != NULL)
free(name);
@@ -404,26 +446,36 @@ QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode)
if(devices.size() > 0) {
devices.append("default");
}
+#else
+ int idx = 0;
+ char* name;
+ while(snd_card_get_name(idx,&name) == 0) {
+ devices.append(name);
+ idx++;
+ }
+ if (idx > 0)
+ devices.append("default");
+#endif
return devices;
}
QByteArray QAudioDeviceInfoInternal::defaultInputDevice()
{
- QList<QByteArray> devices = deviceList(QAudio::AudioInput);
+ QList<QByteArray> devices = availableDevices(QAudio::AudioInput);
if(devices.size() == 0)
return QByteArray();
- return QByteArray("default");
+ return devices.first();
}
QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
{
- QList<QByteArray> devices = deviceList(QAudio::AudioOutput);
+ QList<QByteArray> devices = availableDevices(QAudio::AudioOutput);
if(devices.size() == 0)
return QByteArray();
- return QByteArray("default");
+ return devices.first();
}
QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
index 10078caa8e..5a807af271 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
+++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h
@@ -92,7 +92,7 @@ public:
QList<QAudioFormat::SampleType> sampleTypeList();
static QByteArray defaultInputDevice();
static QByteArray defaultOutputDevice();
- static QList<QByteArray> deviceList(QAudio::Mode);
+ static QList<QByteArray> availableDevices(QAudio::Mode);
private:
bool open();
diff --git a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
index ec07748c1c..8905119d92 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp
@@ -324,7 +324,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice()
return get_device_info(audioDevice, QAudio::AudioOutput);
}
-QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode)
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
{
QList<QByteArray> devices;
diff --git a/src/multimedia/audio/qaudiodeviceinfo_mac_p.h b/src/multimedia/audio/qaudiodeviceinfo_mac_p.h
index 60532a8520..0fd3ef50cf 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_mac_p.h
+++ b/src/multimedia/audio/qaudiodeviceinfo_mac_p.h
@@ -87,7 +87,7 @@ public:
static QByteArray defaultInputDevice();
static QByteArray defaultOutputDevice();
- static QList<QByteArray> deviceList(QAudio::Mode mode);
+ static QList<QByteArray> availableDevices(QAudio::Mode mode);
};
QT_END_NAMESPACE
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
index 69d5c94e2d..33af022904 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
@@ -103,6 +103,7 @@ QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const
} else {
nearest.setFrequency(11025);
nearest.setChannels(1);
+ nearest.setByteOrder(QAudioFormat::LittleEndian);
nearest.setSampleType(QAudioFormat::SignedInt);
nearest.setSampleSize(8);
nearest.setCodec(QLatin1String("audio/pcm"));
@@ -333,7 +334,7 @@ void QAudioDeviceInfoInternal::updateLists()
}
}
-QList<QByteArray> QAudioDeviceInfoInternal::deviceList(QAudio::Mode mode)
+QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)
{
Q_UNUSED(mode)
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.h b/src/multimedia/audio/qaudiodeviceinfo_win32_p.h
index 0d2ee29143..e191b6f1c3 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.h
+++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.h
@@ -93,7 +93,7 @@ public:
QList<QAudioFormat::SampleType> sampleTypeList();
static QByteArray defaultInputDevice();
static QByteArray defaultOutputDevice();
- static QList<QByteArray> deviceList(QAudio::Mode);
+ static QList<QByteArray> availableDevices(QAudio::Mode);
private:
QAudio::Mode mode;
diff --git a/src/multimedia/audio/qaudioengine.cpp b/src/multimedia/audio/qaudioengine.cpp
index c6e9d9795b..88e3804bf9 100644
--- a/src/multimedia/audio/qaudioengine.cpp
+++ b/src/multimedia/audio/qaudioengine.cpp
@@ -189,12 +189,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn virtual qint64 QAbstractAudioOutput::totalTime() const
+ \fn virtual qint64 QAbstractAudioOutput::processedUSecs() const
Returns the amount of audio data processed since start() was called in milliseconds.
*/
/*!
- \fn virtual qint64 QAbstractAudioOutput::clock() const
+ \fn virtual qint64 QAbstractAudioOutput::elapsedUSecs() const
Returns the milliseconds since start() was called, including time in Idle and suspend states.
*/
@@ -304,12 +304,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn virtual qint64 QAbstractAudioInput::totalTime() const
+ \fn virtual qint64 QAbstractAudioInput::processedUSecs() const
Returns the amount of audio data processed since start() was called in milliseconds.
*/
/*!
- \fn virtual qint64 QAbstractAudioInput::clock() const
+ \fn virtual qint64 QAbstractAudioInput::elapsedUSecs() const
Returns the milliseconds since start() was called, including time in Idle and suspend states.
*/
diff --git a/src/multimedia/audio/qaudioengine.h b/src/multimedia/audio/qaudioengine.h
index 57a9ae69df..f9e80c157a 100644
--- a/src/multimedia/audio/qaudioengine.h
+++ b/src/multimedia/audio/qaudioengine.h
@@ -86,8 +86,8 @@ public:
virtual int bufferSize() const = 0;
virtual void setNotifyInterval(int milliSeconds) = 0;
virtual int notifyInterval() const = 0;
- virtual qint64 totalTime() const = 0;
- virtual qint64 clock() const = 0;
+ virtual qint64 processedUSecs() const = 0;
+ virtual qint64 elapsedUSecs() const = 0;
virtual QAudio::Error error() const = 0;
virtual QAudio::State state() const = 0;
virtual QAudioFormat format() const = 0;
@@ -113,8 +113,8 @@ public:
virtual int bufferSize() const = 0;
virtual void setNotifyInterval(int milliSeconds) = 0;
virtual int notifyInterval() const = 0;
- virtual qint64 totalTime() const = 0;
- virtual qint64 clock() const = 0;
+ virtual qint64 processedUSecs() const = 0;
+ virtual qint64 elapsedUSecs() const = 0;
virtual QAudio::Error error() const = 0;
virtual QAudio::State state() const = 0;
virtual QAudioFormat format() const = 0;
diff --git a/src/multimedia/audio/qaudioengineplugin.h b/src/multimedia/audio/qaudioengineplugin.h
index fe30e0d5df..82dfa15a12 100644
--- a/src/multimedia/audio/qaudioengineplugin.h
+++ b/src/multimedia/audio/qaudioengineplugin.h
@@ -60,7 +60,7 @@ QT_MODULE(Multimedia)
struct Q_MULTIMEDIA_EXPORT QAudioEngineFactoryInterface : public QFactoryInterface
{
- virtual QList<QByteArray> deviceList(QAudio::Mode) const = 0;
+ virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
@@ -80,7 +80,7 @@ public:
~QAudioEnginePlugin();
virtual QStringList keys() const = 0;
- virtual QList<QByteArray> deviceList(QAudio::Mode) const = 0;
+ virtual QList<QByteArray> availableDevices(QAudio::Mode) const = 0;
virtual QAbstractAudioInput* createInput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
virtual QAbstractAudioOutput* createOutput(const QByteArray& device, const QAudioFormat& format = QAudioFormat()) = 0;
virtual QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device, QAudio::Mode mode) = 0;
diff --git a/src/multimedia/audio/qaudioformat.cpp b/src/multimedia/audio/qaudioformat.cpp
index 86fe85b7a7..b2bbe144e9 100644
--- a/src/multimedia/audio/qaudioformat.cpp
+++ b/src/multimedia/audio/qaudioformat.cpp
@@ -38,7 +38,7 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
+#include <QDebug>
#include <QtMultimedia/qaudioformat.h>
@@ -214,16 +214,13 @@ bool QAudioFormat::operator!=(const QAudioFormat& other) const
}
/*!
- Returns true if any of the parameters are invalid.
+ Returns true if all of the parameters are valid.
*/
-bool QAudioFormat::isNull() const
+bool QAudioFormat::isValid() const
{
- return d->frequency == -1 && d->channels == -1 &&
- d->sampleSize == -1 &&
- d->byteOrder == QAudioFormat::Endian(QSysInfo::ByteOrder) &&
- d->sampleType == QAudioFormat::Unknown &&
- d->codec.isNull();
+ return d->frequency != -1 && d->channels != -1 && d->sampleSize != -1 &&
+ d->sampleType != QAudioFormat::Unknown && !d->codec.isEmpty();
}
/*!
diff --git a/src/multimedia/audio/qaudioformat.h b/src/multimedia/audio/qaudioformat.h
index d5841ce722..7e92c2f45d 100644
--- a/src/multimedia/audio/qaudioformat.h
+++ b/src/multimedia/audio/qaudioformat.h
@@ -71,7 +71,7 @@ public:
bool operator==(const QAudioFormat &other) const;
bool operator!=(const QAudioFormat &other) const;
- bool isNull() const;
+ bool isValid() const;
void setFrequency(int frequency);
int frequency() const;
diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp
index 7a3be230f6..8b368d59f4 100644
--- a/src/multimedia/audio/qaudioinput.cpp
+++ b/src/multimedia/audio/qaudioinput.cpp
@@ -47,7 +47,6 @@
#include "qaudiodevicefactory_p.h"
-
QT_BEGIN_NAMESPACE
/*!
@@ -121,15 +120,15 @@ QT_BEGIN_NAMESPACE
when the state changes (stateChanged()).
QAudioInput provides several ways of measuring the time that has
- passed since the start() of the recording. The \c totalTime()
+ passed since the start() of the recording. The \c processedUSecs()
function returns the length of the stream in microseconds written,
i.e., it leaves out the times the audio input was suspended or idle.
- The clock() function returns the time elapsed since start() was called regardless of
+ The elapsedUSecs() function returns the time elapsed since start() was called regardless of
which states the QAudioInput has been in.
If an error should occur, you can fetch its reason with error().
The possible error reasons are described by the QAudio::Error
- enum. The QAudioInput will enter the \l{QAudio::}{StopState} when
+ enum. The QAudioInput will enter the \l{QAudio::}{StoppedState} when
an error is encountered. Connect to the stateChanged() signal to
handle the error:
@@ -176,37 +175,44 @@ QAudioInput::~QAudioInput()
}
/*!
- Uses the \a device as the QIODevice to transfer data.
- If \a device is null then the class creates an internal QIODevice.
+ Uses the \a device as the QIODevice to transfer data.
+ Passing a QIODevice allows the data to be transfered without any extra code.
+ All that is required is to open the QIODevice.
+
+ \sa QIODevice
+*/
+
+void QAudioInput::start(QIODevice* device)
+{
+ /*
+ -If currently not StoppedState, stop
+ -If previous start was push mode, delete internal QIODevice.
+ -open audio input.
+ If ok, NoError and ActiveState, else OpenError and StoppedState.
+ -emit stateChanged()
+ */
+ d->start(device);
+}
+
+/*!
Returns a pointer to the QIODevice being used to handle the data
transfer. This QIODevice can be used to read() audio data
directly.
- Passing a QIODevice allows the data to be transfered without any extra code.
- All that is required is to open the QIODevice.
\sa QIODevice
*/
-QIODevice* QAudioInput::start(QIODevice* device)
+QIODevice* QAudioInput::start()
{
/*
- PULL MODE (valid QIODevice)
- -If currently not StopState, stop
- -If previous start was push mode, delete internal QIODevice.
- -open audio input.
- If ok, NoError and ActiveState, else OpenError and StopState.
- -emit stateChanged()
- -return device
-
- PUSH MODE (device = 0)
- -If currently not StopState, stop
+ -If currently not StoppedState, stop
-If no internal QIODevice, create one.
-open audio input.
- -If ok, NoError and IdleState, else OpenError and StopState
+ -If ok, NoError and IdleState, else OpenError and StoppedState
-emit stateChanged()
-return internal QIODevice
*/
- return d->start(device);
+ return d->start(0);
}
/*!
@@ -225,8 +231,8 @@ QAudioFormat QAudioInput::format() const
void QAudioInput::stop()
{
/*
- -If StopState, return
- -set to StopState
+ -If StoppedState, return
+ -set to StoppedState
-detach from audio device
-emit stateChanged()
*/
@@ -255,7 +261,7 @@ void QAudioInput::suspend()
/*
-If not ActiveState|IdleState, return
-stop processing audio, saving all buffered audio data
- -set NoError and SuspendState
+ -set NoError and SuspendedState
-emit stateChanged()
*/
d->suspend();
@@ -268,7 +274,7 @@ void QAudioInput::suspend()
void QAudioInput::resume()
{
/*
- -If SuspendState, return
+ -If SuspendedState, return
-resume audio
-(PULL MODE): set ActiveState, NoError
-(PUSH MODE): set IdleState, NoError
@@ -357,9 +363,9 @@ int QAudioInput::notifyInterval() const
was called in microseconds.
*/
-qint64 QAudioInput::totalTime() const
+qint64 QAudioInput::processedUSecs() const
{
- return d->totalTime();
+ return d->processedUSecs();
}
/*!
@@ -367,9 +373,9 @@ qint64 QAudioInput::totalTime() const
Suspend states.
*/
-qint64 QAudioInput::clock() const
+qint64 QAudioInput::elapsedUSecs() const
{
- return d->clock();
+ return d->elapsedUSecs();
}
/*!
diff --git a/src/multimedia/audio/qaudioinput.h b/src/multimedia/audio/qaudioinput.h
index c8094f5257..bf93a270b7 100644
--- a/src/multimedia/audio/qaudioinput.h
+++ b/src/multimedia/audio/qaudioinput.h
@@ -71,7 +71,9 @@ public:
QAudioFormat format() const;
- QIODevice* start(QIODevice *device = 0);
+ void start(QIODevice *device);
+ QIODevice* start();
+
void stop();
void reset();
void suspend();
@@ -86,8 +88,8 @@ public:
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp
index 5e9aa81311..3dbe66ce56 100644
--- a/src/multimedia/audio/qaudioinput_alsa_p.cpp
+++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp
@@ -52,6 +52,7 @@
#include <QtCore/qcoreapplication.h>
#include "qaudioinput_alsa_p.h"
+#include "qaudiodeviceinfo_alsa_p.h"
QT_BEGIN_NAMESPACE
@@ -75,13 +76,12 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor
intervalTime = 1000;
audioBuffer = 0;
errorState = QAudio::NoError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
audioSource = 0;
pullMode = true;
resuming = false;
- QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":"));
- m_device = QByteArray(list1.at(0).toLocal8Bit().constData());
+ m_device = device;
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),SLOT(userFeed()));
@@ -206,7 +206,7 @@ int QAudioInputPrivate::setFormat()
QIODevice* QAudioInputPrivate::start(QIODevice* device)
{
- if(deviceState != QAudio::StopState)
+ if(deviceState != QAudio::StoppedState)
close();
if(!pullMode && audioSource) {
@@ -234,10 +234,10 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device)
void QAudioInputPrivate::stop()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
close();
emit stateChanged(deviceState);
@@ -249,6 +249,7 @@ bool QAudioInputPrivate::open()
QTime now(QTime::currentTime());
qDebug()<<now.second()<<"s "<<now.msec()<<"ms :open()";
#endif
+ clockStamp.restart();
timeStamp.restart();
elapsedTimeOffset = 0;
@@ -258,8 +259,29 @@ bool QAudioInputPrivate::open()
unsigned int freakuency=settings.frequency();
QString dev = QString(QLatin1String(m_device.constData()));
- if(!dev.contains(QLatin1String("default"))) {
- dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData()));
+ QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput);
+ if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(devices.first());
+#else
+ dev = QLatin1String("hw:0,0");
+#endif
+ } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(m_device);
+#else
+ int idx = 0;
+ char *name;
+
+ QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
+
+ while(snd_card_get_name(idx,&name) == 0) {
+ if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
+ break;
+ idx++;
+ }
+ dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
}
// Step 1: try and open the device
@@ -270,7 +292,7 @@ bool QAudioInputPrivate::open()
}
if (( err < 0)||(handle == 0)) {
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
return false;
}
@@ -354,7 +376,7 @@ bool QAudioInputPrivate::open()
if( err < 0) {
qWarning()<<errMessage;
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
return false;
}
@@ -400,7 +422,7 @@ bool QAudioInputPrivate::open()
void QAudioInputPrivate::close()
{
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
timer->stop();
if ( handle ) {
@@ -477,7 +499,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
if(l < 0) {
close();
errorState = QAudio::IOError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
} else if(l == 0) {
errorState = QAudio::NoError;
@@ -495,7 +517,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
void QAudioInputPrivate::resume()
{
- if(deviceState == QAudio::SuspendState) {
+ if(deviceState == QAudio::SuspendedState) {
int err = 0;
if(handle) {
@@ -545,7 +567,7 @@ int QAudioInputPrivate::notifyInterval() const
return intervalTime;
}
-qint64 QAudioInputPrivate::totalTime() const
+qint64 QAudioInputPrivate::processedUSecs() const
{
return totalTimeValue;
}
@@ -554,14 +576,14 @@ void QAudioInputPrivate::suspend()
{
if(deviceState == QAudio::ActiveState||resuming) {
timer->stop();
- deviceState = QAudio::SuspendState;
+ deviceState = QAudio::SuspendedState;
emit stateChanged(deviceState);
}
}
void QAudioInputPrivate::userFeed()
{
- if(deviceState == QAudio::StopState || deviceState == QAudio::SuspendState)
+ if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
return;
#ifdef DEBUG_AUDIO
QTime now(QTime::currentTime());
@@ -593,14 +615,15 @@ bool QAudioInputPrivate::deviceReady()
return true;
}
-qint64 QAudioInputPrivate::clock() const
+qint64 QAudioInputPrivate::elapsedUSecs() const
{
if(!handle)
return 0;
- if (deviceState == QAudio::StopState)
+ if (deviceState == QAudio::StoppedState)
return 0;
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
snd_pcm_status_t* status;
snd_pcm_status_alloca(&status);
@@ -616,9 +639,12 @@ qint64 QAudioInputPrivate::clock() const
l = -l;
l %= 1000000;
}
- return ((t1.tv_sec * 1000)+l/1000);
+ return ((t1.tv_sec * 1000000)+l);
} else
return 0;
+#else
+ return clockStamp.elapsed()*1000;
+#endif
}
void QAudioInputPrivate::reset()
diff --git a/src/multimedia/audio/qaudioinput_alsa_p.h b/src/multimedia/audio/qaudioinput_alsa_p.h
index 5583ea0c55..67d5cf55e1 100644
--- a/src/multimedia/audio/qaudioinput_alsa_p.h
+++ b/src/multimedia/audio/qaudioinput_alsa_p.h
@@ -91,8 +91,8 @@ public:
int bufferSize() const;
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
QAudioFormat format() const;
@@ -117,6 +117,7 @@ private:
QTimer* timer;
QTime timeStamp;
+ QTime clockStamp;
qint64 elapsedTimeOffset;
int intervalTime;
char* audioBuffer;
diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp
index cb059206a6..d63045fc74 100644
--- a/src/multimedia/audio/qaudioinput_mac_p.cpp
+++ b/src/multimedia/audio/qaudioinput_mac_p.cpp
@@ -526,7 +526,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray& device, QAudioFormat co
internalBufferSize = default_buffer_size;
clockFrequency = AudioGetHostClockFrequency() / 1000;
errorCode = QAudio::NoError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
intervalTimer = new QTimer(this);
intervalTimer->setInterval(1000);
@@ -708,7 +708,7 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device)
QIODevice* op = device;
if (!open()) {
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
errorCode = QAudio::OpenError;
return audioIO;
}
@@ -736,12 +736,12 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device)
void QAudioInputPrivate::stop()
{
QMutexLocker lock(&mutex);
- if (stateCode != QAudio::StopState) {
+ if (stateCode != QAudio::StoppedState) {
audioThreadStop();
audioBuffer->flush(true);
errorCode = QAudio::NoError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
}
@@ -749,11 +749,11 @@ void QAudioInputPrivate::stop()
void QAudioInputPrivate::reset()
{
QMutexLocker lock(&mutex);
- if (stateCode != QAudio::StopState) {
+ if (stateCode != QAudio::StoppedState) {
audioThreadStop();
errorCode = QAudio::NoError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
}
@@ -765,7 +765,7 @@ void QAudioInputPrivate::suspend()
audioThreadStop();
errorCode = QAudio::NoError;
- stateCode = QAudio::SuspendState;
+ stateCode = QAudio::SuspendedState;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
}
@@ -773,7 +773,7 @@ void QAudioInputPrivate::suspend()
void QAudioInputPrivate::resume()
{
QMutexLocker lock(&mutex);
- if (stateCode == QAudio::SuspendState) {
+ if (stateCode == QAudio::SuspendedState) {
audioThreadStart();
errorCode = QAudio::NoError;
@@ -812,14 +812,14 @@ int QAudioInputPrivate::notifyInterval() const
return intervalTimer->interval();
}
-qint64 QAudioInputPrivate::totalTime() const
+qint64 QAudioInputPrivate::processedUSecs() const
{
return totalFrames * 1000000 / audioFormat.frequency();
}
-qint64 QAudioInputPrivate::clock() const
+qint64 QAudioInputPrivate::elapsedUSecs() const
{
- if (stateCode == QAudio::StopState)
+ if (stateCode == QAudio::StoppedState)
return 0;
return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
@@ -875,7 +875,7 @@ void QAudioInputPrivate::audioDeviceError()
audioDeviceStop();
errorCode = QAudio::IOError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
}
}
diff --git a/src/multimedia/audio/qaudioinput_mac_p.h b/src/multimedia/audio/qaudioinput_mac_p.h
index a080648a2e..2dbb808d20 100644
--- a/src/multimedia/audio/qaudioinput_mac_p.h
+++ b/src/multimedia/audio/qaudioinput_mac_p.h
@@ -129,8 +129,8 @@ public:
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp
index b6b1efece6..b7f9ffd823 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.cpp
+++ b/src/multimedia/audio/qaudioinput_win32_p.cpp
@@ -71,7 +71,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor
totalTimeValue = 0;
intervalTime = 1000;
errorState = QAudio::NoError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
audioSource = 0;
pullMode = true;
resuming = false;
@@ -173,7 +173,7 @@ QAudioFormat QAudioInputPrivate::format() const
QIODevice* QAudioInputPrivate::start(QIODevice* device)
{
- if(deviceState != QAudio::StopState)
+ if(deviceState != QAudio::StoppedState)
close();
if(!pullMode && audioSource) {
@@ -201,7 +201,7 @@ QIODevice* QAudioInputPrivate::start(QIODevice* device)
void QAudioInputPrivate::stop()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
close();
@@ -260,7 +260,7 @@ bool QAudioInputPrivate::open()
(DWORD_PTR) this,
CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
qWarning("QAudioInput: failed to open audio device");
return false;
@@ -269,7 +269,7 @@ bool QAudioInputPrivate::open()
if(waveBlocks == 0) {
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
qWarning("QAudioInput: failed to allocate blocks. open failed");
return false;
@@ -286,7 +286,7 @@ bool QAudioInputPrivate::open()
if(result != MMSYSERR_NOERROR) {
qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
return false;
}
@@ -295,7 +295,7 @@ bool QAudioInputPrivate::open()
if(result) {
qWarning("QAudioInput: failed to start audio input");
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
return false;
}
@@ -309,12 +309,12 @@ bool QAudioInputPrivate::open()
void QAudioInputPrivate::close()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
waveInReset(hWaveIn);
waveInClose(hWaveIn);
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
int count = 0;
while(!finished && count < 100) {
@@ -333,6 +333,9 @@ void QAudioInputPrivate::close()
int QAudioInputPrivate::bytesReady() const
{
+ if(period_size == 0 || buffer_size == 0)
+ return 0;
+
int buf = ((buffer_size/period_size)-waveFreeBlockCount)*period_size;
if(buf < 0)
buf = 0;
@@ -400,14 +403,14 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
if(result != MMSYSERR_NOERROR) {
qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result);
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
}
result = waveInAddBuffer(hWaveIn, &waveBlocks[header], sizeof(WAVEHDR));
if(result != MMSYSERR_NOERROR) {
qWarning("QAudioInput: failed to setup block %d,err=%d",header,result);
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
}
header++;
@@ -435,14 +438,14 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
void QAudioInputPrivate::resume()
{
- if(deviceState == QAudio::SuspendState) {
+ if(deviceState == QAudio::SuspendedState) {
deviceState = QAudio::ActiveState;
for(int i=0; i<buffer_size/period_size; i++) {
result = waveInAddBuffer(hWaveIn, &waveBlocks[i], sizeof(WAVEHDR));
if(result != MMSYSERR_NOERROR) {
qWarning("QAudioInput: failed to setup block %d,err=%d",i,result);
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
return;
}
@@ -488,7 +491,7 @@ int QAudioInputPrivate::notifyInterval() const
return intervalTime;
}
-qint64 QAudioInputPrivate::totalTime() const
+qint64 QAudioInputPrivate::processedUSecs() const
{
return totalTimeValue;
}
@@ -497,7 +500,7 @@ void QAudioInputPrivate::suspend()
{
if(deviceState == QAudio::ActiveState) {
waveInReset(hWaveIn);
- deviceState = QAudio::SuspendState;
+ deviceState = QAudio::SuspendedState;
emit stateChanged(deviceState);
}
}
@@ -510,7 +513,7 @@ void QAudioInputPrivate::feedback()
#endif
bytesAvailable = bytesReady();
- if(!(deviceState==QAudio::StopState||deviceState==QAudio::SuspendState))
+ if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
emit processMore();
}
@@ -539,12 +542,12 @@ bool QAudioInputPrivate::deviceReady()
return true;
}
-qint64 QAudioInputPrivate::clock() const
+qint64 QAudioInputPrivate::elapsedUSecs() const
{
- if (deviceState == QAudio::StopState)
+ if (deviceState == QAudio::StoppedState)
return 0;
- return timeStampOpened.elapsed();
+ return timeStampOpened.elapsed()*1000;
}
void QAudioInputPrivate::reset()
diff --git a/src/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/audio/qaudioinput_win32_p.h
index 26c470d3ba..a2bd6876f1 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.h
+++ b/src/multimedia/audio/qaudioinput_win32_p.h
@@ -91,8 +91,8 @@ public:
int bufferSize() const;
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp
index 81b949632e..f8f2fa1a33 100644
--- a/src/multimedia/audio/qaudiooutput.cpp
+++ b/src/multimedia/audio/qaudiooutput.cpp
@@ -125,12 +125,12 @@ QT_BEGIN_NAMESPACE
not emitted. A typical use-case would be to update a
\l{QSlider}{slider} that allows seeking in the stream.
If you want the time since playback started regardless of which
- states the audio output has been in, clock() is the function for you.
+ states the audio output has been in, elapsedUSecs() is the function for you.
If an error occurs, you can fetch the \l{QAudio::Error}{error
type} with the error() function. Please see the QAudio::Error enum
for a description of the possible errors that are reported. When
- an error is encountered, the state changes to QAudio::StopState.
+ an error is encountered, the state changes to QAudio::StoppedState.
You can check for errors by connecting to the stateChanged()
signal:
@@ -188,36 +188,42 @@ QAudioFormat QAudioOutput::format() const
/*!
Uses the \a device as the QIODevice to transfer data.
- If \a device is null then the class creates an internal QIODevice.
- Returns a pointer to the QIODevice being used to handle the data
- transfer. This QIODevice can be used to write() audio data
- directly.
Passing a QIODevice allows the data to be transfered without any extra code.
All that is required is to open the QIODevice.
\sa QIODevice
*/
-QIODevice* QAudioOutput::start(QIODevice* device)
+void QAudioOutput::start(QIODevice* device)
{
/*
- PULL MODE (valid QIODevice)
- -If currently not StopState, stop.
+ -If currently not StoppedState, stop.
-If previous start was push mode, delete internal QIODevice.
-open audio output.
- -If ok, NoError and ActiveState, else OpenError and StopState
+ -If ok, NoError and ActiveState, else OpenError and StoppedState
-emit stateChanged()
- -return device
+ */
+ d->start(device);
+}
+
+/*!
+ Returns a pointer to the QIODevice being used to handle the data
+ transfer. This QIODevice can be used to write() audio data directly.
- PUSH MODE (device = 0)
- -If currently not StopState, stop.
+ \sa QIODevice
+*/
+
+QIODevice* QAudioOutput::start()
+{
+ /*
+ -If currently not StoppedState, stop.
-If no internal QIODevice, create one.
-open audio output.
- -If ok, NoError and IdleState, else OpenError and StopState
+ -If ok, NoError and IdleState, else OpenError and StoppedState
-emit stateChanged()
-return internal QIODevice
*/
- return d->start(device);
+ return d->start(0);
}
/*!
@@ -227,8 +233,8 @@ QIODevice* QAudioOutput::start(QIODevice* device)
void QAudioOutput::stop()
{
/*
- -If StopState, return
- -set to StopState
+ -If StoppedState, return
+ -set to StoppedState
-detach from audio device
-emit stateChanged()
*/
@@ -257,7 +263,7 @@ void QAudioOutput::suspend()
/*
-If not ActiveState|IdleState, return
-stop processing audio, saving all buffered audio data
- -set NoError and SuspendState
+ -set NoError and SuspendedState
-emit stateChanged()
*/
d->suspend();
@@ -270,7 +276,7 @@ void QAudioOutput::suspend()
void QAudioOutput::resume()
{
/*
- -If SuspendState, return
+ -If SuspendedState, return
-resume audio
-(PULL MODE): set ActiveState, NoError
-(PUSH MODE): set IdleState, NoError
@@ -358,9 +364,9 @@ int QAudioOutput::notifyInterval() const
was called in microseconds.
*/
-qint64 QAudioOutput::totalTime() const
+qint64 QAudioOutput::processedUSecs() const
{
- return d->totalTime();
+ return d->processedUSecs();
}
/*!
@@ -368,9 +374,9 @@ qint64 QAudioOutput::totalTime() const
Suspend states.
*/
-qint64 QAudioOutput::clock() const
+qint64 QAudioOutput::elapsedUSecs() const
{
- return d->clock();
+ return d->elapsedUSecs();
}
/*!
diff --git a/src/multimedia/audio/qaudiooutput.h b/src/multimedia/audio/qaudiooutput.h
index bb3496e246..38bab8eefa 100644
--- a/src/multimedia/audio/qaudiooutput.h
+++ b/src/multimedia/audio/qaudiooutput.h
@@ -71,7 +71,9 @@ public:
QAudioFormat format() const;
- QIODevice* start(QIODevice *device = 0);
+ void start(QIODevice *device);
+ QIODevice* start();
+
void stop();
void reset();
void suspend();
@@ -86,8 +88,8 @@ public:
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp
index d814d971ee..020a1044d2 100644
--- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp
@@ -52,6 +52,7 @@
#include <QtCore/qcoreapplication.h>
#include "qaudiooutput_alsa_p.h"
+#include "qaudiodeviceinfo_alsa_p.h"
QT_BEGIN_NAMESPACE
@@ -77,7 +78,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF
intervalTime = 1000;
audioBuffer = 0;
errorState = QAudio::NoError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
audioSource = 0;
pullMode = true;
resuming = false;
@@ -215,8 +216,8 @@ int QAudioOutputPrivate::setFormat()
QIODevice* QAudioOutputPrivate::start(QIODevice* device)
{
- if(deviceState != QAudio::StopState)
- deviceState = QAudio::StopState;
+ if(deviceState != QAudio::StoppedState)
+ deviceState = QAudio::StoppedState;
errorState = QAudio::NoError;
@@ -256,9 +257,9 @@ QIODevice* QAudioOutputPrivate::start(QIODevice* device)
void QAudioOutputPrivate::stop()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
close();
emit stateChanged(deviceState);
}
@@ -281,9 +282,31 @@ bool QAudioOutputPrivate::open()
unsigned int freakuency=settings.frequency();
QString dev = QLatin1String(m_device.constData());
- if(!dev.contains(QLatin1String("default"))) {
- dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData()));
+ QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput);
+ if(dev.compare(QLatin1String("default")) == 0) {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(devices.first().constData());
+#else
+ dev = QLatin1String("hw:0,0");
+#endif
+ } else {
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
+ dev = QLatin1String(m_device);
+#else
+ int idx = 0;
+ char *name;
+
+ QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData());
+
+ while(snd_card_get_name(idx,&name) == 0) {
+ if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0)
+ break;
+ idx++;
+ }
+ dev = QString(QLatin1String("hw:%1,0")).arg(idx);
+#endif
}
+
// Step 1: try and open the device
while((count < 5) && (err < 0)) {
err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);
@@ -292,7 +315,7 @@ bool QAudioOutputPrivate::open()
}
if (( err < 0)||(handle == 0)) {
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
return false;
}
snd_pcm_nonblock( handle, 0 );
@@ -375,7 +398,7 @@ bool QAudioOutputPrivate::open()
if( err < 0) {
qWarning()<<errMessage;
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
return false;
}
snd_pcm_hw_params_get_buffer_size(hwparams,&buffer_frames);
@@ -407,6 +430,7 @@ bool QAudioOutputPrivate::open()
// Step 6: Start audio processing
timer->start(period_time/1000);
+ clockStamp.restart();
timeStamp.restart();
elapsedTimeOffset = 0;
errorState = QAudio::NoError;
@@ -418,7 +442,7 @@ bool QAudioOutputPrivate::open()
void QAudioOutputPrivate::close()
{
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
timer->stop();
if ( handle ) {
@@ -481,7 +505,7 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
if(err < 0) {
close();
errorState = QAudio::FatalError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
}
return 0;
@@ -494,7 +518,7 @@ int QAudioOutputPrivate::periodSize() const
void QAudioOutputPrivate::setBufferSize(int value)
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
buffer_size = value;
}
@@ -516,14 +540,14 @@ int QAudioOutputPrivate::notifyInterval() const
return intervalTime;
}
-qint64 QAudioOutputPrivate::totalTime() const
+qint64 QAudioOutputPrivate::processedUSecs() const
{
return totalTimeValue;
}
void QAudioOutputPrivate::resume()
{
- if(deviceState == QAudio::SuspendState) {
+ if(deviceState == QAudio::SuspendedState) {
int err = 0;
if(handle) {
@@ -558,7 +582,7 @@ void QAudioOutputPrivate::suspend()
{
if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) {
timer->stop();
- deviceState = QAudio::SuspendState;
+ deviceState = QAudio::SuspendedState;
errorState = QAudio::NoError;
emit stateChanged(deviceState);
}
@@ -566,7 +590,7 @@ void QAudioOutputPrivate::suspend()
void QAudioOutputPrivate::userFeed()
{
- if(deviceState == QAudio::StopState || deviceState == QAudio::SuspendState)
+ if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
return;
#ifdef DEBUG_AUDIO
QTime now(QTime::currentTime());
@@ -645,14 +669,15 @@ bool QAudioOutputPrivate::deviceReady()
return true;
}
-qint64 QAudioOutputPrivate::clock() const
+qint64 QAudioOutputPrivate::elapsedUSecs() const
{
if(!handle)
return 0;
- if (deviceState == QAudio::StopState)
+ if (deviceState == QAudio::StoppedState)
return 0;
+#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14)
snd_pcm_status_t* status;
snd_pcm_status_alloca(&status);
@@ -668,9 +693,12 @@ qint64 QAudioOutputPrivate::clock() const
l = -l;
l %= 1000000;
}
- return ((t1.tv_sec * 1000)+l/1000);
+ return ((t1.tv_sec * 1000000)+l);
} else
return 0;
+#else
+ return clockStamp.elapsed()*1000;
+#endif
return 0;
}
diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.h b/src/multimedia/audio/qaudiooutput_alsa_p.h
index 6d4177df5c..619ecefc67 100644
--- a/src/multimedia/audio/qaudiooutput_alsa_p.h
+++ b/src/multimedia/audio/qaudiooutput_alsa_p.h
@@ -91,8 +91,8 @@ public:
int bufferSize() const;
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
QAudioFormat format() const;
@@ -134,6 +134,7 @@ private:
QByteArray m_device;
int bytesAvailable;
QTime timeStamp;
+ QTime clockStamp;
qint64 elapsedTimeOffset;
char* audioBuffer;
snd_pcm_t* handle;
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp
index f23db80735..e0651bf4c0 100644
--- a/src/multimedia/audio/qaudiooutput_mac_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp
@@ -288,7 +288,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device, const QAudioF
internalBufferSize = default_buffer_size;
clockFrequency = AudioGetHostClockFrequency() / 1000;
errorCode = QAudio::NoError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
audioThreadState = Stopped;
intervalTimer = new QTimer(this);
@@ -436,7 +436,7 @@ QIODevice* QAudioOutputPrivate::start(QIODevice* device)
QIODevice* op = device;
if (!open()) {
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
errorCode = QAudio::OpenError;
return audioIO;
}
@@ -468,10 +468,10 @@ QIODevice* QAudioOutputPrivate::start(QIODevice* device)
void QAudioOutputPrivate::stop()
{
QMutexLocker lock(&mutex);
- if (stateCode != QAudio::StopState) {
+ if (stateCode != QAudio::StoppedState) {
audioThreadDrain();
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
errorCode = QAudio::NoError;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
@@ -480,10 +480,10 @@ void QAudioOutputPrivate::stop()
void QAudioOutputPrivate::reset()
{
QMutexLocker lock(&mutex);
- if (stateCode != QAudio::StopState) {
+ if (stateCode != QAudio::StoppedState) {
audioThreadStop();
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
errorCode = QAudio::NoError;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
@@ -495,7 +495,7 @@ void QAudioOutputPrivate::suspend()
if (stateCode == QAudio::ActiveState || stateCode == QAudio::IdleState) {
audioThreadStop();
- stateCode = QAudio::SuspendState;
+ stateCode = QAudio::SuspendedState;
errorCode = QAudio::NoError;
QMetaObject::invokeMethod(this, "stateChanged", Qt::QueuedConnection, Q_ARG(QAudio::State, stateCode));
}
@@ -504,7 +504,7 @@ void QAudioOutputPrivate::suspend()
void QAudioOutputPrivate::resume()
{
QMutexLocker lock(&mutex);
- if (stateCode == QAudio::SuspendState) {
+ if (stateCode == QAudio::SuspendedState) {
audioThreadStart();
stateCode = QAudio::ActiveState;
@@ -525,7 +525,7 @@ int QAudioOutputPrivate::periodSize() const
void QAudioOutputPrivate::setBufferSize(int bs)
{
- if (stateCode == QAudio::StopState)
+ if (stateCode == QAudio::StoppedState)
internalBufferSize = bs;
}
@@ -544,14 +544,14 @@ int QAudioOutputPrivate::notifyInterval() const
return intervalTimer->interval();
}
-qint64 QAudioOutputPrivate::totalTime() const
+qint64 QAudioOutputPrivate::processedUSecs() const
{
return totalFrames * 1000000 / audioFormat.frequency();
}
-qint64 QAudioOutputPrivate::clock() const
+qint64 QAudioOutputPrivate::elapsedUSecs() const
{
- if (stateCode == QAudio::StopState)
+ if (stateCode == QAudio::StoppedState)
return 0;
return (AudioGetCurrentHostTime() - startTime) / (clockFrequency / 1000);
@@ -614,7 +614,7 @@ void QAudioOutputPrivate::audioDeviceError()
audioDeviceStop();
errorCode = QAudio::IOError;
- stateCode = QAudio::StopState;
+ stateCode = QAudio::StoppedState;
QMetaObject::invokeMethod(this, "deviceStopped", Qt::QueuedConnection);
}
}
diff --git a/src/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/audio/qaudiooutput_mac_p.h
index 04b3239f36..76d06a9bf6 100644
--- a/src/multimedia/audio/qaudiooutput_mac_p.h
+++ b/src/multimedia/audio/qaudiooutput_mac_p.h
@@ -128,8 +128,8 @@ public:
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
index 2c4a1c2499..2cfc472d65 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -71,7 +71,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF
intervalTime = 1000;
audioBuffer = 0;
errorState = QAudio::NoError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
audioSource = 0;
pullMode = true;
finished = false;
@@ -157,7 +157,7 @@ QAudioFormat QAudioOutputPrivate::format() const
QIODevice* QAudioOutputPrivate::start(QIODevice* device)
{
- if(deviceState != QAudio::StopState)
+ if(deviceState != QAudio::StoppedState)
close();
if(!pullMode && audioSource) {
@@ -187,7 +187,7 @@ QIODevice* QAudioOutputPrivate::start(QIODevice* device)
void QAudioOutputPrivate::stop()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
close();
if(!pullMode && audioSource) {
@@ -255,7 +255,7 @@ bool QAudioOutputPrivate::open()
(DWORD_PTR) this,
CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
errorState = QAudio::OpenError;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
emit stateChanged(deviceState);
qWarning("QAudioOutput: open error");
return false;
@@ -277,10 +277,10 @@ bool QAudioOutputPrivate::open()
void QAudioOutputPrivate::close()
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
return;
- deviceState = QAudio::StopState;
+ deviceState = QAudio::StoppedState;
int delay = (buffer_size-bytesFree())*1000/(settings.frequency()
*settings.channels()*(settings.sampleSize()/8));
waveOutReset(hWaveOut);
@@ -308,7 +308,7 @@ int QAudioOutputPrivate::periodSize() const
void QAudioOutputPrivate::setBufferSize(int value)
{
- if(deviceState == QAudio::StopState)
+ if(deviceState == QAudio::StoppedState)
buffer_size = value;
}
@@ -330,7 +330,7 @@ int QAudioOutputPrivate::notifyInterval() const
return intervalTime;
}
-qint64 QAudioOutputPrivate::totalTime() const
+qint64 QAudioOutputPrivate::processedUSecs() const
{
return totalTimeValue;
}
@@ -390,7 +390,7 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
void QAudioOutputPrivate::resume()
{
- if(deviceState == QAudio::SuspendState) {
+ if(deviceState == QAudio::SuspendedState) {
deviceState = QAudio::ActiveState;
errorState = QAudio::NoError;
waveOutRestart(hWaveOut);
@@ -403,7 +403,7 @@ void QAudioOutputPrivate::suspend()
{
if(deviceState == QAudio::ActiveState) {
waveOutPause(hWaveOut);
- deviceState = QAudio::SuspendState;
+ deviceState = QAudio::SuspendedState;
errorState = QAudio::NoError;
emit stateChanged(deviceState);
}
@@ -417,7 +417,7 @@ void QAudioOutputPrivate::feedback()
#endif
bytesAvailable = bytesFree();
- if(!(deviceState==QAudio::StopState||deviceState==QAudio::SuspendState)) {
+ if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState)) {
if(bytesAvailable >= period_size)
QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
}
@@ -491,12 +491,12 @@ bool QAudioOutputPrivate::deviceReady()
return true;
}
-qint64 QAudioOutputPrivate::clock() const
+qint64 QAudioOutputPrivate::elapsedUSecs() const
{
- if (deviceState == QAudio::StopState)
+ if (deviceState == QAudio::StoppedState)
return 0;
- return timeStampOpened.elapsed();
+ return timeStampOpened.elapsed()*1000;
}
QAudio::Error QAudioOutputPrivate::error() const
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/audio/qaudiooutput_win32_p.h
index bcf8e1e752..f90b8c2e33 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.h
+++ b/src/multimedia/audio/qaudiooutput_win32_p.h
@@ -90,8 +90,8 @@ public:
int bufferSize() const;
void setNotifyInterval(int milliSeconds);
int notifyInterval() const;
- qint64 totalTime() const;
- qint64 clock() const;
+ qint64 processedUSecs() const;
+ qint64 elapsedUSecs() const;
QAudio::Error error() const;
QAudio::State state() const;
diff --git a/src/multimedia/video/qabstractvideosurface.cpp b/src/multimedia/video/qabstractvideosurface.cpp
index a4f51a2d2d..33dc815e2f 100644
--- a/src/multimedia/video/qabstractvideosurface.cpp
+++ b/src/multimedia/video/qabstractvideosurface.cpp
@@ -57,8 +57,8 @@ QT_BEGIN_NAMESPACE
of each frame is compatible with a stream format supplied when starting a presentation.
A list of pixel formats a surface can present is given by the supportedPixelFormats() function,
- and the isFormatSupported() function will test if a complete video format is supported. In
- some cases when a format is not supported; isFormatSupported() may suggest a similar format.
+ and the isFormatSupported() function will test if a video surface format is supported. If a
+ format is not supported the nearestFormat() function may be able to suggest a similar format.
For example if a surface supports fixed set of resolutions it may suggest the smallest
supported resolution that contains the proposed resolution.
@@ -118,21 +118,37 @@ QAbstractVideoSurface::~QAbstractVideoSurface()
*/
/*!
- Tests a video \a format to determine if a surface can accept it. If the format isn't supported
- the surface may suggest a \a similar format that is supported.
+ Tests a video surface \a format to determine if a surface can accept it.
Returns true if the format is supported by the surface, and false otherwise.
*/
-bool QAbstractVideoSurface::isFormatSupported(
- const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar) const
+bool QAbstractVideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
{
- Q_UNUSED(similar);
-
return supportedPixelFormats(format.handleType()).contains(format.pixelFormat());
}
/*!
+ Returns a supported video surface format that is similar to \a format.
+
+ A similar surface format is one that has the same \l {QVideoSurfaceFormat::pixelFormat()}{pixel
+ format} and \l {QVideoSurfaceFormat::handleType()}{handle type} but differs in some of the other
+ properties. For example if there are restrictions on the \l {QVideoSurfaceFormat::frameSize()}
+ {frame sizes} a video surface can accept it may suggest a format with a larger frame size and
+ a \l {QVideoSurfaceFormat::viewport()}{viewport} the size of the original frame size.
+
+ If the format is already supported it will be returned unchanged, or if there is no similar
+ supported format an invalid format will be returned.
+*/
+
+QVideoSurfaceFormat QAbstractVideoSurface::nearestFormat(const QVideoSurfaceFormat &format) const
+{
+ return isFormatSupported(format)
+ ? format
+ : QVideoSurfaceFormat();
+}
+
+/*!
\fn QAbstractVideoSurface::supportedFormatsChanged()
Signals that the set of formats supported by a video surface has changed.
@@ -162,23 +178,23 @@ QVideoSurfaceFormat QAbstractVideoSurface::surfaceFormat() const
Returns true if the surface was started, and false if an error occurred.
- \sa isStarted(), stop()
+ \sa isActive(), stop()
*/
bool QAbstractVideoSurface::start(const QVideoSurfaceFormat &format)
{
Q_D(QAbstractVideoSurface);
- bool wasStarted = d->started;
+ bool wasActive = d->active;
- d->started = true;
+ d->active = true;
d->format = format;
d->error = NoError;
emit surfaceFormatChanged(d->format);
- if (!wasStarted)
- emit startedChanged(true);
+ if (!wasActive)
+ emit activeChanged(true);
return true;
}
@@ -186,18 +202,18 @@ bool QAbstractVideoSurface::start(const QVideoSurfaceFormat &format)
/*!
Stops a video surface presenting frames and releases any resources acquired in start().
- \sa isStarted(), start()
+ \sa isActive(), start()
*/
void QAbstractVideoSurface::stop()
{
Q_D(QAbstractVideoSurface);
- if (d->started) {
+ if (d->active) {
d->format = QVideoSurfaceFormat();
- d->started = false;
+ d->active = false;
- emit startedChanged(false);
+ emit activeChanged(false);
emit surfaceFormatChanged(d->format);
}
}
@@ -208,17 +224,17 @@ void QAbstractVideoSurface::stop()
Returns true if the surface has been started, and false otherwise.
*/
-bool QAbstractVideoSurface::isStarted() const
+bool QAbstractVideoSurface::isActive() const
{
- return d_func()->started;
+ return d_func()->active;
}
/*!
- \fn QAbstractVideoSurface::startedChanged(bool started)
+ \fn QAbstractVideoSurface::activeChanged(bool active)
- Signals that the \a started state of a video surface has changed.
+ Signals that the \a active state of a video surface has changed.
- \sa isStarted(), start(), stop()
+ \sa isActive(), start(), stop()
*/
/*!
diff --git a/src/multimedia/video/qabstractvideosurface.h b/src/multimedia/video/qabstractvideosurface.h
index 3823eeb338..58d06f1a29 100644
--- a/src/multimedia/video/qabstractvideosurface.h
+++ b/src/multimedia/video/qabstractvideosurface.h
@@ -75,22 +75,22 @@ public:
virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(
QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const = 0;
- virtual bool isFormatSupported(
- const QVideoSurfaceFormat &format, QVideoSurfaceFormat *similar = 0) const;
+ virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const;
+ virtual QVideoSurfaceFormat nearestFormat(const QVideoSurfaceFormat &format) const;
QVideoSurfaceFormat surfaceFormat() const;
virtual bool start(const QVideoSurfaceFormat &format);
virtual void stop();
- bool isStarted() const;
+ bool isActive() const;
virtual bool present(const QVideoFrame &frame) = 0;
Error error() const;
Q_SIGNALS:
- void startedChanged(bool started);
+ void activeChanged(bool active);
void surfaceFormatChanged(const QVideoSurfaceFormat &format);
void supportedFormatsChanged();
diff --git a/src/multimedia/video/qabstractvideosurface_p.h b/src/multimedia/video/qabstractvideosurface_p.h
index 3142b786f5..8675fac2b5 100644
--- a/src/multimedia/video/qabstractvideosurface_p.h
+++ b/src/multimedia/video/qabstractvideosurface_p.h
@@ -64,14 +64,13 @@ class QAbstractVideoSurfacePrivate : public QObjectPrivate
public:
QAbstractVideoSurfacePrivate()
: error(QAbstractVideoSurface::NoError)
- , started(false)
+ , active(false)
{
}
mutable QAbstractVideoSurface::Error error;
QVideoSurfaceFormat format;
- bool started;
-
+ bool active;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/video/qimagevideobuffer.cpp b/src/multimedia/video/qimagevideobuffer.cpp
index bfeb2a08ee..e57adb6bee 100644
--- a/src/multimedia/video/qimagevideobuffer.cpp
+++ b/src/multimedia/video/qimagevideobuffer.cpp
@@ -85,7 +85,7 @@ uchar *QImageVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
d->mapMode = mode;
if (numBytes)
- *numBytes = d->image.numBytes();
+ *numBytes = d->image.byteCount();
if (bytesPerLine)
*bytesPerLine = d->image.bytesPerLine();
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
index c884da0d4b..ae38e8267a 100644
--- a/src/multimedia/video/qvideoframe.cpp
+++ b/src/multimedia/video/qvideoframe.cpp
@@ -59,7 +59,7 @@ public:
: startTime(-1)
, endTime(-1)
, data(0)
- , numBytes(0)
+ , mappedBytes(0)
, bytesPerLine(0)
, pixelFormat(QVideoFrame::Format_Invalid)
, fieldType(QVideoFrame::ProgressiveFrame)
@@ -72,7 +72,7 @@ public:
, startTime(-1)
, endTime(-1)
, data(0)
- , numBytes(0)
+ , mappedBytes(0)
, bytesPerLine(0)
, pixelFormat(format)
, fieldType(QVideoFrame::ProgressiveFrame)
@@ -89,7 +89,7 @@ public:
qint64 startTime;
qint64 endTime;
uchar *data;
- int numBytes;
+ int mappedBytes;
int bytesPerLine;
QVideoFrame::PixelFormat pixelFormat;
QVideoFrame::FieldType fieldType;
@@ -109,7 +109,7 @@ private:
The contents of a video frame can be mapped to memory using the map() function. While
mapped the video data can accessed using the bits() function which returns a pointer to a
- buffer, the total size of which is given by the numBytes(), and the size of each line is given
+ buffer, the total size of which is given by the mappedBytes(), and the size of each line is given
by bytesPerLine(). The return value of the handle() function may be used to access frame data
using the internal buffer's native APIs.
@@ -304,12 +304,12 @@ QVideoFrame::QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFo
\note This will construct an invalid video frame if there is no frame type equivalent to the
image format.
- \sa equivalentPixelFormat()
+ \sa pixelFormatFromImageFormat()
*/
QVideoFrame::QVideoFrame(const QImage &image)
: d(new QVideoFramePrivate(
- image.size(), equivalentPixelFormat(image.format())))
+ image.size(), pixelFormatFromImageFormat(image.format())))
{
if (d->pixelFormat != Format_Invalid)
d->buffer = new QImageVideoBuffer(image);
@@ -510,9 +510,9 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
{
if (d->buffer != 0 && d->data == 0) {
Q_ASSERT(d->bytesPerLine == 0);
- Q_ASSERT(d->numBytes == 0);
+ Q_ASSERT(d->mappedBytes == 0);
- d->data = d->buffer->map(mode, &d->numBytes, &d->bytesPerLine);
+ d->data = d->buffer->map(mode, &d->mappedBytes, &d->bytesPerLine);
return d->data != 0;
}
@@ -532,7 +532,7 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
void QVideoFrame::unmap()
{
if (d->data != 0) {
- d->numBytes = 0;
+ d->mappedBytes = 0;
d->bytesPerLine = 0;
d->data = 0;
@@ -548,7 +548,7 @@ void QVideoFrame::unmap()
This value is only valid while the frame data is \l {map()}{mapped}.
- \sa bits(), map(), numBytes()
+ \sa bits(), map(), mappedBytes()
*/
int QVideoFrame::bytesPerLine() const
@@ -561,7 +561,7 @@ int QVideoFrame::bytesPerLine() const
This value is only valid while the frame data is \l {map()}{mapped}.
- \sa map(), numBytes(), bytesPerLine()
+ \sa map(), mappedBytes(), bytesPerLine()
*/
uchar *QVideoFrame::bits()
@@ -574,7 +574,7 @@ uchar *QVideoFrame::bits()
This value is only valid while the frame data is \l {map()}{mapped}.
- \sa map(), numBytes(), bytesPerLine()
+ \sa map(), mappedBytes(), bytesPerLine()
*/
const uchar *QVideoFrame::bits() const
@@ -583,16 +583,16 @@ const uchar *QVideoFrame::bits() const
}
/*!
- Returns the number of bytes occupied by the frame data.
+ Returns the number of bytes occupied by the mapped frame data.
This value is only valid while the frame data is \l {map()}{mapped}.
\sa map()
*/
-int QVideoFrame::numBytes() const
+int QVideoFrame::mappedBytes() const
{
- return d->numBytes;
+ return d->mappedBytes;
}
/*!
@@ -649,7 +649,7 @@ void QVideoFrame::setEndTime(qint64 time)
format QVideoFrame::InvalidType is returned instead.
*/
-QVideoFrame::PixelFormat QVideoFrame::equivalentPixelFormat(QImage::Format format)
+QVideoFrame::PixelFormat QVideoFrame::pixelFormatFromImageFormat(QImage::Format format)
{
switch (format) {
case QImage::Format_Invalid:
@@ -689,7 +689,7 @@ QVideoFrame::PixelFormat QVideoFrame::equivalentPixelFormat(QImage::Format forma
format QImage::Format_Invalid is returned instead.
*/
-QImage::Format QVideoFrame::equivalentImageFormat(PixelFormat format)
+QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format)
{
switch (format) {
case Format_Invalid:
diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h
index e1b46a85a4..d08008b3bf 100644
--- a/src/multimedia/video/qvideoframe.h
+++ b/src/multimedia/video/qvideoframe.h
@@ -141,7 +141,7 @@ public:
uchar *bits();
const uchar *bits() const;
- int numBytes() const;
+ int mappedBytes() const;
QVariant handle() const;
@@ -151,8 +151,8 @@ public:
qint64 endTime() const;
void setEndTime(qint64 time);
- static PixelFormat equivalentPixelFormat(QImage::Format format);
- static QImage::Format equivalentImageFormat(PixelFormat format);
+ static PixelFormat pixelFormatFromImageFormat(QImage::Format format);
+ static QImage::Format imageFormatFromPixelFormat(PixelFormat format);
private:
QExplicitlySharedDataPointer<QVideoFramePrivate> d;
diff --git a/src/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/video/qvideosurfaceformat.cpp
index 2b0de966eb..c898e3a4a8 100644
--- a/src/multimedia/video/qvideosurfaceformat.cpp
+++ b/src/multimedia/video/qvideosurfaceformat.cpp
@@ -57,8 +57,8 @@ public:
, handleType(QAbstractVideoBuffer::NoHandle)
, scanLineDirection(QVideoSurfaceFormat::TopToBottom)
, pixelAspectRatio(1, 1)
- , yuvColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
- , frameRate(0, 0)
+ , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
+ , frameRate(0.0)
{
}
@@ -71,9 +71,9 @@ public:
, scanLineDirection(QVideoSurfaceFormat::TopToBottom)
, frameSize(size)
, pixelAspectRatio(1, 1)
- , yuvColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
+ , ycbcrColorSpace(QVideoSurfaceFormat::YCbCr_Undefined)
, viewport(QPoint(0, 0), size)
- , frameRate(0, 0)
+ , frameRate(0.0)
{
}
@@ -84,7 +84,7 @@ public:
, scanLineDirection(other.scanLineDirection)
, frameSize(other.frameSize)
, pixelAspectRatio(other.pixelAspectRatio)
- , yuvColorSpace(other.yuvColorSpace)
+ , ycbcrColorSpace(other.ycbcrColorSpace)
, viewport(other.viewport)
, frameRate(other.frameRate)
, propertyNames(other.propertyNames)
@@ -100,8 +100,8 @@ public:
&& frameSize == other.frameSize
&& pixelAspectRatio == other.pixelAspectRatio
&& viewport == other.viewport
- && frameRate == other.frameRate
- && yuvColorSpace == other.yuvColorSpace
+ && frameRatesEqual(frameRate, other.frameRate)
+ && ycbcrColorSpace == other.ycbcrColorSpace
&& propertyNames.count() == other.propertyNames.count()) {
for (int i = 0; i < propertyNames.count(); ++i) {
int j = other.propertyNames.indexOf(propertyNames.at(i));
@@ -115,14 +115,19 @@ public:
}
}
+ inline static bool frameRatesEqual(qreal r1, qreal r2)
+ {
+ return qAbs(r1 - r2) <= 0.00001 * qMin(qAbs(r1), qAbs(r2));
+ }
+
QVideoFrame::PixelFormat pixelFormat;
QAbstractVideoBuffer::HandleType handleType;
QVideoSurfaceFormat::Direction scanLineDirection;
QSize frameSize;
QSize pixelAspectRatio;
- QVideoSurfaceFormat::YuvColorSpace yuvColorSpace;
+ QVideoSurfaceFormat::YCbCrColorSpace ycbcrColorSpace;
QRect viewport;
- QVideoSurfaceFormat::FrameRate frameRate;
+ qreal frameRate;
QList<QByteArray> propertyNames;
QList<QVariant> propertyValues;
};
@@ -163,19 +168,10 @@ public:
\value BottomToTop Scan lines are arranged from the bottom of the frame to the top.
*/
-/*!
- \enum QVideoSurfaceFormat::ViewportMode
-
- Enumerates the methods for updating the stream viewport when the frame size is changed.
-
- \value ResetViewport The viewport is reset to cover an entire frame.
- \value KeepViewport The viewport is kept within the bounds the frame.
-*/
-
/*!
- \enum QVideoSurfaceFormat::YuvColorSpace
+ \enum QVideoSurfaceFormat::YCbCrColorSpace
- Enumerates the YUV color space of video frames.
+ Enumerates the Y'CbCr color space of video frames.
\value YCbCr_Undefined
No color space is specified.
@@ -201,15 +197,6 @@ public:
The full range Y'CbCr color space used in JPEG files.
*/
-
-/*!
- \typedef QVideoSurfaceFormat::FrameRate
-
- A pair of integers representing the frame rate of a video stream.
-
- The first number is the numerator and the second the denominator.
-*/
-
/*!
Constructs a null video stream format.
*/
@@ -344,21 +331,13 @@ int QVideoSurfaceFormat::frameHeight() const
/*!
Sets the size of frames in a video stream to \a size.
- The viewport \a mode indicates how the view port should be updated.
+ This will reset the viewport() to fill the entire frame.
*/
-void QVideoSurfaceFormat::setFrameSize(const QSize &size, ViewportMode mode)
+void QVideoSurfaceFormat::setFrameSize(const QSize &size)
{
d->frameSize = size;
-
- switch (mode) {
- case ResetViewport:
- d->viewport = QRect(QPoint(0, 0), size);
- break;
- case KeepViewport:
- d->viewport = QRect(QPoint(0, 0), size).intersected(d->viewport);
- break;
- }
+ d->viewport = QRect(QPoint(0, 0), size);
}
/*!
@@ -366,12 +345,13 @@ void QVideoSurfaceFormat::setFrameSize(const QSize &size, ViewportMode mode)
Sets the \a width and \a height of frames in a video stream.
- The viewport \a mode indicates how the view port should be updated.
+ This will reset the viewport() to fill the entire frame.
*/
-void QVideoSurfaceFormat::setFrameSize(int width, int height, ViewportMode mode)
+void QVideoSurfaceFormat::setFrameSize(int width, int height)
{
- setFrameSize(QSize(width, height), mode);
+ d->frameSize = QSize(width, height);
+ d->viewport = QRect(0, 0, width, height);
}
/*!
@@ -415,41 +395,24 @@ void QVideoSurfaceFormat::setScanLineDirection(Direction direction)
}
/*!
- Returns the frame rate of a video stream.
-
- The frame rate is a rational number represented by a pair of integers.
- The first integer is the numerator and the second the denominator.
+ Returns the frame rate of a video stream in frames per second.
*/
-QVideoSurfaceFormat::FrameRate QVideoSurfaceFormat::frameRate() const
+qreal QVideoSurfaceFormat::frameRate() const
{
return d->frameRate;
}
/*!
- Sets the frame \a rate of a video stream.
-
- The frame rate is a rational number represented by a pair of integers.
- The first integer is the numerator and the second the denominator.
+ Sets the frame \a rate of a video stream in frames per second.
*/
-void QVideoSurfaceFormat::setFrameRate(const FrameRate &rate)
+void QVideoSurfaceFormat::setFrameRate(qreal rate)
{
d->frameRate = rate;
}
/*!
- \overload
-
- Sets the \a numerator and \a denominator of the frame rate of a video stream.
-*/
-
-void QVideoSurfaceFormat::setFrameRate(int numerator, int denominator)
-{
- d->frameRate = qMakePair(numerator, denominator);
-}
-
-/*!
Returns a video stream's pixel aspect ratio.
*/
@@ -479,22 +442,22 @@ void QVideoSurfaceFormat::setPixelAspectRatio(int horizontal, int vertical)
}
/*!
- Returns a YUV color space of a video stream.
+ Returns the Y'CbCr color space of a video stream.
*/
-QVideoSurfaceFormat::YuvColorSpace QVideoSurfaceFormat::yuvColorSpace() const
+QVideoSurfaceFormat::YCbCrColorSpace QVideoSurfaceFormat::yCbCrColorSpace() const
{
- return d->yuvColorSpace;
+ return d->ycbcrColorSpace;
}
/*!
- Sets a YUV color \a space of a video stream.
+ Sets the Y'CbCr color \a space of a video stream.
It is only used with raw YUV frame types.
*/
-void QVideoSurfaceFormat::setYuvColorSpace(QVideoSurfaceFormat::YuvColorSpace space)
+void QVideoSurfaceFormat::setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpace space)
{
- d->yuvColorSpace = space;
+ d->ycbcrColorSpace = space;
}
/*!
@@ -529,7 +492,7 @@ QList<QByteArray> QVideoSurfaceFormat::propertyNames() const
<< "frameRate"
<< "pixelAspectRatio"
<< "sizeHint"
- << "yuvColorSpace")
+ << "yCbCrColorSpace")
+ d->propertyNames;
}
@@ -561,8 +524,8 @@ QVariant QVideoSurfaceFormat::property(const char *name) const
return qVariantFromValue(d->pixelAspectRatio);
} else if (qstrcmp(name, "sizeHint") == 0) {
return sizeHint();
- } else if (qstrcmp(name, "yuvColorSpace") == 0) {
- return qVariantFromValue(d->yuvColorSpace);
+ } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
+ return qVariantFromValue(d->ycbcrColorSpace);
} else {
int id = 0;
for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
@@ -599,16 +562,16 @@ void QVideoSurfaceFormat::setProperty(const char *name, const QVariant &value)
if (qVariantCanConvert<Direction>(value))
d->scanLineDirection = qvariant_cast<Direction>(value);
} else if (qstrcmp(name, "frameRate") == 0) {
- if (qVariantCanConvert<FrameRate>(value))
- d->frameRate = qvariant_cast<FrameRate>(value);
+ if (qVariantCanConvert<qreal>(value))
+ d->frameRate = qvariant_cast<qreal>(value);
} else if (qstrcmp(name, "pixelAspectRatio") == 0) {
if (qVariantCanConvert<QSize>(value))
d->pixelAspectRatio = qvariant_cast<QSize>(value);
} else if (qstrcmp(name, "sizeHint") == 0) {
// read only.
- } else if (qstrcmp(name, "yuvColorSpace") == 0) {
- if (qVariantCanConvert<YuvColorSpace>(value))
- d->yuvColorSpace = qvariant_cast<YuvColorSpace>(value);
+ } else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
+ if (qVariantCanConvert<YCbCrColorSpace>(value))
+ d->ycbcrColorSpace = qvariant_cast<YCbCrColorSpace>(value);
} else {
int id = 0;
for (; id < d->propertyNames.count() && d->propertyNames.at(id) != name; ++id) {}
diff --git a/src/multimedia/video/qvideosurfaceformat.h b/src/multimedia/video/qvideosurfaceformat.h
index b3005bda88..ee6024461d 100644
--- a/src/multimedia/video/qvideosurfaceformat.h
+++ b/src/multimedia/video/qvideosurfaceformat.h
@@ -68,13 +68,7 @@ public:
BottomToTop
};
- enum ViewportMode
- {
- ResetViewport,
- KeepViewport
- };
-
- enum YuvColorSpace
+ enum YCbCrColorSpace
{
YCbCr_Undefined,
YCbCr_BT601,
@@ -87,8 +81,6 @@ public:
#endif
};
- typedef QPair<int, int> FrameRate;
-
QVideoSurfaceFormat();
QVideoSurfaceFormat(
const QSize &size,
@@ -108,8 +100,8 @@ public:
QAbstractVideoBuffer::HandleType handleType() const;
QSize frameSize() const;
- void setFrameSize(const QSize &size, ViewportMode mode = ResetViewport);
- void setFrameSize(int width, int height, ViewportMode mode = ResetViewport);
+ void setFrameSize(const QSize &size);
+ void setFrameSize(int width, int height);
int frameWidth() const;
int frameHeight() const;
@@ -120,16 +112,15 @@ public:
Direction scanLineDirection() const;
void setScanLineDirection(Direction direction);
- FrameRate frameRate() const;
- void setFrameRate(const FrameRate &rate);
- void setFrameRate(int numerator, int denominator = 1);
+ qreal frameRate() const;
+ void setFrameRate(qreal rate);
QSize pixelAspectRatio() const;
void setPixelAspectRatio(const QSize &ratio);
void setPixelAspectRatio(int width, int height);
- YuvColorSpace yuvColorSpace() const;
- void setYuvColorSpace(YuvColorSpace colorSpace);
+ YCbCrColorSpace yCbCrColorSpace() const;
+ void setYCbCrColorSpace(YCbCrColorSpace colorSpace);
QSize sizeHint() const;
@@ -147,9 +138,8 @@ Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, const QVideoSurfaceFormat &);
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QVideoSurfaceFormat::FrameRate)
Q_DECLARE_METATYPE(QVideoSurfaceFormat::Direction)
-Q_DECLARE_METATYPE(QVideoSurfaceFormat::YuvColorSpace)
+Q_DECLARE_METATYPE(QVideoSurfaceFormat::YCbCrColorSpace)
QT_END_HEADER