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