android_defs.h revision 49935c51fddcd0caa0030e2aac0c3a7ba3339e3d
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
46 */
47enum AndroidObjectState {
48    ANDROID_UNINITIALIZED = -1,
49    ANDROID_PREPARING,
50    ANDROID_READY,
51    NUM_ANDROID_STATES
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
138
139/**
140 * Additional metadata keys
141 *   the ANDROID_KEY_PCMFORMAT_* keys follow the fields of the SLDataFormat_PCM struct, and as such
142 *     all corresponding values match SLuint32 size, and field definitions.
143 * FIXME these values are candidates to be included in OpenSLES_Android.h as official metadata
144 *     keys supported on the platform.
145 */
146#define ANDROID_KEY_PCMFORMAT_NUMCHANNELS   "AndroidPcmFormatNumChannels"
147#define ANDROID_KEY_PCMFORMAT_SAMPLESPERSEC "AndroidPcmFormatSamplesPerSec"
148#define ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE "AndroidPcmFormatBitsPerSample"
149#define ANDROID_KEY_PCMFORMAT_CONTAINERSIZE "AndroidPcmFormatContainerSize"
150#define ANDROID_KEY_PCMFORMAT_CHANNELMASK   "AndroidPcmFormatChannelMask"
151#define ANDROID_KEY_PCMFORMAT_ENDIANNESS    "AndroidPcmFormatEndianness"
152
153/**
154 * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType
155 */
156enum AndroidBufferType_type {
157    kAndroidBufferTypeInvalid = ((SLuint16) 0x0),
158    kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1),
159};
160
161/**
162 * Notification thresholds relative to content duration in the cache
163 */
164#define DURATION_CACHED_HIGH_MS  30000 // 30s
165#define DURATION_CACHED_MED_MS   10000 // 10s
166#define DURATION_CACHED_LOW_MS    2000 //  2s
167
168
169namespace android {
170
171/**
172 * Prefetch cache status
173 */
174enum CacheStatus_t {
175        kStatusUnknown = -1,
176        kStatusEmpty   = 0,
177        kStatusLow,
178        kStatusIntermediate,
179        kStatusEnough,
180        kStatusHigh
181};
182
183enum {
184    kDataLocatorNone = 'none',
185    kDataLocatorUri  = 'uri',
186    kDataLocatorFd   = 'fd',
187};
188
189struct FdInfo {
190    int fd;
191    int64_t offset;
192    int64_t length;
193};
194
195// TODO currently used by SfPlayer, to replace by DataLocator2
196union DataLocator {
197    char* uri;
198    FdInfo fdi;
199};
200
201union DataLocator2 {
202    const char* uriRef;
203    FdInfo fdi;
204};
205
206} // namespace android
207