[alsa-devel] [PATCH] Fix DSD formats userland usability
Support for DSD sample formats has been added a while ago. This patch makes those sample formats beter usable from userland (e.g. aplay).
--- include/sound/asound.h | 4 +++- src/pcm/pcm_misc.c | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/sound/asound.h b/include/sound/asound.h index c819df4..5194524 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h @@ -214,7 +214,9 @@ typedef int __bitwise snd_pcm_format_t; #define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ #define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ #define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ -#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_G723_40_1B +#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* 8 1-bit samples in 1 byte */ +#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* 16 1-bit samples in 2 bytes */ +#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U16_LE
#ifdef SNDRV_LITTLE_ENDIAN #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE diff --git a/src/pcm/pcm_misc.c b/src/pcm/pcm_misc.c index d52160c..44bb89c 100644 --- a/src/pcm/pcm_misc.c +++ b/src/pcm/pcm_misc.c @@ -195,11 +195,13 @@ int snd_pcm_format_width(snd_pcm_format_t format) switch (format) { case SNDRV_PCM_FORMAT_S8: case SNDRV_PCM_FORMAT_U8: + case SNDRV_PCM_FORMAT_DSD_U8: return 8; case SNDRV_PCM_FORMAT_S16_LE: case SNDRV_PCM_FORMAT_S16_BE: case SNDRV_PCM_FORMAT_U16_LE: case SNDRV_PCM_FORMAT_U16_BE: + case SNDRV_PCM_FORMAT_DSD_U16_LE: return 16; case SNDRV_PCM_FORMAT_S18_3LE: case SNDRV_PCM_FORMAT_S18_3BE: @@ -253,11 +255,13 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format) switch (format) { case SNDRV_PCM_FORMAT_S8: case SNDRV_PCM_FORMAT_U8: + case SNDRV_PCM_FORMAT_DSD_U8: return 8; case SNDRV_PCM_FORMAT_S16_LE: case SNDRV_PCM_FORMAT_S16_BE: case SNDRV_PCM_FORMAT_U16_LE: case SNDRV_PCM_FORMAT_U16_BE: + case SNDRV_PCM_FORMAT_DSD_U16_LE: return 16; case SNDRV_PCM_FORMAT_S18_3LE: case SNDRV_PCM_FORMAT_S18_3BE:
At Sat, 9 Aug 2014 12:09:21 +0200, Jurgen Kramer wrote:
Support for DSD sample formats has been added a while ago. This patch makes those sample formats beter usable from userland (e.g. aplay).
include/sound/asound.h | 4 +++- src/pcm/pcm_misc.c | 4 ++++
The new definitions are still missing in include/pcm.h? include/sound/asound.h is a copy from the kernel, and the user-land API is defined rather in include/pcm.h.
thanks,
Takashi
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/sound/asound.h b/include/sound/asound.h index c819df4..5194524 100644 --- a/include/sound/asound.h +++ b/include/sound/asound.h @@ -214,7 +214,9 @@ typedef int __bitwise snd_pcm_format_t; #define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */ #define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */ #define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */ -#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_G723_40_1B +#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* 8 1-bit samples in 1 byte */ +#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* 16 1-bit samples in 2 bytes */ +#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U16_LE
#ifdef SNDRV_LITTLE_ENDIAN #define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE diff --git a/src/pcm/pcm_misc.c b/src/pcm/pcm_misc.c index d52160c..44bb89c 100644 --- a/src/pcm/pcm_misc.c +++ b/src/pcm/pcm_misc.c @@ -195,11 +195,13 @@ int snd_pcm_format_width(snd_pcm_format_t format) switch (format) { case SNDRV_PCM_FORMAT_S8: case SNDRV_PCM_FORMAT_U8:
- case SNDRV_PCM_FORMAT_DSD_U8: return 8; case SNDRV_PCM_FORMAT_S16_LE: case SNDRV_PCM_FORMAT_S16_BE: case SNDRV_PCM_FORMAT_U16_LE: case SNDRV_PCM_FORMAT_U16_BE:
- case SNDRV_PCM_FORMAT_DSD_U16_LE: return 16; case SNDRV_PCM_FORMAT_S18_3LE: case SNDRV_PCM_FORMAT_S18_3BE:
@@ -253,11 +255,13 @@ int snd_pcm_format_physical_width(snd_pcm_format_t format) switch (format) { case SNDRV_PCM_FORMAT_S8: case SNDRV_PCM_FORMAT_U8:
- case SNDRV_PCM_FORMAT_DSD_U8: return 8; case SNDRV_PCM_FORMAT_S16_LE: case SNDRV_PCM_FORMAT_S16_BE: case SNDRV_PCM_FORMAT_U16_LE: case SNDRV_PCM_FORMAT_U16_BE:
- case SNDRV_PCM_FORMAT_DSD_U16_LE: return 16; case SNDRV_PCM_FORMAT_S18_3LE: case SNDRV_PCM_FORMAT_S18_3BE:
-- 1.9.3
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Sun, 2014-08-10 at 13:44 +0200, Takashi Iwai wrote:
At Sat, 9 Aug 2014 12:09:21 +0200, Jurgen Kramer wrote:
Support for DSD sample formats has been added a while ago. This patch makes those sample formats beter usable from userland (e.g. aplay).
include/sound/asound.h | 4 +++- src/pcm/pcm_misc.c | 4 ++++
The new definitions are still missing in include/pcm.h? include/sound/asound.h is a copy from the kernel, and the user-land API is defined rather in include/pcm.h.
OK, the updates to alsa-lib pcm_misc.c are still valid but do not compile without my proposed update to include/sound/asound.h:
Compiling alsa-lib from git with update pcm_misc.c gives: pcm_misc.c: In function 'snd_pcm_format_width': pcm_misc.c:198:7: error: 'SNDRV_PCM_FORMAT_DSD_U8' undeclared (first use in this function) case SNDRV_PCM_FORMAT_DSD_U8: ^ pcm_misc.c:198:7: note: each undeclared identifier is reported only once for each function it appears in pcm_misc.c:209:7: error: 'SNDRV_PCM_FORMAT_DSD_U16_LE' undeclared (first use in this function) case SNDRV_PCM_FORMAT_DSD_U16_LE: ^ pcm_misc.c: In function 'snd_pcm_format_physical_width': pcm_misc.c:258:7: error: 'SNDRV_PCM_FORMAT_DSD_U8' undeclared (first use in this function) case SNDRV_PCM_FORMAT_DSD_U8: ^ pcm_misc.c:264:7: error: 'SNDRV_PCM_FORMAT_DSD_U16' undeclared (first use in this function) case SNDRV_PCM_FORMAT_DSD_U16:
The SNDRV_PCM_FORMAT_DSD??? are there in /usr/include/sound/asound.h It seems alsa-lib uses it own asound.h which does not have the DSD defines. See 'include/sound/asound.h' is this intentional?
Jurgen
At Sun, 10 Aug 2014 15:38:42 +0200, Jurgen Kramer wrote:
On Sun, 2014-08-10 at 13:44 +0200, Takashi Iwai wrote:
At Sat, 9 Aug 2014 12:09:21 +0200, Jurgen Kramer wrote:
Support for DSD sample formats has been added a while ago. This patch makes those sample formats beter usable from userland (e.g. aplay).
include/sound/asound.h | 4 +++- src/pcm/pcm_misc.c | 4 ++++
The new definitions are still missing in include/pcm.h? include/sound/asound.h is a copy from the kernel, and the user-land API is defined rather in include/pcm.h.
OK, the updates to alsa-lib pcm_misc.c are still valid but do not compile without my proposed update to include/sound/asound.h
Yes, we need to change both include/pcm.h and include/sound/asound.h. In your patch, the necessary change in include/pcm.h is missing, and that's what I suggested.
Takashi
At Mon, 11 Aug 2014 10:06:48 +0200, Takashi Iwai wrote:
At Sun, 10 Aug 2014 15:38:42 +0200, Jurgen Kramer wrote:
On Sun, 2014-08-10 at 13:44 +0200, Takashi Iwai wrote:
At Sat, 9 Aug 2014 12:09:21 +0200, Jurgen Kramer wrote:
Support for DSD sample formats has been added a while ago. This patch makes those sample formats beter usable from userland (e.g. aplay).
include/sound/asound.h | 4 +++- src/pcm/pcm_misc.c | 4 ++++
The new definitions are still missing in include/pcm.h? include/sound/asound.h is a copy from the kernel, and the user-land API is defined rather in include/pcm.h.
OK, the updates to alsa-lib pcm_misc.c are still valid but do not compile without my proposed update to include/sound/asound.h
Yes, we need to change both include/pcm.h and include/sound/asound.h. In your patch, the necessary change in include/pcm.h is missing, and that's what I suggested.
I overlooked that include/pcm.h had already the definition of DTD things. So now the patch was applied as is with a couple of more additional fixes.
Takashi
participants (2)
-
Jurgen Kramer
-
Takashi Iwai