mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	 125051a700
			
		
	
	
		125051a700
		
	
	
	
	
		
			
			Move \pages having to do with the API usage to the API section. Better group names for some groups.
		
			
				
	
	
		
			89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| /** \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
 | |
| 
 | |
| */
 |