OK, and what about the bits included in table B5 ?

I saw on this list that the ISO CRC is broken. Is yours OK ?

----- Original Message ----- 
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, August 16, 2000 4:01 PM
Subject: RE: [MP3 ENCODER] CRC on MP3


> Howdy,
> 
> > I'd like to know where to find some sources or specifications
> > on the CRC used
> > on MP3 frames. I know I could get it in the lame sources, but
> > I'd like to know
> > first if it's fully compliant !
> 
> The polynomial used for CRC on all layers of MPEG audio is given on p.30 of
> ISO/IEC 11172-3:
> 
> If the protection bit in the header equals '0', a CRC-check word
> has been inserted in the bitstream just after the header.  The error
> detection method used is 'CRC-16' whose generator polynomial is:
> 
> G(X) = X^16 + X^15 + X^2 + 1
> 
> The bits included into the CRC-check are given by table B.5.
> 
> Figure A.9 on p.44 (CRC-check diagram) also represents this polynomial
> graphically.
> 
> Here's my code for the polynomial part:
> 
> #define CRC16_POLYNOMIAL 0x8005
> 
> // Pass length (<32) bits of data through the CRC-16 polynomial with initial
> state crc
> static void CRC_poly(unsigned data, unsigned char length, unsigned short
> *crc)
> {
>     bool     carry,data_bit;
>     unsigned mask;
> 
>     mask = 1<<length;
>     while(mask >>= 1) {
>         data_bit = (data & mask)!=0;  // mask off data bit and convert to
> boolean
>         carry = (*crc & 0x8000)!=0;   // mask off carry bit and convert to
> boolean
>         *crc <<= 1;                   // shift in LSB
>         if(carry^data_bit)            // if not, we'd be XOR'ing with 0...
>             *crc ^= CRC16_POLYNOMIAL;
>     }
> }
> 
> My code is derived from the ISO 'dist10' source.

--
MP3 ENCODER mailing list ( http://geek.rcc.se/mp3encoder/ )

Reply via email to