IAndroidConfiguration.c revision bcc5c7225e3b7a1dbf2e9e830987f69167acf06f
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
29bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    IAndroidConfiguration *thiz = (IAndroidConfiguration *) self;
30b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
31bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    interface_lock_exclusive(thiz);
3242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
33b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    // route configuration to the appropriate object
34bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    if (SL_OBJECTID_AUDIORECORDER == IObjectToObjectID((thiz)->mThis)) {
3575e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        SL_LOGV("SetConfiguration issued for AudioRecorder key=%s valueSize=%lu",
3675e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                configKey, valueSize);
37bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        result = android_audioRecorder_setConfig((CAudioRecorder *) thiz->mThis, configKey,
38b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi                pConfigValue, valueSize);
39bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    } else if (SL_OBJECTID_AUDIOPLAYER == IObjectToObjectID((thiz)->mThis)) {
4075e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        SL_LOGV("SetConfiguration issued for AudioPlayer key=%s valueSize=%lu",
4175e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                configKey, valueSize);
42bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        result = android_audioPlayer_setConfig((CAudioPlayer *) thiz->mThis, configKey,
4375e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                pConfigValue, valueSize);
4475e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi    } else {
45b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        result = SL_RESULT_PARAMETER_INVALID;
46b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi    }
4742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
48bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    interface_unlock_exclusive(thiz);
4942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_LEAVE_INTERFACE
5142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
5242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
5442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic SLresult IAndroidConfiguration_GetConfiguration(SLAndroidConfigurationItf self,
5542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        const SLchar *configKey,
5642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        SLuint32 *pValueSize,
5742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        void *pConfigValue)
5842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{
5942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_ENTER_INTERFACE
6042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
61453dd564a81fe98b7a947ae4a9844a53fa957c2bJean-Michel Trivi    // having value size is required, but pConfigValue being NULL is allowed to allow properties
62453dd564a81fe98b7a947ae4a9844a53fa957c2bJean-Michel Trivi    // to report their actual value size (if applicable)
63453dd564a81fe98b7a947ae4a9844a53fa957c2bJean-Michel Trivi    if (NULL == pValueSize) {
6442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi        result = SL_RESULT_PARAMETER_INVALID;
6542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    } else {
66bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        IAndroidConfiguration *thiz = (IAndroidConfiguration *) self;
6742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
68bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_lock_exclusive(thiz);
69b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
70b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        // route configuration request to the appropriate object
71bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        if (SL_OBJECTID_AUDIORECORDER == IObjectToObjectID((thiz)->mThis)) {
72bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten            result = android_audioRecorder_getConfig((CAudioRecorder *) thiz->mThis, configKey,
73b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi                    pValueSize, pConfigValue);
74bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        } else if (SL_OBJECTID_AUDIOPLAYER == IObjectToObjectID((thiz)->mThis)) {
75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten            result = android_audioPlayer_getConfig((CAudioPlayer *) thiz->mThis, configKey,
7675e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi                    pValueSize, pConfigValue);
7775e22870e41386cdc597bd29c76744d74d4c22adJean-Michel Trivi        } else {
78b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi            result = SL_RESULT_PARAMETER_INVALID;
79b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi        }
80b3e52a63baaea367cf411348b68ecd8fd429b029Jean-Michel Trivi
81bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten        interface_unlock_exclusive(thiz);
8242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    }
8342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
8442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    SL_LEAVE_INTERFACE
8542309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
8642309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
8742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
8842309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivistatic const struct SLAndroidConfigurationItf_ IAndroidConfiguration_Itf = {
8942309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration_SetConfiguration,
9042309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi    IAndroidConfiguration_GetConfiguration
9142309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi};
9242309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi
9342309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivivoid IAndroidConfiguration_init(void *self)
9442309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi{
95bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    IAndroidConfiguration *thiz = (IAndroidConfiguration *) self;
96bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten    thiz->mItf = &IAndroidConfiguration_Itf;
9742309377d1ed17b557fab30f1bf26b8ba31a96fdJean-Michel Trivi}
98