remove doxygen \since tag for API changes older than 0.9; properly implement new latency query APIs

git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/glitch-free@2228 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2008-04-09 01:19:01 +00:00
parent cc1e2654d3
commit fc9d8276db
12 changed files with 175 additions and 151 deletions

View file

@ -183,7 +183,7 @@ const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos);
/** Make a humand readable string from the specified channel map */ /** Make a humand readable string from the specified channel map */
char* pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map); char* pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map);
/** Parse a channel position list into a channel map structure. \since 0.8.1 */ /** Parse a channel position list into a channel map structure. */
pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s); pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s);
/** Compare two channel maps. Return 1 if both match. */ /** Compare two channel maps. Return 1 if both match. */

View file

@ -173,7 +173,7 @@ pa_context *pa_context_new(pa_mainloop_api *mainloop, const char *name);
/** Instantiate a new connection context with an abstract mainloop API /** Instantiate a new connection context with an abstract mainloop API
* and an application name, and specify the the initial client property * and an application name, and specify the the initial client property
* list. \since 0.9.10 */ * list. \since 0.9.11 */
pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *name, pa_proplist *proplist); pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *name, pa_proplist *proplist);
/** Decrease the reference counter of the context by one */ /** Decrease the reference counter of the context by one */
@ -214,40 +214,40 @@ pa_operation* pa_context_drain(pa_context *c, pa_context_notify_cb_t cb, void *u
* returning a success notification */ * returning a success notification */
pa_operation* pa_context_exit_daemon(pa_context *c, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_exit_daemon(pa_context *c, pa_context_success_cb_t cb, void *userdata);
/** Set the name of the default sink. \since 0.4 */ /** Set the name of the default sink. */
pa_operation* pa_context_set_default_sink(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_default_sink(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata);
/** Set the name of the default source. \since 0.4 */ /** Set the name of the default source. */
pa_operation* pa_context_set_default_source(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_default_source(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata);
/** Returns 1 when the connection is to a local daemon. Returns negative when no connection has been made yet. \since 0.5 */ /** Returns 1 when the connection is to a local daemon. Returns negative when no connection has been made yet. */
int pa_context_is_local(pa_context *c); int pa_context_is_local(pa_context *c);
/** Set a different application name for context on the server. \since 0.5 */ /** Set a different application name for context on the server. */
pa_operation* pa_context_set_name(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_name(pa_context *c, const char *name, pa_context_success_cb_t cb, void *userdata);
/** Return the server name this context is connected to. \since 0.7 */ /** Return the server name this context is connected to. */
const char* pa_context_get_server(pa_context *c); const char* pa_context_get_server(pa_context *c);
/** Return the protocol version of the library. \since 0.8 */ /** Return the protocol version of the library. */
uint32_t pa_context_get_protocol_version(pa_context *c); uint32_t pa_context_get_protocol_version(pa_context *c);
/** Return the protocol version of the connected server. \since 0.8 */ /** Return the protocol version of the connected server. */
uint32_t pa_context_get_server_protocol_version(pa_context *c); uint32_t pa_context_get_server_protocol_version(pa_context *c);
/* Update the property list of the client, adding new entries. Please /* Update the property list of the client, adding new entries. Please
* note that it is highly recommended to set as much properties * note that it is highly recommended to set as much properties
* initially via pa_context_new_with_proplist() as possible instead a * initially via pa_context_new_with_proplist() as possible instead a
* posteriori with this function, since that information may then be * posteriori with this function, since that information may then be
* used to route streams of the client to the right device. \since 0.9.10 */ * used to route streams of the client to the right device. \since 0.9.11 */
pa_operation *pa_context_proplist_update(pa_context *c, pa_update_mode_t mode, pa_proplist *p, pa_context_success_cb_t cb, void *userdata); pa_operation *pa_context_proplist_update(pa_context *c, pa_update_mode_t mode, pa_proplist *p, pa_context_success_cb_t cb, void *userdata);
/* Update the property list of the client, remove entries. \since 0.9.10 */ /* Update the property list of the client, remove entries. \since 0.9.11 */
pa_operation *pa_context_proplist_remove(pa_context *c, const char *const keys[], pa_context_success_cb_t cb, void *userdata); pa_operation *pa_context_proplist_remove(pa_context *c, const char *const keys[], pa_context_success_cb_t cb, void *userdata);
/** Return the client index this context is /** Return the client index this context is
* identified in the server with. This is useful for usage with the * identified in the server with. This is useful for usage with the
* introspection functions, such as pa_context_get_client_info(). \since 0.9.10 */ * introspection functions, such as pa_context_get_client_info(). \since 0.9.11 */
uint32_t pa_context_get_index(pa_context *s); uint32_t pa_context_get_index(pa_context *s);
PA_C_DECL_END PA_C_DECL_END

View file

@ -67,7 +67,7 @@ typedef enum pa_operation_state {
/** An invalid index */ /** An invalid index */
#define PA_INVALID_INDEX ((uint32_t) -1) #define PA_INVALID_INDEX ((uint32_t) -1)
/** Some special flags for contexts. \since 0.8 */ /** Some special flags for contexts. */
typedef enum pa_context_flags { typedef enum pa_context_flags {
PA_CONTEXT_NOAUTOSPAWN = 1 /**< Disabled autospawning of the PulseAudio daemon if required */ PA_CONTEXT_NOAUTOSPAWN = 1 /**< Disabled autospawning of the PulseAudio daemon if required */
} pa_context_flags_t; } pa_context_flags_t;
@ -80,7 +80,7 @@ typedef enum pa_stream_direction {
PA_STREAM_UPLOAD /**< Sample upload stream */ PA_STREAM_UPLOAD /**< Sample upload stream */
} pa_stream_direction_t; } pa_stream_direction_t;
/** Some special flags for stream connections. \since 0.6 */ /** Some special flags for stream connections. */
typedef enum pa_stream_flags { typedef enum pa_stream_flags {
PA_STREAM_START_CORKED = 1, /**< Create the stream corked, requiring an explicit pa_stream_cork() call to uncork it. */ PA_STREAM_START_CORKED = 1, /**< Create the stream corked, requiring an explicit pa_stream_cork() call to uncork it. */
PA_STREAM_INTERPOLATE_TIMING = 2, /**< Interpolate the latency for PA_STREAM_INTERPOLATE_TIMING = 2, /**< Interpolate the latency for
@ -293,8 +293,8 @@ enum {
PA_ERR_MODINITFAILED, /**< Module initialization failed */ PA_ERR_MODINITFAILED, /**< Module initialization failed */
PA_ERR_BADSTATE, /**< Bad state */ PA_ERR_BADSTATE, /**< Bad state */
PA_ERR_NODATA, /**< No data */ PA_ERR_NODATA, /**< No data */
PA_ERR_VERSION, /**< Incompatible protocol version \since 0.8 */ PA_ERR_VERSION, /**< Incompatible protocol version */
PA_ERR_TOOLARGE, /**< Data too large \since 0.8.1 */ PA_ERR_TOOLARGE, /**< Data too large */
PA_ERR_NOTSUPPORTED, /**< Operation not supported \since 0.9.5 */ PA_ERR_NOTSUPPORTED, /**< Operation not supported \since 0.9.5 */
PA_ERR_MAX /**< Not really an error but the first invalid error code */ PA_ERR_MAX /**< Not really an error but the first invalid error code */
}; };
@ -309,9 +309,9 @@ typedef enum pa_subscription_mask {
PA_SUBSCRIPTION_MASK_MODULE = 16, /**< Module events */ PA_SUBSCRIPTION_MASK_MODULE = 16, /**< Module events */
PA_SUBSCRIPTION_MASK_CLIENT = 32, /**< Client events */ PA_SUBSCRIPTION_MASK_CLIENT = 32, /**< Client events */
PA_SUBSCRIPTION_MASK_SAMPLE_CACHE = 64, /**< Sample cache events */ PA_SUBSCRIPTION_MASK_SAMPLE_CACHE = 64, /**< Sample cache events */
PA_SUBSCRIPTION_MASK_SERVER = 128, /**< Other global server changes. \since 0.4 */ PA_SUBSCRIPTION_MASK_SERVER = 128, /**< Other global server changes. */
PA_SUBSCRIPTION_MASK_AUTOLOAD = 256, /**< Autoload table events. \since 0.5 */ PA_SUBSCRIPTION_MASK_AUTOLOAD = 256, /**< Autoload table events. */
PA_SUBSCRIPTION_MASK_ALL = 511 /**< Catch all events \since 0.8 */ PA_SUBSCRIPTION_MASK_ALL = 511 /**< Catch all events */
} pa_subscription_mask_t; } pa_subscription_mask_t;
/** Subscription event types, as used by pa_context_subscribe() */ /** Subscription event types, as used by pa_context_subscribe() */
@ -323,8 +323,8 @@ typedef enum pa_subscription_event_type {
PA_SUBSCRIPTION_EVENT_MODULE = 4, /**< Event type: Module */ PA_SUBSCRIPTION_EVENT_MODULE = 4, /**< Event type: Module */
PA_SUBSCRIPTION_EVENT_CLIENT = 5, /**< Event type: Client */ PA_SUBSCRIPTION_EVENT_CLIENT = 5, /**< Event type: Client */
PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE = 6, /**< Event type: Sample cache item */ PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE = 6, /**< Event type: Sample cache item */
PA_SUBSCRIPTION_EVENT_SERVER = 7, /**< Event type: Global server change, only occuring with PA_SUBSCRIPTION_EVENT_CHANGE. \since 0.4 */ PA_SUBSCRIPTION_EVENT_SERVER = 7, /**< Event type: Global server change, only occuring with PA_SUBSCRIPTION_EVENT_CHANGE. */
PA_SUBSCRIPTION_EVENT_AUTOLOAD = 8, /**< Event type: Autoload table changes. \since 0.5 */ PA_SUBSCRIPTION_EVENT_AUTOLOAD = 8, /**< Event type: Autoload table changes. */
PA_SUBSCRIPTION_EVENT_FACILITY_MASK = 15, /**< A mask to extract the event type from an event value */ PA_SUBSCRIPTION_EVENT_FACILITY_MASK = 15, /**< A mask to extract the event type from an event value */
PA_SUBSCRIPTION_EVENT_NEW = 0, /**< A new object was created */ PA_SUBSCRIPTION_EVENT_NEW = 0, /**< A new object was created */
@ -362,12 +362,11 @@ typedef struct pa_timing_info {
* detected transport_usec becomes much * detected transport_usec becomes much
* more reliable. However, the code that * more reliable. However, the code that
* detects synchronized clocks is very * detects synchronized clocks is very
* limited und unreliable itself. \since * limited und unreliable itself. */
* 0.5 */
pa_usec_t sink_usec; /**< Time in usecs a sample takes to be played on the sink. For playback streams and record streams connected to a monitor source. */ pa_usec_t sink_usec; /**< Time in usecs a sample takes to be played on the sink. For playback streams and record streams connected to a monitor source. */
pa_usec_t source_usec; /**< Time in usecs a sample takes from being recorded to being delivered to the application. Only for record streams. \since 0.5*/ pa_usec_t source_usec; /**< Time in usecs a sample takes from being recorded to being delivered to the application. Only for record streams. */
pa_usec_t transport_usec; /**< Estimated time in usecs a sample takes to be transferred to/from the daemon. For both playback and record streams. \since 0.5 */ pa_usec_t transport_usec; /**< Estimated time in usecs a sample takes to be transferred to/from the daemon. For both playback and record streams. */
int playing; /**< Non-zero when the stream is currently playing. Only for playback streams. */ int playing; /**< Non-zero when the stream is currently playing. Only for playback streams. */
@ -378,20 +377,19 @@ typedef struct pa_timing_info {
* info was current . Only write * info was current . Only write
* commands with SEEK_RELATIVE_ON_READ * commands with SEEK_RELATIVE_ON_READ
* and SEEK_RELATIVE_END can corrupt * and SEEK_RELATIVE_END can corrupt
* write_index. \since 0.8 */ * write_index. */
int64_t write_index; /**< Current write index into the int64_t write_index; /**< Current write index into the
* playback buffer in bytes. Think twice before * playback buffer in bytes. Think twice before
* using this for seeking purposes: it * using this for seeking purposes: it
* might be out of date a the time you * might be out of date a the time you
* want to use it. Consider using * want to use it. Consider using
* PA_SEEK_RELATIVE instead. \since * PA_SEEK_RELATIVE instead. */
* 0.8 */
int read_index_corrupt; /**< Non-zero if read_index is not int read_index_corrupt; /**< Non-zero if read_index is not
* up-to-date because a local pause or * up-to-date because a local pause or
* flush request that corrupted it has * flush request that corrupted it has
* been issued in the time since this * been issued in the time since this
* latency info was current. \since 0.8 */ * latency info was current. */
int64_t read_index; /**< Current read index into the int64_t read_index; /**< Current read index into the
* playback buffer in bytes. Think twice before * playback buffer in bytes. Think twice before
@ -399,12 +397,12 @@ typedef struct pa_timing_info {
* might be out of date a the time you * might be out of date a the time you
* want to use it. Consider using * want to use it. Consider using
* PA_SEEK_RELATIVE_ON_READ * PA_SEEK_RELATIVE_ON_READ
* instead. \since 0.8 */ * instead. */
pa_usec_t max_sink_usec; /**< The static configure latency for pa_usec_t configured_sink_usec; /**< The static configured latency for
* the sink. \since 0.9.10 */ * the sink. \since 0.9.11 */
pa_usec_t max_source_usec; /**< The static configure latency for pa_usec_t configured_source_usec; /**< The static configured latency for
* the source. \since 0.9.10 */ * the source. \since 0.9.11 */
} pa_timing_info; } pa_timing_info;
/** A structure for the spawn api. This may be used to integrate auto /** A structure for the spawn api. This may be used to integrate auto
@ -413,7 +411,7 @@ typedef struct pa_timing_info {
* waitpid() is used on the child's PID. The spawn routine will not * waitpid() is used on the child's PID. The spawn routine will not
* block or ignore SIGCHLD signals, since this cannot be done in a * block or ignore SIGCHLD signals, since this cannot be done in a
* thread compatible way. You might have to do this in * thread compatible way. You might have to do this in
* prefork/postfork. \since 0.4 */ * prefork/postfork. */
typedef struct pa_spawn_api { typedef struct pa_spawn_api {
void (*prefork)(void); /**< Is called just before the fork in the parent process. May be NULL. */ void (*prefork)(void); /**< Is called just before the fork in the parent process. May be NULL. */
void (*postfork)(void); /**< Is called immediately after the fork in the parent process. May be NULL.*/ void (*postfork)(void); /**< Is called immediately after the fork in the parent process. May be NULL.*/
@ -426,7 +424,7 @@ typedef struct pa_spawn_api {
* passed to the new process. */ * passed to the new process. */
} pa_spawn_api; } pa_spawn_api;
/** Seek type for pa_stream_write(). \since 0.8*/ /** Seek type for pa_stream_write(). */
typedef enum pa_seek_mode { typedef enum pa_seek_mode {
PA_SEEK_RELATIVE = 0, /**< Seek relatively to the write index */ PA_SEEK_RELATIVE = 0, /**< Seek relatively to the write index */
PA_SEEK_ABSOLUTE = 1, /**< Seek relatively to the start of the buffer queue */ PA_SEEK_ABSOLUTE = 1, /**< Seek relatively to the start of the buffer queue */
@ -434,24 +432,24 @@ typedef enum pa_seek_mode {
PA_SEEK_RELATIVE_END = 3 /**< Seek relatively to the current end of the buffer queue. */ PA_SEEK_RELATIVE_END = 3 /**< Seek relatively to the current end of the buffer queue. */
} pa_seek_mode_t; } pa_seek_mode_t;
/** Special sink flags. \since 0.8 */ /** Special sink flags. */
typedef enum pa_sink_flags { typedef enum pa_sink_flags {
PA_SINK_HW_VOLUME_CTRL = 1, /**< Supports hardware volume control */ PA_SINK_HW_VOLUME_CTRL = 1, /**< Supports hardware volume control */
PA_SINK_LATENCY = 2, /**< Supports latency querying */ PA_SINK_LATENCY = 2, /**< Supports latency querying */
PA_SINK_HARDWARE = 4, /**< Is a hardware sink of some kind, in contrast to "virtual"/software sinks \since 0.9.3 */ PA_SINK_HARDWARE = 4, /**< Is a hardware sink of some kind, in contrast to "virtual"/software sinks \since 0.9.3 */
PA_SINK_NETWORK = 8, /**< Is a networked sink of some kind. \since 0.9.7 */ PA_SINK_NETWORK = 8, /**< Is a networked sink of some kind. \since 0.9.7 */
PA_SINK_HW_MUTE_CTRL = 16, /**< Supports hardware mute control \since 0.9.10 */ PA_SINK_HW_MUTE_CTRL = 16, /**< Supports hardware mute control \since 0.9.11 */
PA_SINK_DECIBEL_VOLUME = 32 /**< Volume can be translated to dB with pa_sw_volume_to_dB() \since 0.9.10 */ PA_SINK_DECIBEL_VOLUME = 32 /**< Volume can be translated to dB with pa_sw_volume_to_dB() \since 0.9.11 */
} pa_sink_flags_t; } pa_sink_flags_t;
/** Special source flags. \since 0.8 */ /** Special source flags. */
typedef enum pa_source_flags { typedef enum pa_source_flags {
PA_SOURCE_HW_VOLUME_CTRL = 1, /**< Supports hardware volume control */ PA_SOURCE_HW_VOLUME_CTRL = 1, /**< Supports hardware volume control */
PA_SOURCE_LATENCY = 2, /**< Supports latency querying */ PA_SOURCE_LATENCY = 2, /**< Supports latency querying */
PA_SOURCE_HARDWARE = 4, /**< Is a hardware source of some kind, in contrast to "virtual"/software source \since 0.9.3 */ PA_SOURCE_HARDWARE = 4, /**< Is a hardware source of some kind, in contrast to "virtual"/software source \since 0.9.3 */
PA_SOURCE_NETWORK = 8, /**< Is a networked sink of some kind. \since 0.9.7 */ PA_SOURCE_NETWORK = 8, /**< Is a networked sink of some kind. \since 0.9.7 */
PA_SOURCE_HW_MUTE_CTRL = 16, /**< Supports hardware mute control \since 0.9.10 */ PA_SOURCE_HW_MUTE_CTRL = 16, /**< Supports hardware mute control \since 0.9.11 */
PA_SOURCE_DECIBEL_VOLUME = 32 /**< Volume can be translated to dB with pa_sw_volume_to_dB() \since 0.9.10 */ PA_SOURCE_DECIBEL_VOLUME = 32 /**< Volume can be translated to dB with pa_sw_volume_to_dB() \since 0.9.11 */
} pa_source_flags_t; } pa_source_flags_t;
/** A generic free() like callback prototype */ /** A generic free() like callback prototype */

View file

@ -167,7 +167,9 @@ static void context_get_sink_info_callback(pa_pdispatch *pd, uint32_t command, P
pa_tagstruct_get_usec(t, &i.latency) < 0 || pa_tagstruct_get_usec(t, &i.latency) < 0 ||
pa_tagstruct_gets(t, &i.driver) < 0 || pa_tagstruct_gets(t, &i.driver) < 0 ||
pa_tagstruct_getu32(t, &flags) < 0 || pa_tagstruct_getu32(t, &flags) < 0 ||
(o->context->version >= 13 && pa_tagstruct_get_proplist(t, i.proplist) < 0)) { (o->context->version >= 13 &&
(pa_tagstruct_get_proplist(t, i.proplist) < 0 ||
pa_tagstruct_get_usec(t, &i.configured_latency) < 0))) {
pa_context_fail(o->context, PA_ERR_PROTOCOL); pa_context_fail(o->context, PA_ERR_PROTOCOL);
pa_proplist_free(i.proplist); pa_proplist_free(i.proplist);
@ -286,7 +288,9 @@ static void context_get_source_info_callback(pa_pdispatch *pd, uint32_t command,
pa_tagstruct_get_usec(t, &i.latency) < 0 || pa_tagstruct_get_usec(t, &i.latency) < 0 ||
pa_tagstruct_gets(t, &i.driver) < 0 || pa_tagstruct_gets(t, &i.driver) < 0 ||
pa_tagstruct_getu32(t, &flags) < 0 || pa_tagstruct_getu32(t, &flags) < 0 ||
(o->context->version >= 13 && pa_tagstruct_get_proplist(t, i.proplist) < 0)) { (o->context->version >= 13 &&
(pa_tagstruct_get_proplist(t, i.proplist) < 0 ||
pa_tagstruct_get_usec(t, &i.configured_latency) < 0))) {
pa_context_fail(o->context, PA_ERR_PROTOCOL); pa_context_fail(o->context, PA_ERR_PROTOCOL);
pa_proplist_free(i.proplist); pa_proplist_free(i.proplist);

View file

@ -207,7 +207,7 @@
PA_C_DECL_BEGIN PA_C_DECL_BEGIN
#define PA_PORT_SPDIF "spdif" #define PA_PORT_DIGITAL "spdif"
#define PA_PORT_ANALOG_STEREO "analog-stereo" #define PA_PORT_ANALOG_STEREO "analog-stereo"
#define PA_PORT_ANALOG_5_1 "analog-5-1" #define PA_PORT_ANALOG_5_1 "analog-5-1"
#define PA_PORT_ANALOG_4_0 "analog-4-0" #define PA_PORT_ANALOG_4_0 "analog-4-0"
@ -222,17 +222,17 @@ typedef struct pa_sink_info {
uint32_t index; /**< Index of the sink */ uint32_t index; /**< Index of the sink */
const char *description; /**< Description of this sink */ const char *description; /**< Description of this sink */
pa_sample_spec sample_spec; /**< Sample spec of this sink */ pa_sample_spec sample_spec; /**< Sample spec of this sink */
pa_channel_map channel_map; /**< Channel map \since 0.8 */ 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 */ pa_cvolume volume; /**< Volume of the sink */
int mute; /**< Mute switch of the sink \since 0.8 */ int mute; /**< Mute switch of the sink */
uint32_t monitor_source; /**< Index of the monitor source connected to this 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 */ const char *monitor_source_name; /**< The name of the monitor source */
pa_usec_t latency; /**< Length of queued audio in the output buffer. */ pa_usec_t latency; /**< Length of queued audio in the output buffer. */
const char *driver; /**< Driver name. \since 0.8 */ const char *driver; /**< Driver name. */
pa_sink_flags_t flags; /**< Flags \since 0.8 */ pa_sink_flags_t flags; /**< Flags */
pa_proplist *proplist; /**< Property list \since 0.9.11 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */
pa_usec_t max_latency; /**< The static latency this device has been configured to. \since 0.9.11 */ pa_usec_t configured_latency; /**< The latency this device has been configured to. \since 0.9.11 */
} pa_sink_info; } pa_sink_info;
/** Callback prototype for pa_context_get_sink_info_by_name() and friends */ /** Callback prototype for pa_context_get_sink_info_by_name() and friends */
@ -253,10 +253,10 @@ pa_operation* pa_context_set_sink_volume_by_index(pa_context *c, uint32_t idx, c
/** Set the volume of a sink device specified by its name */ /** Set the volume of a sink device specified by its name */
pa_operation* pa_context_set_sink_volume_by_name(pa_context *c, const char *name, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_sink_volume_by_name(pa_context *c, const char *name, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata);
/** Set the mute switch of a sink device specified by its index \since 0.8 */ /** Set the mute switch of a sink device specified by its index */
pa_operation* pa_context_set_sink_mute_by_index(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_sink_mute_by_index(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata);
/** Set the mute switch of a sink device specified by its name \since 0.8 */ /** Set the mute switch of a sink device specified by its name */
pa_operation* pa_context_set_sink_mute_by_name(pa_context *c, const char *name, int mute, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_sink_mute_by_name(pa_context *c, const char *name, int mute, pa_context_success_cb_t cb, void *userdata);
/** Suspend/Resume a sink. \since 0.9.7 */ /** Suspend/Resume a sink. \since 0.9.7 */
@ -277,17 +277,17 @@ typedef struct pa_source_info {
uint32_t index; /**< Index of the source */ uint32_t index; /**< Index of the source */
const char *description; /**< Description of this source */ const char *description; /**< Description of this source */
pa_sample_spec sample_spec; /**< Sample spec of this source */ pa_sample_spec sample_spec; /**< Sample spec of this source */
pa_channel_map channel_map; /**< Channel map \since 0.8 */ 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 \since 0.8 */ pa_cvolume volume; /**< Volume of the source */
int mute; /**< Mute switch of the sink \since 0.8 */ 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 */ 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 */ 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. \since 0.5 */ pa_usec_t latency; /**< Length of filled record buffer of this source. */
const char *driver; /**< Driver name \since 0.8 */ const char *driver; /**< Driver name */
pa_source_flags_t flags; /**< Flags \since 0.8 */ pa_source_flags_t flags; /**< Flags */
pa_proplist *proplist; /**< Property list \since 0.9.10 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */
pa_usec_t max_latency; /**< The static latency this device has been configured to. \since 0.9.11 */ pa_usec_t configured_latency; /**< The latency this device has been configured to. \since 0.9.11 */
} pa_source_info; } pa_source_info;
/** Callback prototype for pa_context_get_source_info_by_name() and friends */ /** Callback prototype for pa_context_get_source_info_by_name() and friends */
@ -302,16 +302,16 @@ pa_operation* pa_context_get_source_info_by_index(pa_context *c, uint32_t id, pa
/** Get the complete source list */ /** Get the complete source list */
pa_operation* pa_context_get_source_info_list(pa_context *c, pa_source_info_cb_t cb, void *userdata); pa_operation* pa_context_get_source_info_list(pa_context *c, pa_source_info_cb_t cb, void *userdata);
/** Set the volume of a source device specified by its index \since 0.8 */ /** Set the volume of a source device specified by its index */
pa_operation* pa_context_set_source_volume_by_index(pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_source_volume_by_index(pa_context *c, uint32_t idx, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata);
/** Set the volume of a source device specified by its name \since 0.8 */ /** Set the volume of a source device specified by its name */
pa_operation* pa_context_set_source_volume_by_name(pa_context *c, const char *name, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_source_volume_by_name(pa_context *c, const char *name, const pa_cvolume *volume, pa_context_success_cb_t cb, void *userdata);
/** Set the mute switch of a source device specified by its index \since 0.8 */ /** Set the mute switch of a source device specified by its index */
pa_operation* pa_context_set_source_mute_by_index(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_source_mute_by_index(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata);
/** Set the mute switch of a source device specified by its name \since 0.8 */ /** Set the mute switch of a source device specified by its name */
pa_operation* pa_context_set_source_mute_by_name(pa_context *c, const char *name, int mute, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_source_mute_by_name(pa_context *c, const char *name, int mute, pa_context_success_cb_t cb, void *userdata);
/** @} */ /** @} */
@ -327,9 +327,9 @@ typedef struct pa_server_info {
const char *server_version; /**< Version string of the daemon */ const char *server_version; /**< Version string of the daemon */
const char *server_name; /**< Server package name (usually "pulseaudio") */ const char *server_name; /**< Server package name (usually "pulseaudio") */
pa_sample_spec sample_spec; /**< Default sample specification */ pa_sample_spec sample_spec; /**< Default sample specification */
const char *default_sink_name; /**< Name of default sink. \since 0.4 */ const char *default_sink_name; /**< Name of default sink. */
const char *default_source_name; /**< Name of default sink. \since 0.4*/ const char *default_source_name; /**< Name of default sink. */
uint32_t cookie; /**< A random cookie for identifying this instance of PulseAudio. \since 0.8 */ uint32_t cookie; /**< A random cookie for identifying this instance of PulseAudio. */
} pa_server_info; } pa_server_info;
/** Callback prototype for pa_context_get_server_info() */ /** Callback prototype for pa_context_get_server_info() */
@ -365,10 +365,10 @@ pa_operation* pa_context_get_module_info_list(pa_context *c, pa_module_info_cb_t
/** Callback prototype for pa_context_load_module() */ /** Callback prototype for pa_context_load_module() */
typedef void (*pa_context_index_cb_t)(pa_context *c, uint32_t idx, void *userdata); typedef void (*pa_context_index_cb_t)(pa_context *c, uint32_t idx, void *userdata);
/** Load a module. \since 0.5 */ /** Load a module. */
pa_operation* pa_context_load_module(pa_context *c, const char*name, const char *argument, pa_context_index_cb_t cb, void *userdata); pa_operation* pa_context_load_module(pa_context *c, const char*name, const char *argument, pa_context_index_cb_t cb, void *userdata);
/** Unload a module. \since 0.5 */ /** Unload a module. */
pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_unload_module(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
/** @} */ /** @} */
@ -382,8 +382,8 @@ typedef struct pa_client_info {
uint32_t index; /**< Index of this client */ uint32_t index; /**< Index of this client */
const char *name; /**< Name 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 \since 0.8 */ const char *driver; /**< Driver name */
pa_proplist *proplist; /**< Property list \since 0.9.10 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */
} pa_client_info; } pa_client_info;
/** Callback prototype for pa_context_get_client_info() and firends*/ /** Callback prototype for pa_context_get_client_info() and firends*/
@ -395,7 +395,7 @@ pa_operation* pa_context_get_client_info(pa_context *c, uint32_t idx, pa_client_
/** Get the complete client list */ /** Get the complete client list */
pa_operation* pa_context_get_client_info_list(pa_context *c, pa_client_info_cb_t cb, void *userdata); pa_operation* pa_context_get_client_info_list(pa_context *c, pa_client_info_cb_t cb, void *userdata);
/** Kill a client. \since 0.5 */ /** Kill a client. */
pa_operation* pa_context_kill_client(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_kill_client(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
/** @} */ /** @} */
@ -416,10 +416,10 @@ typedef struct pa_sink_input_info {
pa_cvolume volume; /**< The volume of this sink input */ 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 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_usec_t sink_usec; /**< Latency of the sink device, see pa_latency_info for details */
const char *resample_method; /**< Thre resampling method used by this sink input. \since 0.7 */ const char *resample_method; /**< Thre resampling method used by this sink input. */
const char *driver; /**< Driver name \since 0.8 */ const char *driver; /**< Driver name */
int mute; /**< Stream muted \since 0.9.7 */ int mute; /**< Stream muted \since 0.9.7 */
pa_proplist *proplist; /**< Property list \since 0.9.10 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */
} pa_sink_input_info; } pa_sink_input_info;
/** Callback prototype for pa_context_get_sink_input_info() and firends*/ /** Callback prototype for pa_context_get_sink_input_info() and firends*/
@ -443,7 +443,7 @@ pa_operation* pa_context_set_sink_input_volume(pa_context *c, uint32_t idx, cons
/** Set the mute switch of a sink input stream \since 0.9.7 */ /** Set the mute switch of a sink input stream \since 0.9.7 */
pa_operation* pa_context_set_sink_input_mute(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_set_sink_input_mute(pa_context *c, uint32_t idx, int mute, pa_context_success_cb_t cb, void *userdata);
/** Kill a sink input. \since 0.5 */ /** Kill a sink input. */
pa_operation* pa_context_kill_sink_input(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata); pa_operation* pa_context_kill_sink_input(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
/** @} */ /** @} */
@ -461,11 +461,11 @@ typedef struct pa_source_output_info {
uint32_t source; /**< Index of the connected source */ uint32_t source; /**< Index of the connected source */
pa_sample_spec sample_spec; /**< The sample specification of the source output */ pa_sample_spec sample_spec; /**< The sample specification of the source output */
pa_channel_map channel_map; /**< Channel map */ pa_channel_map channel_map; /**< Channel map */
pa_usec_t buffer_usec; /**< Latency due to buffering in the source output, see pa_latency_info for details. \since 0.5 */ pa_usec_t buffer_usec; /**< Latency due to buffering in the source output, see pa_latency_info for details. */
pa_usec_t source_usec; /**< Latency of the source device, see pa_latency_info for details. \since 0.5 */ pa_usec_t source_usec; /**< Latency of the source device, see pa_latency_info for details. */
const char *resample_method; /**< Thre resampling method used by this source output. \since 0.7 */ const char *resample_method; /**< Thre resampling method used by this source output. */
const char *driver; /**< Driver name \since 0.8 */ const char *driver; /**< Driver name */
pa_proplist *proplist; /**< Property list \since 0.9.10 */ pa_proplist *proplist; /**< Property list \since 0.9.11 */
} pa_source_output_info; } pa_source_output_info;
/** Callback prototype for pa_context_get_source_output_info() and firends*/ /** Callback prototype for pa_context_get_source_output_info() and firends*/
@ -489,7 +489,7 @@ pa_operation* pa_context_suspend_source_by_name(pa_context *c, char *source_name
/** 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); pa_operation* pa_context_suspend_source_by_index(pa_context *c, uint32_t idx, int suspend, pa_context_success_cb_t cb, void* userdata);
/** Kill a source output. \since 0.5 */ /** 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); pa_operation* pa_context_kill_source_output(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void *userdata);
/** @} */ /** @} */
@ -504,7 +504,7 @@ typedef struct pa_stat_info {
uint32_t memblock_total_size; /**< Currentl total size of allocated memory blocks */ uint32_t memblock_total_size; /**< Currentl total size of allocated memory blocks */
uint32_t memblock_allocated; /**< Allocated memory blocks 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 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. \since 0.4 */ uint32_t scache_size; /**< Total size of all sample cache entries. */
} pa_stat_info; } pa_stat_info;
/** Callback prototype for pa_context_stat() */ /** Callback prototype for pa_context_stat() */
@ -527,10 +527,10 @@ typedef struct pa_sample_info {
pa_sample_spec sample_spec; /**< Sample specification of the sample */ pa_sample_spec sample_spec; /**< Sample specification of the sample */
pa_channel_map channel_map; /**< The channel map */ pa_channel_map channel_map; /**< The channel map */
pa_usec_t duration; /**< Duration of this entry */ pa_usec_t duration; /**< Duration of this entry */
uint32_t bytes; /**< Length of this sample in bytes. \since 0.4 */ uint32_t bytes; /**< Length of this sample in bytes. */
int lazy; /**< Non-zero when this is a lazy cache entry. \since 0.5 */ int lazy; /**< Non-zero when this is a lazy cache entry. */
const char *filename; /**< In case this is a lazy cache entry, the filename for the sound file to be loaded on demand. \since 0.5 */ const char *filename; /**< In case this is a lazy cache entry, the filename for the sound file to be loaded on demand. */
pa_proplist *proplist; /**< Property list for this sample. \since 0.9.10 */ pa_proplist *proplist; /**< Property list for this sample. \since 0.9.11 */
} pa_sample_info; } pa_sample_info;
/** Callback prototype for pa_context_get_sample_info_by_name() and firends */ /** Callback prototype for pa_context_get_sample_info_by_name() and firends */
@ -551,7 +551,7 @@ pa_operation* pa_context_get_sample_info_list(pa_context *c, pa_sample_info_cb_t
/** @{ \name Autoload Entries */ /** @{ \name Autoload Entries */
/** Type of an autoload entry. \since 0.5 */ /** Type of an autoload entry. */
typedef enum pa_autoload_type { typedef enum pa_autoload_type {
PA_AUTOLOAD_SINK = 0, PA_AUTOLOAD_SINK = 0,
PA_AUTOLOAD_SOURCE = 1 PA_AUTOLOAD_SOURCE = 1
@ -559,7 +559,7 @@ typedef enum pa_autoload_type {
/** Stores information about autoload entries. Please note that this structure /** Stores information about autoload entries. Please note that this structure
* can be extended as part of evolutionary API updates at any time in * can be extended as part of evolutionary API updates at any time in
* any new release. \since 0.5 */ * any new release. */
typedef struct pa_autoload_info { typedef struct pa_autoload_info {
uint32_t index; /**< Index of this autoload entry */ uint32_t index; /**< Index of this autoload entry */
const char *name; /**< Name of the sink or source */ const char *name; /**< Name of the sink or source */
@ -571,22 +571,22 @@ typedef struct pa_autoload_info {
/** Callback prototype for pa_context_get_autoload_info_by_name() and firends */ /** Callback prototype for pa_context_get_autoload_info_by_name() and firends */
typedef void (*pa_autoload_info_cb_t)(pa_context *c, const pa_autoload_info *i, int eol, void *userdata); typedef void (*pa_autoload_info_cb_t)(pa_context *c, const pa_autoload_info *i, int eol, void *userdata);
/** Get info about a specific autoload entry. \since 0.6 */ /** Get info about a specific autoload entry. */
pa_operation* pa_context_get_autoload_info_by_name(pa_context *c, const char *name, pa_autoload_type_t type, pa_autoload_info_cb_t cb, void *userdata); pa_operation* pa_context_get_autoload_info_by_name(pa_context *c, const char *name, pa_autoload_type_t type, pa_autoload_info_cb_t cb, void *userdata);
/** Get info about a specific autoload entry. \since 0.6 */ /** Get info about a specific autoload entry. */
pa_operation* pa_context_get_autoload_info_by_index(pa_context *c, uint32_t idx, pa_autoload_info_cb_t cb, void *userdata); pa_operation* pa_context_get_autoload_info_by_index(pa_context *c, uint32_t idx, pa_autoload_info_cb_t cb, void *userdata);
/** Get the complete list of autoload entries. \since 0.5 */ /** Get the complete list of autoload entries. */
pa_operation* pa_context_get_autoload_info_list(pa_context *c, pa_autoload_info_cb_t cb, void *userdata); pa_operation* pa_context_get_autoload_info_list(pa_context *c, pa_autoload_info_cb_t cb, void *userdata);
/** Add a new autoload entry. \since 0.5 */ /** Add a new autoload entry. */
pa_operation* pa_context_add_autoload(pa_context *c, const char *name, pa_autoload_type_t type, const char *module, const char*argument, pa_context_index_cb_t, void* userdata); pa_operation* pa_context_add_autoload(pa_context *c, const char *name, pa_autoload_type_t type, const char *module, const char*argument, pa_context_index_cb_t, void* userdata);
/** Remove an autoload entry. \since 0.6 */ /** Remove an autoload entry. */
pa_operation* pa_context_remove_autoload_by_name(pa_context *c, const char *name, pa_autoload_type_t type, pa_context_success_cb_t cb, void* userdata); pa_operation* pa_context_remove_autoload_by_name(pa_context *c, const char *name, pa_autoload_type_t type, pa_context_success_cb_t cb, void* userdata);
/** Remove an autoload entry. \since 0.6 */ /** Remove an autoload entry. */
pa_operation* pa_context_remove_autoload_by_index(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void* userdata); pa_operation* pa_context_remove_autoload_by_index(pa_context *c, uint32_t idx, pa_context_success_cb_t cb, void* userdata);
/** @} */ /** @} */

View file

@ -102,39 +102,40 @@
#define PA_PROP_DEVICE_MASTER_DEVICE "device.master_device" #define PA_PROP_DEVICE_MASTER_DEVICE "device.master_device"
/** A property list object. Basically a dictionary with UTF-8 strings /** A property list object. Basically a dictionary with UTF-8 strings
* as keys and arbitrary data as values. \since 0.9.10 */ * as keys and arbitrary data as values. \since 0.9.11 */
typedef struct pa_proplist pa_proplist; typedef struct pa_proplist pa_proplist;
/** Allocate a property list. \since 0.9.10 */ /** Allocate a property list. \since 0.9.11 */
pa_proplist* pa_proplist_new(void); pa_proplist* pa_proplist_new(void);
/** Free the property list. \since 0.9.10 */ /** Free the property list. \since 0.9.11 */
void pa_proplist_free(pa_proplist* p); void pa_proplist_free(pa_proplist* p);
/** Append a new string entry to the property list, possibly /** Append a new string entry to the property list, possibly
* overwriting an already existing entry with the same key. An * overwriting an already existing entry with the same key. An
* internal copy of the data passed is made. Will accept only valid * internal copy of the data passed is made. Will accept only valid
* UTF-8. \since 0.9.10 */ * UTF-8. \since 0.9.11 */
int pa_proplist_sets(pa_proplist *p, const char *key, const char *value); int pa_proplist_sets(pa_proplist *p, const char *key, const char *value);
/** Append a new arbitrary data entry to the property list, possibly /** Append a new arbitrary data entry to the property list, possibly
* overwriting an already existing entry with the same key. An * overwriting an already existing entry with the same key. An
* internal copy of the data passed is made. \since 0.9.10 */ * internal copy of the data passed is made. \since 0.9.11 */
int pa_proplist_set(pa_proplist *p, const char *key, const void *data, size_t nbytes); int pa_proplist_set(pa_proplist *p, const char *key, const void *data, size_t nbytes);
/* Return a string entry for the specified key. Will return NULL if /* Return a string entry for the specified key. Will return NULL if
* the data is not valid UTF-8. Will return a NUL-terminated string in * the data is not valid UTF-8. Will return a NUL-terminated string in
* an internally allocated buffer. The caller should make a copy of * an internally allocated buffer. The caller should make a copy of
* the data before accessing the property list again. \since 0.9.10*/ * the data before accessing the property list again. \since 0.9.11 */
const char *pa_proplist_gets(pa_proplist *p, const char *key); const char *pa_proplist_gets(pa_proplist *p, const char *key);
/** Return the the value for the specified key. Will return a /** Return the the value for the specified key. Will return a
* NUL-terminated string for string entries. The pointer returned will * NUL-terminated string for string entries. The pointer returned will
* point to an internally allocated buffer. The caller should make a * point to an internally allocated buffer. The caller should make a
* copy of the data before the property list is accessed again. \since 0.9.10 */ * copy of the data before the property list is accessed again. \since
* 0.9.11 */
int pa_proplist_get(pa_proplist *p, const char *key, const void **data, size_t *nbytes); int pa_proplist_get(pa_proplist *p, const char *key, const void **data, size_t *nbytes);
/** Update mode enum for pa_proplist_update(). \since 0.9.10 */ /** Update mode enum for pa_proplist_update(). \since 0.9.11 */
typedef enum pa_update_mode { typedef enum pa_update_mode {
PA_UPDATE_SET, /*< Replace the entirey property list with the new one. Don't keep any of the old data around */ PA_UPDATE_SET, /*< Replace the entirey property list with the new one. Don't keep any of the old data around */
PA_UPDATE_MERGE, /*< Merge new property list into the existing one, not replacing any old entries if they share a common key with the new property list. */ PA_UPDATE_MERGE, /*< Merge new property list into the existing one, not replacing any old entries if they share a common key with the new property list. */
@ -142,18 +143,18 @@ typedef enum pa_update_mode {
} pa_update_mode_t; } pa_update_mode_t;
/** Merge property list "other" into "p", adhering the merge mode as /** Merge property list "other" into "p", adhering the merge mode as
* specified in "mode". \since 0.9.10 */ * specified in "mode". \since 0.9.11 */
void pa_proplist_update(pa_proplist *p, pa_update_mode_t mode, pa_proplist *other); void pa_proplist_update(pa_proplist *p, pa_update_mode_t mode, pa_proplist *other);
/** Removes a single entry from the property list, identified be the /** Removes a single entry from the property list, identified be the
* specified key name. \since 0.9.10 */ * specified key name. \since 0.9.11 */
int pa_proplist_unset(pa_proplist *p, const char *key); int pa_proplist_unset(pa_proplist *p, const char *key);
/** Similar to pa_proplist_remove() but takes an array of keys to /** Similar to pa_proplist_remove() but takes an array of keys to
* remove. The array should be terminated by a NULL pointer. Return -1 * remove. The array should be terminated by a NULL pointer. Return -1
* on failure, otherwise the number of entries actually removed (which * on failure, otherwise the number of entries actually removed (which
* might even be 0, if there where no matching entries to * might even be 0, if there where no matching entries to
* remove). \since 0.9.10 */ * remove). \since 0.9.11 */
int pa_proplist_unset_many(pa_proplist *p, const char * const keys[]); int pa_proplist_unset_many(pa_proplist *p, const char * const keys[]);
/** Iterate through the property list. The user should allocate a /** Iterate through the property list. The user should allocate a
@ -163,19 +164,22 @@ int pa_proplist_unset_many(pa_proplist *p, const char * const keys[]);
* signifies EOL. The property list should not be modified during * signifies EOL. The property list should not be modified during
* iteration through the list. On each invication this function will * iteration through the list. On each invication this function will
* return the key string for the next entry. The keys in the property * return the key string for the next entry. The keys in the property
* list do not have any particular order. \since 0.9.10 */ * list do not have any particular order. \since 0.9.11 */
const char *pa_proplist_iterate(pa_proplist *p, void **state); const char *pa_proplist_iterate(pa_proplist *p, void **state);
/** Format the property list nicely as a human readable string. \since 0.9.10 */ /** Format the property list nicely as a human readable string. \since
* 0.9.11 */
char *pa_proplist_to_string(pa_proplist *p); char *pa_proplist_to_string(pa_proplist *p);
/** Returns 1 if an entry for the specified key is existant in the property list. \since 0.9.10 */ /** Returns 1 if an entry for the specified key is existant in the
* property list. \since 0.9.11 */
int pa_proplist_contains(pa_proplist *p, const char *key); int pa_proplist_contains(pa_proplist *p, const char *key);
/** Remove all entries from the property list object. \since 0.9.10 */ /** Remove all entries from the property list object. \since 0.9.11 */
void pa_proplist_clear(pa_proplist *p); void pa_proplist_clear(pa_proplist *p);
/** Allocate a new property list and copy over every single entry from the specific list. \since 0.9.10 */ /** Allocate a new property list and copy over every single entry from
* the specific list. \since 0.9.11 */
pa_proplist* pa_proplist_copy(pa_proplist *template); pa_proplist* pa_proplist_copy(pa_proplist *template);
#endif #endif

View file

@ -81,7 +81,7 @@ PA_C_DECL_BEGIN
/** Callback prototype for pa_context_play_sample_with_proplist(). The /** Callback prototype for pa_context_play_sample_with_proplist(). The
* idx value is the index of the sink input object, or * idx value is the index of the sink input object, or
* PA_INVALID_INDEX on failure. \since 0.9.10*/ * PA_INVALID_INDEX on failure. \since 0.9.11 */
typedef void (*pa_context_play_sample_cb_t)(pa_context *c, uint32_t idx, void *userdata); typedef void (*pa_context_play_sample_cb_t)(pa_context *c, uint32_t idx, void *userdata);
/** Make this stream a sample upload stream */ /** Make this stream a sample upload stream */
@ -109,7 +109,7 @@ pa_operation* pa_context_play_sample(
/** Play a sample from the sample cache to the specified device, /** Play a sample from the sample cache to the specified device,
* allowing specification of a property list for the playback * allowing specification of a property list for the playback
* stream. If the latter is NULL use the default sink. Returns an * stream. If the latter is NULL use the default sink. Returns an
* operation object. \since 0.9.10 */ * operation object. \since 0.9.11 */
pa_operation* pa_context_play_sample_with_proplist( pa_operation* pa_context_play_sample_with_proplist(
pa_context *c /**< Context */, pa_context *c /**< Context */,
const char *name /**< Name of the sample to play */, const char *name /**< Name of the sample to play */,

View file

@ -138,10 +138,10 @@ int pa_simple_drain(pa_simple *s, int *error);
/** Read some data from the server */ /** Read some data from the server */
int pa_simple_read(pa_simple *s, void*data, size_t bytes, int *error); int pa_simple_read(pa_simple *s, void*data, size_t bytes, int *error);
/** Return the playback latency. \since 0.5 */ /** Return the playback latency. */
pa_usec_t pa_simple_get_latency(pa_simple *s, int *error); pa_usec_t pa_simple_get_latency(pa_simple *s, int *error);
/** Flush the playback buffer. \since 0.5 */ /** Flush the playback buffer. */
int pa_simple_flush(pa_simple *s, int *error); int pa_simple_flush(pa_simple *s, int *error);
PA_C_DECL_END PA_C_DECL_END

View file

@ -119,7 +119,8 @@ pa_stream *pa_stream_new_with_proplist(pa_context *c, const char *name, const pa
s->record_memblockq = NULL; s->record_memblockq = NULL;
s->previous_time = 0; s->previous_time = 0;
s->timing_info_valid = 0; memset(&s->timing_info, 0, sizeof(s->timing_info));
s->timing_info_valid = FALSE;
s->read_index_not_before = 0; s->read_index_not_before = 0;
s->write_index_not_before = 0; s->write_index_not_before = 0;
@ -462,7 +463,7 @@ static void request_auto_timing_update(pa_stream *s, int force) {
if ((o = pa_stream_update_timing_info(s, NULL, NULL))) { if ((o = pa_stream_update_timing_info(s, NULL, NULL))) {
pa_operation_unref(o); pa_operation_unref(o);
s->auto_timing_update_requested = 1; s->auto_timing_update_requested = TRUE;
} }
} }
@ -666,6 +667,20 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, PA_GCC_UNUSED
s->sample_spec = ss; s->sample_spec = ss;
} }
if (s->context->version >= 13 && s->direction != PA_STREAM_UPLOAD) {
pa_usec_t usec;
if (pa_tagstruct_get_usec(t, &usec) < 0) {
pa_context_fail(s->context, PA_ERR_PROTOCOL);
goto finish;
}
if (s->direction == PA_STREAM_RECORD)
s->timing_info.configured_source_usec = usec;
else
s->timing_info.configured_sink_usec = usec;
}
if (!pa_tagstruct_eof(t)) { if (!pa_tagstruct_eof(t)) {
pa_context_fail(s->context, PA_ERR_PROTOCOL); pa_context_fail(s->context, PA_ERR_PROTOCOL);
goto finish; goto finish;
@ -1059,7 +1074,7 @@ static void stream_get_timing_info_callback(pa_pdispatch *pd, uint32_t command,
/* pa_log("pre corrupt w:%u r:%u\n", !o->stream->timing_info_valid || i->write_index_corrupt,!o->stream->timing_info_valid || i->read_index_corrupt); */ /* pa_log("pre corrupt w:%u r:%u\n", !o->stream->timing_info_valid || i->write_index_corrupt,!o->stream->timing_info_valid || i->read_index_corrupt); */
o->stream->timing_info_valid = 0; o->stream->timing_info_valid = FALSE;
i->write_index_corrupt = 0; i->write_index_corrupt = 0;
i->read_index_corrupt = 0; i->read_index_corrupt = 0;

View file

@ -287,7 +287,7 @@ pa_stream* pa_stream_new(
/** Create a new, unconnected stream with the specified name and /** Create a new, unconnected stream with the specified name and
* sample type, and specify the the initial stream property * sample type, and specify the the initial stream property
* list. \since 0.9.10 */ * list. \since 0.9.11 */
pa_stream* pa_stream_new_with_proplist( pa_stream* pa_stream_new_with_proplist(
pa_context *c /**< The context to create this stream in */, pa_context *c /**< The context to create this stream in */,
const char *name /**< A name for this stream */, const char *name /**< A name for this stream */,
@ -377,20 +377,20 @@ int pa_stream_write(
* data will point to the actual data and length will contain the size * data will point to the actual data and length will contain the size
* of the data in bytes (which can be less than a complete framgnet). * of the data in bytes (which can be less than a complete framgnet).
* Use pa_stream_drop() to actually remove the data from the * Use pa_stream_drop() to actually remove the data from the
* buffer. If no data is available will return a NULL pointer \since 0.8 */ * buffer. If no data is available will return a NULL pointer */
int pa_stream_peek( int pa_stream_peek(
pa_stream *p /**< The stream to use */, pa_stream *p /**< The stream to use */,
const void **data /**< Pointer to pointer that will point to data */, const void **data /**< Pointer to pointer that will point to data */,
size_t *bytes /**< The length of the data read in bytes */); size_t *bytes /**< The length of the data read in bytes */);
/** Remove the current fragment on record streams. It is invalid to do this without first /** Remove the current fragment on record streams. It is invalid to do this without first
* calling pa_stream_peek(). \since 0.8 */ * calling pa_stream_peek(). */
int pa_stream_drop(pa_stream *p); int pa_stream_drop(pa_stream *p);
/** Return the number of bytes that may be written using pa_stream_write() */ /** Return the number of bytes that may be written using pa_stream_write() */
size_t pa_stream_writable_size(pa_stream *p); size_t pa_stream_writable_size(pa_stream *p);
/** Return the number of bytes that may be read using pa_stream_read() \since 0.8 */ /** Return the number of bytes that may be read using pa_stream_read()*/
size_t pa_stream_readable_size(pa_stream *p); size_t pa_stream_readable_size(pa_stream *p);
/** Drain a playback stream. Use this for notification when the buffer is empty */ /** Drain a playback stream. Use this for notification when the buffer is empty */
@ -410,18 +410,18 @@ void pa_stream_set_state_callback(pa_stream *s, pa_stream_notify_cb_t cb, void *
void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata); void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
/** Set the callback function that is called when new data is available from the stream. /** Set the callback function that is called when new data is available from the stream.
* Return the number of bytes read. \since 0.8 */ * Return the number of bytes read.*/
void pa_stream_set_read_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata); void pa_stream_set_read_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
/** Set the callback function that is called when a buffer overflow happens. (Only for playback streams) \since 0.8 */ /** Set the callback function that is called when a buffer overflow happens. (Only for playback streams) */
void pa_stream_set_overflow_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata); void pa_stream_set_overflow_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata);
/** Set the callback function that is called when a buffer underflow happens. (Only for playback streams) \since 0.8 */ /** Set the callback function that is called when a buffer underflow happens. (Only for playback streams) */
void pa_stream_set_underflow_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata); void pa_stream_set_underflow_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata);
/** Set the callback function that is called whenever a latency /** Set the callback function that is called whenever a latency
* information update happens. Useful on PA_STREAM_AUTO_TIMING_UPDATE * information update happens. Useful on PA_STREAM_AUTO_TIMING_UPDATE
* streams only. (Only for playback streams) \since 0.8.2 */ * streams only. (Only for playback streams) */
void pa_stream_set_latency_update_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata); void pa_stream_set_latency_update_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata);
/** Set the callback function that is called whenever the stream is /** Set the callback function that is called whenever the stream is
@ -441,24 +441,25 @@ void pa_stream_set_moved_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *
* 0.9.8. \since 0.9.8 */ * 0.9.8. \since 0.9.8 */
void pa_stream_set_suspended_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata); void pa_stream_set_suspended_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata);
/** Pause (or resume) playback of this stream temporarily. Available on both playback and recording streams. \since 0.3 */ /** Pause (or resume) playback of this stream temporarily. Available on both playback and recording streams. */
pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, void *userdata); pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, void *userdata);
/** Flush the playback buffer of this stream. Most of the time you're /** Flush the playback buffer of this stream. Most of the time you're
* better off using the parameter delta of pa_stream_write() instead of this * better off using the parameter delta of pa_stream_write() instead
* function. Available on both playback and recording streams. \since 0.3 */ * of this function. Available on both playback and recording
* streams. */
pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *userdata); pa_operation* pa_stream_flush(pa_stream *s, pa_stream_success_cb_t cb, void *userdata);
/** Reenable prebuffering as specified in the pa_buffer_attr /** Reenable prebuffering as specified in the pa_buffer_attr
* structure. Available for playback streams only. \since 0.6 */ * structure. Available for playback streams only. */
pa_operation* pa_stream_prebuf(pa_stream *s, pa_stream_success_cb_t cb, void *userdata); pa_operation* pa_stream_prebuf(pa_stream *s, pa_stream_success_cb_t cb, void *userdata);
/** Request immediate start of playback on this stream. This disables /** Request immediate start of playback on this stream. This disables
* prebuffering as specified in the pa_buffer_attr * prebuffering as specified in the pa_buffer_attr structure,
* structure, temporarily. Available for playback streams only. \since 0.3 */ * temporarily. Available for playback streams only. */
pa_operation* pa_stream_trigger(pa_stream *s, pa_stream_success_cb_t cb, void *userdata); pa_operation* pa_stream_trigger(pa_stream *s, pa_stream_success_cb_t cb, void *userdata);
/** Rename the stream. \since 0.5 */ /** Rename the stream. */
pa_operation* pa_stream_set_name(pa_stream *s, const char *name, pa_stream_success_cb_t cb, void *userdata); pa_operation* pa_stream_set_name(pa_stream *s, const char *name, pa_stream_success_cb_t cb, void *userdata);
/** Return the current playback/recording time. This is based on the /** Return the current playback/recording time. This is based on the
@ -475,13 +476,13 @@ pa_operation* pa_stream_set_name(pa_stream *s, const char *name, pa_stream_succe
* be disabled by using PA_STREAM_NOT_MONOTONOUS. This may be * be disabled by using PA_STREAM_NOT_MONOTONOUS. This may be
* desirable to deal better with bad estimations of transport * desirable to deal better with bad estimations of transport
* latencies, but may have strange effects if the application is not * latencies, but may have strange effects if the application is not
* able to deal with time going 'backwards'. \since 0.6 */ * able to deal with time going 'backwards'. */
int pa_stream_get_time(pa_stream *s, pa_usec_t *r_usec); int pa_stream_get_time(pa_stream *s, pa_usec_t *r_usec);
/** Return the total stream latency. This function is based on /** Return the total stream latency. This function is based on
* pa_stream_get_time(). In case the stream is a monitoring stream the * pa_stream_get_time(). In case the stream is a monitoring stream the
* result can be negative, i.e. the captured samples are not yet * result can be negative, i.e. the captured samples are not yet
* played. In this case *negative is set to 1. \since 0.6 */ * played. In this case *negative is set to 1. */
int pa_stream_get_latency(pa_stream *s, pa_usec_t *r_usec, int *negative); int pa_stream_get_latency(pa_stream *s, pa_usec_t *r_usec, int *negative);
/** Return the latest raw timing data structure. The returned pointer /** Return the latest raw timing data structure. The returned pointer
@ -493,13 +494,13 @@ int pa_stream_get_latency(pa_stream *s, pa_usec_t *r_usec, int *negative);
* function will fail with PA_ERR_NODATA. Please note that the * function will fail with PA_ERR_NODATA. Please note that the
* write_index member field (and only this field) is updated on each * write_index member field (and only this field) is updated on each
* pa_stream_write() call, not just when a timing update has been * pa_stream_write() call, not just when a timing update has been
* recieved. \since 0.8 */ * recieved. */
const pa_timing_info* pa_stream_get_timing_info(pa_stream *s); const pa_timing_info* pa_stream_get_timing_info(pa_stream *s);
/** Return a pointer to the stream's sample specification. \since 0.6 */ /** Return a pointer to the stream's sample specification. */
const pa_sample_spec* pa_stream_get_sample_spec(pa_stream *s); const pa_sample_spec* pa_stream_get_sample_spec(pa_stream *s);
/** Return a pointer to the stream's channel map. \since 0.8 */ /** Return a pointer to the stream's channel map. */
const pa_channel_map* pa_stream_get_channel_map(pa_stream *s); const pa_channel_map* pa_stream_get_channel_map(pa_stream *s);
/** Return the buffer metrics of the stream. Only valid after the /** Return the buffer metrics of the stream. Only valid after the
@ -527,10 +528,11 @@ pa_operation *pa_stream_update_sample_rate(pa_stream *s, uint32_t rate, pa_strea
* recommended to set as much properties initially via * recommended to set as much properties initially via
* pa_stream_new_with_proplist() as possible instead a posteriori with * pa_stream_new_with_proplist() as possible instead a posteriori with
* this function, since that information may then be used to route * this function, since that information may then be used to route
* this stream to the right device. \since 0.9.10 */ * this stream to the right device. \since 0.9.11 */
pa_operation *pa_stream_proplist_update(pa_stream *s, pa_update_mode_t mode, pa_proplist *p, pa_stream_success_cb_t cb, void *userdata); pa_operation *pa_stream_proplist_update(pa_stream *s, pa_update_mode_t mode, pa_proplist *p, pa_stream_success_cb_t cb, void *userdata);
/* Update the property list of the sink input/source output of this stream, remove entries. \since 0.9.10 */ /* Update the property list of the sink input/source output of this
* stream, remove entries. \since 0.9.11 */
pa_operation *pa_stream_proplist_remove(pa_stream *s, const char *const keys[], pa_stream_success_cb_t cb, void *userdata); pa_operation *pa_stream_proplist_remove(pa_stream *s, const char *const keys[], pa_stream_success_cb_t cb, void *userdata);
PA_C_DECL_END PA_C_DECL_END

View file

@ -8,17 +8,17 @@
Copyright 2004-2006 Lennart Poettering Copyright 2004-2006 Lennart Poettering
Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
PulseAudio is free software; you can redistribute it and/or modify PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2 of the License, by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version. or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details. General Public License for more details.
You should have received a copy of the GNU Lesser General Public License You should have received a copy of the GNU Lesser General Public License
along with PulseAudio; if not, write to the Free Software along with PulseAudio; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@ -39,7 +39,8 @@ a macro and not a function, so it is impossible to get the pointer of
it. */ it. */
#define pa_get_headers_version() ("@PACKAGE_VERSION@") #define pa_get_headers_version() ("@PACKAGE_VERSION@")
/** Return the version of the library the current application is linked to. */ /** Return the version of the library the current application is
* linked to. */
const char* pa_get_library_version(void); const char* pa_get_library_version(void);
/** The current API version. Version 6 relates to Polypaudio /** The current API version. Version 6 relates to Polypaudio
@ -47,8 +48,8 @@ const char* pa_get_library_version(void);
* PA_API_VERSION undefined. */ * PA_API_VERSION undefined. */
#define PA_API_VERSION @PA_API_VERSION@ #define PA_API_VERSION @PA_API_VERSION@
/** The current protocol version. Version 8 relates to Polypaudio 0.8/PulseAudio 0.9. /** The current protocol version. Version 8 relates to Polypaudio
* \since 0.8 */ * 0.8/PulseAudio 0.9. */
#define PA_PROTOCOL_VERSION @PA_PROTOCOL_VERSION@ #define PA_PROTOCOL_VERSION @PA_PROTOCOL_VERSION@
PA_C_DECL_END PA_C_DECL_END

View file

@ -151,22 +151,22 @@ pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b) PA_GCC_CONST;
/** Multiply to per-channel volumes and return the result in *dest. This is only valid for software volumes! */ /** Multiply to per-channel volumes and return the result in *dest. This is only valid for software volumes! */
pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE; pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b) PA_GCC_PURE;
/** Convert a decibel value to a volume. This is only valid for software volumes! \since 0.4 */ /** Convert a decibel value to a volume. This is only valid for software volumes! */
pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST; pa_volume_t pa_sw_volume_from_dB(double f) PA_GCC_CONST;
/** Convert a volume to a decibel value. This is only valid for software volumes! \since 0.4 */ /** Convert a volume to a decibel value. This is only valid for software volumes! */
double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST; double pa_sw_volume_to_dB(pa_volume_t v) PA_GCC_CONST;
/** Convert a linear factor to a volume. This is only valid for software volumes! \since 0.8 */ /** Convert a linear factor to a volume. This is only valid for software volumes! */
pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST; pa_volume_t pa_sw_volume_from_linear(double v) PA_GCC_CONST;
/** Convert a volume to a linear factor. This is only valid for software volumes! \since 0.8 */ /** Convert a volume to a linear factor. This is only valid for software volumes! */
double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST; double pa_sw_volume_to_linear(pa_volume_t v) PA_GCC_CONST;
#ifdef INFINITY #ifdef INFINITY
#define PA_DECIBEL_MININFTY (-INFINITY) #define PA_DECIBEL_MININFTY (-INFINITY)
#else #else
/** This value is used as minus infinity when using pa_volume_{to,from}_dB(). \since 0.4 */ /** This value is used as minus infinity when using pa_volume_{to,from}_dB(). */
#define PA_DECIBEL_MININFTY (-200) #define PA_DECIBEL_MININFTY (-200)
#endif #endif