diff --git a/PiCowbell_Camera_Demos/JPEG_Capture/code.py b/PiCowbell_Camera_Demos/JPEG_Capture/code.py index f36cec121..c2d196f9b 100644 --- a/PiCowbell_Camera_Demos/JPEG_Capture/code.py +++ b/PiCowbell_Camera_Demos/JPEG_Capture/code.py @@ -76,8 +76,27 @@ def open_next_image(): return open(filename, "wb") cam.colorspace = adafruit_ov5640.OV5640_COLOR_JPEG -cam.quality = 5 -b = bytearray(cam.capture_buffer_size) + +# Different platforms have different amounts of memory available. +# Typically a Pico 2 can handle quality = 2 and a Pico can handle quality = 5. +# Rather than detect and select sizes, let's try to detect the best dynamically +# for broader platform support. +# Start with the highest quality setting and attempt to allocate a buffer +# of the necessary size. If it fails, try the next lowest. +b = None +for quality in range(2,55): #valid range is 2 to 54 inclusive + try: + cam.quality = quality + print(f"Attempting to use quality {quality}.") + b = bytearray(cam.capture_buffer_size) + print(f"Quality {quality} successfully selected.") + break + except MemoryError: + print(f"Quality {quality} was too big. Trying next lowest.") + +if b is None: + print("There wasn't enough system memory to allocate the lowest quality buffer.") + jpeg = cam.capture(b) while True: