]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
seq: event_cntr: add accesor APIs for the time mode of event pointed by index
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 8 Jun 2020 14:10:10 +0000 (23:10 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Tue, 9 Jun 2020 00:16:09 +0000 (09:16 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/seq/alsaseq.map
src/seq/event-cntr.c
src/seq/event-cntr.h
tests/alsaseq-event-cntr

index a558b6e6a88f71df18e37ec438dfe2546912ae79..e807cae6165346eb989e68cc726f3387a19ad354 100644 (file)
@@ -178,6 +178,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsaseq_event_cntr_set_event_type";
     "alsaseq_event_cntr_get_tstamp_mode";
     "alsaseq_event_cntr_set_tstamp_mode";
+    "alsaseq_event_cntr_get_time_mode";
+    "alsaseq_event_cntr_set_time_mode";
   local:
     *;
 };
index 0599856f2dad451a28f4e7adecf88d9ecdd31f95..289859caecf7331438dbe69aba3a30bb227d83d2 100644 (file)
@@ -326,3 +326,66 @@ void alsaseq_event_cntr_set_tstamp_mode(ALSASeqEventCntr *self, gsize index,
     ev->flags &= ~SNDRV_SEQ_TIME_STAMP_MASK;
     ev->flags |= (unsigned char)mode;
 }
+
+/**
+ * alsaseq_event_cntr_get_time_mode:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @mode: (out): The mode of time, one of #ALSASeqEventTimeMode.
+ * @error: A #GError.
+ *
+ * Get the mode of time for the event pointed by the index.
+ */
+void alsaseq_event_cntr_get_time_mode(ALSASeqEventCntr *self, gsize index,
+                                        ALSASeqEventTimeMode *mode,
+                                        GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    *mode = (ALSASeqEventTimeMode)(ev->flags & SNDRV_SEQ_TIME_MODE_MASK);
+}
+
+/**
+ * alsaseq_event_cntr_set_time_mode:
+ * @self: A #ALSASeqEventCntr.
+ * @index: The index of event to set.
+ * @mode: The mode of time, one of #ALSASeqEventTimeMode.
+ * @error: A #GError.
+ *
+ * Set the mode of time for the event pointed by the index.
+ */
+void alsaseq_event_cntr_set_time_mode(ALSASeqEventCntr *self, gsize index,
+                                        ALSASeqEventTimeMode mode,
+                                        GError **error)
+{
+    ALSASeqEventCntrPrivate *priv;
+    struct event_iterator iter;
+    struct snd_seq_event *ev;
+
+    g_return_if_fail(ALSASEQ_IS_EVENT_CNTR(self));
+    priv = alsaseq_event_cntr_get_instance_private(self);
+
+    event_iterator_init(&iter, priv->buf, priv->length, priv->allocated);
+
+    ev = event_iterator_find(&iter, index);
+    if (ev == NULL) {
+        generate_error(error, ENOENT);
+        return;
+    }
+
+    ev->flags &= ~SNDRV_SEQ_TIME_MODE_MASK;
+    ev->flags |= (unsigned char)mode;
+}
index 061679057ef1416c231d9ad207baab28406ed185..39aa2b5259c564afc0427b44a7a8fc557cf5725c 100644 (file)
@@ -66,6 +66,14 @@ void alsaseq_event_cntr_get_tstamp_mode(ALSASeqEventCntr *self, gsize index,
 void alsaseq_event_cntr_set_tstamp_mode(ALSASeqEventCntr *self, gsize index,
                                           ALSASeqEventTimestampMode mode,
                                           GError **error);
+
+void alsaseq_event_cntr_get_time_mode(ALSASeqEventCntr *self, gsize index,
+                                        ALSASeqEventTimeMode *mode,
+                                        GError **error);
+void alsaseq_event_cntr_set_time_mode(ALSASeqEventCntr *self, gsize index,
+                                        ALSASeqEventTimeMode mode,
+                                        GError **error);
+
 G_END_DECLS
 
 #endif
index a852cdfbfc8cccfe1f077a36ae6f610dec70d661..efba7965bce56994859b66d3241ade740d5d7834 100644 (file)
@@ -19,6 +19,8 @@ methods = (
     'set_event_type',
     'get_tstamp_mode',
     'set_tstamp_mode',
+    'get_time_mode',
+    'set_time_mode',
 )
 signals = ()