1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* AndroidConfiguration implementation */ 18 19 #include "sles_allinclusive.h" 20 21 22 static SLresult IAndroidConfiguration_SetConfiguration(SLAndroidConfigurationItf self, 23 const SLchar *configKey, 24 const void *pConfigValue, 25 SLuint32 valueSize) 26 { 27 SL_ENTER_INTERFACE 28 29 // object-specific code will check that valueSize is large enough for the key 30 if (NULL == configKey || NULL == pConfigValue || valueSize == 0) { 31 result = SL_RESULT_PARAMETER_INVALID; 32 33 } else { 34 IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 35 interface_lock_exclusive(thiz); 36 37 // route configuration to the appropriate object 38 switch (IObjectToObjectID((thiz)->mThis)) { 39 case SL_OBJECTID_AUDIORECORDER: 40 SL_LOGV("SetConfiguration issued for AudioRecorder key=%s valueSize=%u", 41 configKey, valueSize); 42 result = android_audioRecorder_setConfig((CAudioRecorder *) thiz->mThis, configKey, 43 pConfigValue, valueSize); 44 break; 45 case SL_OBJECTID_AUDIOPLAYER: 46 SL_LOGV("SetConfiguration issued for AudioPlayer key=%s valueSize=%u", 47 configKey, valueSize); 48 result = android_audioPlayer_setConfig((CAudioPlayer *) thiz->mThis, configKey, 49 pConfigValue, valueSize); 50 break; 51 default: 52 result = SL_RESULT_FEATURE_UNSUPPORTED; 53 break; 54 } 55 56 interface_unlock_exclusive(thiz); 57 } 58 59 SL_LEAVE_INTERFACE 60 } 61 62 63 static SLresult IAndroidConfiguration_GetConfiguration(SLAndroidConfigurationItf self, 64 const SLchar *configKey, 65 SLuint32 *pValueSize, 66 void *pConfigValue) 67 { 68 SL_ENTER_INTERFACE 69 70 // non-NULL pValueSize is required, but a NULL pConfigValue is allowed, so 71 // that we can report the actual value size without returning the value itself 72 if (NULL == configKey || NULL == pValueSize) { 73 result = SL_RESULT_PARAMETER_INVALID; 74 } else { 75 IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 76 interface_lock_exclusive(thiz); 77 78 // route configuration request to the appropriate object 79 switch (IObjectToObjectID((thiz)->mThis)) { 80 case SL_OBJECTID_AUDIORECORDER: 81 result = android_audioRecorder_getConfig((CAudioRecorder *) thiz->mThis, configKey, 82 pValueSize, pConfigValue); 83 break; 84 case SL_OBJECTID_AUDIOPLAYER: 85 result = android_audioPlayer_getConfig((CAudioPlayer *) thiz->mThis, configKey, 86 pValueSize, pConfigValue); 87 default: 88 result = SL_RESULT_FEATURE_UNSUPPORTED; 89 break; 90 } 91 92 interface_unlock_exclusive(thiz); 93 } 94 95 SL_LEAVE_INTERFACE 96 } 97 98 99 static const struct SLAndroidConfigurationItf_ IAndroidConfiguration_Itf = { 100 IAndroidConfiguration_SetConfiguration, 101 IAndroidConfiguration_GetConfiguration 102 }; 103 104 void IAndroidConfiguration_init(void *self) 105 { 106 IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 107 thiz->mItf = &IAndroidConfiguration_Itf; 108 } 109