annotate src/tta/id3.c @ 925:3673bbab7372 trunk

[svn] - make madplug ignore crc error. closes #884.
author yaz
date Mon, 09 Apr 2007 03:51:00 -0700
parents ff62f5530a36
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
290
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
1 #include <stdio.h>
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
2 #include <string.h>
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
3 #include "ttalib.h"
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
4 #include "id3genre.h"
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
5 #include "audacious/util.h"
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
6 #include <stdlib.h>
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
7 #include <audacious/titlestring.h>
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
8
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
9 /***********************************************************************
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
10 * ID3 tags manipulation routines
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
11 *
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
12 * Provides read access to ID3v1 tags v1.1, ID3v2 tags v2.3.x and above
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
13 * Supported ID3v2 frames: Title, Artist, Album, Track, Year,
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
14 * Genre, Comment.
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
15 *
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
16 **********************************************************************/
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
17
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
18 static unsigned int unpack_sint28 (const char *ptr) {
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
19 unsigned int value = 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
20
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
21 if (ptr[0] & 0x80) return 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
22
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
23 value = value | (ptr[0] & 0x7f);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
24 value = (value << 7) | (ptr[1] & 0x7f);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
25 value = (value << 7) | (ptr[2] & 0x7f);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
26 value = (value << 7) | (ptr[3] & 0x7f);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
27
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
28 return value;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
29 }
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
30
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
31 static unsigned int unpack_sint32 (const char *ptr) {
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
32 unsigned int value = 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
33
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
34 if (ptr[0] & 0x80) return 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
35
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
36 value = (value << 8) | ptr[0];
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
37 value = (value << 8) | ptr[1];
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
38 value = (value << 8) | ptr[2];
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
39 value = (value << 8) | ptr[3];
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
40
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
41 return value;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
42 }
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
43
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
44 static int get_frame_id (const char *id) {
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
45 if (!memcmp(id, "TIT2", 4)) return TIT2; // Title
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
46 if (!memcmp(id, "TPE1", 4)) return TPE1; // Artist
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
47 if (!memcmp(id, "TALB", 4)) return TALB; // Album
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
48 if (!memcmp(id, "TRCK", 4)) return TRCK; // Track
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
49 if (!memcmp(id, "TYER", 4)) return TYER; // Year
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
50 if (!memcmp(id, "TCON", 4)) return TCON; // Genre
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
51 if (!memcmp(id, "COMM", 4)) return COMM; // Comment
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
52 return 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
53 }
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
54
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
55 int skip_v2_header(tta_info *ttainfo) {
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
56 id3v2_tag id3v2;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
57 id3v2_frame frame_header;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
58 int id3v2_size;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
59 unsigned char *buffer, *ptr;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
60 gchar *utf;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
61 gchar tmp[MAX_LINE];
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
62 gchar *tmpptr;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
63 int tmplen;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
64
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
65 if (!fread(&id3v2, 1, sizeof (id3v2_tag), ttainfo->HANDLE) ||
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
66 memcmp(id3v2.id, "ID3", 3))
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
67 {
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
68 fseek (ttainfo->HANDLE, 0, SEEK_SET);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
69 return 0;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
70 }
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
71
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
72 id3v2_size = unpack_sint28(id3v2.size) + 10;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
73
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
74 fseek (ttainfo->HANDLE, id3v2_size, SEEK_SET);
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
75 ttainfo->id3v2.size = id3v2_size;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
76
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
77 return id3v2_size;
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
78 }
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
79
fbd06b4aa776 [svn] - add TrueAudio plugin
yaz
parents:
diff changeset
80 /* eof */