xref: /aosp_15_r20/hardware/interfaces/audio/aidl/default/tests/AlsaUtilsTest.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2024 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #define LOG_TAG "AlsaUtilsTest"
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <alsa/Utils.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <android-base/macros.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <audio_utils/primitives.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <gtest/gtest.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
24*4d7e907cSAndroid Build Coastguard Worker 
25*4d7e907cSAndroid Build Coastguard Worker extern "C" {
26*4d7e907cSAndroid Build Coastguard Worker #include <tinyalsa/pcm.h>
27*4d7e907cSAndroid Build Coastguard Worker }
28*4d7e907cSAndroid Build Coastguard Worker 
29*4d7e907cSAndroid Build Coastguard Worker namespace alsa = ::aidl::android::hardware::audio::core::alsa;
30*4d7e907cSAndroid Build Coastguard Worker 
31*4d7e907cSAndroid Build Coastguard Worker namespace {
32*4d7e907cSAndroid Build Coastguard Worker 
33*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kInt16tTolerance = 4;
34*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kIntTolerance = 1;
35*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kFloatTolerance = 1e-4;
36*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kUnityGain = 1;
37*4d7e907cSAndroid Build Coastguard Worker const static constexpr int32_t kInt24Min = -(1 << 23);
38*4d7e907cSAndroid Build Coastguard Worker const static constexpr int32_t kInt24Max = (1 << 23) - 1;
39*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kFloatMin = -1;
40*4d7e907cSAndroid Build Coastguard Worker const static constexpr float kFloatMax = 1;
41*4d7e907cSAndroid Build Coastguard Worker const static int32_t kQ8_23Min = 0x80000000;
42*4d7e907cSAndroid Build Coastguard Worker const static int32_t kQ8_23Max = 0x7FFFFFFF;
43*4d7e907cSAndroid Build Coastguard Worker const static std::vector<int16_t> kInt16Buffer = {10000,     100,   0,    INT16_MAX,
44*4d7e907cSAndroid Build Coastguard Worker                                                   INT16_MIN, -2500, 1000, -5800};
45*4d7e907cSAndroid Build Coastguard Worker const static std::vector<float> kFloatBuffer = {0.5, -0.6, kFloatMin, 0.01, kFloatMax, 0.0};
46*4d7e907cSAndroid Build Coastguard Worker const static std::vector<int32_t> kInt32Buffer = {100, 0, 8000, INT32_MAX, INT32_MIN, -300};
47*4d7e907cSAndroid Build Coastguard Worker const static std::vector<int32_t> kQ8_23Buffer = {
48*4d7e907cSAndroid Build Coastguard Worker         kQ8_23Min, kQ8_23Max, 0x00000000, 0x00000001, 0x00400000, static_cast<int32_t>(0xFFD33333)};
49*4d7e907cSAndroid Build Coastguard Worker const static std::vector<int32_t> kInt24Buffer = {200, 10, -100, 0, kInt24Min, kInt24Max};
50*4d7e907cSAndroid Build Coastguard Worker 
51*4d7e907cSAndroid Build Coastguard Worker template <typename T>
CopyToBuffer(int & bytesToTransfer,std::vector<T> & destBuffer,const std::vector<T> & srcBuffer)52*4d7e907cSAndroid Build Coastguard Worker void* CopyToBuffer(int& bytesToTransfer, std::vector<T>& destBuffer,
53*4d7e907cSAndroid Build Coastguard Worker                    const std::vector<T>& srcBuffer) {
54*4d7e907cSAndroid Build Coastguard Worker     bytesToTransfer = srcBuffer.size() * sizeof(T);
55*4d7e907cSAndroid Build Coastguard Worker     destBuffer = srcBuffer;
56*4d7e907cSAndroid Build Coastguard Worker     return destBuffer.data();
57*4d7e907cSAndroid Build Coastguard Worker }
58*4d7e907cSAndroid Build Coastguard Worker 
59*4d7e907cSAndroid Build Coastguard Worker template <typename T>
VerifyTypedBufferResults(const std::vector<T> & bufferWithGain,const std::vector<T> & srcBuffer,float gain,float tolerance)60*4d7e907cSAndroid Build Coastguard Worker void VerifyTypedBufferResults(const std::vector<T>& bufferWithGain, const std::vector<T>& srcBuffer,
61*4d7e907cSAndroid Build Coastguard Worker                               float gain, float tolerance) {
62*4d7e907cSAndroid Build Coastguard Worker     for (size_t i = 0; i < srcBuffer.size(); i++) {
63*4d7e907cSAndroid Build Coastguard Worker         EXPECT_NEAR(srcBuffer[i] * gain, static_cast<float>(bufferWithGain[i]), tolerance);
64*4d7e907cSAndroid Build Coastguard Worker     }
65*4d7e907cSAndroid Build Coastguard Worker }
66*4d7e907cSAndroid Build Coastguard Worker 
67*4d7e907cSAndroid Build Coastguard Worker template <typename T>
VerifyTypedBufferResultsWithClamp(const std::vector<T> & bufferWithGain,const std::vector<T> & srcBuffer,float gain,float tolerance,T minValue,T maxValue)68*4d7e907cSAndroid Build Coastguard Worker void VerifyTypedBufferResultsWithClamp(const std::vector<T>& bufferWithGain,
69*4d7e907cSAndroid Build Coastguard Worker                                        const std::vector<T>& srcBuffer, float gain, float tolerance,
70*4d7e907cSAndroid Build Coastguard Worker                                        T minValue, T maxValue) {
71*4d7e907cSAndroid Build Coastguard Worker     for (size_t i = 0; i < srcBuffer.size(); i++) {
72*4d7e907cSAndroid Build Coastguard Worker         float expectedResult = std::clamp(srcBuffer[i] * gain, static_cast<float>(minValue),
73*4d7e907cSAndroid Build Coastguard Worker                                           static_cast<float>(maxValue));
74*4d7e907cSAndroid Build Coastguard Worker         EXPECT_NEAR(expectedResult, static_cast<float>(bufferWithGain[i]), tolerance);
75*4d7e907cSAndroid Build Coastguard Worker     }
76*4d7e907cSAndroid Build Coastguard Worker }
77*4d7e907cSAndroid Build Coastguard Worker 
78*4d7e907cSAndroid Build Coastguard Worker }  // namespace
79*4d7e907cSAndroid Build Coastguard Worker 
80*4d7e907cSAndroid Build Coastguard Worker using ApplyGainTestParameters = std::tuple<pcm_format, int, float>;
81*4d7e907cSAndroid Build Coastguard Worker enum { INDEX_PCM_FORMAT, INDEX_CHANNEL_COUNT, INDEX_GAIN };
82*4d7e907cSAndroid Build Coastguard Worker 
83*4d7e907cSAndroid Build Coastguard Worker class ApplyGainTest : public ::testing::TestWithParam<ApplyGainTestParameters> {
84*4d7e907cSAndroid Build Coastguard Worker   protected:
85*4d7e907cSAndroid Build Coastguard Worker     void SetUp() override;
86*4d7e907cSAndroid Build Coastguard Worker     void VerifyBufferResult(const pcm_format pcmFormat, const float gain);
87*4d7e907cSAndroid Build Coastguard Worker     void VerifyBufferResultWithClamp(const pcm_format pcmFormat, const float gain);
88*4d7e907cSAndroid Build Coastguard Worker 
89*4d7e907cSAndroid Build Coastguard Worker     pcm_format mPcmFormat;
90*4d7e907cSAndroid Build Coastguard Worker     int mBufferSizeBytes;
91*4d7e907cSAndroid Build Coastguard Worker     void* mBuffer;
92*4d7e907cSAndroid Build Coastguard Worker 
93*4d7e907cSAndroid Build Coastguard Worker   private:
94*4d7e907cSAndroid Build Coastguard Worker     std::vector<int16_t> mInt16BufferToConvert;
95*4d7e907cSAndroid Build Coastguard Worker     std::vector<float> mFloatBufferToConvert;
96*4d7e907cSAndroid Build Coastguard Worker     std::vector<int32_t> mInt32BufferToConvert;
97*4d7e907cSAndroid Build Coastguard Worker     std::vector<int32_t> mQ8_23BufferToConvert;
98*4d7e907cSAndroid Build Coastguard Worker     std::vector<int32_t> mInt24BufferToConvert;
99*4d7e907cSAndroid Build Coastguard Worker };
100*4d7e907cSAndroid Build Coastguard Worker 
SetUp()101*4d7e907cSAndroid Build Coastguard Worker void ApplyGainTest::SetUp() {
102*4d7e907cSAndroid Build Coastguard Worker     mPcmFormat = std::get<INDEX_PCM_FORMAT>(GetParam());
103*4d7e907cSAndroid Build Coastguard Worker     switch (mPcmFormat) {
104*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S16_LE:
105*4d7e907cSAndroid Build Coastguard Worker             mBuffer = CopyToBuffer(mBufferSizeBytes, mInt16BufferToConvert, kInt16Buffer);
106*4d7e907cSAndroid Build Coastguard Worker             break;
107*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_FLOAT_LE:
108*4d7e907cSAndroid Build Coastguard Worker             mBuffer = CopyToBuffer(mBufferSizeBytes, mFloatBufferToConvert, kFloatBuffer);
109*4d7e907cSAndroid Build Coastguard Worker             break;
110*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S32_LE:
111*4d7e907cSAndroid Build Coastguard Worker             mBuffer = CopyToBuffer(mBufferSizeBytes, mInt32BufferToConvert, kInt32Buffer);
112*4d7e907cSAndroid Build Coastguard Worker             break;
113*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_LE:
114*4d7e907cSAndroid Build Coastguard Worker             mBuffer = CopyToBuffer(mBufferSizeBytes, mQ8_23BufferToConvert, kQ8_23Buffer);
115*4d7e907cSAndroid Build Coastguard Worker             break;
116*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_3LE: {
117*4d7e907cSAndroid Build Coastguard Worker             std::vector<int32_t> original32BitBuffer(kInt24Buffer.begin(), kInt24Buffer.end());
118*4d7e907cSAndroid Build Coastguard Worker             for (auto& val : original32BitBuffer) {
119*4d7e907cSAndroid Build Coastguard Worker                 val <<= 8;
120*4d7e907cSAndroid Build Coastguard Worker             }
121*4d7e907cSAndroid Build Coastguard Worker             mInt24BufferToConvert = std::vector<int32_t>(kInt24Buffer.size());
122*4d7e907cSAndroid Build Coastguard Worker             mBufferSizeBytes = kInt24Buffer.size() * 3 * sizeof(uint8_t);
123*4d7e907cSAndroid Build Coastguard Worker             memcpy_to_p24_from_i32(reinterpret_cast<uint8_t*>(mInt24BufferToConvert.data()),
124*4d7e907cSAndroid Build Coastguard Worker                                    original32BitBuffer.data(), kInt24Buffer.size());
125*4d7e907cSAndroid Build Coastguard Worker             mBuffer = mInt24BufferToConvert.data();
126*4d7e907cSAndroid Build Coastguard Worker         } break;
127*4d7e907cSAndroid Build Coastguard Worker         default:
128*4d7e907cSAndroid Build Coastguard Worker             FAIL() << "Unsupported pcm format: " << mPcmFormat;
129*4d7e907cSAndroid Build Coastguard Worker             return;
130*4d7e907cSAndroid Build Coastguard Worker     }
131*4d7e907cSAndroid Build Coastguard Worker }
132*4d7e907cSAndroid Build Coastguard Worker 
VerifyBufferResult(const pcm_format pcmFormat,const float gain)133*4d7e907cSAndroid Build Coastguard Worker void ApplyGainTest::VerifyBufferResult(const pcm_format pcmFormat, const float gain) {
134*4d7e907cSAndroid Build Coastguard Worker     switch (pcmFormat) {
135*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S16_LE:
136*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResults(mInt16BufferToConvert, kInt16Buffer, gain, kInt16tTolerance);
137*4d7e907cSAndroid Build Coastguard Worker             break;
138*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_FLOAT_LE:
139*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResults(mFloatBufferToConvert, kFloatBuffer, gain, kFloatTolerance);
140*4d7e907cSAndroid Build Coastguard Worker             break;
141*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S32_LE:
142*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResults(mInt32BufferToConvert, kInt32Buffer, gain, kIntTolerance);
143*4d7e907cSAndroid Build Coastguard Worker             break;
144*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_LE: {
145*4d7e907cSAndroid Build Coastguard Worker             for (size_t i = 0; i < kQ8_23Buffer.size(); i++) {
146*4d7e907cSAndroid Build Coastguard Worker                 EXPECT_NEAR(float_from_q8_23(kQ8_23Buffer[i]) * gain,
147*4d7e907cSAndroid Build Coastguard Worker                             static_cast<float>(float_from_q8_23(mQ8_23BufferToConvert[i])),
148*4d7e907cSAndroid Build Coastguard Worker                             kFloatTolerance);
149*4d7e907cSAndroid Build Coastguard Worker             }
150*4d7e907cSAndroid Build Coastguard Worker         } break;
151*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_3LE: {
152*4d7e907cSAndroid Build Coastguard Worker             size_t bufferSize = kInt24Buffer.size();
153*4d7e907cSAndroid Build Coastguard Worker             std::vector<int32_t> result32BitBuffer(bufferSize);
154*4d7e907cSAndroid Build Coastguard Worker             memcpy_to_i32_from_p24(result32BitBuffer.data(),
155*4d7e907cSAndroid Build Coastguard Worker                                    reinterpret_cast<uint8_t*>(mInt24BufferToConvert.data()),
156*4d7e907cSAndroid Build Coastguard Worker                                    bufferSize);
157*4d7e907cSAndroid Build Coastguard Worker             for (size_t i = 0; i < bufferSize; i++) {
158*4d7e907cSAndroid Build Coastguard Worker                 EXPECT_NEAR(kInt24Buffer[i] * gain, result32BitBuffer[i] >> 8, kIntTolerance);
159*4d7e907cSAndroid Build Coastguard Worker             }
160*4d7e907cSAndroid Build Coastguard Worker         } break;
161*4d7e907cSAndroid Build Coastguard Worker         default:
162*4d7e907cSAndroid Build Coastguard Worker             return;
163*4d7e907cSAndroid Build Coastguard Worker     }
164*4d7e907cSAndroid Build Coastguard Worker }
165*4d7e907cSAndroid Build Coastguard Worker 
VerifyBufferResultWithClamp(const pcm_format pcmFormat,const float gain)166*4d7e907cSAndroid Build Coastguard Worker void ApplyGainTest::VerifyBufferResultWithClamp(const pcm_format pcmFormat, const float gain) {
167*4d7e907cSAndroid Build Coastguard Worker     switch (pcmFormat) {
168*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S16_LE:
169*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResultsWithClamp(mInt16BufferToConvert, kInt16Buffer, gain,
170*4d7e907cSAndroid Build Coastguard Worker                                               kInt16tTolerance, static_cast<int16_t>(INT16_MIN),
171*4d7e907cSAndroid Build Coastguard Worker                                               static_cast<int16_t>(INT16_MAX));
172*4d7e907cSAndroid Build Coastguard Worker             break;
173*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_FLOAT_LE:
174*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResultsWithClamp(mFloatBufferToConvert, kFloatBuffer, gain,
175*4d7e907cSAndroid Build Coastguard Worker                                               kFloatTolerance, kFloatMin, kFloatMax);
176*4d7e907cSAndroid Build Coastguard Worker             break;
177*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S32_LE:
178*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResultsWithClamp(mInt32BufferToConvert, kInt32Buffer, gain,
179*4d7e907cSAndroid Build Coastguard Worker                                               kIntTolerance, INT32_MIN, INT32_MAX);
180*4d7e907cSAndroid Build Coastguard Worker             break;
181*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_LE: {
182*4d7e907cSAndroid Build Coastguard Worker             for (size_t i = 0; i < kQ8_23Buffer.size(); i++) {
183*4d7e907cSAndroid Build Coastguard Worker                 float expectedResult =
184*4d7e907cSAndroid Build Coastguard Worker                         std::clamp(float_from_q8_23(kQ8_23Buffer[i]) * gain,
185*4d7e907cSAndroid Build Coastguard Worker                                    float_from_q8_23(kQ8_23Min), float_from_q8_23(kQ8_23Max));
186*4d7e907cSAndroid Build Coastguard Worker                 EXPECT_NEAR(expectedResult,
187*4d7e907cSAndroid Build Coastguard Worker                             static_cast<float>(float_from_q8_23(mQ8_23BufferToConvert[i])),
188*4d7e907cSAndroid Build Coastguard Worker                             kFloatTolerance);
189*4d7e907cSAndroid Build Coastguard Worker             }
190*4d7e907cSAndroid Build Coastguard Worker         } break;
191*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_3LE: {
192*4d7e907cSAndroid Build Coastguard Worker             size_t bufferSize = kInt24Buffer.size();
193*4d7e907cSAndroid Build Coastguard Worker             std::vector<int32_t> result32BitBuffer(bufferSize);
194*4d7e907cSAndroid Build Coastguard Worker             memcpy_to_i32_from_p24(result32BitBuffer.data(),
195*4d7e907cSAndroid Build Coastguard Worker                                    reinterpret_cast<uint8_t*>(mInt24BufferToConvert.data()),
196*4d7e907cSAndroid Build Coastguard Worker                                    bufferSize);
197*4d7e907cSAndroid Build Coastguard Worker             for (size_t i = 0; i < bufferSize; i++) {
198*4d7e907cSAndroid Build Coastguard Worker                 result32BitBuffer[i] >>= 8;
199*4d7e907cSAndroid Build Coastguard Worker             }
200*4d7e907cSAndroid Build Coastguard Worker             VerifyTypedBufferResultsWithClamp(result32BitBuffer, kInt24Buffer, gain, kIntTolerance,
201*4d7e907cSAndroid Build Coastguard Worker                                               kInt24Min, kInt24Max);
202*4d7e907cSAndroid Build Coastguard Worker         } break;
203*4d7e907cSAndroid Build Coastguard Worker         default:
204*4d7e907cSAndroid Build Coastguard Worker             return;
205*4d7e907cSAndroid Build Coastguard Worker     }
206*4d7e907cSAndroid Build Coastguard Worker }
207*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(ApplyGainTest,ApplyGain)208*4d7e907cSAndroid Build Coastguard Worker TEST_P(ApplyGainTest, ApplyGain) {
209*4d7e907cSAndroid Build Coastguard Worker     float gain = std::get<INDEX_GAIN>(GetParam());
210*4d7e907cSAndroid Build Coastguard Worker     int channelCount = std::get<INDEX_CHANNEL_COUNT>(GetParam());
211*4d7e907cSAndroid Build Coastguard Worker 
212*4d7e907cSAndroid Build Coastguard Worker     alsa::applyGain(mBuffer, gain, mBufferSizeBytes, mPcmFormat, channelCount);
213*4d7e907cSAndroid Build Coastguard Worker 
214*4d7e907cSAndroid Build Coastguard Worker     if (gain <= kUnityGain) {
215*4d7e907cSAndroid Build Coastguard Worker         VerifyBufferResult(mPcmFormat, gain);
216*4d7e907cSAndroid Build Coastguard Worker     } else {
217*4d7e907cSAndroid Build Coastguard Worker         VerifyBufferResultWithClamp(mPcmFormat, gain);
218*4d7e907cSAndroid Build Coastguard Worker     }
219*4d7e907cSAndroid Build Coastguard Worker }
220*4d7e907cSAndroid Build Coastguard Worker 
GetApplyGainTestName(const testing::TestParamInfo<ApplyGainTestParameters> & info)221*4d7e907cSAndroid Build Coastguard Worker std::string GetApplyGainTestName(const testing::TestParamInfo<ApplyGainTestParameters>& info) {
222*4d7e907cSAndroid Build Coastguard Worker     std::string testNameStr;
223*4d7e907cSAndroid Build Coastguard Worker     switch (std::get<INDEX_PCM_FORMAT>(info.param)) {
224*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S16_LE:
225*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "S16_LE";
226*4d7e907cSAndroid Build Coastguard Worker             break;
227*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_FLOAT_LE:
228*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "Float_LE";
229*4d7e907cSAndroid Build Coastguard Worker             break;
230*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S32_LE:
231*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "S32_LE";
232*4d7e907cSAndroid Build Coastguard Worker             break;
233*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_LE:
234*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "S24_LE";
235*4d7e907cSAndroid Build Coastguard Worker             break;
236*4d7e907cSAndroid Build Coastguard Worker         case PCM_FORMAT_S24_3LE:
237*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "S24_3LE";
238*4d7e907cSAndroid Build Coastguard Worker             break;
239*4d7e907cSAndroid Build Coastguard Worker         default:
240*4d7e907cSAndroid Build Coastguard Worker             testNameStr = "UnsupportedPcmFormat";
241*4d7e907cSAndroid Build Coastguard Worker             break;
242*4d7e907cSAndroid Build Coastguard Worker     }
243*4d7e907cSAndroid Build Coastguard Worker     testNameStr += std::get<INDEX_CHANNEL_COUNT>(info.param) == 1 ? "_Mono_" : "_Stereo_";
244*4d7e907cSAndroid Build Coastguard Worker     testNameStr += std::get<INDEX_GAIN>(info.param) <= kUnityGain ? "WithoutClamp" : "WithClamp";
245*4d7e907cSAndroid Build Coastguard Worker     return testNameStr;
246*4d7e907cSAndroid Build Coastguard Worker }
247*4d7e907cSAndroid Build Coastguard Worker 
248*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(PerPcmFormat, ApplyGainTest,
249*4d7e907cSAndroid Build Coastguard Worker                          testing::Combine(testing::Values(PCM_FORMAT_S16_LE, PCM_FORMAT_FLOAT_LE,
250*4d7e907cSAndroid Build Coastguard Worker                                                           PCM_FORMAT_S32_LE, PCM_FORMAT_S24_LE,
251*4d7e907cSAndroid Build Coastguard Worker                                                           PCM_FORMAT_S24_3LE),
252*4d7e907cSAndroid Build Coastguard Worker                                           testing::Values(1, 2), testing::Values(0.6f, 1.5f)),
253*4d7e907cSAndroid Build Coastguard Worker                          GetApplyGainTestName);
254