From: Takashi Sakamoto Date: Mon, 8 Jun 2020 14:10:10 +0000 (+0900) Subject: seq: event_cntr: add accesor APIs for the time mode of event pointed by index X-Git-Tag: v0.1.0~129 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=8eebf63f7ee7b157636f45d18262cddb2a3789ea;p=alsa-gobject.git seq: event_cntr: add accesor APIs for the time mode of event pointed by index Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index a558b6e..e807cae 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -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: *; }; diff --git a/src/seq/event-cntr.c b/src/seq/event-cntr.c index 0599856..289859c 100644 --- a/src/seq/event-cntr.c +++ b/src/seq/event-cntr.c @@ -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; +} diff --git a/src/seq/event-cntr.h b/src/seq/event-cntr.h index 0616790..39aa2b5 100644 --- a/src/seq/event-cntr.h +++ b/src/seq/event-cntr.h @@ -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 diff --git a/tests/alsaseq-event-cntr b/tests/alsaseq-event-cntr index a852cdf..efba796 100644 --- a/tests/alsaseq-event-cntr +++ b/tests/alsaseq-event-cntr @@ -19,6 +19,8 @@ methods = ( 'set_event_type', 'get_tstamp_mode', 'set_tstamp_mode', + 'get_time_mode', + 'set_time_mode', ) signals = ()