182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten/*
282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Copyright (C) 2010 The Android Open Source Project
382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten *
482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * you may not use this file except in compliance with the License.
682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * You may obtain a copy of the License at
782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten *
882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten *
1082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Unless required by applicable law or agreed to in writing, software
1182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
1282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * See the License for the specific language governing permissions and
1482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * limitations under the License.
1582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten */
1682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
1782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten/* BassBoost implementation */
1882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
1982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten#include "sles_allinclusive.h"
2062b90b5c5b8495c12900c5d759fa341319e661b3Jean-Michel Trivi#ifdef ANDROID
2196309256bf532b3ce5ad706d7eb60b1dd70bf4b3Eric Laurent#include <audio_effects/effect_bassboost.h>
2262b90b5c5b8495c12900c5d759fa341319e661b3Jean-Michel Trivi#endif
2382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
24339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#define BASSBOOST_STRENGTH_MIN 0
25339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#define BASSBOOST_STRENGTH_MAX 1000
26f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
27f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi
280b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID)
29f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi/**
30f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi * returns true if this interface is not associated with an initialized BassBoost effect
31f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi */
32f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivistatic inline bool NO_BASSBOOST(IBassBoost* v) {
33f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi    return (v->mBassBoostEffect == 0);
34f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi}
35bc1596c33e134859d3ae3182d641b2dd03405b5dGlenn Kasten#endif
36f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi
37f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi
3882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IBassBoost_SetEnabled(SLBassBoostItf self, SLboolean enabled)
3982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
40f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
41f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
4250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    IBassBoost *thiz = (IBassBoost *) self;
4350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    interface_lock_exclusive(thiz);
4450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    thiz->mEnabled = (SLboolean) enabled;
450b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID)
46f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    result = SL_RESULT_SUCCESS;
47339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#else
4850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    if (NO_BASSBOOST(thiz)) {
49339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        result = SL_RESULT_CONTROL_LOST;
50339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi    } else {
5150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        android::status_t status = thiz->mBassBoostEffect->setEnabled((bool) thiz->mEnabled);
52339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        result = android_fx_statusToResult(status);
53339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi    }
54339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
5550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    interface_unlock_exclusive(thiz);
56f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
57f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
5882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
5982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
60f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
6182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IBassBoost_IsEnabled(SLBassBoostItf self, SLboolean *pEnabled)
6282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
63f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
64f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
65f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    if (NULL == pEnabled) {
66f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
67f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    } else {
6850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        IBassBoost *thiz = (IBassBoost *) self;
6950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_lock_exclusive(thiz);
7050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        SLboolean enabled = thiz->mEnabled;
710b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID)
72f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        *pEnabled = enabled;
73f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_SUCCESS;
74339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#else
7550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        if (NO_BASSBOOST(thiz)) {
76339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
77339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        } else {
7850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten            *pEnabled = (SLboolean) thiz->mBassBoostEffect->getEnabled();
79339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = SL_RESULT_SUCCESS;
80339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        }
81339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
8250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_unlock_exclusive(thiz);
83f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    }
84f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
85f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
8682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
8782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
88f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
8982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IBassBoost_SetStrength(SLBassBoostItf self, SLpermille strength)
9082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
91f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
92f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
93339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi    if ((BASSBOOST_STRENGTH_MIN > strength) || (BASSBOOST_STRENGTH_MAX < strength)) {
94f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
95f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    } else {
9650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        IBassBoost *thiz = (IBassBoost *) self;
9750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_lock_exclusive(thiz);
980b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID)
9950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        thiz->mStrength = strength;
100f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_SUCCESS;
101339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#else
10250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        if (NO_BASSBOOST(thiz)) {
103339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
104339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        } else {
105339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            android::status_t status =
10650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten                android_bb_setParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH, &strength);
107339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = android_fx_statusToResult(status);
108339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        }
109339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
11050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_unlock_exclusive(thiz);
111f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    }
112f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
113f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
11482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
11582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
116f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
117437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IBassBoost_GetRoundedStrength(SLBassBoostItf self, SLpermille *pStrength)
11882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
119f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
120f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
121f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    if (NULL == pStrength) {
122f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
123f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    } else {
12450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        IBassBoost *thiz = (IBassBoost *) self;
12550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_lock_exclusive(thiz);
12650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        SLpermille strength = thiz->mStrength;;
1270b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID)
128f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_SUCCESS;
129339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#else
13050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        if (NO_BASSBOOST(thiz)) {
131339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
132339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        } else {
133339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            android::status_t status =
13450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten                   android_bb_getParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH, &strength);
135339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = android_fx_statusToResult(status);
136339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        }
137339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
13850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_unlock_exclusive(thiz);
139339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        *pStrength = strength;
140f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    }
141f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
142f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
14382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
14482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
145f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
146437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IBassBoost_IsStrengthSupported(SLBassBoostItf self, SLboolean *pSupported)
14782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
148f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_ENTER_INTERFACE
149f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
150f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    if (NULL == pSupported) {
151f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
152f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    } else {
1530b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID)
154f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        *pSupported = SL_BOOLEAN_TRUE;
155f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten        result = SL_RESULT_SUCCESS;
156339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#else
15750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        IBassBoost *thiz = (IBassBoost *) self;
158339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        int32_t supported = 0;
15950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_lock_exclusive(thiz);
16050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        if (NO_BASSBOOST(thiz)) {
161339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
162339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        } else {
163339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            android::status_t status =
16450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten                android_bb_getParam(thiz->mBassBoostEffect, BASSBOOST_PARAM_STRENGTH_SUPPORTED,
165339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi                        &supported);
166339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi            result = android_fx_statusToResult(status);
167339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        }
16850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten        interface_unlock_exclusive(thiz);
169f78c9326cc333afd30346602bfbd419a17371b21Jean-Michel Trivi        *pSupported = (SLboolean) (supported != 0);
170339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
171f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    }
172f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
173f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten    SL_LEAVE_INTERFACE
17482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
17582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
176f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten
17782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic const struct SLBassBoostItf_ IBassBoost_Itf = {
17882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten    IBassBoost_SetEnabled,
17982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten    IBassBoost_IsEnabled,
18082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten    IBassBoost_SetStrength,
18182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten    IBassBoost_GetRoundedStrength,
18282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten    IBassBoost_IsStrengthSupported
18382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten};
18482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten
18582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenvoid IBassBoost_init(void *self)
18682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{
18750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    IBassBoost *thiz = (IBassBoost *) self;
18850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    thiz->mItf = &IBassBoost_Itf;
18950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    thiz->mEnabled = SL_BOOLEAN_FALSE;
19050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    thiz->mStrength = 0;
1910b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID)
19250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    memset(&thiz->mBassBoostDescriptor, 0, sizeof(effect_descriptor_t));
1932a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten    // placement new (explicit constructor)
19450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    (void) new (&thiz->mBassBoostEffect) android::sp<android::AudioEffect>();
1952a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten#endif
1962a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten}
197339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi
1982a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kastenvoid IBassBoost_deinit(void *self)
1992a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten{
2000b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID)
20150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    IBassBoost *thiz = (IBassBoost *) self;
2022a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten    // explicit destructor
20350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    thiz->mBassBoostEffect.~sp();
2042a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten#endif
2052a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten}
2062a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten
2072a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kastenbool IBassBoost_Expose(void *self)
2082a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten{
2090b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID)
21050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    IBassBoost *thiz = (IBassBoost *) self;
21150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten    if (!android_fx_initEffectDescriptor(SL_IID_BASSBOOST, &thiz->mBassBoostDescriptor)) {
212339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi        SL_LOGE("BassBoost initialization failed.");
2132a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten        return false;
214339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi    }
215339d65cd8bd7607b5959068825c6c5a55a3250afJean-Michel Trivi#endif
2162a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten    return true;
21782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}
218