diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioPort.h b/services/audiopolicy/common/managerdefinitions/include/AudioPort.h index ded22859b7..4f79ed292a 100644 --- a/services/audiopolicy/common/managerdefinitions/include/AudioPort.h +++ b/services/audiopolicy/common/managerdefinitions/include/AudioPort.h @@ -71,7 +71,7 @@ public: virtual void toAudioPort(struct audio_port *port) const; - virtual void importAudioPort(const sp& port); + virtual void importAudioPort(const sp& port, bool force = false); void addAudioProfile(const sp &profile) { mProfiles.add(profile); } diff --git a/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h index 9a52d225f7..1a644d782c 100644 --- a/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h +++ b/services/audiopolicy/common/managerdefinitions/include/DeviceDescriptor.h @@ -48,7 +48,7 @@ public: // AudioPort virtual void attach(const sp& module); virtual void toAudioPort(struct audio_port *port) const; - virtual void importAudioPort(const sp& port); + virtual void importAudioPort(const sp& port, bool force = false); audio_port_handle_t getId() const; status_t dump(int fd, int spaces, int index, bool verbose = true) const; diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp index 6ed2cb7fad..fcf9070394 100644 --- a/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp @@ -128,7 +128,7 @@ void AudioPort::toAudioPort(struct audio_port *port) const port->num_gains = i; } -void AudioPort::importAudioPort(const sp& port) +void AudioPort::importAudioPort(const sp& port, bool force __unused) { size_t indexToImport; for (indexToImport = 0; indexToImport < port->mProfiles.size(); indexToImport++) { diff --git a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp index f0e48b6255..a2c1165c5e 100644 --- a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp @@ -263,7 +263,10 @@ void DeviceDescriptor::toAudioPort(struct audio_port *port) const strncpy(port->ext.device.address, mAddress.string(), AUDIO_DEVICE_MAX_ADDRESS_LEN); } -void DeviceDescriptor::importAudioPort(const sp& port) { +void DeviceDescriptor::importAudioPort(const sp& port, bool force) { + if (!force && !port->hasDynamicAudioProfile()) { + return; + } AudioPort::importAudioPort(port); port->pickAudioProfile(mSamplingRate, mChannelMask, mFormat); } diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index e8e531ad4c..d9859eaadf 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -3647,7 +3647,7 @@ AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterfa sp devDesc = mAvailableInputDevices[index]; if (!devDesc->isAttached()) { devDesc->attach(mHwModules[i]); - devDesc->importAudioPort(inProfile); + devDesc->importAudioPort(inProfile, true); } } } @@ -4010,8 +4010,8 @@ status_t AudioPolicyManager::checkOutputsForDevice(const sp& d continue; } - ALOGV("opening output for device %08x with params %s profile %p", - device, address.string(), profile.get()); + ALOGV("opening output for device %08x with params %s profile %p name %s", + device, address.string(), profile.get(), profile->getName().string()); desc = new SwAudioOutputDescriptor(profile, mpClientInterface); desc->mDevice = device; audio_config_t config = AUDIO_CONFIG_INITIALIZER; @@ -4260,6 +4260,10 @@ status_t AudioPolicyManager::checkInputsForDevice(const sp& de config.channel_mask = desc->mChannelMask; config.format = desc->mFormat; audio_io_handle_t input = AUDIO_IO_HANDLE_NONE; + + ALOGV("opening inputput for device %08x with params %s profile %p name %s", + desc->mDevice, address.string(), profile.get(), profile->getName().string()); + status_t status = mpClientInterface->openInput(profile->getModuleHandle(), &input, &config,