classes.h revision f271eea20f9fff6c101213b34652399f457bcd50
1cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*
2cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Copyright (C) 2010 The Android Open Source Project
3cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
4cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * you may not use this file except in compliance with the License.
6cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * You may obtain a copy of the License at
7cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
8cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten *
10cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * See the License for the specific language governing permissions and
14cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten * limitations under the License.
15cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten */
16cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
17cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten// Class structures
18cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
19cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
20cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioPlayer_struct {
21cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
22cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
23cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces
24cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else
25cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces
26cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
27cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default];
28cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
29cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPlay mPlay;
30cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DDoppler m3DDoppler;
31cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DGrouping m3DGrouping;
32cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DLocation m3DLocation;
33cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DSource m3DSource;
34cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBufferQueue mBufferQueue;
35cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEffectSend mEffectSend;
36cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataExtraction mMetadataExtraction;
37cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataTraversal mMetadataTraversal;
38cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPrefetchStatus mPrefetchStatus;
39cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IRatePitch mRatePitch;
40cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    ISeek mSeek;
41cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVolume mVolume;
42cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMuteSolo mMuteSolo;
43cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
44cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidEffect mAndroidEffect;
45cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidEffectSend mAndroidEffectSend;
46cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidConfiguration mAndroidConfiguration;
47cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidBufferQueue mAndroidBufferQueue;
48cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
49cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // optional interfaces
50cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DMacroscopic m3DMacroscopic;
51cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBassBoost mBassBoost;
52cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicSource mDynamicSource;
53cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEnvironmentalReverb mEnvironmentalReverb;
54cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEqualizer mEqualizer;
55cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPitch mPitch;
56cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPresetReverb mPresetReverb;
57cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPlaybackRate mPlaybackRate;
58cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVirtualizer mVirtualizer;
59cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVisualization mVisualization;
60cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
61cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataLocatorFormat mDataSource;
62cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataLocatorFormat mDataSink;
63cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // cached data for this instance
64cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 /*SLboolean*/ mMute;
65cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // Formerly at IMuteSolo
66cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mMuteMask;      // Mask for which channels are muted: bit 0=left, 1=right
67cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mSoloMask;      // Mask for which channels are soloed: bit 0=left, 1=right
68cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mNumChannels;   // 0 means unknown, then const once it is known, range 1 <= x <= 8
69cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mSampleRateMilliHz;// 0 means unknown, then const once it is known
70cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // Formerly at IEffectSend
71cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /**
72cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf
73cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     */
74cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLmillibel mDirectLevel;
75cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // implementation-specific data for this instance
76cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT
77cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    Track *mTrack;
78cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    float mGains[STEREO_CHANNELS];  ///< Computed gain based on volume, mute, solo, stereo position
79cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLboolean mDestroyRequested;    ///< Mixer to acknowledge application's call to Object::Destroy
80cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
81cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_SNDFILE
82cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    struct SndFile mSndFile;
83cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif // USE_SNDFILE
84cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
85cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::Mutex          *mpLock;
86cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    enum AndroidObject_type mAndroidObjType;
87f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    /** identifies the initialization and preparation state */
88cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    enum AndroidObject_state mAndroidObjState;
89cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /** identifies which group of effects ("session") this player belongs to */
90cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    int mSessionId;
91cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /** identifies the Android stream type playback will occur on */
92cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    int mStreamType;
93cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /** plays the PCM data for this player */
94cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::AudioTrack *mAudioTrack;
95cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::sp<android::SfPlayer> mSfPlayer;
96cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::sp<android::StreamPlayer> mStreamPlayer;
97cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /** aux effect the AudioTrack will be attached to if aux send enabled */
98cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::sp<android::AudioEffect> mAuxEffect;
99cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /** send level to aux effect, there's a single aux bus, so there's a single level */
100cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLmillibel mAuxSendLevel;
101cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /**
102cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     * Amplification (can be attenuation) factor derived for the VolumeLevel
103cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     */
104cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    float mAmplFromVolLevel;
105cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /**
106cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     * Left/right amplification (can be attenuations) factors derived for the StereoPosition
107cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     */
108cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    float mAmplFromStereoPos[STEREO_CHANNELS];
109cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    /**
110cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     * Attenuation factor derived from direct level
111cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten     */
112cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    float mAmplFromDirectLevel;
113cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
114cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioPlayer*/;
115cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
116cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
117cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CAudioRecorder_struct {
118cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
119cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
120cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
121cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioRecorder 11 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces
122cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else
123cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_AudioRecorder 9  // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces
124cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
125cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default];
126cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
127cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IRecord mRecord;
128cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAudioEncoder mAudioEncoder;
129cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // optional interfaces
130cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBassBoost mBassBoost;
131cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicSource mDynamicSource;
132cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEqualizer mEqualizer;
133cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVisualization mVisualization;
134cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVolume mVolume;
135cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
136cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBufferQueue mBufferQueue;
137cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidConfiguration mAndroidConfiguration;
138cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
139cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
140cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataLocatorFormat mDataSource;
141cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    DataLocatorFormat mDataSink;
142cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // cached data for this instance
143cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mNumChannels;   // 0 means unknown, then const once it is known, range 1 <= x <= 8
144cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mSampleRateMilliHz;// 0 means unknown, then const once it is known
145cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // implementation-specific data for this instance
146cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
147cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    android::AudioRecord *mAudioRecord;
148cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    int mRecordSource;
149cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
150cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CAudioRecorder*/;
151cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
152cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
153cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct CEngine_struct {
154cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated implicit interfaces
155cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
156cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
157cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces
158cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else
159cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Engine 11 // see MPH_to_Engine in MPH_to.c for list of interfaces
160cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
161cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default];
162cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
163cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEngine mEngine;
164cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEngineCapabilities mEngineCapabilities;
165cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IThreadSync mThreadSync;
166cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated explicit interfaces
167cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAudioIODeviceCapabilities mAudioIODeviceCapabilities;
168cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAudioDecoderCapabilities mAudioDecoderCapabilities;
169cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAudioEncoderCapabilities mAudioEncoderCapabilities;
170cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DCommit m3DCommit;
171cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // optional interfaces
172cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDeviceVolume mDeviceVolume;
173cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // OpenMAX AL mandated implicit interfaces
174cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IXAEngine mXAEngine;
175cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
176cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidEffectCapabilities mAndroidEffectCapabilities;
177cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
178cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
179cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    ThreadPool mThreadPool; // for asynchronous operations
180cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    pthread_t mSyncThread;
181cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#if defined(ANDROID) && !defined(USE_BACKPORT)
182cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // FIXME number of presets will only be saved in IEqualizer, preset names will not be stored
183cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mEqNumPresets;
184cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    char** mEqPresetNames;
185cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
186cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*CEngine*/;
187cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
188cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
189cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
190cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
191cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_LEDDevice 3 // see MPH_to_LEDDevice in MPH_to.c for list of interfaces
192cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_LEDDevice - INTERFACES_Default];
193cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
194cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    ILEDArray mLEDArray;
195cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
196cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mDeviceID;
197cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CLEDDevice;
198cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
199cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
200cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
201cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
202cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_Listener 4 // see MPH_to_Listener in MPH_to.c for list of interfaces
203cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_Listener - INTERFACES_Default];
204cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
205cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DDoppler m3DDoppler;
206cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DLocation m3DLocation;
207cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
208cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CListener;
209cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
210cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
211cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
212cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
213cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MetadataExtractor 5 // see MPH_to_MetadataExtractor in MPH_to.c for list of
214cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten                                       // interfaces
215cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_MetadataExtractor - INTERFACES_Default];
216cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
217cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicSource mDynamicSource;
218cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataExtraction mMetadataExtraction;
219cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataTraversal mMetadataTraversal;
220cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
221cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMetadataExtractor;
222cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
223cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
224cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
225cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
226cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
227cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_MidiPlayer 29 // see MPH_to_MidiPlayer in MPH_to.c for list of interfaces
228cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_MidiPlayer - INTERFACES_Default];
229cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
230cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPlay mPlay;
231cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DDoppler m3DDoppler;
232cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DGrouping m3DGrouping;
233cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DLocation m3DLocation;
234cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DSource m3DSource;
235cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBufferQueue mBufferQueue;
236cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEffectSend mEffectSend;
237cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataExtraction mMetadataExtraction;
238cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMetadataTraversal mMetadataTraversal;
239cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMIDIMessage mMIDIMessage;
240cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMIDITime mMIDITime;
241cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMIDITempo mMIDITempo;
242cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMIDIMuteSolo mMIDIMuteSolo;
243cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPrefetchStatus mPrefetchStatus;
244cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    ISeek mSeek;
245cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVolume mVolume;
246cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IMuteSolo mMuteSolo;
247cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // optional interfaces
248cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    I3DMacroscopic m3DMacroscopic;
249cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBassBoost mBassBoost;
250cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicSource mDynamicSource;
251cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEnvironmentalReverb mEnvironmentalReverb;
252cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEqualizer mEqualizer;
253cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPitch mPitch;
254cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPresetReverb mPresetReverb;
255cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPlaybackRate mPlaybackRate;
256cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVirtualizer mVirtualizer;
257cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVisualization mVisualization;
258cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
259cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CMidiPlayer;
260cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
261cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten/*typedef*/ struct COutputMix_struct {
262cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
263cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
264cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
265cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 12 // see MPH_to_OutputMix in MPH_to.c for list of interfaces
266cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#else
267cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_OutputMix 11 // see MPH_to_OutputMix in MPH_to.c for list of interfaces
268cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
269cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_OutputMix - INTERFACES_Default];
270cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
271cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IOutputMix mOutputMix;
272cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef USE_OUTPUTMIXEXT
273cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IOutputMixExt mOutputMixExt;
274cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
275cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEnvironmentalReverb mEnvironmentalReverb;
276cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IEqualizer mEqualizer;
277cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IPresetReverb mPresetReverb;
278cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVirtualizer mVirtualizer;
279cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVolume mVolume;
280cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // optional interfaces
281cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IBassBoost mBassBoost;
282cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVisualization mVisualization;
283cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#ifdef ANDROID
284cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IAndroidEffect mAndroidEffect;
285cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#endif
286cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
287cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} /*COutputMix*/;
288cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten
289cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kastentypedef struct {
290cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // mandated interfaces
291cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IObject mObject;
292cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten#define INTERFACES_VibraDevice 3 // see MPH_to_VibraDevice in MPH_to.c for list of interfaces
293cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint8 mInterfaceStates2[INTERFACES_VibraDevice - INTERFACES_Default];
294cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
295cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    IVibra mVibra;
296cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    // remaining are per-instance private fields not associated with an interface
297cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten    SLuint32 mDeviceID;
298cafa51fdd8b3f29ebaa0682070100825a9cce2a8Glenn Kasten} CVibraDevice;
2998b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
3008b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
3018b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastentypedef struct CMediaPlayer_struct {
3028b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    IObject mObject;
303eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#define INTERFACES_MediaPlayer 4
3048b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XAuint8 mInterfaceStates2[INTERFACES_MediaPlayer - INTERFACES_Default];
3058b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    IDynamicInterfaceManagement mDynamicInterfaceManagement;
30694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    IPlay mPlay;
307eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#ifdef ANDROID
308eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi    IAndroidBufferQueue mAndroidBufferQueue;
309eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi#endif
3108b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    // ...
3118b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mDataSource;
3128b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mBankSource;
3138b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mAudioSink;
3148b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mImageVideoSink;
3158b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mVibraSink;
3168b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    DataLocatorFormat mLEDArraySink;
317f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    /**
318f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi     * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf
319f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi     */
320f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    SLmillibel mDirectLevel;
32194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#ifdef ANDROID
322eae4df541ba1d46f65d37e959baf2127aa632c93Jean-Michel Trivi    android::sp<android::AVPlayer> mAVPlayer;
323f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    enum AndroidObject_type mAndroidObjType;
324f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    /** identifies the initialization and preparation state */
325f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    enum AndroidObject_state mAndroidObjState;
326f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    /** identifies which group of effects ("session") this player belongs to */
327f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    int mSessionId;
328f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    /** identifies the Android stream type playback will occur on */
329f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    int mStreamType;
330f271eea20f9fff6c101213b34652399f457bcd50Jean-Michel Trivi    AndroidAudioLevels mAndroidAudioLevels;
33194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten#endif
3328b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten} CMediaPlayer;
333