- Backport upstream fixes for sequencer and mixer: 0006-seq-Fix-invalid-sanity-check-in-snd_seq_set_input_bu.patch 0007-mixer-simple-Support-dB-TLVs-for-CTL_SINGLE-controls.patch 0008-seq-Clear-UMP-event-flag-for-legacy-apps.patch 0009-seq-Simplify-snd_seq_extract_output.patch 0010-seq-Check-protocol-compatibility-with-the-current-ve.patch - Clean up spec file OBS-URL: https://build.opensuse.org/request/show/1124030 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=325
100 lines
2.9 KiB
Diff
100 lines
2.9 KiB
Diff
From 94a5ddff9d5d85104755ee17b301c289a060cebf Mon Sep 17 00:00:00 2001
|
|
From: Takashi Iwai <tiwai@suse.de>
|
|
Date: Mon, 6 Nov 2023 16:33:59 +0100
|
|
Subject: [PATCH] seq: Simplify snd_seq_extract_output()
|
|
|
|
Now that we never put UMP events on the output buffer in the legacy
|
|
mode, the check and skip of UMP events are no longer necessary.
|
|
It means that ump_allowed argument is meaningless in extract_output(),
|
|
too.
|
|
|
|
Let's drop the unnecessary check and move the code extract_output()
|
|
into snd_seq_extract_output() again, and call this directly from
|
|
snd_seq_ump_extract_output() for simplification.
|
|
|
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
---
|
|
src/seq/seq.c | 52 ++++++++++++++++++++-------------------------------
|
|
1 file changed, 20 insertions(+), 32 deletions(-)
|
|
|
|
diff --git a/src/seq/seq.c b/src/seq/seq.c
|
|
index 643cf159f3ef..5eac4848b9c7 100644
|
|
--- a/src/seq/seq.c
|
|
+++ b/src/seq/seq.c
|
|
@@ -4308,36 +4308,6 @@ int snd_seq_drain_output(snd_seq_t *seq)
|
|
return 0;
|
|
}
|
|
|
|
-static int extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res, int ump_allowed)
|
|
-{
|
|
- size_t len, olen;
|
|
- assert(seq);
|
|
- if (ev_res)
|
|
- *ev_res = NULL;
|
|
- repeat:
|
|
- if ((olen = seq->obufused) < sizeof(snd_seq_event_t))
|
|
- return -ENOENT;
|
|
- len = snd_seq_event_length((snd_seq_event_t *)seq->obuf);
|
|
- if (olen < len)
|
|
- return -ENOENT;
|
|
- /* skip invalid UMP events */
|
|
- if (snd_seq_ev_is_ump((snd_seq_event_t *)seq->obuf) && !ump_allowed) {
|
|
- seq->obufused -= len;
|
|
- memmove(seq->obuf, seq->obuf + len, seq->obufused);
|
|
- goto repeat;
|
|
- }
|
|
- if (ev_res) {
|
|
- /* extract the event */
|
|
- if (alloc_tmpbuf(seq, len) < 0)
|
|
- return -ENOMEM;
|
|
- memcpy(seq->tmpbuf, seq->obuf, len);
|
|
- *ev_res = (snd_seq_event_t *)seq->tmpbuf;
|
|
- }
|
|
- seq->obufused = olen - len;
|
|
- memmove(seq->obuf, seq->obuf + len, seq->obufused);
|
|
- return 0;
|
|
-}
|
|
-
|
|
/**
|
|
* \brief extract the first event in output buffer
|
|
* \param seq sequencer handle
|
|
@@ -4351,7 +4321,25 @@ static int extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res, int ump_allo
|
|
*/
|
|
int snd_seq_extract_output(snd_seq_t *seq, snd_seq_event_t **ev_res)
|
|
{
|
|
- return extract_output(seq, ev_res, 0);
|
|
+ size_t len, olen;
|
|
+ assert(seq);
|
|
+ if (ev_res)
|
|
+ *ev_res = NULL;
|
|
+ if ((olen = seq->obufused) < sizeof(snd_seq_event_t))
|
|
+ return -ENOENT;
|
|
+ len = snd_seq_event_length((snd_seq_event_t *)seq->obuf);
|
|
+ if (olen < len)
|
|
+ return -ENOENT;
|
|
+ if (ev_res) {
|
|
+ /* extract the event */
|
|
+ if (alloc_tmpbuf(seq, len) < 0)
|
|
+ return -ENOMEM;
|
|
+ memcpy(seq->tmpbuf, seq->obuf, len);
|
|
+ *ev_res = (snd_seq_event_t *)seq->tmpbuf;
|
|
+ }
|
|
+ seq->obufused = olen - len;
|
|
+ memmove(seq->obuf, seq->obuf + len, seq->obufused);
|
|
+ return 0;
|
|
}
|
|
|
|
/*----------------------------------------------------------------*/
|
|
@@ -4547,7 +4535,7 @@ int snd_seq_ump_extract_output(snd_seq_t *seq, snd_seq_ump_event_t **ev_res)
|
|
{
|
|
if (!seq->midi_version)
|
|
return -EBADFD;
|
|
- return extract_output(seq, (snd_seq_event_t **)ev_res, 1);
|
|
+ return snd_seq_extract_output(seq, (snd_seq_event_t **)ev_res);
|
|
}
|
|
|
|
/**
|
|
--
|
|
2.35.3
|
|
|