aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/openal/util/WAVLoader.java
diff options
context:
space:
mode:
authorMatthew Harris <[email protected]>2016-01-06 16:28:32 +0100
committerMatthew Harris <[email protected]>2016-01-06 16:28:32 +0100
commit52ae4377ddc9676fda5eb8f9ac5d93b0521e8aba (patch)
treeddd54f79c10856f5053cad30a8d2e7126e8c2af4 /src/java/com/jogamp/openal/util/WAVLoader.java
parenta22129865cfaa40b4f3f4cee519dac36f5d0a8c7 (diff)
Ensure that only the size of sample data chunk is loaded, rather than entire remaining buffer. Copes with WAV files that have metadata appended to the end after the data RIFF chunk.
Diffstat (limited to 'src/java/com/jogamp/openal/util/WAVLoader.java')
-rw-r--r--src/java/com/jogamp/openal/util/WAVLoader.java6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/java/com/jogamp/openal/util/WAVLoader.java b/src/java/com/jogamp/openal/util/WAVLoader.java
index ef8d12a..48ff62a 100644
--- a/src/java/com/jogamp/openal/util/WAVLoader.java
+++ b/src/java/com/jogamp/openal/util/WAVLoader.java
@@ -123,6 +123,7 @@ public class WAVLoader {
short sChannels = 0, sSampleSizeInBits = 0;
long sampleRate = 0;
long chunkLength = 0;
+ int dataLength = 0;
while (!foundData) {
final int chunkId = (int)bs.readUInt32(true /* bigEndian */);
@@ -150,6 +151,7 @@ public class WAVLoader {
throw new ALException("WAV fmt chunks must be before data chunks: "+bs);
}
foundData = true;
+ dataLength = Bitstream.uint32LongToInt(chunkLength);
break;
default:
// unrecognized chunk, skips it
@@ -160,8 +162,8 @@ public class WAVLoader {
final int channels = sChannels;
final int sampleSizeInBits = sSampleSizeInBits;
final float fSampleRate = sampleRate;
- return WAVData.loadFromStream(bs.getSubStream(), riffLenI, channels, sampleSizeInBits,
- Math.round(fSampleRate), bigEndian ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN, false);
+ return WAVData.loadFromStream(bs.getSubStream(), dataLength, channels, sampleSizeInBits,
+ Math.round(fSampleRate), bigEndian ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN, false, dataLength);
} finally {
bs.close();
}