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

Commit 33b3430a authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 11916023 from ff1e5ee6 to 24Q3-release

Change-Id: Ic4f885aef30218229c566da1d2f827deeb322c69
parents c91be318 ff1e5ee6
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -39,3 +39,12 @@ flag {
        "This feature helps reduce audio glitching caused by low priority blocking threads."
    bug: "209491695"
}

flag {
    name: "fix_input_sharing_logic"
    namespace: "media_audio"
    description:
        "Fix the audio policy logic that decides to reuse or close "
        "input streams when resources are exhausted"
    bug: "338446410"
}
+8 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@

#include <aaudio/AAudio.h>
#include <aaudio/AAudioTesting.h>
#include <android/media/audio/common/AudioMMapPolicy.h>
#include <android/media/audio/common/AudioMMapPolicyInfo.h>
#include <android/media/audio/common/AudioMMapPolicyType.h>
#include <media/AudioSystem.h>
@@ -40,11 +41,14 @@

using namespace aaudio;

using android::media::audio::common::AudioMMapPolicy;
using android::media::audio::common::AudioMMapPolicyInfo;
using android::media::audio::common::AudioMMapPolicyType;

#define AAUDIO_MMAP_POLICY_DEFAULT             AAUDIO_POLICY_NEVER
#define AAUDIO_MMAP_EXCLUSIVE_POLICY_DEFAULT   AAUDIO_POLICY_NEVER
#define AAUDIO_MMAP_POLICY_DEFAULT_AIDL        AudioMMapPolicy::NEVER
#define AAUDIO_MMAP_EXCLUSIVE_POLICY_DEFAULT_AIDL AudioMMapPolicy::NEVER

// These values are for a pre-check before we ask the lower level service to open a stream.
// So they are just outside the maximum conceivable range of value,
@@ -116,7 +120,8 @@ aaudio_result_t AudioStreamBuilder::build(AudioStream** streamPtr) {
    aaudio_policy_t mmapPolicy = AudioGlobal_getMMapPolicy();
    if (android::AudioSystem::getMmapPolicyInfo(
            AudioMMapPolicyType::DEFAULT, &policyInfos) == NO_ERROR) {
        aaudio_policy_t systemMmapPolicy = AAudio_getAAudioPolicy(policyInfos);
        aaudio_policy_t systemMmapPolicy = AAudio_getAAudioPolicy(
                policyInfos, AAUDIO_MMAP_POLICY_DEFAULT_AIDL);
        if (mmapPolicy == AAUDIO_POLICY_ALWAYS && systemMmapPolicy == AAUDIO_POLICY_NEVER) {
            // No need to try as AAudioService is not created and the client only wants MMAP path.
            return AAUDIO_ERROR_NO_SERVICE;
@@ -145,7 +150,8 @@ aaudio_result_t AudioStreamBuilder::build(AudioStream** streamPtr) {
    aaudio_policy_t mmapExclusivePolicy = AAUDIO_UNSPECIFIED;
    if (android::AudioSystem::getMmapPolicyInfo(
            AudioMMapPolicyType::EXCLUSIVE, &policyInfos) == NO_ERROR) {
        mmapExclusivePolicy = AAudio_getAAudioPolicy(policyInfos);
        mmapExclusivePolicy = AAudio_getAAudioPolicy(
                policyInfos, AAUDIO_MMAP_EXCLUSIVE_POLICY_DEFAULT_AIDL);
    }
    if (mmapExclusivePolicy == AAUDIO_UNSPECIFIED) {
        mmapExclusivePolicy = AAUDIO_MMAP_EXCLUSIVE_POLICY_DEFAULT;
+9 −5
Original line number Diff line number Diff line
@@ -680,12 +680,16 @@ aaudio_policy_t aidl2legacy_aaudio_policy(AudioMMapPolicy aidl) {

} // namespace

aaudio_policy_t AAudio_getAAudioPolicy(const std::vector<AudioMMapPolicyInfo>& policyInfos) {
    if (policyInfos.empty()) return AAUDIO_POLICY_AUTO;
    for (size_t i = 1; i < policyInfos.size(); ++i) {
        if (policyInfos.at(i).mmapPolicy != policyInfos.at(0).mmapPolicy) {
aaudio_policy_t AAudio_getAAudioPolicy(const std::vector<AudioMMapPolicyInfo>& policyInfos,
                                       AudioMMapPolicy defaultPolicy) {
    AudioMMapPolicy policy = defaultPolicy;
    for (const auto& policyInfo : policyInfos) {
        if (policyInfo.mmapPolicy == AudioMMapPolicy::NEVER) {
            policy = policyInfo.mmapPolicy;
        } else if (policyInfo.mmapPolicy == AudioMMapPolicy::AUTO ||
                   policyInfo.mmapPolicy == AudioMMapPolicy::ALWAYS) {
            return AAUDIO_POLICY_AUTO;
        }
    }
    return aidl2legacy_aaudio_policy(policyInfos.at(0).mmapPolicy);
    return aidl2legacy_aaudio_policy(policy);
}
+13 −3
Original line number Diff line number Diff line
@@ -348,9 +348,19 @@ enum {
    AAUDIO_CHANNEL_INDEX_MASK_24 = AAUDIO_CHANNEL_BIT_INDEX | (1 << 24) - 1,
};

// The aaudio policy will be ALWAYS, NEVER, UNSPECIFIED only when all policy info are
// ALWAYS, NEVER or UNSPECIFIED. Otherwise, the aaudio policy will be AUTO.
/**
 * Returns the aaudio mmap policy based on the vector of mmap policy info. The rule as
 * 1. Returns AUTO if any of the policy is AUTO or ALWAYS
 * 2. Returns NEVER if all of the policies are NEVER or UNSPECIFIED
 * 3. Returns default policy if all of the policies are UNSPECIFIED
 *
 * @param policyInfos
 * @param defaultPolicy
 * @return
 */
aaudio_policy_t AAudio_getAAudioPolicy(
        const std::vector<android::media::audio::common::AudioMMapPolicyInfo>& policyInfos);
        const std::vector<android::media::audio::common::AudioMMapPolicyInfo>& policyInfos,
        android::media::audio::common::AudioMMapPolicy defaultPolicy =
                android::media::audio::common::AudioMMapPolicy::NEVER);

#endif //UTILITY_AAUDIO_UTILITIES_H
+3 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ cc_library {

    srcs: [
        "NativePermissionController.cpp",
        "ValidatedAttributionSourceState.cpp",
    ],
    export_include_dirs: [
        "include",
@@ -22,6 +23,7 @@ cc_library {
    ],
    static_libs: [
        "audio-permission-aidl-cpp",
        "framework-permission-aidl-cpp",
    ],
    shared_libs: [
        "libbase",
@@ -94,6 +96,7 @@ cc_test {
    ],
    srcs: [
        "tests/NativePermissionControllerTest.cpp",
        "tests/ValidatedAttributionSourceStateTest.cpp",
    ],
    test_options: {
        unit_test: true,
Loading