Exemple #1
0
    def test_frame_buffer_expire(self):
        getLogger(FrameBuffer.__name__).setLevel(ERROR)

        frame_buffer = FrameBuffer(1, 1, 1, 1)
        for frame in frame_buffer.frames:
            frame.header.epoch = time()
            frame.latch.next()
        frame, frame_index = frame_buffer.select_next_ready()
        self.assertIsNone(frame)

        for frame in frame_buffer.frames:
            frame.header.epoch -= 60
        frame, frame_index = frame_buffer.select_next_ready()
        self.assertIsNotNone(frame)
Exemple #2
0
    def _new_frame(self, frame_in, payload: Payload, stop_event,
                   frame_buffer_in: FrameBuffer, frame_buffer_out: FrameBuffer,
                   *args, **kwargs):
        self._subscribers_lock.acquire()
        try:
            max_subscribers = len(self._subscribers)
            if max_subscribers == 0:  # Release the frame as no one has subscribed
                return

            frame_out, frame_index = frame_buffer_out.select_next_ready(
                self.__last_frame_index)
            self.__last_frame_index = frame_index
            if frame_out is None:
                raise BufferError

            self._incoming_frame(frame_in, frame_out, stop_event, *args,
                                 **kwargs)

            # Enforcing confirmation from all subscribers before returning frame into buffer
            frame_out.latch.next()
            frame_out.latch.next(max_subscribers)

            payload = Payload(self.name, frame_index)
            count = self._publish(payload)

            # Helps to return frame into buffer if not all subscribers received it
            while count < max_subscribers:
                frame_out.latch.next()
                count += 1
        finally:
            self._subscribers_lock.release()
Exemple #3
0
    def _next_frame(self, frame_queue, frame_buffer: FrameBuffer, *args, **kwargs):
        frame, frame_index = frame_buffer.select_next_ready(self.__last_frame_index)
        self.__last_frame_index = frame_index
        if frame is None:
            raise BufferError

        return frame_index if self._new_frame(frame, frame_queue, frame_buffer, *args, **kwargs) else None
Exemple #4
0
    def test_frame_buffer(self):
        frame_buffer = FrameBuffer(10, 1, 1, 1)

        length = len(frame_buffer.frames)
        frame_cycle = cycle(range(length))
        for i in range(-1, length * 3):
            _, frame_index = frame_buffer.select_next_ready(i)
            self.assertEqual(next(frame_cycle), frame_index)
Exemple #5
0
    def _next_frame(self, frame_queue, stop_event, frame_buffer: FrameBuffer):
        frame, frame_index = frame_buffer.select_next_ready(
            self._last_frame_index)
        self._last_frame_index = frame_index
        if frame is None:
            return None

        image_shape, image_np = frame.get_numpy_image()

        # Fill image buffer with random data
        data = np.random.randn(*image_shape)
        np.copyto(image_np, data)

        # Calculate sum of all pixels and do math against the sum
        x = np.sum(image_np[:]).item()
        y = random.random()
        operation = OPERATIONS[random.randint(0, len(OPERATIONS[0]))]
        expected_result = simple_math(operation, x, y)

        frame.header.epoch = time()
        frame.latch.next()

        return Action(frame_index, operation, y, expected_result)