From: Takashi Sakamoto Date: Mon, 9 Dec 2019 13:56:39 +0000 (+0900) Subject: seq: remove_filter; add constructor methods X-Git-Tag: v0.1.0~211 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=50dea0bdde7d3eec439653c29fdf4f9a88ebe10c;p=alsa-gobject.git seq: remove_filter; add constructor methods Signed-off-by: Takashi Sakamoto --- diff --git a/src/seq/alsaseq.map b/src/seq/alsaseq.map index 77bc253..c1e6cc2 100644 --- a/src/seq/alsaseq.map +++ b/src/seq/alsaseq.map @@ -161,6 +161,13 @@ ALSA_GOBJECT_0_0_0 { "alsaseq_queue_timer_alsa_new"; "alsaseq_remove_filter_get_type"; + "alsaseq_remove_filter_new_with_dest_addr"; + "alsaseq_remove_filter_new_with_note_channel"; + "alsaseq_remove_filter_new_with_event_type"; + "alsaseq_remove_filter_new_with_note"; + "alsaseq_remove_filter_new_with_tag"; + "alsaseq_remove_filter_new_with_tick_time"; + "alsaseq_remove_filter_new_with_real_time"; local: *; }; diff --git a/src/seq/remove-filter.c b/src/seq/remove-filter.c index 6182410..ecb8d7c 100644 --- a/src/seq/remove-filter.c +++ b/src/seq/remove-filter.c @@ -1,5 +1,8 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "remove-filter.h" +#include "privates.h" + +#include ALSASeqRemoveFilter *seq_remove_filter_copy(const ALSASeqRemoveFilter *self) { @@ -7,3 +10,220 @@ ALSASeqRemoveFilter *seq_remove_filter_copy(const ALSASeqRemoveFilter *self) } G_DEFINE_BOXED_TYPE(ALSASeqRemoveFilter, alsaseq_remove_filter, seq_remove_filter_copy, g_free) + +/** + * alsaseq_remove_filter_new_with_dest_addr: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @dest: The address of destination. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events towards the destination. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_dest_addr( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + ALSASeqAddr *dest, GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_DEST; + filter.queue = queue_id; + filter.dest = *dest; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_note_channel: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @channel: The channel for note event. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events with note type towards the channel. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_note_channel( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + guint8 channel, GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_DEST_CHANNEL; + filter.queue = queue_id; + filter.channel = channel; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_event_type: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @ev_type: The type of event. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events with the type. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_event_type( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + ALSASeqEventType ev_type, GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_EVENT_TYPE; + filter.queue = queue_id; + filter.type = ev_type; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_note: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events for note, except for ALSASEQ_EVENT_TYPE_NOTEOFF. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_note( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_IGNORE_OFF; + filter.queue = queue_id; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_tag: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @tag: The tag of event to remove. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events with the tag. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_tag( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint8 tag, GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_TAG_MATCH; + filter.queue = queue_id; + filter.tag = tag; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_tick_time: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @tick_time: The count of tick. + * @after: Remove events after the tick time if true, else remove events before + * the tick time. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events before/after the tick time. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_tick_time( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint32 tick_time, gboolean after, + GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout | SNDRV_SEQ_REMOVE_TIME_TICK; + if (after) + filter.remove_mode |= SNDRV_SEQ_REMOVE_TIME_BEFORE; + else + filter.remove_mode |= SNDRV_SEQ_REMOVE_TIME_AFTER; + filter.queue = queue_id; + filter.time.tick = tick_time; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} + +/** + * alsaseq_remove_filter_new_with_real_time: + * @inout: The direction of queue; ALSASEQ_REMOVE_FILTER_FLAG_INPUT or + * ALSASEQ_REMOVE_FILTER_FLAG_OUTPUT. + * @queue_id: The numerical ID of queue. + * @tv_sec: The second part of time. + * @tv_nsec: The nanosecond part of time. + * @after: Remove events after the real time if true, else remove events before + * the real time. + * @error: A #GError. + * + * Allocate and return a memory object of ALSASeqRemoveFilter to remove queued + * events before/after the real time. + */ +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_real_time( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint32 tv_sec, guint32 tv_nsec, gboolean after, + GError **error) +{ + struct snd_seq_remove_events filter; + + if (inout & ~(SNDRV_SEQ_REMOVE_INPUT | SNDRV_SEQ_REMOVE_OUTPUT)) { + generate_error(error, EINVAL); + return NULL; + } + + filter.remove_mode = inout; + if (after) + filter.remove_mode |= SNDRV_SEQ_REMOVE_TIME_AFTER; + else + filter.remove_mode |= SNDRV_SEQ_REMOVE_TIME_BEFORE; + filter.queue = queue_id; + filter.time.time.tv_sec = tv_sec; + filter.time.time.tv_nsec = tv_nsec; + + return g_boxed_copy(ALSASEQ_TYPE_REMOVE_FILTER, &filter); +} diff --git a/src/seq/remove-filter.h b/src/seq/remove-filter.h index 6bf9a6e..631c21f 100644 --- a/src/seq/remove-filter.h +++ b/src/seq/remove-filter.h @@ -5,6 +5,9 @@ #include #include +#include +#include + #include G_BEGIN_DECLS @@ -15,6 +18,36 @@ typedef struct snd_seq_remove_events ALSASeqRemoveFilter; GType alsaseq_remove_filter_get_type() G_GNUC_CONST; +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_dest_addr( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + ALSASeqAddr *dest, GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_note_channel( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + guint8 channel, GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_event_type( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + ALSASeqEventType ev_type, GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_note( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_tag( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint8 tag, GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_tick_time( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint32 tick_time, gboolean after, + GError **error); + +ALSASeqRemoveFilter *alsaseq_remove_filter_new_with_real_time( + ALSASeqRemoveFilterFlag inout, guint8 queue_id, + gint32 tv_sec, guint32 tv_nsec, gboolean after, + GError **error); + G_END_DECLS #endif