mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Added snd_pcm_format_physical_width...
This commit is contained in:
parent
098b4b6a96
commit
749f2ffd77
3 changed files with 42 additions and 4 deletions
|
|
@ -54,7 +54,8 @@ int snd_pcm_format_unsigned(int format);
|
||||||
int snd_pcm_format_linear(int format);
|
int snd_pcm_format_linear(int format);
|
||||||
int snd_pcm_format_little_endian(int format);
|
int snd_pcm_format_little_endian(int format);
|
||||||
int snd_pcm_format_big_endian(int format);
|
int snd_pcm_format_big_endian(int format);
|
||||||
int snd_pcm_format_width(int format); /* in bits */
|
int snd_pcm_format_width(int format); /* in bits */
|
||||||
|
int snd_pcm_format_physical_width(int format); /* in bits */
|
||||||
int snd_pcm_build_linear_format(int width, int unsignd, int big_endian);
|
int snd_pcm_build_linear_format(int width, int unsignd, int big_endian);
|
||||||
ssize_t snd_pcm_format_size(int format, size_t samples);
|
ssize_t snd_pcm_format_size(int format, size_t samples);
|
||||||
unsigned char snd_pcm_format_silence(int format);
|
unsigned char snd_pcm_format_silence(int format);
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,43 @@ int snd_pcm_format_width(int format)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int snd_pcm_format_physical_width(int format)
|
||||||
|
{
|
||||||
|
switch (format) {
|
||||||
|
case SND_PCM_SFMT_S8:
|
||||||
|
case SND_PCM_SFMT_U8:
|
||||||
|
return 8;
|
||||||
|
case SND_PCM_SFMT_S16_LE:
|
||||||
|
case SND_PCM_SFMT_S16_BE:
|
||||||
|
case SND_PCM_SFMT_U16_LE:
|
||||||
|
case SND_PCM_SFMT_U16_BE:
|
||||||
|
return 16;
|
||||||
|
case SND_PCM_SFMT_S24_LE:
|
||||||
|
case SND_PCM_SFMT_S24_BE:
|
||||||
|
case SND_PCM_SFMT_U24_LE:
|
||||||
|
case SND_PCM_SFMT_U24_BE:
|
||||||
|
case SND_PCM_SFMT_S32_LE:
|
||||||
|
case SND_PCM_SFMT_S32_BE:
|
||||||
|
case SND_PCM_SFMT_U32_LE:
|
||||||
|
case SND_PCM_SFMT_U32_BE:
|
||||||
|
case SND_PCM_SFMT_FLOAT_LE:
|
||||||
|
case SND_PCM_SFMT_FLOAT_BE:
|
||||||
|
case SND_PCM_SFMT_IEC958_SUBFRAME_LE:
|
||||||
|
case SND_PCM_SFMT_IEC958_SUBFRAME_BE:
|
||||||
|
return 32;
|
||||||
|
case SND_PCM_SFMT_FLOAT64_LE:
|
||||||
|
case SND_PCM_SFMT_FLOAT64_BE:
|
||||||
|
return 64;
|
||||||
|
case SND_PCM_SFMT_MU_LAW:
|
||||||
|
case SND_PCM_SFMT_A_LAW:
|
||||||
|
return 8;
|
||||||
|
case SND_PCM_SFMT_IMA_ADPCM:
|
||||||
|
return 4;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t snd_pcm_format_size(int format, size_t samples)
|
ssize_t snd_pcm_format_size(int format, size_t samples)
|
||||||
{
|
{
|
||||||
if (samples < 0)
|
if (samples < 0)
|
||||||
|
|
|
||||||
|
|
@ -53,12 +53,12 @@ snd_pcm_plugin_t *snd_pcm_plugin_build(snd_pcm_plugin_handle_t *handle,
|
||||||
plugin->name = name ? strdup(name) : NULL;
|
plugin->name = name ? strdup(name) : NULL;
|
||||||
if (src_format) {
|
if (src_format) {
|
||||||
memcpy(&plugin->src_format, src_format, sizeof(snd_pcm_format_t));
|
memcpy(&plugin->src_format, src_format, sizeof(snd_pcm_format_t));
|
||||||
if ((plugin->src_width = snd_pcm_format_width(src_format->format)) < 0)
|
if ((plugin->src_width = snd_pcm_format_physical_width(src_format->format)) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (dst_format) {
|
if (dst_format) {
|
||||||
memcpy(&plugin->dst_format, dst_format, sizeof(snd_pcm_format_t));
|
memcpy(&plugin->dst_format, dst_format, sizeof(snd_pcm_format_t));
|
||||||
if ((plugin->dst_width = snd_pcm_format_width(dst_format->format)) < 0)
|
if ((plugin->dst_width = snd_pcm_format_physical_width(dst_format->format)) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
plugin->handle = handle;
|
plugin->handle = handle;
|
||||||
|
|
@ -771,7 +771,7 @@ static int snd_pcm_plugin_xvoices(snd_pcm_plugin_t *plugin,
|
||||||
snd_pcm_plugin_voice_t *v;
|
snd_pcm_plugin_voice_t *v;
|
||||||
|
|
||||||
*voices = NULL;
|
*voices = NULL;
|
||||||
if ((width = snd_pcm_format_width(format->format)) < 0)
|
if ((width = snd_pcm_format_physical_width(format->format)) < 0)
|
||||||
return width;
|
return width;
|
||||||
size = format->voices * samples * width;
|
size = format->voices * samples * width;
|
||||||
if ((size % 8) != 0)
|
if ((size % 8) != 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue