From 847f35a5c0b2072b37dd194aa473273d0896b266 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 user data This commit rewrites the getter method so that it returns a pointer to internal storage for IEC 60958 user data. Signed-off-by: Takashi Sakamoto --- src/ctl/alsactl.map | 2 +- src/ctl/elem-value.c | 15 +++++++-------- src/ctl/elem-value.h | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index a8fd556..385d197 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -30,7 +30,6 @@ ALSA_GOBJECT_0_0_0 { "alsactl_elem_value_set_bytes"; "alsactl_elem_value_set_iec60958_user_data"; "alsactl_elem_value_set_iec60958_channel_status"; - "alsactl_elem_value_get_iec60958_channel_status"; "alsactl_elem_value_set_int64"; "alsactl_elem_value_get_int64"; "alsactl_elem_value_equal"; @@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_value_get_enum"; "alsactl_elem_value_get_bytes"; "alsactl_elem_value_get_iec60958_user_data"; + "alsactl_elem_value_get_iec60958_channel_status"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-value.c b/src/ctl/elem-value.c index 697fad2..44f9268 100644 --- a/src/ctl/elem-value.c +++ b/src/ctl/elem-value.c @@ -385,17 +385,17 @@ void alsactl_elem_value_set_iec60958_user_data(ALSACtlElemValue *self, const gui /** * alsactl_elem_value_get_iec60958_user_data: * @self: A [class@ElemValue]. - * @data: (array length=length)(inout): The array of byte data for user data bits in IEC 60958. - * @length: The number of bytes in user_data argument, up to 147. + * @data: (array length=length) (out) (transfer none): The array of byte data for user data bits of + * IEC 60958. + * @length: The number of bytes in user_data argument up to 147. * - * Copy user data 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_user_data(ALSACtlElemValue *self, guint8 *const *data, +void alsactl_elem_value_get_iec60958_user_data(ALSACtlElemValue *self, const guint8 **data, 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); @@ -404,9 +404,8 @@ void alsactl_elem_value_get_iec60958_user_data(ALSACtlElemValue *self, guint8 *c g_return_if_fail(length != NULL); value = &priv->value; - *length = MIN(*length, G_N_ELEMENTS(value->value.iec958.subcode)); - for (i = 0; i < *length; ++i) - (*data)[i] = value->value.iec958.subcode[i]; + *data = value->value.iec958.subcode; + *length = G_N_ELEMENTS(value->value.iec958.subcode); } /** diff --git a/src/ctl/elem-value.h b/src/ctl/elem-value.h index 6a69105..17d08b0 100644 --- a/src/ctl/elem-value.h +++ b/src/ctl/elem-value.h @@ -44,7 +44,7 @@ void alsactl_elem_value_get_iec60958_channel_status(ALSACtlElemValue *self, void alsactl_elem_value_set_iec60958_user_data(ALSACtlElemValue *self, const guint8 *data, gsize length); void alsactl_elem_value_get_iec60958_user_data(ALSACtlElemValue *self, - guint8 *const *data, gsize *length); + const guint8 **data, gsize *length); void alsactl_elem_value_set_int64(ALSACtlElemValue *self, const gint64 *values, gsize value_count); -- 2.47.3