mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-02 09:01:48 -05:00
topology: Add element ID so we can look up references by name.
Add support to lookup elements by name. This is in preparation for adding some new API calls that will allow building topology data using a C API. This will allow applications to build their own topology data directly. Signed-off-by: Jin Yao <yao.jin@linux.intel.com> Signed-off-by: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
1bb4c2fc30
commit
120b3b8ead
7 changed files with 24 additions and 18 deletions
|
|
@ -264,7 +264,7 @@ int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg,
|
|||
int err = 0;
|
||||
struct tplg_elem *elem;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_TLV);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_TLV);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -298,7 +298,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_BYTES);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_BYTES);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -403,11 +403,10 @@ int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|||
const char *id, *val = NULL;
|
||||
int err, j;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_ENUM);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_ENUM);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
/* init new mixer */
|
||||
ec = elem->enum_ctrl;
|
||||
elem_copy_text(ec->hdr.name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
||||
ec->hdr.type = SND_SOC_TPLG_TYPE_ENUM;
|
||||
|
|
@ -501,7 +500,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int err, j;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_MIXER);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_MIXER);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -420,7 +420,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int widget_type, err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_DAPM_WIDGET);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_DAPM_WIDGET);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|||
int err = 0;
|
||||
struct tplg_elem *elem;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_DATA);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_DATA);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -103,20 +103,27 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base, const char* id,
|
|||
|
||||
/* create a new common element and object */
|
||||
struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
||||
snd_config_t *cfg, enum object_type type)
|
||||
snd_config_t *cfg, const char *name, enum object_type type)
|
||||
{
|
||||
struct tplg_elem *elem;
|
||||
const char *id;
|
||||
int obj_size = 0;
|
||||
void *obj;
|
||||
|
||||
if (!cfg && !name)
|
||||
return NULL;
|
||||
|
||||
elem = tplg_elem_new();
|
||||
if (!elem)
|
||||
return NULL;
|
||||
|
||||
snd_config_get_id(cfg, &id);
|
||||
strncpy(elem->id, id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
||||
elem->id[SNDRV_CTL_ELEM_ID_NAME_MAXLEN - 1] = 0;
|
||||
/* do we get name from cfg */
|
||||
if (cfg) {
|
||||
snd_config_get_id(cfg, &id);
|
||||
elem_copy_text(elem->id, id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
||||
elem->id[SNDRV_CTL_ELEM_ID_NAME_MAXLEN - 1] = 0;
|
||||
} else if (name != NULL)
|
||||
elem_copy_text(elem->id, name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
||||
|
||||
switch (type) {
|
||||
case OBJECT_TYPE_DATA:
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ int tplg_parse_pcm_config(snd_tplg_t *tplg,
|
|||
const char *id;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_STREAM_CONFIG);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_STREAM_CONFIG);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -294,7 +294,7 @@ int tplg_parse_pcm_caps(snd_tplg_t *tplg,
|
|||
char *s;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_STREAM_CAPS);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_STREAM_CAPS);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -461,7 +461,7 @@ int tplg_parse_pcm(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_PCM);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_PCM);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -524,7 +524,7 @@ int tplg_parse_be(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_BE);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_BE);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -587,7 +587,7 @@ int tplg_parse_cc(snd_tplg_t *tplg,
|
|||
const char *id, *val = NULL;
|
||||
int err;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_CC);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_CC);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ int tplg_parse_text(snd_tplg_t *tplg, snd_config_t *cfg,
|
|||
int err = 0;
|
||||
struct tplg_elem *elem;
|
||||
|
||||
elem = tplg_elem_new_common(tplg, cfg, OBJECT_TYPE_TEXT);
|
||||
elem = tplg_elem_new_common(tplg, cfg, NULL, OBJECT_TYPE_TEXT);
|
||||
if (!elem)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base,
|
|||
const char* id,
|
||||
unsigned int type);
|
||||
struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
||||
snd_config_t *cfg, enum object_type type);
|
||||
snd_config_t *cfg, const char *name, enum object_type type);
|
||||
|
||||
static inline void elem_copy_text(char *dest, const char *src, int len)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue