Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 844ef1be authored by Andy Hung's avatar Andy Hung Committed by Android (Google) Code Review
Browse files

Merge "Downmix: Test to 22.2" into sc-dev

parents 2087c466 f5ab7070
Loading
Loading
Loading
Loading
+60 −36
Original line number Diff line number Diff line
@@ -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 @@ static constexpr size_t kFrameCount = 1000;
/*
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) {
+25 −13
Original line number Diff line number Diff line
@@ -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 @@ public:
            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 @@ public:
            // 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: