36 lines
795 B
Python
36 lines
795 B
Python
"""Decode-layer ports and frame model."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Iterable, Iterator, Protocol
|
|
|
|
from yovision_brain.input import CancellationToken, InputPacket
|
|
|
|
|
|
class DecoderError(RuntimeError):
|
|
"""A safe and actionable decode failure."""
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class DecodedFrame:
|
|
sequence: int
|
|
timestamp_ns: int
|
|
logical_device_id: str
|
|
profile_id: str
|
|
width: int
|
|
height: int
|
|
pixel_format: str
|
|
payload: bytes
|
|
dimensions_changed: bool = False
|
|
|
|
|
|
class DecoderBackend(Protocol):
|
|
media_formats: frozenset[str]
|
|
|
|
def decode(
|
|
self,
|
|
packets: Iterable[InputPacket],
|
|
cancellation: CancellationToken | None = None,
|
|
) -> Iterator[DecodedFrame]: ...
|