aboutsummaryrefslogtreecommitdiffstats
path: root/src/delay_buffer.h
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2017-08-05 00:40:20 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2017-08-05 00:40:20 +0300
commitfcb5986d9d21d923db2480be5089168fc1d1fcd2 (patch)
treed75a08a92d3ec131727a958109781a9b140f28c5 /src/delay_buffer.h
parent85e2815a6ada9709c90aa7f227e384abdb4f9e59 (diff)
downloadatracdenc-fcb5986d9d21d923db2480be5089168fc1d1fcd2.tar.gz
Refactoring: use normal (previous frame is first) overlap buffer layout
Diffstat (limited to 'src/delay_buffer.h')
-rw-r--r--src/delay_buffer.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/delay_buffer.h b/src/delay_buffer.h
new file mode 100644
index 0000000..9e0cfb1
--- /dev/null
+++ b/src/delay_buffer.h
@@ -0,0 +1,52 @@
+/*
+ * This file is part of AtracDEnc.
+ *
+ * AtracDEnc is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * AtracDEnc is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#pragma once
+#include <cstring>
+
+namespace NAtracDEnc {
+
+template<class T, int N, int S>
+class TDelayBuffer {
+public:
+ TDelayBuffer() {
+ static_assert(std::is_pod<T>::value, "T must be a POD type.");
+ memset(Buffer_, 0, sizeof(T) * N * S * 2);
+ }
+
+ void Shift(bool erace = true) {
+ for (int i = 0; i < N; i++) {
+ memcpy(&Buffer_[i][0], &Buffer_[i][S], sizeof(T) * S);
+ if (erace)
+ memset(&Buffer_[i][S], 0, sizeof(T) * S);
+ }
+ }
+
+ T* GetFirst(int i) {
+ return &Buffer_[i][0];
+ }
+
+ T* GetSecond(int i) {
+ return &Buffer_[i][S];
+ }
+
+private:
+ T Buffer_[N][S*2];
+};
+
+} // namespace NAtracDEnc