From 7a46c07230b8d8108c0e8e80df4522d0ac116538 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:28:17 +0200 Subject: Adding upstream version 0.3.65. Signed-off-by: Daniel Baumann --- doc/api.dox | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 doc/api.dox (limited to 'doc/api.dox') diff --git a/doc/api.dox b/doc/api.dox new file mode 100644 index 0000000..880127e --- /dev/null +++ b/doc/api.dox @@ -0,0 +1,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 + +*/ -- cgit v1.2.3