summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorJungshik Jang <jayjang@google.com>2014-06-26 17:23:40 +0900
committerJungshik Jang <jayjang@google.com>2014-07-02 13:54:57 +0900
commit839e4f33906b650140b578d42d6a51300f26703c (patch)
treef49bae1877e05efb48a7f30ab373045011098c9c /services
parent8d0bc4a8ea2a5d0d6aba036f15b185d60e18778f (diff)
downloadframeworks_av-839e4f33906b650140b578d42d6a51300f26703c.zip
frameworks_av-839e4f33906b650140b578d42d6a51300f26703c.tar.gz
frameworks_av-839e4f33906b650140b578d42d6a51300f26703c.tar.bz2
Add force usage and category for System Audio Control.
System Audio Control in HDMI-CEC delegate audio control to audio receiver. When system audio control is selected in audio settings as audio output it should select one of ARC, SPDIF, and LINE as audio output. Whenever user select System Audio as audio output, audio setting should call setForceUse(AUDIO_POLICY_FORCE_FOR_SYSTEM_AUDIO, AUDIO_POLICY_FORCE_XXX); and if other output is selected it should call setForceUse(AUDIO_POLICY_FORCE_FOR_SYSTEM_AUDIO, AUDIO_POLICY_FORCE_NONE); Change-Id: I1c237ee9291a4e0acf01a86aff3176edce5c14e0
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyManager.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp
index 4fcf43b..95179b7 100644
--- a/services/audiopolicy/AudioPolicyManager.cpp
+++ b/services/audiopolicy/AudioPolicyManager.cpp
@@ -516,7 +516,10 @@ void AudioPolicyManager::setForceUse(audio_policy_force_use_t usage,
config != AUDIO_POLICY_FORCE_WIRED_ACCESSORY &&
config != AUDIO_POLICY_FORCE_ANALOG_DOCK &&
config != AUDIO_POLICY_FORCE_DIGITAL_DOCK && config != AUDIO_POLICY_FORCE_NONE &&
- config != AUDIO_POLICY_FORCE_NO_BT_A2DP) {
+ config != AUDIO_POLICY_FORCE_NO_BT_A2DP &&
+ config != AUDIO_POLICY_FORCE_SYSTEM_AUDIO_HDMI_ARC &&
+ config != AUDIO_POLICY_FORCE_SYSTEM_AUDIO_SPDIF &&
+ config != AUDIO_POLICY_FORCE_SYSTEM_AUDIO_LINE) {
ALOGW("setForceUse() invalid config %d for FOR_MEDIA", config);
return;
}
@@ -3536,10 +3539,32 @@ audio_devices_t AudioPolicyManager::getDeviceForStrategy(routing_strategy strate
if (device2 == AUDIO_DEVICE_NONE) {
device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_SPEAKER;
}
+ int device3 = AUDIO_DEVICE_NONE;
+ if (strategy == STRATEGY_MEDIA) {
+ // Hdmi system audio should use manually configured device type.
+ if (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA]
+ == AUDIO_POLICY_FORCE_SYSTEM_AUDIO_HDMI_ARC) {
+ device3 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_HDMI_ARC;
+ } else if (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA]
+ == AUDIO_POLICY_FORCE_SYSTEM_AUDIO_SPDIF) {
+ device3 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_SPDIF;
+ } else if (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA]
+ == AUDIO_POLICY_FORCE_SYSTEM_AUDIO_LINE) {
+ device3 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_LINE;
+ }
+ }
+ // Merge hdmi cec system audio and existing device for media. If system audio is on,
+ // internal speaker will be muted but others are not.
+ device2 |= device3;
// device is DEVICE_OUT_SPEAKER if we come from case STRATEGY_SONIFICATION or
// STRATEGY_ENFORCED_AUDIBLE, AUDIO_DEVICE_NONE otherwise
device |= device2;
+
+ // If system audio mode is on and proper audio out is set, remove speaker from device.
+ if (device3 != AUDIO_DEVICE_NONE) {
+ device &= ~AUDIO_DEVICE_OUT_SPEAKER;
+ }
if (device) break;
device = mDefaultOutputDevice->mDeviceType;
if (device == AUDIO_DEVICE_NONE) {