summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2015-10-15 22:03:29 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-10-15 22:03:29 +0000
commit0eb5a2706de25728f7ad2fd8febf960ca3c5e42d (patch)
tree7ed075b3d505b5d25869c7d65dc1ac097b7530b2 /services
parentceb10ea795d92d889201cd40f5ac6290edf4ded7 (diff)
parentc0a889f766953b657a5e997bc1362661806d3a19 (diff)
downloadframeworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.zip
frameworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.tar.gz
frameworks_av-0eb5a2706de25728f7ad2fd8febf960ca3c5e42d.tar.bz2
Merge "audio policy: fix transition from VoIP to voice call on USB" into mnc-dr-dev
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/managerdefault/AudioPolicyManager.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index aa4486d..5ff1c0b 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -402,6 +402,20 @@ void AudioPolicyManager::updateCallRouting(audio_devices_t rxDevice, int delayMs
patch.num_sources = 2;
}
+ // terminate active capture if on the same HW module as the call TX source device
+ // FIXME: would be better to refine to only inputs whose profile connects to the
+ // call TX device but this information is not in the audio patch and logic here must be
+ // symmetric to the one in startInput()
+ audio_io_handle_t activeInput = mInputs.getActiveInput();
+ if (activeInput != 0) {
+ sp<AudioInputDescriptor> activeDesc = mInputs.valueFor(activeInput);
+ if (activeDesc->getModuleHandle() == txSourceDeviceDesc->getModuleHandle()) {
+ audio_session_t activeSession = activeDesc->mSessions.itemAt(0);
+ stopInput(activeInput, activeSession);
+ releaseInput(activeInput, activeSession);
+ }
+ }
+
afPatchHandle = AUDIO_PATCH_HANDLE_NONE;
status = mpClientInterface->createAudioPatch(&patch, &afPatchHandle, 0);
ALOGW_IF(status != NO_ERROR, "setPhoneState() error %d creating TX audio patch",
@@ -1505,6 +1519,15 @@ status_t AudioPolicyManager::startInput(audio_io_handle_t input,
return INVALID_OPERATION;
}
}
+
+ // Do not allow capture if an active voice call is using a software patch and
+ // the call TX source device is on the same HW module.
+ // FIXME: would be better to refine to only inputs whose profile connects to the
+ // call TX device but this information is not in the audio patch
+ if (mCallTxPatch != 0 &&
+ inputDesc->getModuleHandle() == mCallTxPatch->mPatch.sources[0].ext.device.hw_module) {
+ return INVALID_OPERATION;
+ }
}
// Routing?