Source code for ouster.sdk.core.clipped_frame_set_source

from typing import Iterator, List
from ouster.sdk._bindings.client import FrameSetSource
from ouster.sdk.core import SensorInfo, LidarFrame, FrameSet
from .frame_ops import clip


[docs] class ClippedFrameSetSource(FrameSetSource): """ limits the values of the specified set of fields to within the range = [lower, upper], any value that exceeds this range is replaced by zero. """ def __init__(self, frame_set_source: FrameSetSource, fields: List[str], lower: int, upper: int) -> None: FrameSetSource.__init__(self) # Make sure current requirements are met if upper < lower: raise ValueError("`upper` value can't be less than `lower`") self._frame_set_source = frame_set_source self._fields = fields self._lower = lower self._upper = upper @property def sensor_info(self) -> List[SensorInfo]: return self._frame_set_source.sensor_info @property def is_live(self) -> bool: return self._frame_set_source.is_live @property def is_indexed(self) -> bool: return self._frame_set_source.is_indexed @property def frames_num(self) -> List[int]: return self._frame_set_source.frames_num def __len__(self) -> int: return len(self._frame_set_source) def __length_hint__(self) -> int: return self._frame_set_source.__length_hint__() def __iter__(self) -> Iterator[FrameSet]: def clip_with_copy(frame, fields, lower, upper): cpy = LidarFrame(frame) clip(cpy, fields, lower, upper) return cpy for frames in self._frame_set_source.__iter__(): yield FrameSet([clip_with_copy(frame, self._fields, self._lower, self._upper) if frame else None for frame in frames])
[docs] def close(self) -> None: pass
def __del__(self) -> None: self.close()
def _clip_fn(self: FrameSetSource, fields: List[str], lower: int, upper: int): """ limits the values of the specified set of fields to within the range = [lower, upper], any value that exceeds this range is replaced by zero. """ return ClippedFrameSetSource(self, fields, lower, upper) FrameSetSource.clip = _clip_fn # type: ignore