DSCameraService::DSCameraService(QObject *parent):
QMediaService(parent)
+#if defined(HAVE_WIDGETS)
+ , m_viewFinderWidget(0)
+ #endif
+ , m_videoRenderer(0)
{
m_session = new DSCameraSession(this);
m_videoDevice = new DSVideoDeviceControl(m_session);
- m_videoRenderer = new DSVideoRendererControl(m_session, this);
-
m_imageCapture = new DSImageCaptureControl(m_session);
-#if defined(HAVE_WIDGETS)
- m_viewFinderWidget = new DSVideoWidgetControl(m_session);
-#endif
-
m_device = QByteArray("default");
}
#if defined(HAVE_WIDGETS)
if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
- if (m_viewFinderWidget) {
+ if (!m_viewFinderWidget && !m_videoRenderer) {
+ m_viewFinderWidget = new DSVideoWidgetControl(m_session);
return m_viewFinderWidget;
}
}
#endif
- if(qstrcmp(name,QVideoRendererControl_iid) == 0)
- return m_videoRenderer;
+ if (qstrcmp(name,QVideoRendererControl_iid) == 0) {
+#if defined(HAVE_WIDGETS)
+ if (!m_videoRenderer && !m_viewFinderWidget) {
+#else
+ if (!m_videoRenderer) {
+#endif
+ m_videoRenderer = new DSVideoRendererControl(m_session, this);
+ return m_videoRenderer;
+ }
+ }
if (qstrcmp(name,QVideoDeviceSelectorControl_iid) == 0)
return m_videoDevice;
void DSCameraService::releaseControl(QMediaControl *control)
{
- Q_UNUSED(control)
- // Implemented as a singleton, so we do nothing.
+ if (control == m_videoRenderer) {
+ delete m_videoRenderer;
+ m_videoRenderer = 0;
+ return;
+ }
+
+#if defined(HAVE_WIDGETS)
+ if (control == m_viewFinderWidget) {
+ delete m_viewFinderWidget;
+ m_viewFinderWidget = 0;
+ return;
+ }
+#endif
}
QT_END_NAMESPACE
class DSCameraSession;
class DSVideoOutputControl;
class DSVideoDeviceControl;
-class DSVideoRendererControl;
class DSImageCaptureControl;
-class DSVideoWidgetControl;
class DSCameraService : public QMediaService
DSCameraSession *m_session;
DSVideoOutputControl *m_videoOutput;
#if defined(HAVE_WIDGETS)
- DSVideoWidgetControl *m_viewFinderWidget;
+ QMediaControl *m_viewFinderWidget;
#endif
DSVideoDeviceControl *m_videoDevice;
- DSVideoRendererControl *m_videoRenderer;
+ QMediaControl *m_videoRenderer;
DSImageCaptureControl *m_imageCapture;
QByteArray m_device;
};