diff options
Diffstat (limited to 'src/multimedia/audio')
-rw-r--r-- | src/multimedia/audio/qaudiobuffer.cpp | 6 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiodeviceinfo.cpp | 17 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiodeviceinfo.h | 2 | ||||
-rw-r--r-- | src/multimedia/audio/qsamplecache_p.cpp | 12 |
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 |