• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   */
22  enum 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   */
50  enum 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   * Must be one of the supported stream types that can be set through SLAndroidConfigurationItf
59   */
60  #define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC
61  
62  #define PLAYER_FAILURE ((int32_t) android::UNKNOWN_ERROR)
63  #define PLAYER_SUCCESS ((int32_t) android::NO_ERROR)
64  
65  #define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll)
66  
67  #define MPEG2_TS_PACKET_SIZE 188
68  #define MPEG2_TS_PACKET_SYNC 0x47
69  
70  struct AudioPlayback_Parameters {
71      audio_stream_type_t streamType;
72      audio_session_t sessionId;
73  };
74  
75  /**
76   * Structure to maintain the set of audio levels about a player
77   */
78  struct AndroidAudioLevels {
79      /**
80       * Send level to aux effect, there's a single aux bus, so there's a single level
81       */
82      // FIXME not used yet, will be used when supporting effects in OpenMAX AL
83      //SLmillibel mAuxSendLevel;
84      /**
85       * Attenuation factor derived from direct level
86       */
87      // FIXME not used yet, will be used when supporting effects in OpenMAX AL
88      //float mAmplFromDirectLevel;
89      /**
90       * Android Left/Right volume
91       * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification
92       * (or attenuation) represented as a float from 0.0f to 1.0f
93       */
94      float mFinalVolume[STEREO_CHANNELS];
95  };
96  
97  
98  /**
99   * Event notification callback from Android to SL ES framework
100   */
101  typedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser);
102  
103  /**
104   * Audio data push callback from Android objects to SL ES framework
105   */
106  typedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, CAudioPlayer* ap);
107  
108  
109  /**
110   * Events sent to mNotifyClient during prepare, prefetch, and playback
111   * used in APlayer::notify() and AMessage::findxxx()
112   */
113  #define PLAYEREVENT_PREPARED                "prep"
114  #define PLAYEREVENT_PREFETCHSTATUSCHANGE    "prsc"
115  #define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu"
116  #define PLAYEREVENT_ENDOFSTREAM             "eos"
117  #define PLAYEREVENT_VIDEO_SIZE_UPDATE       "vsiz"
118  #define PLAYEREVENT_CHANNEL_COUNT           "ccnt"  // channel count is now known
119  #define PLAYEREVENT_PLAY                    "play"  // SL_PLAYEVENT_*
120  #define PLAYEREVENT_ERRORAFTERPREPARE       "easp"  // error after successful prepare
121  
122  
123  /**
124   * Time value when time is unknown. Used for instance for duration or playback position
125   */
126  #define ANDROID_UNKNOWN_TIME (-1)
127  
128  /**
129   * Event mask for MPEG-2 TS events associated with TS data
130   */
131  #define ANDROID_MP2TSEVENT_NONE          ((SLuint32) 0x0)
132  // buffer is at End Of Stream
133  #define ANDROID_MP2TSEVENT_EOS           ((SLuint32) 0x1)
134  // buffer marks a discontinuity with previous TS data, resume display as soon as possible
135  #define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1)
136  // buffer marks a discontinuity with previous TS data, resume display upon reaching the
137  // associated presentation time stamp
138  #define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2)
139  // buffer marks a format change with previous TS data, resume display as soon as possible
140  #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_FULL  ((SLuint32) 0x1 << 3)
141  #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_VIDEO ((SLuint32) 0x1 << 4)
142  
143  /**
144   * Event mask for AAC ADTS events associated with ADTS data
145   */
146  #define ANDROID_ADTSEVENT_NONE           ANDROID_MP2TSEVENT_NONE
147  // buffer is at End Of Stream
148  #define ANDROID_ADTSEVENT_EOS            ANDROID_MP2TSEVENT_EOS
149  
150  /**
151   * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType
152   */
153  enum AndroidBufferType_type {
154      kAndroidBufferTypeInvalid = ((SLuint16) 0x0),
155      kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1),
156      kAndroidBufferTypeAacadts = ((SLuint16) 0x2),
157  };
158  
159  /**
160   * MIME types required for data in Android Buffer Queues
161   */
162  // The preferred MIME types for new applications are in ../../include/*/OpenMAXAL_Android.h
163  // The legacy MIME type used elsewhere in the Android framework for AAC ADTS is below:
164  #define ANDROID_MIME_AACADTS_ANDROID_FRAMEWORK "audio/aac-adts"
165  
166  /**
167   * Notification thresholds relative to content duration in the cache
168   */
169  #define DURATION_CACHED_HIGH_MS  30000 // 30s
170  #define DURATION_CACHED_MED_MS   10000 // 10s
171  #define DURATION_CACHED_LOW_MS    2000 //  2s
172  
173  
174  namespace android {
175  
176  /**
177   * Prefetch cache status
178   */
179  enum CacheStatus_t {
180          kStatusUnknown = -1,
181          kStatusEmpty   = 0,
182          kStatusLow,
183          kStatusIntermediate,
184          kStatusEnough,
185          kStatusHigh
186  };
187  
188  enum {
189      kDataLocatorNone = 0,
190      kDataLocatorUri  = 1,
191      kDataLocatorFd   = 2,
192  };
193  
194  struct FdInfo {
195      int fd;
196      int64_t offset;
197      int64_t length;
198      bool mCloseAfterUse;    // whether to close fd after last reference to fd
199  };
200  
201  // TODO currently used by SfPlayer, to replace by DataLocator2
202  union DataLocator {
203      char* uri;
204      FdInfo fdi;
205  };
206  
207  union DataLocator2 {
208      const char* uriRef;
209      FdInfo fdi;
210  };
211  
212  
213  #define ANDROID_PERFORMANCE_MODE_NONE            ((SLuint32) 0x1 << 0)
214  #define ANDROID_PERFORMANCE_MODE_LATENCY         ((SLuint32) 0x1 << 1)
215  #define ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS ((SLuint32) 0x1 << 2)
216  #define ANDROID_PERFORMANCE_MODE_POWER_SAVING    ((SLuint32) 0x1 << 3)
217  
218  #define ANDROID_PERFORMANCE_MODE_DEFAULT ANDROID_PERFORMANCE_MODE_LATENCY
219  #define ANDROID_PERFORMANCE_MODE_ALL (ANDROID_PERFORMANCE_MODE_LATENCY | \
220                                        ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS | \
221                                        ANDROID_PERFORMANCE_MODE_NONE | \
222                                        ANDROID_PERFORMANCE_MODE_POWER_SAVING)
223  
224  // This is used for exact matching by MediaMetrics. So do not change it.
225  #define ANDROID_OPENSLES_CALLER_NAME       "opensles"
226  
227  } // namespace android
228