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

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

Merge "Downmix: Support 26 channels" into sc-v2-dev

parents a148ec1e 69344d32
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -188,9 +188,11 @@ static bool Downmix_validChannelMask(uint32_t mask)
    if (!mask) {
        return false;
    }
    // check against unsupported channels
    if (mask & ~AUDIO_CHANNEL_OUT_22POINT2) {
        ALOGE("Unsupported channels in %u", mask & ~AUDIO_CHANNEL_OUT_22POINT2);
    // check against unsupported channels (up to FCC_26)
    constexpr uint32_t MAXIMUM_CHANNEL_MASK = AUDIO_CHANNEL_OUT_22POINT2
            | AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT | AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT;
    if (mask & ~MAXIMUM_CHANNEL_MASK) {
        ALOGE("Unsupported channels in %#x", mask & ~MAXIMUM_CHANNEL_MASK);
        return false;
    }
    return true;
+8 −1
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ static constexpr audio_channel_mask_t kChannelPositionMasks[] = {
    AUDIO_CHANNEL_OUT_7POINT1POINT4,
    AUDIO_CHANNEL_OUT_13POINT_360RA,
    AUDIO_CHANNEL_OUT_22POINT2,
    audio_channel_mask_t(AUDIO_CHANNEL_OUT_22POINT2
            | AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT | AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT),
};

constexpr float COEF_25 = 0.2508909536f;
@@ -82,6 +84,8 @@ constexpr inline float kScaleFromChannelIdxLeft[] = {
    M_SQRT1_2, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
    0.f, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT    = 0x400000u,
    0.f, // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
    M_SQRT1_2, // AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT       = 0x1000000u,
    0.f,       // AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT      = 0x2000000u,
};

constexpr inline float kScaleFromChannelIdxRight[] = {
@@ -109,6 +113,8 @@ constexpr inline float kScaleFromChannelIdxRight[] = {
    M_SQRT1_2, // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_CENTER   = 0x200000u,
    1.f,       // AUDIO_CHANNEL_OUT_BOTTOM_FRONT_RIGHT    = 0x400000u,
    M_SQRT1_2, // AUDIO_CHANNEL_OUT_LOW_FREQUENCY_2       = 0x800000u,
    0.f,       // AUDIO_CHANNEL_OUT_FRONT_WIDE_LEFT       = 0x1000000u,
    M_SQRT1_2, // AUDIO_CHANNEL_OUT_FRONT_WIDE_RIGHT      = 0x2000000u,
};

// Downmix doesn't change with sample rate
@@ -156,7 +162,7 @@ public:
        double savedPower[32][2]{};
        for (unsigned i = 0, channel = channelMask; channel != 0; ++i) {
            const int index = __builtin_ctz(channel);
            ASSERT_LT(index, FCC_24);
            ASSERT_LT(index, FCC_26);
            const int pairIndex = pairIdxFromChannelIdx(index);
            const AUDIO_GEOMETRY_SIDE side = sideFromChannelIdx(index);
            const int channelBit = 1 << index;
@@ -243,6 +249,7 @@ public:
                handle_, EFFECT_CMD_SET_CONFIG,
                sizeof(effect_config_t), &config_, &replySize, &reply);
        ASSERT_EQ(0, err);
        ASSERT_EQ(0, reply);
        err = (downmixApi->command)(
                handle_, EFFECT_CMD_ENABLE,
                0, nullptr, &replySize, &reply);