engine.c revision bf4147433b223bf98a7177d778d422a89c90e965
1bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten/* 2bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * 4bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * you may not use this file except in compliance with the License. 6bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * You may obtain a copy of the License at 7bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * 8bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * 10bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * See the License for the specific language governing permissions and 14bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten * limitations under the License. 15bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten */ 16bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten 17bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include "SLES/OpenSLES.h" 18bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include "SLES/OpenSLESUT.h" 19bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include <assert.h> 20bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include <stdio.h> 21bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include <stdlib.h> 22bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten#include <string.h> 23bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten 24bf4147433b223bf98a7177d778d422a89c90e965Glenn Kastenint main(int argc, char **argv) 25bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten{ 26bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Get number of available engine interfaces\n"); 27bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLresult result; 28bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLuint32 numSupportedInterfaces = 12345; 29bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = slQueryNumSupportedEngineInterfaces(&numSupportedInterfaces); 30bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 31bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Engine number of supported interfaces %lu\n", numSupportedInterfaces); 32bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLInterfaceID *engine_ids = calloc(numSupportedInterfaces, sizeof(SLInterfaceID)); 33bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(engine_ids != NULL); 34bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLboolean *engine_req = calloc(numSupportedInterfaces, sizeof(SLboolean)); 35bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(engine_req != NULL); 36bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Display the ID of each available interface\n"); 37bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLuint32 index; 38bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten for (index = 0; index < numSupportedInterfaces + 1; ++index) { 39bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLInterfaceID interfaceID; 40bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten memset(&interfaceID, 0x55, sizeof(interfaceID)); 41bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = slQuerySupportedEngineInterfaces(index, &interfaceID); 42bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten if (index < numSupportedInterfaces) { 43bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 44bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("interface[%lu] ", index); 45bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten slesutPrintIID(interfaceID); 46bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten engine_ids[index] = interfaceID; 47bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten engine_req[index] = SL_BOOLEAN_TRUE; 48bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten } else { 49bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 50bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten } 51bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten } 52bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Create an engine and request all available interfaces\n"); 53bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten SLObjectItf engineObject; 54bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = slCreateEngine(&engineObject, 0, NULL, numSupportedInterfaces, engine_ids, engine_req); 55bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 56bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Engine object %p\n", engineObject); 57bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Get each available interface before realization\n"); 58bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten for (index = 0; index < numSupportedInterfaces; ++index) { 59bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten void *interface = NULL; 60bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten // Use the interface ID as returned by slQuerySupportedEngineInterfaces 61bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = (*engineObject)->GetInterface(engineObject, engine_ids[index], &interface); 62bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_PRECONDITIONS_VIOLATED == result); 63bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten } 64bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Destroy engine before realization\n"); 65bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten (*engineObject)->Destroy(engineObject); 66bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Create engine again\n"); 67bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = slCreateEngine(&engineObject, 0, NULL, numSupportedInterfaces, engine_ids, engine_req); 68bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 69bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Engine object %p\n", engineObject); 70bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Realize the engine\n"); 71bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); 72bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 73bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Get each available interface after realization\n"); 74bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten for (index = 0; index < numSupportedInterfaces; ++index) { 75bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten void *interface = NULL; 76bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = (*engineObject)->GetInterface(engineObject, engine_ids[index], &interface); 77bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 78bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("interface[%lu] %p\n", index, interface); 79bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten // Use a copy of the interface ID to make sure lookup is not purely relying on address 80bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten void *interface_again = NULL; 81bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten struct SLInterfaceID_ copy = *engine_ids[index]; 82bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten result = (*engineObject)->GetInterface(engineObject, ©, &interface_again); 83bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(SL_RESULT_SUCCESS == result); 84bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten // Calling GetInterface multiple times should return the same interface 85bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten assert(interface_again == interface); 86bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten } 87bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten printf("Destroy engine\n"); 88bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten (*engineObject)->Destroy(engineObject); 89bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten return EXIT_SUCCESS; 90bf4147433b223bf98a7177d778d422a89c90e965Glenn Kasten} 91