annotate liba52/crc.c @ 20077:fcb1df0094fd

Unify labels of two solutions to similar problems. Same problem, same solution, one was not labeled, one was labeled 'Workaround', where both are ideal solutions.
author torinthiel
date Thu, 05 Oct 2006 22:06:45 +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 }