* dsd formats in ALSA plugins
@ 2018-06-27 18:34 slava
2018-06-28 6:06 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: slava @ 2018-06-27 18:34 UTC (permalink / raw)
To: alsa-devel
Sorry, don't receive my own post, so can't reply
Find in alsa-lib-1.1.6 file src/pcm/pcm-params.c line 1945
static const snd_mask_t refine_masks[SND_PCM_HW_PARAM_LAST_MASK -
SND_PCM_HW_PARAM_FIRST_MASK + 1] = {
[SND_PCM_HW_PARAM_ACCESS - SND_PCM_HW_PARAM_FIRST_MASK] = {
.bits = { 0x1f },
},
[SND_PCM_HW_PARAM_FORMAT - SND_PCM_HW_PARAM_FIRST_MASK] = {
.bits = { 0x81ffffff, 0xfff},
Change last 0xfff to 0xfffff and now can use DSD formats
How i understand, in version 1.0.27 last format = 43
and when new format was added but mask not changed
May be i absolutely wrong and what i do has side effects or
needed any else?
Thanks
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: dsd formats in ALSA plugins
2018-06-27 18:34 dsd formats in ALSA plugins slava
@ 2018-06-28 6:06 ` Takashi Iwai
0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2018-06-28 6:06 UTC (permalink / raw)
To: slava; +Cc: alsa-devel
On Wed, 27 Jun 2018 20:34:34 +0200,
slava wrote:
>
> Sorry, don't receive my own post, so can't reply
>
> Find in alsa-lib-1.1.6 file src/pcm/pcm-params.c line 1945
>
> static const snd_mask_t refine_masks[SND_PCM_HW_PARAM_LAST_MASK -
> SND_PCM_HW_PARAM_FIRST_MASK + 1] = {
> [SND_PCM_HW_PARAM_ACCESS - SND_PCM_HW_PARAM_FIRST_MASK] = {
> .bits = { 0x1f },
> },
> [SND_PCM_HW_PARAM_FORMAT - SND_PCM_HW_PARAM_FIRST_MASK] = {
> .bits = { 0x81ffffff, 0xfff},
>
> Change last 0xfff to 0xfffff and now can use DSD formats
>
> How i understand, in version 1.0.27 last format = 43
> and when new format was added but mask not changed
>
> May be i absolutely wrong and what i do has side effects or
> needed any else?
That's the correct observation, the needed bits are missing.
We should have listed each bit explicitly to avoid such an overlook
from the beginning.
Below is the fix patch. Could you check whether it works as expected?
thanks,
Takashi
-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] pcm: Define refine mask bits explicitly (and fix missing DSD
support)
Instead of the expanded bit numbers like 0x81ffffff, list up the all
supported PCM bits explicitly for refine_masks[] in pcm_params.c.
This makes easier to update any additional formats or other
parameters, and easier to spot out missing ones.
Actually the GSM and DSD formats were missing; with this commit, they
are supported properly now.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
src/pcm/pcm_params.c | 70 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 67 insertions(+), 3 deletions(-)
diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c
index 608a2324cb26..8826bc3d3197 100644
--- a/src/pcm/pcm_params.c
+++ b/src/pcm/pcm_params.c
@@ -1936,16 +1936,80 @@ static const snd_pcm_hw_rule_t refine_rules[] = {
};
#define RULES (sizeof(refine_rules) / sizeof(refine_rules[0]))
+#define PCM_BIT(x) \
+ (1U << ((x) < 32 ? (x) : ((x) - 32)))
static const snd_mask_t refine_masks[SND_PCM_HW_PARAM_LAST_MASK - SND_PCM_HW_PARAM_FIRST_MASK + 1] = {
[SND_PCM_HW_PARAM_ACCESS - SND_PCM_HW_PARAM_FIRST_MASK] = {
- .bits = { 0x1f },
+ .bits = {
+ PCM_BIT(SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) |
+ PCM_BIT(SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED) |
+ PCM_BIT(SNDRV_PCM_ACCESS_MMAP_COMPLEX) |
+ PCM_BIT(SNDRV_PCM_ACCESS_RW_INTERLEAVED) |
+ PCM_BIT(SNDRV_PCM_ACCESS_RW_NONINTERLEAVED)
+ },
},
[SND_PCM_HW_PARAM_FORMAT - SND_PCM_HW_PARAM_FIRST_MASK] = {
- .bits = { 0x81ffffff, 0xfff},
+ .bits = {
+ /* first 32bits */
+ PCM_BIT(SNDRV_PCM_FORMAT_S8) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U8) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S16_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S16_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U16_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U16_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S24_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S24_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U24_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U24_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S32_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S32_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U32_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U32_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_FLOAT_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_FLOAT_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_FLOAT64_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_FLOAT64_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_IEC958_SUBFRAME) |
+ PCM_BIT(SNDRV_PCM_FORMAT_IEC958_SUBFRAME) |
+ PCM_BIT(SNDRV_PCM_FORMAT_MU_LAW) |
+ PCM_BIT(SNDRV_PCM_FORMAT_A_LAW) |
+ PCM_BIT(SNDRV_PCM_FORMAT_IMA_ADPCM) |
+ PCM_BIT(SNDRV_PCM_FORMAT_MPEG) |
+ PCM_BIT(SNDRV_PCM_FORMAT_GSM) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S20_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S20_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U20_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U20_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_SPECIAL),
+ /* second 32bits */
+ PCM_BIT(SNDRV_PCM_FORMAT_S24_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S24_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U24_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U24_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S20_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S20_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U20_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U20_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S18_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_S18_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U18_3LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_U18_3BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_G723_24) |
+ PCM_BIT(SNDRV_PCM_FORMAT_G723_24) |
+ PCM_BIT(SNDRV_PCM_FORMAT_G723_40) |
+ PCM_BIT(SNDRV_PCM_FORMAT_G723_40) |
+ PCM_BIT(SNDRV_PCM_FORMAT_DSD_U8) |
+ PCM_BIT(SNDRV_PCM_FORMAT_DSD_U16_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_DSD_U32_LE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_DSD_U16_BE) |
+ PCM_BIT(SNDRV_PCM_FORMAT_DSD_U32_BE)
+ },
},
[SND_PCM_HW_PARAM_SUBFORMAT - SND_PCM_HW_PARAM_FIRST_MASK] = {
- .bits = { 0x1 },
+ .bits = {
+ PCM_BIT(SNDRV_PCM_SUBFORMAT_STD)
+ },
},
};
--
2.17.1
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* dsd formats in ALSA plugins
@ 2018-06-29 22:08 slava
0 siblings, 0 replies; 4+ messages in thread
From: slava @ 2018-06-29 22:08 UTC (permalink / raw)
To: alsa-devel
Yes, patch from previous post works as expected.
I try to write external filter plugin for dinamically change
slave format ( dsd_xxx -> xxx), unsuccessfully (
It suppose only static config or i mistake?
Thanks
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* dsd formats in ALSA plugins
@ 2018-06-26 22:58 slava
0 siblings, 0 replies; 4+ messages in thread
From: slava @ 2018-06-26 22:58 UTC (permalink / raw)
To: alsa-devel
Hello.
I'm writing plugin with external filter plugin SDK,
they make some manipulation on received samples.
But i can't use dsd formats.
As i understand, they not allowed in all plugins (extplug, ioplug and
internal alsa-lib)?
params_any + params_test_format(... dsd_u32_le) = error -22
Is this a ALSA lib restriction or i do something wrong
Thanks
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-06-29 22:08 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-27 18:34 dsd formats in ALSA plugins slava
2018-06-28 6:06 ` Takashi Iwai
-- strict thread matches above, loose matches on Subject: below --
2018-06-29 22:08 slava
2018-06-26 22:58 slava
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.