Optimize portrait layout for 3+ cams

This commit is contained in:
Nick Mowen 2023-06-12 14:23:56 -06:00
parent 3a877894f1
commit 918d5b34e5

View File

@ -321,7 +321,7 @@ class BirdsEyeFrameManager:
), ),
], ],
] ]
elif first_camera_dims[1] + second_camera_dims[1] < canvas_height: else:
# place cameras vertically # place cameras vertically
top_scaled_width = int( top_scaled_width = int(
(canvas_height / 2) * first_camera_dims[0] / first_camera_dims[1] (canvas_height / 2) * first_camera_dims[0] / first_camera_dims[1]
@ -356,7 +356,8 @@ class BirdsEyeFrameManager:
camera_layout: list[list[any]] = [] camera_layout: list[list[any]] = []
camera_layout.append([]) camera_layout.append([])
canvas_aspect = canvas[0] / canvas[1] canvas_aspect = canvas[0] / canvas[1]
x = 0 starting_x = 0
x = starting_x
y = 0 y = 0
y_i = 0 y_i = 0
max_height = 0 max_height = 0
@ -364,25 +365,35 @@ class BirdsEyeFrameManager:
camera_dims = self.cameras[camera]["dimensions"].copy() camera_dims = self.cameras[camera]["dimensions"].copy()
camera_aspect = camera_dims[0] / camera_dims[1] camera_aspect = camera_dims[0] / camera_dims[1]
if camera_dims[1] > camera_dims[0]:
portrait = True
elif camera_aspect < canvas_aspect:
# if the camera aspect ratio is less than canvas aspect ratio, it needs to be scaled down to fit # if the camera aspect ratio is less than canvas aspect ratio, it needs to be scaled down to fit
if camera_aspect < canvas_aspect:
camera_dims[0] *= camera_aspect / canvas_aspect camera_dims[0] *= camera_aspect / canvas_aspect
camera_dims[1] *= camera_aspect / canvas_aspect camera_dims[1] *= camera_aspect / canvas_aspect
portrait = False
else:
portrait = False
if (x + camera_dims[0] * coefficient) <= canvas[0]: if (x + camera_dims[0] * coefficient) <= canvas[0]:
# insert if camera can fit on current row # insert if camera can fit on current row
scaled_width = int(camera_dims[0] * coefficient)
camera_layout[y_i].append( camera_layout[y_i].append(
( (
camera, camera,
( (
x, x,
y, y,
int(camera_dims[0] * coefficient), scaled_width,
int(camera_dims[1] * coefficient), int(camera_dims[1] * coefficient),
), ),
) )
) )
x += int(camera_dims[0] * coefficient) x += scaled_width
if portrait:
starting_x = scaled_width
else:
max_height = max( max_height = max(
max_height, max_height,
int(camera_dims[1] * coefficient), int(camera_dims[1] * coefficient),
@ -392,7 +403,7 @@ class BirdsEyeFrameManager:
y += max_height y += max_height
y_i += 1 y_i += 1
camera_layout.append([]) camera_layout.append([])
x = 0 x = starting_x
if camera_dims[0] * coefficient > canvas_width: if camera_dims[0] * coefficient > canvas_width:
safe_coefficient = 1 safe_coefficient = 1