diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 13:13:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 13:13:38 -0400 |
commit | fc8a327db6c46de783b1a4276d846841b9abc24c (patch) | |
tree | bee512c142cccea93511debd98ef954581693727 /sound/core/oss | |
parent | 92d15c2ccbb3e31a3fc71ad28fdb55e1319383c0 (diff) | |
parent | 24837e6f249a2c83667552e6871c1543b4a6b934 (diff) |
Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
* 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa: (264 commits)
[ALSA] version 1.0.15
[ALSA] Fix thinko in cs4231 mce down check
[ALSA] sun-cs4231: improved waiting after MCE down
[ALSA] sun-cs4231: use cs4231-regs.h
[ALSA] This simplifies and fixes waiting loops of the mce_down()
[ALSA] This patch adds support for a wavetable chip on
[ALSA] This patch removes open_mutex from the ad1848-lib as
[ALSA] fix bootup crash in snd_gus_interrupt()
[ALSA] hda-codec - Fix SKU ID function for realtek codecs
[ALSA] Support ASUS P701 eeepc [0x1043 0x82a1] support
[ALSA] hda-codec - Add array terminator for dmic in STAC codec
[ALSA] hdsp - Fix zero division
[ALSA] usb-audio - Fix double comment
[ALSA] hda-codec - Fix STAC922x volume knob control
[ALSA] Changed Jaroslav Kysela's e-mail from perex@suse.cz to perex@perex.cz
[ALSA] hda-codec - Fix for Fujitsu Lifebook C1410
[ALSA] mpu-401: remove MPU401_INFO_UART_ONLY flag
[ALSA] mpu-401: do not require an ACK byte for the ENTER_UART command
[ALSA] via82xx - Add DXS quirk for Shuttle AK31v2
[ALSA] hda-codec - Fix input_mux numbers for vaio stac92xx
...
Diffstat (limited to 'sound/core/oss')
-rw-r--r-- | sound/core/oss/Makefile | 7 | ||||
-rw-r--r-- | sound/core/oss/copy.c | 5 | ||||
-rw-r--r-- | sound/core/oss/io.c | 7 | ||||
-rw-r--r-- | sound/core/oss/linear.c | 91 | ||||
-rw-r--r-- | sound/core/oss/mixer_oss.c | 4 | ||||
-rw-r--r-- | sound/core/oss/mulaw.c | 90 | ||||
-rw-r--r-- | sound/core/oss/pcm_oss.c | 39 | ||||
-rw-r--r-- | sound/core/oss/pcm_plugin.c | 63 | ||||
-rw-r--r-- | sound/core/oss/pcm_plugin.h | 2 | ||||
-rw-r--r-- | sound/core/oss/plugin_ops.h | 370 | ||||
-rw-r--r-- | sound/core/oss/rate.c | 7 | ||||
-rw-r--r-- | sound/core/oss/route.c | 5 |
12 files changed, 176 insertions, 514 deletions
diff --git a/sound/core/oss/Makefile b/sound/core/oss/Makefile index e6d5a045ba27..10a79453245f 100644 --- a/sound/core/oss/Makefile +++ b/sound/core/oss/Makefile | |||
@@ -1,12 +1,13 @@ | |||
1 | # | 1 | # |
2 | # Makefile for ALSA | 2 | # Makefile for ALSA |
3 | # Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz> | 3 | # Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz> |
4 | # | 4 | # |
5 | 5 | ||
6 | snd-mixer-oss-objs := mixer_oss.o | 6 | snd-mixer-oss-objs := mixer_oss.o |
7 | 7 | ||
8 | snd-pcm-oss-objs := pcm_oss.o pcm_plugin.o \ | 8 | snd-pcm-oss-y := pcm_oss.o |
9 | io.o copy.o linear.o mulaw.o route.o rate.o | 9 | snd-pcm-oss-$(CONFIG_SND_PCM_OSS_PLUGINS) += pcm_plugin.o \ |
10 | io.o copy.o linear.o mulaw.o route.o rate.o | ||
10 | 11 | ||
11 | obj-$(CONFIG_SND_MIXER_OSS) += snd-mixer-oss.o | 12 | obj-$(CONFIG_SND_MIXER_OSS) += snd-mixer-oss.o |
12 | obj-$(CONFIG_SND_PCM_OSS) += snd-pcm-oss.o | 13 | obj-$(CONFIG_SND_PCM_OSS) += snd-pcm-oss.o |
diff --git a/sound/core/oss/copy.c b/sound/core/oss/copy.c index 6658facc5cda..d6a04c2d5a75 100644 --- a/sound/core/oss/copy.c +++ b/sound/core/oss/copy.c | |||
@@ -20,9 +20,6 @@ | |||
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <sound/driver.h> | 22 | #include <sound/driver.h> |
23 | |||
24 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
25 | |||
26 | #include <linux/time.h> | 23 | #include <linux/time.h> |
27 | #include <sound/core.h> | 24 | #include <sound/core.h> |
28 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
@@ -88,5 +85,3 @@ int snd_pcm_plugin_build_copy(struct snd_pcm_substream *plug, | |||
88 | *r_plugin = plugin; | 85 | *r_plugin = plugin; |
89 | return 0; | 86 | return 0; |
90 | } | 87 | } |
91 | |||
92 | #endif | ||
diff --git a/sound/core/oss/io.c b/sound/core/oss/io.c index b6e7ce30e5a3..3ece39fc48db 100644 --- a/sound/core/oss/io.c +++ b/sound/core/oss/io.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * PCM I/O Plug-In Interface | 2 | * PCM I/O Plug-In Interface |
3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz> |
4 | * | 4 | * |
5 | * | 5 | * |
6 | * This library is free software; you can redistribute it and/or modify | 6 | * This library is free software; you can redistribute it and/or modify |
@@ -20,9 +20,6 @@ | |||
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <sound/driver.h> | 22 | #include <sound/driver.h> |
23 | |||
24 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
25 | |||
26 | #include <linux/time.h> | 23 | #include <linux/time.h> |
27 | #include <sound/core.h> | 24 | #include <sound/core.h> |
28 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
@@ -135,5 +132,3 @@ int snd_pcm_plugin_build_io(struct snd_pcm_substream *plug, | |||
135 | *r_plugin = plugin; | 132 | *r_plugin = plugin; |
136 | return 0; | 133 | return 0; |
137 | } | 134 | } |
138 | |||
139 | #endif | ||
diff --git a/sound/core/oss/linear.c b/sound/core/oss/linear.c index 5b1bcdc64779..06f96a3e86f6 100644 --- a/sound/core/oss/linear.c +++ b/sound/core/oss/linear.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Linear conversion Plug-In | 2 | * Linear conversion Plug-In |
3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz>, | 3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz>, |
4 | * Abramo Bagnara <abramo@alsa-project.org> | 4 | * Abramo Bagnara <abramo@alsa-project.org> |
5 | * | 5 | * |
6 | * | 6 | * |
@@ -21,9 +21,6 @@ | |||
21 | */ | 21 | */ |
22 | 22 | ||
23 | #include <sound/driver.h> | 23 | #include <sound/driver.h> |
24 | |||
25 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
26 | |||
27 | #include <linux/time.h> | 24 | #include <linux/time.h> |
28 | #include <sound/core.h> | 25 | #include <sound/core.h> |
29 | #include <sound/pcm.h> | 26 | #include <sound/pcm.h> |
@@ -34,19 +31,34 @@ | |||
34 | */ | 31 | */ |
35 | 32 | ||
36 | struct linear_priv { | 33 | struct linear_priv { |
37 | int conv; | 34 | int cvt_endian; /* need endian conversion? */ |
35 | unsigned int src_ofs; /* byte offset in source format */ | ||
36 | unsigned int dst_ofs; /* byte soffset in destination format */ | ||
37 | unsigned int copy_ofs; /* byte offset in temporary u32 data */ | ||
38 | unsigned int dst_bytes; /* byte size of destination format */ | ||
39 | unsigned int copy_bytes; /* bytes to copy per conversion */ | ||
40 | unsigned int flip; /* MSB flip for signeness, done after endian conv */ | ||
38 | }; | 41 | }; |
39 | 42 | ||
43 | static inline void do_convert(struct linear_priv *data, | ||
44 | unsigned char *dst, unsigned char *src) | ||
45 | { | ||
46 | unsigned int tmp = 0; | ||
47 | unsigned char *p = (unsigned char *)&tmp; | ||
48 | |||
49 | memcpy(p + data->copy_ofs, src + data->src_ofs, data->copy_bytes); | ||
50 | if (data->cvt_endian) | ||
51 | tmp = swab32(tmp); | ||
52 | tmp ^= data->flip; | ||
53 | memcpy(dst, p + data->dst_ofs, data->dst_bytes); | ||
54 | } | ||
55 | |||
40 | static void convert(struct snd_pcm_plugin *plugin, | 56 | static void convert(struct snd_pcm_plugin *plugin, |
41 | const struct snd_pcm_plugin_channel *src_channels, | 57 | const struct snd_pcm_plugin_channel *src_channels, |
42 | struct snd_pcm_plugin_channel *dst_channels, | 58 | struct snd_pcm_plugin_channel *dst_channels, |
43 | snd_pcm_uframes_t frames) | 59 | snd_pcm_uframes_t frames) |
44 | { | 60 | { |
45 | #define CONV_LABELS | ||
46 | #include "plugin_ops.h" | ||
47 | #undef CONV_LABELS | ||
48 | struct linear_priv *data = (struct linear_priv *)plugin->extra_data; | 61 | struct linear_priv *data = (struct linear_priv *)plugin->extra_data; |
49 | void *conv = conv_labels[data->conv]; | ||
50 | int channel; | 62 | int channel; |
51 | int nchannels = plugin->src_format.channels; | 63 | int nchannels = plugin->src_format.channels; |
52 | for (channel = 0; channel < nchannels; ++channel) { | 64 | for (channel = 0; channel < nchannels; ++channel) { |
@@ -67,11 +79,7 @@ static void convert(struct snd_pcm_plugin *plugin, | |||
67 | dst_step = dst_channels[channel].area.step / 8; | 79 | dst_step = dst_channels[channel].area.step / 8; |
68 | frames1 = frames; | 80 | frames1 = frames; |
69 | while (frames1-- > 0) { | 81 | while (frames1-- > 0) { |
70 | goto *conv; | 82 | do_convert(data, dst, src); |
71 | #define CONV_END after | ||
72 | #include "plugin_ops.h" | ||
73 | #undef CONV_END | ||
74 | after: | ||
75 | src += src_step; | 83 | src += src_step; |
76 | dst += dst_step; | 84 | dst += dst_step; |
77 | } | 85 | } |
@@ -106,29 +114,36 @@ static snd_pcm_sframes_t linear_transfer(struct snd_pcm_plugin *plugin, | |||
106 | return frames; | 114 | return frames; |
107 | } | 115 | } |
108 | 116 | ||
109 | static int conv_index(int src_format, int dst_format) | 117 | static void init_data(struct linear_priv *data, int src_format, int dst_format) |
110 | { | 118 | { |
111 | int src_endian, dst_endian, sign, src_width, dst_width; | 119 | int src_le, dst_le, src_bytes, dst_bytes; |
112 | 120 | ||
113 | sign = (snd_pcm_format_signed(src_format) != | 121 | src_bytes = snd_pcm_format_width(src_format) / 8; |
114 | snd_pcm_format_signed(dst_format)); | 122 | dst_bytes = snd_pcm_format_width(dst_format) / 8; |
115 | #ifdef SNDRV_LITTLE_ENDIAN | 123 | src_le = snd_pcm_format_little_endian(src_format) > 0; |
116 | src_endian = snd_pcm_format_big_endian(src_format); | 124 | dst_le = snd_pcm_format_little_endian(dst_format) > 0; |
117 | dst_endian = snd_pcm_format_big_endian(dst_format); | 125 | |
118 | #else | 126 | data->dst_bytes = dst_bytes; |
119 | src_endian = snd_pcm_format_little_endian(src_format); | 127 | data->cvt_endian = src_le != dst_le; |
120 | dst_endian = snd_pcm_format_little_endian(dst_format); | 128 | data->copy_bytes = src_bytes < dst_bytes ? src_bytes : dst_bytes; |
121 | #endif | 129 | if (src_le) { |
122 | 130 | data->copy_ofs = 4 - data->copy_bytes; | |
123 | if (src_endian < 0) | 131 | data->src_ofs = src_bytes - data->copy_bytes; |
124 | src_endian = 0; | 132 | } else |
125 | if (dst_endian < 0) | 133 | data->src_ofs = snd_pcm_format_physical_width(src_format) / 8 - |
126 | dst_endian = 0; | 134 | src_bytes; |
127 | 135 | if (dst_le) | |
128 | src_width = snd_pcm_format_width(src_format) / 8 - 1; | 136 | data->dst_ofs = 4 - data->dst_bytes; |
129 | dst_width = snd_pcm_format_width(dst_format) / 8 - 1; | 137 | else |
130 | 138 | data->dst_ofs = snd_pcm_format_physical_width(dst_format) / 8 - | |
131 | return src_width * 32 + src_endian * 16 + sign * 8 + dst_width * 2 + dst_endian; | 139 | dst_bytes; |
140 | if (snd_pcm_format_signed(src_format) != | ||
141 | snd_pcm_format_signed(dst_format)) { | ||
142 | if (dst_le) | ||
143 | data->flip = cpu_to_le32(0x80000000); | ||
144 | else | ||
145 | data->flip = cpu_to_be32(0x80000000); | ||
146 | } | ||
132 | } | 147 | } |
133 | 148 | ||
134 | int snd_pcm_plugin_build_linear(struct snd_pcm_substream *plug, | 149 | int snd_pcm_plugin_build_linear(struct snd_pcm_substream *plug, |
@@ -154,10 +169,8 @@ int snd_pcm_plugin_build_linear(struct snd_pcm_substream *plug, | |||
154 | if (err < 0) | 169 | if (err < 0) |
155 | return err; | 170 | return err; |
156 | data = (struct linear_priv *)plugin->extra_data; | 171 | data = (struct linear_priv *)plugin->extra_data; |
157 | data->conv = conv_index(src_format->format, dst_format->format); | 172 | init_data(data, src_format->format, dst_format->format); |
158 | plugin->transfer = linear_transfer; | 173 | plugin->transfer = linear_transfer; |
159 | *r_plugin = plugin; | 174 | *r_plugin = plugin; |
160 | return 0; | 175 | return 0; |
161 | } | 176 | } |
162 | |||
163 | #endif | ||
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c index fccad8f0a6bb..3ace4a5680ba 100644 --- a/sound/core/oss/mixer_oss.c +++ b/sound/core/oss/mixer_oss.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * OSS emulation layer for the mixer interface | 2 | * OSS emulation layer for the mixer interface |
3 | * Copyright (c) by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) by Jaroslav Kysela <perex@perex.cz> |
4 | * | 4 | * |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | #define OSS_ALSAEMULVER _SIOR ('M', 249, int) | 34 | #define OSS_ALSAEMULVER _SIOR ('M', 249, int) |
35 | 35 | ||
36 | MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>"); | 36 | MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>"); |
37 | MODULE_DESCRIPTION("Mixer OSS emulation for ALSA."); | 37 | MODULE_DESCRIPTION("Mixer OSS emulation for ALSA."); |
38 | MODULE_LICENSE("GPL"); | 38 | MODULE_LICENSE("GPL"); |
39 | MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_MIXER); | 39 | MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_MIXER); |
diff --git a/sound/core/oss/mulaw.c b/sound/core/oss/mulaw.c index 2eb18807e6d0..848db82529ed 100644 --- a/sound/core/oss/mulaw.c +++ b/sound/core/oss/mulaw.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Mu-Law conversion Plug-In Interface | 2 | * Mu-Law conversion Plug-In Interface |
3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz> |
4 | * Uros Bizjak <uros@kss-loka.si> | 4 | * Uros Bizjak <uros@kss-loka.si> |
5 | * | 5 | * |
6 | * Based on reference implementation by Sun Microsystems, Inc. | 6 | * Based on reference implementation by Sun Microsystems, Inc. |
@@ -22,9 +22,6 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <sound/driver.h> | 24 | #include <sound/driver.h> |
25 | |||
26 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
27 | |||
28 | #include <linux/time.h> | 25 | #include <linux/time.h> |
29 | #include <sound/core.h> | 26 | #include <sound/core.h> |
30 | #include <sound/pcm.h> | 27 | #include <sound/pcm.h> |
@@ -149,19 +146,32 @@ typedef void (*mulaw_f)(struct snd_pcm_plugin *plugin, | |||
149 | 146 | ||
150 | struct mulaw_priv { | 147 | struct mulaw_priv { |
151 | mulaw_f func; | 148 | mulaw_f func; |
152 | int conv; | 149 | int cvt_endian; /* need endian conversion? */ |
150 | unsigned int native_ofs; /* byte offset in native format */ | ||
151 | unsigned int copy_ofs; /* byte offset in s16 format */ | ||
152 | unsigned int native_bytes; /* byte size of the native format */ | ||
153 | unsigned int copy_bytes; /* bytes to copy per conversion */ | ||
154 | u16 flip; /* MSB flip for signedness, done after endian conversion */ | ||
153 | }; | 155 | }; |
154 | 156 | ||
157 | static inline void cvt_s16_to_native(struct mulaw_priv *data, | ||
158 | unsigned char *dst, u16 sample) | ||
159 | { | ||
160 | sample ^= data->flip; | ||
161 | if (data->cvt_endian) | ||
162 | sample = swab16(sample); | ||
163 | if (data->native_bytes > data->copy_bytes) | ||
164 | memset(dst, 0, data->native_bytes); | ||
165 | memcpy(dst + data->native_ofs, (char *)&sample + data->copy_ofs, | ||
166 | data->copy_bytes); | ||
167 | } | ||
168 | |||
155 | static void mulaw_decode(struct snd_pcm_plugin *plugin, | 169 | static void mulaw_decode(struct snd_pcm_plugin *plugin, |
156 | const struct snd_pcm_plugin_channel *src_channels, | 170 | const struct snd_pcm_plugin_channel *src_channels, |
157 | struct snd_pcm_plugin_channel *dst_channels, | 171 | struct snd_pcm_plugin_channel *dst_channels, |
158 | snd_pcm_uframes_t frames) | 172 | snd_pcm_uframes_t frames) |
159 | { | 173 | { |
160 | #define PUT_S16_LABELS | ||
161 | #include "plugin_ops.h" | ||
162 | #undef PUT_S16_LABELS | ||
163 | struct mulaw_priv *data = (struct mulaw_priv *)plugin->extra_data; | 174 | struct mulaw_priv *data = (struct mulaw_priv *)plugin->extra_data; |
164 | void *put = put_s16_labels[data->conv]; | ||
165 | int channel; | 175 | int channel; |
166 | int nchannels = plugin->src_format.channels; | 176 | int nchannels = plugin->src_format.channels; |
167 | for (channel = 0; channel < nchannels; ++channel) { | 177 | for (channel = 0; channel < nchannels; ++channel) { |
@@ -183,30 +193,33 @@ static void mulaw_decode(struct snd_pcm_plugin *plugin, | |||
183 | frames1 = frames; | 193 | frames1 = frames; |
184 | while (frames1-- > 0) { | 194 | while (frames1-- > 0) { |
185 | signed short sample = ulaw2linear(*src); | 195 | signed short sample = ulaw2linear(*src); |
186 | goto *put; | 196 | cvt_s16_to_native(data, dst, sample); |
187 | #define PUT_S16_END after | ||
188 | #include "plugin_ops.h" | ||
189 | #undef PUT_S16_END | ||
190 | after: | ||
191 | src += src_step; | 197 | src += src_step; |
192 | dst += dst_step; | 198 | dst += dst_step; |
193 | } | 199 | } |
194 | } | 200 | } |
195 | } | 201 | } |
196 | 202 | ||
203 | static inline signed short cvt_native_to_s16(struct mulaw_priv *data, | ||
204 | unsigned char *src) | ||
205 | { | ||
206 | u16 sample = 0; | ||
207 | memcpy((char *)&sample + data->copy_ofs, src + data->native_ofs, | ||
208 | data->copy_bytes); | ||
209 | if (data->cvt_endian) | ||
210 | sample = swab16(sample); | ||
211 | sample ^= data->flip; | ||
212 | return (signed short)sample; | ||
213 | } | ||
214 | |||
197 | static void mulaw_encode(struct snd_pcm_plugin *plugin, | 215 | static void mulaw_encode(struct snd_pcm_plugin *plugin, |
198 | const struct snd_pcm_plugin_channel *src_channels, | 216 | const struct snd_pcm_plugin_channel *src_channels, |
199 | struct snd_pcm_plugin_channel *dst_channels, | 217 | struct snd_pcm_plugin_channel *dst_channels, |
200 | snd_pcm_uframes_t frames) | 218 | snd_pcm_uframes_t frames) |
201 | { | 219 | { |
202 | #define GET_S16_LABELS | ||
203 | #include "plugin_ops.h" | ||
204 | #undef GET_S16_LABELS | ||
205 | struct mulaw_priv *data = (struct mulaw_priv *)plugin->extra_data; | 220 | struct mulaw_priv *data = (struct mulaw_priv *)plugin->extra_data; |
206 | void *get = get_s16_labels[data->conv]; | ||
207 | int channel; | 221 | int channel; |
208 | int nchannels = plugin->src_format.channels; | 222 | int nchannels = plugin->src_format.channels; |
209 | signed short sample = 0; | ||
210 | for (channel = 0; channel < nchannels; ++channel) { | 223 | for (channel = 0; channel < nchannels; ++channel) { |
211 | char *src; | 224 | char *src; |
212 | char *dst; | 225 | char *dst; |
@@ -225,11 +238,7 @@ static void mulaw_encode(struct snd_pcm_plugin *plugin, | |||
225 | dst_step = dst_channels[channel].area.step / 8; | 238 | dst_step = dst_channels[channel].area.step / 8; |
226 | frames1 = frames; | 239 | frames1 = frames; |
227 | while (frames1-- > 0) { | 240 | while (frames1-- > 0) { |
228 | goto *get; | 241 | signed short sample = cvt_native_to_s16(data, src); |
229 | #define GET_S16_END after | ||
230 | #include "plugin_ops.h" | ||
231 | #undef GET_S16_END | ||
232 | after: | ||
233 | *dst = linear2ulaw(sample); | 242 | *dst = linear2ulaw(sample); |
234 | src += src_step; | 243 | src += src_step; |
235 | dst += dst_step; | 244 | dst += dst_step; |
@@ -265,23 +274,25 @@ static snd_pcm_sframes_t mulaw_transfer(struct snd_pcm_plugin *plugin, | |||
265 | return frames; | 274 | return frames; |
266 | } | 275 | } |
267 | 276 | ||
268 | static int getput_index(int format) | 277 | static void init_data(struct mulaw_priv *data, int format) |
269 | { | 278 | { |
270 | int sign, width, endian; | ||
271 | sign = !snd_pcm_format_signed(format); | ||
272 | width = snd_pcm_format_width(format) / 8 - 1; | ||
273 | if (width < 0 || width > 3) { | ||
274 | snd_printk(KERN_ERR "snd-pcm-oss: invalid format %d\n", format); | ||
275 | width = 0; | ||
276 | } | ||
277 | #ifdef SNDRV_LITTLE_ENDIAN | 279 | #ifdef SNDRV_LITTLE_ENDIAN |
278 | endian = snd_pcm_format_big_endian(format); | 280 | data->cvt_endian = snd_pcm_format_big_endian(format) > 0; |
279 | #else | 281 | #else |
280 | endian = snd_pcm_format_little_endian(format); | 282 | data->cvt_endian = snd_pcm_format_little_endian(format) > 0; |
281 | #endif | 283 | #endif |
282 | if (endian < 0) | 284 | if (!snd_pcm_format_signed(format)) |
283 | endian = 0; | 285 | data->flip = 0x8000; |
284 | return width * 4 + endian * 2 + sign; | 286 | data->native_bytes = snd_pcm_format_physical_width(format) / 8; |
287 | data->copy_bytes = data->native_bytes < 2 ? 1 : 2; | ||
288 | if (snd_pcm_format_little_endian(format)) { | ||
289 | data->native_ofs = data->native_bytes - data->copy_bytes; | ||
290 | data->copy_ofs = 2 - data->copy_bytes; | ||
291 | } else { | ||
292 | /* S24 in 4bytes need an 1 byte offset */ | ||
293 | data->native_ofs = data->native_bytes - | ||
294 | snd_pcm_format_width(format) / 8; | ||
295 | } | ||
285 | } | 296 | } |
286 | 297 | ||
287 | int snd_pcm_plugin_build_mulaw(struct snd_pcm_substream *plug, | 298 | int snd_pcm_plugin_build_mulaw(struct snd_pcm_substream *plug, |
@@ -322,11 +333,8 @@ int snd_pcm_plugin_build_mulaw(struct snd_pcm_substream *plug, | |||
322 | return err; | 333 | return err; |
323 | data = (struct mulaw_priv *)plugin->extra_data; | 334 | data = (struct mulaw_priv *)plugin->extra_data; |
324 | data->func = func; | 335 | data->func = func; |
325 | data->conv = getput_index(format->format); | 336 | init_data(data, format->format); |
326 | snd_assert(data->conv >= 0 && data->conv < 4*2*2, return -EINVAL); | ||
327 | plugin->transfer = mulaw_transfer; | 337 | plugin->transfer = mulaw_transfer; |
328 | *r_plugin = plugin; | 338 | *r_plugin = plugin; |
329 | return 0; | 339 | return 0; |
330 | } | 340 | } |
331 | |||
332 | #endif | ||
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index fc11572c48cf..d0c4ceb9f0b4 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Digital Audio (PCM) abstract layer / OSS compatible | 2 | * Digital Audio (PCM) abstract layer / OSS compatible |
3 | * Copyright (c) by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) by Jaroslav Kysela <perex@perex.cz> |
4 | * | 4 | * |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
@@ -48,7 +48,7 @@ static int dsp_map[SNDRV_CARDS]; | |||
48 | static int adsp_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1}; | 48 | static int adsp_map[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1}; |
49 | static int nonblock_open = 1; | 49 | static int nonblock_open = 1; |
50 | 50 | ||
51 | MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Abramo Bagnara <abramo@alsa-project.org>"); | 51 | MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, Abramo Bagnara <abramo@alsa-project.org>"); |
52 | MODULE_DESCRIPTION("PCM OSS emulation for ALSA."); | 52 | MODULE_DESCRIPTION("PCM OSS emulation for ALSA."); |
53 | MODULE_LICENSE("GPL"); | 53 | MODULE_LICENSE("GPL"); |
54 | module_param_array(dsp_map, int, NULL, 0444); | 54 | module_param_array(dsp_map, int, NULL, 0444); |
@@ -633,6 +633,22 @@ static long snd_pcm_alsa_frames(struct snd_pcm_substream *substream, long bytes) | |||
633 | return bytes_to_frames(runtime, (buffer_size * bytes) / runtime->oss.buffer_bytes); | 633 | return bytes_to_frames(runtime, (buffer_size * bytes) / runtime->oss.buffer_bytes); |
634 | } | 634 | } |
635 | 635 | ||
636 | /* define extended formats in the recent OSS versions (if any) */ | ||
637 | /* linear formats */ | ||
638 | #define AFMT_S32_LE 0x00001000 | ||
639 | #define AFMT_S32_BE 0x00002000 | ||
640 | #define AFMT_S24_LE 0x00008000 | ||
641 | #define AFMT_S24_BE 0x00010000 | ||
642 | #define AFMT_S24_PACKED 0x00040000 | ||
643 | |||
644 | /* other supported formats */ | ||
645 | #define AFMT_FLOAT 0x00004000 | ||
646 | #define AFMT_SPDIF_RAW 0x00020000 | ||
647 | |||
648 | /* unsupported formats */ | ||
649 | #define AFMT_AC3 0x00000400 | ||
650 | #define AFMT_VORBIS 0x00000800 | ||
651 | |||
636 | static int snd_pcm_oss_format_from(int format) | 652 | static int snd_pcm_oss_format_from(int format) |
637 | { | 653 | { |
638 | switch (format) { | 654 | switch (format) { |
@@ -646,6 +662,13 @@ static int snd_pcm_oss_format_from(int format) | |||
646 | case AFMT_U16_LE: return SNDRV_PCM_FORMAT_U16_LE; | 662 | case AFMT_U16_LE: return SNDRV_PCM_FORMAT_U16_LE; |
647 | case AFMT_U16_BE: return SNDRV_PCM_FORMAT_U16_BE; | 663 | case AFMT_U16_BE: return SNDRV_PCM_FORMAT_U16_BE; |
648 | case AFMT_MPEG: return SNDRV_PCM_FORMAT_MPEG; | 664 | case AFMT_MPEG: return SNDRV_PCM_FORMAT_MPEG; |
665 | case AFMT_S32_LE: return SNDRV_PCM_FORMAT_S32_LE; | ||
666 | case AFMT_S32_BE: return SNDRV_PCM_FORMAT_S32_BE; | ||
667 | case AFMT_S24_LE: return SNDRV_PCM_FORMAT_S24_LE; | ||
668 | case AFMT_S24_BE: return SNDRV_PCM_FORMAT_S24_BE; | ||
669 | case AFMT_S24_PACKED: return SNDRV_PCM_FORMAT_S24_3LE; | ||
670 | case AFMT_FLOAT: return SNDRV_PCM_FORMAT_FLOAT; | ||
671 | case AFMT_SPDIF_RAW: return SNDRV_PCM_FORMAT_IEC958_SUBFRAME; | ||
649 | default: return SNDRV_PCM_FORMAT_U8; | 672 | default: return SNDRV_PCM_FORMAT_U8; |
650 | } | 673 | } |
651 | } | 674 | } |
@@ -663,6 +686,13 @@ static int snd_pcm_oss_format_to(int format) | |||
663 | case SNDRV_PCM_FORMAT_U16_LE: return AFMT_U16_LE; | 686 | case SNDRV_PCM_FORMAT_U16_LE: return AFMT_U16_LE; |
664 | case SNDRV_PCM_FORMAT_U16_BE: return AFMT_U16_BE; | 687 | case SNDRV_PCM_FORMAT_U16_BE: return AFMT_U16_BE; |
665 | case SNDRV_PCM_FORMAT_MPEG: return AFMT_MPEG; | 688 | case SNDRV_PCM_FORMAT_MPEG: return AFMT_MPEG; |
689 | case SNDRV_PCM_FORMAT_S32_LE: return AFMT_S32_LE; | ||
690 | case SNDRV_PCM_FORMAT_S32_BE: return AFMT_S32_BE; | ||
691 | case SNDRV_PCM_FORMAT_S24_LE: return AFMT_S24_LE; | ||
692 | case SNDRV_PCM_FORMAT_S24_BE: return AFMT_S24_BE; | ||
693 | case SNDRV_PCM_FORMAT_S24_3LE: return AFMT_S24_PACKED; | ||
694 | case SNDRV_PCM_FORMAT_FLOAT: return AFMT_FLOAT; | ||
695 | case SNDRV_PCM_FORMAT_IEC958_SUBFRAME: return AFMT_SPDIF_RAW; | ||
666 | default: return -EINVAL; | 696 | default: return -EINVAL; |
667 | } | 697 | } |
668 | } | 698 | } |
@@ -1725,7 +1755,10 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file) | |||
1725 | return AFMT_MU_LAW | AFMT_U8 | | 1755 | return AFMT_MU_LAW | AFMT_U8 | |
1726 | AFMT_S16_LE | AFMT_S16_BE | | 1756 | AFMT_S16_LE | AFMT_S16_BE | |
1727 | AFMT_S8 | AFMT_U16_LE | | 1757 | AFMT_S8 | AFMT_U16_LE | |
1728 | AFMT_U16_BE; | 1758 | AFMT_U16_BE | |
1759 | AFMT_S32_LE | AFMT_S32_BE | | ||
1760 | AFMT_S24_LE | AFMT_S24_LE | | ||
1761 | AFMT_S24_PACKED; | ||
1729 | params = kmalloc(sizeof(*params), GFP_KERNEL); | 1762 | params = kmalloc(sizeof(*params), GFP_KERNEL); |
1730 | if (!params) | 1763 | if (!params) |
1731 | return -ENOMEM; | 1764 | return -ENOMEM; |
diff --git a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c index 0e67dd280a5d..14095a927a1b 100644 --- a/sound/core/oss/pcm_plugin.c +++ b/sound/core/oss/pcm_plugin.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * PCM Plug-In shared (kernel/library) code | 2 | * PCM Plug-In shared (kernel/library) code |
3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz> |
4 | * Copyright (c) 2000 by Abramo Bagnara <abramo@alsa-project.org> | 4 | * Copyright (c) 2000 by Abramo Bagnara <abramo@alsa-project.org> |
5 | * | 5 | * |
6 | * | 6 | * |
@@ -25,9 +25,6 @@ | |||
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #include <sound/driver.h> | 27 | #include <sound/driver.h> |
28 | |||
29 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
30 | |||
31 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
32 | #include <linux/time.h> | 29 | #include <linux/time.h> |
33 | #include <linux/vmalloc.h> | 30 | #include <linux/vmalloc.h> |
@@ -267,6 +264,8 @@ static int snd_pcm_plug_formats(struct snd_mask *mask, int format) | |||
267 | SNDRV_PCM_FMTBIT_U16_BE | SNDRV_PCM_FMTBIT_S16_BE | | 264 | SNDRV_PCM_FMTBIT_U16_BE | SNDRV_PCM_FMTBIT_S16_BE | |
268 | SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_S24_LE | | 265 | SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_S24_LE | |
269 | SNDRV_PCM_FMTBIT_U24_BE | SNDRV_PCM_FMTBIT_S24_BE | | 266 | SNDRV_PCM_FMTBIT_U24_BE | SNDRV_PCM_FMTBIT_S24_BE | |
267 | SNDRV_PCM_FMTBIT_U24_3LE | SNDRV_PCM_FMTBIT_S24_3LE | | ||
268 | SNDRV_PCM_FMTBIT_U24_3BE | SNDRV_PCM_FMTBIT_S24_3BE | | ||
270 | SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_S32_LE | | 269 | SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_S32_LE | |
271 | SNDRV_PCM_FMTBIT_U32_BE | SNDRV_PCM_FMTBIT_S32_BE); | 270 | SNDRV_PCM_FMTBIT_U32_BE | SNDRV_PCM_FMTBIT_S32_BE); |
272 | snd_mask_set(&formats, SNDRV_PCM_FORMAT_MU_LAW); | 271 | snd_mask_set(&formats, SNDRV_PCM_FORMAT_MU_LAW); |
@@ -283,6 +282,10 @@ static int preferred_formats[] = { | |||
283 | SNDRV_PCM_FORMAT_S16_BE, | 282 | SNDRV_PCM_FORMAT_S16_BE, |
284 | SNDRV_PCM_FORMAT_U16_LE, | 283 | SNDRV_PCM_FORMAT_U16_LE, |
285 | SNDRV_PCM_FORMAT_U16_BE, | 284 | SNDRV_PCM_FORMAT_U16_BE, |
285 | SNDRV_PCM_FORMAT_S24_3LE, | ||
286 | SNDRV_PCM_FORMAT_S24_3BE, | ||
287 | SNDRV_PCM_FORMAT_U24_3LE, | ||
288 | SNDRV_PCM_FORMAT_U24_3BE, | ||
286 | SNDRV_PCM_FORMAT_S24_LE, | 289 | SNDRV_PCM_FORMAT_S24_LE, |
287 | SNDRV_PCM_FORMAT_S24_BE, | 290 | SNDRV_PCM_FORMAT_S24_BE, |
288 | SNDRV_PCM_FORMAT_U24_LE, | 291 | SNDRV_PCM_FORMAT_U24_LE, |
@@ -297,41 +300,37 @@ static int preferred_formats[] = { | |||
297 | 300 | ||
298 | int snd_pcm_plug_slave_format(int format, struct snd_mask *format_mask) | 301 | int snd_pcm_plug_slave_format(int format, struct snd_mask *format_mask) |
299 | { | 302 | { |
303 | int i; | ||
304 | |||
300 | if (snd_mask_test(format_mask, format)) | 305 | if (snd_mask_test(format_mask, format)) |
301 | return format; | 306 | return format; |
302 | if (! snd_pcm_plug_formats(format_mask, format)) | 307 | if (! snd_pcm_plug_formats(format_mask, format)) |
303 | return -EINVAL; | 308 | return -EINVAL; |
304 | if (snd_pcm_format_linear(format)) { | 309 | if (snd_pcm_format_linear(format)) { |
305 | int width = snd_pcm_format_width(format); | 310 | unsigned int width = snd_pcm_format_width(format); |
306 | int unsignd = snd_pcm_format_unsigned(format); | 311 | int unsignd = snd_pcm_format_unsigned(format) > 0; |
307 | int big = snd_pcm_format_big_endian(format); | 312 | int big = snd_pcm_format_big_endian(format) > 0; |
308 | int format1; | 313 | unsigned int badness, best = -1; |
309 | int wid, width1=width; | 314 | int best_format = -1; |
310 | int dwidth1 = 8; | 315 | for (i = 0; i < ARRAY_SIZE(preferred_formats); i++) { |
311 | for (wid = 0; wid < 4; ++wid) { | 316 | int f = preferred_formats[i]; |
312 | int end, big1 = big; | 317 | unsigned int w; |
313 | for (end = 0; end < 2; ++end) { | 318 | if (!snd_mask_test(format_mask, f)) |
314 | int sgn, unsignd1 = unsignd; | 319 | continue; |
315 | for (sgn = 0; sgn < 2; ++sgn) { | 320 | w = snd_pcm_format_width(f); |
316 | format1 = snd_pcm_build_linear_format(width1, unsignd1, big1); | 321 | if (w >= width) |
317 | if (format1 >= 0 && | 322 | badness = w - width; |
318 | snd_mask_test(format_mask, format1)) | 323 | else |
319 | goto _found; | 324 | badness = width - w + 32; |
320 | unsignd1 = !unsignd1; | 325 | badness += snd_pcm_format_unsigned(f) != unsignd; |
321 | } | 326 | badness += snd_pcm_format_big_endian(f) != big; |
322 | big1 = !big1; | 327 | if (badness < best) { |
323 | } | 328 | best_format = f; |
324 | if (width1 == 32) { | 329 | best = badness; |
325 | dwidth1 = -dwidth1; | ||
326 | width1 = width; | ||
327 | } | 330 | } |
328 | width1 += dwidth1; | ||
329 | } | 331 | } |
330 | return -EINVAL; | 332 | return best_format >= 0 ? best_format : -EINVAL; |
331 | _found: | ||
332 | return format1; | ||
333 | } else { | 333 | } else { |
334 | unsigned int i; | ||
335 | switch (format) { | 334 | switch (format) { |
336 | case SNDRV_PCM_FORMAT_MU_LAW: | 335 | case SNDRV_PCM_FORMAT_MU_LAW: |
337 | for (i = 0; i < ARRAY_SIZE(preferred_formats); ++i) { | 336 | for (i = 0; i < ARRAY_SIZE(preferred_formats); ++i) { |
@@ -740,5 +739,3 @@ int snd_pcm_area_copy(const struct snd_pcm_channel_area *src_area, size_t src_of | |||
740 | } | 739 | } |
741 | return 0; | 740 | return 0; |
742 | } | 741 | } |
743 | |||
744 | #endif | ||
diff --git a/sound/core/oss/pcm_plugin.h b/sound/core/oss/pcm_plugin.h index 3be91b3d5377..ca2f4c39be46 100644 --- a/sound/core/oss/pcm_plugin.h +++ b/sound/core/oss/pcm_plugin.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | /* | 4 | /* |
5 | * Digital Audio (Plugin interface) abstract layer | 5 | * Digital Audio (Plugin interface) abstract layer |
6 | * Copyright (c) by Jaroslav Kysela <perex@suse.cz> | 6 | * Copyright (c) by Jaroslav Kysela <perex@perex.cz> |
7 | * | 7 | * |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
diff --git a/sound/core/oss/plugin_ops.h b/sound/core/oss/plugin_ops.h deleted file mode 100644 index 1f5bde4631f1..000000000000 --- a/sound/core/oss/plugin_ops.h +++ /dev/null | |||
@@ -1,370 +0,0 @@ | |||
1 | /* | ||
2 | * Plugin sample operators with fast switch | ||
3 | * Copyright (c) 2000 by Jaroslav Kysela <perex@suse.cz> | ||
4 | * | ||
5 | * | ||
6 | * This library is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU Library General Public License as | ||
8 | * published by the Free Software Foundation; either version 2 of | ||
9 | * the License, or (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU Library General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU Library General Public | ||
17 | * License along with this library; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | * | ||
20 | */ | ||
21 | |||
22 | |||
23 | #define as_u8(ptr) (*(u_int8_t*)(ptr)) | ||
24 | #define as_u16(ptr) (*(u_int16_t*)(ptr)) | ||
25 | #define as_u32(ptr) (*(u_int32_t*)(ptr)) | ||
26 | #define as_u64(ptr) (*(u_int64_t*)(ptr)) | ||
27 | #define as_s8(ptr) (*(int8_t*)(ptr)) | ||
28 | #define as_s16(ptr) (*(int16_t*)(ptr)) | ||
29 | #define as_s32(ptr) (*(int32_t*)(ptr)) | ||
30 | #define as_s64(ptr) (*(int64_t*)(ptr)) | ||
31 | |||
32 | #ifdef COPY_LABELS | ||
33 | static void *copy_labels[4] = { | ||
34 | &©_8, | ||
35 | &©_16, | ||
36 | &©_32, | ||
37 | &©_64 | ||
38 | }; | ||
39 | #endif | ||
40 | |||
41 | #ifdef COPY_END | ||
42 | while(0) { | ||
43 | copy_8: as_s8(dst) = as_s8(src); goto COPY_END; | ||
44 | copy_16: as_s16(dst) = as_s16(src); goto COPY_END; | ||
45 | copy_32: as_s32(dst) = as_s32(src); goto COPY_END; | ||
46 | copy_64: as_s64(dst) = as_s64(src); goto COPY_END; | ||
47 | } | ||
48 | #endif | ||
49 | |||
50 | #ifdef CONV_LABELS | ||
51 | /* src_wid src_endswap sign_toggle dst_wid dst_endswap */ | ||
52 | static void *conv_labels[4 * 2 * 2 * 4 * 2] = { | ||
53 | &&conv_xxx1_xxx1, /* 8h -> 8h */ | ||
54 | &&conv_xxx1_xxx1, /* 8h -> 8s */ | ||
55 | &&conv_xxx1_xx10, /* 8h -> 16h */ | ||
56 | &&conv_xxx1_xx01, /* 8h -> 16s */ | ||
57 | &&conv_xxx1_x100, /* 8h -> 24h */ | ||
58 | &&conv_xxx1_001x, /* 8h -> 24s */ | ||
59 | &&conv_xxx1_1000, /* 8h -> 32h */ | ||
60 | &&conv_xxx1_0001, /* 8h -> 32s */ | ||
61 | &&conv_xxx1_xxx9, /* 8h ^> 8h */ | ||
62 | &&conv_xxx1_xxx9, /* 8h ^> 8s */ | ||
63 | &&conv_xxx1_xx90, /* 8h ^> 16h */ | ||
64 | &&conv_xxx1_xx09, /* 8h ^> 16s */ | ||
65 | &&conv_xxx1_x900, /* 8h ^> 24h */ | ||
66 | &&conv_xxx1_009x, /* 8h ^> 24s */ | ||
67 | &&conv_xxx1_9000, /* 8h ^> 32h */ | ||
68 | &&conv_xxx1_0009, /* 8h ^> 32s */ | ||
69 | &&conv_xxx1_xxx1, /* 8s -> 8h */ | ||
70 | &&conv_xxx1_xxx1, /* 8s -> 8s */ | ||
71 | &&conv_xxx1_xx10, /* 8s -> 16h */ | ||
72 | &&conv_xxx1_xx01, /* 8s -> 16s */ | ||
73 | &&conv_xxx1_x100, /* 8s -> 24h */ | ||
74 | &&conv_xxx1_001x, /* 8s -> 24s */ | ||
75 | &&conv_xxx1_1000, /* 8s -> 32h */ | ||
76 | &&conv_xxx1_0001, /* 8s -> 32s */ | ||
77 | &&conv_xxx1_xxx9, /* 8s ^> 8h */ | ||
78 | &&conv_xxx1_xxx9, /* 8s ^> 8s */ | ||
79 | &&conv_xxx1_xx90, /* 8s ^> 16h */ | ||
80 | &&conv_xxx1_xx09, /* 8s ^> 16s */ | ||
81 | &&conv_xxx1_x900, /* 8s ^> 24h */ | ||
82 | &&conv_xxx1_009x, /* 8s ^> 24s */ | ||
83 | &&conv_xxx1_9000, /* 8s ^> 32h */ | ||
84 | &&conv_xxx1_0009, /* 8s ^> 32s */ | ||
85 | &&conv_xx12_xxx1, /* 16h -> 8h */ | ||
86 | &&conv_xx12_xxx1, /* 16h -> 8s */ | ||
87 | &&conv_xx12_xx12, /* 16h -> 16h */ | ||
88 | &&conv_xx12_xx21, /* 16h -> 16s */ | ||
89 | &&conv_xx12_x120, /* 16h -> 24h */ | ||
90 | &&conv_xx12_021x, /* 16h -> 24s */ | ||
91 | &&conv_xx12_1200, /* 16h -> 32h */ | ||
92 | &&conv_xx12_0021, /* 16h -> 32s */ | ||
93 | &&conv_xx12_xxx9, /* 16h ^> 8h */ | ||
94 | &&conv_xx12_xxx9, /* 16h ^> 8s */ | ||
95 | &&conv_xx12_xx92, /* 16h ^> 16h */ | ||
96 | &&conv_xx12_xx29, /* 16h ^> 16s */ | ||
97 | &&conv_xx12_x920, /* 16h ^> 24h */ | ||
98 | &&conv_xx12_029x, /* 16h ^> 24s */ | ||
99 | &&conv_xx12_9200, /* 16h ^> 32h */ | ||
100 | &&conv_xx12_0029, /* 16h ^> 32s */ | ||
101 | &&conv_xx12_xxx2, /* 16s -> 8h */ | ||
102 | &&conv_xx12_xxx2, /* 16s -> 8s */ | ||
103 | &&conv_xx12_xx21, /* 16s -> 16h */ | ||
104 | &&conv_xx12_xx12, /* 16s -> 16s */ | ||
105 | &&conv_xx12_x210, /* 16s -> 24h */ | ||
106 | &&conv_xx12_012x, /* 16s -> 24s */ | ||
107 | &&conv_xx12_2100, /* 16s -> 32h */ | ||
108 | &&conv_xx12_0012, /* 16s -> 32s */ | ||
109 | &&conv_xx12_xxxA, /* 16s ^> 8h */ | ||
110 | &&conv_xx12_xxxA, /* 16s ^> 8s */ | ||
111 | &&conv_xx12_xxA1, /* 16s ^> 16h */ | ||
112 | &&conv_xx12_xx1A, /* 16s ^> 16s */ | ||
113 | &&conv_xx12_xA10, /* 16s ^> 24h */ | ||
114 | &&conv_xx12_01Ax, /* 16s ^> 24s */ | ||
115 | &&conv_xx12_A100, /* 16s ^> 32h */ | ||
116 | &&conv_xx12_001A, /* 16s ^> 32s */ | ||
117 | &&conv_x123_xxx1, /* 24h -> 8h */ | ||
118 | &&conv_x123_xxx1, /* 24h -> 8s */ | ||
119 | &&conv_x123_xx12, /* 24h -> 16h */ | ||
120 | &&conv_x123_xx21, /* 24h -> 16s */ | ||
121 | &&conv_x123_x123, /* 24h -> 24h */ | ||
122 | &&conv_x123_321x, /* 24h -> 24s */ | ||
123 | &&conv_x123_1230, /* 24h -> 32h */ | ||
124 | &&conv_x123_0321, /* 24h -> 32s */ | ||
125 | &&conv_x123_xxx9, /* 24h ^> 8h */ | ||
126 | &&conv_x123_xxx9, /* 24h ^> 8s */ | ||
127 | &&conv_x123_xx92, /* 24h ^> 16h */ | ||
128 | &&conv_x123_xx29, /* 24h ^> 16s */ | ||
129 | &&conv_x123_x923, /* 24h ^> 24h */ | ||
130 | &&conv_x123_329x, /* 24h ^> 24s */ | ||
131 | &&conv_x123_9230, /* 24h ^> 32h */ | ||
132 | &&conv_x123_0329, /* 24h ^> 32s */ | ||
133 | &&conv_123x_xxx3, /* 24s -> 8h */ | ||
134 | &&conv_123x_xxx3, /* 24s -> 8s */ | ||
135 | &&conv_123x_xx32, /* 24s -> 16h */ | ||
136 | &&conv_123x_xx23, /* 24s -> 16s */ | ||
137 | &&conv_123x_x321, /* 24s -> 24h */ | ||
138 | &&conv_123x_123x, /* 24s -> 24s */ | ||
139 | &&conv_123x_3210, /* 24s -> 32h */ | ||
140 | &&conv_123x_0123, /* 24s -> 32s */ | ||
141 | &&conv_123x_xxxB, /* 24s ^> 8h */ | ||
142 | &&conv_123x_xxxB, /* 24s ^> 8s */ | ||
143 | &&conv_123x_xxB2, /* 24s ^> 16h */ | ||
144 | &&conv_123x_xx2B, /* 24s ^> 16s */ | ||
145 | &&conv_123x_xB21, /* 24s ^> 24h */ | ||
146 | &&conv_123x_12Bx, /* 24s ^> 24s */ | ||
147 | &&conv_123x_B210, /* 24s ^> 32h */ | ||
148 | &&conv_123x_012B, /* 24s ^> 32s */ | ||
149 | &&conv_1234_xxx1, /* 32h -> 8h */ | ||
150 | &&conv_1234_xxx1, /* 32h -> 8s */ | ||
151 | &&conv_1234_xx12, /* 32h -> 16h */ | ||
152 | &&conv_1234_xx21, /* 32h -> 16s */ | ||
153 | &&conv_1234_x123, /* 32h -> 24h */ | ||
154 | &&conv_1234_321x, /* 32h -> 24s */ | ||
155 | &&conv_1234_1234, /* 32h -> 32h */ | ||
156 | &&conv_1234_4321, /* 32h -> 32s */ | ||
157 | &&conv_1234_xxx9, /* 32h ^> 8h */ | ||
158 | &&conv_1234_xxx9, /* 32h ^> 8s */ | ||
159 | &&conv_1234_xx92, /* 32h ^> 16h */ | ||
160 | &&conv_1234_xx29, /* 32h ^> 16s */ | ||
161 | &&conv_1234_x923, /* 32h ^> 24h */ | ||
162 | &&conv_1234_329x, /* 32h ^> 24s */ | ||
163 | &&conv_1234_9234, /* 32h ^> 32h */ | ||
164 | &&conv_1234_4329, /* 32h ^> 32s */ | ||
165 | &&conv_1234_xxx4, /* 32s -> 8h */ | ||
166 | &&conv_1234_xxx4, /* 32s -> 8s */ | ||
167 | &&conv_1234_xx43, /* 32s -> 16h */ | ||
168 | &&conv_1234_xx34, /* 32s -> 16s */ | ||
169 | &&conv_1234_x432, /* 32s -> 24h */ | ||
170 | &&conv_1234_234x, /* 32s -> 24s */ | ||
171 | &&conv_1234_4321, /* 32s -> 32h */ | ||
172 | &&conv_1234_1234, /* 32s -> 32s */ | ||
173 | &&conv_1234_xxxC, /* 32s ^> 8h */ | ||
174 | &&conv_1234_xxxC, /* 32s ^> 8s */ | ||
175 | &&conv_1234_xxC3, /* 32s ^> 16h */ | ||
176 | &&conv_1234_xx3C, /* 32s ^> 16s */ | ||
177 | &&conv_1234_xC32, /* 32s ^> 24h */ | ||
178 | &&conv_1234_23Cx, /* 32s ^> 24s */ | ||
179 | &&conv_1234_C321, /* 32s ^> 32h */ | ||
180 | &&conv_1234_123C, /* 32s ^> 32s */ | ||
181 | }; | ||
182 | #endif | ||
183 | |||
184 | #ifdef CONV_END | ||
185 | while(0) { | ||
186 | conv_xxx1_xxx1: as_u8(dst) = as_u8(src); goto CONV_END; | ||
187 | conv_xxx1_xx10: as_u16(dst) = (u_int16_t)as_u8(src) << 8; goto CONV_END; | ||
188 | conv_xxx1_xx01: as_u16(dst) = (u_int16_t)as_u8(src); goto CONV_END; | ||
189 | conv_xxx1_x100: as_u32(dst) = (u_int32_t)as_u8(src) << 16; goto CONV_END; | ||
190 | conv_xxx1_001x: as_u32(dst) = (u_int32_t)as_u8(src) << 8; goto CONV_END; | ||
191 | conv_xxx1_1000: as_u32(dst) = (u_int32_t)as_u8(src) << 24; goto CONV_END; | ||
192 | conv_xxx1_0001: as_u32(dst) = (u_int32_t)as_u8(src); goto CONV_END; | ||
193 | conv_xxx1_xxx9: as_u8(dst) = as_u8(src) ^ 0x80; goto CONV_END; | ||
194 | conv_xxx1_xx90: as_u16(dst) = (u_int16_t)(as_u8(src) ^ 0x80) << 8; goto CONV_END; | ||
195 | conv_xxx1_xx09: as_u16(dst) = (u_int16_t)(as_u8(src) ^ 0x80); goto CONV_END; | ||
196 | conv_xxx1_x900: as_u32(dst) = (u_int32_t)(as_u8(src) ^ 0x80) << 16; goto CONV_END; | ||
197 | conv_xxx1_009x: as_u32(dst) = (u_int32_t)(as_u8(src) ^ 0x80) << 8; goto CONV_END; | ||
198 | conv_xxx1_9000: as_u32(dst) = (u_int32_t)(as_u8(src) ^ 0x80) << 24; goto CONV_END; | ||
199 | conv_xxx1_0009: as_u32(dst) = (u_int32_t)(as_u8(src) ^ 0x80); goto CONV_END; | ||
200 | conv_xx12_xxx1: as_u8(dst) = as_u16(src) >> 8; goto CONV_END; | ||
201 | conv_xx12_xx12: as_u16(dst) = as_u16(src); goto CONV_END; | ||
202 | conv_xx12_xx21: as_u16(dst) = swab16(as_u16(src)); goto CONV_END; | ||
203 | conv_xx12_x120: as_u32(dst) = (u_int32_t)as_u16(src) << 8; goto CONV_END; | ||
204 | conv_xx12_021x: as_u32(dst) = (u_int32_t)swab16(as_u16(src)) << 8; goto CONV_END; | ||
205 | conv_xx12_1200: as_u32(dst) = (u_int32_t)as_u16(src) << 16; goto CONV_END; | ||
206 | conv_xx12_0021: as_u32(dst) = (u_int32_t)swab16(as_u16(src)); goto CONV_END; | ||
207 | conv_xx12_xxx9: as_u8(dst) = (as_u16(src) >> 8) ^ 0x80; goto CONV_END; | ||
208 | conv_xx12_xx92: as_u16(dst) = as_u16(src) ^ 0x8000; goto CONV_END; | ||
209 | conv_xx12_xx29: as_u16(dst) = swab16(as_u16(src)) ^ 0x80; goto CONV_END; | ||
210 | conv_xx12_x920: as_u32(dst) = (u_int32_t)(as_u16(src) ^ 0x8000) << 8; goto CONV_END; | ||
211 | conv_xx12_029x: as_u32(dst) = (u_int32_t)(swab16(as_u16(src)) ^ 0x80) << 8; goto CONV_END; | ||
212 | conv_xx12_9200: as_u32(dst) = (u_int32_t)(as_u16(src) ^ 0x8000) << 16; goto CONV_END; | ||
213 | conv_xx12_0029: as_u32(dst) = (u_int32_t)(swab16(as_u16(src)) ^ 0x80); goto CONV_END; | ||
214 | conv_xx12_xxx2: as_u8(dst) = as_u16(src) & 0xff; goto CONV_END; | ||
215 | conv_xx12_x210: as_u32(dst) = (u_int32_t)swab16(as_u16(src)) << 8; goto CONV_END; | ||
216 | conv_xx12_012x: as_u32(dst) = (u_int32_t)as_u16(src) << 8; goto CONV_END; | ||
217 | conv_xx12_2100: as_u32(dst) = (u_int32_t)swab16(as_u16(src)) << 16; goto CONV_END; | ||
218 | conv_xx12_0012: as_u32(dst) = (u_int32_t)as_u16(src); goto CONV_END; | ||
219 | conv_xx12_xxxA: as_u8(dst) = (as_u16(src) ^ 0x80) & 0xff; goto CONV_END; | ||
220 | conv_xx12_xxA1: as_u16(dst) = swab16(as_u16(src) ^ 0x80); goto CONV_END; | ||
221 | conv_xx12_xx1A: as_u16(dst) = as_u16(src) ^ 0x80; goto CONV_END; | ||
222 | conv_xx12_xA10: as_u32(dst) = (u_int32_t)swab16(as_u16(src) ^ 0x80) << 8; goto CONV_END; | ||
223 | conv_xx12_01Ax: as_u32(dst) = (u_int32_t)(as_u16(src) ^ 0x80) << 8; goto CONV_END; | ||
224 | conv_xx12_A100: as_u32(dst) = (u_int32_t)swab16(as_u16(src) ^ 0x80) << 16; goto CONV_END; | ||
225 | conv_xx12_001A: as_u32(dst) = (u_int32_t)(as_u16(src) ^ 0x80); goto CONV_END; | ||
226 | conv_x123_xxx1: as_u8(dst) = as_u32(src) >> 16; goto CONV_END; | ||
227 | conv_x123_xx12: as_u16(dst) = as_u32(src) >> 8; goto CONV_END; | ||
228 | conv_x123_xx21: as_u16(dst) = swab16(as_u32(src) >> 8); goto CONV_END; | ||
229 | conv_x123_x123: as_u32(dst) = as_u32(src); goto CONV_END; | ||
230 | conv_x123_321x: as_u32(dst) = swab32(as_u32(src)); goto CONV_END; | ||
231 | conv_x123_1230: as_u32(dst) = as_u32(src) << 8; goto CONV_END; | ||
232 | conv_x123_0321: as_u32(dst) = swab32(as_u32(src)) >> 8; goto CONV_END; | ||
233 | conv_x123_xxx9: as_u8(dst) = (as_u32(src) >> 16) ^ 0x80; goto CONV_END; | ||
234 | conv_x123_xx92: as_u16(dst) = (as_u32(src) >> 8) ^ 0x8000; goto CONV_END; | ||
235 | conv_x123_xx29: as_u16(dst) = swab16(as_u32(src) >> 8) ^ 0x80; goto CONV_END; | ||
236 | conv_x123_x923: as_u32(dst) = as_u32(src) ^ 0x800000; goto CONV_END; | ||
237 | conv_x123_329x: as_u32(dst) = swab32(as_u32(src)) ^ 0x8000; goto CONV_END; | ||
238 | conv_x123_9230: as_u32(dst) = (as_u32(src) ^ 0x800000) << 8; goto CONV_END; | ||
239 | conv_x123_0329: as_u32(dst) = (swab32(as_u32(src)) >> 8) ^ 0x80; goto CONV_END; | ||
240 | conv_123x_xxx3: as_u8(dst) = (as_u32(src) >> 8) & 0xff; goto CONV_END; | ||
241 | conv_123x_xx32: as_u16(dst) = swab16(as_u32(src) >> 8); goto CONV_END; | ||
242 | conv_123x_xx23: as_u16(dst) = (as_u32(src) >> 8) & 0xffff; goto CONV_END; | ||
243 | conv_123x_x321: as_u32(dst) = swab32(as_u32(src)); goto CONV_END; | ||
244 | conv_123x_123x: as_u32(dst) = as_u32(src); goto CONV_END; | ||
245 | conv_123x_3210: as_u32(dst) = swab32(as_u32(src)) << 8; goto CONV_END; | ||
246 | conv_123x_0123: as_u32(dst) = as_u32(src) >> 8; goto CONV_END; | ||
247 | conv_123x_xxxB: as_u8(dst) = ((as_u32(src) >> 8) & 0xff) ^ 0x80; goto CONV_END; | ||
248 | conv_123x_xxB2: as_u16(dst) = swab16((as_u32(src) >> 8) ^ 0x80); goto CONV_END; | ||
249 | conv_123x_xx2B: as_u16(dst) = ((as_u32(src) >> 8) & 0xffff) ^ 0x80; goto CONV_END; | ||
250 | conv_123x_xB21: as_u32(dst) = swab32(as_u32(src)) ^ 0x800000; goto CONV_END; | ||
251 | conv_123x_12Bx: as_u32(dst) = as_u32(src) ^ 0x8000; goto CONV_END; | ||
252 | conv_123x_B210: as_u32(dst) = swab32(as_u32(src) ^ 0x8000) << 8; goto CONV_END; | ||
253 | conv_123x_012B: as_u32(dst) = (as_u32(src) >> 8) ^ 0x80; goto CONV_END; | ||
254 | conv_1234_xxx1: as_u8(dst) = as_u32(src) >> 24; goto CONV_END; | ||
255 | conv_1234_xx12: as_u16(dst) = as_u32(src) >> 16; goto CONV_END; | ||
256 | conv_1234_xx21: as_u16(dst) = swab16(as_u32(src) >> 16); goto CONV_END; | ||
257 | conv_1234_x123: as_u32(dst) = as_u32(src) >> 8; goto CONV_END; | ||
258 | conv_1234_321x: as_u32(dst) = swab32(as_u32(src)) << 8; goto CONV_END; | ||
259 | conv_1234_1234: as_u32(dst) = as_u32(src); goto CONV_END; | ||
260 | conv_1234_4321: as_u32(dst) = swab32(as_u32(src)); goto CONV_END; | ||
261 | conv_1234_xxx9: as_u8(dst) = (as_u32(src) >> 24) ^ 0x80; goto CONV_END; | ||
262 | conv_1234_xx92: as_u16(dst) = (as_u32(src) >> 16) ^ 0x8000; goto CONV_END; | ||
263 | conv_1234_xx29: as_u16(dst) = swab16(as_u32(src) >> 16) ^ 0x80; goto CONV_END; | ||
264 | conv_1234_x923: as_u32(dst) = (as_u32(src) >> 8) ^ 0x800000; goto CONV_END; | ||
265 | conv_1234_329x: as_u32(dst) = (swab32(as_u32(src)) ^ 0x80) << 8; goto CONV_END; | ||
266 | conv_1234_9234: as_u32(dst) = as_u32(src) ^ 0x80000000; goto CONV_END; | ||
267 | conv_1234_4329: as_u32(dst) = swab32(as_u32(src)) ^ 0x80; goto CONV_END; | ||
268 | conv_1234_xxx4: as_u8(dst) = as_u32(src) & 0xff; goto CONV_END; | ||
269 | conv_1234_xx43: as_u16(dst) = swab16(as_u32(src)); goto CONV_END; | ||
270 | conv_1234_xx34: as_u16(dst) = as_u32(src) & 0xffff; goto CONV_END; | ||
271 | conv_1234_x432: as_u32(dst) = swab32(as_u32(src)) >> 8; goto CONV_END; | ||
272 | conv_1234_234x: as_u32(dst) = as_u32(src) << 8; goto CONV_END; | ||
273 | conv_1234_xxxC: as_u8(dst) = (as_u32(src) & 0xff) ^ 0x80; goto CONV_END; | ||
274 | conv_1234_xxC3: as_u16(dst) = swab16(as_u32(src) ^ 0x80); goto CONV_END; | ||
275 | conv_1234_xx3C: as_u16(dst) = (as_u32(src) & 0xffff) ^ 0x80; goto CONV_END; | ||
276 | conv_1234_xC32: as_u32(dst) = (swab32(as_u32(src)) >> 8) ^ 0x800000; goto CONV_END; | ||
277 | conv_1234_23Cx: as_u32(dst) = (as_u32(src) ^ 0x80) << 8; goto CONV_END; | ||
278 | conv_1234_C321: as_u32(dst) = swab32(as_u32(src) ^ 0x80); goto CONV_END; | ||
279 | conv_1234_123C: as_u32(dst) = as_u32(src) ^ 0x80; goto CONV_END; | ||
280 | } | ||
281 | #endif | ||
282 | |||
283 | #ifdef GET_S16_LABELS | ||
284 | /* src_wid src_endswap unsigned */ | ||
285 | static void *get_s16_labels[4 * 2 * 2] = { | ||
286 | &&get_s16_xxx1_xx10, /* 8h -> 16h */ | ||
287 | &&get_s16_xxx1_xx90, /* 8h ^> 16h */ | ||
288 | &&get_s16_xxx1_xx10, /* 8s -> 16h */ | ||
289 | &&get_s16_xxx1_xx90, /* 8s ^> 16h */ | ||
290 | &&get_s16_xx12_xx12, /* 16h -> 16h */ | ||
291 | &&get_s16_xx12_xx92, /* 16h ^> 16h */ | ||
292 | &&get_s16_xx12_xx21, /* 16s -> 16h */ | ||
293 | &&get_s16_xx12_xxA1, /* 16s ^> 16h */ | ||
294 | &&get_s16_x123_xx12, /* 24h -> 16h */ | ||
295 | &&get_s16_x123_xx92, /* 24h ^> 16h */ | ||
296 | &&get_s16_123x_xx32, /* 24s -> 16h */ | ||
297 | &&get_s16_123x_xxB2, /* 24s ^> 16h */ | ||
298 | &&get_s16_1234_xx12, /* 32h -> 16h */ | ||
299 | &&get_s16_1234_xx92, /* 32h ^> 16h */ | ||
300 | &&get_s16_1234_xx43, /* 32s -> 16h */ | ||
301 | &&get_s16_1234_xxC3, /* 32s ^> 16h */ | ||
302 | }; | ||
303 | #endif | ||
304 | |||
305 | #ifdef GET_S16_END | ||
306 | while(0) { | ||
307 | get_s16_xxx1_xx10: sample = (u_int16_t)as_u8(src) << 8; goto GET_S16_END; | ||
308 | get_s16_xxx1_xx90: sample = (u_int16_t)(as_u8(src) ^ 0x80) << 8; goto GET_S16_END; | ||
309 | get_s16_xx12_xx12: sample = as_u16(src); goto GET_S16_END; | ||
310 | get_s16_xx12_xx92: sample = as_u16(src) ^ 0x8000; goto GET_S16_END; | ||
311 | get_s16_xx12_xx21: sample = swab16(as_u16(src)); goto GET_S16_END; | ||
312 | get_s16_xx12_xxA1: sample = swab16(as_u16(src) ^ 0x80); goto GET_S16_END; | ||
313 | get_s16_x123_xx12: sample = as_u32(src) >> 8; goto GET_S16_END; | ||
314 | get_s16_x123_xx92: sample = (as_u32(src) >> 8) ^ 0x8000; goto GET_S16_END; | ||
315 | get_s16_123x_xx32: sample = swab16(as_u32(src) >> 8); goto GET_S16_END; | ||
316 | get_s16_123x_xxB2: sample = swab16((as_u32(src) >> 8) ^ 0x8000); goto GET_S16_END; | ||
317 | get_s16_1234_xx12: sample = as_u32(src) >> 16; goto GET_S16_END; | ||
318 | get_s16_1234_xx92: sample = (as_u32(src) >> 16) ^ 0x8000; goto GET_S16_END; | ||
319 | get_s16_1234_xx43: sample = swab16(as_u32(src)); goto GET_S16_END; | ||
320 | get_s16_1234_xxC3: sample = swab16(as_u32(src) ^ 0x80); goto GET_S16_END; | ||
321 | } | ||
322 | #endif | ||
323 | |||
324 | #ifdef PUT_S16_LABELS | ||
325 | /* dst_wid dst_endswap unsigned */ | ||
326 | static void *put_s16_labels[4 * 2 * 2] = { | ||
327 | &&put_s16_xx12_xxx1, /* 16h -> 8h */ | ||
328 | &&put_s16_xx12_xxx9, /* 16h ^> 8h */ | ||
329 | &&put_s16_xx12_xxx1, /* 16h -> 8s */ | ||
330 | &&put_s16_xx12_xxx9, /* 16h ^> 8s */ | ||
331 | &&put_s16_xx12_xx12, /* 16h -> 16h */ | ||
332 | &&put_s16_xx12_xx92, /* 16h ^> 16h */ | ||
333 | &&put_s16_xx12_xx21, /* 16h -> 16s */ | ||
334 | &&put_s16_xx12_xx29, /* 16h ^> 16s */ | ||
335 | &&put_s16_xx12_x120, /* 16h -> 24h */ | ||
336 | &&put_s16_xx12_x920, /* 16h ^> 24h */ | ||
337 | &&put_s16_xx12_021x, /* 16h -> 24s */ | ||
338 | &&put_s16_xx12_029x, /* 16h ^> 24s */ | ||
339 | &&put_s16_xx12_1200, /* 16h -> 32h */ | ||
340 | &&put_s16_xx12_9200, /* 16h ^> 32h */ | ||
341 | &&put_s16_xx12_0021, /* 16h -> 32s */ | ||
342 | &&put_s16_xx12_0029, /* 16h ^> 32s */ | ||
343 | }; | ||
344 | #endif | ||
345 | |||
346 | #ifdef PUT_S16_END | ||
347 | while (0) { | ||
348 | put_s16_xx12_xxx1: as_u8(dst) = sample >> 8; goto PUT_S16_END; | ||
349 | put_s16_xx12_xxx9: as_u8(dst) = (sample >> 8) ^ 0x80; goto PUT_S16_END; | ||
350 | put_s16_xx12_xx12: as_u16(dst) = sample; goto PUT_S16_END; | ||
351 | put_s16_xx12_xx92: as_u16(dst) = sample ^ 0x8000; goto PUT_S16_END; | ||
352 | put_s16_xx12_xx21: as_u16(dst) = swab16(sample); goto PUT_S16_END; | ||
353 | put_s16_xx12_xx29: as_u16(dst) = swab16(sample) ^ 0x80; goto PUT_S16_END; | ||
354 | put_s16_xx12_x120: as_u32(dst) = (u_int32_t)sample << 8; goto PUT_S16_END; | ||
355 | put_s16_xx12_x920: as_u32(dst) = (u_int32_t)(sample ^ 0x8000) << 8; goto PUT_S16_END; | ||
356 | put_s16_xx12_021x: as_u32(dst) = (u_int32_t)swab16(sample) << 8; goto PUT_S16_END; | ||
357 | put_s16_xx12_029x: as_u32(dst) = (u_int32_t)(swab16(sample) ^ 0x80) << 8; goto PUT_S16_END; | ||
358 | put_s16_xx12_1200: as_u32(dst) = (u_int32_t)sample << 16; goto PUT_S16_END; | ||
359 | put_s16_xx12_9200: as_u32(dst) = (u_int32_t)(sample ^ 0x8000) << 16; goto PUT_S16_END; | ||
360 | put_s16_xx12_0021: as_u32(dst) = (u_int32_t)swab16(sample); goto PUT_S16_END; | ||
361 | put_s16_xx12_0029: as_u32(dst) = (u_int32_t)swab16(sample) ^ 0x80; goto PUT_S16_END; | ||
362 | } | ||
363 | #endif | ||
364 | |||
365 | #undef as_u8 | ||
366 | #undef as_u16 | ||
367 | #undef as_u32 | ||
368 | #undef as_s8 | ||
369 | #undef as_s16 | ||
370 | #undef as_s32 | ||
diff --git a/sound/core/oss/rate.c b/sound/core/oss/rate.c index 18d8a0f4e816..9eb267913c38 100644 --- a/sound/core/oss/rate.c +++ b/sound/core/oss/rate.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Rate conversion Plug-In | 2 | * Rate conversion Plug-In |
3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz> | 3 | * Copyright (c) 1999 by Jaroslav Kysela <perex@perex.cz> |
4 | * | 4 | * |
5 | * | 5 | * |
6 | * This library is free software; you can redistribute it and/or modify | 6 | * This library is free software; you can redistribute it and/or modify |
@@ -20,9 +20,6 @@ | |||
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <sound/driver.h> | 22 | #include <sound/driver.h> |
23 | |||
24 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
25 | |||
26 | #include <linux/time.h> | 23 | #include <linux/time.h> |
27 | #include <sound/core.h> | 24 | #include <sound/core.h> |
28 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
@@ -340,5 +337,3 @@ int snd_pcm_plugin_build_rate(struct snd_pcm_substream *plug, | |||
340 | *r_plugin = plugin; | 337 | *r_plugin = plugin; |
341 | return 0; | 338 | return 0; |
342 | } | 339 | } |
343 | |||
344 | #endif | ||
diff --git a/sound/core/oss/route.c b/sound/core/oss/route.c index 46917dc0196b..de3ffdeaf7e3 100644 --- a/sound/core/oss/route.c +++ b/sound/core/oss/route.c | |||
@@ -20,9 +20,6 @@ | |||
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <sound/driver.h> | 22 | #include <sound/driver.h> |
23 | |||
24 | #ifdef CONFIG_SND_PCM_OSS_PLUGINS | ||
25 | |||
26 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
27 | #include <linux/time.h> | 24 | #include <linux/time.h> |
28 | #include <sound/core.h> | 25 | #include <sound/core.h> |
@@ -108,5 +105,3 @@ int snd_pcm_plugin_build_route(struct snd_pcm_substream *plug, | |||
108 | *r_plugin = plugin; | 105 | *r_plugin = plugin; |
109 | return 0; | 106 | return 0; |
110 | } | 107 | } |
111 | |||
112 | #endif | ||