diff options
author | vivek mehta <mvivek@codeaurora.org> | 2015-11-25 13:28:55 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2015-12-04 20:46:49 -0800 |
commit | 5df33b292fc966596489a8cee6fa56e8d57464b0 (patch) | |
tree | 16c5deb4f2ea6f86647bb8ff6dfc48f4c6ab4d36 | |
parent | 6d4ef37017f9806026713d5451f8b550c4129a0b (diff) | |
download | hardware_qcom_audio-5df33b292fc966596489a8cee6fa56e8d57464b0.tar.gz hardware_qcom_audio-5df33b292fc966596489a8cee6fa56e8d57464b0.tar.bz2 hardware_qcom_audio-5df33b292fc966596489a8cee6fa56e8d57464b0.zip |
libaudiopolicymanager: DirectPCM: fix 44.1 clip playing noisy issue
- adding both deepbuffer and direct pcm is causing issue where wrong
config is set to ADM
- add deepbuffer flag when fail to get direct output if deepbuffer
was forced
Change-Id: I3bd65002c7a8895d461df257111faf22101cbe30
-rw-r--r-- | policy_hal/AudioPolicyManager.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp index c32fafb6..927aeca1 100644 --- a/policy_hal/AudioPolicyManager.cpp +++ b/policy_hal/AudioPolicyManager.cpp @@ -1518,18 +1518,18 @@ audio_io_handle_t AudioPolicyManagerCustom::getOutputForDevice( } else if (/* stream == AUDIO_STREAM_MUSIC && */ flags == AUDIO_OUTPUT_FLAG_NONE && property_get_bool("audio.deep_buffer.media", false /* default_value */)) { - flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DEEP_BUFFER); - forced_deep = true; + forced_deep = true; } if (stream == AUDIO_STREAM_TTS) { flags = AUDIO_OUTPUT_FLAG_TTS; } // Do offload magic here - if (((flags == AUDIO_OUTPUT_FLAG_NONE) || forced_deep) && - (stream == AUDIO_STREAM_MUSIC) && (offloadInfo != NULL) && + if ((flags == AUDIO_OUTPUT_FLAG_NONE) && + (stream == AUDIO_STREAM_MUSIC) && + (offloadInfo != NULL) && ((offloadInfo->usage == AUDIO_USAGE_MEDIA) || (offloadInfo->usage == AUDIO_USAGE_GAME))) { - flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_DIRECT); + flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DIRECT_PCM); ALOGD("AudioCustomHAL --> Force Direct Flag .. flag (0x%x)", flags); } @@ -1537,7 +1537,7 @@ audio_io_handle_t AudioPolicyManagerCustom::getOutputForDevice( // skip direct output selection if the request can obviously be attached to a mixed output // and not explicitly requested - if (((flags & AUDIO_OUTPUT_FLAG_DIRECT) == 0) && + if (((flags & (AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_DIRECT_PCM)) == 0) && audio_is_linear_pcm(format) && samplingRate <= MAX_MIXER_SAMPLING_RATE && audio_channel_count_from_out_mask(channelMask) <= 2) { goto non_direct_output; @@ -1560,6 +1560,14 @@ audio_io_handle_t AudioPolicyManagerCustom::getOutputForDevice( } if (profile != 0) { + + if (!(flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) && + (profile->mFlags & AUDIO_OUTPUT_FLAG_DIRECT_PCM)) { + ALOGI("got Direct_PCM without requesting ... reject "); + profile = NULL; + goto non_direct_output; + } + sp<SwAudioOutputDescriptor> outputDesc = NULL; for (size_t i = 0; i < mOutputs.size(); i++) { @@ -1676,6 +1684,10 @@ non_direct_output: // for non direct outputs, only PCM is supported if (audio_is_linear_pcm(format)) { + if (forced_deep) { + flags = (audio_output_flags_t)(AUDIO_OUTPUT_FLAG_DEEP_BUFFER); + ALOGI("setting force DEEP buffer now "); + } // get which output is suitable for the specified stream. The actual // routing change will happen when startOutput() will be called SortedVector<audio_io_handle_t> outputs = getOutputsForDevice(device, mOutputs); |