Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
__pycache__
tests-dev/
bk/
build
1 change: 1 addition & 0 deletions =3.21.0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Requirement already satisfied: protobuf in /usr/local/lib/python3.13/dist-packages (6.33.0)
44 changes: 41 additions & 3 deletions vilib/vilib.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,24 @@ def camera():

picam2 = Vilib.picam2

preview_config = picam2.preview_configuration
# Ensure we have a fresh configuration
try:
preview_config = picam2.preview_configuration
if preview_config is None:
# Create new configuration if needed
config = picam2.create_preview_configuration()
picam2.configure(config)
preview_config = picam2.preview_configuration
except Exception as e:
print(f"Error getting preview configuration: {e}")
# Try to create a new configuration
config = picam2.create_preview_configuration()
picam2.configure(config)
preview_config = picam2.preview_configuration

# preview_config.size = (800, 600)
preview_config.size = Vilib.camera_size
if preview_config is not None:
preview_config.size = Vilib.camera_size
preview_config.format = 'RGB888' # 'XRGB8888', 'XBGR8888', 'RGB888', 'BGR888', 'YUV420'
preview_config.transform = libcamera.Transform(
hflip=Vilib.camera_hflip,
Expand Down Expand Up @@ -378,7 +393,30 @@ def camera_start(vflip=False, hflip=False, size=None):
def camera_close():
if Vilib.camera_thread != None:
Vilib.camera_run = False
time.sleep(0.1)
time.sleep(0.2)
# Wait for camera thread to finish
if Vilib.camera_thread.is_alive():
Vilib.camera_thread.join(timeout=3.0)

# Properly close and reinitialize Picamera2
try:
if Vilib.picam2 is not None:
Vilib.picam2.close()
time.sleep(0.2)

# Recreate Picamera2 object completely fresh
Vilib.picam2 = Picamera2()

except Exception as e:
print(f"Warning during camera cleanup: {e}")
# Force recreation of Picamera2 object
try:
Vilib.picam2 = Picamera2()
except Exception as e2:
print(f"Failed to reinitialize camera: {e2}")

# Reset thread reference
Vilib.camera_thread = None

@staticmethod
def display(local=True, web=True):
Expand Down
Loading