summaryrefslogtreecommitdiffstats
path: root/doc/api.dox
blob: 880127e90b0e1836b6c9a4c7bc124916ec7a829d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/** \page page_api PipeWire API

The PipeWire API consists of several parts:

- The \ref pw_stream for a convenient way to send and receive data streams from/to PipeWire.

- The \ref pw_filter for a convenient way to implement processing filters.

- The \ref api_pw_core to access a PipeWire instance. This API is used
by all clients that need to communicate with the \ref page_daemon and provides
the necessary structs to interface with the daemon.

- The \ref api_pw_impl is primarily used by the \ref page_daemon itself but also by the
\ref page_session_manager and modules/extensions that need to build objects in
the graph.

- The \ref api_pw_util containing various utility functions and structures.

- The \ref api_pw_ext for interfacing with certain extension modules.

The APIs work through proxy objects, so that calling a method on an object
invokes that same method on the remote side. Marshalling and de-marshalling is
handled transparently by the \ref page_module_protocol_native.
The below graph illustrates this approach:

\dot
digraph API {
  compound=true;
  node [shape="box"];
  rankdir="RL";

  subgraph cluster_daemon {
       rankdir="TB";
       label="PipeWire daemon";
       style="dashed";

       impl_core [label="Core Impl. Object"];
       impl_device [label="Device Impl. Object"];
       impl_node [label="Node Impl. Object"];
  }

  subgraph cluster_client {
       rankdir="TB";
       label="PipeWire client";
       style="dashed";

       obj_core [label="Core Object"];
       obj_device [label="Device Object"];
       obj_node [label="Node Object"];
  }

  obj_core -> impl_core;
  obj_device -> impl_device;
  obj_node -> impl_node;

}
\enddot

It is common for clients to use both the \ref api_pw_core and the \ref api_pw_impl
and both APIs are provided by the same library.

- \subpage page_client_impl
- \subpage page_proxy
- \subpage page_streams
- \subpage page_thread_loop


\addtogroup api_pw_core Core API

The Core API to access a PipeWire instance. This API is used by all
clients to communicate with the \ref page_daemon.

If you are familiar with Wayland implementation, the Core API is
roughly equivalent to libwayland-client.

See: \ref page_api


\addtogroup api_pw_impl Implementation API

The implementation API provides the tools to build new objects and
modules.

If you are familiar with Wayland implementation, the Implementation API is
roughly equivalent to libwayland-server.

See: \ref page_api

*/