[alsa-devel] [PATCH] topology: Add support for writing manifest private data.

Takashi Iwai tiwai at suse.de
Wed Aug 5 08:11:56 CEST 2015


On Tue, 04 Aug 2015 19:09:46 +0200,
Liam Girdwood wrote:
> 
> From: Mengdong Lin <mengdong.lin at intel.com>
> 
> Allow manifest to contain private data and write this data to file.
> 
> Signed-off-by: Mengdong Lin <mengdong.lin at intel.com>
> Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>

Applied, thanks.


Takashi

> ---
>  src/topology/builder.c    | 37 ++++++++++++++++++++++++++++++++-----
>  src/topology/tplg_local.h |  1 +
>  2 files changed, 33 insertions(+), 5 deletions(-)
> 
> diff --git a/src/topology/builder.c b/src/topology/builder.c
> index 0066b22..a944866 100644
> --- a/src/topology/builder.c
> +++ b/src/topology/builder.c
> @@ -226,9 +226,6 @@ static int write_block(snd_tplg_t *tplg, struct list_head *base,
>  	case OBJECT_TYPE_CC:
>  		return write_elem_block(tplg, base, size,
>  			SND_SOC_TPLG_TYPE_DAI_LINK, "cc");
> -	case OBJECT_TYPE_MANIFEST:
> -		return write_data_block(tplg, size, SND_SOC_TPLG_TYPE_MANIFEST,
> -			"manifest", &tplg->manifest);
>  	case OBJECT_TYPE_DATA:
>  		return write_elem_block(tplg, base, size,
>  			SND_SOC_TPLG_TYPE_PDATA, "data");
> @@ -239,13 +236,43 @@ static int write_block(snd_tplg_t *tplg, struct list_head *base,
>  	return 0;
>  }
>  
> +/* write the manifest including its private data */
> +static int write_manifest_data(snd_tplg_t *tplg)
> +{
> +	int ret;
> +
> +	/* write the header for this block */
> +	ret = write_block_header(tplg, SND_SOC_TPLG_TYPE_MANIFEST, 0,
> +		SND_SOC_TPLG_ABI_VERSION, 0,
> +		sizeof(tplg->manifest) + tplg->manifest.priv.size, 1);
> +	if (ret < 0) {
> +		SNDERR("error: failed to write manifest block %d\n", ret);
> +		return ret;
> +	}
> +
> +	verbose(tplg, "manifest : write %d bytes\n", sizeof(tplg->manifest));
> +	ret = write(tplg->out_fd, &tplg->manifest, sizeof(tplg->manifest));
> +	if (ret < 0) {
> +		SNDERR("error: failed to write manifest %d\n", ret);
> +		return ret;
> +	}
> +
> +	verbose(tplg, "manifest : write %d priv bytes\n", tplg->manifest.priv.size);
> +	ret = write(tplg->out_fd, tplg->manifest_pdata, tplg->manifest.priv.size);
> +	if (ret < 0) {
> +		SNDERR("error: failed to write manifest priv data %d\n", ret);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
>  int tplg_write_data(snd_tplg_t *tplg)
>  {
>  	int ret;
>  
>  	/* write manifest */
> -	ret = write_data_block(tplg, sizeof(tplg->manifest),
> -		OBJECT_TYPE_MANIFEST, "manifest", &tplg->manifest);
> +	ret = write_manifest_data(tplg);
>  	if (ret < 0) {
>  		SNDERR("failed to write manifest %d\n", ret);
>  		return ret;
> diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
> index 62788e4..ad38945 100644
> --- a/src/topology/tplg_local.h
> +++ b/src/topology/tplg_local.h
> @@ -77,6 +77,7 @@ struct snd_tplg {
>  
>  	/* manifest */
>  	struct snd_soc_tplg_manifest manifest;
> +	const void *manifest_pdata;	/* copied by builder at file write */
>  
>  	/* list of each element type */
>  	struct list_head tlv_list;
> -- 
> 2.1.4
> 


More information about the Alsa-devel mailing list