10a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten/* 20a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 30a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * 40a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 50a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * you may not use this file except in compliance with the License. 60a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * You may obtain a copy of the License at 70a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * 80a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 90a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * 100a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * Unless required by applicable law or agreed to in writing, software 110a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 120a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * See the License for the specific language governing permissions and 140a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten * limitations under the License. 150a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten */ 160a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 170a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten// Test various combinations of data sources and sinks 180a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 190a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#include <assert.h> 200a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#include <stdio.h> 210a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#include <stdlib.h> 22c6853892c94800e72c0bd676d5d2136d48cea76eGlenn Kasten#include <SLES/OpenSLES.h> 230a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 240a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kastenint main(int argc, char **argv) 250a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten{ 260a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLresult result; 270a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLObjectItf engineObject; 280a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 290a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create engine 300a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL); 310a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 320a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLEngineItf engineEngine; 330a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); 340a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 350a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine); 360a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 370a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 380a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // configure a typical audio source of 44.1 kHz stereo 16-bit little endian 390a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLDataLocator_BufferQueue loc_bufq; 400a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_bufq.locatorType = SL_DATALOCATOR_BUFFERQUEUE; 410a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_bufq.numBuffers = 1; 420a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLDataFormat_PCM format_pcm; 430a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.formatType = SL_DATAFORMAT_PCM; 440a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 2; 450a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1; 460a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.bitsPerSample = 16; 470a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.containerSize = 16; 480a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; 490a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; 500a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLDataSource audioSrc; 510a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten audioSrc.pLocator = &loc_bufq; 520a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten audioSrc.pFormat = &format_pcm; 530a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 540a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // configure audio sink 550a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLDataLocator_OutputMix loc_outmix; 560a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; 570a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_outmix.outputMix = NULL; 580a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLDataSink audioSnk; 590a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten audioSnk.pLocator = &loc_outmix; 600a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten audioSnk.pFormat = NULL; 610a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 620a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create audio player using a NULL output mix 630a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLInterfaceID ids[1] = {SL_IID_BUFFERQUEUE}; 640a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLboolean req[1] = {SL_BOOLEAN_TRUE}; 650a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLObjectItf playerObject; 660a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 670a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 680a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 690a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 700a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 710a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create audio player using an engine as the output mix 720a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_outmix.outputMix = engineObject; 730a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 740a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 750a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 760a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 770a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 780a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create output mix but don't realize it yet 790a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SLObjectItf outputMixObject; 800a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL); 810a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 820a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 830a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create audio player using the unrealized output mix 840a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten loc_outmix.outputMix = outputMixObject; 850a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 860a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 870a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PRECONDITIONS_VIOLATED == result); 880a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 890a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 900a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // now realize the output mix 910a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE); 920a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 930a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 940a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // create audio player using the realized output mix 95e670554ea199eef745740eaccc176ff283b0cd10Glenn Kasten // and a bogus data format for the sink (ignored per spec) 96e670554ea199eef745740eaccc176ff283b0cd10Glenn Kasten audioSnk.pFormat = (void *) 0xDEADBEEF; 970a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 980a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 990a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 1000a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL != playerObject); 101e670554ea199eef745740eaccc176ff283b0cd10Glenn Kasten audioSnk.pFormat = NULL; 1020a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1030a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // destroy player 1040a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*playerObject)->Destroy(playerObject); 1050a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1060a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // now try to create audio player using various unusual parameters 1070a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1080a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // number of channels 1090a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 0; 1100a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1110a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1120a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1130a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1140a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 3; 1150a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1160a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1170a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1180a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1190a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 2; 1200a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1210a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // sample rate 1220a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.samplesPerSec = 0; 1230a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1240a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1250a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1260a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1270a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.samplesPerSec = 1000; 1280a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1290a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1300a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1310a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1320a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1; 1330a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1340a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // bits per sample 1350a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.bitsPerSample = 17; 1360a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1370a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1380a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1390a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1400a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.bitsPerSample = 24; 1410a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1420a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1430a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1440a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1450a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.bitsPerSample = 16; 1460a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1470a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // container size 1480a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.containerSize = 8; 1490a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1500a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1510a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1520a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1530a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.containerSize = 32; 1540a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1550a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1560a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1570a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1580a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.containerSize = 16; 1590a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1600a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // channel mask 1610a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = 0; 1620a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1630a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1640a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 1650a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL != playerObject); 1660a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*playerObject)->Destroy(playerObject); 1670a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_CENTER; 1680a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1690a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1700a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1710a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1720a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT | 1730a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten SL_SPEAKER_FRONT_CENTER; 1740a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1750a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1760a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1770a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1780a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 1; 1790a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = 0; 1800a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1810a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1820a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_SUCCESS == result); 1830a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL != playerObject); 1840a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*playerObject)->Destroy(playerObject); 1850a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; 1860a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1870a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1880a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1890a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1900a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.numChannels = 2; 1910a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 1920a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // endianness 1930a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.endianness = SL_BYTEORDER_BIGENDIAN; 1940a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1950a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 1960a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#ifdef ANDROID // known bug on SDL 1970a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1980a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 1990a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#else 2000a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten if (SL_RESULT_CONTENT_UNSUPPORTED != result) { 2010a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten printf("ERROR: expected SL_RESULT_CONTENT_UNSUPPORTED\n"); 2020a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten if (NULL != playerObject) 2030a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*playerObject)->Destroy(playerObject); 2040a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten } 2050a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten#endif 2060a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.endianness = 0; 2070a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 2080a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten &audioSnk, 1, ids, req); 2090a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 2100a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten assert(NULL == playerObject); 2110a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; 2120a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 2130a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // destroy output mix 2140a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*outputMixObject)->Destroy(outputMixObject); 2150a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 2160a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten // destroy engine 2170a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten (*engineObject)->Destroy(engineObject); 2180a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten 2190a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten return EXIT_SUCCESS; 2200a058cc3d720cdf3f0f8222472a862258482f34fGlenn Kasten} 221