Fix big-endian code in tsio_wav.cpp.

Get the address the C++-managed pointers properly.

This commit fixes code that was previously refactored.
This commit is contained in:
Érico Rolim 2020-09-27 16:57:39 -03:00 committed by manongjohn
parent 2c66a4ced9
commit b003793236

View file

@ -395,17 +395,17 @@ bool TSoundTrackWriterWav::save(const TSoundTrackP &sndtrack) {
#if (!TNZ_LITTLE_ENDIAN) #if (!TNZ_LITTLE_ENDIAN)
{ {
if (fmtChunk.m_bitPerSample == 8) if (fmtChunk.m_bitPerSample == 8)
memcpy((void *)waveData, (void *)sndtrack->getRawData(), soundDataLength); memcpy((void *)waveData.get(), (void *)sndtrack->getRawData(), soundDataLength);
else if (fmtChunk.m_bitPerSample == 16) { else if (fmtChunk.m_bitPerSample == 16) {
swapAndCopySamples((short *)sndtrack->getRawData(), (short *)waveData, swapAndCopySamples((short *)sndtrack->getRawData(), (short *)waveData.get(),
sndtrack->getSampleCount() * fmtChunk.m_chans); sndtrack->getSampleCount() * fmtChunk.m_chans);
} else if (fmtChunk.m_bitPerSample == 24) { // swap e togliere quarto byte } else if (fmtChunk.m_bitPerSample == 24) { // swap e togliere quarto byte
UCHAR *begin = (UCHAR *)sndtrack->getRawData(); UCHAR *begin = (UCHAR *)sndtrack->getRawData();
for (int i = 0; i < (int)sndtrack->getSampleCount() * fmtChunk.m_chans; for (int i = 0; i < (int)sndtrack->getSampleCount() * fmtChunk.m_chans;
++i) { ++i) {
*(waveData + 3 * i) = *(begin + 4 * i + 3); *(waveData.get() + 3 * i) = *(begin + 4 * i + 3);
*(waveData + 3 * i + 1) = *(begin + 4 * i + 2); *(waveData.get() + 3 * i + 1) = *(begin + 4 * i + 2);
*(waveData + 3 * i + 2) = *(begin + 4 * i + 1); *(waveData.get() + 3 * i + 2) = *(begin + 4 * i + 1);
} }
} }
} }