EffectBundle.h revision d918324d44aa48b3b064ea9b87d0c520c38f15a9
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> 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#if __cplusplus 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentextern "C" { 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 29d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define FIVEBAND_NUMBANDS 5 30d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define MAX_NUM_BANDS 5 31d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define MAX_CALL_SIZE 256 32d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define LVM_MAX_SESSIONS 32 33d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define BASS_BOOST_CUP_LOAD_ARM9E 150 // Expressed in 0.1 MIPS 34d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define VIRTUALIZER_CUP_LOAD_ARM9E 120 // Expressed in 0.1 MIPS 35d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define EQUALIZER_CUP_LOAD_ARM9E 220 // Expressed in 0.1 MIPS 36d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define VOLUME_CUP_LOAD_ARM9E 0 // Expressed in 0.1 MIPS 37d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent#define BUNDLE_MEM_USAGE 25 // Expressed in kB 38163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent//#define LVM_PCM 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 4023e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#ifndef OPENSL_ES_H_ 41163fbcf84010b98e0374110454d85b804bc8d13bEric Laurentstatic const effect_uuid_t SL_IID_VOLUME_ = { 0x09e8ede0, 0xddde, 0x11db, 0xb4f6, 42163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }; 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentconst effect_uuid_t * const SL_IID_VOLUME = &SL_IID_VOLUME_; 4423e1de74359f4bb1763aef0adfebe073122b032cEric Laurent#endif //OPENSL_ES_H_ 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_BASS_BOOST, 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_VIRTUALIZER, 50163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_EQUALIZER, 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_VOLUME 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} lvm_effect_en; 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent// Preset configuration. 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct PresetConfig { 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Human-readable name. 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const char * name; 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // An array of size nBands where each element is a configuration for the 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // corresponding band. 602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent //const BandConfig * bandConfigs; 612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* BundledEffectContext : One per session */ 642c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct BundledEffectContext{ 65163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_Handle_t hInstance; /* Instance handle */ 66163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int SessionNo; /* Current session number */ 67c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SessionId; /* Current session id */ 68163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVolumeEnabled; /* Flag for Volume */ 69163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bEqualizerEnabled; /* Flag for EQ */ 70163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bBassEnabled; /* Flag for Bass */ 71163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bBassTempDisabled; /* Flag for Bass to be re-enabled */ 72163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerEnabled; /* Flag for Virtualizer */ 73163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerTempDisabled; /* Flag for effect to be re-enabled */ 74163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsEnabled; /* Effects in this session */ 75163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int NumberEffectsCalled; /* Effects called so far */ 76d918324d44aa48b3b064ea9b87d0c520c38f15a9Eric Laurent bool firstVolume; /* No smoothing on first Vol change */ 772c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Saved parameters for each effect */ 782c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Bass Boost 79163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int BassStrengthSaved; /* Conversion between Get/Set */ 802c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Equalizer 81163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int CurPreset; /* Current preset being used */ 822c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Virtualzer 83163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int VirtStrengthSaved; /* Conversion between Get/Set */ 842c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent // Volume 852c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent int levelSaved; /* for when mute is set, level must be saved */ 86163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int positionSaved; 87163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bMuteEnabled; /* Must store as mute = -96dB level */ 88163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bStereoPositionEnabled; 89163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent int frameCount; 90163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent LVM_Fs_en SampleRate; 91c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesPerSecond; 92c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountEq; 93c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountBb; 94c59c6fd7f859b4010d788db89b8d4d76bbb70e57Eric Laurent int SamplesToExitCountVirt; 95163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #ifdef LVM_PCM 96163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmInPtr; 97163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent FILE *PcmOutPtr; 98163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent #endif 992c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1002c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1012c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* SessionContext : One session */ 1022c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct SessionContext{ 1032c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBundledEffectsEnabled; 104163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVolumeInstantiated; 1052c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bEqualizerInstantiated; 1062c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent bool bBassInstantiated; 107163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent bool bVirtualizerInstantiated; 108163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1092c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstruct EffectContext{ 1122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent const struct effect_interface_s *itfe; 1132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent effect_config_t config; 1142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent lvm_effect_en EffectType; 115163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent BundledEffectContext *pBundledContext; 1162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent}; 1172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* enumerated parameter settings for Volume effect */ 1202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurenttypedef enum 1212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 1222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_LEVEL, // type SLmillibel = typedef SLuint16 (set & get) 1232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MAXLEVEL, // type SLmillibel = typedef SLuint16 (get) 1242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_MUTE, // type SLboolean = typedef SLuint32 (set & get) 1252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_ENABLESTEREOPOSITION, // type SLboolean = typedef SLuint32 (set & get) 1262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent VOLUME_PARAM_STEREOPOSITION, // type SLpermille = typedef SLuint16 (set & get) 1272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} t_volume_params; 1282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const int PRESET_CUSTOM = -1; 1302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const uint32_t bandFreqRange[FIVEBAND_NUMBANDS][2] = { 132163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {30000, 120000}, 133163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {120001, 460000}, 134163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {460001, 1800000}, 135163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {1800001, 7000000}, 136163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {7000001, 1}}; 1372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsFrequencies[] = { 139163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 60, /* Frequencies in Hz */ 140163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 230, 141163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 910, 142163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3600, 143163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 14000}; 1442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_UINT16 EQNB_5BandPresetsQFactors[] = { 146163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, /* Q factor multiplied by 100 */ 147163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 148163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 149163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96, 150163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 96}; 1512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const LVM_INT16 EQNB_5BandNormalPresets[] = { 153163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 1542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -3, 5, 6, /* Classical Preset */ 1552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 15, -6, 7, 13, 10, /* Dance Preset */ 1562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 1572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 6, -2, -2, 6, -3, /* Folk Preset */ 1582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, -8, 13, -1, -4, /* Heavy Metal Preset */ 1592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -4, 5, 8, /* Hip Hop Preset */ 1602c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 8, 5, -4, 5, 9, /* Jazz Preset */ 1612c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent -6, 4, 9, 4, -5, /* Pop Preset */ 1622c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 10, 6, -1, 8, 10}; /* Rock Preset */ 1632c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 164163fbcf84010b98e0374110454d85b804bc8d13bEric Laurentstatic const LVM_INT16 EQNB_5BandSoftPresets[] = { 165163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 0, 3, /* Normal Preset */ 166163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -2, 4, 4, /* Classical Preset */ 167163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 6, 0, 2, 4, 1, /* Dance Preset */ 168163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 0, 0, 0, 0, 0, /* Flat Preset */ 169163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 3, 0, 0, 2, -1, /* Folk Preset */ 170163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 1, 9, 3, 0, /* Heavy Metal Preset */ 171163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, 0, 1, 3, /* Hip Hop Preset */ 172163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 4, 2, -2, 2, 5, /* Jazz Preset */ 173163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent -1, 2, 5, 1, -2, /* Pop Preset */ 174163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 5, 3, -1, 3, 5}; /* Rock Preset */ 175163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent 1762c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentstatic const PresetConfig gEqualizerPresets[] = { 177163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Normal"}, 178163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Classical"}, 179163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Dance"}, 180163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Flat"}, 181163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Folk"}, 182163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Heavy Metal"}, 183163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Hip Hop"}, 184163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Jazz"}, 185163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Pop"}, 186163fbcf84010b98e0374110454d85b804bc8d13bEric Laurent {"Rock"}}; 1872c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1882c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#if __cplusplus 1892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} // extern "C" 1902c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif 1912c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1922c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 1932c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#endif /*ANDROID_EFFECTBUNDLE_H_*/ 194