diff --git a/linux/alsa/alsa_driver.c b/linux/alsa/alsa_driver.c index 055ac369..68bb2472 100644 --- a/linux/alsa/alsa_driver.c +++ b/linux/alsa/alsa_driver.c @@ -314,15 +314,16 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) break; case 4: /* NO DITHER */ - switch (driver->playback_sample_format) - { - case SND_PCM_FORMAT_S24_LE: - case SND_PCM_FORMAT_S24_BE: + switch (driver->playback_sample_format) + { + case SND_PCM_FORMAT_S24_LE: + case SND_PCM_FORMAT_S24_BE: driver->write_via_copy = driver->quirk_bswap? sample_move_d32l24_sSs: sample_move_d32l24_sS; break; - case SND_PCM_FORMAT_S32_LE: + case SND_PCM_FORMAT_S32_LE: + case SND_PCM_FORMAT_S32_BE: { int bits = snd_pcm_hw_params_get_sbits(driver->playback_hw_params); if (bits == 32) @@ -331,18 +332,25 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) sample_move_d32_sSs: sample_move_d32_sS; } - else + else if (bits == 24) { driver->write_via_copy = driver->quirk_bswap? sample_move_d32u24_sSs: sample_move_d32u24_sS; } - break; + else + { + jack_error("unsupported sample format for playback: " + "SND_PCM_FORMAT_S32 with %d bits", + bits); + exit (1); + } + break; } - default: - jack_error("unsupported 4 byte sample_format"); - exit (1); - } + default: + jack_error("unsupported 4 byte sample_format"); + exit (1); + } break; default: @@ -378,6 +386,7 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) sample_move_dS_s32l24; break; case SND_PCM_FORMAT_S32_LE: + case SND_PCM_FORMAT_S32_BE: { int bits = snd_pcm_hw_params_get_sbits(driver->capture_hw_params); if (bits == 32) @@ -386,12 +395,19 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) sample_move_dS_s32s: sample_move_dS_s32; } - else + else if(bits == 24) { driver->read_via_copy = driver->quirk_bswap? sample_move_dS_s32u24s: sample_move_dS_s32u24; } + else + { + jack_error("unsupported sample format for capture: " + "SND_PCM_FORMAT_S32LE with %d bits", + bits); + exit (1); + } break; } default: