summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.cpp31
-rw-r--r--src/multimedia/audio/qsoundeffect_pulse_p.h17
2 files changed, 47 insertions, 1 deletions
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.cpp b/src/multimedia/audio/qsoundeffect_pulse_p.cpp
index 570870fc9..caea43d14 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.cpp
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.cpp
@@ -61,6 +61,9 @@
#include <pulse/ext-stream-restore.h>
#endif
+#include <private/qmediaresourcepolicy_p.h>
+#include <private/qmediaresourceset_p.h>
+
#include <unistd.h>
//#define QT_PA_DEBUG
@@ -388,10 +391,26 @@ QSoundEffectPrivate::QSoundEffectPrivate(QObject* parent):
m_runningCount(0),
m_reloadCategory(false),
m_sample(0),
- m_position(0)
+ m_position(0),
+ m_resourcesAvailable(false)
{
m_ref = new QSoundEffectRef(this);
pa_sample_spec_init(&m_pulseSpec);
+
+ m_resources = QMediaResourcePolicy::createResourceSet<QMediaPlayerResourceSetInterface>();
+ Q_ASSERT(m_resources);
+ m_resourcesAvailable = m_resources->isAvailable();
+ connect(m_resources, SIGNAL(availabilityChanged(bool)), SLOT(handleAvailabilityChanged(bool)));
+}
+
+void QSoundEffectPrivate::handleAvailabilityChanged(bool available)
+{
+ m_resourcesAvailable = available;
+#ifdef DEBUG_RESOURCE
+ qDebug() << Q_FUNC_INFO << "Resource availability changed " << m_resourcesAvailable;
+#endif
+ if (!m_resourcesAvailable)
+ stop();
}
void QSoundEffectPrivate::release()
@@ -437,6 +456,8 @@ void QSoundEffectPrivate::setCategory(const QString &category)
QSoundEffectPrivate::~QSoundEffectPrivate()
{
+ QMediaResourcePolicy::destroyResourceSet(m_resources);
+ m_resources = 0;
m_ref->release();
}
@@ -626,6 +647,14 @@ void QSoundEffectPrivate::setLoopsRemaining(int loopsRemaining)
void QSoundEffectPrivate::play()
{
+ if (!m_resourcesAvailable)
+ return;
+
+ playAvailable();
+}
+
+void QSoundEffectPrivate::playAvailable()
+{
#ifdef QT_PA_DEBUG
qDebug() << this << "play";
#endif
diff --git a/src/multimedia/audio/qsoundeffect_pulse_p.h b/src/multimedia/audio/qsoundeffect_pulse_p.h
index 042679180..a20f95693 100644
--- a/src/multimedia/audio/qsoundeffect_pulse_p.h
+++ b/src/multimedia/audio/qsoundeffect_pulse_p.h
@@ -62,6 +62,9 @@
#include <pulse/pulseaudio.h>
#include "qsamplecache_p.h"
+#include <private/qmediaresourcepolicy_p.h>
+#include <private/qmediaresourceset_p.h>
+
QT_BEGIN_NAMESPACE
class QSoundEffectRef;
@@ -119,7 +122,10 @@ private Q_SLOTS:
void updateVolume();
void updateMuted();
+ void handleAvailabilityChanged(bool available);
+
private:
+ void playAvailable();
void playSample();
void emptyStream();
@@ -164,6 +170,17 @@ private:
QSample *m_sample;
int m_position;
QSoundEffectRef *m_ref;
+
+ enum ResourceStatus {
+ NoResources,
+ WaitingResources,
+ GrantedResources,
+ DeniedResources
+ };
+ ResourceStatus m_resourceStatus;
+ bool m_resourcesAvailable;
+
+ QMediaPlayerResourceSetInterface *m_resources;
};
QT_END_NAMESPACE