summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvivek mehta <mvivek@codeaurora.org>2015-11-25 13:28:55 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2015-12-04 20:46:49 -0800
commit5df33b292fc966596489a8cee6fa56e8d57464b0 (patch)
tree16c5deb4f2ea6f86647bb8ff6dfc48f4c6ab4d36
parent6d4ef37017f9806026713d5451f8b550c4129a0b (diff)
downloadhardware_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.cpp24
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);