From: <sag...@us...> - 2014-10-25 11:44:09
|
Revision: 4486 http://sourceforge.net/p/modplug/code/4486 Author: saga-games Date: 2014-10-25 11:43:51 +0000 (Sat, 25 Oct 2014) Log Message: ----------- [Ref] Add a union for 8-bit and 16-bit sample pointer in ModSample to avoid casts in many parts of the program. Modified Paths: -------------- trunk/OpenMPT/mptrack/Autotune.cpp trunk/OpenMPT/mptrack/CleanupSong.cpp trunk/OpenMPT/mptrack/Ctrl_smp.cpp trunk/OpenMPT/mptrack/Undo.cpp trunk/OpenMPT/mptrack/View_smp.cpp trunk/OpenMPT/soundlib/Dlsbank.cpp trunk/OpenMPT/soundlib/ITCompression.cpp trunk/OpenMPT/soundlib/ITCompression.h trunk/OpenMPT/soundlib/Load_dbm.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/ModSample.h trunk/OpenMPT/soundlib/SampleFormatConverters.h trunk/OpenMPT/soundlib/SampleFormats.cpp trunk/OpenMPT/soundlib/SampleIO.cpp trunk/OpenMPT/soundlib/modsmp_ctrl.cpp trunk/OpenMPT/test/test.cpp Modified: trunk/OpenMPT/mptrack/Autotune.cpp =================================================================== --- trunk/OpenMPT/mptrack/Autotune.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/mptrack/Autotune.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -131,11 +131,11 @@ switch(sample.GetElementarySampleSize()) { case 1: - CopySamples(static_cast<int8 *>(sample.pSample) + sampleOffset * sample.GetNumChannels(), sampleLoopStart, sampleLoopEnd); + CopySamples(sample.pSample8 + sampleOffset * sample.GetNumChannels(), sampleLoopStart, sampleLoopEnd); return true; case 2: - CopySamples(static_cast<int16 *>(sample.pSample) + sampleOffset * sample.GetNumChannels(), sampleLoopStart, sampleLoopEnd); + CopySamples(sample.pSample16 + sampleOffset * sample.GetNumChannels(), sampleLoopStart, sampleLoopEnd); return true; } Modified: trunk/OpenMPT/mptrack/CleanupSong.cpp =================================================================== --- trunk/OpenMPT/mptrack/CleanupSong.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/mptrack/CleanupSong.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -536,13 +536,12 @@ // Check if the stereo channels of a sample contain identical data template<typename T> -static bool ComapreStereoChannels(SmpLength length, const void *sampleData) -//-------------------------------------------------------- +static bool ComapreStereoChannels(SmpLength length, const T *sampleData) +//---------------------------------------------------------------------- { - const T *data = static_cast<const T *>(sampleData); - for(SmpLength i = 0; i < length; i++, data += 2) + for(SmpLength i = 0; i < length; i++, sampleData += 2) { - if(data[0] != data[1]) + if(sampleData[0] != sampleData[1]) { return false; } @@ -580,10 +579,10 @@ bool identicalChannels = false; if(sample.GetElementarySampleSize() == 1) { - identicalChannels = ComapreStereoChannels<int8>(loopLength, sample.pSample); + identicalChannels = ComapreStereoChannels(loopLength, sample.pSample8); } else if(sample.GetElementarySampleSize() == 2) { - identicalChannels = ComapreStereoChannels<int16>(loopLength, sample.pSample); + identicalChannels = ComapreStereoChannels(loopLength, sample.pSample16); } if(identicalChannels) { Modified: trunk/OpenMPT/mptrack/Ctrl_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/mptrack/Ctrl_smp.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -1216,7 +1216,7 @@ if(sample.uFlags[CHN_16BIT]) { - int16 *p = (int16 *)sample.pSample; + int16 *p = sample.pSample16; int max = 1; for (SmpLength i = selStart; i < selEnd; i++) { @@ -1235,7 +1235,7 @@ } } else { - int8 *p = (int8 *)sample.pSample; + int8 *p = sample.pSample8; int max = 1; for (SmpLength i = selStart; i < selEnd; i++) { @@ -1272,20 +1272,20 @@ template<typename T> -void ApplyAmplifyImpl(void *pSample, SmpLength start, SmpLength end, int32 amp, bool fadeIn, bool fadeOut) -//-------------------------------------------------------------------------------------------------------- +void ApplyAmplifyImpl(T *pSample, SmpLength start, SmpLength end, int32 amp, bool fadeIn, bool fadeOut) +//----------------------------------------------------------------------------------------------------- { - T *p = static_cast<T *>(pSample) + start; + pSample += start; SmpLength len = end - start; int64 l64 = static_cast<int64>(len); for(SmpLength i = 0; i < len; i++) { - int32 l = (p[i] * amp) / 100; + int32 l = (pSample[i] * amp) / 100; if(fadeIn) l = (int32)((l * (int64)i) / l64); if(fadeOut) l = (int32)((l * (int64)(len - i)) / l64); Limit(l, std::numeric_limits<T>::min(), std::numeric_limits<T>::max()); - p[i] = static_cast<T>(l); + pSample[i] = static_cast<T>(l); } } @@ -1306,10 +1306,10 @@ if ((fadeIn) && (fadeOut)) lAmp *= 4; if (sample.uFlags[CHN_16BIT]) { - ApplyAmplifyImpl<int16>(sample.pSample, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); + ApplyAmplifyImpl<int16>(sample.pSample16, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); } else { - ApplyAmplifyImpl<int8>(sample.pSample, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); + ApplyAmplifyImpl<int8>(sample.pSample8, selection.nStart, selection.nEnd, lAmp, fadeIn, fadeOut); } sample.PrecomputeLoops(m_sndFile, false); SetModified(HINT_SAMPLEDATA, false); @@ -1488,12 +1488,12 @@ switch(sample.GetElementarySampleSize()) { case 1: - firstVal = SC::Convert<double, int8>()(static_cast<const int8 *>(sample.pSample)[readOffset]); - lastVal = SC::Convert<double, int8>()(static_cast<const int8 *>(sample.pSample)[readOffset + selLength - numChannels]); + firstVal = SC::Convert<double, int8>()(sample.pSample8[readOffset]); + lastVal = SC::Convert<double, int8>()(sample.pSample8[readOffset + selLength - numChannels]); break; case 2: - firstVal = SC::Convert<double, int16>()(static_cast<const int16 *>(sample.pSample)[readOffset]); - lastVal = SC::Convert<double, int16>()(static_cast<const int16 *>(sample.pSample)[readOffset + selLength - numChannels]); + firstVal = SC::Convert<double, int16>()(sample.pSample16[readOffset]); + lastVal = SC::Convert<double, int16>()(sample.pSample16[readOffset + selLength - numChannels]); break; default: // When higher bit depth is added, feel free to also replace CDSPResampler16 by CDSPResampler24 above. @@ -1520,10 +1520,10 @@ switch(sample.GetElementarySampleSize()) { case 1: - CopySample<SC::ConversionChain<SC::Convert<double, int8>, SC::DecodeIdentity<int8> > >(&convBuffer[0], smpCount, 1, static_cast<const int8 *>(sample.pSample) + readOffset, sample.GetSampleSizeInBytes(), sample.GetNumChannels()); + CopySample<SC::ConversionChain<SC::Convert<double, int8>, SC::DecodeIdentity<int8> > >(&convBuffer[0], smpCount, 1, sample.pSample8 + readOffset, sample.GetSampleSizeInBytes(), sample.GetNumChannels()); break; case 2: - CopySample<SC::ConversionChain<SC::Convert<double, int16>, SC::DecodeIdentity<int16> > >(&convBuffer[0], smpCount, 1, static_cast<const int16 *>(sample.pSample) + readOffset, sample.GetSampleSizeInBytes(), sample.GetNumChannels()); + CopySample<SC::ConversionChain<SC::Convert<double, int16>, SC::DecodeIdentity<int16> > >(&convBuffer[0], smpCount, 1, sample.pSample16 + readOffset, sample.GetSampleSizeInBytes(), sample.GetNumChannels()); break; } readOffset += smpCount * numChannels; @@ -1933,10 +1933,10 @@ switch(smpsize) { case 1: - CopyInterleavedSampleStreams(&(buffer[0]), static_cast<int8 *>(sample.pSample) + inPos * nChn, inChunkSize, nChn, conv8f32); + CopyInterleavedSampleStreams(&(buffer[0]), sample.pSample8 + inPos * nChn, inChunkSize, nChn, conv8f32); break; case 2: - CopyInterleavedSampleStreams(&(buffer[0]), static_cast<int16 *>(sample.pSample) + inPos * nChn, inChunkSize, nChn, convf32); + CopyInterleavedSampleStreams(&(buffer[0]), sample.pSample16 + inPos * nChn, inChunkSize, nChn, convf32); break; } soundtouch_putSamples(handleSt, &(buffer[0]), inChunkSize); @@ -2115,7 +2115,7 @@ } // Convert current channel's data chunk to float - int8 *ptr = (int8 *)sample.pSample + pos * smpsize * nChn + i * smpsize; + int8 *ptr = sample.pSample8 + pos * smpsize * nChn + i * smpsize; switch(smpsize) { @@ -2134,7 +2134,7 @@ smbPitchShift(pitch, static_cast<long>(len + finaloffset), fft, ovs, sampleRate, buffer, buffer); // Restore pitched-shifted float sample into original sample buffer - ptr = (int8 *)sample.pSample + (pos - inneroffset) * smpsize * nChn + i * smpsize; + ptr = sample.pSample8 + (pos - inneroffset) * smpsize * nChn + i * smpsize; const SmpLength copyLength = len + finaloffset - startoffset + 1; switch(smpsize) @@ -2251,12 +2251,11 @@ if (sample.uFlags[CHN_STEREO]) { int smplsize = sample.GetBytesPerSample(); - signed char *p = ((signed char *)sample.pSample) + selection.nStart * smplsize; - memset(p, 0, len * smplsize); + memset(sample.pSample8 + selection.nStart * smplsize, 0, len * smplsize); } else if (sample.uFlags[CHN_16BIT]) { - short int *p = ((short int *)sample.pSample) + selection.nStart; + int16 *p = sample.pSample16 + selection.nStart; int dest = (selection.nEnd < sample.nLength) ? p[len-1] : 0; int base = (selection.nStart) ? p[0] : 0; int delta = dest - base; @@ -2267,7 +2266,7 @@ } } else { - signed char *p = ((signed char *)sample.pSample) + selection.nStart; + int8 *p = sample.pSample8 + selection.nStart; int dest = (selection.nEnd < sample.nLength) ? p[len-1] : 0; int base = (selection.nStart) ? p[0] : 0; int delta = dest - base; Modified: trunk/OpenMPT/mptrack/Undo.cpp =================================================================== --- trunk/OpenMPT/mptrack/Undo.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/mptrack/Undo.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -380,7 +380,7 @@ undo.samplePtr = ModSample::AllocateSample(changeLen, bytesPerSample); if(undo.samplePtr == nullptr) return false; - memcpy(undo.samplePtr, static_cast<const char *>(oldSample.pSample) + changeStart * bytesPerSample, changeLen * bytesPerSample); + memcpy(undo.samplePtr, oldSample.pSample8 + changeStart * bytesPerSample, changeLen * bytesPerSample); #ifdef _DEBUG char s[64]; @@ -442,8 +442,8 @@ PrepareBuffer(toBuf, smp, redoType, undo.description, undo.changeStart, undo.changeEnd); ModSample &sample = sndFile.GetSample(smp); - char *pCurrentSample = static_cast<char *>(sample.pSample); - char *pNewSample = nullptr; // a new sample is possibly going to be allocated, depending on what's going to be undone. + int8 *pCurrentSample = sample.pSample8; + int8 *pNewSample = nullptr; // a new sample is possibly going to be allocated, depending on what's going to be undone. bool replace = false; uint8 bytesPerSample = undo.OldSample.GetBytesPerSample(); @@ -485,7 +485,7 @@ case sundo_delete: // insert deleted data - pNewSample = static_cast<char *>(ModSample::AllocateSample(undo.OldSample.nLength, bytesPerSample)); + pNewSample = static_cast<int8 *>(ModSample::AllocateSample(undo.OldSample.nLength, bytesPerSample)); if(pNewSample == nullptr) return false; replace = true; memcpy(pNewSample, pCurrentSample, undo.changeStart * bytesPerSample); @@ -495,7 +495,7 @@ case sundo_replace: // simply exchange sample pointer - pNewSample = static_cast<char *>(undo.samplePtr); + pNewSample = static_cast<int8 *>(undo.samplePtr); undo.samplePtr = nullptr; // prevent sample from being deleted replace = true; break; Modified: trunk/OpenMPT/mptrack/View_smp.cpp =================================================================== --- trunk/OpenMPT/mptrack/View_smp.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/mptrack/View_smp.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -1129,7 +1129,7 @@ { // Draw sample data in 1:1 ratio or higher (zoom in) SmpLength len = sample.nLength - nSmpScrollPos; - signed char *psample = ((signed char *)sample.pSample) + nSmpScrollPos * smplsize; + int8 *psample = sample.pSample8 + nSmpScrollPos * smplsize; if (sample.uFlags[CHN_STEREO]) { DrawSampleData1(offScreenDC, ymed-yrange/2, rect.right, yrange, len, sample.uFlags, psample); @@ -1148,7 +1148,7 @@ xscroll = nSmpScrollPos; len -= nSmpScrollPos; } - signed char *psample = ((signed char *)sample.pSample) + xscroll * smplsize; + int8 *psample = sample.pSample8 + xscroll * smplsize; if (sample.uFlags[CHN_STEREO]) { DrawSampleData2(offScreenDC, ymed-yrange/2, rect.right, yrange, len, sample.uFlags, psample); @@ -2016,8 +2016,7 @@ const SmpLength smpEnd = sample.nLength * sample.GetBytesPerSample(); sample.nLength -= (m_dwEndSel - m_dwBeginSel); - int8 *p = static_cast<int8 *>(sample.pSample); - memmove(p + selStart, p + selEnd, smpEnd - selEnd); + memmove(sample.pSample8 + selStart, sample.pSample8 + selEnd, smpEnd - selEnd); // adjust loop points AdjustLoopPoints(sample.nLoopStart, sample.nLoopEnd, sample.nLength); @@ -2110,7 +2109,7 @@ file.StartChunk(RIFFChunk::iddata); uint8 *sampleData = static_cast<uint8 *>(p) + file.GetPosition(); - memcpy(sampleData, static_cast<const char *>(sample.pSample) + smpOffset, smpSize); + memcpy(sampleData, sample.pSample8 + smpOffset, smpSize); if(sample.GetElementarySampleSize() == 1) { // 8-Bit samples have to be unsigned. @@ -2222,7 +2221,7 @@ CriticalSection cs; - int8 *p = (int8 *)(sample.pSample); + int8 *p = sample.pSample8; SmpLength len = (sample.nLength + 1) * sample.GetNumChannels(); for (SmpLength i=0; i<=len; i++) { @@ -2260,9 +2259,8 @@ int16 *newSample = static_cast<int16 *>(ModSample::AllocateSample(numSamples, 2)); if(newSample != nullptr) { - const int8 *oldSample = static_cast<const int8 *>(sample.pSample); pModDoc->GetSampleUndo().PrepareUndo(m_nSample, sundo_replace, "16-Bit Conversion"); - CopySample<SC::ConversionChain<SC::Convert<int16, int8>, SC::DecodeIdentity<int8> > >(newSample, numSamples, 1, oldSample, sample.GetSampleSizeInBytes(), 1); + CopySample<SC::ConversionChain<SC::Convert<int16, int8>, SC::DecodeIdentity<int8> > >(newSample, numSamples, 1, sample.pSample8, sample.GetSampleSizeInBytes(), 1); sample.uFlags.set(CHN_16BIT); ctrlSmp::ReplaceSample(sample, newSample, sample.nLength, sndFile); sample.PrecomputeLoops(sndFile, false); @@ -2377,8 +2375,7 @@ CriticalSection cs; // Note: Sample is overwritten in-place! Unused data is not deallocated! - int8 *p = static_cast<int8 *>(sample.pSample); - memmove(p, p + nStart * sample.GetBytesPerSample(), nEnd * sample.GetBytesPerSample()); + memmove(sample.pSample8, sample.pSample8 + nStart * sample.GetBytesPerSample(), nEnd * sample.GetBytesPerSample()); if (sample.nLoopStart >= nStart) sample.nLoopStart -= nStart; if (sample.nLoopEnd >= nStart) sample.nLoopEnd -= nStart; Modified: trunk/OpenMPT/soundlib/Dlsbank.cpp =================================================================== --- trunk/OpenMPT/soundlib/Dlsbank.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/Dlsbank.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -1572,7 +1572,7 @@ SampleIO::signedPCM) .ReadSample(sample, chunk); } - bWaveForm = (sample.pSample) ? true : false; + bWaveForm = sample.pSample != nullptr; } else { FileReader file(pWaveForm, dwLen); Modified: trunk/OpenMPT/soundlib/ITCompression.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITCompression.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/ITCompression.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -75,9 +75,9 @@ byteVal = 0; if(mptSample.GetElementarySampleSize() > 1) - Compress<IT16BitParams>(static_cast<const int16 *>(sample.pSample) + chn, offset, remain); + Compress<IT16BitParams>(sample.pSample16 + chn, offset, remain); else - Compress<IT8BitParams>(static_cast<const int8 *>(sample.pSample) + chn, offset, remain); + Compress<IT8BitParams>(sample.pSample8 + chn, offset, remain); if(file) mpt::IO::WriteRaw(*file, &packedData[0], packedLength); packedTotalLength += packedLength; @@ -330,17 +330,17 @@ mem1 = mem2 = 0; if(mptSample.GetElementarySampleSize() > 1) - Uncompress<IT16BitParams>(static_cast<int16 *>(mptSample.pSample) + chn); + Uncompress<IT16BitParams>(mptSample.pSample16 + chn); else - Uncompress<IT8BitParams>(static_cast<int8 *>(mptSample.pSample) + chn); + Uncompress<IT8BitParams>(mptSample.pSample8 + chn); } } } template<typename Properties> -void ITDecompression::Uncompress(void *target) -//-------------------------------------------- +void ITDecompression::Uncompress(typename Properties::sample_t *target) +//--------------------------------------------------------------------- { curLength = std::min(mptSample.nLength - writtenSamples, SmpLength(ITCompression::blockSize / sizeof(typename Properties::sample_t))); @@ -422,14 +422,14 @@ template<typename Properties> -void ITDecompression::Write(int v, int topBit, void *target) -//---------------------------------------------------------- +void ITDecompression::Write(int v, int topBit, typename Properties::sample_t *target) +//----------------------------------------------------------------------------------- { if(v & topBit) v -= (topBit << 1); mem1 += v; mem2 += mem1; - static_cast<typename Properties::sample_t *>(target)[writePos] = static_cast<typename Properties::sample_t>(is215 ? (int)mem2 : (int)mem1); + target[writePos] = static_cast<typename Properties::sample_t>(is215 ? (int)mem2 : (int)mem1); writtenSamples++; writePos += mptSample.GetNumChannels(); curLength--; Modified: trunk/OpenMPT/soundlib/ITCompression.h =================================================================== --- trunk/OpenMPT/soundlib/ITCompression.h 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/ITCompression.h 2014-10-25 11:43:51 UTC (rev 4486) @@ -93,12 +93,12 @@ bool is215; // Use IT2.15 compression (double deltas) template<typename Properties> - void Uncompress(void *target); + void Uncompress(typename Properties::sample_t *target); static void ChangeWidth(int &curWidth, int width); int ReadBits(int width); template<typename Properties> - void Write(int v, int topbit, void *target); + void Write(int v, int topbit, typename Properties::sample_t *target); }; Modified: trunk/OpenMPT/soundlib/Load_dbm.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_dbm.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/Load_dbm.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -567,7 +567,7 @@ if(ReadMP3Sample(0, chunk)) { ModSample &srcSample = Samples[0]; - const uint8 *smpData = static_cast<uint8 *>(srcSample.pSample); + const int8 *smpData = srcSample.pSample8; for(SAMPLEINDEX smp = 1; smp <= GetNumSamples(); smp++) { Modified: trunk/OpenMPT/soundlib/Load_it.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/Load_it.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -1589,7 +1589,7 @@ fseek(f, smppos[nsmp - 1], SEEK_SET); fwrite(&itss, 1, sizeof(ITSample), f); fseek(f, dwPos, SEEK_SET); - if ((Samples[nsmp].pSample) && (Samples[nsmp].nLength)) + if (Samples[nsmp].HasSampleData()) { dwPos += itss.GetSampleFormat().WriteSample(f, Samples[nsmp]); } Modified: trunk/OpenMPT/soundlib/ModSample.h =================================================================== --- trunk/OpenMPT/soundlib/ModSample.h 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/ModSample.h 2014-10-25 11:43:51 UTC (rev 4486) @@ -20,7 +20,12 @@ SmpLength nLength; // In samples, not bytes SmpLength nLoopStart, nLoopEnd; // Dito SmpLength nSustainStart, nSustainEnd; // Dito - void *pSample; // Pointer to sample data + union + { + void *pSample; // Pointer to sample data + int8 *pSample8; // Pointer to 8-bit sample data + int16 *pSample16; // Pointer to 16-bit sample data + }; uint32 nC5Speed; // Frequency of middle-C, in Hz (for IT/S3M/MPTM) uint16 nPan; // Default sample panning (if pan flag is set), 0...256 uint16 nVolume; // Default volume, 0...256 @@ -41,6 +46,8 @@ Initialize(type); } + bool HasSampleData() const { return pSample != nullptr && nLength != 0; } + // Return the size of one (elementary) sample in bytes. uint8 GetElementarySampleSize() const { return (uFlags & CHN_16BIT) ? 2 : 1; } Modified: trunk/OpenMPT/soundlib/SampleFormatConverters.h =================================================================== --- trunk/OpenMPT/soundlib/SampleFormatConverters.h 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/SampleFormatConverters.h 2014-10-25 11:43:51 UTC (rev 4486) @@ -803,7 +803,7 @@ size_t numFrames = countFrames; SampleConversion sampleConv(conv); const char * MPT_RESTRICT inBuf = sourceBuffer; - typename SampleConversion::output_t * MPT_RESTRICT outBuf = reinterpret_cast<typename SampleConversion::output_t *>(sample.pSample); + typename SampleConversion::output_t * MPT_RESTRICT outBuf = static_cast<typename SampleConversion::output_t *>(sample.pSample); while(numFrames--) { *outBuf = sampleConv(inBuf); @@ -828,7 +828,7 @@ SampleConversion sampleConvLeft(conv); SampleConversion sampleConvRight(conv); const char * MPT_RESTRICT inBuf = sourceBuffer; - typename SampleConversion::output_t * MPT_RESTRICT outBuf = reinterpret_cast<typename SampleConversion::output_t *>(sample.pSample); + typename SampleConversion::output_t * MPT_RESTRICT outBuf = static_cast<typename SampleConversion::output_t *>(sample.pSample); while(numFrames--) { *outBuf = sampleConvLeft(inBuf); @@ -859,7 +859,7 @@ size_t numSamplesLeft = countSamplesLeft; SampleConversion sampleConvLeft(conv); const char * MPT_RESTRICT inBufLeft = sourceBuffer; - typename SampleConversion::output_t * MPT_RESTRICT outBufLeft = reinterpret_cast<typename SampleConversion::output_t *>(sample.pSample); + typename SampleConversion::output_t * MPT_RESTRICT outBufLeft = static_cast<typename SampleConversion::output_t *>(sample.pSample); while(numSamplesLeft--) { *outBufLeft = sampleConvLeft(inBufLeft); @@ -870,7 +870,7 @@ size_t numSamplesRight = countSamplesRight; SampleConversion sampleConvRight(conv); const char * MPT_RESTRICT inBufRight = sourceBuffer + sample.nLength * SampleConversion::input_inc; - typename SampleConversion::output_t * MPT_RESTRICT outBufRight = reinterpret_cast<typename SampleConversion::output_t *>(sample.pSample) + 1; + typename SampleConversion::output_t * MPT_RESTRICT outBufRight = static_cast<typename SampleConversion::output_t *>(sample.pSample) + 1; while(numSamplesRight--) { *outBufRight = sampleConvRight(inBufRight); Modified: trunk/OpenMPT/soundlib/SampleFormats.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/SampleFormats.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -376,7 +376,7 @@ { return false; } - IMAADPCMUnpack16((int16 *)sample.pSample, sample.nLength, FileReader(sampleChunk.GetRawData(), sampleChunk.BytesLeft()), wavFile.GetBlockAlign()); + IMAADPCMUnpack16(sample.pSample16, sample.nLength, FileReader(sampleChunk.GetRawData(), sampleChunk.BytesLeft()), wavFile.GetBlockAlign()); sample.PrecomputeLoops(*this, false); } else if(wavFile.GetSampleFormat() == WAVFormatChunk::fmtMP3) { @@ -1948,8 +1948,8 @@ // Source bit depth const unsigned int bps = frame->header.bits_per_sample; - int8 *sampleData8 = static_cast<int8 *>(sample.pSample) + offset; - int16 *sampleData16 = static_cast<int16 *>(sample.pSample) + offset; + int8 *sampleData8 = sample.pSample8 + offset; + int16 *sampleData16 = sample.pSample16 + offset; MPT_ASSERT((bps <= 8 && sample.GetElementarySampleSize() == 1) || (bps > 8 && sample.GetElementarySampleSize() == 2)); MPT_ASSERT(modChannels <= FLAC__stream_decoder_get_channels(decoder)); @@ -2084,12 +2084,11 @@ #ifndef NO_FLAC // Helper function for copying OpenMPT's sample data to FLAC's int32 buffer. template<typename T> -inline static void SampleToFLAC32(FLAC__int32 *dst, const void *src, SmpLength numSamples) +inline static void SampleToFLAC32(FLAC__int32 *dst, const T *src, SmpLength numSamples) { - const T *in = reinterpret_cast<const T *>(src); for(SmpLength i = 0; i < numSamples; i++) { - dst[i] = in[i]; + dst[i] = src[i]; } }; @@ -2227,10 +2226,10 @@ if(sample.GetElementarySampleSize() == 1) { - SampleToFLAC32<int8>(sampleData, sample.pSample, numSamples); + SampleToFLAC32(sampleData, sample.pSample8, numSamples); } else if(sample.GetElementarySampleSize() == 2) { - SampleToFLAC32<int16>(sampleData, sample.pSample, numSamples); + SampleToFLAC32(sampleData, sample.pSample16, numSamples); } else { MPT_ASSERT(false); Modified: trunk/OpenMPT/soundlib/SampleIO.cpp =================================================================== --- trunk/OpenMPT/soundlib/SampleIO.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/SampleIO.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -468,7 +468,7 @@ LimitMax(readLength, file.BytesLeft()); const uint8 *inBuf = reinterpret_cast<const uint8*>(sourceBuf) + sizeof(compressionTable); - int8 *outBuf = static_cast<int8 *>(sample.pSample); + int8 *outBuf = sample.pSample8; int8 delta = 0; for(size_t i = readLength; i != 0; i--) @@ -511,8 +511,6 @@ { uint32 bitBuf = file.ReadUint32LE(), bitNum = 32; - uint8 *outBuf8 = static_cast<uint8 *>(sample.pSample); - uint16 *outBuf16 = static_cast<uint16 *>(sample.pSample); const uint8 *inBuf = reinterpret_cast<const uint8*>(sourceBuf) + 4; uint8 dlt = 0, lowbyte = 0; @@ -538,10 +536,10 @@ dlt += hibyte; if(GetBitDepth() != 16) { - outBuf8[j] = dlt; + sample.pSample8[j] = dlt; } else { - outBuf16[j] = lowbyte | (dlt << 8); + sample.pSample16[j] = lowbyte | (dlt << 8); } } @@ -562,17 +560,15 @@ // MT2 stereo samples (right channel is stored as a difference from the left channel) if(GetBitDepth() == 8) { - int8 *outBuf = static_cast<int8 *>(sample.pSample); for(SmpLength i = 0; i <= sample.nLength * 2; i += 2) { - outBuf[i + 1] += outBuf[i]; + sample.pSample8[i + 1] += sample.pSample8[i]; } } else { - int16 *outBuf = static_cast<int16 *>(sample.pSample); for(SmpLength i = 0; i <= sample.nLength * 2; i += 2) { - outBuf[i + 1] += outBuf[i]; + sample.pSample16[i + 1] += sample.pSample16[i]; } } } @@ -600,13 +596,13 @@ size_t len = 0, bufcount = 0; int8 buffer8[4096]; int16 buffer16[4096]; - const void *const pSampleVoid = (const void *)sample.pSample; - const int8 *const pSample8 = (const int8 *)sample.pSample; - const int16 *const pSample16 = (const int16 *)sample.pSample; + const void *const pSampleVoid = sample.pSample; + const int8 *const pSample8 = sample.pSample8; + const int16 *const pSample16 = sample.pSample16; SmpLength numSamples = sample.nLength; if(maxSamples && numSamples > maxSamples) numSamples = maxSamples; - if(sample.pSample == nullptr || numSamples == 0) return 0; + if(!sample.HasSampleData()) return 0; if(GetBitDepth() == 16 && GetChannelFormat() == mono && GetEndianness() == littleEndian && (GetEncoding() == signedPCM || GetEncoding() == unsignedPCM || GetEncoding() == deltaPCM)) Modified: trunk/OpenMPT/soundlib/modsmp_ctrl.cpp =================================================================== --- trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/soundlib/modsmp_ctrl.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -284,7 +284,7 @@ bool UpdateLoopPoints(const ModSample &smp, CSoundFile &sndFile) //-------------------------------------------------------------- { - if(!smp.nLength || !smp.pSample) + if(!smp.HasSampleData()) return false; CriticalSection cs; @@ -448,7 +448,7 @@ CSoundFile &sndFile) //--------------------------------------- { - if(smp.pSample == nullptr || smp.nLength < 1) + if(!smp.HasSampleData()) return 0; if (iEnd > smp.nLength) iEnd = smp.nLength; @@ -467,9 +467,9 @@ // step 1: Calculate offset. OffsetData oData = {0,0,0}; if(smp.GetElementarySampleSize() == 2) - oData = CalculateOffset(static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart); + oData = CalculateOffset(smp.pSample16 + iStart, iEnd - iStart); else if(smp.GetElementarySampleSize() == 1) - oData = CalculateOffset(static_cast<int8*>(smp.pSample) + iStart, iEnd - iStart); + oData = CalculateOffset(smp.pSample8 + iStart, iEnd - iStart); double dMin = oData.dMin, dMax = oData.dMax, dOffset = oData.dOffset; @@ -488,9 +488,9 @@ // step 2: centralize + normalize sample dOffset *= dMaxAmplitude * dAmplify; if(smp.GetElementarySampleSize() == 2) - RemoveOffsetAndNormalize( static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart, dOffset, dAmplify); + RemoveOffsetAndNormalize(smp.pSample16 + iStart, iEnd - iStart, dOffset, dAmplify); else if(smp.GetElementarySampleSize() == 1) - RemoveOffsetAndNormalize( static_cast<int8 *>(smp.pSample) + iStart, iEnd - iStart, dOffset, dAmplify); + RemoveOffsetAndNormalize(smp.pSample8 + iStart, iEnd - iStart, dOffset, dAmplify); // step 3: adjust global vol (if available) if((modtype & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (iStart == 0) && (iEnd == smp.nLength * smp.GetNumChannels())) @@ -531,7 +531,7 @@ bool ReverseSample(ModSample &smp, SmpLength iStart, SmpLength iEnd, CSoundFile &sndFile) //--------------------------------------------------------------------------------------- { - if(smp.pSample == nullptr) return false; + if(!smp.HasSampleData()) return false; if(iEnd == 0 || iStart > smp.nLength || iEnd > smp.nLength) { iStart = 0; @@ -544,9 +544,9 @@ if(smp.GetBytesPerSample() == 4) // 16 bit stereo ReverseSampleImpl(static_cast<int32 *>(smp.pSample) + iStart, iEnd - iStart); else if(smp.GetBytesPerSample() == 2) // 16 bit mono / 8 bit stereo - ReverseSampleImpl(static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart); + ReverseSampleImpl(smp.pSample16 + iStart, iEnd - iStart); else if(smp.GetBytesPerSample() == 1) // 8 bit mono - ReverseSampleImpl(static_cast<int8 *>(smp.pSample) + iStart, iEnd - iStart); + ReverseSampleImpl(smp.pSample8 + iStart, iEnd - iStart); else return false; @@ -570,7 +570,7 @@ bool UnsignSample(ModSample &smp, SmpLength iStart, SmpLength iEnd, CSoundFile &sndFile) //-------------------------------------------------------------------------------------- { - if(smp.pSample == nullptr) return false; + if(!smp.HasSampleData()) return false; if(iEnd == 0 || iStart > smp.nLength || iEnd > smp.nLength) { iStart = 0; @@ -579,9 +579,9 @@ iStart *= smp.GetNumChannels(); iEnd *= smp.GetNumChannels(); if(smp.GetElementarySampleSize() == 2) - UnsignSampleImpl(static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart); + UnsignSampleImpl(smp.pSample16 + iStart, iEnd - iStart); else if(smp.GetElementarySampleSize() == 1) - UnsignSampleImpl(static_cast<int8 *>(smp.pSample) + iStart, iEnd - iStart); + UnsignSampleImpl(smp.pSample8 + iStart, iEnd - iStart); else return false; @@ -604,7 +604,7 @@ bool InvertSample(ModSample &smp, SmpLength iStart, SmpLength iEnd, CSoundFile &sndFile) //-------------------------------------------------------------------------------------- { - if(smp.pSample == nullptr) return false; + if(!smp.HasSampleData()) return false; if(iEnd == 0 || iStart > smp.nLength || iEnd > smp.nLength) { iStart = 0; @@ -613,9 +613,9 @@ iStart *= smp.GetNumChannels(); iEnd *= smp.GetNumChannels(); if(smp.GetElementarySampleSize() == 2) - InvertSampleImpl(static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart); + InvertSampleImpl(smp.pSample16 + iStart, iEnd - iStart); else if(smp.GetElementarySampleSize() == 1) - InvertSampleImpl(static_cast<int8 *>(smp.pSample) + iStart, iEnd - iStart); + InvertSampleImpl(smp.pSample8 + iStart, iEnd - iStart); else return false; @@ -639,7 +639,7 @@ bool XFadeSample(ModSample &smp, SmpLength iFadeLength, CSoundFile &sndFile) //-------------------------------------------------------------------------- { - if(smp.pSample == nullptr) return false; + if(!smp.HasSampleData()) return false; if(smp.nLoopEnd <= smp.nLoopStart || smp.nLoopEnd > smp.nLength) return false; if(smp.nLoopStart < iFadeLength) return false; @@ -650,9 +650,9 @@ iFadeLength *= smp.GetNumChannels(); if(smp.GetElementarySampleSize() == 2) - XFadeSampleImpl(static_cast<int16 *>(smp.pSample) + iStart, iEnd - iStart, iFadeLength); + XFadeSampleImpl(smp.pSample16 + iStart, iEnd - iStart, iFadeLength); else if(smp.GetElementarySampleSize() == 1) - XFadeSampleImpl(static_cast<int8 *>(smp.pSample) + iStart, iEnd - iStart, iFadeLength); + XFadeSampleImpl(smp.pSample8 + iStart, iEnd - iStart, iFadeLength); else return false; @@ -689,15 +689,15 @@ bool ConvertToMono(ModSample &smp, CSoundFile &sndFile, StereoToMonoMode conversionMode) //-------------------------------------------------------------------------------------- { - if(smp.pSample == nullptr || smp.nLength == 0 || smp.GetNumChannels() != 2) return false; + if(!smp.HasSampleData() || smp.GetNumChannels() != 2) return false; // Note: Sample is overwritten in-place! Unused data is not deallocated! if(conversionMode == mixChannels) { if(smp.GetElementarySampleSize() == 2) - ConvertStereoToMonoMixImpl(static_cast<int16 *>(smp.pSample), smp.nLength); + ConvertStereoToMonoMixImpl(smp.pSample16, smp.nLength); else if(smp.GetElementarySampleSize() == 1) - ConvertStereoToMonoMixImpl(static_cast<int8 *>(smp.pSample), smp.nLength); + ConvertStereoToMonoMixImpl(smp.pSample8, smp.nLength); else return false; } else @@ -707,9 +707,9 @@ conversionMode = onlyLeft; } if(smp.GetElementarySampleSize() == 2) - ConvertStereoToMonoOneChannelImpl(static_cast<int16 *>(smp.pSample) + (conversionMode == onlyLeft ? 0 : 1), smp.nLength); + ConvertStereoToMonoOneChannelImpl(smp.pSample16 + (conversionMode == onlyLeft ? 0 : 1), smp.nLength); else if(smp.GetElementarySampleSize() == 1) - ConvertStereoToMonoOneChannelImpl(static_cast<int8 *>(smp.pSample) + (conversionMode == onlyLeft ? 0 : 1), smp.nLength); + ConvertStereoToMonoOneChannelImpl(smp.pSample8 + (conversionMode == onlyLeft ? 0 : 1), smp.nLength); else return false; } Modified: trunk/OpenMPT/test/test.cpp =================================================================== --- trunk/OpenMPT/test/test.cpp 2014-10-25 08:27:16 UTC (rev 4485) +++ trunk/OpenMPT/test/test.cpp 2014-10-25 11:43:51 UTC (rev 4486) @@ -1094,14 +1094,13 @@ VERIFY_EQUAL_NONCONT(sample.nVibDepth, 5); // Sample Data - const int8 *p8 = static_cast<const int8 *>(sample.pSample); for(size_t i = 0; i < 6; i++) { - VERIFY_EQUAL_NONCONT(p8[i], 18); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], 18); } for(size_t i = 6; i < 16; i++) { - VERIFY_EQUAL_NONCONT(p8[i], 0); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], 0); } // Instruments @@ -1307,14 +1306,13 @@ VERIFY_EQUAL_NONCONT(sample.nVibDepth, 5); // Sample Data - const int8 *p8 = static_cast<const int8 *>(sample.pSample); for(size_t i = 0; i < 6; i++) { - VERIFY_EQUAL_NONCONT(p8[i], 18); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], 18); } for(size_t i = 6; i < 16; i++) { - VERIFY_EQUAL_NONCONT(p8[i], 0); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], 0); } } @@ -1331,7 +1329,7 @@ // Sample Data (Stereo Interleaved) for(size_t i = 0; i < 7; i++) { - VERIFY_EQUAL_NONCONT(static_cast<int16 *>(sample.pSample)[4 + i], int16(-32768)); + VERIFY_EQUAL_NONCONT(sample.pSample16[4 + i], int16(-32768)); } } @@ -1530,14 +1528,13 @@ VERIFY_EQUAL_NONCONT(sample.nLoopEnd, 60); // Sample Data - const int8 *p8 = static_cast<const int8 *>(sample.pSample); for(size_t i = 0; i < 30; i++) { - VERIFY_EQUAL_NONCONT(p8[i], 127); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], 127); } for(size_t i = 31; i < 60; i++) { - VERIFY_EQUAL_NONCONT(p8[i], -128); + VERIFY_EQUAL_NONCONT(sample.pSample8[i], -128); } } @@ -1566,7 +1563,7 @@ // Sample Data (Stereo Interleaved) for(size_t i = 0; i < 7; i++) { - VERIFY_EQUAL_NONCONT(static_cast<int16 *>(sample.pSample)[4 + i], int16(-32768)); + VERIFY_EQUAL_NONCONT(sample.pSample16[4 + i], int16(-32768)); } } @@ -2352,7 +2349,7 @@ for(size_t i = 0; i < 65536; i++) { - VERIFY_EQUAL_QUIET_NONCONT(static_cast<const int16 *>(sample.pSample)[i], static_cast<int16>(i)); + VERIFY_EQUAL_QUIET_NONCONT(sample.pSample16[i], static_cast<int16>(i)); VERIFY_EQUAL_QUIET_NONCONT(truncated16[i], static_cast<int16>(i)); } } @@ -2380,7 +2377,7 @@ for(size_t i = 0; i < 65536; i++) { - VERIFY_EQUAL_QUIET_NONCONT(static_cast<const int16 *>(sample.pSample)[i], static_cast<int16>(i - 0x8000u)); + VERIFY_EQUAL_QUIET_NONCONT(sample.pSample16[i], static_cast<int16>(i - 0x8000u)); if(abs(truncated16[i] - static_cast<int16>((i - 0x8000u) / 2)) > 1) { VERIFY_EQUAL_QUIET_NONCONT(true, false); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |