#include <pulse/ext-stream-restore.h>
#endif
+#include <private/qmediaresourcepolicy_p.h>
+#include <private/qmediaresourceset_p.h>
+
#include <unistd.h>
//#define QT_PA_DEBUG
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()
QSoundEffectPrivate::~QSoundEffectPrivate()
{
+ QMediaResourcePolicy::destroyResourceSet(m_resources);
+ m_resources = 0;
m_ref->release();
}
void QSoundEffectPrivate::play()
{
+ if (!m_resourcesAvailable)
+ return;
+
+ playAvailable();
+}
+
+void QSoundEffectPrivate::playAvailable()
+{
#ifdef QT_PA_DEBUG
qDebug() << this << "play";
#endif
#include <pulse/pulseaudio.h>
#include "qsamplecache_p.h"
+#include <private/qmediaresourcepolicy_p.h>
+#include <private/qmediaresourceset_p.h>
+
QT_BEGIN_NAMESPACE
class QSoundEffectRef;
void updateVolume();
void updateMuted();
+ void handleAvailabilityChanged(bool available);
+
private:
+ void playAvailable();
void playSample();
void emptyStream();
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