summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2014-02-07 10:50:43 -0800
committerGlenn Kasten <gkasten@google.com>2014-02-18 12:56:13 -0800
commit25f4aa83efaa9179e65a20583a6d441de2c3ff3f (patch)
tree996653f52a07bb6dc99d058943f852f3182ea637
parentdeca2ae0a7cf8bc54ff3f30b7dc39bbc78b94c0d (diff)
downloadframeworks_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.h3
-rw-r--r--services/audioflinger/Threads.cpp38
-rw-r--r--services/audioflinger/Threads.h3
-rw-r--r--services/audioflinger/Tracks.cpp23
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