Downmix: Test to 22.2
Test: atest downmix_benchmark
Test: atest downmix_tests
Bug: 187062102
Change-Id: Ic528171121222daf57470ce81b797683e90c4450
diff --git a/media/libeffects/downmix/benchmark/downmix_benchmark.cpp b/media/libeffects/downmix/benchmark/downmix_benchmark.cpp
index 8d3a34a..ee169c2 100644
--- a/media/libeffects/downmix/benchmark/downmix_benchmark.cpp
+++ b/media/libeffects/downmix/benchmark/downmix_benchmark.cpp
@@ -30,30 +30,30 @@
extern audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM;
static constexpr audio_channel_mask_t kChannelPositionMasks[] = {
-// AUDIO_CHANNEL_OUT_MONO,
-// AUDIO_CHANNEL_OUT_FRONT_CENTER,
+ AUDIO_CHANNEL_OUT_FRONT_LEFT,
+ AUDIO_CHANNEL_OUT_FRONT_CENTER,
AUDIO_CHANNEL_OUT_STEREO,
AUDIO_CHANNEL_OUT_2POINT1,
-// AUDIO_CHANNEL_OUT_2POINT0POINT2,
+ AUDIO_CHANNEL_OUT_2POINT0POINT2,
AUDIO_CHANNEL_OUT_QUAD,
AUDIO_CHANNEL_OUT_QUAD_BACK,
AUDIO_CHANNEL_OUT_QUAD_SIDE,
AUDIO_CHANNEL_OUT_SURROUND,
-// AUDIO_CHANNEL_OUT_2POINT1POINT2,
-// AUDIO_CHANNEL_OUT_3POINT0POINT2,
+ AUDIO_CHANNEL_OUT_2POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT0POINT2,
AUDIO_CHANNEL_OUT_PENTA,
-// AUDIO_CHANNEL_OUT_3POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT1POINT2,
AUDIO_CHANNEL_OUT_5POINT1,
AUDIO_CHANNEL_OUT_5POINT1_BACK,
AUDIO_CHANNEL_OUT_5POINT1_SIDE,
AUDIO_CHANNEL_OUT_6POINT1,
-// AUDIO_CHANNEL_OUT_5POINT1POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1POINT2,
AUDIO_CHANNEL_OUT_7POINT1,
-// AUDIO_CHANNEL_OUT_5POINT1POINT4,
-// AUDIO_CHANNEL_OUT_7POINT1POINT2,
-// AUDIO_CHANNEL_OUT_7POINT1POINT4,
-// AUDIO_CHANNEL_OUT_13POINT_360RA,
-// AUDIO_CHANNEL_OUT_22POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1POINT4,
+ AUDIO_CHANNEL_OUT_7POINT1POINT2,
+ AUDIO_CHANNEL_OUT_7POINT1POINT4,
+ AUDIO_CHANNEL_OUT_13POINT_360RA,
+ AUDIO_CHANNEL_OUT_22POINT2,
};
static constexpr effect_uuid_t downmix_uuid = {
@@ -64,32 +64,56 @@
/*
Pixel 3XL
downmix_benchmark:
- #BM_Downmix/0 4719 ns 4704 ns 148890
- #BM_Downmix/1 5050 ns 5034 ns 139104
- #BM_Downmix/2 1506 ns 1501 ns 466795
- #BM_Downmix/3 1554 ns 1549 ns 444498
- #BM_Downmix/4 1514 ns 1510 ns 463697
- #BM_Downmix/5 4442 ns 4428 ns 158016
- #BM_Downmix/6 4404 ns 4378 ns 159858
- #BM_Downmix/7 4851 ns 4835 ns 144681
- #BM_Downmix/8 4848 ns 4832 ns 144560
- #BM_Downmix/9 4859 ns 4844 ns 144496
- #BM_Downmix/10 5806 ns 5788 ns 120751
- #BM_Downmix/11 5051 ns 5036 ns 138920
+ #BM_Downmix/0 4723 ns 4708 ns 148694
+ #BM_Downmix/1 4717 ns 4702 ns 148873
+ #BM_Downmix/2 4803 ns 4788 ns 145893
+ #BM_Downmix/3 5056 ns 5041 ns 139110
+ #BM_Downmix/4 4710 ns 4696 ns 149625
+ #BM_Downmix/5 1514 ns 1509 ns 463694
+ #BM_Downmix/6 1513 ns 1509 ns 463451
+ #BM_Downmix/7 1516 ns 1511 ns 463899
+ #BM_Downmix/8 4445 ns 4431 ns 157831
+ #BM_Downmix/9 5081 ns 5065 ns 138412
+ #BM_Downmix/10 4354 ns 4341 ns 161247
+ #BM_Downmix/11 4411 ns 4397 ns 158893
+ #BM_Downmix/12 4434 ns 4420 ns 157992
+ #BM_Downmix/13 4845 ns 4830 ns 144873
+ #BM_Downmix/14 4851 ns 4835 ns 144954
+ #BM_Downmix/15 4884 ns 4870 ns 144233
+ #BM_Downmix/16 5832 ns 5813 ns 120565
+ #BM_Downmix/17 5241 ns 5224 ns 133927
+ #BM_Downmix/18 5044 ns 5028 ns 139131
+ #BM_Downmix/19 5244 ns 5227 ns 132315
+ #BM_Downmix/20 5943 ns 5923 ns 117759
+ #BM_Downmix/21 5990 ns 5971 ns 117263
+ #BM_Downmix/22 4468 ns 4454 ns 156689
+ #BM_Downmix/23 7306 ns 7286 ns 95911
--
downmix_benchmark: (generic fold)
- #BM_Downmix/0 4723 ns 4708 ns 148605
- #BM_Downmix/1 5081 ns 5065 ns 137920
- #BM_Downmix/2 4472 ns 4458 ns 160047
- #BM_Downmix/3 4359 ns 4345 ns 158744
- #BM_Downmix/4 4722 ns 4706 ns 149648
- #BM_Downmix/5 4426 ns 4412 ns 158618
- #BM_Downmix/6 4377 ns 4363 ns 160217
- #BM_Downmix/7 5262 ns 5245 ns 133155
- #BM_Downmix/8 5265 ns 5248 ns 132817
- #BM_Downmix/9 5246 ns 5229 ns 133932
- #BM_Downmix/10 5819 ns 5801 ns 120295
- #BM_Downmix/11 6030 ns 6011 ns 116619
+ #BM_Downmix/0 4722 ns 4707 ns 149847
+ #BM_Downmix/1 4714 ns 4698 ns 148748
+ #BM_Downmix/2 4794 ns 4779 ns 145661
+ #BM_Downmix/3 5053 ns 5035 ns 139172
+ #BM_Downmix/4 4695 ns 4678 ns 149762
+ #BM_Downmix/5 4381 ns 4368 ns 159675
+ #BM_Downmix/6 4387 ns 4373 ns 160267
+ #BM_Downmix/7 4732 ns 4717 ns 148514
+ #BM_Downmix/8 4430 ns 4415 ns 158133
+ #BM_Downmix/9 5101 ns 5084 ns 138353
+ #BM_Downmix/10 4356 ns 4343 ns 160821
+ #BM_Downmix/11 4397 ns 4383 ns 159995
+ #BM_Downmix/12 4438 ns 4424 ns 158117
+ #BM_Downmix/13 5243 ns 5226 ns 133863
+ #BM_Downmix/14 5259 ns 5242 ns 131855
+ #BM_Downmix/15 5245 ns 5228 ns 133686
+ #BM_Downmix/16 5829 ns 5809 ns 120543
+ #BM_Downmix/17 5245 ns 5228 ns 133533
+ #BM_Downmix/18 5935 ns 5916 ns 118282
+ #BM_Downmix/19 5263 ns 5245 ns 133657
+ #BM_Downmix/20 5998 ns 5978 ns 114693
+ #BM_Downmix/21 5989 ns 5969 ns 117450
+ #BM_Downmix/22 4442 ns 4431 ns 157913
+ #BM_Downmix/23 7309 ns 7290 ns 95797
*/
static void BM_Downmix(benchmark::State& state) {
diff --git a/media/libeffects/downmix/tests/downmix_tests.cpp b/media/libeffects/downmix/tests/downmix_tests.cpp
index 3da6cc2..d4b7a3a 100644
--- a/media/libeffects/downmix/tests/downmix_tests.cpp
+++ b/media/libeffects/downmix/tests/downmix_tests.cpp
@@ -26,32 +26,37 @@
extern audio_effect_library_t AUDIO_EFFECT_LIBRARY_INFO_SYM;
static constexpr audio_channel_mask_t kChannelPositionMasks[] = {
-// AUDIO_CHANNEL_OUT_MONO,
-// AUDIO_CHANNEL_OUT_FRONT_CENTER,
+ AUDIO_CHANNEL_OUT_FRONT_LEFT, // Legacy: the downmix effect treats MONO as FRONT_LEFT only.
+ // The AudioMixer interprets MONO as a special case requiring
+ // channel replication, bypassing the downmix effect.
+ AUDIO_CHANNEL_OUT_FRONT_CENTER,
AUDIO_CHANNEL_OUT_STEREO,
AUDIO_CHANNEL_OUT_2POINT1,
-// AUDIO_CHANNEL_OUT_2POINT0POINT2,
+ AUDIO_CHANNEL_OUT_2POINT0POINT2,
AUDIO_CHANNEL_OUT_QUAD,
AUDIO_CHANNEL_OUT_QUAD_BACK,
AUDIO_CHANNEL_OUT_QUAD_SIDE,
AUDIO_CHANNEL_OUT_SURROUND,
-// AUDIO_CHANNEL_OUT_2POINT1POINT2,
-// AUDIO_CHANNEL_OUT_3POINT0POINT2,
+ AUDIO_CHANNEL_OUT_2POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT0POINT2,
AUDIO_CHANNEL_OUT_PENTA,
-// AUDIO_CHANNEL_OUT_3POINT1POINT2,
+ AUDIO_CHANNEL_OUT_3POINT1POINT2,
AUDIO_CHANNEL_OUT_5POINT1,
AUDIO_CHANNEL_OUT_5POINT1_BACK,
AUDIO_CHANNEL_OUT_5POINT1_SIDE,
AUDIO_CHANNEL_OUT_6POINT1,
-// AUDIO_CHANNEL_OUT_5POINT1POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1POINT2,
AUDIO_CHANNEL_OUT_7POINT1,
-// AUDIO_CHANNEL_OUT_5POINT1POINT4,
-// AUDIO_CHANNEL_OUT_7POINT1POINT2,
-// AUDIO_CHANNEL_OUT_7POINT1POINT4,
-// AUDIO_CHANNEL_OUT_13POINT_360RA,
-// AUDIO_CHANNEL_OUT_22POINT2,
+ AUDIO_CHANNEL_OUT_5POINT1POINT4,
+ AUDIO_CHANNEL_OUT_7POINT1POINT2,
+ AUDIO_CHANNEL_OUT_7POINT1POINT4,
+ AUDIO_CHANNEL_OUT_13POINT_360RA,
+ AUDIO_CHANNEL_OUT_22POINT2,
};
+static constexpr audio_channel_mask_t kConsideredChannels =
+ (audio_channel_mask_t)(AUDIO_CHANNEL_OUT_7POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER);
+
// Downmix doesn't change with sample rate
static constexpr size_t kSampleRates[] = {
48000,
@@ -100,7 +105,8 @@
ASSERT_LT(index, FCC_24);
const int pairIndex = pairIdxFromChannelIdx(index);
const AUDIO_GEOMETRY_SIDE side = sideFromChannelIdx(index);
- channel &= ~(1 << index);
+ const int channelBit = 1 << index;
+ channel &= ~channelBit;
// Generate a +1, -1 alternating stream in one channel, which has variance 1.
auto indata = input.data();
@@ -127,6 +133,12 @@
// Confirm exactly the mix amount prescribed by the existing downmix effect.
// For future changes to the downmix effect, the nearness needs to be relaxed
// to compare behavior S or earlier.
+ if ((channelBit & kConsideredChannels) == 0) {
+ // for channels not considered, expect 0 power for legacy downmix
+ EXPECT_EQ(0.f, power[0]);
+ EXPECT_EQ(0.f, power[1]);
+ continue;
+ }
constexpr float POWER_TOLERANCE = 0.01; // for variance sum error.
switch (side) {
case AUDIO_GEOMETRY_SIDE_LEFT: