summaryrefslogtreecommitdiff
path: root/junklib.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-06 12:46:07 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-04-06 12:46:07 +0200
commitddbca9d6a76f38b8951eb5ac5da19ce9f2b340cc (patch)
tree8428463ec2cf93116561e9875d87218c0e5c6006 /junklib.c
parente4550ae4025c64122f1e79a4b2de8d4271738b4a (diff)
fixed id3v2 txx parser to respect encoding
Diffstat (limited to 'junklib.c')
-rw-r--r--junklib.c64
1 files changed, 34 insertions, 30 deletions
diff --git a/junklib.c b/junklib.c
index 6d8b0ccb..5a99eb27 100644
--- a/junklib.c
+++ b/junklib.c
@@ -2187,40 +2187,44 @@ junk_load_comm_frame (int version_major, playItem_t *it, uint8_t *readptr, int s
int
junk_id3v2_load_txx (int version_major, playItem_t *it, uint8_t *readptr, int synched_size) {
- uint8_t *p = readptr;
- uint8_t encoding = *p;
- p++;
- uint8_t *desc = p;
- int desc_sz = 0;
- while (*p && p - readptr < synched_size) {
- p++;
- desc_sz++;
- }
- p++;
- if (p - readptr >= synched_size) {
- trace ("bad TXXX frame, skipped\n");
+ char *txx = convstr_id3v2 (version_major, *readptr, readptr+1, synched_size-1);
+ if (!txx) {
return -1;
}
- // FIXME: decode properly using frame encoding
- char *desc_s = desc;
- char *value_s = p;
- //trace ("value=%s\n", value_s);
- if (!strcasecmp (desc_s, "replaygain_album_gain")) {
- it->replaygain_album_gain = atof (value_s);
- trace ("%s=%s (%f)\n", desc_s, value_s, it->replaygain_album_gain);
- }
- else if (!strcasecmp (desc_s, "replaygain_album_peak")) {
- it->replaygain_album_peak = atof (value_s);
- trace ("%s=%s (%f)\n", desc_s, value_s, it->replaygain_album_peak);
- }
- else if (!strcasecmp (desc_s, "replaygain_track_gain")) {
- it->replaygain_track_gain = atof (value_s);
- trace ("%s=%s (%f)\n", desc_s, value_s, it->replaygain_track_gain);
+
+ char *val = NULL;
+ if (txx) {
+ char *p;
+ for (p = txx; *p; p++) {
+ if (*p == '\n') {
+ *p = 0;
+ val = p+1;
+ break;
+ }
+ }
}
- else if (!strcasecmp (desc_s, "replaygain_track_peak")) {
- it->replaygain_track_peak = atof (value_s);
- trace ("%s=%s (%f)\n", desc_s, value_s, it->replaygain_track_peak);
+
+ if (val) {
+ if (!strcasecmp (txx, "replaygain_album_gain")) {
+ it->replaygain_album_gain = atof (val);
+ trace ("%s=%s (%f)\n", txx, val, it->replaygain_album_gain);
+ }
+ else if (!strcasecmp (txx, "replaygain_album_peak")) {
+ it->replaygain_album_peak = atof (val);
+ trace ("%s=%s (%f)\n", txx, val, it->replaygain_album_peak);
+ }
+ else if (!strcasecmp (txx, "replaygain_track_gain")) {
+ it->replaygain_track_gain = atof (val);
+ trace ("%s=%s (%f)\n", txx, val, it->replaygain_track_gain);
+ }
+ else if (!strcasecmp (txx, "replaygain_track_peak")) {
+ it->replaygain_track_peak = atof (val);
+ trace ("%s=%s (%f)\n", txx, val, it->replaygain_track_peak);
+ }
}
+ free (txx);
+
+ return 0;
}
int