IAndroidConfiguration.c revision 75e22870e41386cdc597bd29c76744d74d4c22ad
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
2942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration *this = (IAndroidConfiguration *) self;
30b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
3142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    interface_lock_exclusive(this);
3242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
33b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#ifndef ANDROID
3442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    result = SL_RESULT_SUCCESS;
35b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#else
36b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    // route configuration to the appropriate object
37b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    if (SL_OBJECTID_AUDIORECORDER == IObjectToObjectID((this)->mThis)) {
3875e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        SL_LOGV("SetConfiguration issued for AudioRecorder key=%s valueSize=%lu",
3975e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                configKey, valueSize);
40b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        result = android_audioRecorder_setConfig((CAudioRecorder *) this->mThis, configKey,
41b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi                pConfigValue, valueSize);
42b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    } else if (SL_OBJECTID_AUDIOPLAYER == IObjectToObjectID((this)->mThis)) {
4375e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        SL_LOGV("SetConfiguration issued for AudioPlayer key=%s valueSize=%lu",
4475e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                configKey, valueSize);
4575e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        result = android_audioPlayer_setConfig((CAudioPlayer *) this->mThis, configKey,
4675e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                pConfigValue, valueSize);
4775e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi    } else {
48b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        result = SL_RESULT_PARAMETER_INVALID;
49b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    }
50b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#endif
5142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    interface_unlock_exclusive(this);
5342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_LEAVE_INTERFACE
5542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
5642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic SLresult IAndroidConfiguration_GetConfiguration(SLAndroidConfigurationItf self,
5942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        const SLchar *configKey,
6042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        SLuint32 *pValueSize,
6142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        void *pConfigValue)
6242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{
6342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_ENTER_INTERFACE
6442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
65b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#ifndef ANDROID
66b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    result = SL_RESULT_SUCCESS;
67b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#else
68b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    if ((NULL == pValueSize) || (NULL == pConfigValue)) {
6942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        result = SL_RESULT_PARAMETER_INVALID;
7042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    } else {
7142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        IAndroidConfiguration *this = (IAndroidConfiguration *) self;
7242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
73b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        interface_lock_exclusive(this);
74b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
75b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        // route configuration request to the appropriate object
76b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        if (SL_OBJECTID_AUDIORECORDER == IObjectToObjectID((this)->mThis)) {
77b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi            result = android_audioRecorder_getConfig((CAudioRecorder *) this->mThis, configKey,
78b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi                    pValueSize, pConfigValue);
79b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        } else if (SL_OBJECTID_AUDIOPLAYER == IObjectToObjectID((this)->mThis)) {
8075e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi            result = android_audioPlayer_getConfig((CAudioPlayer *) this->mThis, configKey,
8175e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                    pValueSize, pConfigValue);
8275e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        } else {
83b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi            result = SL_RESULT_PARAMETER_INVALID;
84b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        }
85b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
86b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        interface_unlock_exclusive(this);
8742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    }
88b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi#endif
8942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
9042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_LEAVE_INTERFACE
9142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
9242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
9342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
9442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic const struct SLAndroidConfigurationItf_ IAndroidConfiguration_Itf = {
9542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration_SetConfiguration,
9642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration_GetConfiguration
9742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi};
9842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
9942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivivoid IAndroidConfiguration_init(void *self)
10042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{
10142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration *this = (IAndroidConfiguration *) self;
10242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    this->mItf = &IAndroidConfiguration_Itf;
10342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
104