Browse Source

add better error messages and support for SND_PCM_FORMAT_S32_BE

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

+ 28
- 12
linux/alsa/alsa_driver.c View File

@@ -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:


Loading…
Cancel
Save