summaryrefslogtreecommitdiff
path: root/sys/dev/mulaw.c
diff options
context:
space:
mode:
authorAlexandre Ratchov <ratchov@cvs.openbsd.org>2015-05-11 06:46:23 +0000
committerAlexandre Ratchov <ratchov@cvs.openbsd.org>2015-05-11 06:46:23 +0000
commitcb499c42facd77434ebac9a75c6bd41df9f1ed9d (patch)
treecc19762f9b558b3e3639e919167faf31200d4068 /sys/dev/mulaw.c
parente7adfc42b4982d81907aac13902bddc965027d8d (diff)
Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in user-mode. Yet, no need for every single driver to fiddle with the conversion code as they are done transparently by common MI code. With help from armani and miod, support from mpi ok armani@
Diffstat (limited to 'sys/dev/mulaw.c')
-rw-r--r--sys/dev/mulaw.c415
1 files changed, 11 insertions, 404 deletions
diff --git a/sys/dev/mulaw.c b/sys/dev/mulaw.c
index c2a340c1f68..36477f319e0 100644
--- a/sys/dev/mulaw.c
+++ b/sys/dev/mulaw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mulaw.c,v 1.15 2015/03/14 03:38:46 jsg Exp $ */
+/* $OpenBSD: mulaw.c,v 1.16 2015/05/11 06:46:21 ratchov Exp $ */
/* $NetBSD: mulaw.c,v 1.15 2001/01/18 20:28:20 jdolecek Exp $ */
/*
@@ -212,51 +212,6 @@ static const u_char alawtolin16[256][2] = {
{0x83,0x30}, {0x83,0x10}, {0x83,0x70}, {0x83,0x50},
};
-static const u_char lintoalaw[256] = {
- 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b,
- 0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29,
- 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f,
- 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d,
- 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23,
- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21,
- 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27,
- 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25,
- 0x3a, 0x3a, 0x3b, 0x3b, 0x38, 0x38, 0x39, 0x39,
- 0x3e, 0x3e, 0x3f, 0x3f, 0x3c, 0x3c, 0x3d, 0x3d,
- 0x32, 0x32, 0x33, 0x33, 0x30, 0x30, 0x31, 0x31,
- 0x36, 0x36, 0x37, 0x37, 0x34, 0x34, 0x35, 0x35,
- 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
- 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
- 0x1a, 0x18, 0x1e, 0x1c, 0x12, 0x10, 0x16, 0x14,
- 0x6a, 0x6e, 0x62, 0x66, 0x7a, 0x72, 0x4a, 0x5a,
- 0xd5, 0xc5, 0xf5, 0xfd, 0xe5, 0xe1, 0xed, 0xe9,
- 0x95, 0x97, 0x91, 0x93, 0x9d, 0x9f, 0x99, 0x9b,
- 0x85, 0x84, 0x87, 0x86, 0x81, 0x80, 0x83, 0x82,
- 0x8d, 0x8c, 0x8f, 0x8e, 0x89, 0x88, 0x8b, 0x8a,
- 0xb5, 0xb5, 0xb4, 0xb4, 0xb7, 0xb7, 0xb6, 0xb6,
- 0xb1, 0xb1, 0xb0, 0xb0, 0xb3, 0xb3, 0xb2, 0xb2,
- 0xbd, 0xbd, 0xbc, 0xbc, 0xbf, 0xbf, 0xbe, 0xbe,
- 0xb9, 0xb9, 0xb8, 0xb8, 0xbb, 0xbb, 0xba, 0xba,
- 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4,
- 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6,
- 0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0,
- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
- 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac,
- 0xaf, 0xaf, 0xaf, 0xaf, 0xae, 0xae, 0xae, 0xae,
- 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8,
- 0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa,
-};
-
-void
-mulaw_to_ulinear8(void *v, u_char *p, int cc)
-{
- /* Use the 16 bit table for 8 bits too. */
- while (--cc >= 0) {
- *p = mulawtolin16[*p][0];
- ++p;
- }
-}
-
void
mulaw_to_slinear8(void *v, u_char *p, int cc)
{
@@ -268,116 +223,6 @@ mulaw_to_slinear8(void *v, u_char *p, int cc)
}
void
-mulaw_to_ulinear16_le(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[1] = mulawtolin16[*p][0];
- q[0] = mulawtolin16[*p][1];
- }
-}
-
-void
-mulaw_to_ulinear16_be(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[0] = mulawtolin16[*p][0];
- q[1] = mulawtolin16[*p][1];
- }
-}
-
-void
-mulaw_to_slinear16_le(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[1] = mulawtolin16[*p][0] ^ 0x80;
- q[0] = mulawtolin16[*p][1];
- }
-}
-
-void
-mulaw_to_slinear16_le_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[1] = q[3] = mulawtolin16[*p][0] ^ 0x80;
- q[0] = q[2] = mulawtolin16[*p][1];
- }
-}
-
-void
-mulaw_to_slinear16_be(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[0] = mulawtolin16[*p][0] ^ 0x80;
- q[1] = mulawtolin16[*p][1];
- }
-}
-
-void
-mulaw_to_slinear16_be_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[0] = q[2] = mulawtolin16[*p][0] ^ 0x80;
- q[1] = q[3] = mulawtolin16[*p][1];
- }
-}
-
-void
-slinear16_to_mulaw_le(void *v, u_char* p, int cc)
-{
- u_char *q = p + 1; /* q points higher byte. */
-
- while ((cc-= 2) >= 0) {
- *p++ = lintomulaw[*q ^ 0x80];
- q +=2 ;
- }
-}
-
-void
-ulinear8_to_mulaw(void *v, u_char *p, int cc)
-{
- while (--cc >= 0) {
- *p = lintomulaw[*p];
- ++p;
- }
-}
-
-void
slinear8_to_mulaw(void *v, u_char *p, int cc)
{
while (--cc >= 0) {
@@ -387,263 +232,25 @@ slinear8_to_mulaw(void *v, u_char *p, int cc)
}
void
-alaw_to_ulinear8(void *v, u_char *p, int cc)
-{
- /* Use the 16 bit table for 8 bits too. */
- while (--cc >= 0) {
- *p = alawtolin16[*p][0];
- ++p;
- }
-}
-
-void
-alaw_to_slinear8(void *v, u_char *p, int cc)
-{
- /* Use the 16 bit table for 8 bits too. */
- while (--cc >= 0) {
- *p = alawtolin16[*p][0] ^ 0x80;
- ++p;
- }
-}
-
-void
-alaw_to_ulinear16_le(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[1] = alawtolin16[*p][0];
- q[0] = alawtolin16[*p][1];
- }
-}
-
-void
-alaw_to_ulinear16_be(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[0] = alawtolin16[*p][0];
- q[1] = alawtolin16[*p][1];
- }
-}
-
-void
-alaw_to_slinear16_le(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[1] = alawtolin16[*p][0] ^ 0x80;
- q[0] = alawtolin16[*p][1];
- }
-}
-
-void
-alaw_to_slinear16_be(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc << 1;
- while (--cc >= 0) {
- --p;
- q -= 2;
- q[0] = alawtolin16[*p][0] ^ 0x80;
- q[1] = alawtolin16[*p][1];
- }
-}
-
-void
-ulinear8_to_alaw(void *v, u_char *p, int cc)
-{
- while (--cc >= 0) {
- *p = lintoalaw[*p];
- ++p;
- }
-}
-
-void
-slinear8_to_alaw(void *v, u_char *p, int cc)
-{
- while (--cc >= 0) {
- *p = lintoalaw[*p ^ 0x80];
- ++p;
- }
-}
-
-void
-slinear16_to_alaw_le(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- while ((cc -= 2) >= 0) {
- *p = lintoalaw[q[1] ^ 0x80];
- ++p;
- q += 2;
- }
-}
-
-
-void
-slinear16_to_alaw_be(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- while ((cc -= 2) >= 0) {
- *p = lintoalaw[q[0] ^ 0x80];
- ++p;
- q += 2;
- }
-}
-
-/*
- * same as mulaw_to_ulinear16_le(), plus expand mono to stereo
- */
-void
-mulaw_to_ulinear16_le_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[1] = q[3] = mulawtolin16[*p][0];
- q[0] = q[2] = mulawtolin16[*p][1];
- }
-}
-
-/*
- * same as mulaw_to_ulinear16_be(), plus expand mono to stereo
- */
-void
-mulaw_to_ulinear16_be_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[0] = q[2] = mulawtolin16[*p][0];
- q[1] = q[3] = mulawtolin16[*p][1];
- }
-}
-
-/*
- * same as alaw_to_slinear16_le(), plus expand mono to stereo
- */
-void
-alaw_to_slinear16_le_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[1] = q[3] = alawtolin16[*p][0] ^ 0x80;
- q[0] = q[2] = alawtolin16[*p][1];
- }
-}
-
-/*
- * same as alaw_to_slinear16_be(), plus expand mono to stereo
- */
-void
-alaw_to_slinear16_be_mts(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- p += cc;
- q += cc * 4;
- while (--cc >= 0) {
- --p;
- q -= 4;
- q[0] = q[2] = alawtolin16[*p][0] ^ 0x80;
- q[1] = q[3] = alawtolin16[*p][1];
- }
-}
-
-void
-alaw_to_mulaw(void *v, u_char *p, int cc)
-{
- while (--cc >= 0) {
- *p = lintomulaw[alawtolin16[*p][0]];
- ++p;
- }
-}
-
-void
-mulaw_to_alaw(void *v, u_char *p, int cc)
-{
- while (--cc >= 0) {
- *p = lintoalaw[mulawtolin16[*p][0]];
- ++p;
- }
-}
-
-
-
-void
-slinear16_to_alaw_le_stm(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- while ((cc -= 4) >= 0) {
- *p = lintoalaw[q[1] ^ 0x80];
- ++p;
- q += 4;
- }
-}
-
-
-void
-slinear16_to_alaw_be_stm(void *v, u_char *p, int cc)
-{
- u_char *q = p;
-
- while ((cc -= 4) >= 0) {
- *p = lintoalaw[q[0] ^ 0x80];
- ++p;
- q += 4;
- }
-}
-
-void
-slinear16_to_mulaw_le_stm(void *v, u_char* p, int cc)
+mulaw24_to_slinear24(void *v, u_char *p, int cc)
{
- u_char *q = p;
+ int s, *q = (int *)p;
while ((cc -= 4) >= 0) {
- *p++ = lintomulaw[q[1] ^ 0x80];
- q += 4 ;
+ s = (*q >> 16) & 0xff;
+ *q = (int)((signed char)mulawtolin16[s][0] ^ 0x80) << 16 |
+ (u_int)mulawtolin16[s][1] << 8;
+ q++;
}
}
void
-slinear16_to_mulaw_be_stm(void *v, u_char* p, int cc)
+slinear24_to_mulaw24(void *v, u_char *p, int cc)
{
- u_char *q = p;
+ u_int *q = (u_int *)p;
while ((cc -= 4) >= 0) {
- *p++ = lintomulaw[q[0] ^ 0x80];
- q += 4 ;
+ *q = lintomulaw[((*q >> 16) & 0xff) ^ 0x80] << 16;
+ q++;
}
}