EffectBundle.h revision dac69110ed1073bf0a9827a3f78698896dd05d97
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 2023e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#include <media/EffectEqualizerApi.h> 2123e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#include <media/EffectBassBoostApi.h> 2223e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#include <media/EffectVirtualizerApi.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 */ 76163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsEnabled; /* Effects in this session */ 77163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsCalled; /* Effects called so far */ 78d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent bool firstVolume; /* No smoothing on first Vol change */ 792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Saved parameters for each effect */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Bass Boost 81163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int BassStrengthSaved; /* Conversion between Get/Set */ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Equalizer 83163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int CurPreset; /* Current preset being used */ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Virtualzer 85163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int VirtStrengthSaved; /* Conversion between Get/Set */ 862c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Volume 872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int levelSaved; /* for when mute is set, level must be saved */ 88163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int positionSaved; 89163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bMuteEnabled; /* Must store as mute = -96dB level */ 90163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bStereoPositionEnabled; 91163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_Fs_en SampleRate; 92c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesPerSecond; 93c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountEq; 94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountBb; 95c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountVirt; 96dac69110ed1073bf0a9827a3f78698896dd05d97Eric Laurent LVM_INT16 *workBuffer; 97dac69110ed1073bf0a9827a3f78698896dd05d97Eric Laurent int frameCount; 98163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #ifdef LVM_PCM 99163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmInPtr; 100163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmOutPtr; 101163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #endif 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1042c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* SessionContext : One session */ 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct SessionContext{ 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBundledEffectsEnabled; 107163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVolumeInstantiated; 1082c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bEqualizerInstantiated; 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBassInstantiated; 110163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerInstantiated; 111163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct EffectContext{ 1152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const struct effect_interface_s *itfe; 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_config_t config; 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent lvm_effect_en EffectType; 118163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* enumerated parameter settings for Volume effect */ 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_LEVEL, // type SLmillibel = typedef SLuint16 (set & get) 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MAXLEVEL, // type SLmillibel = typedef SLuint16 (get) 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MUTE, // type SLboolean = typedef SLuint32 (set & get) 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_ENABLESTEREOPOSITION, // type SLboolean = typedef SLuint32 (set & get) 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_STEREOPOSITION, // type SLpermille = typedef SLuint16 (set & get) 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} t_volume_params; 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const int PRESET_CUSTOM = -1; 1332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const uint32_t bandFreqRange[FIVEBAND_NUMBANDS][2] = { 135163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {30000, 120000}, 136163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {120001, 460000}, 137163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {460001, 1800000}, 138163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {1800001, 7000000}, 139163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {7000001, 1}}; 1402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsFrequencies[] = { 142163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 60, /* Frequencies in Hz */ 143163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 230, 144163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 910, 145163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3600, 146163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 14000}; 1472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsQFactors[] = { 149163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, /* Q factor multiplied by 100 */ 150163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 151163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 152163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 153163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96}; 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_INT16 EQNB_5BandNormalPresets[] = { 156163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -3, 5, 6, /* Classical Preset */ 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15, -6, 7, 13, 10, /* Dance Preset */ 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6, -2, -2, 6, -3, /* Folk Preset */ 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, -8, 13, -1, -4, /* Heavy Metal Preset */ 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -4, 5, 8, /* Hip Hop Preset */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -4, 5, 9, /* Jazz Preset */ 1642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent -6, 4, 9, 4, -5, /* Pop Preset */ 1652c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -1, 8, 10}; /* Rock Preset */ 1662c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 167163fbcf84010b98e0374110454d85b804bc8d13bEric Laurentstatic const LVM_INT16 EQNB_5BandSoftPresets[] = { 168163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 169163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -2, 4, 4, /* Classical Preset */ 170163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 6, 0, 2, 4, 1, /* Dance Preset */ 171163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 172163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 2, -1, /* Folk Preset */ 173163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 1, 9, 3, 0, /* Heavy Metal Preset */ 174163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, 0, 1, 3, /* Hip Hop Preset */ 175163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 2, -2, 2, 5, /* Jazz Preset */ 176163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent -1, 2, 5, 1, -2, /* Pop Preset */ 177163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -1, 3, 5}; /* Rock Preset */ 178163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 1792c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const PresetConfig gEqualizerPresets[] = { 180163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Normal"}, 181163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Classical"}, 182163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Dance"}, 183163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Flat"}, 184163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Folk"}, 185163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Heavy Metal"}, 186163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Hip Hop"}, 187163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Jazz"}, 188163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Pop"}, 189163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Rock"}}; 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#if __cplusplus 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} // extern "C" 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif 1942c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1952c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1962c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /*ANDROID_EFFECTBUNDLE_H_*/ 197