mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-02 09:01:48 -05:00
Added snd_pcm_type_name()
Fixed rate conversion plugin (SIGSEGV) - rounding problem
This commit is contained in:
parent
c8fab38b67
commit
157107491c
5 changed files with 54 additions and 2 deletions
|
|
@ -348,6 +348,7 @@ enum _snd_pcm_type {
|
||||||
SND_PCM_TYPE_DMIX,
|
SND_PCM_TYPE_DMIX,
|
||||||
/** Jack Audio Connection Kit plugin */
|
/** Jack Audio Connection Kit plugin */
|
||||||
SND_PCM_TYPE_JACK,
|
SND_PCM_TYPE_JACK,
|
||||||
|
SND_PCM_TYPE_LAST = SND_PCM_TYPE_JACK
|
||||||
};
|
};
|
||||||
|
|
||||||
/** PCM type */
|
/** PCM type */
|
||||||
|
|
@ -947,6 +948,7 @@ snd_pcm_uframes_t snd_pcm_status_get_overrange(const snd_pcm_status_t *obj);
|
||||||
* \{
|
* \{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const char *snd_pcm_type_name(snd_pcm_state_t state);
|
||||||
const char *snd_pcm_stream_name(const snd_pcm_stream_t stream);
|
const char *snd_pcm_stream_name(const snd_pcm_stream_t stream);
|
||||||
const char *snd_pcm_access_name(const snd_pcm_access_t _access);
|
const char *snd_pcm_access_name(const snd_pcm_access_t _access);
|
||||||
const char *snd_pcm_format_name(const snd_pcm_format_t format);
|
const char *snd_pcm_format_name(const snd_pcm_format_t format);
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ ALSA_0.9.0rc8 {
|
||||||
ALSA_0.9.0 {
|
ALSA_0.9.0 {
|
||||||
global:
|
global:
|
||||||
|
|
||||||
|
snd_pcm_type_name;
|
||||||
snd_timer_query_info;
|
snd_timer_query_info;
|
||||||
snd_timer_query_params;
|
snd_timer_query_params;
|
||||||
snd_timer_query_status;
|
snd_timer_query_status;
|
||||||
|
|
|
||||||
|
|
@ -1217,6 +1217,7 @@ int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsign
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DOC_HIDDEN
|
#ifndef DOC_HIDDEN
|
||||||
|
#define PCMTYPE(v) [SND_PCM_TYPE_##v] = #v
|
||||||
#define STATE(v) [SND_PCM_STATE_##v] = #v
|
#define STATE(v) [SND_PCM_STATE_##v] = #v
|
||||||
#define STREAM(v) [SND_PCM_STREAM_##v] = #v
|
#define STREAM(v) [SND_PCM_STREAM_##v] = #v
|
||||||
#define READY(v) [SND_PCM_READY_##v] = #v
|
#define READY(v) [SND_PCM_READY_##v] = #v
|
||||||
|
|
@ -1233,6 +1234,7 @@ int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsign
|
||||||
#define FORMATD(v, d) [SND_PCM_FORMAT_##v] = d
|
#define FORMATD(v, d) [SND_PCM_FORMAT_##v] = d
|
||||||
#define SUBFORMATD(v, d) [SND_PCM_SUBFORMAT_##v] = d
|
#define SUBFORMATD(v, d) [SND_PCM_SUBFORMAT_##v] = d
|
||||||
|
|
||||||
|
|
||||||
static const char *snd_pcm_stream_names[] = {
|
static const char *snd_pcm_stream_names[] = {
|
||||||
STREAM(PLAYBACK),
|
STREAM(PLAYBACK),
|
||||||
STREAM(CAPTURE),
|
STREAM(CAPTURE),
|
||||||
|
|
@ -1339,6 +1341,33 @@ static const char *snd_pcm_format_descriptions[] = {
|
||||||
FORMATD(U18_3BE, "Unsigned 18 bit Big Endian in 3bytes"),
|
FORMATD(U18_3BE, "Unsigned 18 bit Big Endian in 3bytes"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *snd_pcm_type_names[] = {
|
||||||
|
PCMTYPE(HW),
|
||||||
|
PCMTYPE(HOOKS),
|
||||||
|
PCMTYPE(MULTI),
|
||||||
|
PCMTYPE(FILE),
|
||||||
|
PCMTYPE(NULL),
|
||||||
|
PCMTYPE(SHM),
|
||||||
|
PCMTYPE(INET),
|
||||||
|
PCMTYPE(COPY),
|
||||||
|
PCMTYPE(LINEAR),
|
||||||
|
PCMTYPE(ALAW),
|
||||||
|
PCMTYPE(MULAW),
|
||||||
|
PCMTYPE(ADPCM),
|
||||||
|
PCMTYPE(RATE),
|
||||||
|
PCMTYPE(ROUTE),
|
||||||
|
PCMTYPE(PLUG),
|
||||||
|
PCMTYPE(SHARE),
|
||||||
|
PCMTYPE(METER),
|
||||||
|
PCMTYPE(MIX),
|
||||||
|
PCMTYPE(DROUTE),
|
||||||
|
PCMTYPE(LBSERVER),
|
||||||
|
PCMTYPE(LINEAR_FLOAT),
|
||||||
|
PCMTYPE(LADSPA),
|
||||||
|
PCMTYPE(DMIX),
|
||||||
|
PCMTYPE(JACK),
|
||||||
|
};
|
||||||
|
|
||||||
static const char *snd_pcm_subformat_names[] = {
|
static const char *snd_pcm_subformat_names[] = {
|
||||||
SUBFORMAT(STD),
|
SUBFORMAT(STD),
|
||||||
};
|
};
|
||||||
|
|
@ -1511,6 +1540,23 @@ const char *snd_pcm_state_name(snd_pcm_state_t state)
|
||||||
return snd_pcm_state_names[state];
|
return snd_pcm_state_names[state];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief get name of PCM type
|
||||||
|
* \param type PCM type
|
||||||
|
* \return ascii name of PCM type
|
||||||
|
*/
|
||||||
|
#ifndef DOXYGEN
|
||||||
|
const char *INTERNAL(snd_pcm_type_name)(snd_pcm_type_t type)
|
||||||
|
#else
|
||||||
|
const char *snd_pcm_type_name(snd_pcm_type_t type)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (type > SND_PCM_TYPE_LAST)
|
||||||
|
return NULL;
|
||||||
|
return snd_pcm_type_names[type];
|
||||||
|
}
|
||||||
|
default_symbol_version(__snd_pcm_type_name, snd_pcm_type_name, ALSA_0.9.0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Dump current hardware setup for PCM
|
* \brief Dump current hardware setup for PCM
|
||||||
* \param pcm PCM handle
|
* \param pcm PCM handle
|
||||||
|
|
|
||||||
|
|
@ -351,6 +351,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_write_areas(snd_pcm_t *pcm,
|
||||||
snd_pcm_t *slave = plugin->slave;
|
snd_pcm_t *slave = plugin->slave;
|
||||||
snd_pcm_uframes_t xfer = 0;
|
snd_pcm_uframes_t xfer = 0;
|
||||||
snd_pcm_sframes_t result;
|
snd_pcm_sframes_t result;
|
||||||
|
int err;
|
||||||
|
|
||||||
while (size > 0) {
|
while (size > 0) {
|
||||||
snd_pcm_uframes_t frames = size;
|
snd_pcm_uframes_t frames = size;
|
||||||
|
|
@ -358,8 +359,8 @@ static snd_pcm_sframes_t snd_pcm_plugin_write_areas(snd_pcm_t *pcm,
|
||||||
snd_pcm_uframes_t slave_offset;
|
snd_pcm_uframes_t slave_offset;
|
||||||
snd_pcm_uframes_t slave_frames = ULONG_MAX;
|
snd_pcm_uframes_t slave_frames = ULONG_MAX;
|
||||||
|
|
||||||
snd_pcm_mmap_begin(slave, &slave_areas, &slave_offset, &slave_frames);
|
err = snd_pcm_mmap_begin(slave, &slave_areas, &slave_offset, &slave_frames);
|
||||||
if (slave_frames == 0)
|
if (err < 0 || slave_frames == 0)
|
||||||
break;
|
break;
|
||||||
frames = plugin->write(pcm, areas, offset, frames,
|
frames = plugin->write(pcm, areas, offset, frames,
|
||||||
slave_areas, slave_offset, &slave_frames);
|
slave_areas, slave_offset, &slave_frames);
|
||||||
|
|
|
||||||
|
|
@ -458,11 +458,13 @@ static int snd_pcm_rate_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t * params)
|
||||||
}
|
}
|
||||||
params->boundary = boundary1;
|
params->boundary = boundary1;
|
||||||
sparams.boundary = boundary2;
|
sparams.boundary = boundary2;
|
||||||
|
#if 0
|
||||||
if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
|
if (pcm->stream == SND_PCM_STREAM_PLAYBACK) {
|
||||||
rate->pitch = (((u_int64_t)boundary2 * DIV) + boundary1 / 2) / boundary1;
|
rate->pitch = (((u_int64_t)boundary2 * DIV) + boundary1 / 2) / boundary1;
|
||||||
} else {
|
} else {
|
||||||
rate->pitch = (((u_int64_t)boundary1 * DIV) + boundary2 / 2) / boundary2;
|
rate->pitch = (((u_int64_t)boundary1 * DIV) + boundary2 / 2) / boundary2;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
recalc(pcm, &sparams.avail_min);
|
recalc(pcm, &sparams.avail_min);
|
||||||
recalc(pcm, &sparams.xfer_align);
|
recalc(pcm, &sparams.xfer_align);
|
||||||
recalc(pcm, &sparams.start_threshold);
|
recalc(pcm, &sparams.start_threshold);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue