ITS: refactor test_imu_drift.py
1. Add logic to determine if preview_stabilization is supported
2. Add logic to find the largest common video/preview size
Files affected:
test_imu_drift.py
camera_properties_utils.py
video_processing_utils.py
Bug: 345626528
Testing: Pixel 8 rear camera
Change-Id: Ib9c7c90b71dd7f4b03a3203163f62fab088146bc
diff --git a/apps/CameraITS/utils/video_processing_utils.py b/apps/CameraITS/utils/video_processing_utils.py
index 1386f37..2b9343a 100644
--- a/apps/CameraITS/utils/video_processing_utils.py
+++ b/apps/CameraITS/utils/video_processing_utils.py
@@ -65,6 +65,45 @@
}
+def get_largest_common_preview_video_size(cam, camera_id):
+ """Returns the largest, common size between preview and video.
+
+ Args:
+ cam: camera object.
+ camera_id: str; camera ID.
+
+ Returns:
+ largest_common_size: str; largest common size between preview & video.
+ """
+ supported_preview_sizes = cam.get_all_supported_preview_sizes(camera_id)
+ supported_video_qualities = cam.get_supported_video_qualities(camera_id)
+ logging.debug('Supported video profiles & IDs: %s', supported_video_qualities)
+
+ # Make a list of supported_video_sizes from video qualities
+ supported_video_sizes = []
+ for quality in supported_video_qualities:
+ video_quality = quality.split(':')[0] # form is ['CIF:3', '480P:4', ...]
+ if video_quality in VIDEO_QUALITY_SIZE:
+ supported_video_sizes.append(VIDEO_QUALITY_SIZE[video_quality])
+ logging.debug(
+ 'Supported video sizes: %s', supported_video_sizes)
+
+ # Use areas of video sizes to find the largest common size
+ size_to_area = lambda s: int(s.split('x')[0])*int(s.split('x')[1])
+ largest_common_size = ''
+ largest_area = 0
+ common_sizes = list(set(supported_preview_sizes) & set(supported_video_sizes))
+ for size in common_sizes:
+ area = size_to_area(size)
+ if area > largest_area:
+ largest_area = area
+ largest_common_size = size
+ if not largest_common_size:
+ raise AssertionError('No common size between Preview and Video!')
+ logging.debug('Largest common size: %s', largest_common_size)
+ return largest_common_size
+
+
def get_lowest_common_preview_video_size(
supported_preview_sizes, supported_video_qualities, min_area):
"""Returns the common, smallest size above minimum in preview and video.