From 9cf439580fd47b0f650bcd2b853f05b044b42039 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Wed, 19 Feb 2020 15:38:48 -0800 Subject: [PATCH] Ignore cameras that do not support MJPEG format video. --- CHANGELOG.md | 1 + src/py/bbctrl/Camera.py | 19 +++++++++++++++---- src/py/bbctrl/__init__.py | 2 -- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 169b16a..690f78b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Buildbotics CNC Controller Firmware Changelog - Add axis bounds GCode variables ``#<_x_min>``, ``#<_x_max>``, etc. - Expose ``junction-accel`` planning parameter. - Fixed problem with manual firmware upload on OSX. + - Ignore cameras that do not support MJPEG format video. ## v0.4.12 - Segments straddle arc in linearization. diff --git a/src/py/bbctrl/Camera.py b/src/py/bbctrl/Camera.py index 796500c..17f1bb7 100755 --- a/src/py/bbctrl/Camera.py +++ b/src/py/bbctrl/Camera.py @@ -285,7 +285,7 @@ class Camera(object): self.width = args.width self.height = args.height self.fps = args.fps - self.fourcc = string_to_fourcc(args.fourcc) + self.fourcc = 'MJPG' self.max_clients = args.camera_clients self.overtemp = False @@ -376,11 +376,22 @@ class Camera(object): if caps.capabilities & v4l2.V4L2_CAP_VIDEO_CAPTURE == 0: raise Exception('Video capture not supported.') - self.log.info('Formats: %s', self.dev.get_formats()) - self.log.info('Sizes: %s', self.dev.get_frame_sizes(self.fourcc)) + fourcc = string_to_fourcc(self.fourcc) + formats = self.dev.get_formats() + sizes = self.dev.get_frame_sizes(fourcc) + + self.log.info('Formats: %s', formats) + self.log.info('Sizes: %s', sizes) self.log.info('Audio: %s', self.dev.get_audio()) - self.dev.set_format(self.width, self.height, fourcc = self.fourcc) + hasFormat = False + for name, description in formats: + if name == self.fourcc: hasFormat = True + + if not hasFormat: + raise Exception(self.fourcc + ' video format not supported.') + + self.dev.set_format(self.width, self.height, fourcc = fourcc) self.dev.set_fps(self.fps) self.dev.create_buffers(4) self.dev.start() diff --git a/src/py/bbctrl/__init__.py b/src/py/bbctrl/__init__.py index acde54c..b1a6452 100644 --- a/src/py/bbctrl/__init__.py +++ b/src/py/bbctrl/__init__.py @@ -150,8 +150,6 @@ def parse_args(): help = 'Camera height') parser.add_argument('--fps', default = 15, type = int, help = 'Camera frames per second') - parser.add_argument('--fourcc', default = 'MJPG', - help = 'Camera frame format') parser.add_argument('--camera-clients', default = 4, help = 'Maximum simultaneous camera clients') parser.add_argument('--demo', action = 'store_true', -- 2.27.0