[BACK]Return to mulaw.c CVS log [TXT][DIR] Up to [local] / sys / dev

Annotation of sys/dev/mulaw.c, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: mulaw.c,v 1.13 2007/07/17 08:35:33 jakemsr Exp $ */
        !             2: /*     $NetBSD: mulaw.c,v 1.15 2001/01/18 20:28:20 jdolecek Exp $      */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1991-1993 Regents of the University of California.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  * 3. All advertising materials mentioning features or use of this software
        !            17:  *    must display the following acknowledgement:
        !            18:  *     This product includes software developed by the Computer Systems
        !            19:  *     Engineering Group at Lawrence Berkeley Laboratory.
        !            20:  * 4. Neither the name of the University nor of the Laboratory may be used
        !            21:  *    to endorse or promote products derived from this software without
        !            22:  *    specific prior written permission.
        !            23:  *
        !            24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            34:  * SUCH DAMAGE.
        !            35:  *
        !            36:  */
        !            37:
        !            38: #include <sys/types.h>
        !            39: #include <sys/audioio.h>
        !            40: #include <dev/mulaw.h>
        !            41:
        !            42: /*
        !            43:  * This table converts a (8 bit) mu-law value two a 16 bit value.
        !            44:  * The 16 bits are represented as an array of two bytes for easier access
        !            45:  * to the individual bytes.
        !            46:  */
        !            47: static const u_char mulawtolin16[256][2] = {
        !            48:        {0x02,0x84}, {0x06,0x84}, {0x0a,0x84}, {0x0e,0x84},
        !            49:        {0x12,0x84}, {0x16,0x84}, {0x1a,0x84}, {0x1e,0x84},
        !            50:        {0x22,0x84}, {0x26,0x84}, {0x2a,0x84}, {0x2e,0x84},
        !            51:        {0x32,0x84}, {0x36,0x84}, {0x3a,0x84}, {0x3e,0x84},
        !            52:        {0x41,0x84}, {0x43,0x84}, {0x45,0x84}, {0x47,0x84},
        !            53:        {0x49,0x84}, {0x4b,0x84}, {0x4d,0x84}, {0x4f,0x84},
        !            54:        {0x51,0x84}, {0x53,0x84}, {0x55,0x84}, {0x57,0x84},
        !            55:        {0x59,0x84}, {0x5b,0x84}, {0x5d,0x84}, {0x5f,0x84},
        !            56:        {0x61,0x04}, {0x62,0x04}, {0x63,0x04}, {0x64,0x04},
        !            57:        {0x65,0x04}, {0x66,0x04}, {0x67,0x04}, {0x68,0x04},
        !            58:        {0x69,0x04}, {0x6a,0x04}, {0x6b,0x04}, {0x6c,0x04},
        !            59:        {0x6d,0x04}, {0x6e,0x04}, {0x6f,0x04}, {0x70,0x04},
        !            60:        {0x70,0xc4}, {0x71,0x44}, {0x71,0xc4}, {0x72,0x44},
        !            61:        {0x72,0xc4}, {0x73,0x44}, {0x73,0xc4}, {0x74,0x44},
        !            62:        {0x74,0xc4}, {0x75,0x44}, {0x75,0xc4}, {0x76,0x44},
        !            63:        {0x76,0xc4}, {0x77,0x44}, {0x77,0xc4}, {0x78,0x44},
        !            64:        {0x78,0xa4}, {0x78,0xe4}, {0x79,0x24}, {0x79,0x64},
        !            65:        {0x79,0xa4}, {0x79,0xe4}, {0x7a,0x24}, {0x7a,0x64},
        !            66:        {0x7a,0xa4}, {0x7a,0xe4}, {0x7b,0x24}, {0x7b,0x64},
        !            67:        {0x7b,0xa4}, {0x7b,0xe4}, {0x7c,0x24}, {0x7c,0x64},
        !            68:        {0x7c,0x94}, {0x7c,0xb4}, {0x7c,0xd4}, {0x7c,0xf4},
        !            69:        {0x7d,0x14}, {0x7d,0x34}, {0x7d,0x54}, {0x7d,0x74},
        !            70:        {0x7d,0x94}, {0x7d,0xb4}, {0x7d,0xd4}, {0x7d,0xf4},
        !            71:        {0x7e,0x14}, {0x7e,0x34}, {0x7e,0x54}, {0x7e,0x74},
        !            72:        {0x7e,0x8c}, {0x7e,0x9c}, {0x7e,0xac}, {0x7e,0xbc},
        !            73:        {0x7e,0xcc}, {0x7e,0xdc}, {0x7e,0xec}, {0x7e,0xfc},
        !            74:        {0x7f,0x0c}, {0x7f,0x1c}, {0x7f,0x2c}, {0x7f,0x3c},
        !            75:        {0x7f,0x4c}, {0x7f,0x5c}, {0x7f,0x6c}, {0x7f,0x7c},
        !            76:        {0x7f,0x88}, {0x7f,0x90}, {0x7f,0x98}, {0x7f,0xa0},
        !            77:        {0x7f,0xa8}, {0x7f,0xb0}, {0x7f,0xb8}, {0x7f,0xc0},
        !            78:        {0x7f,0xc8}, {0x7f,0xd0}, {0x7f,0xd8}, {0x7f,0xe0},
        !            79:        {0x7f,0xe8}, {0x7f,0xf0}, {0x7f,0xf8}, {0x80,0x00},
        !            80:        {0xfd,0x7c}, {0xf9,0x7c}, {0xf5,0x7c}, {0xf1,0x7c},
        !            81:        {0xed,0x7c}, {0xe9,0x7c}, {0xe5,0x7c}, {0xe1,0x7c},
        !            82:        {0xdd,0x7c}, {0xd9,0x7c}, {0xd5,0x7c}, {0xd1,0x7c},
        !            83:        {0xcd,0x7c}, {0xc9,0x7c}, {0xc5,0x7c}, {0xc1,0x7c},
        !            84:        {0xbe,0x7c}, {0xbc,0x7c}, {0xba,0x7c}, {0xb8,0x7c},
        !            85:        {0xb6,0x7c}, {0xb4,0x7c}, {0xb2,0x7c}, {0xb0,0x7c},
        !            86:        {0xae,0x7c}, {0xac,0x7c}, {0xaa,0x7c}, {0xa8,0x7c},
        !            87:        {0xa6,0x7c}, {0xa4,0x7c}, {0xa2,0x7c}, {0xa0,0x7c},
        !            88:        {0x9e,0xfc}, {0x9d,0xfc}, {0x9c,0xfc}, {0x9b,0xfc},
        !            89:        {0x9a,0xfc}, {0x99,0xfc}, {0x98,0xfc}, {0x97,0xfc},
        !            90:        {0x96,0xfc}, {0x95,0xfc}, {0x94,0xfc}, {0x93,0xfc},
        !            91:        {0x92,0xfc}, {0x91,0xfc}, {0x90,0xfc}, {0x8f,0xfc},
        !            92:        {0x8f,0x3c}, {0x8e,0xbc}, {0x8e,0x3c}, {0x8d,0xbc},
        !            93:        {0x8d,0x3c}, {0x8c,0xbc}, {0x8c,0x3c}, {0x8b,0xbc},
        !            94:        {0x8b,0x3c}, {0x8a,0xbc}, {0x8a,0x3c}, {0x89,0xbc},
        !            95:        {0x89,0x3c}, {0x88,0xbc}, {0x88,0x3c}, {0x87,0xbc},
        !            96:        {0x87,0x5c}, {0x87,0x1c}, {0x86,0xdc}, {0x86,0x9c},
        !            97:        {0x86,0x5c}, {0x86,0x1c}, {0x85,0xdc}, {0x85,0x9c},
        !            98:        {0x85,0x5c}, {0x85,0x1c}, {0x84,0xdc}, {0x84,0x9c},
        !            99:        {0x84,0x5c}, {0x84,0x1c}, {0x83,0xdc}, {0x83,0x9c},
        !           100:        {0x83,0x6c}, {0x83,0x4c}, {0x83,0x2c}, {0x83,0x0c},
        !           101:        {0x82,0xec}, {0x82,0xcc}, {0x82,0xac}, {0x82,0x8c},
        !           102:        {0x82,0x6c}, {0x82,0x4c}, {0x82,0x2c}, {0x82,0x0c},
        !           103:        {0x81,0xec}, {0x81,0xcc}, {0x81,0xac}, {0x81,0x8c},
        !           104:        {0x81,0x74}, {0x81,0x64}, {0x81,0x54}, {0x81,0x44},
        !           105:        {0x81,0x34}, {0x81,0x24}, {0x81,0x14}, {0x81,0x04},
        !           106:        {0x80,0xf4}, {0x80,0xe4}, {0x80,0xd4}, {0x80,0xc4},
        !           107:        {0x80,0xb4}, {0x80,0xa4}, {0x80,0x94}, {0x80,0x84},
        !           108:        {0x80,0x78}, {0x80,0x70}, {0x80,0x68}, {0x80,0x60},
        !           109:        {0x80,0x58}, {0x80,0x50}, {0x80,0x48}, {0x80,0x40},
        !           110:        {0x80,0x38}, {0x80,0x30}, {0x80,0x28}, {0x80,0x20},
        !           111:        {0x80,0x18}, {0x80,0x10}, {0x80,0x08}, {0x80,0x00},
        !           112: };
        !           113:
        !           114: static const u_char lintomulaw[256] = {
        !           115:        0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
        !           116:        0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
        !           117:        0x03, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
        !           118:        0x05, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
        !           119:        0x07, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
        !           120:        0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
        !           121:        0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d,
        !           122:        0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f,
        !           123:        0x0f, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x13,
        !           124:        0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16, 0x17,
        !           125:        0x17, 0x18, 0x18, 0x19, 0x19, 0x1a, 0x1a, 0x1b,
        !           126:        0x1b, 0x1c, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f,
        !           127:        0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
        !           128:        0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e,
        !           129:        0x2f, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c,
        !           130:        0x3e, 0x41, 0x45, 0x49, 0x4d, 0x53, 0x5b, 0x67,
        !           131:        0xff, 0xe7, 0xdb, 0xd3, 0xcd, 0xc9, 0xc5, 0xc1,
        !           132:        0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,
        !           133:        0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8,
        !           134:        0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0,
        !           135:        0x9f, 0x9f, 0x9e, 0x9e, 0x9d, 0x9d, 0x9c, 0x9c,
        !           136:        0x9b, 0x9b, 0x9a, 0x9a, 0x99, 0x99, 0x98, 0x98,
        !           137:        0x97, 0x97, 0x96, 0x96, 0x95, 0x95, 0x94, 0x94,
        !           138:        0x93, 0x93, 0x92, 0x92, 0x91, 0x91, 0x90, 0x90,
        !           139:        0x8f, 0x8f, 0x8f, 0x8f, 0x8e, 0x8e, 0x8e, 0x8e,
        !           140:        0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c,
        !           141:        0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a,
        !           142:        0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
        !           143:        0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86,
        !           144:        0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
        !           145:        0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
        !           146:        0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80,
        !           147: };
        !           148:
        !           149: static const u_char alawtolin16[256][2] = {
        !           150:        {0x6a,0x80}, {0x6b,0x80}, {0x68,0x80}, {0x69,0x80},
        !           151:        {0x6e,0x80}, {0x6f,0x80}, {0x6c,0x80}, {0x6d,0x80},
        !           152:        {0x62,0x80}, {0x63,0x80}, {0x60,0x80}, {0x61,0x80},
        !           153:        {0x66,0x80}, {0x67,0x80}, {0x64,0x80}, {0x65,0x80},
        !           154:        {0x75,0x40}, {0x75,0xc0}, {0x74,0x40}, {0x74,0xc0},
        !           155:        {0x77,0x40}, {0x77,0xc0}, {0x76,0x40}, {0x76,0xc0},
        !           156:        {0x71,0x40}, {0x71,0xc0}, {0x70,0x40}, {0x70,0xc0},
        !           157:        {0x73,0x40}, {0x73,0xc0}, {0x72,0x40}, {0x72,0xc0},
        !           158:        {0x2a,0x00}, {0x2e,0x00}, {0x22,0x00}, {0x26,0x00},
        !           159:        {0x3a,0x00}, {0x3e,0x00}, {0x32,0x00}, {0x36,0x00},
        !           160:        {0x0a,0x00}, {0x0e,0x00}, {0x02,0x00}, {0x06,0x00},
        !           161:        {0x1a,0x00}, {0x1e,0x00}, {0x12,0x00}, {0x16,0x00},
        !           162:        {0x55,0x00}, {0x57,0x00}, {0x51,0x00}, {0x53,0x00},
        !           163:        {0x5d,0x00}, {0x5f,0x00}, {0x59,0x00}, {0x5b,0x00},
        !           164:        {0x45,0x00}, {0x47,0x00}, {0x41,0x00}, {0x43,0x00},
        !           165:        {0x4d,0x00}, {0x4f,0x00}, {0x49,0x00}, {0x4b,0x00},
        !           166:        {0x7e,0xa8}, {0x7e,0xb8}, {0x7e,0x88}, {0x7e,0x98},
        !           167:        {0x7e,0xe8}, {0x7e,0xf8}, {0x7e,0xc8}, {0x7e,0xd8},
        !           168:        {0x7e,0x28}, {0x7e,0x38}, {0x7e,0x08}, {0x7e,0x18},
        !           169:        {0x7e,0x68}, {0x7e,0x78}, {0x7e,0x48}, {0x7e,0x58},
        !           170:        {0x7f,0xa8}, {0x7f,0xb8}, {0x7f,0x88}, {0x7f,0x98},
        !           171:        {0x7f,0xe8}, {0x7f,0xf8}, {0x7f,0xc8}, {0x7f,0xd8},
        !           172:        {0x7f,0x28}, {0x7f,0x38}, {0x7f,0x08}, {0x7f,0x18},
        !           173:        {0x7f,0x68}, {0x7f,0x78}, {0x7f,0x48}, {0x7f,0x58},
        !           174:        {0x7a,0xa0}, {0x7a,0xe0}, {0x7a,0x20}, {0x7a,0x60},
        !           175:        {0x7b,0xa0}, {0x7b,0xe0}, {0x7b,0x20}, {0x7b,0x60},
        !           176:        {0x78,0xa0}, {0x78,0xe0}, {0x78,0x20}, {0x78,0x60},
        !           177:        {0x79,0xa0}, {0x79,0xe0}, {0x79,0x20}, {0x79,0x60},
        !           178:        {0x7d,0x50}, {0x7d,0x70}, {0x7d,0x10}, {0x7d,0x30},
        !           179:        {0x7d,0xd0}, {0x7d,0xf0}, {0x7d,0x90}, {0x7d,0xb0},
        !           180:        {0x7c,0x50}, {0x7c,0x70}, {0x7c,0x10}, {0x7c,0x30},
        !           181:        {0x7c,0xd0}, {0x7c,0xf0}, {0x7c,0x90}, {0x7c,0xb0},
        !           182:        {0x95,0x80}, {0x94,0x80}, {0x97,0x80}, {0x96,0x80},
        !           183:        {0x91,0x80}, {0x90,0x80}, {0x93,0x80}, {0x92,0x80},
        !           184:        {0x9d,0x80}, {0x9c,0x80}, {0x9f,0x80}, {0x9e,0x80},
        !           185:        {0x99,0x80}, {0x98,0x80}, {0x9b,0x80}, {0x9a,0x80},
        !           186:        {0x8a,0xc0}, {0x8a,0x40}, {0x8b,0xc0}, {0x8b,0x40},
        !           187:        {0x88,0xc0}, {0x88,0x40}, {0x89,0xc0}, {0x89,0x40},
        !           188:        {0x8e,0xc0}, {0x8e,0x40}, {0x8f,0xc0}, {0x8f,0x40},
        !           189:        {0x8c,0xc0}, {0x8c,0x40}, {0x8d,0xc0}, {0x8d,0x40},
        !           190:        {0xd6,0x00}, {0xd2,0x00}, {0xde,0x00}, {0xda,0x00},
        !           191:        {0xc6,0x00}, {0xc2,0x00}, {0xce,0x00}, {0xca,0x00},
        !           192:        {0xf6,0x00}, {0xf2,0x00}, {0xfe,0x00}, {0xfa,0x00},
        !           193:        {0xe6,0x00}, {0xe2,0x00}, {0xee,0x00}, {0xea,0x00},
        !           194:        {0xab,0x00}, {0xa9,0x00}, {0xaf,0x00}, {0xad,0x00},
        !           195:        {0xa3,0x00}, {0xa1,0x00}, {0xa7,0x00}, {0xa5,0x00},
        !           196:        {0xbb,0x00}, {0xb9,0x00}, {0xbf,0x00}, {0xbd,0x00},
        !           197:        {0xb3,0x00}, {0xb1,0x00}, {0xb7,0x00}, {0xb5,0x00},
        !           198:        {0x81,0x58}, {0x81,0x48}, {0x81,0x78}, {0x81,0x68},
        !           199:        {0x81,0x18}, {0x81,0x08}, {0x81,0x38}, {0x81,0x28},
        !           200:        {0x81,0xd8}, {0x81,0xc8}, {0x81,0xf8}, {0x81,0xe8},
        !           201:        {0x81,0x98}, {0x81,0x88}, {0x81,0xb8}, {0x81,0xa8},
        !           202:        {0x80,0x58}, {0x80,0x48}, {0x80,0x78}, {0x80,0x68},
        !           203:        {0x80,0x18}, {0x80,0x08}, {0x80,0x38}, {0x80,0x28},
        !           204:        {0x80,0xd8}, {0x80,0xc8}, {0x80,0xf8}, {0x80,0xe8},
        !           205:        {0x80,0x98}, {0x80,0x88}, {0x80,0xb8}, {0x80,0xa8},
        !           206:        {0x85,0x60}, {0x85,0x20}, {0x85,0xe0}, {0x85,0xa0},
        !           207:        {0x84,0x60}, {0x84,0x20}, {0x84,0xe0}, {0x84,0xa0},
        !           208:        {0x87,0x60}, {0x87,0x20}, {0x87,0xe0}, {0x87,0xa0},
        !           209:        {0x86,0x60}, {0x86,0x20}, {0x86,0xe0}, {0x86,0xa0},
        !           210:        {0x82,0xb0}, {0x82,0x90}, {0x82,0xf0}, {0x82,0xd0},
        !           211:        {0x82,0x30}, {0x82,0x10}, {0x82,0x70}, {0x82,0x50},
        !           212:        {0x83,0xb0}, {0x83,0x90}, {0x83,0xf0}, {0x83,0xd0},
        !           213:        {0x83,0x30}, {0x83,0x10}, {0x83,0x70}, {0x83,0x50},
        !           214: };
        !           215:
        !           216: static const u_char lintoalaw[256] = {
        !           217:        0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b,
        !           218:        0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29,
        !           219:        0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f,
        !           220:        0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d,
        !           221:        0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23,
        !           222:        0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21,
        !           223:        0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27,
        !           224:        0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25,
        !           225:        0x3a, 0x3a, 0x3b, 0x3b, 0x38, 0x38, 0x39, 0x39,
        !           226:        0x3e, 0x3e, 0x3f, 0x3f, 0x3c, 0x3c, 0x3d, 0x3d,
        !           227:        0x32, 0x32, 0x33, 0x33, 0x30, 0x30, 0x31, 0x31,
        !           228:        0x36, 0x36, 0x37, 0x37, 0x34, 0x34, 0x35, 0x35,
        !           229:        0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
        !           230:        0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
        !           231:        0x1a, 0x18, 0x1e, 0x1c, 0x12, 0x10, 0x16, 0x14,
        !           232:        0x6a, 0x6e, 0x62, 0x66, 0x7a, 0x72, 0x4a, 0x5a,
        !           233:        0xd5, 0xc5, 0xf5, 0xfd, 0xe5, 0xe1, 0xed, 0xe9,
        !           234:        0x95, 0x97, 0x91, 0x93, 0x9d, 0x9f, 0x99, 0x9b,
        !           235:        0x85, 0x84, 0x87, 0x86, 0x81, 0x80, 0x83, 0x82,
        !           236:        0x8d, 0x8c, 0x8f, 0x8e, 0x89, 0x88, 0x8b, 0x8a,
        !           237:        0xb5, 0xb5, 0xb4, 0xb4, 0xb7, 0xb7, 0xb6, 0xb6,
        !           238:        0xb1, 0xb1, 0xb0, 0xb0, 0xb3, 0xb3, 0xb2, 0xb2,
        !           239:        0xbd, 0xbd, 0xbc, 0xbc, 0xbf, 0xbf, 0xbe, 0xbe,
        !           240:        0xb9, 0xb9, 0xb8, 0xb8, 0xbb, 0xbb, 0xba, 0xba,
        !           241:        0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4,
        !           242:        0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6,
        !           243:        0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0,
        !           244:        0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
        !           245:        0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac,
        !           246:        0xaf, 0xaf, 0xaf, 0xaf, 0xae, 0xae, 0xae, 0xae,
        !           247:        0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8,
        !           248:        0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa,
        !           249: };
        !           250:
        !           251: void
        !           252: mulaw_to_ulinear8(void *v, u_char *p, int cc)
        !           253: {
        !           254:        /* Use the 16 bit table for 8 bits too. */
        !           255:        while (--cc >= 0) {
        !           256:                *p = mulawtolin16[*p][0];
        !           257:                ++p;
        !           258:        }
        !           259: }
        !           260:
        !           261: void
        !           262: mulaw_to_slinear8(void *v, u_char *p, int cc)
        !           263: {
        !           264:        /* Use the 16 bit table for 8 bits too. */
        !           265:        while (--cc >= 0) {
        !           266:                *p = mulawtolin16[*p][0] ^ 0x80;
        !           267:                ++p;
        !           268:        }
        !           269: }
        !           270:
        !           271: void
        !           272: mulaw_to_ulinear16_le(void *v, u_char *p, int cc)
        !           273: {
        !           274:        u_char *q = p;
        !           275:
        !           276:        p += cc;
        !           277:        q += cc << 1;
        !           278:        while (--cc >= 0) {
        !           279:                --p;
        !           280:                q -= 2;
        !           281:                q[1] = mulawtolin16[*p][0];
        !           282:                q[0] = mulawtolin16[*p][1];
        !           283:        }
        !           284: }
        !           285:
        !           286: void
        !           287: mulaw_to_ulinear16_be(void *v, u_char *p, int cc)
        !           288: {
        !           289:        u_char *q = p;
        !           290:
        !           291:        p += cc;
        !           292:        q += cc << 1;
        !           293:        while (--cc >= 0) {
        !           294:                --p;
        !           295:                q -= 2;
        !           296:                q[0] = mulawtolin16[*p][0];
        !           297:                q[1] = mulawtolin16[*p][1];
        !           298:        }
        !           299: }
        !           300:
        !           301: void
        !           302: mulaw_to_slinear16_le(void *v, u_char *p, int cc)
        !           303: {
        !           304:        u_char *q = p;
        !           305:
        !           306:        p += cc;
        !           307:        q += cc << 1;
        !           308:        while (--cc >= 0) {
        !           309:                --p;
        !           310:                q -= 2;
        !           311:                q[1] = mulawtolin16[*p][0] ^ 0x80;
        !           312:                q[0] = mulawtolin16[*p][1];
        !           313:        }
        !           314: }
        !           315:
        !           316: void
        !           317: mulaw_to_slinear16_le_mts(void *v, u_char *p, int cc)
        !           318: {
        !           319:        u_char *q = p;
        !           320:
        !           321:        p += cc;
        !           322:        q += cc * 4;
        !           323:        while (--cc >= 0) {
        !           324:                --p;
        !           325:                q -= 4;
        !           326:                q[1] = q[3] = mulawtolin16[*p][0] ^ 0x80;
        !           327:                q[0] = q[2] = mulawtolin16[*p][1];
        !           328:        }
        !           329: }
        !           330:
        !           331: void
        !           332: mulaw_to_slinear16_be(void *v, u_char *p, int cc)
        !           333: {
        !           334:        u_char *q = p;
        !           335:
        !           336:        p += cc;
        !           337:        q += cc << 1;
        !           338:        while (--cc >= 0) {
        !           339:                --p;
        !           340:                q -= 2;
        !           341:                q[0] = mulawtolin16[*p][0] ^ 0x80;
        !           342:                q[1] = mulawtolin16[*p][1];
        !           343:        }
        !           344: }
        !           345:
        !           346: void
        !           347: mulaw_to_slinear16_be_mts(void *v, u_char *p, int cc)
        !           348: {
        !           349:        u_char *q = p;
        !           350:
        !           351:        p += cc;
        !           352:        q += cc * 4;
        !           353:        while (--cc >= 0) {
        !           354:                --p;
        !           355:                q -= 4;
        !           356:                q[0] = q[2] = mulawtolin16[*p][0] ^ 0x80;
        !           357:                q[1] = q[3] = mulawtolin16[*p][1];
        !           358:        }
        !           359: }
        !           360:
        !           361: void
        !           362: slinear16_to_mulaw_le(void *v, u_char* p, int cc)
        !           363: {
        !           364:        u_char *q = p + 1;      /* q points higher byte. */
        !           365:
        !           366:        while ((cc-= 2) >= 0) {
        !           367:                *p++ = lintomulaw[*q ^ 0x80];
        !           368:                q +=2 ;
        !           369:        }
        !           370: }
        !           371:
        !           372: void
        !           373: ulinear8_to_mulaw(void *v, u_char *p, int cc)
        !           374: {
        !           375:        while (--cc >= 0) {
        !           376:                *p = lintomulaw[*p];
        !           377:                ++p;
        !           378:        }
        !           379: }
        !           380:
        !           381: void
        !           382: slinear8_to_mulaw(void *v, u_char *p, int cc)
        !           383: {
        !           384:        while (--cc >= 0) {
        !           385:                *p = lintomulaw[*p ^ 0x80];
        !           386:                ++p;
        !           387:        }
        !           388: }
        !           389:
        !           390: void
        !           391: alaw_to_ulinear8(void *v, u_char *p, int cc)
        !           392: {
        !           393:        /* Use the 16 bit table for 8 bits too. */
        !           394:        while (--cc >= 0) {
        !           395:                *p = alawtolin16[*p][0];
        !           396:                ++p;
        !           397:        }
        !           398: }
        !           399:
        !           400: void
        !           401: alaw_to_slinear8(void *v, u_char *p, int cc)
        !           402: {
        !           403:        /* Use the 16 bit table for 8 bits too. */
        !           404:        while (--cc >= 0) {
        !           405:                *p = alawtolin16[*p][0] ^ 0x80;
        !           406:                ++p;
        !           407:        }
        !           408: }
        !           409:
        !           410: void
        !           411: alaw_to_ulinear16_le(void *v, u_char *p, int cc)
        !           412: {
        !           413:        u_char *q = p;
        !           414:
        !           415:        p += cc;
        !           416:        q += cc << 1;
        !           417:        while (--cc >= 0) {
        !           418:                --p;
        !           419:                q -= 2;
        !           420:                q[1] = alawtolin16[*p][0];
        !           421:                q[0] = alawtolin16[*p][1];
        !           422:        }
        !           423: }
        !           424:
        !           425: void
        !           426: alaw_to_ulinear16_be(void *v, u_char *p, int cc)
        !           427: {
        !           428:        u_char *q = p;
        !           429:
        !           430:        p += cc;
        !           431:        q += cc << 1;
        !           432:        while (--cc >= 0) {
        !           433:                --p;
        !           434:                q -= 2;
        !           435:                q[0] = alawtolin16[*p][0];
        !           436:                q[1] = alawtolin16[*p][1];
        !           437:        }
        !           438: }
        !           439:
        !           440: void
        !           441: alaw_to_slinear16_le(void *v, u_char *p, int cc)
        !           442: {
        !           443:        u_char *q = p;
        !           444:
        !           445:        p += cc;
        !           446:        q += cc << 1;
        !           447:        while (--cc >= 0) {
        !           448:                --p;
        !           449:                q -= 2;
        !           450:                q[1] = alawtolin16[*p][0] ^ 0x80;
        !           451:                q[0] = alawtolin16[*p][1];
        !           452:        }
        !           453: }
        !           454:
        !           455: void
        !           456: alaw_to_slinear16_be(void *v, u_char *p, int cc)
        !           457: {
        !           458:        u_char *q = p;
        !           459:
        !           460:        p += cc;
        !           461:        q += cc << 1;
        !           462:        while (--cc >= 0) {
        !           463:                --p;
        !           464:                q -= 2;
        !           465:                q[0] = alawtolin16[*p][0] ^ 0x80;
        !           466:                q[1] = alawtolin16[*p][1];
        !           467:        }
        !           468: }
        !           469:
        !           470: void
        !           471: ulinear8_to_alaw(void *v, u_char *p, int cc)
        !           472: {
        !           473:        while (--cc >= 0) {
        !           474:                *p = lintoalaw[*p];
        !           475:                ++p;
        !           476:        }
        !           477: }
        !           478:
        !           479: void
        !           480: slinear8_to_alaw(void *v, u_char *p, int cc)
        !           481: {
        !           482:        while (--cc >= 0) {
        !           483:                *p = lintoalaw[*p ^ 0x80];
        !           484:                ++p;
        !           485:        }
        !           486: }
        !           487:
        !           488: void
        !           489: slinear16_to_alaw_le(void *v, u_char *p, int cc)
        !           490: {
        !           491:        u_char *q = p;
        !           492:
        !           493:        while ((cc -= 2) >= 0) {
        !           494:                *p = lintoalaw[q[1] ^ 0x80];
        !           495:                ++p;
        !           496:                q += 2;
        !           497:        }
        !           498: }
        !           499:
        !           500:
        !           501: void
        !           502: slinear16_to_alaw_be(void *v, u_char *p, int cc)
        !           503: {
        !           504:        u_char *q = p;
        !           505:
        !           506:        while ((cc -= 2) >= 0) {
        !           507:                *p = lintoalaw[q[0] ^ 0x80];
        !           508:                ++p;
        !           509:                q += 2;
        !           510:        }
        !           511: }
        !           512:
        !           513: /*
        !           514:  * same as mulaw_to_ulinear16_le(), plus expand mono to stereo
        !           515:  */
        !           516: void
        !           517: mulaw_to_ulinear16_le_mts(void *v, u_char *p, int cc)
        !           518: {
        !           519:        u_char *q = p;
        !           520:
        !           521:        p += cc;
        !           522:        q += cc * 4;
        !           523:        while (--cc >= 0) {
        !           524:                --p;
        !           525:                q -= 4;
        !           526:                q[1] = q[3] = mulawtolin16[*p][0];
        !           527:                q[0] = q[2] = mulawtolin16[*p][1];
        !           528:        }
        !           529: }
        !           530:
        !           531: /*
        !           532:  * same as mulaw_to_ulinear16_be(), plus expand mono to stereo
        !           533:  */
        !           534: void
        !           535: mulaw_to_ulinear16_be_mts(void *v, u_char *p, int cc)
        !           536: {
        !           537:        u_char *q = p;
        !           538:
        !           539:        p += cc;
        !           540:        q += cc * 4;
        !           541:        while (--cc >= 0) {
        !           542:                --p;
        !           543:                q -= 4;
        !           544:                q[0] = q[2] = mulawtolin16[*p][0];
        !           545:                q[1] = q[3] = mulawtolin16[*p][1];
        !           546:        }
        !           547: }
        !           548:
        !           549: /*
        !           550:  * same as alaw_to_slinear16_le(), plus expand mono to stereo
        !           551:  */
        !           552: void
        !           553: alaw_to_slinear16_le_mts(void *v, u_char *p, int cc)
        !           554: {
        !           555:        u_char *q = p;
        !           556:
        !           557:        p += cc;
        !           558:        q += cc * 4;
        !           559:        while (--cc >= 0) {
        !           560:                --p;
        !           561:                q -= 4;
        !           562:                q[1] = q[3] = alawtolin16[*p][0] ^ 0x80;
        !           563:                q[0] = q[2] = alawtolin16[*p][1];
        !           564:        }
        !           565: }
        !           566:
        !           567: /*
        !           568:  * same as alaw_to_slinear16_be(), plus expand mono to stereo
        !           569:  */
        !           570: void
        !           571: alaw_to_slinear16_be_mts(void *v, u_char *p, int cc)
        !           572: {
        !           573:        u_char *q = p;
        !           574:
        !           575:        p += cc;
        !           576:        q += cc * 4;
        !           577:        while (--cc >= 0) {
        !           578:                --p;
        !           579:                q -= 4;
        !           580:                q[0] = q[2] = alawtolin16[*p][0] ^ 0x80;
        !           581:                q[1] = q[3] = alawtolin16[*p][1];
        !           582:        }
        !           583: }
        !           584:
        !           585: void
        !           586: alaw_to_mulaw(void *v, u_char *p, int cc)
        !           587: {
        !           588:        while (--cc >= 0) {
        !           589:                *p = lintomulaw[alawtolin16[*p][0]];
        !           590:                ++p;
        !           591:        }
        !           592: }
        !           593:
        !           594: void
        !           595: mulaw_to_alaw(void *v, u_char *p, int cc)
        !           596: {
        !           597:        while (--cc >= 0) {
        !           598:                *p = lintoalaw[mulawtolin16[*p][0]];
        !           599:                ++p;
        !           600:        }
        !           601: }

CVSweb