1cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/* 2cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * 4cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * you may not use this file except in compliance with the License. 6cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * You may obtain a copy of the License at 7cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * 8cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * 10cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * See the License for the specific language governing permissions and 14cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * limitations under the License. 15cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 16cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 1710d8b6a5f9a7c24203e3ee228ec596d03c1aa78dGlenn Kasten#include "Configuration.h" 1863c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#ifdef ANDROID 196cce136651f6fd2c7aecd45bc553270152d75462Jean-Michel Trivi#include "android/CallbackProtector.h" 2063c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#include "android/android_Effect.h" 2163c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#include "android/android_GenericPlayer.h" 2263c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi#endif 2363c002ab68761be0eace98f28320d8eb2f3f7695Jean-Michel Trivi 24cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten// Class structures 25cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 26cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 27cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioPlayer_struct { 28cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 29cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 30cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 31cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 32cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 33cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 34cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default]; 35cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 36cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlay mPlay; 37cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 38cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DGrouping m3DGrouping; 39cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 40cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DSource m3DSource; 41cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 42cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEffectSend mEffectSend; 43cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 44cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 45cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPrefetchStatus mPrefetchStatus; 46cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IRatePitch mRatePitch; 47cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ISeek mSeek; 48cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 49cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMuteSolo mMuteSolo; 50cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 51cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffect mAndroidEffect; 52cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffectSend mAndroidEffectSend; 53cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidConfiguration mAndroidConfiguration; 54cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidBufferQueue mAndroidBufferQueue; 55cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 56cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 57cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DMacroscopic m3DMacroscopic; 58cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 59cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 60cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 61cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 62cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPitch mPitch; 63cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 64cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlaybackRate mPlaybackRate; 65cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 66cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 67d158d31a6bbb06426b71c3d097b7768bc3fb79a3Jean-Michel Trivi // fields below are per-instance private fields not associated with an interface 68cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSource; 69cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSink; 70cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // cached data for this instance 71cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // Formerly at IMuteSolo 72cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mMuteMask; // Mask for which channels are muted: bit 0=left, 1=right 73cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mSoloMask; // Mask for which channels are soloed: bit 0=left, 1=right 741a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 75680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten // range 1 <= x <= FCC_8 7699b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten // End of former IMuteSolo fields 771a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 78cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // Formerly at IEffectSend 79cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 80cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf 81cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 82cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLmillibel mDirectLevel; 83cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // implementation-specific data for this instance 84cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT 85cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten Track *mTrack; 86cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mGains[STEREO_CHANNELS]; ///< Computed gain based on volume, mute, solo, stereo position 87cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLboolean mDestroyRequested; ///< Mixer to acknowledge application's call to Object::Destroy 88cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 89cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_SNDFILE 90cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten struct SndFile mSndFile; 91cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif // USE_SNDFILE 92cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 93b05ea38e5131001884aa226f90fd50cf594a23f3Jean-Michel Trivi enum AndroidObjectType mAndroidObjType; 94f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the initialization and preparation state */ 95b05ea38e5131001884aa226f90fd50cf594a23f3Jean-Michel Trivi enum AndroidObjectState mAndroidObjState; 96cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** identifies which group of effects ("session") this player belongs to */ 97213c31153b9bda7b5a091f2996da7b655c8ed451Glenn Kasten audio_session_t mSessionId; 98cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** identifies the Android stream type playback will occur on */ 990bfed90f3b312f7c8f2b744efcf62f1992661d6cGlenn Kasten audio_stream_type_t mStreamType; 10047550bf6cf5cf08a402a54b1589f4b64582a5120Glenn Kasten // FIXME consolidate the next several variables into one class to avoid placement new 101cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** plays the PCM data for this player */ 102ae1a5c8dc1fccf7c121eda830f8d23bd094c0f16Glenn Kasten android::sp<android::AudioTrack> mAudioTrack; 1036cce136651f6fd2c7aecd45bc553270152d75462Jean-Michel Trivi android::sp<android::CallbackProtector> mCallbackProtector; 104d158d31a6bbb06426b71c3d097b7768bc3fb79a3Jean-Michel Trivi android::sp<android::GenericPlayer> mAPlayer; 105cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** aux effect the AudioTrack will be attached to if aux send enabled */ 106cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::sp<android::AudioEffect> mAuxEffect; 107b2aeb0f1009555181dabb944fe05901cb6e6f632Jean-Michel Trivi // FIXME all levels below need to be encapsulated in a field of type AndroidAudioLevels 108cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** send level to aux effect, there's a single aux bus, so there's a single level */ 109cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLmillibel mAuxSendLevel; 110cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 111cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Attenuation factor derived from direct level 112cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 113cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mAmplFromDirectLevel; 114a60dbf554549d10780f473b6e1373aa07aec3a28Glenn Kasten /** FIXME whether to call AudioTrack::start() at the next safe opportunity */ 11547550bf6cf5cf08a402a54b1589f4b64582a5120Glenn Kasten bool mDeferredStart; 116cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 117cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioPlayer*/; 118cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 119cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 120cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioRecorder_struct { 121cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 122cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 123cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 124f8b3141926967ba37d315cc8d3956d7214958e6bPaul McLean#define INTERFACES_AudioRecorder 14 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 125cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 126cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioRecorder 9 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 127cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 128cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default]; 129cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 130cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IRecord mRecord; 131cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioEncoder mAudioEncoder; 132cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 133cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 134cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 135cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 136cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 137cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 138cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 139cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 140cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidConfiguration mAndroidConfiguration; 1411580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten IAndroidAcousticEchoCancellation mAcousticEchoCancellation; 1421580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten IAndroidAutomaticGainControl mAutomaticGainControl; 1431580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten IAndroidNoiseSuppression mNoiseSuppression; 144cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 145cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 146cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSource; 147cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSink; 148cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // cached data for this instance 1491a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 150680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten // range 1 <= x <= FCC_8 1511a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 152cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // implementation-specific data for this instance 153cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 154e5ede1a139fcedbf075675179d919fbe731898f0Glenn Kasten // FIXME consolidate the next several variables into ARecorder class to avoid placement new 155b05ea38e5131001884aa226f90fd50cf594a23f3Jean-Michel Trivi enum AndroidObjectType mAndroidObjType; 156e5ede1a139fcedbf075675179d919fbe731898f0Glenn Kasten android::sp<android::AudioRecord> mAudioRecord; 157460bdad43aaec3c6ffe7f259719e00807742ad6dGlenn Kasten android::sp<android::CallbackProtector> mCallbackProtector; 158e5ede1a139fcedbf075675179d919fbe731898f0Glenn Kasten audio_source_t mRecordSource; 159cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 160cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioRecorder*/; 161cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 162cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 163cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CEngine_struct { 164cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated implicit interfaces 165cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 166cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 1676e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#define INTERFACES_Engine 13 // see MPH_to_Engine in MPH_to.c for list of interfaces 168cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 1696e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi#define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces 170cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 171cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default]; 172cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 173cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEngine mEngine; 174cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEngineCapabilities mEngineCapabilities; 175cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IThreadSync mThreadSync; 176cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated explicit interfaces 177cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 178cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioDecoderCapabilities mAudioDecoderCapabilities; 179cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioEncoderCapabilities mAudioEncoderCapabilities; 180cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DCommit m3DCommit; 181cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 182cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDeviceVolume mDeviceVolume; 183cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // OpenMAX AL mandated implicit interfaces 184cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IXAEngine mXAEngine; 185cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 186cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffectCapabilities mAndroidEffectCapabilities; 187cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 1886e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi // OpenMAX AL explicit interfaces 1896e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi IVideoDecoderCapabilities mVideoDecoderCapabilities; 190cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 191cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ThreadPool mThreadPool; // for asynchronous operations 192cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten pthread_t mSyncThread; 193faf90312d2156acbf27c62e114fd180708aa7654Glenn Kasten#if defined(ANDROID) 194cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // FIXME number of presets will only be saved in IEqualizer, preset names will not be stored 195cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mEqNumPresets; 196cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten char** mEqPresetNames; 197cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 198cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CEngine*/; 199cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 200cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 201cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 202cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 203cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_LEDDevice 3 // see MPH_to_LEDDevice in MPH_to.c for list of interfaces 204cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_LEDDevice - INTERFACES_Default]; 205cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 206cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ILEDArray mLEDArray; 207cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 208cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mDeviceID; 209cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CLEDDevice; 210cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 211cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 212cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 213cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 214cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Listener 4 // see MPH_to_Listener in MPH_to.c for list of interfaces 215cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_Listener - INTERFACES_Default]; 216cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 217cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 218cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 219cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 220cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CListener; 221cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 222cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 223cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 224cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 225cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MetadataExtractor 5 // see MPH_to_MetadataExtractor in MPH_to.c for list of 226cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // interfaces 227cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_MetadataExtractor - INTERFACES_Default]; 228cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 229cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 230cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 231cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 232cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 233cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMetadataExtractor; 234cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 235cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 236cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 237cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 238cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 239cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MidiPlayer 29 // see MPH_to_MidiPlayer in MPH_to.c for list of interfaces 240cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_MidiPlayer - INTERFACES_Default]; 241cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 242cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlay mPlay; 243cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 244cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DGrouping m3DGrouping; 245cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 246cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DSource m3DSource; 247cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 248cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEffectSend mEffectSend; 249cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 250cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 251cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDIMessage mMIDIMessage; 252cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDITime mMIDITime; 253cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDITempo mMIDITempo; 254cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDIMuteSolo mMIDIMuteSolo; 255cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPrefetchStatus mPrefetchStatus; 256cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ISeek mSeek; 257cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 258cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMuteSolo mMuteSolo; 259cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 260cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DMacroscopic m3DMacroscopic; 261cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 262cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 263cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 264cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 265cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPitch mPitch; 266cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 267cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlaybackRate mPlaybackRate; 268cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 269cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 270cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 271cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMidiPlayer; 272cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 273cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct COutputMix_struct { 274cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 275cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 276cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 277cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 12 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 278cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 279cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 11 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 280cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 281cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_OutputMix - INTERFACES_Default]; 282cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 283cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IOutputMix mOutputMix; 284cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT 285cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IOutputMixExt mOutputMixExt; 286cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 287cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 288cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 289cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 290cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 291cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 292cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 293cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 294cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 295cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 296cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffect mAndroidEffect; 297cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 298cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 299cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*COutputMix*/; 300cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 301cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 302cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 303cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 304cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_VibraDevice 3 // see MPH_to_VibraDevice in MPH_to.c for list of interfaces 305cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_VibraDevice - INTERFACES_Default]; 306cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 307cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVibra mVibra; 308cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 309cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mDeviceID; 310cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CVibraDevice; 3118b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten 3128b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten 3138b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastentypedef struct CMediaPlayer_struct { 3148b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten IObject mObject; 31592b245bf8828db9e469febebbe8774c00570b5b9Jean-Michel Trivi#ifdef ANDROID 316c623c89c0a32c5fc77c998f1742d58e7be69e8c1Glenn Kasten#define INTERFACES_MediaPlayer 8 31792b245bf8828db9e469febebbe8774c00570b5b9Jean-Michel Trivi#else 318c623c89c0a32c5fc77c998f1742d58e7be69e8c1Glenn Kasten#define INTERFACES_MediaPlayer 7 31992b245bf8828db9e469febebbe8774c00570b5b9Jean-Michel Trivi#endif 3208b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten XAuint8 mInterfaceStates2[INTERFACES_MediaPlayer - INTERFACES_Default]; 3218b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 322d158d31a6bbb06426b71c3d097b7768bc3fb79a3Jean-Michel Trivi IDynamicSource mDynamicSource; 32394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten IPlay mPlay; 324321f2cffd7dd560bf2e5c898be6953e19bed8496Jean-Michel Trivi IStreamInformation mStreamInfo; 32537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi IVolume mVolume; 32692b245bf8828db9e469febebbe8774c00570b5b9Jean-Michel Trivi ISeek mSeek; 327c623c89c0a32c5fc77c998f1742d58e7be69e8c1Glenn Kasten IPrefetchStatus mPrefetchStatus; 328eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#ifdef ANDROID 329eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi IAndroidBufferQueue mAndroidBufferQueue; 330eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#endif 331d158d31a6bbb06426b71c3d097b7768bc3fb79a3Jean-Michel Trivi // fields below are per-instance private fields not associated with an interface 3328b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mDataSource; 3338b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mBankSource; 3348b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mAudioSink; 3358b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mImageVideoSink; 3368b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mVibraSink; 3378b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mLEDArraySink; 33899b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 339ba0b2c989ecbbae4678903954a4629ef342e1089Glenn Kasten // range 1 <= x <= 8 FIXME FCC_8 34094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#ifdef ANDROID 34168d56b8ebaf60184a3aef988e3d2b09ed8b88c05Jean-Michel Trivi android::sp<android::GenericPlayer> mAVPlayer; 342485a038f9f0f898227b8ab4218e94c5d56b6ed0bGlenn Kasten android::sp<android::CallbackProtector> mCallbackProtector; 343b05ea38e5131001884aa226f90fd50cf594a23f3Jean-Michel Trivi enum AndroidObjectType mAndroidObjType; 344f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the initialization and preparation state */ 345b05ea38e5131001884aa226f90fd50cf594a23f3Jean-Michel Trivi enum AndroidObjectState mAndroidObjState; 346f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies which group of effects ("session") this player belongs to */ 347213c31153b9bda7b5a091f2996da7b655c8ed451Glenn Kasten audio_session_t mSessionId; 348f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the Android stream type playback will occur on */ 3490bfed90f3b312f7c8f2b744efcf62f1992661d6cGlenn Kasten audio_stream_type_t mStreamType; 35094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#endif 3518b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten} CMediaPlayer; 352