From: Takashi Sakamoto Date: Sat, 25 Jun 2022 02:00:43 +0000 (+0900) Subject: ctl: elem-value: rewrite getter for 32 bit signed integer values X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=87de08b33ce8c51638d9ac19fd61d1e1044e13b0;p=alsa-gobject.git ctl: elem-value: rewrite getter for 32 bit signed integer values This commit rewrites the getter method so that it returns a pointer to internal storage for 32 bit signed integer values. Signed-off-by: Takashi Sakamoto --- diff --git a/samples/ctl b/samples/ctl index 57742c0..a12b91a 100755 --- a/samples/ctl +++ b/samples/ctl @@ -44,7 +44,7 @@ def handle_elem_event(card, elem_id, events): if info.get_property('elem-type') == ALSACtl.ElemType.BOOLEAN: value = elem_value.get_bool()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER: - value = elem_value.get_int(value) + value = elem_value.get_int()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED: value = elem_value.get_enum(value) elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES: diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 398af1b..85f4ff8 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -26,7 +26,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_new"; "alsactl_elem_value_set_bool"; "alsactl_elem_value_set_int"; - "alsactl_elem_value_get_int"; "alsactl_elem_value_set_enum"; "alsactl_elem_value_get_enum"; "alsactl_elem_value_set_bytes"; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_info_enumerated_new"; "alsactl_elem_value_get_bool"; + "alsactl_elem_value_get_int"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index db22b72..59f466d 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -16,6 +16,7 @@ typedef struct { struct snd_ctl_elem_value value; gboolean boolean[128]; + gint32 integer[128]; } ALSACtlElemValuePrivate; G_DEFINE_TYPE_WITH_PRIVATE(ALSACtlElemValue, alsactl_elem_value, G_TYPE_OBJECT) @@ -173,13 +174,13 @@ void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values, gs /** * alsactl_elem_value_get_int: * @self: A [class@ElemValue]. - * @values: (array length=value_count)(inout): The array for values of integer - * type. + * @values: (array length=value_count) (out) (transfer none): The array for 32 bit signed integer + * values. * @value_count: The number of values up to 128. * - * Copy the array for values of integer type from internal storage. + * Refer to the array for [enum@ElemType].INTEGER element in internal storage. */ -void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, gsize *value_count) +void alsactl_elem_value_get_int(ALSACtlElemValue *self, const gint32 **values, gsize *value_count) { ALSACtlElemValuePrivate *priv; struct snd_ctl_elem_value *value; @@ -192,9 +193,11 @@ void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, g g_return_if_fail(value_count != NULL); value = &priv->value; - *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer.value)); - for (i = 0; i < *value_count; ++i) - (*values)[i] = (gint32)value->value.integer.value[i]; + for (i = 0; i < G_N_ELEMENTS(value->value.integer.value); ++i) + priv->integer[i] = (gint32)value->value.integer.value[i]; + + *values = priv->integer; + *value_count = G_N_ELEMENTS(value->value.integer.value); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 35e0e42..0e2ff57 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -23,7 +23,7 @@ void alsactl_elem_value_get_bool(ALSACtlElemValue *self, void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values, gsize value_count); -void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values, +void alsactl_elem_value_get_int(ALSACtlElemValue *self, const gint32 **values, gsize *value_count); void alsactl_elem_value_set_enum(ALSACtlElemValue *self,