因为蓝牙通路与其他设备不同(多了一个蓝牙设备),因此播放的流程也与其他设备略有不同。
蓝牙设备的连接
从setDeviceConnectionState开始,AudioPolicyManager先注册Device后,再去打开设备对应的output,如果是duplicating类型的话,还要建一个DuplicateOutput,关联该output与mPrimaryOutput
//--->frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
status_t AudioPolicyManager::setDeviceConnectionState(audio_devices_t device,
audio_policy_dev_state_t state,
const char *device_address,
const char *device_name)
{
return setDeviceConnectionStateInt(device, state, device_address, device_name);
}
status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t device,
audio_policy_dev_state_t state,
const char *device_address,
const char *device_name)
{
...
sp<DeviceDescriptor> devDesc = mHwModules.getDeviceDescriptor(device, device_address, device_name);
...
// handle output devices
...
SortedVector <audio_io_handle_t> outputs;
ssize_t index = mAvailableOutputDevices.indexOf(devDesc);
mPreviousOutputs = mOutputs;
...(注册设备)
if (index >= 0) {
sp<HwModule> mo