summaryrefslogtreecommitdiff
path: root/apps/metadata.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/metadata.c')
-rw-r--r--apps/metadata.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/apps/metadata.c b/apps/metadata.c
index 540e62c4aa..f59917ceb8 100644
--- a/apps/metadata.c
+++ b/apps/metadata.c
@@ -83,6 +83,9 @@ unsigned short a52_441framesizes[]=
83 557*2,558*2,696*2,697*2,835*2,836*2,975*2,976*2, 83 557*2,558*2,696*2,697*2,835*2,836*2,975*2,976*2,
84 1114*2,1115*2,1253*2,1254*2,1393*2,1394*2}; 84 1114*2,1115*2,1253*2,1254*2,1393*2,1394*2};
85 85
86const long wavpack_sample_rates [] = { 6000, 8000, 9600, 11025, 12000, 16000,
87 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000, 192000 };
88
86/* Get metadata for track - return false if parsing showed problems with the 89/* Get metadata for track - return false if parsing showed problems with the
87 file that would prevent playback. */ 90 file that would prevent playback. */
88 91
@@ -334,12 +337,18 @@ bool get_metadata(struct track_info* track, int fd, const char* trackname,
334 337
335 track->id3.vbr = true; /* All WavPack files are VBR */ 338 track->id3.vbr = true; /* All WavPack files are VBR */
336 track->id3.filesize = filesize (fd); 339 track->id3.filesize = filesize (fd);
337 track->id3.frequency = 44100;
338 340
339 if ((buf [20] | buf [21] | buf [22] | buf [23]) && 341 if ((buf [20] | buf [21] | buf [22] | buf [23]) &&
340 (buf [12] & buf [13] & buf [14] & buf [15]) != 0xff) { 342 (buf [12] & buf [13] & buf [14] & buf [15]) != 0xff) {
343 int srindx = ((buf [26] >> 7) & 1) + ((buf [27] << 1) & 14);
344
345 if (srindx == 15)
346 track->id3.frequency = 44100;
347 else
348 track->id3.frequency = wavpack_sample_rates [srindx];
349
341 totalsamples = (buf[15] << 24) | (buf[14] << 16) | (buf[13] << 8) | buf[12]; 350 totalsamples = (buf[15] << 24) | (buf[14] << 16) | (buf[13] << 8) | buf[12];
342 track->id3.length = (totalsamples + 220) / 441 * 10; 351 track->id3.length = totalsamples / (track->id3.frequency / 100) * 10;
343 track->id3.bitrate = filesize (fd) / 352 track->id3.bitrate = filesize (fd) /
344 (track->id3.length / 8); 353 (track->id3.length / 8);
345 } 354 }