Gst capture service: capture mode fixes
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Fri, 29 Jun 2012 03:35:41 +0000 (13:35 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 29 Jun 2012 05:28:22 +0000 (07:28 +0200)
Fixed reporting the current capture mode
Set the correct default capture mode
Allow viewfinder only and Video+Image capture modes

Change-Id: Ib12504304bca22fe664631ff5ffbc0a392ba34a8
Reviewed-by: Ling Hu <ling.hu@nokia.com>
Reviewed-by: Lev Zelenskiy <lev.zelenskiy@nokia.com>
src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.cpp
src/plugins/gstreamer/mediacapture/qgstreamercameracontrol.h
src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h

index 2d9283f..2dd7814 100644 (file)
@@ -64,6 +64,8 @@ QGstreamerCameraControl::QGstreamerCameraControl(QGstreamerCaptureSession *sessi
             SLOT(reloadLater()));
     connect(m_session, SIGNAL(readyChanged(bool)),
             SLOT(reloadLater()));
+
+    m_session->setCaptureMode(QGstreamerCaptureSession::Image);
 }
 
 QGstreamerCameraControl::~QGstreamerCameraControl()
@@ -72,16 +74,22 @@ QGstreamerCameraControl::~QGstreamerCameraControl()
 
 void QGstreamerCameraControl::setCaptureMode(QCamera::CaptureModes mode)
 {
-    if (m_captureMode == mode)
+    if (m_captureMode == mode || !isCaptureModeSupported(mode))
         return;
 
+    m_captureMode = mode;
+
     switch (mode) {
+    case QCamera::CaptureViewfinder:
     case QCamera::CaptureStillImage:
         m_session->setCaptureMode(QGstreamerCaptureSession::Image);
         break;
     case QCamera::CaptureVideo:
         m_session->setCaptureMode(QGstreamerCaptureSession::AudioAndVideo);
         break;
+    case QCamera::CaptureVideo | QCamera::CaptureStillImage:
+        m_session->setCaptureMode(QGstreamerCaptureSession::AudioAndVideoAndImage);
+        break;
     }
 
     emit captureModeChanged(mode);
@@ -89,6 +97,12 @@ void QGstreamerCameraControl::setCaptureMode(QCamera::CaptureModes mode)
     reloadLater();
 }
 
+bool QGstreamerCameraControl::isCaptureModeSupported(QCamera::CaptureModes mode) const
+{
+    //only CaptureStillImage and CaptureVideo bits are allowed
+    return (mode & (QCamera::CaptureStillImage | QCamera::CaptureVideo)) == mode;
+}
+
 void QGstreamerCameraControl::setState(QCamera::State state)
 {
     if (m_state == state)
index f7de4b4..ffbf08c 100644 (file)
@@ -66,10 +66,7 @@ public:
     QCamera::CaptureModes captureMode() const { return m_captureMode; }
     void setCaptureMode(QCamera::CaptureModes mode);
 
-    bool isCaptureModeSupported(QCamera::CaptureModes mode) const
-    {
-        return mode == QCamera::CaptureStillImage || mode == QCamera::CaptureVideo;
-    }
+    bool isCaptureModeSupported(QCamera::CaptureModes mode) const;
 
     QCamera::LockTypes supportedLocks() const
     {
index e8fe27c..c72d2f2 100644 (file)
@@ -86,7 +86,12 @@ class QGstreamerCaptureSession : public QObject, public QGstreamerBusMessageFilt
     Q_ENUMS(CaptureMode)
     Q_INTERFACES(QGstreamerBusMessageFilter)
 public:
-    enum CaptureMode { Audio = 1, Video = 2, Image=4, AudioAndVideo = Audio | Video };
+    enum CaptureMode { Audio = 1,
+                       Video = 2,
+                       Image = 4,
+                       AudioAndVideo = Audio | Video,
+                       AudioAndVideoAndImage = Audio | Video | Image
+                     };
     enum State { StoppedState, PreviewState, PausedState, RecordingState };
 
     QGstreamerCaptureSession(CaptureMode captureMode, QObject *parent);