AudioRecorder_to_android.cpp revision 773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4
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> 24773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 25773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "MPH.h" 26773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "MPH_to.h" 27773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 28773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 29773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <sndfile.h> 30773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 31773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 32773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SDL 33773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <SDL/SDL_audio.h> 34773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SDL 35773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 36773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 37773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include <unistd.h> 38773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioSystem.h" 39773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/AudioTrack.h" 40773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "media/mediaplayer.h" 41773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 42773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 43773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 44773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#include "OutputMixExt.h" 45773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 46773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 47773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Hook functions 48773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 49773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef void (*VoidHook)(void *self); 50773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef SLresult (*StatusHook)(void *self); 51773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 52773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Describes how an interface is related to a given class 53773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 54773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_IMPLICIT 0 55773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT 1 56773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL 2 57773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC 3 58773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_GAME INTERFACE_DYNAMIC 59773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC INTERFACE_DYNAMIC 60773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_DYNAMIC_MUSIC_GAME INTERFACE_DYNAMIC 61773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_EXPLICIT_GAME INTERFACE_EXPLICIT 62773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME INTERFACE_OPTIONAL 63773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_GAME_MUSIC INTERFACE_OPTIONAL 64773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_MUSIC_GAME INTERFACE_OPTIONAL 65773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_OPTIONAL_DYNAMIC INTERFACE_DYNAMIC 66773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_PHONE_GAME INTERFACE_OPTIONAL 67773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define INTERFACE_TBD INTERFACE_IMPLICIT 68773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 69773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Maps an interface ID to its offset within the class that exposes it 70773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 71773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct iid_vtable { 72773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mMPH; 73773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned char mInterface; // relationship 74773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*size_t*/ unsigned short mOffset; 75773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 76773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 77773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Per-class const data shared by all instances of the same class 78773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 79773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct class_ { 80773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // needed by all classes (class class, the superclass of all classes) 81773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct iid_vtable *mInterfaces; 82773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mInterfaceCount; 83773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const signed char *mMPH_to_index; 84773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME not yet used 85773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi //const char * const mName; 86773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi size_t mSize; 87773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mObjectID; 88773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi StatusHook mRealize; 89773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi StatusHook mResume; 90773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi VoidHook mDestroy; 91773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // append per-class data here 92773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 93773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 94773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 95773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 96773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// Track describes each input to OutputMixer 97773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME not for Android 98773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 99773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Track { 100773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLDataFormat_PCM *mDfPcm; 101773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferQueue_interface *mBufferQueue; 102773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Play_interface *mPlay; // mixer examines this track if non-NULL 103773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mReader; // pointer to next frame in BufferHeader.mBuffer 104773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mAvail; // number of available bytes 105773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 106773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 107773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 108773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 109773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// BufferHeader describes each element of a BufferQueue, other than the data 110773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 111773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct BufferHeader { 112773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mBuffer; 113773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 114773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 115773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 116773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 117773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 118773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// stereo is a frame consisting of a pair of 16-bit PCM samples 119773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 120773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivitypedef struct { 121773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short left; 122773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short right; 123773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi} stereo; 124773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 125773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 126773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 127773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 128773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 129773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct SndFile { 130773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // save URI also? 131773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLchar *mPathname; 132773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SNDFILE *mSNDFILE; 133773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // These are used when Enqueue returns SL_RESULT_BUFFER_INSUFFICIENT 134773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mRetryBuffer; 135773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mRetrySize; 136773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mIs0; // which buffer to use next 137773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME magic numbers 138773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer0[512]; 139773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi short mBuffer1[512]; 140773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 141773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 142773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 143773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 144773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 145773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Interface structures */ 146773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 147773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DCommit_interface { 148773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DCommitItf_ *mItf; 149773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 150773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mDeferred; 151773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 152773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 153773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DDoppler_interface { 154773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DDopplerItf_ *mItf; 155773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 156773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi union Cartesian_Spherical1 { 157773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mCartesian; 158773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 159773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mAzimuth; 160773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mElevation; 161773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mSpeed; 162773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mSpherical; 163773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mVelocity; 164773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mDopplerFactor; 165773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 166773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 167773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DGrouping_interface { 168773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DGroupingItf_ *mItf; 169773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 170773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLObjectItf mGroup; 171773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 172773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 173773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DLocation_interface { 174773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DLocationItf_ *mItf; 175773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 176773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi union Cartesian_Spherical2 { 177773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mCartesian; 178773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 179773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mAzimuth; 180773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mElevation; 181773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mDistance; 182773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mSpherical; 183773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mLocation; 184773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mHeading; 185773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mPitch; 186773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mRoll; 187773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mFront; 188773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mAbove; 189773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mUp; 190773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 191773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 192773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DMacroscopic_interface { 193773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DMacroscopicItf_ *mItf; 194773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 195773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 196773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mWidth; 197773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeight; 198773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mDepth; 199773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mSize; 200773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 201773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mHeading; 202773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mPitch; 203773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mRoll; 204773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationAngles; 205773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 206773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mFront; 207773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLVec3D mUp; 208773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mOrientationVectors; 209773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // for optimization 210773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mGeneration; 211773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 212773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 213773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DSource_interface { 214773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SL3DSourceItf_ *mItf; 215773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 216773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mHeadRelative; 217773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mRolloffMaxDistanceMute; 218773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMaxDistance; 219773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillimeter mMinDistance; 220773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct { 221773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mInner; 222773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillidegree mOuter; 223773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi } mConeAngles; 224773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mConeOuterLevel; 225773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRolloffFactor; 226773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRoomRolloffFactor; 227773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mDistanceModel; 228773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 229773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 230773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioDecoderCapabilities_interface { 231773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioDecoderCapabilitiesItf_ *mItf; 232773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 233773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 234773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 235773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioEncoder_interface { 236773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderItf_ *mItf; 237773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 238773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLAudioEncoderSettings mSettings; 239773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 240773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 241773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioEncoderCapabilities_interface { 242773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioEncoderCapabilitiesItf_ *mItf; 243773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 244773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 245773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 246773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioIODeviceCapabilities_interface { 247773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLAudioIODeviceCapabilitiesItf_ *mItf; 248773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 249773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 250773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 251773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct BassBoost_interface { 252773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBassBoostItf_ *mItf; 253773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 254773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 255773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 256773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 257773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 258773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct BufferQueue_interface { 259773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLBufferQueueItf_ *mItf; 260773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 261773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLBufferQueueState mState; 262773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slBufferQueueCallback mCallback; 263773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 264773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumBuffers; 265773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mArray; 266773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader *mFront, *mRear; 267773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // saves a malloc in the typical case 268773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define BUFFER_HEADER_TYPICAL 4 269773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferHeader mTypical[BUFFER_HEADER_TYPICAL+1]; 270773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 271773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 272773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct DeviceVolume_interface { 273773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDeviceVolumeItf_ *mItf; 274773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 275773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLint32 mVolume[2]; // FIXME Hard-coded for default in/out 276773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 277773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 278773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct DynamicInterfaceManagement_interface { 279773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicInterfaceManagementItf_ *mItf; 280773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 281773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mAddedMask; // added interfaces, a subset of exposed interfaces 282773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slDynamicInterfaceManagementCallback mCallback; 283773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 284773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 285773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 286773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct DynamicSource_interface { 287773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLDynamicSourceItf_ *mItf; 288773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 289773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLDataSource *mDataSource; 290773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 291773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 292773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME Move this elsewhere 293773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 294773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_ENVIRONMENTALREVERB 0 295773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_PRESETREVERB 1 296773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#define AUX_MAX 2 297773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 298773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#if 0 299773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistatic const unsigned char AUX_to_MPH[AUX_MAX] = { 300773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_ENVIRONMENTALREVERB, 301773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MPH_PRESETREVERB 302773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 303773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 304773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 305773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// private 306773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 307773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EnableLevel { 308773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnable; 309773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mSendLevel; 310773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 311773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 312773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EffectSend_interface { 313773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEffectSendItf_ *mItf; 314773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 315773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct OutputMix_class *mOutputMix; 316773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mDirectLevel; 317773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnableLevel mEnableLevels[AUX_MAX]; 318773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 319773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 320773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Engine_interface { 321773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineItf_ *mItf; 322773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 323773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLossOfControlGlobal; 324773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME Per-class non-const data such as vector of created objects. 325773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Each engine is its own universe. 326773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // SLuint32 mInstanceCount; 327773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // Vector<Type> instances; 328773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 329773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 330773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EngineCapabilities_interface { 331773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEngineCapabilitiesItf_ *mItf; 332773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 333773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mThreadSafe; 334773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 335773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 336773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EnvironmentalReverb_interface { 337773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEnvironmentalReverbItf_ *mItf; 338773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 339773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLEnvironmentalReverbSettings mProperties; 340773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 341773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 342773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi// FIXME move 343773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct EqualizerBand { 344773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mMin; 345773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mMax; 346773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mCenter; 347773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mLevel; 348773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 349773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 350773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Equalizer_interface { 351773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLEqualizerItf_ *mItf; 352773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 353773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 354773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel *mLevels; 355773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 356773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 357773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumPresets; 358773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mNumBands; 359773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mMin; 360773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mMax; 361773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EqualizerBand *mBands; 362773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar * const *mPresetNames; 363773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mBandLevelRangeMin; 364773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*TBD*/ int mBandLevelRangeMax; 365773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 366773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 367773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct LEDArray_interface { 368773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLLEDArrayItf_ *mItf; 369773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 370773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mLightMask; 371773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLHSL *mColor; 372773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 373773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mCount; 374773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 375773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 376773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MetadataExtraction_interface { 377773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataExtractionItf_ *mItf; 378773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 379773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeySize; 380773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const void *mKey; 381773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mKeyEncoding; 382773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const SLchar *mValueLangCountry; 383773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mValueEncoding; 384773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mFilterMask; 385773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi /*FIXME*/ int mKeyFilter; 386773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 387773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 388773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MetadataTraversal_interface { 389773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMetadataTraversalItf_ *mItf; 390773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 391773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mIndex; 392773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMode; 393773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCount; 394773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSize; 395773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 396773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 397773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MIDIMessage_interface { 398773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMessageItf_ *mItf; 399773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 400773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMetaEventCallback mMetaEventCallback; 401773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMetaEventContext; 402773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slMIDIMessageCallback mMessageCallback; 403773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mMessageContext; 404773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi int /*TBD*/ mMessageTypes; 405773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 406773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 407773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MIDIMuteSolo_interface { 408773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDIMuteSoloItf_ *mItf; 409773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 410773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelMuteMask; 411773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mChannelSoloMask; 412773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackMuteMask; 413773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTrackSoloMask; 414773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const ? 415773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mTrackCount; 416773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 417773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 418773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MIDITempo_interface { 419773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITempoItf_ *mItf; 420773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 421773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mTicksPerQuarterNote; 422773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMicrosecondsPerQuarterNote; 423773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 424773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 425773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MIDITime_interface { 426773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMIDITimeItf_ *mItf; 427773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 428773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDuration; 429773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mPosition; 430773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStartTick; 431773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mNumTicks; 432773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 433773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 434773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MuteSolo_interface { 435773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLMuteSoloItf_ *mItf; 436773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 437773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mMuteMask; 438773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mSoloMask; 439773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 440773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint8 mNumChannels; 441773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 442773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 443773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Object_interface { 444773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLObjectItf_ *mItf; 445773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME probably not needed for an Object, as it is always first, 446773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // but look for lingering code that assumes it is here before deleting 447773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 448773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct class_ *mClass; 449773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLuint32 mState; 450773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slObjectCallback mCallback; 451773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 452773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mExposedMask; // exposed interfaces 453773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mLossOfControlMask; // interfaces with loss of control enabled 454773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLint32 mPriority; 455773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mPreemptable; 456773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_mutex_t mMutex; 457773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_cond_t mCond; 458773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME also an object ID for RPC 459773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // FIXME and a human-readable name for debugging 460773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 461773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 462773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct OutputMix_interface { 463773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixItf_ *mItf; 464773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 465773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 466773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi unsigned mActiveMask; // 1 bit per active track 467773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Track mTracks[32]; 468773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 469773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 470773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 471773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 472773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct OutputMixExt_interface { 473773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLOutputMixExtItf_ *mItf; 474773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 475773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 476773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 477773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 478773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Pitch_interface { 479773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPitchItf_ *mItf; 480773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 481773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mPitch; 482773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // const 483773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinPitch; 484773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxPitch; 485773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 486773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 487773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Play_interface { 488773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlayItf_ *mItf; 489773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 490773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi volatile SLuint32 mState; 491773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDuration; 492773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 493773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // unsigned mPositionSamples; // position in sample units 494773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPlayCallback mCallback; 495773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 496773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mEventFlags; 497773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 498773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 499773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 500773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 501773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct PlaybackRate_interface { 502773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPlaybackRateItf_ *mItf; 503773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 504773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 505773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mPropertyConstraints; 506773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mProperties; 507773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 508773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 509773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStepSize; 510773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCapabilities; 511773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 512773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 513773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct PrefetchStatus_interface { 514773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPrefetchStatusItf_ *mItf; 515773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 516773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mStatus; 517773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mLevel; 518773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slPrefetchCallback mCallback; 519773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 520773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 521773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mFillUpdatePeriod; 522773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 523773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 524773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct PresetReverb_interface { 525773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLPresetReverbItf_ *mItf; 526773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 527773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint16 mPreset; 528773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 529773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 530773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct RatePitch_interface { 531773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRatePitchItf_ *mItf; 532773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 533773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mRate; 534773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMinRate; 535773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mMaxRate; 536773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 537773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 538773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Record_interface { 539773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLRecordItf_ *mItf; 540773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 541773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mState; 542773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mDurationLimit; 543773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPosition; 544773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slRecordCallback mCallback; 545773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 546773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mCallbackEventsMask; 547773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mMarkerPosition; 548773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPositionUpdatePeriod; 549773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 550773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 551773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Seek_interface { 552773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLSeekItf_ *mItf; 553773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 554773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mPos; 555773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mLoopEnabled; 556773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mStartPos; 557773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillisecond mEndPos; 558773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 559773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 560773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct ThreadSync_interface { 561773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLThreadSyncItf_ *mItf; 562773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 563773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mInCriticalSection; 564773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mWaiting; 565773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_t mOwner; 566773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 567773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 568773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Vibra_interface { 569773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVibraItf_ *mItf; 570773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 571773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mVibrate; 572773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mFrequency; 573773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mIntensity; 574773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 575773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 576773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Virtualizer_interface { 577773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVirtualizerItf_ *mItf; 578773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 579773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnabled; 580773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStrength; 581773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 582773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 583773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Visualization_interface { 584773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVisualizationItf_ *mItf; 585773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 586773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi slVisualizationCallback mCallback; 587773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi void *mContext; 588773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmilliHertz mRate; 589773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 590773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 591773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Volume_interface { 592773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi const struct SLVolumeItf_ *mItf; 593773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface *mThis; 594773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLmillibel mLevel; 595773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mMute; 596773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLboolean mEnableStereoPosition; 597773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLpermille mStereoPosition; 598773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 599773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 600773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* Class structures */ 601773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 602773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct _3DGroup_class { 603773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 604773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 605773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DLocation_interface m3DLocation; 606773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DDoppler_interface m3DDoppler; 607773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DSource_interface m3DSource; 608773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DMacroscopic_interface m3DMacroscopic; 609773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 610773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 611773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 612773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi/* 613773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * Used to define the mapping from an OpenSL ES audio player to an Android 614773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi * media framework object 615773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi */ 616773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivienum AndroidObject_type { 617773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi //DEFAULT =-1, 618773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi MEDIAPLAYER = 0, 619773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PUSH = 1, 620773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi AUDIOTRACK_PULL = 2, 621773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi NUM_AUDIOPLAYER_MAP_TYPES 622773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 623773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 624773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 625773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioPlayer_class { 626773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 627773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 628773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Play_interface mPlay; 629773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DDoppler_interface m3DDoppler; 630773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DGrouping_interface m3DGrouping; 631773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DLocation_interface m3DLocation; 632773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DSource_interface m3DSource; 633773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferQueue_interface mBufferQueue; 634773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EffectSend_interface mEffectSend; 635773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MuteSolo_interface mMuteSolo; 636773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataExtraction_interface mMetadataExtraction; 637773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataTraversal_interface mMetadataTraversal; 638773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PrefetchStatus_interface mPrefetchStatus; 639773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct RatePitch_interface mRatePitch; 640773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Seek_interface mSeek; 641773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Volume_interface mVolume; 642773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 643773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DMacroscopic_interface m3DMacroscopic; 644773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BassBoost_interface mBassBoost; 645773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicSource_interface mDynamicSource; 646773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnvironmentalReverb_interface mEnvironmentalReverb; 647773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Equalizer_interface mEqualizer; 648773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Pitch_interface mPitch; 649773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PresetReverb_interface mPresetReverb; 650773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PlaybackRate_interface mPlaybackRate; 651773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Virtualizer_interface mVirtualizer; 652773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Visualization_interface mVisualization; 653773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // rest of fields are not related to the interfaces 654773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_SNDFILE 655773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct SndFile mSndFile; 656773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif // USE_SNDFILE 657773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_ANDROID 658773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi enum AndroidObject_type mAndroidObjType; 659773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi union { 660773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::AudioTrack *mAudioTrack; 661773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi android::MediaPlayer *mMediaPlayer; 662773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi }; 663773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi pthread_t mThread; 664773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 665773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 666773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 667773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct AudioRecorder_class { 668773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 669773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 670773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 671773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Record_interface mRecord; 672773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct AudioEncoder_interface mAudioEncoder; 673773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 674773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BassBoost_interface mBassBoost; 675773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicSource_interface mDynamicSource; 676773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Equalizer_interface mEqualizer; 677773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Visualization_interface mVisualization; 678773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Volume_interface mVolume; 679773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 680773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 681773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Engine_class { 682773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated implicit interfaces 683773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 684773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 685773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Engine_interface mEngine; 686773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EngineCapabilities_interface mEngineCapabilities; 687773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct ThreadSync_interface mThreadSync; 688773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated explicit interfaces 689773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct AudioIODeviceCapabilities_interface mAudioIODeviceCapabilities; 690773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct AudioDecoderCapabilities_interface mAudioDecoderCapabilities; 691773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct AudioEncoderCapabilities_interface mAudioEncoderCapabilities; 692773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DCommit_interface m3DCommit; 693773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 694773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DeviceVolume_interface mDeviceVolume; 695773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 696773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 697773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct LEDDevice_class { 698773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 699773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 700773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 701773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct LEDArray_interface mLEDArray; 702773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 703773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 704773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 705773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct Listener_class { 706773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 707773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 708773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 709773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DDoppler_interface m3DDoppler; 710773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DLocation_interface m3DLocation; 711773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 712773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 713773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MetadataExtractor_class { 714773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 715773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 716773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 717773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicSource_interface mDynamicSource; 718773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataExtraction_interface mMetadataExtraction; 719773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataTraversal_interface mMetadataTraversal; 720773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 721773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 722773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct MidiPlayer_class { 723773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 724773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 725773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 726773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Play_interface mPlay; 727773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DDoppler_interface m3DDoppler; 728773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DGrouping_interface m3DGrouping; 729773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DLocation_interface m3DLocation; 730773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DSource_interface m3DSource; 731773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BufferQueue_interface mBufferQueue; 732773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EffectSend_interface mEffectSend; 733773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MuteSolo_interface mMuteSolo; 734773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataExtraction_interface mMetadataExtraction; 735773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MetadataTraversal_interface mMetadataTraversal; 736773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MIDIMessage_interface mMIDIMessage; 737773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MIDITime_interface mMIDITime; 738773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MIDITempo_interface mMIDITempo; 739773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct MIDIMuteSolo_interface mMIDIMuteSolo; 740773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PrefetchStatus_interface mPrefetchStatus; 741773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Seek_interface mSeek; 742773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Volume_interface mVolume; 743773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 744773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct _3DMacroscopic_interface m3DMacroscopic; 745773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BassBoost_interface mBassBoost; 746773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicSource_interface mDynamicSource; 747773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnvironmentalReverb_interface mEnvironmentalReverb; 748773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Equalizer_interface mEqualizer; 749773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Pitch_interface mPitch; 750773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PresetReverb_interface mPresetReverb; 751773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PlaybackRate_interface mPlaybackRate; 752773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Virtualizer_interface mVirtualizer; 753773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Visualization_interface mVisualization; 754773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 755773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 756773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct OutputMix_class { 757773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 758773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 759773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 760773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct OutputMix_interface mOutputMix; 761773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#ifdef USE_OUTPUTMIXEXT 762773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct OutputMixExt_interface mOutputMixExt; 763773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi#endif 764773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct EnvironmentalReverb_interface mEnvironmentalReverb; 765773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Equalizer_interface mEqualizer; 766773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct PresetReverb_interface mPresetReverb; 767773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Virtualizer_interface mVirtualizer; 768773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Volume_interface mVolume; 769773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // optional interfaces 770773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct BassBoost_interface mBassBoost; 771773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Visualization_interface mVisualization; 772773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 773773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi 774773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivistruct VibraDevice_class { 775773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // mandated interfaces 776773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Object_interface mObject; 777773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct DynamicInterfaceManagement_interface mDynamicInterfaceManagement; 778773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi struct Vibra_interface mVibra; 779773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi // 780773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi SLuint32 mDeviceID; 781773e0429cbb9e85b4f1c6eb5a095ccd7b57f5ba4Jean-Michel Trivi}; 782