Tim Hewett wrote:
I'm writing software looking to discover the available sample rates, channel formats etc. for a device. I have been taking the approach of testing a sample rate from a list of potential rates, then setting the device to that rate to then test the channel formats etc..
It works ok usually but keeps failing to detect that the device supports 24-bit channel formats, both for SND_PCM_FORMAT_S24_LE/BE and SND_PCM_FORMAT_S24_3LE/3BE. It detects the 16-bit formats without any problem.
Which device (driver) is this?
Online source taken from http://download.atmark-techno.com/misc/demos/usb-audio-a500-howto/hw_params.... does detect the 24-bit format but doesn't set the sample rate first - each characteristic is tested in isolation - snd_pcm_hw_params_any() is called before each one.
snd_pcm_hw_params_any() is called only once; the configurations space isn't reduced as long as no set* function is called.
I am wondering if my way is not the correct way to determine device characteristics.
Your way sounds correct, but the driver code that sets the parameter constraints might not be, or the device really doesn't support 24 bits at the sample rate you've set.
Regards, Clemens