From 55d19e6bdfdfe67ebf0246a697d7358c920af54c Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Wed, 1 Apr 2020 18:13:28 +0900 Subject: [PATCH] seq: tstamp: add accessor methods Signed-off-by: Takashi Sakamoto --- src/seq/alsaseq.map | 4 ++++ src/seq/tstamp.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ src/seq/tstamp.h | 6 +++++ 3 files changed, 65 insertions(+) diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index b10a425..80fd9d8 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -54,6 +54,10 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_client_pool_get_type"; "alsaseq_tstamp_get_type"; + "alsaseq_tstamp_get_tick_time"; + "alsaseq_tstamp_set_tick_time"; + "alsaseq_tstamp_get_real_time"; + "alsaseq_tstamp_set_real_time"; local: *; }; diff --git a/src/seq/tstamp.c b/src/seq/tstamp.c index bf0d1f6..5c9077c 100644 --- a/src/seq/tstamp.c +++ b/src/seq/tstamp.c @@ -7,3 +7,58 @@ ALSASeqTstamp *seq_tstamp_copy(const ALSASeqTstamp *self) } G_DEFINE_BOXED_TYPE(ALSASeqTstamp, alsaseq_tstamp, seq_tstamp_copy, g_free) + +/** + * alsaseq_tstamp_get_tick_time: + * @self: A #ALSASeqTstamp. + * @tick_time: (out): The number of MIDI ticks. + * + * Get time as MIDI ticks. + */ +void alsaseq_tstamp_get_tick_time(ALSASeqTstamp *self, guint32 *tick_time) +{ + *tick_time = self->tick; +} + +/** + * alsaseq_tstamp_set_tick_time: + * @self: A #ALSASeqTstamp. + * @tick_time: The number of MIDI ticks. + * + * Set time as MIDI ticks. + */ +void alsaseq_tstamp_set_tick_time(ALSASeqTstamp *self, const guint32 tick_time) +{ + self->tick = tick_time; +} + +/** + * alsaseq_tstamp_get_real_time: + * @self: A #ALSASeqTstamp. + * + * Refer to the time as wall-clock time. + * + * Returns: (array fixed-size=2)(transfer none): The array with two elements + * for sec part and nsec part of real time. + */ +const guint32 *alsaseq_tstamp_get_real_time(ALSASeqTstamp *self) +{ + // MEMO: I wish 32-bit storage size is aligned to 32 bit offset in all of + // supported ABIs. + return (guint32 *)&self->time; +} + + +/** + * alsaseq_tstamp_set_real_time: + * @self: A #ALSASeqTstamp. + * @tstamp: (array fixed-size=2)(transfer none): The array with two elements for + * sec part and nsec part of real time. + * + * Copy the time as wall-clock time. + */ +void alsaseq_tstamp_set_real_time(ALSASeqTstamp *self, const guint32 tstamp[2]) +{ + self->time.tv_sec = tstamp[0]; + self->time.tv_nsec = tstamp[1]; +} diff --git a/src/seq/tstamp.h b/src/seq/tstamp.h index 191ffd7..30e10e4 100644 --- a/src/seq/tstamp.h +++ b/src/seq/tstamp.h @@ -15,6 +15,12 @@ typedef union snd_seq_timestamp ALSASeqTstamp; GType alsaseq_tstamp_get_type() G_GNUC_CONST; +void alsaseq_tstamp_get_tick_time(ALSASeqTstamp *self, guint32 *tick_time); +void alsaseq_tstamp_set_tick_time(ALSASeqTstamp *self, const guint32 tick_time); + +const guint32 *alsaseq_tstamp_get_real_time(ALSASeqTstamp *self); +void alsaseq_tstamp_set_real_time(ALSASeqTstamp *self, const guint32 tstamp[2]); + G_END_DECLS #endif -- 2.47.3