summaryrefslogtreecommitdiffstats
path: root/src/imports/multimedia/qdeclarativemediabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/multimedia/qdeclarativemediabase.cpp')
-rw-r--r--src/imports/multimedia/qdeclarativemediabase.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/imports/multimedia/qdeclarativemediabase.cpp b/src/imports/multimedia/qdeclarativemediabase.cpp
index a1f80f2b4..934464c22 100644
--- a/src/imports/multimedia/qdeclarativemediabase.cpp
+++ b/src/imports/multimedia/qdeclarativemediabase.cpp
@@ -49,6 +49,7 @@
#include <qmediaservice.h>
#include <private/qmediaserviceprovider_p.h>
#include <qmetadatareadercontrol.h>
+#include <qmediaavailabilitycontrol.h>
#include "qdeclarativemediametadata_p.h"
@@ -98,6 +99,22 @@ public:
void stop() {}
};
+class QDeclarativeMediaBaseAvailabilityControl : public QMediaAvailabilityControl
+{
+public:
+ QDeclarativeMediaBaseAvailabilityControl(bool available)
+ : m_available(available)
+ {
+ }
+
+ QtMultimedia::AvailabilityError availability() const
+ {
+ return m_available ? QtMultimedia::NoError : QtMultimedia::ServiceMissingError;
+ }
+
+private:
+ bool m_available;
+};
class QDeclarativeMediaBaseMetaDataControl : public QMetaDataReaderControl
{
@@ -211,6 +228,7 @@ QDeclarativeMediaBase::QDeclarativeMediaBase()
, m_mediaProvider(0)
, m_metaDataControl(0)
, m_animation(0)
+ , m_availabilityControl(0)
, m_playbackState(QMediaPlayer::StoppedState)
, m_status(QMediaPlayer::NoMedia)
, m_error(QMediaPlayer::ServiceMissingError)
@@ -245,9 +263,12 @@ void QDeclarativeMediaBase::setObject(QObject *object, const QByteArray &type)
m_metaDataControl = qobject_cast<QMetaDataReaderControl *>(
m_mediaService->requestControl(QMetaDataReaderControl_iid));
m_mediaObject = new QDeclarativeMediaBaseObject(m_mediaService);
+ m_availabilityControl = m_mediaService->requestControl<QMediaAvailabilityControl*>();
}
}
+ bool realPlayer = m_playerControl;
+
if (m_playerControl) {
QObject::connect(m_playerControl, SIGNAL(stateChanged(QMediaPlayer::State)),
object, SLOT(_q_statusChanged()));
@@ -281,6 +302,12 @@ void QDeclarativeMediaBase::setObject(QObject *object, const QByteArray &type)
if (!m_metaDataControl)
m_metaDataControl = new QDeclarativeMediaBaseMetaDataControl(object);
+ if (!m_availabilityControl)
+ m_availabilityControl = new QDeclarativeMediaBaseAvailabilityControl(realPlayer);
+
+ QObject::connect(m_availabilityControl, SIGNAL(availabilityChanged(QtMultimedia::AvailabilityError)),
+ object, SLOT(_q_availabilityChanged(QtMultimedia::AvailabilityError)));
+
m_metaData.reset(new QDeclarativeMediaMetaData(m_metaDataControl));
QObject::connect(m_metaDataControl, SIGNAL(metaDataChanged()),