/*
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config.h"
#include "thread.h"
#include "avassert.h"
#include "bswap.h"
#include "crc.h"
#include "error.h"
#if CONFIG_HARDCODED_TABLES
static const AVCRC av_crc_table[AV_CRC_MAX][257 ] = {
[AV_CRC_8_ATM] = {
0 x00, 0 x07, 0 x0E, 0 x09, 0 x1C, 0 x1B, 0 x12, 0 x15, 0 x38, 0 x3F, 0 x36, 0 x31,
0 x24, 0 x23, 0 x2A, 0 x2D, 0 x70, 0 x77, 0 x7E, 0 x79, 0 x6C, 0 x6B, 0 x62, 0 x65,
0 x48, 0 x4F, 0 x46, 0 x41, 0 x54, 0 x53, 0 x5A, 0 x5D, 0 xE0, 0 xE7, 0 xEE, 0 xE9,
0 xFC, 0 xFB, 0 xF2, 0 xF5, 0 xD8, 0 xDF, 0 xD6, 0 xD1, 0 xC4, 0 xC3, 0 xCA, 0 xCD,
0 x90, 0 x97, 0 x9E, 0 x99, 0 x8C, 0 x8B, 0 x82, 0 x85, 0 xA8, 0 xAF, 0 xA6, 0 xA1,
0 xB4, 0 xB3, 0 xBA, 0 xBD, 0 xC7, 0 xC0, 0 xC9, 0 xCE, 0 xDB, 0 xDC, 0 xD5, 0 xD2,
0 xFF, 0 xF8, 0 xF1, 0 xF6, 0 xE3, 0 xE4, 0 xED, 0 xEA, 0 xB7, 0 xB0, 0 xB9, 0 xBE,
0 xAB, 0 xAC, 0 xA5, 0 xA2, 0 x8F, 0 x88, 0 x81, 0 x86, 0 x93, 0 x94, 0 x9D, 0 x9A,
0 x27, 0 x20, 0 x29, 0 x2E, 0 x3B, 0 x3C, 0 x35, 0 x32, 0 x1F, 0 x18, 0 x11, 0 x16,
0 x03, 0 x04, 0 x0D, 0 x0A, 0 x57, 0 x50, 0 x59, 0 x5E, 0 x4B, 0 x4C, 0 x45, 0 x42,
0 x6F, 0 x68, 0 x61, 0 x66, 0 x73, 0 x74, 0 x7D, 0 x7A, 0 x89, 0 x8E, 0 x87, 0 x80,
0 x95, 0 x92, 0 x9B, 0 x9C, 0 xB1, 0 xB6, 0 xBF, 0 xB8, 0 xAD, 0 xAA, 0 xA3, 0 xA4,
0 xF9, 0 xFE, 0 xF7, 0 xF0, 0 xE5, 0 xE2, 0 xEB, 0 xEC, 0 xC1, 0 xC6, 0 xCF, 0 xC8,
0 xDD, 0 xDA, 0 xD3, 0 xD4, 0 x69, 0 x6E, 0 x67, 0 x60, 0 x75, 0 x72, 0 x7B, 0 x7C,
0 x51, 0 x56, 0 x5F, 0 x58, 0 x4D, 0 x4A, 0 x43, 0 x44, 0 x19, 0 x1E, 0 x17, 0 x10,
0 x05, 0 x02, 0 x0B, 0 x0C, 0 x21, 0 x26, 0 x2F, 0 x28, 0 x3D, 0 x3A, 0 x33, 0 x34,
0 x4E, 0 x49, 0 x40, 0 x47, 0 x52, 0 x55, 0 x5C, 0 x5B, 0 x76, 0 x71, 0 x78, 0 x7F,
0 x6A, 0 x6D, 0 x64, 0 x63, 0 x3E, 0 x39, 0 x30, 0 x37, 0 x22, 0 x25, 0 x2C, 0 x2B,
0 x06, 0 x01, 0 x08, 0 x0F, 0 x1A, 0 x1D, 0 x14, 0 x13, 0 xAE, 0 xA9, 0 xA0, 0 xA7,
0 xB2, 0 xB5, 0 xBC, 0 xBB, 0 x96, 0 x91, 0 x98, 0 x9F, 0 x8A, 0 x8D, 0 x84, 0 x83,
0 xDE, 0 xD9, 0 xD0, 0 xD7, 0 xC2, 0 xC5, 0 xCC, 0 xCB, 0 xE6, 0 xE1, 0 xE8, 0 xEF,
0 xFA, 0 xFD, 0 xF4, 0 xF3, 0 x01
},
[AV_CRC_8_EBU] = {
0 x00, 0 x1D, 0 x3A, 0 x27, 0 x74, 0 x69, 0 x4E, 0 x53, 0 xE8, 0 xF5, 0 xD2, 0 xCF,
0 x9C, 0 x81, 0 xA6, 0 xBB, 0 xCD, 0 xD0, 0 xF7, 0 xEA, 0 xB9, 0 xA4, 0 x83, 0 x9E,
0 x25, 0 x38, 0 x1F, 0 x02, 0 x51, 0 x4C, 0 x6B, 0 x76, 0 x87, 0 x9A, 0 xBD, 0 xA0,
0 xF3, 0 xEE, 0 xC9, 0 xD4, 0 x6F, 0 x72, 0 x55, 0 x48, 0 x1B, 0 x06, 0 x21, 0 x3C,
0 x4A, 0 x57, 0 x70, 0 x6D, 0 x3E, 0 x23, 0 x04, 0 x19, 0 xA2, 0 xBF, 0 x98, 0 x85,
0 xD6, 0 xCB, 0 xEC, 0 xF1, 0 x13, 0 x0E, 0 x29, 0 x34, 0 x67, 0 x7A, 0 x5D, 0 x40,
0 xFB, 0 xE6, 0 xC1, 0 xDC, 0 x8F, 0 x92, 0 xB5, 0 xA8, 0 xDE, 0 xC3, 0 xE4, 0 xF9,
0 xAA, 0 xB7, 0 x90, 0 x8D, 0 x36, 0 x2B, 0 x0C, 0 x11, 0 x42, 0 x5F, 0 x78, 0 x65,
0 x94, 0 x89, 0 xAE, 0 xB3, 0 xE0, 0 xFD, 0 xDA, 0 xC7, 0 x7C, 0 x61, 0 x46, 0 x5B,
0 x08, 0 x15, 0 x32, 0 x2F, 0 x59, 0 x44, 0 x63, 0 x7E, 0 x2D, 0 x30, 0 x17, 0 x0A,
0 xB1, 0 xAC, 0 x8B, 0 x96, 0 xC5, 0 xD8, 0 xFF, 0 xE2, 0 x26, 0 x3B, 0 x1C, 0 x01,
0 x52, 0 x4F, 0 x68, 0 x75, 0 xCE, 0 xD3, 0 xF4, 0 xE9, 0 xBA, 0 xA7, 0 x80, 0 x9D,
0 xEB, 0 xF6, 0 xD1, 0 xCC, 0 x9F, 0 x82, 0 xA5, 0 xB8, 0 x03, 0 x1E, 0 x39, 0 x24,
0 x77, 0 x6A, 0 x4D, 0 x50, 0 xA1, 0 xBC, 0 x9B, 0 x86, 0 xD5, 0 xC8, 0 xEF, 0 xF2,
0 x49, 0 x54, 0 x73, 0 x6E, 0 x3D, 0 x20, 0 x07, 0 x1A, 0 x6C, 0 x71, 0 x56, 0 x4B,
0 x18, 0 x05, 0 x22, 0 x3F, 0 x84, 0 x99, 0 xBE, 0 xA3, 0 xF0, 0 xED, 0 xCA, 0 xD7,
0 x35, 0 x28, 0 x0F, 0 x12, 0 x41, 0 x5C, 0 x7B, 0 x66, 0 xDD, 0 xC0, 0 xE7, 0 xFA,
0 xA9, 0 xB4, 0 x93, 0 x8E, 0 xF8, 0 xE5, 0 xC2, 0 xDF, 0 x8C, 0 x91, 0 xB6, 0 xAB,
0 x10, 0 x0D, 0 x2A, 0 x37, 0 x64, 0 x79, 0 x5E, 0 x43, 0 xB2, 0 xAF, 0 x88, 0 x95,
0 xC6, 0 xDB, 0 xFC, 0 xE1, 0 x5A, 0 x47, 0 x60, 0 x7D, 0 x2E, 0 x33, 0 x14, 0 x09,
0 x7F, 0 x62, 0 x45, 0 x58, 0 x0B, 0 x16, 0 x31, 0 x2C, 0 x97, 0 x8A, 0 xAD, 0 xB0,
0 xE3, 0 xFE, 0 xD9, 0 xC4, 0 x01
},
[AV_CRC_16_ANSI] = {
0 x0000, 0 x0580, 0 x0F80, 0 x0A00, 0 x1B80, 0 x1E00, 0 x1400, 0 x1180,
0 x3380, 0 x3600, 0 x3C00, 0 x3980, 0 x2800, 0 x2D80, 0 x2780, 0 x2200,
0 x6380, 0 x6600, 0 x6C00, 0 x6980, 0 x7800, 0 x7D80, 0 x7780, 0 x7200,
0 x5000, 0 x5580, 0 x5F80, 0 x5A00, 0 x4B80, 0 x4E00, 0 x4400, 0 x4180,
0 xC380, 0 xC600, 0 xCC00, 0 xC980, 0 xD800, 0 xDD80, 0 xD780, 0 xD200,
0 xF000, 0 xF580, 0 xFF80, 0 xFA00, 0 xEB80, 0 xEE00, 0 xE400, 0 xE180,
0 xA000, 0 xA580, 0 xAF80, 0 xAA00, 0 xBB80, 0 xBE00, 0 xB400, 0 xB180,
0 x9380, 0 x9600, 0 x9C00, 0 x9980, 0 x8800, 0 x8D80, 0 x8780, 0 x8200,
0 x8381, 0 x8601, 0 x8C01, 0 x8981, 0 x9801, 0 x9D81, 0 x9781, 0 x9201,
0 xB001, 0 xB581, 0 xBF81, 0 xBA01, 0 xAB81, 0 xAE01, 0 xA401, 0 xA181,
0 xE001, 0 xE581, 0 xEF81, 0 xEA01, 0 xFB81, 0 xFE01, 0 xF401, 0 xF181,
0 xD381, 0 xD601, 0 xDC01, 0 xD981, 0 xC801, 0 xCD81, 0 xC781, 0 xC201,
0 x4001, 0 x4581, 0 x4F81, 0 x4A01, 0 x5B81, 0 x5E01, 0 x5401, 0 x5181,
0 x7381, 0 x7601, 0 x7C01, 0 x7981, 0 x6801, 0 x6D81, 0 x6781, 0 x6201,
0 x2381, 0 x2601, 0 x2C01, 0 x2981, 0 x3801, 0 x3D81, 0 x3781, 0 x3201,
0 x1001, 0 x1581, 0 x1F81, 0 x1A01, 0 x0B81, 0 x0E01, 0 x0401, 0 x0181,
0 x0383, 0 x0603, 0 x0C03, 0 x0983, 0 x1803, 0 x1D83, 0 x1783, 0 x1203,
0 x3003, 0 x3583, 0 x3F83, 0 x3A03, 0 x2B83, 0 x2E03, 0 x2403, 0 x2183,
0 x6003, 0 x6583, 0 x6F83, 0 x6A03, 0 x7B83, 0 x7E03, 0 x7403, 0 x7183,
0 x5383, 0 x5603, 0 x5C03, 0 x5983, 0 x4803, 0 x4D83, 0 x4783, 0 x4203,
0 xC003, 0 xC583, 0 xCF83, 0 xCA03, 0 xDB83, 0 xDE03, 0 xD403, 0 xD183,
0 xF383, 0 xF603, 0 xFC03, 0 xF983, 0 xE803, 0 xED83, 0 xE783, 0 xE203,
0 xA383, 0 xA603, 0 xAC03, 0 xA983, 0 xB803, 0 xBD83, 0 xB783, 0 xB203,
0 x9003, 0 x9583, 0 x9F83, 0 x9A03, 0 x8B83, 0 x8E03, 0 x8403, 0 x8183,
0 x8002, 0 x8582, 0 x8F82, 0 x8A02, 0 x9B82, 0 x9E02, 0 x9402, 0 x9182,
0 xB382, 0 xB602, 0 xBC02, 0 xB982, 0 xA802, 0 xAD82, 0 xA782, 0 xA202,
0 xE382, 0 xE602, 0 xEC02, 0 xE982, 0 xF802, 0 xFD82, 0 xF782, 0 xF202,
0 xD002, 0 xD582, 0 xDF82, 0 xDA02, 0 xCB82, 0 xCE02, 0 xC402, 0 xC182,
0 x4382, 0 x4602, 0 x4C02, 0 x4982, 0 x5802, 0 x5D82, 0 x5782, 0 x5202,
0 x7002, 0 x7582, 0 x7F82, 0 x7A02, 0 x6B82, 0 x6E02, 0 x6402, 0 x6182,
0 x2002, 0 x2582, 0 x2F82, 0 x2A02, 0 x3B82, 0 x3E02, 0 x3402, 0 x3182,
0 x1382, 0 x1602, 0 x1C02, 0 x1982, 0 x0802, 0 x0D82, 0 x0782, 0 x0202,
0 x0001
},
[AV_CRC_16_CCITT] = {
0 x0000, 0 x2110, 0 x4220, 0 x6330, 0 x8440, 0 xA550, 0 xC660, 0 xE770,
0 x0881, 0 x2991, 0 x4AA1, 0 x6BB1, 0 x8CC1, 0 xADD1, 0 xCEE1, 0 xEFF1,
0 x3112, 0 x1002, 0 x7332, 0 x5222, 0 xB552, 0 x9442, 0 xF772, 0 xD662,
0 x3993, 0 x1883, 0 x7BB3, 0 x5AA3, 0 xBDD3, 0 x9CC3, 0 xFFF3, 0 xDEE3,
0 x6224, 0 x4334, 0 x2004, 0 x0114, 0 xE664, 0 xC774, 0 xA444, 0 x8554,
0 x6AA5, 0 x4BB5, 0 x2885, 0 x0995, 0 xEEE5, 0 xCFF5, 0 xACC5, 0 x8DD5,
0 x5336, 0 x7226, 0 x1116, 0 x3006, 0 xD776, 0 xF666, 0 x9556, 0 xB446,
0 x5BB7, 0 x7AA7, 0 x1997, 0 x3887, 0 xDFF7, 0 xFEE7, 0 x9DD7, 0 xBCC7,
0 xC448, 0 xE558, 0 x8668, 0 xA778, 0 x4008, 0 x6118, 0 x0228, 0 x2338,
0 xCCC9, 0 xEDD9, 0 x8EE9, 0 xAFF9, 0 x4889, 0 x6999, 0 x0AA9, 0 x2BB9,
0 xF55A, 0 xD44A, 0 xB77A, 0 x966A, 0 x711A, 0 x500A, 0 x333A, 0 x122A,
0 xFDDB, 0 xDCCB, 0 xBFFB, 0 x9EEB, 0 x799B, 0 x588B, 0 x3BBB, 0 x1AAB,
0 xA66C, 0 x877C, 0 xE44C, 0 xC55C, 0 x222C, 0 x033C, 0 x600C, 0 x411C,
0 xAEED, 0 x8FFD, 0 xECCD, 0 xCDDD, 0 x2AAD, 0 x0BBD, 0 x688D, 0 x499D,
0 x977E, 0 xB66E, 0 xD55E, 0 xF44E, 0 x133E, 0 x322E, 0 x511E, 0 x700E,
0 x9FFF, 0 xBEEF, 0 xDDDF, 0 xFCCF, 0 x1BBF, 0 x3AAF, 0 x599F, 0 x788F,
0 x8891, 0 xA981, 0 xCAB1, 0 xEBA1, 0 x0CD1, 0 x2DC1, 0 x4EF1, 0 x6FE1,
0 x8010, 0 xA100, 0 xC230, 0 xE320, 0 x0450, 0 x2540, 0 x4670, 0 x6760,
0 xB983, 0 x9893, 0 xFBA3, 0 xDAB3, 0 x3DC3, 0 x1CD3, 0 x7FE3, 0 x5EF3,
0 xB102, 0 x9012, 0 xF322, 0 xD232, 0 x3542, 0 x1452, 0 x7762, 0 x5672,
0 xEAB5, 0 xCBA5, 0 xA895, 0 x8985, 0 x6EF5, 0 x4FE5, 0 x2CD5, 0 x0DC5,
0 xE234, 0 xC324, 0 xA014, 0 x8104, 0 x6674, 0 x4764, 0 x2454, 0 x0544,
0 xDBA7, 0 xFAB7, 0 x9987, 0 xB897, 0 x5FE7, 0 x7EF7, 0 x1DC7, 0 x3CD7,
0 xD326, 0 xF236, 0 x9106, 0 xB016, 0 x5766, 0 x7676, 0 x1546, 0 x3456,
0 x4CD9, 0 x6DC9, 0 x0EF9, 0 x2FE9, 0 xC899, 0 xE989, 0 x8AB9, 0 xABA9,
0 x4458, 0 x6548, 0 x0678, 0 x2768, 0 xC018, 0 xE108, 0 x8238, 0 xA328,
0 x7DCB, 0 x5CDB, 0 x3FEB, 0 x1EFB, 0 xF98B, 0 xD89B, 0 xBBAB, 0 x9ABB,
0 x754A, 0 x545A, 0 x376A, 0 x167A, 0 xF10A, 0 xD01A, 0 xB32A, 0 x923A,
0 x2EFD, 0 x0FED, 0 x6CDD, 0 x4DCD, 0 xAABD, 0 x8BAD, 0 xE89D, 0 xC98D,
0 x267C, 0 x076C, 0 x645C, 0 x454C, 0 xA23C, 0 x832C, 0 xE01C, 0 xC10C,
0 x1FEF, 0 x3EFF, 0 x5DCF, 0 x7CDF, 0 x9BAF, 0 xBABF, 0 xD98F, 0 xF89F,
0 x176E, 0 x367E, 0 x554E, 0 x745E, 0 x932E, 0 xB23E, 0 xD10E, 0 xF01E,
0 x0001
},
[AV_CRC_24_IEEE] = {
0 x000000, 0 xFB4C86, 0 x0DD58A, 0 xF6990C, 0 xE1E693, 0 x1AAA15, 0 xEC3319,
0 x177F9F, 0 x3981A1, 0 xC2CD27, 0 x34542B, 0 xCF18AD, 0 xD86732, 0 x232BB4,
0 xD5B2B8, 0 x2EFE3E, 0 x894EC5, 0 x720243, 0 x849B4F, 0 x7FD7C9, 0 x68A856,
0 x93E4D0, 0 x657DDC, 0 x9E315A, 0 xB0CF64, 0 x4B83E2, 0 xBD1AEE, 0 x465668,
0 x5129F7, 0 xAA6571, 0 x5CFC7D, 0 xA7B0FB, 0 xE9D10C, 0 x129D8A, 0 xE40486,
0 x1F4800, 0 x08379F, 0 xF37B19, 0 x05E215, 0 xFEAE93, 0 xD050AD, 0 x2B1C2B,
0 xDD8527, 0 x26C9A1, 0 x31B63E, 0 xCAFAB8, 0 x3C63B4, 0 xC72F32, 0 x609FC9,
0 x9BD34F, 0 x6D4A43, 0 x9606C5, 0 x81795A, 0 x7A35DC, 0 x8CACD0, 0 x77E056,
0 x591E68, 0 xA252EE, 0 x54CBE2, 0 xAF8764, 0 xB8F8FB, 0 x43B47D, 0 xB52D71,
0 x4E61F7, 0 xD2A319, 0 x29EF9F, 0 xDF7693, 0 x243A15, 0 x33458A, 0 xC8090C,
0 x3E9000, 0 xC5DC86, 0 xEB22B8, 0 x106E3E, 0 xE6F732, 0 x1DBBB4, 0 x0AC42B,
0 xF188AD, 0 x0711A1, 0 xFC5D27, 0 x5BEDDC, 0 xA0A15A, 0 x563856, 0 xAD74D0,
0 xBA0B4F, 0 x4147C9, 0 xB7DEC5, 0 x4C9243, 0 x626C7D, 0 x9920FB, 0 x6FB9F7,
0 x94F571, 0 x838AEE, 0 x78C668, 0 x8E5F64, 0 x7513E2, 0 x3B7215, 0 xC03E93,
0 x36A79F, 0 xCDEB19, 0 xDA9486, 0 x21D800, 0 xD7410C, 0 x2C0D8A, 0 x02F3B4,
0 xF9BF32, 0 x0F263E, 0 xF46AB8, 0 xE31527, 0 x1859A1, 0 xEEC0AD, 0 x158C2B,
0 xB23CD0, 0 x497056, 0 xBFE95A, 0 x44A5DC, 0 x53DA43, 0 xA896C5, 0 x5E0FC9,
0 xA5434F, 0 x8BBD71, 0 x70F1F7, 0 x8668FB, 0 x7D247D, 0 x6A5BE2, 0 x911764,
0 x678E68, 0 x9CC2EE, 0 xA44733, 0 x5F0BB5, 0 xA992B9, 0 x52DE3F, 0 x45A1A0,
0 xBEED26, 0 x48742A, 0 xB338AC, 0 x9DC692, 0 x668A14, 0 x901318, 0 x6B5F9E,
0 x7C2001, 0 x876C87, 0 x71F58B, 0 x8AB90D, 0 x2D09F6, 0 xD64570, 0 x20DC7C,
0 xDB90FA, 0 xCCEF65, 0 x37A3E3, 0 xC13AEF, 0 x3A7669, 0 x148857, 0 xEFC4D1,
0 x195DDD, 0 xE2115B, 0 xF56EC4, 0 x0E2242, 0 xF8BB4E, 0 x03F7C8, 0 x4D963F,
0 xB6DAB9, 0 x4043B5, 0 xBB0F33, 0 xAC70AC, 0 x573C2A, 0 xA1A526, 0 x5AE9A0,
0 x74179E, 0 x8F5B18, 0 x79C214, 0 x828E92, 0 x95F10D, 0 x6EBD8B, 0 x982487,
0 x636801, 0 xC4D8FA, 0 x3F947C, 0 xC90D70, 0 x3241F6, 0 x253E69, 0 xDE72EF,
0 x28EBE3, 0 xD3A765, 0 xFD595B, 0 x0615DD, 0 xF08CD1, 0 x0BC057, 0 x1CBFC8,
0 xE7F34E, 0 x116A42, 0 xEA26C4, 0 x76E42A, 0 x8DA8AC, 0 x7B31A0, 0 x807D26,
0 x9702B9, 0 x6C4E3F, 0 x9AD733, 0 x619BB5, 0 x4F658B, 0 xB4290D, 0 x42B001,
0 xB9FC87, 0 xAE8318, 0 x55CF9E, 0 xA35692, 0 x581A14, 0 xFFAAEF, 0 x04E669,
0 xF27F65, 0 x0933E3, 0 x1E4C7C, 0 xE500FA, 0 x1399F6, 0 xE8D570, 0 xC62B4E,
0 x3D67C8, 0 xCBFEC4, 0 x30B242, 0 x27CDDD, 0 xDC815B, 0 x2A1857, 0 xD154D1,
0 x9F3526, 0 x6479A0, 0 x92E0AC, 0 x69AC2A, 0 x7ED3B5, 0 x859F33, 0 x73063F,
0 x884AB9, 0 xA6B487, 0 x5DF801, 0 xAB610D, 0 x502D8B, 0 x475214, 0 xBC1E92,
0 x4A879E, 0 xB1CB18, 0 x167BE3, 0 xED3765, 0 x1BAE69, 0 xE0E2EF, 0 xF79D70,
0 x0CD1F6, 0 xFA48FA, 0 x01047C, 0 x2FFA42, 0 xD4B6C4, 0 x222FC8, 0 xD9634E,
0 xCE1CD1, 0 x355057, 0 xC3C95B, 0 x3885DD, 0 x000001,
},
[AV_CRC_32_IEEE] = {
0 x00000000, 0 xB71DC104, 0 x6E3B8209, 0 xD926430D, 0 xDC760413, 0 x6B6BC517,
0 xB24D861A, 0 x0550471E, 0 xB8ED0826, 0 x0FF0C922, 0 xD6D68A2F, 0 x61CB4B2B,
0 x649B0C35, 0 xD386CD31, 0 x0AA08E3C, 0 xBDBD4F38, 0 x70DB114C, 0 xC7C6D048,
0 x1EE09345, 0 xA9FD5241, 0 xACAD155F, 0 x1BB0D45B, 0 xC2969756, 0 x758B5652,
0 xC836196A, 0 x7F2BD86E, 0 xA60D9B63, 0 x11105A67, 0 x14401D79, 0 xA35DDC7D,
0 x7A7B9F70, 0 xCD665E74, 0 xE0B62398, 0 x57ABE29C, 0 x8E8DA191, 0 x39906095,
0 x3CC0278B, 0 x8BDDE68F, 0 x52FBA582, 0 xE5E66486, 0 x585B2BBE, 0 xEF46EABA,
0 x3660A9B7, 0 x817D68B3, 0 x842D2FAD, 0 x3330EEA9, 0 xEA16ADA4, 0 x5D0B6CA0,
0 x906D32D4, 0 x2770F3D0, 0 xFE56B0DD, 0 x494B71D9, 0 x4C1B36C7, 0 xFB06F7C3,
0 x2220B4CE, 0 x953D75CA, 0 x28803AF2, 0 x9F9DFBF6, 0 x46BBB8FB, 0 xF1A679FF,
0 xF4F63EE1, 0 x43EBFFE5, 0 x9ACDBCE8, 0 x2DD07DEC, 0 x77708634, 0 xC06D4730,
0 x194B043D, 0 xAE56C539, 0 xAB068227, 0 x1C1B4323, 0 xC53D002E, 0 x7220C12A,
0 xCF9D8E12, 0 x78804F16, 0 xA1A60C1B, 0 x16BBCD1F, 0 x13EB8A01, 0 xA4F64B05,
0 x7DD00808, 0 xCACDC90C, 0 x07AB9778, 0 xB0B6567C, 0 x69901571, 0 xDE8DD475,
0 xDBDD936B, 0 x6CC0526F, 0 xB5E61162, 0 x02FBD066, 0 xBF469F5E, 0 x085B5E5A,
0 xD17D1D57, 0 x6660DC53, 0 x63309B4D, 0 xD42D5A49, 0 x0D0B1944, 0 xBA16D840,
0 x97C6A5AC, 0 x20DB64A8, 0 xF9FD27A5, 0 x4EE0E6A1, 0 x4BB0A1BF, 0 xFCAD60BB,
0 x258B23B6, 0 x9296E2B2, 0 x2F2BAD8A, 0 x98366C8E, 0 x41102F83, 0 xF60DEE87,
0 xF35DA999, 0 x4440689D, 0 x9D662B90, 0 x2A7BEA94, 0 xE71DB4E0, 0 x500075E4,
0 x892636E9, 0 x3E3BF7ED, 0 x3B6BB0F3, 0 x8C7671F7, 0 x555032FA, 0 xE24DF3FE,
0 x5FF0BCC6, 0 xE8ED7DC2, 0 x31CB3ECF, 0 x86D6FFCB, 0 x8386B8D5, 0 x349B79D1,
0 xEDBD3ADC, 0 x5AA0FBD8, 0 xEEE00C69, 0 x59FDCD6D, 0 x80DB8E60, 0 x37C64F64,
0 x3296087A, 0 x858BC97E, 0 x5CAD8A73, 0 xEBB04B77, 0 x560D044F, 0 xE110C54B,
0 x38368646, 0 x8F2B4742, 0 x8A7B005C, 0 x3D66C158, 0 xE4408255, 0 x535D4351,
0 x9E3B1D25, 0 x2926DC21, 0 xF0009F2C, 0 x471D5E28, 0 x424D1936, 0 xF550D832,
0 x2C769B3F, 0 x9B6B5A3B, 0 x26D61503, 0 x91CBD407, 0 x48ED970A, 0 xFFF0560E,
0 xFAA01110, 0 x4DBDD014, 0 x949B9319, 0 x2386521D, 0 x0E562FF1, 0 xB94BEEF5,
0 x606DADF8, 0 xD7706CFC, 0 xD2202BE2, 0 x653DEAE6, 0 xBC1BA9EB, 0 x0B0668EF,
0 xB6BB27D7, 0 x01A6E6D3, 0 xD880A5DE, 0 x6F9D64DA, 0 x6ACD23C4, 0 xDDD0E2C0,
0 x04F6A1CD, 0 xB3EB60C9, 0 x7E8D3EBD, 0 xC990FFB9, 0 x10B6BCB4, 0 xA7AB7DB0,
0 xA2FB3AAE, 0 x15E6FBAA, 0 xCCC0B8A7, 0 x7BDD79A3, 0 xC660369B, 0 x717DF79F,
0 xA85BB492, 0 x1F467596, 0 x1A163288, 0 xAD0BF38C, 0 x742DB081, 0 xC3307185,
0 x99908A5D, 0 x2E8D4B59, 0 xF7AB0854, 0 x40B6C950, 0 x45E68E4E, 0 xF2FB4F4A,
0 x2BDD0C47, 0 x9CC0CD43, 0 x217D827B, 0 x9660437F, 0 x4F460072, 0 xF85BC176,
0 xFD0B8668, 0 x4A16476C, 0 x93300461, 0 x242DC565, 0 xE94B9B11, 0 x5E565A15,
0 x87701918, 0 x306DD81C, 0 x353D9F02, 0 x82205E06, 0 x5B061D0B, 0 xEC1BDC0F,
0 x51A69337, 0 xE6BB5233, 0 x3F9D113E, 0 x8880D03A, 0 x8DD09724, 0 x3ACD5620,
0 xE3EB152D, 0 x54F6D429, 0 x7926A9C5, 0 xCE3B68C1, 0 x171D2BCC, 0 xA000EAC8,
0 xA550ADD6, 0 x124D6CD2, 0 xCB6B2FDF, 0 x7C76EEDB, 0 xC1CBA1E3, 0 x76D660E7,
0 xAFF023EA, 0 x18EDE2EE, 0 x1DBDA5F0, 0 xAAA064F4, 0 x738627F9, 0 xC49BE6FD,
0 x09FDB889, 0 xBEE0798D, 0 x67C63A80, 0 xD0DBFB84, 0 xD58BBC9A, 0 x62967D9E,
0 xBBB03E93, 0 x0CADFF97, 0 xB110B0AF, 0 x060D71AB, 0 xDF2B32A6, 0 x6836F3A2,
0 x6D66B4BC, 0 xDA7B75B8, 0 x035D36B5, 0 xB440F7B1, 0 x00000001
},
[AV_CRC_32_IEEE_LE] = {
0 x00000000, 0 x77073096, 0 xEE0E612C, 0 x990951BA, 0 x076DC419, 0 x706AF48F,
0 xE963A535, 0 x9E6495A3, 0 x0EDB8832, 0 x79DCB8A4, 0 xE0D5E91E, 0 x97D2D988,
0 x09B64C2B, 0 x7EB17CBD, 0 xE7B82D07, 0 x90BF1D91, 0 x1DB71064, 0 x6AB020F2,
0 xF3B97148, 0 x84BE41DE, 0 x1ADAD47D, 0 x6DDDE4EB, 0 xF4D4B551, 0 x83D385C7,
0 x136C9856, 0 x646BA8C0, 0 xFD62F97A, 0 x8A65C9EC, 0 x14015C4F, 0 x63066CD9,
0 xFA0F3D63, 0 x8D080DF5, 0 x3B6E20C8, 0 x4C69105E, 0 xD56041E4, 0 xA2677172,
0 x3C03E4D1, 0 x4B04D447, 0 xD20D85FD, 0 xA50AB56B, 0 x35B5A8FA, 0 x42B2986C,
0 xDBBBC9D6, 0 xACBCF940, 0 x32D86CE3, 0 x45DF5C75, 0 xDCD60DCF, 0 xABD13D59,
0 x26D930AC, 0 x51DE003A, 0 xC8D75180, 0 xBFD06116, 0 x21B4F4B5, 0 x56B3C423,
0 xCFBA9599, 0 xB8BDA50F, 0 x2802B89E, 0 x5F058808, 0 xC60CD9B2, 0 xB10BE924,
0 x2F6F7C87, 0 x58684C11, 0 xC1611DAB, 0 xB6662D3D, 0 x76DC4190, 0 x01DB7106,
0 x98D220BC, 0 xEFD5102A, 0 x71B18589, 0 x06B6B51F, 0 x9FBFE4A5, 0 xE8B8D433,
0 x7807C9A2, 0 x0F00F934, 0 x9609A88E, 0 xE10E9818, 0 x7F6A0DBB, 0 x086D3D2D,
0 x91646C97, 0 xE6635C01, 0 x6B6B51F4, 0 x1C6C6162, 0 x856530D8, 0 xF262004E,
0 x6C0695ED, 0 x1B01A57B, 0 x8208F4C1, 0 xF50FC457, 0 x65B0D9C6, 0 x12B7E950,
0 x8BBEB8EA, 0 xFCB9887C, 0 x62DD1DDF, 0 x15DA2D49, 0 x8CD37CF3, 0 xFBD44C65,
0 x4DB26158, 0 x3AB551CE, 0 xA3BC0074, 0 xD4BB30E2, 0 x4ADFA541, 0 x3DD895D7,
0 xA4D1C46D, 0 xD3D6F4FB, 0 x4369E96A, 0 x346ED9FC, 0 xAD678846, 0 xDA60B8D0,
0 x44042D73, 0 x33031DE5, 0 xAA0A4C5F, 0 xDD0D7CC9, 0 x5005713C, 0 x270241AA,
0 xBE0B1010, 0 xC90C2086, 0 x5768B525, 0 x206F85B3, 0 xB966D409, 0 xCE61E49F,
0 x5EDEF90E, 0 x29D9C998, 0 xB0D09822, 0 xC7D7A8B4, 0 x59B33D17, 0 x2EB40D81,
0 xB7BD5C3B, 0 xC0BA6CAD, 0 xEDB88320, 0 x9ABFB3B6, 0 x03B6E20C, 0 x74B1D29A,
0 xEAD54739, 0 x9DD277AF, 0 x04DB2615, 0 x73DC1683, 0 xE3630B12, 0 x94643B84,
0 x0D6D6A3E, 0 x7A6A5AA8, 0 xE40ECF0B, 0 x9309FF9D, 0 x0A00AE27, 0 x7D079EB1,
0 xF00F9344, 0 x8708A3D2, 0 x1E01F268, 0 x6906C2FE, 0 xF762575D, 0 x806567CB,
0 x196C3671, 0 x6E6B06E7, 0 xFED41B76, 0 x89D32BE0, 0 x10DA7A5A, 0 x67DD4ACC,
0 xF9B9DF6F, 0 x8EBEEFF9, 0 x17B7BE43, 0 x60B08ED5, 0 xD6D6A3E8, 0 xA1D1937E,
0 x38D8C2C4, 0 x4FDFF252, 0 xD1BB67F1, 0 xA6BC5767, 0 x3FB506DD, 0 x48B2364B,
0 xD80D2BDA, 0 xAF0A1B4C, 0 x36034AF6, 0 x41047A60, 0 xDF60EFC3, 0 xA867DF55,
0 x316E8EEF, 0 x4669BE79, 0 xCB61B38C, 0 xBC66831A, 0 x256FD2A0, 0 x5268E236,
0 xCC0C7795, 0 xBB0B4703, 0 x220216B9, 0 x5505262F, 0 xC5BA3BBE, 0 xB2BD0B28,
0 x2BB45A92, 0 x5CB36A04, 0 xC2D7FFA7, 0 xB5D0CF31, 0 x2CD99E8B, 0 x5BDEAE1D,
0 x9B64C2B0, 0 xEC63F226, 0 x756AA39C, 0 x026D930A, 0 x9C0906A9, 0 xEB0E363F,
0 x72076785, 0 x05005713, 0 x95BF4A82, 0 xE2B87A14, 0 x7BB12BAE, 0 x0CB61B38,
0 x92D28E9B, 0 xE5D5BE0D, 0 x7CDCEFB7, 0 x0BDBDF21, 0 x86D3D2D4, 0 xF1D4E242,
0 x68DDB3F8, 0 x1FDA836E, 0 x81BE16CD, 0 xF6B9265B, 0 x6FB077E1, 0 x18B74777,
0 x88085AE6, 0 xFF0F6A70, 0 x66063BCA, 0 x11010B5C, 0 x8F659EFF, 0 xF862AE69,
0 x616BFFD3, 0 x166CCF45, 0 xA00AE278, 0 xD70DD2EE, 0 x4E048354, 0 x3903B3C2,
0 xA7672661, 0 xD06016F7, 0 x4969474D, 0 x3E6E77DB, 0 xAED16A4A, 0 xD9D65ADC,
0 x40DF0B66, 0 x37D83BF0, 0 xA9BCAE53, 0 xDEBB9EC5, 0 x47B2CF7F, 0 x30B5FFE9,
0 xBDBDF21C, 0 xCABAC28A, 0 x53B39330, 0 x24B4A3A6, 0 xBAD03605, 0 xCDD70693,
0 x54DE5729, 0 x23D967BF, 0 xB3667A2E, 0 xC4614AB8, 0 x5D681B02, 0 x2A6F2B94,
0 xB40BBE37, 0 xC30C8EA1, 0 x5A05DF1B, 0 x2D02EF8D, 0 x00000001
},
[AV_CRC_16_ANSI_LE] = {
0 x0000, 0 xC0C1, 0 xC181, 0 x0140, 0 xC301, 0 x03C0, 0 x0280, 0 xC241,
0 xC601, 0 x06C0, 0 x0780, 0 xC741, 0 x0500, 0 xC5C1, 0 xC481, 0 x0440,
0 xCC01, 0 x0CC0, 0 x0D80, 0 xCD41, 0 x0F00, 0 xCFC1, 0 xCE81, 0 x0E40,
0 x0A00, 0 xCAC1, 0 xCB81, 0 x0B40, 0 xC901, 0 x09C0, 0 x0880, 0 xC841,
0 xD801, 0 x18C0, 0 x1980, 0 xD941, 0 x1B00, 0 xDBC1, 0 xDA81, 0 x1A40,
0 x1E00, 0 xDEC1, 0 xDF81, 0 x1F40, 0 xDD01, 0 x1DC0, 0 x1C80, 0 xDC41,
0 x1400, 0 xD4C1, 0 xD581, 0 x1540, 0 xD701, 0 x17C0, 0 x1680, 0 xD641,
0 xD201, 0 x12C0, 0 x1380, 0 xD341, 0 x1100, 0 xD1C1, 0 xD081, 0 x1040,
0 xF001, 0 x30C0, 0 x3180, 0 xF141, 0 x3300, 0 xF3C1, 0 xF281, 0 x3240,
0 x3600, 0 xF6C1, 0 xF781, 0 x3740, 0 xF501, 0 x35C0, 0 x3480, 0 xF441,
0 x3C00, 0 xFCC1, 0 xFD81, 0 x3D40, 0 xFF01, 0 x3FC0, 0 x3E80, 0 xFE41,
0 xFA01, 0 x3AC0, 0 x3B80, 0 xFB41, 0 x3900, 0 xF9C1, 0 xF881, 0 x3840,
0 x2800, 0 xE8C1, 0 xE981, 0 x2940, 0 xEB01, 0 x2BC0, 0 x2A80, 0 xEA41,
0 xEE01, 0 x2EC0, 0 x2F80, 0 xEF41, 0 x2D00, 0 xEDC1, 0 xEC81, 0 x2C40,
0 xE401, 0 x24C0, 0 x2580, 0 xE541, 0 x2700, 0 xE7C1, 0 xE681, 0 x2640,
0 x2200, 0 xE2C1, 0 xE381, 0 x2340, 0 xE101, 0 x21C0, 0 x2080, 0 xE041,
0 xA001, 0 x60C0, 0 x6180, 0 xA141, 0 x6300, 0 xA3C1, 0 xA281, 0 x6240,
0 x6600, 0 xA6C1, 0 xA781, 0 x6740, 0 xA501, 0 x65C0, 0 x6480, 0 xA441,
0 x6C00, 0 xACC1, 0 xAD81, 0 x6D40, 0 xAF01, 0 x6FC0, 0 x6E80, 0 xAE41,
0 xAA01, 0 x6AC0, 0 x6B80, 0 xAB41, 0 x6900, 0 xA9C1, 0 xA881, 0 x6840,
0 x7800, 0 xB8C1, 0 xB981, 0 x7940, 0 xBB01, 0 x7BC0, 0 x7A80, 0 xBA41,
0 xBE01, 0 x7EC0, 0 x7F80, 0 xBF41, 0 x7D00, 0 xBDC1, 0 xBC81, 0 x7C40,
0 xB401, 0 x74C0, 0 x7580, 0 xB541, 0 x7700, 0 xB7C1, 0 xB681, 0 x7640,
0 x7200, 0 xB2C1, 0 xB381, 0 x7340, 0 xB101, 0 x71C0, 0 x7080, 0 xB041,
0 x5000, 0 x90C1, 0 x9181, 0 x5140, 0 x9301, 0 x53C0, 0 x5280, 0 x9241,
0 x9601, 0 x56C0, 0 x5780, 0 x9741, 0 x5500, 0 x95C1, 0 x9481, 0 x5440,
0 x9C01, 0 x5CC0, 0 x5D80, 0 x9D41, 0 x5F00, 0 x9FC1, 0 x9E81, 0 x5E40,
0 x5A00, 0 x9AC1, 0 x9B81, 0 x5B40, 0 x9901, 0 x59C0, 0 x5880, 0 x9841,
0 x8801, 0 x48C0, 0 x4980, 0 x8941, 0 x4B00, 0 x8BC1, 0 x8A81, 0 x4A40,
0 x4E00, 0 x8EC1, 0 x8F81, 0 x4F40, 0 x8D01, 0 x4DC0, 0 x4C80, 0 x8C41,
0 x4400, 0 x84C1, 0 x8581, 0 x4540, 0 x8701, 0 x47C0, 0 x4680, 0 x8641,
0 x8201, 0 x42C0, 0 x4380, 0 x8341, 0 x4100, 0 x81C1, 0 x8081, 0 x4040,
0 x0001
},
};
#else
#if CONFIG_SMALL
#define CRC_TABLE_SIZE 257
#else
#define CRC_TABLE_SIZE 1024
#endif
static AVCRC av_crc_table[AV_CRC_MAX][CRC_TABLE_SIZE];
#define DECLARE_CRC_INIT_TABLE_ONCE(id, le, bits, poly) \
static AVOnce id ## _once_control = AV_ONCE_INIT; \
static void id ## _init_table_once(void ) \
{ \
av_assert0(av_crc_init(av_crc_table[id], le, bits, poly, sizeof (av_crc_table[id])) >= 0 ); \
}
#define CRC_INIT_TABLE_ONCE(id) ff_thread_once(&id ## _once_control, id ## _init_table_once)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_8_ATM, 0 , 8 , 0 x07)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_8_EBU, 0 , 8 , 0 x1D)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI, 0 , 16 , 0 x8005)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_CCITT, 0 , 16 , 0 x1021)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_24_IEEE, 0 , 24 , 0 x864CFB)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE, 0 , 32 , 0 x04C11DB7)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE_LE, 1 , 32 , 0 xEDB88320)
DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI_LE, 1 , 16 , 0 xA001)
#endif
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size)
{
unsigned i, j;
uint32_t c;
if (bits < 8 || bits > 32 || poly >= (1 LL << bits))
return AVERROR(EINVAL);
if (ctx_size != sizeof (AVCRC) * 257 && ctx_size != sizeof (AVCRC) * 1024 )
return AVERROR(EINVAL);
for (i = 0 ; i < 256 ; i++) {
if (le) {
for (c = i, j = 0 ; j < 8 ; j++)
c = (c >> 1 ) ^ (poly & (-(c & 1 )));
ctx[i] = c;
} else {
for (c = i << 24 , j = 0 ; j < 8 ; j++)
c = (c << 1 ) ^ ((poly << (32 - bits)) & (((int32_t) c) >> 31 ));
ctx[i] = av_bswap32(c);
}
}
ctx[256 ] = 1 ;
#if !CONFIG_SMALL
if (ctx_size >= sizeof (AVCRC) * 1024 )
for (i = 0 ; i < 256 ; i++)
for (j = 0 ; j < 3 ; j++)
ctx[256 * (j + 1 ) + i] =
(ctx[256 * j + i] >> 8 ) ^ ctx[ctx[256 * j + i] & 0 xFF];
#endif
return 0 ;
}
const AVCRC *av_crc_get_table(AVCRCId crc_id)
{
#if !CONFIG_HARDCODED_TABLES
switch (crc_id) {
case AV_CRC_8_ATM: CRC_INIT_TABLE_ONCE(AV_CRC_8_ATM); break ;
case AV_CRC_8_EBU: CRC_INIT_TABLE_ONCE(AV_CRC_8_EBU); break ;
case AV_CRC_16_ANSI: CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI); break ;
case AV_CRC_16_CCITT: CRC_INIT_TABLE_ONCE(AV_CRC_16_CCITT); break ;
case AV_CRC_24_IEEE: CRC_INIT_TABLE_ONCE(AV_CRC_24_IEEE); break ;
case AV_CRC_32_IEEE: CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE); break ;
case AV_CRC_32_IEEE_LE: CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE_LE); break ;
case AV_CRC_16_ANSI_LE: CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI_LE); break ;
default : av_assert0(0 );
}
#endif
return av_crc_table[crc_id];
}
uint32_t av_crc(const AVCRC *ctx, uint32_t crc,
const uint8_t *buffer, size_t length)
{
const uint8_t *end = buffer + length;
#if !CONFIG_SMALL
if (!ctx[256 ]) {
while (((intptr_t) buffer & 3 ) && buffer < end)
crc = ctx[((uint8_t) crc) ^ *buffer++] ^ (crc >> 8 );
while (buffer < end - 3 ) {
crc ^= av_le2ne32(*(const uint32_t *) buffer); buffer += 4 ;
crc = ctx[3 * 256 + ( crc & 0 xFF)] ^
ctx[2 * 256 + ((crc >> 8 ) & 0 xFF)] ^
ctx[1 * 256 + ((crc >> 16 ) & 0 xFF)] ^
ctx[0 * 256 + ((crc >> 24 ) )];
}
}
#endif
while (buffer < end)
crc = ctx[((uint8_t) crc) ^ *buffer++] ^ (crc >> 8 );
return crc;
}
Messung V0.5 in Prozent C=100 H=73 G=87