- Support for OMRON MX2 VFD.
- Better error handling in WiFi configuration.
- Fix open WiFi access.
- - Fixes for MJPEG video format. Should help with video on iPhone.
+ - Improved video camera performance.
+ - Allow up to 4 camera clients at once.
- Add axis bounds GCode variables ``#<_x_min>``, ``#<_x_max>``, etc.
- Expose ``junction-accel`` planning parameter.
},
state: {messages: []},
video_size: cookie.get('video-size', 'small'),
- crosshair: cookie.get('crosshair', false),
+ crosshair: cookie.get('crosshair', 'false') != 'false',
errorTimeout: 30,
errorTimeoutStart: 0,
errorShow: false,
return format_frame(f.read())
-
class VideoDevice(object):
def __init__(self, path = '/dev/video0'):
self.fd = os.open(path, os.O_RDWR | os.O_NONBLOCK | os.O_CLOEXEC)
buf = self._dqbuf()
mm = self.buffers[buf.index]
- frame = mm.read()
+ frame = mm.read(buf.bytesused)
mm.seek(0)
self._qbuf(buf)
self.height = args.height
self.fps = args.fps
self.fourcc = string_to_fourcc(args.fourcc)
+ self.max_clients = args.camera_clients
self.overtemp = False
self.dev = None
if not len(self.clients): return
try:
- self.clients[-1].write_frame(format_frame(frame))
+ frame = format_frame(frame)
+ for i in range(self.max_clients):
+ if i < len(self.clients):
+ self.clients[-(i + 1)].write_frame(frame)
+
except Exception as e:
self.log.warning('Failed to write frame to client: %s' % e)
def add_client(self, client):
self.log.info('Adding camera client: %d' % len(self.clients))
- if len(self.clients): self.clients[-1].write_img('in-use')
+ if self.max_clients <= len(self.clients):
+ self.clients[-self.max_clients].write_img('in-use')
+
self.clients.append(client)
self._update_client_image()
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',
help = 'Enter demo mode')
parser.add_argument('--debug', default = 0, type = int,