From bfa45e34a57ca66dc6f7f923b005f3c96c8a9436 Mon Sep 17 00:00:00 2001 From: Claudio Cabral Date: Tue, 4 Jan 2022 15:42:01 +0100 Subject: [PATCH] add better error messages and support for SND_PCM_FORMAT_S32_BE --- linux/alsa/alsa_driver.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) 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: