Detect V4L availability
authorLisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Thu, 10 Jul 2014 22:19:37 +0000 (19:19 -0300)
committerYoann Lopes <yoann.lopes@digia.com>
Mon, 18 Aug 2014 13:07:47 +0000 (15:07 +0200)
Do not build related stuff if not found.
Makes GStreamer support available on Hurd.

Task-number: QTBUG-39762
Change-Id: I1f70b6975e5bef99ab2441aac4d90508bc8b64bd
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
12 files changed:
config.tests/linux_v4l/linux_v4l.pro [new file with mode: 0644]
config.tests/linux_v4l/main.cpp [new file with mode: 0644]
qtmultimedia.pro
src/gsttools/gsttools.pro
src/gsttools/qgstreamervideoinputdevicecontrol.cpp
src/plugins/gstreamer/camerabin/camerabin.pro
src/plugins/gstreamer/camerabin/camerabinserviceplugin.cpp
src/plugins/gstreamer/mediacapture/mediacapture.pro
src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
src/plugins/gstreamer/mediacapture/qgstreamercaptureserviceplugin.cpp
src/plugins/plugins.pro

diff --git a/config.tests/linux_v4l/linux_v4l.pro b/config.tests/linux_v4l/linux_v4l.pro
new file mode 100644 (file)
index 0000000..28dcadc
--- /dev/null
@@ -0,0 +1 @@
+SOURCES += main.cpp
diff --git a/config.tests/linux_v4l/main.cpp b/config.tests/linux_v4l/main.cpp
new file mode 100644 (file)
index 0000000..0a3040b
--- /dev/null
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <linux/videodev2.h>
+
+int main(int argc, char** argv)
+{
+    return 0;
+}
index c7f093c..bec5925 100644 (file)
@@ -25,6 +25,7 @@ win32 {
         qtCompileTest(gstreamer_photography)
         qtCompileTest(gstreamer_encodingprofiles)
         qtCompileTest(gstreamer_appsrc)
+        qtCompileTest(linux_v4l)
     }
     qtCompileTest(resourcepolicy)
     qtCompileTest(gpu_vivante)
index 15edd04..7c809a7 100644 (file)
@@ -100,6 +100,8 @@ config_gstreamer_appsrc {
     LIBS_PRIVATE += -lgstapp-0.10
 }
 
+config_linux_v4l: DEFINES += USE_V4L
+
 HEADERS += $$PRIVATE_HEADERS
 
 DESTDIR = $$QT.multimedia.libs
index e4e202c..dc00871 100644 (file)
 #include <QtCore/QDebug>
 
 #include <private/qcore_unix_p.h>
+
+#if defined(USE_V4L)
 #include <linux/videodev2.h>
+#endif
 
 QGstreamerVideoInputDeviceControl::QGstreamerVideoInputDeviceControl(QObject *parent)
     :QVideoDeviceSelectorControl(parent), m_source(0), m_selectedDevice(0)
@@ -118,6 +121,7 @@ void QGstreamerVideoInputDeviceControl::update()
         return;
     }
 
+#if defined(USE_V4L)
     QDir devDir("/dev");
     devDir.setFilter(QDir::System);
 
@@ -158,4 +162,5 @@ void QGstreamerVideoInputDeviceControl::update()
         }
         qt_safe_close(fd);
     }
+#endif
 }
index 9efa081..9ed821c 100644 (file)
@@ -81,6 +81,8 @@ config_gstreamer_photography {
     DEFINES += GST_USE_UNSTABLE_API #prevents warnings because of unstable photography API
 }
 
+config_linux_v4l: DEFINES += USE_V4L
+
 OTHER_FILES += \
     camerabin.json
 
index 3decd60..5fb419a 100644 (file)
 #include <private/qgstutils_p.h>
 
 #include <private/qcore_unix_p.h>
+
+#if defined(USE_V4L)
 #include <linux/videodev2.h>
+#endif
 
 QT_BEGIN_NAMESPACE
 
@@ -132,6 +135,7 @@ void CameraBinServicePlugin::updateDevices() const
     m_cameraDevices.clear();
     m_cameraDescriptions.clear();
 
+#if defined(USE_V4L)
     QDir devDir("/dev");
     devDir.setFilter(QDir::System);
 
@@ -173,6 +177,7 @@ void CameraBinServicePlugin::updateDevices() const
 
     if (!m_cameraDevices.isEmpty())
         m_defaultCameraDevice = m_cameraDevices.first();
+#endif
 }
 
 QT_END_NAMESPACE
index e8d039f..5baa0fd 100644 (file)
@@ -15,7 +15,6 @@ HEADERS += $$PWD/qgstreamercaptureservice.h \
     $$PWD/qgstreamerrecordercontrol.h \
     $$PWD/qgstreamermediacontainercontrol.h \
     $$PWD/qgstreamercameracontrol.h \
-    $$PWD/qgstreamerv4l2input.h \
     $$PWD/qgstreamercapturemetadatacontrol.h \
     $$PWD/qgstreamerimagecapturecontrol.h \
     $$PWD/qgstreamerimageencode.h \
@@ -28,7 +27,6 @@ SOURCES += $$PWD/qgstreamercaptureservice.cpp \
     $$PWD/qgstreamerrecordercontrol.cpp \
     $$PWD/qgstreamermediacontainercontrol.cpp \
     $$PWD/qgstreamercameracontrol.cpp \
-    $$PWD/qgstreamerv4l2input.cpp \
     $$PWD/qgstreamercapturemetadatacontrol.cpp \
     $$PWD/qgstreamerimagecapturecontrol.cpp \
     $$PWD/qgstreamerimageencode.cpp \
@@ -37,13 +35,18 @@ SOURCES += $$PWD/qgstreamercaptureservice.cpp \
 # Camera usage with gstreamer needs to have
 #CONFIG += use_gstreamer_camera
 
-use_gstreamer_camera {
-DEFINES += USE_GSTREAMER_CAMERA
+use_gstreamer_camera:config_linux_v4l {
+    DEFINES += USE_GSTREAMER_CAMERA
+
+    OTHER_FILES += \
+        mediacapturecamera.json
+
+    HEADERS += \
+        $$PWD/qgstreamerv4l2input.h
+    SOURCES += \
+        $$PWD/qgstreamerv4l2input.cpp
 
-OTHER_FILES += \
-    mediacapturecamera.json
 } else {
-OTHER_FILES += \
-    mediacapture.json
+    OTHER_FILES += \
+        mediacapture.json
 }
-
index 92b362f..2278f92 100644 (file)
 #include "qgstreamerimageencode.h"
 #include "qgstreamercameracontrol.h"
 #include <private/qgstreamerbushelper_p.h>
-#include "qgstreamerv4l2input.h"
 #include "qgstreamercapturemetadatacontrol.h"
 
+#if defined(USE_GSTREAMER_CAMERA)
+#include "qgstreamerv4l2input.h"
+#endif
+
 #include "qgstreamerimagecapturecontrol.h"
 #include <private/qgstreameraudioinputselector_p.h>
 #include <private/qgstreamervideoinputdevicecontrol_p.h>
@@ -74,7 +77,9 @@ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObje
     m_cameraControl = 0;
     m_metaDataControl = 0;
 
+#if defined(USE_GSTREAMER_CAMERA)
     m_videoInput = 0;
+#endif
     m_audioInputSelector = 0;
     m_videoInputDevice = 0;
 
@@ -90,6 +95,7 @@ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObje
         m_captureSession = new QGstreamerCaptureSession(QGstreamerCaptureSession::Audio, this);
     }
 
+#if defined(USE_GSTREAMER_CAMERA)
    if (service == Q_MEDIASERVICE_CAMERA) {
         m_captureSession = new QGstreamerCaptureSession(QGstreamerCaptureSession::AudioAndVideo, this);
         m_cameraControl = new QGstreamerCameraControl(m_captureSession);
@@ -111,6 +117,7 @@ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObje
 #endif
         m_imageCaptureControl = new QGstreamerImageCaptureControl(m_captureSession);
     }
+#endif
 
     m_audioInputSelector = new QGstreamerAudioInputSelector(this);
     connect(m_audioInputSelector, SIGNAL(activeInputChanged(QString)), m_captureSession, SLOT(setCaptureDevice(QString)));
index fc29b4f..563c48c 100644 (file)
@@ -78,7 +78,9 @@ private:
 
     QGstreamerCaptureSession *m_captureSession;
     QGstreamerCameraControl *m_cameraControl;
+#if defined(USE_GSTREAMER_CAMERA)
     QGstreamerV4L2Input *m_videoInput;
+#endif
     QGstreamerCaptureMetaDataControl *m_metaDataControl;
 
     QAudioInputSelectorControl *m_audioInputSelector;
index 8b88fbb..77a6c36 100644 (file)
 #include <private/qgstutils_p.h>
 
 #include <private/qcore_unix_p.h>
+
+#if defined(USE_GSTREAMER_CAMERA)
 #include <linux/videodev2.h>
+#endif
 
 QMediaService* QGstreamerCaptureServicePlugin::create(const QString &key)
 {
index 2677e26..6a23fd2 100644 (file)
@@ -43,7 +43,9 @@ unix:!mac:!android {
     }
 
     # v4l is turned off because it is not supported in Qt 5
-    # !maemo*:SUBDIRS += v4l
+    # config_linux_v4l {
+    #     !maemo*:SUBDIRS += v4l
+    # }
 }
 
 mac:!simulator {