classes.h revision a60dbf554549d10780f473b6e1373aa07aec3a28
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/AudioTrackProxy.h" 19#include "android/CallbackProtector.h" 20#include "android/android_Effect.h" 21#include "android/android_GenericPlayer.h" 22#endif 23 24// Class structures 25 26 27/*typedef*/ struct CAudioPlayer_struct { 28 IObject mObject; 29#ifdef ANDROID 30#define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 31#else 32#define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces 33#endif 34 SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default]; 35 IDynamicInterfaceManagement mDynamicInterfaceManagement; 36 IPlay mPlay; 37 I3DDoppler m3DDoppler; 38 I3DGrouping m3DGrouping; 39 I3DLocation m3DLocation; 40 I3DSource m3DSource; 41 IBufferQueue mBufferQueue; 42 IEffectSend mEffectSend; 43 IMetadataExtraction mMetadataExtraction; 44 IMetadataTraversal mMetadataTraversal; 45 IPrefetchStatus mPrefetchStatus; 46 IRatePitch mRatePitch; 47 ISeek mSeek; 48 IVolume mVolume; 49 IMuteSolo mMuteSolo; 50#ifdef ANDROID 51 IAndroidEffect mAndroidEffect; 52 IAndroidEffectSend mAndroidEffectSend; 53 IAndroidConfiguration mAndroidConfiguration; 54 IAndroidBufferQueue mAndroidBufferQueue; 55#endif 56 // optional interfaces 57 I3DMacroscopic m3DMacroscopic; 58 IBassBoost mBassBoost; 59 IDynamicSource mDynamicSource; 60 IEnvironmentalReverb mEnvironmentalReverb; 61 IEqualizer mEqualizer; 62 IPitch mPitch; 63 IPresetReverb mPresetReverb; 64 IPlaybackRate mPlaybackRate; 65 IVirtualizer mVirtualizer; 66 IVisualization mVisualization; 67 // fields below are per-instance private fields not associated with an interface 68 DataLocatorFormat mDataSource; 69 DataLocatorFormat mDataSink; 70 // cached data for this instance 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; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 75 // range 1 <= x <= 8 76 // End of former IMuteSolo fields 77 SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 78 // Formerly at IEffectSend 79 /** 80 * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf 81 */ 82 SLmillibel mDirectLevel; 83 // implementation-specific data for this instance 84#ifdef USE_OUTPUTMIXEXT 85 Track *mTrack; 86 float mGains[STEREO_CHANNELS]; ///< Computed gain based on volume, mute, solo, stereo position 87 SLboolean mDestroyRequested; ///< Mixer to acknowledge application's call to Object::Destroy 88#endif 89#ifdef USE_SNDFILE 90 struct SndFile mSndFile; 91#endif // USE_SNDFILE 92#ifdef ANDROID 93 android::Mutex *mpLock; 94 enum AndroidObjectType mAndroidObjType; 95 /** identifies the initialization and preparation state */ 96 enum AndroidObjectState mAndroidObjState; 97 /** identifies which group of effects ("session") this player belongs to */ 98 int mSessionId; 99 /** identifies the Android stream type playback will occur on */ 100 int mStreamType; 101 // FIXME consolidate the next several variables into one class to avoid placement new 102 /** plays the PCM data for this player */ 103 android::sp<android::AudioTrackProxy> mAudioTrack; 104 android::sp<android::CallbackProtector> mCallbackProtector; 105 android::sp<android::GenericPlayer> mAPlayer; 106 /** aux effect the AudioTrack will be attached to if aux send enabled */ 107 android::sp<android::AudioEffect> mAuxEffect; 108 // FIXME all levels below need to be encapsulated in a field of type AndroidAudioLevels 109 /** send level to aux effect, there's a single aux bus, so there's a single level */ 110 SLmillibel mAuxSendLevel; 111 /** 112 * Attenuation factor derived from direct level 113 */ 114 float mAmplFromDirectLevel; 115 /** FIXME whether to call AudioTrack::start() at the next safe opportunity */ 116 bool mDeferredStart; 117#endif 118} /*CAudioPlayer*/; 119 120 121/*typedef*/ struct CAudioRecorder_struct { 122 // mandated interfaces 123 IObject mObject; 124#ifdef ANDROID 125#define INTERFACES_AudioRecorder 11 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 126#else 127#define INTERFACES_AudioRecorder 9 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces 128#endif 129 SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default]; 130 IDynamicInterfaceManagement mDynamicInterfaceManagement; 131 IRecord mRecord; 132 IAudioEncoder mAudioEncoder; 133 // optional interfaces 134 IBassBoost mBassBoost; 135 IDynamicSource mDynamicSource; 136 IEqualizer mEqualizer; 137 IVisualization mVisualization; 138 IVolume mVolume; 139#ifdef ANDROID 140 IBufferQueue mBufferQueue; 141 IAndroidConfiguration mAndroidConfiguration; 142#endif 143 // remaining are per-instance private fields not associated with an interface 144 DataLocatorFormat mDataSource; 145 DataLocatorFormat mDataSink; 146 // cached data for this instance 147 SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 148 // range 1 <= x <= 8 149 SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known 150 // implementation-specific data for this instance 151#ifdef ANDROID 152 enum AndroidObjectType mAndroidObjType; 153 android::AudioRecord *mAudioRecord; //FIXME candidate to be encapsulated in a ARecorder subclass 154 int mRecordSource; //FIXME candidate to be encapsulated in a ARecorder subclass 155#endif 156} /*CAudioRecorder*/; 157 158 159/*typedef*/ struct CEngine_struct { 160 // mandated implicit interfaces 161 IObject mObject; 162#ifdef ANDROID 163#define INTERFACES_Engine 13 // see MPH_to_Engine in MPH_to.c for list of interfaces 164#else 165#define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces 166#endif 167 SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default]; 168 IDynamicInterfaceManagement mDynamicInterfaceManagement; 169 IEngine mEngine; 170 IEngineCapabilities mEngineCapabilities; 171 IThreadSync mThreadSync; 172 // mandated explicit interfaces 173 IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 174 IAudioDecoderCapabilities mAudioDecoderCapabilities; 175 IAudioEncoderCapabilities mAudioEncoderCapabilities; 176 I3DCommit m3DCommit; 177 // optional interfaces 178 IDeviceVolume mDeviceVolume; 179 // OpenMAX AL mandated implicit interfaces 180 IXAEngine mXAEngine; 181#ifdef ANDROID 182 IAndroidEffectCapabilities mAndroidEffectCapabilities; 183#endif 184 // OpenMAX AL explicit interfaces 185 IVideoDecoderCapabilities mVideoDecoderCapabilities; 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 SLuint8 mNumChannels; // initially UNKNOWN_NUMCHANNELS, then const once it is known, 334 // range 1 <= x <= 8 335#ifdef ANDROID 336 android::sp<android::GenericPlayer> mAVPlayer; 337 enum AndroidObjectType mAndroidObjType; 338 /** identifies the initialization and preparation state */ 339 enum AndroidObjectState mAndroidObjState; 340 /** identifies which group of effects ("session") this player belongs to */ 341 int mSessionId; 342 /** identifies the Android stream type playback will occur on */ 343 int mStreamType; 344#endif 345} CMediaPlayer; 346