IEnvironmentalReverb.c revision faf90312d2156acbf27c62e114fd180708aa7654
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/* EnvironmentalReverb implementation */
18a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
19a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include "sles_allinclusive.h"
20a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
21a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten// Note: all Set operations use exclusive not poke,
22a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten// because SetEnvironmentalReverbProperties is exclusive.
23a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten// It is safe for the Get operations to use peek,
24a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten// on the assumption that the block copy will atomically
25a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten// replace each word of the block.
26a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
28faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID)
29f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi/**
30f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi * returns true if this interface is not associated with an initialized EnvironmentalReverb effect
31f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi */
32f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivistatic inline bool NO_ENVREVERB(IEnvironmentalReverb* ier) {
33f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi    return (ier->mEnvironmentalReverbEffect == 0);
34f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi}
35f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
36f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
37f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
38d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IEnvironmentalReverb_SetRoomLevel(SLEnvironmentalReverbItf self, SLmillibel room)
39a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(SL_MILLIBEL_MIN <= room && room <= 0)) {
43ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
47ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.roomLevel = room;
48faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
50f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
51f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
52f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
53f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
54f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
55f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_ROOM_LEVEL, &room);
56f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
57f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
58f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
59f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
62ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
63a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
64a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
66d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IEnvironmentalReverb_GetRoomLevel(SLEnvironmentalReverbItf self, SLmillibel *pRoom)
67a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pRoom) {
71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
74ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
75faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
76ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
77f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
78f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
79f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
80f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
81f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
82f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_ROOM_LEVEL, &this->mProperties.roomLevel);
83f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
84f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
85f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
86f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pRoom = this->mProperties.roomLevel;
87f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
88f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
89f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
90ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
93a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
94a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
96a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetRoomHFLevel(
97a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel roomHF)
98a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
99ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
101ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(SL_MILLIBEL_MIN <= roomHF && roomHF <= 0)) {
102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
105ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.roomHFLevel = roomHF;
107faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
108ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
109f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
110f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
111f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
112f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
113f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
114f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_ROOM_HF_LEVEL, &roomHF);
115f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
116f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
117f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
118f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
119ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
120ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
122a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
123a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
124ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
125a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetRoomHFLevel(
126a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel *pRoomHF)
127a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
129ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
130ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pRoomHF) {
131ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
132ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
133ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
134ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
135faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
136ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
137f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
138f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
139f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
140f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
141f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
142f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_ROOM_HF_LEVEL, &this->mProperties.roomHFLevel);
143f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
144f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
145f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
146f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pRoomHF = this->mProperties.roomHFLevel;
147f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
148f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
149ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
150ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
152a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
153a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
154ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
155a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetDecayTime(
156a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond decayTime)
157a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
158ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
159ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
160ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(100 <= decayTime && decayTime <= 20000)) {
161ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
162ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
163ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
164ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
165ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.decayTime = decayTime;
166faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
167ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
168f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
169f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
170f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
171f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
172f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
173f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DECAY_TIME, &decayTime);
174f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
175f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
176f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
177f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
178ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
179ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
180ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
181a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
182a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
183ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
184a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetDecayTime(
185a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond *pDecayTime)
186a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
187ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
188ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
189ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pDecayTime) {
190ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
191ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
192ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
193ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
194faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
195ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
196f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
197f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
198f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
199f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
200f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
201f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DECAY_TIME, &this->mProperties.decayTime);
202f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
203f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
204f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
205f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pDecayTime = this->mProperties.decayTime;
206f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
207f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
208ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
209ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
210ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
211a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
212a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
213ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
214a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetDecayHFRatio(
215a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLpermille decayHFRatio)
216a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
217ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
218ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
219ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(100 <= decayHFRatio && decayHFRatio <= 2000)) {
220ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
221ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
222ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
223ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
224ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.decayHFRatio = decayHFRatio;
225faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
226ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
227f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
228f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
229f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
230f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
231f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
232f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DECAY_HF_RATIO, &decayHFRatio);
233f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
234f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
235f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
236f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
237ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
238ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
239ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
240a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
241a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
242ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
243a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetDecayHFRatio(
244a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLpermille *pDecayHFRatio)
245a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
246ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
247ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
248ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pDecayHFRatio) {
249ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
250ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
251ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
252ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
253faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
254ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
255f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
256f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
257f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
258f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
259f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
260f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DECAY_HF_RATIO, &this->mProperties.decayHFRatio);
261f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
262f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
263f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
264f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pDecayHFRatio = this->mProperties.decayHFRatio;
265f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
266f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
267ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
268ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
269ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
270a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
271a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
272ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
273a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetReflectionsLevel(
274a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel reflectionsLevel)
275a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
276ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
277ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
278ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(SL_MILLIBEL_MIN <= reflectionsLevel && reflectionsLevel <= 1000)) {
279ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
280ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
281ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
282ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
283ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.reflectionsLevel = reflectionsLevel;
284faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
285ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
286f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
287f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
288f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
289f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
290f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
291f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REFLECTIONS_LEVEL, &reflectionsLevel);
292f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
293f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
294f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
295f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
296ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
297ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
298ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
299a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
300a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
301ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
302a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetReflectionsLevel(
303a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel *pReflectionsLevel)
304a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
305ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
306ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
307ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pReflectionsLevel) {
308ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
309ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
310ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
311ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
312faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
313ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
314f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
315f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
316f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
317f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
318f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
319f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REFLECTIONS_LEVEL, &this->mProperties.reflectionsLevel);
320f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
321f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
322f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
323f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pReflectionsLevel = this->mProperties.reflectionsLevel;
324f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
325f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
326ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
327ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
328ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
329a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
330a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
331ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
332a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetReflectionsDelay(
333a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond reflectionsDelay)
334a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
335ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
336ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
337ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(/* 0 <= reflectionsDelay && */ reflectionsDelay <= 300)) {
338ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
339ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
340ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
341ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
342ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.reflectionsDelay = reflectionsDelay;
343faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
344ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
345f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
346f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
347f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
348f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
349f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
350f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REFLECTIONS_DELAY, &reflectionsDelay);
351f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
352f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
353f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
354f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
355ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
356ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
357ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
358a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
359a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
360ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
361a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetReflectionsDelay(
362a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond *pReflectionsDelay)
363a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
364ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
365ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
366ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pReflectionsDelay) {
367ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
368ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
369ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
370ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
371faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
372ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
373f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
374f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
375f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
376f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
377f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
378f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REFLECTIONS_DELAY, &this->mProperties.reflectionsDelay);
379f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
380f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
381f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
382f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pReflectionsDelay = this->mProperties.reflectionsDelay;
383f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
384f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
385ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
386ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
387ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
388a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
389a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
390ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
391a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetReverbLevel(
392a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel reverbLevel)
393a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
394ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
395ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
396ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(SL_MILLIBEL_MIN <= reverbLevel && reverbLevel <= 2000)) {
397ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
398ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
399ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
400ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
401ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.reverbLevel = reverbLevel;
402faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
403ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
404f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
405f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
406f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
407f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
408f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
409f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REVERB_LEVEL, &reverbLevel);
410f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
411f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
412f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
413f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
414ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
415ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
416ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
417a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
418a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
419ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
420a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetReverbLevel(
421a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillibel *pReverbLevel)
422a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
423ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
424ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
425ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pReverbLevel) {
426ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
427ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
428ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
429ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
430faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
431ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
432f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
433f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
434f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
435f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
436f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
437f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REVERB_LEVEL, &this->mProperties.reverbLevel);
438f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
439f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
440f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
441f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pReverbLevel = this->mProperties.reverbLevel;
442f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
443f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
444ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
445ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
446ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
447a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
448a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
449ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
450a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetReverbDelay(
451a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond reverbDelay)
452a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
453ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
454ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
455ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(/* 0 <= reverbDelay && */ reverbDelay <= 100)) {
456ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
457ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
458ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
459ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
460ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.reverbDelay = reverbDelay;
461faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
462ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
463f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
464f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
465f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
466f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
467f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
468f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REVERB_DELAY, &reverbDelay);
469f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
470f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
471f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
472f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
473ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
474ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
475ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
476a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
477a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
478ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
479a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetReverbDelay(
480a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLmillisecond *pReverbDelay)
481a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
482ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
483ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
484ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pReverbDelay) {
485ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
486ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
487ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
488ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
489faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
490ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
491f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
492f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
493f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
494f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
495f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
496f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_REVERB_DELAY, &this->mProperties.reverbDelay);
497f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
498f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
499f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
500f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pReverbDelay = this->mProperties.reverbDelay;
501f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
502f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
503ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
504ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
505ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
506a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
507a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
508ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
509a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetDiffusion(
510a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLpermille diffusion)
511a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
512ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
513ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
514ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(0 <= diffusion && diffusion <= 1000)) {
515ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
516ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
517ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
518ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
519ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties.diffusion = diffusion;
520faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
521ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
522f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
523f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
524f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
525f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
526f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
527f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DIFFUSION, &diffusion);
528f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
529f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
530f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
531f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
532ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
533ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
534ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
535a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
536a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
537ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
538a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetDiffusion(SLEnvironmentalReverbItf self,
539a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten     SLpermille *pDiffusion)
540a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
541ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
542ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
543ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pDiffusion) {
544ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
545ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
546ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
547ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
548faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
549ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
550f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
551f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
552f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
553f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
554f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
555f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DIFFUSION, &this->mProperties.diffusion);
556f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
557f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
558f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
559f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pDiffusion = this->mProperties.diffusion;
560f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
561f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
562ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
563ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
564ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
565a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
566a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
567ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
568a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_SetDensity(SLEnvironmentalReverbItf self,
569a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLpermille density)
570a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
571ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
572ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
573ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (!(0 <= density && density <= 1000)) {
574ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
575ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
576ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
577ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
578faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
579f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        result = SL_RESULT_SUCCESS;
580f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
581f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
582f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
583f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
584f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
585f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DENSITY, &density);
586f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
587f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
588f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
589ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_unlock_exclusive(this);
590ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
591ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
592ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
593a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
594a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
595ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
596a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetDensity(SLEnvironmentalReverbItf self,
597a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLpermille *pDensity)
598a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
599ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
600ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
601ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pDensity) {
602ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
603ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
604ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
605ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_peek(this);
606faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
607ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
608f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
609f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
610f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
611f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
612f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
613f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_DENSITY, &this->mProperties.density);
614f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
615f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
616f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
617f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pDensity = this->mProperties.density;
618f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
619f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_peek(this);
620ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
621ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
622ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
623a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
624a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
625ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
626d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kastenstatic SLresult IEnvironmentalReverb_SetEnvironmentalReverbProperties(SLEnvironmentalReverbItf self,
627a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    const SLEnvironmentalReverbSettings *pProperties)
628a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
629ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
630ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
631ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    result = SL_RESULT_PARAMETER_INVALID;
632ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    do {
633ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (NULL == pProperties)
634ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
635ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        SLEnvironmentalReverbSettings properties = *pProperties;
636ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(SL_MILLIBEL_MIN <= properties.roomLevel && properties.roomLevel <= 0))
637ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
638ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(SL_MILLIBEL_MIN <= properties.roomHFLevel && properties.roomHFLevel <= 0))
639ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
640ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(100 <= properties.decayTime && properties.decayTime <= 20000))
641ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
642ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(100 <= properties.decayHFRatio && properties.decayHFRatio <= 2000))
643ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
644ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(SL_MILLIBEL_MIN <= properties.reflectionsLevel &&
645ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            properties.reflectionsLevel <= 1000))
646ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
647ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(/* 0 <= properties.reflectionsDelay && */ properties.reflectionsDelay <= 300))
648ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
649ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(SL_MILLIBEL_MIN <= properties.reverbLevel && properties.reverbLevel <= 2000))
650ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
651ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(/* 0 <= properties.reverbDelay && */ properties.reverbDelay <= 100))
652ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
653ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(0 <= properties.diffusion && properties.diffusion <= 1000))
654ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
655ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (!(0 <= properties.density && properties.density <= 1000))
656ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            break;
657ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
658ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_exclusive(this);
659ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        this->mProperties = properties;
660faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
661ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
662f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
663f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
664f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
665f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
666f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_setParam(this->mEnvironmentalReverbEffect,
667f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_PROPERTIES, &properties);
668f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
669f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
670f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
671f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        interface_unlock_exclusive(this);
672ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } while (0);
673ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
674ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
675a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
676a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
677ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
678a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic SLresult IEnvironmentalReverb_GetEnvironmentalReverbProperties(
679a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SLEnvironmentalReverbItf self, SLEnvironmentalReverbSettings *pProperties)
680a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
681ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_ENTER_INTERFACE
682ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
683ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    if (NULL == pProperties) {
684ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_PARAMETER_INVALID;
685ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    } else {
686ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
687ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        interface_lock_shared(this);
688faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if !defined(ANDROID)
689ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        result = SL_RESULT_SUCCESS;
690f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#else
691f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        if (NO_ENVREVERB(this)) {
692f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = SL_RESULT_CONTROL_LOST;
693f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        } else {
694f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            android::status_t status = android_erev_getParam(this->mEnvironmentalReverbEffect,
695f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi                    REVERB_PARAM_PROPERTIES, &this->mProperties);
696f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            result = android_fx_statusToResult(status);
697f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        }
698f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
699f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        *pProperties = this->mProperties;
700f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
7019e60b0a390d780539459f41c2bf4a45a326a7b62Glenn Kasten        interface_unlock_shared(this);
702ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
703ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
704ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    SL_LEAVE_INTERFACE
705a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
706a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
707ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
708a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const struct SLEnvironmentalReverbItf_ IEnvironmentalReverb_Itf = {
709a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetRoomLevel,
710a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetRoomLevel,
711a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetRoomHFLevel,
712a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetRoomHFLevel,
713a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetDecayTime,
714a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetDecayTime,
715a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetDecayHFRatio,
716a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetDecayHFRatio,
717a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetReflectionsLevel,
718a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetReflectionsLevel,
719a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetReflectionsDelay,
720a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetReflectionsDelay,
721a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetReverbLevel,
722a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetReverbLevel,
723a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetReverbDelay,
724a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetReverbDelay,
725a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetDiffusion,
726a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetDiffusion,
727a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetDensity,
728a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetDensity,
729a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_SetEnvironmentalReverbProperties,
730a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb_GetEnvironmentalReverbProperties
731a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten};
732a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
733a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLEnvironmentalReverbSettings IEnvironmentalReverb_default = {
734a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SL_MILLIBEL_MIN, // roomLevel
735a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    0,               // roomHFLevel
736a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    1000,            // decayTime
737a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    500,             // decayHFRatio
738a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SL_MILLIBEL_MIN, // reflectionsLevel
739a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    20,              // reflectionsDelay
740a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    SL_MILLIBEL_MIN, // reverbLevel
741a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    40,              // reverbDelay
742a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    1000,            // diffusion
743a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    1000             // density
744a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten};
745a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten
746a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenvoid IEnvironmentalReverb_init(void *self)
747a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten{
748a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
749a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    this->mItf = &IEnvironmentalReverb_Itf;
750a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten    this->mProperties = IEnvironmentalReverb_default;
751faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID)
752a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    memset(&this->mEnvironmentalReverbDescriptor, 0, sizeof(effect_descriptor_t));
753a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    // placement new (explicit constructor)
754a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    (void) new (&this->mEnvironmentalReverbEffect) android::sp<android::AudioEffect>();
755a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten#endif
756a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten}
757f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi
758a9a70a4451545034c9263dd55b181f2912534c37Glenn Kastenvoid IEnvironmentalReverb_deinit(void *self)
759a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten{
760faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID)
761a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
762a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    // explicit destructor
763a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    this->mEnvironmentalReverbEffect.~sp();
764a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten#endif
765a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten}
766a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten
767a9a70a4451545034c9263dd55b181f2912534c37Glenn Kastenbool IEnvironmentalReverb_Expose(void *self)
768a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten{
769faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID)
770a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    IEnvironmentalReverb *this = (IEnvironmentalReverb *) self;
771f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi    if (!android_fx_initEffectDescriptor(SL_IID_ENVIRONMENTALREVERB,
772f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi            &this->mEnvironmentalReverbDescriptor)) {
773f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi        SL_LOGE("EnvironmentalReverb initialization failed.");
774a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten        return false;
775f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi    }
776f5afeef3bb2aafba9b4e7c25ab3b9dcf42ee8d65Jean-Michel Trivi#endif
777a9a70a4451545034c9263dd55b181f2912534c37Glenn Kasten    return true;
778a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}
779