summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2024-03-12 19:24:45 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-03-12 19:24:45 +0000
commit3d995dfe04ab61e25e5f6c5455ed870717872cea (patch)
treebe902e86ed42a46db6cd9e2131814168b8869b95
parent168afd6d4043a518a3e3de4cdf20d0ce33240c3a (diff)
parentd41d8283a4bfce4f9300ad8bb6c765c9f1fa3264 (diff)
downloadmedia-3d995dfe04ab61e25e5f6c5455ed870717872cea.tar.gz
Merge "ChannelMix: Add AUDIO_CHANNEL_OUT_9POINT1POINT6 support" into main
-rw-r--r--audio_utils/ChannelMix.cpp5
-rw-r--r--audio_utils/benchmarks/channelmix_benchmark.cpp217
-rw-r--r--audio_utils/include/audio_utils/ChannelMix.h124
-rw-r--r--audio_utils/tests/channelmix_tests.cpp2
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