X-Git-Url: https://code.delx.au/pulseaudio/blobdiff_plain/6faf38313e5f313cbcfe5c78af1dd310131798d2..529a5949fb8317ec4af7da23ab363119e56e1c27:/src/pulse/introspect.h diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h index f9d22b29..6ea45361 100644 --- a/src/pulse/introspect.h +++ b/src/pulse/introspect.h @@ -32,6 +32,7 @@ #include #include #include +#include #include /** \page introspect Server Query and Control @@ -46,11 +47,11 @@ * * \section query_sec Querying * - * All querying is done through callbacks. This design is necessary to + * All querying is done through callbacks. This approach is necessary to * maintain an asynchronous design. The client will request the information * and some time later, the server will respond with the desired data. * - * Some objects can have multiple entries at the server. When requesting all + * Some objects can have multiple instances on the server. When requesting all * of these at once, the callback will be called multiple times, once for * each object. When the list has been exhausted, the callback will be called * without an information structure and the eol parameter set to a positive @@ -59,18 +60,18 @@ * Note that even if a single object is requested, and not the entire list, * the terminating call will still be made. * - * If an error occurs, the callback will be called without and information + * If an error occurs, the callback will be invoked without an information * structure and eol set to a negative value.. * * Data members in the information structures are only valid during the * duration of the callback. If they are required after the callback is - * finished, a deep copy must be performed. + * finished, a deep copy of the information structure must be performed. * * \subsection server_subsec Server Information * * The server can be queried about its name, the environment it's running on * and the currently active global defaults. Calling - * pa_context_get_server_info() will get access to a pa_server_info structure + * pa_context_get_server_info() provides access to a pa_server_info structure * containing all of these. * * \subsection memstat_subsec Memory Usage @@ -81,7 +82,7 @@ * \subsection sinksrc_subsec Sinks and Sources * * The server can have an arbitrary number of sinks and sources. Each sink - * and source have both an index and a name associated with it. As such + * and source have both an index and a name associated with it. As such, * there are three ways to get access to them: * * \li By index - pa_context_get_sink_info_by_index() / @@ -143,8 +144,8 @@ * * \subsection sinksrc_subsec Sinks and Sources * - * The most common change one would want to do to sinks and sources is to - * modify the volume of the audio. Identical to how sinks and sources can + * The most common change one would want to apply to sinks and sources is to + * modify the volume of the audio. Identically to how sinks and sources can * be queried, there are two ways of identifying them: * * \li By index - pa_context_set_sink_volume_by_index() / @@ -163,9 +164,8 @@ * * If an application desires to modify the volume of just a single stream * (commonly one of its own streams), this can be done by setting the volume - * of its associated sink input, using pa_context_set_sink_input_volume(). - * - * There is no support for modifying the volume of source outputs. + * of its associated sink input or source output, using + * pa_context_set_sink_input_volume() or pa_context_set_source_output_volume(). * * It is also possible to remove sink inputs and source outputs, terminating * the streams associated with them: @@ -180,13 +180,15 @@ * * \subsection client_subsec Clients * - * The only operation supported on clients, is the possibility of kicking + * The only operation supported on clients is the possibility of kicking * them off the server using pa_context_kill_client(). */ /** \file * * Routines for daemon introspection. + * + * See also \subpage introspect */ PA_C_DECL_BEGIN @@ -199,7 +201,8 @@ PA_C_DECL_BEGIN typedef struct pa_sink_port_info { const char *name; /**< Name of this port */ const char *description; /**< Description of this port */ - uint32_t priority; /**< The higher this value is the more useful this port is as a default */ + uint32_t priority; /**< The higher this value is, the more useful this port is as a default. */ + int available; /**< A flags (see #pa_port_available), indicating availability status of this port. \since 2.0 */ } pa_sink_port_info; /** Stores information about sinks. Please note that this structure @@ -211,13 +214,13 @@ typedef struct pa_sink_info { const char *description; /**< Description of this sink */ pa_sample_spec sample_spec; /**< Sample spec of this sink */ pa_channel_map channel_map; /**< Channel map */ - uint32_t owner_module; /**< Index of the owning module of this sink, or PA_INVALID_INDEX */ + uint32_t owner_module; /**< Index of the owning module of this sink, or PA_INVALID_INDEX. */ pa_cvolume volume; /**< Volume of the sink */ int mute; /**< Mute switch of the sink */ - uint32_t monitor_source; /**< Index of the monitor source connected to this sink */ - const char *monitor_source_name; /**< The name of the monitor source */ + uint32_t monitor_source; /**< Index of the monitor source connected to this sink. */ + const char *monitor_source_name; /**< The name of the monitor source. */ pa_usec_t latency; /**< Length of queued audio in the output buffer. */ - const char *driver; /**< Driver name. */ + const char *driver; /**< Driver name */ pa_sink_flags_t flags; /**< Flags */ pa_proplist *proplist; /**< Property list \since 0.9.11 */ pa_usec_t configured_latency; /**< The latency this device has been configured to. \since 0.9.11 */ @@ -226,8 +229,10 @@ typedef struct pa_sink_info { uint32_t n_volume_steps; /**< Number of volume steps for sinks which do not support arbitrary volumes. \since 0.9.15 */ uint32_t card; /**< Card index, or PA_INVALID_INDEX. \since 0.9.15 */ uint32_t n_ports; /**< Number of entries in port array \since 0.9.16 */ - pa_sink_port_info** ports; /**< Array of available ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_ports \since 0.9.16 */ - pa_sink_port_info* active_port; /**< Pointer to active port in the array, or NULL \since 0.9.16 */ + pa_sink_port_info** ports; /**< Array of available ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_ports. \since 0.9.16 */ + pa_sink_port_info* active_port; /**< Pointer to active port in the array, or NULL. \since 0.9.16 */ + uint8_t n_formats; /**< Number of formats supported by the sink. \since 1.0 */ + pa_format_info **formats; /**< Array of formats supported by the sink. \since 1.0 */ } pa_sink_info; /** Callback prototype for pa_context_get_sink_info_by_name() and friends */ @@ -276,7 +281,8 @@ pa_operation* pa_context_set_sink_port_by_name(pa_context *c, const char*name, c typedef struct pa_source_port_info { const char *name; /**< Name of this port */ const char *description; /**< Description of this port */ - uint32_t priority; /**< The higher this value is the more useful this port is as a default */ + uint32_t priority; /**< The higher this value is, the more useful this port is as a default. */ + int available; /**< A flags (see #pa_port_available), indicating availability status of this port. \since 2.0 */ } pa_source_port_info; /** Stores information about sources. Please note that this structure @@ -288,11 +294,11 @@ typedef struct pa_source_info { const char *description; /**< Description of this source */ pa_sample_spec sample_spec; /**< Sample spec of this source */ pa_channel_map channel_map; /**< Channel map */ - uint32_t owner_module; /**< Owning module index, or PA_INVALID_INDEX */ + uint32_t owner_module; /**< Owning module index, or PA_INVALID_INDEX. */ pa_cvolume volume; /**< Volume of the source */ int mute; /**< Mute switch of the sink */ - uint32_t monitor_of_sink; /**< If this is a monitor source the index of the owning sink, otherwise PA_INVALID_INDEX */ - const char *monitor_of_sink_name; /**< Name of the owning sink, or PA_INVALID_INDEX */ + uint32_t monitor_of_sink; /**< If this is a monitor source, the index of the owning sink, otherwise PA_INVALID_INDEX. */ + const char *monitor_of_sink_name; /**< Name of the owning sink, or PA_INVALID_INDEX. */ pa_usec_t latency; /**< Length of filled record buffer of this source. */ const char *driver; /**< Driver name */ pa_source_flags_t flags; /**< Flags */ @@ -303,8 +309,10 @@ typedef struct pa_source_info { uint32_t n_volume_steps; /**< Number of volume steps for sources which do not support arbitrary volumes. \since 0.9.15 */ uint32_t card; /**< Card index, or PA_INVALID_INDEX. \since 0.9.15 */ uint32_t n_ports; /**< Number of entries in port array \since 0.9.16 */ - pa_source_port_info** ports; /**< Array of available ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_ports \since 0.9.16 */ - pa_source_port_info* active_port; /**< Pointer to active port in the array, or NULL \since 0.9.16 */ + pa_source_port_info** ports; /**< Array of available ports, or NULL. Array is terminated by an entry set to NULL. The number of entries is stored in n_ports. \since 0.9.16 */ + pa_source_port_info* active_port; /**< Pointer to active port in the array, or NULL. \since 0.9.16 */ + uint8_t n_formats; /**< Number of formats supported by the source. \since 1.0 */ + pa_format_info **formats; /**< Array of formats supported by the source. \since 1.0 */ } pa_source_info; /** Callback prototype for pa_context_get_source_info_by_name() and friends */ @@ -334,7 +342,7 @@ pa_operation* pa_context_set_source_mute_by_name(pa_context *c, const char *name /** Suspend/Resume a source. \since 0.9.7 */ pa_operation* pa_context_suspend_source_by_name(pa_context *c, const char *source_name, int suspend, pa_context_success_cb_t cb, void* userdata); -/** Suspend/Resume a source. If idx is PA_INVALID_INDEX all sources will be suspended. \since 0.9.7 */ +/** Suspend/Resume a source. If idx is PA_INVALID_INDEX, all sources will be suspended. \since 0.9.7 */ pa_operation* pa_context_suspend_source_by_index(pa_context *c, uint32_t idx, int suspend, pa_context_success_cb_t cb, void* userdata); /** Change the profile of a source. \since 0.9.16 */ @@ -357,7 +365,7 @@ typedef struct pa_server_info { const char *server_name; /**< Server package name (usually "pulseaudio") */ pa_sample_spec sample_spec; /**< Default sample specification */ const char *default_sink_name; /**< Name of default sink. */ - const char *default_source_name; /**< Name of default sink. */ + const char *default_source_name; /**< Name of default source. */ uint32_t cookie; /**< A random cookie for identifying this instance of PulseAudio. */ pa_channel_map channel_map; /**< Default channel map. \since 0.9.15 */ } pa_server_info; @@ -381,12 +389,12 @@ typedef struct pa_module_info { *argument; /**< Argument string of the module */ uint32_t n_used; /**< Usage counter or PA_INVALID_INDEX */ /** \cond fulldocs */ - int auto_unload; /**< \deprecated Non-zero if this is an autoloaded module */ + int auto_unload; /**< \deprecated Non-zero if this is an autoloaded module. */ /** \endcond */ pa_proplist *proplist; /**< Property list \since 0.9.15 */ } pa_module_info; -/** Callback prototype for pa_context_get_module_info() and friends*/ +/** Callback prototype for pa_context_get_module_info() and friends */ typedef void (*pa_module_info_cb_t) (pa_context *c, const pa_module_info*i, int eol, void *userdata); /** Get some information about a module by its index */ @@ -414,12 +422,12 @@ pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_s typedef struct pa_client_info { uint32_t index; /**< Index of this client */ const char *name; /**< Name of this client */ - uint32_t owner_module; /**< Index of the owning module, or PA_INVALID_INDEX */ + uint32_t owner_module; /**< Index of the owning module, or PA_INVALID_INDEX. */ const char *driver; /**< Driver name */ pa_proplist *proplist; /**< Property list \since 0.9.11 */ } pa_client_info; -/** Callback prototype for pa_context_get_client_info() and friends*/ +/** Callback prototype for pa_context_get_client_info() and friends */ typedef void (*pa_client_info_cb_t) (pa_context *c, const pa_client_info*i, int eol, void *userdata); /** Get information about a client by its index */ @@ -443,21 +451,38 @@ typedef struct pa_card_profile_info { const char *description; /**< Description of this profile */ uint32_t n_sinks; /**< Number of sinks this profile would create */ uint32_t n_sources; /**< Number of sources this profile would create */ - uint32_t priority; /**< The higher this value is the more useful this profile is as a default */ + uint32_t priority; /**< The higher this value is, the more useful this profile is as a default. */ } pa_card_profile_info; +/** Stores information about a specific port of a card. Please + * note that this structure can be extended as part of evolutionary + * API updates at any time in any new release. \since 2.0 */ +typedef struct pa_card_port_info { + const char *name; /**< Name of this port */ + const char *description; /**< Description of this port */ + uint32_t priority; /**< The higher this value is, the more useful this port is as a default. */ + int available; /**< A #pa_port_available enum, indicating availability status of this port. */ + int direction; /**< A #pa_direction enum, indicating the direction of this port. */ + uint32_t n_profiles; /**< Number of entries in profile array */ + pa_card_profile_info** profiles; /**< Array of pointers to available profiles, or NULL. Array is terminated by an entry set to NULL. */ + pa_proplist *proplist; /**< Property list */ + int64_t latency_offset; /**< Latency offset of the port that gets added to the sink/source latency when the port is active. \since 3.0 */ +} pa_card_port_info; + /** Stores information about cards. Please note that this structure * can be extended as part of evolutionary API updates at any time in * any new release. \since 0.9.15 */ typedef struct pa_card_info { uint32_t index; /**< Index of this card */ const char *name; /**< Name of this card */ - uint32_t owner_module; /**< Index of the owning module, or PA_INVALID_INDEX */ + uint32_t owner_module; /**< Index of the owning module, or PA_INVALID_INDEX. */ const char *driver; /**< Driver name */ uint32_t n_profiles; /**< Number of entries in profile array */ - pa_card_profile_info* profiles; /**< Array of available profile, or NULL. Array is terminated by an entry with name set to NULL. Number of entries is stored in n_profiles */ - pa_card_profile_info* active_profile; /**< Pointer to active profile in the array, or NULL */ + pa_card_profile_info* profiles; /**< Array of available profile, or NULL. Array is terminated by an entry with name set to NULL. Number of entries is stored in n_profiles. */ + pa_card_profile_info* active_profile; /**< Pointer to active profile in the array, or NULL. */ pa_proplist *proplist; /**< Property list */ + uint32_t n_ports; /**< Number of entries in port array */ + pa_card_port_info **ports; /**< Array of pointers to ports, or NULL. Array is terminated by an entry set to NULL. */ } pa_card_info; /** Callback prototype for pa_context_get_card_info_...() \since 0.9.15 */ @@ -478,6 +503,9 @@ pa_operation* pa_context_set_card_profile_by_index(pa_context *c, uint32_t idx, /** Change the profile of a card. \since 0.9.15 */ pa_operation* pa_context_set_card_profile_by_name(pa_context *c, const char*name, const char*profile, pa_context_success_cb_t cb, void *userdata); +/** Set the latency offset of a port. \since 3.0 */ +pa_operation* pa_context_set_port_latency_offset(pa_context *c, const char *card_name, const char *port_name, int64_t offset, pa_context_success_cb_t cb, void *userdata); + /** @} */ /** @{ \name Sink Inputs */ @@ -488,21 +516,25 @@ pa_operation* pa_context_set_card_profile_by_name(pa_context *c, const char*name typedef struct pa_sink_input_info { uint32_t index; /**< Index of the sink input */ const char *name; /**< Name of the sink input */ - uint32_t owner_module; /**< Index of the module this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any module */ - uint32_t client; /**< Index of the client this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any client */ + uint32_t owner_module; /**< Index of the module this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any module. */ + uint32_t client; /**< Index of the client this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any client. */ uint32_t sink; /**< Index of the connected sink */ - pa_sample_spec sample_spec; /**< The sample specification of the sink input */ + pa_sample_spec sample_spec; /**< The sample specification of the sink input. */ pa_channel_map channel_map; /**< Channel map */ - pa_cvolume volume; /**< The volume of this sink input */ - pa_usec_t buffer_usec; /**< Latency due to buffering in sink input, see pa_latency_info for details */ - pa_usec_t sink_usec; /**< Latency of the sink device, see pa_latency_info for details */ + pa_cvolume volume; /**< The volume of this sink input. */ + pa_usec_t buffer_usec; /**< Latency due to buffering in sink input, see pa_latency_info for details. */ + pa_usec_t sink_usec; /**< Latency of the sink device, see pa_latency_info for details. */ const char *resample_method; /**< The resampling method used by this sink input. */ const char *driver; /**< Driver name */ int mute; /**< Stream muted \since 0.9.7 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */ + int corked; /**< Stream corked \since 1.0 */ + int has_volume; /**< Stream has volume. If not set, then the meaning of this struct's volume member is unspecified. \since 1.0 */ + int volume_writable; /**< The volume can be set. If not set, the volume can still change even though clients can't control the volume. \since 1.0 */ + pa_format_info *format; /**< Stream format information. \since 1.0 */ } pa_sink_input_info; -/** Callback prototype for pa_context_get_sink_input_info() and friends*/ +/** Callback prototype for pa_context_get_sink_input_info() and friends */ typedef void (*pa_sink_input_info_cb_t) (pa_context *c, const pa_sink_input_info *i, int eol, void *userdata); /** Get some information about a sink input by its index */ @@ -534,10 +566,10 @@ pa_operation* pa_context_kill_sink_input(pa_context *c, uint32_t idx, pa_context * can be extended as part of evolutionary API updates at any time in * any new release. */ typedef struct pa_source_output_info { - uint32_t index; /**< Index of the sink input */ - const char *name; /**< Name of the sink input */ - uint32_t owner_module; /**< Index of the module this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any module */ - uint32_t client; /**< Index of the client this sink input belongs to, or PA_INVALID_INDEX when it does not belong to any client */ + uint32_t index; /**< Index of the source output */ + const char *name; /**< Name of the source output */ + uint32_t owner_module; /**< Index of the module this source output belongs to, or PA_INVALID_INDEX when it does not belong to any module. */ + uint32_t client; /**< Index of the client this source output belongs to, or PA_INVALID_INDEX when it does not belong to any client. */ uint32_t source; /**< Index of the connected source */ pa_sample_spec sample_spec; /**< The sample specification of the source output */ pa_channel_map channel_map; /**< Channel map */ @@ -546,9 +578,15 @@ typedef struct pa_source_output_info { const char *resample_method; /**< The resampling method used by this source output. */ const char *driver; /**< Driver name */ pa_proplist *proplist; /**< Property list \since 0.9.11 */ + int corked; /**< Stream corked \since 1.0 */ + pa_cvolume volume; /**< The volume of this source output \since 1.0 */ + int mute; /**< Stream muted \since 1.0 */ + int has_volume; /**< Stream has volume. If not set, then the meaning of this struct's volume member is unspecified. \since 1.0 */ + int volume_writable; /**< The volume can be set. If not set, the volume can still change even though clients can't control the volume. \since 1.0 */ + pa_format_info *format; /**< Stream format information. \since 1.0 */ } pa_source_output_info; -/** Callback prototype for pa_context_get_source_output_info() and friends*/ +/** Callback prototype for pa_context_get_source_output_info() and friends */ typedef void (*pa_source_output_info_cb_t) (pa_context *c, const pa_source_output_info *i, int eol, void *userdata); /** Get information about a source output by its index */ @@ -563,6 +601,12 @@ pa_operation* pa_context_move_source_output_by_name(pa_context *c, uint32_t idx, /** Move the specified source output to a different source. \since 0.9.5 */ pa_operation* pa_context_move_source_output_by_index(pa_context *c, uint32_t idx, uint32_t source_idx, pa_context_success_cb_t cb, void* userdata); +/** Set the volume of a source output stream \since 1.0 */ +pa_operation* pa_context_set_source_output_volume(pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata); + +/** Set the mute switch of a source output stream \since 1.0 */ +pa_operation* pa_context_set_source_output_mute(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata); + /** Kill a source output. */ pa_operation* pa_context_kill_source_output(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata); @@ -576,8 +620,8 @@ pa_operation* pa_context_kill_source_output(pa_context *c, uint32_t idx, pa_cont typedef struct pa_stat_info { uint32_t memblock_total; /**< Currently allocated memory blocks */ uint32_t memblock_total_size; /**< Current total size of allocated memory blocks */ - uint32_t memblock_allocated; /**< Allocated memory blocks during the whole lifetime of the daemon */ - uint32_t memblock_allocated_size; /**< Total size of all memory blocks allocated during the whole lifetime of the daemon */ + uint32_t memblock_allocated; /**< Allocated memory blocks during the whole lifetime of the daemon. */ + uint32_t memblock_allocated_size; /**< Total size of all memory blocks allocated during the whole lifetime of the daemon. */ uint32_t scache_size; /**< Total size of all sample cache entries. */ } pa_stat_info;