blob: 590cfbcb1005b64f0ddfb42a354fe604621c09c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
$NetBSD: patch-ba,v 1.1 2013/05/03 16:14:47 drochner Exp $
adapt to libao's output format
--- trackdb/TrackData.cc.orig 2009-04-20 21:20:17.000000000 +0000
+++ trackdb/TrackData.cc
@@ -642,7 +642,7 @@ int TrackData::waveLength(const char *fi
char magic[4];
long headerLen = 0;
long len;
- short waveFormat;
+ unsigned short waveFormat;
short waveChannels;
long waveRate;
short waveBits;
@@ -715,7 +715,7 @@ int TrackData::waveLength(const char *fi
waveFormat = readShort(fp);
- if (waveFormat != 1) {
+ if (waveFormat != 1 && waveFormat != 0xfffe) {
// not PCM format
log_message(-2, "%s: not in PCM format.", filename);
fclose(fp);
@@ -749,7 +749,21 @@ int TrackData::waveLength(const char *fi
return 2;
}
- len -= 16;
+ if (waveFormat == 1)
+ len -= 16;
+ else {
+ readShort(fp); // cbsize
+ readShort(fp); // validbits
+ readLong(fp); // channelmask
+ waveFormat = readShort(fp); // subformat
+ if (waveFormat != 1) {
+ // not PCM format
+ log_message(-2, "%s: not in PCM format.", filename);
+ fclose(fp);
+ return 2;
+ }
+ len -= 26;
+ }
// skip chunk data
if (fseek(fp, len, SEEK_CUR) != 0) {
|