]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem-value: rewrite getter for 64 bit signed integer values
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 25 Jun 2022 02:00:43 +0000 (11:00 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Sun, 26 Jun 2022 07:08:37 +0000 (16:08 +0900)
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 <o-takashi@sakamocchi.jp>
samples/ctl
src/ctl/alsactl.map
src/ctl/elem-value.c
src/ctl/elem-value.h

index dadffb106b2f99d9679e8514df4e3fddfb1fb081..cc4609a175836e83751551a25bc2e39acfc21884 100755 (executable)
@@ -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()
index 385d1979a8e7fc1c62fd48827fd79194ab1475ab..f4507862a4630d33ce81c664701070bdc7944225 100644 (file)
@@ -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;
index 44f926830405c5faca506e9bd32258aca5f9a438..02d60079b66b1a36cdb2c6d71f717e893fb357bc 100644 (file)
@@ -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);
 }
 
 /**
index 17d08b09b650beaf8b7231f53e9dfbb58faece2c..8d9f89860acd5ce724ed14dec7d861a58406f34f 100644 (file)
@@ -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);