]> www.vanbest.org Git - motioneye-debian/commitdiff
detect MMAL devices using vcgencmd
authorCalin Crisan <ccrisan@gmail.com>
Tue, 31 Oct 2017 19:45:30 +0000 (21:45 +0200)
committerCalin Crisan <ccrisan@gmail.com>
Tue, 31 Oct 2017 19:45:30 +0000 (21:45 +0200)
motioneye/handlers.py
motioneye/mmalctl.py [new file with mode: 0644]
motioneye/v4l2ctl.py

index 4fc206c8b439b791e6da2d32ad30e2a98b9e43e4..d69db8eaea5ab4d846f621651353467749316016 100644 (file)
@@ -30,6 +30,7 @@ from tornado.web import RequestHandler, HTTPError, asynchronous
 import config
 import mediafiles
 import mjpgclient
+import mmalctl
 import monitor
 import motionctl
 import powerctl
@@ -657,11 +658,8 @@ class ConfigHandler(BaseHandler):
                 if utils.is_mmal_camera(data):
                     configured_devices.add(data['mmalcam_name'])
 
-            if "vc.ril.camera" not in configured_devices:
-                cameras = [{'id': "vc.ril.camera", 'name': "VideoCore Camera (vc.ril.camera)"}]
-
-            else:
-                cameras = []
+            cameras = [{'id': d[0], 'name': d[1]} for d in mmalctl.list_devices()
+                       if (d[0] not in configured_devices)]
 
             self.finish_json({'cameras': cameras})
 
diff --git a/motioneye/mmalctl.py b/motioneye/mmalctl.py
new file mode 100644 (file)
index 0000000..ca525ca
--- /dev/null
@@ -0,0 +1,47 @@
+
+# Copyright (c) 2013 Calin Crisan
+# This file is part of motionEye.
+#
+# motionEye is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>. 
+
+import logging
+import subprocess
+
+import utils
+
+
+def list_devices():
+    # currently MMAL support is designed specifically for the RPi;
+    # therefore we can rely on the vcgencmd to report MMAL cameras
+
+    logging.debug('listing MMAL devices')
+
+    try:
+        binary = subprocess.check_output(['which', 'vcgencmd'], stderr=utils.DEV_NULL).strip()
+
+    except subprocess.CalledProcessError:  # not found
+        return []
+
+    try:
+        support = subprocess.check_output([binary, 'get_camera']).strip()
+
+    except subprocess.CalledProcessError:  # not found
+        return []
+
+    d = dict(p.split('=', 1) for p in support.split())
+    if d.get('detected') == d.get('supported') == '1':
+        logging.debug('MMAL camera detected')
+        return [('vc.ril.camera', 'VideoCore Camera')]
+
+    return []
index cd8c2a35a5e0379e68fd9742cf5dbef4b57bf262..d17409af4060d2ef240f4e581ac7742a27dcfa7a 100644 (file)
@@ -45,7 +45,7 @@ def find_v4l2_ctl():
 def list_devices():
     global _resolutions_cache, _ctrls_cache, _ctrl_values_cache
     
-    logging.debug('listing v4l2 devices...')
+    logging.debug('listing V4L2 devices')
     
     try:
         output = ''
@@ -96,7 +96,7 @@ def list_devices():
             devices.append((device, persistent_device, name))
         
             logging.debug('found device %(name)s: %(device)s, %(persistent_device)s' % {
-                    'name': name, 'device': device, 'persistent_device': persistent_device})
+                          'name': name, 'device': device, 'persistent_device': persistent_device})
 
         else:
             name = line.split('(')[0].strip()