VtsHalTargetTest: Configure channel layout and generate input data
correctly
This commit includes multiple changes:
- Updated generateSineWave function to generate both mono and stereo data
- Moved the calculateMagnitude function to a common location, the EffectHelper
class and added support for both mono and stereo data
- Modified the createParamCommon function
- Moved some constants to a common location, EffectHelper.h
- Updated some test functions to add support for both mono and stereo
- Added a function in EffectHelper to validate pffft input size
- Added checks in calculateMagnitudeMono() function to validate
input and output buffer size
Bug: 305866207
Test: atest hardware/interfaces/audio/aidl/vts/
Change-Id: Ia68108ad79349559b5b12bd6574da79fb1e117f3
diff --git a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
index 5a24be7..c3c1e9e 100644
--- a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
@@ -48,7 +48,7 @@
class BassBoostEffectHelper : public EffectHelper {
public:
- void SetUpBassBoost(int32_t layout = AudioChannelLayout::LAYOUT_STEREO) {
+ void SetUpBassBoost(int32_t layout = kDefaultChannelLayout) {
ASSERT_NE(nullptr, mFactory);
ASSERT_NO_FATAL_FAILURE(create(mFactory, mEffect, mDescriptor));
setFrameCounts(layout);
@@ -113,7 +113,7 @@
}
}
- static constexpr int kDurationMilliSec = 720;
+ static constexpr int kDurationMilliSec = 1440;
static constexpr int kInputSize = kSamplingFrequency * kDurationMilliSec / 1000;
long mInputFrameCount, mOutputFrameCount;
std::shared_ptr<IFactory> mFactory;
@@ -187,25 +187,6 @@
}
}
- // Use FFT transform to convert the buffer to frequency domain
- // Compute its magnitude at binOffsets
- std::vector<float> calculateMagnitude(const std::vector<float>& buffer,
- const std::vector<int>& binOffsets) {
- std::vector<float> fftInput(kNPointFFT);
- PFFFT_Setup* inputHandle = pffft_new_setup(kNPointFFT, PFFFT_REAL);
- pffft_transform_ordered(inputHandle, buffer.data(), fftInput.data(), nullptr,
- PFFFT_FORWARD);
- pffft_destroy_setup(inputHandle);
- std::vector<float> bufferMag(binOffsets.size());
- for (size_t i = 0; i < binOffsets.size(); i++) {
- size_t k = binOffsets[i];
- bufferMag[i] = sqrt((fftInput[k * 2] * fftInput[k * 2]) +
- (fftInput[k * 2 + 1] * fftInput[k * 2 + 1]));
- }
-
- return bufferMag;
- }
-
// Calculate gain difference between low frequency and high frequency magnitude
float calculateGainDiff(const std::vector<float>& inputMag,
const std::vector<float>& outputMag) {
@@ -218,7 +199,6 @@
return gains[0] - gains[1];
}
- static constexpr int kNPointFFT = 16384;
static constexpr float kBinWidth = (float)kSamplingFrequency / kNPointFFT;
std::set<int> mStrengthValues;
int32_t mChannelLayout;
@@ -240,9 +220,11 @@
roundToFreqCenteredToFftBin(testFrequencies, binOffsets);
// Generate multitone input
- generateSineWave(testFrequencies, input);
+ ASSERT_NO_FATAL_FAILURE(
+ generateSineWave(testFrequencies, input, 1.0, kSamplingFrequency, mChannelLayout));
- inputMag = calculateMagnitude(input, binOffsets);
+ ASSERT_NO_FATAL_FAILURE(
+ calculateAndVerifyMagnitude(inputMag, mChannelLayout, input, binOffsets));
if (isStrengthValid(0)) {
ASSERT_NO_FATAL_FAILURE(setAndVerifyParameters(0, EX_NONE));
@@ -254,7 +236,10 @@
processAndWriteToOutput(input, baseOutput, mEffect, &mOpenEffectReturn));
std::vector<float> baseMag(testFrequencies.size());
- baseMag = calculateMagnitude(baseOutput, binOffsets);
+
+ ASSERT_NO_FATAL_FAILURE(
+ calculateAndVerifyMagnitude(baseMag, mChannelLayout, baseOutput, binOffsets));
+
float baseDiff = calculateGainDiff(inputMag, baseMag);
for (int strength : mStrengthValues) {
@@ -271,7 +256,9 @@
ASSERT_NO_FATAL_FAILURE(
processAndWriteToOutput(input, output, mEffect, &mOpenEffectReturn));
- outputMag = calculateMagnitude(output, binOffsets);
+ ASSERT_NO_FATAL_FAILURE(
+ calculateAndVerifyMagnitude(outputMag, mChannelLayout, output, binOffsets));
+
float diff = calculateGainDiff(inputMag, outputMag);
ASSERT_GT(diff, prevGain);