]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem-value: rewrite getter for enumeration index values
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 25 Jun 2022 02:00:43 +0000 (11:00 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 25 Jun 2022 02:00:43 +0000 (11:00 +0900)
This commit rewrites the getter method so that it returns a pointer to
internal storage for enumeration index values.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
samples/ctl
src/ctl/alsactl.map
src/ctl/elem-value.c
src/ctl/elem-value.h

index a12b91a9256fbfd3aa658b9465ec9f96f101830c..a199ce496e432d15dffc21fba38629bac89955df 100755 (executable)
@@ -46,7 +46,7 @@ def handle_elem_event(card, elem_id, events):
         elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER:
             value = elem_value.get_int()[:value_count]
         elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED:
-            value = elem_value.get_enum(value)
+            value = elem_value.get_enum()[:value_count]
         elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES:
             value = elem_value.get_bytes(value)
         elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER64:
index 85f4ff8056925ef7fdbde29063b3c17577a0167a..93bf2a7c2c8a5d80f563b8087875094f4e9d939b 100644 (file)
@@ -27,7 +27,6 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_value_set_bool";
     "alsactl_elem_value_set_int";
     "alsactl_elem_value_set_enum";
-    "alsactl_elem_value_get_enum";
     "alsactl_elem_value_set_bytes";
     "alsactl_elem_value_get_bytes";
     "alsactl_elem_value_set_iec60958_user_data";
@@ -94,4 +93,5 @@ ALSA_GOBJECT_0_3_0 {
 
     "alsactl_elem_value_get_bool";
     "alsactl_elem_value_get_int";
+    "alsactl_elem_value_get_enum";
 } ALSA_GOBJECT_0_2_0;
index 59f466d9560012b4653b5b426d6cdad5203d469e..2dbe2c131bf09214f8e66903c18a122d6aa5727b 100644 (file)
@@ -229,16 +229,16 @@ void alsactl_elem_value_set_enum(ALSACtlElemValue *self, const guint32 *values,
 /**
  * alsactl_elem_value_get_enum:
  * @self: A [class@ElemValue].
- * @values: (array length=value_count)(inout): The array for values of enumeration index.
+ * @values: (array length=value_count) (out) (transfer none): The array for enumeration index
+ *          values.
  * @value_count: The number of values up to 128.
  *
- * Copy the array for values of enumeration index from internal storage.
+ * Refer to the array specific to [enum@ElemType].ENUMERATED element in internal storage.
  */
-void alsactl_elem_value_get_enum(ALSACtlElemValue *self, guint32 *const *values, gsize *value_count)
+void alsactl_elem_value_get_enum(ALSACtlElemValue *self, const guint32 **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);
@@ -247,9 +247,8 @@ void alsactl_elem_value_get_enum(ALSACtlElemValue *self, guint32 *const *values,
     g_return_if_fail(value_count != NULL);
 
     value = &priv->value;
-    *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.enumerated.item));
-    for (i = 0; i < *value_count; ++i)
-        (*values)[i] = (guint32)value->value.enumerated.item[i];
+    *values = value->value.enumerated.item;
+    *value_count = G_N_ELEMENTS(value->value.enumerated.item);
 }
 
 /**
index 0e2ff57bd802366ba02fab63dee55ccc2c1b7c04..20e23f1971d9944989efc6ee45db177279b408d0 100644 (file)
@@ -29,7 +29,7 @@ void alsactl_elem_value_get_int(ALSACtlElemValue *self, const gint32 **values,
 void alsactl_elem_value_set_enum(ALSACtlElemValue *self,
                                  const guint32 *values, gsize value_count);
 void alsactl_elem_value_get_enum(ALSACtlElemValue *self,
-                                 guint32 *const *values, gsize *value_count);
+                                 const guint32 **values, gsize *value_count);
 
 void alsactl_elem_value_set_bytes(ALSACtlElemValue *self,
                                   const guint8 *values, gsize value_count);