summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2024-04-23 16:51:13 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-23 16:51:13 +0000
commit8b6342670cde054d4d2b354123b9aeb3148ef514 (patch)
tree78414b8ece1d2aaa758aec48175f14b0d480ebbe
parent2e05573105203fcaed808d1c8dc783e2440e9e7c (diff)
parent67c12fe44c460b4b698969287fffb37c484028bf (diff)
downloadav-8b6342670cde054d4d2b354123b9aeb3148ef514.tar.gz
Merge "HiRes: Check mixport samplerates" into main
-rw-r--r--services/audiopolicy/managerdefault/AudioPolicyManager.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 315e08defb..d427de45a4 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -2086,7 +2086,14 @@ audio_io_handle_t AudioPolicyManager::selectOutput(const SortedVector<audio_io_h
// sampling rate match
if (samplingRate > SAMPLE_RATE_HZ_DEFAULT) {
- currentMatchCriteria[4] = outputDesc->getSamplingRate();
+ int diff; // avoid unsigned integer overflow.
+ __builtin_sub_overflow(outputDesc->getSamplingRate(), samplingRate, &diff);
+
+ // prefer the closest output sampling rate greater than or equal to target
+ // if none exists, prefer the closest output sampling rate less than target.
+ //
+ // criteria is offset to make non-negative.
+ currentMatchCriteria[4] = diff >= 0 ? -diff + 200'000'000 : diff + 100'000'000;
}
// performance flags match