xref: /aosp_15_r20/frameworks/wilhelm/src/itfstruct.h (revision bebae9c0e76121f8312ccb50385c080b3a0b023c)
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