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}