From e9087c2395e549e30c9e3053ba9d014440c16f6c 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 IEC 60958 channel status This commit rewrites the getter method so that it returns a pointer to internal storage for IEC 60958 channel status. Signed-off-by: Takashi Sakamoto --- src/ctl/alsactl.map | 2 +- src/ctl/elem-value.c | 16 +++++++--------- src/ctl/elem-value.h | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index b290298..a8fd556 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -29,7 +29,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_set_enum"; "alsactl_elem_value_set_bytes"; "alsactl_elem_value_set_iec60958_user_data"; - "alsactl_elem_value_get_iec60958_user_data"; "alsactl_elem_value_set_iec60958_channel_status"; "alsactl_elem_value_get_iec60958_channel_status"; "alsactl_elem_value_set_int64"; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_value_get_int"; "alsactl_elem_value_get_enum"; "alsactl_elem_value_get_bytes"; + "alsactl_elem_value_get_iec60958_user_data"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index efde32b..697fad2 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -332,18 +332,17 @@ void alsactl_elem_value_set_iec60958_channel_status(ALSACtlElemValue *self, cons /** * alsactl_elem_value_get_iec60958_channel_status: * @self: A [class@ElemValue]. - * @status: (array length=length)(inout): The array of byte data for channel status bits for - * IEC 60958 element. - * @length: The number of bytes in status argument, up to 24. + * @status: (array length=length) (out) (transfer none): The array of byte data for channel status + * bits of IEC 60958. + * @length: The number of bytes in status argument up to 24. * - * Copy channel status of IEC 60958 from internal storage. + * Refer to the array specific to [enum@ElemType].IEC60958 element in internal storage. */ -void alsactl_elem_value_get_iec60958_channel_status(ALSACtlElemValue *self, guint8 *const *status, +void alsactl_elem_value_get_iec60958_channel_status(ALSACtlElemValue *self, const guint8 **status, gsize *length) { 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); @@ -352,9 +351,8 @@ void alsactl_elem_value_get_iec60958_channel_status(ALSACtlElemValue *self, guin g_return_if_fail(length != NULL); value = &priv->value; - *length = MIN(*length, G_N_ELEMENTS(value->value.iec958.status)); - for (i = 0; i < *length; ++i) - (*status)[i] = value->value.iec958.status[i]; + *status = value->value.iec958.status; + *length = G_N_ELEMENTS(value->value.iec958.status); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 6a1ef6e..6a69105 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -39,7 +39,7 @@ void alsactl_elem_value_get_bytes(ALSACtlElemValue *self, void alsactl_elem_value_set_iec60958_channel_status(ALSACtlElemValue *self, const guint8 *status, gsize length); void alsactl_elem_value_get_iec60958_channel_status(ALSACtlElemValue *self, - guint8 *const *status, gsize *length); + const guint8 **status, gsize *length); void alsactl_elem_value_set_iec60958_user_data(ALSACtlElemValue *self, const guint8 *data, gsize length); -- 2.47.3