diff options
author | Paul McLean <pmclean@google.com> | 2015-06-18 08:24:02 -0700 |
---|---|---|
committer | Paul McLean <pmclean@google.com> | 2015-06-19 09:02:49 -0700 |
commit | 9080a4cd8c4e22ddae0350c0c51a20cea1a41016 (patch) | |
tree | 14b1ad41e864a8418d529faa9dbd832aa7426d23 | |
parent | 3fc792fe36b0b9100f74185665221b37f650ff65 (diff) | |
download | frameworks_av-9080a4cd8c4e22ddae0350c0c51a20cea1a41016.zip frameworks_av-9080a4cd8c4e22ddae0350c0c51a20cea1a41016.tar.gz frameworks_av-9080a4cd8c4e22ddae0350c0c51a20cea1a41016.tar.bz2 |
Fixing no rates, chans & encodings on input devices for device enum API.
Filtering digital attributes for non-digital audio devices.
Bug: 21876072
21903975
Change-Id: Ia5c81a8160f4b4ebf5941dd0c5dfb68d01699ca6
-rw-r--r-- | services/audiopolicy/managerdefault/AudioPolicyManager.cpp | 25 | ||||
-rw-r--r-- | services/audiopolicy/managerdefault/AudioPolicyManager.h | 2 |
2 files changed, 20 insertions, 7 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index deebc23..a0de34d 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -213,7 +213,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t device, device); return INVALID_OPERATION; } - if (checkInputsForDevice(device, state, inputs, devDesc->mAddress) != NO_ERROR) { + if (checkInputsForDevice(devDesc, state, inputs, devDesc->mAddress) != NO_ERROR) { return INVALID_OPERATION; } @@ -247,7 +247,7 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t device, param.addInt(String8(AUDIO_PARAMETER_DEVICE_DISCONNECT), device); mpClientInterface->setParameters(AUDIO_IO_HANDLE_NONE, param.toString()); - checkInputsForDevice(device, state, inputs, devDesc->mAddress); + checkInputsForDevice(devDesc, state, inputs, devDesc->mAddress); mAvailableInputDevices.remove(devDesc); // Propagate device availability to Engine @@ -3196,7 +3196,9 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de if (!desc->isDuplicated() && desc->mProfile == profile) { // matching profile: save the sample rates, format and channel masks supported // by the profile in our device descriptor - devDesc->importAudioPort(profile); + if (audio_device_is_digital(device)) { + devDesc->importAudioPort(profile); + } break; } } @@ -3359,7 +3361,10 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de profile_index--; } else { outputs.add(output); - devDesc->importAudioPort(profile); + // Load digital format info only for digital devices + if (audio_device_is_digital(device)) { + devDesc->importAudioPort(profile); + } if (device_distinguishes_on_address(device)) { ALOGV("checkOutputsForDevice(): setOutputDevice(dev=0x%x, addr=%s)", @@ -3422,11 +3427,13 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp<DeviceDescriptor> de return NO_ERROR; } -status_t AudioPolicyManager::checkInputsForDevice(audio_devices_t device, +status_t AudioPolicyManager::checkInputsForDevice(const sp<DeviceDescriptor> devDesc, audio_policy_dev_state_t state, SortedVector<audio_io_handle_t>& inputs, const String8 address) { + audio_devices_t device = devDesc->type(); + sp<AudioInputDescriptor> desc; if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) { // first list already open inputs that can be routed to this device @@ -3477,6 +3484,9 @@ status_t AudioPolicyManager::checkInputsForDevice(audio_devices_t device, for (input_index = 0; input_index < mInputs.size(); input_index++) { desc = mInputs.valueAt(input_index); if (desc->mProfile == profile) { + if (audio_device_is_digital(device)) { + devDesc->importAudioPort(profile); + } break; } } @@ -3562,6 +3572,9 @@ status_t AudioPolicyManager::checkInputsForDevice(audio_devices_t device, profile_index--; } else { inputs.add(input); + if (audio_device_is_digital(device)) { + devDesc->importAudioPort(profile); + } ALOGV("checkInputsForDevice(): adding input %d", input); } } // end scan profiles @@ -3591,7 +3604,7 @@ status_t AudioPolicyManager::checkInputsForDevice(audio_devices_t device, profile_index < mHwModules[module_index]->mInputProfiles.size(); profile_index++) { sp<IOProfile> profile = mHwModules[module_index]->mInputProfiles[profile_index]; - if (profile->mSupportedDevices.types() & device & ~AUDIO_DEVICE_BIT_IN) { + if (profile->mSupportedDevices.types() & (device & ~AUDIO_DEVICE_BIT_IN)) { ALOGV("checkInputsForDevice(): clearing direct input profile %zu on module %zu", profile_index, module_index); if (profile->mSamplingRates[0] == 0) { diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h index f9d1198..cf64154 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.h +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h @@ -456,7 +456,7 @@ protected: SortedVector<audio_io_handle_t>& outputs, const String8 address); - status_t checkInputsForDevice(audio_devices_t device, + status_t checkInputsForDevice(const sp<DeviceDescriptor> devDesc, audio_policy_dev_state_t state, SortedVector<audio_io_handle_t>& inputs, const String8 address); |