1#![allow(non_camel_case_types)]
10#![allow(clippy::missing_safety_doc)]
11
12use std::os::raw::{c_char, c_int, c_void};
13
14pub type adamo_protocol_t = u32;
15pub const ADAMO_PROTOCOL_UDP: adamo_protocol_t = 0;
16pub const ADAMO_PROTOCOL_QUIC: adamo_protocol_t = 1;
17pub const ADAMO_PROTOCOL_TCP: adamo_protocol_t = 2;
18
19#[repr(C)]
23pub struct adamo_session_t {
24 _priv: [u8; 0],
25 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
26}
27#[repr(C)]
28pub struct adamo_publisher_t {
29 _priv: [u8; 0],
30 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
31}
32#[repr(C)]
33pub struct adamo_subscriber_t {
34 _priv: [u8; 0],
35 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
36}
37#[repr(C)]
38pub struct adamo_cb_sub_t {
39 _priv: [u8; 0],
40 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
41}
42#[repr(C)]
43pub struct adamo_robot_t {
44 _priv: [u8; 0],
45 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
46}
47#[repr(C)]
48pub struct adamo_video_track_t {
49 _priv: [u8; 0],
50 _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
51}
52
53#[repr(C)]
54pub struct adamo_sample_t {
55 pub key: *mut c_char,
56 pub payload: *mut u8,
57 pub payload_len: usize,
58 pub is_delete: i32,
59}
60
61pub type adamo_sample_cb_t =
62 Option<unsafe extern "C" fn(sample: *const adamo_sample_t, user: *mut c_void)>;
63
64#[cfg(not(docsrs))]
67unsafe extern "C" {
68 pub fn adamo_last_error() -> *const c_char;
69
70 pub fn adamo_sample_free(sample: *mut adamo_sample_t);
71
72 pub fn adamo_open(api_key: *const c_char, protocol: adamo_protocol_t) -> *mut adamo_session_t;
73 pub fn adamo_session_free(sess: *mut adamo_session_t);
74 pub fn adamo_session_org(sess: *const adamo_session_t) -> *const c_char;
75 pub fn adamo_session_org_len(sess: *const adamo_session_t) -> usize;
76
77 pub fn adamo_put(
78 sess: *const adamo_session_t,
79 key: *const c_char,
80 payload: *const u8,
81 payload_len: usize,
82 priority: u8,
83 express: i32,
84 ) -> i32;
85
86 pub fn adamo_publisher(
87 sess: *const adamo_session_t,
88 key: *const c_char,
89 priority: u8,
90 express: i32,
91 reliable: i32,
92 ) -> *mut adamo_publisher_t;
93 pub fn adamo_publisher_put(
94 pub_: *const adamo_publisher_t,
95 payload: *const u8,
96 payload_len: usize,
97 ) -> i32;
98 pub fn adamo_publisher_free(pub_: *mut adamo_publisher_t);
99
100 pub fn adamo_subscribe(
101 sess: *const adamo_session_t,
102 key: *const c_char,
103 ) -> *mut adamo_subscriber_t;
104 pub fn adamo_sub_recv(
105 sub: *const adamo_subscriber_t,
106 timeout_ms: u64,
107 ) -> *mut adamo_sample_t;
108 pub fn adamo_sub_try_recv(sub: *const adamo_subscriber_t) -> *mut adamo_sample_t;
109 pub fn adamo_sub_free(sub: *mut adamo_subscriber_t);
110
111 pub fn adamo_subscribe_cb(
112 sess: *const adamo_session_t,
113 key: *const c_char,
114 cb: adamo_sample_cb_t,
115 user: *mut c_void,
116 ) -> *mut adamo_cb_sub_t;
117 pub fn adamo_cb_sub_free(sub: *mut adamo_cb_sub_t);
118
119 pub fn adamo_robot_new(
120 api_key: *const c_char,
121 name: *const c_char,
122 protocol: adamo_protocol_t,
123 ) -> *mut adamo_robot_t;
124 pub fn adamo_robot_video(
125 robot: *mut adamo_robot_t,
126 name: *const c_char,
127 width: u32,
128 height: u32,
129 pixel_format: *const c_char,
130 fps: u32,
131 bitrate_kbps: u32,
132 ) -> *mut adamo_video_track_t;
133 pub fn adamo_robot_attach_video_v4l2(
134 robot: *mut adamo_robot_t,
135 name: *const c_char,
136 device: *const c_char,
137 width: u32,
138 height: u32,
139 fps: u32,
140 bitrate_kbps: u32,
141 ) -> i32;
142 pub fn adamo_robot_attach_video_gst(
143 robot: *mut adamo_robot_t,
144 name: *const c_char,
145 pipeline: *const c_char,
146 width: u32,
147 height: u32,
148 fps: u32,
149 bitrate_kbps: u32,
150 ) -> i32;
151 pub fn adamo_video_track_send(
152 track: *mut adamo_video_track_t,
153 payload: *const u8,
154 payload_len: usize,
155 ) -> i32;
156 pub fn adamo_video_track_free(track: *mut adamo_video_track_t);
157 pub fn adamo_robot_run(robot: *mut adamo_robot_t) -> i32;
158 pub fn adamo_robot_free(robot: *mut adamo_robot_t);
159
160 pub fn adamo_detect_encoder() -> *const c_char;
161
162 pub fn adamo_fabric_now_us() -> u64;
163 pub fn adamo_fabric_synced() -> i32;
164}
165
166#[doc(hidden)]
169pub const _IMPORTS: (Option<c_int>, Option<*mut c_void>) = (None, None);