1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #define ANDROID_DEFAULT_AUDIOTRACK_BUFFER_SIZE 4096 18 19 /************************************************************************************************** 20 * AudioPlayer lifecycle 21 ****************************/ 22 /* 23 * Checks that the combination of source and sink parameters is supported in this implementation. 24 * Return 25 * SL_RESULT_SUCCESS 26 * SL_PARAMETER_INVALID 27 */ 28 extern SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer); 29 30 /* 31 * Determines the Android media framework object that maps to the given audio source and sink. 32 * Return 33 * SL_RESULT_SUCCESS if the Android resources were successfully created 34 * SL_PARAMETER_INVALID if the Android resources couldn't be created due to an invalid or 35 * unsupported parameter or value 36 * SL_RESULT_CONTENT_UNSUPPORTED if a format is not supported (e.g. sample rate too high) 37 */ 38 extern SLresult android_audioPlayer_create(CAudioPlayer *pAudioPlayer); 39 40 /* 41 * Allocates and initializes the Android media framework objects intended to be used with the 42 * given CAudioPlayer data 43 * Return 44 * SL_RESULT_SUCCESS 45 * SL_RESULT_CONTENT_UNSUPPORTED if an error occurred during the allocation and initialization 46 * of the Android resources 47 */ 48 extern SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async); 49 50 /* 51 * Return 52 * SL_RESULT_SUCCESS 53 * SL_RESULT_PARAMETER_INVALID 54 * SL_RESULT_INTERNAL_ERROR 55 * SL_RESULT_PRECONDITIONS_VIOLATED 56 */ 57 extern SLresult android_audioPlayer_setConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey, 58 const void *pConfigValue, SLuint32 valueSize); 59 60 /* 61 * if pConfigValue is NULL, pValueSize contains the size required for the given key 62 * 63 * Return 64 * SL_RESULT_SUCCESS 65 * SL_RESULT_PARAMETER_INVALID 66 * SL_RESULT_INTERNAL_ERROR 67 * SL_RESULT_PRECONDITIONS_VIOLATED 68 */ 69 extern SLresult android_audioPlayer_getConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey, 70 SLuint32* pValueSize, void *pConfigValue); 71 72 extern SLresult android_audioPlayer_preDestroy(CAudioPlayer *pAudioPlayer); 73 74 extern SLresult android_audioPlayer_destroy(CAudioPlayer *pAudioPlayer); 75 76 /************************************************************************************************** 77 * Configuration 78 ****************************/ 79 extern SLresult android_audioPlayer_setPlaybackRateAndConstraints(CAudioPlayer *pAudioPlayer, 80 SLpermille rate, SLuint32 constraints); 81 82 extern SLresult android_audioPlayer_getDuration(IPlay *pPlayItf, SLmillisecond *pDurMsec); 83 84 extern void android_audioPlayer_volumeUpdate(CAudioPlayer *pAudioPlayer); 85 86 extern SLresult android_audioPlayer_setBufferingUpdateThresholdPerMille(CAudioPlayer *pAudioPlayer, 87 SLpermille threshold); 88 89 /************************************************************************************************** 90 * Metadata Extraction 91 ****************************/ 92 /* 93 * For all metadata extraction functions: 94 * Precondition: 95 * no lock held 96 * pAudioPlayer != NULL 97 * input pointers != NULL (pItemCount, pKeySize, pKey, pValueSize, pValue) 98 * Return: 99 * SL_RESULT_SUCCESS 100 * SL_RESULT_PARAMETER_INVALID 101 */ 102 extern SLresult android_audioPlayer_metadata_getItemCount(CAudioPlayer *pAudioPlayer, 103 SLuint32 *pItemCount); 104 105 extern SLresult android_audioPlayer_metadata_getKeySize(CAudioPlayer *pAudioPlayer, 106 SLuint32 index, SLuint32 *pKeySize); 107 108 extern SLresult android_audioPlayer_metadata_getKey(CAudioPlayer *pAudioPlayer, 109 SLuint32 index, SLuint32 size, SLMetadataInfo *pKey); 110 111 extern SLresult android_audioPlayer_metadata_getValueSize(CAudioPlayer *pAudioPlayer, 112 SLuint32 index, SLuint32 *pValueSize); 113 114 extern SLresult android_audioPlayer_metadata_getValue(CAudioPlayer *pAudioPlayer, 115 SLuint32 index, SLuint32 size, SLMetadataInfo *pValue); 116 117 /************************************************************************************************** 118 * Playback control and events 119 ****************************/ 120 extern void android_audioPlayer_setPlayState(CAudioPlayer *pAudioPlayer); 121 122 extern void android_audioPlayer_usePlayEventMask(CAudioPlayer *pAudioPlayer); 123 124 extern SLresult android_audioPlayer_seek(CAudioPlayer *pAudioPlayer, SLmillisecond posMsec); 125 126 extern SLresult android_audioPlayer_loop(CAudioPlayer *pAudioPlayer, SLboolean loopEnable); 127 128 extern void android_audioPlayer_getPosition(IPlay *pPlayItf, SLmillisecond *pPosMsec); 129 130 /************************************************************************************************** 131 * Buffer Queue events 132 ****************************/ 133 extern void android_audioPlayer_bufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer); 134 135 extern SLresult android_audioPlayer_bufferQueue_onClear(CAudioPlayer *pAudioPlayer); 136 137 /************************************************************************************************** 138 * Android Buffer Queue 139 ****************************/ 140 /* must be called with a lock on pAudioPlayer->mThis */ 141 extern SLresult android_audioPlayer_androidBufferQueue_registerCallback_l( 142 CAudioPlayer *pAudioPlayer); 143 /* must be called with a lock on pAudioPlayer->mThis */ 144 extern void android_audioPlayer_androidBufferQueue_clear_l(CAudioPlayer *pAudioPlayer); 145 /* must be called with a lock on pAudioPlayer->mThis */ 146 extern void android_audioPlayer_androidBufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer); 147