1*05767d91SRobert Wu /* 2*05767d91SRobert Wu * Copyright 2017 The Android Open Source Project 3*05767d91SRobert Wu * 4*05767d91SRobert Wu * Licensed under the Apache License, Version 2.0 (the "License"); 5*05767d91SRobert Wu * you may not use this file except in compliance with the License. 6*05767d91SRobert Wu * You may obtain a copy of the License at 7*05767d91SRobert Wu * 8*05767d91SRobert Wu * http://www.apache.org/licenses/LICENSE-2.0 9*05767d91SRobert Wu * 10*05767d91SRobert Wu * Unless required by applicable law or agreed to in writing, software 11*05767d91SRobert Wu * distributed under the License is distributed on an "AS IS" BASIS, 12*05767d91SRobert Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*05767d91SRobert Wu * See the License for the specific language governing permissions and 14*05767d91SRobert Wu * limitations under the License. 15*05767d91SRobert Wu */ 16*05767d91SRobert Wu 17*05767d91SRobert Wu #include "OpenSLESUtilities.h" 18*05767d91SRobert Wu 19*05767d91SRobert Wu namespace oboe { 20*05767d91SRobert Wu 21*05767d91SRobert Wu /* 22*05767d91SRobert Wu * OSLES Helpers 23*05767d91SRobert Wu */ 24*05767d91SRobert Wu getSLErrStr(SLresult code)25*05767d91SRobert Wuconst char *getSLErrStr(SLresult code) { 26*05767d91SRobert Wu switch (code) { 27*05767d91SRobert Wu case SL_RESULT_SUCCESS: 28*05767d91SRobert Wu return "SL_RESULT_SUCCESS"; 29*05767d91SRobert Wu case SL_RESULT_PRECONDITIONS_VIOLATED: 30*05767d91SRobert Wu return "SL_RESULT_PRECONDITIONS_VIOLATED"; 31*05767d91SRobert Wu case SL_RESULT_PARAMETER_INVALID: 32*05767d91SRobert Wu return "SL_RESULT_PARAMETER_INVALID"; 33*05767d91SRobert Wu case SL_RESULT_MEMORY_FAILURE: 34*05767d91SRobert Wu return "SL_RESULT_MEMORY_FAILURE"; 35*05767d91SRobert Wu case SL_RESULT_RESOURCE_ERROR: 36*05767d91SRobert Wu return "SL_RESULT_RESOURCE_ERROR"; 37*05767d91SRobert Wu case SL_RESULT_RESOURCE_LOST: 38*05767d91SRobert Wu return "SL_RESULT_RESOURCE_LOST"; 39*05767d91SRobert Wu case SL_RESULT_IO_ERROR: 40*05767d91SRobert Wu return "SL_RESULT_IO_ERROR"; 41*05767d91SRobert Wu case SL_RESULT_BUFFER_INSUFFICIENT: 42*05767d91SRobert Wu return "SL_RESULT_BUFFER_INSUFFICIENT"; 43*05767d91SRobert Wu case SL_RESULT_CONTENT_CORRUPTED: 44*05767d91SRobert Wu return "SL_RESULT_CONTENT_CORRUPTED"; 45*05767d91SRobert Wu case SL_RESULT_CONTENT_UNSUPPORTED: 46*05767d91SRobert Wu return "SL_RESULT_CONTENT_UNSUPPORTED"; 47*05767d91SRobert Wu case SL_RESULT_CONTENT_NOT_FOUND: 48*05767d91SRobert Wu return "SL_RESULT_CONTENT_NOT_FOUND"; 49*05767d91SRobert Wu case SL_RESULT_PERMISSION_DENIED: 50*05767d91SRobert Wu return "SL_RESULT_PERMISSION_DENIED"; 51*05767d91SRobert Wu case SL_RESULT_FEATURE_UNSUPPORTED: 52*05767d91SRobert Wu return "SL_RESULT_FEATURE_UNSUPPORTED"; 53*05767d91SRobert Wu case SL_RESULT_INTERNAL_ERROR: 54*05767d91SRobert Wu return "SL_RESULT_INTERNAL_ERROR"; 55*05767d91SRobert Wu case SL_RESULT_UNKNOWN_ERROR: 56*05767d91SRobert Wu return "SL_RESULT_UNKNOWN_ERROR"; 57*05767d91SRobert Wu case SL_RESULT_OPERATION_ABORTED: 58*05767d91SRobert Wu return "SL_RESULT_OPERATION_ABORTED"; 59*05767d91SRobert Wu case SL_RESULT_CONTROL_LOST: 60*05767d91SRobert Wu return "SL_RESULT_CONTROL_LOST"; 61*05767d91SRobert Wu default: 62*05767d91SRobert Wu return "Unknown SL error"; 63*05767d91SRobert Wu } 64*05767d91SRobert Wu } 65*05767d91SRobert Wu OpenSLES_createExtendedFormat(SLDataFormat_PCM format,SLuint32 representation)66*05767d91SRobert WuSLAndroidDataFormat_PCM_EX OpenSLES_createExtendedFormat( 67*05767d91SRobert Wu SLDataFormat_PCM format, SLuint32 representation) { 68*05767d91SRobert Wu SLAndroidDataFormat_PCM_EX format_pcm_ex; 69*05767d91SRobert Wu format_pcm_ex.formatType = SL_ANDROID_DATAFORMAT_PCM_EX; 70*05767d91SRobert Wu format_pcm_ex.numChannels = format.numChannels; 71*05767d91SRobert Wu format_pcm_ex.sampleRate = format.samplesPerSec; 72*05767d91SRobert Wu format_pcm_ex.bitsPerSample = format.bitsPerSample; 73*05767d91SRobert Wu format_pcm_ex.containerSize = format.containerSize; 74*05767d91SRobert Wu format_pcm_ex.channelMask = format.channelMask; 75*05767d91SRobert Wu format_pcm_ex.endianness = format.endianness; 76*05767d91SRobert Wu format_pcm_ex.representation = representation; 77*05767d91SRobert Wu return format_pcm_ex; 78*05767d91SRobert Wu } 79*05767d91SRobert Wu OpenSLES_ConvertFormatToRepresentation(AudioFormat format)80*05767d91SRobert WuSLuint32 OpenSLES_ConvertFormatToRepresentation(AudioFormat format) { 81*05767d91SRobert Wu switch(format) { 82*05767d91SRobert Wu case AudioFormat::I16: 83*05767d91SRobert Wu return SL_ANDROID_PCM_REPRESENTATION_SIGNED_INT; 84*05767d91SRobert Wu case AudioFormat::Float: 85*05767d91SRobert Wu return SL_ANDROID_PCM_REPRESENTATION_FLOAT; 86*05767d91SRobert Wu case AudioFormat::I24: 87*05767d91SRobert Wu case AudioFormat::I32: 88*05767d91SRobert Wu case AudioFormat::IEC61937: 89*05767d91SRobert Wu case AudioFormat::Invalid: 90*05767d91SRobert Wu case AudioFormat::Unspecified: 91*05767d91SRobert Wu default: 92*05767d91SRobert Wu return 0; 93*05767d91SRobert Wu } 94*05767d91SRobert Wu } 95*05767d91SRobert Wu 96*05767d91SRobert Wu } // namespace oboe 97