classes.h revision 10d8b6a5f9a7c24203e3ee228ec596d03c1aa78d
17c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project/*
27c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project
37c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project *
47c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * you may not use this file except in compliance with the License.
67c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * You may obtain a copy of the License at
77c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project *
87c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project *
107c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * See the License for the specific language governing permissions and
147c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project * limitations under the License.
157c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project */
167c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
177c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#include "Configuration.h"
187c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
197c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#include "android/CallbackProtector.h"
20c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include "android/android_Effect.h"
217c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#include "android/android_GenericPlayer.h"
22702ea9d42f52fc145090c0f0bfbe64993e4b8b33Brad Fitzpatrick#endif
23c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian
24c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian// Class structures
257c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
26c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian
277c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project/*typedef*/ struct CAudioPlayer_struct {
287c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
297c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
307c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_AudioPlayer 30 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces
317c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#else
3298e71ddaede9a0bfb681fd237bec1f66c6c53193Mathias Agopian#define INTERFACES_AudioPlayer 26 // see MPH_to_AudioPlayer in MPH_to.c for list of interfaces
335707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown#endif
347c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_AudioPlayer - INTERFACES_Default];
35208059f67ed2dd9fa025e07fcb6954d3cb61c79eMathias Agopian    IDynamicInterfaceManagement mDynamicInterfaceManagement;
367c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPlay mPlay;
377c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DDoppler m3DDoppler;
387c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DGrouping m3DGrouping;
397c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DLocation m3DLocation;
405707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    I3DSource m3DSource;
417c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBufferQueue mBufferQueue;
427c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEffectSend mEffectSend;
437c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataExtraction mMetadataExtraction;
447c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataTraversal mMetadataTraversal;
457c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPrefetchStatus mPrefetchStatus;
467c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IRatePitch mRatePitch;
477c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    ISeek mSeek;
487c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVolume mVolume;
497c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMuteSolo mMuteSolo;
507c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
517c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidEffect mAndroidEffect;
527c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidEffectSend mAndroidEffectSend;
53a877cd85b5a026384542e3271fc310d6a8fe24c6Brad Fitzpatrick    IAndroidConfiguration mAndroidConfiguration;
54a877cd85b5a026384542e3271fc310d6a8fe24c6Brad Fitzpatrick    IAndroidBufferQueue mAndroidBufferQueue;
55a877cd85b5a026384542e3271fc310d6a8fe24c6Brad Fitzpatrick#endif
56d36f4a5f130be7f7b29a8b63cedbc8edfa56db96Brad Fitzpatrick    // optional interfaces
57d36f4a5f130be7f7b29a8b63cedbc8edfa56db96Brad Fitzpatrick    I3DMacroscopic m3DMacroscopic;
58d36f4a5f130be7f7b29a8b63cedbc8edfa56db96Brad Fitzpatrick    IBassBoost mBassBoost;
595707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    IDynamicSource mDynamicSource;
605707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    IEnvironmentalReverb mEnvironmentalReverb;
615707dbf15d0b44c88fbaa6dd271097f2d42932e0Jeff Brown    IEqualizer mEqualizer;
627c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPitch mPitch;
637c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPresetReverb mPresetReverb;
647c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPlaybackRate mPlaybackRate;
657c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVirtualizer mVirtualizer;
667c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVisualization mVisualization;
677c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // fields below are per-instance private fields not associated with an interface
687c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mDataSource;
697c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mDataSink;
707c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // cached data for this instance
717c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // Formerly at IMuteSolo
727c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mMuteMask;      // Mask for which channels are muted: bit 0=left, 1=right
737c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mSoloMask;      // Mask for which channels are soloed: bit 0=left, 1=right
747c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mNumChannels;   // initially UNKNOWN_NUMCHANNELS, then const once it is known,
757c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project                            // range 1 <= x <= FCC_8
767c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // End of former IMuteSolo fields
777c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known
787c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // Formerly at IEffectSend
797c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /**
807c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project     * Dry volume modified by effect send interfaces: SLEffectSendItf and SLAndroidEffectSendItf
817c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project     */
827c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLmillibel mDirectLevel;
837c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // implementation-specific data for this instance
847c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef USE_OUTPUTMIXEXT
857c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    Track *mTrack;
867c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    float mGains[STEREO_CHANNELS];  ///< Computed gain based on volume, mute, solo, stereo position
877c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLboolean mDestroyRequested;    ///< Mixer to acknowledge application's call to Object::Destroy
887c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
897c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef USE_SNDFILE
907c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    struct SndFile mSndFile;
917c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif // USE_SNDFILE
927c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
937c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    enum AndroidObjectType mAndroidObjType;
947c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** identifies the initialization and preparation state */
957c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    enum AndroidObjectState mAndroidObjState;
967c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** identifies which group of effects ("session") this player belongs to */
977c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    int mSessionId;
987c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** identifies the Android stream type playback will occur on */
997c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    audio_stream_type_t mStreamType;
1007c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // FIXME consolidate the next several variables into one class to avoid placement new
1017c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** plays the PCM data for this player */
1027c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::AudioTrack> mAudioTrack;
1037c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::CallbackProtector> mCallbackProtector;
1047c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::GenericPlayer> mAPlayer;
1057c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** aux effect the AudioTrack will be attached to if aux send enabled */
1067c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::AudioEffect> mAuxEffect;
1077c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // FIXME all levels below need to be encapsulated in a field of type AndroidAudioLevels
1087c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** send level to aux effect, there's a single aux bus, so there's a single level */
1097c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLmillibel mAuxSendLevel;
1107c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /**
1117c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project     * Attenuation factor derived from direct level
1127c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project     */
1137c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    float mAmplFromDirectLevel;
1147c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** FIXME whether to call AudioTrack::start() at the next safe opportunity */
1157c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    bool mDeferredStart;
1167c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1177c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} /*CAudioPlayer*/;
1187c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
1197c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
1207c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project/*typedef*/ struct CAudioRecorder_struct {
1217c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
1227c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
1237c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
1247c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_AudioRecorder 14 // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces
1257c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#else
1267c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_AudioRecorder 9  // see MPH_to_AudioRecorder in MPH_to.c for list of interfaces
1277c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1287c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_AudioRecorder - INTERFACES_Default];
1297c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
1307c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IRecord mRecord;
1317c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAudioEncoder mAudioEncoder;
1327c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // optional interfaces
1337c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBassBoost mBassBoost;
1347c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicSource mDynamicSource;
1357c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEqualizer mEqualizer;
1367c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVisualization mVisualization;
1377c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVolume mVolume;
1387c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
1397c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBufferQueue mBufferQueue;
1407c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidConfiguration mAndroidConfiguration;
1417c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidAcousticEchoCancellation  mAcousticEchoCancellation;
1427c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidAutomaticGainControl mAutomaticGainControl;
1437c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidNoiseSuppression mNoiseSuppression;
1447c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1457c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
1467c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mDataSource;
1477c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mDataSink;
1487c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // cached data for this instance
1497c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mNumChannels;   // initially UNKNOWN_NUMCHANNELS, then const once it is known,
1507c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project                            // range 1 <= x <= FCC_8
1517c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint32 mSampleRateMilliHz;// initially UNKNOWN_SAMPLERATE, then const once it is known
1527c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // implementation-specific data for this instance
1537c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
1547c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // FIXME consolidate the next several variables into ARecorder class to avoid placement new
1557c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    enum AndroidObjectType mAndroidObjType;
1567c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::AudioRecord> mAudioRecord;
1577c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::CallbackProtector> mCallbackProtector;
1587c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    audio_source_t mRecordSource;
1597c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1607c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} /*CAudioRecorder*/;
1617c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
1627c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
1637c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project/*typedef*/ struct CEngine_struct {
1647c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated implicit interfaces
1657c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
1667c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
1677c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_Engine 13 // see MPH_to_Engine in MPH_to.c for list of interfaces
1687c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#else
1697c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_Engine 12 // see MPH_to_Engine in MPH_to.c for list of interfaces
1707c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1717c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_Engine - INTERFACES_Default];
1727c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
1737c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEngine mEngine;
1747c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEngineCapabilities mEngineCapabilities;
1757c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IThreadSync mThreadSync;
1767c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated explicit interfaces
1777c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAudioIODeviceCapabilities mAudioIODeviceCapabilities;
1787c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAudioDecoderCapabilities mAudioDecoderCapabilities;
1797c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAudioEncoderCapabilities mAudioEncoderCapabilities;
1807c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DCommit m3DCommit;
1817c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // optional interfaces
1827c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDeviceVolume mDeviceVolume;
1837c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // OpenMAX AL mandated implicit interfaces
1847c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IXAEngine mXAEngine;
1857c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
1867c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidEffectCapabilities mAndroidEffectCapabilities;
1877c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1887c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // OpenMAX AL explicit interfaces
1897c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVideoDecoderCapabilities mVideoDecoderCapabilities;
1907c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
1917c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    ThreadPool mThreadPool; // for asynchronous operations
1927c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    pthread_t mSyncThread;
1937c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#if defined(ANDROID)
1947c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // FIXME number of presets will only be saved in IEqualizer, preset names will not be stored
1957c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint32 mEqNumPresets;
1967c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    char** mEqPresetNames;
1977c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
1987c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} /*CEngine*/;
1997c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2007c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct {
2017c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
2027c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
2037c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_LEDDevice 3 // see MPH_to_LEDDevice in MPH_to.c for list of interfaces
2047c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_LEDDevice - INTERFACES_Default];
2057c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
2067c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    ILEDArray mLEDArray;
2077c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
2087c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint32 mDeviceID;
2097c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CLEDDevice;
2107c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2117c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct {
2127c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
2137c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
2147c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_Listener 4 // see MPH_to_Listener in MPH_to.c for list of interfaces
2157c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_Listener - INTERFACES_Default];
2167c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
2177c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DDoppler m3DDoppler;
2187c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DLocation m3DLocation;
2197c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
2207c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CListener;
2217c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2227c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct {
2237c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
2247c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
2257c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_MetadataExtractor 5 // see MPH_to_MetadataExtractor in MPH_to.c for list of
2267c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project                                       // interfaces
2277c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_MetadataExtractor - INTERFACES_Default];
2287c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
2297c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicSource mDynamicSource;
2307c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataExtraction mMetadataExtraction;
2317c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataTraversal mMetadataTraversal;
2327c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
2337c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CMetadataExtractor;
2347c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2357c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct {
2367c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
2377c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
2387c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2397c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_MidiPlayer 29 // see MPH_to_MidiPlayer in MPH_to.c for list of interfaces
2407c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_MidiPlayer - INTERFACES_Default];
2417c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
2427c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPlay mPlay;
2437c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DDoppler m3DDoppler;
2447c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DGrouping m3DGrouping;
2457c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DLocation m3DLocation;
2467c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DSource m3DSource;
2477c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBufferQueue mBufferQueue;
2487c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEffectSend mEffectSend;
2497c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataExtraction mMetadataExtraction;
2507c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMetadataTraversal mMetadataTraversal;
2517c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMIDIMessage mMIDIMessage;
2527c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMIDITime mMIDITime;
2537c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMIDITempo mMIDITempo;
2547c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMIDIMuteSolo mMIDIMuteSolo;
2557c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPrefetchStatus mPrefetchStatus;
2567c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    ISeek mSeek;
2577c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVolume mVolume;
2587c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IMuteSolo mMuteSolo;
2597c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // optional interfaces
2607c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    I3DMacroscopic m3DMacroscopic;
2617c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBassBoost mBassBoost;
2627c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicSource mDynamicSource;
2637c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEnvironmentalReverb mEnvironmentalReverb;
2647c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEqualizer mEqualizer;
2657c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPitch mPitch;
2667c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPresetReverb mPresetReverb;
2677c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPlaybackRate mPlaybackRate;
2687c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVirtualizer mVirtualizer;
2697c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVisualization mVisualization;
2707c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
2717c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CMidiPlayer;
2727c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
2737c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project/*typedef*/ struct COutputMix_struct {
2747c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
2757c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
2767c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
2777c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_OutputMix 12 // see MPH_to_OutputMix in MPH_to.c for list of interfaces
2787c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#else
2797c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_OutputMix 11 // see MPH_to_OutputMix in MPH_to.c for list of interfaces
2807c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
2817c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_OutputMix - INTERFACES_Default];
2827c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
2837c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IOutputMix mOutputMix;
2847c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef USE_OUTPUTMIXEXT
2857c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IOutputMixExt mOutputMixExt;
2867c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
2877c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEnvironmentalReverb mEnvironmentalReverb;
2887c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IEqualizer mEqualizer;
2897c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPresetReverb mPresetReverb;
2907c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVirtualizer mVirtualizer;
2917c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVolume mVolume;
2927c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // optional interfaces
2937c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IBassBoost mBassBoost;
2947c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVisualization mVisualization;
2957c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
2967c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidEffect mAndroidEffect;
2977c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
2987c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
2997c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} /*COutputMix*/;
3007c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
3017c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct {
3027c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // mandated interfaces
3037c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
3047c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_VibraDevice 3 // see MPH_to_VibraDevice in MPH_to.c for list of interfaces
3057c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mInterfaceStates2[INTERFACES_VibraDevice - INTERFACES_Default];
3067c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
3077c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVibra mVibra;
3087c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // remaining are per-instance private fields not associated with an interface
3097c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint32 mDeviceID;
3107c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CVibraDevice;
3117c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
3127c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project
3137c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Projecttypedef struct CMediaPlayer_struct {
3147c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IObject mObject;
3157c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
3167c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_MediaPlayer 8
3177c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#else
3187c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#define INTERFACES_MediaPlayer 7
3197c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
3207c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    XAuint8 mInterfaceStates2[INTERFACES_MediaPlayer - INTERFACES_Default];
3217c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicInterfaceManagement mDynamicInterfaceManagement;
3227c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IDynamicSource mDynamicSource;
3237c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPlay mPlay;
3247c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IStreamInformation mStreamInfo;
3257c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IVolume mVolume;
3267c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    ISeek mSeek;
3277c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IPrefetchStatus mPrefetchStatus;
3287c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
3297c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    IAndroidBufferQueue mAndroidBufferQueue;
3307c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
3317c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    // fields below are per-instance private fields not associated with an interface
3327c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mDataSource;
3337c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mBankSource;
3347c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mAudioSink;
3357c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mImageVideoSink;
3367c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mVibraSink;
3377c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    DataLocatorFormat mLEDArraySink;
3387c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    SLuint8 mNumChannels;   // initially UNKNOWN_NUMCHANNELS, then const once it is known,
3397c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project                            // range 1 <= x <= 8 FIXME FCC_8
3407c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#ifdef ANDROID
3417c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::GenericPlayer> mAVPlayer;
3427c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    android::sp<android::CallbackProtector> mCallbackProtector;
3437c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    enum AndroidObjectType mAndroidObjType;
3447c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** identifies the initialization and preparation state */
3457c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    enum AndroidObjectState mAndroidObjState;
34697e2bcd76021b31c5064fd3f669bc3f450b4c952Dianne Hackborn    /** identifies which group of effects ("session") this player belongs to */
3477c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    int mSessionId;
3487c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    /** identifies the Android stream type playback will occur on */
3497c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project    audio_stream_type_t mStreamType;
3507c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project#endif
3517c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project} CMediaPlayer;
3527c1b96a165f970a09ed239bb4fb3f1b0d8f2a40The Android Open Source Project