annotate liba52/crc.c @ 6634:d2c224cf5468

* Link with -lossaudio and/or -li386 only when needed * Fix iconv detection patch by Bj«Órn Sandell <biorn@dce.chalmers.se>
author arpi
date Wed, 03 Jul 2002 22:17:33 +0000
parents c3e62caf9ec6
children e83eef58b30a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3890
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
1 /*
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
2 * crc.c
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
3 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
4 * Copyright (C) Aaron Holtzman - May 1999
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
5 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
6 * This file is part of ac3dec, a free Dolby AC-3 stream decoder.
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
7 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
8 * ac3dec is free software; you can redistribute it and/or modify
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
10 * the Free Software Foundation; either version 2, or (at your option)
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
11 * any later version.
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
12 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
13 * ac3dec is distributed in the hope that it will be useful,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
16 * GNU General Public License for more details.
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
17 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
19 * along with GNU Make; see the file COPYING. If not, write to
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
20 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
21 *
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
22 */
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
23
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
24 #include <stdlib.h>
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
25 #include <stdio.h>
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
26 #include <inttypes.h>
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
27
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
28 static const uint16_t crc_lut[256] =
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
29 {
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
30 0x0000,0x8005,0x800f,0x000a,0x801b,0x001e,0x0014,0x8011,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
31 0x8033,0x0036,0x003c,0x8039,0x0028,0x802d,0x8027,0x0022,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
32 0x8063,0x0066,0x006c,0x8069,0x0078,0x807d,0x8077,0x0072,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
33 0x0050,0x8055,0x805f,0x005a,0x804b,0x004e,0x0044,0x8041,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
34 0x80c3,0x00c6,0x00cc,0x80c9,0x00d8,0x80dd,0x80d7,0x00d2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
35 0x00f0,0x80f5,0x80ff,0x00fa,0x80eb,0x00ee,0x00e4,0x80e1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
36 0x00a0,0x80a5,0x80af,0x00aa,0x80bb,0x00be,0x00b4,0x80b1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
37 0x8093,0x0096,0x009c,0x8099,0x0088,0x808d,0x8087,0x0082,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
38 0x8183,0x0186,0x018c,0x8189,0x0198,0x819d,0x8197,0x0192,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
39 0x01b0,0x81b5,0x81bf,0x01ba,0x81ab,0x01ae,0x01a4,0x81a1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
40 0x01e0,0x81e5,0x81ef,0x01ea,0x81fb,0x01fe,0x01f4,0x81f1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
41 0x81d3,0x01d6,0x01dc,0x81d9,0x01c8,0x81cd,0x81c7,0x01c2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
42 0x0140,0x8145,0x814f,0x014a,0x815b,0x015e,0x0154,0x8151,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
43 0x8173,0x0176,0x017c,0x8179,0x0168,0x816d,0x8167,0x0162,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
44 0x8123,0x0126,0x012c,0x8129,0x0138,0x813d,0x8137,0x0132,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
45 0x0110,0x8115,0x811f,0x011a,0x810b,0x010e,0x0104,0x8101,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
46 0x8303,0x0306,0x030c,0x8309,0x0318,0x831d,0x8317,0x0312,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
47 0x0330,0x8335,0x833f,0x033a,0x832b,0x032e,0x0324,0x8321,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
48 0x0360,0x8365,0x836f,0x036a,0x837b,0x037e,0x0374,0x8371,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
49 0x8353,0x0356,0x035c,0x8359,0x0348,0x834d,0x8347,0x0342,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
50 0x03c0,0x83c5,0x83cf,0x03ca,0x83db,0x03de,0x03d4,0x83d1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
51 0x83f3,0x03f6,0x03fc,0x83f9,0x03e8,0x83ed,0x83e7,0x03e2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
52 0x83a3,0x03a6,0x03ac,0x83a9,0x03b8,0x83bd,0x83b7,0x03b2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
53 0x0390,0x8395,0x839f,0x039a,0x838b,0x038e,0x0384,0x8381,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
54 0x0280,0x8285,0x828f,0x028a,0x829b,0x029e,0x0294,0x8291,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
55 0x82b3,0x02b6,0x02bc,0x82b9,0x02a8,0x82ad,0x82a7,0x02a2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
56 0x82e3,0x02e6,0x02ec,0x82e9,0x02f8,0x82fd,0x82f7,0x02f2,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
57 0x02d0,0x82d5,0x82df,0x02da,0x82cb,0x02ce,0x02c4,0x82c1,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
58 0x8243,0x0246,0x024c,0x8249,0x0258,0x825d,0x8257,0x0252,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
59 0x0270,0x8275,0x827f,0x027a,0x826b,0x026e,0x0264,0x8261,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
60 0x0220,0x8225,0x822f,0x022a,0x823b,0x023e,0x0234,0x8231,
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
61 0x8213,0x0216,0x021c,0x8219,0x0208,0x820d,0x8207,0x0202
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
62 };
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
63
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
64 uint16_t crc16_block(uint8_t *data,uint32_t num_bytes)
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
65 {
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
66 uint32_t i;
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
67 uint16_t state=0;
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
68
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
69 for(i=0;i<num_bytes;i++)
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
70 state = crc_lut[data[i] ^ (state>>8)] ^ (state<<8);
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
71
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
72 return state;
c3e62caf9ec6 CRC code ported from libac3
arpi
parents:
diff changeset
73 }