Record timestamp when adding frames to stream
This commit is contained in:
parent
d26b93e1be
commit
ad7b0d8da8
3 changed files with 63 additions and 11 deletions
|
|
@ -216,6 +216,41 @@ class CaptureGalleryInfo(BaseModel):
|
|||
card_type: Literal["Capture"] = "Capture"
|
||||
|
||||
|
||||
class MJPEGStreamWithTimestamp(lt.outputs.MJPEGStream):
|
||||
"""An MJPEG stream where the frame time can be recorded with the frame.
|
||||
|
||||
This can be used to capture when the image was taken by the sensor if known
|
||||
rather than take the time it is added into the ring buffer.
|
||||
"""
|
||||
|
||||
def add_frame(self, frame: bytes, timestamp: Optional[datetime]) -> None:
|
||||
"""Add a JPEG to the MJPEG stream.
|
||||
|
||||
Modify the standard function to have an option to send in the capture time.
|
||||
|
||||
:param frame: The frame to add
|
||||
:param timestamp: The time the frame was captured.
|
||||
|
||||
:raise ValueError: if the supplied frame does not start with the JPEG
|
||||
start bytes and end with the end bytes.
|
||||
"""
|
||||
if not (
|
||||
frame[0] == 0xFF
|
||||
and frame[1] == 0xD8
|
||||
and frame[-2] == 0xFF
|
||||
and frame[-1] == 0xD9
|
||||
):
|
||||
raise ValueError("Invalid JPEG")
|
||||
with self._lock:
|
||||
entry = self._ringbuffer[(self.last_frame_i + 1) % len(self._ringbuffer)]
|
||||
entry.timestamp = timestamp if timestamp is not None else datetime.now()
|
||||
entry.frame = frame
|
||||
entry.index = self.last_frame_i + 1
|
||||
self._thing_server_interface.start_async_task_soon(
|
||||
self.notify_new_frame, entry.index
|
||||
)
|
||||
|
||||
|
||||
class BaseCamera(OFMThing, ABC):
|
||||
"""The base class for all cameras. All cameras must directly inherit from this class.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue