Loading media/libeffects/downmix/EffectDownmix.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading media/libeffects/downmix/tests/downmix_tests.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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[] = { Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading
media/libeffects/downmix/EffectDownmix.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading
media/libeffects/downmix/tests/downmix_tests.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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[] = { Loading Loading @@ -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 Loading Loading @@ -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; Loading Loading @@ -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); Loading