17e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten/* 27e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 37e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * 47e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 57e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * you may not use this file except in compliance with the License. 67e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * You may obtain a copy of the License at 77e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * 87e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 97e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * 107e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * Unless required by applicable law or agreed to in writing, software 117e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 127e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * See the License for the specific language governing permissions and 147e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten * limitations under the License. 157e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten */ 167e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 177e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten// Test various combinations of data sources and sinks 187e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 197e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#include <assert.h> 207e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#include <stdio.h> 217e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#include <stdlib.h> 22a6c5e52ded343b557152156c33d33a10d29bf6f1Glenn Kasten#include <SLES/OpenSLES.h> 237e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 247e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kastenint main(int argc, char **argv) 257e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten{ 267e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLresult result; 277e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLObjectItf engineObject; 287e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 297e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create engine 307e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL); 317e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 327e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLEngineItf engineEngine; 337e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE); 347e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 357e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine); 367e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 377e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 387e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // configure a typical audio source of 44.1 kHz stereo 16-bit little endian 397e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLDataLocator_BufferQueue loc_bufq; 407e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_bufq.locatorType = SL_DATALOCATOR_BUFFERQUEUE; 417e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_bufq.numBuffers = 1; 427e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLDataFormat_PCM format_pcm; 437e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.formatType = SL_DATAFORMAT_PCM; 447e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 2; 457e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1; 467e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.bitsPerSample = 16; 477e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.containerSize = 16; 487e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; 497e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; 507e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLDataSource audioSrc; 517e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten audioSrc.pLocator = &loc_bufq; 527e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten audioSrc.pFormat = &format_pcm; 537e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 547e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // configure audio sink 557e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLDataLocator_OutputMix loc_outmix; 567e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_outmix.locatorType = SL_DATALOCATOR_OUTPUTMIX; 577e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_outmix.outputMix = NULL; 587e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLDataSink audioSnk; 597e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten audioSnk.pLocator = &loc_outmix; 607e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten audioSnk.pFormat = NULL; 617e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 627e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create audio player using a NULL output mix 637e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLInterfaceID ids[1] = {SL_IID_BUFFERQUEUE}; 647e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLboolean req[1] = {SL_BOOLEAN_TRUE}; 657e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLObjectItf playerObject; 667e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 677e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 687e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 697e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 707e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 717e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create audio player using an engine as the output mix 727e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_outmix.outputMix = engineObject; 737e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 747e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 757e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 767e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 777e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 787e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create output mix but don't realize it yet 797e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SLObjectItf outputMixObject; 807e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL); 817e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 827e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 837e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create audio player using the unrealized output mix 847e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten loc_outmix.outputMix = outputMixObject; 857e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 867e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 877e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PRECONDITIONS_VIOLATED == result); 887e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 897e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 907e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // now realize the output mix 917e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE); 927e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 937e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 947e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // create audio player using the realized output mix 95914cb8c5a686d9316af46797fb7b55a115fe9b29Glenn Kasten // and a bogus data format for the sink (ignored per spec) 96914cb8c5a686d9316af46797fb7b55a115fe9b29Glenn Kasten audioSnk.pFormat = (void *) 0xDEADBEEF; 977e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 987e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 997e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 1007e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL != playerObject); 101914cb8c5a686d9316af46797fb7b55a115fe9b29Glenn Kasten audioSnk.pFormat = NULL; 1027e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1037e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // destroy player 1047e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*playerObject)->Destroy(playerObject); 1057e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1067e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // now try to create audio player using various unusual parameters 1077e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1087e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // number of channels 1097e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 0; 1107e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1117e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1127e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1137e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1147e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 3; 1157e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1167e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1177e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1187e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1197e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 2; 1207e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1217e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // sample rate 1227e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.samplesPerSec = 0; 1237e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1247e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1257e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1267e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1277e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.samplesPerSec = 1000; 1287e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1297e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1307e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1317e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1327e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1; 1337e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1347e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // bits per sample 1357e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.bitsPerSample = 17; 1367e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1377e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1387e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1397e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1407e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.bitsPerSample = 24; 1417e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1427e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1437e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1447e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1457e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.bitsPerSample = 16; 1467e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1477e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // container size 1487e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.containerSize = 8; 1497e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1507e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1517e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1527e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1537e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.containerSize = 32; 1547e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1557e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1567e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1577e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1587e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.containerSize = 16; 1597e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1607e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // channel mask 1617e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = 0; 1627e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1637e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1647e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 1657e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL != playerObject); 1667e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*playerObject)->Destroy(playerObject); 1677e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_CENTER; 1687e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1697e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1707e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1717e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1727e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT | 1737e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten SL_SPEAKER_FRONT_CENTER; 1747e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1757e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1767e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1777e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1787e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 1; 1797e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = 0; 1807e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1817e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1827e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_SUCCESS == result); 1837e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL != playerObject); 1847e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*playerObject)->Destroy(playerObject); 1857e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; 1867e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1877e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1887e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 1897e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1907e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.numChannels = 2; 1917e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 1927e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // endianness 1937e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.endianness = SL_BYTEORDER_BIGENDIAN; 1947e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 1957e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 1967e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#ifdef ANDROID // known bug on SDL 1977e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_CONTENT_UNSUPPORTED == result); 1987e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 1997e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#else 2007e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten if (SL_RESULT_CONTENT_UNSUPPORTED != result) { 2017e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten printf("ERROR: expected SL_RESULT_CONTENT_UNSUPPORTED\n"); 2027e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten if (NULL != playerObject) 2037e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*playerObject)->Destroy(playerObject); 2047e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten } 2057e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten#endif 2067e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.endianness = 0; 2077e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc, 2087e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten &audioSnk, 1, ids, req); 2097e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(SL_RESULT_PARAMETER_INVALID == result); 2107e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten assert(NULL == playerObject); 2117e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN; 2127e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 2137e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // destroy output mix 2147e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*outputMixObject)->Destroy(outputMixObject); 2157e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 2167e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten // destroy engine 2177e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten (*engineObject)->Destroy(engineObject); 2187e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten 2197e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten return EXIT_SUCCESS; 2207e34a3c054d9b81b68007a1e94b661d5e209b897Glenn Kasten} 221