mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-03 09:01:52 -05:00
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>
This commit is contained in:
parent
2fca03e792
commit
94a5ddff9d
1 changed files with 20 additions and 32 deletions
|
|
@ -4308,36 +4308,6 @@ int snd_seq_drain_output(snd_seq_t *seq)
|
||||||
return 0;
|
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
|
* \brief extract the first event in output buffer
|
||||||
* \param seq sequencer handle
|
* \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)
|
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)
|
if (!seq->midi_version)
|
||||||
return -EBADFD;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue