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.