forked from PAWPAW-Mirror/lib_xua
Allow mono downsampling mode
Allows for reduced resource usage when I2S is used as an input to a mono AEC.
This commit is contained in:
@@ -37,6 +37,16 @@
|
|||||||
#define I2S_DOWNSAMPLE_FACTOR (1)
|
#define I2S_DOWNSAMPLE_FACTOR (1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef I2S_DOWNSAMPLE_MONO
|
||||||
|
#define I2S_DOWNSAMPLE_MONO (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (I2S_DOWNSAMPLE_MONO == 1)
|
||||||
|
#define I2S_DOWNSAMPLE_CHANS (I2S_CHANS_DAC/2)
|
||||||
|
#else
|
||||||
|
#define I2S_DOWNSAMPLE_CHANS I2S_CHANS_DAC
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR != 1) && (I2S_DOWNSAMPLE_FACTOR != 3)
|
#if (I2S_DOWNSAMPLE_FACTOR != 1) && (I2S_DOWNSAMPLE_FACTOR != 3)
|
||||||
#error "Unsupported I2S downsampling configuration"
|
#error "Unsupported I2S downsampling configuration"
|
||||||
#endif
|
#endif
|
||||||
@@ -62,9 +72,9 @@ static union ds3Data
|
|||||||
{
|
{
|
||||||
long long doubleWordAlignmentEnsured;
|
long long doubleWordAlignmentEnsured;
|
||||||
/* [Number of I2S channels][Number of samples/phases][Taps per phase] */
|
/* [Number of I2S channels][Number of samples/phases][Taps per phase] */
|
||||||
int32_t delayLine[I2S_CHANS_DAC][I2S_DOWNSAMPLE_FACTOR][24];
|
int32_t delayLine[I2S_DOWNSAMPLE_CHANS][I2S_DOWNSAMPLE_FACTOR][24];
|
||||||
} ds3Data;
|
} ds3Data;
|
||||||
static int64_t ds3Sum[I2S_CHANS_DAC];
|
static int64_t ds3Sum[I2S_DOWNSAMPLE_CHANS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (DSD_CHANS_DAC != 0)
|
#if (DSD_CHANS_DAC != 0)
|
||||||
@@ -778,7 +788,7 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
asm volatile("in %0, res[%1]" : "=r"(sample) : "r"(p_i2s_adc[index++]));
|
asm volatile("in %0, res[%1]" : "=r"(sample) : "r"(p_i2s_adc[index++]));
|
||||||
|
|
||||||
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] = bitrev(sample); // channels 1, 3, 5.. on each line.
|
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] = bitrev(sample); // channels 1, 3, 5.. on each line.
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR > 1)
|
#if ((I2S_DOWNSAMPLE_FACTOR > 1) && !I2S_DOWNSAMPLE_MONO)
|
||||||
if ((I2S_DOWNSAMPLE_FACTOR - 1) == downsamplingCounter)
|
if ((I2S_DOWNSAMPLE_FACTOR - 1) == downsamplingCounter)
|
||||||
{
|
{
|
||||||
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] =
|
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] =
|
||||||
@@ -797,7 +807,7 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
src_ds3_voice_coefs[downsamplingCounter],
|
src_ds3_voice_coefs[downsamplingCounter],
|
||||||
samplesIn[readBuffNo][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i]);
|
samplesIn[readBuffNo][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i]);
|
||||||
}
|
}
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR > 1)
|
#endif // ((I2S_DOWNSAMPLE_FACTOR > 1) && !I2S_DOWNSAMPLE_MONO)
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user