entry.c revision faf90312d2156acbf27c62e114fd180708aa7654
18db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/* 28db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 38db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * 48db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 58db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * you may not use this file except in compliance with the License. 68db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * You may obtain a copy of the License at 78db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * 88db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 98db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * 108db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * Unless required by applicable law or agreed to in writing, software 118db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 128db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * See the License for the specific language governing permissions and 148db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten * limitations under the License. 158db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten */ 168db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 178db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/* Initial global entry points */ 188db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 198db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#include "sles_allinclusive.h" 208db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 218db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 228db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief Internal code shared by slCreateEngine and xaCreateEngine */ 238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kastenstatic SLresult liCreateEngine(SLObjectItf *pEngine, SLuint32 numOptions, 258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const SLEngineOption *pEngineOptions, SLuint32 numInterfaces, 268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const SLInterfaceID *pInterfaceIds, const SLboolean *pInterfaceRequired, 278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const ClassTable *pCEngine_class) 288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLresult result; 308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten int ok; 328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten ok = pthread_mutex_lock(&theOneTrueMutex); 338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(0 == ok); 348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 358db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten do { 368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#ifdef ANDROID 388db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten android::ProcessState::self()->startThreadPool(); 398db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten android::DataSource::RegisterDefaultSniffers(); 408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif 418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == pEngine) { 438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; 448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 458db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 468db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pEngine = NULL; 478db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 488db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL != theOneTrueEngine) { 498db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LOGE("slCreateEngine while another engine %p is active", theOneTrueEngine); 508db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_RESOURCE_ERROR; 518db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 528db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 538db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 548db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if ((0 < numOptions) && (NULL == pEngineOptions)) { 558db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LOGE("numOptions=%lu and pEngineOptions=NULL", numOptions); 568db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; 578db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 588db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 598db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 608db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // default values 618db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLboolean threadSafe = SL_BOOLEAN_TRUE; 628db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLboolean lossOfControlGlobal = SL_BOOLEAN_FALSE; 638db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 648db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // process engine options 658db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLuint32 i; 668db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const SLEngineOption *option = pEngineOptions; 678db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_SUCCESS; 688db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten for (i = 0; i < numOptions; ++i, ++option) { 698db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten switch (option->feature) { 708db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case SL_ENGINEOPTION_THREADSAFE: 718db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten threadSafe = SL_BOOLEAN_FALSE != (SLboolean) option->data; // normalize 728db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 738db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case SL_ENGINEOPTION_LOSSOFCONTROL: 748db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten lossOfControlGlobal = SL_BOOLEAN_FALSE != (SLboolean) option->data; // normalize 758db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 768db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten default: 778db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LOGE("unknown engine option: feature=%lu data=%lu", 788db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten option->feature, option->data); 798db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; 808db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 818db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (SL_RESULT_SUCCESS != result) { 848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 858db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 868db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 878db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten unsigned exposedMask; 888b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten // const ClassTable *pCEngine_class = objectIDtoClass(SL_OBJECTID_ENGINE); 898db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(NULL != pCEngine_class); 908db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = checkInterfaces(pCEngine_class, numInterfaces, 918db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pInterfaceIds, pInterfaceRequired, &exposedMask); 928db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (SL_RESULT_SUCCESS != result) { 938db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 948db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 968db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten CEngine *this = (CEngine *) construct(pCEngine_class, exposedMask, NULL); 978db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == this) { 988db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_MEMORY_FAILURE; 998db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 1008db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 1018db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // initialize fields not associated with an interface 1038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // mThreadPool is initialized in CEngine_Realize 1048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten memset(&this->mThreadPool, 0, sizeof(ThreadPool)); 1058db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten memset(&this->mSyncThread, 0, sizeof(pthread_t)); 106faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 1078db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten this->mEqNumPresets = 0; 1088db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten this->mEqPresetNames = NULL; 1098db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif 1108db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // initialize fields related to an interface 1118db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten this->mObject.mLossOfControlMask = lossOfControlGlobal ? ~0 : 0; 1128db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten this->mEngine.mLossOfControlGlobal = lossOfControlGlobal; 1138db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten this->mEngineCapabilities.mThreadSafe = threadSafe; 1148db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten IObject_Publish(&this->mObject); 1158db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten theOneTrueEngine = this; 1168db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // return the new engine object 1178db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pEngine = &this->mObject.mItf; 1188db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1198db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } while(0); 1208db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1218db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten ok = pthread_mutex_unlock(&theOneTrueMutex); 1228db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(0 == ok); 1238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return result; 1258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 1268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief slCreateEngine Function */ 1298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1308db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenSL_API SLresult SLAPIENTRY slCreateEngine(SLObjectItf *pEngine, SLuint32 numOptions, 1318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const SLEngineOption *pEngineOptions, SLuint32 numInterfaces, 1328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const SLInterfaceID *pInterfaceIds, const SLboolean *pInterfaceRequired) 1338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 1348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_ENTER_GLOBAL 1358db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liCreateEngine(pEngine, numOptions, pEngineOptions, numInterfaces, pInterfaceIds, 1378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pInterfaceRequired, objectIDtoClass(SL_OBJECTID_ENGINE)); 1388db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1398db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LEAVE_GLOBAL 1408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 1418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** Internal function for slQuerySupportedEngineInterfaces and xaQuerySupportedEngineInterfaces */ 1448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1458db0b106cdce5f5216b1535492de7930ad738aedGlenn Kastenstatic SLresult liQueryNumSupportedInterfaces(SLuint32 *pNumSupportedInterfaces, 1468db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const ClassTable *class__) 1478db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 1488db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLresult result; 1498db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == pNumSupportedInterfaces) { 1508db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; 1518db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } else { 1528db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(NULL != class__); 1538db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLuint32 count = 0; 1548db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLuint32 i; 1558db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten for (i = 0; i < class__->mInterfaceCount; ++i) { 1568db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten switch (class__->mInterfaces[i].mInterface) { 1578db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_IMPLICIT: 1588db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_IMPLICIT_PREREALIZE: 1598db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_EXPLICIT: 1608db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_EXPLICIT_PREREALIZE: 1618db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_DYNAMIC: 1628db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten ++count; 1638db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 1648db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_UNAVAILABLE: 1658db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 1668db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten default: 1678db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(false); 1688db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 1698db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 1708db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 1718db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pNumSupportedInterfaces = count; 1728db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_SUCCESS; 1738db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 1748db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return result; 1758db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 1768db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1778db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1788db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief slQueryNumSupportedEngineInterfaces Function */ 1798db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1808db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenSL_API SLresult SLAPIENTRY slQueryNumSupportedEngineInterfaces(SLuint32 *pNumSupportedInterfaces) 1818db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 1828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_ENTER_GLOBAL 1838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liQueryNumSupportedInterfaces(pNumSupportedInterfaces, 1858db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten objectIDtoClass(SL_OBJECTID_ENGINE)); 1868db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1878db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LEAVE_GLOBAL 1888db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 1898db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1908db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1918db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** Internal function for slQuerySupportedEngineInterfaces and xaQuerySupportedEngineInterfaces */ 1928db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1938db0b106cdce5f5216b1535492de7930ad738aedGlenn Kastenstatic SLresult liQuerySupportedInterfaces(SLuint32 index, SLInterfaceID *pInterfaceId, 1948db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const ClassTable *class__) 1958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 1968db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLresult result; 1978db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == pInterfaceId) { 1988db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; 1998db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } else { 2008db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pInterfaceId = NULL; 2018db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(NULL != class__); 2028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_PARAMETER_INVALID; // will be reset later 2038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLuint32 i; 2048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten for (i = 0; i < class__->mInterfaceCount; ++i) { 2058db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten switch (class__->mInterfaces[i].mInterface) { 2068db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_IMPLICIT: 2078db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_IMPLICIT_PREREALIZE: 2088db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_EXPLICIT: 2098db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_EXPLICIT_PREREALIZE: 2108db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_DYNAMIC: 2118db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 2128db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten case INTERFACE_UNAVAILABLE: 2138db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten continue; 2148db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten default: 2158db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(false); 2168db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 2178db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2188db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (index == 0) { 2198db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pInterfaceId = &SL_IID_array[class__->mInterfaces[i].mMPH]; 2208db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = SL_RESULT_SUCCESS; 2218db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten break; 2228db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten --index; 2248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return result; 2278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 2288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief slQuerySupportedEngineInterfaces Function */ 2318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2328db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenSL_API SLresult SLAPIENTRY slQuerySupportedEngineInterfaces(SLuint32 index, 2338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLInterfaceID *pInterfaceId) 2348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 2358db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_ENTER_GLOBAL 2368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liQuerySupportedInterfaces(index, pInterfaceId, objectIDtoClass(SL_OBJECTID_ENGINE)); 2388db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2398db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SL_LEAVE_GLOBAL 2408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 2418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief xaCreateEngine Function */ 2448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2458db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenXA_API XAresult XAAPIENTRY xaCreateEngine(XAObjectItf *pEngine, XAuint32 numOptions, 2468db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const XAEngineOption *pEngineOptions, XAuint32 numInterfaces, 2478db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) 2488db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 2498db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_ENTER_GLOBAL 2508db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2518db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liCreateEngine((SLObjectItf *) pEngine, numOptions, 2528db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten (const SLEngineOption *) pEngineOptions, numInterfaces, 2538db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten (const SLInterfaceID *) pInterfaceIds, (const SLboolean *) pInterfaceRequired, 2548b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten objectIDtoClass(XA_OBJECTID_ENGINE)); 2558db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2568db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_LEAVE_GLOBAL 2578db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 2588db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2598db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2608db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief xaQueryNumSupportedEngineInterfaces Function */ 2618db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2628db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenXA_API XAresult XAAPIENTRY xaQueryNumSupportedEngineInterfaces(XAuint32 *pNumSupportedInterfaces) 2638db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 2648db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_ENTER_GLOBAL 2658db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2668db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liQueryNumSupportedInterfaces(pNumSupportedInterfaces, 2678b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten objectIDtoClass(XA_OBJECTID_ENGINE)); 2688db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2698db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_LEAVE_GLOBAL 2708db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 2718db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2728db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2738db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief xaQuerySupportedEngineInterfaces Function */ 2748db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2758db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenXA_API XAresult XAAPIENTRY xaQuerySupportedEngineInterfaces(XAuint32 index, 2768db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAInterfaceID *pInterfaceId) 2778db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 2788db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_ENTER_GLOBAL 2798db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2808db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = liQuerySupportedInterfaces(index, (SLInterfaceID *) pInterfaceId, 2818b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten objectIDtoClass(XA_OBJECTID_ENGINE)); 2828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_LEAVE_GLOBAL 2848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 285