浏览代码

[ALSA] seq_midi_event: prevent running status after system messages

Reset the event type after encoding a system message to prevent any
following data bytes from being interpreted as data for a running status
system message, which is not allowed in MIDI.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Clemens Ladisch 18 年之前
父节点
当前提交
0b664f7206
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      sound/core/seq/seq_midi_event.c

+ 2 - 0
sound/core/seq/seq_midi_event.c

@@ -283,6 +283,8 @@ int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c,
 		ev->flags |= SNDRV_SEQ_EVENT_LENGTH_FIXED;
 		ev->flags |= SNDRV_SEQ_EVENT_LENGTH_FIXED;
 		if (status_event[dev->type].encode) /* set data values */
 		if (status_event[dev->type].encode) /* set data values */
 			status_event[dev->type].encode(dev, ev);
 			status_event[dev->type].encode(dev, ev);
+		if (dev->type >= ST_SPECIAL)
+			dev->type = ST_INVALID;
 		rc = 1;
 		rc = 1;
 	} else 	if (dev->type == ST_SYSEX) {
 	} else 	if (dev->type == ST_SYSEX) {
 		if (c == MIDI_CMD_COMMON_SYSEX_END ||
 		if (c == MIDI_CMD_COMMON_SYSEX_END ||