Browse Source

check msbits to determine number of bits in alsa driver

pull/811/head
Claudio Cabral 3 years ago
parent
commit
37dd908d6b
1 changed files with 37 additions and 13 deletions
  1. +37
    -13
      linux/alsa/alsa_driver.c

+ 37
- 13
linux/alsa/alsa_driver.c View File

@@ -323,10 +323,22 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver)
sample_move_d32l24_sS;
break;
case SND_PCM_FORMAT_S32_LE:
driver->write_via_copy = driver->quirk_bswap?
sample_move_d32_sSs:
sample_move_d32_sS;
{
int bits = snd_pcm_hw_params_get_sbits(driver->playback_hw_params);
if (bits == 32)
{
driver->write_via_copy = driver->quirk_bswap?
sample_move_d32_sSs:
sample_move_d32_sS;
}
else
{
driver->write_via_copy = driver->quirk_bswap?
sample_move_d32u24_sSs:
sample_move_d32u24_sS;
}
break;
}
default:
jack_error("unsupported 4 byte sample_format");
exit (1);
@@ -357,20 +369,32 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver)
sample_move_dS_s24;
break;
case 4:
switch (driver->capture_sample_format)
{
case SND_PCM_FORMAT_S24_LE:
case SND_PCM_FORMAT_S24_BE:
switch (driver->capture_sample_format)
{
case SND_PCM_FORMAT_S24_LE:
case SND_PCM_FORMAT_S24_BE:
driver->read_via_copy = driver->quirk_bswap?
sample_move_dS_s32l24s:
sample_move_dS_s32l24;
break;
case SND_PCM_FORMAT_S32_LE:
driver->read_via_copy = driver->quirk_bswap?
sample_move_dS_s32s:
sample_move_dS_s32;
break;
default:
case SND_PCM_FORMAT_S32_LE:
{
int bits = snd_pcm_hw_params_get_sbits(driver->capture_hw_params);
if (bits == 32)
{
driver->read_via_copy = driver->quirk_bswap?
sample_move_dS_s32s:
sample_move_dS_s32;
}
else
{
driver->read_via_copy = driver->quirk_bswap?
sample_move_dS_s32u24s:
sample_move_dS_s32u24;
}
break;
}
default:
jack_error("unsupported 4 byte sample_format");
exit (1);
}


Loading…
Cancel
Save