EffectsFactory.cpp revision 6e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1d
17cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov/* 27cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * Copyright (C) 2016 The Android Open Source Project 37cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * 47cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 57cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * you may not use this file except in compliance with the License. 67cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * You may obtain a copy of the License at 77cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * 87cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 97cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * 107cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * Unless required by applicable law or agreed to in writing, software 117cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 127cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * See the License for the specific language governing permissions and 147cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov * limitations under the License. 157cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov */ 167cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 177cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#define LOG_TAG "EffectFactoryHAL" 187cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <media/EffectsFactoryApi.h> 197cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_aec.h> 207cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_agc.h> 217cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_bassboost.h> 227cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_downmix.h> 237cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_environmentalreverb.h> 247cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_equalizer.h> 257cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_loudnessenhancer.h> 267cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_ns.h> 277cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_presetreverb.h> 287cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_virtualizer.h> 297cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <system/audio_effects/effect_visualizer.h> 307cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include <utils/Log.h> 317cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 327cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "AcousticEchoCancelerEffect.h" 337cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "AutomaticGainControlEffect.h" 347cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "BassBoostEffect.h" 357cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "Conversions.h" 367cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "DownmixEffect.h" 376e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#include "EffectsFactory.h" 386e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov#include "HidlUtils.h" 397cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "Effect.h" 4010548295023bee99108e418499aff09fe578211eMikhail Naganov#include "EffectMap.h" 417cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "EnvironmentalReverbEffect.h" 427cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "EqualizerEffect.h" 437cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "LoudnessEnhancerEffect.h" 447cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "NoiseSuppressionEffect.h" 457cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "PresetReverbEffect.h" 467cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "VirtualizerEffect.h" 477cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov#include "VisualizerEffect.h" 487cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 497cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace android { 507cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace hardware { 517cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace audio { 527cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace effect { 537cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace V2_0 { 547cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovnamespace implementation { 557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 567cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov// static 577cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovsp<IEffect> EffectsFactory::dispatchEffectInstanceCreation( 587cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov const effect_descriptor_t& halDescriptor, effect_handle_t handle) { 597cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov const effect_uuid_t *halUuid = &halDescriptor.type; 607cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (memcmp(halUuid, FX_IID_AEC, sizeof(effect_uuid_t)) == 0) { 617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new AcousticEchoCancelerEffect(handle); 627cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, FX_IID_AGC, sizeof(effect_uuid_t)) == 0) { 637cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new AutomaticGainControlEffect(handle); 647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_BASSBOOST, sizeof(effect_uuid_t)) == 0) { 657cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new BassBoostEffect(handle); 667cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, EFFECT_UIID_DOWNMIX, sizeof(effect_uuid_t)) == 0) { 677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new DownmixEffect(handle); 687cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_ENVIRONMENTALREVERB, sizeof(effect_uuid_t)) == 0) { 697cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new EnvironmentalReverbEffect(handle); 707cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_EQUALIZER, sizeof(effect_uuid_t)) == 0) { 717cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new EqualizerEffect(handle); 727cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, FX_IID_LOUDNESS_ENHANCER, sizeof(effect_uuid_t)) == 0) { 737cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new LoudnessEnhancerEffect(handle); 747cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, FX_IID_NS, sizeof(effect_uuid_t)) == 0) { 757cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new NoiseSuppressionEffect(handle); 767cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_PRESETREVERB, sizeof(effect_uuid_t)) == 0) { 777cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new PresetReverbEffect(handle); 787cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_VIRTUALIZER, sizeof(effect_uuid_t)) == 0) { 797cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new VirtualizerEffect(handle); 807cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else if (memcmp(halUuid, SL_IID_VISUALIZATION, sizeof(effect_uuid_t)) == 0) { 817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new VisualizerEffect(handle); 827cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 837cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new Effect(handle); 847cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 867cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov// Methods from ::android::hardware::audio::effect::V2_0::IEffectsFactory follow. 877cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail NaganovReturn<void> EffectsFactory::getAllDescriptors(getAllDescriptors_cb _hidl_cb) { 887cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov Result retval(Result::OK); 897cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov hidl_vec<EffectDescriptor> result; 907cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov uint32_t numEffects; 917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status_t status; 927cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 937cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovrestart: 947cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov numEffects = 0; 957cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status = EffectQueryNumberEffects(&numEffects); 967cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status != OK) { 977cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::NOT_INITIALIZED; 987cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov ALOGW("Error querying number of effects: %s", strerror(-status)); 997cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov goto exit; 1007cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1017cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov result.resize(numEffects); 1027cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov for (uint32_t i = 0; i < numEffects; ++i) { 1037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_descriptor_t halDescriptor; 1047cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status = EffectQueryEffect(i, &halDescriptor); 1057cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status == OK) { 1067cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effectDescriptorFromHal(halDescriptor, &result[i]); 1077cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else { 1087cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov ALOGW("Error querying effect at position %d / %d: %s", 1097cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov i, numEffects, strerror(-status)); 1107cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov switch (status) { 1117cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov case -ENOSYS: { 1127cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov // Effect list has changed. 1137cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov goto restart; 1147cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1157cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov case -ENOENT: { 1167cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov // No more effects available. 1177cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov result.resize(i); 1187cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1197cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov default: { 1207cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov result.resize(0); 1217cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::NOT_INITIALIZED; 1227cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1237cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1247cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov break; 1257cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1267cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1277cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1287cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganovexit: 1297cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov _hidl_cb(retval, result); 1307cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return Void(); 1317cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 1327cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1337cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail NaganovReturn<void> EffectsFactory::getDescriptor(const Uuid& uid, getDescriptor_cb _hidl_cb) { 1347cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_uuid_t halUuid; 1356e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov HidlUtils::uuidToHal(uid, &halUuid); 1367cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_descriptor_t halDescriptor; 1377cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status_t status = EffectGetDescriptor(&halUuid, &halDescriptor); 1387cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov EffectDescriptor descriptor; 1397cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effectDescriptorFromHal(halDescriptor, &descriptor); 1407cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov Result retval(Result::OK); 1417cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status != OK) { 1427cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov ALOGW("Error querying effect descriptor for %s: %s", 1437cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov uuidToString(halUuid).c_str(), strerror(-status)); 1447cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status == -ENOENT) { 1457cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::INVALID_ARGUMENTS; 1467cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else { 1477cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::NOT_INITIALIZED; 1487cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1497cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1507cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov _hidl_cb(retval, descriptor); 1517cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return Void(); 1527cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 1537cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1547cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail NaganovReturn<void> EffectsFactory::createEffect( 1557cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov const Uuid& uid, int32_t session, int32_t ioHandle, createEffect_cb _hidl_cb) { 1567cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_uuid_t halUuid; 1576e81e9bb3c13d8c51fde503cf8be2bfb56e1ca1dMikhail Naganov HidlUtils::uuidToHal(uid, &halUuid); 1587cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_handle_t handle; 1597cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov Result retval(Result::OK); 1607cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status_t status = EffectCreate(&halUuid, session, ioHandle, &handle); 1617cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov sp<IEffect> effect; 16210548295023bee99108e418499aff09fe578211eMikhail Naganov uint64_t effectId = EffectMap::INVALID_ID; 1637cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status == OK) { 1647cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect_descriptor_t halDescriptor; 1657cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov memset(&halDescriptor, 0, sizeof(effect_descriptor_t)); 1667cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov status = (*handle)->get_descriptor(handle, &halDescriptor); 1677cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status == OK) { 1687cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov effect = dispatchEffectInstanceCreation(halDescriptor, handle); 16910548295023bee99108e418499aff09fe578211eMikhail Naganov effectId = EffectMap::getInstance().add(handle); 17010548295023bee99108e418499aff09fe578211eMikhail Naganov } else { 17110548295023bee99108e418499aff09fe578211eMikhail Naganov EffectRelease(handle); 1727cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1737cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1747cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status != OK) { 1757cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov ALOGW("Error creating effect %s: %s", uuidToString(halUuid).c_str(), strerror(-status)); 1767cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (status == -ENOENT) { 1777cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::INVALID_ARGUMENTS; 1787cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } else { 1797cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov retval = Result::NOT_INITIALIZED; 1807cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1817cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 18210548295023bee99108e418499aff09fe578211eMikhail Naganov _hidl_cb(retval, effect, effectId); 1837cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return Void(); 1847cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 1857cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 18670b9a15df00a42b319279d903bf5923564920e3bMartijn CoenenReturn<void> EffectsFactory::debugDump(const hidl_handle& fd) { 1877cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov if (fd->numFds == 1) { 1887cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov EffectDumpEffects(fd->data[0]); 1897cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov } 1907cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return Void(); 1917cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 1927cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1937cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1947cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail NaganovIEffectsFactory* HIDL_FETCH_IEffectsFactory(const char* /* name */) { 1957cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov return new EffectsFactory(); 1967cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} 1977cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov 1987cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace implementation 1997cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace V2_0 2007cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace effect 2017cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace audio 2027cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace hardware 2037cbf2f1fb15a2a7d9b8b61ca81ad93fa9ddcaea3Mikhail Naganov} // namespace android 204