142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi/* 242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * 442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * you may not use this file except in compliance with the License. 642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * You may obtain a copy of the License at 742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * 842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * 1042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * See the License for the specific language governing permissions and 1442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi * limitations under the License. 1542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi */ 1642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 1742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi/* AndroidConfiguration implementation */ 1842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 1942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi#include "sles_allinclusive.h" 2042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 2142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 2242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic SLresult IAndroidConfiguration_SetConfiguration(SLAndroidConfigurationItf self, 2342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi const SLchar *configKey, 2442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi const void *pConfigValue, 2542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SLuint32 valueSize) 2642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{ 2742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SL_ENTER_INTERFACE 2842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 29c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten // object-specific code will check that valueSize is large enough for the key 30c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten if (NULL == configKey || NULL == pConfigValue || valueSize == 0) { 31c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 32b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 3375e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi } else { 34c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 35c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten interface_lock_exclusive(thiz); 3642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 37c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten // route configuration to the appropriate object 38c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten switch (IObjectToObjectID((thiz)->mThis)) { 39c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten case SL_OBJECTID_AUDIORECORDER: 40c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten SL_LOGV("SetConfiguration issued for AudioRecorder key=%s valueSize=%u", 41c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten configKey, valueSize); 42c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten result = android_audioRecorder_setConfig((CAudioRecorder *) thiz->mThis, configKey, 43c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten pConfigValue, valueSize); 44c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten break; 45c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten case SL_OBJECTID_AUDIOPLAYER: 46c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten SL_LOGV("SetConfiguration issued for AudioPlayer key=%s valueSize=%u", 47c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten configKey, valueSize); 48c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten result = android_audioPlayer_setConfig((CAudioPlayer *) thiz->mThis, configKey, 49c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten pConfigValue, valueSize); 50c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten break; 51c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten default: 52c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten result = SL_RESULT_FEATURE_UNSUPPORTED; 53c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten break; 54c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten } 55c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten 56c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten interface_unlock_exclusive(thiz); 57c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten } 5842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 5942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SL_LEAVE_INTERFACE 6042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi} 6142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 6242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 6342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic SLresult IAndroidConfiguration_GetConfiguration(SLAndroidConfigurationItf self, 6442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi const SLchar *configKey, 6542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SLuint32 *pValueSize, 6642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi void *pConfigValue) 6742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{ 6842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SL_ENTER_INTERFACE 6942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 70c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten // non-NULL pValueSize is required, but a NULL pConfigValue is allowed, so 71c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten // that we can report the actual value size without returning the value itself 72c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten if (NULL == configKey || NULL == pValueSize) { 7342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi result = SL_RESULT_PARAMETER_INVALID; 7442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi } else { 75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 76bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 77b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 78b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi // route configuration request to the appropriate object 79c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten switch (IObjectToObjectID((thiz)->mThis)) { 80c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten case SL_OBJECTID_AUDIORECORDER: 81bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten result = android_audioRecorder_getConfig((CAudioRecorder *) thiz->mThis, configKey, 82b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi pValueSize, pConfigValue); 83c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten break; 84c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten case SL_OBJECTID_AUDIOPLAYER: 85bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten result = android_audioPlayer_getConfig((CAudioPlayer *) thiz->mThis, configKey, 8675e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi pValueSize, pConfigValue); 87c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten default: 88c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten result = SL_RESULT_FEATURE_UNSUPPORTED; 89c2a325746469c4c7625ec78a169b65a11dbe1e30Glenn Kasten break; 90b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi } 91b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi 92bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 9342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi } 9442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 9542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi SL_LEAVE_INTERFACE 9642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi} 9742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 9842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 9942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic const struct SLAndroidConfigurationItf_ IAndroidConfiguration_Itf = { 10042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi IAndroidConfiguration_SetConfiguration, 10142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi IAndroidConfiguration_GetConfiguration 10242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}; 10342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi 10442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivivoid IAndroidConfiguration_init(void *self) 10542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{ 106bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IAndroidConfiguration *thiz = (IAndroidConfiguration *) self; 107bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mItf = &IAndroidConfiguration_Itf; 10842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi} 109