aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h b/Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h
new file mode 100644
index 00000000..8e6fd782
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/soundlib/SampleCopy.h
@@ -0,0 +1,51 @@
+/*
+ * 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