Loading services/audiopolicy/AudioPolicyManager.cpp +30 −12 Original line number Original line Diff line number Diff line Loading @@ -1691,10 +1691,16 @@ status_t AudioPolicyManager::listAudioPorts(audio_port_role_t role, *num_ports += mInputs.size(); *num_ports += mInputs.size(); } } if (role == AUDIO_PORT_ROLE_SOURCE || role == AUDIO_PORT_ROLE_NONE) { if (role == AUDIO_PORT_ROLE_SOURCE || role == AUDIO_PORT_ROLE_NONE) { for (size_t i = 0; i < mOutputs.size() && portsWritten < portsMax; i++) { size_t numOutputs = 0; for (size_t i = 0; i < mOutputs.size(); i++) { if (!mOutputs[i]->isDuplicated()) { numOutputs++; if (portsWritten < portsMax) { mOutputs[i]->toAudioPort(&ports[portsWritten++]); mOutputs[i]->toAudioPort(&ports[portsWritten++]); } } *num_ports += mOutputs.size(); } } *num_ports += numOutputs; } } } } *generation = curAudioPortGeneration(); *generation = curAudioPortGeneration(); Loading Loading @@ -1826,6 +1832,8 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, ALOGV("createAudioPatch() output not found for id %d", patch->sources[0].id); ALOGV("createAudioPatch() output not found for id %d", patch->sources[0].id); return BAD_VALUE; return BAD_VALUE; } } ALOG_ASSERT(!outputDesc->isDuplicated(),"duplicated output %d in source in ports", outputDesc->mIoHandle); if (patchDesc != 0) { if (patchDesc != 0) { if (patchDesc->mPatch.sources[0].id != patch->sources[0].id) { if (patchDesc->mPatch.sources[0].id != patch->sources[0].id) { ALOGV("createAudioPatch() source id differs for patch current id %d new id %d", ALOGV("createAudioPatch() source id differs for patch current id %d new id %d", Loading @@ -1840,7 +1848,7 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, return BAD_VALUE; return BAD_VALUE; } } if (!outputDesc->mProfile->isCompatibleProfile(devDesc->mType, if (!outputDesc->mProfile->isCompatibleProfile(devDesc->mDeviceType, patch->sources[0].sample_rate, patch->sources[0].sample_rate, patch->sources[0].format, patch->sources[0].format, patch->sources[0].channel_mask, patch->sources[0].channel_mask, Loading @@ -1849,9 +1857,9 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, } } // TODO: reconfigure output format and channels here // TODO: reconfigure output format and channels here ALOGV("createAudioPatch() setting device %08x on output %d", ALOGV("createAudioPatch() setting device %08x on output %d", devDesc->mType, outputDesc->mIoHandle); devDesc->mDeviceType, outputDesc->mIoHandle); setOutputDevice(outputDesc->mIoHandle, setOutputDevice(outputDesc->mIoHandle, devDesc->mType, devDesc->mDeviceType, true, true, 0, 0, handle); handle); Loading Loading @@ -1885,7 +1893,7 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, return BAD_VALUE; return BAD_VALUE; } } if (!inputDesc->mProfile->isCompatibleProfile(devDesc->mType, if (!inputDesc->mProfile->isCompatibleProfile(devDesc->mDeviceType, patch->sinks[0].sample_rate, patch->sinks[0].sample_rate, patch->sinks[0].format, patch->sinks[0].format, patch->sinks[0].channel_mask, patch->sinks[0].channel_mask, Loading @@ -1894,9 +1902,9 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, } } // TODO: reconfigure output format and channels here // TODO: reconfigure output format and channels here ALOGV("createAudioPatch() setting device %08x on output %d", ALOGV("createAudioPatch() setting device %08x on output %d", devDesc->mType, inputDesc->mIoHandle); devDesc->mDeviceType, inputDesc->mIoHandle); setInputDevice(inputDesc->mIoHandle, setInputDevice(inputDesc->mIoHandle, devDesc->mType, devDesc->mDeviceType, true, true, handle); handle); index = mAudioPatches.indexOfKey(*handle); index = mAudioPatches.indexOfKey(*handle); Loading Loading @@ -2084,6 +2092,9 @@ status_t AudioPolicyManager::setAudioPortConfig(const struct audio_port_config * if (outputDesc == NULL) { if (outputDesc == NULL) { return BAD_VALUE; return BAD_VALUE; } } ALOG_ASSERT(!outputDesc->isDuplicated(), "setAudioPortConfig() called on duplicated output %d", outputDesc->mIoHandle); audioPortConfig = outputDesc; audioPortConfig = outputDesc; } else if (config->role == AUDIO_PORT_ROLE_SINK) { } else if (config->role == AUDIO_PORT_ROLE_SINK) { sp<AudioInputDescriptor> inputDesc = getInputFromId(config->id); sp<AudioInputDescriptor> inputDesc = getInputFromId(config->id); Loading Loading @@ -4583,10 +4594,12 @@ void AudioPolicyManager::AudioOutputDescriptor::toAudioPortConfig( struct audio_port_config *dstConfig, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const const struct audio_port_config *srcConfig) const { { ALOG_ASSERT(!isDuplicated(), "toAudioPortConfig() called on duplicated output %d", mIoHandle); dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading @@ -4601,6 +4614,7 @@ void AudioPolicyManager::AudioOutputDescriptor::toAudioPortConfig( void AudioPolicyManager::AudioOutputDescriptor::toAudioPort( void AudioPolicyManager::AudioOutputDescriptor::toAudioPort( struct audio_port *port) const struct audio_port *port) const { { ALOG_ASSERT(!isDuplicated(), "toAudioPort() called on duplicated output %d", mIoHandle); mProfile->toAudioPort(port); mProfile->toAudioPort(port); port->id = mId; port->id = mId; toAudioPortConfig(&port->active_config); toAudioPortConfig(&port->active_config); Loading Loading @@ -4666,10 +4680,12 @@ void AudioPolicyManager::AudioInputDescriptor::toAudioPortConfig( struct audio_port_config *dstConfig, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const const struct audio_port_config *srcConfig) const { { ALOG_ASSERT(mProfile != 0, "toAudioPortConfig() called on input with null profile %d", mIoHandle); dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading @@ -4685,6 +4701,8 @@ void AudioPolicyManager::AudioInputDescriptor::toAudioPortConfig( void AudioPolicyManager::AudioInputDescriptor::toAudioPort( void AudioPolicyManager::AudioInputDescriptor::toAudioPort( struct audio_port *port) const struct audio_port *port) const { { ALOG_ASSERT(mProfile != 0, "toAudioPort() called on input with null profile %d", mIoHandle); mProfile->toAudioPort(port); mProfile->toAudioPort(port); port->id = mId; port->id = mId; toAudioPortConfig(&port->active_config); toAudioPortConfig(&port->active_config); Loading Loading @@ -5735,7 +5753,7 @@ void AudioPolicyManager::DeviceDescriptor::toAudioPortConfig( { { dstConfig->config_mask = AUDIO_PORT_CONFIG_CHANNEL_MASK|AUDIO_PORT_CONFIG_GAIN; dstConfig->config_mask = AUDIO_PORT_CONFIG_CHANNEL_MASK|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading Loading
services/audiopolicy/AudioPolicyManager.cpp +30 −12 Original line number Original line Diff line number Diff line Loading @@ -1691,10 +1691,16 @@ status_t AudioPolicyManager::listAudioPorts(audio_port_role_t role, *num_ports += mInputs.size(); *num_ports += mInputs.size(); } } if (role == AUDIO_PORT_ROLE_SOURCE || role == AUDIO_PORT_ROLE_NONE) { if (role == AUDIO_PORT_ROLE_SOURCE || role == AUDIO_PORT_ROLE_NONE) { for (size_t i = 0; i < mOutputs.size() && portsWritten < portsMax; i++) { size_t numOutputs = 0; for (size_t i = 0; i < mOutputs.size(); i++) { if (!mOutputs[i]->isDuplicated()) { numOutputs++; if (portsWritten < portsMax) { mOutputs[i]->toAudioPort(&ports[portsWritten++]); mOutputs[i]->toAudioPort(&ports[portsWritten++]); } } *num_ports += mOutputs.size(); } } *num_ports += numOutputs; } } } } *generation = curAudioPortGeneration(); *generation = curAudioPortGeneration(); Loading Loading @@ -1826,6 +1832,8 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, ALOGV("createAudioPatch() output not found for id %d", patch->sources[0].id); ALOGV("createAudioPatch() output not found for id %d", patch->sources[0].id); return BAD_VALUE; return BAD_VALUE; } } ALOG_ASSERT(!outputDesc->isDuplicated(),"duplicated output %d in source in ports", outputDesc->mIoHandle); if (patchDesc != 0) { if (patchDesc != 0) { if (patchDesc->mPatch.sources[0].id != patch->sources[0].id) { if (patchDesc->mPatch.sources[0].id != patch->sources[0].id) { ALOGV("createAudioPatch() source id differs for patch current id %d new id %d", ALOGV("createAudioPatch() source id differs for patch current id %d new id %d", Loading @@ -1840,7 +1848,7 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, return BAD_VALUE; return BAD_VALUE; } } if (!outputDesc->mProfile->isCompatibleProfile(devDesc->mType, if (!outputDesc->mProfile->isCompatibleProfile(devDesc->mDeviceType, patch->sources[0].sample_rate, patch->sources[0].sample_rate, patch->sources[0].format, patch->sources[0].format, patch->sources[0].channel_mask, patch->sources[0].channel_mask, Loading @@ -1849,9 +1857,9 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, } } // TODO: reconfigure output format and channels here // TODO: reconfigure output format and channels here ALOGV("createAudioPatch() setting device %08x on output %d", ALOGV("createAudioPatch() setting device %08x on output %d", devDesc->mType, outputDesc->mIoHandle); devDesc->mDeviceType, outputDesc->mIoHandle); setOutputDevice(outputDesc->mIoHandle, setOutputDevice(outputDesc->mIoHandle, devDesc->mType, devDesc->mDeviceType, true, true, 0, 0, handle); handle); Loading Loading @@ -1885,7 +1893,7 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, return BAD_VALUE; return BAD_VALUE; } } if (!inputDesc->mProfile->isCompatibleProfile(devDesc->mType, if (!inputDesc->mProfile->isCompatibleProfile(devDesc->mDeviceType, patch->sinks[0].sample_rate, patch->sinks[0].sample_rate, patch->sinks[0].format, patch->sinks[0].format, patch->sinks[0].channel_mask, patch->sinks[0].channel_mask, Loading @@ -1894,9 +1902,9 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, } } // TODO: reconfigure output format and channels here // TODO: reconfigure output format and channels here ALOGV("createAudioPatch() setting device %08x on output %d", ALOGV("createAudioPatch() setting device %08x on output %d", devDesc->mType, inputDesc->mIoHandle); devDesc->mDeviceType, inputDesc->mIoHandle); setInputDevice(inputDesc->mIoHandle, setInputDevice(inputDesc->mIoHandle, devDesc->mType, devDesc->mDeviceType, true, true, handle); handle); index = mAudioPatches.indexOfKey(*handle); index = mAudioPatches.indexOfKey(*handle); Loading Loading @@ -2084,6 +2092,9 @@ status_t AudioPolicyManager::setAudioPortConfig(const struct audio_port_config * if (outputDesc == NULL) { if (outputDesc == NULL) { return BAD_VALUE; return BAD_VALUE; } } ALOG_ASSERT(!outputDesc->isDuplicated(), "setAudioPortConfig() called on duplicated output %d", outputDesc->mIoHandle); audioPortConfig = outputDesc; audioPortConfig = outputDesc; } else if (config->role == AUDIO_PORT_ROLE_SINK) { } else if (config->role == AUDIO_PORT_ROLE_SINK) { sp<AudioInputDescriptor> inputDesc = getInputFromId(config->id); sp<AudioInputDescriptor> inputDesc = getInputFromId(config->id); Loading Loading @@ -4583,10 +4594,12 @@ void AudioPolicyManager::AudioOutputDescriptor::toAudioPortConfig( struct audio_port_config *dstConfig, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const const struct audio_port_config *srcConfig) const { { ALOG_ASSERT(!isDuplicated(), "toAudioPortConfig() called on duplicated output %d", mIoHandle); dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading @@ -4601,6 +4614,7 @@ void AudioPolicyManager::AudioOutputDescriptor::toAudioPortConfig( void AudioPolicyManager::AudioOutputDescriptor::toAudioPort( void AudioPolicyManager::AudioOutputDescriptor::toAudioPort( struct audio_port *port) const struct audio_port *port) const { { ALOG_ASSERT(!isDuplicated(), "toAudioPort() called on duplicated output %d", mIoHandle); mProfile->toAudioPort(port); mProfile->toAudioPort(port); port->id = mId; port->id = mId; toAudioPortConfig(&port->active_config); toAudioPortConfig(&port->active_config); Loading Loading @@ -4666,10 +4680,12 @@ void AudioPolicyManager::AudioInputDescriptor::toAudioPortConfig( struct audio_port_config *dstConfig, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const const struct audio_port_config *srcConfig) const { { ALOG_ASSERT(mProfile != 0, "toAudioPortConfig() called on input with null profile %d", mIoHandle); dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| dstConfig->config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE|AUDIO_PORT_CONFIG_CHANNEL_MASK| AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; AUDIO_PORT_CONFIG_FORMAT|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading @@ -4685,6 +4701,8 @@ void AudioPolicyManager::AudioInputDescriptor::toAudioPortConfig( void AudioPolicyManager::AudioInputDescriptor::toAudioPort( void AudioPolicyManager::AudioInputDescriptor::toAudioPort( struct audio_port *port) const struct audio_port *port) const { { ALOG_ASSERT(mProfile != 0, "toAudioPort() called on input with null profile %d", mIoHandle); mProfile->toAudioPort(port); mProfile->toAudioPort(port); port->id = mId; port->id = mId; toAudioPortConfig(&port->active_config); toAudioPortConfig(&port->active_config); Loading Loading @@ -5735,7 +5753,7 @@ void AudioPolicyManager::DeviceDescriptor::toAudioPortConfig( { { dstConfig->config_mask = AUDIO_PORT_CONFIG_CHANNEL_MASK|AUDIO_PORT_CONFIG_GAIN; dstConfig->config_mask = AUDIO_PORT_CONFIG_CHANNEL_MASK|AUDIO_PORT_CONFIG_GAIN; if (srcConfig != NULL) { if (srcConfig != NULL) { dstConfig->config_mask &= srcConfig->config_mask; dstConfig->config_mask |= srcConfig->config_mask; } } AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); AudioPortConfig::toAudioPortConfig(dstConfig, srcConfig); Loading