mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
pcm: Fix DSD sample format endianess and add big-endian format
This patch adds big-endian DSD sample format and fixes return value of DSD formats for snd_pcm_format_little_endian(). Signed-off-by: Jussi Laako <jussi@sonarnerd.net> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
984db83aa1
commit
b14c49ab3d
4 changed files with 26 additions and 5 deletions
|
|
@ -213,7 +213,11 @@ typedef enum _snd_pcm_format {
|
|||
SND_PCM_FORMAT_DSD_U16_LE,
|
||||
/* Direct Stream Digital (DSD) in 4-byte samples (x32) */
|
||||
SND_PCM_FORMAT_DSD_U32_LE,
|
||||
SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_LE,
|
||||
/* Direct Stream Digital (DSD) in 2-byte samples (x16) */
|
||||
SND_PCM_FORMAT_DSD_U16_BE,
|
||||
/* Direct Stream Digital (DSD) in 4-byte samples (x32) */
|
||||
SND_PCM_FORMAT_DSD_U32_BE,
|
||||
SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_DSD_U32_BE,
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
/** Signed 16 bit CPU endian */
|
||||
|
|
|
|||
|
|
@ -220,7 +220,9 @@ typedef int __bitwise snd_pcm_format_t;
|
|||
#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
|
||||
#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
|
||||
#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
|
||||
#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_LE
|
||||
#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
|
||||
#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
|
||||
#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
|
||||
|
||||
#ifdef SNDRV_LITTLE_ENDIAN
|
||||
#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
|
||||
|
|
|
|||
|
|
@ -1566,6 +1566,8 @@ static const char *const snd_pcm_format_names[] = {
|
|||
FORMAT(DSD_U8),
|
||||
FORMAT(DSD_U16_LE),
|
||||
FORMAT(DSD_U32_LE),
|
||||
FORMAT(DSD_U16_BE),
|
||||
FORMAT(DSD_U32_BE),
|
||||
};
|
||||
|
||||
static const char *const snd_pcm_format_aliases[SND_PCM_FORMAT_LAST+1] = {
|
||||
|
|
@ -1626,6 +1628,8 @@ static const char *const snd_pcm_format_descriptions[] = {
|
|||
FORMATD(DSD_U8, "Direct Stream Digital, 1-byte (x8), oldest bit in MSB"),
|
||||
FORMATD(DSD_U16_LE, "Direct Stream Digital, 2-byte (x16), little endian, oldest bits in MSB"),
|
||||
FORMATD(DSD_U32_LE, "Direct Stream Digital, 4-byte (x32), little endian, oldest bits in MSB"),
|
||||
FORMATD(DSD_U16_BE, "Direct Stream Digital, 2-byte (x16), big endian, oldest bits in MSB"),
|
||||
FORMATD(DSD_U32_BE, "Direct Stream Digital, 4-byte (x32), big endian, oldest bits in MSB"),
|
||||
};
|
||||
|
||||
static const char *const snd_pcm_type_names[] = {
|
||||
|
|
|
|||
|
|
@ -65,6 +65,8 @@ int snd_pcm_format_signed(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_DSD_U8:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
@ -137,6 +139,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_U24_3LE:
|
||||
case SNDRV_PCM_FORMAT_U20_3LE:
|
||||
case SNDRV_PCM_FORMAT_U18_3LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
return 1;
|
||||
case SNDRV_PCM_FORMAT_S16_BE:
|
||||
case SNDRV_PCM_FORMAT_U16_BE:
|
||||
|
|
@ -153,9 +157,8 @@ int snd_pcm_format_little_endian(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_U24_3BE:
|
||||
case SNDRV_PCM_FORMAT_U20_3BE:
|
||||
case SNDRV_PCM_FORMAT_U18_3BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U8:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
@ -208,6 +211,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
return 16;
|
||||
case SNDRV_PCM_FORMAT_S18_3LE:
|
||||
case SNDRV_PCM_FORMAT_S18_3BE:
|
||||
|
|
@ -235,6 +239,7 @@ int snd_pcm_format_width(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_FLOAT_LE:
|
||||
case SNDRV_PCM_FORMAT_FLOAT_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return 32;
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_LE:
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_BE:
|
||||
|
|
@ -269,6 +274,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
return 16;
|
||||
case SNDRV_PCM_FORMAT_S18_3LE:
|
||||
case SNDRV_PCM_FORMAT_S18_3BE:
|
||||
|
|
@ -296,6 +302,7 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
|
||||
case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return 32;
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_LE:
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_BE:
|
||||
|
|
@ -328,6 +335,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
|
|||
case SNDRV_PCM_FORMAT_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
return samples * 2;
|
||||
case SNDRV_PCM_FORMAT_S18_3LE:
|
||||
case SNDRV_PCM_FORMAT_S18_3BE:
|
||||
|
|
@ -353,6 +361,7 @@ ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
|
|||
case SNDRV_PCM_FORMAT_FLOAT_LE:
|
||||
case SNDRV_PCM_FORMAT_FLOAT_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return samples * 4;
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_LE:
|
||||
case SNDRV_PCM_FORMAT_FLOAT64_BE:
|
||||
|
|
@ -400,6 +409,8 @@ u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format)
|
|||
case SNDRV_PCM_FORMAT_DSD_U8:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U16_BE:
|
||||
case SNDRV_PCM_FORMAT_DSD_U32_BE:
|
||||
return 0x6969696969696969ULL;
|
||||
#ifdef SNDRV_LITTLE_ENDIAN
|
||||
case SNDRV_PCM_FORMAT_U16_LE:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue