summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2018-05-23 15:42:20 +0200
committerTakashi Iwai <tiwai@suse.de>2018-05-23 16:05:49 +0200
commit0e2703cef90a2c53d49a49d5e9233aeb6db8960b (patch)
tree9ec83162b9a5802f0463ee420669b6a00491416b
parentda4d5bd53a1a57d1b39318b83d3280fbcd78e9f6 (diff)
downloadalsa-utils-0e2703cef90a2c53d49a49d5e9233aeb6db8960b.tar.gz
speaker-test: Support S24_3LE sample format
Implement support signed 24 bit samples, packed in 3 bytes. Signed-off-by: Julian Scheel <julian@jusst.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--speaker-test/speaker-test.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c
index 65ab523..4804bcf 100644
--- a/speaker-test/speaker-test.c
+++ b/speaker-test/speaker-test.c
@@ -283,6 +283,8 @@ static const int supported_formats[] = {
SND_PCM_FORMAT_S16_LE,
SND_PCM_FORMAT_S16_BE,
SND_PCM_FORMAT_FLOAT_LE,
+ SND_PCM_FORMAT_S24_3LE,
+ SND_PCM_FORMAT_S24_3BE,
SND_PCM_FORMAT_S32_LE,
SND_PCM_FORMAT_S32_BE,
-1
@@ -325,6 +327,18 @@ static void do_generate(uint8_t *frames, int channel, int count,
case SND_PCM_FORMAT_FLOAT_LE:
*samp_f++ = res.f;
break;
+ case SND_PCM_FORMAT_S24_3LE:
+ res.i >>= 8;
+ *samp8++ = LE_INT(res.i);
+ *samp8++ = LE_INT(res.i) >> 8;
+ *samp8++ = LE_INT(res.i) >> 16;
+ break;
+ case SND_PCM_FORMAT_S24_3BE:
+ res.i >>= 8;
+ *samp8++ = BE_INT(res.i);
+ *samp8++ = BE_INT(res.i) >> 8;
+ *samp8++ = BE_INT(res.i) >> 16;
+ break;
case SND_PCM_FORMAT_S32_LE:
*samp32++ = LE_INT(res.i);
break;