#include <stdint.h>#include <stddef.h>#include "common.h"Go to the source code of this file.
Typedefs | |
| typedef uint32_t | AVCRC |
Enumerations | |
| enum | AVCRCId { AV_CRC_8_ATM, AV_CRC_16_ANSI, AV_CRC_16_CCITT, AV_CRC_32_IEEE, AV_CRC_32_IEEE_LE, AV_CRC_MAX } |
Functions | |
| int | av_crc_init (AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size) |
| const AVCRC * | av_crc_get_table (AVCRCId crc_id) |
| uint32_t | av_crc (const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length) av_pure |
| enum AVCRCId |
Definition at line 30 of file crc.h.
00030 { 00031 AV_CRC_8_ATM, 00032 AV_CRC_16_ANSI, 00033 AV_CRC_16_CCITT, 00034 AV_CRC_32_IEEE, 00035 AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ 00036 AV_CRC_MAX, /*< not part of public API! don't use outside lavu */ 00037 }AVCRCId;
| uint32_t av_crc | ( | const AVCRC * | ctx, | |
| uint32_t | crc, | |||
| const uint8_t * | buffer, | |||
| size_t | length | |||
| ) |
Calculate the CRC of a block
| crc | CRC of previous blocks if any or initial value for CRC. |
Definition at line 112 of file crc.c.
References le2me_32.
Referenced by ac3_decode_frame(), ac3_probe(), decode_frame(), ff_crc04C11DB7_update(), mlp_checksum16(), mlp_checksum8(), mlp_restart_checksum(), mpegts_write_section(), output_frame_end(), output_frame_footer(), output_frame_header(), and write_section_data().
00112 { 00113 const uint8_t *end= buffer+length; 00114 00115 #ifndef CONFIG_SMALL 00116 if(!ctx[256]) 00117 while(buffer<end-3){ 00118 crc ^= le2me_32(*(const uint32_t*)buffer); buffer+=4; 00119 crc = ctx[3*256 + ( crc &0xFF)] 00120 ^ctx[2*256 + ((crc>>8 )&0xFF)] 00121 ^ctx[1*256 + ((crc>>16)&0xFF)] 00122 ^ctx[0*256 + ((crc>>24) )]; 00123 } 00124 #endif 00125 while(buffer<end) 00126 crc = ctx[((uint8_t)crc) ^ *buffer++] ^ (crc >> 8); 00127 00128 return crc; 00129 }
Get an initialized standard CRC table.
| crc_id | ID of a standard CRC |
Definition at line 92 of file crc.c.
References av_crc_init(), av_crc_table, av_crc_table_params, bits, le, NULL, and poly.
Referenced by ac3_decode_frame(), ac3_probe(), decode_frame(), ff_crc04C11DB7_update(), mpegts_write_section(), output_frame_end(), output_frame_footer(), output_frame_header(), and write_section_data().
00092 { 00093 #ifndef CONFIG_HARDCODED_TABLES 00094 if (!av_crc_table[crc_id][sizeof(av_crc_table[crc_id])/sizeof(av_crc_table[crc_id][0])-1]) 00095 if (av_crc_init(av_crc_table[crc_id], 00096 av_crc_table_params[crc_id].le, 00097 av_crc_table_params[crc_id].bits, 00098 av_crc_table_params[crc_id].poly, 00099 sizeof(av_crc_table[crc_id])) < 0) 00100 return NULL; 00101 #endif 00102 return av_crc_table[crc_id]; 00103 }
| int av_crc_init | ( | AVCRC * | ctx, | |
| int | le, | |||
| int | bits, | |||
| uint32_t | poly, | |||
| int | ctx_size | |||
| ) |
Inits a crc table.
| ctx | must be an array of sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 | |
| cts_size | size of ctx in bytes | |
| le | if 1, lowest bit represents coefficient for highest exponent of corresponding polynomial (both for poly and actual CRC). If 0, you must swap the crc parameter and the result of av_crc if you need the standard representation (can be simplified in most cases to e.g. bswap16): bswap_32(crc << (32-bits)) | |
| bits | number of bits for the CRC | |
| poly | generator polynomial without the x**bits coefficient, in the representation as specified by le |
Definition at line 56 of file crc.c.
References bswap_32(), and c.
Referenced by av_crc_get_table(), init_static(), and mlp_checksum16().
00056 { 00057 int i, j; 00058 uint32_t c; 00059 00060 if (bits < 8 || bits > 32 || poly >= (1LL<<bits)) 00061 return -1; 00062 if (ctx_size != sizeof(AVCRC)*257 && ctx_size != sizeof(AVCRC)*1024) 00063 return -1; 00064 00065 for (i = 0; i < 256; i++) { 00066 if (le) { 00067 for (c = i, j = 0; j < 8; j++) 00068 c = (c>>1)^(poly & (-(c&1))); 00069 ctx[i] = c; 00070 } else { 00071 for (c = i << 24, j = 0; j < 8; j++) 00072 c = (c<<1) ^ ((poly<<(32-bits)) & (((int32_t)c)>>31) ); 00073 ctx[i] = bswap_32(c); 00074 } 00075 } 00076 ctx[256]=1; 00077 #ifndef CONFIG_SMALL 00078 if(ctx_size >= sizeof(AVCRC)*1024) 00079 for (i = 0; i < 256; i++) 00080 for(j=0; j<3; j++) 00081 ctx[256*(j+1) + i]= (ctx[256*j + i]>>8) ^ ctx[ ctx[256*j + i]&0xFF ]; 00082 #endif 00083 00084 return 0; 00085 }
1.5.1