classes.h revision f271eea20f9fff6c101213b34652399f457bcd50
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 17cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten// Class structures 18cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 19cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 20cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioPlayer_struct { 21cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 22cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 23cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 24cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 25cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 26cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 27cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default]; 28cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 29cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlay mPlay; 30cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 31cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DGrouping m3DGrouping; 32cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 33cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DSource m3DSource; 34cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 35cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEffectSend mEffectSend; 36cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 37cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 38cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPrefetchStatus mPrefetchStatus; 39cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IRatePitch mRatePitch; 40cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ISeek mSeek; 41cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 42cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMuteSolo mMuteSolo; 43cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 44cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffect mAndroidEffect; 45cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffectSend mAndroidEffectSend; 46cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidConfiguration mAndroidConfiguration; 47cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidBufferQueue mAndroidBufferQueue; 48cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 49cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 50cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DMacroscopic m3DMacroscopic; 51cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 52cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 53cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 54cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 55cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPitch mPitch; 56cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 57cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlaybackRate mPlaybackRate; 58cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 59cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 60cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 61cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSource; 62cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSink; 63cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // cached data for this instance 64cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 /*SLboolean*/ mMute; 65cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // Formerly at IMuteSolo 66cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mMuteMask; // Mask for which channels are muted: bit 0=left, 1=right 67cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mSoloMask; // Mask for which channels are soloed: bit 0=left, 1=right 68cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mNumChannels; // 0 means unknown, then const once it is known, range 1 <= x <= 8 69cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mSampleRateMilliHz;// 0 means unknown, then const once it is known 70cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // Formerly at IEffectSend 71cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 72cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf 73cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 74cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLmillibel mDirectLevel; 75cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // implementation-specific data for this instance 76cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT 77cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten Track *mTrack; 78cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mGains[STEREO_CHANNELS]; ///< Computed gain based on volume, mute, solo, stereo position 79cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLboolean mDestroyRequested; ///< Mixer to acknowledge application's call to Object::Destroy 80cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 81cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_SNDFILE 82cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten struct SndFile mSndFile; 83cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif // USE_SNDFILE 84cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 85cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::Mutex *mpLock; 86cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten enum AndroidObject_type mAndroidObjType; 87f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the initialization and preparation state */ 88cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten enum AndroidObject_state mAndroidObjState; 89cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** identifies which group of effects ("session") this player belongs to */ 90cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten int mSessionId; 91cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** identifies the Android stream type playback will occur on */ 92cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten int mStreamType; 93cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** plays the PCM data for this player */ 94cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::AudioTrack *mAudioTrack; 95cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::sp<android::SfPlayer> mSfPlayer; 96cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::sp<android::StreamPlayer> mStreamPlayer; 97cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** aux effect the AudioTrack will be attached to if aux send enabled */ 98cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::sp<android::AudioEffect> mAuxEffect; 99cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** send level to aux effect, there's a single aux bus, so there's a single level */ 100cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLmillibel mAuxSendLevel; 101cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 102cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Amplification (can be attenuation) factor derived for the VolumeLevel 103cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 104cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mAmplFromVolLevel; 105cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 106cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Left/right amplification (can be attenuations) factors derived for the StereoPosition 107cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 108cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mAmplFromStereoPos[STEREO_CHANNELS]; 109cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten /** 110cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Attenuation factor derived from direct level 111cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */ 112cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten float mAmplFromDirectLevel; 113cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 114cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioPlayer*/; 115cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 116cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 117cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioRecorder_struct { 118cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 119cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 120cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 121cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioRecorder 11 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 122cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 123cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioRecorder 9 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 124cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 125cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default]; 126cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 127cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IRecord mRecord; 128cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioEncoder mAudioEncoder; 129cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 130cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 131cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 132cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 133cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 134cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 135cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 136cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 137cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidConfiguration mAndroidConfiguration; 138cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 139cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 140cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSource; 141cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten DataLocatorFormat mDataSink; 142cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // cached data for this instance 143cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mNumChannels; // 0 means unknown, then const once it is known, range 1 <= x <= 8 144cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mSampleRateMilliHz;// 0 means unknown, then const once it is known 145cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // implementation-specific data for this instance 146cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 147cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten android::AudioRecord *mAudioRecord; 148cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten int mRecordSource; 149cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 150cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioRecorder*/; 151cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 152cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 153cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CEngine_struct { 154cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated implicit interfaces 155cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 156cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 157cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces 158cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 159cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Engine 11 // see MPH_to_Engine in MPH_to.c for list of interfaces 160cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 161cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default]; 162cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 163cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEngine mEngine; 164cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEngineCapabilities mEngineCapabilities; 165cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IThreadSync mThreadSync; 166cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated explicit interfaces 167cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 168cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioDecoderCapabilities mAudioDecoderCapabilities; 169cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAudioEncoderCapabilities mAudioEncoderCapabilities; 170cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DCommit m3DCommit; 171cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 172cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDeviceVolume mDeviceVolume; 173cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // OpenMAX AL mandated implicit interfaces 174cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IXAEngine mXAEngine; 175cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 176cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffectCapabilities mAndroidEffectCapabilities; 177cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 178cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 179cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ThreadPool mThreadPool; // for asynchronous operations 180cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten pthread_t mSyncThread; 181cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#if defined(ANDROID) && !defined(USE_BACKPORT) 182cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // FIXME number of presets will only be saved in IEqualizer, preset names will not be stored 183cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mEqNumPresets; 184cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten char** mEqPresetNames; 185cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 186cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CEngine*/; 187cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 188cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 189cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 190cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 191cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_LEDDevice 3 // see MPH_to_LEDDevice in MPH_to.c for list of interfaces 192cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_LEDDevice - INTERFACES_Default]; 193cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 194cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ILEDArray mLEDArray; 195cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 196cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mDeviceID; 197cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CLEDDevice; 198cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 199cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 200cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 201cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 202cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Listener 4 // see MPH_to_Listener in MPH_to.c for list of interfaces 203cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_Listener - INTERFACES_Default]; 204cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 205cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 206cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 207cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 208cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CListener; 209cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 210cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 211cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 212cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 213cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MetadataExtractor 5 // see MPH_to_MetadataExtractor in MPH_to.c for list of 214cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // interfaces 215cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_MetadataExtractor - INTERFACES_Default]; 216cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 217cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 218cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 219cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 220cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 221cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMetadataExtractor; 222cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 223cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 224cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 225cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 226cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 227cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MidiPlayer 29 // see MPH_to_MidiPlayer in MPH_to.c for list of interfaces 228cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_MidiPlayer - INTERFACES_Default]; 229cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 230cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlay mPlay; 231cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DDoppler m3DDoppler; 232cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DGrouping m3DGrouping; 233cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DLocation m3DLocation; 234cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DSource m3DSource; 235cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBufferQueue mBufferQueue; 236cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEffectSend mEffectSend; 237cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataExtraction mMetadataExtraction; 238cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMetadataTraversal mMetadataTraversal; 239cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDIMessage mMIDIMessage; 240cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDITime mMIDITime; 241cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDITempo mMIDITempo; 242cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMIDIMuteSolo mMIDIMuteSolo; 243cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPrefetchStatus mPrefetchStatus; 244cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten ISeek mSeek; 245cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 246cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IMuteSolo mMuteSolo; 247cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 248cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten I3DMacroscopic m3DMacroscopic; 249cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 250cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicSource mDynamicSource; 251cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 252cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 253cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPitch mPitch; 254cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 255cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPlaybackRate mPlaybackRate; 256cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 257cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 258cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 259cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMidiPlayer; 260cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 261cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct COutputMix_struct { 262cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 263cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 264cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 265cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 12 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 266cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else 267cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 11 // see MPH_to_OutputMix in MPH_to.c for list of interfaces 268cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 269cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_OutputMix - INTERFACES_Default]; 270cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 271cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IOutputMix mOutputMix; 272cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT 273cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IOutputMixExt mOutputMixExt; 274cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 275cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 276cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IEqualizer mEqualizer; 277cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IPresetReverb mPresetReverb; 278cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVirtualizer mVirtualizer; 279cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVolume mVolume; 280cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // optional interfaces 281cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IBassBoost mBassBoost; 282cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVisualization mVisualization; 283cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID 284cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IAndroidEffect mAndroidEffect; 285cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif 286cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 287cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*COutputMix*/; 288cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten 289cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct { 290cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // mandated interfaces 291cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IObject mObject; 292cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_VibraDevice 3 // see MPH_to_VibraDevice in MPH_to.c for list of interfaces 293cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint8 mInterfaceStates2[INTERFACES_VibraDevice - INTERFACES_Default]; 294cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 295cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten IVibra mVibra; 296cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten // remaining are per-instance private fields not associated with an interface 297cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten SLuint32 mDeviceID; 298cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CVibraDevice; 2998b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten 3008b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten 3018b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastentypedef struct CMediaPlayer_struct { 3028b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten IObject mObject; 303eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#define INTERFACES_MediaPlayer 4 3048b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten XAuint8 mInterfaceStates2[INTERFACES_MediaPlayer - INTERFACES_Default]; 3058b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 30694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten IPlay mPlay; 307eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#ifdef ANDROID 308eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi IAndroidBufferQueue mAndroidBufferQueue; 309eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#endif 3108b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten // ... 3118b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mDataSource; 3128b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mBankSource; 3138b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mAudioSink; 3148b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mImageVideoSink; 3158b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mVibraSink; 3168b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten DataLocatorFormat mLEDArraySink; 317f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** 318f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf 319f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi */ 320f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi SLmillibel mDirectLevel; 32194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#ifdef ANDROID 322eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi android::sp<android::AVPlayer> mAVPlayer; 323f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi enum AndroidObject_type mAndroidObjType; 324f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the initialization and preparation state */ 325f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi enum AndroidObject_state mAndroidObjState; 326f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies which group of effects ("session") this player belongs to */ 327f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi int mSessionId; 328f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi /** identifies the Android stream type playback will occur on */ 329f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi int mStreamType; 330f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi AndroidAudioLevels mAndroidAudioLevels; 33194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#endif 3328b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten} CMediaPlayer; 333