doc: reorganize Doxygen groups/modules to make more sense

The Doxygen "Modules" page is not very illuminative, as different parts
of the API are mixed together and not all parts are included.

Try to address this:

Put all parts of the public API to some Doxygen group, usually one group
per header file. Use short, systematic names.

Make these groups sub-groups of a few top-level groups, roughly
corresponding to the different logical parts of the API (core, impl,
stream, filter, spa, utilities).
This commit is contained in:
Pauli Virtanen 2021-10-02 20:55:53 +03:00
parent 43a84c4a2c
commit 8159797f89
95 changed files with 588 additions and 154 deletions

View file

@ -9,6 +9,7 @@ EXTRACT_ALL = YES
EXTRACT_STATIC = YES
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = @path_prefixes@
STRIP_FROM_INC_PATH = @path_prefixes@
SHOW_INCLUDE_FILES = NO
GENERATE_TODOLIST = NO
GENERATE_TESTLIST = NO

127
doc/api-tree.dox Normal file
View file

@ -0,0 +1,127 @@
/**
\defgroup api_pw_core Core API
\brief PipeWire Core API
\{
\addtogroup pw_pipewire
\addtogroup pw_context
\addtogroup pw_client
\addtogroup pw_core
\addtogroup pw_device
\addtogroup pw_factory
\addtogroup pw_link
\addtogroup pw_loop
\addtogroup pw_module
\addtogroup pw_node
\addtogroup pw_permission
\addtogroup pw_port
\addtogroup pw_proxy
\addtogroup pw_registry
\addtogroup pw_type
\addtogroup pw_keys
\}
\defgroup api_pw_impl Implementation API
\brief PipeWire Object Implementation API
\{
\addtogroup pw_impl_client
\addtogroup pw_impl_core
\addtogroup pw_impl_device
\addtogroup pw_impl_factory
\addtogroup pw_impl_link
\addtogroup pw_impl_metadata
\addtogroup pw_impl_module
\addtogroup pw_impl_node
\addtogroup pw_impl_port
\addtogroup pw_buffers
\addtogroup pw_control
\addtogroup pw_data_loop
\addtogroup pw_global
\addtogroup pw_protocol
\addtogroup pw_resource
\addtogroup pw_thread_loop
\addtogroup pw_work_queue
\}
\defgroup api_pw_util Utilities
\brief PipeWire Utilities
\{
\addtogroup pw_array
\addtogroup pw_conf
\addtogroup pw_gettext
\addtogroup pw_log
\addtogroup pw_main_loop
\addtogroup pw_map
\addtogroup pw_memblock
\addtogroup pw_properties
\addtogroup pw_thread
\addtogroup pw_utils
\}
\defgroup api_pw_ext Extensions
\brief PipeWire Extensions
\{
\addtogroup pw_client_node
\addtogroup pw_metadata
\addtogroup pw_profiler
\addtogroup pw_protocol_native
\addtogroup pw_session_manager
\{
\addtogroup pw_session_manager_impl
\}
\}
\defgroup api_spa SPA
\brief Simple Plugin API
\{
\addtogroup spa_buffer
\addtogroup spa_control
\addtogroup spa_debug
\addtogroup spa_device
\addtogroup spa_graph
\addtogroup spa_node
\addtogroup spa_param
\addtogroup spa_pod
\defgroup spa_utils Utilities
\{
\addtogroup spa_ansi
\addtogroup spa_utils_defs
\addtogroup spa_dict
\addtogroup spa_list
\addtogroup spa_hooks
\addtogroup spa_interfaces
\addtogroup spa_json
\addtogroup spa_keys
\addtogroup spa_names
\addtogroup spa_result
\addtogroup spa_ringbuffer
\addtogroup spa_string
\addtogroup spa_types
\}
\defgroup spa_support Support
\{
\addtogroup spa_cpu
\addtogroup spa_dbus
\addtogroup spa_i18n
\addtogroup spa_log
\addtogroup spa_loop
\addtogroup spa_handle
\addtogroup spa_plugin_loader
\addtogroup spa_system
\addtogroup spa_thread
\}
\}
\defgroup pw_stream Stream API
\{
\}
\defgroup pw_filter Filter API
\{
\}
\defgroup pwtest Test Suite
\{
\}
*/

View file

@ -1,15 +1,23 @@
/** \page page_api API Documentation
/** \page page_api PipeWire API
The API consists of two parts:
The PipeWire API consists of several parts:
- The \ref page_core_api to access a PipeWire instance. This API is used
- 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 page_implementation_api and tools to build new objects and modules.
This API is primarily used by the \ref page_daemon itself but also by the
- 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.
@ -48,47 +56,32 @@ digraph API {
}
\enddot
It is common for clients to use both the Core API and the Implementation API
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.
\section page_core_api Core API
The Core API serves to access a PipeWire instance. This API is used by all
clients to communicate with the \ref page_daemon. It consists of the
following object-specific APIs:
- \ref pw_core
- \ref pw_context
- \ref pw_global
- \ref pw_client
- \ref pw_resource
- \ref pw_node
- \ref pw_port
- \ref pw_link
\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.
\section page_implementation_api Implementation API
See: \ref page_api
\addtogroup api_pw_impl Implementation API
The implementation API provides the tools to build new objects and
modules. It consists of the following object-specific APIs:
- \ref pw_impl_core
- \ref pw_impl_client
- \ref pw_impl_device
- \ref pw_impl_factory
- \ref pw_impl_link
- \ref pw_impl_metadata
- \ref pw_impl_module
- \ref pw_impl_node
- \ref pw_impl_port
- \ref pw_control
- \ref pw_global
- \ref pw_resource
- \ref pw_work_queue
modules.
If you are familiar with Wayland implementation, the Implementation API is
roughly equivalent to libwayland-server.
See: \ref page_api
*/

View file

@ -35,5 +35,4 @@ More information on how to configure and use PipeWire.
- [LAC 2020 Paper](https://lac2020.sciencesconf.org/307881/document)
- [PipeWire Under The Hood](https://venam.nixers.net/blog/unix/2021/06/23/pipewire-under-the-hood.html)
*/

View file

@ -12,10 +12,55 @@ else
doxyfile_conf.set('HAVE_DOT', 'NO')
endif
# Note: order here is how doxygen will expose the pages in the sidebar
# api-tree.dox should be first to determine ordering of Modules.
extra_docs = [
'api-tree.dox',
'index.dox',
'overview.dox',
'pipewire.dox',
'pipewire-design.dox',
'pipewire-access.dox',
'pipewire-midi.dox',
'pipewire-portal.dox',
'pipewire-daemon.dox',
'pipewire-library.dox',
'pipewire-modules.dox',
'pipewire-tools.dox',
'pipewire-session-manager.dox',
'pipewire-objects-design.dox',
'pipewire-audio.dox',
'media-session.dox',
'tutorial.dox',
'tutorial1.dox',
'tutorial2.dox',
'tutorial3.dox',
'tutorial4.dox',
'tutorial5.dox',
'tutorial6.dox',
'api.dox',
'spa-index.dox',
'spa-plugins.dox',
'spa-design.dox',
'spa-pod.dox',
'spa-buffer.dox',
'pulseaudio.dox',
'dma-buf.dox',
]
inputs = []
foreach extra : extra_docs
inputs += meson.source_root() / 'doc' / extra
endforeach
foreach h : pipewire_headers
inputs += meson.source_root() / 'src' / 'pipewire' / h
endforeach
foreach h : pipewire_ext_headers
inputs += meson.source_root() / 'src' / 'pipewire' / 'extensions' / h
endforeach
foreach h : pipewire_ext_sm_headers
inputs += meson.source_root() / 'src' / 'pipewire' / 'extensions' / h
endforeach
foreach h : pipewire_sources
inputs += meson.source_root() / 'src' / 'pipewire' / h
endforeach
@ -34,44 +79,6 @@ path_prefixes = [
meson.source_root(),
]
# Note: order here is how doxygen will expose the pages in the sidebar
extra_docs = [
'index.dox',
'overview.dox',
'pipewire.dox',
'pipewire-design.dox',
'pipewire-access.dox',
'pipewire-midi.dox',
'pipewire-portal.dox',
'pipewire-daemon.dox',
'pipewire-library.dox',
'pipewire-modules.dox',
'pipewire-tools.dox',
'pipewire-session-manager.dox',
'pipewire-objects-design.dox',
'pipewire-audio.dox',
'media-session.dox',
'api.dox',
'tutorial.dox',
'tutorial1.dox',
'tutorial2.dox',
'tutorial3.dox',
'tutorial4.dox',
'tutorial5.dox',
'tutorial6.dox',
'spa-index.dox',
'spa-plugins.dox',
'spa-design.dox',
'spa-pod.dox',
'spa-buffer.dox',
'pulseaudio.dox',
'dma-buf.dox',
]
foreach extra : extra_docs
inputs += meson.source_root() / 'doc' / extra
endforeach
cssfiles = [
meson.source_root() / 'doc' / 'doxygen-awesome.css',
meson.source_root() / 'doc' / 'custom.css'

View file

@ -2,7 +2,7 @@
> What is the array of `spa_data` in `spa_buffer`?
A buffer contains metadata and data. There can be many metadata items (headers, color info, cursor position, etc) in the buffer. The metadata items are stored in the metas array. In the same way, the buffer can contain multiple data blocks in the datas array. Each data block is, for example, a video plane or an audio channel. There are `n_datas` of those blocks.
A \ref spa_buffer "SPA Buffer" contains metadata and data. There can be many metadata items (headers, color info, cursor position, etc) in the buffer. The metadata items are stored in the metas array. In the same way, the buffer can contain multiple data blocks in the datas array. Each data block is, for example, a video plane or an audio channel. There are `n_datas` of those blocks.
> What is the `void*` data pointer in `spa_data`?
@ -62,4 +62,10 @@ The reason why is this set up like this is that the metadata memory, the data an
Taken from [here](https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/11f95fe11e07192cec19fddb4fafc708e023e49c/spa/include/spa/buffer/alloc.h).
\addtogroup spa_buffer
See: \ref page_spa_buffer
*/

View file

@ -1,6 +1,6 @@
/** \page page_spa SPA (Simple Plugin API)
SPA (Simple Plugin API) is an extensible API to implement all kinds of
\ref api_spa (Simple Plugin API) is an extensible API to implement all kinds of
plugins.
It is inspired by many other plugin APIs, mostly LV2 and
@ -70,9 +70,15 @@ Please see \ref page_spa_plugins for the details on how to use SPA plugins.
## Further details
- \ref api_spa
- \subpage page_spa_design
- \subpage page_spa_plugins
- \subpage page_spa_pod
- \subpage page_spa_buffer
\addtogroup api_spa
See: \ref page_spa, \ref page_spa_design
*/

View file

@ -1,6 +1,6 @@
/** \page page_spa_plugins SPA Plugins
Plugins are dynamically loadable objects that contain objects and interfaces that
\ref spa_handle "SPA plugins" are dynamically loadable objects that contain objects and interfaces that
can be introspected and used at runtime in any application. This document
introduces the basic concepts of SPA plugins. It first covers using the API
and then talks about implementing new Plugins.
@ -346,4 +346,10 @@ expected_seq = SPA_RESULT_ASYNC_SEQ(res);
FIXME
\addtogroup spa_handle
See: \ref page_spa_plugins
*/

View file

@ -1,6 +1,6 @@
/** \page page_spa_pod SPA POD
POD (plain old data) is a sort of data container. It is comparable to
\ref spa_pod (plain old data) is a sort of data container. It is comparable to
DBus Variant or LV2 Atom.
A POD can express nested structures of Objects (with properties), Vectors,
@ -519,4 +519,8 @@ field specifies the size following the type field.
Each POD is aligned to an 8 byte boundary.
\addtogroup spa_pod
See: \ref page_spa_pod
*/

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/buffer/meta.h>
/** \defgroup spa_buffer SPA Buffers
/** \defgroup spa_buffer Buffers
*
* Buffers describe the data and metadata that is exchanged between
* ports of a node.

View file

@ -32,7 +32,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/pod/pod.h>
/** \defgroup spa_control SPA Controls
/** \defgroup spa_control Control
*
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_debug SPA Debug
/** \defgroup spa_debug Debug
*
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_graph SPA Graph
/** \defgroup spa_graph Graph
*/
/**

View file

@ -35,7 +35,7 @@ extern "C" {
#include <spa/pod/event.h>
/**
* \defgroup spa_device SPA Device
* \defgroup spa_device Device
*
* The device interface can be used to monitor all kinds of devices
* and create objects as a result. Objects a typically other

View file

@ -31,6 +31,11 @@ extern "C" {
#include <spa/pod/event.h>
/**
* \addtogroup spa_device
* \{
*/
/* object id of SPA_TYPE_EVENT_Device */
enum spa_device_event {
SPA_DEVICE_EVENT_ObjectConfig,
@ -47,6 +52,10 @@ enum spa_event_device {
SPA_EVENT_DEVICE_Props, /* properties for an object (SPA_TYPE_OBJECT_Props) */
};
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -33,6 +33,11 @@ extern "C" {
#include <spa/monitor/event.h>
/**
* \addtogroup spa_device
* \{
*/
#define SPA_TYPE_INFO_DeviceEvent SPA_TYPE_INFO_EVENT_BASE "Device"
#define SPA_TYPE_INFO_DEVICE_EVENT_BASE SPA_TYPE_INFO_DeviceEvent ":"
@ -51,6 +56,10 @@ static const struct spa_type_info spa_type_device_event[] = {
{ 0, 0, NULL, NULL },
};
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -32,6 +32,11 @@ extern "C" {
#include <spa/pod/builder.h>
#include <spa/monitor/device.h>
/**
* \addtogroup spa_device
* \{
*/
struct spa_result_device_params_data {
struct spa_pod_builder *builder;
struct spa_result_device_params data;
@ -90,6 +95,10 @@ static inline int spa_device_enum_params_sync(struct spa_device *device,
#define spa_device_emit_event(hooks,e) spa_device_emit(hooks,event, 0, e)
#define spa_device_emit_object_info(hooks,id,i) spa_device_emit(hooks,object_info, 0, id, i)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -29,7 +29,8 @@
extern "C" {
#endif
/** \defgroup spa_node SPA Nodes
/** \defgroup spa_node Node
*
* A spa_node is a component that can consume and produce buffers.
*/

View file

@ -29,6 +29,10 @@
extern "C" {
#endif
/**
* \addtogroup spa_param
* \{
*/
#include <spa/pod/builder.h>
#include <spa/pod/parser.h>
@ -158,6 +162,10 @@ spa_process_latency_info_add(const struct spa_process_latency_info *process,
return 0;
}
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_param SPA Parameters
/** \defgroup spa_param Parameters
*/
/**

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_pod SPA POD
/** \defgroup spa_pod POD
*/
/**

View file

@ -34,12 +34,12 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/utils/hook.h>
/** \defgroup spa_support SPA Support Features
/** \defgroup spa_cpu CPU
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_cpu
* \{
*/

View file

@ -31,8 +31,12 @@ extern "C" {
#include <spa/support/loop.h>
/** \defgroup spa_dbus DBus
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_dbus
* \{
*/

View file

@ -32,8 +32,12 @@ extern "C" {
#include <spa/utils/hook.h>
#include <spa/utils/defs.h>
/** \defgroup spa_i18n I18N
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_i18n
* \{
*/

View file

@ -35,7 +35,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/utils/hook.h>
/** \defgroup spa_log SPA Logging
/** \defgroup spa_log Log
*/
/**

View file

@ -33,8 +33,12 @@ extern "C" {
#include <spa/utils/hook.h>
#include <spa/support/system.h>
/** \defgroup spa_loop Loop
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_loop
* \{
*/

View file

@ -32,8 +32,12 @@ extern "C" {
#include <spa/utils/hook.h>
#include <spa/utils/defs.h>
/** \defgroup spa_plugin_loader Plugin Loader
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_plugin_loader
* \{
*/

View file

@ -33,7 +33,7 @@ extern "C" {
#include <spa/utils/dict.h>
/**
* \defgroup spa_handle SPA Plugin Handles
* \defgroup spa_handle Plugin Handle
*/
/**

View file

@ -37,8 +37,12 @@ struct itimerspec;
#include <spa/utils/defs.h>
#include <spa/utils/hook.h>
/** \defgroup spa_system System
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_system
* \{
*/

View file

@ -36,8 +36,12 @@ extern "C" {
#include <spa/utils/hook.h>
#include <spa/utils/dict.h>
/** \defgroup spa_thread Thread
*
*/
/**
* \addtogroup spa_support
* \addtogroup spa_thread
* \{
*/

View file

@ -29,11 +29,13 @@
extern "C" {
#endif
/** \defgroup spa_utils SPA Utils
/**
* \defgroup spa_ansi ANSI codes
*
*/
/**
* \addtogroup spa_utils
* \addtogroup spa_ansi
* \{
*/

View file

@ -37,11 +37,13 @@ extern "C" {
#include <stddef.h>
#include <stdio.h>
/** \defgroup spa_utils SPA Utils
/**
* \defgroup spa_utils_defs Miscellaneous
*
*/
/**
* \addtogroup spa_utils
* \addtogroup spa_utils_defs
* \{
*/

View file

@ -34,7 +34,12 @@ extern "C" {
#include <spa/utils/defs.h>
/**
* \addtogroup spa_utils
* \defgroup spa_dict Dictionary
*
*/
/**
* \addtogroup spa_dict
* \{
*/

View file

@ -32,7 +32,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/utils/list.h>
/** \defgroup spa_interfaces SPA Interfaces
/** \defgroup spa_interfaces Interfaces
*
* \brief Generic implementation of implementation-independent interfaces
*
@ -230,7 +230,7 @@ struct spa_interface {
* \}
*/
/** \defgroup spa_hooks SPA Hooks
/** \defgroup spa_hooks Hooks
*
* A SPA Hook is a data structure to keep track of callbacks. It is similar to
* the \ref spa_interfaces and typically used where an implementation allows

View file

@ -37,7 +37,7 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup spa_json SPA JSON Parser
/** \defgroup spa_json JSON
*/
/**

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_keys SPA Key Names
/** \defgroup spa_keys Key Names
*/
/**

View file

@ -30,7 +30,12 @@ extern "C" {
#endif
/**
* \addtogroup spa_utils
* \defgroup spa_list List
*
*/
/**
* \addtogroup spa_list List
* \{
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup spa_names SPA Factory Names
/** \defgroup spa_names Factory Names
*/
/**

View file

@ -30,7 +30,12 @@ extern "C" {
#endif
/**
* \addtogroup spa_utils
* \defgroup spa_result Result handling
*
*/
/**
* \addtogroup spa_result
* \{
*/

View file

@ -30,7 +30,12 @@ extern "C" {
#endif
/**
* \addtogroup spa_utils
* \defgroup spa_ringbuffer Ringbuffer
*
*/
/**
* \addtogroup spa_ringbuffer
* \{
*/

View file

@ -36,7 +36,12 @@ extern "C" {
#include <spa/utils/defs.h>
/**
* \addtogroup spa_utils
* \defgroup spa_string String handling
*
*/
/**
* \addtogroup spa_string
* \{
*/
@ -45,7 +50,6 @@ extern "C" {
*
* If both \a a and \a b are NULL, the two are considered equal.
*
* \ingroup spa
*/
static inline bool spa_streq(const char *s1, const char *s2)
{

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup spa_types SPA Types
/** \defgroup spa_types Types
*/
/**

View file

@ -33,7 +33,7 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup pw_array Array Objects
/** \defgroup pw_array Array
*
* \brief An array object
*

View file

@ -34,6 +34,14 @@
extern "C" {
#endif
/** \defgroup pw_buffers Buffers
*/
/**
* \addtogroup pw_buffers
* \{
*/
#define PW_BUFFERS_FLAG_NONE 0
#define PW_BUFFERS_FLAG_NO_MEM (1<<0) /**< don't allocate buffer memory */
#define PW_BUFFERS_FLAG_SHARED (1<<1) /**< buffers can be shared */
@ -53,6 +61,10 @@ int pw_buffers_negotiate(struct pw_context *context, uint32_t flags,
void pw_buffers_clear(struct pw_buffers *buffers);
/**
* \}
*/
#ifdef __cplusplus
}
#endif

View file

@ -35,7 +35,7 @@ extern "C" {
#include <pipewire/proxy.h>
#include <pipewire/permission.h>
/** \defgroup pw_client PipeWire Client
/** \defgroup pw_client Client
*
*/

View file

@ -24,9 +24,22 @@
#include <pipewire/context.h>
/** \defgroup pw_conf Configuration
*
*/
/**
* \addtogroup pw_conf
* \{
*/
int pw_conf_load_conf(const char *prefix, const char *name, struct pw_properties *conf);
int pw_conf_load_state(const char *prefix, const char *name, struct pw_properties *conf);
int pw_conf_save_state(const char *prefix, const char *name, const struct pw_properties *conf);
int pw_context_parse_conf_section(struct pw_context *context,
struct pw_properties *conf, const char *section);
/**
* \}
*/

View file

@ -32,7 +32,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/utils/hook.h>
/** \defgroup pw_context PipeWire Context
/** \defgroup pw_context Context
*
* \brief The PipeWire context object manages all locally available
* resources. It is used by both clients and servers.

View file

@ -34,7 +34,7 @@ extern "C" {
#include <spa/utils/hook.h>
/** \defgroup pw_core The PipeWire Core Global Object
/** \defgroup pw_core Core
*
* \brief The core global object.
*
@ -112,7 +112,6 @@ void pw_core_info_free(struct pw_core_info *info);
/** \struct pw_core_events
* \brief Core events
* \ingroup pw_core_interface The pw_core interface
*/
struct pw_core_events {
#define PW_VERSION_CORE_EVENTS 0

View file

@ -31,7 +31,9 @@ extern "C" {
#include <spa/utils/hook.h>
/** \defgroup pw_data_loop PipeWire rt-loop object
/** \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.

View file

@ -34,6 +34,15 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_device Device
*
*/
/**
* \addtogroup pw_device
* \{
*/
#define PW_TYPE_INTERFACE_Device PW_TYPE_INFO_INTERFACE_BASE "Device"
#define PW_VERSION_DEVICE 3
@ -158,6 +167,10 @@ struct pw_device_methods {
#define pw_device_enum_params(c,...) pw_device_method(c,enum_params,0,__VA_ARGS__)
#define pw_device_set_param(c,...) pw_device_method(c,set_param,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -32,6 +32,14 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/param/param.h>
/** \defgroup pw_client_node Client Node
*
*/
/**
* \addtogroup pw_client_node
* \{
*/
#define PW_TYPE_INTERFACE_ClientNode PW_TYPE_INFO_INTERFACE_BASE "ClientNode"
#define PW_VERSION_CLIENT_NODE 4
@ -338,6 +346,10 @@ pw_client_node_get_node(struct pw_client_node *p, uint32_t version, size_t user_
#define pw_client_node_event(c,...) pw_client_node_method(c,event,0,__VA_ARGS__)
#define pw_client_node_port_buffers(c,...) pw_client_node_method(c,port_buffers,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -31,6 +31,14 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup pw_metadata Metadata
*
*/
/**
* \addtogroup pw_metadata
* \{
*/
#define PW_TYPE_INTERFACE_Metadata PW_TYPE_INFO_INTERFACE_BASE "Metadata"
#define PW_VERSION_METADATA 3
@ -93,6 +101,10 @@ struct pw_metadata_methods {
#define PW_KEY_METADATA_NAME "metadata.name"
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -31,6 +31,14 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup pw_profiler Profiler
*
*/
/**
* \addtogroup pw_profiler
* \{
*/
#define PW_TYPE_INTERFACE_Profiler PW_TYPE_INFO_INTERFACE_BASE "Profiler"
#define PW_VERSION_PROFILER 3
@ -76,6 +84,10 @@ struct pw_profiler_methods {
#define PW_KEY_PROFILER_NAME "profiler.name"
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -34,6 +34,14 @@ extern "C" {
#include <pipewire/proxy.h>
#include <pipewire/resource.h>
/** \defgroup pw_protocol_native Native Protocol
*
*/
/**
* \addtogroup pw_protocol_native
* \{
*/
#define PW_TYPE_INFO_PROTOCOL_Native PW_TYPE_INFO_PROTOCOL_BASE "Native"
struct pw_protocol_native_message {
@ -86,6 +94,10 @@ struct pw_protocol_native_ext {
#define pw_protocol_native_get_resource_fd(r,...) pw_protocol_ext(pw_resource_get_protocol(r),struct pw_protocol_native_ext,get_resource_fd,r,__VA_ARGS__)
#define pw_protocol_native_end_resource(r,...) pw_protocol_ext(pw_resource_get_protocol(r),struct pw_protocol_native_ext,end_resource,r,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -26,9 +26,22 @@
#ifndef PIPEWIRE_EXT_SESSION_MANAGER_H
#define PIPEWIRE_EXT_SESSION_MANAGER_H
/** \defgroup pw_session_manager Session Manager
*
*/
/**
* \addtogroup pw_session_manager
* \{
*/
#include "session-manager/introspect.h"
#include "session-manager/interfaces.h"
#include "session-manager/impl-interfaces.h"
#include "session-manager/keys.h"
/**
* \}
*/
#endif /* PIPEWIRE_EXT_SESSION_MANAGER_H */

View file

@ -36,6 +36,15 @@
extern "C" {
#endif
/** \defgroup pw_session_manager_impl Implementation
*
*/
/**
* \addtogroup pw_session_manager_impl
* \{
*/
#define PW_TYPE_INTERFACE_ClientEndpoint PW_TYPE_INFO_INTERFACE_BASE "ClientEndpoint"
#define PW_VERSION_CLIENT_ENDPOINT 0
@ -282,6 +291,10 @@ struct pw_client_session_methods {
#define pw_client_session_update(o,...) pw_client_session_method(o,update,0,__VA_ARGS__)
#define pw_client_session_link_update(o,...) pw_client_session_method(o,link_update,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -35,6 +35,11 @@
extern "C" {
#endif
/**
* \addtogroup pw_session_manager
* \{
*/
#define PW_TYPE_INTERFACE_Session PW_TYPE_INFO_INTERFACE_BASE "Session"
#define PW_VERSION_SESSION 0
struct pw_session;
@ -463,6 +468,10 @@ struct pw_endpoint_link_methods {
#define pw_endpoint_link_request_state(c,...) pw_endpoint_link_method(c,request_state,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -34,6 +34,11 @@
extern "C" {
#endif
/**
* \addtogroup pw_session_manager
* \{
*/
static inline struct pw_session_info *
pw_session_info_update (struct pw_session_info *info,
const struct pw_session_info *update)
@ -307,6 +312,10 @@ pw_endpoint_link_info_free (struct pw_endpoint_link_info *info)
free(ext);
}
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -34,6 +34,11 @@
extern "C" {
#endif
/**
* \addtogroup pw_session_manager
* \{
*/
enum pw_endpoint_link_state {
PW_ENDPOINT_LINK_STATE_ERROR = -1,
PW_ENDPOINT_LINK_STATE_PREPARING,
@ -114,6 +119,10 @@ struct pw_endpoint_link_info {
uint32_t n_params; /**< number of items in \a params */
};
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -30,6 +30,11 @@
extern "C" {
#endif
/**
* \addtogroup pw_session_manager
* \{
*/
#define PW_KEY_SESSION_ID "session.id" /**< id of a session manager */
#define PW_KEY_ENDPOINT_ID "endpoint.id" /**< id of an endpoint */
@ -51,6 +56,10 @@ extern "C" {
#define PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT "endpoint-link.input.endpoint" /**< input endpoint of link */
#define PW_KEY_ENDPOINT_LINK_INPUT_STREAM "endpoint-link.input.stream" /**< input stream of link */
/**
* \}
*/
#ifdef __cplusplus
}
#endif

View file

@ -37,6 +37,14 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_factory Factory
*
*/
/**
* \addtogroup pw_factory
* \{
*/
#define PW_TYPE_INTERFACE_Factory PW_TYPE_INFO_INTERFACE_BASE "Factory"
#define PW_VERSION_FACTORY 3
@ -104,6 +112,10 @@ struct pw_factory_methods {
#define pw_factory_add_listener(c,...) pw_factory_method(c,add_listener,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -29,14 +29,14 @@
extern "C" {
#endif
/** \defgroup pw_filter PipeWire Filter
/** \defgroup pw_filter Filter API
*
* \brief PipeWire filter object class
*
* The filter object provides a convenient way to implement
* processing filters.
*
* See also \ref page_core_api
* See also \ref api_pw_core
*/
/**

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_global PipeWire Global Object
/** \defgroup pw_global Global
*
* \brief A global object visible to remote clients
*

View file

@ -29,6 +29,14 @@
extern "C" {
#endif
/** \defgroup pw_gettext Internationalization
*
*/
/**
* \addtogroup pw_gettext
* \{
*/
#include <spa/support/i18n.h>
SPA_FORMAT_ARG_FUNC(1) const char *pw_gettext(const char *msgid);
@ -37,6 +45,10 @@ SPA_FORMAT_ARG_FUNC(1) const char *pw_ngettext(const char *msgid, const char *ms
#define _(String) (pw_gettext(String))
#define N_(String) (String)
/**
* \}
*/
#ifdef __cplusplus
}
#endif

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/hook.h>
/** \page page_client Client
/** \page page_client Client Implementation
*
* \section sec_page_client_overview Overview
*
@ -61,7 +61,7 @@ extern "C" {
* See also \ref pw_resource
*/
/** \defgroup pw_impl_client Client Object
/** \defgroup pw_impl_client Client Impl
*
* \brief PipeWire client object class
*

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_core PipeWire Core Interface
/** \defgroup pw_impl_core Core Impl
*
* \brief PipeWire core interface.
*

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_device PipeWire Device Interface
/** \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

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_factory PipeWire Factory Interface
/** \defgroup pw_impl_factory Factory Impl
*
* The factory is used to make objects on demand.
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_link Link Objects
/** \defgroup pw_impl_link Link Impl
*
* \brief PipeWire link object.
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_metadata PipeWire Metadata Interface
/** \defgroup pw_impl_metadata Metadata Impl
*
* The metadata is used to store key/type/value pairs per object id.
*/

View file

@ -37,13 +37,13 @@ extern "C" {
#define PIPEWIRE_SYMBOL_MODULE_INIT "pipewire__module_init"
#define PIPEWIRE_MODULE_PREFIX "libpipewire-"
/** \defgroup pw_impl_module Dynamically loadable Module
/** \defgroup pw_impl_module Module Impl
*
* A dynamically loadable module
*/
/**
* \addtogropu pw_impl_module
* \addtogroup pw_impl_module
* \{
*/
struct pw_impl_module;

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_impl_node Node
/** \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

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/hook.h>
/** \defgroup pw_impl_port Port Object
/** \defgroup pw_impl_port Port Impl
*
* \brief A port can be used to link two nodes.
*/

View file

@ -29,6 +29,10 @@
extern "C" {
#endif
/**
* \addtogroup api_pw_impl
*/
struct pw_impl_client;
struct pw_impl_module;
struct pw_global;

View file

@ -30,7 +30,7 @@ extern "C" {
#endif
/**
* \defgroup pw_keys PipeWire Keys
* \defgroup pw_keys Key Names
*
* A collection of keys that are used to add extra information on objects.
*

View file

@ -34,7 +34,7 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_link PipeWire Link
/** \defgroup pw_link Link
*
* A link is the connection between 2 nodes (\ref pw_node). Nodes are
* linked together on ports.

View file

@ -32,7 +32,7 @@ extern "C" {
#include <spa/support/loop.h>
#include <spa/utils/dict.h>
/** \defgroup pw_loop PipeWire Loop
/** \defgroup pw_loop Loop
*
* PipeWire loop object provides an implementation of
* the spa loop interfaces. It can be used to implement various

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_main_loop PipeWire Main-Loop Interface
/** \defgroup pw_main_loop Main Loop
*
* A main loop object
*/

View file

@ -35,7 +35,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <pipewire/array.h>
/** \defgroup pw_map Map Objects
/** \defgroup pw_map Map
*
* \brief A map that holds objects indexed by id
*/

View file

@ -34,6 +34,14 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_module Module
*
*/
/**
* \addtogroup pw_module
* \{
*/
#define PW_TYPE_INTERFACE_Module PW_TYPE_INFO_INTERFACE_BASE "Module"
#define PW_VERSION_MODULE 3
@ -102,6 +110,10 @@ struct pw_module_methods {
#define pw_module_add_listener(c,...) pw_module_method(c,add_listener,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -39,7 +39,7 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_node PipeWire Node
/** \defgroup pw_node Node
*
*/

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/defs.h>
/** \defgroup pw_permission PipeWire Permission
/** \defgroup pw_permission Permission
*
* Permissions are kept for a client and describe what the client is
* allowed to do with an object.

View file

@ -60,10 +60,9 @@ extern "C" {
#include <pipewire/utils.h>
#include <pipewire/version.h>
/** \defgroup pw_pipewire PipeWire initialization and infrastructure functions
/** \defgroup pw_pipewire Initialization etc.
*/
/**
* \addtogroup pw_pipewire
* \{

View file

@ -38,7 +38,7 @@ extern "C" {
#include <pipewire/proxy.h>
/** \defgroup pw_port PipeWire Port
/** \defgroup pw_port Port
*
*/

View file

@ -34,7 +34,7 @@ extern "C" {
#include <spa/utils/dict.h>
#include <spa/utils/string.h>
/** \defgroup pw_properties Key-Value pairs
/** \defgroup pw_properties Properties
*
* Properties are used to pass around arbitrary key/value pairs.
* Both keys and values are strings which keeps things simple.

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/list.h>
/** \defgroup pw_protocol PipeWire Protocol
/** \defgroup pw_protocol Protocol
*
* \brief Manages protocols and their implementation
*/

View file

@ -87,7 +87,7 @@ extern "C" {
* associated to the proxy.
*/
/** \defgroup pw_proxy Proxy Object
/** \defgroup pw_proxy Proxy
*
* \brief Represents an object on the client side.
*

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/hook.h>
/** \defgroup pw_resource PipeWire Resources
/** \defgroup pw_resource Resource
*
* \brief Client owned objects
*

View file

@ -144,14 +144,14 @@ extern "C" {
*
* Use \ref pw_stream_disconnect() to disconnect a stream after use.
*/
/** \defgroup pw_stream Stream Object
/** \defgroup pw_stream Stream API
*
* \brief PipeWire stream objects
*
* The stream object provides a convenient way to send and
* receive data streams from/to PipeWire.
*
* See also \ref page_streams and \ref page_core_api
* See also \ref page_streams and \ref api_pw_core
*/
/**

View file

@ -31,7 +31,7 @@ extern "C" {
#include <pipewire/loop.h>
/** \page page_thread_loop Threaded Loop
/** \page page_thread_loop Thread Loop
*
* \section sec_thread_loop_overview Overview
*
@ -80,7 +80,7 @@ extern "C" {
* All events and callbacks are called with the thread lock held.
*
*/
/** \defgroup pw_thread_loop PipeWire Threaded Loop Object
/** \defgroup pw_thread_loop Thread Loop
*
* The threaded loop object runs a \ref pw_loop in a separate thread
* and ensures proper locking is done.

View file

@ -34,11 +34,16 @@ extern "C" {
#include <spa/support/thread.h>
/** \defgroup spa_thread Thread related functions
/** \defgroup pw_thread Thread
*
* \brief functions to manipulate threads
*/
/**
* \addtogroup pw_thread
* \{
*/
void pw_thread_utils_set(struct spa_thread_utils *impl);
struct spa_thread_utils *pw_thread_utils_get(void);
@ -48,6 +53,10 @@ struct spa_thread_utils *pw_thread_utils_get(void);
#define pw_thread_utils_acquire_rt(...) spa_thread_utils_acquire_rt(pw_thread_utils_get(), ##__VA_ARGS__)
#define pw_thread_utils_drop_rt(...) spa_thread_utils_drop_rt(pw_thread_utils_get(), ##__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/type.h>
/** \defgroup pw_type PipeWire Types
/** \defgroup pw_type Type
*/
/**

View file

@ -38,7 +38,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/pod/pod.h>
/** \defgroup pw_utils PipeWire Utility Functions
/** \defgroup pw_utils Utilities
*
* Various utility functions
*/

View file

@ -29,7 +29,7 @@
extern "C" {
#endif
/** \defgroup pw_work_queue PipeWire Work Queue Object
/** \defgroup pw_work_queue Work Queue
*/
/**

View file

@ -41,7 +41,7 @@ extern "C" {
#include "spa/support/plugin.h"
/**
* \defgroup pwtest The pwtest PipeWire Test Suite
* \defgroup pwtest Test Suite
* \brief `pwtest` is a test runner framework for PipeWire.
*
* It's modelled after other