slesTestPlayUri.cpp revision 1be90f9197d7a48e788b5e40fd15d73a877acef0
11be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi/* 21be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 31be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 41be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 51be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * you may not use this file except in compliance with the License. 61be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * You may obtain a copy of the License at 71be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 81be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 91be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 101be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 111be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 121be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * See the License for the specific language governing permissions and 141be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * limitations under the License. 151be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi */ 161be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 171be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi/* 181be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Copyright (c) 2009 The Khronos Group Inc. 191be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 201be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Permission is hereby granted, free of charge, to any person obtaining a copy of this 211be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * software and /or associated documentation files (the "Materials "), to deal in the 221be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * Materials without restriction, including without limitation the rights to use, copy, 231be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, 241be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * and to permit persons to whom the Materials are furnished to do so, subject to 251be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * the following conditions: 261be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 271be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * The above copyright notice and this permission notice shall be included 281be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * in all copies or substantial portions of the Materials. 291be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * 301be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 311be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 321be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 331be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 341be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 351be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 361be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE 371be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi * MATERIALS. 381be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi */ 391be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 401be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#define LOG_NDEBUG 0 411be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#define LOG_TAG "slesTestPlayUri" 421be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 431be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <utils/Log.h> 441be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <getopt.h> 451be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <stdlib.h> 461be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <stdio.h> 471be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <string.h> 481be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <unistd.h> 491be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include <sys/time.h> 501be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 511be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#include "OpenSLES.h" 521be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 531be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 541be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#define MAX_NUMBER_INTERFACES 3 551be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi#define MAX_NUMBER_OUTPUT_DEVICES 6 561be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 571be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 581be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi//----------------------------------------------------------------- 591be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi/* Checks for error. If any errors exit the application! */ 601be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivivoid CheckErr( SLresult res ) 611be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi{ 621be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi if ( res != SL_RESULT_SUCCESS ) 631be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi { 641be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "%d SL failure, exiting\n", res); 651be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi exit(1); 661be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi } 671be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi else { 681be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi //fprintf(stdout, "%d SL success, proceeding...\n", res); 691be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi } 701be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi} 711be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 721be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 731be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi//----------------------------------------------------------------- 741be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 751be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi/* Play some music from a buffer queue */ 761be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivivoid TestPlayUri( SLObjectItf sl, const char* path) 771be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi{ 781be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLEngineItf EngineItf; 791be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 801be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLint32 numOutputs = 0; 811be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLuint32 deviceID = 0; 821be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 831be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLresult res; 841be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 851be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLDataSource audioSource; 861be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLDataLocator_URI uri; 871be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLDataFormat_MIME mime; 881be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 891be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLDataSink audioSink; 901be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLDataLocator_OutputMix locator_outputmix; 911be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 921be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLObjectItf player; 931be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLPlayItf playItf; 941be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLVolumeItf volItf; 951be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLBufferQueueItf bufferQueueItf; 961be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLBufferQueueState state; 971be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 981be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLObjectItf OutputMix; 991be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1001be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi int i; 1011be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1021be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLboolean required[MAX_NUMBER_INTERFACES]; 1031be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLInterfaceID iidArray[MAX_NUMBER_INTERFACES]; 1041be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1051be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Get the SL Engine Interface which is implicit */ 1061be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*sl)->GetInterface(sl, SL_IID_ENGINE, (void*)&EngineItf); 1071be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1081be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1091be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Initialize arrays required[] and iidArray[] */ 1101be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi for (i=0;i<MAX_NUMBER_INTERFACES;i++) 1111be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi { 1121be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi required[i] = SL_BOOLEAN_FALSE; 1131be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi iidArray[i] = SL_IID_NULL; 1141be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi } 1151be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1161be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi // Set arrays required[] and iidArray[] for VOLUME interface 1171be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi required[0] = SL_BOOLEAN_TRUE; 1181be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi iidArray[0] = SL_IID_VOLUME; 1191be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi // Create Output Mix object to be used by player 1201be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*EngineItf)->CreateOutputMix(EngineItf, &OutputMix, 1, 1211be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi iidArray, required); CheckErr(res); 1221be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1231be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi // Realizing the Output Mix object in synchronous mode. 1241be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*OutputMix)->Realize(OutputMix, SL_BOOLEAN_FALSE); 1251be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1261be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1271be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Setup the data source structure for the URI */ 1281be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi uri.locatorType = SL_DATALOCATOR_URI; 1291be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi uri.URI = (SLchar*) path; 1301be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi mime.formatType = SL_DATAFORMAT_MIME; 1311be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /*mime.mimeType = (SLchar*)"audio/mpeg"; 1321be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi mime.containerType = SL_CONTAINERTYPE_MP3;*/ 1331be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1341be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi audioSource.pFormat = (void *)&mime; 1351be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi audioSource.pLocator = (void *)&uri; 1361be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1371be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Setup the data sink structure */ 1381be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi locator_outputmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; 1391be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi locator_outputmix.outputMix = OutputMix; 1401be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi audioSink.pLocator = (void *)&locator_outputmix; 1411be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi audioSink.pFormat = NULL; 1421be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1431be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Create the audio player */ 1441be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*EngineItf)->CreateAudioPlayer(EngineItf, &player, 1451be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi &audioSource, &audioSink, 1, iidArray, required); CheckErr(res); 1461be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1471be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Realizing the player in synchronous mode. */ 1481be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*player)->Realize(player, SL_BOOLEAN_FALSE); CheckErr(res); 1491be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "URI example: after Realize\n"); 1501be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1511be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Get play and vol interfaces */ 1521be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*player)->GetInterface(player, SL_IID_PLAY, (void*)&playItf); 1531be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1541be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1551be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*player)->GetInterface(player, SL_IID_VOLUME, 1561be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi (void*)&volItf); CheckErr(res); 1571be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1581be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1591be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Set the player volume */ 1601be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*volItf)->SetVolumeLevel( volItf, -300); 1611be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1621be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1631be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Play the URI */ 1641be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "URI example: starting to play\n"); 1651be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*playItf)->SetPlayState( playItf, SL_PLAYSTATE_PLAYING ); 1661be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1671be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1681be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Play 10s of the URI */ 1691be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi usleep(10 * 1000 * 1000); 1701be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1711be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Make sure player is stopped */ 1721be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "URI example: stopping playback\n"); 1731be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*playItf)->SetPlayState(playItf, SL_PLAYSTATE_STOPPED); 1741be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 1751be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1761be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Destroy the player */ 1771be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi (*player)->Destroy(player); 1781be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1791be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Destroy Output Mix object */ 1801be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi (*OutputMix)->Destroy(OutputMix); 1811be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi} 1821be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1831be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi//----------------------------------------------------------------- 1841be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Triviint main(int argc, char* const argv[]) 1851be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi{ 1861be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi LOGV("Starting slesTestPlayUri\n"); 1871be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1881be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLresult res; 1891be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLObjectItf sl; 1901be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1911be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi if (argc == 1) { 1921be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "Usage: \n\t%s path \n\t%s url\n", argv[0], argv[0]); 1931be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi fprintf(stdout, "Example: \"%s /sdcard/my.mp3\" or \"%s file:///sdcard/my.mp3\"\n", argv[0], argv[0]); 1941be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi exit(1); 1951be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi } 1961be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 1971be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi SLEngineOption EngineOption[] = { 1981be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi {(SLuint32) SL_ENGINEOPTION_THREADSAFE, 1991be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi (SLuint32) SL_BOOLEAN_TRUE}}; 2001be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 2011be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = slCreateEngine( &sl, 1, EngineOption, 0, NULL, NULL); 2021be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 2031be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Realizing the SL Engine in synchronous mode. */ 2041be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi res = (*sl)->Realize(sl, SL_BOOLEAN_FALSE); 2051be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi CheckErr(res); 2061be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 2071be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi TestPlayUri(sl, argv[1]); 2081be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 2091be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi /* Shutdown OpenSL ES */ 2101be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi (*sl)->Destroy(sl); 2111be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi exit(0); 2121be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi 2131be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi return 0; 2141be90f9197d7a48e788b5e40fd15d73a877acef0Jean-Michel Trivi} 215