From 20f29f37dccc479dbbf933a5dabf66aedbb4940e Mon Sep 17 00:00:00 2001 From: Mohammed Sameer Date: Sat, 22 Dec 2012 19:16:53 +0200 Subject: [PATCH] Reworked how video and wrapper sources are being created --- lib/qtcamdevice.cpp | 8 +++++- lib/qtcamdevice_p.h | 62 ++++++++++++++++++--------------------------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/lib/qtcamdevice.cpp b/lib/qtcamdevice.cpp index a8430dc..6b9574f 100644 --- a/lib/qtcamdevice.cpp +++ b/lib/qtcamdevice.cpp @@ -56,7 +56,13 @@ QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name, d_ptr->propertySetter = new QtCamPropertySetter(d_ptr); d_ptr->createAndAddElement(d_ptr->conf->audioSource(), "audio-source", "QtCameraAudioSrc"); - d_ptr->createAndAddVideoSource(); + if (!d_ptr->conf->wrapperVideoSource().isEmpty() && + !d_ptr->conf->wrapperVideoSourceProperty().isEmpty()) { + d_ptr->createAndAddVideoSourceAndWrapper(); + } + else { + d_ptr->createAndAddVideoSource(); + } int flags = 0x00000001 /* no-audio-conversion - Do not use audio conversion elements */ diff --git a/lib/qtcamdevice_p.h b/lib/qtcamdevice_p.h index b5b8db5..717057e 100644 --- a/lib/qtcamdevice_p.h +++ b/lib/qtcamdevice_p.h @@ -65,50 +65,38 @@ public: return elem; } - void createAndAddVideoSource() { - // TODO: rework this function - GstElement *src, *wrapper; - QString wrapperSrc = conf->wrapperVideoSource(); - QString prop = conf->wrapperVideoSourceProperty(); - - if (!prop.isEmpty() && !wrapperSrc.isEmpty()) { - wrapper = gst_element_factory_make(wrapperSrc.toAscii(), "QCameraWrapperVideoSrc"); - if (!wrapper) { - qCritical() << "Failed to create wrapper source" << wrapperSrc; - return; - } - } + void createAndAddVideoSourceAndWrapper() { + videoSource = gst_element_factory_make(conf->videoSource().toUtf8().constData(), + "QtCameraVideoSrc"); + wrapperVideoSource = gst_element_factory_make(conf->wrapperVideoSource().toUtf8().constData(), + "QCameraWrapperVideoSrc"); - src = gst_element_factory_make(conf->videoSource().toAscii(), - "QtCameraVideoSrc"); - if (!src) { - qCritical() << "Failed to create video source"; - if (wrapper) { - gst_object_unref(wrapper); - } - return; + if (wrapperVideoSource && videoSource) { + g_object_set(wrapperVideoSource, conf->wrapperVideoSourceProperty().toUtf8().constData(), + videoSource, NULL); + g_object_set(cameraBin, "camera-source", wrapperVideoSource, NULL); } - - if (wrapper) { - g_object_set(wrapper, prop.toAscii(), src, NULL); - g_object_set(cameraBin, "camera-source", wrapper, NULL); + else if (wrapperVideoSource) { + qWarning() << "Failed to create video source"; + g_object_set(cameraBin, "camera-source", wrapperVideoSource, NULL); } - - videoSource = src; - wrapperVideoSource = wrapper; - - if (!id.isValid() || id.isNull()) { - return; + else if (videoSource) { + qWarning() << "Failed to create wrapper source"; + g_object_set(cameraBin, "camera-source", videoSource, NULL); + } + else { + qWarning() << "Failed to create both video and wrapper sources"; } + } - if (conf->deviceScannerType() == SCANNER_TYPE_ENUM) { - int dev = id.toInt(); - g_object_set(src, conf->deviceScannerProperty().toAscii().data(), dev, NULL); + void createAndAddVideoSource() { + videoSource = gst_element_factory_make(conf->videoSource().toUtf8().constData(), + "QtCameraVideoSrc"); + if (!videoSource) { + qCritical() << "Failed to create video source"; } else { - QString dev = id.toString(); - g_object_set(src, conf->deviceScannerProperty().toAscii().data(), - dev.toAscii().data(), NULL); + g_object_set(cameraBin, "camera-source", videoSource, NULL); } } -- 2.25.1