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() :
|
SoundFileReaderWav::SoundFileReaderWav() :
|
||||||
m_stream (NULL),
|
m_stream (NULL),
|
||||||
m_bytesPerSample(0),
|
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);
|
assert(m_stream);
|
||||||
|
|
||||||
Uint64 count = 0;
|
Uint64 count = 0;
|
||||||
while (count < maxCount)
|
while ((count < maxCount) && (m_stream->tell() < m_dataEnd))
|
||||||
{
|
{
|
||||||
switch (m_bytesPerSample)
|
switch (m_bytesPerSample)
|
||||||
{
|
{
|
||||||
@ -285,8 +286,9 @@ bool SoundFileReaderWav::parseHeader(Info& info)
|
|||||||
// Compute the total number of samples
|
// Compute the total number of samples
|
||||||
info.sampleCount = subChunkSize / m_bytesPerSample;
|
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_dataStart = m_stream->tell();
|
||||||
|
m_dataEnd = m_dataStart + info.sampleCount * m_bytesPerSample;
|
||||||
|
|
||||||
dataChunkFound = true;
|
dataChunkFound = true;
|
||||||
}
|
}
|
||||||
|
@ -111,6 +111,7 @@ private:
|
|||||||
InputStream* m_stream; ///< Source stream to read from
|
InputStream* m_stream; ///< Source stream to read from
|
||||||
unsigned int m_bytesPerSample; ///< Size of a sample, in bytes
|
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_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
|
} // namespace priv
|
||||||
|
Loading…
Reference in New Issue
Block a user