summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/camerabin/camerabinsession.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/gstreamer/camerabin/camerabinsession.cpp')
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index d7a96d333..e87e1b3f0 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -518,11 +518,19 @@ GstElement *CameraBinSession::buildCameraSource()
const QList<QByteArray> sources = envVideoSource.split(',');
for (const QByteArray &source : sources) {
QList<QByteArray> keyValue = source.split('=');
- if (keyValue.count() == 1) {
- m_videoSrc = gst_element_factory_make(keyValue.at(0), "camera_source");
- break;
- } else if (keyValue.at(0) == QGstUtils::cameraDriver(m_inputDevice, m_sourceFactory)) {
- m_videoSrc = gst_element_factory_make(keyValue.at(1), "camera_source");
+ QByteArray name = keyValue.at(0);
+ if (keyValue.count() > 1 && keyValue.at(0) == QGstUtils::cameraDriver(m_inputDevice, m_sourceFactory))
+ name = keyValue.at(1);
+
+ GError *error = NULL;
+ GstElement *element = gst_parse_launch(name, &error);
+
+ if (error) {
+ g_printerr("ERROR: %s: %s\n", name.constData(), GST_STR_NULL(error->message));
+ g_clear_error(&error);
+ }
+ if (element) {
+ m_videoSrc = element;
break;
}
}