summaryrefslogtreecommitdiff
path: root/apps/metadata.c
diff options
context:
space:
mode:
authorRobert Kukla <roolku@rockbox.org>2007-02-28 00:58:44 +0000
committerRobert Kukla <roolku@rockbox.org>2007-02-28 00:58:44 +0000
commit726181b2122bcbf3e028af5022d6abf80e85b0ba (patch)
treecc310647e95b5fd139d08e984ab31a27b758b2f3 /apps/metadata.c
parent237ff9e61546a7eafc4016277c992277058f5a73 (diff)
downloadrockbox-726181b2122bcbf3e028af5022d6abf80e85b0ba.zip
rockbox-726181b2122bcbf3e028af5022d6abf80e85b0ba.tar.gz
rockbox-726181b2122bcbf3e028af5022d6abf80e85b0ba.tar.bz2
rockbox-726181b2122bcbf3e028af5022d6abf80e85b0ba.tar.xz
FS#5720 — improved meta data extraction from SID files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12515 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/metadata.c')
-rw-r--r--apps/metadata.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/apps/metadata.c b/apps/metadata.c
index 8a941e8..92e400a 100644
--- a/apps/metadata.c
+++ b/apps/metadata.c
@@ -26,6 +26,7 @@
#include "metadata.h"
#include "mp3_playback.h"
#include "logf.h"
+#include "rbunicode.h"
#include "atoi.h"
#include "replaygain.h"
#include "debug.h"
@@ -1727,7 +1728,7 @@ static bool get_sid_metadata(int fd, struct mp3entry* id3)
if ((lseek(fd, 0, SEEK_SET) < 0)
- || ((read_bytes = read(fd, buf, sizeof(id3->path))) < 44))
+ || ((read_bytes = read(fd, buf, 0x80)) < 0x80))
{
return false;
}
@@ -1740,15 +1741,23 @@ static bool get_sid_metadata(int fd, struct mp3entry* id3)
p = id3->id3v2buf;
/* Copy Title (assumed max 0x1f letters + 1 zero byte) */
- strncpy(p, (char *)&buf[0x16], 0x20);
- p[0x1f]=0; /* make sure it is zero terminated */
id3->title = p;
- p += strlen(p)+1;
+ buf[0x16+0x1f] = 0;
+ p = iso_decode(&buf[0x16], p, 0, strlen(&buf[0x16])+1);
/* Copy Artist (assumed max 0x1f letters + 1 zero byte) */
- strncpy(p, (char *)&buf[0x36], 0x20);
- p[0x1f]=0; /* make sure it is zero terminated */
id3->artist = p;
+ buf[0x36+0x1f] = 0;
+ p = iso_decode(&buf[0x36], p, 0, strlen(&buf[0x36])+1);
+
+ /* Copy Album (assumed max 4 letters + 1 zero byte) */
+ buf[0x56+0x4] = 0;
+ id3->year = atoi(&buf[0x56]);
+
+ /* Copy Album (assumed max 0x1f-0x05 letters + 1 zero byte) */
+ id3->album = p;
+ buf[0x56+0x1f] = 0;
+ p = iso_decode(&buf[0x5b], p, 0, strlen(&buf[0x5b])+1);
id3->bitrate = 706;
id3->frequency = 44100;