Improve logic of birdseye (#8375)

* Improve logic of birdseye

* Formatting
This commit is contained in:
Nicolas Mowen 2023-10-30 18:24:42 -06:00 committed by GitHub
parent 3d70d29672
commit 9d717b371c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -463,7 +463,7 @@ class BirdsEyeFrameManager:
def calculate_layout(self, cameras_to_add: list[str], coefficient) -> tuple[any]: def calculate_layout(self, cameras_to_add: list[str], coefficient) -> tuple[any]:
"""Calculate the optimal layout for 2+ cameras.""" """Calculate the optimal layout for 2+ cameras."""
def map_layout(row_height: int): def map_layout(camera_layout: list[list[any]], row_height: int):
"""Map the calculated layout.""" """Map the calculated layout."""
candidate_layout = [] candidate_layout = []
starting_x = 0 starting_x = 0
@ -492,7 +492,7 @@ class BirdsEyeFrameManager:
x + scaled_width > self.canvas.width x + scaled_width > self.canvas.width
or y + scaled_height > self.canvas.height or y + scaled_height > self.canvas.height
): ):
return 0, 0, None return x + scaled_width, y + scaled_height, None
final_row.append((cameras[0], (x, y, scaled_width, scaled_height))) final_row.append((cameras[0], (x, y, scaled_width, scaled_height)))
x += scaled_width x += scaled_width
@ -564,7 +564,21 @@ class BirdsEyeFrameManager:
return None return None
row_height = int(self.canvas.height / coefficient) row_height = int(self.canvas.height / coefficient)
total_width, total_height, standard_candidate_layout = map_layout(row_height) total_width, total_height, standard_candidate_layout = map_layout(
camera_layout, row_height
)
if not standard_candidate_layout:
# if standard layout didn't work
# try reducing row_height by the % overflow
scale_down_percent = max(
total_width / self.canvas.width,
total_height / self.canvas.height,
)
row_height = int(row_height / scale_down_percent)
total_width, total_height, standard_candidate_layout = map_layout(
camera_layout, row_height
)
if not standard_candidate_layout: if not standard_candidate_layout:
return None return None
@ -578,7 +592,7 @@ class BirdsEyeFrameManager:
1 / (total_height / self.canvas.height), 1 / (total_height / self.canvas.height),
) )
row_height = int(row_height * scale_up_percent) row_height = int(row_height * scale_up_percent)
_, _, scaled_layout = map_layout(row_height) _, _, scaled_layout = map_layout(camera_layout, row_height)
if scaled_layout: if scaled_layout:
return scaled_layout return scaled_layout