1a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten/* 2a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 4a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * you may not use this file except in compliance with the License. 6a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * You may obtain a copy of the License at 7a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 8a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 10a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * See the License for the specific language governing permissions and 14a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * limitations under the License. 15a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten */ 16a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 17a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten/* BassBoost implementation */ 18a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 19a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include "sles_allinclusive.h" 2063c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#ifdef ANDROID 21ea429ee1007c36ade812199ad365c0e659e8053fEric Laurent#include <audio_effects/effect_bassboost.h> 2263c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#endif 23a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 249cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#define BASSBOOST_STRENGTH_MIN 0 259cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#define BASSBOOST_STRENGTH_MAX 1000 26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 27cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi 28faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 29cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi/** 30cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi * returns true if this interface is not associated with an initialized BassBoost effect 31cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi */ 32cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivistatic inline bool NO_BASSBOOST(IBassBoost* v) { 33cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi return (v->mBassBoostEffect == 0); 34cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi} 35768edbc2a8e7f197548cf1141689dd237d19c455Glenn Kasten#endif 36cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi 37cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi 38a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IBassBoost_SetEnabled(SLBassBoostItf self, SLboolean enabled) 39a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 42bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 43bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 44bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mEnabled = (SLboolean) enabled; 45faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID) 46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 479cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#else 48bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (NO_BASSBOOST(thiz)) { 499cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 509cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } else { 51bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten android::status_t status = thiz->mBassBoostEffect->setEnabled((bool) thiz->mEnabled); 529cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = android_fx_statusToResult(status); 539cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 549cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 55bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 58a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 59a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 61a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IBassBoost_IsEnabled(SLBassBoostItf self, SLboolean *pEnabled) 62a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pEnabled) { 66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 68bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 69bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 70faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID) 7162496886cb4620c09bc5df0de70a883319616c25Aurimas Liutikas SLboolean enabled = thiz->mEnabled; 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pEnabled = enabled; 73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 749cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#else 75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (NO_BASSBOOST(thiz)) { 769cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 779cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } else { 78bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten *pEnabled = (SLboolean) thiz->mBassBoostEffect->getEnabled(); 799cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_SUCCESS; 809cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 819cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 82bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 83ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 86a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 87a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 89a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IBassBoost_SetStrength(SLBassBoostItf self, SLpermille strength) 90a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 939cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi if ((BASSBOOST_STRENGTH_MIN > strength) || (BASSBOOST_STRENGTH_MAX < strength)) { 94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 96bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 97bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 98faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID) 99bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mStrength = strength; 100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 1019cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#else 102bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (NO_BASSBOOST(thiz)) { 1039cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 1049cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } else { 1059cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi android::status_t status = 106bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten android_bb_setParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH, &strength); 1079cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = android_fx_statusToResult(status); 1089cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 1099cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 110bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 114a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 115a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 116ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 117d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IBassBoost_GetRoundedStrength(SLBassBoostItf self, SLpermille *pStrength) 118a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 119ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 120ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pStrength) { 122ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 123ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 124bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 125bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 126bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLpermille strength = thiz->mStrength;; 127faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID) 128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 1299cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#else 130bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (NO_BASSBOOST(thiz)) { 1319cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 1329cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } else { 1339cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi android::status_t status = 134bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten android_bb_getParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH, &strength); 1359cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = android_fx_statusToResult(status); 1369cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 1379cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 138bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 1399cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi *pStrength = strength; 140ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 141ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 142ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 143a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 144a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 145ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 146d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IBassBoost_IsStrengthSupported(SLBassBoostItf self, SLboolean *pSupported) 147a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 148ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 149ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 150ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pSupported) { 151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 152ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 153faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID) 154ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pSupported = SL_BOOLEAN_TRUE; 155ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 1569cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#else 157bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 1589cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi int32_t supported = 0; 159bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 160bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (NO_BASSBOOST(thiz)) { 1619cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 1629cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } else { 1639cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi android::status_t status = 164bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten android_bb_getParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH_SUPPORTED, 1659cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi &supported); 1669cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi result = android_fx_statusToResult(status); 1679cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 168bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 169cfe5b1c6f0b65499d9aed2cf4b2a7e805fb02758Jean-Michel Trivi *pSupported = (SLboolean) (supported != 0); 1709cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 171ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 172ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 173ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 174a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 175a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 176ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 177a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const struct SLBassBoostItf_ IBassBoost_Itf = { 178a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten IBassBoost_SetEnabled, 179a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten IBassBoost_IsEnabled, 180a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten IBassBoost_SetStrength, 181a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten IBassBoost_GetRoundedStrength, 182a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten IBassBoost_IsStrengthSupported 183a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 184a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 185a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenvoid IBassBoost_init(void *self) 186a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{ 187bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 188bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mItf = &IBassBoost_Itf; 189bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mEnabled = SL_BOOLEAN_FALSE; 190bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mStrength = 0; 191faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 192bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten memset(&thiz->mBassBoostDescriptor, 0, sizeof(effect_descriptor_t)); 193a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten // placement new (explicit constructor) 194bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten (void) new (&thiz->mBassBoostEffect) android::sp<android::AudioEffect>(); 195a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten#endif 196a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten} 1979cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi 198a9a70a4451545034c9263dd55b181f2912534c37Glenn Kastenvoid IBassBoost_deinit(void *self) 199a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten{ 200faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 201bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 202a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten // explicit destructor 203bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mBassBoostEffect.~sp(); 204a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten#endif 205a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten} 206a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten 207a9a70a4451545034c9263dd55b181f2912534c37Glenn Kastenbool IBassBoost_Expose(void *self) 208a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten{ 209faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 210bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IBassBoost *thiz = (IBassBoost *) self; 211bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (!android_fx_initEffectDescriptor(SL_IID_BASSBOOST, &thiz->mBassBoostDescriptor)) { 2129cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi SL_LOGE("BassBoost initialization failed."); 213a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten return false; 2149cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi } 2159cd3c9e7a2395647b92c32f33c06cf9fd546b22fJean-Michel Trivi#endif 216a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten return true; 217a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten} 218