summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/mediaplayer
diff options
context:
space:
mode:
authorLing Hu <ling.hu@nokia.com>2012-03-22 10:41:50 +1000
committerQt by Nokia <qt-info@nokia.com>2012-03-23 09:53:57 +0100
commitdceabd4b5cefa2cde7d76155c5690bb842d982d6 (patch)
treead63332c652795f097299dd5cf6a40e53d3e88d2 /src/plugins/gstreamer/mediaplayer
parent7e877a76db3ae2941b3f4d812bbf7faf24831bf7 (diff)
Make gstreamer player backend reserve/release video resource.
Use request/release of various video related controls as an indication for the decision. Change-Id: I3a2a288c7c46ca62459896745bbdda26961bb181 Reviewed-by: Michael Goddard <michael.goddard@nokia.com> Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
Diffstat (limited to 'src/plugins/gstreamer/mediaplayer')
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp25
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h4
2 files changed, 28 insertions, 1 deletions
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index 54dedf472..9a6b4b44b 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -70,6 +70,7 @@
#include <private/qmediaplaylistnavigator_p.h>
#include <qmediaplaylist.h>
+#include <private/qmediaresourceset_p.h>
QT_BEGIN_NAMESPACE
@@ -81,6 +82,7 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
, m_videoWindow(0)
, m_videoWidget(0)
#endif
+ , m_videoReferenceCount(0)
{
m_session = new QGstreamerPlayerSession(this);
m_control = new QGstreamerPlayerControl(m_session, this);
@@ -125,6 +127,7 @@ QMediaControl *QGstreamerPlayerService::requestControl(const char *name)
if (qstrcmp(name,QMediaVideoProbeControl_iid) == 0) {
if (m_session) {
QGstreamerVideoProbeControl *probe = new QGstreamerVideoProbeControl(this);
+ increaseVideoRef();
m_session->addProbe(probe);
return probe;
}
@@ -151,6 +154,7 @@ QMediaControl *QGstreamerPlayerService::requestControl(const char *name)
#endif
if (m_videoOutput) {
+ increaseVideoRef();
m_control->setVideoOutput(m_videoOutput);
return m_videoOutput;
}
@@ -164,12 +168,15 @@ void QGstreamerPlayerService::releaseControl(QMediaControl *control)
if (control == m_videoOutput) {
m_videoOutput = 0;
m_control->setVideoOutput(0);
+ decreaseVideoRef();
}
QGstreamerVideoProbeControl* videoProbe = qobject_cast<QGstreamerVideoProbeControl*>(control);
if (videoProbe) {
- if (m_session)
+ if (m_session) {
m_session->removeProbe(videoProbe);
+ decreaseVideoRef();
+ }
delete videoProbe;
return;
}
@@ -183,4 +190,20 @@ void QGstreamerPlayerService::releaseControl(QMediaControl *control)
}
}
+void QGstreamerPlayerService::increaseVideoRef()
+{
+ m_videoReferenceCount++;
+ if (m_videoReferenceCount == 1) {
+ m_control->resources()->setVideoEnabled(true);
+ }
+}
+
+void QGstreamerPlayerService::decreaseVideoRef()
+{
+ m_videoReferenceCount--;
+ if (m_videoReferenceCount == 0) {
+ m_control->resources()->setVideoEnabled(false);
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
index 57e023d14..e45f3aca8 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -86,6 +86,10 @@ private:
QMediaControl *m_videoWindow;
QMediaControl *m_videoWidget;
#endif
+
+ void increaseVideoRef();
+ void decreaseVideoRef();
+ int m_videoReferenceCount;
};
QT_END_NAMESPACE