Name Description Size
array.h \defgroup pw_array Array \brief An array object The array is a dynamically resizable data structure that can hold items of the same size. 5015
buffers.h \defgroup pw_buffers Buffers Buffer handling 2315
client.h \defgroup pw_client Client Client interface 5717
conf.h \defgroup pw_conf Configuration Loading/saving properties from/to configuration files. 1622
context.h \defgroup pw_context Context \brief The PipeWire context object manages all locally available resources. It is used by both clients and servers. The context is used to: - Load modules and extend the functionality. This includes extending the protocol with new object types or creating any of the available objects. - Create implementations of various objects like nodes, devices, factories, modules, etc.. This will usually also create pw_global objects that can then be shared with clients. - Connect to another PipeWire instance (the main daemon, for example) and interact with it (See \ref page_core_api). - Export a local implementation of an object to another instance. 7324
control.h \defgroup pw_control Control \brief A control can be used to control a port property. 2357
core.h \defgroup pw_core Core \brief The core global object. This is a special singleton object. It is used for internal PipeWire protocol features. Connecting to a PipeWire instance returns one core object, the caller should then register event listeners using \ref pw_core_add_listener. Updates to the core object are then provided through the \ref pw_core_events interface. See \ref page_tutorial2 for an example. 19661
data-loop.h \defgroup pw_data_loop Data Loop \brief PipeWire rt-loop object This loop starts a new real-time thread that is designed to run the processing graph. 3611
device.h \defgroup pw_device Device Device interface 5501
factory.h \defgroup pw_factory Factory Factory interface 3521
filter.h \defgroup pw_filter Filter \brief PipeWire filter object class The filter object provides a convenient way to implement processing filters. See also \ref api_pw_core 9467
global.h \defgroup pw_global Global \brief A global object visible to remote clients A global object is visible to remote clients and represents a resource that can be used or inspected. Global objects represent resources that are available on the PipeWire context and are accessible to remote clients. Globals come and go when devices or other resources become available for clients. Remote clients receives a list of globals when it binds to the registry object. See \ref pw_registry. A client can bind to a global to send methods or receive events from the global. See \ref page_proxy 5667
i18n.h \defgroup pw_gettext Internationalization Gettext interface 1717
impl-client.h \page page_client_impl Client Implementation \section sec_page_client_impl_overview Overview The \ref pw_impl_client object is created by a protocol implementation when a new client connects. The client is used to keep track of all resources belonging to one connection with the PipeWire server. \section sec_page_client_impl_credentials Credentials The client object will have its credentials filled in by the protocol. This information is used to check if a resource or action is available for this client. \section sec_page_client_impl_types Types The client and server maintain a mapping between the client and server types. All type ids that are in messages exchanged between the client and server will automatically be remapped. \section sec_page_client_impl_resources Resources When a client binds to context global object, a resource is made for this binding and a unique id is assigned to the resources. The client and server will use this id as the destination when exchanging messages. See also \ref pw_resource 6596
impl-core.h \defgroup pw_impl_core Core Impl \brief PipeWire core interface. The core is used to make objects on demand. 3151
impl-device.h \defgroup pw_impl_device Device Impl The device is an object that manages nodes. It typically corresponds to a physical hardware device but it does not have to be. The purpose of the device is to provide an interface to dynamically create/remove/configure the nodes it manages. 3836
impl-factory.h \defgroup pw_impl_factory Factory Impl The factory is used to make objects on demand. 4158
impl-link.h \defgroup pw_impl_link Link Impl \brief PipeWire link object. 4049
impl-metadata.h \defgroup pw_impl_metadata Metadata Impl The metadata is used to store key/type/value pairs per object id. 3618
impl-module.h \defgroup pw_impl_module Module Impl A dynamically loadable module 3734
impl-node.h \defgroup pw_impl_node Node Impl The node object processes data. The node has a list of input and output ports (\ref pw_impl_port) on which it will receive and send out buffers respectively. 6812
impl-port.h \defgroup pw_impl_port Port Impl \brief A port can be used to link two nodes. 4492
impl.h \addtogroup api_pw_impl 1924
keys.h \defgroup pw_keys Key Names A collection of keys that are used to add extra information on objects. Keys that start with "pipewire." are in general set-once and then read-only. They are usually used for security sensitive information that needs to be fixed. Properties from other objects can also appear. This usually suggests some sort of parent/child or owner/owned relationship. \addtogroup pw_keys \{ 18998
link.h \defgroup pw_link Link A link is the connection between 2 nodes (\ref pw_node). Nodes are linked together on ports. The link is responsible for negotiating the format and buffers for the nodes. 4469
log.h \defgroup pw_log Logging \brief Logging functions of PipeWire Logging is performed to stdout and stderr. Trace logging is performed in a lockfree ringbuffer and written out from the main thread as to not block the realtime threads. 5688
loop.h \defgroup pw_loop Loop PipeWire loop object provides an implementation of the spa loop interfaces. It can be used to implement various event loops. 3439
main-loop.h \defgroup pw_main_loop Main Loop A main loop object 2409
map.h \defgroup pw_map Map \brief A map that holds pointers to objects indexed by id The map is a sparse version of the \ref pw_array "pw_array" that manages the indices of elements for the caller. Adding items with pw_map_insert_new() returns the assigned index for that item; if items are removed the map re-uses indices to keep the array at the minimum required size. \code{.c} struct pw_map map = PW_MAP_INIT(4); idx1 = pw_map_insert_new(&map, ptr1); idx2 = pw_map_insert_new(&map, ptr2); // the map is now [ptr1, ptr2], size 2 pw_map_remove(&map, idx1); // the map is now [<unused>, ptr2], size 2 pw_map_insert_new(&map, ptr3); // the map is now [ptr3, ptr2], size 2 \endcode 8284
mem.h \defgroup pw_memblock Memory Blocks Memory allocation and pools. 6967
module.h \defgroup pw_module Module Module interface 3580
node.h \defgroup pw_node Node Node interface 6678
permission.h \defgroup pw_permission Permission Permissions are kept for a client and describe what the client is allowed to do with an object. See \ref page_core_api 2846
pipewire.h \defgroup pw_pipewire Initialization Initializing PipeWire and loading SPA modules. 3147
port.h \defgroup pw_port Port Port interface 5180
private.h for pthread_t 49677
properties.h \defgroup pw_properties Properties Properties are used to pass around arbitrary key/value pairs. Both keys and values are strings which keeps things simple. Encoding of arbitrary values should be done by using a string serialization such as base64 for binary blobs. 5998
protocol.h \defgroup pw_protocol Protocol \brief Manages protocols and their implementation 5499
proxy.h \page page_proxy Proxy \section sec_page_proxy_overview Overview The proxy object is a client side representation of a resource that lives on a remote PipeWire instance. It is used to communicate with the remote object. \section sec_page_proxy_core Core proxy A proxy for a remote core object can be obtained by making a remote connection with \ref pw_context_connect. See \ref pw_proxy Some methods on proxy object allow creation of more proxy objects or create a binding between a local proxy and global resource. \section sec_page_proxy_create Create A client first creates a new proxy object with pw_proxy_new(). A type must be provided for this object. The protocol of the context will usually install an interface to translate method calls and events to the wire format. The creator of the proxy will usually also install an event implementation of the particular object type. \section sec_page_proxy_bind Bind To actually use the proxy object, one needs to create a server side resource for it. This can be done by, for example, binding to a global object or by calling a method that creates and binds to a new remote object. In all cases, the local id is passed to the server and is used to create a resource with the same id. \section sec_page_proxy_methods Methods To call a method on the proxy use the interface methods. Calling any interface method will result in a request to the server to perform the requested action on the corresponding resource. \section sec_page_proxy_events Events Events send from the server to the proxy will be demarshalled by the protocol and will then result in a call to the installed implementation of the proxy. \section sec_page_proxy_destroy Destroy Use pw_proxy_destroy() to destroy the client side object. This is usually done automatically when the server removes the resource associated to the proxy. 7553
resource.h \defgroup pw_resource Resource \brief Client owned objects Resources represent objects owned by a \ref pw_impl_client. They are the result of binding to a global resource or by calling API that creates client owned objects. The client usually has a proxy object associated with the resource that it can use to communicate with the resource. See \ref page_proxy. Resources are destroyed when the client or the bound object is destroyed. 6071
stream.h 21303
thread-loop.h \page page_thread_loop Thread Loop \section sec_thread_loop_overview Overview The threaded loop implementation is a special wrapper around the regular \ref pw_loop implementation. The added feature in the threaded loop is that it spawns a new thread that runs the wrapped loop. This allows a synchronous application to use the asynchronous API without risking to stall the PipeWire library. \section sec_thread_loop_create Creation A \ref pw_thread_loop object is created using pw_thread_loop_new(). The \ref pw_loop to wrap must be given as an argument along with the name for the thread that will be spawned. After allocating the object, the thread must be started with pw_thread_loop_start() \section sec_thread_loop_destruction Destruction When the PipeWire connection has been terminated, the thread must be stopped and the resources freed. Stopping the thread is done using pw_thread_loop_stop(), which must be called without the lock (see below) held. When that function returns, the thread is stopped and the \ref pw_thread_loop object can be freed using pw_thread_loop_destroy(). \section sec_thread_loop_locking Locking Since the PipeWire API doesn't allow concurrent accesses to objects, a locking scheme must be used to guarantee safe usage. The threaded loop API provides such a scheme through the functions pw_thread_loop_lock() and pw_thread_loop_unlock(). The lock is recursive, so it's safe to use it multiple times from the same thread. Just make sure you call pw_thread_loop_unlock() the same number of times you called pw_thread_loop_lock(). The lock needs to be held whenever you call any PipeWire function that uses an object associated with this loop. Make sure you do not hold on to the lock more than necessary though, as the threaded loop stops while the lock is held. \section sec_thread_loop_events Events and Callbacks All events and callbacks are called with the thread lock held. 6367
thread.h \defgroup pw_thread Thread \brief functions to manipulate threads 2181
type.h \defgroup pw_type Type info Type information 1833
utils.h \defgroup pw_utils Utilities Various utility functions 2745
version.h WARNING: Make sure to edit the real source file version.h.in! 2525
work-queue.h \defgroup pw_work_queue Work Queue Queued processing of work items. 2010