summaryrefslogtreecommitdiffstats
path: root/services/audiopolicy
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-08-01 14:48:35 -0700
committerEric Laurent <elaurent@google.com>2014-08-06 00:38:23 +0000
commit93c3d41bdb15e39dac0faea9c5b60f1637cd477c (patch)
treea0d739ad732f10bc9d4548923c78c590841b14da /services/audiopolicy
parent92ce4715315bddd158c7d4028556632f0547e3b9 (diff)
downloadframeworks_av-93c3d41bdb15e39dac0faea9c5b60f1637cd477c.zip
frameworks_av-93c3d41bdb15e39dac0faea9c5b60f1637cd477c.tar.gz
frameworks_av-93c3d41bdb15e39dac0faea9c5b60f1637cd477c.tar.bz2
AudioSystem: add API to query audio HW sync source
Add a method to query from the audio HAL the HW sync source used for a given audio session. Modify audio policy to select a direct output with HW sync when requested. Bug: 16132368. Change-Id: I03038f9188f2d389f8a5fd76a671854013a4513e
Diffstat (limited to 'services/audiopolicy')
-rw-r--r--services/audiopolicy/AudioPolicyManager.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index c519593..c00541c 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -118,6 +118,7 @@ const StringToEnum sFlagNameToEnumTable[] = {
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
+ STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),
};
const StringToEnum sFormatNameToEnumTable[] = {
@@ -671,12 +672,17 @@ audio_io_handle_t AudioPolicyManager::getOutputForAttr(const audio_attributes_t
ALOGE("getOutputForAttr() called with NULL audio attributes");
return 0;
}
- ALOGV("getOutputForAttr() usage=%d, content=%d, tag=%s",
- attr->usage, attr->content_type, attr->tags);
+ ALOGV("getOutputForAttr() usage=%d, content=%d, tag=%s flags=%08x",
+ attr->usage, attr->content_type, attr->tags, attr->flags);
// TODO this is where filtering for custom policies (rerouting, dynamic sources) will go
routing_strategy strategy = (routing_strategy) getStrategyForAttr(attr);
audio_devices_t device = getDeviceForStrategy(strategy, false /*fromCache*/);
+
+ if ((attr->flags & AUDIO_FLAG_HW_AV_SYNC) != 0) {
+ flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_HW_AV_SYNC);
+ }
+
ALOGV("getOutputForAttr() device %d, samplingRate %d, format %x, channelMask %x, flags %x",
device, samplingRate, format, channelMask, flags);
@@ -746,6 +752,9 @@ audio_io_handle_t AudioPolicyManager::getOutputForDevice(
if ((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) != 0) {
flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_DIRECT);
}
+ if ((flags & AUDIO_OUTPUT_FLAG_HW_AV_SYNC) != 0) {
+ flags = (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_DIRECT);
+ }
// 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