From: Calin Crisan Date: Tue, 31 Oct 2017 19:45:30 +0000 (+0200) Subject: detect MMAL devices using vcgencmd X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=1d6e15f3b6f38733f1b07032af745bb5f7fb208f;p=motioneye-debian detect MMAL devices using vcgencmd --- diff --git a/motioneye/handlers.py b/motioneye/handlers.py index 4fc206c..d69db8e 100644 --- a/motioneye/handlers.py +++ b/motioneye/handlers.py @@ -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 index 0000000..ca525ca --- /dev/null +++ b/motioneye/mmalctl.py @@ -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 . + +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 [] diff --git a/motioneye/v4l2ctl.py b/motioneye/v4l2ctl.py index cd8c2a3..d17409a 100644 --- a/motioneye/v4l2ctl.py +++ b/motioneye/v4l2ctl.py @@ -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()