Initialize signal processing function pointers statically

The last run-time logic for selecting function pointers was removed in
May 2016, here: https://codereview.webrtc.org/1955413003

It would be even better if we could eliminate the function pointers
entirely and just have different implementations that we select at
compile time; I've left a TODO asking for this.

Bug: webrtc:9553
Change-Id: Ica71d71e19759da00967168f6479b7eb8b46c590
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144053
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28414}
This commit is contained in:
Karl Wiberg
2019-06-28 14:51:49 +02:00
committed by Commit Bot
parent a47ba4119f
commit 225842ced8
17 changed files with 76 additions and 179 deletions

View File

@ -25,13 +25,7 @@ static const int16_t vector16[kVector16Size] = {1,
-3333,
345};
class SplTest : public ::testing::Test {
protected:
SplTest() { WebRtcSpl_Init(); }
~SplTest() override {}
};
TEST_F(SplTest, MacroTest) {
TEST(SplTest, MacroTest) {
// Macros with inputs.
int A = 10;
int B = 21;
@ -93,7 +87,7 @@ TEST_F(SplTest, MacroTest) {
#endif
}
TEST_F(SplTest, InlineTest) {
TEST(SplTest, InlineTest) {
int16_t a16 = 121;
int16_t b16 = -17;
int32_t a32 = 111121;
@ -124,7 +118,7 @@ TEST_F(SplTest, InlineTest) {
EXPECT_EQ(138, WebRtcSpl_SubSatW16(a16, b16));
}
TEST_F(SplTest, AddSubSatW32) {
TEST(SplTest, AddSubSatW32) {
static constexpr int32_t kAddSubArgs[] = {
INT32_MIN, INT32_MIN + 1, -3, -2, -1, 0, 1, -1, 2,
3, INT32_MAX - 1, INT32_MAX};
@ -143,7 +137,7 @@ TEST_F(SplTest, AddSubSatW32) {
}
}
TEST_F(SplTest, CountLeadingZeros32) {
TEST(SplTest, CountLeadingZeros32) {
EXPECT_EQ(32, WebRtcSpl_CountLeadingZeros32(0));
EXPECT_EQ(32, WebRtcSpl_CountLeadingZeros32_NotBuiltin(0));
for (int i = 0; i < 32; ++i) {
@ -156,7 +150,7 @@ TEST_F(SplTest, CountLeadingZeros32) {
}
}
TEST_F(SplTest, CountLeadingZeros64) {
TEST(SplTest, CountLeadingZeros64) {
EXPECT_EQ(64, WebRtcSpl_CountLeadingZeros64(0));
EXPECT_EQ(64, WebRtcSpl_CountLeadingZeros64_NotBuiltin(0));
for (int i = 0; i < 64; ++i) {
@ -169,7 +163,7 @@ TEST_F(SplTest, CountLeadingZeros64) {
}
}
TEST_F(SplTest, MathOperationsTest) {
TEST(SplTest, MathOperationsTest) {
int A = 1134567892;
int32_t num = 117;
int32_t den = -5;
@ -184,7 +178,7 @@ TEST_F(SplTest, MathOperationsTest) {
EXPECT_EQ(0, WebRtcSpl_DivW32HiLow(128, 0, 256));
}
TEST_F(SplTest, BasicArrayOperationsTest) {
TEST(SplTest, BasicArrayOperationsTest) {
const size_t kVectorSize = 4;
int B[] = {4, 12, 133, 1100};
int16_t b16[kVectorSize];
@ -249,7 +243,7 @@ TEST_F(SplTest, BasicArrayOperationsTest) {
}
}
TEST_F(SplTest, MinMaxOperationsTest) {
TEST(SplTest, MinMaxOperationsTest) {
const size_t kVectorSize = 17;
// Vectors to test the cases where minimum values have to be caught
@ -340,7 +334,7 @@ TEST_F(SplTest, MinMaxOperationsTest) {
EXPECT_EQ(6u, WebRtcSpl_MinIndexW32(vector32, kVectorSize));
}
TEST_F(SplTest, VectorOperationsTest) {
TEST(SplTest, VectorOperationsTest) {
const size_t kVectorSize = 4;
int B[] = {4, 12, 133, 1100};
int16_t a16[kVectorSize];
@ -402,7 +396,7 @@ TEST_F(SplTest, VectorOperationsTest) {
EXPECT_EQ(0, WebRtcSpl_GetScalingSquare(b16, kVectorSize, 1));
}
TEST_F(SplTest, EstimatorsTest) {
TEST(SplTest, EstimatorsTest) {
const size_t kOrder = 2;
const int32_t unstable_filter[] = {4, 12, 133, 1100};
const int32_t stable_filter[] = {1100, 133, 12, 4};
@ -419,7 +413,7 @@ TEST_F(SplTest, EstimatorsTest) {
}
}
TEST_F(SplTest, FilterTest) {
TEST(SplTest, FilterTest) {
const size_t kVectorSize = 4;
const size_t kFilterOrder = 3;
int16_t A[] = {1, 2, 33, 100};
@ -457,7 +451,7 @@ TEST_F(SplTest, FilterTest) {
data_out, bTmp16Low, kVectorSize));
}
TEST_F(SplTest, RandTest) {
TEST(SplTest, RandTest) {
const int kVectorSize = 4;
int16_t BU[] = {3653, 12446, 8525, 30691};
int16_t b16[kVectorSize];
@ -472,12 +466,12 @@ TEST_F(SplTest, RandTest) {
}
}
TEST_F(SplTest, DotProductWithScaleTest) {
TEST(SplTest, DotProductWithScaleTest) {
EXPECT_EQ(605362796, WebRtcSpl_DotProductWithScale(vector16, vector16,
kVector16Size, 2));
}
TEST_F(SplTest, CrossCorrelationTest) {
TEST(SplTest, CrossCorrelationTest) {
// Note the function arguments relation specificed by API.
const size_t kCrossCorrelationDimension = 3;
const int kShift = 2;
@ -509,7 +503,7 @@ TEST_F(SplTest, CrossCorrelationTest) {
}
}
TEST_F(SplTest, AutoCorrelationTest) {
TEST(SplTest, AutoCorrelationTest) {
int scale = 0;
int32_t vector32[kVector16Size];
const int32_t expected[kVector16Size] = {302681398, 14223410, -121705063,
@ -525,7 +519,7 @@ TEST_F(SplTest, AutoCorrelationTest) {
}
}
TEST_F(SplTest, SignalProcessingTest) {
TEST(SplTest, SignalProcessingTest) {
const size_t kVectorSize = 4;
int A[] = {1, 2, 33, 100};
const int16_t kHanning[4] = {2399, 8192, 13985, 16384};
@ -565,7 +559,7 @@ TEST_F(SplTest, SignalProcessingTest) {
EXPECT_EQ(0, bScale);
}
TEST_F(SplTest, FFTTest) {
TEST(SplTest, FFTTest) {
int16_t B[] = {1, 2, 33, 100, 2, 3, 34, 101, 3, 4, 35, 102, 4, 5, 36, 103};
EXPECT_EQ(0, WebRtcSpl_ComplexFFT(B, 3, 1));
@ -582,7 +576,7 @@ TEST_F(SplTest, FFTTest) {
}
}
TEST_F(SplTest, Resample48WithSaturationTest) {
TEST(SplTest, Resample48WithSaturationTest) {
// The test resamples 3*kBlockSize number of samples to 2*kBlockSize number
// of samples.
const size_t kBlockSize = 16;