diff options
author | bryant_liu <bryant_liu@htc.com> | 2014-06-11 16:49:30 +0800 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2014-07-01 11:32:34 -0700 |
commit | ba2b43990a7b4f0f2c425cf6cdfc63376a45772c (patch) | |
tree | a2253fca6136a86bb00a197fe2edb97c3438d9c4 /services/audiopolicy/AudioPolicyInterfaceImpl.cpp | |
parent | 2421a4ba309f082a83be9b8e385c00cd8e0043f6 (diff) | |
download | frameworks_av-ba2b43990a7b4f0f2c425cf6cdfc63376a45772c.zip frameworks_av-ba2b43990a7b4f0f2c425cf6cdfc63376a45772c.tar.gz frameworks_av-ba2b43990a7b4f0f2c425cf6cdfc63376a45772c.tar.bz2 |
frameworks: av: services: audiopolicy: Added AudioPolicyEffects
Manage pre- and postprocessing effects defined in audio_effects.conf
Change-Id: Idea1478e3d434f8ff66907adb3c77663db78d583
Diffstat (limited to 'services/audiopolicy/AudioPolicyInterfaceImpl.cpp')
-rwxr-xr-x[-rw-r--r--] | services/audiopolicy/AudioPolicyInterfaceImpl.cpp | 87 |
1 files changed, 24 insertions, 63 deletions
diff --git a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp index 6342d8f..5a13ac2 100644..100755 --- a/services/audiopolicy/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/AudioPolicyInterfaceImpl.cpp @@ -156,6 +156,13 @@ status_t AudioPolicyService::startOutput(audio_io_handle_t output, } ALOGV("startOutput()"); Mutex::Autolock _l(mLock); + + // create audio processors according to stream + status_t status = mAudioPolicyEffects->addOutputSessionEffects(output, stream, session); + if (status != NO_ERROR && status != ALREADY_EXISTS) { + ALOGW("Failed to add effects on session %d", session); + } + return mAudioPolicyManager->startOutput(output, stream, session); } @@ -177,6 +184,13 @@ status_t AudioPolicyService::doStopOutput(audio_io_handle_t output, { ALOGV("doStopOutput from tid %d", gettid()); Mutex::Autolock _l(mLock); + + // release audio processors from the stream + status_t status = mAudioPolicyEffects->releaseOutputSessionEffects(output, stream, session); + if (status != NO_ERROR && status != ALREADY_EXISTS) { + ALOGW("Failed to release effects on session %d", session); + } + return mAudioPolicyManager->stopOutput(output, stream, session); } @@ -222,39 +236,13 @@ audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, if (input == 0) { return input; } - // create audio pre processors according to input source - audio_source_t aliasSource = (inputSource == AUDIO_SOURCE_HOTWORD) ? - AUDIO_SOURCE_VOICE_RECOGNITION : inputSource; - ssize_t index = mInputSources.indexOfKey(aliasSource); - if (index < 0) { - return input; + // create audio pre processors according to input source + status_t status = mAudioPolicyEffects->addInputEffects(input, inputSource, audioSession); + if (status != NO_ERROR && status != ALREADY_EXISTS) { + ALOGW("Failed to add effects on input %d", input); } - ssize_t idx = mInputs.indexOfKey(input); - InputDesc *inputDesc; - if (idx < 0) { - inputDesc = new InputDesc(audioSession); - mInputs.add(input, inputDesc); - } else { - inputDesc = mInputs.valueAt(idx); - } - - Vector <EffectDesc *> effects = mInputSources.valueAt(index)->mEffects; - for (size_t i = 0; i < effects.size(); i++) { - EffectDesc *effect = effects[i]; - sp<AudioEffect> fx = new AudioEffect(NULL, &effect->mUuid, -1, 0, 0, audioSession, input); - status_t status = fx->initCheck(); - if (status != NO_ERROR && status != ALREADY_EXISTS) { - ALOGW("Failed to create Fx %s on input %d", effect->mName, input); - // fx goes out of scope and strong ref on AudioEffect is released - continue; - } - for (size_t j = 0; j < effect->mParams.size(); j++) { - fx->setParameter(effect->mParams[j]); - } - inputDesc->mEffects.add(fx); - } - setPreProcessorEnabled(inputDesc, true); + return input; } @@ -286,14 +274,11 @@ void AudioPolicyService::releaseInput(audio_io_handle_t input) Mutex::Autolock _l(mLock); mAudioPolicyManager->releaseInput(input); - ssize_t index = mInputs.indexOfKey(input); - if (index < 0) { - return; + // release audio processors from the input + status_t status = mAudioPolicyEffects->releaseInputEffects(input); + if(status != NO_ERROR) { + ALOGW("Failed to release effects on input %d", input); } - InputDesc *inputDesc = mInputs.valueAt(index); - setPreProcessorEnabled(inputDesc, false); - delete inputDesc; - mInputs.removeItemsAt(index); } status_t AudioPolicyService::initStreamVolume(audio_stream_type_t stream, @@ -436,37 +421,13 @@ status_t AudioPolicyService::queryDefaultPreProcessing(int audioSession, effect_descriptor_t *descriptors, uint32_t *count) { - if (mAudioPolicyManager == NULL) { *count = 0; return NO_INIT; } Mutex::Autolock _l(mLock); - status_t status = NO_ERROR; - size_t index; - for (index = 0; index < mInputs.size(); index++) { - if (mInputs.valueAt(index)->mSessionId == audioSession) { - break; - } - } - if (index == mInputs.size()) { - *count = 0; - return BAD_VALUE; - } - Vector< sp<AudioEffect> > effects = mInputs.valueAt(index)->mEffects; - - for (size_t i = 0; i < effects.size(); i++) { - effect_descriptor_t desc = effects[i]->descriptor(); - if (i < *count) { - descriptors[i] = desc; - } - } - if (effects.size() > *count) { - status = NO_MEMORY; - } - *count = effects.size(); - return status; + return mAudioPolicyEffects->queryDefaultInputEffects(audioSession, descriptors, count); } bool AudioPolicyService::isOffloadSupported(const audio_offload_info_t& info) |