From d49abfda2f5bbf15de3a5133c77d5115a75b3c2b Mon Sep 17 00:00:00 2001
From: VaL Doroshchuk <valentyn.doroshchuk@qt.io>
Date: Wed, 15 Nov 2017 09:40:29 +0100
Subject: [PATCH] Gstreamer: Emit an error if QCamera::start() fails

If a camera is not started successfully error() signal has to be
emitted.

Added emitting an error from video source.
Emitted only first error to prevent multiple subsequent errors.
Added debug message.

Task-number: QTBUG-51825
Change-Id: I6ac936d2728213a4a64f3e4eb25ae2e2f109acca
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
---
 .../gstreamer/camerabin/camerabinsession.cpp       | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index 39f97e989..3bb6ebffb 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -767,7 +767,11 @@ void CameraBinSession::setStateHelper(QCamera::State state)
 
 void CameraBinSession::setError(int err, const QString &errorString)
 {
-    m_pendingState = QCamera::UnloadedState;
+    // Emit only first error
+    if (m_pendingState == QCamera::UnloadedState)
+        return;
+
+    setState(QCamera::UnloadedState);
     emit error(err, errorString);
     setStatus(QCamera::UnloadedStatus);
 }
@@ -990,10 +994,14 @@ bool CameraBinSession::processBusMessage(const QGstreamerMessage &message)
             if (err && err->message) {
                 message = QString::fromUtf8(err->message);
                 qWarning() << "CameraBin error:" << message;
+#if CAMERABIN_DEBUG
+                qWarning() << QString::fromUtf8(debug);
+#endif
             }
 
-            //only report error messager from camerabin
-            if (GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_camerabin)) {
+            // Only report error messages from camerabin or video source
+            if (GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_camerabin)
+                || GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_videoSrc)) {
                 if (message.isEmpty())
                     message = tr("Camera error");
 
-- 
GitLab