Rename some variables to more clearly indicate their meaning

This commit is contained in:
Chris Robinson 2022-10-28 20:07:45 -07:00
parent f1f3672f0b
commit bb88035a96
5 changed files with 40 additions and 40 deletions

View File

@ -189,7 +189,7 @@ struct DeviceBase {
/* Temp storage used for mixer processing. */
static constexpr size_t MixerLineSize{BufferLineSize + MaxResamplerPadding +
DecoderBase::sMaxDelay};
DecoderBase::sMaxPadding};
static constexpr size_t MixerChannelsMax{16};
using MixerBufferLine = std::array<float,MixerLineSize>;
alignas(16) std::array<MixerBufferLine,MixerChannelsMax> mSampleData;

View File

@ -245,7 +245,7 @@ template<size_t N>
void UhjDecoder<N>::decode(const al::span<float*> samples, const size_t samplesToDo,
const size_t forwardSamples)
{
static_assert(sFilterDelay <= sMaxDelay, "Filter delay is too large");
static_assert(sInputPadding <= sMaxPadding, "Filter padding is too large");
const auto &PShift = GetPhaseShifter<N>::Get();
@ -257,15 +257,15 @@ void UhjDecoder<N>::decode(const al::span<float*> samples, const size_t samplesT
const float *RESTRICT t{al::assume_aligned<16>(samples[2])};
/* S = Left + Right */
for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
for(size_t i{0};i < samplesToDo+sInputPadding;++i)
mS[i] = left[i] + right[i];
/* D = Left - Right */
for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
for(size_t i{0};i < samplesToDo+sInputPadding;++i)
mD[i] = left[i] - right[i];
/* T */
for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
for(size_t i{0};i < samplesToDo+sInputPadding;++i)
mT[i] = t[i];
}
@ -275,7 +275,7 @@ void UhjDecoder<N>::decode(const al::span<float*> samples, const size_t samplesT
/* Precompute j(0.828331*D + 0.767820*T) and store in xoutput. */
auto tmpiter = std::copy(mDTHistory.cbegin(), mDTHistory.cend(), mTemp.begin());
std::transform(mD.cbegin(), mD.cbegin()+samplesToDo+sFilterDelay, mT.cbegin(), tmpiter,
std::transform(mD.cbegin(), mD.cbegin()+samplesToDo+sInputPadding, mT.cbegin(), tmpiter,
[](const float d, const float t) noexcept { return 0.828331f*d + 0.767820f*t; });
std::copy_n(mTemp.cbegin()+forwardSamples, mDTHistory.size(), mDTHistory.begin());
PShift.process({xoutput, samplesToDo}, mTemp.data());
@ -289,7 +289,7 @@ void UhjDecoder<N>::decode(const al::span<float*> samples, const size_t samplesT
/* Precompute j*S and store in youtput. */
tmpiter = std::copy(mSHistory.cbegin(), mSHistory.cend(), mTemp.begin());
std::copy_n(mS.cbegin(), samplesToDo+sFilterDelay, tmpiter);
std::copy_n(mS.cbegin(), samplesToDo+sInputPadding, tmpiter);
std::copy_n(mTemp.cbegin()+forwardSamples, mSHistory.size(), mSHistory.begin());
PShift.process({youtput, samplesToDo}, mTemp.data());
@ -309,7 +309,7 @@ void UhjDecoder<N>::decode(const al::span<float*> samples, const size_t samplesT
void UhjDecoderIIR::decode(const al::span<float*> samples, const size_t samplesToDo,
const size_t forwardSamples)
{
static_assert(sFilterDelay <= sMaxDelay, "Filter delay is too large");
static_assert(sInputPadding <= sMaxPadding, "Filter padding is too large");
ASSUME(samplesToDo > 0);
@ -392,7 +392,7 @@ template<size_t N>
void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t samplesToDo,
const size_t forwardSamples)
{
static_assert(sFilterDelay <= sMaxDelay, "Filter delay is too large");
static_assert(sInputPadding <= sMaxPadding, "Filter padding is too large");
const auto &PShift = GetPhaseShifter<N>::Get();
@ -402,7 +402,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
const float *RESTRICT left{al::assume_aligned<16>(samples[0])};
const float *RESTRICT right{al::assume_aligned<16>(samples[1])};
for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
for(size_t i{0};i < samplesToDo+sInputPadding;++i)
mS[i] = left[i] + right[i];
/* Pre-apply the width factor to the difference signal D. Smoothly
@ -412,7 +412,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
const float wcurrent{unlikely(mCurrentWidth < 0.0f) ? wtarget : mCurrentWidth};
if(likely(wtarget == wcurrent) || unlikely(forwardSamples == 0))
{
for(size_t i{0};i < samplesToDo+sFilterDelay;++i)
for(size_t i{0};i < samplesToDo+sInputPadding;++i)
mD[i] = (left[i] - right[i]) * wcurrent;
mCurrentWidth = wcurrent;
}
@ -426,7 +426,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
mD[i] = (left[i] - right[i]) * (wcurrent + wstep*fi);
fi += 1.0f;
}
for(;i < samplesToDo+sFilterDelay;++i)
for(;i < samplesToDo+sInputPadding;++i)
mD[i] = (left[i] - right[i]) * wtarget;
mCurrentWidth = wtarget;
}
@ -438,7 +438,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
/* Precompute j*D and store in xoutput. */
auto tmpiter = std::copy(mDTHistory.cbegin(), mDTHistory.cend(), mTemp.begin());
std::copy_n(mD.cbegin(), samplesToDo+sFilterDelay, tmpiter);
std::copy_n(mD.cbegin(), samplesToDo+sInputPadding, tmpiter);
std::copy_n(mTemp.cbegin()+forwardSamples, mDTHistory.size(), mDTHistory.begin());
PShift.process({xoutput, samplesToDo}, mTemp.data());
@ -451,7 +451,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
/* Precompute j*S and store in youtput. */
tmpiter = std::copy(mSHistory.cbegin(), mSHistory.cend(), mTemp.begin());
std::copy_n(mS.cbegin(), samplesToDo+sFilterDelay, tmpiter);
std::copy_n(mS.cbegin(), samplesToDo+sInputPadding, tmpiter);
std::copy_n(mTemp.cbegin()+forwardSamples, mSHistory.size(), mSHistory.begin());
PShift.process({youtput, samplesToDo}, mTemp.data());
@ -463,7 +463,7 @@ void UhjStereoDecoder<N>::decode(const al::span<float*> samples, const size_t sa
void UhjStereoDecoderIIR::decode(const al::span<float*> samples, const size_t samplesToDo,
const size_t forwardSamples)
{
static_assert(sFilterDelay <= sMaxDelay, "Filter delay is too large");
static_assert(sInputPadding <= sMaxPadding, "Filter padding is too large");
ASSUME(samplesToDo > 0);

View File

@ -114,7 +114,7 @@ struct UhjEncoderIIR final : public UhjEncoderBase {
struct DecoderBase {
static constexpr size_t sMaxDelay{256};
static constexpr size_t sMaxPadding{256};
/* For 2-channel UHJ, shelf filters should use these LF responses. */
static constexpr float sWLFScale{0.661f};
@ -134,17 +134,17 @@ struct DecoderBase {
template<size_t N>
struct UhjDecoder final : public DecoderBase {
/* This isn't a true delay, just the number of extra input samples needed. */
static constexpr size_t sFilterDelay{N/2};
/* The number of extra sample frames needed for input. */
static constexpr size_t sInputPadding{N/2};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sFilterDelay> mS{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sFilterDelay> mD{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sFilterDelay> mT{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sInputPadding> mS{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sInputPadding> mD{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sInputPadding> mT{};
alignas(16) std::array<float,sFilterDelay-1> mDTHistory{};
alignas(16) std::array<float,sFilterDelay-1> mSHistory{};
alignas(16) std::array<float,sInputPadding-1> mDTHistory{};
alignas(16) std::array<float,sInputPadding-1> mSHistory{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge + sFilterDelay*2> mTemp{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge + sInputPadding*2> mTemp{};
/**
* Decodes a 3- or 4-channel UHJ signal into a B-Format signal with FuMa
@ -163,10 +163,10 @@ struct UhjDecoder final : public DecoderBase {
struct UhjDecoderIIR final : public DecoderBase {
/* FIXME: These IIR decoder filters actually have a 1-sample delay on the
* non-filtered components, which is not reflected in the source latency
* value. sFilterDelay is 0, however, because it doesn't need any extra
* value. sInputPadding is 0, however, because it doesn't need any extra
* input samples as long as 'forwardSamples' is less than 'samplesToDo'.
*/
static constexpr size_t sFilterDelay{0};
static constexpr size_t sInputPadding{0};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge> mS{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge> mD{};
@ -187,17 +187,17 @@ struct UhjDecoderIIR final : public DecoderBase {
template<size_t N>
struct UhjStereoDecoder final : public DecoderBase {
static constexpr size_t sFilterDelay{N/2};
static constexpr size_t sInputPadding{N/2};
float mCurrentWidth{-1.0f};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sFilterDelay> mS{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sFilterDelay> mD{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sInputPadding> mS{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge+sInputPadding> mD{};
alignas(16) std::array<float,sFilterDelay-1> mDTHistory{};
alignas(16) std::array<float,sFilterDelay-1> mSHistory{};
alignas(16) std::array<float,sInputPadding-1> mDTHistory{};
alignas(16) std::array<float,sInputPadding-1> mSHistory{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge + sFilterDelay*2> mTemp{};
alignas(16) std::array<float,BufferLineSize+MaxResamplerEdge + sInputPadding*2> mTemp{};
/**
* Applies Super Stereo processing on a stereo signal to create a B-Format
@ -212,7 +212,7 @@ struct UhjStereoDecoder final : public DecoderBase {
};
struct UhjStereoDecoderIIR final : public DecoderBase {
static constexpr size_t sFilterDelay{0};
static constexpr size_t sInputPadding{0};
float mCurrentWidth{-1.0f};

View File

@ -860,15 +860,15 @@ void Voice::prepare(DeviceBase *device)
{
case UhjQualityType::IIR:
mDecoder = std::make_unique<UhjStereoDecoderIIR>();
mDecoderPadding = UhjStereoDecoderIIR::sFilterDelay;
mDecoderPadding = UhjStereoDecoderIIR::sInputPadding;
break;
case UhjQualityType::FIR256:
mDecoder = std::make_unique<UhjStereoDecoder<UhjLength256>>();
mDecoderPadding = UhjStereoDecoder<UhjLength256>::sFilterDelay;
mDecoderPadding = UhjStereoDecoder<UhjLength256>::sInputPadding;
break;
case UhjQualityType::FIR512:
mDecoder = std::make_unique<UhjStereoDecoder<UhjLength512>>();
mDecoderPadding = UhjStereoDecoder<UhjLength512>::sFilterDelay;
mDecoderPadding = UhjStereoDecoder<UhjLength512>::sInputPadding;
break;
}
}
@ -878,15 +878,15 @@ void Voice::prepare(DeviceBase *device)
{
case UhjQualityType::IIR:
mDecoder = std::make_unique<UhjDecoderIIR>();
mDecoderPadding = UhjDecoderIIR::sFilterDelay;
mDecoderPadding = UhjDecoderIIR::sInputPadding;
break;
case UhjQualityType::FIR256:
mDecoder = std::make_unique<UhjDecoder<UhjLength256>>();
mDecoderPadding = UhjDecoder<UhjLength256>::sFilterDelay;
mDecoderPadding = UhjDecoder<UhjLength256>::sInputPadding;
break;
case UhjQualityType::FIR512:
mDecoder = std::make_unique<UhjDecoder<UhjLength512>>();
mDecoderPadding = UhjDecoder<UhjLength512>::sFilterDelay;
mDecoderPadding = UhjDecoder<UhjLength512>::sInputPadding;
break;
}
}

View File

@ -51,7 +51,7 @@ enum class DirectMode : unsigned char {
/* Maximum number of extra source samples that may need to be loaded, for
* resampling or conversion purposes.
*/
constexpr uint MaxPostVoiceLoad{MaxResamplerEdge + DecoderBase::sMaxDelay};
constexpr uint MaxPostVoiceLoad{MaxResamplerEdge + DecoderBase::sMaxPadding};
enum {