mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 22:31:09 +08:00
Made WAV file reader no longer assume that data chunk goes till end
of file to prevent reading trailing metadata as samples.
This commit is contained in:
parent
499eb09642
commit
698bbccd6a
@ -110,7 +110,8 @@ bool SoundFileReaderWav::check(InputStream& stream)
|
||||
SoundFileReaderWav::SoundFileReaderWav() :
|
||||
m_stream (NULL),
|
||||
m_bytesPerSample(0),
|
||||
m_dataStart (0)
|
||||
m_dataStart (0),
|
||||
m_dataEnd (0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -145,7 +146,7 @@ Uint64 SoundFileReaderWav::read(Int16* samples, Uint64 maxCount)
|
||||
assert(m_stream);
|
||||
|
||||
Uint64 count = 0;
|
||||
while (count < maxCount)
|
||||
while ((count < maxCount) && (m_stream->tell() < m_dataEnd))
|
||||
{
|
||||
switch (m_bytesPerSample)
|
||||
{
|
||||
@ -285,8 +286,9 @@ bool SoundFileReaderWav::parseHeader(Info& info)
|
||||
// Compute the total number of samples
|
||||
info.sampleCount = subChunkSize / m_bytesPerSample;
|
||||
|
||||
// Store the starting position of samples in the file
|
||||
// Store the start and end position of samples in the file
|
||||
m_dataStart = m_stream->tell();
|
||||
m_dataEnd = m_dataStart + info.sampleCount * m_bytesPerSample;
|
||||
|
||||
dataChunkFound = true;
|
||||
}
|
||||
|
@ -111,6 +111,7 @@ private:
|
||||
InputStream* m_stream; ///< Source stream to read from
|
||||
unsigned int m_bytesPerSample; ///< Size of a sample, in bytes
|
||||
Uint64 m_dataStart; ///< Starting position of the audio data in the open file
|
||||
Uint64 m_dataEnd; ///< Position one byte past the end of the audio data in the open file
|
||||
};
|
||||
|
||||
} // namespace priv
|
||||
|
Loading…
Reference in New Issue
Block a user