On Mon, Mar 16, 2009 at 4:54 PM, Clemens Ladisch <clemens@xxxxxxxxxx> 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: > 1) 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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel