diff --git a/camdetect.py b/camdetect.py index e1d11bf..7d9c936 100755 --- a/camdetect.py +++ b/camdetect.py @@ -376,26 +376,28 @@ async def download(resp, queue): blob = buf + data[:marker+2] # Parse DCT coefficients - dct = loads(blob) - - now = datetime.utcnow() - gauge_last_frame.labels("download").set(now.timestamp()) try: - # Convert Y component to 16 bit for easier handling - queue.put_nowait(( - now, - blob, - dct, - generate_thumbnail(dct))) - except asyncio.QueueFull: - counter_dropped_frames.labels("download").inc() - gauge_queue_frames.labels("download").set(queue.qsize()) + dct = loads(blob) + except RuntimeError: + counter_frames.labels("corrupted").inc() + else: + now = datetime.utcnow() + gauge_last_frame.labels("download").set(now.timestamp()) + try: + queue.put_nowait(( + now, + blob, + dct, + generate_thumbnail(dct))) + except asyncio.QueueFull: + counter_dropped_frames.labels("download").inc() + gauge_queue_frames.labels("download").set(queue.qsize()) data = data[marker+2:] buf = b"" counter_receive_frames.inc() # seek begin - marker = data.find(b"\xff\xd8") + marker = data.rfind(b"\xff\xd8") if marker >= 0: buf = data[marker:] else: