android_defs.h revision 64621eac543d714d4d3f7cb9c24205f2ddc59201
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/* 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Copyright (C) 2010 The Android Open Source Project 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Licensed under the Apache License, Version 2.0 (the "License"); 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * you may not use this file except in compliance with the License. 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * You may obtain a copy of the License at 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * http://www.apache.org/licenses/LICENSE-2.0 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Unless required by applicable law or agreed to in writing, software 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * distributed under the License is distributed on an "AS IS" BASIS, 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * See the License for the specific language governing permissions and 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * limitations under the License. 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Used to define the mapping from an OpenSL ES or OpenMAX AL object to an Android 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * media framework object 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverenum AndroidObjectType { 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver INVALID_TYPE =-1, 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio player, playing from a URI or FD data source 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOPLAYER_FROM_URIFD = 0, 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio player, playing PCM buffers in a buffer queue data source 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOPLAYER_FROM_PCM_BUFFERQUEUE = 1, 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio player, playing transport stream packets in an Android buffer queue data source 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 2, 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio player, decoding from a URI or FD data source to a buffer queue data sink in PCM format 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE = 3, 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio video player, playing transport stream packets in an Android buffer queue data source 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 4, 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio video player, playing from a URI or FD data source 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIOVIDEOPLAYER_FROM_URIFD = 5, 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // audio recorder, recording from an input device data source, streamed into a 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // PCM buffer queue data sink 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver AUDIORECORDER_FROM_MIC_TO_PCM_BUFFERQUEUE = 6, 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NUM_AUDIOPLAYER_MAP_TYPES 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Used to define the states of the OpenSL ES / OpenMAX AL object initialization and preparation 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * with regards to the Android-side of the data, in particular as affected by the play state. 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverenum AndroidObjectState { 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANDROID_UNINITIALIZED = -1, // never called SetPlayState(PAUSED or PLAYING) 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANDROID_PREPARING, // currently preparing due to first SetPlayState(PAUSED or PLAYING) 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ANDROID_READY, // preparation has completed, and will not be attempted again 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // NUM_ANDROID_STATES // unused 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYER_FAILURE 0 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYER_SUCCESS 1 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll) 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define MPEG2_TS_BLOCK_SIZE 188 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// FIXME separate the cases where we don't need an AudioTrack callback 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct AudioPlayback_Parameters_struct { 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int streamType; 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int sessionId; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver android::AudioTrack::callback_t trackcb; 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void* trackcbUser; 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} AudioPlayback_Parameters; 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Structure to maintain the set of audio levels about a player 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef struct AndroidAudioLevels_t { 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Is this player muted 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool mMute; 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Send level to aux effect, there's a single aux bus, so there's a single level 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // FIXME not used yet, will be used when supporting effects in OpenMAX AL 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //SLmillibel mAuxSendLevel; 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Attenuation factor derived from direct level 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // FIXME not used yet, will be used when supporting effects in OpenMAX AL 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //float mAmplFromDirectLevel; 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Android Left/Right volume 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * (or attenuation) represented as a float from 0.0f to 1.0f 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver float mFinalVolume[STEREO_CHANNELS]; 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} AndroidAudioLevels; 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Event notification callback from Android to SL ES framework 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser); 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Audio data push callback from Android objects to SL ES framework 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvertypedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, void* user); 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Events sent to mNotifyClient during prepare, prefetch, and playback 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * used in APlayer::notify() and AMessage::findxxx() 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYEREVENT_PREPARED "prep" 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYEREVENT_PREFETCHSTATUSCHANGE "prsc" 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu" 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYEREVENT_ENDOFSTREAM "eos" 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define PLAYEREVENT_VIDEO_SIZE_UPDATE "vsiz" 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Time value when time is unknown. Used for instance for duration or playback position 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_UNKNOWN_TIME -1 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Event mask for MPEG-2 TS events associated with TS data 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_MP2TSEVENT_NONE ((SLuint32) 0x0) 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// buffer is at End Of Stream 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_MP2TSEVENT_EOS ((SLuint32) 0x1) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// buffer marks a discontinuity with previous TS data, resume display as soon as possible 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1) 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// buffer marks a discontinuity with previous TS data, resume display upon reaching the 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// associated presentation time stamp 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2) 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Additional metadata keys 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * the ANDROID_KEY_PCMFORMAT_* keys follow the fields of the SLDataFormat_PCM struct, and as such 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * all corresponding values match SLuint32 size, and field definitions. 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * FIXME these values are candidates to be included in OpenSLES_Android.h as official metadata 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * keys supported on the platform. 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_NUMCHANNELS "AndroidPcmFormatNumChannels" 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_SAMPLESPERSEC "AndroidPcmFormatSamplesPerSec" 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE "AndroidPcmFormatBitsPerSample" 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_CONTAINERSIZE "AndroidPcmFormatContainerSize" 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_CHANNELMASK "AndroidPcmFormatChannelMask" 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define ANDROID_KEY_PCMFORMAT_ENDIANNESS "AndroidPcmFormatEndianness" 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverenum AndroidBufferType_type { 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kAndroidBufferTypeInvalid = ((SLuint16) 0x0), 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1), 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Notification thresholds relative to content duration in the cache 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define DURATION_CACHED_HIGH_MS 30000 // 30s 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define DURATION_CACHED_MED_MS 10000 // 10s 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define DURATION_CACHED_LOW_MS 2000 // 2s 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace android { 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/** 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Prefetch cache status 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverenum CacheStatus_t { 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusUnknown = -1, 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusEmpty = 0, 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusLow, 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusIntermediate, 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusEnough, 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kStatusHigh 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverenum { 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kDataLocatorNone = 'none', 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kDataLocatorUri = 'uri', 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver kDataLocatorFd = 'fd', 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverstruct FdInfo { 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int fd; 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int64_t offset; 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int64_t length; 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// TODO currently used by SfPlayer, to replace by DataLocator2 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverunion DataLocator { 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver char* uri; 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FdInfo fdi; 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverunion DataLocator2 { 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const char* uriRef; 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FdInfo fdi; 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} // namespace android 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver