]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: user_client: add APIs to set/get tempo of queue
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 Nov 2019 10:58:24 +0000 (19:58 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 7 Apr 2020 08:08:24 +0000 (17:08 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/privates.h
src/seq/queue-tempo.c
src/seq/user-client.c
src/seq/user-client.h
tests/alsaseq-user-client

index 319b2342fdb96287fa9196c26892f76d079f1caa..da80e11924a1c1c5b5a3e8445b090731b411f817 100644 (file)
@@ -57,6 +57,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_user_client_update_queue";
     "alsaseq_user_client_get_queue_usage";
     "alsaseq_user_client_set_queue_usage";
+    "alsaseq_user_client_set_queue_tempo";
+    "alsaseq_user_client_get_queue_tempo";
 
     "alsaseq_addr_get_type";
     "alsaseq_addr_new";
index eed1e5e6eac72b96806f15a002397b95a61cfbe1..c6b9cd075195722008c746bc236ad815763d3ec3 100644 (file)
@@ -15,6 +15,7 @@
 #include "subscribe-data.h"
 #include "queue-info.h"
 #include "queue-status.h"
+#include "queue-tempo.h"
 
 #include <sound/asequencer.h>
 
@@ -49,6 +50,9 @@ void seq_queue_info_refer_private(ALSASeqQueueInfo *self,
 void seq_queue_status_refer_private(ALSASeqQueueStatus *self,
                                     struct snd_seq_queue_status **status);
 
+void seq_queue_tempo_refer_private(ALSASeqQueueTempo *self,
+                                   struct snd_seq_queue_tempo **tempo);
+
 G_END_DECLS
 
 #endif
index ac93a7b32404e333b95d26155d8cdc4e1f3f276b..6044360433a32dad5a80567fa6b8b0874648dccc 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: LGPL-3.0-or-later
-#include "queue-tempo.h"
-
-#include <sound/asequencer.h>
+#include "privates.h"
 
 struct _ALSASeqQueueTempoPrivate {
     struct snd_seq_queue_tempo tempo;
@@ -152,3 +150,12 @@ void alsaseq_queue_tempo_set_skew(ALSASeqQueueTempo *self, const guint32 skew[2]
     priv->tempo.skew_value = skew[0];
     priv->tempo.skew_base = skew[1];
 }
+
+void seq_queue_tempo_refer_private(ALSASeqQueueTempo *self,
+                                   struct snd_seq_queue_tempo **tempo)
+{
+    ALSASeqQueueTempoPrivate *priv =
+                                alsaseq_queue_tempo_get_instance_private(self);
+
+    *tempo = &priv->tempo;
+}
index bfcc030cd603deab1225f380fab0fd1bce7c75ea..d06cba6c384ecc8617bac594af51497f03428ba9 100644 (file)
@@ -718,3 +718,62 @@ void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self,
     if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT, &data) < 0)
         generate_error(error, errno);
 }
+
+/**
+ * alsaseq_user_client_set_queue_tempo:
+ * @self: A #ALSASeqUserClient.
+ * @queue_id: The numerical ID of queue, except for entries in
+ *            ALSASeqSpecificQueueId.
+ * @queue_tempo: The data of tempo for queue.
+ * @error: A #GError.
+ *
+ *
+ * Set the data of tempo to the queue.
+ */
+void alsaseq_user_client_set_queue_tempo(ALSASeqUserClient *self,
+                                guint queue_id, ALSASeqQueueTempo *queue_tempo,
+                                GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_tempo *tempo;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(ALSASEQ_IS_QUEUE_TEMPO(queue_tempo));
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    seq_queue_tempo_refer_private(queue_tempo, &tempo);
+    tempo->queue = queue_id;
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO, tempo) < 0)
+        generate_error(error, errno);
+}
+
+/**
+ * alsaseq_user_client_get_queue_tempo:
+ * @self: A #ALSASeqUserClient.
+ * @queue_id: The numerical ID of queue, except for entries in
+ *            ALSASeqSpecificQueueId.
+ * @queue_tempo: (out): The data of tempo for queue.
+ * @error: A #GError.
+ *
+ * Get the data of tempo for the queue.
+ */
+void alsaseq_user_client_get_queue_tempo(ALSASeqUserClient *self,
+                                guint queue_id, ALSASeqQueueTempo **queue_tempo,
+                                GError **error)
+{
+    ALSASeqUserClientPrivate *priv;
+    struct snd_seq_queue_tempo *tempo;
+
+    g_return_if_fail(ALSASEQ_IS_USER_CLIENT(self));
+    g_return_if_fail(queue_tempo != NULL);
+    priv = alsaseq_user_client_get_instance_private(self);
+
+    *queue_tempo = g_object_new(ALSASEQ_TYPE_QUEUE_TEMPO, NULL);
+    seq_queue_tempo_refer_private(*queue_tempo, &tempo);
+
+    tempo->queue = queue_id;
+    if (ioctl(priv->fd, SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO, tempo) < 0) {
+        generate_error(error, errno);
+        g_object_unref(*queue_tempo);
+    }
+}
index 7d2b2713d28fb54a48ea3c31dd7b7ce87a2f53b3..8307d066e11bafab5a95b2c23d16e3b4285c8d11 100644 (file)
@@ -13,6 +13,7 @@
 #include <seq/event-variable.h>
 #include <seq/subscribe-data.h>
 #include <seq/queue-info.h>
+#include <seq/queue-tempo.h>
 
 G_BEGIN_DECLS
 
@@ -119,6 +120,14 @@ void alsaseq_user_client_get_queue_usage(ALSASeqUserClient *self,
 void alsaseq_user_client_set_queue_usage(ALSASeqUserClient *self,
                                          guint queue_id, gboolean use,
                                          GError **error);
+
+void alsaseq_user_client_set_queue_tempo(ALSASeqUserClient *self,
+                                guint queue_id, ALSASeqQueueTempo *queue_tempo,
+                                GError **error);
+void alsaseq_user_client_get_queue_tempo(ALSASeqUserClient *self,
+                                guint queue_id, ALSASeqQueueTempo **queue_tempo,
+                                GError **error);
+
 G_END_DECLS
 
 #endif
index 01e4ce42d34f2b52d698c9a50b18fad455e8f782..64f30043a579e534f5af26ae3346b7566b6f2b06 100644 (file)
@@ -31,6 +31,8 @@ methods = (
     'update_queue',
     'get_queue_usage',
     'set_queue_usage',
+    'set_queue_tempo',
+    'get_queue_tempo',
 )
 signals = ()