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