py: Use exceptions instead of returning error codes

We have multiple methods which return an error code, mimicking the C++
API. Using exceptions is more natural in the Python API, so change all
those methods to raise an Exception instead.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Tomi Valkeinen 2023-05-30 15:01:31 +03:00 committed by Laurent Pinchart
parent 5b2f1ce501
commit 1fb31ac4f4
6 changed files with 91 additions and 118 deletions

View file

@ -259,12 +259,7 @@ def main():
allocator = libcam.FrameBufferAllocator(camera)
for cfg in config:
ret = allocator.allocate(cfg.stream)
if ret < 0:
print('Can\'t allocate buffers')
return -1
allocated = len(allocator.buffers(cfg.stream))
allocated = allocator.allocate(cfg.stream)
print(f'Allocated {allocated} buffers for stream')
# --------------------------------------------------------------------
@ -289,15 +284,9 @@ def main():
requests = []
for i in range(len(buffers)):
request = camera.create_request()
if not request:
print('Can\'t create request')
return -1
buffer = buffers[i]
ret = request.add_buffer(stream, buffer)
if ret < 0:
print('Can\'t set buffer for request')
return -1
request.add_buffer(stream, buffer)
# Controls can be added to a request on a per frame basis.
request.set_control(libcam.controls.Brightness, 0.5)

View file

@ -43,8 +43,7 @@ def main():
# Acquire the camera for our use
ret = cam.acquire()
assert ret == 0
cam.acquire()
# Configure the camera
@ -60,8 +59,7 @@ def main():
w, h = [int(v) for v in args.size.split('x')]
stream_config.size = libcam.Size(w, h)
ret = cam.configure(cam_config)
assert ret == 0
cam.configure(cam_config)
print(f'Capturing {TOTAL_FRAMES} frames with {stream_config}')
@ -83,15 +81,13 @@ def main():
req = cam.create_request(i)
buffer = allocator.buffers(stream)[i]
ret = req.add_buffer(stream, buffer)
assert ret == 0
req.add_buffer(stream, buffer)
reqs.append(req)
# Start the camera
ret = cam.start()
assert ret == 0
cam.start()
# frames_queued and frames_done track the number of frames queued and done
@ -101,8 +97,7 @@ def main():
# Queue the requests to the camera
for req in reqs:
ret = cam.queue_request(req)
assert ret == 0
cam.queue_request(req)
frames_queued += 1
# The main loop. Wait for the queued Requests to complete, process them,
@ -155,13 +150,11 @@ def main():
# Stop the camera
ret = cam.stop()
assert ret == 0
cam.stop()
# Release the camera
ret = cam.release()
assert ret == 0
cam.release()
return 0

View file

@ -28,8 +28,7 @@ class CameraCaptureContext:
# Acquire the camera for our use
ret = cam.acquire()
assert ret == 0
cam.acquire()
# Configure the camera
@ -37,8 +36,7 @@ class CameraCaptureContext:
stream_config = cam_config.at(0)
ret = cam.configure(cam_config)
assert ret == 0
cam.configure(cam_config)
stream = stream_config.stream
@ -62,8 +60,7 @@ class CameraCaptureContext:
req = cam.create_request(idx)
buffer = allocator.buffers(stream)[i]
ret = req.add_buffer(stream, buffer)
assert ret == 0
req.add_buffer(stream, buffer)
self.reqs.append(req)
@ -73,13 +70,11 @@ class CameraCaptureContext:
def uninit_camera(self):
# Stop the camera
ret = self.cam.stop()
assert ret == 0
self.cam.stop()
# Release the camera
ret = self.cam.release()
assert ret == 0
self.cam.release()
# A container class for our state
@ -145,8 +140,7 @@ class CaptureContext:
for cam_ctx in self.camera_contexts:
for req in cam_ctx.reqs:
ret = cam_ctx.cam.queue_request(req)
assert ret == 0
cam_ctx.cam.queue_request(req)
# Use Selector to wait for events from the camera and from the keyboard
@ -177,8 +171,7 @@ def main():
# Start the cameras
for cam_ctx in ctx.camera_contexts:
ret = cam_ctx.cam.start()
assert ret == 0
cam_ctx.cam.start()
ctx.capture()