提交 d66bddd7 编写于 作者: M Michael Walle 提交者: malc

alsaaudio: add endianness support for VoiceIn

Signed-off-by: NMichael Walle <michael@walle.cc>
Signed-off-by: Nmalc <av1474@comtv.ru>
上级 b6c9c940
...@@ -318,7 +318,7 @@ static int alsa_write (SWVoiceOut *sw, void *buf, int len) ...@@ -318,7 +318,7 @@ static int alsa_write (SWVoiceOut *sw, void *buf, int len)
return audio_pcm_sw_write (sw, buf, len); return audio_pcm_sw_write (sw, buf, len);
} }
static snd_pcm_format_t aud_to_alsafmt (audfmt_e fmt) static snd_pcm_format_t aud_to_alsafmt (audfmt_e fmt, int endianness)
{ {
switch (fmt) { switch (fmt) {
case AUD_FMT_S8: case AUD_FMT_S8:
...@@ -328,16 +328,36 @@ static snd_pcm_format_t aud_to_alsafmt (audfmt_e fmt) ...@@ -328,16 +328,36 @@ static snd_pcm_format_t aud_to_alsafmt (audfmt_e fmt)
return SND_PCM_FORMAT_U8; return SND_PCM_FORMAT_U8;
case AUD_FMT_S16: case AUD_FMT_S16:
return SND_PCM_FORMAT_S16_LE; if (endianness) {
return SND_PCM_FORMAT_S16_BE;
}
else {
return SND_PCM_FORMAT_S16_LE;
}
case AUD_FMT_U16: case AUD_FMT_U16:
return SND_PCM_FORMAT_U16_LE; if (endianness) {
return SND_PCM_FORMAT_U16_BE;
}
else {
return SND_PCM_FORMAT_U16_LE;
}
case AUD_FMT_S32: case AUD_FMT_S32:
return SND_PCM_FORMAT_S32_LE; if (endianness) {
return SND_PCM_FORMAT_S32_BE;
}
else {
return SND_PCM_FORMAT_S32_LE;
}
case AUD_FMT_U32: case AUD_FMT_U32:
return SND_PCM_FORMAT_U32_LE; if (endianness) {
return SND_PCM_FORMAT_U32_BE;
}
else {
return SND_PCM_FORMAT_U32_LE;
}
default: default:
dolog ("Internal logic error: Bad audio format %d\n", fmt); dolog ("Internal logic error: Bad audio format %d\n", fmt);
...@@ -809,7 +829,7 @@ static int alsa_init_out (HWVoiceOut *hw, struct audsettings *as) ...@@ -809,7 +829,7 @@ static int alsa_init_out (HWVoiceOut *hw, struct audsettings *as)
snd_pcm_t *handle; snd_pcm_t *handle;
struct audsettings obt_as; struct audsettings obt_as;
req.fmt = aud_to_alsafmt (as->fmt); req.fmt = aud_to_alsafmt (as->fmt, as->endianness);
req.freq = as->freq; req.freq = as->freq;
req.nchannels = as->nchannels; req.nchannels = as->nchannels;
req.period_size = conf.period_size_out; req.period_size = conf.period_size_out;
...@@ -918,7 +938,7 @@ static int alsa_init_in (HWVoiceIn *hw, struct audsettings *as) ...@@ -918,7 +938,7 @@ static int alsa_init_in (HWVoiceIn *hw, struct audsettings *as)
snd_pcm_t *handle; snd_pcm_t *handle;
struct audsettings obt_as; struct audsettings obt_as;
req.fmt = aud_to_alsafmt (as->fmt); req.fmt = aud_to_alsafmt (as->fmt, as->endianness);
req.freq = as->freq; req.freq = as->freq;
req.nchannels = as->nchannels; req.nchannels = as->nchannels;
req.period_size = conf.period_size_in; req.period_size = conf.period_size_in;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册