30 {0x01, 9}, {0x01, 8}, {0x01, 7}, {0x01, 6}, {0x01, 5}, {0x01, 4}, {0x01, 3},
31 {0x04, 3}, {0x05, 3}, {0x06, 3}, {0x07, 3},
32 {0x03, 3}, {0x05, 4}, {0x09, 5}, {0x11, 6}, {0x21, 7}, {0x41, 8}, {0x81, 9},
34 {0x01, 9}, {0x01, 8}, {0x01, 7}, {0x01, 6}, {0x01, 5}, {0x01, 4}, {0x01, 3},
36 {0x03, 3}, {0x05, 4}, {0x09, 5}, {0x11, 6}, {0x21, 7}, {0x41, 8}, {0x81, 9},
38 {0x01, 9}, {0x01, 8}, {0x01, 7}, {0x01, 6}, {0x01, 5}, {0x01, 4}, {0x01, 3},
40 {0x03, 3}, {0x05, 4}, {0x09, 5}, {0x11, 6}, {0x21, 7}, {0x41, 8}, {0x81, 9},
46 #define CRC_TABLE_SIZE 257
48 #define CRC_TABLE_SIZE 1024
69 crc ^=
AV_RL16(buf + buf_size - 2);
76 checksum ^= buf[buf_size-1];
83 int num_bytes = (bit_size + 2) / 8;
85 int crc =
crc_1D[buf[0] & 0x3f];
87 crc ^= buf[num_bytes - 1];
89 for (i = 0; i < ((bit_size + 2) & 7); i++) {
93 crc ^= (buf[num_bytes] >> (7 - i)) & 1;
101 uint32_t scratch = 0;
102 const uint8_t *buf_end = buf + buf_size;
104 for (; ((intptr_t) buf & 3) && buf < buf_end; buf++)
106 for (; buf < buf_end - 3; buf += 4)
107 scratch ^= *((
const uint32_t*)
buf);
111 for (; buf < buf_end; buf++)
uint16_t ff_mlp_checksum16(const uint8_t *buf, unsigned int buf_size)
const uint8_t ff_mlp_huffman_tables[3][18][2]
Tables defining the Huffman codes.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
static uint8_t xor_32_to_8(uint32_t value)
XOR four bytes into one.
static AVCRC crc_1D[CRC_TABLE_SIZE]
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size)
Initialize a CRC table.
uint8_t ff_mlp_calculate_parity(const uint8_t *buf, unsigned int buf_size)
XOR together all the bytes of a buffer.
uint8_t ff_mlp_restart_checksum(const uint8_t *buf, unsigned int bit_size)
Calculate an 8-bit checksum over a restart header – a non-multiple-of-8 number of bits...
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
static AVCRC crc_63[CRC_TABLE_SIZE]
av_cold void ff_mlp_init_crc(void)
static AVCRC crc_2D[CRC_TABLE_SIZE]
uint8_t ff_mlp_checksum8(const uint8_t *buf, unsigned int buf_size)
MLP uses checksums that seem to be based on the standard CRC algorithm, but are not (in implementatio...