123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*
- * SampleCopy.h
- * ------------
- * Purpose: Functions for copying sample data.
- * Notes : (currently none)
- * Authors: OpenMPT Devs
- * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
- */
- #pragma once
- #include "openmpt/all/BuildSettings.hpp"
- #include "openmpt/soundbase/SampleConvert.hpp"
- #include "openmpt/soundbase/SampleDecode.hpp"
- OPENMPT_NAMESPACE_BEGIN
- // Copy a sample data buffer.
- // targetBuffer: Buffer in which the sample should be copied into.
- // numSamples: Number of samples of size T that should be copied. targetBuffer is expected to be able to hold "numSamples * incTarget" samples.
- // incTarget: Number of samples by which the target data pointer is increased each time.
- // sourceBuffer: Buffer from which the samples should be read.
- // sourceSize: Size of source buffer, in bytes.
- // incSource: Number of samples by which the source data pointer is increased each time.
- //
- // Template arguments:
- // SampleConversion: Functor of type SampleConversionFunctor to apply sample conversion (see above for existing functors).
- template <typename SampleConversion>
- size_t CopySample(typename SampleConversion::output_t *MPT_RESTRICT outBuf, size_t numSamples, size_t incTarget, const typename SampleConversion::input_t *MPT_RESTRICT inBuf, size_t sourceSize, size_t incSource, SampleConversion conv = SampleConversion())
- {
- const size_t sampleSize = incSource * SampleConversion::input_inc * sizeof(typename SampleConversion::input_t);
- LimitMax(numSamples, sourceSize / sampleSize);
- const size_t copySize = numSamples * sampleSize;
- SampleConversion sampleConv(conv);
- while(numSamples--)
- {
- *outBuf = sampleConv(inBuf);
- outBuf += incTarget;
- inBuf += incSource * SampleConversion::input_inc;
- }
- return copySize;
- }
- OPENMPT_NAMESPACE_END
|