sles_allinclusive.h revision 3d146e0a31f5ee2a7d9807c4e99994084fdd3283
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" 28a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include "devices.h" 29773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 30773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 31773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <sndfile.h> 32773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 33773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 34773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SDL 35773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <SDL/SDL_audio.h> 36773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SDL 37773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 38f517e6305d986d73ceae7a7eeb330ba01af375eeGlenn Kasten#if defined(USE_ANDROID) 39773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioSystem.h" 40773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioTrack.h" 41773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/mediaplayer.h" 42b6e3c1093dfbdec29e620e85d0d81cc39395a45fJean-Michel Trivi#define ANDROID_SL_MILLIBEL_MAX 0 43773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 44773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 45773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 46773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "OutputMixExt.h" 47773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 48773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 49773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Hook functions 50773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 51773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef void (*VoidHook)(void *self); 52773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef SLresult (*StatusHook)(void *self); 533d146e0a31f5ee2a7d9807c4e99994084fdd3283Jean-Michel Trivitypedef SLresult (*AsyncHook)(void *self, SLboolean async); 54b90cb3de9b67383be4e077d807464044f6f18f7aJean-Michel Trivi 55773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 56773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Describes how an interface is related to a given class 57773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 58773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_IMPLICIT 0 59773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT 1 60773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL 2 61773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC 3 62773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_GAME INTERFACE_DYNAMIC 63773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC INTERFACE_DYNAMIC 64773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC_GAME INTERFACE_DYNAMIC 65773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT_GAME INTERFACE_EXPLICIT 66773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME INTERFACE_OPTIONAL 67773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME_MUSIC INTERFACE_OPTIONAL 68773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_MUSIC_GAME INTERFACE_OPTIONAL 69773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL_DYNAMIC INTERFACE_DYNAMIC 70773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_PHONE_GAME INTERFACE_OPTIONAL 71773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_TBD INTERFACE_IMPLICIT 72773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 73773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Maps an interface ID to its offset within the class that exposes it 74773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 75773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct iid_vtable { 76773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mMPH; 77773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mInterface; // relationship 78773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*size_t*/ unsigned short mOffset; 79773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 80773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 81773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Per-class const data shared by all instances of the same class 82773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 8372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 84773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // needed by all classes (class class, the superclass of all classes) 85773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct iid_vtable *mInterfaces; 86773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mInterfaceCount; 87773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const signed char *mMPH_to_index; 88773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME not yet used 8976dde6cd71bdb39459f38218e8aa2b7c19e790dbGlenn Kasten const char * const mName; 90773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi size_t mSize; 91773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mObjectID; 923d146e0a31f5ee2a7d9807c4e99994084fdd3283Jean-Michel Trivi AsyncHook mRealize; 933d146e0a31f5ee2a7d9807c4e99994084fdd3283Jean-Michel Trivi AsyncHook mResume; 94773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi VoidHook mDestroy; 95773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // append per-class data here 9672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ClassTable; 97773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 98773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 99773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 100773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Track describes each input to OutputMixer 101773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME not for Android 102773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 103773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Track { 104773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLDataFormat_PCM *mDfPcm; 105773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferQueue_interface *mBufferQueue; 106773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Play_interface *mPlay; // mixer examines this track if non-NULL 107773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mReader; // pointer to next frame in BufferHeader.mBuffer 108773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mAvail; // number of available bytes 109773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 110773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 111773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 112773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 113773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// BufferHeader describes each element of a BufferQueue, other than the data 114773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 115773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct BufferHeader { 116773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mBuffer; 117773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 118773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 119773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 120773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 121773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 122773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// stereo is a frame consisting of a pair of 16-bit PCM samples 123773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 124773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef struct { 125773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short left; 126773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short right; 127773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi} stereo; 128773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 129773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 130773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 131773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 132773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 133773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct SndFile { 134773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // save URI also? 135773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLchar *mPathname; 136773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SNDFILE *mSNDFILE; 137773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // These are used when Enqueue returns SL_RESULT_BUFFER_INSUFFICIENT 138773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mRetryBuffer; 139773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mRetrySize; 140773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mIs0; // which buffer to use next 141773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME magic numbers 142773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer0[512]; 143773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer1[512]; 144773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 145773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 146773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 147773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 148a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#ifdef __cplusplus 149a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#define this this_ 150a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#endif 151773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 152773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Interface structures */ 153773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 15472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct Object_interface { 15572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const struct SLObjectItf_ *mItf; 15672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME probably not needed for an Object, as it is always first, 15772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // but look for lingering code that assumes it is here before deleting 158773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 15972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const ClassTable *mClass; 16072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten volatile SLuint32 mState; 16172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten slObjectCallback mCallback; 16272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten void *mContext; 16372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten unsigned mExposedMask; // exposed interfaces 16472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten unsigned mLossOfControlMask; // interfaces with loss of control enabled 16572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLint32 mPriority; 16672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLboolean mPreemptable; 16772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_mutex_t mMutex; 16872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_cond_t mCond; 16972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME also an object ID for RPC 17072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME and a human-readable name for debugging 17172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IObject; 17272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 173a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten#include "locks.h" 174a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 17572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 17672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten const struct SL3DCommitItf_ *mItf; 17772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 178773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mDeferred; 17932918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLuint32 mGeneration; // incremented each master clock cycle 18072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DCommit; 181773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 1827754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten// FIXME move 1837754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kastenenum CartesianSphericalActive { 1847754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_COMPUTED_SPHERICAL_SET, 1857754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_REQUESTED_SPHERICAL_SET, 1867754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_UNKNOWN_SPHERICAL_SET, 1877754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_COMPUTED, // not in 1.0.1 1887754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_REQUESTED, // not in 1.0.1 1897754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten CARTESIAN_SET_SPHERICAL_UNKNOWN 1907754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten}; 1917754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten 19272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 193773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DDopplerItf_ *mItf; 19472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 1957754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // The API allows client to specify either Cartesian and spherical velocities. 1967754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // But an implementation will likely prefer one or the other. So for 1977754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // maximum portablity, we maintain both units and an indication of which 1987754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // unit was set most recently. In addition, we keep a flag saying whether 1997754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // the other unit has been derived yet. It can take significant time 2007754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // to compute the other unit, so this may be deferred to another thread. 2017754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // For this reason we also keep an indication of whether the secondary 2027754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // has been computed yet, and its accuracy. 2037754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Though only one unit is primary at a time, a union is inappropriate: 2047754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // the application might read in both units (not in 1.0.1), 2057754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // and due to multi-threading concerns. 2067754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mVelocityCartesian; 20732918086b694fc383c8c2d590ac45492801676f7Glenn Kasten struct { 20832918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mAzimuth; 20932918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mElevation; 21032918086b694fc383c8c2d590ac45492801676f7Glenn Kasten SLmillidegree mSpeed; 2117754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mVelocitySpherical; 2127754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum CartesianSphericalActive mVelocityActive; 213773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mDopplerFactor; 21472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DDoppler; 215773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 21672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 217773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DGroupingItf_ *mItf; 21872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 219773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLObjectItf mGroup; 2200b167267bda99b68346045ccab14e810121d5de4Glenn Kasten // FIXME link to group's set 22172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DGrouping; 222773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 2237754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten// FIXME move 2247754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kastenenum AnglesVectorsActive { 2257754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_COMPUTED_VECTORS_SET, // not in 1.0.1 2267754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_REQUESTED_VECTORS_SET, // not in 1.0.1 2277754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_UNKNOWN_VECTORS_SET, 2287754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_COMPUTED, 2297754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_REQUESTED, 2307754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten ANGLES_SET_VECTORS_UNKNOWN 2317754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten}; 2327754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten 23372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 234773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DLocationItf_ *mItf; 23572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 2367754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mLocationCartesian; 2377754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2387754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mAzimuth; 2397754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mElevation; 2407754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillimeter mDistance; 2417754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mLocationSpherical; 2427754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum CartesianSphericalActive mLocationActive; 2437754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2447754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mHeading; 2457754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mPitch; 2467754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mRoll; 2477754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mOrientationAngles; 2487754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten struct { 2497754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mFront; 2507754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAbove; 2517754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mUp; 2527754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten } mOrientationVectors; 2537754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum AnglesVectorsActive mOrientationActive; 2547754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Rotations can be slow, so are deferred. 2557754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mTheta; 2567754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAxis; 2577754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLboolean mRotatePending; 25872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DLocation; 259773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 26072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 261773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DMacroscopicItf_ *mItf; 26272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 263773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 264773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mWidth; 265773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeight; 266773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mDepth; 267773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mSize; 268773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 269773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeading; 270773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mPitch; 271773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mRoll; 272773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationAngles; 273773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 274773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mFront; 275773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mUp; 276773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationVectors; 2777754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten enum AnglesVectorsActive mOrientationActive; 2787754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // FIXME no longer needed? was for optimization 2797754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // SLuint32 mGeneration; 2807754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten // Rotations can be slow, so are deferred. 2817754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mTheta; 2827754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLVec3D mAxis; 2837754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLboolean mRotatePending; 28472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DMacroscopic; 285773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 28672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 287773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DSourceItf_ *mItf; 28872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 289773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mHeadRelative; 290773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mRolloffMaxDistanceMute; 291773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMaxDistance; 292773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMinDistance; 2937754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mConeInnerAngle; 2947754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten SLmillidegree mConeOuterAngle; 295773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mConeOuterLevel; 296773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRolloffFactor; 297773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRoomRolloffFactor; 298773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mDistanceModel; 29972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} I3DSource; 300773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 30172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 302773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioDecoderCapabilitiesItf_ *mItf; 30372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 30472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioDecoderCapabilities; 305773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 30672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 307773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderItf_ *mItf; 30872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 309773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLAudioEncoderSettings mSettings; 31072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioEncoder; 311773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 31272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 313773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderCapabilitiesItf_ *mItf; 31472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 31572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioEncoderCapabilities; 316773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 31772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 318773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioIODeviceCapabilitiesItf_ *mItf; 31972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 3207754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slAvailableAudioInputsChangedCallback mAvailableAudioInputsChangedCallback; 3217754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mAvailableAudioInputsChangedContext; 3227754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slAvailableAudioOutputsChangedCallback mAvailableAudioOutputsChangedCallback; 3237754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mAvailableAudioOutputsChangedContext; 3247754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slDefaultDeviceIDMapChangedCallback mDefaultDeviceIDMapChangedCallback; 3257754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mDefaultDeviceIDMapChangedContext; 32672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IAudioIODeviceCapabilities; 327773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 32872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 329773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBassBoostItf_ *mItf; 33072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 331773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 332773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 33372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IBassBoost; 334773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 33572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct BufferQueue_interface { 336773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBufferQueueItf_ *mItf; 33772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 338773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLBufferQueueState mState; 339773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slBufferQueueCallback mCallback; 340773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 341773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumBuffers; 342773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mArray; 343773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mFront, *mRear; 3441ae30e37f39fcfe7937a707b789e49a7d68112baJean-Michel Trivi SLuint32 mSizeConsumed; 345773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // saves a malloc in the typical case 346773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define BUFFER_HEADER_TYPICAL 4 347773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader mTypical[BUFFER_HEADER_TYPICAL+1]; 34872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IBufferQueue; 349773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 35072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 351773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDeviceVolumeItf_ *mItf; 35272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 353773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLint32 mVolume[2]; // FIXME Hard-coded for default in/out 35472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDeviceVolume; 355773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 35672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 357773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicInterfaceManagementItf_ *mItf; 35872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 359773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mAddedMask; // added interfaces, a subset of exposed interfaces 360773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slDynamicInterfaceManagementCallback mCallback; 361773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 36272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDynamicInterfaceManagement; 363773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 36472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 365773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicSourceItf_ *mItf; 36672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 367773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLDataSource *mDataSource; 36872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IDynamicSource; 369773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 370773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME Move this elsewhere 371773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 372773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_ENVIRONMENTALREVERB 0 373773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_PRESETREVERB 1 374773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_MAX 2 375773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 376773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#if 0 377773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistatic const unsigned char AUX_to_MPH[AUX_MAX] = { 378773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_ENVIRONMENTALREVERB, 379773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_PRESETREVERB 380773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 381773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 382773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 383773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// private 384773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 385773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EnableLevel { 386773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnable; 387773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mSendLevel; 388773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 389773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 39072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 391773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEffectSendItf_ *mItf; 39272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 393773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct OutputMix_class *mOutputMix; 394773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mDirectLevel; 395773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnableLevel mEnableLevels[AUX_MAX]; 39672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEffectSend; 39772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 39872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten// private 399773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 40072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 401773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineItf_ *mItf; 40272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 403773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLossOfControlGlobal; 404773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME Per-class non-const data such as vector of created objects. 405773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Each engine is its own universe. 40672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten SLuint32 mInstanceCount; 407773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Vector<Type> instances; 40872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME set of objects 40972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten#define INSTANCE_MAX 32 // FIXME no magic numbers 41072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mInstances[INSTANCE_MAX]; 41172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEngine; 412773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 41372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 414773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineCapabilitiesItf_ *mItf; 41572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 416773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mThreadSafe; 41772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEngineCapabilities; 418773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 41972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 420773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEnvironmentalReverbItf_ *mItf; 42172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 422773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLEnvironmentalReverbSettings mProperties; 42372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEnvironmentalReverb; 424773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 425773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME move 426773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EqualizerBand { 427773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mMin; 428773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mCenter; 4290b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLmilliHertz mMax; 430773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 431773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 43272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 433773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEqualizerItf_ *mItf; 43472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 435773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 436773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 4370b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLmillibel *mLevels; 438773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 439773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumPresets; 440773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumBands; 4410b167267bda99b68346045ccab14e810121d5de4Glenn Kasten const struct EqualizerBand *mBands; 442773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar * const *mPresetNames; 4430b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLmillibel mBandLevelRangeMin; 4440b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLmillibel mBandLevelRangeMax; 44572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IEqualizer; 446773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 44772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 448773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLLEDArrayItf_ *mItf; 44972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 450773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mLightMask; 451773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLHSL *mColor; 452773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 453773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mCount; 45472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ILEDArray; 455773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 4560b167267bda99b68346045ccab14e810121d5de4Glenn Kasten// FIXME sort: MIDI goes here 4570b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 45872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 459773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataExtractionItf_ *mItf; 46072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 461773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeySize; 462773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mKey; 463773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeyEncoding; 464773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar *mValueLangCountry; 465773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mValueEncoding; 466773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mFilterMask; 467773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*FIXME*/ int mKeyFilter; 46872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMetadataExtraction; 469773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 47072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 471773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataTraversalItf_ *mItf; 47272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 473773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mIndex; 474773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMode; 475773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCount; 476773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 47772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMetadataTraversal; 478773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 47972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 480773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMessageItf_ *mItf; 48172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 482773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMetaEventCallback mMetaEventCallback; 483773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMetaEventContext; 484773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMIDIMessageCallback mMessageCallback; 485773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMessageContext; 4860b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLuint8 mMessageTypes; 48772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDIMessage; 488773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 48972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 490773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMuteSoloItf_ *mItf; 49172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 492773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelMuteMask; 493773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelSoloMask; 494773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackMuteMask; 495773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackSoloMask; 496773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const ? 497773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mTrackCount; 49872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDIMuteSolo; 499773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 50072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 501773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITempoItf_ *mItf; 50272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 503773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTicksPerQuarterNote; 504773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMicrosecondsPerQuarterNote; 50572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDITempo; 506773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 50772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 508773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITimeItf_ *mItf; 50972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 510773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDuration; 511773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mPosition; 512773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStartTick; 513773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumTicks; 51472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMIDITime; 515773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 51672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 517773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMuteSoloItf_ *mItf; 51872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 519773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMuteMask; 520773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSoloMask; 521773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 522773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mNumChannels; 52372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IMuteSolo; 524773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 52572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 526773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixItf_ *mItf; 52772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 5287754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten slMixDeviceChangeCallback mCallback; 5297754b1c33590dbb03531f59e6f108818bc303f4fGlenn Kasten void *mContext; 530773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 531773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mActiveMask; // 1 bit per active track 5320b167267bda99b68346045ccab14e810121d5de4Glenn Kasten struct Track mTracks[32]; // FIXME magic 533773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 53472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IOutputMix; 535773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 536773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 53772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 538773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixExtItf_ *mItf; 53972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 54072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IOutputMixExt; 541773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 542773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 54372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 544773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPitchItf_ *mItf; 54572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 546773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mPitch; 547773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 548773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinPitch; 549773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxPitch; 55072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPitch; 551773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 55272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct Play_interface { 553773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlayItf_ *mItf; 55472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 555773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLuint32 mState; 556773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDuration; 557773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 558773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // unsigned mPositionSamples; // position in sample units 559773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPlayCallback mCallback; 560773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 561773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mEventFlags; 562773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 563773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 56472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPlay; 565773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 56672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 567773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlaybackRateItf_ *mItf; 56872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 569773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 570773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mProperties; 5710b167267bda99b68346045ccab14e810121d5de4Glenn Kasten // const 572773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 573773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 574773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStepSize; 575773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCapabilities; 57672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPlaybackRate; 577773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 57872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 579773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPrefetchStatusItf_ *mItf; 58072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 581773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStatus; 582773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mLevel; 583773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPrefetchCallback mCallback; 584773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 585773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 586773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mFillUpdatePeriod; 58772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPrefetchStatus; 588773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 58972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 590773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPresetReverbItf_ *mItf; 59172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 592773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 59372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IPresetReverb; 594773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 59572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 596773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRatePitchItf_ *mItf; 59772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 598773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 5990b167267bda99b68346045ccab14e810121d5de4Glenn Kasten // const 600773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 601773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 60272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IRatePitch; 603773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 60472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 605773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRecordItf_ *mItf; 60672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 607773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mState; 608773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDurationLimit; 609773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 610773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slRecordCallback mCallback; 611773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 612773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 613773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 614773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 61572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IRecord; 616773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 61772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 618773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLSeekItf_ *mItf; 61972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 620773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPos; 621773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLoopEnabled; 622773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mStartPos; 623773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mEndPos; 62472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} ISeek; 625773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 62672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 627773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLThreadSyncItf_ *mItf; 62872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 629773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mInCriticalSection; 630773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mWaiting; 631773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_t mOwner; 63272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IThreadSync; 633773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 63472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 635773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVibraItf_ *mItf; 63672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 637773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mVibrate; 638773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mFrequency; 639773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mIntensity; 64072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVibra; 641773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 64272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 643773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVirtualizerItf_ *mItf; 64472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 645773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 646773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 64772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVirtualizer; 648773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 64972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 650773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVisualizationItf_ *mItf; 65172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 652773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slVisualizationCallback mCallback; 653773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 654773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mRate; 65572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVisualization; 656773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 65772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 658773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVolumeItf_ *mItf; 65972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject *mThis; 660773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mLevel; 661773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mMute; 662773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnableStereoPosition; 663773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStereoPosition; 6646a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi#ifdef USE_ANDROID 6656a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi /** 6666a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi * Amplification (can be attenuation) factor derived for the VolumeLevel 6676a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi */ 6686a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi float mAmplFromVolLevel; 6696a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi /** 6706a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi * Left/right amplification (can be attenuations) factors derived for the StereoPosition 6716a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi */ 6726a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi float mAmplFromStereoPos[2]; 6736a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi /** 6746a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi * Channel mask for which channels are muted 6756a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi */ 6766a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi int mChannelMutes; 6776a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi /** 6786a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi * Channel mask for which channels are solo'ed 6796a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi */ 6806a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi int mChannelSolos; 6816a7bf7733e955d4d89204627c34fb357d542a9ecJean-Michel Trivi#endif 68272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} IVolume; 683773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 684773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Class structures */ 685773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 68672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 68772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 68872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 68972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 69072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 69172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 69272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 69372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten // FIXME set of objects 69472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} C3DGroup; 695773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 696773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 697773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* 698773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Used to define the mapping from an OpenSL ES audio player to an Android 699773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * media framework object 700773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi */ 701773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivienum AndroidObject_type { 702c116ab2a033ee7dc78cfd458defe38d4528383a8Jean-Michel Trivi INVALID_TYPE =-1, 703773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MEDIAPLAYER = 0, 704773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PUSH = 1, 705773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PULL = 2, 706773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi NUM_AUDIOPLAYER_MAP_TYPES 707773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 708773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 709773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 71072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 71172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 71272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 71372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlay mPlay; 71472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 71572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DGrouping m3DGrouping; 71672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 71772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 71872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBufferQueue mBufferQueue; 71972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEffectSend mEffectSend; 72072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMuteSolo mMuteSolo; 72172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 72272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 72372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPrefetchStatus mPrefetchStatus; 72472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IRatePitch mRatePitch; 72572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ISeek mSeek; 72672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 727773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 72872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 72972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 73072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 73172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 73272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 73372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPitch mPitch; 73472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 73572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlaybackRate mPlaybackRate; 73672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 73772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 738773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // rest of fields are not related to the interfaces 739773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 740773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct SndFile mSndFile; 741773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 742773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 743773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi enum AndroidObject_type mAndroidObjType; 744773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi union { 745773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::AudioTrack *mAudioTrack; 746773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::MediaPlayer *mMediaPlayer; 747773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi }; 7480b167267bda99b68346045ccab14e810121d5de4Glenn Kasten // pthread_t mThread; 749773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 75072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CAudioPlayer; 751773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 75272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 753773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 75472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 75572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 75672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IRecord mRecord; 75772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioEncoder mAudioEncoder; 758773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 75972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 76072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 76172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 76272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 76372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 76472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CAudioRecorder; 765773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 76672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 767773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated implicit interfaces 76872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 76972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 77072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEngine mEngine; 77172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEngineCapabilities mEngineCapabilities; 77272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IThreadSync mThreadSync; 773773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated explicit interfaces 77472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioIODeviceCapabilities mAudioIODeviceCapabilities; 77572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioDecoderCapabilities mAudioDecoderCapabilities; 77672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IAudioEncoderCapabilities mAudioEncoderCapabilities; 77772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DCommit m3DCommit; 778773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 77972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDeviceVolume mDeviceVolume; 78072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten pthread_t mFrameThread; 78172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CEngine; 782773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 78372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 784773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 78572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 78672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 78772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ILEDArray mLEDArray; 788773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 78972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CLEDDevice; 790773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 79172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 792773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 79372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 79472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 79572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 79672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 79772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CListener; 798773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 79972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 800773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 80172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 80272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 80372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 80472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 80572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 80672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CMetadataExtractor; 807773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 80872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 809773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 81072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 81172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 81272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlay mPlay; 81372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DDoppler m3DDoppler; 81472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DGrouping m3DGrouping; 81572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DLocation m3DLocation; 81672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DSource m3DSource; 81772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBufferQueue mBufferQueue; 81872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEffectSend mEffectSend; 81972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMuteSolo mMuteSolo; 82072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataExtraction mMetadataExtraction; 82172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMetadataTraversal mMetadataTraversal; 82272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDIMessage mMIDIMessage; 82372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDITime mMIDITime; 82472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDITempo mMIDITempo; 82572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IMIDIMuteSolo mMIDIMuteSolo; 82672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPrefetchStatus mPrefetchStatus; 82772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten ISeek mSeek; 82872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 829773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 83072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten I3DMacroscopic m3DMacroscopic; 83172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 83272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicSource mDynamicSource; 83372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 83472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 83572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPitch mPitch; 83672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 83772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPlaybackRate mPlaybackRate; 83872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 83972a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 84072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CMidiPlayer; 84172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten 84272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct OutputMix_class { 843773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 84472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 84572a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 84672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IOutputMix mOutputMix; 847773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 84872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IOutputMixExt mOutputMixExt; 849773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 85072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEnvironmentalReverb mEnvironmentalReverb; 85172a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IEqualizer mEqualizer; 85272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IPresetReverb mPresetReverb; 85372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVirtualizer mVirtualizer; 85472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVolume mVolume; 855773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 85672a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IBassBoost mBassBoost; 85772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVisualization mVisualization; 85872a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} COutputMix; 859773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 86072a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kastentypedef struct { 861773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 86272a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IObject mObject; 86372a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IDynamicInterfaceManagement mDynamicInterfaceManagement; 86472a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten IVibra mVibra; 865773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // 866773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 86772a04d8e9e059dad969d166a6a70491fe1e65970Glenn Kasten} CVibraDevice; 868a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kasten 869a6d984c32855a239f7f79a3d3b7f2ddfb8cb9697Glenn Kastenextern const ClassTable C3DGroup_class; 87061ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 87161ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenstruct MPH_init { 87261ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten // unsigned char mMPH; 87361ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten VoidHook mInit; 87461ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten VoidHook mDeinit; 87561ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten}; 87661ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kasten 87761ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenextern /*static*/ int IID_to_MPH(const SLInterfaceID iid); 87861ac0ade16f84d877dfd8d0e984eb203d4a2901dGlenn Kastenextern /*static*/ const struct MPH_init MPH_init_table[MPH_MAX]; 879979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kastenextern SLresult checkInterfaces(const ClassTable *class__, 880979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten SLuint32 numInterfaces, const SLInterfaceID *pInterfaceIds, 881979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten const SLboolean *pInterfaceRequired, unsigned *pExposedMask); 882979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kastenextern IObject *construct(const ClassTable *class__, 883979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten unsigned exposedMask, SLEngineItf engine); 884979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kastenextern const ClassTable *objectIDtoClass(SLuint32 objectID); 885979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kastenextern const struct SLInterfaceID_ SL_IID_array[MPH_MAX]; 886