1*bebae9c0SAndroid Build Coastguard Worker /* 2*bebae9c0SAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project 3*bebae9c0SAndroid Build Coastguard Worker * 4*bebae9c0SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*bebae9c0SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*bebae9c0SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*bebae9c0SAndroid Build Coastguard Worker * 8*bebae9c0SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*bebae9c0SAndroid Build Coastguard Worker * 10*bebae9c0SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*bebae9c0SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*bebae9c0SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*bebae9c0SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*bebae9c0SAndroid Build Coastguard Worker * limitations under the License. 15*bebae9c0SAndroid Build Coastguard Worker */ 16*bebae9c0SAndroid Build Coastguard Worker 17*bebae9c0SAndroid Build Coastguard Worker 18*bebae9c0SAndroid Build Coastguard Worker /** 19*bebae9c0SAndroid Build Coastguard Worker * Used to define the mapping from an OpenSL ES or OpenMAX AL object to an Android 20*bebae9c0SAndroid Build Coastguard Worker * media framework object 21*bebae9c0SAndroid Build Coastguard Worker */ 22*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectType { 23*bebae9c0SAndroid Build Coastguard Worker INVALID_TYPE =-1, 24*bebae9c0SAndroid Build Coastguard Worker // audio player, playing from a URI or FD data source 25*bebae9c0SAndroid Build Coastguard Worker AUDIOPLAYER_FROM_URIFD = 0, 26*bebae9c0SAndroid Build Coastguard Worker // audio player, playing PCM buffers in a buffer queue data source 27*bebae9c0SAndroid Build Coastguard Worker AUDIOPLAYER_FROM_PCM_BUFFERQUEUE = 1, 28*bebae9c0SAndroid Build Coastguard Worker // audio player, playing transport stream packets in an Android buffer queue data source 29*bebae9c0SAndroid Build Coastguard Worker AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 2, 30*bebae9c0SAndroid Build Coastguard Worker // audio player, decoding from a URI or FD data source to a buffer queue data sink in PCM format 31*bebae9c0SAndroid Build Coastguard Worker AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE = 3, 32*bebae9c0SAndroid Build Coastguard Worker // audio video player, playing transport stream packets in an Android buffer queue data source 33*bebae9c0SAndroid Build Coastguard Worker AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 4, 34*bebae9c0SAndroid Build Coastguard Worker // audio video player, playing from a URI or FD data source 35*bebae9c0SAndroid Build Coastguard Worker AUDIOVIDEOPLAYER_FROM_URIFD = 5, 36*bebae9c0SAndroid Build Coastguard Worker // audio recorder, recording from an input device data source, streamed into a 37*bebae9c0SAndroid Build Coastguard Worker // PCM buffer queue data sink 38*bebae9c0SAndroid Build Coastguard Worker AUDIORECORDER_FROM_MIC_TO_PCM_BUFFERQUEUE = 6, 39*bebae9c0SAndroid Build Coastguard Worker // audio player, decoding from an Android buffer queue with ADTS data, 40*bebae9c0SAndroid Build Coastguard Worker // to a buffer queue data sink in PCM format 41*bebae9c0SAndroid Build Coastguard Worker AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE = 7, 42*bebae9c0SAndroid Build Coastguard Worker NUM_AUDIOPLAYER_MAP_TYPES 43*bebae9c0SAndroid Build Coastguard Worker }; 44*bebae9c0SAndroid Build Coastguard Worker 45*bebae9c0SAndroid Build Coastguard Worker 46*bebae9c0SAndroid Build Coastguard Worker /** 47*bebae9c0SAndroid Build Coastguard Worker * Used to define the states of the OpenSL ES / OpenMAX AL object initialization and preparation 48*bebae9c0SAndroid Build Coastguard Worker * with regards to the Android-side of the data, in particular as affected by the play state. 49*bebae9c0SAndroid Build Coastguard Worker */ 50*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectState { 51*bebae9c0SAndroid Build Coastguard Worker ANDROID_UNINITIALIZED = -1, // never called SetPlayState(PAUSED or PLAYING) 52*bebae9c0SAndroid Build Coastguard Worker ANDROID_PREPARING, // currently preparing due to first SetPlayState(PAUSED or PLAYING) 53*bebae9c0SAndroid Build Coastguard Worker ANDROID_READY, // preparation has completed, and will not be attempted again 54*bebae9c0SAndroid Build Coastguard Worker // NUM_ANDROID_STATES // unused 55*bebae9c0SAndroid Build Coastguard Worker }; 56*bebae9c0SAndroid Build Coastguard Worker 57*bebae9c0SAndroid Build Coastguard Worker /** 58*bebae9c0SAndroid Build Coastguard Worker * Must be one of the supported stream types that can be set through SLAndroidConfigurationItf 59*bebae9c0SAndroid Build Coastguard Worker */ 60*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC 61*bebae9c0SAndroid Build Coastguard Worker 62*bebae9c0SAndroid Build Coastguard Worker #define PLAYER_FAILURE ((int32_t) android::UNKNOWN_ERROR) 63*bebae9c0SAndroid Build Coastguard Worker #define PLAYER_SUCCESS ((int32_t) android::NO_ERROR) 64*bebae9c0SAndroid Build Coastguard Worker 65*bebae9c0SAndroid Build Coastguard Worker #define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll) 66*bebae9c0SAndroid Build Coastguard Worker 67*bebae9c0SAndroid Build Coastguard Worker #define MPEG2_TS_PACKET_SIZE 188 68*bebae9c0SAndroid Build Coastguard Worker #define MPEG2_TS_PACKET_SYNC 0x47 69*bebae9c0SAndroid Build Coastguard Worker 70*bebae9c0SAndroid Build Coastguard Worker struct AudioPlayback_Parameters { 71*bebae9c0SAndroid Build Coastguard Worker audio_stream_type_t streamType; 72*bebae9c0SAndroid Build Coastguard Worker audio_session_t sessionId; 73*bebae9c0SAndroid Build Coastguard Worker }; 74*bebae9c0SAndroid Build Coastguard Worker 75*bebae9c0SAndroid Build Coastguard Worker /** 76*bebae9c0SAndroid Build Coastguard Worker * Structure to maintain the set of audio levels about a player 77*bebae9c0SAndroid Build Coastguard Worker */ 78*bebae9c0SAndroid Build Coastguard Worker struct AndroidAudioLevels { 79*bebae9c0SAndroid Build Coastguard Worker /** 80*bebae9c0SAndroid Build Coastguard Worker * Send level to aux effect, there's a single aux bus, so there's a single level 81*bebae9c0SAndroid Build Coastguard Worker */ 82*bebae9c0SAndroid Build Coastguard Worker // FIXME not used yet, will be used when supporting effects in OpenMAX AL 83*bebae9c0SAndroid Build Coastguard Worker //SLmillibel mAuxSendLevel; 84*bebae9c0SAndroid Build Coastguard Worker /** 85*bebae9c0SAndroid Build Coastguard Worker * Attenuation factor derived from direct level 86*bebae9c0SAndroid Build Coastguard Worker */ 87*bebae9c0SAndroid Build Coastguard Worker // FIXME not used yet, will be used when supporting effects in OpenMAX AL 88*bebae9c0SAndroid Build Coastguard Worker //float mAmplFromDirectLevel; 89*bebae9c0SAndroid Build Coastguard Worker /** 90*bebae9c0SAndroid Build Coastguard Worker * Android Left/Right volume 91*bebae9c0SAndroid Build Coastguard Worker * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification 92*bebae9c0SAndroid Build Coastguard Worker * (or attenuation) represented as a float from 0.0f to 1.0f 93*bebae9c0SAndroid Build Coastguard Worker */ 94*bebae9c0SAndroid Build Coastguard Worker float mFinalVolume[STEREO_CHANNELS]; 95*bebae9c0SAndroid Build Coastguard Worker }; 96*bebae9c0SAndroid Build Coastguard Worker 97*bebae9c0SAndroid Build Coastguard Worker 98*bebae9c0SAndroid Build Coastguard Worker /** 99*bebae9c0SAndroid Build Coastguard Worker * Event notification callback from Android to SL ES framework 100*bebae9c0SAndroid Build Coastguard Worker */ 101*bebae9c0SAndroid Build Coastguard Worker typedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser); 102*bebae9c0SAndroid Build Coastguard Worker 103*bebae9c0SAndroid Build Coastguard Worker /** 104*bebae9c0SAndroid Build Coastguard Worker * Audio data push callback from Android objects to SL ES framework 105*bebae9c0SAndroid Build Coastguard Worker */ 106*bebae9c0SAndroid Build Coastguard Worker typedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, CAudioPlayer* ap); 107*bebae9c0SAndroid Build Coastguard Worker 108*bebae9c0SAndroid Build Coastguard Worker 109*bebae9c0SAndroid Build Coastguard Worker /** 110*bebae9c0SAndroid Build Coastguard Worker * Events sent to mNotifyClient during prepare, prefetch, and playback 111*bebae9c0SAndroid Build Coastguard Worker * used in APlayer::notify() and AMessage::findxxx() 112*bebae9c0SAndroid Build Coastguard Worker */ 113*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_PREPARED "prep" 114*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_PREFETCHSTATUSCHANGE "prsc" 115*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu" 116*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_ENDOFSTREAM "eos" 117*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_VIDEO_SIZE_UPDATE "vsiz" 118*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_CHANNEL_COUNT "ccnt" // channel count is now known 119*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_PLAY "play" // SL_PLAYEVENT_* 120*bebae9c0SAndroid Build Coastguard Worker #define PLAYEREVENT_ERRORAFTERPREPARE "easp" // error after successful prepare 121*bebae9c0SAndroid Build Coastguard Worker 122*bebae9c0SAndroid Build Coastguard Worker 123*bebae9c0SAndroid Build Coastguard Worker /** 124*bebae9c0SAndroid Build Coastguard Worker * Time value when time is unknown. Used for instance for duration or playback position 125*bebae9c0SAndroid Build Coastguard Worker */ 126*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_UNKNOWN_TIME (-1) 127*bebae9c0SAndroid Build Coastguard Worker 128*bebae9c0SAndroid Build Coastguard Worker /** 129*bebae9c0SAndroid Build Coastguard Worker * Event mask for MPEG-2 TS events associated with TS data 130*bebae9c0SAndroid Build Coastguard Worker */ 131*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_NONE ((SLuint32) 0x0) 132*bebae9c0SAndroid Build Coastguard Worker // buffer is at End Of Stream 133*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_EOS ((SLuint32) 0x1) 134*bebae9c0SAndroid Build Coastguard Worker // buffer marks a discontinuity with previous TS data, resume display as soon as possible 135*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1) 136*bebae9c0SAndroid Build Coastguard Worker // buffer marks a discontinuity with previous TS data, resume display upon reaching the 137*bebae9c0SAndroid Build Coastguard Worker // associated presentation time stamp 138*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2) 139*bebae9c0SAndroid Build Coastguard Worker // buffer marks a format change with previous TS data, resume display as soon as possible 140*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_FULL ((SLuint32) 0x1 << 3) 141*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_VIDEO ((SLuint32) 0x1 << 4) 142*bebae9c0SAndroid Build Coastguard Worker 143*bebae9c0SAndroid Build Coastguard Worker /** 144*bebae9c0SAndroid Build Coastguard Worker * Event mask for AAC ADTS events associated with ADTS data 145*bebae9c0SAndroid Build Coastguard Worker */ 146*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_ADTSEVENT_NONE ANDROID_MP2TSEVENT_NONE 147*bebae9c0SAndroid Build Coastguard Worker // buffer is at End Of Stream 148*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_ADTSEVENT_EOS ANDROID_MP2TSEVENT_EOS 149*bebae9c0SAndroid Build Coastguard Worker 150*bebae9c0SAndroid Build Coastguard Worker /** 151*bebae9c0SAndroid Build Coastguard Worker * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType 152*bebae9c0SAndroid Build Coastguard Worker */ 153*bebae9c0SAndroid Build Coastguard Worker enum AndroidBufferType_type { 154*bebae9c0SAndroid Build Coastguard Worker kAndroidBufferTypeInvalid = ((SLuint16) 0x0), 155*bebae9c0SAndroid Build Coastguard Worker kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1), 156*bebae9c0SAndroid Build Coastguard Worker kAndroidBufferTypeAacadts = ((SLuint16) 0x2), 157*bebae9c0SAndroid Build Coastguard Worker }; 158*bebae9c0SAndroid Build Coastguard Worker 159*bebae9c0SAndroid Build Coastguard Worker /** 160*bebae9c0SAndroid Build Coastguard Worker * MIME types required for data in Android Buffer Queues 161*bebae9c0SAndroid Build Coastguard Worker */ 162*bebae9c0SAndroid Build Coastguard Worker // The preferred MIME types for new applications are in ../../include/*/OpenMAXAL_Android.h 163*bebae9c0SAndroid Build Coastguard Worker // The legacy MIME type used elsewhere in the Android framework for AAC ADTS is below: 164*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_MIME_AACADTS_ANDROID_FRAMEWORK "audio/aac-adts" 165*bebae9c0SAndroid Build Coastguard Worker 166*bebae9c0SAndroid Build Coastguard Worker /** 167*bebae9c0SAndroid Build Coastguard Worker * Notification thresholds relative to content duration in the cache 168*bebae9c0SAndroid Build Coastguard Worker */ 169*bebae9c0SAndroid Build Coastguard Worker #define DURATION_CACHED_HIGH_MS 30000 // 30s 170*bebae9c0SAndroid Build Coastguard Worker #define DURATION_CACHED_MED_MS 10000 // 10s 171*bebae9c0SAndroid Build Coastguard Worker #define DURATION_CACHED_LOW_MS 2000 // 2s 172*bebae9c0SAndroid Build Coastguard Worker 173*bebae9c0SAndroid Build Coastguard Worker 174*bebae9c0SAndroid Build Coastguard Worker namespace android { 175*bebae9c0SAndroid Build Coastguard Worker 176*bebae9c0SAndroid Build Coastguard Worker /** 177*bebae9c0SAndroid Build Coastguard Worker * Prefetch cache status 178*bebae9c0SAndroid Build Coastguard Worker */ 179*bebae9c0SAndroid Build Coastguard Worker enum CacheStatus_t { 180*bebae9c0SAndroid Build Coastguard Worker kStatusUnknown = -1, 181*bebae9c0SAndroid Build Coastguard Worker kStatusEmpty = 0, 182*bebae9c0SAndroid Build Coastguard Worker kStatusLow, 183*bebae9c0SAndroid Build Coastguard Worker kStatusIntermediate, 184*bebae9c0SAndroid Build Coastguard Worker kStatusEnough, 185*bebae9c0SAndroid Build Coastguard Worker kStatusHigh 186*bebae9c0SAndroid Build Coastguard Worker }; 187*bebae9c0SAndroid Build Coastguard Worker 188*bebae9c0SAndroid Build Coastguard Worker enum { 189*bebae9c0SAndroid Build Coastguard Worker kDataLocatorNone = 0, 190*bebae9c0SAndroid Build Coastguard Worker kDataLocatorUri = 1, 191*bebae9c0SAndroid Build Coastguard Worker kDataLocatorFd = 2, 192*bebae9c0SAndroid Build Coastguard Worker }; 193*bebae9c0SAndroid Build Coastguard Worker 194*bebae9c0SAndroid Build Coastguard Worker struct FdInfo { 195*bebae9c0SAndroid Build Coastguard Worker int fd; 196*bebae9c0SAndroid Build Coastguard Worker int64_t offset; 197*bebae9c0SAndroid Build Coastguard Worker int64_t length; 198*bebae9c0SAndroid Build Coastguard Worker bool mCloseAfterUse; // whether to close fd after last reference to fd 199*bebae9c0SAndroid Build Coastguard Worker }; 200*bebae9c0SAndroid Build Coastguard Worker 201*bebae9c0SAndroid Build Coastguard Worker // TODO currently used by SfPlayer, to replace by DataLocator2 202*bebae9c0SAndroid Build Coastguard Worker union DataLocator { 203*bebae9c0SAndroid Build Coastguard Worker char* uri; 204*bebae9c0SAndroid Build Coastguard Worker FdInfo fdi; 205*bebae9c0SAndroid Build Coastguard Worker }; 206*bebae9c0SAndroid Build Coastguard Worker 207*bebae9c0SAndroid Build Coastguard Worker union DataLocator2 { 208*bebae9c0SAndroid Build Coastguard Worker const char* uriRef; 209*bebae9c0SAndroid Build Coastguard Worker FdInfo fdi; 210*bebae9c0SAndroid Build Coastguard Worker }; 211*bebae9c0SAndroid Build Coastguard Worker 212*bebae9c0SAndroid Build Coastguard Worker 213*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_NONE ((SLuint32) 0x1 << 0) 214*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_LATENCY ((SLuint32) 0x1 << 1) 215*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS ((SLuint32) 0x1 << 2) 216*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_POWER_SAVING ((SLuint32) 0x1 << 3) 217*bebae9c0SAndroid Build Coastguard Worker 218*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_DEFAULT ANDROID_PERFORMANCE_MODE_LATENCY 219*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_PERFORMANCE_MODE_ALL (ANDROID_PERFORMANCE_MODE_LATENCY | \ 220*bebae9c0SAndroid Build Coastguard Worker ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS | \ 221*bebae9c0SAndroid Build Coastguard Worker ANDROID_PERFORMANCE_MODE_NONE | \ 222*bebae9c0SAndroid Build Coastguard Worker ANDROID_PERFORMANCE_MODE_POWER_SAVING) 223*bebae9c0SAndroid Build Coastguard Worker 224*bebae9c0SAndroid Build Coastguard Worker // This is used for exact matching by MediaMetrics. So do not change it. 225*bebae9c0SAndroid Build Coastguard Worker #define ANDROID_OPENSLES_CALLER_NAME "opensles" 226*bebae9c0SAndroid Build Coastguard Worker 227*bebae9c0SAndroid Build Coastguard Worker } // namespace android 228