doc: switch doxygen to using groups instead of pages and classes

C code doesn't lend itself well to using classes and pages are best for prose.
A doxygen group is a set of related functions - which is exactly what we have
here, e.g. pw_context.

This patch basically adds the following lines to each header:
\defgroup pw_whatever
\addtogroup pw_whatever
\{
....  function declarations ....
\}

Doxygen is smart enough to merge documentation in the header with
documentation in the correspondin .c file where the function is implemented.
This commit is contained in:
Peter Hutterer 2021-05-20 19:47:13 +10:00
parent 4cf18c92f8
commit cbe29c070c
52 changed files with 546 additions and 327 deletions

View file

@ -33,13 +33,18 @@ extern "C" {
#include <spa/utils/defs.h> #include <spa/utils/defs.h>
/** \class pw_array /** \defgroup pw_array Array Objects
* *
* \brief An array object * \brief An array object
* *
* The array is a dynamically resizable data structure that can * The array is a dynamically resizable data structure that can
* hold items of the same size. * hold items of the same size.
*/ */
/**
* \addtogroup pw_array
* \{
*/
struct pw_array { struct pw_array {
void *data; /**< pointer to array data */ void *data; /**< pointer to array data */
size_t size; /**< length of array in bytes */ size_t size; /**< length of array in bytes */
@ -53,11 +58,11 @@ struct pw_array {
#define pw_array_get_unchecked_s(a,idx,s,t) SPA_PTROFF((a)->data,(idx)*(s),t) #define pw_array_get_unchecked_s(a,idx,s,t) SPA_PTROFF((a)->data,(idx)*(s),t)
#define pw_array_check_index_s(a,idx,s) ((idx) < pw_array_get_len_s(a,s)) #define pw_array_check_index_s(a,idx,s) ((idx) < pw_array_get_len_s(a,s))
/** Get the number of items of type \a t in array \memberof pw_array */ /** Get the number of items of type \a t in array */
#define pw_array_get_len(a,t) pw_array_get_len_s(a,sizeof(t)) #define pw_array_get_len(a,t) pw_array_get_len_s(a,sizeof(t))
/** Get the item with index \a idx and type \a t from array \memberof pw_array */ /** Get the item with index \a idx and type \a t from array */
#define pw_array_get_unchecked(a,idx,t) pw_array_get_unchecked_s(a,idx,sizeof(t),t) #define pw_array_get_unchecked(a,idx,t) pw_array_get_unchecked_s(a,idx,sizeof(t),t)
/** Check if an item with index \a idx and type \a t exist in array \memberof pw_array */ /** Check if an item with index \a idx and type \a t exist in array */
#define pw_array_check_index(a,idx,t) pw_array_check_index_s(a,idx,sizeof(t)) #define pw_array_check_index(a,idx,t) pw_array_check_index_s(a,idx,sizeof(t))
#define pw_array_first(a) ((a)->data) #define pw_array_first(a) ((a)->data)
@ -81,7 +86,7 @@ struct pw_array {
SPA_PTRDIFF(pw_array_end(a),(p))); \ SPA_PTRDIFF(pw_array_end(a),(p))); \
}) })
/** Initialize the array with given extend \memberof pw_array */ /** Initialize the array with given extend */
static inline void pw_array_init(struct pw_array *arr, size_t extend) static inline void pw_array_init(struct pw_array *arr, size_t extend)
{ {
arr->data = NULL; arr->data = NULL;
@ -101,7 +106,7 @@ static inline void pw_array_reset(struct pw_array *arr)
arr->size = 0; arr->size = 0;
} }
/** Make sure \a size bytes can be added to the array \memberof pw_array */ /** Make sure \a size bytes can be added to the array */
static inline int pw_array_ensure_size(struct pw_array *arr, size_t size) static inline int pw_array_ensure_size(struct pw_array *arr, size_t size)
{ {
size_t alloc, need; size_t alloc, need;
@ -123,7 +128,7 @@ static inline int pw_array_ensure_size(struct pw_array *arr, size_t size)
} }
/** Add \a ref size bytes to \a arr. A pointer to memory that can /** Add \a ref size bytes to \a arr. A pointer to memory that can
* hold at least \a size bytes is returned \memberof pw_array */ * hold at least \a size bytes is returned */
static inline void *pw_array_add(struct pw_array *arr, size_t size) static inline void *pw_array_add(struct pw_array *arr, size_t size)
{ {
void *p; void *p;
@ -138,7 +143,7 @@ static inline void *pw_array_add(struct pw_array *arr, size_t size)
} }
/** Add \a ref size bytes to \a arr. When there is not enough memory to /** Add \a ref size bytes to \a arr. When there is not enough memory to
* hold \a size bytes, NULL is returned \memberof pw_array */ * hold \a size bytes, NULL is returned */
static inline void *pw_array_add_fixed(struct pw_array *arr, size_t size) static inline void *pw_array_add_fixed(struct pw_array *arr, size_t size)
{ {
void *p; void *p;
@ -154,10 +159,14 @@ static inline void *pw_array_add_fixed(struct pw_array *arr, size_t size)
return p; return p;
} }
/** Add a pointer to array \memberof pw_array */ /** Add a pointer to array */
#define pw_array_add_ptr(a,p) \ #define pw_array_add_ptr(a,p) \
*((void**) pw_array_add(a, sizeof(void*))) = (p) *((void**) pw_array_add(a, sizeof(void*))) = (p)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -35,6 +35,14 @@ extern "C" {
#include <pipewire/proxy.h> #include <pipewire/proxy.h>
#include <pipewire/permission.h> #include <pipewire/permission.h>
/** \defgroup pw_client Pipewire Client
*
*/
/**
* \addtogroup pw_client
* \{
*/
#define PW_TYPE_INTERFACE_Client PW_TYPE_INFO_INTERFACE_BASE "Client" #define PW_TYPE_INTERFACE_Client PW_TYPE_INFO_INTERFACE_BASE "Client"
#define PW_VERSION_CLIENT 3 #define PW_VERSION_CLIENT 3
@ -43,7 +51,7 @@ struct pw_client;
/* default ID of the current client after connect */ /* default ID of the current client after connect */
#define PW_ID_CLIENT 1 #define PW_ID_CLIENT 1
/** The client information. Extra information can be added in later versions \memberof pw_introspect */ /** The client information. Extra information can be added in later versions */
struct pw_client_info { struct pw_client_info {
uint32_t id; /**< id of the global */ uint32_t id; /**< id of the global */
#define PW_CLIENT_CHANGE_MASK_PROPS (1 << 0) #define PW_CLIENT_CHANGE_MASK_PROPS (1 << 0)
@ -52,12 +60,12 @@ struct pw_client_info {
struct spa_dict *props; /**< extra properties */ struct spa_dict *props; /**< extra properties */
}; };
/** Update and existing \ref pw_client_info with \a update \memberof pw_introspect */ /** Update and existing \ref pw_client_info with \a update */
struct pw_client_info * struct pw_client_info *
pw_client_info_update(struct pw_client_info *info, pw_client_info_update(struct pw_client_info *info,
const struct pw_client_info *update); const struct pw_client_info *update);
/** Free a \ref pw_client_info \memberof pw_introspect */ /** Free a \ref pw_client_info */
void pw_client_info_free(struct pw_client_info *info); void pw_client_info_free(struct pw_client_info *info);
@ -164,6 +172,10 @@ struct pw_client_methods {
#define pw_client_get_permissions(c,...) pw_client_method(c,get_permissions,0,__VA_ARGS__) #define pw_client_get_permissions(c,...) pw_client_method(c,get_permissions,0,__VA_ARGS__)
#define pw_client_update_permissions(c,...) pw_client_method(c,update_permissions,0,__VA_ARGS__) #define pw_client_update_permissions(c,...) pw_client_method(c,update_permissions,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -187,8 +187,6 @@ static int try_load_conf(struct pw_context *this, const char *conf_prefix,
* \param main_loop the main loop to use * \param main_loop the main loop to use
* \param properties extra properties for the context, ownership it taken * \param properties extra properties for the context, ownership it taken
* \return a newly allocated context object * \return a newly allocated context object
*
* \memberof pw_context
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_context *pw_context_new(struct pw_loop *main_loop, struct pw_context *pw_context_new(struct pw_loop *main_loop,
@ -396,8 +394,6 @@ error_cleanup:
/** Destroy a context object /** Destroy a context object
* *
* \param context a context to destroy * \param context a context to destroy
*
* \memberof pw_context
*/ */
SPA_EXPORT SPA_EXPORT
void pw_context_destroy(struct pw_context *context) void pw_context_destroy(struct pw_context *context)
@ -526,8 +522,6 @@ const char *pw_context_get_conf_section(struct pw_context *context, const char *
* \param dict properties to update * \param dict properties to update
* *
* Update the context object with the given properties * Update the context object with the given properties
*
* \memberof pw_context
*/ */
SPA_EXPORT SPA_EXPORT
int pw_context_update_properties(struct pw_context *context, const struct spa_dict *dict) int pw_context_update_properties(struct pw_context *context, const struct spa_dict *dict)
@ -593,8 +587,6 @@ struct pw_global *pw_context_find_global(struct pw_context *context, uint32_t id
* \param format_filters array of format filters * \param format_filters array of format filters
* \param[out] error an error when something is wrong * \param[out] error an error when something is wrong
* \return a port that can be used to link to \a otherport or NULL on error * \return a port that can be used to link to \a otherport or NULL on error
*
* \memberof pw_context
*/ */
struct pw_impl_port *pw_context_find_port(struct pw_context *context, struct pw_impl_port *pw_context_find_port(struct pw_context *context,
struct pw_impl_port *other_port, struct pw_impl_port *other_port,
@ -731,8 +723,6 @@ SPA_PRINTF_FUNC(7, 8) int pw_context_debug_port_params(struct pw_context *this,
* *
* Find a common format between the given ports. The format will * Find a common format between the given ports. The format will
* be restricted to a subset given with the format filters. * be restricted to a subset given with the format filters.
*
* \memberof pw_context
*/ */
int pw_context_find_format(struct pw_context *context, int pw_context_find_format(struct pw_context *context,
struct pw_impl_port *output, struct pw_impl_port *output,

View file

@ -32,12 +32,25 @@ extern "C" {
#include <spa/utils/defs.h> #include <spa/utils/defs.h>
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \class pw_context /** \page page_core_api Core API
* *
* \brief the PipeWire context * The Core API serves to access a PipeWire instance. It consists of the
* following object-specific APIs:
* *
* The context object manages all locally available resources. It * - \ref pw_context
* is used by both clients and servers. * - \ref pw_global
* - \ref pw_client
* - \ref pw_resource
* - \ref pw_node
* - \ref pw_port
* - \ref pw_link
*
*/
/** \defgroup pw_context Pipewire Context
*
* \brief The PipeWire context object manages all locally available
* resources. It is used by both clients and servers.
* *
* The context is used to: * The context is used to:
* *
@ -51,11 +64,16 @@ extern "C" {
* clients. * clients.
* *
* - Connect to another PipeWire instance (the main daemon, for * - Connect to another PipeWire instance (the main daemon, for
* example) and interact with it (See \subpage page_core_api). * example) and interact with it (See \ref page_core_api).
* *
* - Export a local implementation of an object to another * - Export a local implementation of an object to another
* instance. * instance.
*/ */
/**
* \addtogroup pw_context
* @{
*/
struct pw_context; struct pw_context;
struct pw_global; struct pw_global;
@ -65,33 +83,6 @@ struct pw_impl_client;
#include <pipewire/loop.h> #include <pipewire/loop.h>
#include <pipewire/properties.h> #include <pipewire/properties.h>
/** \page page_context_api Core API
*
* \section page_context_overview Overview
*
* \subpage page_context
*
* \subpage page_global
*
* \subpage page_client
*
* \subpage page_resource
*
* \subpage page_node
*
* \subpage page_port
*
* \subpage page_link
*/
/** \page page_context Context
*
* \section page_context_overview Overview
*
* The context object is an object that manages the state and
* resources of a PipeWire instance.
*/
/** context events emitted by the context object added with \ref pw_context_add_listener */ /** context events emitted by the context object added with \ref pw_context_add_listener */
struct pw_context_events { struct pw_context_events {
#define PW_VERSION_CONTEXT_EVENTS 0 #define PW_VERSION_CONTEXT_EVENTS 0
@ -187,6 +178,9 @@ int pw_context_set_object(struct pw_context *context, const char *type, void *va
/** get an object from the context */ /** get an object from the context */
void *pw_context_get_object(struct pw_context *context, const char *type); void *pw_context_get_object(struct pw_context *context, const char *type);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -31,15 +31,14 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \page page_control Control /** \defgroup pw_control Control
* *
* \section page_control_overview Overview * \brief A control can be used to control a port property.
*
* A control can be used to control a port property.
*/ */
/** \class pw_control
* /**
* The control object * \addtogroup pw_control
* \{
*/ */
struct pw_control; struct pw_control;
@ -72,6 +71,10 @@ void pw_control_add_listener(struct pw_control *control,
const struct pw_control_events *events, const struct pw_control_events *events,
void *data); void *data);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -34,6 +34,18 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \defgroup pw_core The Core Global Object
*
* \brief The core global object.
*
* This is a special singleton object. It
* is used for internal PipeWire protocol features.
*/
/**
* \addtogroup pw_core
* \{
*/
#define PW_TYPE_INTERFACE_Core PW_TYPE_INFO_INTERFACE_BASE "Core" #define PW_TYPE_INTERFACE_Core PW_TYPE_INFO_INTERFACE_BASE "Core"
#define PW_TYPE_INTERFACE_Registry PW_TYPE_INFO_INTERFACE_BASE "Registry" #define PW_TYPE_INTERFACE_Registry PW_TYPE_INFO_INTERFACE_BASE "Registry"
@ -51,7 +63,7 @@ struct pw_registry;
/* invalid ID that matches any object when used for permissions */ /* invalid ID that matches any object when used for permissions */
#define PW_ID_ANY (uint32_t)(0xffffffff) #define PW_ID_ANY (uint32_t)(0xffffffff)
/** The core information. Extra information can be added in later versions \memberof pw_introspect */ /** The core information. Extra information can be added in later versions */
struct pw_core_info { struct pw_core_info {
uint32_t id; /**< id of the global */ uint32_t id; /**< id of the global */
uint32_t cookie; /**< a random cookie for identifying this instance of PipeWire */ uint32_t cookie; /**< a random cookie for identifying this instance of PipeWire */
@ -69,23 +81,14 @@ struct pw_core_info {
#include <pipewire/properties.h> #include <pipewire/properties.h>
#include <pipewire/proxy.h> #include <pipewire/proxy.h>
/** Update and existing \ref pw_core_info with \a update \memberof pw_introspect */ /** Update and existing \ref pw_core_info with \a update */
struct pw_core_info * struct pw_core_info *
pw_core_info_update(struct pw_core_info *info, pw_core_info_update(struct pw_core_info *info,
const struct pw_core_info *update); const struct pw_core_info *update);
/** Free a \ref pw_core_info \memberof pw_introspect */ /** Free a \ref pw_core_info */
void pw_core_info_free(struct pw_core_info *info); void pw_core_info_free(struct pw_core_info *info);
/**
* \page page_iface_pw_core pw_core
* \section page_iface_pw_core_desc Description
*
* The core global object. This is a special singleton object. It
* is used for internal PipeWire protocol features.
* \section page_iface_pw_core API
*/
/** Core */ /** Core */
#define PW_CORE_EVENT_INFO 0 #define PW_CORE_EVENT_INFO 0
@ -372,12 +375,14 @@ pw_core_create_object(struct pw_core *core,
#define pw_core_destroy(c,...) pw_core_method(c,destroy,0,__VA_ARGS__) #define pw_core_destroy(c,...) pw_core_method(c,destroy,0,__VA_ARGS__)
/** \page page_registry Registry /**
* * \}
* \section page_registry_overview Overview */
/** \defgroup pw_registry Registry
* *
* The registry object is a singleton object that keeps track of * The registry object is a singleton object that keeps track of
* global objects on the PipeWire instance. See also \ref page_global. * global objects on the PipeWire instance. See also \ref pw_global.
* *
* Global objects typically represent an actual object in PipeWire * Global objects typically represent an actual object in PipeWire
* (for example, a module or node) or they are singleton * (for example, a module or node) or they are singleton
@ -404,6 +409,11 @@ pw_core_create_object(struct pw_core *core,
* the access permissions on an object. * the access permissions on an object.
*/ */
/**
* \addtogroup pw_registry
* \{
*/
#define PW_REGISTRY_EVENT_GLOBAL 0 #define PW_REGISTRY_EVENT_GLOBAL 0
#define PW_REGISTRY_EVENT_GLOBAL_REMOVE 1 #define PW_REGISTRY_EVENT_GLOBAL_REMOVE 1
#define PW_REGISTRY_EVENT_NUM 2 #define PW_REGISTRY_EVENT_NUM 2
@ -504,9 +514,17 @@ pw_registry_bind(struct pw_registry *registry,
#define pw_registry_destroy(p,...) pw_registry_method(p,destroy,0,__VA_ARGS__) #define pw_registry_destroy(p,...) pw_registry_method(p,destroy,0,__VA_ARGS__)
/**
* \}
*/
/** Connect to a PipeWire instance \memberof pw_core /**
* \return a pw_core on success or NULL with errno set on error. The core * \addtogroup pw_core
* \{
*/
/** Connect to a PipeWire instance
* \return a \ref pw_core on success or NULL with errno set on error. The core
* will have an id of PW_ID_CORE (0) */ * will have an id of PW_ID_CORE (0) */
struct pw_core * struct pw_core *
pw_context_connect(struct pw_context *context, /**< a \ref pw_context */ pw_context_connect(struct pw_context *context, /**< a \ref pw_context */
@ -514,7 +532,7 @@ pw_context_connect(struct pw_context *context, /**< a \ref pw_context */
* the properties is taken.*/ * the properties is taken.*/
size_t user_data_size /**< extra user data size */); size_t user_data_size /**< extra user data size */);
/** Connect to a PipeWire instance on the given socket \memberof pw_core /** Connect to a PipeWire instance on the given socket
* \param context a \ref pw_context * \param context a \ref pw_context
* \param fd the connected socket to use, the socket will be closed * \param fd the connected socket to use, the socket will be closed
* automatically on disconnect or error. * automatically on disconnect or error.
@ -528,8 +546,8 @@ pw_context_connect_fd(struct pw_context *context,
struct pw_properties *properties, struct pw_properties *properties,
size_t user_data_size); size_t user_data_size);
/** Connect to a given PipeWire instance \memberof pw_core /** Connect to a given PipeWire instance
* \return a pw_core on success or NULL with errno set on error */ * \return a \ref pw_core on success or NULL with errno set on error */
struct pw_core * struct pw_core *
pw_context_connect_self(struct pw_context *context, /**< a \ref pw_context to connect to */ pw_context_connect_self(struct pw_context *context, /**< a \ref pw_context to connect to */
struct pw_properties *properties, /**< optional properties, ownership of struct pw_properties *properties, /**< optional properties, ownership of
@ -579,6 +597,9 @@ struct pw_proxy *pw_core_export(struct pw_core *core, /**< the core */
void *object, /**< object to export */ void *object, /**< object to export */
size_t user_data_size /**< extra user data */); size_t user_data_size /**< extra user data */);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -147,7 +147,6 @@ error_cleanup:
/** Create a new \ref pw_data_loop. /** Create a new \ref pw_data_loop.
* \return a newly allocated data loop * \return a newly allocated data loop
* *
* \memberof pw_data_loop
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_data_loop *pw_data_loop_new(const struct spa_dict *props) struct pw_data_loop *pw_data_loop_new(const struct spa_dict *props)
@ -158,7 +157,6 @@ struct pw_data_loop *pw_data_loop_new(const struct spa_dict *props)
/** Destroy a data loop /** Destroy a data loop
* \param loop the data loop to destroy * \param loop the data loop to destroy
* \memberof pw_data_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_data_loop_destroy(struct pw_data_loop *loop) void pw_data_loop_destroy(struct pw_data_loop *loop)
@ -200,7 +198,6 @@ pw_data_loop_get_loop(struct pw_data_loop *loop)
* *
* This will start the realtime thread that manages the loop. * This will start the realtime thread that manages the loop.
* *
* \memberof pw_data_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_data_loop_start(struct pw_data_loop *loop) int pw_data_loop_start(struct pw_data_loop *loop)
@ -224,7 +221,6 @@ int pw_data_loop_start(struct pw_data_loop *loop)
* *
* This will stop and join the realtime thread that manages the loop. * This will stop and join the realtime thread that manages the loop.
* *
* \memberof pw_data_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_data_loop_stop(struct pw_data_loop *loop) int pw_data_loop_stop(struct pw_data_loop *loop)
@ -250,7 +246,6 @@ int pw_data_loop_stop(struct pw_data_loop *loop)
* \param loop the data loop to check * \param loop the data loop to check
* \return true is the current thread is the data loop thread * \return true is the current thread is the data loop thread
* *
* \memberof pw_data_loop
*/ */
SPA_EXPORT SPA_EXPORT
bool pw_data_loop_in_thread(struct pw_data_loop * loop) bool pw_data_loop_in_thread(struct pw_data_loop * loop)

View file

@ -31,11 +31,16 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \class pw_data_loop /** \defgroup pw_data_loop PipeWire rt-loop object
* *
* PipeWire rt-loop object. This loop starts a new real-time thread that * This loop starts a new real-time thread that
* is designed to run the processing graph. * is designed to run the processing graph.
*/ */
/**
* \addtogroup pw_data_loop
* \{
*/
struct pw_data_loop; struct pw_data_loop;
#include <pipewire/loop.h> #include <pipewire/loop.h>
@ -88,6 +93,10 @@ int pw_data_loop_invoke(struct pw_data_loop *loop,
spa_invoke_func_t func, uint32_t seq, const void *data, size_t size, spa_invoke_func_t func, uint32_t seq, const void *data, size_t size,
bool block, void *user_data); bool block, void *user_data);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -39,7 +39,7 @@ extern "C" {
#define PW_VERSION_DEVICE 3 #define PW_VERSION_DEVICE 3
struct pw_device; struct pw_device;
/** The device information. Extra information can be added in later versions \memberof pw_introspect */ /** The device information. Extra information can be added in later versions */
struct pw_device_info { struct pw_device_info {
uint32_t id; /**< id of the global */ uint32_t id; /**< id of the global */
#define PW_DEVICE_CHANGE_MASK_PROPS (1 << 0) #define PW_DEVICE_CHANGE_MASK_PROPS (1 << 0)
@ -51,12 +51,12 @@ struct pw_device_info {
uint32_t n_params; /**< number of items in \a params */ uint32_t n_params; /**< number of items in \a params */
}; };
/** Update and existing \ref pw_device_info with \a update \memberof pw_introspect */ /** Update and existing \ref pw_device_info with \a update */
struct pw_device_info * struct pw_device_info *
pw_device_info_update(struct pw_device_info *info, pw_device_info_update(struct pw_device_info *info,
const struct pw_device_info *update); const struct pw_device_info *update);
/** Free a \ref pw_device_info \memberof pw_introspect */ /** Free a \ref pw_device_info */
void pw_device_info_free(struct pw_device_info *info); void pw_device_info_free(struct pw_device_info *info);
#define PW_DEVICE_EVENT_INFO 0 #define PW_DEVICE_EVENT_INFO 0

View file

@ -29,7 +29,7 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_filter /** \defgroup pw_filter Pipewire Filter
* *
* \brief PipeWire filter object class * \brief PipeWire filter object class
* *
@ -38,6 +38,11 @@ extern "C" {
* *
* See also \ref page_core_api * See also \ref page_core_api
*/ */
/**
* \addtogroup pw_filter
* \{
*/
struct pw_filter; struct pw_filter;
#include <spa/buffer/buffer.h> #include <spa/buffer/buffer.h>
@ -47,7 +52,7 @@ struct pw_filter;
#include <pipewire/core.h> #include <pipewire/core.h>
#include <pipewire/stream.h> #include <pipewire/stream.h>
/** \enum pw_filter_state The state of a filter \memberof pw_filter */ /** \enum pw_filter_state The state of a filter */
enum pw_filter_state { enum pw_filter_state {
PW_FILTER_STATE_ERROR = -1, /**< the stream is in error */ PW_FILTER_STATE_ERROR = -1, /**< the stream is in error */
PW_FILTER_STATE_UNCONNECTED = 0, /**< unconnected */ PW_FILTER_STATE_UNCONNECTED = 0, /**< unconnected */
@ -100,10 +105,10 @@ struct pw_filter_events {
void (*drained) (void *data); void (*drained) (void *data);
}; };
/** Convert a filter state to a readable string \memberof pw_filter */ /** Convert a filter state to a readable string */
const char * pw_filter_state_as_string(enum pw_filter_state state); const char * pw_filter_state_as_string(enum pw_filter_state state);
/** \enum pw_filter_flags Extra flags that can be used in \ref pw_filter_connect() \memberof pw_filter */ /** \enum pw_filter_flags Extra flags that can be used in \ref pw_filter_connect() */
enum pw_filter_flags { enum pw_filter_flags {
PW_FILTER_FLAG_NONE = 0, /**< no flags */ PW_FILTER_FLAG_NONE = 0, /**< no flags */
PW_FILTER_FLAG_INACTIVE = (1 << 0), /**< start the filter inactive, PW_FILTER_FLAG_INACTIVE = (1 << 0), /**< start the filter inactive,
@ -122,7 +127,7 @@ enum pw_filter_port_flags {
* data of the buffer should be set */ * data of the buffer should be set */
}; };
/** Create a new unconneced \ref pw_filter \memberof pw_filter /** Create a new unconneced \ref pw_filter
* \return a newly allocated \ref pw_filter */ * \return a newly allocated \ref pw_filter */
struct pw_filter * struct pw_filter *
pw_filter_new(struct pw_core *core, /**< a \ref pw_core */ pw_filter_new(struct pw_core *core, /**< a \ref pw_core */
@ -136,7 +141,7 @@ pw_filter_new_simple(struct pw_loop *loop, /**< a \ref pw_loop to use */
const struct pw_filter_events *events, /**< filter events */ const struct pw_filter_events *events, /**< filter events */
void *data /**< data passed to events */); void *data /**< data passed to events */);
/** Destroy a filter \memberof pw_filter */ /** Destroy a filter */
void pw_filter_destroy(struct pw_filter *filter); void pw_filter_destroy(struct pw_filter *filter);
void pw_filter_add_listener(struct pw_filter *filter, void pw_filter_add_listener(struct pw_filter *filter,
@ -150,7 +155,7 @@ const char *pw_filter_get_name(struct pw_filter *filter);
struct pw_core *pw_filter_get_core(struct pw_filter *filter); struct pw_core *pw_filter_get_core(struct pw_filter *filter);
/** Connect a filter for processing. \memberof pw_filter /** Connect a filter for processing.
* \return 0 on success < 0 on error. * \return 0 on success < 0 on error.
* *
* You should connect to the process event and use pw_filter_dequeue_buffer() * You should connect to the process event and use pw_filter_dequeue_buffer()
@ -161,12 +166,12 @@ pw_filter_connect(struct pw_filter *filter, /**< a \ref pw_filter */
const struct spa_pod **params, /**< an array with params. */ const struct spa_pod **params, /**< an array with params. */
uint32_t n_params /**< number of items in \a params */); uint32_t n_params /**< number of items in \a params */);
/** Get the node ID of the filter. \memberof pw_filter /** Get the node ID of the filter.
* \return node ID. */ * \return node ID. */
uint32_t uint32_t
pw_filter_get_node_id(struct pw_filter *filter); pw_filter_get_node_id(struct pw_filter *filter);
/** Disconnect \a filter \memberof pw_filter */ /** Disconnect \a filter */
int pw_filter_disconnect(struct pw_filter *filter); int pw_filter_disconnect(struct pw_filter *filter);
/** add a port to the filter, returns user data of port_data_size. */ /** add a port to the filter, returns user data of port_data_size. */
@ -206,7 +211,7 @@ pw_filter_update_params(struct pw_filter *filter, /**< a \ref pw_filter */
#if 0 #if 0
/** A time structure \memberof pw_filter */ /** A time structure */
struct pw_time { struct pw_time {
int64_t now; /**< the monotonic time */ int64_t now; /**< the monotonic time */
struct spa_fraction rate; /**< the rate of \a ticks and delay */ struct spa_fraction rate; /**< the rate of \a ticks and delay */
@ -215,7 +220,7 @@ struct pw_time {
}; };
#endif #endif
/** Query the time on the filter \memberof pw_filter */ /** Query the time on the filter */
int pw_filter_get_time(struct pw_filter *filter, struct pw_time *time); int pw_filter_get_time(struct pw_filter *filter, struct pw_time *time);
/** Get a buffer that can be filled for output ports or consumed /** Get a buffer that can be filled for output ports or consumed
@ -228,13 +233,17 @@ int pw_filter_queue_buffer(void *port_data, struct pw_buffer *buffer);
/** Get a data pointer to the buffer data */ /** Get a data pointer to the buffer data */
void *pw_filter_get_dsp_buffer(void *port_data, uint32_t n_samples); void *pw_filter_get_dsp_buffer(void *port_data, uint32_t n_samples);
/** Activate or deactivate the filter \memberof pw_filter */ /** Activate or deactivate the filter */
int pw_filter_set_active(struct pw_filter *filter, bool active); int pw_filter_set_active(struct pw_filter *filter, bool active);
/** Flush a filter. When \a drain is true, the drained callback will /** Flush a filter. When \a drain is true, the drained callback will
* be called when all data is played or recorded */ * be called when all data is played or recorded */
int pw_filter_flush(struct pw_filter *filter, bool drain); int pw_filter_flush(struct pw_filter *filter, bool drain);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -39,8 +39,8 @@
struct impl { struct impl {
struct pw_global this; struct pw_global this;
}; };
/** \endcond */ /** \endcond */
SPA_EXPORT SPA_EXPORT
uint32_t pw_global_get_permissions(struct pw_global *global, struct pw_impl_client *client) uint32_t pw_global_get_permissions(struct pw_global *global, struct pw_impl_client *client)
{ {
@ -60,7 +60,6 @@ uint32_t pw_global_get_permissions(struct pw_global *global, struct pw_impl_clie
* \param object the associated object * \param object the associated object
* \return a result global * \return a result global
* *
* \memberof pw_global
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_global * struct pw_global *
@ -122,7 +121,6 @@ error_cleanup:
* \param global a global to add * \param global a global to add
* \return 0 on success < 0 errno value on failure * \return 0 on success < 0 errno value on failure
* *
* \memberof pw_global
*/ */
SPA_EXPORT SPA_EXPORT
int pw_global_register(struct pw_global *global) int pw_global_register(struct pw_global *global)
@ -275,7 +273,6 @@ void pw_global_add_listener(struct pw_global *global,
* After binding, the client and the global object will be able to * After binding, the client and the global object will be able to
* exchange messages on the proxy/resource with \a id. * exchange messages on the proxy/resource with \a id.
* *
* \memberof pw_global
*/ */
SPA_EXPORT int SPA_EXPORT int
pw_global_bind(struct pw_global *global, struct pw_impl_client *client, uint32_t permissions, pw_global_bind(struct pw_global *global, struct pw_impl_client *client, uint32_t permissions,
@ -368,7 +365,6 @@ int pw_global_update_permissions(struct pw_global *global, struct pw_impl_client
* *
* \param global a global to destroy * \param global a global to destroy
* *
* \memberof pw_global
*/ */
SPA_EXPORT SPA_EXPORT
void pw_global_destroy(struct pw_global *global) void pw_global_destroy(struct pw_global *global)

View file

@ -29,7 +29,12 @@
extern "C" { extern "C" {
#endif #endif
/** \page page_global Global /** \defgroup pw_global Global Object
*
* \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 * Global objects represent resources that are available on the PipeWire
* context and are accessible to remote clients. * context and are accessible to remote clients.
@ -37,19 +42,17 @@ extern "C" {
* clients. * clients.
* *
* Remote clients receives a list of globals when it binds to the registry * Remote clients receives a list of globals when it binds to the registry
* object. See \ref page_registry. * object. See \ref pw_registry.
* *
* A client can bind to a global to send methods or receive events from * A client can bind to a global to send methods or receive events from
* the global. * the global.
*
* See \ref page_proxy
*/ */
/** \class pw_global
* /**
* \brief A global object visible to remote clients * \addtogroup pw_global
* * \{
* A global object is visible to remote clients and represents a resource
* that can be used or inspected.
*
* See \ref page_remote_api
*/ */
struct pw_global; struct pw_global;
@ -148,6 +151,10 @@ int pw_global_update_permissions(struct pw_global *global, struct pw_impl_client
/** Destroy a global */ /** Destroy a global */
void pw_global_destroy(struct pw_global *global); void pw_global_destroy(struct pw_global *global);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -377,7 +377,6 @@ static const struct pw_context_events context_events = {
* \param properties optional client properties, ownership is taken * \param properties optional client properties, ownership is taken
* \return a newly allocated client object * \return a newly allocated client object
* *
* \memberof pw_impl_client
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_impl_client *pw_context_create_client(struct pw_impl_core *core, struct pw_impl_client *pw_context_create_client(struct pw_impl_core *core,
@ -570,7 +569,6 @@ static int destroy_resource(void *object, void *data)
* *
* \param client the client to destroy * \param client the client to destroy
* *
* \memberof pw_impl_client
*/ */
SPA_EXPORT SPA_EXPORT
void pw_impl_client_destroy(struct pw_impl_client *client) void pw_impl_client_destroy(struct pw_impl_client *client)
@ -632,7 +630,6 @@ const struct pw_client_info *pw_impl_client_get_info(struct pw_impl_client *clie
* properties are overwritten. Items can be removed by setting the value * properties are overwritten. Items can be removed by setting the value
* to NULL. * to NULL.
* *
* \memberof pw_impl_client
*/ */
SPA_EXPORT SPA_EXPORT
int pw_impl_client_update_properties(struct pw_impl_client *client, const struct spa_dict *dict) int pw_impl_client_update_properties(struct pw_impl_client *client, const struct spa_dict *dict)

View file

@ -31,24 +31,6 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \class pw_impl_client
*
* \brief PipeWire client object class.
*
* The client object represents a client connection with the PipeWire
* server.
*
* Each client has its own list of resources it is bound to along with
* a mapping between the client types and server types.
*/
struct pw_impl_client;
#include <pipewire/context.h>
#include <pipewire/global.h>
#include <pipewire/properties.h>
#include <pipewire/resource.h>
#include <pipewire/permission.h>
/** \page page_client Client /** \page page_client Client
* *
* \section sec_page_client_overview Overview * \section sec_page_client_overview Overview
@ -76,9 +58,32 @@ struct pw_impl_client;
* When a client binds to context global object, a resource is made for this * 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 * binding and a unique id is assigned to the resources. The client and
* server will use this id as the destination when exchanging messages. * server will use this id as the destination when exchanging messages.
* See also \ref page_resource * See also \ref pw_resource
*/ */
/** \defgroup pw_impl_client Client Object
*
* \brief PipeWire client object class
*
* The client object represents a client connection with the PipeWire
* server.
*
* Each client has its own list of resources it is bound to along with
* a mapping between the client types and server types.
*/
/**
* \addtogroup pw_impl_client
* \{
*/
struct pw_impl_client;
#include <pipewire/context.h>
#include <pipewire/global.h>
#include <pipewire/properties.h>
#include <pipewire/resource.h>
#include <pipewire/permission.h>
/** The events that a client can emit */ /** The events that a client can emit */
struct pw_impl_client_events { struct pw_impl_client_events {
#define PW_VERSION_IMPL_CLIENT_EVENTS 0 #define PW_VERSION_IMPL_CLIENT_EVENTS 0
@ -167,6 +172,10 @@ void pw_impl_client_add_listener(struct pw_impl_client *client,
* started and no further processing is allowed to happen for the client */ * started and no further processing is allowed to happen for the client */
void pw_impl_client_set_busy(struct pw_impl_client *client, bool busy); void pw_impl_client_set_busy(struct pw_impl_client *client, bool busy);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -29,12 +29,18 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_impl_core /** \defgroup pw_impl_core Pipewire Core Interface
* *
* \brief PipeWire core interface. * \brief PipeWire core interface.
* *
* The core is used to make objects on demand. * The core is used to make objects on demand.
*/ */
/**
* \addtogroup pw_impl_core
* \{
*/
struct pw_impl_core; struct pw_impl_core;
#include <pipewire/context.h> #include <pipewire/context.h>
@ -87,6 +93,10 @@ void pw_impl_core_add_listener(struct pw_impl_core *core,
const struct pw_impl_core_events *events, const struct pw_impl_core_events *events,
void *data); void *data);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -29,9 +29,7 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_impl_device /** \defgroup pw_impl_device Pipewire Device Interface
*
* \brief PipeWire device interface.
* *
* The device is an object that manages nodes. It typically * The device is an object that manages nodes. It typically
* corresponds to a physical hardware device but it does not * corresponds to a physical hardware device but it does not
@ -40,6 +38,11 @@ extern "C" {
* The purpose of the device is to provide an interface to * The purpose of the device is to provide an interface to
* dynamically create/remove/configure the nodes it manages. * dynamically create/remove/configure the nodes it manages.
*/ */
/**
* \addtogroup pw_impl_device
* \{
*/
struct pw_impl_device; struct pw_impl_device;
#include <spa/monitor/device.h> #include <spa/monitor/device.h>
@ -102,6 +105,10 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device,
uint32_t id, uint32_t index, uint32_t next, uint32_t id, uint32_t index, uint32_t next,
struct spa_pod *param), struct spa_pod *param),
void *data); void *data);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -282,7 +282,7 @@ void *pw_impl_factory_create_object(struct pw_impl_factory *factory,
* Find in the list of factories registered in \a context for one with * Find in the list of factories registered in \a context for one with
* the given \a name. * the given \a name.
* *
* \memberof pw_context * \ingroup pw_context
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_impl_factory *pw_context_find_factory(struct pw_context *context, struct pw_impl_factory *pw_context_find_factory(struct pw_context *context,

View file

@ -29,12 +29,15 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_impl_factory /** \defgroup pw_impl_factory Pipewire Factory Interface
*
* \brief PipeWire factory interface.
* *
* The factory is used to make objects on demand. * The factory is used to make objects on demand.
*/ */
/**
* \addtogroup pw_impl_factory
* \{
*/
struct pw_impl_factory; struct pw_impl_factory;
#include <pipewire/context.h> #include <pipewire/context.h>
@ -117,6 +120,10 @@ struct pw_impl_factory *
pw_context_find_factory(struct pw_context *context /**< the context */, pw_context_find_factory(struct pw_context *context /**< the context */,
const char *name /**< the factory name */); const char *name /**< the factory name */);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -29,26 +29,20 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_impl_link /** \defgroup pw_impl_link Link Objects
* *
* PipeWire link object. * \brief PipeWire link object.
*/
/**
* \addtogroup pw_impl_link
* \{
*/ */
struct pw_impl_link; struct pw_impl_link;
struct pw_impl_port; struct pw_impl_port;
#include <pipewire/impl.h> #include <pipewire/impl.h>
/** \page page_link Link
*
* \section page_link_overview Overview
*
* A link is the connection between 2 nodes (\ref page_node). Nodes are
* linked together on ports.
*
* The link is responsible for negotiating the format and buffers for
* the nodes.
*/
/** link events added with \ref pw_impl_link_add_listener */ /** link events added with \ref pw_impl_link_add_listener */
struct pw_impl_link_events { struct pw_impl_link_events {
#define PW_VERSION_IMPL_LINK_EVENTS 0 #define PW_VERSION_IMPL_LINK_EVENTS 0
@ -76,7 +70,7 @@ struct pw_impl_link_events {
}; };
/** Make a new link between two ports \memberof pw_impl_link /** Make a new link between two ports
* \return a newly allocated link */ * \return a newly allocated link */
struct pw_impl_link * struct pw_impl_link *
pw_context_create_link(struct pw_context *context, /**< the context object */ pw_context_create_link(struct pw_context *context, /**< the context object */
@ -86,7 +80,7 @@ pw_context_create_link(struct pw_context *context, /**< the context object */
struct pw_properties *properties /**< extra properties */, struct pw_properties *properties /**< extra properties */,
size_t user_data_size /**< extra user data size */); size_t user_data_size /**< extra user data size */);
/** Destroy a link \memberof pw_impl_link */ /** Destroy a link */
void pw_impl_link_destroy(struct pw_impl_link *link); void pw_impl_link_destroy(struct pw_impl_link *link);
/** Add an event listener to \a link */ /** Add an event listener to \a link */
@ -118,9 +112,13 @@ struct pw_impl_port *pw_impl_link_get_output(struct pw_impl_link *link);
/** Get the input port of the link */ /** Get the input port of the link */
struct pw_impl_port *pw_impl_link_get_input(struct pw_impl_link *link); struct pw_impl_port *pw_impl_link_get_input(struct pw_impl_link *link);
/** Find the link between 2 ports \memberof pw_impl_link */ /** Find the link between 2 ports */
struct pw_impl_link *pw_impl_link_find(struct pw_impl_port *output, struct pw_impl_port *input); struct pw_impl_link *pw_impl_link_find(struct pw_impl_port *output, struct pw_impl_port *input);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -152,7 +152,6 @@ static const struct pw_global_events global_events = {
* \param properties extra global properties * \param properties extra global properties
* \return A \ref pw_impl_module if the module could be loaded, or NULL on failure. * \return A \ref pw_impl_module if the module could be loaded, or NULL on failure.
* *
* \memberof pw_impl_module
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_impl_module * struct pw_impl_module *
@ -300,7 +299,6 @@ error_cleanup:
/** Destroy a module /** Destroy a module
* \param module the module to destroy * \param module the module to destroy
* \memberof pw_impl_module
*/ */
SPA_EXPORT SPA_EXPORT
void pw_impl_module_destroy(struct pw_impl_module *module) void pw_impl_module_destroy(struct pw_impl_module *module)

View file

@ -37,10 +37,15 @@ extern "C" {
#define PIPEWIRE_SYMBOL_MODULE_INIT "pipewire__module_init" #define PIPEWIRE_SYMBOL_MODULE_INIT "pipewire__module_init"
#define PIPEWIRE_MODULE_PREFIX "libpipewire-" #define PIPEWIRE_MODULE_PREFIX "libpipewire-"
/** \class pw_impl_module /** \defgroup pw_impl_module Dynamically loadable Module
* *
* A dynamically loadable module * A dynamically loadable module
*/ */
/**
* \addtogropu pw_impl_module
* \{
*/
struct pw_impl_module; struct pw_impl_module;
/** Module init function signature /** Module init function signature
@ -51,8 +56,6 @@ struct pw_impl_module;
* *
* A module should provide an init function with this signature. This function * A module should provide an init function with this signature. This function
* will be called when a module is loaded. * will be called when a module is loaded.
*
* \memberof pw_impl_module
*/ */
typedef int (*pw_impl_module_init_func_t) (struct pw_impl_module *module, const char *args); typedef int (*pw_impl_module_init_func_t) (struct pw_impl_module *module, const char *args);
@ -103,6 +106,10 @@ void pw_impl_module_add_listener(struct pw_impl_module *module,
/** Destroy a module */ /** Destroy a module */
void pw_impl_module_destroy(struct pw_impl_module *module); void pw_impl_module_destroy(struct pw_impl_module *module);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -1715,8 +1715,6 @@ void pw_impl_node_add_listener(struct pw_impl_node *node,
* *
* Remove \a node. This will stop the transfer on the node and * Remove \a node. This will stop the transfer on the node and
* free the resources allocated by \a node. * free the resources allocated by \a node.
*
* \memberof pw_impl_node
*/ */
SPA_EXPORT SPA_EXPORT
void pw_impl_node_destroy(struct pw_impl_node *node) void pw_impl_node_destroy(struct pw_impl_node *node)
@ -2067,8 +2065,6 @@ static void node_activate(struct pw_impl_node *this)
* \return 0 on success < 0 on error * \return 0 on success < 0 on error
* *
* Set the state of \a node to \a state. * Set the state of \a node to \a state.
*
* \memberof pw_impl_node
*/ */
SPA_EXPORT SPA_EXPORT
int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state) int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state)

View file

@ -29,17 +29,15 @@
extern "C" { extern "C" {
#endif #endif
/** \page page_node Node /** \defgroup pw_impl_node Node
*
* \section page_node_overview Overview
* *
* The node object processes data. The node has a list of * The node object processes data. The node has a list of
* input and output ports (\ref page_port) on which it * input and output ports (\ref pw_impl_port) on which it
* will receive and send out buffers respectively. * will receive and send out buffers respectively.
*/ */
/** \class pw_impl_node /**
* * \addtogroup pw_impl_node
* PipeWire node class. * \{
*/ */
struct pw_impl_node; struct pw_impl_node;
struct pw_impl_port; struct pw_impl_port;
@ -97,7 +95,7 @@ struct pw_impl_node_events {
void (*peer_removed) (void *data, struct pw_impl_node *peer); void (*peer_removed) (void *data, struct pw_impl_node *peer);
}; };
/** Create a new node \memberof pw_impl_node */ /** Create a new node */
struct pw_impl_node * struct pw_impl_node *
pw_context_create_node(struct pw_context *context, /**< the context */ pw_context_create_node(struct pw_context *context, /**< the context */
struct pw_properties *properties, /**< extra properties */ struct pw_properties *properties, /**< extra properties */
@ -175,6 +173,10 @@ int pw_impl_node_set_active(struct pw_impl_node *node, bool active);
/** Check if a node is active */ /** Check if a node is active */
bool pw_impl_node_is_active(struct pw_impl_node *node); bool pw_impl_node_is_active(struct pw_impl_node *node);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -31,15 +31,14 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \page page_port Port /** \defgroup pw_impl_port Port Object
* *
* \section page_node_overview Overview * \brief A port can be used to link two nodes.
*
* A port can be used to link two nodes.
*/ */
/** \class pw_impl_port
* /**
* The port object * \addtogroup pw_impl_port
* \{
*/ */
struct pw_impl_port; struct pw_impl_port;
struct pw_impl_link; struct pw_impl_link;
@ -92,7 +91,7 @@ struct pw_impl_port_events {
void (*param_changed) (void *data, uint32_t id); void (*param_changed) (void *data, uint32_t id);
}; };
/** Create a new port \memberof pw_impl_port /** Create a new port
* \return a newly allocated port */ * \return a newly allocated port */
struct pw_impl_port * struct pw_impl_port *
pw_context_create_port(struct pw_context *context, pw_context_create_port(struct pw_context *context,
@ -122,7 +121,7 @@ struct pw_impl_node *pw_impl_port_get_node(struct pw_impl_port *port);
/** check is a port has links, return 0 if not, 1 if it is linked */ /** check is a port has links, return 0 if not, 1 if it is linked */
int pw_impl_port_is_linked(struct pw_impl_port *port); int pw_impl_port_is_linked(struct pw_impl_port *port);
/** Add a port to a node \memberof pw_impl_port */ /** Add a port to a node */
int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node); int pw_impl_port_add(struct pw_impl_port *port, struct pw_impl_node *node);
/** Add an event listener on the port */ /** Add an event listener on the port */
@ -131,6 +130,10 @@ void pw_impl_port_add_listener(struct pw_impl_port *port,
const struct pw_impl_port_events *events, const struct pw_impl_port_events *events,
void *data); void *data);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -29,6 +29,28 @@
extern "C" { extern "C" {
#endif #endif
/** \page page_implementation_api 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_module
* - \ref pw_impl_node
* - \ref pw_impl_port
* - \ref pw_control
* - \ref pw_global
* - \ref pw_global
* - \ref pw_resource
* - \ref pw_work_queue
*
*/
struct pw_impl_client; struct pw_impl_client;
struct pw_impl_module; struct pw_impl_module;
struct pw_global; struct pw_global;

View file

@ -34,6 +34,21 @@ extern "C" {
#include <pipewire/proxy.h> #include <pipewire/proxy.h>
/** \defgroup pw_link Pipewire 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.
*
*/
/**
* \addtogroup pw_link
* \{
*/
#define PW_TYPE_INTERFACE_Link PW_TYPE_INFO_INTERFACE_BASE "Link" #define PW_TYPE_INTERFACE_Link PW_TYPE_INFO_INTERFACE_BASE "Link"
#define PW_VERSION_LINK 3 #define PW_VERSION_LINK 3
@ -50,7 +65,7 @@ enum pw_link_state {
PW_LINK_STATE_ACTIVE = 4, /**< the link is active */ PW_LINK_STATE_ACTIVE = 4, /**< the link is active */
}; };
/** Convert a \ref pw_link_state to a readable string \memberof pw_link */ /** Convert a \ref pw_link_state to a readable string */
const char * pw_link_state_as_string(enum pw_link_state state); const char * pw_link_state_as_string(enum pw_link_state state);
/** The link information. Extra information can be added in later versions \memberof pw_introspect */ /** The link information. Extra information can be added in later versions \memberof pw_introspect */
struct pw_link_info { struct pw_link_info {
@ -118,6 +133,10 @@ struct pw_link_methods {
#define pw_link_add_listener(c,...) pw_link_method(c,add_listener,0,__VA_ARGS__) #define pw_link_add_listener(c,...) pw_link_method(c,add_listener,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -42,7 +42,6 @@ static struct spa_log *global_log = &default_log.log;
/** Set the global log interface /** Set the global log interface
* \param log the global log to set * \param log the global log to set
* \memberof pw_log
*/ */
SPA_EXPORT SPA_EXPORT
void pw_log_set(struct spa_log *log) void pw_log_set(struct spa_log *log)
@ -58,7 +57,6 @@ bool pw_log_is_default(void)
/** Get the global log interface /** Get the global log interface
* \return the global log * \return the global log
* \memberof pw_log
*/ */
SPA_EXPORT SPA_EXPORT
struct spa_log *pw_log_get(void) struct spa_log *pw_log_get(void)
@ -68,7 +66,6 @@ struct spa_log *pw_log_get(void)
/** Set the global log level /** Set the global log level
* \param level the new log level * \param level the new log level
* \memberof pw_log
*/ */
SPA_EXPORT SPA_EXPORT
void pw_log_set_level(enum spa_log_level level) void pw_log_set_level(enum spa_log_level level)
@ -85,7 +82,6 @@ void pw_log_set_level(enum spa_log_level level)
* \param fmt the printf style format * \param fmt the printf style format
* \param ... printf style arguments to log * \param ... printf style arguments to log
* *
* \memberof pw_log
*/ */
SPA_EXPORT SPA_EXPORT
void void
@ -113,7 +109,6 @@ pw_log_log(enum spa_log_level level,
* \param fmt the printf style format * \param fmt the printf style format
* \param args a va_list of arguments * \param args a va_list of arguments
* *
* \memberof pw_log
*/ */
SPA_EXPORT SPA_EXPORT
void void
@ -135,32 +130,27 @@ pw_log_logv(enum spa_log_level level,
* Log an error message * Log an error message
* \param format a printf style format * \param format a printf style format
* \param ... printf style arguments * \param ... printf style arguments
* \memberof pw_log
*/ */
/** \fn void pw_log_warn (const char *format, ...) /** \fn void pw_log_warn (const char *format, ...)
* Log a warning message * Log a warning message
* \param format a printf style format * \param format a printf style format
* \param ... printf style arguments * \param ... printf style arguments
* \memberof pw_log
*/ */
/** \fn void pw_log_info (const char *format, ...) /** \fn void pw_log_info (const char *format, ...)
* Log an info message * Log an info message
* \param format a printf style format * \param format a printf style format
* \param ... printf style arguments * \param ... printf style arguments
* \memberof pw_log
*/ */
/** \fn void pw_log_debug (const char *format, ...) /** \fn void pw_log_debug (const char *format, ...)
* Log a debug message * Log a debug message
* \param format a printf style format * \param format a printf style format
* \param ... printf style arguments * \param ... printf style arguments
* \memberof pw_log
*/ */
/** \fn void pw_log_trace (const char *format, ...) /** \fn void pw_log_trace (const char *format, ...)
* Log a trace message. Trace messages may be generated from * Log a trace message. Trace messages may be generated from
* \param format a printf style format * \param format a printf style format
* \param ... printf style arguments * \param ... printf style arguments
* realtime threads * realtime threads
* \memberof pw_log
*/ */
struct log_ctx { struct log_ctx {

View file

@ -31,15 +31,19 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_log /** \defgroup pw_log Logging
* *
* Logging functions of PipeWire * \brief Logging functions of PipeWire
* *
* Logging is performed to stdout and stderr. Trace logging is performed * 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 * in a lockfree ringbuffer and written out from the main thread as to not
* block the realtime threads. * block the realtime threads.
*/ */
/**
* \addtogroup pw_array
* \{
*/
/** The global log level */ /** The global log level */
extern enum spa_log_level pw_log_level; extern enum spa_log_level pw_log_level;
@ -70,7 +74,7 @@ pw_log_logv(enum spa_log_level level,
const char *fmt, va_list args) SPA_PRINTF_FUNC(5, 0); const char *fmt, va_list args) SPA_PRINTF_FUNC(5, 0);
/** Check if a loglevel is enabled \memberof pw_log */ /** Check if a loglevel is enabled */
#define pw_log_level_enabled(lev) (pw_log_level >= (lev)) #define pw_log_level_enabled(lev) (pw_log_level >= (lev))
#define pw_log(lev,...) \ #define pw_log(lev,...) \
@ -91,6 +95,10 @@ pw_log_logv(enum spa_log_level level,
#define pw_log_trace_fp(...) #define pw_log_trace_fp(...)
#endif #endif
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -32,12 +32,18 @@ extern "C" {
#include <spa/support/loop.h> #include <spa/support/loop.h>
#include <spa/utils/dict.h> #include <spa/utils/dict.h>
/** \class pw_loop /** \defgroup pw_loop Pipewire Loop
* *
* PipeWire loop object provides an implementation of * PipeWire loop object provides an implementation of
* the spa loop interfaces. It can be used to implement various * the spa loop interfaces. It can be used to implement various
* event loops. * event loops.
*/ */
/**
* \addtogroup pw_loop
* \{
*/
struct pw_loop { struct pw_loop {
struct spa_system *system; /**< system utils */ struct spa_system *system; /**< system utils */
struct spa_loop *loop; /**< wrapped loop */ struct spa_loop *loop; /**< wrapped loop */
@ -73,6 +79,10 @@ pw_loop_destroy(struct pw_loop *loop);
#define pw_loop_add_signal(l,...) spa_loop_utils_add_signal((l)->utils,__VA_ARGS__) #define pw_loop_add_signal(l,...) spa_loop_utils_add_signal((l)->utils,__VA_ARGS__)
#define pw_loop_destroy_source(l,...) spa_loop_utils_destroy_source((l)->utils,__VA_ARGS__) #define pw_loop_destroy_source(l,...) spa_loop_utils_destroy_source((l)->utils,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -81,7 +81,6 @@ error_cleanup:
/** Create a new main loop /** Create a new main loop
* \return a newly allocated \ref pw_main_loop * \return a newly allocated \ref pw_main_loop
* *
* \memberof pw_main_loop
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_main_loop *pw_main_loop_new(const struct spa_dict *props) struct pw_main_loop *pw_main_loop_new(const struct spa_dict *props)
@ -92,7 +91,6 @@ struct pw_main_loop *pw_main_loop_new(const struct spa_dict *props)
/** Destroy a main loop /** Destroy a main loop
* \param loop the main loop to destroy * \param loop the main loop to destroy
* *
* \memberof pw_main_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_main_loop_destroy(struct pw_main_loop *loop) void pw_main_loop_destroy(struct pw_main_loop *loop)
@ -128,7 +126,6 @@ struct pw_loop * pw_main_loop_get_loop(struct pw_main_loop *loop)
* *
* The call to \ref pw_main_loop_run() will return * The call to \ref pw_main_loop_run() will return
* *
* \memberof pw_main_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_main_loop_quit(struct pw_main_loop *loop) int pw_main_loop_quit(struct pw_main_loop *loop)
@ -143,7 +140,6 @@ int pw_main_loop_quit(struct pw_main_loop *loop)
* Start running \a loop. This function blocks until \ref pw_main_loop_quit() * Start running \a loop. This function blocks until \ref pw_main_loop_quit()
* has been called * has been called
* *
* \memberof pw_main_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_main_loop_run(struct pw_main_loop *loop) int pw_main_loop_run(struct pw_main_loop *loop)

View file

@ -29,13 +29,17 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_main_loop /** \defgroup pw_main_loop Pipewire Main-Loop Interface
*
* \brief PipeWire main-loop interface.
* *
* A main loop object * A main loop object
*/ */
/** A main loop object \memberof pw_main_loop */
/**
* \addtogroup pw_main_loop
* \{
*/
/** A main loop object */
struct pw_main_loop; struct pw_main_loop;
#include <pipewire/loop.h> #include <pipewire/loop.h>
@ -71,6 +75,10 @@ int pw_main_loop_run(struct pw_main_loop *loop);
/** Quit a main loop */ /** Quit a main loop */
int pw_main_loop_quit(struct pw_main_loop *loop); int pw_main_loop_quit(struct pw_main_loop *loop);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -35,18 +35,23 @@ extern "C" {
#include <spa/utils/defs.h> #include <spa/utils/defs.h>
#include <pipewire/array.h> #include <pipewire/array.h>
/** \class pw_map /** \defgroup pw_map Map Objects
* *
* A map that holds objects indexed by id * \brief A map that holds objects indexed by id
*/ */
/** An entry in the map \memberof pw_map */ /**
* \addtogroup pw_map
* \{
*/
/** An entry in the map */
union pw_map_item { union pw_map_item {
uint32_t next; /**< next free index */ uint32_t next; /**< next free index */
void *data; /**< data of this item, must be an even address */ void *data; /**< data of this item, must be an even address */
}; };
/** A map \memberof pw_map */ /** A map */
struct pw_map { struct pw_map {
struct pw_array items; /**< an array with the map items */ struct pw_array items; /**< an array with the map items */
uint32_t free_list; /**< the free items */ uint32_t free_list; /**< the free items */
@ -62,16 +67,15 @@ struct pw_map {
#define pw_map_has_item(m,id) (pw_map_check_id(m,id) && !pw_map_id_is_free(m, id)) #define pw_map_has_item(m,id) (pw_map_check_id(m,id) && !pw_map_id_is_free(m, id))
#define pw_map_lookup_unchecked(m,id) pw_map_get_item(m,id)->data #define pw_map_lookup_unchecked(m,id) pw_map_get_item(m,id)->data
/** Convert an id to a pointer that can be inserted into the map \memberof pw_map */ /** Convert an id to a pointer that can be inserted into the map */
#define PW_MAP_ID_TO_PTR(id) (SPA_UINT32_TO_PTR((id)<<1)) #define PW_MAP_ID_TO_PTR(id) (SPA_UINT32_TO_PTR((id)<<1))
/** Convert a pointer to an id that can be retrieved from the map \memberof pw_map */ /** Convert a pointer to an id that can be retrieved from the map */
#define PW_MAP_PTR_TO_ID(p) (SPA_PTR_TO_UINT32(p)>>1) #define PW_MAP_PTR_TO_ID(p) (SPA_PTR_TO_UINT32(p)>>1)
/** Initialize a map /** Initialize a map
* \param map the map to initialize * \param map the map to initialize
* \param size the initial size of the map * \param size the initial size of the map
* \param extend the amount to bytes to grow the map with when needed * \param extend the amount to bytes to grow the map with when needed
* \memberof pw_map
*/ */
static inline void pw_map_init(struct pw_map *map, size_t size, size_t extend) static inline void pw_map_init(struct pw_map *map, size_t size, size_t extend)
{ {
@ -82,7 +86,6 @@ static inline void pw_map_init(struct pw_map *map, size_t size, size_t extend)
/** Clear a map /** Clear a map
* \param map the map to clear * \param map the map to clear
* \memberof pw_map
*/ */
static inline void pw_map_clear(struct pw_map *map) static inline void pw_map_clear(struct pw_map *map)
{ {
@ -100,7 +103,6 @@ static inline void pw_map_reset(struct pw_map *map)
* \param data the item to add * \param data the item to add
* \return the id where the item was inserted or SPA_ID_INVALID when the * \return the id where the item was inserted or SPA_ID_INVALID when the
* item can not be inserted. * item can not be inserted.
* \memberof pw_map
*/ */
static inline uint32_t pw_map_insert_new(struct pw_map *map, void *data) static inline uint32_t pw_map_insert_new(struct pw_map *map, void *data)
{ {
@ -128,7 +130,6 @@ static inline uint32_t pw_map_insert_new(struct pw_map *map, void *data)
* \param data the data to insert * \param data the data to insert
* \return 0 on success, -ENOSPC value when the index is invalid or a < 0 * \return 0 on success, -ENOSPC value when the index is invalid or a < 0
* errno value. * errno value.
* \memberof pw_map
*/ */
static inline int pw_map_insert_at(struct pw_map *map, uint32_t id, void *data) static inline int pw_map_insert_at(struct pw_map *map, uint32_t id, void *data)
{ {
@ -152,7 +153,6 @@ static inline int pw_map_insert_at(struct pw_map *map, uint32_t id, void *data)
/** Remove an item at index /** Remove an item at index
* \param map the map to remove from * \param map the map to remove from
* \param id the index to remove * \param id the index to remove
* \memberof pw_map
*/ */
static inline void pw_map_remove(struct pw_map *map, uint32_t id) static inline void pw_map_remove(struct pw_map *map, uint32_t id)
{ {
@ -164,7 +164,6 @@ static inline void pw_map_remove(struct pw_map *map, uint32_t id)
* \param map the map to use * \param map the map to use
* \param id the index to look at * \param id the index to look at
* \return the item at \a id or NULL when no such item exists * \return the item at \a id or NULL when no such item exists
* \memberof pw_map
*/ */
static inline void *pw_map_lookup(struct pw_map *map, uint32_t id) static inline void *pw_map_lookup(struct pw_map *map, uint32_t id)
{ {
@ -183,7 +182,6 @@ static inline void *pw_map_lookup(struct pw_map *map, uint32_t id)
* iteration ends and the result is returned. * iteration ends and the result is returned.
* \param data data to pass to \a func * \param data data to pass to \a func
* \return the result of the last call to \a func or 0 when all callbacks returned 0. * \return the result of the last call to \a func or 0 when all callbacks returned 0.
* \memberof pw_map
*/ */
static inline int pw_map_for_each(struct pw_map *map, static inline int pw_map_for_each(struct pw_map *map,
int (*func) (void *item_data, void *data), void *data) int (*func) (void *item_data, void *data), void *data)
@ -199,6 +197,10 @@ static inline int pw_map_for_each(struct pw_map *map,
return res; return res;
} }
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -31,7 +31,16 @@
extern "C" { extern "C" {
#endif #endif
/** Flags passed to \ref pw_mempool_alloc() \memberof pw_memblock */ /** \defgroup pw_memblock Memory Blocks
*
*/
/**
* \addtogroup pw_memblock
* \{
*/
/** Flags passed to \ref pw_mempool_alloc() */
enum pw_memblock_flags { enum pw_memblock_flags {
PW_MEMBLOCK_FLAG_NONE = 0, PW_MEMBLOCK_FLAG_NONE = 0,
PW_MEMBLOCK_FLAG_READABLE = (1 << 0), /**< memory is readable */ PW_MEMBLOCK_FLAG_READABLE = (1 << 0), /**< memory is readable */
@ -57,14 +66,14 @@ enum pw_memmap_flags {
struct pw_memchunk; struct pw_memchunk;
/** \class pw_memblock /**
* *
* A memory pool is a collection of pw_memblocks */ * A memory pool is a collection of pw_memblocks */
struct pw_mempool { struct pw_mempool {
struct pw_properties *props; struct pw_properties *props;
}; };
/** \class pw_memblock /**
* Memory block structure */ * Memory block structure */
struct pw_memblock { struct pw_memblock {
struct pw_mempool *pool; /**< owner pool */ struct pw_mempool *pool; /**< owner pool */
@ -192,6 +201,9 @@ static inline void pw_map_range_init(struct pw_map_range *range,
range->size = SPA_ROUND_UP_N(range->start + size, page_size); range->size = SPA_ROUND_UP_N(range->start + size, page_size);
} }
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -39,7 +39,7 @@ extern "C" {
#define PW_VERSION_MODULE 3 #define PW_VERSION_MODULE 3
struct pw_module; struct pw_module;
/** The module information. Extra information can be added in later versions \memberof pw_introspect */ /** The module information. Extra information can be added in later versions */
struct pw_module_info { struct pw_module_info {
uint32_t id; /**< id of the global */ uint32_t id; /**< id of the global */
const char *name; /**< name of the module */ const char *name; /**< name of the module */
@ -51,12 +51,12 @@ struct pw_module_info {
struct spa_dict *props; /**< extra properties */ struct spa_dict *props; /**< extra properties */
}; };
/** Update and existing \ref pw_module_info with \a update \memberof pw_introspect */ /** Update and existing \ref pw_module_info with \a update */
struct pw_module_info * struct pw_module_info *
pw_module_info_update(struct pw_module_info *info, pw_module_info_update(struct pw_module_info *info,
const struct pw_module_info *update); const struct pw_module_info *update);
/** Free a \ref pw_module_info \memberof pw_introspect */ /** Free a \ref pw_module_info */
void pw_module_info_free(struct pw_module_info *info); void pw_module_info_free(struct pw_module_info *info);
#define PW_MODULE_EVENT_INFO 0 #define PW_MODULE_EVENT_INFO 0

View file

@ -39,6 +39,14 @@ extern "C" {
#include <pipewire/proxy.h> #include <pipewire/proxy.h>
/** \defgroup pw_node Pipewire Node
*
*/
/**
* \addtogroup pw_node
* \{
*/
#define PW_TYPE_INTERFACE_Node PW_TYPE_INFO_INTERFACE_BASE "Node" #define PW_TYPE_INTERFACE_Node PW_TYPE_INFO_INTERFACE_BASE "Node"
#define PW_VERSION_NODE 3 #define PW_VERSION_NODE 3
@ -55,7 +63,7 @@ enum pw_node_state {
PW_NODE_STATE_RUNNING = 3, /**< the node is running */ PW_NODE_STATE_RUNNING = 3, /**< the node is running */
}; };
/** Convert a \ref pw_node_state to a readable string \memberof pw_node */ /** Convert a \ref pw_node_state to a readable string */
const char * pw_node_state_as_string(enum pw_node_state state); const char * pw_node_state_as_string(enum pw_node_state state);
/** The node information. Extra information can be added in later versions \memberof pw_introspect */ /** The node information. Extra information can be added in later versions \memberof pw_introspect */
@ -193,6 +201,10 @@ struct pw_node_methods {
#define pw_node_set_param(c,...) pw_node_method(c,set_param,0,__VA_ARGS__) #define pw_node_set_param(c,...) pw_node_method(c,set_param,0,__VA_ARGS__)
#define pw_node_send_command(c,...) pw_node_method(c,send_command,0,__VA_ARGS__) #define pw_node_send_command(c,...) pw_node_method(c,send_command,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -31,9 +31,7 @@ extern "C" {
#include <spa/utils/defs.h> #include <spa/utils/defs.h>
/** \class pw_permission /** \defgroup pw_permission Pipewire Permission
*
* \brief a PipeWire permission
* *
* Permissions are kept for a client and describe what the client is * Permissions are kept for a client and describe what the client is
* allowed to do with an object. * allowed to do with an object.
@ -41,6 +39,11 @@ extern "C" {
* See \ref page_core_api * See \ref page_core_api
*/ */
/**
* \addtogroup pw_permission
* \{
*/
#define PW_PERM_R 0400 /**< object can be seen and events can be received */ #define PW_PERM_R 0400 /**< object can be seen and events can be received */
#define PW_PERM_W 0200 /**< methods can be called that modify the object */ #define PW_PERM_W 0200 /**< methods can be called that modify the object */
#define PW_PERM_X 0100 /**< methods can be called on the object. The W flag must be #define PW_PERM_X 0100 /**< methods can be called on the object. The W flag must be
@ -72,6 +75,10 @@ struct pw_permission {
(permission) & PW_PERM_X ? 'x' : '-', \ (permission) & PW_PERM_X ? 'x' : '-', \
(permission) & PW_PERM_M ? 'm' : '-' (permission) & PW_PERM_M ? 'm' : '-'
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -473,7 +473,6 @@ static struct spa_log *load_journal_logger(struct support *support)
* *
* The environment variable \a PIPEWIRE_DEBUG * The environment variable \a PIPEWIRE_DEBUG
* *
* \memberof pw_pipewire
*/ */
SPA_EXPORT SPA_EXPORT
void pw_init(int *argc, char **argv[]) void pw_init(int *argc, char **argv[])
@ -581,7 +580,6 @@ void pw_deinit(void)
* Debugging categories can be enabled by using the PIPEWIRE_DEBUG * Debugging categories can be enabled by using the PIPEWIRE_DEBUG
* environment variable * environment variable
* *
* \memberof pw_pipewire
*/ */
SPA_EXPORT SPA_EXPORT
bool pw_debug_is_category_enabled(const char *name) bool pw_debug_is_category_enabled(const char *name)
@ -598,7 +596,7 @@ bool pw_debug_is_category_enabled(const char *name)
return false; return false;
} }
/** Get the application name \memberof pw_pipewire */ /** Get the application name */
SPA_EXPORT SPA_EXPORT
const char *pw_get_application_name(void) const char *pw_get_application_name(void)
{ {
@ -606,7 +604,7 @@ const char *pw_get_application_name(void)
return NULL; return NULL;
} }
/** Get the program name \memberof pw_pipewire */ /** Get the program name */
SPA_EXPORT SPA_EXPORT
const char *pw_get_prgname(void) const char *pw_get_prgname(void)
{ {
@ -637,7 +635,7 @@ const char *pw_get_prgname(void)
return prgname; return prgname;
} }
/** Get the user name \memberof pw_pipewire */ /** Get the user name */
SPA_EXPORT SPA_EXPORT
const char *pw_get_user_name(void) const char *pw_get_user_name(void)
{ {
@ -649,7 +647,7 @@ const char *pw_get_user_name(void)
return NULL; return NULL;
} }
/** Get the host name \memberof pw_pipewire */ /** Get the host name */
SPA_EXPORT SPA_EXPORT
const char *pw_get_host_name(void) const char *pw_get_host_name(void)
{ {
@ -672,7 +670,6 @@ bool pw_in_valgrind(void)
* *
* Make a new PipeWire client name that can be used to construct a remote. * Make a new PipeWire client name that can be used to construct a remote.
* *
* \memberof pw_pipewire
*/ */
SPA_EXPORT SPA_EXPORT
const char *pw_get_client_name(void) const char *pw_get_client_name(void)
@ -691,7 +688,7 @@ const char *pw_get_client_name(void)
} }
} }
/** Reverse the direction \memberof pw_pipewire */ /** Reverse the direction */
SPA_EXPORT SPA_EXPORT
enum pw_direction pw_direction_reverse(enum pw_direction direction) enum pw_direction pw_direction_reverse(enum pw_direction direction)
{ {

View file

@ -109,9 +109,13 @@ extern "C" {
* + `connection`: to log connection messages * + `connection`: to log connection messages
*/ */
/** \class pw_pipewire /** \defgroup pw_pipewire PipeWire initialization and infrastructure functions
* */
* \brief PipeWire initialization and infrastructure functions
/**
* \addtogroup pw_pipewire
* \{
*/ */
void void
pw_init(int *argc, char **argv[]); pw_init(int *argc, char **argv[]);
@ -154,6 +158,10 @@ struct spa_handle *pw_load_spa_handle(const char *lib,
int pw_unload_spa_handle(struct spa_handle *handle); int pw_unload_spa_handle(struct spa_handle *handle);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -38,6 +38,15 @@ extern "C" {
#include <pipewire/proxy.h> #include <pipewire/proxy.h>
/** \defgroup pw_port Pipewire Port
*
*/
/**
* \addtogroup pw_port
* \{
*/
#define PW_TYPE_INTERFACE_Port PW_TYPE_INFO_INTERFACE_BASE "Port" #define PW_TYPE_INTERFACE_Port PW_TYPE_INFO_INTERFACE_BASE "Port"
#define PW_VERSION_PORT 3 #define PW_VERSION_PORT 3
@ -48,16 +57,9 @@ struct pw_port;
#define PW_DIRECTION_INPUT SPA_DIRECTION_INPUT #define PW_DIRECTION_INPUT SPA_DIRECTION_INPUT
#define PW_DIRECTION_OUTPUT SPA_DIRECTION_OUTPUT #define PW_DIRECTION_OUTPUT SPA_DIRECTION_OUTPUT
/** Convert a \ref pw_direction to a readable string \memberof pw_introspect */ /** Convert a \ref pw_direction to a readable string */
const char * pw_direction_as_string(enum pw_direction direction); const char * pw_direction_as_string(enum pw_direction direction);
/** \class pw_introspect
*
* The introspection methods and structures are used to get information
* about the object in the PipeWire server
*/
struct pw_port_info { struct pw_port_info {
uint32_t id; /**< id of the global */ uint32_t id; /**< id of the global */
enum pw_direction direction; /**< port direction */ enum pw_direction direction; /**< port direction */
@ -162,6 +164,10 @@ struct pw_port_methods {
#define pw_port_subscribe_params(c,...) pw_port_method(c,subscribe_params,0,__VA_ARGS__) #define pw_port_subscribe_params(c,...) pw_port_method(c,subscribe_params,0,__VA_ARGS__)
#define pw_port_enum_params(c,...) pw_port_method(c,enum_params,0,__VA_ARGS__) #define pw_port_enum_params(c,...) pw_port_method(c,enum_params,0,__VA_ARGS__)
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -33,15 +33,18 @@ extern "C" {
#include <spa/utils/dict.h> #include <spa/utils/dict.h>
/** \class pw_properties /** \defgroup pw_properties Key-Value pairs
*
* \brief A collection of key/value pairs
* *
* Properties are used to pass around arbitrary key/value pairs. * Properties are used to pass around arbitrary key/value pairs.
* Both keys and values are strings which keeps things simple. * Both keys and values are strings which keeps things simple.
* Encoding of arbitrary values should be done by using a string * Encoding of arbitrary values should be done by using a string
* serialization such as base64 for binary blobs. * serialization such as base64 for binary blobs.
*/ */
/**
* \addtogroup pw_properties
* \{
*/
struct pw_properties { struct pw_properties {
struct spa_dict dict; /**< dictionary of key/values */ struct spa_dict dict; /**< dictionary of key/values */
uint32_t flags; /**< extra flags */ uint32_t flags; /**< extra flags */
@ -120,6 +123,10 @@ static inline double pw_properties_parse_double(const char *value) {
return strtod(value, NULL); return strtod(value, NULL);
} }
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -31,6 +31,16 @@ extern "C" {
#include <spa/utils/list.h> #include <spa/utils/list.h>
/** \defgroup pw_protocol PipeWire Protocol
*
* \brief Manages protocols and their implementation
*/
/**
* \addtogroup pw_protocol
* \{
*/
struct pw_protocol; struct pw_protocol;
#include <pipewire/context.h> #include <pipewire/context.h>
@ -133,10 +143,6 @@ void pw_protocol_add_listener(struct pw_protocol *protocol,
const struct pw_protocol_events *events, const struct pw_protocol_events *events,
void *data); void *data);
/** \class pw_protocol
*
* \brief Manages protocols and their implementation
*/
int pw_protocol_add_marshal(struct pw_protocol *protocol, int pw_protocol_add_marshal(struct pw_protocol *protocol,
const struct pw_protocol_marshal *marshal); const struct pw_protocol_marshal *marshal);
@ -145,6 +151,10 @@ pw_protocol_get_marshal(struct pw_protocol *protocol, const char *type, uint32_t
struct pw_protocol * pw_context_find_protocol(struct pw_context *context, const char *name); struct pw_protocol * pw_context_find_protocol(struct pw_context *context, const char *name);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -84,8 +84,6 @@ error:
* proxy object will have an id assigned from the client id space. * proxy object will have an id assigned from the client id space.
* *
* \sa pw_core * \sa pw_core
*
* \memberof pw_proxy
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_proxy *pw_proxy_new(struct pw_proxy *factory, struct pw_proxy *pw_proxy_new(struct pw_proxy *factory,
@ -226,7 +224,6 @@ static inline void remove_from_map(struct pw_proxy *proxy)
* *
* \note This is normally called by \ref pw_core when the server * \note This is normally called by \ref pw_core when the server
* decides to destroy the server side object * decides to destroy the server side object
* \memberof pw_proxy
*/ */
SPA_EXPORT SPA_EXPORT
void pw_proxy_destroy(struct pw_proxy *proxy) void pw_proxy_destroy(struct pw_proxy *proxy)

View file

@ -44,7 +44,7 @@ extern "C" {
* *
* A proxy for a remote core object can be obtained by making * A proxy for a remote core object can be obtained by making
* a remote connection with \ref pw_context_connect. * a remote connection with \ref pw_context_connect.
* See \ref pw_page_remote_api * See \ref pw_proxy
* *
* Some methods on proxy object allow creation of more proxy objects or * Some methods on proxy object allow creation of more proxy objects or
* create a binding between a local proxy and global resource. * create a binding between a local proxy and global resource.
@ -87,7 +87,7 @@ extern "C" {
* associated to the proxy. * associated to the proxy.
*/ */
/** \class pw_proxy /** \defgroup pw_proxy Proxy Object
* *
* \brief Represents an object on the client side. * \brief Represents an object on the client side.
* *
@ -98,6 +98,11 @@ extern "C" {
* *
* See \ref page_proxy * See \ref page_proxy
*/ */
/**
* \addtogroup pw_proxy
* \{
*/
struct pw_proxy; struct pw_proxy;
#include <pipewire/protocol.h> #include <pipewire/protocol.h>
@ -200,6 +205,10 @@ int pw_proxy_install_marshal(struct pw_proxy *proxy, bool implementor);
_res; \ _res; \
}) })
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -31,9 +31,9 @@ extern "C" {
#include <spa/utils/hook.h> #include <spa/utils/hook.h>
/** \page page_resource Resource /** \defgroup pw_resource Resources
* *
* \section sec_page_resource Overview * \brief Client owned objects
* *
* Resources represent objects owned by a \ref pw_impl_client. They are * 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 * the result of binding to a global resource or by calling API that
@ -47,14 +47,10 @@ extern "C" {
* *
*/ */
/** \class pw_resource
* /**
* \brief Client owned objects * \addtogroup pw_resource
* * \{
* Resources are objects owned by a client and are destroyed when the
* client disappears.
*
* See also \ref page_resource
*/ */
struct pw_resource; struct pw_resource;
@ -161,6 +157,12 @@ int pw_resource_install_marshal(struct pw_resource *resource, bool implementor);
_res; \ _res; \
}) })
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -137,21 +137,26 @@ extern "C" {
* *
* Use \ref pw_stream_disconnect() to disconnect a stream after use. * Use \ref pw_stream_disconnect() to disconnect a stream after use.
*/ */
/** \class pw_stream /** \defgroup pw_stream Stream Object
* *
* \brief PipeWire stream object class * \brief PipeWire stream objects
* *
* The stream object provides a convenient way to send and * The stream object provides a convenient way to send and
* receive data streams from/to PipeWire. * receive data streams from/to PipeWire.
* *
* See also \ref page_streams and \ref page_context_api * See also \ref page_streams and \ref page_core_api
*/
/**
* \addtogroup pw_stream
* \{
*/ */
struct pw_stream; struct pw_stream;
#include <spa/buffer/buffer.h> #include <spa/buffer/buffer.h>
#include <spa/param/param.h> #include <spa/param/param.h>
/** \enum pw_stream_state The state of a stream \memberof pw_stream */ /** \enum pw_stream_state The state of a stream */
enum pw_stream_state { enum pw_stream_state {
PW_STREAM_STATE_ERROR = -1, /**< the stream is in error */ PW_STREAM_STATE_ERROR = -1, /**< the stream is in error */
PW_STREAM_STATE_UNCONNECTED = 0, /**< unconnected */ PW_STREAM_STATE_UNCONNECTED = 0, /**< unconnected */
@ -178,7 +183,7 @@ struct pw_stream_control {
uint32_t max_values; /**< max values that can be set on this control */ uint32_t max_values; /**< max values that can be set on this control */
}; };
/** A time structure \memberof pw_stream */ /** A time structure */
struct pw_time { struct pw_time {
int64_t now; /**< the monotonic time in nanoseconds */ int64_t now; /**< the monotonic time in nanoseconds */
struct spa_fraction rate; /**< the rate of \a ticks and delay */ struct spa_fraction rate; /**< the rate of \a ticks and delay */
@ -229,10 +234,10 @@ struct pw_stream_events {
}; };
/** Convert a stream state to a readable string \memberof pw_stream */ /** Convert a stream state to a readable string */
const char * pw_stream_state_as_string(enum pw_stream_state state); const char * pw_stream_state_as_string(enum pw_stream_state state);
/** \enum pw_stream_flags Extra flags that can be used in \ref pw_stream_connect() \memberof pw_stream */ /** \enum pw_stream_flags Extra flags that can be used in \ref pw_stream_connect() */
enum pw_stream_flags { enum pw_stream_flags {
PW_STREAM_FLAG_NONE = 0, /**< no flags */ PW_STREAM_FLAG_NONE = 0, /**< no flags */
PW_STREAM_FLAG_AUTOCONNECT = (1 << 0), /**< try to automatically connect PW_STREAM_FLAG_AUTOCONNECT = (1 << 0), /**< try to automatically connect
@ -255,7 +260,7 @@ enum pw_stream_flags {
* data of the buffer should be set */ * data of the buffer should be set */
}; };
/** Create a new unconneced \ref pw_stream \memberof pw_stream /** Create a new unconneced \ref pw_stream
* \return a newly allocated \ref pw_stream */ * \return a newly allocated \ref pw_stream */
struct pw_stream * struct pw_stream *
pw_stream_new(struct pw_core *core, /**< a \ref pw_core */ pw_stream_new(struct pw_core *core, /**< a \ref pw_core */
@ -269,7 +274,7 @@ pw_stream_new_simple(struct pw_loop *loop, /**< a \ref pw_loop to use */
const struct pw_stream_events *events, /**< stream events */ const struct pw_stream_events *events, /**< stream events */
void *data /**< data passed to events */); void *data /**< data passed to events */);
/** Destroy a stream \memberof pw_stream */ /** Destroy a stream */
void pw_stream_destroy(struct pw_stream *stream); void pw_stream_destroy(struct pw_stream *stream);
void pw_stream_add_listener(struct pw_stream *stream, void pw_stream_add_listener(struct pw_stream *stream,
@ -287,7 +292,7 @@ const struct pw_properties *pw_stream_get_properties(struct pw_stream *stream);
int pw_stream_update_properties(struct pw_stream *stream, const struct spa_dict *dict); int pw_stream_update_properties(struct pw_stream *stream, const struct spa_dict *dict);
/** Connect a stream for input or output on \a port_path. \memberof pw_stream /** Connect a stream for input or output on \a port_path.
* \return 0 on success < 0 on error. * \return 0 on success < 0 on error.
* *
* You should connect to the process event and use pw_stream_dequeue_buffer() * You should connect to the process event and use pw_stream_dequeue_buffer()
@ -304,12 +309,12 @@ pw_stream_connect(struct pw_stream *stream, /**< a \ref pw_stream */
* formats. */ * formats. */
uint32_t n_params /**< number of items in \a params */); uint32_t n_params /**< number of items in \a params */);
/** Get the node ID of the stream. \memberof pw_stream /** Get the node ID of the stream.
* \return node ID. */ * \return node ID. */
uint32_t uint32_t
pw_stream_get_node_id(struct pw_stream *stream); pw_stream_get_node_id(struct pw_stream *stream);
/** Disconnect \a stream \memberof pw_stream */ /** Disconnect \a stream */
int pw_stream_disconnect(struct pw_stream *stream); int pw_stream_disconnect(struct pw_stream *stream);
/** Set the stream in error state */ /** Set the stream in error state */
@ -318,7 +323,7 @@ int pw_stream_set_error(struct pw_stream *stream, /**< a \ref pw_stream */
const char *error, /**< an error message */ const char *error, /**< an error message */
...) SPA_PRINTF_FUNC(3, 4); ...) SPA_PRINTF_FUNC(3, 4);
/** Complete the negotiation process with result code \a res \memberof pw_stream /** Complete the negotiation process with result code \a res
* *
* This function should be called after notification of the format. * This function should be called after notification of the format.
@ -334,7 +339,7 @@ pw_stream_update_params(struct pw_stream *stream, /**< a \ref pw_stream */
/** Set control values */ /** Set control values */
int pw_stream_set_control(struct pw_stream *stream, uint32_t id, uint32_t n_values, float *values, ...); int pw_stream_set_control(struct pw_stream *stream, uint32_t id, uint32_t n_values, float *values, ...);
/** Query the time on the stream \memberof pw_stream */ /** Query the time on the stream */
int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time); int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time);
/** Get a buffer that can be filled for playback streams or consumed /** Get a buffer that can be filled for playback streams or consumed
@ -344,13 +349,17 @@ struct pw_buffer *pw_stream_dequeue_buffer(struct pw_stream *stream);
/** Submit a buffer for playback or recycle a buffer for capture. */ /** Submit a buffer for playback or recycle a buffer for capture. */
int pw_stream_queue_buffer(struct pw_stream *stream, struct pw_buffer *buffer); int pw_stream_queue_buffer(struct pw_stream *stream, struct pw_buffer *buffer);
/** Activate or deactivate the stream \memberof pw_stream */ /** Activate or deactivate the stream */
int pw_stream_set_active(struct pw_stream *stream, bool active); int pw_stream_set_active(struct pw_stream *stream, bool active);
/** Flush a stream. When \a drain is true, the drained callback will /** Flush a stream. When \a drain is true, the drained callback will
* be called when all data is played or recorded */ * be called when all data is played or recorded */
int pw_stream_flush(struct pw_stream *stream, bool drain); int pw_stream_flush(struct pw_stream *stream, bool drain);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -173,7 +173,6 @@ clean_this:
* After this function you should probably call pw_thread_loop_start() to * After this function you should probably call pw_thread_loop_start() to
* actually start the thread * actually start the thread
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_thread_loop *pw_thread_loop_new(const char *name, struct pw_thread_loop *pw_thread_loop_new(const char *name,
@ -195,7 +194,6 @@ struct pw_thread_loop *pw_thread_loop_new(const char *name,
* After this function you should probably call pw_thread_loop_start() to * After this function you should probably call pw_thread_loop_start() to
* actually start the thread * actually start the thread
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
struct pw_thread_loop *pw_thread_loop_new_full(struct pw_loop *loop, struct pw_thread_loop *pw_thread_loop_new_full(struct pw_loop *loop,
@ -204,7 +202,7 @@ struct pw_thread_loop *pw_thread_loop_new_full(struct pw_loop *loop,
return loop_new(loop, name, props); return loop_new(loop, name, props);
} }
/** Destroy a threaded loop \memberof pw_thread_loop */ /** Destroy a threaded loop */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_destroy(struct pw_thread_loop *loop) void pw_thread_loop_destroy(struct pw_thread_loop *loop)
{ {
@ -275,7 +273,6 @@ static void *do_loop(void *user_data)
* \param loop a \ref pw_thread_loop * \param loop a \ref pw_thread_loop
* \return 0 on success * \return 0 on success
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_thread_loop_start(struct pw_thread_loop *loop) int pw_thread_loop_start(struct pw_thread_loop *loop)
@ -298,7 +295,6 @@ int pw_thread_loop_start(struct pw_thread_loop *loop)
* *
* \param loop a \ref pw_thread_loop * \param loop a \ref pw_thread_loop
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_stop(struct pw_thread_loop *loop) void pw_thread_loop_stop(struct pw_thread_loop *loop)
@ -319,7 +315,6 @@ void pw_thread_loop_stop(struct pw_thread_loop *loop)
* *
* \param loop a \ref pw_thread_loop * \param loop a \ref pw_thread_loop
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_lock(struct pw_thread_loop *loop) void pw_thread_loop_lock(struct pw_thread_loop *loop)
@ -332,7 +327,6 @@ void pw_thread_loop_lock(struct pw_thread_loop *loop)
* *
* \param loop a \ref pw_thread_loop * \param loop a \ref pw_thread_loop
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_unlock(struct pw_thread_loop *loop) void pw_thread_loop_unlock(struct pw_thread_loop *loop)
@ -349,7 +343,6 @@ void pw_thread_loop_unlock(struct pw_thread_loop *loop)
* Signal the thread of \a loop. If \a wait_for_accept is true, * Signal the thread of \a loop. If \a wait_for_accept is true,
* this function waits until \ref pw_thread_loop_accept() is called. * this function waits until \ref pw_thread_loop_accept() is called.
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept) void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept)
@ -371,7 +364,6 @@ void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept)
* *
* \param loop a \ref pw_thread_loop to signal * \param loop a \ref pw_thread_loop to signal
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_wait(struct pw_thread_loop *loop) void pw_thread_loop_wait(struct pw_thread_loop *loop)
@ -390,7 +382,6 @@ void pw_thread_loop_wait(struct pw_thread_loop *loop)
* \param wait_max_sec the maximum number of seconds to wait for a \ref pw_thread_loop_signal() * \param wait_max_sec the maximum number of seconds to wait for a \ref pw_thread_loop_signal()
* \return 0 on success or ETIMEDOUT on timeout or a negative errno value. * \return 0 on success or ETIMEDOUT on timeout or a negative errno value.
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_thread_loop_timed_wait(struct pw_thread_loop *loop, int wait_max_sec) int pw_thread_loop_timed_wait(struct pw_thread_loop *loop, int wait_max_sec)
@ -412,7 +403,6 @@ int pw_thread_loop_timed_wait(struct pw_thread_loop *loop, int wait_max_sec)
* \param timeout the time in nanoseconds to add to \a tp * \param timeout the time in nanoseconds to add to \a tp
* \return 0 on success or a negative errno value on error. * \return 0 on success or a negative errno value on error.
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_thread_loop_get_time(struct pw_thread_loop *loop, struct timespec *abstime, int64_t timeout) int pw_thread_loop_get_time(struct pw_thread_loop *loop, struct timespec *abstime, int64_t timeout)
@ -436,7 +426,6 @@ int pw_thread_loop_get_time(struct pw_thread_loop *loop, struct timespec *abstim
* \param abstime the absolute time to wait for a \ref pw_thread_loop_signal() * \param abstime the absolute time to wait for a \ref pw_thread_loop_signal()
* \return 0 on success or -ETIMEDOUT on timeout or a negative error value * \return 0 on success or -ETIMEDOUT on timeout or a negative error value
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
int pw_thread_loop_timed_wait_full(struct pw_thread_loop *loop, struct timespec *abstime) int pw_thread_loop_timed_wait_full(struct pw_thread_loop *loop, struct timespec *abstime)
@ -452,7 +441,6 @@ int pw_thread_loop_timed_wait_full(struct pw_thread_loop *loop, struct timespec
* *
* \param loop a \ref pw_thread_loop to signal * \param loop a \ref pw_thread_loop to signal
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_accept(struct pw_thread_loop *loop) void pw_thread_loop_accept(struct pw_thread_loop *loop)
@ -466,7 +454,6 @@ void pw_thread_loop_accept(struct pw_thread_loop *loop)
* \param loop a \ref pw_thread_loop to signal * \param loop a \ref pw_thread_loop to signal
* \return true when called inside the thread of \a loop. * \return true when called inside the thread of \a loop.
* *
* \memberof pw_thread_loop
*/ */
SPA_EXPORT SPA_EXPORT
bool pw_thread_loop_in_thread(struct pw_thread_loop *loop) bool pw_thread_loop_in_thread(struct pw_thread_loop *loop)

View file

@ -80,9 +80,7 @@ extern "C" {
* All events and callbacks are called with the thread lock held. * All events and callbacks are called with the thread lock held.
* *
*/ */
/** \class pw_thread_loop /** \defgroup pw_thread_loop PipeWire Threaded Loop Object
*
* \brief PipeWire threaded loop object
* *
* The threaded loop object runs a \ref pw_loop in a separate thread * The threaded loop object runs a \ref pw_loop in a separate thread
* and ensures proper locking is done. * and ensures proper locking is done.
@ -92,6 +90,11 @@ extern "C" {
* *
* See also \ref page_thread_loop * See also \ref page_thread_loop
*/ */
/**
* \addtogroup pw_thread_loop
* \{
*/
struct pw_thread_loop; struct pw_thread_loop;
/** Thread loop events */ /** Thread loop events */
@ -161,6 +164,10 @@ void pw_thread_loop_accept(struct pw_thread_loop *loop);
/** Check if inside the thread */ /** Check if inside the thread */
bool pw_thread_loop_in_thread(struct pw_thread_loop *loop); bool pw_thread_loop_in_thread(struct pw_thread_loop *loop);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -31,6 +31,14 @@ extern "C" {
#include <spa/utils/type.h> #include <spa/utils/type.h>
/** \defgroup pw_type Pipewire Types
*/
/**
* \addtogroup pw_type
* \{
*/
enum { enum {
PW_TYPE_FIRST = SPA_TYPE_VENDOR_PipeWire, PW_TYPE_FIRST = SPA_TYPE_VENDOR_PipeWire,
}; };
@ -45,6 +53,10 @@ enum {
const struct spa_type_info * pw_type_info(void); const struct spa_type_info * pw_type_info(void);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -38,8 +38,6 @@
* Repeatedly call this function to split \a str into all substrings * Repeatedly call this function to split \a str into all substrings
* delimited by \a delimiter. \a state should be set to NULL on the first * delimited by \a delimiter. \a state should be set to NULL on the first
* invocation and passed to the function until NULL is returned. * invocation and passed to the function until NULL is returned.
*
* \memberof pw_utils
*/ */
SPA_EXPORT SPA_EXPORT
const char *pw_split_walk(const char *str, const char *delimiter, size_t * len, const char **state) const char *pw_split_walk(const char *str, const char *delimiter, size_t * len, const char **state)
@ -64,8 +62,6 @@ const char *pw_split_walk(const char *str, const char *delimiter, size_t * len,
* \param[out] n_tokens the number of tokens * \param[out] n_tokens the number of tokens
* \return a NULL terminated array of strings that should be * \return a NULL terminated array of strings that should be
* freed with \ref pw_free_strv. * freed with \ref pw_free_strv.
*
* \memberof pw_utils
*/ */
SPA_EXPORT SPA_EXPORT
char **pw_split_strv(const char *str, const char *delimiter, int max_tokens, int *n_tokens) char **pw_split_strv(const char *str, const char *delimiter, int max_tokens, int *n_tokens)
@ -98,8 +94,6 @@ char **pw_split_strv(const char *str, const char *delimiter, int max_tokens, int
* \param str a NULL terminated array of string * \param str a NULL terminated array of string
* *
* Free all the strings in the array and the array * Free all the strings in the array and the array
*
* \memberof pw_utils
*/ */
SPA_EXPORT SPA_EXPORT
void pw_free_strv(char **str) void pw_free_strv(char **str)
@ -117,8 +111,6 @@ void pw_free_strv(char **str)
* *
* Strip whitespace before and after \a str. \a str will be * Strip whitespace before and after \a str. \a str will be
* modified. * modified.
*
* \memberof pw_utils
*/ */
SPA_EXPORT SPA_EXPORT
char *pw_strip(char *str, const char *whitespace) char *pw_strip(char *str, const char *whitespace)

View file

@ -34,11 +34,16 @@ extern "C" {
#include <spa/utils/defs.h> #include <spa/utils/defs.h>
#include <spa/pod/pod.h> #include <spa/pod/pod.h>
/** \class pw_utils /** \defgroup pw_utils Pipewire Utility Functions
* *
* Various utility functions * Various utility functions
*/ */
/**
* \addtogroup pw_utils
* \{
*/
/** a function to destroy an item \memberof pw_utils */ /** a function to destroy an item \memberof pw_utils */
typedef void (*pw_destroy_t) (void *object); typedef void (*pw_destroy_t) (void *object);
@ -76,6 +81,10 @@ pw_strip(char *str, const char *whitespace);
}) })
#endif #endif
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View file

@ -94,7 +94,6 @@ static void process_work_queue(void *data, uint64_t count)
* \param loop the loop to use * \param loop the loop to use
* \return a newly allocated work queue * \return a newly allocated work queue
* *
* \memberof pw_work_queue
*/ */
struct pw_work_queue *pw_work_queue_new(struct pw_loop *loop) struct pw_work_queue *pw_work_queue_new(struct pw_loop *loop)
{ {
@ -129,7 +128,6 @@ error_free:
/** Destroy a work queue /** Destroy a work queue
* \param queue the work queue to destroy * \param queue the work queue to destroy
* *
* \memberof pw_work_queue
*/ */
void pw_work_queue_destroy(struct pw_work_queue *queue) void pw_work_queue_destroy(struct pw_work_queue *queue)
{ {
@ -158,7 +156,6 @@ void pw_work_queue_destroy(struct pw_work_queue *queue)
* \param func a work function * \param func a work function
* \param data passed to \a func * \param data passed to \a func
* *
* \memberof pw_work_queue
*/ */
SPA_EXPORT SPA_EXPORT
uint32_t uint32_t
@ -214,7 +211,6 @@ pw_work_queue_add(struct pw_work_queue *queue, void *obj, int res, pw_work_func_
* \param obj the owner object * \param obj the owner object
* \param id the wotk id to cancel * \param id the wotk id to cancel
* *
* \memberof pw_work_queue
*/ */
SPA_EXPORT SPA_EXPORT
int pw_work_queue_cancel(struct pw_work_queue *queue, void *obj, uint32_t id) int pw_work_queue_cancel(struct pw_work_queue *queue, void *obj, uint32_t id)
@ -246,7 +242,6 @@ int pw_work_queue_cancel(struct pw_work_queue *queue, void *obj, uint32_t id)
* \param seq the sequence number that completed * \param seq the sequence number that completed
* \param res 0 if the item was found, < 0 on error * \param res 0 if the item was found, < 0 on error
* *
* \memberof pw_work_queue
*/ */
SPA_EXPORT SPA_EXPORT
int pw_work_queue_complete(struct pw_work_queue *queue, void *obj, uint32_t seq, int res) int pw_work_queue_complete(struct pw_work_queue *queue, void *obj, uint32_t seq, int res)

View file

@ -29,9 +29,12 @@
extern "C" { extern "C" {
#endif #endif
/** \class pw_work_queue /** \defgroup pw_work_queue PipeWire Work Queue Object
* */
* PipeWire work queue object
/**
* \addtogroup pw_work_queue
* \{
*/ */
struct pw_work_queue; struct pw_work_queue;
@ -56,6 +59,10 @@ pw_work_queue_cancel(struct pw_work_queue *queue, void *obj, uint32_t id);
int int
pw_work_queue_complete(struct pw_work_queue *queue, void *obj, uint32_t seq, int res); pw_work_queue_complete(struct pw_work_queue *queue, void *obj, uint32_t seq, int res);
/**
* \}
*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif