def initAndRun(self, cameraStream: cams.PiCameraCircularIO, file=None, parent=None): self.logger = self.logger.getChild( "RTSP") if file is None else self.logger.getChild("Record") self._myParent = parent self._redirectPackages(cameraStream, file) self.name = "cam_RTSP_queue" if file is None else "cam_file_queue" self.setDaemon(False) self.start() if parent is not None: try: with self.lock: with cameraStream.lock: save_pos = cameraStream.tell() try: pos = cameraStream._find_all( camf.PiVideoFrameType.sps_header) if pos is not None: cameraStream.seek(pos) while True: buf = cameraStream.read1() if not buf: break self._queue.put(buf) finally: cameraStream.seek(save_pos) cameraStream.clear() except: self.logger.exception("Konnte anfang nicht speichern")
def test_camera_stream_frames_trunc_right(): # We don't officially support this but the code should work if entire # frames are truncated (without leaving partial frame data) which is what # we're testing for here (of course, the resulting H.264 stream won't be # valid, but we're not testing that...) camera = mock.Mock() encoder = mock.Mock() camera._encoders = {1: encoder} stream = PiCameraCircularIO(camera, size=10) frames = [] for data, frame in generate_frames('hkffkff'): encoder.frame = frame if frame.complete: frames.append(frame) stream.write(data) stream.seek(7) stream.truncate() del frames[-2:] assert stream.getvalue() == b'hkkffkk' assert list(stream.frames) == frames assert list(reversed(stream.frames)) == frames[::-1]