The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/mulaw.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: mulaw.c,v 1.18 2015/06/25 06:43:46 ratchov 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 <dev/mulaw.h>
   40 
   41 /*
   42  * This table converts a (8 bit) mu-law value two a 16 bit value.
   43  * The 16 bits are represented as an array of two bytes for easier access
   44  * to the individual bytes.
   45  */
   46 static const u_char mulawtolin16[256][2] = {
   47         {0x02,0x84}, {0x06,0x84}, {0x0a,0x84}, {0x0e,0x84},
   48         {0x12,0x84}, {0x16,0x84}, {0x1a,0x84}, {0x1e,0x84},
   49         {0x22,0x84}, {0x26,0x84}, {0x2a,0x84}, {0x2e,0x84},
   50         {0x32,0x84}, {0x36,0x84}, {0x3a,0x84}, {0x3e,0x84},
   51         {0x41,0x84}, {0x43,0x84}, {0x45,0x84}, {0x47,0x84},
   52         {0x49,0x84}, {0x4b,0x84}, {0x4d,0x84}, {0x4f,0x84},
   53         {0x51,0x84}, {0x53,0x84}, {0x55,0x84}, {0x57,0x84},
   54         {0x59,0x84}, {0x5b,0x84}, {0x5d,0x84}, {0x5f,0x84},
   55         {0x61,0x04}, {0x62,0x04}, {0x63,0x04}, {0x64,0x04},
   56         {0x65,0x04}, {0x66,0x04}, {0x67,0x04}, {0x68,0x04},
   57         {0x69,0x04}, {0x6a,0x04}, {0x6b,0x04}, {0x6c,0x04},
   58         {0x6d,0x04}, {0x6e,0x04}, {0x6f,0x04}, {0x70,0x04},
   59         {0x70,0xc4}, {0x71,0x44}, {0x71,0xc4}, {0x72,0x44},
   60         {0x72,0xc4}, {0x73,0x44}, {0x73,0xc4}, {0x74,0x44},
   61         {0x74,0xc4}, {0x75,0x44}, {0x75,0xc4}, {0x76,0x44},
   62         {0x76,0xc4}, {0x77,0x44}, {0x77,0xc4}, {0x78,0x44},
   63         {0x78,0xa4}, {0x78,0xe4}, {0x79,0x24}, {0x79,0x64},
   64         {0x79,0xa4}, {0x79,0xe4}, {0x7a,0x24}, {0x7a,0x64},
   65         {0x7a,0xa4}, {0x7a,0xe4}, {0x7b,0x24}, {0x7b,0x64},
   66         {0x7b,0xa4}, {0x7b,0xe4}, {0x7c,0x24}, {0x7c,0x64},
   67         {0x7c,0x94}, {0x7c,0xb4}, {0x7c,0xd4}, {0x7c,0xf4},
   68         {0x7d,0x14}, {0x7d,0x34}, {0x7d,0x54}, {0x7d,0x74},
   69         {0x7d,0x94}, {0x7d,0xb4}, {0x7d,0xd4}, {0x7d,0xf4},
   70         {0x7e,0x14}, {0x7e,0x34}, {0x7e,0x54}, {0x7e,0x74},
   71         {0x7e,0x8c}, {0x7e,0x9c}, {0x7e,0xac}, {0x7e,0xbc},
   72         {0x7e,0xcc}, {0x7e,0xdc}, {0x7e,0xec}, {0x7e,0xfc},
   73         {0x7f,0x0c}, {0x7f,0x1c}, {0x7f,0x2c}, {0x7f,0x3c},
   74         {0x7f,0x4c}, {0x7f,0x5c}, {0x7f,0x6c}, {0x7f,0x7c},
   75         {0x7f,0x88}, {0x7f,0x90}, {0x7f,0x98}, {0x7f,0xa0},
   76         {0x7f,0xa8}, {0x7f,0xb0}, {0x7f,0xb8}, {0x7f,0xc0},
   77         {0x7f,0xc8}, {0x7f,0xd0}, {0x7f,0xd8}, {0x7f,0xe0},
   78         {0x7f,0xe8}, {0x7f,0xf0}, {0x7f,0xf8}, {0x80,0x00},
   79         {0xfd,0x7c}, {0xf9,0x7c}, {0xf5,0x7c}, {0xf1,0x7c},
   80         {0xed,0x7c}, {0xe9,0x7c}, {0xe5,0x7c}, {0xe1,0x7c},
   81         {0xdd,0x7c}, {0xd9,0x7c}, {0xd5,0x7c}, {0xd1,0x7c},
   82         {0xcd,0x7c}, {0xc9,0x7c}, {0xc5,0x7c}, {0xc1,0x7c},
   83         {0xbe,0x7c}, {0xbc,0x7c}, {0xba,0x7c}, {0xb8,0x7c},
   84         {0xb6,0x7c}, {0xb4,0x7c}, {0xb2,0x7c}, {0xb0,0x7c},
   85         {0xae,0x7c}, {0xac,0x7c}, {0xaa,0x7c}, {0xa8,0x7c},
   86         {0xa6,0x7c}, {0xa4,0x7c}, {0xa2,0x7c}, {0xa0,0x7c},
   87         {0x9e,0xfc}, {0x9d,0xfc}, {0x9c,0xfc}, {0x9b,0xfc},
   88         {0x9a,0xfc}, {0x99,0xfc}, {0x98,0xfc}, {0x97,0xfc},
   89         {0x96,0xfc}, {0x95,0xfc}, {0x94,0xfc}, {0x93,0xfc},
   90         {0x92,0xfc}, {0x91,0xfc}, {0x90,0xfc}, {0x8f,0xfc},
   91         {0x8f,0x3c}, {0x8e,0xbc}, {0x8e,0x3c}, {0x8d,0xbc},
   92         {0x8d,0x3c}, {0x8c,0xbc}, {0x8c,0x3c}, {0x8b,0xbc},
   93         {0x8b,0x3c}, {0x8a,0xbc}, {0x8a,0x3c}, {0x89,0xbc},
   94         {0x89,0x3c}, {0x88,0xbc}, {0x88,0x3c}, {0x87,0xbc},
   95         {0x87,0x5c}, {0x87,0x1c}, {0x86,0xdc}, {0x86,0x9c},
   96         {0x86,0x5c}, {0x86,0x1c}, {0x85,0xdc}, {0x85,0x9c},
   97         {0x85,0x5c}, {0x85,0x1c}, {0x84,0xdc}, {0x84,0x9c},
   98         {0x84,0x5c}, {0x84,0x1c}, {0x83,0xdc}, {0x83,0x9c},
   99         {0x83,0x6c}, {0x83,0x4c}, {0x83,0x2c}, {0x83,0x0c},
  100         {0x82,0xec}, {0x82,0xcc}, {0x82,0xac}, {0x82,0x8c},
  101         {0x82,0x6c}, {0x82,0x4c}, {0x82,0x2c}, {0x82,0x0c},
  102         {0x81,0xec}, {0x81,0xcc}, {0x81,0xac}, {0x81,0x8c},
  103         {0x81,0x74}, {0x81,0x64}, {0x81,0x54}, {0x81,0x44},
  104         {0x81,0x34}, {0x81,0x24}, {0x81,0x14}, {0x81,0x04},
  105         {0x80,0xf4}, {0x80,0xe4}, {0x80,0xd4}, {0x80,0xc4},
  106         {0x80,0xb4}, {0x80,0xa4}, {0x80,0x94}, {0x80,0x84},
  107         {0x80,0x78}, {0x80,0x70}, {0x80,0x68}, {0x80,0x60},
  108         {0x80,0x58}, {0x80,0x50}, {0x80,0x48}, {0x80,0x40},
  109         {0x80,0x38}, {0x80,0x30}, {0x80,0x28}, {0x80,0x20},
  110         {0x80,0x18}, {0x80,0x10}, {0x80,0x08}, {0x80,0x00},
  111 };
  112 
  113 static const u_char lintomulaw[256] = {
  114         0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
  115         0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03,
  116         0x03, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05,
  117         0x05, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07,
  118         0x07, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
  119         0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b,
  120         0x0b, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d,
  121         0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f,
  122         0x0f, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, 0x13,
  123         0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16, 0x17,
  124         0x17, 0x18, 0x18, 0x19, 0x19, 0x1a, 0x1a, 0x1b,
  125         0x1b, 0x1c, 0x1c, 0x1d, 0x1d, 0x1e, 0x1e, 0x1f,
  126         0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
  127         0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e,
  128         0x2f, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c,
  129         0x3e, 0x41, 0x45, 0x49, 0x4d, 0x53, 0x5b, 0x67,
  130         0xff, 0xe7, 0xdb, 0xd3, 0xcd, 0xc9, 0xc5, 0xc1,
  131         0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,
  132         0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8,
  133         0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0,
  134         0x9f, 0x9f, 0x9e, 0x9e, 0x9d, 0x9d, 0x9c, 0x9c,
  135         0x9b, 0x9b, 0x9a, 0x9a, 0x99, 0x99, 0x98, 0x98,
  136         0x97, 0x97, 0x96, 0x96, 0x95, 0x95, 0x94, 0x94,
  137         0x93, 0x93, 0x92, 0x92, 0x91, 0x91, 0x90, 0x90,
  138         0x8f, 0x8f, 0x8f, 0x8f, 0x8e, 0x8e, 0x8e, 0x8e,
  139         0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c,
  140         0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a,
  141         0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
  142         0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86,
  143         0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
  144         0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
  145         0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80,
  146 };
  147 
  148 void
  149 mulaw_to_slinear8(u_char *p, int cc)
  150 {
  151         /* Use the 16 bit table for 8 bits too. */
  152         while (--cc >= 0) {
  153                 *p = mulawtolin16[*p][0] ^ 0x80;
  154                 ++p;
  155         }
  156 }
  157 
  158 void
  159 slinear8_to_mulaw(u_char *p, int cc)
  160 {
  161         while (--cc >= 0) {
  162                 *p = lintomulaw[*p ^ 0x80];
  163                 ++p;
  164         }
  165 }
  166 
  167 void
  168 mulaw24_to_slinear24(u_char *p, int cc)
  169 {
  170         int s, *q = (int *)p;
  171 
  172         while ((cc -= 4) >= 0) {
  173                 s = (*q >> 16) & 0xff;
  174                 *q = (int)((signed char)mulawtolin16[s][0] ^ 0x80) << 16 |
  175                     (u_int)mulawtolin16[s][1] << 8;
  176                 q++;
  177         }
  178 }
  179 
  180 void
  181 slinear24_to_mulaw24(u_char *p, int cc)
  182 {
  183         u_int *q = (u_int *)p;
  184 
  185         while ((cc -= 4) >= 0) {
  186                 *q = lintomulaw[((*q >> 16) & 0xff) ^ 0x80] << 16;
  187                 q++;
  188         }
  189 }

Cache object: e49d64588c90cd2b8f1392f89415ff62


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.