25#define SPA_TYPE_INTERFACE_Loop SPA_TYPE_INFO_INTERFACE_BASE "Loop"
26#define SPA_TYPE_INTERFACE_DataLoop SPA_TYPE_INFO_INTERFACE_BASE "DataLoop"
27#define SPA_VERSION_LOOP 0
30#define SPA_TYPE_INTERFACE_LoopControl SPA_TYPE_INFO_INTERFACE_BASE "LoopControl"
31#define SPA_VERSION_LOOP_CONTROL 1
34#define SPA_TYPE_INTERFACE_LoopUtils SPA_TYPE_INFO_INTERFACE_BASE "LoopUtils"
35#define SPA_VERSION_LOOP_UTILS 0
66#define SPA_VERSION_LOOP_METHODS 0
82 int (*
invoke) (
void *object,
91#define spa_loop_method(o,method,version,...) \
93 int _res = -ENOTSUP; \
94 struct spa_loop *_o = o; \
95 spa_interface_call_res(&_o->iface, \
96 struct spa_loop_methods, _res, \
97 method, version, ##__VA_ARGS__); \
101#define spa_loop_add_source(l,...) spa_loop_method(l,add_source,0,##__VA_ARGS__)
102#define spa_loop_update_source(l,...) spa_loop_method(l,update_source,0,##__VA_ARGS__)
103#define spa_loop_remove_source(l,...) spa_loop_method(l,remove_source,0,##__VA_ARGS__)
104#define spa_loop_invoke(l,...) spa_loop_method(l,invoke,0,##__VA_ARGS__)
111#define SPA_VERSION_LOOP_CONTROL_HOOKS 0
121#define spa_loop_control_hook_before(l) \
123 struct spa_hook_list *_l = l; \
124 struct spa_hook *_h; \
125 spa_list_for_each_reverse(_h, &_l->list, link) \
126 spa_callbacks_call_fast(&_h->cb, struct spa_loop_control_hooks, before, 0); \
129#define spa_loop_control_hook_after(l) \
131 struct spa_hook_list *_l = l; \
132 struct spa_hook *_h; \
133 spa_list_for_each(_h, &_l->list, link) \
134 spa_callbacks_call_fast(&_h->cb, struct spa_loop_control_hooks, after, 0); \
143#define SPA_VERSION_LOOP_CONTROL_METHODS 1
146 int (*
get_fd) (
void *object);
166 void (*
enter) (
void *object);
173 void (*
leave) (
void *object);
184 int (*
iterate) (
void *object,
int timeout);
194 int (*
check) (
void *object);
197#define spa_loop_control_method_v(o,method,version,...) \
199 struct spa_loop_control *_o = o; \
200 spa_interface_call(&_o->iface, \
201 struct spa_loop_control_methods, \
202 method, version, ##__VA_ARGS__); \
205#define spa_loop_control_method_r(o,method,version,...) \
207 int _res = -ENOTSUP; \
208 struct spa_loop_control *_o = o; \
209 spa_interface_call_res(&_o->iface, \
210 struct spa_loop_control_methods, _res, \
211 method, version, ##__VA_ARGS__); \
215#define spa_loop_control_method_fast_r(o,method,version,...) \
218 struct spa_loop_control *_o = o; \
219 spa_interface_call_fast_res(&_o->iface, \
220 struct spa_loop_control_methods, _res, \
221 method, version, ##__VA_ARGS__); \
225#define spa_loop_control_get_fd(l) spa_loop_control_method_r(l,get_fd,0)
226#define spa_loop_control_add_hook(l,...) spa_loop_control_method_v(l,add_hook,0,__VA_ARGS__)
227#define spa_loop_control_enter(l) spa_loop_control_method_v(l,enter,0)
228#define spa_loop_control_leave(l) spa_loop_control_method_v(l,leave,0)
229#define spa_loop_control_iterate(l,...) spa_loop_control_method_r(l,iterate,0,__VA_ARGS__)
230#define spa_loop_control_check(l) spa_loop_control_method_r(l,check,1)
232#define spa_loop_control_iterate_fast(l,...) spa_loop_control_method_fast_r(l,iterate,0,__VA_ARGS__)
246#define SPA_VERSION_LOOP_UTILS_METHODS 0
262 struct spa_source *(*add_event) (
void *object,
266 struct spa_source *(*add_timer) (
void *object,
270 struct timespec *value,
271 struct timespec *interval,
283#define spa_loop_utils_method_v(o,method,version,...) \
285 struct spa_loop_utils *_o = o; \
286 spa_interface_call(&_o->iface, \
287 struct spa_loop_utils_methods, \
288 method, version, ##__VA_ARGS__); \
291#define spa_loop_utils_method_r(o,method,version,...) \
293 int _res = -ENOTSUP; \
294 struct spa_loop_utils *_o = o; \
295 spa_interface_call_res(&_o->iface, \
296 struct spa_loop_utils_methods, _res, \
297 method, version, ##__VA_ARGS__); \
300#define spa_loop_utils_method_s(o,method,version,...) \
302 struct spa_source *_res = NULL; \
303 struct spa_loop_utils *_o = o; \
304 spa_interface_call_res(&_o->iface, \
305 struct spa_loop_utils_methods, _res, \
306 method, version, ##__VA_ARGS__); \
311#define spa_loop_utils_add_io(l,...) spa_loop_utils_method_s(l,add_io,0,__VA_ARGS__)
312#define spa_loop_utils_update_io(l,...) spa_loop_utils_method_r(l,update_io,0,__VA_ARGS__)
313#define spa_loop_utils_add_idle(l,...) spa_loop_utils_method_s(l,add_idle,0,__VA_ARGS__)
314#define spa_loop_utils_enable_idle(l,...) spa_loop_utils_method_r(l,enable_idle,0,__VA_ARGS__)
315#define spa_loop_utils_add_event(l,...) spa_loop_utils_method_s(l,add_event,0,__VA_ARGS__)
316#define spa_loop_utils_signal_event(l,...) spa_loop_utils_method_r(l,signal_event,0,__VA_ARGS__)
317#define spa_loop_utils_add_timer(l,...) spa_loop_utils_method_s(l,add_timer,0,__VA_ARGS__)
318#define spa_loop_utils_update_timer(l,...) spa_loop_utils_method_r(l,update_timer,0,__VA_ARGS__)
319#define spa_loop_utils_add_signal(l,...) spa_loop_utils_method_s(l,add_signal,0,__VA_ARGS__)
320#define spa_loop_utils_destroy_source(l,...) spa_loop_utils_method_v(l,destroy_source,0,__VA_ARGS__)
void(* spa_source_timer_func_t)(void *data, uint64_t expirations)
Definition loop.h:273
void(* spa_source_event_func_t)(void *data, uint64_t count)
Definition loop.h:272
void(* spa_source_signal_func_t)(void *data, int signal_number)
Definition loop.h:274
void(* spa_source_idle_func_t)(void *data)
Definition loop.h:271
void(* spa_source_func_t)(struct spa_source *source)
Definition loop.h:53
int(* spa_invoke_func_t)(struct spa_loop *loop, bool async, uint32_t seq, const void *data, size_t size, void *user_data)
Definition loop.h:66
void(* spa_source_io_func_t)(void *data, int fd, uint32_t mask)
Definition loop.h:270
A hook, contains the structure with functions and the data passed to the functions.
Definition hook.h:350
Control hooks.
Definition loop.h:132
void(* before)(void *data)
Executed right before waiting for events.
Definition loop.h:138
uint32_t version
Definition loop.h:135
void(* after)(void *data)
Executed right after waiting for events.
Definition loop.h:141
Control an event loop.
Definition loop.h:163
int(* get_fd)(void *object)
Definition loop.h:170
int(* iterate)(void *object, int timeout)
Perform one iteration of the loop.
Definition loop.h:208
void(* enter)(void *object)
Enter a loop.
Definition loop.h:190
void(* add_hook)(void *object, struct spa_hook *hook, const struct spa_loop_control_hooks *hooks, void *data)
Add a hook.
Definition loop.h:178
int(* check)(void *object)
Check context of the loop.
Definition loop.h:218
void(* leave)(void *object)
Leave a loop.
Definition loop.h:197
uint32_t version
Definition loop.h:168
struct spa_interface iface
Definition loop.h:42
Register sources and work items to an event loop.
Definition loop.h:76
int(* add_source)(void *object, struct spa_source *source)
add a source to the loop
Definition loop.h:84
int(* remove_source)(void *object, struct spa_source *source)
remove a source from the loop
Definition loop.h:92
int(* invoke)(void *object, spa_invoke_func_t func, uint32_t seq, const void *data, size_t size, bool block, void *user_data)
invoke a function in the context of this loop
Definition loop.h:96
int(* update_source)(void *object, struct spa_source *source)
update the source io mask
Definition loop.h:88
uint32_t version
Definition loop.h:81
Create sources for an event loop.
Definition loop.h:279
int(* update_io)(void *object, struct spa_source *source, uint32_t mask)
Definition loop.h:292
int(* enable_idle)(void *object, struct spa_source *source, bool enabled)
Definition loop.h:297
int(* signal_event)(void *object, struct spa_source *source)
Definition loop.h:301
int(* update_timer)(void *object, struct spa_source *source, struct timespec *value, struct timespec *interval, bool absolute)
Definition loop.h:305
void(* destroy_source)(void *object, struct spa_source *source)
destroy a source allocated with this interface.
Definition loop.h:317
uint32_t version
Definition loop.h:284
struct spa_interface iface
Definition loop.h:48
struct spa_interface iface
Definition loop.h:36
uint32_t rmask
Definition loop.h:61
void * data
Definition loop.h:58
void * priv
Definition loop.h:63
uint32_t mask
Definition loop.h:60
spa_source_func_t func
Definition loop.h:57
int fd
Definition loop.h:59
struct spa_loop * loop
Definition loop.h:56