crc.h File Reference

#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 AVCRCav_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


Typedef Documentation

typedef uint32_t AVCRC

Definition at line 28 of file crc.h.


Enumeration Type Documentation

enum AVCRCId

Enumerator:
AV_CRC_8_ATM 
AV_CRC_16_ANSI 
AV_CRC_16_CCITT 
AV_CRC_32_IEEE 
AV_CRC_32_IEEE_LE 
AV_CRC_MAX 

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;


Function Documentation

uint32_t av_crc ( const AVCRC ctx,
uint32_t  crc,
const uint8_t *  buffer,
size_t  length 
)

Calculate the CRC of a block

Parameters:
crc CRC of previous blocks if any or initial value for CRC.
Returns:
CRC updated with the data from the given block
See also:
av_crc_init() "le" parameter

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 }

const AVCRC* av_crc_get_table ( AVCRCId  crc_id  ) 

Get an initialized standard CRC table.

Parameters:
crc_id ID of a standard CRC
Returns:
a pointer to the CRC table or NULL on failure

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.

Parameters:
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
Returns:
<0 on failure

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 }


Generated on Wed Nov 19 15:45:00 2008 for libextractor by  doxygen 1.5.1