mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-18 06:59:57 -05:00
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
This commit is contained in:
commit
6ba3333030
41 changed files with 4140 additions and 2911 deletions
|
|
@ -427,7 +427,7 @@ int main(int argc, char *argv[]) {
|
|||
pa_limit_caps();
|
||||
|
||||
/* When capabilities are not supported we will not be able to
|
||||
* aquire RT sched anymore. But yes, that's the way it is. It
|
||||
* acquire RT sched anymore. But yes, that's the way it is. It
|
||||
* is just too risky tun let PA run as root all the time. */
|
||||
}
|
||||
|
||||
|
|
@ -538,7 +538,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
if ((conf->high_priority && !allow_high_priority) ||
|
||||
(conf->realtime_scheduling && !allow_realtime))
|
||||
pa_log_notice(_("Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
|
||||
pa_log_info(_("Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
|
||||
"We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
|
||||
"For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."),
|
||||
PA_REALTIME_GROUP, PA_REALTIME_GROUP);
|
||||
|
|
@ -563,7 +563,7 @@ int main(int argc, char *argv[]) {
|
|||
#endif
|
||||
|
||||
if (conf->high_priority && !pa_can_high_priority()) {
|
||||
pa_log_warn(_("High-priority scheduling enabled in configuration but not allowed by policy."));
|
||||
pa_log_info(_("High-priority scheduling enabled in configuration but not allowed by policy."));
|
||||
conf->high_priority = FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -609,7 +609,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
if (conf->realtime_scheduling && !pa_can_realtime()) {
|
||||
pa_log_warn(_("Real-time scheduling enabled in configuration but not allowed by policy."));
|
||||
pa_log_info(_("Real-time scheduling enabled in configuration but not allowed by policy."));
|
||||
conf->realtime_scheduling = FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1173,7 +1173,7 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
|
|||
|
||||
/* Let's check whether we now use only a smaller part of the
|
||||
buffer then before. If so, we need to make sure that subsequent
|
||||
rewinds are relative to the new maxium fill level and not to the
|
||||
rewinds are relative to the new maximum fill level and not to the
|
||||
current fill level. Thus, let's do a full rewind once, to clear
|
||||
things up. */
|
||||
|
||||
|
|
@ -1300,7 +1300,7 @@ static void thread_func(void *userdata) {
|
|||
/* USB devices on ALSA seem to hit a buffer
|
||||
* underrun during the first iterations much
|
||||
* quicker then we calculate here, probably due to
|
||||
* the transport latency. To accomodate for that
|
||||
* the transport latency. To accommodate for that
|
||||
* we artificially decrease the sleep time until
|
||||
* we have filled the buffer at least once
|
||||
* completely.*/
|
||||
|
|
@ -1620,6 +1620,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
|
|||
pa_assert(u->device_name);
|
||||
pa_log_info("Successfully opened device %s.", u->device_name);
|
||||
|
||||
if (pa_alsa_pcm_is_modem(u->pcm_handle)) {
|
||||
pa_log_notice("Device %s is modem, refusing further initialization.", u->device_name);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (profile)
|
||||
pa_log_info("Selected configuration '%s' (%s).", profile->description, profile->name);
|
||||
|
||||
|
|
|
|||
|
|
@ -1475,6 +1475,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
|
|||
pa_assert(u->device_name);
|
||||
pa_log_info("Successfully opened device %s.", u->device_name);
|
||||
|
||||
if (pa_alsa_pcm_is_modem(u->pcm_handle)) {
|
||||
pa_log_notice("Device %s is modem, refusing further initialization.", u->device_name);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (profile)
|
||||
pa_log_info("Selected configuration '%s' (%s).", profile->description, profile->name);
|
||||
|
||||
|
|
|
|||
|
|
@ -705,7 +705,7 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
|
|||
} else {
|
||||
/* Hmm, so the next entry does not have the same
|
||||
* number of channels, so let's go backwards until we
|
||||
* find the next entry with a differnt number of
|
||||
* find the next entry with a different number of
|
||||
* channels */
|
||||
|
||||
for (i--; i >= 0; i--)
|
||||
|
|
@ -1063,7 +1063,7 @@ snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const
|
|||
fallback_elem = NULL;
|
||||
}
|
||||
|
||||
pa_log_warn("Cannot find fallback mixer control \"%s\" or mixer control is no combination of switch/volume.", snd_mixer_selem_id_get_name(sid));
|
||||
pa_log_info("Cannot find fallback mixer control \"%s\" or mixer control is no combination of switch/volume.", snd_mixer_selem_id_get_name(sid));
|
||||
}
|
||||
|
||||
if (elem && fallback_elem) {
|
||||
|
|
@ -1769,3 +1769,15 @@ pa_bool_t pa_alsa_pcm_is_hw(snd_pcm_t *pcm) {
|
|||
|
||||
return snd_pcm_info_get_card(info) >= 0;
|
||||
}
|
||||
|
||||
pa_bool_t pa_alsa_pcm_is_modem(snd_pcm_t *pcm) {
|
||||
snd_pcm_info_t* info;
|
||||
snd_pcm_info_alloca(&info);
|
||||
|
||||
pa_assert(pcm);
|
||||
|
||||
if (snd_pcm_info(pcm, info) < 0)
|
||||
return FALSE;
|
||||
|
||||
return snd_pcm_info_get_class(info) == SND_PCM_CLASS_MODEM;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,4 +141,6 @@ char *pa_alsa_get_reserve_name(const char *device);
|
|||
|
||||
pa_bool_t pa_alsa_pcm_is_hw(snd_pcm_t *pcm);
|
||||
|
||||
pa_bool_t pa_alsa_pcm_is_modem(snd_pcm_t *pcm);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ static const char *strip_udi(const char *udi) {
|
|||
enum alsa_type {
|
||||
ALSA_TYPE_PLAYBACK,
|
||||
ALSA_TYPE_CAPTURE,
|
||||
ALSA_TYPE_CONTROL,
|
||||
ALSA_TYPE_OTHER
|
||||
};
|
||||
|
||||
|
|
@ -141,6 +142,8 @@ static enum alsa_type hal_alsa_device_get_type(LibHalContext *context, const cha
|
|||
t = ALSA_TYPE_PLAYBACK;
|
||||
else if (pa_streq(type, "capture"))
|
||||
t = ALSA_TYPE_CAPTURE;
|
||||
else if (pa_streq(type, "control"))
|
||||
t = ALSA_TYPE_CONTROL;
|
||||
|
||||
libhal_free_string(type);
|
||||
|
||||
|
|
@ -171,7 +174,8 @@ static pa_bool_t hal_alsa_device_is_modem(LibHalContext *context, const char *ud
|
|||
|
||||
finish:
|
||||
if (dbus_error_is_set(&error)) {
|
||||
pa_log_error("D-Bus error while parsing HAL ALSA data: %s: %s", error.name, error.message);
|
||||
if (!dbus_error_has_name(&error, "org.freedesktop.Hal.NoSuchProperty"))
|
||||
pa_log_error("D-Bus error while parsing HAL ALSA data: %s: %s", error.name, error.message);
|
||||
dbus_error_free(&error);
|
||||
}
|
||||
|
||||
|
|
@ -193,10 +197,23 @@ static int hal_device_load_alsa(struct userdata *u, const char *udi, struct devi
|
|||
|
||||
/* We only care for PCM devices */
|
||||
type = hal_alsa_device_get_type(u->context, udi);
|
||||
if (type == ALSA_TYPE_OTHER)
|
||||
|
||||
/* For each ALSA card that appears the control device will be the
|
||||
* last one to be created, this is considered part of the ALSA
|
||||
* usperspace API. We rely on this and load our modules only when
|
||||
* the control device is available assuming that *all* device
|
||||
* nodes have been properly created and assigned the right ACLs at
|
||||
* that time. Also see:
|
||||
*
|
||||
* http://mailman.alsa-project.org/pipermail/alsa-devel/2009-April/015958.html
|
||||
*
|
||||
* and the associated thread.*/
|
||||
|
||||
if (type != ALSA_TYPE_CONTROL)
|
||||
goto fail;
|
||||
|
||||
/* We don't care for modems */
|
||||
/* We don't care for modems -- this is most likely not set for
|
||||
* control devices, so kind of pointless here. */
|
||||
if (hal_alsa_device_is_modem(u->context, udi))
|
||||
goto fail;
|
||||
|
||||
|
|
@ -411,9 +428,10 @@ static int hal_device_add_all(struct userdata *u) {
|
|||
for (i = 0; i < n; i++) {
|
||||
struct device *d;
|
||||
|
||||
if ((d = hal_device_add(u, udis[i])))
|
||||
if ((d = hal_device_add(u, udis[i]))) {
|
||||
count++;
|
||||
else
|
||||
pa_log_debug("Loaded device %s", udis[i]);
|
||||
} else
|
||||
pa_log_debug("Not loaded device %s", udis[i]);
|
||||
}
|
||||
}
|
||||
|
|
@ -449,6 +467,8 @@ static void device_added_cb(LibHalContext *context, const char *udi) {
|
|||
|
||||
if (!hal_device_add(u, udi))
|
||||
pa_log_debug("Not loaded device %s", udi);
|
||||
else
|
||||
pa_log_debug("Loaded device %s", udi);
|
||||
|
||||
finish:
|
||||
if (dbus_error_is_set(&error)) {
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ static void browser_cb(
|
|||
pa_log("avahi_service_resolver_new() failed: %s", avahi_strerror(avahi_client_errno(u->client)));
|
||||
|
||||
/* We ignore the returned resolver object here, since the we don't
|
||||
* need to attach any special data to it, and we can still destory
|
||||
* need to attach any special data to it, and we can still destroy
|
||||
* it from the callback */
|
||||
|
||||
} else if (event == AVAHI_BROWSER_REMOVE) {
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ static void browser_cb(
|
|||
pa_log("avahi_service_resolver_new() failed: %s", avahi_strerror(avahi_client_errno(u->client)));
|
||||
|
||||
/* We ignore the returned resolver object here, since the we don't
|
||||
* need to attach any special data to it, and we can still destory
|
||||
* need to attach any special data to it, and we can still destroy
|
||||
* it from the callback */
|
||||
|
||||
} else if (event == AVAHI_BROWSER_REMOVE) {
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
|
|||
}
|
||||
}
|
||||
|
||||
/* Check wheter there was a timestamp overflow */
|
||||
/* Check whether there was a timestamp overflow */
|
||||
k = (int64_t) s->rtp_context.timestamp - (int64_t) s->offset;
|
||||
j = (int64_t) 0x100000000LL - (int64_t) s->offset + (int64_t) s->rtp_context.timestamp;
|
||||
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ static void line_callback(pa_ioline *line, const char *s, void *userdata) {
|
|||
}
|
||||
if (!strlen(s2)) {
|
||||
/* End of headers */
|
||||
/* We will have a header left from our looping itteration, so add it in :) */
|
||||
/* We will have a header left from our looping iteration, so add it in :) */
|
||||
if (c->last_header) {
|
||||
/* This is not a continuation header so let's dump it into our proplist */
|
||||
pa_headerlist_puts(c->response_headers, c->last_header, pa_strbuf_tostring_free(c->header_buffer));
|
||||
|
|
@ -488,7 +488,7 @@ int pa_rtsp_record(pa_rtsp_client* c, uint16_t* seq, uint32_t* rtptime) {
|
|||
|
||||
pa_assert(c);
|
||||
if (!c->session) {
|
||||
/* No seesion in progres */
|
||||
/* No session in progress */
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
* \li pa_channel_map_init_stereo() - Create a standard stereo mapping.
|
||||
* \li pa_channel_map_init_auto() - Create a standard channel map for a specific number of channels
|
||||
* \li pa_channel_map_init_extend() - Similar to
|
||||
* pa_channel_map_init_auto() but synthesize a channel map if noone
|
||||
* pa_channel_map_init_auto() but synthesize a channel map if no
|
||||
* predefined one is known for the specified number of channels.
|
||||
*
|
||||
* \section conv_sec Convenience Functions
|
||||
|
|
@ -251,7 +251,7 @@ typedef struct pa_channel_map {
|
|||
* pa_channel_map_valid() will fail for it. */
|
||||
pa_channel_map* pa_channel_map_init(pa_channel_map *m);
|
||||
|
||||
/** Initialize the specified channel map for monoaural audio and return a pointer to it */
|
||||
/** Initialize the specified channel map for monaural audio and return a pointer to it */
|
||||
pa_channel_map* pa_channel_map_init_mono(pa_channel_map *m);
|
||||
|
||||
/** Initialize the specified channel map for stereophonic audio and return a pointer to it */
|
||||
|
|
@ -282,7 +282,7 @@ const char* pa_channel_position_to_pretty_string(pa_channel_position_t pos);
|
|||
* it might become part of an ABI. */
|
||||
#define PA_CHANNEL_MAP_SNPRINT_MAX 336
|
||||
|
||||
/** Make a humand readable string from the specified channel map */
|
||||
/** Make a human readable string from the specified channel map */
|
||||
char* pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map);
|
||||
|
||||
/** Parse a channel position list or well-known mapping name into a
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ typedef struct pa_client_conf {
|
|||
pa_client_conf *pa_client_conf_new(void);
|
||||
void pa_client_conf_free(pa_client_conf *c);
|
||||
|
||||
/* Load the configuration data from the speicified file, overwriting
|
||||
/* Load the configuration data from the specified file, overwriting
|
||||
* the current settings in *c. When the filename is NULL, the
|
||||
* default client configuration file name is used. */
|
||||
int pa_client_conf_load(pa_client_conf *c, const char *filename);
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ typedef enum pa_stream_state {
|
|||
PA_STREAM_UNCONNECTED, /**< The stream is not yet connected to any sink or source */
|
||||
PA_STREAM_CREATING, /**< The stream is being created */
|
||||
PA_STREAM_READY, /**< The stream is established, you may pass audio data to it now */
|
||||
PA_STREAM_FAILED, /**< An error occured that made the stream invalid */
|
||||
PA_STREAM_FAILED, /**< An error occurred that made the stream invalid */
|
||||
PA_STREAM_TERMINATED /**< The stream has been terminated cleanly */
|
||||
} pa_stream_state_t;
|
||||
|
||||
|
|
@ -216,7 +216,7 @@ typedef enum pa_stream_flags {
|
|||
* sink/device. Useful if you use any of the PA_STREAM_FIX_ flags
|
||||
* and want to make sure that resampling never takes place --
|
||||
* which might happen if the stream is moved to another
|
||||
* sink/source whith a different sample spec/channel map. Only
|
||||
* sink/source with a different sample spec/channel map. Only
|
||||
* supported when the server is at least PA 0.9.8. It is ignored
|
||||
* on older servers. \since 0.9.8 */
|
||||
|
||||
|
|
@ -250,7 +250,7 @@ typedef enum pa_stream_flags {
|
|||
* asking for less new data than this value will be made to the
|
||||
* client it will also guarantee that requests are generated as
|
||||
* early as this limit is reached. This flag should only be set in
|
||||
* very few situations where compatiblity with a fragment-based
|
||||
* very few situations where compatibility with a fragment-based
|
||||
* playback model needs to be kept and the client applications
|
||||
* cannot deal with data requests that are delayed to the latest
|
||||
* moment possible. (Usually these are programs that use usleep()
|
||||
|
|
@ -326,12 +326,12 @@ typedef struct pa_buffer_attr {
|
|||
* plus the playback buffer size is configured to this value. Set
|
||||
* PA_STREAM_ADJUST_LATENCY if you are interested in adjusting the
|
||||
* overall latency. Don't set it if you are interested in
|
||||
* configuring the server-sider per-stream playback buffer
|
||||
* configuring the server-side per-stream playback buffer
|
||||
* size. */
|
||||
|
||||
uint32_t prebuf;
|
||||
/**< Playback only: pre-buffering. The server does not start with
|
||||
* playback before at least prebug bytes are available in the
|
||||
* playback before at least prebuf bytes are available in the
|
||||
* buffer. It is recommended to set this to (uint32_t) -1, which
|
||||
* will initialize this to the same value as tlength, whatever
|
||||
* that may be. Initialize to 0 to enable manual start/stop
|
||||
|
|
@ -352,7 +352,7 @@ typedef struct pa_buffer_attr {
|
|||
|
||||
uint32_t fragsize;
|
||||
/**< Recording only: fragment size. The server sends data in
|
||||
* blocks of fragsize bytes size. Large values deminish
|
||||
* blocks of fragsize bytes size. Large values diminish
|
||||
* interactivity with other operations on the connection context
|
||||
* but decrease control overhead. It is recommended to set this to
|
||||
* (uint32_t) -1, which will initialize this to a value that is
|
||||
|
|
@ -392,7 +392,7 @@ enum {
|
|||
PA_ERR_NOEXTENSION, /**< Extension does not exist. \since 0.9.12 */
|
||||
PA_ERR_OBSOLETE, /**< Obsolete functionality. \since 0.9.15 */
|
||||
PA_ERR_NOTIMPLEMENTED, /**< Missing implementation. \since 0.9.15 */
|
||||
PA_ERR_FORKED, /**< The caler forked without calling execve() and tried to reuse the context. \since 0.9.15 */
|
||||
PA_ERR_FORKED, /**< The caller forked without calling execve() and tried to reuse the context. \since 0.9.15 */
|
||||
PA_ERR_MAX /**< Not really an error but the first invalid error code */
|
||||
};
|
||||
|
||||
|
|
@ -490,7 +490,7 @@ typedef enum pa_subscription_event_type {
|
|||
/**< Event type: Sample cache item */
|
||||
|
||||
PA_SUBSCRIPTION_EVENT_SERVER = 0x0007U,
|
||||
/**< Event type: Global server change, only occuring with PA_SUBSCRIPTION_EVENT_CHANGE. */
|
||||
/**< Event type: Global server change, only occurring with PA_SUBSCRIPTION_EVENT_CHANGE. */
|
||||
|
||||
/** \cond fulldocs */
|
||||
PA_SUBSCRIPTION_EVENT_AUTOLOAD = 0x0008U,
|
||||
|
|
@ -576,7 +576,7 @@ typedef struct pa_timing_info {
|
|||
/**< Non-zero if the local and the remote machine have
|
||||
* synchronized clocks. If synchronized clocks are detected
|
||||
* transport_usec becomes much more reliable. However, the code
|
||||
* that detects synchronized clocks is very limited und unreliable
|
||||
* that detects synchronized clocks is very limited and unreliable
|
||||
* itself. */
|
||||
|
||||
pa_usec_t sink_usec;
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ struct pa_stream {
|
|||
uint32_t write_index_not_before;
|
||||
uint32_t read_index_not_before;
|
||||
|
||||
/* Data about individual timing update correctoins */
|
||||
/* Data about individual timing update corrections */
|
||||
pa_index_correction write_index_corrections[PA_MAX_WRITE_INDEX_CORRECTIONS];
|
||||
int current_write_index_correction;
|
||||
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ typedef struct pa_sink_input_info {
|
|||
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; /**< Thre resampling method used by this sink input. */
|
||||
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 */
|
||||
|
|
@ -501,7 +501,7 @@ typedef struct pa_source_output_info {
|
|||
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. */
|
||||
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. */
|
||||
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 */
|
||||
} pa_source_output_info;
|
||||
|
|
@ -539,7 +539,7 @@ pa_operation* pa_context_kill_source_output(pa_context *c, uint32_t idx, pa_cont
|
|||
* any new release. */
|
||||
typedef struct pa_stat_info {
|
||||
uint32_t memblock_total; /**< Currently allocated memory blocks */
|
||||
uint32_t memblock_total_size; /**< Currentl total size of 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 scache_size; /**< Total size of all sample cache entries. */
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ struct pollfd;
|
|||
*
|
||||
* -# Prepare - Build a list of file descriptors
|
||||
* that need to be monitored and calculate the next timeout.
|
||||
* -# Poll - Execute the actuall poll() system call.
|
||||
* -# Poll - Execute the actual poll() system call.
|
||||
* -# Dispatch - Dispatch any events that have fired.
|
||||
*
|
||||
* When using the main loop, the application can either execute each
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ int pa_proplist_get(pa_proplist *p, const char *key, const void **data, size_t *
|
|||
/** Update mode enum for pa_proplist_update(). \since 0.9.11 */
|
||||
typedef enum pa_update_mode {
|
||||
PA_UPDATE_SET
|
||||
/**< Replace the entirey property list with the new one. Don't keep
|
||||
/**< Replace the entire property list with the new one. Don't keep
|
||||
* any of the old data around */,
|
||||
|
||||
PA_UPDATE_MERGE
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
* \section intro_sec Introduction
|
||||
*
|
||||
* This document describes the client API for the PulseAudio sound
|
||||
* server. The API comes in two flavours to accomodate different styles
|
||||
* server. The API comes in two flavours to accommodate different styles
|
||||
* of applications and different needs in complexity:
|
||||
*
|
||||
* \li The complete but somewhat complicated to use asynchronous API
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
*
|
||||
* \section chan_sec Channels
|
||||
*
|
||||
* PulseAudio supports up to 32 individiual channels. The order of the
|
||||
* PulseAudio supports up to 32 individual channels. The order of the
|
||||
* channels is up to the application, but they must be continous. To map
|
||||
* channels to speakers, see \ref channelmap.
|
||||
*
|
||||
|
|
@ -221,7 +221,7 @@ typedef enum pa_sample_format {
|
|||
#define PA_SAMPLE_FLOAT32 PA_SAMPLE_FLOAT32NE
|
||||
|
||||
/** \cond fulldocs */
|
||||
/* Allow clients to check with #ifdef for thse sample formats */
|
||||
/* Allow clients to check with #ifdef for these sample formats */
|
||||
#define PA_SAMPLE_U8 PA_SAMPLE_U8
|
||||
#define PA_SAMPLE_ALAW PA_SAMPLE_ALAW
|
||||
#define PA_SAMPLE_ULAW PA_SAMPLE_ULAW
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
* \section overv_sec Overview
|
||||
*
|
||||
* The application can be notified, asynchronously, whenever the internal
|
||||
* layout of the server changes. Possible notifications are desribed in the
|
||||
* layout of the server changes. Possible notifications are described in the
|
||||
* \ref pa_subscription_event_type and \ref pa_subscription_mask
|
||||
* enumerations.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ struct timeval *pa_gettimeofday(struct timeval *tv);
|
|||
* structs. */
|
||||
pa_usec_t pa_timeval_diff(const struct timeval *a, const struct timeval *b) PA_GCC_PURE;
|
||||
|
||||
/** Compare the two timeval structs and return 0 when equal, negative when a < b, positive otherwse */
|
||||
/** Compare the two timeval structs and return 0 when equal, negative when a < b, positive otherwise */
|
||||
int pa_timeval_cmp(const struct timeval *a, const struct timeval *b) PA_GCC_PURE;
|
||||
|
||||
/** Return the time difference between now and the specified timestamp */
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ int pa_authkey_load_auto(const char *fn, void *data, size_t length) {
|
|||
return pa_authkey_load(p, data, length);
|
||||
}
|
||||
|
||||
/* Store the specified cookie in the speicified cookie file */
|
||||
/* Store the specified cookie in the specified cookie file */
|
||||
int pa_authkey_save(const char *fn, const void *data, size_t length) {
|
||||
int fd = -1;
|
||||
int unlock = 0, ret = -1;
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ ssize_t pa_write(int fd, const void *buf, size_t count, int *type) {
|
|||
}
|
||||
|
||||
/** Calls read() in a loop. Makes sure that as much as 'size' bytes,
|
||||
* unless EOF is reached or an error occured */
|
||||
* unless EOF is reached or an error occurred */
|
||||
ssize_t pa_loop_read(int fd, void*data, size_t size, int *type) {
|
||||
ssize_t ret = 0;
|
||||
int _type;
|
||||
|
|
@ -1242,7 +1242,7 @@ int pa_lock_lockfile(const char *fn) {
|
|||
goto fail;
|
||||
}
|
||||
|
||||
/* Check wheter the file has been removed meanwhile. When yes,
|
||||
/* Check whether the file has been removed meanwhile. When yes,
|
||||
* restart this loop, otherwise, we're done */
|
||||
if (st.st_nlink >= 1)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ void pa_log_levelv_meta(
|
|||
|
||||
/* We don't use dynamic memory allocation here to minimize the hit
|
||||
* in RT threads */
|
||||
char text[4096], location[128], timestamp[32];
|
||||
char text[16*1024], location[128], timestamp[32];
|
||||
|
||||
pa_assert(level < PA_LOG_LEVEL_MAX);
|
||||
pa_assert(format);
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ struct pa_sink_input {
|
|||
* changes. Called from IO context. */
|
||||
void (*update_max_rewind) (pa_sink_input *i, size_t nbytes); /* may be NULL */
|
||||
|
||||
/* Called whenever the maxiumum request size of the sink
|
||||
/* Called whenever the maximum request size of the sink
|
||||
* changes. Called from IO context. */
|
||||
void (*update_max_request) (pa_sink_input *i, size_t nbytes); /* may be NULL */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue