diff options
author | Glenn Kasten <gkasten@google.com> | 2014-02-07 10:50:43 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2014-02-18 12:56:13 -0800 |
commit | 25f4aa83efaa9179e65a20583a6d441de2c3ff3f (patch) | |
tree | 996653f52a07bb6dc99d058943f852f3182ea637 | |
parent | deca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d (diff) | |
download | frameworks_av-25f4aa83efaa9179e65a20583a6d441de2c3ff3f.zip frameworks_av-25f4aa83efaa9179e65a20583a6d441de2c3ff3f.tar.gz frameworks_av-25f4aa83efaa9179e65a20583a6d441de2c3ff3f.tar.bz2 |
Move handleSyncStartEvent and clearSyncStartEvent to RecordTrack
Change-Id: I611a63e63acf3eb17e2072c1a77b91fe9e62e36a
-rw-r--r-- | services/audioflinger/RecordTracks.h | 3 | ||||
-rw-r--r-- | services/audioflinger/Threads.cpp | 38 | ||||
-rw-r--r-- | services/audioflinger/Threads.h | 3 | ||||
-rw-r--r-- | services/audioflinger/Tracks.cpp | 23 |
4 files changed, 33 insertions, 34 deletions
diff --git a/services/audioflinger/RecordTracks.h b/services/audioflinger/RecordTracks.h index 13442c1..3ec9889 100644 --- a/services/audioflinger/RecordTracks.h +++ b/services/audioflinger/RecordTracks.h @@ -47,6 +47,9 @@ public: static void appendDumpHeader(String8& result); void dump(char* buffer, size_t size, bool active); + void handleSyncStartEvent(const sp<SyncEvent>& event); + void clearSyncStartEvent(); + private: friend class AudioFlinger; // for mState diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 32ad8ab..43613aa 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -4809,7 +4809,7 @@ reacquire_wakelock: if (activeTrack->mFramesToDrop > 0) { activeTrack->mFramesToDrop -= framesOut; if (activeTrack->mFramesToDrop <= 0) { - clearSyncStartEvent(activeTrack.get()); + activeTrack->clearSyncStartEvent(); } } else { activeTrack->mFramesToDrop += framesOut; @@ -4820,7 +4820,7 @@ reacquire_wakelock: activeTrack->sessionId(), (activeTrack->mSyncStartEvent != 0) ? activeTrack->mSyncStartEvent->triggerSession() : 0); - clearSyncStartEvent(activeTrack.get()); + activeTrack->clearSyncStartEvent(); } } } @@ -5011,8 +5011,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac status_t status = NO_ERROR; if (event == AudioSystem::SYNC_EVENT_NONE) { - // FIXME hmm should be per-track - clearSyncStartEvent(recordTrack); + recordTrack->clearSyncStartEvent(); } else if (event != AudioSystem::SYNC_EVENT_SAME) { recordTrack->mSyncStartEvent = mAudioFlinger->createSyncEvent(event, triggerSession, @@ -5022,7 +5021,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac // Sync event can be cancelled by the trigger session if the track is not in a // compatible state in which case we start record immediately if (recordTrack->mSyncStartEvent->isCancelled()) { - clearSyncStartEvent(recordTrack); + recordTrack->clearSyncStartEvent(); } else { // do not wait for the event for more than AudioSystem::kSyncRecordStartTimeOutMs recordTrack->mFramesToDrop = - @@ -5053,7 +5052,7 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac if (status != NO_ERROR) { mActiveTracks.remove(recordTrack); mActiveTracksGen++; - clearSyncStartEvent(recordTrack); + recordTrack->clearSyncStartEvent(); return status; } // Catch up with current buffer indices if thread is already running. @@ -5080,41 +5079,18 @@ status_t AudioFlinger::RecordThread::start(RecordThread::RecordTrack* recordTrac startError: AudioSystem::stopInput(mId); - clearSyncStartEvent(recordTrack); + recordTrack->clearSyncStartEvent(); // FIXME I wonder why we do not reset the state here? return status; } -void AudioFlinger::RecordThread::clearSyncStartEvent(RecordThread::RecordTrack* recordTrack) -{ - if (recordTrack->mSyncStartEvent != 0) { - recordTrack->mSyncStartEvent->cancel(); - recordTrack->mSyncStartEvent.clear(); - } - recordTrack->mFramesToDrop = 0; -} - void AudioFlinger::RecordThread::syncStartEventCallback(const wp<SyncEvent>& event) { sp<SyncEvent> strongEvent = event.promote(); if (strongEvent != 0) { RecordTrack *recordTrack = (RecordTrack *)strongEvent->cookie(); - sp<ThreadBase> threadBase = recordTrack->mThread.promote(); - if (threadBase != 0) { - RecordThread *me = (RecordThread *) threadBase.get(); - me->handleSyncStartEvent(recordTrack, strongEvent); - } - } -} - -void AudioFlinger::RecordThread::handleSyncStartEvent( - RecordThread::RecordTrack* recordTrack, const sp<SyncEvent>& event) -{ - if (event == recordTrack->mSyncStartEvent) { - // TODO: use actual buffer filling status instead of 2 buffers when info is available - // from audio HAL - recordTrack->mFramesToDrop = mFrameCount * 2; + recordTrack->handleSyncStartEvent(strongEvent); } } diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h index 904c292..8d81174 100644 --- a/services/audioflinger/Threads.h +++ b/services/audioflinger/Threads.h @@ -931,14 +931,11 @@ public: virtual bool isValidSyncEvent(const sp<SyncEvent>& event) const; static void syncStartEventCallback(const wp<SyncEvent>& event); - void handleSyncStartEvent(RecordTrack *recordTrack, const sp<SyncEvent>& event); virtual size_t frameCount() const { return mFrameCount; } bool hasFastRecorder() const { return false; } private: - void clearSyncStartEvent(RecordTrack* recordTrack); - // Enter standby if not already in standby, and set mStandby flag void standbyIfNotAlreadyInStandby(); diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index da1b4b8..92ed46a 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -1903,4 +1903,27 @@ void AudioFlinger::RecordThread::RecordTrack::dump(char* buffer, size_t size, bo } +void AudioFlinger::RecordThread::RecordTrack::handleSyncStartEvent(const sp<SyncEvent>& event) +{ + if (event == mSyncStartEvent) { + ssize_t framesToDrop = 0; + sp<ThreadBase> threadBase = mThread.promote(); + if (threadBase != 0) { + // TODO: use actual buffer filling status instead of 2 buffers when info is available + // from audio HAL + framesToDrop = threadBase->mFrameCount * 2; + } + mFramesToDrop = framesToDrop; + } +} + +void AudioFlinger::RecordThread::RecordTrack::clearSyncStartEvent() +{ + if (mSyncStartEvent != 0) { + mSyncStartEvent->cancel(); + mSyncStartEvent.clear(); + } + mFramesToDrop = 0; +} + }; // namespace android |