PipeWire  0.2.7
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;
124  void (*hello) (void *object);
134  void (*update_types) (void *object,
135  uint32_t first_id,
136  const char **types,
137  uint32_t n_types);
147  void (*sync) (void *object, uint32_t seq);
156  void (*get_registry) (void *object, uint32_t version, uint32_t new_id);
161  void (*client_update) (void *object, const struct spa_dict *props);
174  void (*permissions) (void *object, const struct spa_dict *props);
186  void (*create_object) (void *object,
187  const char *factory_name,
188  uint32_t type,
189  uint32_t version,
190  const struct spa_dict *props,
191  uint32_t new_id);
192 
198  void (*destroy) (void *object, uint32_t id);
199 };
200 
201 static inline void
202 pw_core_proxy_hello(struct pw_core_proxy *core)
203 {
204  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, hello);
205 }
206 
207 static inline void
208 pw_core_proxy_update_types(struct pw_core_proxy *core, uint32_t first_id, const char **types, uint32_t n_types)
209 {
210  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, update_types, first_id, types, n_types);
211 }
212 
213 static inline void
214 pw_core_proxy_sync(struct pw_core_proxy *core, uint32_t seq)
215 {
216  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, sync, seq);
217 }
218 
219 static inline struct pw_registry_proxy *
220 pw_core_proxy_get_registry(struct pw_core_proxy *core, uint32_t type, uint32_t version, size_t user_data_size)
221 {
222  struct pw_proxy *p = pw_proxy_new((struct pw_proxy*)core, type, user_data_size);
223  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, get_registry, version, pw_proxy_get_id(p));
224  return (struct pw_registry_proxy *) p;
225 }
226 
227 static inline void
228 pw_core_proxy_client_update(struct pw_core_proxy *core, const struct spa_dict *props)
229 {
230  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, client_update, props);
231 }
232 
233 static inline void
234 pw_core_proxy_permissions(struct pw_core_proxy *core, const struct spa_dict *props)
235 {
236  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, permissions, props);
237 }
238 
239 static inline void *
240 pw_core_proxy_create_object(struct pw_core_proxy *core,
241  const char *factory_name,
242  uint32_t type,
243  uint32_t version,
244  const struct spa_dict *props,
245  size_t user_data_size)
246 {
247  struct pw_proxy *p = pw_proxy_new((struct pw_proxy*)core, type, user_data_size);
248  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, create_object, factory_name,
249  type, version, props, pw_proxy_get_id(p));
250  return p;
251 }
252 
253 static inline void
254 pw_core_proxy_destroy(struct pw_core_proxy *core, uint32_t id)
255 {
256  pw_proxy_do((struct pw_proxy*)core, struct pw_core_proxy_methods, destroy, id);
257 }
258 
259 #define PW_CORE_PROXY_EVENT_UPDATE_TYPES 0
260 #define PW_CORE_PROXY_EVENT_DONE 1
261 #define PW_CORE_PROXY_EVENT_ERROR 2
262 #define PW_CORE_PROXY_EVENT_REMOVE_ID 3
263 #define PW_CORE_PROXY_EVENT_INFO 4
264 #define PW_CORE_PROXY_EVENT_NUM 5
265 
271 #define PW_VERSION_CORE_PROXY_EVENTS 0
272  uint32_t version;
282  void (*update_types) (void *object,
283  uint32_t first_id,
284  const char **types,
285  uint32_t n_types);
293  void (*done) (void *object, uint32_t seq);
306  void (*error) (void *object, uint32_t id, int res, const char *error, ...);
317  void (*remove_id) (void *object, uint32_t id);
323  void (*info) (void *object, struct pw_core_info *info);
324 };
325 
326 static inline void
327 pw_core_proxy_add_listener(struct pw_core_proxy *core,
328  struct spa_hook *listener,
329  const struct pw_core_proxy_events *events,
330  void *data)
331 {
332  pw_proxy_add_proxy_listener((struct pw_proxy*)core, listener, events, data);
333 }
334 
335 
336 #define pw_core_resource_update_types(r,...) pw_resource_notify(r,struct pw_core_proxy_events,update_types,__VA_ARGS__)
337 #define pw_core_resource_done(r,...) pw_resource_notify(r,struct pw_core_proxy_events,done,__VA_ARGS__)
338 #define pw_core_resource_error(r,...) pw_resource_notify(r,struct pw_core_proxy_events,error,__VA_ARGS__)
339 #define pw_core_resource_remove_id(r,...) pw_resource_notify(r,struct pw_core_proxy_events,remove_id,__VA_ARGS__)
340 #define pw_core_resource_info(r,...) pw_resource_notify(r,struct pw_core_proxy_events,info,__VA_ARGS__)
341 
342 
343 #define PW_VERSION_REGISTRY 0
344 
376 #define PW_REGISTRY_PROXY_METHOD_BIND 0
377 #define PW_REGISTRY_PROXY_METHOD_NUM 1
378 
381 #define PW_VERSION_REGISTRY_PROXY_METHODS 0
382  uint32_t version;
395  void (*bind) (void *object, uint32_t id, uint32_t type, uint32_t version, uint32_t new_id);
396 };
397 
399 static inline void *
400 pw_registry_proxy_bind(struct pw_registry_proxy *registry,
401  uint32_t id, uint32_t type, uint32_t version,
402  size_t user_data_size)
403 {
404  struct pw_proxy *reg = (struct pw_proxy*)registry;
405  struct pw_proxy *p = pw_proxy_new(reg, type, user_data_size);
406  pw_proxy_do(reg, struct pw_registry_proxy_methods, bind, id, type, version, pw_proxy_get_id(p));
407  return p;
408 }
409 
410 #define PW_REGISTRY_PROXY_EVENT_GLOBAL 0
411 #define PW_REGISTRY_PROXY_EVENT_GLOBAL_REMOVE 1
412 #define PW_REGISTRY_PROXY_EVENT_NUM 2
413 
416 #define PW_VERSION_REGISTRY_PROXY_EVENTS 0
417  uint32_t version;
431  void (*global) (void *object, uint32_t id, uint32_t parent_id,
432  uint32_t permissions, uint32_t type, uint32_t version,
433  const struct spa_dict *props);
443  void (*global_remove) (void *object, uint32_t id);
444 };
445 
446 static inline void
447 pw_registry_proxy_add_listener(struct pw_registry_proxy *registry,
448  struct spa_hook *listener,
449  const struct pw_registry_proxy_events *events,
450  void *data)
451 {
452  pw_proxy_add_proxy_listener((struct pw_proxy*)registry, listener, events, data);
453 }
454 
455 #define pw_registry_resource_global(r,...) pw_resource_notify(r,struct pw_registry_proxy_events,global,__VA_ARGS__)
456 #define pw_registry_resource_global_remove(r,...) pw_resource_notify(r,struct pw_registry_proxy_events,global_remove,__VA_ARGS__)
457 
458 
459 #define PW_VERSION_MODULE 0
460 
461 #define PW_MODULE_PROXY_EVENT_INFO 0
462 #define PW_MODULE_PROXY_EVENT_NUM 1
463 
466 #define PW_VERSION_MODULE_PROXY_EVENTS 0
467  uint32_t version;
473  void (*info) (void *object, struct pw_module_info *info);
474 };
475 
476 static inline void
477 pw_module_proxy_add_listener(struct pw_module_proxy *module,
478  struct spa_hook *listener,
479  const struct pw_module_proxy_events *events,
480  void *data)
481 {
482  pw_proxy_add_proxy_listener((struct pw_proxy*)module, listener, events, data);
483 }
484 
485 #define pw_module_resource_info(r,...) pw_resource_notify(r,struct pw_module_proxy_events,info,__VA_ARGS__)
486 
487 #define PW_VERSION_NODE 0
488 
489 #define PW_NODE_PROXY_EVENT_INFO 0
490 #define PW_NODE_PROXY_EVENT_PARAM 1
491 #define PW_NODE_PROXY_EVENT_NUM 2
492 
495 #define PW_VERSION_NODE_PROXY_EVENTS 0
496  uint32_t version;
502  void (*info) (void *object, struct pw_node_info *info);
513  void (*param) (void *object,
514  uint32_t id, uint32_t index, uint32_t next,
515  const struct spa_pod *param);
516 };
517 
518 static inline void
519 pw_node_proxy_add_listener(struct pw_node_proxy *node,
520  struct spa_hook *listener,
521  const struct pw_node_proxy_events *events,
522  void *data)
523 {
524  pw_proxy_add_proxy_listener((struct pw_proxy*)node, listener, events, data);
525 }
526 
527 #define pw_node_resource_info(r,...) pw_resource_notify(r,struct pw_node_proxy_events,info,__VA_ARGS__)
528 #define pw_node_resource_param(r,...) pw_resource_notify(r,struct pw_node_proxy_events,param,__VA_ARGS__)
529 
530 #define PW_NODE_PROXY_METHOD_ENUM_PARAMS 0
531 #define PW_NODE_PROXY_METHOD_NUM 1
532 
535 #define PW_VERSION_NODE_PROXY_METHODS 0
536  uint32_t version;
548  void (*enum_params) (void *object, uint32_t id, uint32_t start, uint32_t num,
549  const struct spa_pod *filter);
550 };
551 
553 static inline void
554 pw_node_proxy_enum_params(struct pw_node_proxy *node, uint32_t id, uint32_t index,
555  uint32_t num, const struct spa_pod *filter)
556 {
557  pw_proxy_do((struct pw_proxy*)node, struct pw_node_proxy_methods, enum_params,
558  id, index, num, filter);
559 }
560 
561 #define PW_VERSION_PORT 0
562 
563 #define PW_PORT_PROXY_EVENT_INFO 0
564 #define PW_PORT_PROXY_EVENT_PARAM 1
565 #define PW_PORT_PROXY_EVENT_NUM 2
566 
569 #define PW_VERSION_PORT_PROXY_EVENTS 0
570  uint32_t version;
576  void (*info) (void *object, struct pw_port_info *info);
587  void (*param) (void *object,
588  uint32_t id, uint32_t index, uint32_t next,
589  const struct spa_pod *param);
590 };
591 
592 static inline void
593 pw_port_proxy_add_listener(struct pw_port_proxy *port,
594  struct spa_hook *listener,
595  const struct pw_port_proxy_events *events,
596  void *data)
597 {
598  pw_proxy_add_proxy_listener((struct pw_proxy*)port, listener, events, data);
599 }
600 
601 #define pw_port_resource_info(r,...) pw_resource_notify(r,struct pw_port_proxy_events,info,__VA_ARGS__)
602 #define pw_port_resource_param(r,...) pw_resource_notify(r,struct pw_port_proxy_events,param,__VA_ARGS__)
603 
604 #define PW_PORT_PROXY_METHOD_ENUM_PARAMS 0
605 #define PW_PORT_PROXY_METHOD_NUM 1
606 
609 #define PW_VERSION_PORT_PROXY_METHODS 0
610  uint32_t version;
622  void (*enum_params) (void *object, uint32_t id, uint32_t start, uint32_t num,
623  const struct spa_pod *filter);
624 };
625 
627 static inline void
628 pw_port_proxy_enum_params(struct pw_port_proxy *port, uint32_t id, uint32_t index,
629  uint32_t num, const struct spa_pod *filter)
630 {
631  pw_proxy_do((struct pw_proxy*)port, struct pw_port_proxy_methods, enum_params,
632  id, index, num, filter);
633 }
634 
635 #define PW_VERSION_FACTORY 0
636 
637 #define PW_FACTORY_PROXY_EVENT_INFO 0
638 #define PW_FACTORY_PROXY_EVENT_NUM 1
639 
642 #define PW_VERSION_FACTORY_PROXY_EVENTS 0
643  uint32_t version;
649  void (*info) (void *object, struct pw_factory_info *info);
650 };
651 
653 static inline void
654 pw_factory_proxy_add_listener(struct pw_factory_proxy *factory,
655  struct spa_hook *listener,
656  const struct pw_factory_proxy_events *events,
657  void *data)
658 {
659  pw_proxy_add_proxy_listener((struct pw_proxy*)factory, listener, events, data);
660 }
661 
662 #define pw_factory_resource_info(r,...) pw_resource_notify(r,struct pw_factory_proxy_events,info,__VA_ARGS__)
663 
664 #define PW_VERSION_CLIENT 0
665 
666 #define PW_CLIENT_PROXY_EVENT_INFO 0
667 #define PW_CLIENT_PROXY_EVENT_NUM 1
668 
671 #define PW_VERSION_CLIENT_PROXY_EVENTS 0
672  uint32_t version;
678  void (*info) (void *object, struct pw_client_info *info);
679 };
680 
682 static inline void
683 pw_client_proxy_add_listener(struct pw_client_proxy *client,
684  struct spa_hook *listener,
685  const struct pw_client_proxy_events *events,
686  void *data)
687 {
688  pw_proxy_add_proxy_listener((struct pw_proxy*)client, listener, events, data);
689 }
690 
691 #define pw_client_resource_info(r,...) pw_resource_notify(r,struct pw_client_proxy_events,info,__VA_ARGS__)
692 
693 
694 #define PW_VERSION_LINK 0
695 
696 #define PW_LINK_PROXY_EVENT_INFO 0
697 #define PW_LINK_PROXY_EVENT_NUM 1
698 
701 #define PW_VERSION_LINK_PROXY_EVENTS 0
702  uint32_t version;
708  void (*info) (void *object, struct pw_link_info *info);
709 };
710 
712 static inline void
713 pw_link_proxy_add_listener(struct pw_link_proxy *link,
714  struct spa_hook *listener,
715  const struct pw_link_proxy_events *events,
716  void *data)
717 {
718  pw_proxy_add_proxy_listener((struct pw_proxy*)link, listener, events, data);
719 }
720 
721 #define pw_link_resource_info(r,...) pw_resource_notify(r,struct pw_link_proxy_events,info,__VA_ARGS__)
722 
723 #ifdef __cplusplus
724 } /* extern "C" */
725 #endif
726 
727 #endif /* __PIPEWIRE_INTERFACES_H__ */
uint32_t version
Definition: interfaces.h:467
uint32_t version
Definition: interfaces.h:672
struct pw_proxy * pw_proxy_new(struct pw_proxy *factory, uint32_t type, size_t user_data_size)
Make a new proxy object.
void(* client_update)(void *object, const struct spa_dict *props)
Update the client properties.
Definition: interfaces.h:161
Module events.
Definition: interfaces.h:465
void(* destroy)(void *object, uint32_t id)
Destroy an object id.
Definition: interfaces.h:198
void(* info)(void *object, struct pw_port_info *info)
Notify port info.
Definition: interfaces.h:576
uint32_t version
Definition: interfaces.h:536
void(* get_registry)(void *object, uint32_t version, uint32_t new_id)
Get the registry object.
Definition: interfaces.h:156
void(* info)(void *object, struct pw_module_info *info)
Notify module info.
Definition: interfaces.h:473
Definition: introspect.h:168
The core information.
Definition: introspect.h:76
void(* hello)(void *object)
Start a conversation with the server.
Definition: interfaces.h:124
void(* permissions)(void *object, const struct spa_dict *props)
Manage the permissions of the global objects.
Definition: interfaces.h:174
uint32_t version
Definition: interfaces.h:417
Factory events.
Definition: interfaces.h:641
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:86
Node events.
Definition: interfaces.h:494
Port methods.
Definition: interfaces.h:608
#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:107
uint32_t version
Definition: interfaces.h:382
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:306
uint32_t version
Definition: interfaces.h:570
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:649
Port events.
Definition: interfaces.h:568
void(* info)(void *object, struct pw_client_info *info)
Notify client info.
Definition: interfaces.h:678
uint32_t version
Definition: interfaces.h:496
Core events.
Definition: interfaces.h:270
uint32_t version
Definition: interfaces.h:643
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:186
The module information.
Definition: introspect.h:103
Client events.
Definition: interfaces.h:670
Definition: pipewire.c:54
uint32_t version
Definition: interfaces.h:116
uint32_t version
Definition: interfaces.h:272
Node methods.
Definition: interfaces.h:534
Registry methods.
Definition: interfaces.h:380
void(* info)(void *object, struct pw_core_info *info)
Notify new core info.
Definition: interfaces.h:323
uint32_t version
Definition: interfaces.h:610
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:134
void(* info)(void *object, struct pw_node_info *info)
Notify node info.
Definition: interfaces.h:502
Core methods.
Definition: interfaces.h:114
Registry events.
Definition: interfaces.h:415
void(* sync)(void *object, uint32_t seq)
Do server roundtrip.
Definition: interfaces.h:147