Support setting individual DP band
Add change the max supported range by +.1 for float frequency
Bug: 295055755
Test: atest android.media.audio.cts.AudioPreProcessingTest
Test: atest android.media.audio.cts.DynamicsProcessingTest
Change-Id: I9c1cb77a575a939e2046bc3d82126fa3433aef09
diff --git a/media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp b/media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp
index 1fed9a5..63cb48d 100644
--- a/media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp
+++ b/media/libeffects/dynamicsproc/aidl/DynamicsProcessing.cpp
@@ -112,7 +112,7 @@
DynamicsProcessing::EqBandConfig({.channel = std::numeric_limits<int>::max(),
.band = std::numeric_limits<int>::max(),
.enable = true,
- .cutoffFrequencyHz = 20000,
+ .cutoffFrequencyHz = 20000.1,
.gainDb = 200});
static const Range::DynamicsProcessingRange kPreEqBandConfigRange = {
@@ -144,7 +144,7 @@
{.channel = std::numeric_limits<int>::max(),
.band = std::numeric_limits<int>::max(),
.enable = true,
- .cutoffFrequencyHz = 20000,
+ .cutoffFrequencyHz = 20000.1,
.attackTimeMs = 60000,
.releaseTimeMs = 60000,
.ratio = 50,
diff --git a/media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp b/media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp
index 9d77135..57c873b 100644
--- a/media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp
+++ b/media/libeffects/dynamicsproc/aidl/DynamicsProcessingContext.cpp
@@ -416,14 +416,25 @@
template <typename T>
bool DynamicsProcessingContext::validateBandConfig(const std::vector<T>& bands, int maxChannel,
int maxBand) {
- std::vector<float> freqs(bands.size(), -1);
+ std::map<int, float> freqs;
for (auto band : bands) {
- if (!validateChannel(band.channel, maxChannel)) return false;
- if (!validateBand(band.band, maxBand)) return false;
+ if (!validateChannel(band.channel, maxChannel)) {
+ LOG(ERROR) << __func__ << " " << band.toString() << " invalid, maxCh " << maxChannel;
+ return false;
+ }
+ if (!validateBand(band.band, maxBand)) {
+ LOG(ERROR) << __func__ << " " << band.toString() << " invalid, maxBand " << maxBand;
+ return false;
+ }
+ if (freqs.find(band.band) != freqs.end()) {
+ LOG(ERROR) << __func__ << " " << band.toString() << " found duplicate";
+ return false;
+ }
freqs[band.band] = band.cutoffFrequencyHz;
}
- if (std::count(freqs.begin(), freqs.end(), -1)) return false;
- return std::is_sorted(freqs.begin(), freqs.end());
+ return std::is_sorted(freqs.begin(), freqs.end(), [](const auto& a, const auto& b) {
+ return a.second <= b.second; //index is already sorted as map key
+ });
}
bool DynamicsProcessingContext::validateLimiterConfig(