]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_value: add APIs to set/get value of integer64 type
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Dec 2019 05:29:12 +0000 (14:29 +0900)
src/ctl/alsactl.map
src/ctl/elem-value.c
src/ctl/elem-value.h
tests/alsactl-elem-value

index 366288f47a3eacc9614f02e69790bca7ca511fbf..b88de5504785cfcf749cb469ef12a9f252d66fbf 100644 (file)
@@ -73,6 +73,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_value_get_bytes";
     "alsactl_elem_value_set_iec60958";
     "alsactl_elem_value_get_iec60958";
+    "alsactl_elem_value_set_int64";
+    "alsactl_elem_value_get_int64";
   local:
     *;
 };
index ae106d93fc1f89a6b82bec6feb116d852fbc8568..5c3b6389e685b480d65f7ec14f962fadff777996 100644 (file)
@@ -349,3 +349,52 @@ void alsactl_elem_value_get_iec60958(ALSACtlElemValue *self,
             (*user_data)[i] = value->value.iec958.subcode[i];
     }
 }
+
+/**
+ * alsactl_elem_value_set_int64:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count): The array for values of integer64 type.
+ * @value_count: The number of values up to 64.
+ *
+ * Copy the array for values of integer64 type into internal storage.
+ */
+void alsactl_elem_value_set_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);
+    value = &priv->value;
+
+    value_count = MIN(value_count, G_N_ELEMENTS(value->value.integer64.value));
+    for (i = 0; i < value_count; ++i)
+        value->value.integer64.value[i] = (long long)values[i];
+}
+
+/**
+ * alsactl_elem_value_get_int64:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count)(inout): The array for values of integer64
+ *          type.
+ * @value_count: The number of values up to 64.
+ *
+ * Copy the array for values of integer64 type from internal storage.
+ */
+void alsactl_elem_value_get_int64(ALSACtlElemValue *self,
+                                  gint64 *const *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);
+    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];
+}
index bbccb2c2c465279d57b7aefa9b37ae14a9a06ecf..fcbd30ad91078eb5f87c128ecb05ff305ebf65c4 100644 (file)
@@ -76,6 +76,11 @@ void alsactl_elem_value_get_iec60958(ALSACtlElemValue *self,
                 guint8 *const *channel_status, gsize *channel_status_length,
                 guint8 *const *user_data, gsize *user_data_length);
 
+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);
+
 G_END_DECLS
 
 #endif
index 9a59990264586f4b46d62211ebe790b19e1d3f75..62d071ebe6b3f66d5be13a1d35a637a12db71394 100644 (file)
@@ -25,6 +25,8 @@ methods = (
     'get_bytes',
     'set_iec60958',
     'get_iec60958',
+    'set_int64',
+    'get_int64',
 )
 signals = ()