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