| @@ -314,15 +314,16 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
| break; | break; | ||||
| case 4: /* NO DITHER */ | 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? | driver->write_via_copy = driver->quirk_bswap? | ||||
| sample_move_d32l24_sSs: | sample_move_d32l24_sSs: | ||||
| sample_move_d32l24_sS; | sample_move_d32l24_sS; | ||||
| break; | 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); | int bits = snd_pcm_hw_params_get_sbits(driver->playback_hw_params); | ||||
| if (bits == 32) | if (bits == 32) | ||||
| @@ -331,18 +332,25 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
| sample_move_d32_sSs: | sample_move_d32_sSs: | ||||
| sample_move_d32_sS; | sample_move_d32_sS; | ||||
| } | } | ||||
| else | |||||
| else if (bits == 24) | |||||
| { | { | ||||
| driver->write_via_copy = driver->quirk_bswap? | driver->write_via_copy = driver->quirk_bswap? | ||||
| sample_move_d32u24_sSs: | sample_move_d32u24_sSs: | ||||
| sample_move_d32u24_sS; | 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; | break; | ||||
| default: | default: | ||||
| @@ -378,6 +386,7 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
| sample_move_dS_s32l24; | sample_move_dS_s32l24; | ||||
| break; | 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->capture_hw_params); | int bits = snd_pcm_hw_params_get_sbits(driver->capture_hw_params); | ||||
| if (bits == 32) | if (bits == 32) | ||||
| @@ -386,12 +395,19 @@ alsa_driver_setup_io_function_pointers (alsa_driver_t *driver) | |||||
| sample_move_dS_s32s: | sample_move_dS_s32s: | ||||
| sample_move_dS_s32; | sample_move_dS_s32; | ||||
| } | } | ||||
| else | |||||
| else if(bits == 24) | |||||
| { | { | ||||
| driver->read_via_copy = driver->quirk_bswap? | driver->read_via_copy = driver->quirk_bswap? | ||||
| sample_move_dS_s32u24s: | sample_move_dS_s32u24s: | ||||
| sample_move_dS_s32u24; | sample_move_dS_s32u24; | ||||
| } | } | ||||
| else | |||||
| { | |||||
| jack_error("unsupported sample format for capture: " | |||||
| "SND_PCM_FORMAT_S32LE with %d bits", | |||||
| bits); | |||||
| exit (1); | |||||
| } | |||||
| break; | break; | ||||
| } | } | ||||
| default: | default: | ||||