/wilhelm/src/itf/IEngineCapabilities.c
C | 226 lines | 174 code | 33 blank | 19 comment | 67 complexity | 985251266409c27da270d46e7a55001d MD5 | raw file
- /*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /* EngineCapabilities implementation */
- #include "sles_allinclusive.h"
- static SLresult IEngineCapabilities_QuerySupportedProfiles(
- SLEngineCapabilitiesItf self, SLuint16 *pProfilesSupported)
- {
- SL_ENTER_INTERFACE
- if (NULL == pProfilesSupported) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- // The generic implementation doesn't implement any of the profiles, they shouldn't be
- // declared as supported. Also exclude the fake profiles BASE and OPTIONAL.
- *pProfilesSupported = USE_PROFILES &
- (USE_PROFILES_GAME | USE_PROFILES_MUSIC | USE_PROFILES_PHONE);
- result = SL_RESULT_SUCCESS;
- }
- SL_LEAVE_INTERFACE
- }
- static SLresult IEngineCapabilities_QueryAvailableVoices(SLEngineCapabilitiesItf self,
- SLuint16 voiceType, SLint16 *pNumMaxVoices, SLboolean *pIsAbsoluteMax, SLint16 *pNumFreeVoices)
- {
- SL_ENTER_INTERFACE
- switch (voiceType) {
- case SL_VOICETYPE_2D_AUDIO:
- case SL_VOICETYPE_MIDI:
- case SL_VOICETYPE_3D_AUDIO:
- case SL_VOICETYPE_3D_MIDIOUTPUT:
- if (NULL != pNumMaxVoices)
- *pNumMaxVoices = MAX_INSTANCE - 2;
- if (NULL != pIsAbsoluteMax)
- *pIsAbsoluteMax = SL_BOOLEAN_TRUE;
- if (NULL != pNumFreeVoices)
- *pNumFreeVoices = MAX_INSTANCE - 2;
- result = SL_RESULT_SUCCESS;
- break;
- default:
- result = SL_RESULT_PARAMETER_INVALID;
- break;
- }
- SL_LEAVE_INTERFACE
- }
- static SLresult IEngineCapabilities_QueryNumberOfMIDISynthesizers(
- SLEngineCapabilitiesItf self, SLint16 *pNum)
- {
- SL_ENTER_INTERFACE
- if (NULL == pNum) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- *pNum = 1;
- result = SL_RESULT_SUCCESS;
- }
- SL_LEAVE_INTERFACE
- }
- static SLresult IEngineCapabilities_QueryAPIVersion(SLEngineCapabilitiesItf self,
- SLint16 *pMajor, SLint16 *pMinor, SLint16 *pStep)
- {
- SL_ENTER_INTERFACE
- if (!(NULL != pMajor && NULL != pMinor && NULL != pStep)) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- *pMajor = 1;
- *pMinor = 0;
- *pStep = 1;
- result = SL_RESULT_SUCCESS;
- }
- SL_LEAVE_INTERFACE
- }
- SLresult IEngineCapabilities_QueryLEDCapabilities(SLEngineCapabilitiesItf self,
- SLuint32 *pIndex, SLuint32 *pLEDDeviceID, SLLEDDescriptor *pDescriptor)
- {
- SL_ENTER_INTERFACE
- IEngineCapabilities *thiz = (IEngineCapabilities *) self;
- const struct LED_id_descriptor *id_descriptor;
- SLuint32 index;
- if (NULL != pIndex) {
- result = SL_RESULT_SUCCESS;
- if (NULL != pLEDDeviceID || NULL != pDescriptor) {
- index = *pIndex;
- if (index >= thiz->mMaxIndexLED) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- id_descriptor = &LED_id_descriptors[index];
- if (NULL != pLEDDeviceID)
- *pLEDDeviceID = id_descriptor->id;
- if (NULL != pDescriptor)
- *pDescriptor = *id_descriptor->descriptor;
- }
- }
- *pIndex = thiz->mMaxIndexLED;
- } else {
- result = SL_RESULT_PARAMETER_INVALID;
- if (NULL != pLEDDeviceID && NULL != pDescriptor) {
- SLuint32 id = *pLEDDeviceID;
- for (index = 0; index < thiz->mMaxIndexLED; ++index) {
- id_descriptor = &LED_id_descriptors[index];
- if (id == id_descriptor->id) {
- *pDescriptor = *id_descriptor->descriptor;
- result = SL_RESULT_SUCCESS;
- break;
- }
- }
- }
- }
- SL_LEAVE_INTERFACE
- }
- SLresult IEngineCapabilities_QueryVibraCapabilities(SLEngineCapabilitiesItf self,
- SLuint32 *pIndex, SLuint32 *pVibraDeviceID, SLVibraDescriptor *pDescriptor)
- {
- SL_ENTER_INTERFACE
- IEngineCapabilities *thiz = (IEngineCapabilities *) self;
- const struct Vibra_id_descriptor *id_descriptor;
- SLuint32 index;
- if (NULL != pIndex) {
- result = SL_RESULT_SUCCESS;
- if (NULL != pVibraDeviceID || NULL != pDescriptor) {
- index = *pIndex;
- if (index >= thiz->mMaxIndexVibra) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- id_descriptor = &Vibra_id_descriptors[index];
- if (NULL != pVibraDeviceID)
- *pVibraDeviceID = id_descriptor->id;
- if (NULL != pDescriptor)
- *pDescriptor = *id_descriptor->descriptor;
- }
- }
- *pIndex = thiz->mMaxIndexVibra;
- } else {
- result = SL_RESULT_PARAMETER_INVALID;
- if (NULL != pVibraDeviceID && NULL != pDescriptor) {
- SLuint32 id = *pVibraDeviceID;
- for (index = 0; index < thiz->mMaxIndexVibra; ++index) {
- id_descriptor = &Vibra_id_descriptors[index];
- if (id == id_descriptor->id) {
- *pDescriptor = *id_descriptor->descriptor;
- result = SL_RESULT_SUCCESS;
- break;
- }
- }
- }
- }
- SL_LEAVE_INTERFACE
- }
- static SLresult IEngineCapabilities_IsThreadSafe(SLEngineCapabilitiesItf self,
- SLboolean *pIsThreadSafe)
- {
- SL_ENTER_INTERFACE
- if (NULL == pIsThreadSafe) {
- result = SL_RESULT_PARAMETER_INVALID;
- } else {
- IEngineCapabilities *thiz = (IEngineCapabilities *) self;
- *pIsThreadSafe = thiz->mThreadSafe;
- result = SL_RESULT_SUCCESS;
- }
- SL_LEAVE_INTERFACE
- }
- static const struct SLEngineCapabilitiesItf_ IEngineCapabilities_Itf = {
- IEngineCapabilities_QuerySupportedProfiles,
- IEngineCapabilities_QueryAvailableVoices,
- IEngineCapabilities_QueryNumberOfMIDISynthesizers,
- IEngineCapabilities_QueryAPIVersion,
- IEngineCapabilities_QueryLEDCapabilities,
- IEngineCapabilities_QueryVibraCapabilities,
- IEngineCapabilities_IsThreadSafe
- };
- void IEngineCapabilities_init(void *self)
- {
- IEngineCapabilities *thiz = (IEngineCapabilities *) self;
- thiz->mItf = &IEngineCapabilities_Itf;
- // mThreadSafe is initialized in slCreateEngine
- const struct LED_id_descriptor *id_descriptor_LED = LED_id_descriptors;
- while (NULL != id_descriptor_LED->descriptor)
- ++id_descriptor_LED;
- thiz->mMaxIndexLED = id_descriptor_LED - LED_id_descriptors;
- const struct Vibra_id_descriptor *id_descriptor_Vibra = Vibra_id_descriptors;
- while (NULL != id_descriptor_Vibra->descriptor)
- ++id_descriptor_Vibra;
- thiz->mMaxIndexVibra = id_descriptor_Vibra - Vibra_id_descriptors;
- }