diff options
Diffstat (limited to 'services')
-rw-r--r-- | services/audiopolicy/AudioPolicyInterfaceImpl.cpp | 7 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp | 7 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyManager.cpp | 12 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyService.cpp | 2 | ||||
-rw-r--r-- | services/audiopolicy/AudioPolicyService.h | 3 |
5 files changed, 29 insertions, 2 deletions
diff --git a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp index 2c51e25..b212ca6 100644 --- a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp @@ -80,9 +80,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state) Mutex::Autolock _l(mLock); mAudioPolicyManager->setPhoneState(state); + mPhoneState = state; return NO_ERROR; } +audio_mode_t AudioPolicyService::getPhoneState() +{ + Mutex::Autolock _l(mLock); + return mPhoneState; +} + status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { diff --git a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp index f20c070..1e40bc3 100644 --- a/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp +++ b/services/audiopolicy/AudioPolicyInterfaceImplLegacy.cpp @@ -84,9 +84,16 @@ status_t AudioPolicyService::setPhoneState(audio_mode_t state) Mutex::Autolock _l(mLock); mpAudioPolicy->set_phone_state(mpAudioPolicy, state); + mPhoneState = state; return NO_ERROR; } +audio_mode_t AudioPolicyService::getPhoneState() +{ + Mutex::Autolock _l(mLock); + return mPhoneState; +} + status_t AudioPolicyService::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp index d51ee8e..d0b990f 100644 --- a/services/audiopolicy/AudioPolicyManager.cpp +++ b/services/audiopolicy/AudioPolicyManager.cpp @@ -927,13 +927,21 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice( flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_DIRECT); } + sp<IOProfile> profile; + + // skip direct output selection if the request can obviously be attached to a mixed output + if (audio_is_linear_pcm(format) && samplingRate <= MAX_MIXER_SAMPLING_RATE && + audio_channel_count_from_out_mask(channelMask) <= 2) { + goto non_direct_output; + } + // Do not allow offloading if one non offloadable effect is enabled. This prevents from // creating an offloaded track and tearing it down immediately after start when audioflinger // detects there is an active non offloadable effect. // FIXME: We should check the audio session here but we do not have it in this context. // This may prevent offloading in rare situations where effects are left active by apps // in the background. - sp<IOProfile> profile; + if (((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) == 0) || !isNonOffloadableEffectEnabled()) { profile = getProfileForDirectOutput(device, @@ -1016,6 +1024,8 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice( return output; } +non_direct_output: + // ignoring channel mask due to downmix capability in mixer // open a non direct output diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp index 50bb8c7..647cda4 100644 --- a/services/audiopolicy/AudioPolicyService.cpp +++ b/services/audiopolicy/AudioPolicyService.cpp @@ -59,7 +59,7 @@ namespace { AudioPolicyService::AudioPolicyService() : BnAudioPolicyService(), mpAudioPolicyDev(NULL), mpAudioPolicy(NULL), - mAudioPolicyManager(NULL), mAudioPolicyClient(NULL) + mAudioPolicyManager(NULL), mAudioPolicyClient(NULL), mPhoneState(AUDIO_MODE_INVALID) { char value[PROPERTY_VALUE_MAX]; const struct hw_module_t *module; diff --git a/services/audiopolicy/AudioPolicyService.h b/services/audiopolicy/AudioPolicyService.h index 0044e7a..2cea40b 100644 --- a/services/audiopolicy/AudioPolicyService.h +++ b/services/audiopolicy/AudioPolicyService.h @@ -174,6 +174,8 @@ public: virtual status_t releaseSoundTriggerSession(audio_session_t session); + virtual audio_mode_t getPhoneState(); + status_t doStopOutput(audio_io_handle_t output, audio_stream_type_t stream, int session = 0); @@ -493,6 +495,7 @@ private: // Manage all effects configured in audio_effects.conf sp<AudioPolicyEffects> mAudioPolicyEffects; + audio_mode_t mPhoneState; }; }; // namespace android |