diff options
author | Eric Laurent <elaurent@google.com> | 2014-05-20 11:30:42 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-05-30 17:22:58 -0700 |
commit | e1715a465a29db625da9d0ea365edf371e39e201 (patch) | |
tree | 771fdda7b99935e05e7b3c36487abf523930dd34 /services/audioflinger/PatchPanel.cpp | |
parent | 1afeecb88bea660b2c10b2096be0fd02433303ce (diff) | |
download | frameworks_av-e1715a465a29db625da9d0ea365edf371e39e201.zip frameworks_av-e1715a465a29db625da9d0ea365edf371e39e201.tar.gz frameworks_av-e1715a465a29db625da9d0ea365edf371e39e201.tar.bz2 |
audio policy: add audio port gain control
Implement setAudioPortConfig() API to configure an
audio port.
Currently limited to gain control.
Bug: 14815883.
Change-Id: Ic1b268e5ba5c277e9f5b8fa63c81dd7c0b250024
Diffstat (limited to 'services/audioflinger/PatchPanel.cpp')
-rw-r--r-- | services/audioflinger/PatchPanel.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/services/audioflinger/PatchPanel.cpp b/services/audioflinger/PatchPanel.cpp index 9680a9a..96a8127 100644 --- a/services/audioflinger/PatchPanel.cpp +++ b/services/audioflinger/PatchPanel.cpp @@ -404,13 +404,38 @@ status_t AudioFlinger::PatchPanel::listAudioPatches(unsigned int *num_patches __ } /* Set audio port configuration */ -status_t AudioFlinger::PatchPanel::setAudioPortConfig( - const struct audio_port_config *config __unused) +status_t AudioFlinger::PatchPanel::setAudioPortConfig(const struct audio_port_config *config) { ALOGV("setAudioPortConfig"); + status_t status = NO_ERROR; + + sp<AudioFlinger> audioflinger = mAudioFlinger.promote(); + if (audioflinger == 0) { + return NO_INIT; + } + + audio_module_handle_t module; + if (config->type == AUDIO_PORT_TYPE_DEVICE) { + module = config->ext.device.hw_module; + } else { + module = config->ext.mix.hw_module; + } + + ssize_t index = audioflinger->mAudioHwDevs.indexOfKey(module); + if (index < 0) { + ALOGW("setAudioPortConfig() bad hw module %d", module); + return BAD_VALUE; + } + + AudioHwDevice *audioHwDevice = audioflinger->mAudioHwDevs.valueAt(index); + if (audioHwDevice->version() >= AUDIO_DEVICE_API_VERSION_3_0) { + audio_hw_device_t *hwDevice = audioHwDevice->hwDevice(); + return hwDevice->set_audio_port_config(hwDevice, config); + } else { + return INVALID_OPERATION; + } return NO_ERROR; } - }; // namespace android |