Fix birdseye layout (#8343)

This commit is contained in:
Nicolas Mowen 2023-10-26 16:23:39 -06:00 committed by GitHub
parent a399cb09fa
commit 86c59c1722
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -36,11 +36,12 @@ logger = logging.getLogger(__name__)
def get_standard_aspect_ratio(width: int, height: int) -> tuple[int, int]: def get_standard_aspect_ratio(width: int, height: int) -> tuple[int, int]:
"""Ensure that only standard aspect ratios are used.""" """Ensure that only standard aspect ratios are used."""
# it is imoprtant that all ratios have the same scale
known_aspects = [ known_aspects = [
(16, 9), (16, 9),
(9, 16), (9, 16),
(2, 1), (20, 10),
(8, 3), # reolink duo 2 (16, 6), # reolink duo 2
(32, 9), # panoramic cameras (32, 9), # panoramic cameras
(12, 9), (12, 9),
(9, 12), (9, 12),
@ -499,6 +500,9 @@ class BirdsEyeFrameManager:
y += row_height y += row_height
candidate_layout.append(final_row) candidate_layout.append(final_row)
if max_width == 0:
max_width = x
return max_width, y, candidate_layout return max_width, y, candidate_layout
canvas_aspect_x, canvas_aspect_y = self.canvas.get_aspect(coefficient) canvas_aspect_x, canvas_aspect_y = self.canvas.get_aspect(coefficient)
@ -562,15 +566,18 @@ class BirdsEyeFrameManager:
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(row_height)
if not standard_candidate_layout:
return None
# layout can't be optimized more # layout can't be optimized more
if total_width / self.canvas.width >= 0.99: if total_width / self.canvas.width >= 0.99:
return standard_candidate_layout return standard_candidate_layout
scale_up_percent = min( scale_up_percent = min(
1 - (total_width / self.canvas.width), 1 / (total_width / self.canvas.width),
1 - (total_height / self.canvas.height), 1 / (total_height / self.canvas.height),
) )
row_height = int(row_height * (1 + round(scale_up_percent, 1))) row_height = int(row_height * scale_up_percent)
_, _, scaled_layout = map_layout(row_height) _, _, scaled_layout = map_layout(row_height)
if scaled_layout: if scaled_layout: