summaryrefslogtreecommitdiffstats
path: root/src/multimedia/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/audio')
-rw-r--r--src/multimedia/audio/qaudiobuffer.cpp6
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.cpp17
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.h2
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp12
4 files changed, 20 insertions, 17 deletions
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp
index 1e43ebd00..999f280b3 100644
--- a/src/multimedia/audio/qaudiobuffer.cpp
+++ b/src/multimedia/audio/qaudiobuffer.cpp
@@ -164,7 +164,7 @@ QAudioBufferPrivate *QAudioBufferPrivate::clone()
// We want to create a single bufferprivate with a
// single qaab
// This should only be called when the count is > 1
- Q_ASSERT(mCount.load() > 1);
+ Q_ASSERT(mCount.loadRelaxed() > 1);
if (mProvider) {
QAbstractAudioBuffer *abuf = mProvider->clone();
@@ -458,7 +458,7 @@ void *QAudioBuffer::data()
if (!isValid())
return nullptr;
- if (d->mCount.load() != 1) {
+ if (d->mCount.loadRelaxed() != 1) {
// Can't share a writable buffer
// so we need to detach
QAudioBufferPrivate *newd = d->clone();
@@ -483,7 +483,7 @@ void *QAudioBuffer::data()
if (memBuffer) {
d->mProvider->release();
- d->mCount.store(1);
+ d->mCount.storeRelaxed(1);
d->mProvider = memBuffer;
return memBuffer->writableData();
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
index b8cac18eb..051ef8b3f 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo.cpp
@@ -328,16 +328,12 @@ QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
nearest.setByteOrder(order);
for (QAudioFormat::SampleType sample : qAsConst(testSampleTypes)) {
nearest.setSampleType(sample);
- QMapIterator<int, int> sz(testSampleSizes);
- while (sz.hasNext()) {
- sz.next();
- nearest.setSampleSize(sz.value());
+ for (int sampleSize : qAsConst(testSampleSizes)) {
+ nearest.setSampleSize(sampleSize);
for (int channel : qAsConst(testChannels)) {
nearest.setChannelCount(channel);
- QMapIterator<int, int> i(testSampleRates);
- while (i.hasNext()) {
- i.next();
- nearest.setSampleRate(i.value());
+ for (int sampleRate : qAsConst(testSampleRates)) {
+ nearest.setSampleRate(sampleRate);
if (isFormatSupported(nearest))
return nearest;
}
@@ -449,7 +445,10 @@ QAudioDeviceInfo::QAudioDeviceInfo(const QString &realm, const QByteArray &handl
}
/*!
- \internal
+ Returns the key that represents the audio plugin.
+
+ \since 5.14
+ \sa QAudioSystemPlugin
*/
QString QAudioDeviceInfo::realm() const
{
diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h
index 390458b39..015c8bad7 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.h
+++ b/src/multimedia/audio/qaudiodeviceinfo.h
@@ -87,6 +87,7 @@ public:
QList<int> supportedSampleSizes() const;
QList<QAudioFormat::Endian> supportedByteOrders() const;
QList<QAudioFormat::SampleType> supportedSampleTypes() const;
+ QString realm() const;
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
@@ -95,7 +96,6 @@ public:
private:
QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
- QString realm() const;
QByteArray handle() const;
QAudio::Mode mode() const;
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index 945fabe52..35234f8bb 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -295,9 +295,12 @@ void QSample::loadIfNecessary()
}
}
-// Called in both threads
+// Called in application thread
bool QSampleCache::notifyUnreferencedSample(QSample* sample)
{
+ if (m_loadingThread.isRunning())
+ m_loadingThread.wait();
+
QMutexLocker locker(&m_mutex);
if (m_capacity > 0)
return false;
@@ -306,16 +309,17 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample)
return true;
}
-// Called in application threadd
+// Called in application thread
void QSample::release()
{
QMutexLocker locker(&m_mutex);
#ifdef QT_SAMPLECACHE_DEBUG
qDebug() << "Sample:: release" << this << QThread::currentThread() << m_ref;
#endif
- m_ref--;
- if (m_ref == 0)
+ if (--m_ref == 0) {
+ locker.unlock();
m_parent->notifyUnreferencedSample(this);
+ }
}
// Called in dtor and when stream is loaded