PipeWire 0.3.65
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
35extern "C" {
36#endif
37
43#define PW_TYPE_INTERFACE_Session PW_TYPE_INFO_INTERFACE_BASE "Session"
44#define PW_VERSION_SESSION 0
45struct pw_session;
46
47#define PW_TYPE_INTERFACE_Endpoint PW_TYPE_INFO_INTERFACE_BASE "Endpoint"
48#define PW_VERSION_ENDPOINT 0
49struct pw_endpoint;
51#define PW_TYPE_INTERFACE_EndpointStream PW_TYPE_INFO_INTERFACE_BASE "EndpointStream"
52#define PW_VERSION_ENDPOINT_STREAM 0
54
55#define PW_TYPE_INTERFACE_EndpointLink PW_TYPE_INFO_INTERFACE_BASE "EndpointLink"
56#define PW_VERSION_ENDPOINT_LINK 0
59/* Session */
60
61#define PW_SESSION_EVENT_INFO 0
62#define PW_SESSION_EVENT_PARAM 1
63#define PW_SESSION_EVENT_NUM 2
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
99struct 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);
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);
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
167struct 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};
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);
244 int (*set_param) (void *object, uint32_t id, uint32_t flags,
245 const struct spa_pod *param);
247 int (*create_link) (void *object, const struct spa_dict *props);
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);
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})
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);
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: utils/dict.h:59
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:351
Definition: pod/pod.h:63