12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License. 62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at 72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software 112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and 142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License. 152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#ifndef ANDROID_EFFECTBUNDLE_H_ 182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#define ANDROID_EFFECTBUNDLE_H_ 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 206d8b694d999e9be7d5dcc336535832a80fb6f61fEric Laurent#include <audio_effects/effect_bassboost.h> 216d8b694d999e9be7d5dcc336535832a80fb6f61fEric Laurent#include <audio_effects/effect_equalizer.h> 226d8b694d999e9be7d5dcc336535832a80fb6f61fEric Laurent#include <audio_effects/effect_virtualizer.h> 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include <LVM.h> 24e0aed6ddcb4e3c301b80aa26706b6052dab42c41Eric Laurent#include <limits.h> 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#if __cplusplus 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" { 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 30d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define FIVEBAND_NUMBANDS 5 31d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define MAX_NUM_BANDS 5 32d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define MAX_CALL_SIZE 256 33d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define LVM_MAX_SESSIONS 32 34e0aed6ddcb4e3c301b80aa26706b6052dab42c41Eric Laurent#define LVM_UNUSED_SESSION INT_MAX 35d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define BASS_BOOST_CUP_LOAD_ARM9E 150 // Expressed in 0.1 MIPS 36d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define VIRTUALIZER_CUP_LOAD_ARM9E 120 // Expressed in 0.1 MIPS 37d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define EQUALIZER_CUP_LOAD_ARM9E 220 // Expressed in 0.1 MIPS 38d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define VOLUME_CUP_LOAD_ARM9E 0 // Expressed in 0.1 MIPS 39d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define BUNDLE_MEM_USAGE 25 // Expressed in kB 40163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent//#define LVM_PCM 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4223e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#ifndef OPENSL_ES_H_ 43163fbcf84010b98e0374110454d85b804bc8d13bEric Laurentstatic const effect_uuid_t SL_IID_VOLUME_ = { 0x09e8ede0, 0xddde, 0x11db, 0xb4f6, 44163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }; 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_uuid_t * const SL_IID_VOLUME = &SL_IID_VOLUME_; 4623e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#endif //OPENSL_ES_H_ 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_BASS_BOOST, 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_VIRTUALIZER, 52163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_EQUALIZER, 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_VOLUME 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} lvm_effect_en; 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Preset configuration. 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct PresetConfig { 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Human-readable name. 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const char * name; 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // An array of size nBands where each element is a configuration for the 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // corresponding band. 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //const BandConfig * bandConfigs; 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* BundledEffectContext : One per session */ 662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct BundledEffectContext{ 67163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_Handle_t hInstance; /* Instance handle */ 68163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int SessionNo; /* Current session number */ 69c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SessionId; /* Current session id */ 70163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVolumeEnabled; /* Flag for Volume */ 71163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bEqualizerEnabled; /* Flag for EQ */ 72163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bBassEnabled; /* Flag for Bass */ 73163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bBassTempDisabled; /* Flag for Bass to be re-enabled */ 74163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerEnabled; /* Flag for Virtualizer */ 75163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerTempDisabled; /* Flag for effect to be re-enabled */ 76333f66d4642ddd36b42668da2767551ba25f0248Jean-Michel Trivi audio_devices_t nOutputDevice; /* Output device for the effect */ 77333f66d4642ddd36b42668da2767551ba25f0248Jean-Michel Trivi audio_devices_t nVirtualizerForcedDevice; /* Forced device virtualization mode*/ 78163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsEnabled; /* Effects in this session */ 79163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsCalled; /* Effects called so far */ 80d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent bool firstVolume; /* No smoothing on first Vol change */ 812c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Saved parameters for each effect */ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Bass Boost 83163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int BassStrengthSaved; /* Conversion between Get/Set */ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Equalizer 85163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int CurPreset; /* Current preset being used */ 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Virtualzer 87163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int VirtStrengthSaved; /* Conversion between Get/Set */ 882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Volume 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int levelSaved; /* for when mute is set, level must be saved */ 90163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int positionSaved; 91163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bMuteEnabled; /* Must store as mute = -96dB level */ 92163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bStereoPositionEnabled; 93163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_Fs_en SampleRate; 94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesPerSecond; 95c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountEq; 96c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountBb; 97c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountVirt; 98dac69110ed1073bf0a9827a3f78698896dd05d97Eric Laurent LVM_INT16 *workBuffer; 99dac69110ed1073bf0a9827a3f78698896dd05d97Eric Laurent int frameCount; 1001b6c677c4bad5c1aea4f01277cf5aa234ad4cab4Eric Laurent int32_t bandGaindB[FIVEBAND_NUMBANDS]; 101c5cd686a83c6ea65a68d98023d5527fe4373d4e4Eric Laurent int volume; 102163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #ifdef LVM_PCM 103163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmInPtr; 104163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmOutPtr; 105163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #endif 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1072c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* SessionContext : One session */ 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct SessionContext{ 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBundledEffectsEnabled; 111163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVolumeInstantiated; 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bEqualizerInstantiated; 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBassInstantiated; 114163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerInstantiated; 115163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct EffectContext{ 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const struct effect_interface_s *itfe; 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_config_t config; 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent lvm_effect_en EffectType; 122163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* enumerated parameter settings for Volume effect */ 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_LEVEL, // type SLmillibel = typedef SLuint16 (set & get) 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MAXLEVEL, // type SLmillibel = typedef SLuint16 (get) 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MUTE, // type SLboolean = typedef SLuint32 (set & get) 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_ENABLESTEREOPOSITION, // type SLboolean = typedef SLuint32 (set & get) 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_STEREOPOSITION, // type SLpermille = typedef SLuint16 (set & get) 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} t_volume_params; 1352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const int PRESET_CUSTOM = -1; 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const uint32_t bandFreqRange[FIVEBAND_NUMBANDS][2] = { 139163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {30000, 120000}, 140163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {120001, 460000}, 141163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {460001, 1800000}, 142163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {1800001, 7000000}, 143163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {7000001, 1}}; 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 14502521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia//Note: If these frequencies change, please update LimitLevel values accordingly. 1462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsFrequencies[] = { 147163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 60, /* Frequencies in Hz */ 148163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 230, 149163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 910, 150163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3600, 151163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 14000}; 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsQFactors[] = { 154163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, /* Q factor multiplied by 100 */ 155163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 156163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 157163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 158163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96}; 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_INT16 EQNB_5BandNormalPresets[] = { 161163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -3, 5, 6, /* Classical Preset */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15, -6, 7, 13, 10, /* Dance Preset */ 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6, -2, -2, 6, -3, /* Folk Preset */ 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, -8, 13, -1, -4, /* Heavy Metal Preset */ 1672c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -4, 5, 8, /* Hip Hop Preset */ 1682c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -4, 5, 9, /* Jazz Preset */ 1692c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent -6, 4, 9, 4, -5, /* Pop Preset */ 1702c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -1, 8, 10}; /* Rock Preset */ 1712c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 172163fbcf84010b98e0374110454d85b804bc8d13bEric Laurentstatic const LVM_INT16 EQNB_5BandSoftPresets[] = { 173163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 174163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -2, 4, 4, /* Classical Preset */ 175163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 6, 0, 2, 4, 1, /* Dance Preset */ 176163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 177163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 2, -1, /* Folk Preset */ 178163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 1, 9, 3, 0, /* Heavy Metal Preset */ 179163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, 0, 1, 3, /* Hip Hop Preset */ 180163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 2, -2, 2, 5, /* Jazz Preset */ 181163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent -1, 2, 5, 1, -2, /* Pop Preset */ 182163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -1, 3, 5}; /* Rock Preset */ 183163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 1842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const PresetConfig gEqualizerPresets[] = { 185163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Normal"}, 186163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Classical"}, 187163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Dance"}, 188163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Flat"}, 189163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Folk"}, 190163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Heavy Metal"}, 191163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Hip Hop"}, 192163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Jazz"}, 193163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Pop"}, 194163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Rock"}}; 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 19602521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia/* The following tables have been computed using the actual levels measured by the output of 19702521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia * white noise or pink noise (IEC268-1) for the EQ and BassBoost Effects. These are estimates of 19802521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia * the actual energy that 'could' be present in the given band. 19902521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia * If the frequency values in EQNB_5BandPresetsFrequencies change, these values might need to be 20002521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia * updated. 20102521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia */ 20202521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia 20302521e37c0494b83947c35160f3669de8adc9e5bRicardo Garciastatic const float LimitLevel_bandEnergyContribution[FIVEBAND_NUMBANDS] = { 20402521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia 5.0, 6.5, 6.45, 4.8, 1.7 }; 20502521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia 20602521e37c0494b83947c35160f3669de8adc9e5bRicardo Garciastatic const float LimitLevel_bassBoostEnergyContribution = 6.7; 20702521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia 20802521e37c0494b83947c35160f3669de8adc9e5bRicardo Garciastatic const float LimitLevel_virtualizerContribution = 1.9; 20902521e37c0494b83947c35160f3669de8adc9e5bRicardo Garcia 2102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#if __cplusplus 2112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} // extern "C" 2122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif 2132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 2152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /*ANDROID_EFFECTBUNDLE_H_*/ 216