[alsa-devel] compress: adding support for hardware dependent params

noman pouigt variksla at gmail.com
Mon Feb 3 10:01:18 CET 2014

>  We have a requirement, where we need to set a number of hardware specific
> parameters for compressed offload use-cases, before starting a stream. As
> these parameters need to be set once for the entire session, we would
> like to explore the best way to set these additional parameters somewhere
> before calling trigger() function.
>  Below are few of the proposed solutions that we could think of at this
> point for getting this done-
As you have not mentioned what kind of metadata you are talking about
I am assuming if your meta data can fit in below structure then we already
have a code in upstream which takes care of your need.

140 struct snd_compr_metadata {
141          __u32 key;
142          __u32 value[8];
143 };

Structure snd_compr_ops has set_metadata and get_metadata callbacks
which you can use for your need.

 88  * struct snd_compr_ops: compressed path DSP operations
 89  * @open: Open the compressed stream
 90  * This callback is mandatory and shall keep dsp ready to receive the stream
 91  * parameter
 92  * @free: Close the compressed stream, mandatory
 93  * @set_params: Sets the compressed stream parameters, mandatory
 94  * This can be called in during stream creation only to set codec params
 95  * and the stream properties
 96  * @get_params: retrieve the codec parameters, mandatory
 97  * @trigger: Trigger operations like start, pause, resume, drain, stop.
 98  * This callback is mandatory
 99  * @pointer: Retrieve current h/w pointer information. Mandatory
100  * @copy: Copy the compressed data to/from userspace, Optional
101  * Can't be implemented if DSP supports mmap
102  * @mmap: DSP mmap method to mmap DSP memory
103  * @ack: Ack for DSP when data is written to audio buffer, Optional
104  * Not valid if copy is implemented
105  * @get_caps: Retrieve DSP capabilities, mandatory
106  * @get_codec_caps: Retrieve capabilities for a specific codec, mandatory
107  */

It would be nice if someone can send a patch here to describe set and
get_metadata callbacks in compress_driver.h

> 1. Adding new IOCTL call: Add a new ioctl control in compress-offload.c
> file to handle hardware specific parameters setting. This new ioctl
> control will call into soc-compress.c and eventually call into platform
> driver ioctl to set those hardware specific parameters. In this case, we
> will add a new structure, let's say "snd_compr_hw_ctrl_params", with the
> same fields as "snd_compr_metadata" struct.
> 2. Adding a function hw_dependant_hw_params(), which will be called after
> hw_params() and before prepare() function. The new function will
> eventually call into the platform driver to get the hardware specific
> parameters set. Once implemented, this would look something like-
>   hw_params();
>   hw_dependant_hw_params();
>   prepare();
> 3. Add a function "hw_dependant_hw_params()", as _part_ of the hw_params()
> function. This new function will be called after the (existing) generic
> parameters are set. So once implemented, the proposed function calls would
> look like-
>   hw_params() {
>         generic_hw_params();
>         hw_dependant_hw_params();
>   }
>   prepare();
> We would like to get feedback on these proposed solutions and get a
> discussion going to see how best these requirements can be fitted in the
> current Compressed ALSA framework (for mainlining).
Can you explain your meta data?

Be the change you want to see in the world:Gandhi

More information about the Alsa-devel mailing list