diff options
author | Andy Hung <hunga@google.com> | 2024-03-12 19:24:45 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-03-12 19:24:45 +0000 |
commit | 3d995dfe04ab61e25e5f6c5455ed870717872cea (patch) | |
tree | be902e86ed42a46db6cd9e2131814168b8869b95 | |
parent | 168afd6d4043a518a3e3de4cdf20d0ce33240c3a (diff) | |
parent | d41d8283a4bfce4f9300ad8bb6c765c9f1fa3264 (diff) | |
download | media-3d995dfe04ab61e25e5f6c5455ed870717872cea.tar.gz |
Merge "ChannelMix: Add AUDIO_CHANNEL_OUT_9POINT1POINT6 support" into main
-rw-r--r-- | audio_utils/ChannelMix.cpp | 5 | ||||
-rw-r--r-- | audio_utils/benchmarks/channelmix_benchmark.cpp | 217 | ||||
-rw-r--r-- | audio_utils/include/audio_utils/ChannelMix.h | 124 | ||||
-rw-r--r-- | audio_utils/tests/channelmix_tests.cpp | 2 |
4 files changed, 256 insertions, 92 deletions
diff --git a/audio_utils/ChannelMix.cpp b/audio_utils/ChannelMix.cpp index d8ee72da..9c18c3f4 100644 --- a/audio_utils/ChannelMix.cpp +++ b/audio_utils/ChannelMix.cpp @@ -122,12 +122,14 @@ INSTANTIATE(AUDIO_CHANNEL_OUT_5POINT1POINT2, (CHANNEL)) \ INSTANTIATE(AUDIO_CHANNEL_OUT_5POINT1POINT4, (CHANNEL)) \ INSTANTIATE(AUDIO_CHANNEL_OUT_7POINT1POINT2, (CHANNEL)) \ INSTANTIATE(AUDIO_CHANNEL_OUT_7POINT1POINT4, (CHANNEL)) \ +INSTANTIATE(AUDIO_CHANNEL_OUT_9POINT1POINT6, (CHANNEL)) \ INSTANTIATE(AUDIO_CHANNEL_OUT_22POINT2, (CHANNEL)) INSTANTIATE_MASKS(AUDIO_CHANNEL_OUT_STEREO) INSTANTIATE_MASKS(AUDIO_CHANNEL_OUT_5POINT1) INSTANTIATE_MASKS(AUDIO_CHANNEL_OUT_7POINT1) INSTANTIATE_MASKS(AUDIO_CHANNEL_OUT_7POINT1POINT4) +INSTANTIATE_MASKS(AUDIO_CHANNEL_OUT_9POINT1POINT6) /* static */ std::shared_ptr<IChannelMix> IChannelMix::create(audio_channel_mask_t outputChannelMask) { @@ -140,6 +142,8 @@ std::shared_ptr<IChannelMix> IChannelMix::create(audio_channel_mask_t outputChan return std::make_shared<ChannelMix<AUDIO_CHANNEL_OUT_7POINT1>>(); case AUDIO_CHANNEL_OUT_7POINT1POINT4: return std::make_shared<ChannelMix<AUDIO_CHANNEL_OUT_7POINT1POINT4>>(); + case AUDIO_CHANNEL_OUT_9POINT1POINT6: + return std::make_shared<ChannelMix<AUDIO_CHANNEL_OUT_9POINT1POINT6>>(); default: return {}; } @@ -152,6 +156,7 @@ bool IChannelMix::isOutputChannelMaskSupported(audio_channel_mask_t outputChanne case AUDIO_CHANNEL_OUT_5POINT1: case AUDIO_CHANNEL_OUT_7POINT1: case AUDIO_CHANNEL_OUT_7POINT1POINT4: + case AUDIO_CHANNEL_OUT_9POINT1POINT6: return true; default: return false; diff --git a/audio_utils/benchmarks/channelmix_benchmark.cpp b/audio_utils/benchmarks/channelmix_benchmark.cpp index 0215f47d..022ee579 100644 --- a/audio_utils/benchmarks/channelmix_benchmark.cpp +++ b/audio_utils/benchmarks/channelmix_benchmark.cpp @@ -43,6 +43,7 @@ static constexpr audio_channel_mask_t kChannelPositionMasks[] = { AUDIO_CHANNEL_OUT_5POINT1POINT4, AUDIO_CHANNEL_OUT_7POINT1POINT2, AUDIO_CHANNEL_OUT_7POINT1POINT4, + AUDIO_CHANNEL_OUT_9POINT1POINT6, AUDIO_CHANNEL_OUT_13POINT_360RA, AUDIO_CHANNEL_OUT_22POINT2, }; @@ -51,98 +52,126 @@ static constexpr audio_channel_mask_t kChannelPositionMasks[] = { $ adb shell /data/benchmarktest64/channelmix_benchmark/channelmix_benchmark Pixel 7 arm64 benchmark ------------------------------------------------------------ -Benchmark Time CPU Iterations ------------------------------------------------------------ +------------------------------------------------------------------------------------------------ +Benchmark Time CPU Iteration +------------------------------------------------------------------------------------------------ channelmix_benchmark: - #BM_ChannelMix_Stereo/0 2266 ns 2251 ns 310903 - #BM_ChannelMix_Stereo/1 2262 ns 2251 ns 310898 - #BM_ChannelMix_Stereo/2 255 ns 254 ns 2754285 - #BM_ChannelMix_Stereo/3 2969 ns 2954 ns 235901 - #BM_ChannelMix_Stereo/4 3350 ns 3334 ns 209901 - #BM_ChannelMix_Stereo/5 814 ns 810 ns 863246 - #BM_ChannelMix_Stereo/6 814 ns 810 ns 863255 - #BM_ChannelMix_Stereo/7 3349 ns 3328 ns 210234 - #BM_ChannelMix_Stereo/8 3671 ns 3654 ns 191555 - #BM_ChannelMix_Stereo/9 3680 ns 3654 ns 191583 - #BM_ChannelMix_Stereo/10 3667 ns 3650 ns 191738 - #BM_ChannelMix_Stereo/11 4109 ns 4089 ns 171118 - #BM_ChannelMix_Stereo/12 1209 ns 1203 ns 581812 - #BM_ChannelMix_Stereo/13 1209 ns 1203 ns 581666 - #BM_ChannelMix_Stereo/14 4694 ns 4674 ns 149798 - #BM_ChannelMix_Stereo/15 1306 ns 1301 ns 537843 - #BM_ChannelMix_Stereo/16 1307 ns 1301 ns 537898 - #BM_ChannelMix_Stereo/17 2059 ns 2050 ns 341145 - #BM_ChannelMix_Stereo/18 2053 ns 2043 ns 342709 - #BM_ChannelMix_Stereo/19 2462 ns 2451 ns 285554 - #BM_ChannelMix_Stereo/20 7889 ns 7853 ns 89005 - #BM_ChannelMix_Stereo/21 6133 ns 6104 ns 114499 - #BM_ChannelMix_5Point1/0 1676 ns 1665 ns 420195 - #BM_ChannelMix_5Point1/1 1675 ns 1667 ns 419527 - #BM_ChannelMix_5Point1/2 537 ns 535 ns 1310551 - #BM_ChannelMix_5Point1/3 3039 ns 3024 ns 231306 - #BM_ChannelMix_5Point1/4 3763 ns 3744 ns 186929 - #BM_ChannelMix_5Point1/5 698 ns 695 ns 990457 - #BM_ChannelMix_5Point1/6 661 ns 657 ns 1058724 - #BM_ChannelMix_5Point1/7 3766 ns 3748 ns 186771 - #BM_ChannelMix_5Point1/8 4395 ns 4374 ns 159819 - #BM_ChannelMix_5Point1/9 4389 ns 4369 ns 160144 - #BM_ChannelMix_5Point1/10 4390 ns 4369 ns 160196 - #BM_ChannelMix_5Point1/11 5111 ns 5084 ns 137574 - #BM_ChannelMix_5Point1/12 652 ns 649 ns 1086857 - #BM_ChannelMix_5Point1/13 653 ns 649 ns 1072477 - #BM_ChannelMix_5Point1/14 5762 ns 5734 ns 122129 - #BM_ChannelMix_5Point1/15 778 ns 774 ns 903415 - #BM_ChannelMix_5Point1/16 778 ns 775 ns 903085 - #BM_ChannelMix_5Point1/17 1220 ns 1214 ns 575908 - #BM_ChannelMix_5Point1/18 1015 ns 1006 ns 694142 - #BM_ChannelMix_5Point1/19 1382 ns 1373 ns 509721 - #BM_ChannelMix_5Point1/20 10184 ns 10076 ns 69550 - #BM_ChannelMix_5Point1/21 5401 ns 5362 ns 130580 - #BM_ChannelMix_7Point1/0 1644 ns 1632 ns 428673 - #BM_ChannelMix_7Point1/1 1640 ns 1633 ns 428639 - #BM_ChannelMix_7Point1/2 722 ns 719 ns 973262 - #BM_ChannelMix_7Point1/3 3076 ns 3062 ns 228509 - #BM_ChannelMix_7Point1/4 3902 ns 3884 ns 180207 - #BM_ChannelMix_7Point1/5 727 ns 723 ns 968505 - #BM_ChannelMix_7Point1/6 3905 ns 3886 ns 180132 - #BM_ChannelMix_7Point1/7 3903 ns 3886 ns 180110 - #BM_ChannelMix_7Point1/8 4723 ns 4700 ns 148911 - #BM_ChannelMix_7Point1/9 4727 ns 4704 ns 148850 - #BM_ChannelMix_7Point1/10 4723 ns 4702 ns 148944 - #BM_ChannelMix_7Point1/11 5518 ns 5492 ns 127454 - #BM_ChannelMix_7Point1/12 723 ns 720 ns 971533 - #BM_ChannelMix_7Point1/13 5520 ns 5492 ns 127444 - #BM_ChannelMix_7Point1/14 6299 ns 6270 ns 111619 - #BM_ChannelMix_7Point1/15 561 ns 559 ns 1266804 - #BM_ChannelMix_7Point1/16 563 ns 559 ns 1254781 - #BM_ChannelMix_7Point1/17 1240 ns 1234 ns 561452 - #BM_ChannelMix_7Point1/18 1100 ns 1095 ns 638789 - #BM_ChannelMix_7Point1/19 1525 ns 1518 ns 460122 - #BM_ChannelMix_7Point1/20 10998 ns 10950 ns 63928 - #BM_ChannelMix_7Point1/21 4656 ns 4621 ns 151487 - #BM_ChannelMix_7Point1Point4/0 2301 ns 2290 ns 305500 - #BM_ChannelMix_7Point1Point4/1 2301 ns 2290 ns 305620 - #BM_ChannelMix_7Point1Point4/2 913 ns 908 ns 770049 - #BM_ChannelMix_7Point1Point4/3 4232 ns 4212 ns 166032 - #BM_ChannelMix_7Point1Point4/4 5241 ns 5216 ns 134179 - #BM_ChannelMix_7Point1Point4/5 1084 ns 1079 ns 648761 - #BM_ChannelMix_7Point1Point4/6 5243 ns 5219 ns 134126 - #BM_ChannelMix_7Point1Point4/7 5250 ns 5226 ns 133968 - #BM_ChannelMix_7Point1Point4/8 6225 ns 6194 ns 112973 - #BM_ChannelMix_7Point1Point4/9 6223 ns 6193 ns 112985 - #BM_ChannelMix_7Point1Point4/10 6223 ns 6193 ns 113047 - #BM_ChannelMix_7Point1Point4/11 7416 ns 7380 ns 94840 - #BM_ChannelMix_7Point1Point4/12 903 ns 899 ns 778228 - #BM_ChannelMix_7Point1Point4/13 7414 ns 7380 ns 94835 - #BM_ChannelMix_7Point1Point4/14 8354 ns 8314 ns 84219 - #BM_ChannelMix_7Point1Point4/15 818 ns 815 ns 865119 - #BM_ChannelMix_7Point1Point4/16 820 ns 816 ns 854456 - #BM_ChannelMix_7Point1Point4/17 1106 ns 1100 ns 636240 - #BM_ChannelMix_7Point1Point4/18 1104 ns 1099 ns 636313 - #BM_ChannelMix_7Point1Point4/19 1151 ns 1145 ns 611497 - #BM_ChannelMix_7Point1Point4/20 14454 ns 14385 ns 48561 - #BM_ChannelMix_7Point1Point4/21 5982 ns 5954 ns 117562 + #BM_ChannelMix_Stereo/0 1584.624127461959 ns 1577.8786910297354 ns 443677 + #BM_ChannelMix_Stereo/1 1584.678016063811 ns 1577.5935446358542 ns 443724 + #BM_ChannelMix_Stereo/2 257.8439968596911 ns 256.73377516518275 ns 2727131 + #BM_ChannelMix_Stereo/3 2817.8586154104814 ns 2805.4497511201575 ns 249518 + #BM_ChannelMix_Stereo/4 3454.621091622776 ns 3438.280971421562 ns 203825 + #BM_ChannelMix_Stereo/5 814.5202073907247 ns 810.8345646578592 ns 863298 + #BM_ChannelMix_Stereo/6 814.6591305879139 ns 810.8376574553886 ns 863181 + #BM_ChannelMix_Stereo/7 3450.1116802072984 ns 3435.144113779975 ns 203832 + #BM_ChannelMix_Stereo/8 4075.6687216808855 ns 4056.735656426362 ns 172586 + #BM_ChannelMix_Stereo/9 4075.1493397336594 ns 4056.1154684474764 ns 172506 + #BM_ChannelMix_Stereo/10 4050.552323304721 ns 4031.185599428678 ns 173632 + #BM_ChannelMix_Stereo/11 4772.08328528545 ns 4749.7996554086585 ns 147421 + #BM_ChannelMix_Stereo/12 1207.4669943988806 ns 1201.779749169794 ns 582386 + #BM_ChannelMix_Stereo/13 1206.6310224396407 ns 1201.2170626850327 ns 582675 + #BM_ChannelMix_Stereo/14 5333.77644088611 ns 5307.639342522252 ns 131898 + #BM_ChannelMix_Stereo/15 1305.1935398263006 ns 1299.0954717541388 ns 538840 + #BM_ChannelMix_Stereo/16 1305.1100692447556 ns 1299.4297640484895 ns 538670 + #BM_ChannelMix_Stereo/17 1886.552455306027 ns 1878.964744321161 ns 372479 + #BM_ChannelMix_Stereo/18 1833.9518923822216 ns 1825.28045911661 ns 383432 + #BM_ChannelMix_Stereo/19 2123.2422014413596 ns 2113.312087275008 ns 331183 + #BM_ChannelMix_Stereo/20 2566.000912328837 ns 2554.4080810439914 ns 274024 + #BM_ChannelMix_Stereo/21 9674.346659891693 ns 9572.201779926385 ns 72812 + #BM_ChannelMix_Stereo/22 7064.819541015039 ns 7033.133485390462 ns 99524 + #BM_ChannelMix_5Point1/0 3998.744585320616 ns 3979.878947907533 ns 175726 + #BM_ChannelMix_5Point1/1 3996.7273735393856 ns 3979.5646336261952 ns 175845 + #BM_ChannelMix_5Point1/2 571.1685188685985 ns 568.5066485512494 ns 1274789 + #BM_ChannelMix_5Point1/3 6859.186952421266 ns 6827.083100769158 ns 102839 + #BM_ChannelMix_5Point1/4 8247.552512539802 ns 8213.975847278873 ns 85332 + #BM_ChannelMix_5Point1/5 647.7379762376627 ns 644.8995942251229 ns 1095435 + #BM_ChannelMix_5Point1/6 653.6735856426786 ns 651.0027499009582 ns 1077857 + #BM_ChannelMix_5Point1/7 8239.63233966818 ns 8201.233626783234 ns 85307 + #BM_ChannelMix_5Point1/8 9876.205631112243 ns 9830.739673485414 ns 71176 + #BM_ChannelMix_5Point1/9 9895.919856358605 ns 9852.652964371222 ns 71010 + #BM_ChannelMix_5Point1/10 9926.404937439764 ns 9880.174425299469 ns 71211 + #BM_ChannelMix_5Point1/11 11098.554419676255 ns 11046.770994052376 ns 63387 + #BM_ChannelMix_5Point1/12 661.3799346937448 ns 658.2737776463655 ns 1075548 + #BM_ChannelMix_5Point1/13 660.2247365241512 ns 657.1922621923 ns 1074387 + #BM_ChannelMix_5Point1/14 12488.98408949619 ns 12429.793927017769 ns 56315 + #BM_ChannelMix_5Point1/15 785.5108530564086 ns 781.8289591958687 ns 903340 + #BM_ChannelMix_5Point1/16 786.4194859807196 ns 782.6872009662999 ns 894130 + #BM_ChannelMix_5Point1/17 1220.481377951544 ns 1214.7925379524959 ns 574534 + #BM_ChannelMix_5Point1/18 1033.1440404735665 ns 1025.1535907684895 ns 688251 + #BM_ChannelMix_5Point1/19 1384.1550536582333 ns 1378.3095904839972 ns 508869 + #BM_ChannelMix_5Point1/20 1859.6552118374757 ns 1851.2871329217771 ns 378734 + #BM_ChannelMix_5Point1/21 21042.00829614576 ns 20954.427595914778 ns 33389 + #BM_ChannelMix_5Point1/22 4865.180198686846 ns 4843.440710104699 ns 145556 + #BM_ChannelMix_7Point1/0 5086.403517096561 ns 5066.400356235592 ns 136988 + #BM_ChannelMix_7Point1/1 5092.64935733066 ns 5069.928712196951 ns 138018 + #BM_ChannelMix_7Point1/2 580.8386797597832 ns 578.1633211791726 ns 1211931 + #BM_ChannelMix_7Point1/3 8912.321896958316 ns 8873.011453286297 ns 78842 + #BM_ChannelMix_7Point1/4 10968.632097606318 ns 10917.41972469887 ns 63930 + #BM_ChannelMix_7Point1/5 726.8751572135141 ns 723.3895340485537 ns 967633 + #BM_ChannelMix_7Point1/6 10990.37087972071 ns 10939.177440982927 ns 64134 + #BM_ChannelMix_7Point1/7 10973.048671598453 ns 10913.438153663725 ns 64062 + #BM_ChannelMix_7Point1/8 12721.667251641265 ns 12664.338230238987 ns 55273 + #BM_ChannelMix_7Point1/9 12707.525889264853 ns 12654.736756227583 ns 55158 + #BM_ChannelMix_7Point1/10 12749.720973614516 ns 12689.723798830073 ns 55217 + #BM_ChannelMix_7Point1/11 14491.778839392775 ns 14434.37490176607 ns 48354 + #BM_ChannelMix_7Point1/12 737.7057427091167 ns 734.2313228110585 ns 963796 + #BM_ChannelMix_7Point1/13 14496.991651784358 ns 14422.233023217163 ns 48154 + #BM_ChannelMix_7Point1/14 16464.798606889286 ns 16389.21455284934 ns 42782 + #BM_ChannelMix_7Point1/15 559.213653594105 ns 556.9817588821725 ns 1277334 + #BM_ChannelMix_7Point1/16 566.1605467286886 ns 563.6613941659941 ns 1254370 + #BM_ChannelMix_7Point1/17 1253.3420120265812 ns 1248.0777030705242 ns 560261 + #BM_ChannelMix_7Point1/18 1108.042257269461 ns 1102.862052077511 ns 635015 + #BM_ChannelMix_7Point1/19 1527.825791177674 ns 1520.704571637185 ns 457451 + #BM_ChannelMix_7Point1/20 1824.6548966125815 ns 1816.7435915419753 ns 384960 + #BM_ChannelMix_7Point1/21 27557.99023414285 ns 27431.89951759037 ns 25497 + #BM_ChannelMix_7Point1/22 5616.79751878036 ns 5587.643648062816 ns 125261 + #BM_ChannelMix_7Point1Point4/0 7014.499259038577 ns 6984.192739569345 ns 100545 + #BM_ChannelMix_7Point1Point4/1 7021.7462064411075 ns 6988.617095503731 ns 100038 + #BM_ChannelMix_7Point1Point4/2 913.1760532582629 ns 908.506633272119 ns 770585 + #BM_ChannelMix_7Point1Point4/3 12477.598480005978 ns 12422.15004616809 ns 56316 + #BM_ChannelMix_7Point1Point4/4 15322.980915864659 ns 15255.479652302869 ns 45902 + #BM_ChannelMix_7Point1Point4/5 1084.1117429089002 ns 1079.0443395615782 ns 648766 + #BM_ChannelMix_7Point1Point4/6 15314.545660556396 ns 15241.66275902662 ns 45893 + #BM_ChannelMix_7Point1Point4/7 15290.398910794553 ns 15229.703583487835 ns 45905 + #BM_ChannelMix_7Point1Point4/8 17802.86192606147 ns 17706.310160968394 ns 39573 + #BM_ChannelMix_7Point1Point4/9 17793.085298720172 ns 17701.706681480868 ns 39602 + #BM_ChannelMix_7Point1Point4/10 17785.029805845286 ns 17695.70093032652 ns 39556 + #BM_ChannelMix_7Point1Point4/11 20452.726370331704 ns 20362.743108316856 ns 34353 + #BM_ChannelMix_7Point1Point4/12 905.1501997610313 ns 900.8145382372188 ns 778430 + #BM_ChannelMix_7Point1Point4/13 20452.494213333222 ns 20357.311517942882 ns 34303 + #BM_ChannelMix_7Point1Point4/14 22961.73918437959 ns 22856.77036601665 ns 30627 + #BM_ChannelMix_7Point1Point4/15 822.5476244151616 ns 818.6498375120065 ns 864987 + #BM_ChannelMix_7Point1Point4/16 827.1217072917217 ns 823.2904757872059 ns 850212 + #BM_ChannelMix_7Point1Point4/17 991.5142018416226 ns 986.8850542623812 ns 709239 + #BM_ChannelMix_7Point1Point4/18 1115.3075057537858 ns 1109.803063780115 ns 630463 + #BM_ChannelMix_7Point1Point4/19 910.203049595069 ns 906.0727563637828 ns 772496 + #BM_ChannelMix_7Point1Point4/20 1842.6523184706023 ns 1833.970990950399 ns 381674 + #BM_ChannelMix_7Point1Point4/21 38800.57224890828 ns 38630.07895753978 ns 18111 + #BM_ChannelMix_7Point1Point4/22 6308.58632322223 ns 6279.855444602969 ns 111459 + #BM_ChannelMix_9Point1Point6/0 9649.865710953989 ns 9607.98667947049 ns 72895 + #BM_ChannelMix_9Point1Point6/1 9648.56897947997 ns 9607.041150229887 ns 72855 + #BM_ChannelMix_9Point1Point6/2 1467.4483873457445 ns 1460.8920743784784 ns 479117 + #BM_ChannelMix_9Point1Point6/3 16716.733956963417 ns 16632.37615443196 ns 42012 + #BM_ChannelMix_9Point1Point6/4 20287.965075704346 ns 20193.316337419117 ns 34675 + #BM_ChannelMix_9Point1Point6/5 1464.4069860190825 ns 1457.8618415983076 ns 480159 + #BM_ChannelMix_9Point1Point6/6 20273.38667475504 ns 20177.981372379003 ns 34626 + #BM_ChannelMix_9Point1Point6/7 20287.996971267657 ns 20201.494432906646 ns 34668 + #BM_ChannelMix_9Point1Point6/8 23717.49644218307 ns 23606.660708865922 ns 29653 + #BM_ChannelMix_9Point1Point6/9 23693.305799054524 ns 23594.91264329071 ns 29660 + #BM_ChannelMix_9Point1Point6/10 23732.312119779 ns 23620.915066919006 ns 29588 + #BM_ChannelMix_9Point1Point6/11 27105.94758950138 ns 26974.348105900408 ns 25949 + #BM_ChannelMix_9Point1Point6/12 1173.9943372248606 ns 1168.4729043473424 ns 598823 + #BM_ChannelMix_9Point1Point6/13 27091.76928708911 ns 26973.336840077038 ns 25950 + #BM_ChannelMix_9Point1Point6/14 30555.80730795895 ns 30412.954379561914 ns 23016 + #BM_ChannelMix_9Point1Point6/15 1445.3035322833473 ns 1438.1497866413106 ns 486739 + #BM_ChannelMix_9Point1Point6/16 1083.7163404776202 ns 1078.846160485561 ns 648806 + #BM_ChannelMix_9Point1Point6/17 1105.8799540773066 ns 1100.7227664149027 ns 636723 + #BM_ChannelMix_9Point1Point6/18 1104.793673683923 ns 1099.5597121488488 ns 636579 + #BM_ChannelMix_9Point1Point6/19 1104.4723973028551 ns 1099.621290052968 ns 636532 + #BM_ChannelMix_9Point1Point6/20 1110.8329695491907 ns 1105.448990324432 ns 644613 + #BM_ChannelMix_9Point1Point6/21 51622.972821619114 ns 51378.92600612255 ns 13393 + #BM_ChannelMix_9Point1Point6/22 6397.061115862641 ns 6370.5975651920635 ns 109906 + */ template<audio_channel_mask_t OUTPUT_CHANNEL_MASK> @@ -192,6 +221,10 @@ static void BM_ChannelMix_7Point1Point4(benchmark::State& state) { BenchmarkChannelMix<AUDIO_CHANNEL_OUT_7POINT1POINT4>(state); } +static void BM_ChannelMix_9Point1Point6(benchmark::State& state) { + BenchmarkChannelMix<AUDIO_CHANNEL_OUT_9POINT1POINT6>(state); +} + static void ChannelMixArgs(benchmark::internal::Benchmark* b) { for (int i = 0; i < (int)std::size(kChannelPositionMasks); i++) { b->Args({i}); @@ -206,4 +239,6 @@ BENCHMARK(BM_ChannelMix_7Point1)->Apply(ChannelMixArgs); BENCHMARK(BM_ChannelMix_7Point1Point4)->Apply(ChannelMixArgs); +BENCHMARK(BM_ChannelMix_9Point1Point6)->Apply(ChannelMixArgs); + BENCHMARK_MAIN(); diff --git a/audio_utils/include/audio_utils/ChannelMix.h b/audio_utils/include/audio_utils/ChannelMix.h index 23cb9606..5db84584 100644 --- a/audio_utils/include/audio_utils/ChannelMix.h +++ b/audio_utils/include/audio_utils/ChannelMix.h @@ -434,6 +434,121 @@ constexpr bool fillChannelMatrix(audio_channel_mask_t INPUT_CHANNEL_MASK, tmp ^= lowestBit; } return true; + } else if constexpr (OUTPUT_CHANNEL_MASK == AUDIO_CHANNEL_OUT_9POINT1POINT6) { + // FL FR FC LFE BL BR SL SR TFL TFR TBL TBR TSL TSR FWL FWR + size_t index = 0; + constexpr float MINUS_3_DB_IN_FLOAT = M_SQRT1_2; // -3dB = 0.70710678 + constexpr float MINUS_4_5_DB_IN_FLOAT = 0.5946035575f; + + constexpr size_t FL = 0; + constexpr size_t FR = 1; + constexpr size_t FC = 2; + constexpr size_t LFE = 3; + constexpr size_t BL = 4; + constexpr size_t BR = 5; + constexpr size_t SL = 6; + constexpr size_t SR = 7; + constexpr size_t TFL = 8; + constexpr size_t TFR = 9; + constexpr size_t TBL = 10; + constexpr size_t TBR = 11; + constexpr size_t TSL = 12; + constexpr size_t TSR = 13; + constexpr size_t FWL = 14; + constexpr size_t FWR = 15; + for (unsigned tmp = INPUT_CHANNEL_MASK; tmp != 0; ++index) { + if (index >= M) return false; + const unsigned lowestBit = tmp & -(signed)tmp; + matrix[index][FL] = matrix[index][FR] = matrix[index][FC] = 0.f; + matrix[index][LFE] = matrix[index][BL] = matrix[index][BR] = 0.f; + switch (lowestBit) { + case AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT: + matrix[index][TFL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT: + matrix[index][TFR] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER: + matrix[index][TFL] = matrix[index][TFR] = MINUS_3_DB_IN_FLOAT; + break; + + case AUDIO_CHANNEL_OUT_FRONT_LEFT: + case AUDIO_CHANNEL_OUT_BOTTOM_FRONT_LEFT: + matrix[index][FL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_FRONT_RIGHT: + case AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT: + matrix[index][FR] = 1.f; + break; + + case AUDIO_CHANNEL_OUT_FRONT_CENTER: + case AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER: + matrix[index][FC] = 1.f; + break; + + case AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT: + matrix[index][FWL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT: + matrix[index][FWR] = 1.f; + break; + + case AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER: + matrix[index][FL] = MINUS_4_5_DB_IN_FLOAT; + matrix[index][FC] = MINUS_3_DB_IN_FLOAT; + break; + case AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER: + matrix[index][FR] = MINUS_4_5_DB_IN_FLOAT; + matrix[index][FC] = MINUS_3_DB_IN_FLOAT; + break; + + case AUDIO_CHANNEL_OUT_BACK_LEFT: + matrix[index][BL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_BACK_LEFT: + matrix[index][TBL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_BACK_RIGHT: + matrix[index][BR] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT: + matrix[index][TBR] = 1.f; + break; + + case AUDIO_CHANNEL_OUT_SIDE_LEFT: + matrix[index][SL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_SIDE_LEFT: + matrix[index][TSL] = 1.f; + break; + case AUDIO_CHANNEL_OUT_SIDE_RIGHT: + matrix[index][SR] = 1.f; + break; + case AUDIO_CHANNEL_OUT_TOP_SIDE_RIGHT: + matrix[index][TSR] = 1.f; + break; + + case AUDIO_CHANNEL_OUT_TOP_BACK_CENTER: + matrix[index][TBL] = matrix[index][TBR] = MINUS_3_DB_IN_FLOAT; + break; + + case AUDIO_CHANNEL_OUT_BACK_CENTER: + matrix[index][BL] = matrix[index][BR] = MINUS_3_DB_IN_FLOAT; + break; + + case AUDIO_CHANNEL_OUT_TOP_CENTER: + matrix[index][TFL] = matrix[index][TFR] = 0.5f; + matrix[index][TBL] = matrix[index][TBR] = 0.5f; + break; + + case AUDIO_CHANNEL_OUT_LOW_FREQUENCY: + case AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2: + matrix[index][LFE] = 1.f; + break; + } + tmp ^= lowestBit; + } + return true; } else /* constexpr */ { // We only accept NONE here as we don't do anything in that case. static_assert(OUTPUT_CHANNEL_MASK==AUDIO_CHANNEL_NONE); @@ -612,6 +727,9 @@ private: case AUDIO_CHANNEL_OUT_7POINT1POINT4: return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_7POINT1POINT4, OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); + case AUDIO_CHANNEL_OUT_9POINT1POINT6: + return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_9POINT1POINT6, + OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); case AUDIO_CHANNEL_OUT_22POINT2: return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_22POINT2, OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); @@ -619,7 +737,8 @@ private: break; // handled below. } } else if constexpr (OUTPUT_CHANNEL_MASK == AUDIO_CHANNEL_OUT_7POINT1 - || OUTPUT_CHANNEL_MASK == AUDIO_CHANNEL_OUT_7POINT1POINT4) { + || OUTPUT_CHANNEL_MASK == AUDIO_CHANNEL_OUT_7POINT1POINT4 + || OUTPUT_CHANNEL_MASK == AUDIO_CHANNEL_OUT_9POINT1POINT6) { switch (mInputChannelMask) { case AUDIO_CHANNEL_OUT_STEREO: return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_STEREO, @@ -647,6 +766,9 @@ private: case AUDIO_CHANNEL_OUT_7POINT1POINT4: return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_7POINT1POINT4, OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); + case AUDIO_CHANNEL_OUT_9POINT1POINT6: + return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_9POINT1POINT6, + OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); case AUDIO_CHANNEL_OUT_22POINT2: return sparseChannelMatrixMultiply<AUDIO_CHANNEL_OUT_22POINT2, OUTPUT_CHANNEL_MASK, ACCUMULATE>(src, dst, frameCount); diff --git a/audio_utils/tests/channelmix_tests.cpp b/audio_utils/tests/channelmix_tests.cpp index dfa24f23..5c1a6db0 100644 --- a/audio_utils/tests/channelmix_tests.cpp +++ b/audio_utils/tests/channelmix_tests.cpp @@ -24,6 +24,7 @@ static constexpr audio_channel_mask_t kOutputChannelMasks[] = { AUDIO_CHANNEL_OUT_5POINT1, // AUDIO_CHANNEL_OUT_5POINT1_BACK AUDIO_CHANNEL_OUT_7POINT1, AUDIO_CHANNEL_OUT_7POINT1POINT4, + AUDIO_CHANNEL_OUT_9POINT1POINT6, }; static constexpr audio_channel_mask_t kInputChannelMasks[] = { @@ -49,6 +50,7 @@ static constexpr audio_channel_mask_t kInputChannelMasks[] = { AUDIO_CHANNEL_OUT_5POINT1POINT4, AUDIO_CHANNEL_OUT_7POINT1POINT2, AUDIO_CHANNEL_OUT_7POINT1POINT4, + AUDIO_CHANNEL_OUT_9POINT1POINT6, AUDIO_CHANNEL_OUT_13POINT_360RA, AUDIO_CHANNEL_OUT_22POINT2, audio_channel_mask_t(AUDIO_CHANNEL_OUT_22POINT2 |