On Mon, Mar 16, 2009 at 4:54 PM, Clemens Ladisch clemens@ladisch.de wrote:
Richard Zhao wrote:
Sure I can add rules. but the rules will be checked as hw_param. If hw_param failed, does alsalib convert fmt or sample rate automatically?
For example: One codec, support: 44.1k : s8 s16 s24 s32 96k: s24 s32
When user try to play s8/s16 96k audio file, hw_param will fail.
This is not how the rules work.
Initializing a device works like this:
- The application opens the device, and the driver's open callback gets
called. 2) The application chooses hardware parameters; ALSA checks that these values conform to the device's limitations. 3) After all hardware parameters are known, the driver's hw_params callback gets called.
When you driver adds constraint rules, it has do this in the open callback (so that the rules are available in step 2 above). Your constraint rules will be called when the application tries to select parameters; this is before the hw_params callback gets called.
In your example above, the open callback would install two rule functions: one to remove s8/s16 if 96k has been selected, and one to remove 96k if s8/s16 has been selected.
When the hw_params callback is called, ALSA guarantees that the parameters are valid for the device.
HTH Clemens
Hi Clemens,
Thank you! I see. After set every hw parm, snd_pcm_hw_refine will called, then the corresponding constraints(rules) will be checked.
Thanks again! Richard