1b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten/*
2b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Copyright (C) 2010 The Android Open Source Project
3b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten *
4b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * you may not use this file except in compliance with the License.
6b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * You may obtain a copy of the License at
7b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten *
8b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten *
10b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * See the License for the specific language governing permissions and
14b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * limitations under the License.
15b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten */
16b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
17b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten/* Classes vs. interfaces */
18b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
19b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#include "sles_allinclusive.h"
20b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
21c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
22c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_GAME
23c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
24b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// 3DGroup class
25b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
26510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable _3DGroup_interfaces[INTERFACES_3DGroup] = {
27104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(C3DGroup, mObject)},
28b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
29b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(C3DGroup, mDynamicInterfaceManagement)},
307a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DLOCATION, INTERFACE_IMPLICIT, offsetof(C3DGroup, m3DLocation)},
317a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DDOPPLER, INTERFACE_DYNAMIC_GAME, offsetof(C3DGroup, m3DDoppler)},
32c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DSOURCE, INTERFACE_EXPLICIT_GAME, offsetof(C3DGroup, m3DSource)},
337a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DMACROSCOPIC, INTERFACE_OPTIONAL, offsetof(C3DGroup, m3DMacroscopic)},
34b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
35b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
36b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable C3DGroup_class = {
37b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    _3DGroup_interfaces,
38510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_3DGroup,
39b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_3DGroup,
40b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "3DGroup",
41b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(C3DGroup),
42b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_3DGROUP,
438b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenMAX AL object ID
44b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
45b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
46928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
47f51dba65751107c930759938775b75531ec1f330Glenn Kasten    C3DGroup_PreDestroy
48b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
49b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
50c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
51c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
52c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
53b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// AudioPlayer class
54b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
55510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable AudioPlayer_interfaces[INTERFACES_AudioPlayer] = {
56104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CAudioPlayer, mObject)},
57711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
58b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CAudioPlayer, mDynamicInterfaceManagement)},
597a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_PLAY, INTERFACE_IMPLICIT, offsetof(CAudioPlayer, mPlay)},
607a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DDOPPLER, INTERFACE_DYNAMIC_GAME, offsetof(CAudioPlayer, m3DDoppler)},
61c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DGROUPING, INTERFACE_EXPLICIT_GAME, offsetof(CAudioPlayer, m3DGrouping)},
62c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DLOCATION, INTERFACE_EXPLICIT_GAME, offsetof(CAudioPlayer, m3DLocation)},
63c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DSOURCE, INTERFACE_EXPLICIT_GAME, offsetof(CAudioPlayer, m3DSource)},
64711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_BUFFERQUEUE, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mBufferQueue)},
65711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_EFFECTSEND, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mEffectSend)},
66711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_MUTESOLO, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mMuteSolo)},
677f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi    {MPH_METADATAEXTRACTION, INTERFACE_DYNAMIC,
68fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten        offsetof(CAudioPlayer, mMetadataExtraction)},
69fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten    {MPH_METADATATRAVERSAL, INTERFACE_DYNAMIC_GAME_MUSIC,
70fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten        offsetof(CAudioPlayer, mMetadataTraversal)},
717a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_PREFETCHSTATUS, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mPrefetchStatus)},
727a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_RATEPITCH, INTERFACE_DYNAMIC_GAME, offsetof(CAudioPlayer, mRatePitch)},
737a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_SEEK, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mSeek)},
74c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    // The base Volume interface is explicit, but portions are only for Game and Music profiles
75c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_VOLUME, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mVolume)},
767a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DMACROSCOPIC, INTERFACE_OPTIONAL, offsetof(CAudioPlayer, m3DMacroscopic)},
7724430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_BASSBOOST, INTERFACE_DYNAMIC, offsetof(CAudioPlayer, mBassBoost)},
787a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_DYNAMICSOURCE, INTERFACE_OPTIONAL, offsetof(CAudioPlayer, mDynamicSource)},
7924430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_ENVIRONMENTALREVERB, INTERFACE_DYNAMIC,
80fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten        offsetof(CAudioPlayer, mEnvironmentalReverb)},
8124430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_EQUALIZER, INTERFACE_DYNAMIC, offsetof(CAudioPlayer, mEqualizer)},
82c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_PITCH, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CAudioPlayer, mPitch)},
8324430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_PRESETREVERB, INTERFACE_DYNAMIC, offsetof(CAudioPlayer, mPresetReverb)},
8424430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_PLAYBACKRATE, INTERFACE_DYNAMIC, offsetof(CAudioPlayer, mPlaybackRate)},
8524430c9070298f12e68b84c921add38da6ad0490Jean-Michel Trivi    {MPH_VIRTUALIZER, INTERFACE_DYNAMIC, offsetof(CAudioPlayer, mVirtualizer)},
867a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_VISUALIZATION, INTERFACE_OPTIONAL, offsetof(CAudioPlayer, mVisualization)},
8705ccff2aaa3e1507cdc7ab3b244c973c6708e009Jean-Michel Trivi#ifdef ANDROID
885b09aa864215690580b18eb802927e8cc7eb4861Jean-Michel Trivi    {MPH_ANDROIDEFFECT, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mAndroidEffect)},
89fef6033d852daec8d88060b252e72f322724dca1Jean-Michel Trivi    {MPH_ANDROIDEFFECTSEND, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mAndroidEffectSend)},
905e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_ANDROIDCONFIGURATION, INTERFACE_EXPLICIT_PREREALIZE,
915e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten            offsetof(CAudioPlayer, mAndroidConfiguration)},
9260ca9f9ef02f6e486c3338cb811f603dd7825c05Glenn Kasten    {MPH_ANDROIDBUFFERQUEUESOURCE, INTERFACE_EXPLICIT, offsetof(CAudioPlayer, mAndroidBufferQueue)},
9305ccff2aaa3e1507cdc7ab3b244c973c6708e009Jean-Michel Trivi#endif
94b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
95b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
96b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CAudioPlayer_class = {
97b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    AudioPlayer_interfaces,
98510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_AudioPlayer,
99b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_AudioPlayer,
100b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "AudioPlayer",
101b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CAudioPlayer),
102b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_AUDIOPLAYER,
1038b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenMAX AL object ID
104b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    CAudioPlayer_Realize,
105928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CAudioPlayer_Resume,
106928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CAudioPlayer_Destroy,
107928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CAudioPlayer_PreDestroy
108b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
109b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
110c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
111c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if (USE_PROFILES & USE_PROFILES_OPTIONAL) || defined(ANDROID)
112c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
113b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// AudioRecorder class
114b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
115510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable AudioRecorder_interfaces[INTERFACES_AudioRecorder] = {
116104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CAudioRecorder, mObject)},
117711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
118b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CAudioRecorder, mDynamicInterfaceManagement)},
1197a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_RECORD, INTERFACE_IMPLICIT, offsetof(CAudioRecorder, mRecord)},
120c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_AUDIOENCODER, INTERFACE_EXPLICIT, offsetof(CAudioRecorder, mAudioEncoder)},
121c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_BASSBOOST, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CAudioRecorder, mBassBoost)},
1227a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_DYNAMICSOURCE, INTERFACE_OPTIONAL, offsetof(CAudioRecorder, mDynamicSource)},
123c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_EQUALIZER, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CAudioRecorder, mEqualizer)},
1247a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_VISUALIZATION, INTERFACE_OPTIONAL, offsetof(CAudioRecorder, mVisualization)},
1255e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_VOLUME, INTERFACE_OPTIONAL, offsetof(CAudioRecorder, mVolume)},
1261580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten#ifdef ANDROID
1271580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten    {MPH_ANDROIDSIMPLEBUFFERQUEUE, INTERFACE_EXPLICIT, offsetof(CAudioRecorder, mBufferQueue)},
1281580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten    {MPH_ANDROIDCONFIGURATION, INTERFACE_EXPLICIT_PREREALIZE,
1291580f7ab4e02ed2881ac7cdeab2044e990f2e9e6Glenn Kasten            offsetof(CAudioRecorder, mAndroidConfiguration)},
130677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    /* marked explicit for Android implementation, not an SL ES explicit interface */
131677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    {MPH_ANDROIDACOUSTICECHOCANCELLATION, INTERFACE_EXPLICIT, offsetof(CAudioRecorder,
132f8b3141926967ba37d315cc8d3956d7214958e6bPaul McLean                                                              mAcousticEchoCancellation)},
133677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    /* marked explicit for Android implementation, not an SL ES explicit interface */
134677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    {MPH_ANDROIDAUTOMATICGAINCONTROL, INTERFACE_EXPLICIT, offsetof(CAudioRecorder,
135f8b3141926967ba37d315cc8d3956d7214958e6bPaul McLean                                                                   mAutomaticGainControl)},
136677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    /* marked explicit for Android implementation, not an SL ES explicit interface */
137677c796097b542e9ee6cf43a59e754f43c2370dcEric Laurent    {MPH_ANDROIDNOISESUPPRESSION, INTERFACE_EXPLICIT, offsetof(CAudioRecorder, mNoiseSuppression)},
1383af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi#endif
139b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
140b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
141b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CAudioRecorder_class = {
142b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    AudioRecorder_interfaces,
143510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_AudioRecorder,
144b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_AudioRecorder,
145b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "AudioRecorder",
146b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CAudioRecorder),
147b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_AUDIORECORDER,
1488b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenMAX AL object ID
1493af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi    CAudioRecorder_Realize,
1503af2a8dd03f3113d5da1000dd79c143a9f0c4f36Jean-Michel Trivi    CAudioRecorder_Resume,
151928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CAudioRecorder_Destroy,
152928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CAudioRecorder_PreDestroy
153b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
154b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
155c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
156c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
157c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
158b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// Engine class
159b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
160510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable Engine_interfaces[INTERFACES_Engine] = {
161104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CEngine, mObject)},
162711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
163b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CEngine, mDynamicInterfaceManagement)},
1647a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_ENGINE, INTERFACE_IMPLICIT, offsetof(CEngine, mEngine)},
165c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_ENGINECAPABILITIES, INTERFACE_IMPLICIT_BASE, offsetof(CEngine, mEngineCapabilities)},
166c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_THREADSYNC, INTERFACE_IMPLICIT_BASE, offsetof(CEngine, mThreadSync)},
167c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_AUDIOIODEVICECAPABILITIES, INTERFACE_IMPLICIT_BASE,
168b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CEngine, mAudioIODeviceCapabilities)},
169c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_AUDIODECODERCAPABILITIES, INTERFACE_EXPLICIT_BASE,
170b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CEngine, mAudioDecoderCapabilities)},
171c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_AUDIOENCODERCAPABILITIES, INTERFACE_EXPLICIT_BASE,
172b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CEngine, mAudioEncoderCapabilities)},
173c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DCOMMIT, INTERFACE_EXPLICIT_GAME, offsetof(CEngine, m3DCommit)},
1745e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_DEVICEVOLUME, INTERFACE_OPTIONAL, offsetof(CEngine, mDeviceVolume)},
1758db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    {MPH_XAENGINE, INTERFACE_IMPLICIT, offsetof(CEngine, mXAEngine)},
176928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten#ifdef ANDROID
1775e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_ANDROIDEFFECTCAPABILITIES, INTERFACE_EXPLICIT,
1785e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten        offsetof(CEngine, mAndroidEffectCapabilities)},
179928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten#endif
1806e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi    {MPH_XAVIDEODECODERCAPABILITIES, INTERFACE_EXPLICIT,
1816e7e174807fc639c49125ced8962aa369370fbf0Jean-Michel Trivi        offsetof(CEngine, mVideoDecoderCapabilities)},
182b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
183b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
184b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CEngine_class = {
185b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    Engine_interfaces,
186510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_Engine,
187b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_Engine,
188b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "Engine",
189b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CEngine),
190b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_ENGINE,
1918b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_ENGINE,
192d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten    CEngine_Realize,
193928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CEngine_Resume,
194928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CEngine_Destroy,
195928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    CEngine_PreDestroy
196b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
197b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
198c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
199c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_OPTIONAL
200c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
201b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// LEDDevice class
202b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
203510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable LEDDevice_interfaces[INTERFACES_LEDDevice] = {
204104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CLEDDevice, mObject)},
205b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
206b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CLEDDevice, mDynamicInterfaceManagement)},
2075e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_LED, INTERFACE_IMPLICIT, offsetof(CLEDDevice, mLEDArray)},
208b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
209b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
210b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CLEDDevice_class = {
211b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    LEDDevice_interfaces,
212510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_LEDDevice,
213b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_LEDDevice,
214b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "LEDDevice",
215b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CLEDDevice),
216b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_LEDDEVICE,
2178b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_LEDDEVICE,
218b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
219b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
220928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
221b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL
222b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
223b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
224c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
225c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
226c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
227c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_GAME
228c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
229b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// Listener class
230b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
231510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable Listener_interfaces[INTERFACES_Listener] = {
232104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CListener, mObject)},
233b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
234b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CListener, mDynamicInterfaceManagement)},
235f51dba65751107c930759938775b75531ec1f330Glenn Kasten    {MPH_3DDOPPLER, INTERFACE_DYNAMIC_GAME, offsetof(CListener, m3DDoppler)},
2365e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_3DLOCATION, INTERFACE_EXPLICIT_GAME, offsetof(CListener, m3DLocation)},
237b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
238b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
239b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CListener_class = {
240b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    Listener_interfaces,
241510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_Listener,
242b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_Listener,
243b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "Listener",
244b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CListener),
245b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_LISTENER,
2468b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenMAX AL object ID
247b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
248b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
249928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
250b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL
251b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
252b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
253c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
254c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
255c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
256c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & (USE_PROFILES_GAME | USE_PROFILES_MUSIC)
257c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
258b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// MetadataExtractor class
259b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
260510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable MetadataExtractor_interfaces[INTERFACES_MetadataExtractor] = {
261104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CMetadataExtractor, mObject)},
262b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
263b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CMetadataExtractor, mDynamicInterfaceManagement)},
2647a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_DYNAMICSOURCE, INTERFACE_IMPLICIT, offsetof(CMetadataExtractor, mDynamicSource)},
2657a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_METADATAEXTRACTION, INTERFACE_IMPLICIT, offsetof(CMetadataExtractor, mMetadataExtraction)},
2665e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_METADATATRAVERSAL, INTERFACE_IMPLICIT, offsetof(CMetadataExtractor, mMetadataTraversal)},
267b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
268b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
269b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CMetadataExtractor_class = {
270b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MetadataExtractor_interfaces,
271510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_MetadataExtractor,
272b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_MetadataExtractor,
273b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "MetadataExtractor",
274b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CMetadataExtractor),
275b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_METADATAEXTRACTOR,
2768b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_METADATAEXTRACTOR,
277b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
278b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
279928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
280b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL
281b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
282b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
283c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
284c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
285c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
286c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_GAME
287c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
288b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// MidiPlayer class
289b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
290510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable MidiPlayer_interfaces[INTERFACES_MidiPlayer] = {
291104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CMidiPlayer, mObject)},
292b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
293b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CMidiPlayer, mDynamicInterfaceManagement)},
2947a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_PLAY, INTERFACE_IMPLICIT, offsetof(CMidiPlayer, mPlay)},
2957a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DDOPPLER, INTERFACE_DYNAMIC_GAME, offsetof(C3DGroup, m3DDoppler)},
296c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DGROUPING, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, m3DGrouping)},
297c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DLOCATION, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, m3DLocation)},
298c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_3DSOURCE, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, m3DSource)},
299c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_BUFFERQUEUE, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, mBufferQueue)},
300c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_EFFECTSEND, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, mEffectSend)},
301c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_MUTESOLO, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, mMuteSolo)},
302c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_METADATAEXTRACTION, INTERFACE_DYNAMIC_GAME, offsetof(CMidiPlayer, mMetadataExtraction)},
303c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_METADATATRAVERSAL, INTERFACE_DYNAMIC_GAME, offsetof(CMidiPlayer, mMetadataTraversal)},
304c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_MIDIMESSAGE, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mMIDIMessage)},
305c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_MIDITIME, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mMIDITime)},
306c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_MIDITEMPO, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mMIDITempo)},
307c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_MIDIMUTESOLO, INTERFACE_EXPLICIT_GAME, offsetof(CMidiPlayer, mMIDIMuteSolo)},
308c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_PREFETCHSTATUS, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mPrefetchStatus)},
309c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_SEEK, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mSeek)},
310c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_VOLUME, INTERFACE_EXPLICIT_GAME_PHONE, offsetof(CMidiPlayer, mVolume)},
3117a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_3DMACROSCOPIC, INTERFACE_OPTIONAL, offsetof(CMidiPlayer, m3DMacroscopic)},
312c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_BASSBOOST, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mBassBoost)},
3137a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_DYNAMICSOURCE, INTERFACE_OPTIONAL, offsetof(CMidiPlayer, mDynamicSource)},
314fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten    {MPH_ENVIRONMENTALREVERB, INTERFACE_DYNAMIC_OPTIONAL,
315fe96fa06360516c60490c7a697e1148017b4c1b2Glenn Kasten        offsetof(CMidiPlayer, mEnvironmentalReverb)},
316c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_EQUALIZER, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mEqualizer)},
317c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_PITCH, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mPitch)},
318c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_PRESETREVERB, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mPresetReverb)},
319c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_PLAYBACKRATE, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mPlaybackRate)},
320c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    {MPH_VIRTUALIZER, INTERFACE_DYNAMIC_OPTIONAL, offsetof(CMidiPlayer, mVirtualizer)},
3217a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_VISUALIZATION, INTERFACE_OPTIONAL, offsetof(CMidiPlayer, mVisualization)},
322b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
323b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
324b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CMidiPlayer_class = {
325b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MidiPlayer_interfaces,
326510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_MidiPlayer,
327b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_MidiPlayer,
328b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "MidiPlayer",
329b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CMidiPlayer),
330b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_MIDIPLAYER,
3318b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenMAX AL object ID
332b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
333b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
334928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
335b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL
336b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
337b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
338c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
339c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
340c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
341b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// OutputMix class
342b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
343510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable OutputMix_interfaces[INTERFACES_OutputMix] = {
344104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(COutputMix, mObject)},
345711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
346b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(COutputMix, mDynamicInterfaceManagement)},
3477a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten    {MPH_OUTPUTMIX, INTERFACE_IMPLICIT, offsetof(COutputMix, mOutputMix)},
348b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#ifdef USE_OUTPUTMIXEXT
349711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_OUTPUTMIXEXT, INTERFACE_UNAVAILABLE, offsetof(COutputMix, mOutputMixExt)},
350b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#else
351a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten    {MPH_OUTPUTMIXEXT, INTERFACE_UNAVAILABLE, 0},
352b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#endif
353711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_ENVIRONMENTALREVERB, INTERFACE_DYNAMIC,
354104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten        offsetof(COutputMix, mEnvironmentalReverb)},
355711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_EQUALIZER, INTERFACE_DYNAMIC, offsetof(COutputMix, mEqualizer)},
356711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_PRESETREVERB, INTERFACE_DYNAMIC, offsetof(COutputMix, mPresetReverb)},
357711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_VIRTUALIZER, INTERFACE_DYNAMIC, offsetof(COutputMix, mVirtualizer)},
358104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    // The overall Volume interface is explicit optional,
359c3845706778edec308bd9ced559cec0a456608bdGlenn Kasten    // but portions of Volume are mandated only in Game and Music profiles
360104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_VOLUME, INTERFACE_OPTIONAL, offsetof(COutputMix, mVolume)},
361711332800108ad6e0e594796e5f8db0da3eff402Glenn Kasten    {MPH_BASSBOOST, INTERFACE_DYNAMIC, offsetof(COutputMix, mBassBoost)},
36249e4cfeedc0f8e571d301384084397054b4922f8Jean-Michel Trivi    {MPH_VISUALIZATION, INTERFACE_OPTIONAL, offsetof(COutputMix, mVisualization)},
36349e4cfeedc0f8e571d301384084397054b4922f8Jean-Michel Trivi#ifdef ANDROID
36449e4cfeedc0f8e571d301384084397054b4922f8Jean-Michel Trivi    {MPH_ANDROIDEFFECT, INTERFACE_EXPLICIT, offsetof(COutputMix, mAndroidEffect)},
36549e4cfeedc0f8e571d301384084397054b4922f8Jean-Michel Trivi#endif
366b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
367b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
368b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable COutputMix_class = {
369b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    OutputMix_interfaces,
370510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_OutputMix,
371b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_OutputMix,
372b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "OutputMix",
373b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(COutputMix),
374b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_OUTPUTMIX,
3758b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_OUTPUTMIX,
3767e01bc6208fb5b4a2a0019d67bf74373f8ee9428Jean-Michel Trivi    COutputMix_Realize,
3777e01bc6208fb5b4a2a0019d67bf74373f8ee9428Jean-Michel Trivi    COutputMix_Resume,
378928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    COutputMix_Destroy,
379928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    COutputMix_PreDestroy
380b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
381b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
382c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
383c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_OPTIONAL
384c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
385b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten// Vibra class
386b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
387510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kastenstatic const struct iid_vtable VibraDevice_interfaces[INTERFACES_VibraDevice] = {
388104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    {MPH_OBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CVibraDevice, mObject)},
389a438eb1cf1ae602afab00336528dd230bd929206Glenn Kasten    {MPH_DYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
390b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten        offsetof(CVibraDevice, mDynamicInterfaceManagement)},
3915e3b06982dbf1eae237cc74326e66d51d3cdd664Glenn Kasten    {MPH_VIBRA, INTERFACE_IMPLICIT, offsetof(CVibraDevice, mVibra)},
392b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
393b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
394b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic const ClassTable CVibraDevice_class = {
395b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    VibraDevice_interfaces,
396510f3671f716f6835282e4b0fd0275c20e9dadd8Glenn Kasten    INTERFACES_VibraDevice,
397b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    MPH_to_Vibra,
398b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    "VibraDevice",
399b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    sizeof(CVibraDevice),
400b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    SL_OBJECTID_VIBRADEVICE,
4018b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_VIBRADEVICE,
402b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
403b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL,
404928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten    NULL,
405b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    NULL
406b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
407b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
408c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
409c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
410b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
4118b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten// Media player class
4128b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
4138b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastenstatic const struct iid_vtable MediaPlayer_interfaces[INTERFACES_MediaPlayer] = {
414a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    {MPH_XAOBJECT, INTERFACE_IMPLICIT_PREREALIZE, offsetof(CMediaPlayer, mObject)},
415a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    {MPH_XADYNAMICINTERFACEMANAGEMENT, INTERFACE_IMPLICIT,
4168b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten        offsetof(CMediaPlayer, mDynamicInterfaceManagement)},
41794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    {MPH_XAPLAY, INTERFACE_IMPLICIT, offsetof(CMediaPlayer, mPlay)},
41837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi    {MPH_XASTREAMINFORMATION, INTERFACE_EXPLICIT, offsetof(CMediaPlayer, mStreamInfo)},
41937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi    {MPH_XAVOLUME, INTERFACE_IMPLICIT, offsetof(CMediaPlayer, mVolume)},
42092b245bf8828db9e469febebbe8774c00570b5b9Jean-Michel Trivi    {MPH_XASEEK, INTERFACE_EXPLICIT, offsetof(CMediaPlayer, mSeek)},
421c623c89c0a32c5fc77c998f1742d58e7be69e8c1Glenn Kasten    {MPH_XAPREFETCHSTATUS, INTERFACE_EXPLICIT, offsetof(CMediaPlayer, mPrefetchStatus)},
422eba01e9626bb1801e0666f4e187ae09b5e649d70Glenn Kasten#ifdef ANDROID
42360ca9f9ef02f6e486c3338cb811f603dd7825c05Glenn Kasten    {MPH_ANDROIDBUFFERQUEUESOURCE, INTERFACE_EXPLICIT, offsetof(CMediaPlayer, mAndroidBufferQueue)},
424eba01e9626bb1801e0666f4e187ae09b5e649d70Glenn Kasten#endif
4258b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten};
4268b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
4278b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastenstatic const ClassTable CMediaPlayer_class = {
4288b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    MediaPlayer_interfaces,
4298b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    INTERFACES_MediaPlayer,
4308b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    MPH_to_MediaPlayer,
4318b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    "MediaPlayer",
4328b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    sizeof(CMediaPlayer),
4338b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    0,      // OpenSL ES object ID
4348b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    XA_OBJECTID_MEDIAPLAYER,
43594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    CMediaPlayer_Realize,
43694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    CMediaPlayer_Resume,
43794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    CMediaPlayer_Destroy,
43894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    CMediaPlayer_PreDestroy
4398b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten};
4408b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
4418b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten
4428b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kastenstatic const ClassTable * const slClasses[] = {
443b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    // Do not change order of these entries; they are in numerical order
444b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CEngine_class,
445c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_OPTIONAL
446b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CLEDDevice_class,
447b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CVibraDevice_class,
448c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#else
449c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
450c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
451c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
452b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CAudioPlayer_class,
453c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if (USE_PROFILES & USE_PROFILES_OPTIONAL) || defined(ANDROID)
454b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CAudioRecorder_class,
455c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#else
456c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
457c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
458c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & (USE_PROFILES_GAME | USE_PROFILES_PHONE)
459b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CMidiPlayer_class,
460c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#else
461c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
462c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
463c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & USE_PROFILES_GAME
464b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CListener_class,
465b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &C3DGroup_class,
466c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#else
467c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
468c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL,
469c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
470b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &COutputMix_class,
471c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#if USE_PROFILES & (USE_PROFILES_GAME | USE_PROFILES_MUSIC)
472b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten    &CMetadataExtractor_class
473c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#else
474c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten    NULL
475c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten#endif
476b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten};
477b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten
478c2b9d79c4b59caff965076f445f5a735a360b084Glenn Kasten
4798db0b106cdce5f5216b1535492de7930ad738aedGlenn Kastenstatic const ClassTable * const xaClasses[] = {
4808db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    &CEngine_class,
4818db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#if USE_PROFILES & USE_PROFILES_OPTIONAL
4828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    &CLEDDevice_class,
4838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    &CVibraDevice_class,
4848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#else
4858db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL,
4868db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL,
4878db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif
4888b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    &CMediaPlayer_class,
4898db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#if 1
4908db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL,
4918db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL,
4928db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#else
4938b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    &CMediaRecorder_class,
4948b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    &CRadioDevice_class,
4958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif
4968db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    &COutputMix_class,
4978db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#if USE_PROFILES & (USE_PROFILES_GAME | USE_PROFILES_MUSIC)
4988db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    &CMetadataExtractor_class,
4998db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#else
5008db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL,
5018db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif
5028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#if 1
5038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    NULL
5048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#else
5058b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    &CCameraDevice_class
5068db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#endif
5078db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten};
5088db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
5098db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
5108b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten/* \brief Map SL_OBJECTID to class or NULL if object ID not supported */
5118db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
512527f8ca99f2938d6569fc25dcf3256985a54dec6Glenn KastenLI_API const ClassTable *objectIDtoClass(SLuint32 objectID)
5138db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{
5148db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    // object ID is the engine and always present
5158b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    assert(NULL != slClasses[0]);
5168b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    SLuint32 slObjectID0 = slClasses[0]->mSLObjectID;
5178b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    if ((slObjectID0 <= objectID) && ((slObjectID0 + sizeof(slClasses)/sizeof(slClasses[0])) >
5188b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten            objectID)) {
5198b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten        return slClasses[objectID - slObjectID0];
5208b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    }
5218db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    assert(NULL != xaClasses[0]);
5228b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    SLuint32 xaObjectID0 = xaClasses[0]->mXAObjectID;
5238b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    if ((xaObjectID0 <= objectID) && ((xaObjectID0 + sizeof(xaClasses)/sizeof(xaClasses[0])) >
5248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten            objectID)) {
5258b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten        return xaClasses[objectID - xaObjectID0];
5268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    }
5278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    return NULL;
5288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten}
529