qtmobility/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- a/qtmobility/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayerservice.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayerservice.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -47,7 +47,6 @@
 #include "qgstreamerplayercontrol.h"
 #include "qgstreamerplayersession.h"
 #include "qgstreamermetadataprovider.h"
-#include "qgstreamervideooutputcontrol.h"
 
 #include "qgstreamervideooverlay.h"
 #include "qgstreamervideorenderer.h"
@@ -59,74 +58,61 @@
 #include <qmediaplaylist.h>
 
 QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
-     QMediaService(parent)
+     QMediaService(parent),
+     m_videoOutput(0),
+     m_videoRenderer(0),
+     m_videoWindow(0),
+     m_videoWidget(0)
 {
     m_session = new QGstreamerPlayerSession(this);
     m_control = new QGstreamerPlayerControl(m_session, this);
     m_metaData = new QGstreamerMetaDataProvider(m_session, this);
-    m_videoOutput = new QGstreamerVideoOutputControl(this);
     m_streamsControl = new QGstreamerStreamsControl(m_session,this);
 
-    connect(m_videoOutput, SIGNAL(outputChanged(QVideoOutputControl::Output)),
-            this, SLOT(videoOutputChanged(QVideoOutputControl::Output)));
     m_videoRenderer = new QGstreamerVideoRenderer(this);
+#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
     m_videoWindow = new QGstreamerVideoOverlay(this);
     m_videoWidget = new QGstreamerVideoWidgetControl(this);
-
-    m_videoOutput->setAvailableOutputs(QList<QVideoOutputControl::Output>()
-            << QVideoOutputControl::RendererOutput
-            << QVideoOutputControl::WindowOutput
-            << QVideoOutputControl::WidgetOutput);
+#endif
 }
 
 QGstreamerPlayerService::~QGstreamerPlayerService()
 {
 }
 
-QMediaControl *QGstreamerPlayerService::control(const char *name) const
+QMediaControl *QGstreamerPlayerService::requestControl(const char *name)
 {
     if (qstrcmp(name,QMediaPlayerControl_iid) == 0)
         return m_control;
 
-    if (qstrcmp(name,QMetaDataControl_iid) == 0)
+    if (qstrcmp(name,QMetaDataReaderControl_iid) == 0)
         return m_metaData;
 
     if (qstrcmp(name,QMediaStreamsControl_iid) == 0)
         return m_streamsControl;
 
-    if (qstrcmp(name, QVideoOutputControl_iid) == 0)
-        return m_videoOutput;
-
-    if (qstrcmp(name, QVideoWidgetControl_iid) == 0)
-        return m_videoWidget;
+    if (!m_videoOutput) {
+        if (qstrcmp(name, QVideoWidgetControl_iid) == 0)
+            m_videoOutput = m_videoWidget;
+        else if (qstrcmp(name, QVideoRendererControl_iid) == 0)
+            m_videoOutput = m_videoRenderer;
+        else  if (qstrcmp(name, QVideoWindowControl_iid) == 0)
+            m_videoOutput = m_videoWindow;
 
-    if (qstrcmp(name, QVideoRendererControl_iid) == 0)
-        return m_videoRenderer;
-
-    if (qstrcmp(name, QVideoWindowControl_iid) == 0)
-        return m_videoWindow;
+        if (m_videoOutput) {
+            m_control->setVideoOutput(m_videoOutput);
+            return m_videoOutput;
+        }
+    }
 
     return 0;
 }
 
-void QGstreamerPlayerService::videoOutputChanged(QVideoOutputControl::Output output)
+void QGstreamerPlayerService::releaseControl(QMediaControl *control)
 {
-    switch (output) {
-    case QVideoOutputControl::NoOutput:
+    if (control == m_videoOutput) {
+        m_videoOutput = 0;
         m_control->setVideoOutput(0);
-        break;
-    case QVideoOutputControl::RendererOutput:
-        m_control->setVideoOutput(m_videoRenderer);
-        break;
-    case QVideoOutputControl::WindowOutput:
-        m_control->setVideoOutput(m_videoWindow);
-        break;
-    case QVideoOutputControl::WidgetOutput:
-        m_control->setVideoOutput(m_videoWidget);
-        break;
-    default:
-        qWarning("Invalid video output selection");
-        break;
     }
 }