Toon posts:

[C] CRC van MP3s

Pagina: 1
Acties:
  • 51 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben al een tijdje aan het proberen om een CRC van een MP3 frame te krijgen. Het wil echter maar niet werken! Ik heb een MP3tje gemaakt d.m.v. Lame, met CRC info en mijn programma geeft steeds een andere CRC dan diegene die in de frame-header staat. Ik heb het programma al stap voor stap doorgelopen met de debugger, maar ik kom er nog steeds niet uit. Weet iemand wat er aan de hand is?

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int
checkcrc16(file, fi)
    file_info * file;
    frame_info * fi;
{
    char * pnt;
    int res;
    int len;
    int new_crc16;

    /* get some memory to put the data in to be crcked */
    pnt=(char *)malloc(fi->length);
    if (pnt==NULL) {
        fileerror(file, " malloc failed");
        return FALSE;
    }
    memset(pnt, 0, fi->length);

    /* read byte 2 and 3 from the header */
    cfseek(file->fp, (fi->offset)+2, SEEK_SET);
    res=cfread(pnt, 2, file->fp);
    if (!res) {
        free(pnt);
        return FALSE;
    }
    

    /* read the rest of the frame */
    cfseek(file->fp, (fi->offset)+6, SEEK_SET);
    len=(fi->length)-6; // minus header and crc

    res=cfread(pnt+2, len, file->fp);
    if (res<len) {
        free(pnt);
        return FALSE;
    }
    
    new_crc16=crc16(pnt, len+2);
    free(pnt);

    if (new_crc16==fi->crc16) {
        return TRUE;
    } else {
        return TRUE;
    }
    
}


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define CRC16_POLYNOMIAL 0x8005

/* from lame 3.93.1 */
int
crc_update(int value, int crc)
{
    int i;
    value <<= 8;
    for (i = 0; i < 8; i++) {
    value <<= 1;
    crc <<= 1;

    if (((crc ^ value) & 0x10000))
        crc ^= CRC16_POLYNOMIAL;
    }
    return crc;
}

int
crc16(data, length)
    unsigned char * data;
    int length;
{
    int i;
    int crc=0xffff;

    for (i=0; i<length; i++) 
        crc=crc_update(data[i], crc);

    return crc&0xffff;
}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 21 november 2003 @ 18:26:
Weet iemand wat er aan de hand is?
ik niet, maar wat ik wel weet is dat wij geen code voor jou gaan debuggen, dat mag je toch echt helemaal zelf doen :)

.edit: weer open op verzoek, op voorwaarde dat Sjord iets vertelt over het gebruikte CRC algoritme bij MP3's

[ Voor 18% gewijzigd door .oisyn op 22-11-2003 17:15 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

weet je zeker dat je de goeie polynomial hebt? Anders gewoon alle mogelijke polynomials proberen (zijn er gelukkig maar 65536) dan weet je het zeker.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mailtje van Sjord:
Laat maar op slot. Ik ben er nu achter dat mijn code waarschijnlijk
bijna goed is, maar dat ik alleen de verkeerde data neem uit het MP3tje.
Als ik dat wil weten post ik wel een nieuw berichtje.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Dit topic is gesloten.