From: Takashi Sakamoto Date: Sat, 25 Jun 2022 02:00:43 +0000 (+0900) Subject: ctl: elem-value: rewrite getter for 64 bit signed integer values X-Git-Tag: v0.3.0~20 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=ec67c1732a6b8d62cca0344e2436cd6eedbc9263;p=alsa-gobject.git ctl: elem-value: rewrite getter for 64 bit signed integer values This commit rewrites the getter method so that it returns a pointer to internal storage for 64 bit signed integer values. Signed-off-by: Takashi Sakamoto --- diff --git a/samples/ctl b/samples/ctl index dadffb1..cc4609a 100755 --- a/samples/ctl +++ b/samples/ctl @@ -40,7 +40,6 @@ def handle_elem_event(card, elem_id, events): _, elem_value = card.read_elem_value(elem_id, elem_value) if isinstance(info, ALSACtl.ElemInfoSingleArray): value_count = info.get_property('value-count') - value = [0] * value_count 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: @@ -50,7 +49,7 @@ def handle_elem_event(card, elem_id, events): elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES: value = elem_value.get_bytes()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER64: - value = elem_value.get_int64(value) + value = elem_value.get_int64()[:value_count] print(value) elif info.get_property('elem-type') == ALSACtl.ElemType.IEC60958: channel_status = elem_value.get_channel_status() diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 385d197..f450786 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -31,7 +31,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_set_iec60958_user_data"; "alsactl_elem_value_set_iec60958_channel_status"; "alsactl_elem_value_set_int64"; - "alsactl_elem_value_get_int64"; "alsactl_elem_value_equal"; local: *; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_value_get_bytes"; "alsactl_elem_value_get_iec60958_user_data"; "alsactl_elem_value_get_iec60958_channel_status"; + "alsactl_elem_value_get_int64"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 44f9268..02d6007 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -437,16 +437,16 @@ void alsactl_elem_value_set_int64(ALSACtlElemValue *self, const gint64 *values, /** * alsactl_elem_value_get_int64: * @self: A [class@ElemValue]. - * @values: (array length=value_count)(inout): The array for values of integer64 type. + * @values: (array length=value_count) (out) (transfer none): The array for 64 bit signed integer + * values. * @value_count: The number of values up to 64. * - * Copy the array for values of integer64 type from internal storage. + * Refer to the array for [enum@ElemType].INTEGER64 element in internal storage. */ -void alsactl_elem_value_get_int64(ALSACtlElemValue *self, gint64 *const *values, gsize *value_count) +void alsactl_elem_value_get_int64(ALSACtlElemValue *self, const gint64 **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); @@ -455,9 +455,8 @@ void alsactl_elem_value_get_int64(ALSACtlElemValue *self, gint64 *const *values, g_return_if_fail(value_count != NULL); value = &priv->value; - *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer64.value)); - for (i = 0; i < *value_count; ++i) - (*values)[i] = (gint64)value->value.integer64.value[i]; + *values = (const gint64 *)value->value.integer64.value; + *value_count = G_N_ELEMENTS(value->value.integer64.value); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 17d08b0..8d9f898 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -49,7 +49,7 @@ void alsactl_elem_value_get_iec60958_user_data(ALSACtlElemValue *self, void alsactl_elem_value_set_int64(ALSACtlElemValue *self, const gint64 *values, gsize value_count); void alsactl_elem_value_get_int64(ALSACtlElemValue *self, - gint64 *const *values, gsize *value_count); + const gint64 **values, gsize *value_count); gboolean alsactl_elem_value_equal(const ALSACtlElemValue *self, const ALSACtlElemValue *target);