diff options
author | Matthew Harris <[email protected]> | 2016-01-06 16:28:32 +0100 |
---|---|---|
committer | Matthew Harris <[email protected]> | 2016-01-06 16:28:32 +0100 |
commit | 52ae4377ddc9676fda5eb8f9ac5d93b0521e8aba (patch) | |
tree | ddd54f79c10856f5053cad30a8d2e7126e8c2af4 /src/java/com/jogamp/openal/util/WAVLoader.java | |
parent | a22129865cfaa40b4f3f4cee519dac36f5d0a8c7 (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.java | 6 |
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(); } |