PipeWire  0.3.80
link.h
Go to the documentation of this file.
1 /* PipeWire */
2 /* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
3 /* SPDX-License-Identifier: MIT */
4 
5 #ifndef PIPEWIRE_LINK_H
6 #define PIPEWIRE_LINK_H
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include <spa/utils/defs.h>
13 #include <spa/utils/hook.h>
14 
15 #include <pipewire/proxy.h>
16 
32 #define PW_TYPE_INTERFACE_Link PW_TYPE_INFO_INTERFACE_BASE "Link"
33 
34 #define PW_LINK_PERM_MASK PW_PERM_R | PW_PERM_X
35 
36 #define PW_VERSION_LINK 3
37 struct pw_link;
38 
41  PW_LINK_STATE_ERROR = -2,
48 };
49 
51 const char * pw_link_state_as_string(enum pw_link_state state);
53 struct pw_link_info {
54  uint32_t id;
55  uint32_t output_node_id;
56  uint32_t output_port_id;
57  uint32_t input_node_id;
58  uint32_t input_port_id;
59 #define PW_LINK_CHANGE_MASK_STATE (1 << 0)
60 #define PW_LINK_CHANGE_MASK_FORMAT (1 << 1)
61 #define PW_LINK_CHANGE_MASK_PROPS (1 << 2)
62 #define PW_LINK_CHANGE_MASK_ALL ((1 << 3)-1)
63  uint64_t change_mask;
65  const char *error;
66  struct spa_pod *format;
67  struct spa_dict *props;
68 };
69 
70 struct pw_link_info *
72  const struct pw_link_info *update);
73 
74 struct pw_link_info *
76  const struct pw_link_info *update, bool reset);
77 
78 void
79 pw_link_info_free(struct pw_link_info *info);
80 
81 
82 #define PW_LINK_EVENT_INFO 0
83 #define PW_LINK_EVENT_NUM 1
84 
86 struct pw_link_events {
87 #define PW_VERSION_LINK_EVENTS 0
88  uint32_t version;
94  void (*info) (void *data, const struct pw_link_info *info);
95 };
96 
97 #define PW_LINK_METHOD_ADD_LISTENER 0
98 #define PW_LINK_METHOD_NUM 1
99 
101 struct pw_link_methods {
102 #define PW_VERSION_LINK_METHODS 0
103  uint32_t version;
104 
105  int (*add_listener) (void *object,
106  struct spa_hook *listener,
107  const struct pw_link_events *events,
108  void *data);
109 };
110 
111 #define pw_link_method(o,method,version,...) \
112 ({ \
113  int _res = -ENOTSUP; \
114  spa_interface_call_res((struct spa_interface*)o, \
115  struct pw_link_methods, _res, \
116  method, version, ##__VA_ARGS__); \
117  _res; \
118 })
119 
120 #define pw_link_add_listener(c,...) pw_link_method(c,add_listener,0,__VA_ARGS__)
121 
126 #ifdef __cplusplus
127 } /* extern "C" */
128 #endif
129 
130 #endif /* PIPEWIRE_LINK_H */
spa/utils/defs.h
spa/utils/hook.h
pipewire/proxy.h
Definition: utils/dict.h:39
A hook, contains the structure with functions and the data passed to the functions.
Definition: hook.h:350
Definition: pod/pod.h:43