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 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel