Audio masks for "front wide" channels

Add "front wide" left/right channels to support
immersive audio configurations such as 9.1.6
Add definitions for configurations 9.1.x that
take advantage of front wides.

Bug: 188502620
Test: atest libmedia_helper_tests
Change-Id: Ib953892221d0d278bd29b3d3fd9bb92a79f3426d
diff --git a/audio/include/system/audio-hal-enums.h b/audio/include/system/audio-hal-enums.h
index c8434a3..05c441a 100644
--- a/audio/include/system/audio-hal-enums.h
+++ b/audio/include/system/audio-hal-enums.h
@@ -96,6 +96,8 @@
     V(AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER, 0x200000u) \
     V(AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT, 0x400000u) \
     V(AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2, 0x800000u) \
+    V(AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT, 0x1000000u) \
+    V(AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT, 0x2000000u) \
     V(AUDIO_CHANNEL_OUT_HAPTIC_A, 0x20000000u) \
     V(AUDIO_CHANNEL_OUT_HAPTIC_B, 0x10000000u)
 // These are individual input channel flags, only one bit must be set.
@@ -146,6 +148,10 @@
     V(AUDIO_CHANNEL_OUT_7POINT1, AUDIO_CHANNEL_OUT_FRONT_LEFT | AUDIO_CHANNEL_OUT_FRONT_RIGHT | AUDIO_CHANNEL_OUT_FRONT_CENTER | AUDIO_CHANNEL_OUT_LOW_FREQUENCY | AUDIO_CHANNEL_OUT_BACK_LEFT | AUDIO_CHANNEL_OUT_BACK_RIGHT | AUDIO_CHANNEL_OUT_SIDE_LEFT | AUDIO_CHANNEL_OUT_SIDE_RIGHT) \
     V(AUDIO_CHANNEL_OUT_7POINT1POINT2, AUDIO_CHANNEL_OUT_7POINT1 | AUDIO_CHANNEL_OUT_TOP_SIDE_LEFT | AUDIO_CHANNEL_OUT_TOP_SIDE_RIGHT) \
     V(AUDIO_CHANNEL_OUT_7POINT1POINT4, AUDIO_CHANNEL_OUT_7POINT1 | AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT | AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT | AUDIO_CHANNEL_OUT_TOP_BACK_LEFT | AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT) \
+    V(AUDIO_CHANNEL_OUT_9POINT1POINT4, AUDIO_CHANNEL_OUT_7POINT1POINT4 | \
+            AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT | AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT) \
+    V(AUDIO_CHANNEL_OUT_9POINT1POINT6, AUDIO_CHANNEL_OUT_9POINT1POINT4 | \
+            AUDIO_CHANNEL_OUT_TOP_SIDE_LEFT | AUDIO_CHANNEL_OUT_TOP_SIDE_RIGHT) \
     V(AUDIO_CHANNEL_OUT_13POINT_360RA, \
             AUDIO_CHANNEL_OUT_FRONT_LEFT | AUDIO_CHANNEL_OUT_FRONT_RIGHT | \
             AUDIO_CHANNEL_OUT_FRONT_CENTER | \
diff --git a/audio/include/system/audio.h b/audio/include/system/audio.h
index 55f16b7..9d925a2 100644
--- a/audio/include/system/audio.h
+++ b/audio/include/system/audio.h
@@ -219,10 +219,11 @@
     FCC_8 = 8,
     FCC_12 = 12,
     FCC_24 = 24,
+    FCC_26 = 26,
     // FCC_LIMIT is the maximum PCM channel count supported through
     // the mixing pipeline to the audio HAL.
     //
-    // This can be adjusted onto a value such as FCC_12 or FCC_24
+    // This can be adjusted onto a value such as FCC_12 or FCC_26
     // if the device HAL can support it.  Do not reduce below FCC_8.
     FCC_LIMIT = FCC_12,
 };
diff --git a/audio_utils/include/audio_utils/channels.h b/audio_utils/include/audio_utils/channels.h
index 067345b..f5c6639 100644
--- a/audio_utils/include/audio_utils/channels.h
+++ b/audio_utils/include/audio_utils/channels.h
@@ -78,9 +78,11 @@
     AUDIO_GEOMETRY_SIDE_CENTER, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
     AUDIO_GEOMETRY_SIDE_RIGHT,  // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT    = 0x400000u,
     AUDIO_GEOMETRY_SIDE_CENTER, // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
+    AUDIO_GEOMETRY_SIDE_LEFT,   // AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT       = 0x1000000u
+    AUDIO_GEOMETRY_SIDE_RIGHT,  // AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT      = 0x2000000u
 };
 constexpr inline AUDIO_GEOMETRY_SIDE sideFromChannelIdx(size_t idx) {
-    static_assert(std::size(kSideFromChannelIdx) == FCC_24);
+    static_assert(std::size(kSideFromChannelIdx) == FCC_26);
     if (idx < std::size(kSideFromChannelIdx)) return kSideFromChannelIdx[idx];
     return AUDIO_GEOMETRY_SIDE_CENTER;
 }
@@ -127,9 +129,11 @@
     AUDIO_GEOMETRY_HEIGHT_BOTTOM, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
     AUDIO_GEOMETRY_HEIGHT_BOTTOM, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT    = 0x400000u,
     AUDIO_GEOMETRY_HEIGHT_BOTTOM, // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
+    AUDIO_GEOMETRY_HEIGHT_MIDDLE, // AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT       = 0x1000000u
+    AUDIO_GEOMETRY_HEIGHT_MIDDLE, // AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT      = 0x2000000u
 };
 constexpr inline AUDIO_GEOMETRY_HEIGHT heightFromChannelIdx(size_t idx) {
-    static_assert(std::size(kHeightFromChannelIdx) == FCC_24);
+    static_assert(std::size(kHeightFromChannelIdx) == FCC_26);
     if (idx < std::size(kHeightFromChannelIdx)) return kHeightFromChannelIdx[idx];
     return AUDIO_GEOMETRY_HEIGHT_MIDDLE;
 }
@@ -176,9 +180,11 @@
     AUDIO_GEOMETRY_DEPTH_FRONT,  // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
     AUDIO_GEOMETRY_DEPTH_FRONT,  // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT    = 0x400000u,
     AUDIO_GEOMETRY_DEPTH_FRONT,  // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
+    AUDIO_GEOMETRY_DEPTH_MIDDLE, // AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT       = 0x1000000u
+    AUDIO_GEOMETRY_DEPTH_MIDDLE, // AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT      = 0x2000000u
 };
 constexpr inline AUDIO_GEOMETRY_DEPTH depthFromChannelIdx(size_t idx) {
-    static_assert(std::size(kDepthFromChannelIdx) == FCC_24);
+    static_assert(std::size(kDepthFromChannelIdx) == FCC_26);
     if (idx < std::size(kDepthFromChannelIdx)) return kDepthFromChannelIdx[idx];
     return AUDIO_GEOMETRY_DEPTH_FRONT;
 }
@@ -208,8 +214,8 @@
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Winitializer-overrides"  // we use override array assignment
 
-constexpr inline int kPairIdxFromChannelIdx[FCC_24] = {
-    [ 0 ... 23 ] = -1,  // everything defaults to -1 unless overridden below.
+constexpr inline int kPairIdxFromChannelIdx[FCC_26] = {
+    [ 0 ... 25 ] = -1,  // everything defaults to -1 unless overridden below.
     CHANNEL_ASSOCIATE(AUDIO_CHANNEL_OUT_FRONT_LEFT, AUDIO_CHANNEL_OUT_FRONT_RIGHT)
     // AUDIO_CHANNEL_OUT_FRONT_CENTER          = 0x4u,
     // AUDIO_CHANNEL_OUT_LOW_FREQUENCY         = 0x8u,
@@ -227,12 +233,13 @@
     CHANNEL_ASSOCIATE(AUDIO_CHANNEL_OUT_BOTTOM_FRONT_LEFT, AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT)
     // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
     // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
+    CHANNEL_ASSOCIATE(AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT, AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT)
 };
 #pragma GCC diagnostic pop
 #pragma pop_macro("CHANNEL_ASSOCIATE")
 
 constexpr inline ssize_t pairIdxFromChannelIdx(size_t idx) {
-    static_assert(std::size(kPairIdxFromChannelIdx) == FCC_24);
+    static_assert(std::size(kPairIdxFromChannelIdx) == FCC_26);
     if (idx < std::size(kPairIdxFromChannelIdx)) return kPairIdxFromChannelIdx[idx];
     return -1;
 }