diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index 39f97e989d363c3b75ad1ed136519f4dcd4ad34e..3bb6ebffb566ba8dc198617af432d9d65a947b63 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");