qtmobility/src/multimedia/qmediaimageviewerservice.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- a/qtmobility/src/multimedia/qmediaimageviewerservice.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/src/multimedia/qmediaimageviewerservice.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -44,12 +44,11 @@
 #include "qmediacontrol_p.h"
 #include "qmediaservice_p.h"
 
-#include "qmediacontent.h"
-#include "qmediaresource.h"
-#include "qvideooutputcontrol.h"
-#include "qmediaobject_p.h"
-#include "qvideorenderercontrol.h"
-#include "qvideowidgetcontrol.h"
+#include <qmediacontent.h>
+#include <qmediaresource.h>
+#include <qmediaobject_p.h>
+#include <qvideorenderercontrol.h>
+#include <qvideowidgetcontrol.h>
 
 #include <QtCore/qdebug.h>
 
@@ -61,8 +60,8 @@
 #include <QtNetwork/qnetworkreply.h>
 #include <QtNetwork/qnetworkrequest.h>
 
-#include <QtMultimedia/qabstractvideosurface.h>
-#include <QtMultimedia/qvideosurfaceformat.h>
+#include <qabstractvideosurface.h>
+#include <qvideosurfaceformat.h>
 
 QT_BEGIN_NAMESPACE
 
@@ -71,7 +70,6 @@
 public:
     QMediaImageViewerServicePrivate()
         : viewerControl(0)
-        , outputControl(0)
         , rendererControl(0)
         , network(0)
         , internalNetwork(0)
@@ -80,10 +78,8 @@
 
     bool load(QIODevice *device);
     void clear();
-    void _q_outputChanged(QVideoOutputControl::Output output);
 
     QMediaImageViewerControl *viewerControl;
-    QMediaImageViewerOutputControl *outputControl;
     QMediaImageViewerRenderer *rendererControl;
     QNetworkAccessManager *network;
     QNetworkAccessManager *internalNetwork;
@@ -141,30 +137,6 @@
     }
 }
 
-QMediaImageViewerOutputControl::QMediaImageViewerOutputControl(QObject *parent)
-    : QVideoOutputControl(parent)
-    , m_output(NoOutput)
-{
-}
-
-QList<QVideoOutputControl::Output> QMediaImageViewerOutputControl::availableOutputs() const
-{
-    return QList<Output>()
-            << RendererOutput;
-}
-
-void QMediaImageViewerOutputControl::setOutput(Output output)
-{
-    switch (output) {
-    case RendererOutput:
-        emit m_output = output;
-        break;
-    default:
-        m_output = NoOutput;
-    }
-    emit outputChanged(m_output);
-}
-
 bool QMediaImageViewerServicePrivate::load(QIODevice *device)
 {
     QImageReader reader(device);
@@ -175,7 +147,7 @@
         m_image = reader.read();
     }
 
-    if (outputControl->output() == QVideoOutputControl::RendererOutput)
+    if (rendererControl)
         rendererControl->showImage(m_image);
 
     return !m_image.isNull();
@@ -185,16 +157,7 @@
 {
     m_image = QImage();
 
-    if (outputControl->output() == QVideoOutputControl::RendererOutput)
-        rendererControl->showImage(m_image);
-}
-
-void QMediaImageViewerServicePrivate::_q_outputChanged(QVideoOutputControl::Output output)
-{
-    if (output != QVideoOutputControl::RendererOutput)
-        rendererControl->showImage(QImage());
-
-    if (output == QVideoOutputControl::RendererOutput)
+    if (rendererControl)
         rendererControl->showImage(m_image);
 }
 
@@ -211,11 +174,6 @@
     Q_D(QMediaImageViewerService);
 
     d->viewerControl = new QMediaImageViewerControl(this);
-    d->outputControl = new QMediaImageViewerOutputControl;
-    connect(d->outputControl, SIGNAL(outputChanged(QVideoOutputControl::Output)),
-            SLOT(_q_outputChanged(QVideoOutputControl::Output)));
-
-    d->rendererControl = new QMediaImageViewerRenderer;
 }
 
 /*!
@@ -225,24 +183,39 @@
     Q_D(QMediaImageViewerService);
 
     delete d->rendererControl;
-    delete d->outputControl;
     delete d->viewerControl;
 }
 
 /*!
 */
-QMediaControl *QMediaImageViewerService::control(const char *name) const
+QMediaControl *QMediaImageViewerService::requestControl(const char *name)
 {
-    Q_D(const QMediaImageViewerService);
+    Q_D(QMediaImageViewerService);
 
     if (qstrcmp(name, QMediaImageViewerControl_iid) == 0) {
         return d->viewerControl;
-    } else if (qstrcmp(name, QVideoOutputControl_iid) == 0) {
-        return d->outputControl;
     } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
-        return d->rendererControl;
-    } else {
-        return 0;
+        if (!d->rendererControl) {
+            d->rendererControl = new QMediaImageViewerRenderer;
+            d->rendererControl->showImage(d->m_image);
+
+            return d->rendererControl;
+        }
+    }
+    return 0;
+}
+
+void QMediaImageViewerService::releaseControl(QMediaControl *control)
+{
+    Q_D(QMediaImageViewerService);
+
+    if (!control) {
+        qWarning("QMediaService::releaseControl():"
+                " Attempted release of null control");
+    } else if (control == d->rendererControl) {
+        delete d->rendererControl;
+
+        d->rendererControl = 0;
     }
 }
 
@@ -456,10 +429,10 @@
 
     if (media.isNull()) {
         d->service->d_func()->clear();
-
-        d->status = QMediaImageViewer::NoMedia;
-
-        emit mediaStatusChanged(d->status);
+        if (d->status != QMediaImageViewer::NoMedia) {
+            d->status = QMediaImageViewer::NoMedia;
+            emit mediaStatusChanged(d->status);
+        }
     } else {
         d->possibleResources = media.resources();
         d->loadImage();