sles_allinclusive.h revision 72a04d8e9e059dad969d166a6a70491fe1e65970
1773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* 2773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 3773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * 4773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * you may not use this file except in compliance with the License. 6773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * You may obtain a copy of the License at 7773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * 8773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * 10773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * See the License for the specific language governing permissions and 14773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * limitations under the License. 15773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi */ 16773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 17773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "OpenSLES.h" 18773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <stddef.h> // offsetof 19773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <stdlib.h> // malloc 20773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <string.h> // memcmp 21773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <stdio.h> // debugging 22773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <assert.h> // debugging 23773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <pthread.h> 2432918086b694fc383c8c2d590ac45492801676f7Glenn Kasten#include <unistd.h> // usleep 25773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 26773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "MPH.h" 27773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "MPH_to.h" 28773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 29773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 30773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <sndfile.h> 31773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 32773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 33773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SDL 34773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <SDL/SDL_audio.h> 35773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SDL 36773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 37773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 38773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <unistd.h> 39773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioSystem.h" 40773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioTrack.h" 41773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/mediaplayer.h" 42773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 43773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 44773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 45773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "OutputMixExt.h" 46773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 47773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 48773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Hook functions 49773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 50773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef void (*VoidHook)(void *self); 51773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef SLresult (*StatusHook)(void *self); 52773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 53773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Describes how an interface is related to a given class 54773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 55773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_IMPLICIT 0 56773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT 1 57773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL 2 58773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC 3 59773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_GAME INTERFACE_DYNAMIC 60773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC INTERFACE_DYNAMIC 61773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC_GAME INTERFACE_DYNAMIC 62773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT_GAME INTERFACE_EXPLICIT 63773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME INTERFACE_OPTIONAL 64773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME_MUSIC INTERFACE_OPTIONAL 65773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_MUSIC_GAME INTERFACE_OPTIONAL 66773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL_DYNAMIC INTERFACE_DYNAMIC 67773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_PHONE_GAME INTERFACE_OPTIONAL 68773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_TBD INTERFACE_IMPLICIT 69773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 70773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Maps an interface ID to its offset within the class that exposes it 71773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 72773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct iid_vtable { 73773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mMPH; 74773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mInterface; // relationship 75773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*size_t*/ unsigned short mOffset; 76773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 77773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 78773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Per-class const data shared by all instances of the same class 79773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 8072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 81773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // needed by all classes (class class, the superclass of all classes) 82773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct iid_vtable *mInterfaces; 83773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mInterfaceCount; 84773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const signed char *mMPH_to_index; 85773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME not yet used 86773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi //const char * const mName; 87773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi size_t mSize; 88773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mObjectID; 89773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi StatusHook mRealize; 90773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi StatusHook mResume; 91773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi VoidHook mDestroy; 92773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // append per-class data here 9372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ClassTable; 94773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 95773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 96773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 97773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Track describes each input to OutputMixer 98773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME not for Android 99773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 100773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Track { 101773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLDataFormat_PCM *mDfPcm; 102773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferQueue_interface *mBufferQueue; 103773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Play_interface *mPlay; // mixer examines this track if non-NULL 104773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mReader; // pointer to next frame in BufferHeader.mBuffer 105773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mAvail; // number of available bytes 106773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 107773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 108773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 109773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 110773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// BufferHeader describes each element of a BufferQueue, other than the data 111773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 112773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct BufferHeader { 113773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mBuffer; 114773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 115773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 116773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 117773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 118773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 119773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// stereo is a frame consisting of a pair of 16-bit PCM samples 120773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 121773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef struct { 122773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short left; 123773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short right; 124773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi} stereo; 125773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 126773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 127773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 128773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 129773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 130773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct SndFile { 131773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // save URI also? 132773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLchar *mPathname; 133773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SNDFILE *mSNDFILE; 134773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // These are used when Enqueue returns SL_RESULT_BUFFER_INSUFFICIENT 135773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mRetryBuffer; 136773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mRetrySize; 137773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mIs0; // which buffer to use next 138773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME magic numbers 139773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer0[512]; 140773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer1[512]; 141773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 142773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 143773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 144773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 145773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 146773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Interface structures */ 147773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 14872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct Object_interface { 14972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const struct SLObjectItf_ *mItf; 15072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME probably not needed for an Object, as it is always first, 15172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // but look for lingering code that assumes it is here before deleting 152773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 15372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const ClassTable *mClass; 15472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten volatile SLuint32 mState; 15572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten slObjectCallback mCallback; 15672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten void *mContext; 15772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten unsigned mExposedMask; // exposed interfaces 15872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten unsigned mLossOfControlMask; // interfaces with loss of control enabled 15972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLint32 mPriority; 16072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLboolean mPreemptable; 16172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_mutex_t mMutex; 16272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_cond_t mCond; 16372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME also an object ID for RPC 16472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME and a human-readable name for debugging 16572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IObject; 16672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 16772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 16872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const struct SL3DCommitItf_ *mItf; 16972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 170773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mDeferred; 17132918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLuint32 mGeneration; // incremented each master clock cycle 17272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DCommit; 173773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 1747754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten// FIXME move 1757754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kastenenum CartesianSphericalActive { 1767754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_COMPUTED_SPHERICAL_SET, 1777754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_REQUESTED_SPHERICAL_SET, 1787754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_UNKNOWN_SPHERICAL_SET, 1797754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_COMPUTED, // not in 1.0.1 1807754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_REQUESTED, // not in 1.0.1 1817754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_UNKNOWN 1827754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten}; 1837754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten 18472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 185773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DDopplerItf_ *mItf; 18672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 1877754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // The API allows client to specify either Cartesian and spherical velocities. 1887754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // But an implementation will likely prefer one or the other. So for 1897754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // maximum portablity, we maintain both units and an indication of which 1907754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // unit was set most recently. In addition, we keep a flag saying whether 1917754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // the other unit has been derived yet. It can take significant time 1927754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // to compute the other unit, so this may be deferred to another thread. 1937754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // For this reason we also keep an indication of whether the secondary 1947754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // has been computed yet, and its accuracy. 1957754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Though only one unit is primary at a time, a union is inappropriate: 1967754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // the application might read in both units (not in 1.0.1), 1977754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // and due to multi-threading concerns. 1987754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mVelocityCartesian; 19932918086b694fc383c8c2d590ac45492801676f7Glenn Kasten struct { 20032918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mAzimuth; 20132918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mElevation; 20232918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mSpeed; 2037754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mVelocitySpherical; 2047754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum CartesianSphericalActive mVelocityActive; 205773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mDopplerFactor; 20672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DDoppler; 207773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 20872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 209773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DGroupingItf_ *mItf; 21072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 211773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLObjectItf mGroup; 21272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DGrouping; 213773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 2147754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten// FIXME move 2157754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kastenenum AnglesVectorsActive { 2167754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_COMPUTED_VECTORS_SET, // not in 1.0.1 2177754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_REQUESTED_VECTORS_SET, // not in 1.0.1 2187754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_UNKNOWN_VECTORS_SET, 2197754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_COMPUTED, 2207754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_REQUESTED, 2217754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_UNKNOWN 2227754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten}; 2237754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten 22472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 225773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DLocationItf_ *mItf; 22672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 2277754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mLocationCartesian; 2287754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2297754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mAzimuth; 2307754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mElevation; 2317754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillimeter mDistance; 2327754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mLocationSpherical; 2337754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum CartesianSphericalActive mLocationActive; 2347754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2357754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mHeading; 2367754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mPitch; 2377754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mRoll; 2387754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mOrientationAngles; 2397754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2407754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mFront; 2417754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAbove; 2427754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mUp; 2437754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mOrientationVectors; 2447754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum AnglesVectorsActive mOrientationActive; 2457754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Rotations can be slow, so are deferred. 2467754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mTheta; 2477754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAxis; 2487754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLboolean mRotatePending; 24972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DLocation; 250773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 25172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 252773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DMacroscopicItf_ *mItf; 25372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 254773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 255773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mWidth; 256773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeight; 257773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mDepth; 258773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mSize; 259773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 260773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeading; 261773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mPitch; 262773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mRoll; 263773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationAngles; 264773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 265773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mFront; 266773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mUp; 267773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationVectors; 2687754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum AnglesVectorsActive mOrientationActive; 2697754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // FIXME no longer needed? was for optimization 2707754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // SLuint32 mGeneration; 2717754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Rotations can be slow, so are deferred. 2727754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mTheta; 2737754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAxis; 2747754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLboolean mRotatePending; 27572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DMacroscopic; 276773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 27772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 278773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DSourceItf_ *mItf; 27972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 280773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mHeadRelative; 281773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mRolloffMaxDistanceMute; 282773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMaxDistance; 283773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMinDistance; 2847754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mConeInnerAngle; 2857754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mConeOuterAngle; 286773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mConeOuterLevel; 287773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRolloffFactor; 288773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRoomRolloffFactor; 289773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mDistanceModel; 29072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DSource; 291773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 29272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 293773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioDecoderCapabilitiesItf_ *mItf; 29472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 29572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioDecoderCapabilities; 296773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 29772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 298773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderItf_ *mItf; 29972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 300773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLAudioEncoderSettings mSettings; 30172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioEncoder; 302773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 30372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 304773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderCapabilitiesItf_ *mItf; 30572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 30672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioEncoderCapabilities; 307773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 30872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 309773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioIODeviceCapabilitiesItf_ *mItf; 31072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 3117754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slAvailableAudioInputsChangedCallback mAvailableAudioInputsChangedCallback; 3127754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mAvailableAudioInputsChangedContext; 3137754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slAvailableAudioOutputsChangedCallback mAvailableAudioOutputsChangedCallback; 3147754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mAvailableAudioOutputsChangedContext; 3157754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slDefaultDeviceIDMapChangedCallback mDefaultDeviceIDMapChangedCallback; 3167754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mDefaultDeviceIDMapChangedContext; 31772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioIODeviceCapabilities; 318773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 31972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 320773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBassBoostItf_ *mItf; 32172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 322773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 323773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 32472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IBassBoost; 325773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 32672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct BufferQueue_interface { 327773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBufferQueueItf_ *mItf; 32872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 329773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLBufferQueueState mState; 330773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slBufferQueueCallback mCallback; 331773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 332773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumBuffers; 333773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mArray; 334773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mFront, *mRear; 335773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // saves a malloc in the typical case 336773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define BUFFER_HEADER_TYPICAL 4 337773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader mTypical[BUFFER_HEADER_TYPICAL+1]; 33872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IBufferQueue; 339773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 34072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 341773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDeviceVolumeItf_ *mItf; 34272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 343773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLint32 mVolume[2]; // FIXME Hard-coded for default in/out 34472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDeviceVolume; 345773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 34672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 347773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicInterfaceManagementItf_ *mItf; 34872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 349773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mAddedMask; // added interfaces, a subset of exposed interfaces 350773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slDynamicInterfaceManagementCallback mCallback; 351773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 35272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDynamicInterfaceManagement; 353773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 35472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 355773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicSourceItf_ *mItf; 35672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 357773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLDataSource *mDataSource; 35872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDynamicSource; 359773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 360773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME Move this elsewhere 361773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 362773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_ENVIRONMENTALREVERB 0 363773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_PRESETREVERB 1 364773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_MAX 2 365773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 366773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#if 0 367773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistatic const unsigned char AUX_to_MPH[AUX_MAX] = { 368773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_ENVIRONMENTALREVERB, 369773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_PRESETREVERB 370773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 371773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 372773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 373773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// private 374773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 375773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EnableLevel { 376773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnable; 377773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mSendLevel; 378773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 379773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 38072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 381773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEffectSendItf_ *mItf; 38272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 383773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct OutputMix_class *mOutputMix; 384773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mDirectLevel; 385773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnableLevel mEnableLevels[AUX_MAX]; 38672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEffectSend; 38772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 38872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten// private 389773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 39072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 391773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineItf_ *mItf; 39272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 393773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLossOfControlGlobal; 394773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME Per-class non-const data such as vector of created objects. 395773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Each engine is its own universe. 39672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLuint32 mInstanceCount; 397773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Vector<Type> instances; 39872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME set of objects 39972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten#define INSTANCE_MAX 32 // FIXME no magic numbers 40072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mInstances[INSTANCE_MAX]; 40172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEngine; 402773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 40372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 404773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineCapabilitiesItf_ *mItf; 40572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 406773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mThreadSafe; 40772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEngineCapabilities; 408773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 40972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 410773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEnvironmentalReverbItf_ *mItf; 41172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 412773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLEnvironmentalReverbSettings mProperties; 41372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEnvironmentalReverb; 414773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 415773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME move 416773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EqualizerBand { 417773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mMin; 418773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mMax; 419773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mCenter; 420773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mLevel; 421773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 422773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 42372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 424773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEqualizerItf_ *mItf; 42572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 426773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 427773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel *mLevels; 428773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 429773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 430773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumPresets; 431773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumBands; 432773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mMin; 433773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mMax; 434773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EqualizerBand *mBands; 435773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar * const *mPresetNames; 436773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mBandLevelRangeMin; 437773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mBandLevelRangeMax; 43872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEqualizer; 439773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 44072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 441773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLLEDArrayItf_ *mItf; 44272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 443773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mLightMask; 444773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLHSL *mColor; 445773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 446773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mCount; 44772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ILEDArray; 448773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 44972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 450773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataExtractionItf_ *mItf; 45172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 452773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeySize; 453773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mKey; 454773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeyEncoding; 455773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar *mValueLangCountry; 456773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mValueEncoding; 457773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mFilterMask; 458773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*FIXME*/ int mKeyFilter; 45972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMetadataExtraction; 460773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 46172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 462773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataTraversalItf_ *mItf; 46372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 464773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mIndex; 465773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMode; 466773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCount; 467773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 46872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMetadataTraversal; 469773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 47072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 471773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMessageItf_ *mItf; 47272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 473773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMetaEventCallback mMetaEventCallback; 474773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMetaEventContext; 475773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMIDIMessageCallback mMessageCallback; 476773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMessageContext; 477773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi int /*TBD*/ mMessageTypes; 47872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDIMessage; 479773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 48072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 481773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMuteSoloItf_ *mItf; 48272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 483773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelMuteMask; 484773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelSoloMask; 485773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackMuteMask; 486773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackSoloMask; 487773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const ? 488773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mTrackCount; 48972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDIMuteSolo; 490773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 49172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 492773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITempoItf_ *mItf; 49372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 494773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTicksPerQuarterNote; 495773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMicrosecondsPerQuarterNote; 49672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDITempo; 497773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 49872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 499773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITimeItf_ *mItf; 50072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 501773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDuration; 502773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mPosition; 503773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStartTick; 504773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumTicks; 50572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDITime; 506773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 50772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 508773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMuteSoloItf_ *mItf; 50972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 510773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMuteMask; 511773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSoloMask; 512773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 513773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mNumChannels; 51472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMuteSolo; 515773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 51672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 517773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixItf_ *mItf; 51872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 5197754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slMixDeviceChangeCallback mCallback; 5207754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mContext; 521773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 522773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mActiveMask; // 1 bit per active track 523773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Track mTracks[32]; 524773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 52572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IOutputMix; 526773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 527773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 52872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 529773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixExtItf_ *mItf; 53072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 53172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IOutputMixExt; 532773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 533773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 53472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 535773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPitchItf_ *mItf; 53672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 537773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mPitch; 538773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 539773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinPitch; 540773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxPitch; 54172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPitch; 542773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 54372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct Play_interface { 544773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlayItf_ *mItf; 54572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 546773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLuint32 mState; 547773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDuration; 548773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 549773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // unsigned mPositionSamples; // position in sample units 550773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPlayCallback mCallback; 551773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 552773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mEventFlags; 553773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 554773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 55572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPlay; 556773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 55772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 558773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlaybackRateItf_ *mItf; 55972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 560773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 561773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mPropertyConstraints; 562773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mProperties; 563773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 564773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 565773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStepSize; 566773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCapabilities; 56772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPlaybackRate; 568773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 56972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 570773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPrefetchStatusItf_ *mItf; 57172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 572773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStatus; 573773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mLevel; 574773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPrefetchCallback mCallback; 575773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 576773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 577773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mFillUpdatePeriod; 57872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPrefetchStatus; 579773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 58072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 581773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPresetReverbItf_ *mItf; 58272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 583773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 58472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPresetReverb; 585773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 58672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 587773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRatePitchItf_ *mItf; 58872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 589773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 590773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 591773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 59272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IRatePitch; 593773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 59472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 595773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRecordItf_ *mItf; 59672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 597773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mState; 598773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDurationLimit; 599773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 600773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slRecordCallback mCallback; 601773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 602773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 603773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 604773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 60572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IRecord; 606773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 60772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 608773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLSeekItf_ *mItf; 60972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 610773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPos; 611773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLoopEnabled; 612773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mStartPos; 613773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mEndPos; 61472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ISeek; 615773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 61672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 617773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLThreadSyncItf_ *mItf; 61872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 619773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mInCriticalSection; 620773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mWaiting; 621773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_t mOwner; 62272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IThreadSync; 623773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 62472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 625773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVibraItf_ *mItf; 62672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 627773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mVibrate; 628773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mFrequency; 629773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mIntensity; 63072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVibra; 631773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 63272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 633773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVirtualizerItf_ *mItf; 63472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 635773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 636773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 63772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVirtualizer; 638773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 63972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 640773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVisualizationItf_ *mItf; 64172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 642773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slVisualizationCallback mCallback; 643773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 644773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mRate; 64572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVisualization; 646773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 64772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 648773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVolumeItf_ *mItf; 64972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 650773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mLevel; 651773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mMute; 652773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnableStereoPosition; 653773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStereoPosition; 65472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVolume; 655773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 656773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Class structures */ 657773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 65872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 65972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 66072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 66172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 66272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 66372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 66472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 66572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME set of objects 66672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} C3DGroup; 667773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 668773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 669773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* 670773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Used to define the mapping from an OpenSL ES audio player to an Android 671773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * media framework object 672773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi */ 673773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivienum AndroidObject_type { 674c116ab2a033ee7dc78cfd458defe38d4528383a8Jean-Michel Trivi INVALID_TYPE =-1, 675773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MEDIAPLAYER = 0, 676773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PUSH = 1, 677773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PULL = 2, 678773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi NUM_AUDIOPLAYER_MAP_TYPES 679773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 680773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 681773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 68272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 68372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 68472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 68572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlay mPlay; 68672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 68772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DGrouping m3DGrouping; 68872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 68972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 69072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBufferQueue mBufferQueue; 69172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEffectSend mEffectSend; 69272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMuteSolo mMuteSolo; 69372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 69472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 69572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPrefetchStatus mPrefetchStatus; 69672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IRatePitch mRatePitch; 69772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ISeek mSeek; 69872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 699773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 70072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 70172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 70272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 70372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 70472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 70572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPitch mPitch; 70672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 70772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlaybackRate mPlaybackRate; 70872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 70972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 710773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // rest of fields are not related to the interfaces 711773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 712773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct SndFile mSndFile; 713773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 714773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 715773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi enum AndroidObject_type mAndroidObjType; 716773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi union { 717773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::AudioTrack *mAudioTrack; 718773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::MediaPlayer *mMediaPlayer; 719773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi }; 720773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_t mThread; 721773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 72272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CAudioPlayer; 723773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 72472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 725773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 72672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 72772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 72872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IRecord mRecord; 72972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioEncoder mAudioEncoder; 730773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 73172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 73272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 73372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 73472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 73572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 73672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CAudioRecorder; 737773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 73872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 739773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated implicit interfaces 74072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 74172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 74272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEngine mEngine; 74372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEngineCapabilities mEngineCapabilities; 74472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IThreadSync mThreadSync; 745773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated explicit interfaces 74672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 74772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioDecoderCapabilities mAudioDecoderCapabilities; 74872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioEncoderCapabilities mAudioEncoderCapabilities; 74972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DCommit m3DCommit; 750773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 75172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDeviceVolume mDeviceVolume; 75272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_t mFrameThread; 75372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CEngine; 754773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 75572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 756773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 75772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 75872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 75972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ILEDArray mLEDArray; 760773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 76172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CLEDDevice; 762773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 76372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 764773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 76572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 76672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 76772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 76872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 76972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CListener; 770773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 77172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 772773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 77372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 77472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 77572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 77672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 77772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 77872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CMetadataExtractor; 779773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 78072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 781773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 78272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 78372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 78472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlay mPlay; 78572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 78672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DGrouping m3DGrouping; 78772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 78872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 78972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBufferQueue mBufferQueue; 79072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEffectSend mEffectSend; 79172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMuteSolo mMuteSolo; 79272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 79372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 79472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDIMessage mMIDIMessage; 79572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDITime mMIDITime; 79672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDITempo mMIDITempo; 79772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDIMuteSolo mMIDIMuteSolo; 79872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPrefetchStatus mPrefetchStatus; 79972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ISeek mSeek; 80072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 801773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 80272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 80372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 80472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 80572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 80672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 80772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPitch mPitch; 80872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 80972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlaybackRate mPlaybackRate; 81072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 81172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 81272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CMidiPlayer; 81372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 81472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct OutputMix_class { 815773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 81672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 81772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 81872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IOutputMix mOutputMix; 819773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 82072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IOutputMixExt mOutputMixExt; 821773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 82272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 82372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 82472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 82572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 82672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 827773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 82872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 82972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 83072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} COutputMix; 831773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 83272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 833773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 83472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 83572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 83672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVibra mVibra; 837773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // 838773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 83972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CVibraDevice; 840