void QSoundEffectPrivate::setSource(const QUrl &url) { if (url.isEmpty()) { m_source = QUrl(); unloadSample(); return; } m_source = url; if (m_networkAccessManager == 0) m_networkAccessManager = new QNetworkAccessManager(this); m_stream = m_networkAccessManager->get(QNetworkRequest(m_source)); unloadSample(); loadSample(); }
void AudioSDLMixer::deinit() { stopMusic(); for (unsigned i=0;i<samples.size();++i) unloadSample(i); if ( audio_open ) { Mix_CloseAudio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); audio_open = 0; } }
void QSampleCache::setCapacity(qint64 capacity) { QMutexLocker locker(&m_mutex); if (m_capacity == capacity) return; #ifdef QT_SAMPLECACHE_DEBUG qDebug() << "QSampleCache: capacity changes from " << m_capacity << "to " << capacity; #endif if (m_capacity > 0 && capacity <= 0) { //memory management strategy changed for (QMap<QUrl, QSample*>::iterator it = m_samples.begin(); it != m_samples.end();) { QSample* sample = *it; if (sample->m_ref == 0) { unloadSample(sample); it = m_samples.erase(it); } else it++; } } m_capacity = capacity; refresh(0); }
// Called in both threads void QSampleCache::refresh(qint64 usageChange) { QMutexLocker locker(&m_mutex); m_usage += usageChange; if (m_capacity <= 0 || m_usage <= m_capacity) return; #ifdef QT_SAMPLECACHE_DEBUG qint64 recoveredSize = 0; #endif //free unused samples to keep usage under capacity limit. for (QMap<QUrl, QSample*>::iterator it = m_samples.begin(); it != m_samples.end();) { QSample* sample = *it; if (sample->m_ref > 0) { ++it; continue; } #ifdef QT_SAMPLECACHE_DEBUG recoveredSize += sample->m_soundData.size(); #endif unloadSample(sample); it = m_samples.erase(it); if (m_usage <= m_capacity) return; } #ifdef QT_SAMPLECACHE_DEBUG qDebug() << "QSampleCache: refresh(" << usageChange << ") recovered size =" << recoveredSize << "new usage =" << m_usage; #endif if (m_usage > m_capacity) qWarning() << "QSampleCache: usage[" << m_usage << " out of limit[" << m_capacity << "]"; }
QSoundEffectPrivate::~QSoundEffectPrivate() { m_reply->deleteLater(); unloadSample(); }