android_defs.h revision 5e4d65e369f28746767aba11b618dee314bb8197
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 18/** 19 * Used to define the mapping from an OpenSL ES or OpenMAX AL object to an Android 20 * media framework object 21 */ 22enum AndroidObjectType { 23 INVALID_TYPE =-1, 24 // audio player, playing from a URI or FD data source 25 AUDIOPLAYER_FROM_URIFD = 0, 26 // audio player, playing PCM buffers in a buffer queue data source 27 AUDIOPLAYER_FROM_PCM_BUFFERQUEUE = 1, 28 // audio player, playing transport stream packets in an Android buffer queue data source 29 AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 2, 30 // audio player, decoding from a URI or FD data source to a buffer queue data sink in PCM format 31 AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE = 3, 32 // audio video player, playing transport stream packets in an Android buffer queue data source 33 AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 4, 34 // audio video player, playing from a URI or FD data source 35 AUDIOVIDEOPLAYER_FROM_URIFD = 5, 36 // audio recorder, recording from an input device data source, streamed into a 37 // PCM buffer queue data sink 38 AUDIORECORDER_FROM_MIC_TO_PCM_BUFFERQUEUE = 6, 39 // audio player, decoding from an Android buffer queue with ADTS data, 40 // to a buffer queue data sink in PCM format 41 AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE = 7, 42 NUM_AUDIOPLAYER_MAP_TYPES 43}; 44 45 46/** 47 * Used to define the states of the OpenSL ES / OpenMAX AL object initialization and preparation 48 * with regards to the Android-side of the data, in particular as affected by the play state. 49 */ 50enum AndroidObjectState { 51 ANDROID_UNINITIALIZED = -1, // never called SetPlayState(PAUSED or PLAYING) 52 ANDROID_PREPARING, // currently preparing due to first SetPlayState(PAUSED or PLAYING) 53 ANDROID_READY, // preparation has completed, and will not be attempted again 54 // NUM_ANDROID_STATES // unused 55}; 56 57 58#define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC 59 60#define PLAYER_FAILURE ((int32_t) android::UNKNOWN_ERROR) 61#define PLAYER_SUCCESS ((int32_t) android::NO_ERROR) 62 63#define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll) 64 65#define MPEG2_TS_BLOCK_SIZE 188 66 67typedef struct AudioPlayback_Parameters_struct { 68 int streamType; 69 int sessionId; 70} AudioPlayback_Parameters; 71 72/** 73 * Structure to maintain the set of audio levels about a player 74 */ 75typedef struct AndroidAudioLevels_t { 76 /** 77 * Send level to aux effect, there's a single aux bus, so there's a single level 78 */ 79 // FIXME not used yet, will be used when supporting effects in OpenMAX AL 80 //SLmillibel mAuxSendLevel; 81 /** 82 * Attenuation factor derived from direct level 83 */ 84 // FIXME not used yet, will be used when supporting effects in OpenMAX AL 85 //float mAmplFromDirectLevel; 86 /** 87 * Android Left/Right volume 88 * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification 89 * (or attenuation) represented as a float from 0.0f to 1.0f 90 */ 91 float mFinalVolume[STEREO_CHANNELS]; 92} AndroidAudioLevels; 93 94 95/** 96 * Event notification callback from Android to SL ES framework 97 */ 98typedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser); 99 100/** 101 * Audio data push callback from Android objects to SL ES framework 102 */ 103typedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, CAudioPlayer* ap); 104 105 106/** 107 * Events sent to mNotifyClient during prepare, prefetch, and playback 108 * used in APlayer::notify() and AMessage::findxxx() 109 */ 110#define PLAYEREVENT_PREPARED "prep" 111#define PLAYEREVENT_PREFETCHSTATUSCHANGE "prsc" 112#define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu" 113#define PLAYEREVENT_ENDOFSTREAM "eos" 114#define PLAYEREVENT_VIDEO_SIZE_UPDATE "vsiz" 115#define PLAYEREVENT_CHANNEL_COUNT "ccnt" // channel count is now known 116#define PLAYEREVENT_PLAY "play" // SL_PLAYEVENT_* 117#define PLAYEREVENT_ERRORAFTERPREPARE "easp" // error after successful prepare 118 119 120/** 121 * Time value when time is unknown. Used for instance for duration or playback position 122 */ 123#define ANDROID_UNKNOWN_TIME -1 124 125/** 126 * Event mask for MPEG-2 TS events associated with TS data 127 */ 128#define ANDROID_MP2TSEVENT_NONE ((SLuint32) 0x0) 129// buffer is at End Of Stream 130#define ANDROID_MP2TSEVENT_EOS ((SLuint32) 0x1) 131// buffer marks a discontinuity with previous TS data, resume display as soon as possible 132#define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1) 133// buffer marks a discontinuity with previous TS data, resume display upon reaching the 134// associated presentation time stamp 135#define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2) 136// buffer marks a format change with previous TS data, resume display as soon as possible 137#define ANDROID_MP2TSEVENT_FORMAT_CHANGE ((SLuint32) 0x1 << 3) 138 139/** 140 * Event mask for AAC ADTS events associated with ADTS data 141 */ 142#define ANDROID_ADTSEVENT_NONE ANDROID_MP2TSEVENT_NONE 143// buffer is at End Of Stream 144#define ANDROID_ADTSEVENT_EOS ANDROID_MP2TSEVENT_EOS 145 146/** 147 * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType 148 */ 149enum AndroidBufferType_type { 150 kAndroidBufferTypeInvalid = ((SLuint16) 0x0), 151 kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1), 152 kAndroidBufferTypeAacadts = ((SLuint16) 0x2), 153}; 154 155/** 156 * MIME types required for data in Android Buffer Queues 157 */ 158#define ANDROID_MIME_MP2TS "video/mp2ts" 159// the MIME type used elsewhere in the Android framework for AAC ADTS 160#define ANDROID_MIME_AACADTS_ANDROID_FRAMEWORK "audio/aac-adts" 161// the MIME type applications should use for AAC ADTS 162#define ANDROID_MIME_AACADTS "audio/vnd.android.aac-adts" 163 164/** 165 * Notification thresholds relative to content duration in the cache 166 */ 167#define DURATION_CACHED_HIGH_MS 30000 // 30s 168#define DURATION_CACHED_MED_MS 10000 // 10s 169#define DURATION_CACHED_LOW_MS 2000 // 2s 170 171 172namespace android { 173 174/** 175 * Prefetch cache status 176 */ 177enum CacheStatus_t { 178 kStatusUnknown = -1, 179 kStatusEmpty = 0, 180 kStatusLow, 181 kStatusIntermediate, 182 kStatusEnough, 183 kStatusHigh 184}; 185 186enum { 187 kDataLocatorNone = 'none', 188 kDataLocatorUri = 'uri', 189 kDataLocatorFd = 'fd', 190}; 191 192struct FdInfo { 193 int fd; 194 int64_t offset; 195 int64_t length; 196 bool mCloseAfterUse; // whether to close fd after last reference to fd 197}; 198 199// TODO currently used by SfPlayer, to replace by DataLocator2 200union DataLocator { 201 char* uri; 202 FdInfo fdi; 203}; 204 205union DataLocator2 { 206 const char* uriRef; 207 FdInfo fdi; 208}; 209 210} // namespace android 211