blob: 6818dd679f624fcd3f0afb1fa97815141e82a18e [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_EFFECTBUNDLE_H_
#define ANDROID_EFFECTBUNDLE_H_
#include <media/EffectApi.h>
#include <LVM.h>
#if __cplusplus
extern "C" {
#endif
#define FIVEBAND_NUMBANDS 5
#define MAX_NUM_BANDS 5
#define MAX_CALL_SIZE 256
//TODO: this should be included from each effect API include
static const effect_uuid_t SL_IID_BASSBOOST_ = { 0x0634f220, 0xddd4, 0x11db, 0xa0fc, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
const effect_uuid_t * const SL_IID_BASSBOOST = &SL_IID_BASSBOOST_;
static const effect_uuid_t SL_IID_EQUALIZER_ = { 0x0bed4300, 0xddd6, 0x11db, 0x8f34, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
const effect_uuid_t * const SL_IID_EQUALIZER = &SL_IID_EQUALIZER_;
static const effect_uuid_t SL_IID_VIRTUALIZER_ = { 0x37cc2c00, 0xdddd, 0x11db, 0x8577, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }; // updated mon 28th june 2010
const effect_uuid_t * const SL_IID_VIRTUALIZER = &SL_IID_VIRTUALIZER_;
static const effect_uuid_t SL_IID_VOLUME_ = { 0x09e8ede0, 0xddde, 0x11db, 0xb4f6, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }; // updated mon 28th june 2010
const effect_uuid_t * const SL_IID_VOLUME = &SL_IID_VOLUME_;
typedef enum
{
LVM_BASS_BOOST,
LVM_VIRTUALIZER,
LVM_EQUALIZER,
LVM_VOLUME
} lvm_effect_en;
// Preset configuration.
struct PresetConfig {
// Human-readable name.
const char * name;
// An array of size nBands where each element is a configuration for the
// corresponding band.
//const BandConfig * bandConfigs;
};
/* BundledEffectContext : One per session */
struct BundledEffectContext{
LVM_Handle_t hInstance; /* Instance handle */
int SessionNo; /* Current session number */
bool bVolumeEnabled; /* Flag for Volume */
bool bEqualizerEnabled; /* Flag for EQ */
bool bBassEnabled; /* Flag for Bass */
bool bVirtualizerEnabled; /* Flag for Virtualizer */
int NumberEffectsEnabled; /* Effects in this session */
int NumberEffectsCalled; /* Effects called so far */
// Saved parameters for each effect */
// Bass Boost
int BassStrengthSaved; /* Conversion between Get/Set */
// Equalizer
int CurPreset; /* Current preset being used */
// Virtualzer
int VirtStrengthSaved; /* Conversion between Get/Set */
// Volume
int levelSaved; /* for when mute is set, level must be saved */
bool bMuteEnabled; /* Must store as mute = -96dB level */
};
/* SessionContext : One session */
struct SessionContext{
bool bBundledEffectsEnabled;
bool bVolumeInstantiated;
bool bEqualizerInstantiated;
bool bBassInstantiated;
bool bVirtualizerInstantiated;
BundledEffectContext *pBundledContext;
};
struct EffectContext{
const struct effect_interface_s *itfe;
effect_config_t config;
lvm_effect_en EffectType;
BundledEffectContext *pBundledContext;
};
//TODO: this should be included from each effect API include
/* enumerated parameter settings for BassBoost effect */
typedef enum
{
BASSBOOST_PARAM_STRENGTH_SUP, // type SLboolean = typedef SLuint32
BASSBOOST_PARAM_STRENGTH // type SLpermille = typedef SLuint16
} t_bassboost_params;
/* enumerated parameter settings for Virtualizer effect */
typedef enum
{
VIRTUALIZER_PARAM_STRENGTH_SUP, // type SLboolean = typedef SLuint32
VIRTUALIZER_PARAM_STRENGTH // type SLpermille = typedef SLuint16
} t_virtualizer_params;
/* enumerated parameter settings for Equalizer effect */
typedef enum
{
EQ_PARAM_NUM_BANDS, // Gets the number of frequency bands that the equalizer supports.
EQ_PARAM_LEVEL_RANGE, // Returns the minimum and maximum band levels supported.
EQ_PARAM_BAND_LEVEL, // Gets/Sets the gain set for the given equalizer band.
EQ_PARAM_CENTER_FREQ, // Gets the center frequency of the given band.
EQ_PARAM_BAND_FREQ_RANGE, // Gets the frequency range of the given frequency band.
EQ_PARAM_GET_BAND, // Gets the band that has the most effect on the given frequency.
EQ_PARAM_CUR_PRESET, // Gets/Sets the current preset.
EQ_PARAM_GET_NUM_OF_PRESETS, // Gets the total number of presets the equalizer supports.
EQ_PARAM_GET_PRESET_NAME // Gets the preset name based on the index.
} t_equalizer_params;
/* enumerated parameter settings for Volume effect */
typedef enum
{
VOLUME_PARAM_LEVEL, // type SLmillibel = typedef SLuint16 (set & get)
VOLUME_PARAM_MAXLEVEL, // type SLmillibel = typedef SLuint16 (get)
VOLUME_PARAM_MUTE, // type SLboolean = typedef SLuint32 (set & get)
VOLUME_PARAM_ENABLESTEREOPOSITION, // type SLboolean = typedef SLuint32 (set & get)
VOLUME_PARAM_STEREOPOSITION, // type SLpermille = typedef SLuint16 (set & get)
} t_volume_params;
static const int PRESET_CUSTOM = -1;
static const uint32_t bandFreqRange[FIVEBAND_NUMBANDS][2] = {
{30000, 120000},
{12000, 460000},
{46000, 1800000},
{180000, 7000000},
{700000, 1}
};
static const LVM_UINT16 EQNB_5BandPresetsFrequencies[] = {
60, /* Frequencies in Hz */
230,
910,
3600,
14000};
static const LVM_UINT16 EQNB_5BandPresetsQFactors[] = {
96, /* Q factor multiplied by 100 */
96,
96,
96,
96};
static const LVM_INT16 EQNB_5BandNormalPresets[] = {
3, 0, 0, 0, 3, /* Normal Preset */
8, 5, -3, 5, 6, /* Classical Preset */
15, -6, 7, 13, 10, /* Dance Preset */
0, 0, 0, 0, 0, /* Flat Preset */
6, -2, -2, 6, -3, /* Folk Preset */
8, -8, 13, -1, -4, /* Heavy Metal Preset */
10, 6, -4, 5, 8, /* Hip Hop Preset */
8, 5, -4, 5, 9, /* Jazz Preset */
-6, 4, 9, 4, -5, /* Pop Preset */
10, 6, -1, 8, 10}; /* Rock Preset */
static const PresetConfig gEqualizerPresets[] = {
{"Normal"},
{"Classical"},
{"Dance"},
{"Flat"},
{"Folk"},
{"Heavy Metal"},
{"Hip Hop"},
{"Jazz"},
{"Pop"},
{"Rock"}
};
#if __cplusplus
} // extern "C"
#endif
#endif /*ANDROID_EFFECTBUNDLE_H_*/