PipeWire  0.2.0
interfaces.h
Go to the documentation of this file.
1 /* PipeWire
2  * Copyright (C) 2016 Wim Taymans <wim.taymans@gmail.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #ifndef __PIPEWIRE_INTERFACES_H__
21 #define __PIPEWIRE_INTERFACES_H__
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include <spa/utils/defs.h>
28 #include <spa/param/param.h>
29 #include <spa/node/node.h>
30 
31 #include <pipewire/introspect.h>
32 #include <pipewire/proxy.h>
33 
34 struct pw_core_proxy;
35 struct pw_registry_proxy;
36 struct pw_module_proxy;
37 struct pw_node_proxy;
38 struct pw_port_proxy;
39 struct pw_factory_proxy;
40 struct pw_client_proxy;
41 struct pw_link_proxy;
42 
61 #define PW_TYPE_INTERFACE__Core PW_TYPE_INTERFACE_BASE "Core"
62 #define PW_TYPE_INTERFACE__Registry PW_TYPE_INTERFACE_BASE "Registry"
63 #define PW_TYPE_INTERFACE__Module PW_TYPE_INTERFACE_BASE "Module"
64 #define PW_TYPE_INTERFACE__Node PW_TYPE_INTERFACE_BASE "Node"
65 #define PW_TYPE_INTERFACE__Port PW_TYPE_INTERFACE_BASE "Port"
66 #define PW_TYPE_INTERFACE__Client PW_TYPE_INTERFACE_BASE "Client"
67 #define PW_TYPE_INTERFACE__Link PW_TYPE_INTERFACE_BASE "Link"
68 
69 #define PW_VERSION_CORE 0
70 
71 #define PW_CORE_PROXY_METHOD_HELLO 0
72 #define PW_CORE_PROXY_METHOD_UPDATE_TYPES 1
73 #define PW_CORE_PROXY_METHOD_SYNC 2
74 #define PW_CORE_PROXY_METHOD_GET_REGISTRY 3
75 #define PW_CORE_PROXY_METHOD_CLIENT_UPDATE 4
76 #define PW_CORE_PROXY_METHOD_PERMISSIONS 5
77 #define PW_CORE_PROXY_METHOD_CREATE_OBJECT 6
78 #define PW_CORE_PROXY_METHOD_DESTROY 7
79 #define PW_CORE_PROXY_METHOD_NUM 8
80 
84 #define PW_CORE_PROXY_PERMISSIONS_DEFAULT "permissions.default"
85 
91 #define PW_CORE_PROXY_PERMISSIONS_GLOBAL "permissions.global"
92 
99 #define PW_CORE_PROXY_PERMISSIONS_EXISTING "permissions.existing"
100 
101 #define PW_LINK_OUTPUT_NODE_ID "link.output_node.id"
102 #define PW_LINK_OUTPUT_PORT_ID "link.output_port.id"
103 #define PW_LINK_INPUT_NODE_ID "link.input_node.id"
104 #define PW_LINK_INPUT_PORT_ID "link.input_port.id"
105 
115 #define PW_VERSION_CORE_PROXY_METHODS 0
116  uint32_t version;
121  void (*hello) (void *object);
131  void (*update_types) (void *object,
132  uint32_t first_id,
133  const char **types,
134  uint32_t n_types);
144  void (*sync) (void *object, uint32_t seq);
153  void (*get_registry) (void *object, uint32_t version, uint32_t new_id);
158  void (*client_update) (void *object, const struct spa_dict *props);
171  void (*permissions) (void *object, const struct spa_dict *props);
183  void (*create_object) (void *object,
184  const char *factory_name,
185  uint32_t type,
186  uint32_t version,
187  const struct spa_dict *props,
188  uint32_t new_id);
189 
195  void (*destroy) (void *object, uint32_t id);
196 };
197 
198 static inline void
199 pw_core_proxy_hello(struct pw_core_proxy *core)
200 {
201  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, hello);
202 }
203 
204 static inline void
205 pw_core_proxy_update_types(struct pw_core_proxy *core, uint32_t first_id, const char **types, uint32_t n_types)
206 {
207  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, update_types, first_id, types, n_types);
208 }
209 
210 static inline void
211 pw_core_proxy_sync(struct pw_core_proxy *core, uint32_t seq)
212 {
213  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, sync, seq);
214 }
215 
216 static inline struct pw_registry_proxy *
217 pw_core_proxy_get_registry(struct pw_core_proxy *core, uint32_t type, uint32_t version, size_t user_data_size)
218 {
219  struct pw_proxy *p = pw_proxy_new((struct pw_proxy*)core, type, user_data_size);
220  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, get_registry, version, pw_proxy_get_id(p));
221  return (struct pw_registry_proxy *) p;
222 }
223 
224 static inline void
225 pw_core_proxy_client_update(struct pw_core_proxy *core, const struct spa_dict *props)
226 {
227  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, client_update, props);
228 }
229 
230 static inline void
231 pw_core_proxy_permissions(struct pw_core_proxy *core, const struct spa_dict *props)
232 {
233  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, permissions, props);
234 }
235 
236 static inline void *
237 pw_core_proxy_create_object(struct pw_core_proxy *core,
238  const char *factory_name,
239  uint32_t type,
240  uint32_t version,
241  const struct spa_dict *props,
242  size_t user_data_size)
243 {
244  struct pw_proxy *p = pw_proxy_new((struct pw_proxy*)core, type, user_data_size);
245  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, create_object, factory_name,
246  type, version, props, pw_proxy_get_id(p));
247  return p;
248 }
249 
250 static inline void
251 pw_core_proxy_destroy(struct pw_core_proxy *core, uint32_t id)
252 {
253  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, destroy, id);
254 }
255 
256 #define PW_CORE_PROXY_EVENT_UPDATE_TYPES 0
257 #define PW_CORE_PROXY_EVENT_DONE 1
258 #define PW_CORE_PROXY_EVENT_ERROR 2
259 #define PW_CORE_PROXY_EVENT_REMOVE_ID 3
260 #define PW_CORE_PROXY_EVENT_INFO 4
261 #define PW_CORE_PROXY_EVENT_NUM 5
262 
268 #define PW_VERSION_CORE_PROXY_EVENTS 0
269  uint32_t version;
279  void (*update_types) (void *object,
280  uint32_t first_id,
281  const char **types,
282  uint32_t n_types);
290  void (*done) (void *object, uint32_t seq);
303  void (*error) (void *object, uint32_t id, int res, const char *error, ...);
314  void (*remove_id) (void *object, uint32_t id);
320  void (*info) (void *object, struct pw_core_info *info);
321 };
322 
323 static inline void
324 pw_core_proxy_add_listener(struct pw_core_proxy *core,
325  struct spa_hook *listener,
326  const struct pw_core_proxy_events *events,
327  void *data)
328 {
329  pw_proxy_add_proxy_listener((struct pw_proxy*)core, listener, events, data);
330 }
331 
332 
333 #define pw_core_resource_update_types(r,...) pw_resource_notify(r,struct pw_core_proxy_events,update_types,__VA_ARGS__)
334 #define pw_core_resource_done(r,...) pw_resource_notify(r,struct pw_core_proxy_events,done,__VA_ARGS__)
335 #define pw_core_resource_error(r,...) pw_resource_notify(r,struct pw_core_proxy_events,error,__VA_ARGS__)
336 #define pw_core_resource_remove_id(r,...) pw_resource_notify(r,struct pw_core_proxy_events,remove_id,__VA_ARGS__)
337 #define pw_core_resource_info(r,...) pw_resource_notify(r,struct pw_core_proxy_events,info,__VA_ARGS__)
338 
339 
340 #define PW_VERSION_REGISTRY 0
341 
373 #define PW_REGISTRY_PROXY_METHOD_BIND 0
374 #define PW_REGISTRY_PROXY_METHOD_NUM 1
375 
378 #define PW_VERSION_REGISTRY_PROXY_METHODS 0
379  uint32_t version;
392  void (*bind) (void *object, uint32_t id, uint32_t type, uint32_t version, uint32_t new_id);
393 };
394 
396 static inline void *
397 pw_registry_proxy_bind(struct pw_registry_proxy *registry,
398  uint32_t id, uint32_t type, uint32_t version,
399  size_t user_data_size)
400 {
401  struct pw_proxy *reg = (struct pw_proxy*)registry;
402  struct pw_proxy *p = pw_proxy_new(reg, type, user_data_size);
403  pw_proxy_do(reg, struct pw_registry_proxy_methods, bind, id, type, version, pw_proxy_get_id(p));
404  return p;
405 }
406 
407 #define PW_REGISTRY_PROXY_EVENT_GLOBAL 0
408 #define PW_REGISTRY_PROXY_EVENT_GLOBAL_REMOVE 1
409 #define PW_REGISTRY_PROXY_EVENT_NUM 2
410 
413 #define PW_VERSION_REGISTRY_PROXY_EVENTS 0
414  uint32_t version;
428  void (*global) (void *object, uint32_t id, uint32_t parent_id,
429  uint32_t permissions, uint32_t type, uint32_t version,
430  const struct spa_dict *props);
440  void (*global_remove) (void *object, uint32_t id);
441 };
442 
443 static inline void
444 pw_registry_proxy_add_listener(struct pw_registry_proxy *registry,
445  struct spa_hook *listener,
446  const struct pw_registry_proxy_events *events,
447  void *data)
448 {
449  pw_proxy_add_proxy_listener((struct pw_proxy*)registry, listener, events, data);
450 }
451 
452 #define pw_registry_resource_global(r,...) pw_resource_notify(r,struct pw_registry_proxy_events,global,__VA_ARGS__)
453 #define pw_registry_resource_global_remove(r,...) pw_resource_notify(r,struct pw_registry_proxy_events,global_remove,__VA_ARGS__)
454 
455 
456 #define PW_VERSION_MODULE 0
457 
458 #define PW_MODULE_PROXY_EVENT_INFO 0
459 #define PW_MODULE_PROXY_EVENT_NUM 1
460 
463 #define PW_VERSION_MODULE_PROXY_EVENTS 0
464  uint32_t version;
470  void (*info) (void *object, struct pw_module_info *info);
471 };
472 
473 static inline void
474 pw_module_proxy_add_listener(struct pw_module_proxy *module,
475  struct spa_hook *listener,
476  const struct pw_module_proxy_events *events,
477  void *data)
478 {
479  pw_proxy_add_proxy_listener((struct pw_proxy*)module, listener, events, data);
480 }
481 
482 #define pw_module_resource_info(r,...) pw_resource_notify(r,struct pw_module_proxy_events,info,__VA_ARGS__)
483 
484 #define PW_VERSION_NODE 0
485 
486 #define PW_NODE_PROXY_EVENT_INFO 0
487 #define PW_NODE_PROXY_EVENT_PARAM 1
488 #define PW_NODE_PROXY_EVENT_NUM 2
489 
492 #define PW_VERSION_NODE_PROXY_EVENTS 0
493  uint32_t version;
499  void (*info) (void *object, struct pw_node_info *info);
510  void (*param) (void *object,
511  uint32_t id, uint32_t index, uint32_t next,
512  const struct spa_pod *param);
513 };
514 
515 static inline void
516 pw_node_proxy_add_listener(struct pw_node_proxy *node,
517  struct spa_hook *listener,
518  const struct pw_node_proxy_events *events,
519  void *data)
520 {
521  pw_proxy_add_proxy_listener((struct pw_proxy*)node, listener, events, data);
522 }
523 
524 #define pw_node_resource_info(r,...) pw_resource_notify(r,struct pw_node_proxy_events,info,__VA_ARGS__)
525 #define pw_node_resource_param(r,...) pw_resource_notify(r,struct pw_node_proxy_events,param,__VA_ARGS__)
526 
527 #define PW_NODE_PROXY_METHOD_ENUM_PARAMS 0
528 #define PW_NODE_PROXY_METHOD_NUM 1
529 
532 #define PW_VERSION_NODE_PROXY_METHODS 0
533  uint32_t version;
545  void (*enum_params) (void *object, uint32_t id, uint32_t start, uint32_t num,
546  const struct spa_pod *filter);
547 };
548 
550 static inline void
551 pw_node_proxy_enum_params(struct pw_node_proxy *node, uint32_t id, uint32_t index,
552  uint32_t num, const struct spa_pod *filter)
553 {
554  pw_proxy_do((struct pw_proxy*)node, struct pw_node_proxy_methods, enum_params,
555  id, index, num, filter);
556 }
557 
558 #define PW_VERSION_PORT 0
559 
560 #define PW_PORT_PROXY_EVENT_INFO 0
561 #define PW_PORT_PROXY_EVENT_PARAM 1
562 #define PW_PORT_PROXY_EVENT_NUM 2
563 
566 #define PW_VERSION_PORT_PROXY_EVENTS 0
567  uint32_t version;
573  void (*info) (void *object, struct pw_port_info *info);
584  void (*param) (void *object,
585  uint32_t id, uint32_t index, uint32_t next,
586  const struct spa_pod *param);
587 };
588 
589 static inline void
590 pw_port_proxy_add_listener(struct pw_port_proxy *port,
591  struct spa_hook *listener,
592  const struct pw_port_proxy_events *events,
593  void *data)
594 {
595  pw_proxy_add_proxy_listener((struct pw_proxy*)port, listener, events, data);
596 }
597 
598 #define pw_port_resource_info(r,...) pw_resource_notify(r,struct pw_port_proxy_events,info,__VA_ARGS__)
599 #define pw_port_resource_param(r,...) pw_resource_notify(r,struct pw_port_proxy_events,param,__VA_ARGS__)
600 
601 #define PW_PORT_PROXY_METHOD_ENUM_PARAMS 0
602 #define PW_PORT_PROXY_METHOD_NUM 1
603 
606 #define PW_VERSION_PORT_PROXY_METHODS 0
607  uint32_t version;
619  void (*enum_params) (void *object, uint32_t id, uint32_t start, uint32_t num,
620  const struct spa_pod *filter);
621 };
622 
624 static inline void
625 pw_port_proxy_enum_params(struct pw_port_proxy *port, uint32_t id, uint32_t index,
626  uint32_t num, const struct spa_pod *filter)
627 {
628  pw_proxy_do((struct pw_proxy*)port, struct pw_port_proxy_methods, enum_params,
629  id, index, num, filter);
630 }
631 
632 #define PW_VERSION_FACTORY 0
633 
634 #define PW_FACTORY_PROXY_EVENT_INFO 0
635 #define PW_FACTORY_PROXY_EVENT_NUM 1
636 
639 #define PW_VERSION_FACTORY_PROXY_EVENTS 0
640  uint32_t version;
646  void (*info) (void *object, struct pw_factory_info *info);
647 };
648 
650 static inline void
651 pw_factory_proxy_add_listener(struct pw_factory_proxy *factory,
652  struct spa_hook *listener,
653  const struct pw_factory_proxy_events *events,
654  void *data)
655 {
656  pw_proxy_add_proxy_listener((struct pw_proxy*)factory, listener, events, data);
657 }
658 
659 #define pw_factory_resource_info(r,...) pw_resource_notify(r,struct pw_factory_proxy_events,info,__VA_ARGS__)
660 
661 #define PW_VERSION_CLIENT 0
662 
663 #define PW_CLIENT_PROXY_EVENT_INFO 0
664 #define PW_CLIENT_PROXY_EVENT_NUM 1
665 
668 #define PW_VERSION_CLIENT_PROXY_EVENTS 0
669  uint32_t version;
675  void (*info) (void *object, struct pw_client_info *info);
676 };
677 
679 static inline void
680 pw_client_proxy_add_listener(struct pw_client_proxy *client,
681  struct spa_hook *listener,
682  const struct pw_client_proxy_events *events,
683  void *data)
684 {
685  pw_proxy_add_proxy_listener((struct pw_proxy*)client, listener, events, data);
686 }
687 
688 #define pw_client_resource_info(r,...) pw_resource_notify(r,struct pw_client_proxy_events,info,__VA_ARGS__)
689 
690 
691 #define PW_VERSION_LINK 0
692 
693 #define PW_LINK_PROXY_EVENT_INFO 0
694 #define PW_LINK_PROXY_EVENT_NUM 1
695 
698 #define PW_VERSION_LINK_PROXY_EVENTS 0
699  uint32_t version;
705  void (*info) (void *object, struct pw_link_info *info);
706 };
707 
709 static inline void
710 pw_link_proxy_add_listener(struct pw_link_proxy *link,
711  struct spa_hook *listener,
712  const struct pw_link_proxy_events *events,
713  void *data)
714 {
715  pw_proxy_add_proxy_listener((struct pw_proxy*)link, listener, events, data);
716 }
717 
718 #define pw_link_resource_info(r,...) pw_resource_notify(r,struct pw_link_proxy_events,info,__VA_ARGS__)
719 
720 #ifdef __cplusplus
721 } /* extern "C" */
722 #endif
723 
724 #endif /* __PIPEWIRE_INTERFACES_H__ */
void(* update_types)(void *object, uint32_t first_id, const char **types, uint32_t n_types)
Update the type map.
Definition: interfaces.h:279
uint32_t version
Definition: interfaces.h:464
uint32_t version
Definition: interfaces.h:669
void(* bind)(void *object, uint32_t id, uint32_t type, uint32_t version, uint32_t new_id)
Bind to a global object.
Definition: interfaces.h:392
void(* global)(void *object, uint32_t id, uint32_t parent_id, uint32_t permissions, uint32_t type, uint32_t version, const struct spa_dict *props)
Notify of a new global object.
Definition: interfaces.h:428
void(* client_update)(void *object, const struct spa_dict *props)
Update the client properties.
Definition: interfaces.h:158
Module events.
Definition: interfaces.h:462
void(* destroy)(void *object, uint32_t id)
Destroy an object id.
Definition: interfaces.h:195
void(* info)(void *object, struct pw_port_info *info)
Notify port info.
Definition: interfaces.h:573
uint32_t version
Definition: interfaces.h:533
void(* get_registry)(void *object, uint32_t version, uint32_t new_id)
Get the registry object.
Definition: interfaces.h:153
void(* info)(void *object, struct pw_module_info *info)
Notify module info.
Definition: interfaces.h:470
Definition: introspect.h:168
The core information.
Definition: introspect.h:76
void(* hello)(void *object)
Start a conversation with the server.
Definition: interfaces.h:121
void(* permissions)(void *object, const struct spa_dict *props)
Manage the permissions of the global objects.
Definition: interfaces.h:171
uint32_t version
Definition: interfaces.h:414
Factory events.
Definition: interfaces.h:638
Represents an object on the client side.
uint32_t pw_proxy_get_id(struct pw_proxy *proxy)
Get the local id of the proxy.
Definition: proxy.c:83
Node events.
Definition: interfaces.h:491
Port methods.
Definition: interfaces.h:605
#define pw_proxy_do(p, type, method,...)
Definition: proxy.h:149
void pw_proxy_add_proxy_listener(struct pw_proxy *proxy, struct spa_hook *listener, const void *events, void *data)
Add a listener for the events received from the remote resource.
Definition: proxy.c:101
void(* enum_params)(void *object, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter)
Enumerate port parameters.
Definition: interfaces.h:619
void(* param)(void *object, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
Notify a node param.
Definition: interfaces.h:510
void(* remove_id)(void *object, uint32_t id)
Remove an object ID.
Definition: interfaces.h:314
uint32_t version
Definition: interfaces.h:379
uint32_t id
id of the global
Definition: introspect.h:169
void(* error)(void *object, uint32_t id, int res, const char *error,...)
Fatal error event.
Definition: interfaces.h:303
uint32_t version
Definition: interfaces.h:567
uint32_t id
id of the global
Definition: introspect.h:143
The client information.
Definition: introspect.h:125
void(* info)(void *object, struct pw_factory_info *info)
Notify factory info.
Definition: interfaces.h:646
Port events.
Definition: interfaces.h:565
void(* info)(void *object, struct pw_client_info *info)
Notify client info.
Definition: interfaces.h:675
uint32_t version
Definition: interfaces.h:493
void(* done)(void *object, uint32_t seq)
Emit a done event.
Definition: interfaces.h:290
void(* global_remove)(void *object, uint32_t id)
Notify of a global object removal.
Definition: interfaces.h:440
void(* param)(void *object, uint32_t id, uint32_t index, uint32_t next, const struct spa_pod *param)
Notify a port param.
Definition: interfaces.h:584
Core events
Definition: interfaces.h:267
uint32_t version
Definition: interfaces.h:640
The factory information.
Definition: introspect.h:186
void(* create_object)(void *object, const char *factory_name, uint32_t type, uint32_t version, const struct spa_dict *props, uint32_t new_id)
Create a new object on the PipeWire server from a factory.
Definition: interfaces.h:183
The module information.
Definition: introspect.h:103
Client events.
Definition: interfaces.h:667
void(* enum_params)(void *object, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter)
Enumerate node parameters.
Definition: interfaces.h:545
uint32_t version
Definition: interfaces.h:116
struct pw_proxy * pw_proxy_new(struct pw_proxy *factory, uint32_t type, size_t user_data_size)
Create a proxy object with a given id and type.
Definition: proxy.c:46
uint32_t version
Definition: interfaces.h:269
Node methods.
Definition: interfaces.h:531
Registry methods.
Definition: interfaces.h:377
void(* info)(void *object, struct pw_core_info *info)
Notify new core info.
Definition: interfaces.h:320
uint32_t version
Definition: interfaces.h:607
The node information.
Definition: introspect.h:142
void(* update_types)(void *object, uint32_t first_id, const char **types, uint32_t n_types)
Update the type map.
Definition: interfaces.h:131
void(* info)(void *object, struct pw_node_info *info)
Notify node info.
Definition: interfaces.h:499
Core methods.
Definition: interfaces.h:114
Registry events.
Definition: interfaces.h:412
void(* sync)(void *object, uint32_t seq)
Do server roundtrip.
Definition: interfaces.h:144