summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/mediacapture
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2012-06-29 14:21:58 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-29 07:28:29 +0200
commit8bdceb93573971deb7ff4327dfa580956c8d9c03 (patch)
tree2efedcfe60147d418622fa5479b478c741447235 /src/plugins/gstreamer/mediacapture
parentb3e8783334f339e0a1f64670b8fb0e74699f735c (diff)
Gst Capture: image capture fixes
Report camera is ready to capture only in image capture modes; Emit capture failed if camera not configured for capture Change-Id: Ia2b92e2f8c760db948185a29c3e5ceae81dd3af4 Reviewed-by: Lev Zelenskiy <lev.zelenskiy@nokia.com> Reviewed-by: Ling Hu <ling.hu@nokia.com>
Diffstat (limited to 'src/plugins/gstreamer/mediacapture')
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp5
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h2
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.cpp20
3 files changed, 25 insertions, 2 deletions
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
index ec8351202..30b1012b7 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp
@@ -773,6 +773,11 @@ QGstreamerCaptureSession::State QGstreamerCaptureSession::state() const
return m_state;
}
+QGstreamerCaptureSession::State QGstreamerCaptureSession::pendingState() const
+{
+ return m_pendingState;
+}
+
void QGstreamerCaptureSession::setState(QGstreamerCaptureSession::State newState)
{
if (newState == m_pendingState && !m_waitingForEos)
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
index c72d2f290..7c88ce230 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h
@@ -127,6 +127,8 @@ public:
void captureImage(int requestId, const QString &fileName);
State state() const;
+ State pendingState() const;
+
qint64 duration() const;
bool isMuted() const { return m_muted; }
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.cpp
index a433ac2f5..e9fc3a331 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamerimagecapturecontrol.cpp
@@ -63,6 +63,21 @@ bool QGstreamerImageCaptureControl::isReadyForCapture() const
int QGstreamerImageCaptureControl::capture(const QString &fileName)
{
+ m_lastId++;
+
+ //it's allowed to request image capture while camera is starting
+ if (m_session->pendingState() == QGstreamerCaptureSession::StoppedState ||
+ !(m_session->captureMode() & QGstreamerCaptureSession::Image)) {
+ //emit error in the next event loop,
+ //so application can associate it with returned request id.
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(int, m_lastId),
+ Q_ARG(int, QCameraImageCapture::NotReadyError),
+ Q_ARG(QString,tr("Not ready to capture")));
+
+ return m_lastId;
+ }
+
QString path = fileName;
if (path.isEmpty()) {
int lastImage = 0;
@@ -77,7 +92,6 @@ int QGstreamerImageCaptureControl::capture(const QString &fileName)
10,
QLatin1Char('0'));
}
- m_lastId++;
m_session->captureImage(m_lastId, path);
@@ -91,7 +105,9 @@ void QGstreamerImageCaptureControl::cancelCapture()
void QGstreamerImageCaptureControl::updateState()
{
- bool ready = m_session->state() == QGstreamerCaptureSession::PreviewState;
+ bool ready = (m_session->state() == QGstreamerCaptureSession::PreviewState) &&
+ (m_session->captureMode() & QGstreamerCaptureSession::Image);
+
if (m_ready != ready) {
emit readyForCaptureChanged(m_ready = ready);
}