On 8/20/24 09:42, Jaroslav Kysela wrote: > On 20. 08. 24 9:37, Shengjiu Wang wrote: >> On Tue, Aug 20, 2024 at 2:59 PM Pierre-Louis Bossart >> <pierre-louis.bossart@xxxxxxxxxxxxxxx> wrote: >>> >>> >>> >>> On 8/20/24 04:53, Shengjiu Wang wrote: >>>> On Mon, Aug 19, 2024 at 3:42 PM Pierre-Louis Bossart >>>> <pierre-louis.bossart@xxxxxxxxxxxxxxx> wrote: >>>>> >>>>> >>>>> >>>>> On 8/16/24 12:42, Shengjiu Wang wrote: >>>>>> Implement the ASRC memory to memory function using >>>>>> the compress framework, user can use this function with >>>>>> compress ioctl interface. >>>>>> >>>>>> Define below private metadata key value for output >>>>>> format, output rate and ratio modifier configuration. >>>>>> ASRC_OUTPUT_FORMAT 0x80000001 >>>>>> ASRC_OUTPUT_RATE 0x80000002 >>>>>> ASRC_RATIO_MOD 0x80000003 >>>>> >>>>> Can the output format/rate change at run-time? >>>> >>>> Seldom I think. >>>> >>>>> >>>>> If no, then these parameters should be moved somewhere else - e.g. >>>>> hw_params or something. >>>> >>>> This means I will do some changes in compress_params.h, add >>>> output format and output rate definition, follow Jaroslav's example >>>> right? >>> >>> yes, having parameters for the PCM case would make sense. >>> >>>>> I am still not very clear on the expanding the SET_METADATA ioctl to >>>>> deal with the ratio changes. This isn't linked to the control layer as >>>>> suggested before, and there's no precedent of calling it multiple >>>>> times >>>>> during streaming. >>>> >>>> Which control layer? if you means the snd_kcontrol_new? it is bound >>>> with sound card, but in my case, I need to the control bind with >>>> the snd_compr_stream to support multi streams/instances. >>> >>> I can only quote Jaroslav's previous answer: >>> >>> " >>> This argument is not valid. The controls are bound to the card, but the >>> element identifiers have already iface (interface), device and subdevice >>> numbers. We are using controls for PCM devices for example. The binding >>> is straight. >>> >>> Just add SNDRV_CTL_ELEM_IFACE_COMPRESS define and specify the compress >>> device number in the 'struct snd_ctl_elem_id'. >>> " >> >> I don't think it is doable, or at least I don't know how to do it. >> >> My case is just one card/one device/one subdevice. can't use it to >> distinguish multi streams. > > I already wrote that the compress core code should be extended to > support subdevices like other ALSA APIs. I'll work on it. For now, just > add support for one converter. I am not sure I get the benefits of subdevices in this context. Can we not use different devices already, one per hardware ASRC instance? Put differently, what would be the difference between a card with N compressed devices or a card with 1 compressed device and N subdevices?