android_defs.h revision 6f0f5640d190b0187c356eb53bd96d9f9e49da60
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 NUM_AUDIOPLAYER_MAP_TYPES 40}; 41 42 43/** 44 * Used to define the states of the OpenSL ES / OpenMAX AL object initialization and preparation 45 * with regards to the Android-side of the data, in particular as affected by the play state. 46 */ 47enum AndroidObjectState { 48 ANDROID_UNINITIALIZED = -1, // never called SetPlayState(PAUSED or PLAYING) 49 ANDROID_PREPARING, // currently preparing due to first SetPlayState(PAUSED or PLAYING) 50 ANDROID_READY, // preparation has completed, and will not be attempted again 51 // NUM_ANDROID_STATES // unused 52}; 53 54 55#define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC 56 57#define PLAYER_FAILURE 0 58#define PLAYER_SUCCESS 1 59 60#define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll) 61 62#define MPEG2_TS_BLOCK_SIZE 188 63 64// FIXME separate the cases where we don't need an AudioTrack callback 65typedef struct AudioPlayback_Parameters_struct { 66 int streamType; 67 int sessionId; 68 android::AudioTrack::callback_t trackcb; 69 void* trackcbUser; 70} AudioPlayback_Parameters; 71 72/** 73 * Structure to maintain the set of audio levels about a player 74 */ 75typedef struct AndroidAudioLevels_t { 76 /** 77 * Is this player muted 78 */ 79 bool mMute; 80 /** 81 * Send level to aux effect, there's a single aux bus, so there's a single level 82 */ 83 // FIXME not used yet, will be used when supporting effects in OpenMAX AL 84 //SLmillibel mAuxSendLevel; 85 /** 86 * Attenuation factor derived from direct level 87 */ 88 // FIXME not used yet, will be used when supporting effects in OpenMAX AL 89 //float mAmplFromDirectLevel; 90 /** 91 * Android Left/Right volume 92 * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification 93 * (or attenuation) represented as a float from 0.0f to 1.0f 94 */ 95 float mFinalVolume[STEREO_CHANNELS]; 96} AndroidAudioLevels; 97 98 99/** 100 * Event notification callback from Android to SL ES framework 101 */ 102typedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser); 103 104/** 105 * Audio data push callback from Android objects to SL ES framework 106 */ 107typedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, void* user); 108 109 110/** 111 * Events sent to mNotifyClient during prepare, prefetch, and playback 112 * used in APlayer::notify() and AMessage::findxxx() 113 */ 114#define PLAYEREVENT_PREPARED "prep" 115#define PLAYEREVENT_PREFETCHSTATUSCHANGE "prsc" 116#define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu" 117#define PLAYEREVENT_ENDOFSTREAM "eos" 118#define PLAYEREVENT_VIDEO_SIZE_UPDATE "vsiz" 119 120 121/** 122 * Time value when time is unknown. Used for instance for duration or playback position 123 */ 124#define ANDROID_UNKNOWN_TIME -1 125 126/** 127 * Event mask for MPEG-2 TS events associated with TS data 128 */ 129#define ANDROID_MP2TSEVENT_NONE ((SLuint32) 0x0) 130// buffer is at End Of Stream 131#define ANDROID_MP2TSEVENT_EOS ((SLuint32) 0x1) 132// buffer marks a discontinuity with previous TS data, resume display as soon as possible 133#define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1) 134// buffer marks a discontinuity with previous TS data, resume display upon reaching the 135// associated presentation time stamp 136#define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2) 137// buffer marks a format change with previous TS data, resume display as soon as possible 138#define ANDROID_MP2TSEVENT_FORMAT_CHANGE ((SLuint32) 0x1 << 3) 139 140 141/** 142 * Additional metadata keys 143 * the ANDROID_KEY_PCMFORMAT_* keys follow the fields of the SLDataFormat_PCM struct, and as such 144 * all corresponding values match SLuint32 size, and field definitions. 145 * FIXME these values are candidates to be included in OpenSLES_Android.h as official metadata 146 * keys supported on the platform. 147 */ 148#define ANDROID_KEY_PCMFORMAT_NUMCHANNELS "AndroidPcmFormatNumChannels" 149#define ANDROID_KEY_PCMFORMAT_SAMPLESPERSEC "AndroidPcmFormatSamplesPerSec" 150#define ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE "AndroidPcmFormatBitsPerSample" 151#define ANDROID_KEY_PCMFORMAT_CONTAINERSIZE "AndroidPcmFormatContainerSize" 152#define ANDROID_KEY_PCMFORMAT_CHANNELMASK "AndroidPcmFormatChannelMask" 153#define ANDROID_KEY_PCMFORMAT_ENDIANNESS "AndroidPcmFormatEndianness" 154 155/** 156 * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType 157 */ 158enum AndroidBufferType_type { 159 kAndroidBufferTypeInvalid = ((SLuint16) 0x0), 160 kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1), 161}; 162 163/** 164 * Notification thresholds relative to content duration in the cache 165 */ 166#define DURATION_CACHED_HIGH_MS 30000 // 30s 167#define DURATION_CACHED_MED_MS 10000 // 10s 168#define DURATION_CACHED_LOW_MS 2000 // 2s 169 170 171namespace android { 172 173/** 174 * Prefetch cache status 175 */ 176enum CacheStatus_t { 177 kStatusUnknown = -1, 178 kStatusEmpty = 0, 179 kStatusLow, 180 kStatusIntermediate, 181 kStatusEnough, 182 kStatusHigh 183}; 184 185enum { 186 kDataLocatorNone = 'none', 187 kDataLocatorUri = 'uri', 188 kDataLocatorFd = 'fd', 189}; 190 191struct FdInfo { 192 int fd; 193 int64_t offset; 194 int64_t length; 195}; 196 197// TODO currently used by SfPlayer, to replace by DataLocator2 198union DataLocator { 199 char* uri; 200 FdInfo fdi; 201}; 202 203union DataLocator2 { 204 const char* uriRef; 205 FdInfo fdi; 206}; 207 208} // namespace android 209