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 <jni.h> 20*bebae9c0SAndroid Build Coastguard Worker 21*bebae9c0SAndroid Build Coastguard Worker #include "media/AudioEffect.h" 22*bebae9c0SAndroid Build Coastguard Worker #endif 23*bebae9c0SAndroid Build Coastguard Worker 24*bebae9c0SAndroid Build Coastguard Worker /* Interface structures */ 25*bebae9c0SAndroid Build Coastguard Worker 26*bebae9c0SAndroid Build Coastguard Worker typedef struct Object_interface { 27*bebae9c0SAndroid Build Coastguard Worker const struct SLObjectItf_ *mItf; // const 28*bebae9c0SAndroid Build Coastguard Worker // field mThis would be redundant within an IObject, so we substitute mEngine 29*bebae9c0SAndroid Build Coastguard Worker CEngine *mEngine; // const 30*bebae9c0SAndroid Build Coastguard Worker const ClassTable *mClass; // const 31*bebae9c0SAndroid Build Coastguard Worker SLuint32 mInstanceID; // const for debugger and for RPC, 0 means unpublished 32*bebae9c0SAndroid Build Coastguard Worker slObjectCallback mCallback; 33*bebae9c0SAndroid Build Coastguard Worker void *mContext; 34*bebae9c0SAndroid Build Coastguard Worker unsigned mGottenMask; ///< bit-mask of interfaces exposed or added, then gotten 35*bebae9c0SAndroid Build Coastguard Worker unsigned mLossOfControlMask; // interfaces with loss of control enabled 36*bebae9c0SAndroid Build Coastguard Worker unsigned mAttributesMask; // attributes which have changed since last sync 37*bebae9c0SAndroid Build Coastguard Worker #if USE_PROFILES & USE_PROFILES_BASE 38*bebae9c0SAndroid Build Coastguard Worker SLint32 mPriority; 39*bebae9c0SAndroid Build Coastguard Worker #endif 40*bebae9c0SAndroid Build Coastguard Worker pthread_mutex_t mMutex; 41*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_DEBUG 42*bebae9c0SAndroid Build Coastguard Worker // Only keep the pthread_t, not the kernel tid, because pthread_self() is very fast 43*bebae9c0SAndroid Build Coastguard Worker // (typically just arithmetic on the stack pointer). But a gettid() is a kernel call 44*bebae9c0SAndroid Build Coastguard Worker // and so too slow to do every time a mutex is acquired. However, we can determine 45*bebae9c0SAndroid Build Coastguard Worker // the kernel tid from the pthread_t. 46*bebae9c0SAndroid Build Coastguard Worker pthread_t mOwner; 47*bebae9c0SAndroid Build Coastguard Worker const char *mFile; 48*bebae9c0SAndroid Build Coastguard Worker int mLine; 49*bebae9c0SAndroid Build Coastguard Worker volatile int32_t mGeneration; // read without a lock, incremented with a lock 50*bebae9c0SAndroid Build Coastguard Worker #endif 51*bebae9c0SAndroid Build Coastguard Worker pthread_cond_t mCond; 52*bebae9c0SAndroid Build Coastguard Worker SLuint8 mState; // really SLuint32, but SLuint8 to save space 53*bebae9c0SAndroid Build Coastguard Worker #if USE_PROFILES & USE_PROFILES_BASE 54*bebae9c0SAndroid Build Coastguard Worker SLuint8 mPreemptable; // really SLboolean, but SLuint8 to save space 55*bebae9c0SAndroid Build Coastguard Worker #else 56*bebae9c0SAndroid Build Coastguard Worker SLuint8 mPadding; 57*bebae9c0SAndroid Build Coastguard Worker #endif 58*bebae9c0SAndroid Build Coastguard Worker SLuint8 mStrongRefCount; // number of strong references to this object 59*bebae9c0SAndroid Build Coastguard Worker // (object cannot be destroyed as long as > 0, and referrers _prefer_ it stay in Realized state) 60*bebae9c0SAndroid Build Coastguard Worker // for best alignment, do not add any fields here 61*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_Default 1 62*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates[INTERFACES_Default]; // state of each of interface 63*bebae9c0SAndroid Build Coastguard Worker // do not add any fields here 64*bebae9c0SAndroid Build Coastguard Worker } IObject; 65*bebae9c0SAndroid Build Coastguard Worker 66*bebae9c0SAndroid Build Coastguard Worker #include "locks.h" 67*bebae9c0SAndroid Build Coastguard Worker 68*bebae9c0SAndroid Build Coastguard Worker typedef struct { 69*bebae9c0SAndroid Build Coastguard Worker const struct SL3DCommitItf_ *mItf; 70*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 71*bebae9c0SAndroid Build Coastguard Worker SLboolean mDeferred; 72*bebae9c0SAndroid Build Coastguard Worker SLuint32 mGeneration; // incremented each main clock cycle 73*bebae9c0SAndroid Build Coastguard Worker SLuint32 mWaiting; // number of threads waiting in Commit 74*bebae9c0SAndroid Build Coastguard Worker } I3DCommit; 75*bebae9c0SAndroid Build Coastguard Worker 76*bebae9c0SAndroid Build Coastguard Worker enum CartesianSphericalActive { 77*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_COMPUTED_SPHERICAL_SET, 78*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_REQUESTED_SPHERICAL_SET, 79*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_UNKNOWN_SPHERICAL_SET, 80*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_SET_SPHERICAL_COMPUTED, // not in 1.0.1 81*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_SET_SPHERICAL_REQUESTED, // not in 1.0.1 82*bebae9c0SAndroid Build Coastguard Worker CARTESIAN_SET_SPHERICAL_UNKNOWN 83*bebae9c0SAndroid Build Coastguard Worker }; 84*bebae9c0SAndroid Build Coastguard Worker 85*bebae9c0SAndroid Build Coastguard Worker typedef struct { 86*bebae9c0SAndroid Build Coastguard Worker const struct SL3DDopplerItf_ *mItf; 87*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 88*bebae9c0SAndroid Build Coastguard Worker // The API allows client to specify either Cartesian and spherical velocities. 89*bebae9c0SAndroid Build Coastguard Worker // But an implementation will likely prefer one or the other. So for 90*bebae9c0SAndroid Build Coastguard Worker // maximum portablity, we maintain both units and an indication of which 91*bebae9c0SAndroid Build Coastguard Worker // unit was set most recently. In addition, we keep a flag saying whether 92*bebae9c0SAndroid Build Coastguard Worker // the other unit has been derived yet. It can take significant time 93*bebae9c0SAndroid Build Coastguard Worker // to compute the other unit, so this may be deferred to another thread. 94*bebae9c0SAndroid Build Coastguard Worker // For this reason we also keep an indication of whether the secondary 95*bebae9c0SAndroid Build Coastguard Worker // has been computed yet, and its accuracy. 96*bebae9c0SAndroid Build Coastguard Worker // Though only one unit is primary at a time, a union is inappropriate: 97*bebae9c0SAndroid Build Coastguard Worker // the application might read in both units (not in 1.0.1), 98*bebae9c0SAndroid Build Coastguard Worker // and due to multi-threading concerns. 99*bebae9c0SAndroid Build Coastguard Worker SLVec3D mVelocityCartesian; 100*bebae9c0SAndroid Build Coastguard Worker struct { 101*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mAzimuth; 102*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mElevation; 103*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mSpeed; 104*bebae9c0SAndroid Build Coastguard Worker } mVelocitySpherical; 105*bebae9c0SAndroid Build Coastguard Worker enum CartesianSphericalActive mVelocityActive; 106*bebae9c0SAndroid Build Coastguard Worker SLpermille mDopplerFactor; 107*bebae9c0SAndroid Build Coastguard Worker } I3DDoppler; 108*bebae9c0SAndroid Build Coastguard Worker 109*bebae9c0SAndroid Build Coastguard Worker typedef struct { 110*bebae9c0SAndroid Build Coastguard Worker const struct SL3DGroupingItf_ *mItf; 111*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 112*bebae9c0SAndroid Build Coastguard Worker C3DGroup *mGroup; // strong reference to associated group or NULL 113*bebae9c0SAndroid Build Coastguard Worker } I3DGrouping; 114*bebae9c0SAndroid Build Coastguard Worker 115*bebae9c0SAndroid Build Coastguard Worker enum AnglesVectorsActive { 116*bebae9c0SAndroid Build Coastguard Worker ANGLES_COMPUTED_VECTORS_SET, // not in 1.0.1 117*bebae9c0SAndroid Build Coastguard Worker ANGLES_REQUESTED_VECTORS_SET, // not in 1.0.1 118*bebae9c0SAndroid Build Coastguard Worker ANGLES_UNKNOWN_VECTORS_SET, 119*bebae9c0SAndroid Build Coastguard Worker ANGLES_SET_VECTORS_COMPUTED, 120*bebae9c0SAndroid Build Coastguard Worker ANGLES_SET_VECTORS_REQUESTED, 121*bebae9c0SAndroid Build Coastguard Worker ANGLES_SET_VECTORS_UNKNOWN 122*bebae9c0SAndroid Build Coastguard Worker }; 123*bebae9c0SAndroid Build Coastguard Worker 124*bebae9c0SAndroid Build Coastguard Worker typedef struct { 125*bebae9c0SAndroid Build Coastguard Worker const struct SL3DLocationItf_ *mItf; 126*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 127*bebae9c0SAndroid Build Coastguard Worker SLVec3D mLocationCartesian; 128*bebae9c0SAndroid Build Coastguard Worker struct { 129*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mAzimuth; 130*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mElevation; 131*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mDistance; 132*bebae9c0SAndroid Build Coastguard Worker } mLocationSpherical; 133*bebae9c0SAndroid Build Coastguard Worker enum CartesianSphericalActive mLocationActive; 134*bebae9c0SAndroid Build Coastguard Worker struct { 135*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mHeading; 136*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mPitch; 137*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mRoll; 138*bebae9c0SAndroid Build Coastguard Worker } mOrientationAngles; 139*bebae9c0SAndroid Build Coastguard Worker struct { 140*bebae9c0SAndroid Build Coastguard Worker SLVec3D mFront; 141*bebae9c0SAndroid Build Coastguard Worker SLVec3D mAbove; 142*bebae9c0SAndroid Build Coastguard Worker SLVec3D mUp; 143*bebae9c0SAndroid Build Coastguard Worker } mOrientationVectors; 144*bebae9c0SAndroid Build Coastguard Worker enum AnglesVectorsActive mOrientationActive; 145*bebae9c0SAndroid Build Coastguard Worker // Rotations can be slow, so are deferred. 146*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mTheta; 147*bebae9c0SAndroid Build Coastguard Worker SLVec3D mAxis; 148*bebae9c0SAndroid Build Coastguard Worker SLboolean mRotatePending; 149*bebae9c0SAndroid Build Coastguard Worker } I3DLocation; 150*bebae9c0SAndroid Build Coastguard Worker 151*bebae9c0SAndroid Build Coastguard Worker typedef struct { 152*bebae9c0SAndroid Build Coastguard Worker const struct SL3DMacroscopicItf_ *mItf; 153*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 154*bebae9c0SAndroid Build Coastguard Worker struct { 155*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mWidth; 156*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mHeight; 157*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mDepth; 158*bebae9c0SAndroid Build Coastguard Worker } mSize; 159*bebae9c0SAndroid Build Coastguard Worker struct { 160*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mHeading; 161*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mPitch; 162*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mRoll; 163*bebae9c0SAndroid Build Coastguard Worker } mOrientationAngles; 164*bebae9c0SAndroid Build Coastguard Worker struct { 165*bebae9c0SAndroid Build Coastguard Worker SLVec3D mFront; 166*bebae9c0SAndroid Build Coastguard Worker SLVec3D mAbove; 167*bebae9c0SAndroid Build Coastguard Worker SLVec3D mUp; 168*bebae9c0SAndroid Build Coastguard Worker } mOrientationVectors; 169*bebae9c0SAndroid Build Coastguard Worker enum AnglesVectorsActive mOrientationActive; 170*bebae9c0SAndroid Build Coastguard Worker // Rotations can be slow, so are deferred. 171*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mTheta; 172*bebae9c0SAndroid Build Coastguard Worker SLVec3D mAxis; 173*bebae9c0SAndroid Build Coastguard Worker SLboolean mRotatePending; 174*bebae9c0SAndroid Build Coastguard Worker } I3DMacroscopic; 175*bebae9c0SAndroid Build Coastguard Worker 176*bebae9c0SAndroid Build Coastguard Worker typedef struct { 177*bebae9c0SAndroid Build Coastguard Worker const struct SL3DSourceItf_ *mItf; 178*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 179*bebae9c0SAndroid Build Coastguard Worker SLboolean mHeadRelative; 180*bebae9c0SAndroid Build Coastguard Worker SLboolean mRolloffMaxDistanceMute; 181*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mMaxDistance; 182*bebae9c0SAndroid Build Coastguard Worker SLmillimeter mMinDistance; 183*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mConeInnerAngle; 184*bebae9c0SAndroid Build Coastguard Worker SLmillidegree mConeOuterAngle; 185*bebae9c0SAndroid Build Coastguard Worker SLmillibel mConeOuterLevel; 186*bebae9c0SAndroid Build Coastguard Worker SLpermille mRolloffFactor; 187*bebae9c0SAndroid Build Coastguard Worker SLpermille mRoomRolloffFactor; 188*bebae9c0SAndroid Build Coastguard Worker SLuint8 mDistanceModel; 189*bebae9c0SAndroid Build Coastguard Worker } I3DSource; 190*bebae9c0SAndroid Build Coastguard Worker 191*bebae9c0SAndroid Build Coastguard Worker typedef struct { 192*bebae9c0SAndroid Build Coastguard Worker const struct SLAudioDecoderCapabilitiesItf_ *mItf; 193*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 194*bebae9c0SAndroid Build Coastguard Worker } IAudioDecoderCapabilities; 195*bebae9c0SAndroid Build Coastguard Worker 196*bebae9c0SAndroid Build Coastguard Worker typedef struct { 197*bebae9c0SAndroid Build Coastguard Worker const struct SLAudioEncoderItf_ *mItf; 198*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 199*bebae9c0SAndroid Build Coastguard Worker SLAudioEncoderSettings mSettings; 200*bebae9c0SAndroid Build Coastguard Worker } IAudioEncoder; 201*bebae9c0SAndroid Build Coastguard Worker 202*bebae9c0SAndroid Build Coastguard Worker typedef struct { 203*bebae9c0SAndroid Build Coastguard Worker const struct SLAudioEncoderCapabilitiesItf_ *mItf; 204*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 205*bebae9c0SAndroid Build Coastguard Worker } IAudioEncoderCapabilities; 206*bebae9c0SAndroid Build Coastguard Worker 207*bebae9c0SAndroid Build Coastguard Worker typedef struct { 208*bebae9c0SAndroid Build Coastguard Worker const struct SLAudioIODeviceCapabilitiesItf_ *mItf; 209*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 210*bebae9c0SAndroid Build Coastguard Worker slAvailableAudioInputsChangedCallback mAvailableAudioInputsChangedCallback; 211*bebae9c0SAndroid Build Coastguard Worker void *mAvailableAudioInputsChangedContext; 212*bebae9c0SAndroid Build Coastguard Worker slAvailableAudioOutputsChangedCallback mAvailableAudioOutputsChangedCallback; 213*bebae9c0SAndroid Build Coastguard Worker void *mAvailableAudioOutputsChangedContext; 214*bebae9c0SAndroid Build Coastguard Worker slDefaultDeviceIDMapChangedCallback mDefaultDeviceIDMapChangedCallback; 215*bebae9c0SAndroid Build Coastguard Worker void *mDefaultDeviceIDMapChangedContext; 216*bebae9c0SAndroid Build Coastguard Worker } IAudioIODeviceCapabilities; 217*bebae9c0SAndroid Build Coastguard Worker 218*bebae9c0SAndroid Build Coastguard Worker typedef struct { 219*bebae9c0SAndroid Build Coastguard Worker const struct SLBassBoostItf_ *mItf; 220*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 221*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 222*bebae9c0SAndroid Build Coastguard Worker SLpermille mStrength; 223*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 224*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mBassBoostDescriptor; 225*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mBassBoostEffect; 226*bebae9c0SAndroid Build Coastguard Worker #endif 227*bebae9c0SAndroid Build Coastguard Worker } IBassBoost; 228*bebae9c0SAndroid Build Coastguard Worker 229*bebae9c0SAndroid Build Coastguard Worker typedef struct BufferQueue_interface { 230*bebae9c0SAndroid Build Coastguard Worker const struct SLBufferQueueItf_ *mItf; 231*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 232*bebae9c0SAndroid Build Coastguard Worker SLBufferQueueState mState; 233*bebae9c0SAndroid Build Coastguard Worker slBufferQueueCallback mCallback; 234*bebae9c0SAndroid Build Coastguard Worker void *mContext; 235*bebae9c0SAndroid Build Coastguard Worker // originally SLuint32, but range-checked down to SLuint16 236*bebae9c0SAndroid Build Coastguard Worker SLuint16 mNumBuffers; 237*bebae9c0SAndroid Build Coastguard Worker /*SLboolean*/ SLuint16 mClearRequested; 238*bebae9c0SAndroid Build Coastguard Worker BufferHeader *mArray; 239*bebae9c0SAndroid Build Coastguard Worker BufferHeader *mFront, *mRear; 240*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 241*bebae9c0SAndroid Build Coastguard Worker SLuint32 mSizeConsumed; 242*bebae9c0SAndroid Build Coastguard Worker bool mCallbackPending; 243*bebae9c0SAndroid Build Coastguard Worker #endif 244*bebae9c0SAndroid Build Coastguard Worker // saves a malloc in the typical case 245*bebae9c0SAndroid Build Coastguard Worker #define BUFFER_HEADER_TYPICAL 4 246*bebae9c0SAndroid Build Coastguard Worker BufferHeader mTypical[BUFFER_HEADER_TYPICAL+1]; 247*bebae9c0SAndroid Build Coastguard Worker } IBufferQueue; 248*bebae9c0SAndroid Build Coastguard Worker 249*bebae9c0SAndroid Build Coastguard Worker #define MAX_DEVICE 2 // hard-coded array size for default in/out 250*bebae9c0SAndroid Build Coastguard Worker 251*bebae9c0SAndroid Build Coastguard Worker typedef struct { 252*bebae9c0SAndroid Build Coastguard Worker const struct SLDeviceVolumeItf_ *mItf; 253*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 254*bebae9c0SAndroid Build Coastguard Worker SLint32 mVolume[MAX_DEVICE]; 255*bebae9c0SAndroid Build Coastguard Worker } IDeviceVolume; 256*bebae9c0SAndroid Build Coastguard Worker 257*bebae9c0SAndroid Build Coastguard Worker typedef struct { 258*bebae9c0SAndroid Build Coastguard Worker const struct SLDynamicInterfaceManagementItf_ *mItf; 259*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 260*bebae9c0SAndroid Build Coastguard Worker slDynamicInterfaceManagementCallback mCallback; 261*bebae9c0SAndroid Build Coastguard Worker void *mContext; 262*bebae9c0SAndroid Build Coastguard Worker } IDynamicInterfaceManagement; 263*bebae9c0SAndroid Build Coastguard Worker 264*bebae9c0SAndroid Build Coastguard Worker typedef struct { 265*bebae9c0SAndroid Build Coastguard Worker const struct SLDynamicSourceItf_ *mItf; 266*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 267*bebae9c0SAndroid Build Coastguard Worker SLDataSource *mDataSource; 268*bebae9c0SAndroid Build Coastguard Worker } IDynamicSource; 269*bebae9c0SAndroid Build Coastguard Worker 270*bebae9c0SAndroid Build Coastguard Worker // private 271*bebae9c0SAndroid Build Coastguard Worker 272*bebae9c0SAndroid Build Coastguard Worker struct EnableLevel { 273*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnable; 274*bebae9c0SAndroid Build Coastguard Worker SLmillibel mSendLevel; 275*bebae9c0SAndroid Build Coastguard Worker }; 276*bebae9c0SAndroid Build Coastguard Worker 277*bebae9c0SAndroid Build Coastguard Worker // indexes into IEffectSend.mEnableLevels 278*bebae9c0SAndroid Build Coastguard Worker 279*bebae9c0SAndroid Build Coastguard Worker #define AUX_ENVIRONMENTALREVERB 0 280*bebae9c0SAndroid Build Coastguard Worker #define AUX_PRESETREVERB 1 281*bebae9c0SAndroid Build Coastguard Worker #define AUX_MAX 2 282*bebae9c0SAndroid Build Coastguard Worker 283*bebae9c0SAndroid Build Coastguard Worker typedef struct { 284*bebae9c0SAndroid Build Coastguard Worker const struct SLEffectSendItf_ *mItf; 285*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 286*bebae9c0SAndroid Build Coastguard Worker struct EnableLevel mEnableLevels[AUX_MAX]; // wet enable and volume per effect type 287*bebae9c0SAndroid Build Coastguard Worker } IEffectSend; 288*bebae9c0SAndroid Build Coastguard Worker 289*bebae9c0SAndroid Build Coastguard Worker typedef struct Engine_interface { 290*bebae9c0SAndroid Build Coastguard Worker const struct SLEngineItf_ *mItf; 291*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 292*bebae9c0SAndroid Build Coastguard Worker SLboolean mLossOfControlGlobal; 293*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_SDL 294*bebae9c0SAndroid Build Coastguard Worker COutputMix *mOutputMix; // SDL pulls PCM from an arbitrary IOutputMixExt 295*bebae9c0SAndroid Build Coastguard Worker #endif 296*bebae9c0SAndroid Build Coastguard Worker // Each engine is its own universe. 297*bebae9c0SAndroid Build Coastguard Worker SLuint32 mInstanceCount; 298*bebae9c0SAndroid Build Coastguard Worker unsigned mInstanceMask; // 1 bit per active object 299*bebae9c0SAndroid Build Coastguard Worker unsigned mChangedMask; // objects which have changed since last sync 300*bebae9c0SAndroid Build Coastguard Worker #define MAX_INSTANCE 32 // maximum active objects per engine, see mInstanceMask 301*bebae9c0SAndroid Build Coastguard Worker IObject *mInstances[MAX_INSTANCE]; 302*bebae9c0SAndroid Build Coastguard Worker SLboolean mShutdown; 303*bebae9c0SAndroid Build Coastguard Worker SLboolean mShutdownAck; 304*bebae9c0SAndroid Build Coastguard Worker // SLuint32 mVersion; // 0xXXYYZZ where XX=major, YY=minor, ZZ=step 305*bebae9c0SAndroid Build Coastguard Worker SLuint32 mNativeEndianness; // one of SL_BYTEORDER_LITTLEENDIAN or SL_BYTEORDER_BIGENDIAN 306*bebae9c0SAndroid Build Coastguard Worker } IEngine; 307*bebae9c0SAndroid Build Coastguard Worker 308*bebae9c0SAndroid Build Coastguard Worker typedef struct { 309*bebae9c0SAndroid Build Coastguard Worker const struct SLEngineCapabilitiesItf_ *mItf; 310*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 311*bebae9c0SAndroid Build Coastguard Worker SLboolean mThreadSafe; 312*bebae9c0SAndroid Build Coastguard Worker // const 313*bebae9c0SAndroid Build Coastguard Worker SLuint32 mMaxIndexLED; 314*bebae9c0SAndroid Build Coastguard Worker SLuint32 mMaxIndexVibra; 315*bebae9c0SAndroid Build Coastguard Worker } IEngineCapabilities; 316*bebae9c0SAndroid Build Coastguard Worker 317*bebae9c0SAndroid Build Coastguard Worker typedef struct { 318*bebae9c0SAndroid Build Coastguard Worker const struct SLEnvironmentalReverbItf_ *mItf; 319*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 320*bebae9c0SAndroid Build Coastguard Worker SLEnvironmentalReverbSettings mProperties; 321*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 322*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mEnvironmentalReverbDescriptor; 323*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mEnvironmentalReverbEffect; 324*bebae9c0SAndroid Build Coastguard Worker #endif 325*bebae9c0SAndroid Build Coastguard Worker } IEnvironmentalReverb; 326*bebae9c0SAndroid Build Coastguard Worker 327*bebae9c0SAndroid Build Coastguard Worker struct EqualizerBand { 328*bebae9c0SAndroid Build Coastguard Worker SLmilliHertz mMin; 329*bebae9c0SAndroid Build Coastguard Worker SLmilliHertz mCenter; 330*bebae9c0SAndroid Build Coastguard Worker SLmilliHertz mMax; 331*bebae9c0SAndroid Build Coastguard Worker }; 332*bebae9c0SAndroid Build Coastguard Worker 333*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 334*bebae9c0SAndroid Build Coastguard Worker #define MAX_EQ_BANDS 0 335*bebae9c0SAndroid Build Coastguard Worker #else 336*bebae9c0SAndroid Build Coastguard Worker #define MAX_EQ_BANDS 4 // compile-time limit, runtime limit may be smaller 337*bebae9c0SAndroid Build Coastguard Worker #endif 338*bebae9c0SAndroid Build Coastguard Worker 339*bebae9c0SAndroid Build Coastguard Worker typedef struct { 340*bebae9c0SAndroid Build Coastguard Worker const struct SLEqualizerItf_ *mItf; 341*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 342*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 343*bebae9c0SAndroid Build Coastguard Worker SLuint16 mPreset; 344*bebae9c0SAndroid Build Coastguard Worker #if 0 < MAX_EQ_BANDS 345*bebae9c0SAndroid Build Coastguard Worker SLmillibel mLevels[MAX_EQ_BANDS]; 346*bebae9c0SAndroid Build Coastguard Worker #endif 347*bebae9c0SAndroid Build Coastguard Worker // const to end of struct 348*bebae9c0SAndroid Build Coastguard Worker SLuint16 mNumPresets; 349*bebae9c0SAndroid Build Coastguard Worker SLuint16 mNumBands; 350*bebae9c0SAndroid Build Coastguard Worker #if !defined(ANDROID) 351*bebae9c0SAndroid Build Coastguard Worker const struct EqualizerBand *mBands; 352*bebae9c0SAndroid Build Coastguard Worker const struct EqualizerPreset *mPresets; 353*bebae9c0SAndroid Build Coastguard Worker #endif 354*bebae9c0SAndroid Build Coastguard Worker SLmillibel mBandLevelRangeMin; 355*bebae9c0SAndroid Build Coastguard Worker SLmillibel mBandLevelRangeMax; 356*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 357*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mEqDescriptor; 358*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mEqEffect; 359*bebae9c0SAndroid Build Coastguard Worker #endif 360*bebae9c0SAndroid Build Coastguard Worker } IEqualizer; 361*bebae9c0SAndroid Build Coastguard Worker 362*bebae9c0SAndroid Build Coastguard Worker #define MAX_LED_COUNT 32 363*bebae9c0SAndroid Build Coastguard Worker 364*bebae9c0SAndroid Build Coastguard Worker typedef struct { 365*bebae9c0SAndroid Build Coastguard Worker const struct SLLEDArrayItf_ *mItf; 366*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 367*bebae9c0SAndroid Build Coastguard Worker SLuint32 mLightMask; 368*bebae9c0SAndroid Build Coastguard Worker SLHSL mColors[MAX_LED_COUNT]; 369*bebae9c0SAndroid Build Coastguard Worker // const 370*bebae9c0SAndroid Build Coastguard Worker SLuint8 mCount; 371*bebae9c0SAndroid Build Coastguard Worker } ILEDArray; 372*bebae9c0SAndroid Build Coastguard Worker 373*bebae9c0SAndroid Build Coastguard Worker typedef struct { 374*bebae9c0SAndroid Build Coastguard Worker const struct SLMetadataExtractionItf_ *mItf; 375*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 376*bebae9c0SAndroid Build Coastguard Worker SLuint32 mKeySize; 377*bebae9c0SAndroid Build Coastguard Worker const void *mKey; 378*bebae9c0SAndroid Build Coastguard Worker SLuint32 mKeyEncoding; 379*bebae9c0SAndroid Build Coastguard Worker const SLchar *mValueLangCountry; 380*bebae9c0SAndroid Build Coastguard Worker SLuint32 mValueEncoding; 381*bebae9c0SAndroid Build Coastguard Worker SLuint8 mFilterMask; 382*bebae9c0SAndroid Build Coastguard Worker int mKeyFilter; 383*bebae9c0SAndroid Build Coastguard Worker } IMetadataExtraction; 384*bebae9c0SAndroid Build Coastguard Worker 385*bebae9c0SAndroid Build Coastguard Worker typedef struct { 386*bebae9c0SAndroid Build Coastguard Worker const struct SLMetadataTraversalItf_ *mItf; 387*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 388*bebae9c0SAndroid Build Coastguard Worker SLuint32 mIndex; 389*bebae9c0SAndroid Build Coastguard Worker SLuint32 mMode; 390*bebae9c0SAndroid Build Coastguard Worker SLuint32 mCount; 391*bebae9c0SAndroid Build Coastguard Worker SLuint32 mSize; 392*bebae9c0SAndroid Build Coastguard Worker } IMetadataTraversal; 393*bebae9c0SAndroid Build Coastguard Worker 394*bebae9c0SAndroid Build Coastguard Worker typedef struct { 395*bebae9c0SAndroid Build Coastguard Worker const struct SLMIDIMessageItf_ *mItf; 396*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 397*bebae9c0SAndroid Build Coastguard Worker slMetaEventCallback mMetaEventCallback; 398*bebae9c0SAndroid Build Coastguard Worker void *mMetaEventContext; 399*bebae9c0SAndroid Build Coastguard Worker slMIDIMessageCallback mMessageCallback; 400*bebae9c0SAndroid Build Coastguard Worker void *mMessageContext; 401*bebae9c0SAndroid Build Coastguard Worker SLuint8 mMessageTypes; 402*bebae9c0SAndroid Build Coastguard Worker } IMIDIMessage; 403*bebae9c0SAndroid Build Coastguard Worker 404*bebae9c0SAndroid Build Coastguard Worker typedef struct { 405*bebae9c0SAndroid Build Coastguard Worker const struct SLMIDIMuteSoloItf_ *mItf; 406*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 407*bebae9c0SAndroid Build Coastguard Worker SLuint16 mChannelMuteMask; 408*bebae9c0SAndroid Build Coastguard Worker SLuint16 mChannelSoloMask; 409*bebae9c0SAndroid Build Coastguard Worker SLuint32 mTrackMuteMask; 410*bebae9c0SAndroid Build Coastguard Worker SLuint32 mTrackSoloMask; 411*bebae9c0SAndroid Build Coastguard Worker // const 412*bebae9c0SAndroid Build Coastguard Worker SLuint16 mTrackCount; 413*bebae9c0SAndroid Build Coastguard Worker } IMIDIMuteSolo; 414*bebae9c0SAndroid Build Coastguard Worker 415*bebae9c0SAndroid Build Coastguard Worker typedef struct { 416*bebae9c0SAndroid Build Coastguard Worker const struct SLMIDITempoItf_ *mItf; 417*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 418*bebae9c0SAndroid Build Coastguard Worker SLuint32 mTicksPerQuarterNote; 419*bebae9c0SAndroid Build Coastguard Worker SLuint32 mMicrosecondsPerQuarterNote; 420*bebae9c0SAndroid Build Coastguard Worker } IMIDITempo; 421*bebae9c0SAndroid Build Coastguard Worker 422*bebae9c0SAndroid Build Coastguard Worker typedef struct { 423*bebae9c0SAndroid Build Coastguard Worker const struct SLMIDITimeItf_ *mItf; 424*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 425*bebae9c0SAndroid Build Coastguard Worker SLuint32 mDuration; 426*bebae9c0SAndroid Build Coastguard Worker SLuint32 mPosition; 427*bebae9c0SAndroid Build Coastguard Worker SLuint32 mStartTick; 428*bebae9c0SAndroid Build Coastguard Worker SLuint32 mNumTicks; 429*bebae9c0SAndroid Build Coastguard Worker } IMIDITime; 430*bebae9c0SAndroid Build Coastguard Worker 431*bebae9c0SAndroid Build Coastguard Worker typedef struct { 432*bebae9c0SAndroid Build Coastguard Worker const struct SLMuteSoloItf_ *mItf; 433*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 434*bebae9c0SAndroid Build Coastguard Worker // fields that were formerly here are now at CAudioPlayer 435*bebae9c0SAndroid Build Coastguard Worker } IMuteSolo; 436*bebae9c0SAndroid Build Coastguard Worker 437*bebae9c0SAndroid Build Coastguard Worker #define MAX_TRACK 32 // see mActiveMask 438*bebae9c0SAndroid Build Coastguard Worker 439*bebae9c0SAndroid Build Coastguard Worker typedef struct { 440*bebae9c0SAndroid Build Coastguard Worker const struct SLOutputMixItf_ *mItf; 441*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 442*bebae9c0SAndroid Build Coastguard Worker slMixDeviceChangeCallback mCallback; 443*bebae9c0SAndroid Build Coastguard Worker void *mContext; 444*bebae9c0SAndroid Build Coastguard Worker } IOutputMix; 445*bebae9c0SAndroid Build Coastguard Worker 446*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_OUTPUTMIXEXT 447*bebae9c0SAndroid Build Coastguard Worker typedef struct { 448*bebae9c0SAndroid Build Coastguard Worker const struct SLOutputMixExtItf_ *mItf; 449*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 450*bebae9c0SAndroid Build Coastguard Worker unsigned mActiveMask; // 1 bit per active track 451*bebae9c0SAndroid Build Coastguard Worker Track mTracks[MAX_TRACK]; 452*bebae9c0SAndroid Build Coastguard Worker SLboolean mDestroyRequested; ///< Mixer to acknowledge application's call to Object::Destroy 453*bebae9c0SAndroid Build Coastguard Worker } IOutputMixExt; 454*bebae9c0SAndroid Build Coastguard Worker #endif 455*bebae9c0SAndroid Build Coastguard Worker 456*bebae9c0SAndroid Build Coastguard Worker typedef struct { 457*bebae9c0SAndroid Build Coastguard Worker const struct SLPitchItf_ *mItf; 458*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 459*bebae9c0SAndroid Build Coastguard Worker SLpermille mPitch; 460*bebae9c0SAndroid Build Coastguard Worker // const 461*bebae9c0SAndroid Build Coastguard Worker SLpermille mMinPitch; 462*bebae9c0SAndroid Build Coastguard Worker SLpermille mMaxPitch; 463*bebae9c0SAndroid Build Coastguard Worker } IPitch; 464*bebae9c0SAndroid Build Coastguard Worker 465*bebae9c0SAndroid Build Coastguard Worker typedef struct Play_interface { 466*bebae9c0SAndroid Build Coastguard Worker const struct SLPlayItf_ *mItf; 467*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 468*bebae9c0SAndroid Build Coastguard Worker SLuint32 mState; 469*bebae9c0SAndroid Build Coastguard Worker // next 2 fields are read-only to application 470*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mDuration; 471*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mPosition; 472*bebae9c0SAndroid Build Coastguard Worker slPlayCallback mCallback; 473*bebae9c0SAndroid Build Coastguard Worker void *mContext; 474*bebae9c0SAndroid Build Coastguard Worker SLuint32 mEventFlags; 475*bebae9c0SAndroid Build Coastguard Worker // the ISeek trick of using a distinct value doesn't work here because it's readable by app 476*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mMarkerPosition; 477*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mPositionUpdatePeriod; // Zero means do not do position updates (FIXME ~0) 478*bebae9c0SAndroid Build Coastguard Worker #ifdef USE_OUTPUTMIXEXT 479*bebae9c0SAndroid Build Coastguard Worker SLuint32 mFrameUpdatePeriod; // mPositionUpdatePeriod in frame units 480*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mLastSeekPosition; // Last known accurate position, set at Seek 481*bebae9c0SAndroid Build Coastguard Worker SLuint32 mFramesSinceLastSeek; // Frames mixed since last known accurate position 482*bebae9c0SAndroid Build Coastguard Worker SLuint32 mFramesSincePositionUpdate; // Frames mixed since last position update callback 483*bebae9c0SAndroid Build Coastguard Worker #endif 484*bebae9c0SAndroid Build Coastguard Worker } IPlay; 485*bebae9c0SAndroid Build Coastguard Worker 486*bebae9c0SAndroid Build Coastguard Worker typedef struct { 487*bebae9c0SAndroid Build Coastguard Worker const struct SLPlaybackRateItf_ *mItf; 488*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 489*bebae9c0SAndroid Build Coastguard Worker SLpermille mRate; 490*bebae9c0SAndroid Build Coastguard Worker SLuint32 mProperties; 491*bebae9c0SAndroid Build Coastguard Worker // const after initialization 492*bebae9c0SAndroid Build Coastguard Worker SLpermille mMinRate; 493*bebae9c0SAndroid Build Coastguard Worker SLpermille mMaxRate; 494*bebae9c0SAndroid Build Coastguard Worker SLpermille mStepSize; 495*bebae9c0SAndroid Build Coastguard Worker SLuint32 mCapabilities; 496*bebae9c0SAndroid Build Coastguard Worker } IPlaybackRate; 497*bebae9c0SAndroid Build Coastguard Worker 498*bebae9c0SAndroid Build Coastguard Worker typedef struct { 499*bebae9c0SAndroid Build Coastguard Worker const struct SLPrefetchStatusItf_ *mItf; 500*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 501*bebae9c0SAndroid Build Coastguard Worker SLuint32 mStatus; 502*bebae9c0SAndroid Build Coastguard Worker SLpermille mLevel; 503*bebae9c0SAndroid Build Coastguard Worker slPrefetchCallback mCallback; 504*bebae9c0SAndroid Build Coastguard Worker void *mContext; 505*bebae9c0SAndroid Build Coastguard Worker SLuint32 mCallbackEventsMask; 506*bebae9c0SAndroid Build Coastguard Worker SLpermille mFillUpdatePeriod; 507*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 508*bebae9c0SAndroid Build Coastguard Worker /** FIXME used to call PrefetchStatus callback with object unlocked prior to return from API */ 509*bebae9c0SAndroid Build Coastguard Worker slPrefetchCallback mDeferredPrefetchCallback; 510*bebae9c0SAndroid Build Coastguard Worker void *mDeferredPrefetchContext; 511*bebae9c0SAndroid Build Coastguard Worker SLuint32 mDeferredPrefetchEvents; 512*bebae9c0SAndroid Build Coastguard Worker #endif 513*bebae9c0SAndroid Build Coastguard Worker } IPrefetchStatus; 514*bebae9c0SAndroid Build Coastguard Worker 515*bebae9c0SAndroid Build Coastguard Worker typedef struct { 516*bebae9c0SAndroid Build Coastguard Worker const struct SLPresetReverbItf_ *mItf; 517*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 518*bebae9c0SAndroid Build Coastguard Worker SLuint16 mPreset; 519*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 520*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mPresetReverbDescriptor; 521*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mPresetReverbEffect; 522*bebae9c0SAndroid Build Coastguard Worker #endif 523*bebae9c0SAndroid Build Coastguard Worker } IPresetReverb; 524*bebae9c0SAndroid Build Coastguard Worker 525*bebae9c0SAndroid Build Coastguard Worker typedef struct { 526*bebae9c0SAndroid Build Coastguard Worker const struct SLRatePitchItf_ *mItf; 527*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 528*bebae9c0SAndroid Build Coastguard Worker SLpermille mRate; 529*bebae9c0SAndroid Build Coastguard Worker // const 530*bebae9c0SAndroid Build Coastguard Worker SLpermille mMinRate; 531*bebae9c0SAndroid Build Coastguard Worker SLpermille mMaxRate; 532*bebae9c0SAndroid Build Coastguard Worker } IRatePitch; 533*bebae9c0SAndroid Build Coastguard Worker 534*bebae9c0SAndroid Build Coastguard Worker typedef struct { 535*bebae9c0SAndroid Build Coastguard Worker const struct SLRecordItf_ *mItf; 536*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 537*bebae9c0SAndroid Build Coastguard Worker SLuint32 mState; 538*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mDurationLimit; 539*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mPosition; 540*bebae9c0SAndroid Build Coastguard Worker slRecordCallback mCallback; 541*bebae9c0SAndroid Build Coastguard Worker void *mContext; 542*bebae9c0SAndroid Build Coastguard Worker SLuint32 mCallbackEventsMask; 543*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mMarkerPosition; 544*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mPositionUpdatePeriod; 545*bebae9c0SAndroid Build Coastguard Worker } IRecord; 546*bebae9c0SAndroid Build Coastguard Worker 547*bebae9c0SAndroid Build Coastguard Worker typedef struct { 548*bebae9c0SAndroid Build Coastguard Worker const struct SLSeekItf_ *mItf; 549*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 550*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mPos; // mPos != SL_TIME_UNKNOWN means pending seek request 551*bebae9c0SAndroid Build Coastguard Worker SLboolean mLoopEnabled; 552*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mStartPos; 553*bebae9c0SAndroid Build Coastguard Worker SLmillisecond mEndPos; 554*bebae9c0SAndroid Build Coastguard Worker } ISeek; 555*bebae9c0SAndroid Build Coastguard Worker 556*bebae9c0SAndroid Build Coastguard Worker typedef struct { 557*bebae9c0SAndroid Build Coastguard Worker const struct SLThreadSyncItf_ *mItf; 558*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 559*bebae9c0SAndroid Build Coastguard Worker SLboolean mInCriticalSection; 560*bebae9c0SAndroid Build Coastguard Worker SLuint32 mWaiting; // number of threads waiting 561*bebae9c0SAndroid Build Coastguard Worker pthread_t mOwner; 562*bebae9c0SAndroid Build Coastguard Worker } IThreadSync; 563*bebae9c0SAndroid Build Coastguard Worker 564*bebae9c0SAndroid Build Coastguard Worker typedef struct { 565*bebae9c0SAndroid Build Coastguard Worker const struct SLVibraItf_ *mItf; 566*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 567*bebae9c0SAndroid Build Coastguard Worker SLboolean mVibrate; 568*bebae9c0SAndroid Build Coastguard Worker SLmilliHertz mFrequency; 569*bebae9c0SAndroid Build Coastguard Worker SLpermille mIntensity; 570*bebae9c0SAndroid Build Coastguard Worker } IVibra; 571*bebae9c0SAndroid Build Coastguard Worker 572*bebae9c0SAndroid Build Coastguard Worker typedef struct { 573*bebae9c0SAndroid Build Coastguard Worker const struct SLVirtualizerItf_ *mItf; 574*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 575*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 576*bebae9c0SAndroid Build Coastguard Worker SLpermille mStrength; 577*bebae9c0SAndroid Build Coastguard Worker #if defined(ANDROID) 578*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mVirtualizerDescriptor; 579*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mVirtualizerEffect; 580*bebae9c0SAndroid Build Coastguard Worker #endif 581*bebae9c0SAndroid Build Coastguard Worker } IVirtualizer; 582*bebae9c0SAndroid Build Coastguard Worker 583*bebae9c0SAndroid Build Coastguard Worker typedef struct { 584*bebae9c0SAndroid Build Coastguard Worker const struct SLVisualizationItf_ *mItf; 585*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 586*bebae9c0SAndroid Build Coastguard Worker slVisualizationCallback mCallback; 587*bebae9c0SAndroid Build Coastguard Worker void *mContext; 588*bebae9c0SAndroid Build Coastguard Worker SLmilliHertz mRate; 589*bebae9c0SAndroid Build Coastguard Worker } IVisualization; 590*bebae9c0SAndroid Build Coastguard Worker 591*bebae9c0SAndroid Build Coastguard Worker typedef struct /*Volume_interface*/ { 592*bebae9c0SAndroid Build Coastguard Worker const struct SLVolumeItf_ *mItf; 593*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 594*bebae9c0SAndroid Build Coastguard Worker // Values as specified by the application 595*bebae9c0SAndroid Build Coastguard Worker SLmillibel mLevel; 596*bebae9c0SAndroid Build Coastguard Worker SLpermille mStereoPosition; 597*bebae9c0SAndroid Build Coastguard Worker SLuint8 /*SLboolean*/ mMute; 598*bebae9c0SAndroid Build Coastguard Worker SLuint8 /*SLboolean*/ mEnableStereoPosition; 599*bebae9c0SAndroid Build Coastguard Worker } IVolume; 600*bebae9c0SAndroid Build Coastguard Worker 601*bebae9c0SAndroid Build Coastguard Worker typedef struct { 602*bebae9c0SAndroid Build Coastguard Worker const struct XAEngineItf_ *mItf; 603*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 604*bebae9c0SAndroid Build Coastguard Worker } IXAEngine; 605*bebae9c0SAndroid Build Coastguard Worker 606*bebae9c0SAndroid Build Coastguard Worker #define NB_SUPPORTED_STREAMS 1 // only one (video) stream supported in this implementation 607*bebae9c0SAndroid Build Coastguard Worker typedef struct { 608*bebae9c0SAndroid Build Coastguard Worker const struct XAStreamInformationItf_ *mItf; 609*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 610*bebae9c0SAndroid Build Coastguard Worker xaStreamEventChangeCallback mCallback; 611*bebae9c0SAndroid Build Coastguard Worker void *mContext; 612*bebae9c0SAndroid Build Coastguard Worker XAboolean mActiveStreams[NB_SUPPORTED_STREAMS]; 613*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 614*bebae9c0SAndroid Build Coastguard Worker android::Vector<StreamInfo> mStreamInfoTable; 615*bebae9c0SAndroid Build Coastguard Worker #endif 616*bebae9c0SAndroid Build Coastguard Worker } IStreamInformation; 617*bebae9c0SAndroid Build Coastguard Worker 618*bebae9c0SAndroid Build Coastguard Worker typedef struct { 619*bebae9c0SAndroid Build Coastguard Worker const struct XAVideoDecoderCapabilitiesItf_ *mItf; 620*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 621*bebae9c0SAndroid Build Coastguard Worker } IVideoDecoderCapabilities; 622*bebae9c0SAndroid Build Coastguard Worker 623*bebae9c0SAndroid Build Coastguard Worker /* Class structures */ 624*bebae9c0SAndroid Build Coastguard Worker 625*bebae9c0SAndroid Build Coastguard Worker /*typedef*/ struct C3DGroup_struct { 626*bebae9c0SAndroid Build Coastguard Worker IObject mObject; 627*bebae9c0SAndroid Build Coastguard Worker #define INTERFACES_3DGroup 6 // see MPH_to_3DGroup in MPH_to.c for list of interfaces 628*bebae9c0SAndroid Build Coastguard Worker SLuint8 mInterfaceStates2[INTERFACES_3DGroup - INTERFACES_Default]; 629*bebae9c0SAndroid Build Coastguard Worker IDynamicInterfaceManagement mDynamicInterfaceManagement; 630*bebae9c0SAndroid Build Coastguard Worker I3DLocation m3DLocation; 631*bebae9c0SAndroid Build Coastguard Worker I3DDoppler m3DDoppler; 632*bebae9c0SAndroid Build Coastguard Worker I3DSource m3DSource; 633*bebae9c0SAndroid Build Coastguard Worker I3DMacroscopic m3DMacroscopic; 634*bebae9c0SAndroid Build Coastguard Worker // remaining are per-instance private fields not associated with an interface 635*bebae9c0SAndroid Build Coastguard Worker unsigned mMemberMask; // set of member objects 636*bebae9c0SAndroid Build Coastguard Worker } /*C3DGroup*/; 637*bebae9c0SAndroid Build Coastguard Worker 638*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID 639*bebae9c0SAndroid Build Coastguard Worker 640*bebae9c0SAndroid Build Coastguard Worker // FIXME Move these into the I... section above 641*bebae9c0SAndroid Build Coastguard Worker 642*bebae9c0SAndroid Build Coastguard Worker typedef struct { 643*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidEffectItf_ *mItf; 644*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 645*bebae9c0SAndroid Build Coastguard Worker android::KeyedVector<SLuint32, android::sp<android::AudioEffect> > *mEffects; 646*bebae9c0SAndroid Build Coastguard Worker } IAndroidEffect; 647*bebae9c0SAndroid Build Coastguard Worker 648*bebae9c0SAndroid Build Coastguard Worker typedef struct { 649*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidEffectCapabilitiesItf_ *mItf; 650*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 651*bebae9c0SAndroid Build Coastguard Worker SLuint32 mNumFx; 652*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t* mFxDescriptors; 653*bebae9c0SAndroid Build Coastguard Worker } IAndroidEffectCapabilities; 654*bebae9c0SAndroid Build Coastguard Worker 655*bebae9c0SAndroid Build Coastguard Worker typedef struct { 656*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidEffectSendItf_ *mItf; 657*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 658*bebae9c0SAndroid Build Coastguard Worker // only one send per interface for now (1 bus) 659*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 660*bebae9c0SAndroid Build Coastguard Worker SLmillibel mSendLevel; //android::KeyedVector<SLuint32, SLmillibel> mSendLevels; 661*bebae9c0SAndroid Build Coastguard Worker } IAndroidEffectSend; 662*bebae9c0SAndroid Build Coastguard Worker 663*bebae9c0SAndroid Build Coastguard Worker typedef struct { 664*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidConfigurationItf_ *mItf; 665*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 666*bebae9c0SAndroid Build Coastguard Worker // only 1 each. When we support other Proxy types, we will need to get more clever about this. 667*bebae9c0SAndroid Build Coastguard Worker jobject mRoutingProxy; 668*bebae9c0SAndroid Build Coastguard Worker } IAndroidConfiguration; 669*bebae9c0SAndroid Build Coastguard Worker 670*bebae9c0SAndroid Build Coastguard Worker typedef struct { 671*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidBufferQueueItf_ *mItf; 672*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 673*bebae9c0SAndroid Build Coastguard Worker SLAndroidBufferQueueState mState; 674*bebae9c0SAndroid Build Coastguard Worker slAndroidBufferQueueCallback mCallback; 675*bebae9c0SAndroid Build Coastguard Worker SLuint32 mCallbackEventsMask; 676*bebae9c0SAndroid Build Coastguard Worker void *mContext; 677*bebae9c0SAndroid Build Coastguard Worker SLuint16 mNumBuffers; 678*bebae9c0SAndroid Build Coastguard Worker AndroidBufferType_type mBufferType; 679*bebae9c0SAndroid Build Coastguard Worker AdvancedBufferHeader *mBufferArray; 680*bebae9c0SAndroid Build Coastguard Worker AdvancedBufferHeader *mFront, *mRear; 681*bebae9c0SAndroid Build Coastguard Worker bool mEOS; // whether EOS has been enqueued; never reset 682*bebae9c0SAndroid Build Coastguard Worker } IAndroidBufferQueue; 683*bebae9c0SAndroid Build Coastguard Worker 684*bebae9c0SAndroid Build Coastguard Worker typedef struct { 685*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidAcousticEchoCancellationItf_ *mItf; 686*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 687*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 688*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mAECDescriptor; 689*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mAECEffect; 690*bebae9c0SAndroid Build Coastguard Worker } IAndroidAcousticEchoCancellation; 691*bebae9c0SAndroid Build Coastguard Worker 692*bebae9c0SAndroid Build Coastguard Worker typedef struct { 693*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidAutomaticGainControlItf_ *mItf; 694*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 695*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 696*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mAGCDescriptor; 697*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mAGCEffect; 698*bebae9c0SAndroid Build Coastguard Worker } IAndroidAutomaticGainControl; 699*bebae9c0SAndroid Build Coastguard Worker 700*bebae9c0SAndroid Build Coastguard Worker typedef struct { 701*bebae9c0SAndroid Build Coastguard Worker const struct SLAndroidNoiseSuppressionItf_ *mItf; 702*bebae9c0SAndroid Build Coastguard Worker IObject *mThis; 703*bebae9c0SAndroid Build Coastguard Worker SLboolean mEnabled; 704*bebae9c0SAndroid Build Coastguard Worker effect_descriptor_t mNSDescriptor; 705*bebae9c0SAndroid Build Coastguard Worker android::sp<android::AudioEffect> mNSEffect; 706*bebae9c0SAndroid Build Coastguard Worker } IAndroidNoiseSuppression; 707*bebae9c0SAndroid Build Coastguard Worker 708*bebae9c0SAndroid Build Coastguard Worker #endif 709