aboutsummaryrefslogtreecommitdiff
path: root/externals/oboe/src/flowgraph/resampler/SincResampler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/oboe/src/flowgraph/resampler/SincResampler.cpp')
-rw-r--r--externals/oboe/src/flowgraph/resampler/SincResampler.cpp72
1 files changed, 0 insertions, 72 deletions
diff --git a/externals/oboe/src/flowgraph/resampler/SincResampler.cpp b/externals/oboe/src/flowgraph/resampler/SincResampler.cpp
deleted file mode 100644
index 919f328a2a..0000000000
--- a/externals/oboe/src/flowgraph/resampler/SincResampler.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <algorithm> // Do NOT delete. Needed for LLVM. See #1746
-#include <cassert>
-#include <math.h>
-#include "SincResampler.h"
-
-using namespace RESAMPLER_OUTER_NAMESPACE::resampler;
-
-SincResampler::SincResampler(const MultiChannelResampler::Builder &builder)
- : MultiChannelResampler(builder)
- , mSingleFrame2(builder.getChannelCount()) {
- assert((getNumTaps() % 4) == 0); // Required for loop unrolling.
- mNumRows = kMaxCoefficients / getNumTaps(); // includes guard row
- const int32_t numRowsNoGuard = mNumRows - 1;
- mPhaseScaler = (double) numRowsNoGuard / mDenominator;
- const double phaseIncrement = 1.0 / numRowsNoGuard;
- generateCoefficients(builder.getInputRate(),
- builder.getOutputRate(),
- mNumRows,
- phaseIncrement,
- builder.getNormalizedCutoff());
-}
-
-void SincResampler::readFrame(float *frame) {
- // Clear accumulator for mixing.
- std::fill(mSingleFrame.begin(), mSingleFrame.end(), 0.0);
- std::fill(mSingleFrame2.begin(), mSingleFrame2.end(), 0.0);
-
- // Determine indices into coefficients table.
- const double tablePhase = getIntegerPhase() * mPhaseScaler;
- const int indexLow = static_cast<int>(floor(tablePhase));
- const int indexHigh = indexLow + 1; // OK because using a guard row.
- assert (indexHigh < mNumRows);
- float *coefficientsLow = &mCoefficients[static_cast<size_t>(indexLow)
- * static_cast<size_t>(getNumTaps())];
- float *coefficientsHigh = &mCoefficients[static_cast<size_t>(indexHigh)
- * static_cast<size_t>(getNumTaps())];
-
- float *xFrame = &mX[static_cast<size_t>(mCursor) * static_cast<size_t>(getChannelCount())];
- for (int tap = 0; tap < mNumTaps; tap++) {
- const float coefficientLow = *coefficientsLow++;
- const float coefficientHigh = *coefficientsHigh++;
- for (int channel = 0; channel < getChannelCount(); channel++) {
- const float sample = *xFrame++;
- mSingleFrame[channel] += sample * coefficientLow;
- mSingleFrame2[channel] += sample * coefficientHigh;
- }
- }
-
- // Interpolate and copy to output.
- const float fraction = tablePhase - indexLow;
- for (int channel = 0; channel < getChannelCount(); channel++) {
- const float low = mSingleFrame[channel];
- const float high = mSingleFrame2[channel];
- frame[channel] = low + (fraction * (high - low));
- }
-}