Skip to content

Commit 9ef1cc8

Browse files
CameraManager: support rotated cameras
1 parent c5a581d commit 9ef1cc8

4 files changed

Lines changed: 17 additions & 8 deletions

File tree

internal_filesystem/lib/mpos/board/linux.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
TFT_VER_RES=240
1515

1616
# Fri3d Camp 2024 Badge:
17-
#TFT_HOR_RES=296
18-
#TFT_VER_RES=240
17+
TFT_HOR_RES=296
18+
TFT_VER_RES=240
1919

2020
# Makerfabs / Matouch
21-
TFT_HOR_RES=240
22-
TFT_VER_RES=320
21+
#TFT_HOR_RES=240
22+
#TFT_VER_RES=320
2323

2424
# Bigger screen
2525
#TFT_HOR_RES=640

internal_filesystem/lib/mpos/board/waveshare_esp32_s3_touch_lcd_2.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ def apply_cam_settings(cam_obj, prefs):
197197
init=init_cam,
198198
deinit=deinit_cam,
199199
capture=capture_cam,
200-
apply_settings=apply_cam_settings
200+
apply_settings=apply_cam_settings,
201+
rotation_degrees=-90 # camera is rotated 90 degrees counterclockwise so -90 degrees clockwise
201202
))
202203

203204
print("waveshare_esp32_s3_touch_lcd_2.py finished")

internal_filesystem/lib/mpos/camera_manager.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@ class Camera:
3737
Represents a camera device with its characteristics.
3838
"""
3939

40-
def __init__(self, lens_facing, name=None, vendor=None, version=None, init=None, deinit=None, capture=None, apply_settings=None):
40+
def __init__(self, lens_facing, name=None, vendor=None, version=None, init=None, deinit=None, capture=None, apply_settings=None, rotation_degrees=0):
4141
"""Initialize camera metadata.
4242
4343
Args:
4444
lens_facing: Camera orientation (LENS_FACING_BACK, LENS_FACING_FRONT, etc.)
4545
name: Human-readable camera name (e.g., "OV5640", "Front Camera")
4646
vendor: Camera vendor/manufacturer (e.g., "OmniVision")
4747
version: Driver version (default 1)
48+
rotation_degrees: how many degrees the camera is rotated clockwise
4849
"""
4950
self.lens_facing = lens_facing
5051
self.name = name or "Camera"
@@ -54,6 +55,7 @@ def __init__(self, lens_facing, name=None, vendor=None, version=None, init=None,
5455
self.deinit_function = deinit
5556
self.capture_function = capture
5657
self.apply_settings_function = apply_settings
58+
self.rotation_degrees = rotation_degrees
5759

5860
def __repr__(self):
5961
facing_names = {
@@ -80,6 +82,10 @@ def apply_settings(self, cam_obj, prefs):
8082
if self.apply_settings_function:
8183
return self.apply_settings_function(cam_obj, prefs)
8284

85+
def get_rotation_degrees(self):
86+
return self.rotation_degrees
87+
88+
8389
class CameraManager:
8490
"""
8591
Centralized camera device management service.

internal_filesystem/lib/mpos/ui/camera_activity.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,12 @@ def resize_buttons(self):
153153

154154
def start_cam(self):
155155
# Init camera:
156-
self.cam = CameraManager.get_cameras()[0].init(self.width, self.height, self.colormode)
156+
firstcam = CameraManager.get_cameras()[0]
157+
self.cam = firstcam.init(self.width, self.height, self.colormode)
157158
if self.cam:
159+
self.image.set_rotation(-10 * firstcam.get_rotation_degrees()) # counter the rotation so * -1 and convert to tens-of-a-degree for LVGL
158160
# Apply saved camera settings, only for internal camera for now:
159-
CameraManager.get_cameras()[0].apply_settings(self.cam, self.scanqr_prefs if self.scanqr_mode else self.prefs) # needs to be done AFTER the camera is initialized
161+
firstcam.apply_settings(self.cam, self.scanqr_prefs if self.scanqr_mode else self.prefs) # needs to be done AFTER the camera is initialized
160162
# Start refreshing:
161163
print("Camera app initialized, continuing...")
162164
self.update_preview_image()

0 commit comments

Comments
 (0)