1a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten/* 2a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 4a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * you may not use this file except in compliance with the License. 6a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * You may obtain a copy of the License at 7a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 8a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * 10a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * See the License for the specific language governing permissions and 14a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten * limitations under the License. 15a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten */ 16a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 17a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include "sles_allinclusive.h" 18a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 19a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten/* Device table (change this when you port!) */ 20a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 21a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLAudioInputDescriptor AudioInputDescriptor_mic = { 22a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten (SLchar *) "mic", // deviceName 23a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVCONNECTION_INTEGRATED, // deviceConnection 24a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVSCOPE_ENVIRONMENT, // deviceScope 25a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVLOCATION_HANDSET, // deviceLocation 26a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // isForTelephony 27a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, // minSampleRate 28a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, // maxSampleRate 29a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // isFreqRangeContinuous 30a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten NULL, // samplingRatesSupported 31a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 0, // numOfSamplingRatesSupported 32a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 1 // maxChannels 33a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 34a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 35a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenconst struct AudioInput_id_descriptor AudioInput_id_descriptors[] = { 36a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {SL_DEFAULTDEVICEID_AUDIOINPUT, &AudioInputDescriptor_mic}, 37a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {0, NULL} 38a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 39a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 40a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLAudioOutputDescriptor AudioOutputDescriptor_speaker = { 41a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten (SLchar *) "speaker", // deviceName 42a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVCONNECTION_INTEGRATED, // deviceConnection 43a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVSCOPE_USER, // deviceScope 44a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVLOCATION_HEADSET, // deviceLocation 45a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // isForTelephony 46a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, // minSamplingRate 47a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, // maxSamplingRate 48a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // isFreqRangeContinuous 49a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten NULL, // samplingRatesSupported 50a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 0, // numOfSamplingRatesSupported 51a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 2 // maxChannels 52a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 53a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 54a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLAudioOutputDescriptor AudioOutputDescriptor_headset = { 55a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten (SLchar *) "headset", 56a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVCONNECTION_ATTACHED_WIRED, 57a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVSCOPE_USER, 58a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVLOCATION_HEADSET, 59a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_FALSE, 60a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, 61a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, 62a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, 63a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten NULL, 64a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 0, 65a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 2 66a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 67a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 68a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLAudioOutputDescriptor AudioOutputDescriptor_handsfree = { 69a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten (SLchar *) "handsfree", 70a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVCONNECTION_INTEGRATED, 71a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVSCOPE_ENVIRONMENT, 72a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_DEVLOCATION_HANDSET, 73a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_FALSE, 74a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, 75a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_SAMPLINGRATE_44_1, 76a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, 77a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten NULL, 78a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 0, 79a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 2 80a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 81a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 82a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenconst struct AudioOutput_id_descriptor AudioOutput_id_descriptors[] = { 83a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {SL_DEFAULTDEVICEID_AUDIOOUTPUT, &AudioOutputDescriptor_speaker}, 84a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {DEVICE_ID_HEADSET, &AudioOutputDescriptor_headset}, 85a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {DEVICE_ID_HANDSFREE, &AudioOutputDescriptor_handsfree}, 86a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {0, NULL} 87a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 88a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 89a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLLEDDescriptor SLLEDDescriptor_default = { 90a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 32, // ledCount 91a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 0, // primaryLED 923eaa329775fc522d8ea4acd4edc379eabf9ac332Glenn Kasten (SLuint32) ~0 // colorMask 93a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 94a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 95a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenconst struct LED_id_descriptor LED_id_descriptors[] = { 96a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {SL_DEFAULTDEVICEID_LED, &SLLEDDescriptor_default}, 97a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {0, NULL} 98a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 99a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 100a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenstatic const SLVibraDescriptor SLVibraDescriptor_default = { 101a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // supportsFrequency 102a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten SL_BOOLEAN_TRUE, // supportsIntensity 103a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 20000, // minFrequency 104a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 100000 // maxFrequency 105a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 106a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 107a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenconst struct Vibra_id_descriptor Vibra_id_descriptors[] = { 108a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {SL_DEFAULTDEVICEID_VIBRA, &SLVibraDescriptor_default}, 109a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten {0, NULL} 110a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten}; 11161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1127a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten// should build this table from Caps table below 11361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 11461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const SLuint32 Codec_IDs[] = { 11561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_PCM, 11661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_MP3, 11761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_AMR, 11861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_AMRWB, 11961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_AMRWBPLUS, 12061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_AAC, 12161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_WMA, 12261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_REAL, 12361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOCODEC_VORBIS 12461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 12561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 126df200f6a98da83bf2c1b14aff0ed356263dfb8b7Glenn Kastenconst SLuint32 * const Decoder_IDs = Codec_IDs; 127df200f6a98da83bf2c1b14aff0ed356263dfb8b7Glenn Kastenconst SLuint32 * const Encoder_IDs = Codec_IDs; 12861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 129df200f6a98da83bf2c1b14aff0ed356263dfb8b7Glenn Kasten// for ANDROID, must match size and order of kVideoMimeTypes 1306e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivistatic const SLuint32 VideoCodecIds[] = { 1316e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_VIDEOCODEC_MPEG2, 1326e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_VIDEOCODEC_H263, 1336e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_VIDEOCODEC_MPEG4, 1346e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_VIDEOCODEC_AVC, 1356e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#ifndef ANDROID 1366e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_VIDEOCODEC_VC1, 1376e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#endif 1386e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#ifdef ANDROID 1396e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi XA_ANDROID_VIDEOCODEC_VP8 1406e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#endif 1416e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi}; 1426e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi 143df200f6a98da83bf2c1b14aff0ed356263dfb8b7Glenn Kastenconst SLuint32 * const VideoDecoderIds = VideoCodecIds; 1446e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi 14561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const SLmilliHertz SamplingRates_A[] = { 14661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_8, 14761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_11_025, 14861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_12, 14961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_16, 15061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_22_05, 15161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_24, 15261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_32, 15361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_44_1, 15461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_48 15561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 15661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 15761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstatic const SLAudioCodecDescriptor CodecDescriptor_A = { 15861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 2, // maxChannels 15961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 8, // minBitsPerSample 16061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 16, // maxBitsPerSample 16161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_8, // minSampleRate 16261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_SAMPLINGRATE_48, // maxSampleRate 16361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_BOOLEAN_FALSE, // isFreqRangeContinuous 16461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten (SLmilliHertz *) SamplingRates_A, 16561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten // pSampleRatesSupported; 16661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten sizeof(SamplingRates_A) / sizeof(SamplingRates_A[0]), 16761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten // numSampleRatesSupported 16861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 1, // minBitRate 1693eaa329775fc522d8ea4acd4edc379eabf9ac332Glenn Kasten (SLuint32) ~0, // maxBitRate 17061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_BOOLEAN_TRUE, // isBitrateRangeContinuous 17161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten NULL, // pBitratesSupported 17261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 0, // numBitratesSupported 17361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten SL_AUDIOPROFILE_PCM, // profileSetting 17461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 0 // modeSetting 17561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 17661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 177369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kastenconst CodecDescriptor DecoderDescriptors[] = { 17861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten {SL_AUDIOCODEC_PCM, &CodecDescriptor_A}, 179a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_MP3, &CodecDescriptor_A}, 180a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMR, &CodecDescriptor_A}, 181a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMRWB, &CodecDescriptor_A}, 182a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMRWBPLUS, &CodecDescriptor_A}, 183a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AAC, &CodecDescriptor_A}, 184a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_WMA, &CodecDescriptor_A}, 185a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_REAL, &CodecDescriptor_A}, 186a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_VORBIS, &CodecDescriptor_A}, 18761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten {SL_AUDIOCODEC_NULL, NULL} 18861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 18961ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 190369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kastenconst CodecDescriptor EncoderDescriptors[] = { 19161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten {SL_AUDIOCODEC_PCM, &CodecDescriptor_A}, 192a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_MP3, &CodecDescriptor_A}, 193a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMR, &CodecDescriptor_A}, 194a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMRWB, &CodecDescriptor_A}, 195a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AMRWBPLUS, &CodecDescriptor_A}, 196a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_AAC, &CodecDescriptor_A}, 197a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_WMA, &CodecDescriptor_A}, 198a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_REAL, &CodecDescriptor_A}, 199a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten {SL_AUDIOCODEC_VORBIS, &CodecDescriptor_A}, 20061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten {SL_AUDIOCODEC_NULL, NULL} 20161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 2028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten/** \brief Helper shared by decoder and encoder */ 2058db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 2068db0b106cdce5f5216b1535492de7930ad738aedGlenn KastenSLresult GetCodecCapabilities(SLuint32 codecId, SLuint32 *pIndex, 2078db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLAudioCodecDescriptor *pDescriptor, const CodecDescriptor *codecDescriptors) 2088db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 2098db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == pIndex) { 2108db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return SL_RESULT_PARAMETER_INVALID; 2118db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2128db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten const CodecDescriptor *cd = codecDescriptors; 2138db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLuint32 index; 2148db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (NULL == pDescriptor) { 2158db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten for (index = 0 ; NULL != cd->mDescriptor; ++cd) { 2168db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (cd->mCodecID == codecId) { 2178db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten ++index; 2188db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2198db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2208db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pIndex = index; 2218db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return SL_RESULT_SUCCESS; 2228db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten index = *pIndex; 2248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten for ( ; NULL != cd->mDescriptor; ++cd) { 2258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (cd->mCodecID == codecId) { 2268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (0 == index) { 2278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten *pDescriptor = *cd->mDescriptor; 2288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#if 0 // Temporary workaround for Khronos bug 6331 2298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten if (0 < pDescriptor->numSampleRatesSupported) { 2308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten // The malloc is not in the 1.0.1 specification 2318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten SLmilliHertz *temp = (SLmilliHertz *) malloc(sizeof(SLmilliHertz) * 2328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pDescriptor->numSampleRatesSupported); 2338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(NULL != temp); 2348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten memcpy(temp, pDescriptor->pSampleRatesSupported, sizeof(SLmilliHertz) * 2358db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pDescriptor->numSampleRatesSupported); 2368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pDescriptor->pSampleRatesSupported = temp; 2378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } else { 2388db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten pDescriptor->pSampleRatesSupported = NULL; 2398db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif 2418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return SL_RESULT_SUCCESS; 2428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten --index; 2448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2458db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten } 2468db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return SL_RESULT_PARAMETER_INVALID; 2478db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 248