PipeWire  0.3.59
interfaces.h
Go to the documentation of this file.
1 /* PipeWire
2  *
3  * Copyright © 2019 Collabora Ltd.
4  * @author George Kiagiadakis <george.kiagiadakis@collabora.com>
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice (including the next
14  * paragraph) shall be included in all copies or substantial portions of the
15  * Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  */
25 
26 #ifndef PIPEWIRE_EXT_SESSION_MANAGER_INTERFACES_H
27 #define PIPEWIRE_EXT_SESSION_MANAGER_INTERFACES_H
28 
29 #include <spa/utils/defs.h>
30 #include <spa/utils/hook.h>
31 
32 #include "introspect.h"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
43 #define PW_TYPE_INTERFACE_Session PW_TYPE_INFO_INTERFACE_BASE "Session"
44 #define PW_VERSION_SESSION 0
45 struct pw_session;
46 
47 #define PW_TYPE_INTERFACE_Endpoint PW_TYPE_INFO_INTERFACE_BASE "Endpoint"
48 #define PW_VERSION_ENDPOINT 0
49 struct pw_endpoint;
50 
51 #define PW_TYPE_INTERFACE_EndpointStream PW_TYPE_INFO_INTERFACE_BASE "EndpointStream"
52 #define PW_VERSION_ENDPOINT_STREAM 0
53 struct pw_endpoint_stream;
54 
55 #define PW_TYPE_INTERFACE_EndpointLink PW_TYPE_INFO_INTERFACE_BASE "EndpointLink"
56 #define PW_VERSION_ENDPOINT_LINK 0
58 
59 /* Session */
60 
61 #define PW_SESSION_EVENT_INFO 0
62 #define PW_SESSION_EVENT_PARAM 1
63 #define PW_SESSION_EVENT_NUM 2
64 
66 #define PW_VERSION_SESSION_EVENTS 0
67  uint32_t version;
74  void (*info) (void *data, const struct pw_session_info *info);
75 
87  void (*param) (void *data, int seq,
88  uint32_t id, uint32_t index, uint32_t next,
89  const struct spa_pod *param);
90 };
91 
92 #define PW_SESSION_METHOD_ADD_LISTENER 0
93 #define PW_SESSION_METHOD_SUBSCRIBE_PARAMS 1
94 #define PW_SESSION_METHOD_ENUM_PARAMS 2
95 #define PW_SESSION_METHOD_SET_PARAM 3
96 #define PW_SESSION_METHOD_CREATE_LINK 4
97 #define PW_SESSION_METHOD_NUM 5
98 
99 struct pw_session_methods {
100 #define PW_VERSION_SESSION_METHODS 0
101  uint32_t version;
103  int (*add_listener) (void *object,
104  struct spa_hook *listener,
105  const struct pw_session_events *events,
106  void *data);
107 
117  int (*subscribe_params) (void *object, uint32_t *ids, uint32_t n_ids);
118 
131  int (*enum_params) (void *object, int seq,
132  uint32_t id, uint32_t start, uint32_t num,
133  const struct spa_pod *filter);
134 
142  int (*set_param) (void *object, uint32_t id, uint32_t flags,
143  const struct spa_pod *param);
144 };
145 
146 #define pw_session_method(o,method,version,...) \
147 ({ \
148  int _res = -ENOTSUP; \
149  spa_interface_call_res((struct spa_interface*)o, \
150  struct pw_session_methods, _res, \
151  method, version, ##__VA_ARGS__); \
152  _res; \
153 })
154 
155 #define pw_session_add_listener(c,...) pw_session_method(c,add_listener,0,__VA_ARGS__)
156 #define pw_session_subscribe_params(c,...) pw_session_method(c,subscribe_params,0,__VA_ARGS__)
157 #define pw_session_enum_params(c,...) pw_session_method(c,enum_params,0,__VA_ARGS__)
158 #define pw_session_set_param(c,...) pw_session_method(c,set_param,0,__VA_ARGS__)
159 
160 
161 /* Endpoint */
162 
163 #define PW_ENDPOINT_EVENT_INFO 0
164 #define PW_ENDPOINT_EVENT_PARAM 1
165 #define PW_ENDPOINT_EVENT_NUM 2
166 
167 struct pw_endpoint_events {
168 #define PW_VERSION_ENDPOINT_EVENTS 0
169  uint32_t version;
176  void (*info) (void *data, const struct pw_endpoint_info *info);
177 
189  void (*param) (void *data, int seq,
190  uint32_t id, uint32_t index, uint32_t next,
191  const struct spa_pod *param);
192 };
193 
194 #define PW_ENDPOINT_METHOD_ADD_LISTENER 0
195 #define PW_ENDPOINT_METHOD_SUBSCRIBE_PARAMS 1
196 #define PW_ENDPOINT_METHOD_ENUM_PARAMS 2
197 #define PW_ENDPOINT_METHOD_SET_PARAM 3
198 #define PW_ENDPOINT_METHOD_CREATE_LINK 4
199 #define PW_ENDPOINT_METHOD_NUM 5
200 
202 #define PW_VERSION_ENDPOINT_METHODS 0
203  uint32_t version;
205  int (*add_listener) (void *object,
206  struct spa_hook *listener,
207  const struct pw_endpoint_events *events,
208  void *data);
209 
219  int (*subscribe_params) (void *object, uint32_t *ids, uint32_t n_ids);
220 
233  int (*enum_params) (void *object, int seq,
234  uint32_t id, uint32_t start, uint32_t num,
235  const struct spa_pod *filter);
236 
244  int (*set_param) (void *object, uint32_t id, uint32_t flags,
245  const struct spa_pod *param);
246 
247  int (*create_link) (void *object, const struct spa_dict *props);
248 };
249 
250 #define pw_endpoint_method(o,method,version,...) \
251 ({ \
252  int _res = -ENOTSUP; \
253  spa_interface_call_res((struct spa_interface*)o, \
254  struct pw_endpoint_methods, _res, \
255  method, version, ##__VA_ARGS__); \
256  _res; \
257 })
258 
259 #define pw_endpoint_add_listener(c,...) pw_endpoint_method(c,add_listener,0,__VA_ARGS__)
260 #define pw_endpoint_subscribe_params(c,...) pw_endpoint_method(c,subscribe_params,0,__VA_ARGS__)
261 #define pw_endpoint_enum_params(c,...) pw_endpoint_method(c,enum_params,0,__VA_ARGS__)
262 #define pw_endpoint_set_param(c,...) pw_endpoint_method(c,set_param,0,__VA_ARGS__)
263 #define pw_endpoint_create_link(c,...) pw_endpoint_method(c,create_link,0,__VA_ARGS__)
264 
265 /* Endpoint Stream */
266 
267 #define PW_ENDPOINT_STREAM_EVENT_INFO 0
268 #define PW_ENDPOINT_STREAM_EVENT_PARAM 1
269 #define PW_ENDPOINT_STREAM_EVENT_NUM 2
270 
272 #define PW_VERSION_ENDPOINT_STREAM_EVENTS 0
273  uint32_t version;
280  void (*info) (void *data, const struct pw_endpoint_stream_info *info);
281 
293  void (*param) (void *data, int seq,
294  uint32_t id, uint32_t index, uint32_t next,
295  const struct spa_pod *param);
296 };
297 
298 #define PW_ENDPOINT_STREAM_METHOD_ADD_LISTENER 0
299 #define PW_ENDPOINT_STREAM_METHOD_SUBSCRIBE_PARAMS 1
300 #define PW_ENDPOINT_STREAM_METHOD_ENUM_PARAMS 2
301 #define PW_ENDPOINT_STREAM_METHOD_SET_PARAM 3
302 #define PW_ENDPOINT_STREAM_METHOD_NUM 4
303 
305 #define PW_VERSION_ENDPOINT_STREAM_METHODS 0
306  uint32_t version;
308  int (*add_listener) (void *object,
309  struct spa_hook *listener,
310  const struct pw_endpoint_stream_events *events,
311  void *data);
312 
322  int (*subscribe_params) (void *object, uint32_t *ids, uint32_t n_ids);
323 
336  int (*enum_params) (void *object, int seq,
337  uint32_t id, uint32_t start, uint32_t num,
338  const struct spa_pod *filter);
339 
347  int (*set_param) (void *object, uint32_t id, uint32_t flags,
348  const struct spa_pod *param);
349 };
350 
351 #define pw_endpoint_stream_method(o,method,version,...) \
352 ({ \
353  int _res = -ENOTSUP; \
354  spa_interface_call_res((struct spa_interface*)o, \
355  struct pw_endpoint_stream_methods, _res, \
356  method, version, ##__VA_ARGS__); \
357  _res; \
358 })
359 
360 #define pw_endpoint_stream_add_listener(c,...) pw_endpoint_stream_method(c,add_listener,0,__VA_ARGS__)
361 #define pw_endpoint_stream_subscribe_params(c,...) pw_endpoint_stream_method(c,subscribe_params,0,__VA_ARGS__)
362 #define pw_endpoint_stream_enum_params(c,...) pw_endpoint_stream_method(c,enum_params,0,__VA_ARGS__)
363 #define pw_endpoint_stream_set_param(c,...) pw_endpoint_stream_method(c,set_param,0,__VA_ARGS__)
364 
365 /* Endpoint Link */
366 
367 #define PW_ENDPOINT_LINK_EVENT_INFO 0
368 #define PW_ENDPOINT_LINK_EVENT_PARAM 1
369 #define PW_ENDPOINT_LINK_EVENT_NUM 2
370 
372 #define PW_VERSION_ENDPOINT_LINK_EVENTS 0
373  uint32_t version;
380  void (*info) (void *data, const struct pw_endpoint_link_info *info);
381 
393  void (*param) (void *data, int seq,
394  uint32_t id, uint32_t index, uint32_t next,
395  const struct spa_pod *param);
396 };
397 
398 #define PW_ENDPOINT_LINK_METHOD_ADD_LISTENER 0
399 #define PW_ENDPOINT_LINK_METHOD_SUBSCRIBE_PARAMS 1
400 #define PW_ENDPOINT_LINK_METHOD_ENUM_PARAMS 2
401 #define PW_ENDPOINT_LINK_METHOD_SET_PARAM 3
402 #define PW_ENDPOINT_LINK_METHOD_REQUEST_STATE 4
403 #define PW_ENDPOINT_LINK_METHOD_DESTROY 5
404 #define PW_ENDPOINT_LINK_METHOD_NUM 6
405 
407 #define PW_VERSION_ENDPOINT_LINK_METHODS 0
408  uint32_t version;
410  int (*add_listener) (void *object,
411  struct spa_hook *listener,
412  const struct pw_endpoint_link_events *events,
413  void *data);
414 
424  int (*subscribe_params) (void *object, uint32_t *ids, uint32_t n_ids);
425 
438  int (*enum_params) (void *object, int seq,
439  uint32_t id, uint32_t start, uint32_t num,
440  const struct spa_pod *filter);
441 
449  int (*set_param) (void *object, uint32_t id, uint32_t flags,
450  const struct spa_pod *param);
451 
452  int (*request_state) (void *object, enum pw_endpoint_link_state state);
453 };
454 
455 #define pw_endpoint_link_method(o,method,version,...) \
456 ({ \
457  int _res = -ENOTSUP; \
458  spa_interface_call_res((struct spa_interface*)o, \
459  struct pw_endpoint_link_methods, _res, \
460  method, version, ##__VA_ARGS__); \
461  _res; \
462 })
463 
464 #define pw_endpoint_link_add_listener(c,...) pw_endpoint_link_method(c,add_listener,0,__VA_ARGS__)
465 #define pw_endpoint_link_subscribe_params(c,...) pw_endpoint_link_method(c,subscribe_params,0,__VA_ARGS__)
466 #define pw_endpoint_link_enum_params(c,...) pw_endpoint_link_method(c,enum_params,0,__VA_ARGS__)
467 #define pw_endpoint_link_set_param(c,...) pw_endpoint_link_method(c,set_param,0,__VA_ARGS__)
468 #define pw_endpoint_link_request_state(c,...) pw_endpoint_link_method(c,request_state,0,__VA_ARGS__)
469 
470 
475 #ifdef __cplusplus
476 } /* extern "C" */
477 #endif
478 
479 #endif /* PIPEWIRE_EXT_SESSION_MANAGER_INTERFACES_H */
spa/utils/defs.h
pw_endpoint_link_state
Definition: introspect.h:46
spa/utils/hook.h
pipewire/extensions/session-manager/introspect.h
Definition: interfaces.h:205
void(* info)(void *data, const struct pw_endpoint_info *info)
Notify endpoint info.
Definition: interfaces.h:215
void(* param)(void *data, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
Notify a endpoint param.
Definition: interfaces.h:228
uint32_t version
version of this structure
Definition: interfaces.h:208
Definition: introspect.h:70
uint32_t id
the endpoint id (global)
Definition: introspect.h:74
Definition: interfaces.h:246
uint32_t version
version of this structure
Definition: interfaces.h:249
int(* add_listener)(void *object, struct spa_hook *listener, const struct pw_endpoint_events *events, void *data)
Definition: interfaces.h:251
int(* subscribe_params)(void *object, uint32_t *ids, uint32_t n_ids)
Subscribe to parameter changes.
Definition: interfaces.h:265
int(* create_link)(void *object, const struct spa_dict *props)
Definition: interfaces.h:293
int(* set_param)(void *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
Set a parameter on the endpoint.
Definition: interfaces.h:290
int(* enum_params)(void *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter)
Enumerate endpoint parameters.
Definition: interfaces.h:279
Definition: interfaces.h:330
uint32_t version
version of this structure
Definition: interfaces.h:333
void(* param)(void *data, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
Notify a endpoint stream param.
Definition: interfaces.h:353
void(* info)(void *data, const struct pw_endpoint_stream_info *info)
Notify endpoint stream info.
Definition: interfaces.h:340
Definition: introspect.h:99
uint32_t id
the stream id (local or global)
Definition: introspect.h:103
Definition: interfaces.h:369
int(* add_listener)(void *object, struct spa_hook *listener, const struct pw_endpoint_stream_events *events, void *data)
Definition: interfaces.h:374
int(* set_param)(void *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
Set a parameter on the stream.
Definition: interfaces.h:413
uint32_t version
version of this structure
Definition: interfaces.h:372
int(* enum_params)(void *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter)
Enumerate stream parameters.
Definition: interfaces.h:402
int(* subscribe_params)(void *object, uint32_t *ids, uint32_t n_ids)
Subscribe to parameter changes.
Definition: interfaces.h:388
Definition: interfaces.h:84
void(* info)(void *data, const struct pw_session_info *info)
Notify session info.
Definition: interfaces.h:94
void(* param)(void *data, int seq, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
Notify a session param.
Definition: interfaces.h:107
uint32_t version
version of this structure
Definition: interfaces.h:87
Definition: introspect.h:53
uint32_t id
the session id (global)
Definition: introspect.h:57
Definition: interfaces.h:125
uint32_t version
version of this structure
Definition: interfaces.h:128
int(* set_param)(void *object, uint32_t id, uint32_t flags, const struct spa_pod *param)
Set a parameter on the session.
Definition: interfaces.h:169
int(* subscribe_params)(void *object, uint32_t *ids, uint32_t n_ids)
Subscribe to parameter changes.
Definition: interfaces.h:144
int(* enum_params)(void *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter)
Enumerate session parameters.
Definition: interfaces.h:158
int(* add_listener)(void *object, struct spa_hook *listener, const struct pw_session_events *events, void *data)
Definition: interfaces.h:130
Definition: dict.h:59
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:351
Definition: pod.h:63