[alsa-devel] 24 bit sample embedded in 32 bits
Hello,
I assume that the alsa framework expects the 24 bit sample data to be packed one after the other. for example while recording a 2 channel, 24 bit sample data, typically the dma reads a fifo (which receives data from adc) and prepares a buffer which is then passed to the upper layers.
This buffer is expeted to be 24byte left channel and then 24 byte right channel. Am I right?
If the above assumption is correct, I need to find a way to tell the framework that the data is 24bit but is embedded in 32 bit. ie 32bit left and then 32 bit right channel data
I am tending to think that there has to be a way but I am unable to find it. Can you please point me to the right direction
Regards Vipin
Vipin Kumar wrote:
I assume that the alsa framework expects the 24 bit sample data to be packed one after the other.
ALSA expects the sample data to conform to whatever sample format has been configured.
Most hardware uses 32-bit sample words in memory to make the interface to the PCI bus easier.
I need to find a way to tell the framework that the data is 24bit but is embedded in 32 bit.
(HH = highest byte, LL = lowest byte, MM = middle byte)
LL MM HH SNDRV_PCM_FORMAT_S24_3LE xx LL MM HH SNDRV_PCM_FORMAT_S32_LE LL MM HH xx SNDRV_PCM_FORMAT_S24_LE HH MM LL SNDRV_PCM_FORMAT_S24_3BE HH MM LL xx SNDRV_PCM_FORMAT_S32_BE xx HH MM LL SNDRV_PCM_FORMAT_S24_BE
Regards, Clemens
On 7/2/2012 4:31 PM, Clemens Ladisch wrote:
Vipin Kumar wrote:
I assume that the alsa framework expects the 24 bit sample data to be packed one after the other.
ALSA expects the sample data to conform to whatever sample format has been configured.
Most hardware uses 32-bit sample words in memory to make the interface to the PCI bus easier.
I need to find a way to tell the framework that the data is 24bit but is embedded in 32 bit.
(HH = highest byte, LL = lowest byte, MM = middle byte)
LL MM HH SNDRV_PCM_FORMAT_S24_3LE xx LL MM HH SNDRV_PCM_FORMAT_S32_LE LL MM HH xx SNDRV_PCM_FORMAT_S24_LE HH MM LL SNDRV_PCM_FORMAT_S24_3BE HH MM LL xx SNDRV_PCM_FORMAT_S32_BE xx HH MM LL SNDRV_PCM_FORMAT_S24_BE
Thanks Clemens, Jaroslav,
This was very helpful..I would try more cases and come back for more doubts if there are any :)
Regards Vipin
Regards, Clemens .
Date 2.7.2012 12:11, Vipin Kumar wrote:
Hello,
I assume that the alsa framework expects the 24 bit sample data to be packed one after the other. for example while recording a 2 channel, 24 bit sample data, typically the dma reads a fifo (which receives data from adc) and prepares a buffer which is then passed to the upper layers.
This buffer is expeted to be 24byte left channel and then 24 byte right channel. Am I right?
If the above assumption is correct, I need to find a way to tell the framework that the data is 24bit but is embedded in 32 bit. ie 32bit left and then 32 bit right channel data
I am tending to think that there has to be a way but I am unable to find it. Can you please point me to the right direction
Use S/U24 or S/U32 formats - look to adriver.h for SNDRV_PCM_FORMAT constants. S/U24 expects 24-bit samples with zero MSB in 32-bit words. S/U32 expects 32-bit samples (LSB is zero for 24-bit data).
Jaroslav
participants (3)
-
Clemens Ladisch
-
Jaroslav Kysela
-
Vipin Kumar