Detect max quality level dynamically.

Detect max quality level dynamically.
This will select 2 for standard Pico 2's and 5 for standard Pico's.
This commit is contained in:
Casten Riepling 2025-04-10 22:31:49 -07:00 committed by GitHub
parent f94718eb4d
commit 6a9407744a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -76,8 +76,27 @@ def open_next_image():
return open(filename, "wb")
cam.colorspace = adafruit_ov5640.OV5640_COLOR_JPEG
cam.quality = 3
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 Exception:
print(f"Quality {quality} was too big. Trying next lowest.")
if b==None:
print("There wasn't enough system memory to allocate the lowest quality buffer.")
jpeg = cam.capture(b)
while True: