Skip to main content

pinray_core/
frame.rs

1use crate::audio::AudioFrame;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub struct Rect {
5    pub x: i32,
6    pub y: i32,
7    pub width: u32,
8    pub height: u32,
9}
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum PixelFormat {
13    Bgra8888,
14    Rgba8888,
15    Rgb888,
16    Nv12,
17    I420,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21pub enum ColorSpace {
22    Srgb,
23    DisplayP3,
24    Bt709,
25    Bt2020,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq)]
29pub struct DmabufFrame {
30    pub fd: i32,
31    pub offset: u32,
32    pub size: u32,
33    pub stride: u32,
34    pub modifier: u64,
35}
36
37#[derive(Debug, Clone, Copy, PartialEq, Eq)]
38pub struct CvPixelBufferHandle {
39    pub ptr: usize,
40}
41
42#[derive(Debug, Clone, Copy, PartialEq, Eq)]
43pub struct D3D11TextureHandle {
44    pub ptr: usize,
45}
46
47#[derive(Debug, Clone, PartialEq)]
48pub enum FrameData {
49    Host(Vec<u8>),
50    Dmabuf(DmabufFrame),
51    CvPixelBuffer(CvPixelBufferHandle),
52    D3D11Texture(D3D11TextureHandle),
53}
54
55#[derive(Debug, Clone, PartialEq)]
56pub struct VideoFrame {
57    pub stream_time_ns: i64,
58    pub sequence: u64,
59    pub width: u32,
60    pub height: u32,
61    pub stride: u32,
62    pub pixel_format: PixelFormat,
63    pub color_space: Option<ColorSpace>,
64    pub data: FrameData,
65    pub damage: Option<Vec<Rect>>,
66}
67
68#[derive(Debug, Clone, Copy, PartialEq, Eq)]
69pub enum GapReason {
70    Dropped,
71    FormatChanged,
72    BackendRestarted,
73    Unknown,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq)]
77pub struct GapEvent {
78    pub stream_time_ns: i64,
79    pub reason: GapReason,
80    pub dropped_frames: Option<u32>,
81}
82
83#[derive(Debug, Clone, PartialEq)]
84pub enum CaptureEvent {
85    Video(VideoFrame),
86    Audio(AudioFrame),
87    Gap(GapEvent),
88    End,
89}