diff options
author | Ling Hu <ling.hu@nokia.com> | 2012-03-22 10:41:50 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-23 09:53:57 +0100 |
commit | dceabd4b5cefa2cde7d76155c5690bb842d982d6 (patch) | |
tree | ad63332c652795f097299dd5cf6a40e53d3e88d2 /src/plugins/gstreamer/mediaplayer | |
parent | 7e877a76db3ae2941b3f4d812bbf7faf24831bf7 (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.cpp | 25 | ||||
-rw-r--r-- | src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h | 4 |
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 |