increase buffer size for ID3 with images
[FAPG] / fapg.c
diff --git a/fapg.c b/fapg.c
index df022cf..17b02b8 100644 (file)
--- a/fapg.c
+++ b/fapg.c
@@ -43,7 +43,7 @@
 
 #define MP3_BASE 1024
 #define OGG_BASE 1024*10
-#define MAX 1024*200            /* 200ko for ID3 with JPEG images in it */
+#define MAX 1024*250            /* 250ko for ID3 with JPEG images in it */
 
 #define FORMAT_M3U 0
 #define FORMAT_PLS 1
@@ -85,11 +85,13 @@ int duration;
 #define MPPENC 4
 #define OGGENC 5
 #define WAVENC 6
+#define WMAENC 7
 
 char *magic[] = { NULL,
     "audio/mpeg", "audio/mpeg",
     "audio/mpeg", "audio/mpeg",
     "audio/ogg-vorbis", "audio/x-wav",
+    "audio/x-ms-wma", 
     NULL
 };
 
@@ -841,7 +843,7 @@ void parse_ogg(unsigned char *file)
     lus = fread(buffer, 1, OGG_BASE, fic);
 
     /* try Ogg */
-    if(buffer[0] != 'O' && buffer[1] != 'g' && buffer[2] != 'g') {
+    if(strncmp(buffer, "Ogg", 3) != 0) {
         fprintf(stderr, "Warning >> not a Ogg header : %s\n", file);
         return;
     }
@@ -860,6 +862,13 @@ void parse_ogg(unsigned char *file)
             title[size - 6] = '\0';
             c += size;
         }
+        if(strncasecmp(c, "ALBUM ARTIST=", 13) == 0) {
+            // ignore tag
+            size =
+                *(c - 4) + (*(c - 3) << 8) + (*(c - 2) << 16) +
+                (*(c - 1) << 24);
+            c += size;
+        }
         if(strncasecmp(c, "ARTIST=", 7) == 0) {
             size =
                 *(c - 4) + (*(c - 3) << 8) + (*(c - 2) << 16) +
@@ -924,7 +933,7 @@ void parse_mpc(unsigned char *file)
     lus = fread(buffer, 1, 12, fic);
 
     /* try Musepack */
-    if(buffer[0] != 'M' && buffer[1] != 'P' && buffer[2] != '+') {
+    if (strncmp(buffer, "MP+", 3) != 0) {
         fprintf(stderr, "Warning >> not a Musepack header : %s\n", file);
         return;
     }
@@ -1281,9 +1290,15 @@ void parse_file(unsigned char *newpath, unsigned char * original_path)
         encoding = OGGENC;
     }
     if(strcmp(".wav", ext) == 0) {
-        duration = -1;          /* parse_wav(newpath); */
+        duration = -1;
+        /* parse_wav(newpath); */
         encoding = WAVENC;
     }
+    if(strcmp(".wma", ext) == 0) {
+        duration = -1;
+        /* parse_wma(newpath); */
+        encoding = WMAENC;
+    }
     /* guesstitle() */
     if((strlen(artist) == 0) && (strlen(title) == 0)) {
         // there are no tag infos read