From 99a2b3475763e44ea521cd495b2e0fbc6a1146b6 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 8 bit unsigned integer values This commit rewrites the getter method so that it returns a pointer to internal storage for 8 bit unsigned integer values. Signed-off-by: Takashi Sakamoto --- samples/ctl | 2 +- src/ctl/alsactl.map | 2 +- src/ctl/elem-value.c | 15 +++++++-------- src/ctl/elem-value.h | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/samples/ctl b/samples/ctl index a199ce4..dadffb1 100755 --- a/samples/ctl +++ b/samples/ctl @@ -48,7 +48,7 @@ def handle_elem_event(card, elem_id, events): elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED: value = elem_value.get_enum()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES: - value = elem_value.get_bytes(value) + value = elem_value.get_bytes()[:value_count] elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER64: value = elem_value.get_int64(value) print(value) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 93bf2a7..b290298 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -28,7 +28,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_set_int"; "alsactl_elem_value_set_enum"; "alsactl_elem_value_set_bytes"; - "alsactl_elem_value_get_bytes"; "alsactl_elem_value_set_iec60958_user_data"; "alsactl_elem_value_get_iec60958_user_data"; "alsactl_elem_value_set_iec60958_channel_status"; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_value_get_bool"; "alsactl_elem_value_get_int"; "alsactl_elem_value_get_enum"; + "alsactl_elem_value_get_bytes"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 2dbe2c1..efde32b 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -280,16 +280,16 @@ void alsactl_elem_value_set_bytes(ALSACtlElemValue *self, const guint8 *values, /** * alsactl_elem_value_get_bytes: * @self: A [class@ElemValue]. - * @values: (array length=value_count)(inout): The array for values of bytes type. - * @value_count: The number of values up to 512. + * @values: (array length=value_count) (out) (transfer none): The array for 8 bit unsigned integer + * values. + * @value_count: (out): The number of values up to 512. * - * Copy the array for values of bytes type into internal storage. + * Refer to the array specific to [enum@ElemType].BYTES element in internal storage. */ -void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, guint8 *const *values, gsize *value_count) +void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, const guint8 **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); @@ -298,9 +298,8 @@ void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, guint8 *const *values, g_return_if_fail(value_count != NULL); value = &priv->value; - *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.bytes.data)); - for (i = 0; i < *value_count; ++i) - (*values)[i] = (guint8)value->value.bytes.data[i]; + *values = value->value.bytes.data; + *value_count = G_N_ELEMENTS(value->value.bytes.data); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 20e23f1..6a1ef6e 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -34,7 +34,7 @@ void alsactl_elem_value_get_enum(ALSACtlElemValue *self, void alsactl_elem_value_set_bytes(ALSACtlElemValue *self, const guint8 *values, gsize value_count); void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, - guint8 *const *values, gsize *value_count); + const guint8 **values, gsize *value_count); void alsactl_elem_value_set_iec60958_channel_status(ALSACtlElemValue *self, const guint8 *status, gsize length); -- 2.47.3