[alsa-devel] iec958 and 24-bit audio
When I try playing 24-bit audio files on my SPDIF output, I get this
[alsa-lib]$ aplay -Diec958 file24bits.wav aplay: set_params:1059: Sample format non available Available formats: - S16_LE - S32_LE
Is there an built-in assumption that the iec958 device can only take as input what the slave hardware device supports? The IEC subframes can convey 24 bit audio, and it's possible to insert the 24 bits starting from bit 4 when adding the preambles and status bits. What am I missing? Thanks, -Poerre
On Mon, 1 Nov 2010, pl bossart wrote:
When I try playing 24-bit audio files on my SPDIF output, I get this
[alsa-lib]$ aplay -Diec958 file24bits.wav aplay: set_params:1059: Sample format non available Available formats:
- S16_LE
- S32_LE
Is there an built-in assumption that the iec958 device can only take as input what the slave hardware device supports?
Use 'plug:iec958' device if you want to do the format conversion (from 24-bit to 32-bit format).
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.
[alsa-lib]$ aplay -Diec958 file24bits.wav aplay: set_params:1059: Sample format non available Available formats:
- S16_LE
- S32_LE
Is there an built-in assumption that the iec958 device can only take as input what the slave hardware device supports?
Use 'plug:iec958' device if you want to do the format conversion (from 24-bit to 32-bit format).
That seems to work, but what I was asking is if there's a direct path without conversion? With plug:iec958 there's a conversion to 32-bits and then you drop the lsb. Also PulseAudio seems to rely on iec958 and when it doesn't work it tries with plug:iec958. What's the recommended way of using this device? Should we always open plug:iec958? Thanks -Pierre
On Mon, 1 Nov 2010, pl bossart wrote:
[alsa-lib]$ aplay -Diec958 file24bits.wav aplay: set_params:1059: Sample format non available Available formats:
- S16_LE
- S32_LE
Is there an built-in assumption that the iec958 device can only take as input what the slave hardware device supports?
Use 'plug:iec958' device if you want to do the format conversion (from 24-bit to 32-bit format).
That seems to work, but what I was asking is if there's a direct path without conversion? With plug:iec958 there's a conversion to 32-bits and then you drop the lsb.
Almost all sound bridge chips works with 16-bit or 32-bit samples because it's more compatible with analog converters and the handling is more simple than for 3-byte formats. The conversion from the 32-bit format to the 32-bit S/PDIF frame is done inside hw (dropping the LSB, add S/PDIF frame status bits). Some hardware also supports raw S/PDIF frames directly.
Also PulseAudio seems to rely on iec958 and when it doesn't work it tries with plug:iec958. What's the recommended way of using this device? Should we always open plug:iec958?
You can detect which formats are supported (like aplay does) and use the appropriate format to avoid using the plug layer in alsa-lib.
Jaroslav
----- Jaroslav Kysela perex@perex.cz Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc.
participants (2)
-
Jaroslav Kysela
-
pl bossart