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