OBS User unknown 2007-08-15 18:20:22 +00:00 committed by Git OBS Bridge
parent c97a195225
commit d399150833
4 changed files with 225 additions and 54 deletions

View File

@ -1,20 +0,0 @@
--- src/pcm/pcm_hw.c
+++ src/pcm/pcm_hw.c
@@ -1015,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);
@@ -1027,6 +1025,8 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp,
snd_pcm_close(pcm);
return ret;
}
+
+ *pcmp = pcm;
return 0;
}

View File

@ -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 configure.in
+
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 @@ diff -r 9005d28a1f9e doc/doxygen.cfg
../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 @@ diff -r 9005d28a1f9e include/Makefile.am
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 @@ diff -r 9005d28a1f9e include/asoundlib-head.h
+#include <alsa/conf.h>
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 @@ diff -r 9005d28a1f9e include/asoundlib.h
-#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 @@ diff -r 9005d28a1f9e include/pcm.h
/** 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 @@ diff -r 9005d28a1f9e modules/mixer/simple/Makefile.am
+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.c
+}
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 @@ diff -r 9005d28a1f9e modules/mixer/simple/python/common.py
+ 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 @@ diff -r 9005d28a1f9e modules/mixer/simple/python/hda.py
+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 @@ diff -r 9005d28a1f9e modules/mixer/simple/python/main.py
+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 @@ diff -r 9005d28a1f9e src/conf/cards/Makefile.am
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/PMac.conf
}
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/PMacToonie.conf
}
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/cards/PS3.conf
+}
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 @@ diff -r 9005d28a1f9e src/conf/smixer.conf
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/control/namehint.c
}
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 <math.h>
#include "mixer_local.h"
@ -1813,7 +1821,7 @@ diff -r 9005d28a1f9e src/mixer/simple.c
* \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 @@ diff -r 9005d28a1f9e src/mixer/simple_abst.c
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/Makefile.am
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 @@ diff -r 9005d28a1f9e src/pcm/pcm.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_dmix.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_dmix_generic.c
+#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 @@ diff -r 9005d28a1f9e src/pcm/pcm_dmix_i386.c
} 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 @@ diff -r 9005d28a1f9e src/pcm/pcm_dmix_x86_64.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_hw.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_hw.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_local.h
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_mmap.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_mmap_emul.c
+#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 @@ diff -r 9005d28a1f9e src/pcm/pcm_softvol.c
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 @@ diff -r 9005d28a1f9e src/pcm/pcm_symbols.c
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 ||

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
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
-------------------------------------------------------------------
Mon Aug 6 16:13:08 CEST 2007 - schwab@suse.de

View File

@ -21,7 +21,7 @@ PreReq: %insserv_prereq %fillup_prereq
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 @@ Source30: all_notes_off
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 @@ Authors:
%prep
%setup -q -n alsa-lib-%{package_version}
%patch -p1
%patch1
%{?suse_update_config:%{suse_update_config -f .}}
%build
@ -257,6 +255,12 @@ exit 0
%{_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