mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-02 09:01:48 -05:00
ctl: support extra information to user-defined element set
In ALSA control feature, information of an element includes extra fields to type-specific parameters; i.e. dimension. The fields can be extended in future. Meanwhile, current APIs to add user-defined element set can not support such an extended fields. This may cause inconveniences in future. This commit supports the fields, by changing APIs for element set. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7117d22cf2
commit
f9e6011255
3 changed files with 92 additions and 113 deletions
|
|
@ -423,24 +423,24 @@ void snd_ctl_elem_info_set_subdevice(snd_ctl_elem_info_t *obj, unsigned int val)
|
||||||
void snd_ctl_elem_info_set_name(snd_ctl_elem_info_t *obj, const char *val);
|
void snd_ctl_elem_info_set_name(snd_ctl_elem_info_t *obj, const char *val);
|
||||||
void snd_ctl_elem_info_set_index(snd_ctl_elem_info_t *obj, unsigned int val);
|
void snd_ctl_elem_info_set_index(snd_ctl_elem_info_t *obj, unsigned int val);
|
||||||
|
|
||||||
int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long min, long max, long step);
|
long min, long max, long step);
|
||||||
int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long long min, long long max,
|
long long min, long long max,
|
||||||
long long step);
|
long long step);
|
||||||
int snd_ctl_elem_add_boolean_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_boolean_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count);
|
unsigned int member_count);
|
||||||
int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
unsigned int items,
|
unsigned int items,
|
||||||
const char *const labels[]);
|
const char *const labels[]);
|
||||||
int snd_ctl_elem_add_bytes_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_bytes_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count);
|
unsigned int member_count);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -305,7 +305,8 @@ int snd_ctl_elem_info(snd_ctl_t *ctl, snd_ctl_elem_info_t *info)
|
||||||
/**
|
/**
|
||||||
* \brief Create and add some user-defined control elements of integer type.
|
* \brief Create and add some user-defined control elements of integer type.
|
||||||
* \param ctl A handle of backend module for control interface.
|
* \param ctl A handle of backend module for control interface.
|
||||||
* \param id ID of the first new element.
|
* \param info Common iformation for a new element set, with ID of the first new
|
||||||
|
* element.
|
||||||
* \param element_count The number of elements added by this operation.
|
* \param element_count The number of elements added by this operation.
|
||||||
* \param member_count The number of members which a element has to
|
* \param member_count The number of members which a element has to
|
||||||
* represent its states.
|
* represent its states.
|
||||||
|
|
@ -342,38 +343,36 @@ int snd_ctl_elem_info(snd_ctl_t *ctl, snd_ctl_elem_info_t *info)
|
||||||
* \par Compatibility:
|
* \par Compatibility:
|
||||||
* This function is added in version 1.1.2.
|
* This function is added in version 1.1.2.
|
||||||
*/
|
*/
|
||||||
int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long min, long max, long step)
|
long min, long max, long step)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_info_t info = {0};
|
|
||||||
snd_ctl_elem_value_t data = {0};
|
snd_ctl_elem_value_t data = {0};
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
unsigned int numid;
|
unsigned int numid;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
assert(ctl && id && id->name[0]);
|
assert(ctl && info && info->id.name[0]);
|
||||||
|
|
||||||
info.id = *id;
|
info->type = SND_CTL_ELEM_TYPE_INTEGER;
|
||||||
info.type = SND_CTL_ELEM_TYPE_INTEGER;
|
info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||||
info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
||||||
SNDRV_CTL_ELEM_ACCESS_USER;
|
SNDRV_CTL_ELEM_ACCESS_USER;
|
||||||
info.owner = element_count;
|
info->owner = element_count;
|
||||||
info.count = member_count;
|
info->count = member_count;
|
||||||
info.value.integer.min = min;
|
info->value.integer.min = min;
|
||||||
info.value.integer.max = max;
|
info->value.integer.max = max;
|
||||||
info.value.integer.step = step;
|
info->value.integer.step = step;
|
||||||
|
|
||||||
err = ctl->ops->element_add(ctl, &info);
|
err = ctl->ops->element_add(ctl, info);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
numid = snd_ctl_elem_id_get_numid(&info.id);
|
numid = snd_ctl_elem_id_get_numid(&info->id);
|
||||||
|
|
||||||
/* Set initial value to all of members in all of added elements. */
|
/* Set initial value to all of members in all of added elements. */
|
||||||
data.id = info.id;
|
data.id = info->id;
|
||||||
for (i = 0; i < element_count; i++) {
|
for (i = 0; i < element_count; i++) {
|
||||||
snd_ctl_elem_id_set_numid(&data.id, numid + i);
|
snd_ctl_elem_id_set_numid(&data.id, numid + i);
|
||||||
|
|
||||||
|
|
@ -385,14 +384,14 @@ int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
*id = info.id;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Create and add some user-defined control elements of integer64 type.
|
* \brief Create and add some user-defined control elements of integer64 type.
|
||||||
* \param ctl A handle of backend module for control interface.
|
* \param ctl A handle of backend module for control interface.
|
||||||
* \param id ID of the first new control element.
|
* \param info Common iformation for a new element set, with ID of the first new
|
||||||
|
* element.
|
||||||
* \param element_count The number of elements added by this operation.
|
* \param element_count The number of elements added by this operation.
|
||||||
* \param member_count The number of members which a element has to
|
* \param member_count The number of members which a element has to
|
||||||
* represent its states.
|
* represent its states.
|
||||||
|
|
@ -429,38 +428,36 @@ int snd_ctl_elem_add_integer_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
* \par Compatibility:
|
* \par Compatibility:
|
||||||
* This function is added in version 1.1.2.
|
* This function is added in version 1.1.2.
|
||||||
*/
|
*/
|
||||||
int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long long min, long long max, long long step)
|
long long min, long long max, long long step)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_info_t info = {0};
|
|
||||||
snd_ctl_elem_value_t data = {0};
|
snd_ctl_elem_value_t data = {0};
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
unsigned int numid;
|
unsigned int numid;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
assert(ctl && id && id->name[0]);
|
assert(ctl && info && info->id.name[0]);
|
||||||
|
|
||||||
info.id = *id;
|
info->type = SND_CTL_ELEM_TYPE_INTEGER64;
|
||||||
info.type = SND_CTL_ELEM_TYPE_INTEGER64;
|
info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||||
info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
||||||
SNDRV_CTL_ELEM_ACCESS_USER;
|
SNDRV_CTL_ELEM_ACCESS_USER;
|
||||||
info.owner = element_count;
|
info->owner = element_count;
|
||||||
info.count = member_count;
|
info->count = member_count;
|
||||||
info.value.integer64.min = min;
|
info->value.integer64.min = min;
|
||||||
info.value.integer64.max = max;
|
info->value.integer64.max = max;
|
||||||
info.value.integer64.step = step;
|
info->value.integer64.step = step;
|
||||||
|
|
||||||
err = ctl->ops->element_add(ctl, &info);
|
err = ctl->ops->element_add(ctl, info);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
numid = snd_ctl_elem_id_get_numid(&info.id);
|
numid = snd_ctl_elem_id_get_numid(&info->id);
|
||||||
|
|
||||||
/* Set initial value to all of members in all of added elements. */
|
/* Set initial value to all of members in all of added elements. */
|
||||||
data.id = info.id;
|
data.id = info->id;
|
||||||
for (i = 0; i < element_count; i++) {
|
for (i = 0; i < element_count; i++) {
|
||||||
snd_ctl_elem_id_set_numid(&data.id, numid + i);
|
snd_ctl_elem_id_set_numid(&data.id, numid + i);
|
||||||
|
|
||||||
|
|
@ -472,14 +469,14 @@ int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
*id = info.id;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Create and add some user-defined control elements of boolean type.
|
* \brief Create and add some user-defined control elements of boolean type.
|
||||||
* \param ctl A handle of backend module for control interface.
|
* \param ctl A handle of backend module for control interface.
|
||||||
* \param id ID of the new control element.
|
* \param info Common iformation for a new element set, with ID of the first new
|
||||||
|
* element.
|
||||||
* \param element_count The number of elements added by this operation.
|
* \param element_count The number of elements added by this operation.
|
||||||
* \param member_count The number of members which a element has to
|
* \param member_count The number of members which a element has to
|
||||||
* represent its states.
|
* represent its states.
|
||||||
|
|
@ -512,36 +509,29 @@ int snd_ctl_elem_add_integer64_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
* \par Compatibility:
|
* \par Compatibility:
|
||||||
* This function is added in version 1.1.2.
|
* This function is added in version 1.1.2.
|
||||||
*/
|
*/
|
||||||
int snd_ctl_elem_add_boolean_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_boolean_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count)
|
unsigned int member_count)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_info_t info = {0};
|
assert(ctl && info && info->id.name[0]);
|
||||||
int err;
|
|
||||||
|
|
||||||
assert(ctl && id && id->name[0]);
|
info->type = SND_CTL_ELEM_TYPE_BOOLEAN;
|
||||||
|
info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||||
info.id = *id;
|
|
||||||
info.type = SND_CTL_ELEM_TYPE_BOOLEAN;
|
|
||||||
info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
||||||
SNDRV_CTL_ELEM_ACCESS_USER;
|
SNDRV_CTL_ELEM_ACCESS_USER;
|
||||||
info.owner = element_count;
|
info->owner = element_count;
|
||||||
info.count = member_count;
|
info->count = member_count;
|
||||||
info.value.integer.min = 0;
|
info->value.integer.min = 0;
|
||||||
info.value.integer.max = 1;
|
info->value.integer.max = 1;
|
||||||
|
|
||||||
err = ctl->ops->element_add(ctl, &info);
|
return ctl->ops->element_add(ctl, info);
|
||||||
if (err >= 0)
|
|
||||||
*id = info.id;
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Create and add some user-defined control elements of enumerated type.
|
* \brief Create and add some user-defined control elements of enumerated type.
|
||||||
* \param ctl A handle of backend module for control interface.
|
* \param ctl A handle of backend module for control interface.
|
||||||
* \param id ID of the first new element.
|
* \param info Common iformation for a new element set, with ID of the first new
|
||||||
|
* element.
|
||||||
* \param element_count The number of elements added by this operation.
|
* \param element_count The number of elements added by this operation.
|
||||||
* \param member_count The number of members which a element has to
|
* \param member_count The number of members which a element has to
|
||||||
* represent its states.
|
* represent its states.
|
||||||
|
|
@ -579,27 +569,25 @@ int snd_ctl_elem_add_boolean_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
* \par Compatibility:
|
* \par Compatibility:
|
||||||
* This function is added in version 1.1.2.
|
* This function is added in version 1.1.2.
|
||||||
*/
|
*/
|
||||||
int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
unsigned int items,
|
unsigned int items,
|
||||||
const char *const labels[])
|
const char *const labels[])
|
||||||
{
|
{
|
||||||
snd_ctl_elem_info_t info = {0};
|
|
||||||
unsigned int i, bytes;
|
unsigned int i, bytes;
|
||||||
char *buf, *p;
|
char *buf, *p;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
assert(ctl && id && id->name[0] && labels);
|
assert(ctl && info && info->id.name[0] && labels);
|
||||||
|
|
||||||
info.id = *id;
|
info->type = SND_CTL_ELEM_TYPE_ENUMERATED;
|
||||||
info.type = SND_CTL_ELEM_TYPE_ENUMERATED;
|
info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||||
info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
||||||
SNDRV_CTL_ELEM_ACCESS_USER;
|
SNDRV_CTL_ELEM_ACCESS_USER;
|
||||||
info.owner = element_count;
|
info->owner = element_count;
|
||||||
info.count = member_count;
|
info->count = member_count;
|
||||||
info.value.enumerated.items = items;
|
info->value.enumerated.items = items;
|
||||||
|
|
||||||
bytes = 0;
|
bytes = 0;
|
||||||
for (i = 0; i < items; ++i)
|
for (i = 0; i < items; ++i)
|
||||||
|
|
@ -609,17 +597,15 @@ int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
buf = malloc(bytes);
|
buf = malloc(bytes);
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
info.value.enumerated.names_ptr = (uintptr_t)buf;
|
info->value.enumerated.names_ptr = (uintptr_t)buf;
|
||||||
info.value.enumerated.names_length = bytes;
|
info->value.enumerated.names_length = bytes;
|
||||||
p = buf;
|
p = buf;
|
||||||
for (i = 0; i < items; ++i) {
|
for (i = 0; i < items; ++i) {
|
||||||
strcpy(p, labels[i]);
|
strcpy(p, labels[i]);
|
||||||
p += strlen(labels[i]) + 1;
|
p += strlen(labels[i]) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ctl->ops->element_add(ctl, &info);
|
err = ctl->ops->element_add(ctl, info);
|
||||||
if (err >= 0)
|
|
||||||
*id = info.id;
|
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
|
|
@ -629,7 +615,8 @@ int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
/**
|
/**
|
||||||
* \brief Create and add some user-defined control elements of bytes type.
|
* \brief Create and add some user-defined control elements of bytes type.
|
||||||
* \param ctl A handle of backend module for control interface.
|
* \param ctl A handle of backend module for control interface.
|
||||||
* \param id ID of the first new element.
|
* \param info Common iformation for a new element set, with ID of the first new
|
||||||
|
* element.
|
||||||
* \param element_count The number of elements added by this operation.
|
* \param element_count The number of elements added by this operation.
|
||||||
* \param member_count The number of members which a element has to
|
* \param member_count The number of members which a element has to
|
||||||
* represent its states.
|
* represent its states.
|
||||||
|
|
@ -663,28 +650,20 @@ int snd_ctl_elem_add_enumerated_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
||||||
* \par Compatibility:
|
* \par Compatibility:
|
||||||
* This function is added in version 1.1.2.
|
* This function is added in version 1.1.2.
|
||||||
*/
|
*/
|
||||||
int snd_ctl_elem_add_bytes_set(snd_ctl_t *ctl, snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_bytes_set(snd_ctl_t *ctl, snd_ctl_elem_info_t *info,
|
||||||
unsigned int element_count,
|
unsigned int element_count,
|
||||||
unsigned int member_count)
|
unsigned int member_count)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_info_t info = {0};
|
assert(ctl && info && info->id.name[0]);
|
||||||
int err;
|
|
||||||
|
|
||||||
assert(ctl && id && id->name[0]);
|
info->type = SND_CTL_ELEM_TYPE_BYTES;
|
||||||
|
info->access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
||||||
info.id = *id;
|
|
||||||
info.type = SND_CTL_ELEM_TYPE_BYTES;
|
|
||||||
info.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE |
|
||||||
SNDRV_CTL_ELEM_ACCESS_USER;
|
SNDRV_CTL_ELEM_ACCESS_USER;
|
||||||
info.owner = element_count;
|
info->owner = element_count;
|
||||||
info.count = member_count;
|
info->count = member_count;
|
||||||
|
|
||||||
err = ctl->ops->element_add(ctl, &info);
|
return ctl->ops->element_add(ctl, info);
|
||||||
if (err >= 0)
|
|
||||||
*id = info.id;
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -698,11 +677,11 @@ int snd_ctl_elem_add_integer(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long min, long max, long step)
|
long min, long max, long step)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_id_t local_id = {0};
|
snd_ctl_elem_info_t info = {0};
|
||||||
|
|
||||||
local_id = *id;
|
info.id = *id;
|
||||||
|
|
||||||
return snd_ctl_elem_add_integer_set(ctl, &local_id, 1, member_count,
|
return snd_ctl_elem_add_integer_set(ctl, &info, 1, member_count,
|
||||||
min, max, step);
|
min, max, step);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -717,11 +696,11 @@ int snd_ctl_elem_add_integer64(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||||||
unsigned int member_count,
|
unsigned int member_count,
|
||||||
long long min, long long max, long long step)
|
long long min, long long max, long long step)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_id_t local_id = {0};
|
snd_ctl_elem_info_t info = {0};
|
||||||
|
|
||||||
local_id = *id;
|
info.id = *id;
|
||||||
|
|
||||||
return snd_ctl_elem_add_integer64_set(ctl, &local_id, 1, member_count,
|
return snd_ctl_elem_add_integer64_set(ctl, &info, 1, member_count,
|
||||||
min, max, step);
|
min, max, step);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -735,11 +714,11 @@ int snd_ctl_elem_add_integer64(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||||||
int snd_ctl_elem_add_boolean(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
int snd_ctl_elem_add_boolean(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||||||
unsigned int member_count)
|
unsigned int member_count)
|
||||||
{
|
{
|
||||||
snd_ctl_elem_id_t local_id = {0};
|
snd_ctl_elem_info_t info = {0};
|
||||||
|
|
||||||
local_id = *id;
|
info.id = *id;
|
||||||
|
|
||||||
return snd_ctl_elem_add_boolean_set(ctl, &local_id, 1, member_count);
|
return snd_ctl_elem_add_boolean_set(ctl, &info, 1, member_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -755,11 +734,11 @@ int snd_ctl_elem_add_enumerated(snd_ctl_t *ctl, const snd_ctl_elem_id_t *id,
|
||||||
unsigned int member_count, unsigned int items,
|
unsigned int member_count, unsigned int items,
|
||||||
const char *const labels[])
|
const char *const labels[])
|
||||||
{
|
{
|
||||||
snd_ctl_elem_id_t local_id = {0};
|
snd_ctl_elem_info_t info = {0};
|
||||||
|
|
||||||
local_id = *id;
|
info.id = *id;
|
||||||
|
|
||||||
return snd_ctl_elem_add_enumerated_set(ctl, &local_id, 1, member_count,
|
return snd_ctl_elem_add_enumerated_set(ctl, &info, 1, member_count,
|
||||||
items, labels);
|
items, labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -663,18 +663,18 @@ static int add_tlv_info(snd_pcm_softvol_t *svol, snd_ctl_elem_info_t *cinfo)
|
||||||
return snd_ctl_elem_tlv_write(svol->ctl, &cinfo->id, tlv);
|
return snd_ctl_elem_tlv_write(svol->ctl, &cinfo->id, tlv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_user_ctl(snd_pcm_softvol_t *svol, snd_ctl_elem_info_t *cinfo, int count)
|
static int add_user_ctl(snd_pcm_softvol_t *svol, snd_ctl_elem_info_t *cinfo,
|
||||||
|
int count)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
int i;
|
int i;
|
||||||
unsigned int def_val;
|
unsigned int def_val;
|
||||||
|
|
||||||
if (svol->max_val == 1)
|
if (svol->max_val == 1)
|
||||||
err = snd_ctl_elem_add_boolean_set(svol->ctl, &cinfo->id, 1,
|
err = snd_ctl_elem_add_boolean_set(svol->ctl, cinfo, 1, count);
|
||||||
count);
|
|
||||||
else
|
else
|
||||||
err = snd_ctl_elem_add_integer_set(svol->ctl, &cinfo->id, 1,
|
err = snd_ctl_elem_add_integer_set(svol->ctl, cinfo, 1, count,
|
||||||
count, 0, svol->max_val, 0);
|
0, svol->max_val, 0);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
if (svol->max_val == 1)
|
if (svol->max_val == 1)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue