From b06f2ac384e8a91671649e8b1040bd67e5cdd016 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 8 Jun 2020 23:10:10 +0900 Subject: [PATCH] seq: event_cntr: add accesor APIs for the tstamp of event pointed by index Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 2 ++ src/seq/event-cntr.c | 62 ++++++++++++++++++++++++++++++++++++++++ src/seq/event-cntr.h | 6 ++++ tests/alsaseq-event-cntr | 2 ++ 4 files changed, 72 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index e7f5b26..4f166f7 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -188,6 +188,8 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_event_cntr_set_tag"; "alsaseq_event_cntr_get_queue_id"; "alsaseq_event_cntr_set_queue_id"; + "alsaseq_event_cntr_get_tstamp"; + "alsaseq_event_cntr_set_tstamp"; local: *; }; diff --git a/src/seq/event-cntr.c b/src/seq/event-cntr.c index 4b104bc..e96369e 100644 --- a/src/seq/event-cntr.c +++ b/src/seq/event-cntr.c @@ -605,3 +605,65 @@ void alsaseq_event_cntr_set_queue_id(ALSASeqEventCntr *self, gsize index, ev->queue = queue_id; } + +/** + * alsaseq_event_cntr_get_tstamp: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to set. + * @tstamp: (out)(transfer none): The timestamp for the event. The content is + * affected by the mode of tstamping. + * @error: A #GError. + * + * Get the timestamp of event pointed by index. + */ +void alsaseq_event_cntr_get_tstamp(ALSASeqEventCntr *self, gsize index, + const ALSASeqTstamp **tstamp, 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; + } + + *tstamp = (const ALSASeqTstamp *)&ev->time; +} + +/** + * alsaseq_event_cntr_set_tstamp: + * @self: A #ALSASeqEventCntr. + * @index: The index of event to set. + * @tstamp: The timestamp for the event. The content is affected by the mode of + * tstamping. + * @error: A #GError. + * + * Set the timestamp for the event pointed by index. + */ +void alsaseq_event_cntr_set_tstamp(ALSASeqEventCntr *self, gsize index, + const ALSASeqTstamp *tstamp, 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->time = *tstamp; +} diff --git a/src/seq/event-cntr.h b/src/seq/event-cntr.h index 755e2e6..34916d4 100644 --- a/src/seq/event-cntr.h +++ b/src/seq/event-cntr.h @@ -6,6 +6,7 @@ #include #include +#include G_BEGIN_DECLS @@ -95,6 +96,11 @@ void alsaseq_event_cntr_get_queue_id(ALSASeqEventCntr *self, gsize index, void alsaseq_event_cntr_set_queue_id(ALSASeqEventCntr *self, gsize index, guint8 queue_id, GError **error); +void alsaseq_event_cntr_get_tstamp(ALSASeqEventCntr *self, gsize index, + const ALSASeqTstamp **tstamp, GError **error); +void alsaseq_event_cntr_set_tstamp(ALSASeqEventCntr *self, gsize index, + const ALSASeqTstamp *tstamp, GError **error); + G_END_DECLS #endif diff --git a/tests/alsaseq-event-cntr b/tests/alsaseq-event-cntr index 0b9b369..55ef029 100644 --- a/tests/alsaseq-event-cntr +++ b/tests/alsaseq-event-cntr @@ -28,6 +28,8 @@ methods = ( 'set_tag', 'get_queue_id', 'set_queue_id', + 'get_tstamp', + 'set_tstamp', ) signals = () -- 2.47.3