Loading media/libaaudio/src/core/AudioStreamBuilder.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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; Loading media/libaaudio/src/utility/AAudioUtilities.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -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); } media/libaaudio/src/utility/AAudioUtilities.h +13 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
media/libaaudio/src/core/AudioStreamBuilder.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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; Loading
media/libaaudio/src/utility/AAudioUtilities.cpp +9 −5 Original line number Diff line number Diff line Loading @@ -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); }
media/libaaudio/src/utility/AAudioUtilities.h +13 −3 Original line number Diff line number Diff line Loading @@ -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