diff options
Diffstat (limited to 'services/audioflinger/AudioFlinger.h')
| -rw-r--r-- | services/audioflinger/AudioFlinger.h | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index ec3d202..39314ad 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -32,12 +32,14 @@ #include <utils/Errors.h> #include <utils/threads.h> #include <utils/SortedVector.h> +#include <utils/TypeHelpers.h> #include <utils/Vector.h> #include <binder/BinderService.h> #include <binder/MemoryDealer.h> -#include <hardware_legacy/AudioHardwareInterface.h> +#include <system/audio.h> +#include <hardware/audio_hal.h> #include "AudioBufferProvider.h" @@ -49,7 +51,6 @@ class AudioMixer; class AudioBuffer; class AudioResampler; - // ---------------------------------------------------------------------------- #define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) @@ -211,6 +212,9 @@ private: AudioFlinger(); virtual ~AudioFlinger(); + status_t initCheck() const; + virtual void onFirstRef(); + audio_hw_device_t* findSuitableHwDev_l(uint32_t devices); // Internal dump utilites. status_t dumpPermissionDenial(int fd, const Vector<String16>& args); @@ -268,6 +272,8 @@ private: class EffectModule; class EffectHandle; class EffectChain; + struct AudioStreamOut; + struct AudioStreamIn; class ThreadBase : public Thread { public: @@ -495,7 +501,7 @@ private: void reset(); bool isOutputTrack() const { - return (mStreamType == AudioSystem::NUM_STREAM_TYPES); + return (mStreamType == AUDIO_STREAM_CNT); } // we don't really need a lock for these @@ -678,6 +684,7 @@ private: status_t addTrack_l(const sp<Track>& track); void destroyTrack_l(const sp<Track>& track); + void removeTrack_l(const sp<Track>& track); void readOutputParameters(); @@ -689,7 +696,7 @@ private: SortedVector< sp<Track> > mTracks; // mStreamTypes[] uses 1 additionnal stream type internally for the OutputTrack used by DuplicatingThread - stream_type_t mStreamTypes[AudioSystem::NUM_STREAM_TYPES + 1]; + stream_type_t mStreamTypes[AUDIO_STREAM_CNT + 1]; AudioStreamOut* mOutput; float mMasterVolume; nsecs_t mLastWriteTime; @@ -1128,9 +1135,13 @@ private: return mOutBuffer; } - void startTrack() {mActiveTrackCnt++;} - void stopTrack() {mActiveTrackCnt--;} - int activeTracks() { return mActiveTrackCnt;} + void incTrackCnt() { android_atomic_inc(&mTrackCnt); } + void decTrackCnt() { android_atomic_dec(&mTrackCnt); } + int32_t trackCnt() { return mTrackCnt;} + + void incActiveTrackCnt() { android_atomic_inc(&mActiveTrackCnt); } + void decActiveTrackCnt() { android_atomic_dec(&mActiveTrackCnt); } + int32_t activeTrackCnt() { return mActiveTrackCnt;} uint32_t strategy() { return mStrategy; } void setStrategy(uint32_t strategy) @@ -1149,7 +1160,8 @@ private: int mSessionId; // audio session ID int16_t *mInBuffer; // chain input buffer int16_t *mOutBuffer; // chain output buffer - int mActiveTrackCnt; // number of active tracks connected + volatile int32_t mActiveTrackCnt; // number of active tracks connected + volatile int32_t mTrackCnt; // number of tracks connected bool mOwnInBuffer; // true if the chain owns its input buffer int mVolumeCtrlIdx; // index of insert effect having control over volume uint32_t mLeftVolume; // previous volume on left channel @@ -1159,21 +1171,37 @@ private: uint32_t mStrategy; // strategy for this effect chain }; + struct AudioStreamOut { + audio_hw_device_t *hwDev; + audio_stream_out_t *stream; + + AudioStreamOut(audio_hw_device_t *dev, audio_stream_out_t *out) : + hwDev(dev), stream(out) {} + }; + + struct AudioStreamIn { + audio_hw_device_t *hwDev; + audio_stream_in_t *stream; + + AudioStreamIn(audio_hw_device_t *dev, audio_stream_in_t *in) : + hwDev(dev), stream(in) {} + }; + friend class RecordThread; friend class PlaybackThread; - mutable Mutex mLock; DefaultKeyedVector< pid_t, wp<Client> > mClients; mutable Mutex mHardwareLock; - AudioHardwareInterface* mAudioHardware; + audio_hw_device_t* mPrimaryHardwareDev; + Vector<audio_hw_device_t*> mAudioHwDevs; mutable int mHardwareStatus; DefaultKeyedVector< int, sp<PlaybackThread> > mPlaybackThreads; - PlaybackThread::stream_type_t mStreamTypes[AudioSystem::NUM_STREAM_TYPES]; + PlaybackThread::stream_type_t mStreamTypes[AUDIO_STREAM_CNT]; float mMasterVolume; bool mMasterMute; @@ -1185,6 +1213,7 @@ private: }; + // ---------------------------------------------------------------------------- }; // namespace android |
