182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten/* 282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * 482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * you may not use this file except in compliance with the License. 682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * You may obtain a copy of the License at 782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * 882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * 1082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * Unless required by applicable law or agreed to in writing, software 1182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 1282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * See the License for the specific language governing permissions and 1482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten * limitations under the License. 1582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten */ 1682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 1782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten/* EnvironmentalReverb implementation */ 1882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 1982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten#include "sles_allinclusive.h" 2062b90b5c5b8495c12900c5d759fa341319e661b3Jean-Michel Trivi#ifdef ANDROID 2196309256bf532b3ce5ad706d7eb60b1dd70bf4b3Eric Laurent#include <audio_effects/effect_environmentalreverb.h> 2262b90b5c5b8495c12900c5d759fa341319e661b3Jean-Michel Trivi#endif 2382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 2482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten// Note: all Set operations use exclusive not poke, 2582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten// because SetEnvironmentalReverbProperties is exclusive. 2682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten// It is safe for the Get operations to use peek, 2782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten// on the assumption that the block copy will atomically 2882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten// replace each word of the block. 2982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 30f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 310b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID) 32dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi/** 33dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi * returns true if this interface is not associated with an initialized EnvironmentalReverb effect 34dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi */ 35dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivistatic inline bool NO_ENVREVERB(IEnvironmentalReverb* ier) { 36dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi return (ier->mEnvironmentalReverbEffect == 0); 37dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi} 38dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 39dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 40dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 41437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IEnvironmentalReverb_SetRoomLevel(SLEnvironmentalReverbItf self, SLmillibel room) 4282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 43f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 44f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 45a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi //if (!(SL_MILLIBEL_MIN <= room && room <= 0)) { 46a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // comparison (SL_MILLIBEL_MIN <= room) is always true due to range of SLmillibel 47a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(room <= 0)) { 48f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 49f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 5050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 5150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 5250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.roomLevel = room; 530b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 54f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 55dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 5650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 57dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 58dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 5950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 60dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_ROOM_LEVEL, &room); 61dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 62dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 63dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 6450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 65f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 66f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 67f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 6882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 6982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 70f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 71437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IEnvironmentalReverb_GetRoomLevel(SLEnvironmentalReverbItf self, SLmillibel *pRoom) 7282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 73f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 74f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 75f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pRoom) { 76f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 77f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 7850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 7949b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 800b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 81f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 82dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 8350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 84dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 85dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 8650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 8750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_ROOM_LEVEL, &thiz->mProperties.roomLevel); 88dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 89dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 90dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 9150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pRoom = thiz->mProperties.roomLevel; 92dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 9349b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 94dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 95f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 96f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 97f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 9882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 9982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 100f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 10182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetRoomHFLevel( 10282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel roomHF) 10382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 104f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 105f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 106a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi //if (!(SL_MILLIBEL_MIN <= roomHF && roomHF <= 0)) { 107a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // comparison (SL_MILLIBEL_MIN <= roomHF) is always true due to range of SLmillibel 108a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(roomHF <= 0)) { 109f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 110f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 11150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 11250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 11350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.roomHFLevel = roomHF; 1140b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 115f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 116dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 11750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 118dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 119dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 12050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 121dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_ROOM_HF_LEVEL, &roomHF); 122dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 123dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 124dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 12550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 126f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 127f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 128f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 12982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 13082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 131f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 13282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetRoomHFLevel( 13382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel *pRoomHF) 13482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 135f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 136f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 137f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pRoomHF) { 138f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 139f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 14050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 14149b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 1420b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 143f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 144dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 14550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 146dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 147dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 14850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 14950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_ROOM_HF_LEVEL, &thiz->mProperties.roomHFLevel); 150dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 151dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 152dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 15350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pRoomHF = thiz->mProperties.roomHFLevel; 154dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 15549b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 156f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 157f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 158f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 15982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 16082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 161f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 16282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetDecayTime( 16382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond decayTime) 16482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 165f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 166f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 167f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(100 <= decayTime && decayTime <= 20000)) { 168f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 169f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 17050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 17150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 17250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.decayTime = decayTime; 1730b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 174f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 175dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 17650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 177dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 178dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 17950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 180dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_DECAY_TIME, &decayTime); 181dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 182dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 183dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 18450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 185f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 186f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 187f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 18882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 18982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 190f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 19182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetDecayTime( 19282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond *pDecayTime) 19382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 194f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 195f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 196f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pDecayTime) { 197f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 198f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 19950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 20049b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 2010b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 202f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 203dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 20450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 205dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 206dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 20750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 20850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_DECAY_TIME, &thiz->mProperties.decayTime); 209dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 210dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 211dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 21250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pDecayTime = thiz->mProperties.decayTime; 213dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 21449b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 215f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 216f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 217f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 21882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 21982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 220f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 22182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetDecayHFRatio( 22282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLpermille decayHFRatio) 22382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 224f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 225f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 226f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(100 <= decayHFRatio && decayHFRatio <= 2000)) { 227f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 228f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 22950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 23050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 23150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.decayHFRatio = decayHFRatio; 2320b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 233f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 234dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 23550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 236dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 237dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 23850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 239dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_DECAY_HF_RATIO, &decayHFRatio); 240dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 241dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 242dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 24350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 244f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 245f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 246f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 24782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 24882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 249f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 25082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetDecayHFRatio( 25182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLpermille *pDecayHFRatio) 25282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 253f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 254f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 255f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pDecayHFRatio) { 256f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 257f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 25850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 25949b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 2600b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 261f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 262dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 26350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 264dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 265dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 26650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 26750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_DECAY_HF_RATIO, &thiz->mProperties.decayHFRatio); 268dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 269dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 270dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 27150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pDecayHFRatio = thiz->mProperties.decayHFRatio; 272dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 27349b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 274f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 275f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 276f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 27782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 27882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 279f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 28082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetReflectionsLevel( 28182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel reflectionsLevel) 28282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 283f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 284f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 285a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi //if (!(SL_MILLIBEL_MIN <= reflectionsLevel && reflectionsLevel <= 1000)) { 286a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // comparison (SL_MILLIBEL_MIN <= reflectionsLevel) is always true due to range of SLmillibel 287a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(reflectionsLevel <= 1000)) { 288f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 289f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 29050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 29150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 29250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.reflectionsLevel = reflectionsLevel; 2930b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 294f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 295dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 29650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 297dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 298dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 29950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 300dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_REFLECTIONS_LEVEL, &reflectionsLevel); 301dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 302dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 303dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 30450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 305f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 306f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 307f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 30882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 30982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 310f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 31182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetReflectionsLevel( 31282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel *pReflectionsLevel) 31382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 314f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 315f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 316f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pReflectionsLevel) { 317f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 318f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 31950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 32049b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 3210b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 322f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 323dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 32450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 325dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 326dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 32750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 32850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_REFLECTIONS_LEVEL, &thiz->mProperties.reflectionsLevel); 329dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 330dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 331dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 33250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pReflectionsLevel = thiz->mProperties.reflectionsLevel; 333dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 33449b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 335f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 336f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 337f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 33882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 33982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 340f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 34182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetReflectionsDelay( 34282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond reflectionsDelay) 34382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 344f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 345f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 346f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(/* 0 <= reflectionsDelay && */ reflectionsDelay <= 300)) { 347f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 348f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 34950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 35050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 35150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.reflectionsDelay = reflectionsDelay; 3520b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 353f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 354dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 35550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 356dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 357dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 35850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 359dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_REFLECTIONS_DELAY, &reflectionsDelay); 360dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 361dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 362dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 36350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 364f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 365f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 366f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 36782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 36882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 369f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 37082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetReflectionsDelay( 37182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond *pReflectionsDelay) 37282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 373f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 374f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 375f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pReflectionsDelay) { 376f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 377f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 37850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 37949b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 3800b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 381f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 382dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 38350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 384dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 385dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 38650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 38750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_REFLECTIONS_DELAY, &thiz->mProperties.reflectionsDelay); 388dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 389dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 390dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 39150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pReflectionsDelay = thiz->mProperties.reflectionsDelay; 392dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 39349b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 394f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 395f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 396f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 39782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 39882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 399f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 40082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetReverbLevel( 40182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel reverbLevel) 40282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 403f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 404f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 405a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi //if (!(SL_MILLIBEL_MIN <= reverbLevel && reverbLevel <= 2000)) { 406a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // comparison (SL_MILLIBEL_MIN <= reverbLevel) is always true due to range of SLmillibel 407a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(reverbLevel <= 2000)) { 408f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 409f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 41050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 41150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 41250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.reverbLevel = reverbLevel; 4130b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 414f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 415dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 41650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 417dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 418dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 41950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 420dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_REVERB_LEVEL, &reverbLevel); 421dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 422dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 423dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 42450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 425f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 426f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 427f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 42882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 42982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 430f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 43182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetReverbLevel( 43282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillibel *pReverbLevel) 43382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 434f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 435f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 436f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pReverbLevel) { 437f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 438f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 43950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 44049b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 4410b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 442f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 443dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 44450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 445dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 446dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 44750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 44850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_REVERB_LEVEL, &thiz->mProperties.reverbLevel); 449dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 450dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 451dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 45250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pReverbLevel = thiz->mProperties.reverbLevel; 453dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 45449b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 455f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 456f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 457f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 45882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 45982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 460f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 46182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetReverbDelay( 46282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond reverbDelay) 46382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 464f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 465f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 466f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(/* 0 <= reverbDelay && */ reverbDelay <= 100)) { 467f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 468f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 46950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 47050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 47150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.reverbDelay = reverbDelay; 4720b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 473f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 474dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 47550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 476dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 477dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 47850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 479dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_REVERB_DELAY, &reverbDelay); 480dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 481dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 482dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 48350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 484f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 485f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 486f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 48782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 48882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 489f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 49082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetReverbDelay( 49182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLmillisecond *pReverbDelay) 49282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 493f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 494f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 495f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pReverbDelay) { 496f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 497f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 49850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 49949b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 5000b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 501f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 502dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 50350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 504dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 505dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 50650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 50750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_REVERB_DELAY, &thiz->mProperties.reverbDelay); 508dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 509dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 510dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 51150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pReverbDelay = thiz->mProperties.reverbDelay; 512dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 51349b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 514f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 515f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 516f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 51782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 51882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 519f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 52082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetDiffusion( 52182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLpermille diffusion) 52282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 523f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 524f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 525f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(0 <= diffusion && diffusion <= 1000)) { 526f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 527f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 52850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 52950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 53050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties.diffusion = diffusion; 5310b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 532f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 533dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 53450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 535dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 536dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 53750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 538dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_DIFFUSION, &diffusion); 539dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 540dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 541dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 54250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 543f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 544f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 545f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 54682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 54782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 548f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 54982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetDiffusion(SLEnvironmentalReverbItf self, 55082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLpermille *pDiffusion) 55182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 552f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 553f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 554f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pDiffusion) { 555f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 556f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 55750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 55849b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 5590b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 560f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 561dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 56250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 563dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 564dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 56550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 56650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_DIFFUSION, &thiz->mProperties.diffusion); 567dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 568dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 569dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 57050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pDiffusion = thiz->mProperties.diffusion; 571dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 57249b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 573f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 574f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 575f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 57682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 57782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 578f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 57982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_SetDensity(SLEnvironmentalReverbItf self, 58082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLpermille density) 58182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 582f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 583f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 584f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(0 <= density && density <= 1000)) { 585f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 586f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 58750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 58850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 589f280d9aebcc747d7bce039a6afc6bf83cd37986dGlenn Kasten thiz->mProperties.density = density; 5900b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 591dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_SUCCESS; 592dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 59350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 594dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 595dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 59650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 597dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_DENSITY, &density); 598dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 599dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 600dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 60150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 602f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 603f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 604f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 60582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 60682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 607f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 60882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetDensity(SLEnvironmentalReverbItf self, 60982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLpermille *pDensity) 61082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 611f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 612f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 613f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pDensity) { 614f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 615f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 61650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 61749b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_lock_shared(thiz); 6180b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 619f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 620dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 62150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 622dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 623dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 62450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 62550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_DENSITY, &thiz->mProperties.density); 626dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 627dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 628dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 62950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pDensity = thiz->mProperties.density; 630dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 63149b757f033c398a9a5917fa9677a7075c4c85d93Glenn Kasten interface_unlock_shared(thiz); 632f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 633f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 634f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 63582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 63682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 637f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 638437f9ab9914ea61112aa496a047162a0d22194cdGlenn Kastenstatic SLresult IEnvironmentalReverb_SetEnvironmentalReverbProperties(SLEnvironmentalReverbItf self, 63982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten const SLEnvironmentalReverbSettings *pProperties) 64082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 641f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 642f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 643a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // note that it's unnecessary to verify that any level stored inside the "properties" struct 644a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi // is >= SL_MILLIBEL_MIN before using it, due to range of SLmillibel 645a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi 646f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 647f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten do { 648f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pProperties) 649f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 650f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SLEnvironmentalReverbSettings properties = *pProperties; 651a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(properties.roomLevel <= 0)) 652f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 653a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(properties.roomHFLevel <= 0)) 654f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 655f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(100 <= properties.decayTime && properties.decayTime <= 20000)) 656f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 657f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(100 <= properties.decayHFRatio && properties.decayHFRatio <= 2000)) 658f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 659a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(properties.reflectionsLevel <= 1000)) 660f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 661f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(/* 0 <= properties.reflectionsDelay && */ properties.reflectionsDelay <= 300)) 662f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 663a49076b1d6f829322021ac4eb4dc751b4670cdc2Jean-Michel Trivi if (!(properties.reverbLevel <= 2000)) 664f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 665f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(/* 0 <= properties.reverbDelay && */ properties.reverbDelay <= 100)) 666f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 667f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(0 <= properties.diffusion && properties.diffusion <= 1000)) 668f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 669f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (!(0 <= properties.density && properties.density <= 1000)) 670f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten break; 67150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 67250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_exclusive(thiz); 67350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties = properties; 6740b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 675f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 676dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 67750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 678dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 679dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 68050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_setParam(thiz->mEnvironmentalReverbEffect, 681dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi REVERB_PARAM_PROPERTIES, &properties); 682dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 683dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 684dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 68550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_exclusive(thiz); 686f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } while (0); 687f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 688f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 68982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 69082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 691f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 69282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic SLresult IEnvironmentalReverb_GetEnvironmentalReverbProperties( 69382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SLEnvironmentalReverbItf self, SLEnvironmentalReverbSettings *pProperties) 69482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 695f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_ENTER_INTERFACE 696f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 697f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten if (NULL == pProperties) { 698f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 699f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } else { 70050bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 70150bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_lock_shared(thiz); 7020b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if !defined(ANDROID) 703f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten result = SL_RESULT_SUCCESS; 704dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#else 70550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten if (NO_ENVREVERB(thiz)) { 706dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = SL_RESULT_CONTROL_LOST; 707dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } else { 70850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten android::status_t status = android_erev_getParam(thiz->mEnvironmentalReverbEffect, 70950bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten REVERB_PARAM_PROPERTIES, &thiz->mProperties); 710dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi result = android_fx_statusToResult(status); 711dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 712dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 71350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten *pProperties = thiz->mProperties; 714dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 71550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten interface_unlock_shared(thiz); 716f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten } 717f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 718f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten SL_LEAVE_INTERFACE 71982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 72082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 721f156301680273e71e56e898f98798f5b5b2431f6Glenn Kasten 72282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic const struct SLEnvironmentalReverbItf_ IEnvironmentalReverb_Itf = { 72382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetRoomLevel, 72482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetRoomLevel, 72582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetRoomHFLevel, 72682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetRoomHFLevel, 72782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetDecayTime, 72882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetDecayTime, 72982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetDecayHFRatio, 73082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetDecayHFRatio, 73182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetReflectionsLevel, 73282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetReflectionsLevel, 73382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetReflectionsDelay, 73482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetReflectionsDelay, 73582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetReverbLevel, 73682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetReverbLevel, 73782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetReverbDelay, 73882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetReverbDelay, 73982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetDiffusion, 74082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetDiffusion, 74182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetDensity, 74282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetDensity, 74382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_SetEnvironmentalReverbProperties, 74482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten IEnvironmentalReverb_GetEnvironmentalReverbProperties 74582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}; 74682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 74782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenstatic const SLEnvironmentalReverbSettings IEnvironmentalReverb_default = { 74882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SL_MILLIBEL_MIN, // roomLevel 74982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 0, // roomHFLevel 75082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 1000, // decayTime 75182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 500, // decayHFRatio 75282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SL_MILLIBEL_MIN, // reflectionsLevel 75382b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 20, // reflectionsDelay 75482b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten SL_MILLIBEL_MIN, // reverbLevel 75582b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 40, // reverbDelay 75682b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 1000, // diffusion 75782b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 1000 // density 75882b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten}; 75982b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten 76082b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kastenvoid IEnvironmentalReverb_init(void *self) 76182b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten{ 76250bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 76350bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mItf = &IEnvironmentalReverb_Itf; 76450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mProperties = IEnvironmentalReverb_default; 7650b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID) 76650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten memset(&thiz->mEnvironmentalReverbDescriptor, 0, sizeof(effect_descriptor_t)); 7672a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten // placement new (explicit constructor) 76850bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten (void) new (&thiz->mEnvironmentalReverbEffect) android::sp<android::AudioEffect>(); 7692a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten#endif 7702a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten} 771dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi 7722a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kastenvoid IEnvironmentalReverb_deinit(void *self) 7732a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten{ 7740b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID) 77550bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 7762a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten // explicit destructor 77750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten thiz->mEnvironmentalReverbEffect.~sp(); 7782a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten#endif 7792a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten} 7802a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten 7812a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kastenbool IEnvironmentalReverb_Expose(void *self) 7822a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten{ 7830b718abd78bd3e4022008fe0492fb76b265d26d1Glenn Kasten#if defined(ANDROID) 78450bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten IEnvironmentalReverb *thiz = (IEnvironmentalReverb *) self; 785dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi if (!android_fx_initEffectDescriptor(SL_IID_ENVIRONMENTALREVERB, 78650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kasten &thiz->mEnvironmentalReverbDescriptor)) { 787dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi SL_LOGE("EnvironmentalReverb initialization failed."); 7882a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten return false; 789dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi } 790dffefbd7b3b885526df4e9df09b0e089ed422027Jean-Michel Trivi#endif 7912a25d97e40dbd5dd9195195a3a269095a4932097Glenn Kasten return true; 79282b1fcaca1b9c870c1a7978f0986fdad2fe7d06eGlenn Kasten} 793