Center single camera view

This commit is contained in:
Nicolas Mowen 2024-02-01 16:40:33 -07:00
parent 34fb1c2ef5
commit 4b7977bf8d

View File

@ -41,11 +41,13 @@ def get_standard_aspect_ratio(width: int, height: int) -> tuple[int, int]:
(16, 9), (16, 9),
(9, 16), (9, 16),
(20, 10), (20, 10),
(16, 3), # max wide camera
(16, 6), # reolink duo 2 (16, 6), # reolink duo 2
(32, 9), # panoramic cameras (32, 9), # panoramic cameras
(12, 9), (12, 9),
(9, 12), (9, 12),
(22, 15), # Amcrest, NTSC DVT (22, 15), # Amcrest, NTSC DVT
(1, 1), # fisheye
] # aspects are scaled to have common relative size ] # aspects are scaled to have common relative size
known_aspects_ratios = list( known_aspects_ratios = list(
map(lambda aspect: aspect[0] / aspect[1], known_aspects) map(lambda aspect: aspect[0] / aspect[1], known_aspects)
@ -431,17 +433,23 @@ class BirdsEyeFrameManager:
camera = active_cameras_to_add[0] camera = active_cameras_to_add[0]
camera_dims = self.cameras[camera]["dimensions"].copy() camera_dims = self.cameras[camera]["dimensions"].copy()
scaled_width = int(self.canvas.height * camera_dims[0] / camera_dims[1]) scaled_width = int(self.canvas.height * camera_dims[0] / camera_dims[1])
coefficient = (
1 # center camera view in canvas and ensure that it fits
if scaled_width <= self.canvas.width if scaled_width < self.canvas.width:
else self.canvas.width / scaled_width coefficient = 1
) x_offset = int((self.canvas.width - scaled_width) / 2)
else:
coefficient = self.canvas.width / scaled_width
x_offset = int(
(self.canvas.width - (scaled_width * coefficient)) / 2
)
self.camera_layout = [ self.camera_layout = [
[ [
( (
camera, camera,
( (
0, x_offset,
0, 0,
int(scaled_width * coefficient), int(scaled_width * coefficient),
int(self.canvas.height * coefficient), int(self.canvas.height * coefficient),
@ -485,7 +493,11 @@ class BirdsEyeFrameManager:
return True return True
def calculate_layout(self, cameras_to_add: list[str], coefficient) -> tuple[any]: def calculate_layout(
self,
cameras_to_add: list[str],
coefficient: float,
) -> tuple[any]:
"""Calculate the optimal layout for 2+ cameras.""" """Calculate the optimal layout for 2+ cameras."""
def map_layout(camera_layout: list[list[any]], row_height: int): def map_layout(camera_layout: list[list[any]], row_height: int):