mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
alsaaudio: add endianness support for VoiceIn
Signed-off-by: Michael Walle <michael@walle.cc> Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
parent
b6c9c9401c
commit
d66bddd7a4
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in a new issue