From 94192b04259c217f8dffb9ea993d206f28befa1f Mon Sep 17 00:00:00 2001 From: Emiel Por Date: Tue, 21 Jun 2022 10:16:17 -0400 Subject: [PATCH 1/2] Skip frames if the requested frame is not available anymore. This can happen if the data processing in yield is slower than one camera frame. --- catkit2/testbed/proxies/camera.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/catkit2/testbed/proxies/camera.py b/catkit2/testbed/proxies/camera.py index a377d1006..b2e875f7c 100644 --- a/catkit2/testbed/proxies/camera.py +++ b/catkit2/testbed/proxies/camera.py @@ -13,14 +13,26 @@ def take_raw_exposures(self, num_exposures): first_frame_id = self.images.newest_available_frame_id if was_acquiring: - # Ignore first to frames to ensure the frames were taken _after_ the + # Ignore first two frames to ensure the frames were taken _after_ the # call to this function. This is not necessary if the acquisition just # started. first_frame_id += 2 try: - for i in range(num_exposures): - yield self.images.get_frame(first_frame_id + i, 100000).data.copy() + i = 0 + num_exposures_remaining = num_exposures + while num_exposures_remaining >= 1: + try: + frame = self.images.get_frame(first_frame_id + i, 100000) + except RuntimeError: + # The frame wasn't available anymore because we were waiting too long. + continue + finally: + i += 1 + + yield frame.data.copy() + + num_exposures_remaining -= 1 finally: if not was_acquiring: self.stop_acquisition() From 43cafdb3bf599569b77832f817516ff055b54727 Mon Sep 17 00:00:00 2001 From: Emiel Por Date: Tue, 21 Jun 2022 10:19:20 -0400 Subject: [PATCH 2/2] Formatting. --- catkit2/testbed/proxies/camera.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/catkit2/testbed/proxies/camera.py b/catkit2/testbed/proxies/camera.py index b2e875f7c..bb1aa45bb 100644 --- a/catkit2/testbed/proxies/camera.py +++ b/catkit2/testbed/proxies/camera.py @@ -21,6 +21,7 @@ def take_raw_exposures(self, num_exposures): try: i = 0 num_exposures_remaining = num_exposures + while num_exposures_remaining >= 1: try: frame = self.images.get_frame(first_frame_id + i, 100000) @@ -31,7 +32,6 @@ def take_raw_exposures(self, num_exposures): i += 1 yield frame.data.copy() - num_exposures_remaining -= 1 finally: if not was_acquiring: