Hello community,
here is the log from the commit of package alsa
checked in at Wed Aug 15 20:20:22 CEST 2007.
--------
--- alsa/alsa.changes 2007-08-06 16:13:19.000000000 +0200
+++ /mounts/work_src_done/STABLE/alsa/alsa.changes 2007-08-14 16:27:09.000000000 +0200
@@ -1,0 +2,9 @@
+Tue Aug 14 16:26:18 CEST 2007 - tiwai@suse.de
+
+- Add missing pcm_empty.c in doxygen configuration
+- seq_midi_event: fix parsing of F9/FD bytes
+- seq_midi_event: fix parsing of missing data bytes
+- seq_midi_event: prevent running status after system messages
+- seq_midi_event: fix encoding of data bytes after end of sysex
+
+-------------------------------------------------------------------
Old:
----
alsa-double-free.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ alsa.spec ++++++
--- /var/tmp/diff_new_pack.X18256/_old 2007-08-15 20:19:20.000000000 +0200
+++ /var/tmp/diff_new_pack.X18256/_new 2007-08-15 20:19:20.000000000 +0200
@@ -21,7 +21,7 @@
Autoreqprov: on
Summary: Advanced Linux Sound Architecture
Version: 1.0.14
-Release: 19
+Release: 22
Source: ftp://ftp.alsa-project.org/pub/lib/alsa-lib-%{package_version}.tar.bz2
Source8: 40-alsa.rules
Source11: alsasound
@@ -36,7 +36,6 @@
Source31: all_notes_off.bin
Source32: all_notes_off.mid
Patch: alsa-lib-hg-fixes.diff
-Patch1: alsa-double-free.diff
URL: http://www.alsa-project.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -115,7 +114,6 @@
%prep
%setup -q -n alsa-lib-%{package_version}
%patch -p1
-%patch1
%{?suse_update_config:%{suse_update_config -f .}}
%build
@@ -257,6 +255,12 @@
%{_datadir}/alsa
%changelog
+* Tue Aug 14 2007 - tiwai@suse.de
+- Add missing pcm_empty.c in doxygen configuration
+- seq_midi_event: fix parsing of F9/FD bytes
+- seq_midi_event: fix parsing of missing data bytes
+- seq_midi_event: prevent running status after system messages
+- seq_midi_event: fix encoding of data bytes after end of sysex
* Mon Aug 06 2007 - schwab@suse.de
- Fix double free.
* Thu Aug 02 2007 - tiwai@suse.de
++++++ alsa-lib-hg-fixes.diff ++++++
--- /var/tmp/diff_new_pack.X18256/_old 2007-08-15 20:19:20.000000000 +0200
+++ /var/tmp/diff_new_pack.X18256/_new 2007-08-15 20:19:20.000000000 +0200
@@ -1,6 +1,6 @@
diff -r 9005d28a1f9e configure.in
--- a/configure.in Mon Jun 11 10:52:17 2007 +0200
-+++ b/configure.in Thu Jul 19 14:55:51 2007 +0200
++++ b/configure.in Tue Aug 14 16:14:08 2007 +0200
@@ -336,6 +336,23 @@ AC_ARG_ENABLE(alisp,
AC_ARG_ENABLE(alisp,
AS_HELP_STRING([--disable-alisp], [disable the alisp component]),
@@ -93,7 +93,7 @@
+
diff -r 9005d28a1f9e doc/doxygen.cfg
--- a/doc/doxygen.cfg Mon Jun 11 10:52:17 2007 +0200
-+++ b/doc/doxygen.cfg Thu Jul 19 14:55:51 2007 +0200
++++ b/doc/doxygen.cfg Tue Aug 14 16:14:08 2007 +0200
@@ -45,6 +45,7 @@ INPUT = index.doxygen \
../src/pcm/pcm_mmap.c \
../src/pcm/pcm_plugin.c \
@@ -102,9 +102,17 @@
../src/pcm/pcm_shm.c \
../src/pcm/pcm_null.c \
../src/pcm/pcm_copy.c \
+@@ -70,6 +71,7 @@ INPUT = index.doxygen \
+ ../src/pcm/pcm_softvol.c \
+ ../src/pcm/pcm_extplug.c \
+ ../src/pcm/pcm_ioplug.c \
++ ../src/pcm/pcm_empty.c \
+ ../src/pcm/pcm_misc.c \
+ ../src/pcm/pcm_simple.c \
+ ../src/rawmidi \
diff -r 9005d28a1f9e include/Makefile.am
--- a/include/Makefile.am Mon Jun 11 10:52:17 2007 +0200
-+++ b/include/Makefile.am Thu Jul 19 14:55:51 2007 +0200
++++ b/include/Makefile.am Tue Aug 14 16:14:08 2007 +0200
@@ -5,16 +5,59 @@ alsaincludedir = ${includedir}/alsa
alsainclude_HEADERS = asoundlib.h asoundef.h \
@@ -175,7 +183,7 @@
ln -s $(top_srcdir)/include alsa
diff -r 9005d28a1f9e include/asoundlib-head.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/include/asoundlib-head.h Thu Jul 19 14:55:51 2007 +0200
++++ b/include/asoundlib-head.h Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,48 @@
+/**
+ * \file include/asoundlib.h
@@ -227,7 +235,7 @@
+#include
diff -r 9005d28a1f9e include/asoundlib-tail.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/include/asoundlib-tail.h Thu Jul 19 14:55:51 2007 +0200
++++ b/include/asoundlib-tail.h Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,2 @@
+
+#endif /* __ASOUNDLIB_H */
@@ -299,7 +307,7 @@
-#endif /* __ASOUNDLIB_H */
diff -r 9005d28a1f9e include/pcm.h
--- a/include/pcm.h Mon Jun 11 10:52:17 2007 +0200
-+++ b/include/pcm.h Thu Jul 19 14:55:51 2007 +0200
++++ b/include/pcm.h Tue Aug 14 16:14:08 2007 +0200
@@ -362,7 +362,9 @@ enum _snd_pcm_type {
SND_PCM_TYPE_IOPLUG,
/** External filter plugin */
@@ -313,7 +321,7 @@
/** PCM type */
diff -r 9005d28a1f9e modules/mixer/simple/Makefile.am
--- a/modules/mixer/simple/Makefile.am Mon Jun 11 10:52:17 2007 +0200
-+++ b/modules/mixer/simple/Makefile.am Thu Jul 19 14:55:51 2007 +0200
++++ b/modules/mixer/simple/Makefile.am Tue Aug 14 16:14:08 2007 +0200
@@ -1,4 +1,5 @@ pkglibdir = @ALSA_PLUGIN_DIR@/smixer
pkglibdir = @ALSA_PLUGIN_DIR@/smixer
+pythonlibs = @PYTHON_LIBS@
@@ -343,7 +351,7 @@
+endif
diff -r 9005d28a1f9e modules/mixer/simple/python.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/modules/mixer/simple/python.c Thu Jul 19 14:55:51 2007 +0200
++++ b/modules/mixer/simple/python.c Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,1002 @@
+/*
+ * Mixer Interface - python binding simple abstact module
@@ -1349,7 +1357,7 @@
+}
diff -r 9005d28a1f9e modules/mixer/simple/python/common.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/modules/mixer/simple/python/common.py Thu Jul 19 14:55:51 2007 +0200
++++ b/modules/mixer/simple/python/common.py Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,228 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
@@ -1581,7 +1589,7 @@
+ mixer.register()
diff -r 9005d28a1f9e modules/mixer/simple/python/hda.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/modules/mixer/simple/python/hda.py Thu Jul 19 14:55:51 2007 +0200
++++ b/modules/mixer/simple/python/hda.py Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
@@ -1627,7 +1635,7 @@
+init()
diff -r 9005d28a1f9e modules/mixer/simple/python/main.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/modules/mixer/simple/python/main.py Thu Jul 19 14:55:51 2007 +0200
++++ b/modules/mixer/simple/python/main.py Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
@@ -1655,7 +1663,7 @@
+alsacode(module)
diff -r 9005d28a1f9e src/conf/cards/Makefile.am
--- a/src/conf/cards/Makefile.am Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/conf/cards/Makefile.am Thu Jul 19 14:55:51 2007 +0200
++++ b/src/conf/cards/Makefile.am Tue Aug 14 16:14:08 2007 +0200
@@ -35,6 +35,7 @@ cfg_files = aliases.conf \
PC-Speaker.conf \
PMac.conf \
@@ -1666,7 +1674,7 @@
SI7018.conf \
diff -r 9005d28a1f9e src/conf/cards/PMac.conf
--- a/src/conf/cards/PMac.conf Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/conf/cards/PMac.conf Thu Jul 19 14:55:51 2007 +0200
++++ b/src/conf/cards/PMac.conf Tue Aug 14 16:14:08 2007 +0200
@@ -24,14 +24,14 @@ PMac.pcm.default {
type plug
slave.pcm {
@@ -1686,7 +1694,7 @@
}
diff -r 9005d28a1f9e src/conf/cards/PMacToonie.conf
--- a/src/conf/cards/PMacToonie.conf Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/conf/cards/PMacToonie.conf Thu Jul 19 14:55:51 2007 +0200
++++ b/src/conf/cards/PMacToonie.conf Tue Aug 14 16:14:08 2007 +0200
@@ -33,7 +33,7 @@ PMacToonie.pcm.default {
type softvol
slave.pcm {
@@ -1707,7 +1715,7 @@
}
diff -r 9005d28a1f9e src/conf/cards/PS3.conf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/conf/cards/PS3.conf Thu Jul 19 14:55:51 2007 +0200
++++ b/src/conf/cards/PS3.conf Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,46 @@
+#
+# Configuration for PS3
@@ -1757,7 +1765,7 @@
+}
diff -r 9005d28a1f9e src/conf/smixer.conf
--- a/src/conf/smixer.conf Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/conf/smixer.conf Thu Jul 19 14:55:51 2007 +0200
++++ b/src/conf/smixer.conf Tue Aug 14 16:14:08 2007 +0200
@@ -1,3 +1,4 @@ usb {
+_full smixer-python.so
usb {
@@ -1765,7 +1773,7 @@
lib smixer-usb.so
diff -r 9005d28a1f9e src/control/namehint.c
--- a/src/control/namehint.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/control/namehint.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/control/namehint.c Tue Aug 14 16:14:08 2007 +0200
@@ -90,6 +90,7 @@ static int get_dev_name1(struct hint_lis
if (list->device < 0)
return 0;
@@ -1802,7 +1810,7 @@
}
diff -r 9005d28a1f9e src/mixer/simple.c
--- a/src/mixer/simple.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/mixer/simple.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/mixer/simple.c Tue Aug 14 16:14:08 2007 +0200
@@ -38,7 +38,6 @@
#include
#include "mixer_local.h"
@@ -1813,7 +1821,7 @@
* \brief Register mixer simple element class
diff -r 9005d28a1f9e src/mixer/simple_abst.c
--- a/src/mixer/simple_abst.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/mixer/simple_abst.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/mixer/simple_abst.c Tue Aug 14 16:14:08 2007 +0200
@@ -55,6 +55,9 @@ typedef struct _class_priv {
} class_priv_t;
@@ -2024,7 +2032,7 @@
if (top)
diff -r 9005d28a1f9e src/pcm/Makefile.am
--- a/src/pcm/Makefile.am Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/Makefile.am Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/Makefile.am Tue Aug 14 16:14:08 2007 +0200
@@ -99,6 +99,9 @@ if BUILD_PCM_PLUGIN_IOPLUG
if BUILD_PCM_PLUGIN_IOPLUG
libpcm_la_SOURCES += pcm_ioplug.c
@@ -2037,7 +2045,7 @@
diff -r 9005d28a1f9e src/pcm/pcm.c
--- a/src/pcm/pcm.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm.c Tue Aug 14 16:14:08 2007 +0200
@@ -1983,7 +1983,8 @@ static char *build_in_pcms[] = {
static char *build_in_pcms[] = {
"adpcm", "alaw", "copy", "dmix", "file", "hooks", "hw", "ladspa", "lfloat",
@@ -2050,7 +2058,7 @@
static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name,
diff -r 9005d28a1f9e src/pcm/pcm_dmix.c
--- a/src/pcm/pcm_dmix.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_dmix.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_dmix.c Tue Aug 14 16:14:08 2007 +0200
@@ -139,12 +139,14 @@ static void dmix_server_free(snd_pcm_dir
* FIXME: optimize it for different architectures
*/
@@ -2069,7 +2077,7 @@
static void mix_areas(snd_pcm_direct_t *dmix,
diff -r 9005d28a1f9e src/pcm/pcm_dmix_generic.c
--- a/src/pcm/pcm_dmix_generic.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_dmix_generic.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_dmix_generic.c Tue Aug 14 16:14:08 2007 +0200
@@ -119,14 +119,14 @@ static void mix_select_callbacks(snd_pcm
#else
@@ -2155,7 +2163,7 @@
+#endif
diff -r 9005d28a1f9e src/pcm/pcm_dmix_i386.c
--- a/src/pcm/pcm_dmix_i386.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_dmix_i386.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_dmix_i386.c Tue Aug 14 16:14:08 2007 +0200
@@ -30,33 +30,45 @@
#undef MIX_AREAS3_CMOV
#undef LOCK_PREFIX
@@ -2224,7 +2232,7 @@
} else {
diff -r 9005d28a1f9e src/pcm/pcm_dmix_x86_64.c
--- a/src/pcm/pcm_dmix_x86_64.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_dmix_x86_64.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_dmix_x86_64.c Tue Aug 14 16:14:08 2007 +0200
@@ -22,26 +22,37 @@
#undef MIX_AREAS3
#undef LOCK_PREFIX
@@ -2280,7 +2288,7 @@
dmix->u.dmix.mix_areas1 = smp > 1 ? mix_areas1_smp : mix_areas1;
diff -r 9005d28a1f9e src/pcm/pcm_hw.c
--- a/src/pcm/pcm_hw.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_hw.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_hw.c Tue Aug 14 16:14:08 2007 +0200
@@ -88,14 +88,11 @@ typedef struct {
int version;
int fd;
@@ -2562,6 +2570,24 @@
hw->sync_ptr_ioctl = sync_ptr_ioctl;
/* no restriction */
hw->format = SND_PCM_FORMAT_UNKNOWN;
+@@ -1159,8 +1015,6 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp,
+ pcm->poll_fd = fd;
+ pcm->poll_events = info.stream == SND_PCM_STREAM_PLAYBACK ? POLLOUT : POLLIN;
+
+- *pcmp = pcm;
+-
+ ret = snd_pcm_hw_mmap_status(pcm);
+ if (ret < 0) {
+ snd_pcm_close(pcm);
+@@ -1171,6 +1025,8 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp,
+ snd_pcm_close(pcm);
+ return ret;
+ }
++
++ *pcmp = pcm;
+ return 0;
+ }
+
@@ -1183,7 +1039,7 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp,
* \param subdevice Number of subdevice
* \param stream PCM Stream
@@ -2632,7 +2658,7 @@
if (nonblock && ! (mode & SND_PCM_NONBLOCK)) {
diff -r 9005d28a1f9e src/pcm/pcm_local.h
--- a/src/pcm/pcm_local.h Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_local.h Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_local.h Tue Aug 14 16:14:08 2007 +0200
@@ -266,8 +266,10 @@ snd_pcm_sframes_t snd_pcm_write_areas(sn
snd_pcm_sframes_t snd_pcm_write_areas(snd_pcm_t *pcm, const snd_pcm_channel_area_t *areas,
snd_pcm_uframes_t offset, snd_pcm_uframes_t size,
@@ -2648,7 +2674,7 @@
return pcm->ops->channel_info(pcm, info);
diff -r 9005d28a1f9e src/pcm/pcm_mmap.c
--- a/src/pcm/pcm_mmap.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_mmap.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_mmap.c Tue Aug 14 16:14:08 2007 +0200
@@ -531,7 +531,8 @@ int snd_pcm_munmap(snd_pcm_t *pcm)
return 0;
}
@@ -2702,7 +2728,7 @@
return xfer;
diff -r 9005d28a1f9e src/pcm/pcm_mmap_emul.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/pcm/pcm_mmap_emul.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_mmap_emul.c Tue Aug 14 16:14:08 2007 +0200
@@ -0,0 +1,485 @@
+/**
+ * \file pcm/pcm_mmap_emul.c
@@ -3191,7 +3217,7 @@
+#endif
diff -r 9005d28a1f9e src/pcm/pcm_softvol.c
--- a/src/pcm/pcm_softvol.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_softvol.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_softvol.c Tue Aug 14 16:14:08 2007 +0200
@@ -101,7 +101,7 @@ typedef union {
int i;
short s[2];
@@ -3212,7 +3238,7 @@
if (amp > (int)0x7fffffff)
diff -r 9005d28a1f9e src/pcm/pcm_symbols.c
--- a/src/pcm/pcm_symbols.c Mon Jun 11 10:52:17 2007 +0200
-+++ b/src/pcm/pcm_symbols.c Thu Jul 19 14:55:51 2007 +0200
++++ b/src/pcm/pcm_symbols.c Tue Aug 14 16:14:08 2007 +0200
@@ -49,6 +49,7 @@ extern const char *_snd_module_pcm_softv
extern const char *_snd_module_pcm_softvol;
extern const char *_snd_module_pcm_extplug;
@@ -3221,3 +3247,155 @@
static const char **snd_pcm_open_objects[] = {
&_snd_module_pcm_hw,
+diff -r 9005d28a1f9e src/seq/seq_midi_event.c
+--- a/src/seq/seq_midi_event.c Mon Jun 11 10:52:17 2007 +0200
++++ b/src/seq/seq_midi_event.c Tue Aug 14 16:14:08 2007 +0200
+@@ -45,10 +45,9 @@ struct snd_midi_event {
+ };
+
+
+-/* queue type */
+-/* from 0 to 7 are normal commands (note off, on, etc.) */
+-#define ST_NOTEOFF 0
+-#define ST_NOTEON 1
++/* event type, index into status_event[] */
++/* from 0 to 6 are normal commands (note off, on, etc.) for 0x8?-0xe? */
++#define ST_INVALID 7
+ #define ST_SPECIAL 8
+ #define ST_SYSEX ST_SPECIAL
+ /* from 8 to 15 are events for 0xf0-0xf7 */
+@@ -85,32 +84,33 @@ static struct status_event_list_t {
+ event_encode_t encode;
+ event_decode_t decode;
+ } status_event[] = {
+- /* 0x80 - 0xf0 */
+- {SND_SEQ_EVENT_NOTEOFF, 2, note_event, note_decode},
+- {SND_SEQ_EVENT_NOTEON, 2, note_event, note_decode},
+- {SND_SEQ_EVENT_KEYPRESS, 2, note_event, note_decode},
+- {SND_SEQ_EVENT_CONTROLLER, 2, two_param_ctrl_event, two_param_decode},
+- {SND_SEQ_EVENT_PGMCHANGE, 1, one_param_ctrl_event, one_param_decode},
+- {SND_SEQ_EVENT_CHANPRESS, 1, one_param_ctrl_event, one_param_decode},
+- {SND_SEQ_EVENT_PITCHBEND, 2, pitchbend_ctrl_event, pitchbend_decode},
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xf0 */
++ /* 0x80 - 0xef */
++ {SND_SEQ_EVENT_NOTEOFF, 2, note_event, note_decode},
++ {SND_SEQ_EVENT_NOTEON, 2, note_event, note_decode},
++ {SND_SEQ_EVENT_KEYPRESS, 2, note_event, note_decode},
++ {SND_SEQ_EVENT_CONTROLLER, 2, two_param_ctrl_event, two_param_decode},
++ {SND_SEQ_EVENT_PGMCHANGE, 1, one_param_ctrl_event, one_param_decode},
++ {SND_SEQ_EVENT_CHANPRESS, 1, one_param_ctrl_event, one_param_decode},
++ {SND_SEQ_EVENT_PITCHBEND, 2, pitchbend_ctrl_event, pitchbend_decode},
++ /* invalid */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL},
+ /* 0xf0 - 0xff */
+- {SND_SEQ_EVENT_SYSEX, 1, NULL, NULL}, /* sysex: 0xf0 */
+- {SND_SEQ_EVENT_QFRAME, 1, one_param_event, one_param_decode}, /* 0xf1 */
+- {SND_SEQ_EVENT_SONGPOS, 2, songpos_event, songpos_decode}, /* 0xf2 */
+- {SND_SEQ_EVENT_SONGSEL, 1, one_param_event, one_param_decode}, /* 0xf3 */
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xf4 */
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xf5 */
+- {SND_SEQ_EVENT_TUNE_REQUEST, 0, NULL, NULL}, /* 0xf6 */
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xf7 */
+- {SND_SEQ_EVENT_CLOCK, 0, NULL, NULL}, /* 0xf8 */
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xf9 */
+- {SND_SEQ_EVENT_START, 0, NULL, NULL}, /* 0xfa */
+- {SND_SEQ_EVENT_CONTINUE, 0, NULL, NULL}, /* 0xfb */
+- {SND_SEQ_EVENT_STOP, 0, NULL, NULL}, /* 0xfc */
+- {SND_SEQ_EVENT_NONE, 0, NULL, NULL}, /* 0xfd */
+- {SND_SEQ_EVENT_SENSING, 0, NULL, NULL}, /* 0xfe */
+- {SND_SEQ_EVENT_RESET, 0, NULL, NULL}, /* 0xff */
++ {SND_SEQ_EVENT_SYSEX, 1, NULL, NULL}, /* sysex: 0xf0 */
++ {SND_SEQ_EVENT_QFRAME, 1, one_param_event, one_param_decode}, /* 0xf1 */
++ {SND_SEQ_EVENT_SONGPOS, 2, songpos_event, songpos_decode}, /* 0xf2 */
++ {SND_SEQ_EVENT_SONGSEL, 1, one_param_event, one_param_decode}, /* 0xf3 */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL}, /* 0xf4 */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL}, /* 0xf5 */
++ {SND_SEQ_EVENT_TUNE_REQUEST, 0, NULL, NULL}, /* 0xf6 */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL}, /* 0xf7 */
++ {SND_SEQ_EVENT_CLOCK, 0, NULL, NULL}, /* 0xf8 */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL}, /* 0xf9 */
++ {SND_SEQ_EVENT_START, 0, NULL, NULL}, /* 0xfa */
++ {SND_SEQ_EVENT_CONTINUE, 0, NULL, NULL}, /* 0xfb */
++ {SND_SEQ_EVENT_STOP, 0, NULL, NULL}, /* 0xfc */
++ {SND_SEQ_EVENT_NONE, -1, NULL, NULL}, /* 0xfd */
++ {SND_SEQ_EVENT_SENSING, 0, NULL, NULL}, /* 0xfe */
++ {SND_SEQ_EVENT_RESET, 0, NULL, NULL}, /* 0xff */
+ };
+
+ static int extra_decode_ctrl14(snd_midi_event_t *dev, unsigned char *buf, int len, const snd_seq_event_t *ev);
+@@ -153,6 +153,7 @@ int snd_midi_event_new(size_t bufsize, s
+ }
+ dev->bufsize = bufsize;
+ dev->lastcmd = 0xff;
++ dev->type = ST_INVALID;
+ *rdev = dev;
+ return 0;
+ }
+@@ -191,7 +192,7 @@ inline static void reset_encode(snd_midi
+ {
+ dev->read = 0;
+ dev->qlen = 0;
+- dev->type = 0;
++ dev->type = ST_INVALID;
+ }
+
+ /**
+@@ -307,28 +308,30 @@ int snd_midi_event_encode_byte(snd_midi_
+ ev->type = status_event[ST_SPECIAL + c - 0xf0].event;
+ ev->flags &= ~SND_SEQ_EVENT_LENGTH_MASK;
+ ev->flags |= SND_SEQ_EVENT_LENGTH_FIXED;
+- return 1;
+- }
+-
+- if (dev->qlen > 0) {
+- /* rest of command */
+- dev->buf[dev->read++] = c;
+- if (dev->type != ST_SYSEX)
+- dev->qlen--;
++ return ev->type != SND_SEQ_EVENT_NONE;
++ }
++
++ if ((c & 0x80) &&
++ (c != MIDI_CMD_COMMON_SYSEX_END || dev->type != ST_SYSEX)) {
++ /* new command */
++ dev->buf[0] = c;
++ if ((c & 0xf0) == 0xf0) /* system message */
++ dev->type = (c & 0x0f) + ST_SPECIAL;
++ else
++ dev->type = (c >> 4) & 0x07;
++ dev->read = 1;
++ dev->qlen = status_event[dev->type].qlen;
+ } else {
+- /* new command */
+- dev->read = 1;
+- if (c & 0x80) {
+- dev->buf[0] = c;
+- if ((c & 0xf0) == 0xf0) /* special events */
+- dev->type = (c & 0x0f) + ST_SPECIAL;
+- else
+- dev->type = (c >> 4) & 0x07;
+- dev->qlen = status_event[dev->type].qlen;
++ if (dev->qlen > 0) {
++ /* rest of command */
++ dev->buf[dev->read++] = c;
++ if (dev->type != ST_SYSEX)
++ dev->qlen--;
+ } else {
+- /* process this byte as argument */
+- dev->buf[dev->read++] = c;
++ /* running status */
++ dev->buf[1] = c;
+ dev->qlen = status_event[dev->type].qlen - 1;
++ dev->read = 2;
+ }
+ }
+ if (dev->qlen == 0) {
+@@ -337,6 +340,8 @@ int snd_midi_event_encode_byte(snd_midi_
+ ev->flags |= SND_SEQ_EVENT_LENGTH_FIXED;
+ if (status_event[dev->type].encode) /* set data values */
+ status_event[dev->type].encode(dev, ev);
++ if (dev->type >= ST_SPECIAL)
++ dev->type = ST_INVALID;
+ rc = 1;
+ } else if (dev->type == ST_SYSEX) {
+ if (c == MIDI_CMD_COMMON_SYSEX_END ||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org