Merge "policy_hal: Update policy hal with latest AOSP refresh."
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index de698a5..25d5db9 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -976,7 +976,6 @@
{
ALOGD("setForceUse() usage %d, config %d, mPhoneState %d", usage, config, mEngine->getPhoneState());
- audio_policy_forced_cfg_t originalConfig = mEngine->getForceUse(usage);
if (mEngine->setForceUse(usage, config) != NO_ERROR) {
ALOGW("setForceUse() could not set force cfg %d for usage %d", config, usage);
return;
@@ -990,32 +989,6 @@
checkOutputForAllStrategies();
updateDevicesAndOutputs();
- // Did surround forced use change?
- if ((usage == AUDIO_POLICY_FORCE_FOR_ENCODED_SURROUND)
- && (originalConfig != config)) {
- const char *device_address = "";
- // Is it currently connected? If so then cycle the connection
- // so that the supported surround formats will be reloaded.
- //
- // FIXME As S/PDIF is not a removable device we have to handle this differently.
- // Probably by updating the device descriptor directly and manually
- // tearing down active playback on S/PDIF
- if (getDeviceConnectionState(AUDIO_DEVICE_OUT_HDMI, device_address) ==
- AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
- // Disconnect and reconnect output devices so that the surround
- // encodings can be updated.
- const char *device_name = "";
- // disconnect
- setDeviceConnectionStateInt(AUDIO_DEVICE_OUT_HDMI,
- AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE,
- device_address, device_name);
- // reconnect
- setDeviceConnectionStateInt(AUDIO_DEVICE_OUT_HDMI,
- AUDIO_POLICY_DEVICE_STATE_AVAILABLE,
- device_address, device_name);
- }
- }
-
if (mEngine->getPhoneState() == AUDIO_MODE_IN_CALL && hasPrimaryOutput()) {
audio_devices_t newDevice = getNewOutputDevice(mPrimaryOutput, true /*fromCache*/);
updateCallRouting(newDevice);
@@ -1810,6 +1783,13 @@
}
non_direct_output:
+
+ // A request for HW A/V sync cannot fallback to a mixed output because time
+ // stamps are embedded in audio data
+ if ((flags & AUDIO_OUTPUT_FLAG_HW_AV_SYNC) != 0) {
+ return AUDIO_IO_HANDLE_NONE;
+ }
+
// ignoring channel mask due to downmix capability in mixer
// open a non direct output
@@ -2023,11 +2003,11 @@
if (!inputDesc->isActive() || mInputRoutes.hasRouteChanged(session)) {
// if input maps to a dynamic policy with an activity listener, notify of state change
- /*if ((inputDesc->mPolicyMix != NULL)
+ if ((inputDesc->mPolicyMix != NULL)
&& ((inputDesc->mPolicyMix->mCbFlags & AudioMix::kCbFlagNotifyActivity) != 0)) {
- mpClientInterface->onDynamicPolicyMixStateUpdate(inputDesc->mPolicyMix->mRegistrationId,
+ mpClientInterface->onDynamicPolicyMixStateUpdate(inputDesc->mPolicyMix->mDeviceAddress,
MIX_STATE_MIXING);
- }*/
+ }
if (mInputs.activeInputsCount() == 0) {
SoundTrigger::setCaptureState(true);
@@ -2041,9 +2021,9 @@
String8 address = String8("");
if (inputDesc->mPolicyMix == NULL) {
address = String8("0");
- } /*else if (inputDesc->mPolicyMix->mMixType == MIX_TYPE_PLAYERS) {
- address = inputDesc->mPolicyMix->mRegistrationId;
- }*/
+ } else if (inputDesc->mPolicyMix->mMixType == MIX_TYPE_PLAYERS) {
+ address = inputDesc->mPolicyMix->mDeviceAddress;
+ }
if (address != "") {
setDeviceConnectionStateInt(AUDIO_DEVICE_OUT_REMOTE_SUBMIX,
AUDIO_POLICY_DEVICE_STATE_AVAILABLE,