From 857481c73f31fd2ed92863ef0ea7aab7da71e56f Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sat, 25 Jun 2022 11:00:43 +0900 Subject: [PATCH] ctl: elem-value: rewrite getter for enumeration index values This commit rewrites the getter method so that it returns a pointer to internal storage for enumeration index values. Signed-off-by: Takashi Sakamoto --- samples/ctl | 2 +- src/ctl/alsactl.map | 2 +- src/ctl/elem-value.c | 13 ++++++------- src/ctl/elem-value.h | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/samples/ctl b/samples/ctl index a12b91a..a199ce4 100755 --- a/samples/ctl +++ b/samples/ctl @@ -46,7 +46,7 @@ def handle_elem_event(card, elem_id, events): elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER: value = elem_value.get_int()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED: - value = elem_value.get_enum(value) + value = elem_value.get_enum()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES: value = elem_value.get_bytes(value) elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER64: diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 85f4ff8..93bf2a7 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -27,7 +27,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_set_bool"; "alsactl_elem_value_set_int"; "alsactl_elem_value_set_enum"; - "alsactl_elem_value_get_enum"; "alsactl_elem_value_set_bytes"; "alsactl_elem_value_get_bytes"; "alsactl_elem_value_set_iec60958_user_data"; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_value_get_bool"; "alsactl_elem_value_get_int"; + "alsactl_elem_value_get_enum"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 59f466d..2dbe2c1 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -229,16 +229,16 @@ void alsactl_elem_value_set_enum(ALSACtlElemValue *self, const guint32 *values, /** * alsactl_elem_value_get_enum: * @self: A [class@ElemValue]. - * @values: (array length=value_count)(inout): The array for values of enumeration index. + * @values: (array length=value_count) (out) (transfer none): The array for enumeration index + * values. * @value_count: The number of values up to 128. * - * Copy the array for values of enumeration index from internal storage. + * Refer to the array specific to [enum@ElemType].ENUMERATED element in internal storage. */ -void alsactl_elem_value_get_enum(ALSACtlElemValue *self, guint32 *const *values, gsize *value_count) +void alsactl_elem_value_get_enum(ALSACtlElemValue *self, const guint32 **values, gsize *value_count) { ALSACtlElemValuePrivate *priv; struct snd_ctl_elem_value *value; - int i; g_return_if_fail(ALSACTL_IS_ELEM_VALUE(self)); priv = alsactl_elem_value_get_instance_private(self); @@ -247,9 +247,8 @@ void alsactl_elem_value_get_enum(ALSACtlElemValue *self, guint32 *const *values, g_return_if_fail(value_count != NULL); value = &priv->value; - *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.enumerated.item)); - for (i = 0; i < *value_count; ++i) - (*values)[i] = (guint32)value->value.enumerated.item[i]; + *values = value->value.enumerated.item; + *value_count = G_N_ELEMENTS(value->value.enumerated.item); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 0e2ff57..20e23f1 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -29,7 +29,7 @@ void alsactl_elem_value_get_int(ALSACtlElemValue *self, const gint32 **values, void alsactl_elem_value_set_enum(ALSACtlElemValue *self, const guint32 *values, gsize value_count); void alsactl_elem_value_get_enum(ALSACtlElemValue *self, - guint32 *const *values, gsize *value_count); + const guint32 **values, gsize *value_count); void alsactl_elem_value_set_bytes(ALSACtlElemValue *self, const guint8 *values, gsize value_count); -- 2.47.3