qtmobility/src/multimedia/qmediaimageviewerservice.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    42 #include "qmediaimageviewerservice_p.h"
    42 #include "qmediaimageviewerservice_p.h"
    43 
    43 
    44 #include "qmediacontrol_p.h"
    44 #include "qmediacontrol_p.h"
    45 #include "qmediaservice_p.h"
    45 #include "qmediaservice_p.h"
    46 
    46 
    47 #include "qmediacontent.h"
    47 #include <qmediacontent.h>
    48 #include "qmediaresource.h"
    48 #include <qmediaresource.h>
    49 #include "qvideooutputcontrol.h"
    49 #include <qmediaobject_p.h>
    50 #include "qmediaobject_p.h"
    50 #include <qvideorenderercontrol.h>
    51 #include "qvideorenderercontrol.h"
    51 #include <qvideowidgetcontrol.h>
    52 #include "qvideowidgetcontrol.h"
       
    53 
    52 
    54 #include <QtCore/qdebug.h>
    53 #include <QtCore/qdebug.h>
    55 
    54 
    56 #include <QtCore/qurl.h>
    55 #include <QtCore/qurl.h>
    57 #include <QtGui/qimagereader.h>
    56 #include <QtGui/qimagereader.h>
    59 
    58 
    60 #include <QtNetwork/qnetworkaccessmanager.h>
    59 #include <QtNetwork/qnetworkaccessmanager.h>
    61 #include <QtNetwork/qnetworkreply.h>
    60 #include <QtNetwork/qnetworkreply.h>
    62 #include <QtNetwork/qnetworkrequest.h>
    61 #include <QtNetwork/qnetworkrequest.h>
    63 
    62 
    64 #include <QtMultimedia/qabstractvideosurface.h>
    63 #include <qabstractvideosurface.h>
    65 #include <QtMultimedia/qvideosurfaceformat.h>
    64 #include <qvideosurfaceformat.h>
    66 
    65 
    67 QT_BEGIN_NAMESPACE
    66 QT_BEGIN_NAMESPACE
    68 
    67 
    69 class QMediaImageViewerServicePrivate : public QMediaServicePrivate
    68 class QMediaImageViewerServicePrivate : public QMediaServicePrivate
    70 {
    69 {
    71 public:
    70 public:
    72     QMediaImageViewerServicePrivate()
    71     QMediaImageViewerServicePrivate()
    73         : viewerControl(0)
    72         : viewerControl(0)
    74         , outputControl(0)
       
    75         , rendererControl(0)
    73         , rendererControl(0)
    76         , network(0)
    74         , network(0)
    77         , internalNetwork(0)
    75         , internalNetwork(0)
    78     {
    76     {
    79     }
    77     }
    80 
    78 
    81     bool load(QIODevice *device);
    79     bool load(QIODevice *device);
    82     void clear();
    80     void clear();
    83     void _q_outputChanged(QVideoOutputControl::Output output);
       
    84 
    81 
    85     QMediaImageViewerControl *viewerControl;
    82     QMediaImageViewerControl *viewerControl;
    86     QMediaImageViewerOutputControl *outputControl;
       
    87     QMediaImageViewerRenderer *rendererControl;
    83     QMediaImageViewerRenderer *rendererControl;
    88     QNetworkAccessManager *network;
    84     QNetworkAccessManager *network;
    89     QNetworkAccessManager *internalNetwork;
    85     QNetworkAccessManager *internalNetwork;
    90     QImage m_image;
    86     QImage m_image;
    91 };
    87 };
   139                 m_surface->present(QVideoFrame(image));
   135                 m_surface->present(QVideoFrame(image));
   140         }
   136         }
   141     }
   137     }
   142 }
   138 }
   143 
   139 
   144 QMediaImageViewerOutputControl::QMediaImageViewerOutputControl(QObject *parent)
       
   145     : QVideoOutputControl(parent)
       
   146     , m_output(NoOutput)
       
   147 {
       
   148 }
       
   149 
       
   150 QList<QVideoOutputControl::Output> QMediaImageViewerOutputControl::availableOutputs() const
       
   151 {
       
   152     return QList<Output>()
       
   153             << RendererOutput;
       
   154 }
       
   155 
       
   156 void QMediaImageViewerOutputControl::setOutput(Output output)
       
   157 {
       
   158     switch (output) {
       
   159     case RendererOutput:
       
   160         emit m_output = output;
       
   161         break;
       
   162     default:
       
   163         m_output = NoOutput;
       
   164     }
       
   165     emit outputChanged(m_output);
       
   166 }
       
   167 
       
   168 bool QMediaImageViewerServicePrivate::load(QIODevice *device)
   140 bool QMediaImageViewerServicePrivate::load(QIODevice *device)
   169 {
   141 {
   170     QImageReader reader(device);
   142     QImageReader reader(device);
   171 
   143 
   172     if (!reader.canRead()) {
   144     if (!reader.canRead()) {
   173         m_image = QImage();
   145         m_image = QImage();
   174     } else {
   146     } else {
   175         m_image = reader.read();
   147         m_image = reader.read();
   176     }
   148     }
   177 
   149 
   178     if (outputControl->output() == QVideoOutputControl::RendererOutput)
   150     if (rendererControl)
   179         rendererControl->showImage(m_image);
   151         rendererControl->showImage(m_image);
   180 
   152 
   181     return !m_image.isNull();
   153     return !m_image.isNull();
   182 }
   154 }
   183 
   155 
   184 void QMediaImageViewerServicePrivate::clear()
   156 void QMediaImageViewerServicePrivate::clear()
   185 {
   157 {
   186     m_image = QImage();
   158     m_image = QImage();
   187 
   159 
   188     if (outputControl->output() == QVideoOutputControl::RendererOutput)
   160     if (rendererControl)
   189         rendererControl->showImage(m_image);
       
   190 }
       
   191 
       
   192 void QMediaImageViewerServicePrivate::_q_outputChanged(QVideoOutputControl::Output output)
       
   193 {
       
   194     if (output != QVideoOutputControl::RendererOutput)
       
   195         rendererControl->showImage(QImage());
       
   196 
       
   197     if (output == QVideoOutputControl::RendererOutput)
       
   198         rendererControl->showImage(m_image);
   161         rendererControl->showImage(m_image);
   199 }
   162 }
   200 
   163 
   201 /*!
   164 /*!
   202     \class QMediaImageViewerService
   165     \class QMediaImageViewerService
   209     : QMediaService(*new QMediaImageViewerServicePrivate, parent)
   172     : QMediaService(*new QMediaImageViewerServicePrivate, parent)
   210 {
   173 {
   211     Q_D(QMediaImageViewerService);
   174     Q_D(QMediaImageViewerService);
   212 
   175 
   213     d->viewerControl = new QMediaImageViewerControl(this);
   176     d->viewerControl = new QMediaImageViewerControl(this);
   214     d->outputControl = new QMediaImageViewerOutputControl;
       
   215     connect(d->outputControl, SIGNAL(outputChanged(QVideoOutputControl::Output)),
       
   216             SLOT(_q_outputChanged(QVideoOutputControl::Output)));
       
   217 
       
   218     d->rendererControl = new QMediaImageViewerRenderer;
       
   219 }
   177 }
   220 
   178 
   221 /*!
   179 /*!
   222 */
   180 */
   223 QMediaImageViewerService::~QMediaImageViewerService()
   181 QMediaImageViewerService::~QMediaImageViewerService()
   224 {
   182 {
   225     Q_D(QMediaImageViewerService);
   183     Q_D(QMediaImageViewerService);
   226 
   184 
   227     delete d->rendererControl;
   185     delete d->rendererControl;
   228     delete d->outputControl;
       
   229     delete d->viewerControl;
   186     delete d->viewerControl;
   230 }
   187 }
   231 
   188 
   232 /*!
   189 /*!
   233 */
   190 */
   234 QMediaControl *QMediaImageViewerService::control(const char *name) const
   191 QMediaControl *QMediaImageViewerService::requestControl(const char *name)
   235 {
   192 {
   236     Q_D(const QMediaImageViewerService);
   193     Q_D(QMediaImageViewerService);
   237 
   194 
   238     if (qstrcmp(name, QMediaImageViewerControl_iid) == 0) {
   195     if (qstrcmp(name, QMediaImageViewerControl_iid) == 0) {
   239         return d->viewerControl;
   196         return d->viewerControl;
   240     } else if (qstrcmp(name, QVideoOutputControl_iid) == 0) {
       
   241         return d->outputControl;
       
   242     } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
   197     } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
   243         return d->rendererControl;
   198         if (!d->rendererControl) {
   244     } else {
   199             d->rendererControl = new QMediaImageViewerRenderer;
   245         return 0;
   200             d->rendererControl->showImage(d->m_image);
       
   201 
       
   202             return d->rendererControl;
       
   203         }
       
   204     }
       
   205     return 0;
       
   206 }
       
   207 
       
   208 void QMediaImageViewerService::releaseControl(QMediaControl *control)
       
   209 {
       
   210     Q_D(QMediaImageViewerService);
       
   211 
       
   212     if (!control) {
       
   213         qWarning("QMediaService::releaseControl():"
       
   214                 " Attempted release of null control");
       
   215     } else if (control == d->rendererControl) {
       
   216         delete d->rendererControl;
       
   217 
       
   218         d->rendererControl = 0;
   246     }
   219     }
   247 }
   220 }
   248 
   221 
   249 /*!
   222 /*!
   250 */
   223 */
   454     d->currentMedia = QMediaResource();
   427     d->currentMedia = QMediaResource();
   455     d->cancelRequests();
   428     d->cancelRequests();
   456 
   429 
   457     if (media.isNull()) {
   430     if (media.isNull()) {
   458         d->service->d_func()->clear();
   431         d->service->d_func()->clear();
   459 
   432         if (d->status != QMediaImageViewer::NoMedia) {
   460         d->status = QMediaImageViewer::NoMedia;
   433             d->status = QMediaImageViewer::NoMedia;
   461 
   434             emit mediaStatusChanged(d->status);
   462         emit mediaStatusChanged(d->status);
   435         }
   463     } else {
   436     } else {
   464         d->possibleResources = media.resources();
   437         d->possibleResources = media.resources();
   465         d->loadImage();
   438         d->loadImage();
   466     }
   439     }
   467 }
   440 }