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;
}