/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Used to define the mapping from an OpenSL ES or OpenMAX AL object to an Android * media framework object */ enum AndroidObjectType { INVALID_TYPE =-1, // audio player, playing from a URI or FD data source AUDIOPLAYER_FROM_URIFD = 0, // audio player, playing PCM buffers in a buffer queue data source AUDIOPLAYER_FROM_PCM_BUFFERQUEUE = 1, // audio player, playing transport stream packets in an Android buffer queue data source AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 2, // audio player, decoding from a URI or FD data source to a buffer queue data sink in PCM format AUDIOPLAYER_FROM_URIFD_TO_PCM_BUFFERQUEUE = 3, // audio video player, playing transport stream packets in an Android buffer queue data source AUDIOVIDEOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE = 4, // audio video player, playing from a URI or FD data source AUDIOVIDEOPLAYER_FROM_URIFD = 5, // audio recorder, recording from an input device data source, streamed into a // PCM buffer queue data sink AUDIORECORDER_FROM_MIC_TO_PCM_BUFFERQUEUE = 6, // audio player, decoding from an Android buffer queue with ADTS data, // to a buffer queue data sink in PCM format AUDIOPLAYER_FROM_ADTS_ABQ_TO_PCM_BUFFERQUEUE = 7, NUM_AUDIOPLAYER_MAP_TYPES }; /** * Used to define the states of the OpenSL ES / OpenMAX AL object initialization and preparation * with regards to the Android-side of the data, in particular as affected by the play state. */ enum AndroidObjectState { ANDROID_UNINITIALIZED = -1, // never called SetPlayState(PAUSED or PLAYING) ANDROID_PREPARING, // currently preparing due to first SetPlayState(PAUSED or PLAYING) ANDROID_READY, // preparation has completed, and will not be attempted again // NUM_ANDROID_STATES // unused }; #define ANDROID_DEFAULT_OUTPUT_STREAM_TYPE AUDIO_STREAM_MUSIC #define PLAYER_FAILURE ((int32_t) android::UNKNOWN_ERROR) #define PLAYER_SUCCESS ((int32_t) android::NO_ERROR) #define PLAYER_FD_FIND_FILE_SIZE ((int64_t)0xFFFFFFFFFFFFFFFFll) #define MPEG2_TS_PACKET_SIZE 188 #define MPEG2_TS_PACKET_SYNC 0x47 struct AudioPlayback_Parameters { audio_stream_type_t streamType; audio_session_t sessionId; }; /** * Structure to maintain the set of audio levels about a player */ struct AndroidAudioLevels { /** * Send level to aux effect, there's a single aux bus, so there's a single level */ // FIXME not used yet, will be used when supporting effects in OpenMAX AL //SLmillibel mAuxSendLevel; /** * Attenuation factor derived from direct level */ // FIXME not used yet, will be used when supporting effects in OpenMAX AL //float mAmplFromDirectLevel; /** * Android Left/Right volume * The final volume of an Android AudioTrack or MediaPlayer is a stereo amplification * (or attenuation) represented as a float from 0.0f to 1.0f */ float mFinalVolume[STEREO_CHANNELS]; }; /** * Event notification callback from Android to SL ES framework */ typedef void (*notif_cbf_t)(int event, int data1, int data2, void* notifUser); /** * Audio data push callback from Android objects to SL ES framework */ typedef size_t (*data_push_cbf_t)(const uint8_t *data, size_t size, CAudioPlayer* ap); /** * Events sent to mNotifyClient during prepare, prefetch, and playback * used in APlayer::notify() and AMessage::findxxx() */ #define PLAYEREVENT_PREPARED "prep" #define PLAYEREVENT_PREFETCHSTATUSCHANGE "prsc" #define PLAYEREVENT_PREFETCHFILLLEVELUPDATE "pflu" #define PLAYEREVENT_ENDOFSTREAM "eos" #define PLAYEREVENT_VIDEO_SIZE_UPDATE "vsiz" #define PLAYEREVENT_CHANNEL_COUNT "ccnt" // channel count is now known #define PLAYEREVENT_PLAY "play" // SL_PLAYEVENT_* #define PLAYEREVENT_ERRORAFTERPREPARE "easp" // error after successful prepare /** * Time value when time is unknown. Used for instance for duration or playback position */ #define ANDROID_UNKNOWN_TIME -1 /** * Event mask for MPEG-2 TS events associated with TS data */ #define ANDROID_MP2TSEVENT_NONE ((SLuint32) 0x0) // buffer is at End Of Stream #define ANDROID_MP2TSEVENT_EOS ((SLuint32) 0x1) // buffer marks a discontinuity with previous TS data, resume display as soon as possible #define ANDROID_MP2TSEVENT_DISCONTINUITY ((SLuint32) 0x1 << 1) // buffer marks a discontinuity with previous TS data, resume display upon reaching the // associated presentation time stamp #define ANDROID_MP2TSEVENT_DISCON_NEWPTS ((SLuint32) 0x1 << 2) // buffer marks a format change with previous TS data, resume display as soon as possible #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_FULL ((SLuint32) 0x1 << 3) #define ANDROID_MP2TSEVENT_FORMAT_CHANGE_VIDEO ((SLuint32) 0x1 << 4) /** * Event mask for AAC ADTS events associated with ADTS data */ #define ANDROID_ADTSEVENT_NONE ANDROID_MP2TSEVENT_NONE // buffer is at End Of Stream #define ANDROID_ADTSEVENT_EOS ANDROID_MP2TSEVENT_EOS /** * Types of buffers stored in Android Buffer Queues, see IAndroidBufferQueue.mBufferType */ enum AndroidBufferType_type { kAndroidBufferTypeInvalid = ((SLuint16) 0x0), kAndroidBufferTypeMpeg2Ts = ((SLuint16) 0x1), kAndroidBufferTypeAacadts = ((SLuint16) 0x2), }; /** * MIME types required for data in Android Buffer Queues */ // The preferred MIME types for new applications are in ../../include/*/OpenMAXAL_Android.h // The legacy MIME type used elsewhere in the Android framework for AAC ADTS is below: #define ANDROID_MIME_AACADTS_ANDROID_FRAMEWORK "audio/aac-adts" /** * Notification thresholds relative to content duration in the cache */ #define DURATION_CACHED_HIGH_MS 30000 // 30s #define DURATION_CACHED_MED_MS 10000 // 10s #define DURATION_CACHED_LOW_MS 2000 // 2s namespace android { /** * Prefetch cache status */ enum CacheStatus_t { kStatusUnknown = -1, kStatusEmpty = 0, kStatusLow, kStatusIntermediate, kStatusEnough, kStatusHigh }; enum { kDataLocatorNone = 0, kDataLocatorUri = 1, kDataLocatorFd = 2, }; struct FdInfo { int fd; int64_t offset; int64_t length; bool mCloseAfterUse; // whether to close fd after last reference to fd }; // TODO currently used by SfPlayer, to replace by DataLocator2 union DataLocator { char* uri; FdInfo fdi; }; union DataLocator2 { const char* uriRef; FdInfo fdi; }; #define ANDROID_PERFORMANCE_MODE_NONE ((SLuint32) 0x1 << 0) #define ANDROID_PERFORMANCE_MODE_LATENCY ((SLuint32) 0x1 << 1) #define ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS ((SLuint32) 0x1 << 2) #define ANDROID_PERFORMANCE_MODE_POWER_SAVING ((SLuint32) 0x1 << 3) #define ANDROID_PERFORMANCE_MODE_DEFAULT ANDROID_PERFORMANCE_MODE_LATENCY #define ANDROID_PERFORMANCE_MODE_ALL (ANDROID_PERFORMANCE_MODE_LATENCY | \ ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS | \ ANDROID_PERFORMANCE_MODE_NONE | \ ANDROID_PERFORMANCE_MODE_POWER_SAVING) } // namespace android