1*bebae9c0SAndroid Build Coastguard Worker /* 2*bebae9c0SAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project 3*bebae9c0SAndroid Build Coastguard Worker * 4*bebae9c0SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*bebae9c0SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*bebae9c0SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*bebae9c0SAndroid Build Coastguard Worker * 8*bebae9c0SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*bebae9c0SAndroid Build Coastguard Worker * 10*bebae9c0SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*bebae9c0SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*bebae9c0SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*bebae9c0SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*bebae9c0SAndroid Build Coastguard Worker * limitations under the License. 15*bebae9c0SAndroid Build Coastguard Worker */ 16*bebae9c0SAndroid Build Coastguard Worker 17*bebae9c0SAndroid Build Coastguard Worker #include "Configuration.h" 18*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 19*bebae9c0SAndroid Build Coastguard Worker #include "android/CallbackProtector.h" 20*bebae9c0SAndroid Build Coastguard Worker #include "android/android_Effect.h" 21*bebae9c0SAndroid Build Coastguard Worker #include "android/android_GenericPlayer.h" 22*bebae9c0SAndroid Build Coastguard Worker #include <media/TrackPlayerBase.h> 23*bebae9c0SAndroid Build Coastguard Worker #include <audiomanager/IAudioManager.h> 24*bebae9c0SAndroid Build Coastguard Worker namespace android { class AudioRecordCallback; }; 25*bebae9c0SAndroid Build Coastguard Worker #endif 26*bebae9c0SAndroid Build Coastguard Worker 27*bebae9c0SAndroid Build Coastguard Worker // Class structures 28*bebae9c0SAndroid Build Coastguard Worker 29*bebae9c0SAndroid Build Coastguard Worker 30*bebae9c0SAndroid Build Coastguard Worker /*typedef*/ struct CAudioPlayer_struct { 31*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 32*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 33*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 34*bebae9c0SAndroid Build Coastguard Worker #else 35*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 36*bebae9c0SAndroid Build Coastguard Worker #endif 37*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default]; 38*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 39*bebae9c0SAndroid Build Coastguard Worker IPlay mPlay; 40*bebae9c0SAndroid Build Coastguard Worker I3DDoppler m3DDoppler; 41*bebae9c0SAndroid Build Coastguard Worker I3DGrouping m3DGrouping; 42*bebae9c0SAndroid Build Coastguard Worker I3DLocation m3DLocation; 43*bebae9c0SAndroid Build Coastguard Worker I3DSource m3DSource; 44*bebae9c0SAndroid Build Coastguard Worker IBufferQueue mBufferQueue; 45*bebae9c0SAndroid Build Coastguard Worker IEffectSend mEffectSend; 46*bebae9c0SAndroid Build Coastguard Worker IMetadataExtraction mMetadataExtraction; 47*bebae9c0SAndroid Build Coastguard Worker IMetadataTraversal mMetadataTraversal; 48*bebae9c0SAndroid Build Coastguard Worker IPrefetchStatus mPrefetchStatus; 49*bebae9c0SAndroid Build Coastguard Worker IRatePitch mRatePitch; 50*bebae9c0SAndroid Build Coastguard Worker ISeek mSeek; 51*bebae9c0SAndroid Build Coastguard Worker IVolume mVolume; 52*bebae9c0SAndroid Build Coastguard Worker IMuteSolo mMuteSolo; 53*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 54*bebae9c0SAndroid Build Coastguard Worker IAndroidEffect mAndroidEffect; 55*bebae9c0SAndroid Build Coastguard Worker IAndroidEffectSend mAndroidEffectSend; 56*bebae9c0SAndroid Build Coastguard Worker IAndroidConfiguration mAndroidConfiguration; 57*bebae9c0SAndroid Build Coastguard Worker IAndroidBufferQueue mAndroidBufferQueue; 58*bebae9c0SAndroid Build Coastguard Worker #endif 59*bebae9c0SAndroid Build Coastguard Worker // optional interfaces 60*bebae9c0SAndroid Build Coastguard Worker I3DMacroscopic m3DMacroscopic; 61*bebae9c0SAndroid Build Coastguard Worker IBassBoost mBassBoost; 62*bebae9c0SAndroid Build Coastguard Worker IDynamicSource mDynamicSource; 63*bebae9c0SAndroid Build Coastguard Worker IEnvironmentalReverb mEnvironmentalReverb; 64*bebae9c0SAndroid Build Coastguard Worker IEqualizer mEqualizer; 65*bebae9c0SAndroid Build Coastguard Worker IPitch mPitch; 66*bebae9c0SAndroid Build Coastguard Worker IPresetReverb mPresetReverb; 67*bebae9c0SAndroid Build Coastguard Worker IPlaybackRate mPlaybackRate; 68*bebae9c0SAndroid Build Coastguard Worker IVirtualizer mVirtualizer; 69*bebae9c0SAndroid Build Coastguard Worker IVisualization mVisualization; 70*bebae9c0SAndroid Build Coastguard Worker // fields below are per-instance private fields not associated with an interface 71*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mDataSource; 72*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mDataSink; 73*bebae9c0SAndroid Build Coastguard Worker // cached data for this instance 74*bebae9c0SAndroid Build Coastguard Worker // Formerly at IMuteSolo 75*bebae9c0SAndroid Build Coastguard Worker SLuint8 mMuteMask; // Mask for which channels are muted: bit 0=left, 1=right 76*bebae9c0SAndroid Build Coastguard Worker SLuint8 mSoloMask; // Mask for which channels are soloed: bit 0=left, 1=right 77*bebae9c0SAndroid Build Coastguard Worker SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 78*bebae9c0SAndroid Build Coastguard Worker // range 1 <= x <= FCC_8 79*bebae9c0SAndroid Build Coastguard Worker // End of former IMuteSolo fields 80*bebae9c0SAndroid Build Coastguard Worker SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 81*bebae9c0SAndroid Build Coastguard Worker // Formerly at IEffectSend 82*bebae9c0SAndroid Build Coastguard Worker /** 83*bebae9c0SAndroid Build Coastguard Worker * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf 84*bebae9c0SAndroid Build Coastguard Worker */ 85*bebae9c0SAndroid Build Coastguard Worker SLmillibel mDirectLevel; 86*bebae9c0SAndroid Build Coastguard Worker // implementation-specific data for this instance 87*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_OUTPUTMIXEXT 88*bebae9c0SAndroid Build Coastguard Worker Track *mTrack; 89*bebae9c0SAndroid Build Coastguard Worker float mGains[STEREO_CHANNELS]; ///< Computed gain based on volume, mute, solo, stereo position 90*bebae9c0SAndroid Build Coastguard Worker SLboolean mDestroyRequested; ///< Mixer to acknowledge application's call to Object::Destroy 91*bebae9c0SAndroid Build Coastguard Worker #endif 92*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_SNDFILE 93*bebae9c0SAndroid Build Coastguard Worker struct SndFile mSndFile; 94*bebae9c0SAndroid Build Coastguard Worker #endif // USE_SNDFILE 95*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 96*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectType mAndroidObjType; 97*bebae9c0SAndroid Build Coastguard Worker /** identifies the initialization and preparation state */ 98*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectState mAndroidObjState; 99*bebae9c0SAndroid Build Coastguard Worker /** identifies which group of effects ("session") this player belongs to */ 100*bebae9c0SAndroid Build Coastguard Worker audio_session_t mSessionId; 101*bebae9c0SAndroid Build Coastguard Worker /** identifies the Android stream type playback will occur on */ 102*bebae9c0SAndroid Build Coastguard Worker audio_stream_type_t mStreamType; 103*bebae9c0SAndroid Build Coastguard Worker /** player interface ID, uniquely identifies the player in the system */ 104*bebae9c0SAndroid Build Coastguard Worker audio_unique_id_t mPIId; 105*bebae9c0SAndroid Build Coastguard Worker // FIXME consolidate the next several variables into one class to avoid placement new 106*bebae9c0SAndroid Build Coastguard Worker /** plays the PCM data for this player and reflects its state in AudioManager, 107*bebae9c0SAndroid Build Coastguard Worker * always non-null once the AudioPlayer is created (i.e. before realize step) */ 108*bebae9c0SAndroid Build Coastguard Worker android::sp<android::TrackPlayerBase> mTrackPlayer; 109*bebae9c0SAndroid Build Coastguard Worker android::sp<android::CallbackProtector> mCallbackProtector; 110*bebae9c0SAndroid Build Coastguard Worker android::sp<android::GenericPlayer> mAPlayer; 111*bebae9c0SAndroid Build Coastguard Worker /** aux effect the AudioTrack will be attached to if aux send enabled */ 112*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mAuxEffect; 113*bebae9c0SAndroid Build Coastguard Worker // FIXME all levels below need to be encapsulated in a field of type AndroidAudioLevels 114*bebae9c0SAndroid Build Coastguard Worker /** send level to aux effect, there's a single aux bus, so there's a single level */ 115*bebae9c0SAndroid Build Coastguard Worker SLmillibel mAuxSendLevel; 116*bebae9c0SAndroid Build Coastguard Worker /** 117*bebae9c0SAndroid Build Coastguard Worker * Attenuation factor derived from direct level 118*bebae9c0SAndroid Build Coastguard Worker */ 119*bebae9c0SAndroid Build Coastguard Worker float mAmplFromDirectLevel; 120*bebae9c0SAndroid Build Coastguard Worker /** FIXME whether to call AudioTrack::start() at the next safe opportunity */ 121*bebae9c0SAndroid Build Coastguard Worker bool mDeferredStart; 122*bebae9c0SAndroid Build Coastguard Worker SLuint32 mPerformanceMode; 123*bebae9c0SAndroid Build Coastguard Worker #endif 124*bebae9c0SAndroid Build Coastguard Worker } /*CAudioPlayer*/; 125*bebae9c0SAndroid Build Coastguard Worker 126*bebae9c0SAndroid Build Coastguard Worker 127*bebae9c0SAndroid Build Coastguard Worker /*typedef*/ struct CAudioRecorder_struct { 128*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 129*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 130*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 131*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_AudioRecorder 14 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 132*bebae9c0SAndroid Build Coastguard Worker #else 133*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_AudioRecorder 9 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 134*bebae9c0SAndroid Build Coastguard Worker #endif 135*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default]; 136*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 137*bebae9c0SAndroid Build Coastguard Worker IRecord mRecord; 138*bebae9c0SAndroid Build Coastguard Worker IAudioEncoder mAudioEncoder; 139*bebae9c0SAndroid Build Coastguard Worker // optional interfaces 140*bebae9c0SAndroid Build Coastguard Worker IBassBoost mBassBoost; 141*bebae9c0SAndroid Build Coastguard Worker IDynamicSource mDynamicSource; 142*bebae9c0SAndroid Build Coastguard Worker IEqualizer mEqualizer; 143*bebae9c0SAndroid Build Coastguard Worker IVisualization mVisualization; 144*bebae9c0SAndroid Build Coastguard Worker IVolume mVolume; 145*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 146*bebae9c0SAndroid Build Coastguard Worker IBufferQueue mBufferQueue; 147*bebae9c0SAndroid Build Coastguard Worker IAndroidConfiguration mAndroidConfiguration; 148*bebae9c0SAndroid Build Coastguard Worker IAndroidAcousticEchoCancellation mAcousticEchoCancellation; 149*bebae9c0SAndroid Build Coastguard Worker IAndroidAutomaticGainControl mAutomaticGainControl; 150*bebae9c0SAndroid Build Coastguard Worker IAndroidNoiseSuppression mNoiseSuppression; 151*bebae9c0SAndroid Build Coastguard Worker #endif 152*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 153*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mDataSource; 154*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mDataSink; 155*bebae9c0SAndroid Build Coastguard Worker // cached data for this instance 156*bebae9c0SAndroid Build Coastguard Worker SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 157*bebae9c0SAndroid Build Coastguard Worker // range 1 <= x <= FCC_8 158*bebae9c0SAndroid Build Coastguard Worker SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 159*bebae9c0SAndroid Build Coastguard Worker // implementation-specific data for this instance 160*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 161*bebae9c0SAndroid Build Coastguard Worker // FIXME consolidate the next several variables into ARecorder class to avoid placement new 162*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectType mAndroidObjType; 163*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioRecord> mAudioRecord; 164*bebae9c0SAndroid Build Coastguard Worker android::sp<android::CallbackProtector> mCallbackProtector; 165*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioRecordCallback> mCallbackHandle; 166*bebae9c0SAndroid Build Coastguard Worker audio_source_t mRecordSource; 167*bebae9c0SAndroid Build Coastguard Worker SLuint32 mPerformanceMode; 168*bebae9c0SAndroid Build Coastguard Worker #endif 169*bebae9c0SAndroid Build Coastguard Worker } /*CAudioRecorder*/; 170*bebae9c0SAndroid Build Coastguard Worker 171*bebae9c0SAndroid Build Coastguard Worker 172*bebae9c0SAndroid Build Coastguard Worker /*typedef*/ struct CEngine_struct { 173*bebae9c0SAndroid Build Coastguard Worker // mandated implicit interfaces 174*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 175*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 176*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_Engine 13 // see MPH_to_Engine in MPH_to.c for list of interfaces 177*bebae9c0SAndroid Build Coastguard Worker #else 178*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces 179*bebae9c0SAndroid Build Coastguard Worker #endif 180*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default]; 181*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 182*bebae9c0SAndroid Build Coastguard Worker IEngine mEngine; 183*bebae9c0SAndroid Build Coastguard Worker IEngineCapabilities mEngineCapabilities; 184*bebae9c0SAndroid Build Coastguard Worker IThreadSync mThreadSync; 185*bebae9c0SAndroid Build Coastguard Worker // mandated explicit interfaces 186*bebae9c0SAndroid Build Coastguard Worker IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 187*bebae9c0SAndroid Build Coastguard Worker IAudioDecoderCapabilities mAudioDecoderCapabilities; 188*bebae9c0SAndroid Build Coastguard Worker IAudioEncoderCapabilities mAudioEncoderCapabilities; 189*bebae9c0SAndroid Build Coastguard Worker I3DCommit m3DCommit; 190*bebae9c0SAndroid Build Coastguard Worker // optional interfaces 191*bebae9c0SAndroid Build Coastguard Worker IDeviceVolume mDeviceVolume; 192*bebae9c0SAndroid Build Coastguard Worker // OpenMAX AL mandated implicit interfaces 193*bebae9c0SAndroid Build Coastguard Worker IXAEngine mXAEngine; 194*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 195*bebae9c0SAndroid Build Coastguard Worker IAndroidEffectCapabilities mAndroidEffectCapabilities; 196*bebae9c0SAndroid Build Coastguard Worker #endif 197*bebae9c0SAndroid Build Coastguard Worker // OpenMAX AL explicit interfaces 198*bebae9c0SAndroid Build Coastguard Worker IVideoDecoderCapabilities mVideoDecoderCapabilities; 199*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 200*bebae9c0SAndroid Build Coastguard Worker ThreadPool mThreadPool; // for asynchronous operations 201*bebae9c0SAndroid Build Coastguard Worker pthread_t mSyncThread; 202*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 203*bebae9c0SAndroid Build Coastguard Worker // FIXME number of presets will only be saved in IEqualizer, preset names will not be stored 204*bebae9c0SAndroid Build Coastguard Worker SLuint32 mEqNumPresets; 205*bebae9c0SAndroid Build Coastguard Worker char** mEqPresetNames; 206*bebae9c0SAndroid Build Coastguard Worker android::sp<android::IAudioManager> mAudioManager; 207*bebae9c0SAndroid Build Coastguard Worker #endif 208*bebae9c0SAndroid Build Coastguard Worker } /*CEngine*/; 209*bebae9c0SAndroid Build Coastguard Worker 210*bebae9c0SAndroid Build Coastguard Worker typedef struct { 211*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 212*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 213*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_LEDDevice 3 // see MPH_to_LEDDevice in MPH_to.c for list of interfaces 214*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_LEDDevice - INTERFACES_Default]; 215*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 216*bebae9c0SAndroid Build Coastguard Worker ILEDArray mLEDArray; 217*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 218*bebae9c0SAndroid Build Coastguard Worker SLuint32 mDeviceID; 219*bebae9c0SAndroid Build Coastguard Worker } CLEDDevice; 220*bebae9c0SAndroid Build Coastguard Worker 221*bebae9c0SAndroid Build Coastguard Worker typedef struct { 222*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 223*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 224*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_Listener 4 // see MPH_to_Listener in MPH_to.c for list of interfaces 225*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_Listener - INTERFACES_Default]; 226*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 227*bebae9c0SAndroid Build Coastguard Worker I3DDoppler m3DDoppler; 228*bebae9c0SAndroid Build Coastguard Worker I3DLocation m3DLocation; 229*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 230*bebae9c0SAndroid Build Coastguard Worker } CListener; 231*bebae9c0SAndroid Build Coastguard Worker 232*bebae9c0SAndroid Build Coastguard Worker typedef struct { 233*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 234*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 235*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_MetadataExtractor 5 // see MPH_to_MetadataExtractor in MPH_to.c for list of 236*bebae9c0SAndroid Build Coastguard Worker // interfaces 237*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_MetadataExtractor - INTERFACES_Default]; 238*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 239*bebae9c0SAndroid Build Coastguard Worker IDynamicSource mDynamicSource; 240*bebae9c0SAndroid Build Coastguard Worker IMetadataExtraction mMetadataExtraction; 241*bebae9c0SAndroid Build Coastguard Worker IMetadataTraversal mMetadataTraversal; 242*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 243*bebae9c0SAndroid Build Coastguard Worker } CMetadataExtractor; 244*bebae9c0SAndroid Build Coastguard Worker 245*bebae9c0SAndroid Build Coastguard Worker typedef struct { 246*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 247*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 248*bebae9c0SAndroid Build Coastguard Worker 249*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_MidiPlayer 29 // see MPH_to_MidiPlayer in MPH_to.c for list of interfaces 250*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_MidiPlayer - INTERFACES_Default]; 251*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 252*bebae9c0SAndroid Build Coastguard Worker IPlay mPlay; 253*bebae9c0SAndroid Build Coastguard Worker I3DDoppler m3DDoppler; 254*bebae9c0SAndroid Build Coastguard Worker I3DGrouping m3DGrouping; 255*bebae9c0SAndroid Build Coastguard Worker I3DLocation m3DLocation; 256*bebae9c0SAndroid Build Coastguard Worker I3DSource m3DSource; 257*bebae9c0SAndroid Build Coastguard Worker IBufferQueue mBufferQueue; 258*bebae9c0SAndroid Build Coastguard Worker IEffectSend mEffectSend; 259*bebae9c0SAndroid Build Coastguard Worker IMetadataExtraction mMetadataExtraction; 260*bebae9c0SAndroid Build Coastguard Worker IMetadataTraversal mMetadataTraversal; 261*bebae9c0SAndroid Build Coastguard Worker IMIDIMessage mMIDIMessage; 262*bebae9c0SAndroid Build Coastguard Worker IMIDITime mMIDITime; 263*bebae9c0SAndroid Build Coastguard Worker IMIDITempo mMIDITempo; 264*bebae9c0SAndroid Build Coastguard Worker IMIDIMuteSolo mMIDIMuteSolo; 265*bebae9c0SAndroid Build Coastguard Worker IPrefetchStatus mPrefetchStatus; 266*bebae9c0SAndroid Build Coastguard Worker ISeek mSeek; 267*bebae9c0SAndroid Build Coastguard Worker IVolume mVolume; 268*bebae9c0SAndroid Build Coastguard Worker IMuteSolo mMuteSolo; 269*bebae9c0SAndroid Build Coastguard Worker // optional interfaces 270*bebae9c0SAndroid Build Coastguard Worker I3DMacroscopic m3DMacroscopic; 271*bebae9c0SAndroid Build Coastguard Worker IBassBoost mBassBoost; 272*bebae9c0SAndroid Build Coastguard Worker IDynamicSource mDynamicSource; 273*bebae9c0SAndroid Build Coastguard Worker IEnvironmentalReverb mEnvironmentalReverb; 274*bebae9c0SAndroid Build Coastguard Worker IEqualizer mEqualizer; 275*bebae9c0SAndroid Build Coastguard Worker IPitch mPitch; 276*bebae9c0SAndroid Build Coastguard Worker IPresetReverb mPresetReverb; 277*bebae9c0SAndroid Build Coastguard Worker IPlaybackRate mPlaybackRate; 278*bebae9c0SAndroid Build Coastguard Worker IVirtualizer mVirtualizer; 279*bebae9c0SAndroid Build Coastguard Worker IVisualization mVisualization; 280*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 281*bebae9c0SAndroid Build Coastguard Worker } CMidiPlayer; 282*bebae9c0SAndroid Build Coastguard Worker 283*bebae9c0SAndroid Build Coastguard Worker /*typedef*/ struct COutputMix_struct { 284*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 285*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 286*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 287*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_OutputMix 12 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 288*bebae9c0SAndroid Build Coastguard Worker #else 289*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_OutputMix 11 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 290*bebae9c0SAndroid Build Coastguard Worker #endif 291*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_OutputMix - INTERFACES_Default]; 292*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 293*bebae9c0SAndroid Build Coastguard Worker IOutputMix mOutputMix; 294*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_OUTPUTMIXEXT 295*bebae9c0SAndroid Build Coastguard Worker IOutputMixExt mOutputMixExt; 296*bebae9c0SAndroid Build Coastguard Worker #endif 297*bebae9c0SAndroid Build Coastguard Worker IEnvironmentalReverb mEnvironmentalReverb; 298*bebae9c0SAndroid Build Coastguard Worker IEqualizer mEqualizer; 299*bebae9c0SAndroid Build Coastguard Worker IPresetReverb mPresetReverb; 300*bebae9c0SAndroid Build Coastguard Worker IVirtualizer mVirtualizer; 301*bebae9c0SAndroid Build Coastguard Worker IVolume mVolume; 302*bebae9c0SAndroid Build Coastguard Worker // optional interfaces 303*bebae9c0SAndroid Build Coastguard Worker IBassBoost mBassBoost; 304*bebae9c0SAndroid Build Coastguard Worker IVisualization mVisualization; 305*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 306*bebae9c0SAndroid Build Coastguard Worker IAndroidEffect mAndroidEffect; 307*bebae9c0SAndroid Build Coastguard Worker #endif 308*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 309*bebae9c0SAndroid Build Coastguard Worker } /*COutputMix*/; 310*bebae9c0SAndroid Build Coastguard Worker 311*bebae9c0SAndroid Build Coastguard Worker typedef struct { 312*bebae9c0SAndroid Build Coastguard Worker // mandated interfaces 313*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 314*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_VibraDevice 3 // see MPH_to_VibraDevice in MPH_to.c for list of interfaces 315*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_VibraDevice - INTERFACES_Default]; 316*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 317*bebae9c0SAndroid Build Coastguard Worker IVibra mVibra; 318*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 319*bebae9c0SAndroid Build Coastguard Worker SLuint32 mDeviceID; 320*bebae9c0SAndroid Build Coastguard Worker } CVibraDevice; 321*bebae9c0SAndroid Build Coastguard Worker 322*bebae9c0SAndroid Build Coastguard Worker 323*bebae9c0SAndroid Build Coastguard Worker typedef struct CMediaPlayer_struct { 324*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 325*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 326*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_MediaPlayer 8 327*bebae9c0SAndroid Build Coastguard Worker #else 328*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_MediaPlayer 7 329*bebae9c0SAndroid Build Coastguard Worker #endif 330*bebae9c0SAndroid Build Coastguard Worker XAuint8 mInterfaceStates2[INTERFACES_MediaPlayer - INTERFACES_Default]; 331*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 332*bebae9c0SAndroid Build Coastguard Worker IDynamicSource mDynamicSource; 333*bebae9c0SAndroid Build Coastguard Worker IPlay mPlay; 334*bebae9c0SAndroid Build Coastguard Worker IStreamInformation mStreamInfo; 335*bebae9c0SAndroid Build Coastguard Worker IVolume mVolume; 336*bebae9c0SAndroid Build Coastguard Worker ISeek mSeek; 337*bebae9c0SAndroid Build Coastguard Worker IPrefetchStatus mPrefetchStatus; 338*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 339*bebae9c0SAndroid Build Coastguard Worker IAndroidBufferQueue mAndroidBufferQueue; 340*bebae9c0SAndroid Build Coastguard Worker #endif 341*bebae9c0SAndroid Build Coastguard Worker // fields below are per-instance private fields not associated with an interface 342*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mDataSource; 343*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mBankSource; 344*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mAudioSink; 345*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mImageVideoSink; 346*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mVibraSink; 347*bebae9c0SAndroid Build Coastguard Worker DataLocatorFormat mLEDArraySink; 348*bebae9c0SAndroid Build Coastguard Worker SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 349*bebae9c0SAndroid Build Coastguard Worker // range 1 <= x <= 8 FIXME FCC_8 350*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 351*bebae9c0SAndroid Build Coastguard Worker android::sp<android::GenericPlayer> mAVPlayer; 352*bebae9c0SAndroid Build Coastguard Worker android::sp<android::CallbackProtector> mCallbackProtector; 353*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectType mAndroidObjType; 354*bebae9c0SAndroid Build Coastguard Worker /** identifies the initialization and preparation state */ 355*bebae9c0SAndroid Build Coastguard Worker enum AndroidObjectState mAndroidObjState; 356*bebae9c0SAndroid Build Coastguard Worker /** identifies which group of effects ("session") this player belongs to */ 357*bebae9c0SAndroid Build Coastguard Worker audio_session_t mSessionId; 358*bebae9c0SAndroid Build Coastguard Worker /** identifies the Android stream type playback will occur on */ 359*bebae9c0SAndroid Build Coastguard Worker audio_stream_type_t mStreamType; 360*bebae9c0SAndroid Build Coastguard Worker #endif 361*bebae9c0SAndroid Build Coastguard Worker } CMediaPlayer; 362