1 /*
2 [title]
3 \ref page_tutorial3
4 [title]
5 */
6 /* [code] */
7 #include <pipewire/pipewire.h>
8
9 /* [roundtrip] */
roundtrip(struct pw_core * core,struct pw_main_loop * loop)10 static int roundtrip(struct pw_core *core, struct pw_main_loop *loop)
11 {
12 struct spa_hook core_listener;
13 int pending, done = 0;
14 void core_event_done(void *object, uint32_t id, int seq) {
15 if (id == PW_ID_CORE && seq == pending) {
16 done = 1;
17 pw_main_loop_quit(loop);
18 }
19 }
20 const struct pw_core_events core_events = {
21 PW_VERSION_CORE_EVENTS,
22 .done = core_event_done,
23 };
24
25 spa_zero(core_listener);
26 pw_core_add_listener(core, &core_listener,
27 &core_events, NULL);
28
29 pending = pw_core_sync(core, PW_ID_CORE, 0);
30
31 while (!done) {
32 pw_main_loop_run(loop);
33 }
34 spa_hook_remove(&core_listener);
35 return 0;
36 }
37 /* [roundtrip] */
38
registry_event_global(void * data,uint32_t id,uint32_t permissions,const char * type,uint32_t version,const struct spa_dict * props)39 static void registry_event_global(void *data, uint32_t id,
40 uint32_t permissions, const char *type, uint32_t version,
41 const struct spa_dict *props)
42 {
43 printf("object: id:%u type:%s/%d\n", id, type, version);
44 }
45
46 static const struct pw_registry_events registry_events = {
47 PW_VERSION_REGISTRY_EVENTS,
48 .global = registry_event_global,
49 };
50
main(int argc,char * argv[])51 int main(int argc, char *argv[])
52 {
53 struct pw_main_loop *loop;
54 struct pw_context *context;
55 struct pw_core *core;
56 struct pw_registry *registry;
57 struct spa_hook registry_listener;
58
59 pw_init(&argc, &argv);
60
61 loop = pw_main_loop_new(NULL /* properties */);
62 context = pw_context_new(pw_main_loop_get_loop(loop),
63 NULL /* properties */,
64 0 /* user_data size */);
65
66 core = pw_context_connect(context,
67 NULL /* properties */,
68 0 /* user_data size */);
69
70 registry = pw_core_get_registry(core, PW_VERSION_REGISTRY,
71 0 /* user_data size */);
72
73 spa_zero(registry_listener);
74 pw_registry_add_listener(registry, ®istry_listener,
75 ®istry_events, NULL);
76
77 roundtrip(core, loop);
78
79 pw_proxy_destroy((struct pw_proxy*)registry);
80 pw_core_disconnect(core);
81 pw_context_destroy(context);
82 pw_main_loop_destroy(loop);
83
84 return 0;
85 }
86 /* [code] */
87