IAndroidEffectSend.c revision f51dba65751107c930759938775b75531ec1f330
1fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi/* 2fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 3fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * 4fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * you may not use this file except in compliance with the License. 6fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * You may obtain a copy of the License at 7fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * 8fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * 10fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * See the License for the specific language governing permissions and 14fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi * limitations under the License. 15fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi */ 16fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 17fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi/* AndroidEffectSend implementation */ 18fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 19fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#include "sles_allinclusive.h" 20fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 21fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 22fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_EnableEffectSend(SLAndroidEffectSendItf self, 23fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLInterfaceID effectImplementationId, SLboolean enable, SLmillibel initialLevel) 24fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 25fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 26fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 27fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (!((SL_MILLIBEL_MIN <= initialLevel) && (initialLevel <= 0))) { 28fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 29fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 30fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 31fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_lock_exclusive(this); 32fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi // is SLAndroidEffectSendItf on an AudioPlayer? 33fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi CAudioPlayer *ap = (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(this)) ? 34fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi (CAudioPlayer *) this->mThis : NULL; 35fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL == ap) { 36fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LOGE("invalid interface: not attached to an AudioPlayer"); 37fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 38fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 39f51dba65751107c930759938775b75531ec1f330Glenn Kasten COutputMix *outputMix = CAudioPlayer_GetOutputMix(ap); 40fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#if !defined(ANDROID) || defined(USE_BACKPORT) 41f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_SUCCESS; 42fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#else 43f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = android_fxSend_attachToAux(ap, effectImplementationId, enable, initialLevel); 44fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#endif 45f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (SL_RESULT_SUCCESS == result) { 46f51dba65751107c930759938775b75531ec1f330Glenn Kasten // there currently is support for only one send bus, so there is a single send 47f51dba65751107c930759938775b75531ec1f330Glenn Kasten // level and a single enable flag 48f51dba65751107c930759938775b75531ec1f330Glenn Kasten this->mSendLevel = initialLevel; 49f51dba65751107c930759938775b75531ec1f330Glenn Kasten this->mEnabled = enable; 50fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 51fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 52fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive(this); 53fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 54fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 55fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 56fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 57fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 58fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 59fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_IsEnabled(SLAndroidEffectSendItf self, 60fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLInterfaceID effectImplementationId, SLboolean *pEnable) 61fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 62fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 63fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 64fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL == pEnable) { 65fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 66fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 67fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 68fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_lock_shared(this); 69fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi // there currently is support for only one send bus, so there is a single enable flag 70fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLboolean enable = this->mEnabled; 71fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_shared(this); 72fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi *pEnable = enable; 73fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_SUCCESS; 74fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 75fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 76fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 77fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 78fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 79fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 80fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_SetDirectLevel(SLAndroidEffectSendItf self, 81fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLmillibel directLevel) 82fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 83fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 84fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 85fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (!((SL_MILLIBEL_MIN <= directLevel) && (directLevel <= 0))) { 86fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 87fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 88fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 89fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_lock_exclusive(this); 90fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi CAudioPlayer *ap = (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(this)) ? 91fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi (CAudioPlayer *) this->mThis : NULL; 92fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL != ap) { 93fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLmillibel oldDirectLevel = ap->mDirectLevel; 94fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (oldDirectLevel != directLevel) { 95fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi ap->mDirectLevel = directLevel; 96fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi #if defined(ANDROID) 97fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi ap->mAmplFromDirectLevel = sles_to_android_amplification(directLevel); 98fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive_attributes(this, ATTR_GAIN); 99fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi #endif 100fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 101fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive(this); 102fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 103fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_SUCCESS; 104fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 105fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive(this); 106fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LOGE("invalid interface: not attached to an AudioPlayer"); 107fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 108fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 109fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 110fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 111fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 112fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 113fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 114fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 115fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_GetDirectLevel(SLAndroidEffectSendItf self, 116fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLmillibel *pDirectLevel) 117fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 118fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 119fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 120fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL == pDirectLevel) { 121fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 122fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 123fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 124fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_lock_peek(this); 125fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi CAudioPlayer *ap = (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(this)) ? 126fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi (CAudioPlayer *) this->mThis : NULL; 127fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL != ap) { 128fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi *pDirectLevel = ap->mDirectLevel; 129fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_SUCCESS; 130fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 131fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LOGE("invalid interface: not attached to an AudioPlayer"); 132fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 133fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 134fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive(this); 135fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 136fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 137fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 138fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 139fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 140fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 141fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_SetSendLevel(SLAndroidEffectSendItf self, 142fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLInterfaceID effectImplementationId, SLmillibel sendLevel) 143fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 144fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 145fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 146fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (!((SL_MILLIBEL_MIN <= sendLevel) && (sendLevel <= 0))) { 147fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 148fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 149fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 150f51dba65751107c930759938775b75531ec1f330Glenn Kasten interface_lock_exclusive(this); 151f51dba65751107c930759938775b75531ec1f330Glenn Kasten // is SLAndroidEffectSendItf on an AudioPlayer? 152f51dba65751107c930759938775b75531ec1f330Glenn Kasten CAudioPlayer *ap = (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(this)) ? 153fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi (CAudioPlayer *) this->mThis : NULL; 154f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (NULL == ap) { 155f51dba65751107c930759938775b75531ec1f330Glenn Kasten SL_LOGE("invalid interface: not attached to an AudioPlayer"); 156f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 157f51dba65751107c930759938775b75531ec1f330Glenn Kasten } else { 158f51dba65751107c930759938775b75531ec1f330Glenn Kasten COutputMix *outputMix = CAudioPlayer_GetOutputMix(ap); 159fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi #if !defined(ANDROID) || defined(USE_BACKPORT) 160f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_SUCCESS; 161fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi #else 162f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (android_genericFx_hasEffect(&outputMix->mAndroidEffect, effectImplementationId)) { 163f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = android_fxSend_setSendLevel(ap, sendLevel); 164f51dba65751107c930759938775b75531ec1f330Glenn Kasten } else { 165f51dba65751107c930759938775b75531ec1f330Glenn Kasten SL_LOGE("trying to send to an effect not on this AudioPlayer's OutputMix"); 166f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 167f51dba65751107c930759938775b75531ec1f330Glenn Kasten } 168fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi #endif 169f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (SL_RESULT_SUCCESS == result) { 170f51dba65751107c930759938775b75531ec1f330Glenn Kasten // there currently is support for only one send bus, so there is a single send 171f51dba65751107c930759938775b75531ec1f330Glenn Kasten // level 172f51dba65751107c930759938775b75531ec1f330Glenn Kasten this->mSendLevel = sendLevel; 173f51dba65751107c930759938775b75531ec1f330Glenn Kasten } 174f51dba65751107c930759938775b75531ec1f330Glenn Kasten } 175f51dba65751107c930759938775b75531ec1f330Glenn Kasten interface_unlock_exclusive(this); 176fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 177fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 178fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 179fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 180fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 181fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 182fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic SLresult IAndroidEffectSend_GetSendLevel(SLAndroidEffectSendItf self, 183fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SLInterfaceID effectImplementationId, SLmillibel *pSendLevel) 184fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 185fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_ENTER_INTERFACE 186fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 187fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL == pSendLevel) { 188fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 189fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 190fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 191fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_lock_exclusive(this); 192fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi // is SLAndroidEffectSendItf on an AudioPlayer? 193fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi CAudioPlayer *ap = (SL_OBJECTID_AUDIOPLAYER == InterfaceToObjectID(this)) ? 194fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi (CAudioPlayer *) this->mThis : NULL; 195fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi if (NULL == ap) { 196fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LOGE("invalid interface: not attached to an AudioPlayer"); 197fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 198fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } else { 199f51dba65751107c930759938775b75531ec1f330Glenn Kasten COutputMix *outputMix = CAudioPlayer_GetOutputMix(ap); 200fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#if !defined(ANDROID) || defined(USE_BACKPORT) 201f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_SUCCESS; 202fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#else 203f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (android_genericFx_hasEffect(&outputMix->mAndroidEffect, effectImplementationId)) { 204f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_SUCCESS; 205f51dba65751107c930759938775b75531ec1f330Glenn Kasten } else { 206f51dba65751107c930759938775b75531ec1f330Glenn Kasten SL_LOGE("trying to retrieve send level on an effect not on this AudioPlayer's \ 207fef6033d852daec8d88060b252e72f322724dca1Jean-Michel TriviOutputMix"); 208f51dba65751107c930759938775b75531ec1f330Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 209fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 210fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi#endif 211f51dba65751107c930759938775b75531ec1f330Glenn Kasten if (SL_RESULT_SUCCESS == result) { 212f51dba65751107c930759938775b75531ec1f330Glenn Kasten // there currently is support for only one send bus, so there is a single send 213f51dba65751107c930759938775b75531ec1f330Glenn Kasten // level 214f51dba65751107c930759938775b75531ec1f330Glenn Kasten *pSendLevel = this->mSendLevel; 215fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 216fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 217fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi interface_unlock_exclusive(this); 218fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi } 219fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 220fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi SL_LEAVE_INTERFACE 221fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 222fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 223fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 224fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivistatic const struct SLAndroidEffectSendItf_ IAndroidEffectSend_Itf = { 225fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_EnableEffectSend, 226fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_IsEnabled, 227fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_SetDirectLevel, 228fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_GetDirectLevel, 229fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_SetSendLevel, 230fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend_GetSendLevel 231fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi}; 232fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi 233fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivivoid IAndroidEffectSend_init(void *self) 234fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi{ 235fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi IAndroidEffectSend *this = (IAndroidEffectSend *) self; 236fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi this->mItf = &IAndroidEffectSend_Itf; 237fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi this->mEnabled = SL_BOOLEAN_FALSE; 238fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi this->mSendLevel = SL_MILLIBEL_MIN; 239fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi} 240