Remove CBLK_DIRECTION from control block flags

This is part of a series to clean up the control block.

Change-Id: I0265fece3247356b585d4d48fbda6f37aea8a851
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 379e936..69ac3e3 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -4286,7 +4286,7 @@
     bool result;
     audio_track_cblk_t* cblk = this->cblk();
 
-    result = cblk->stepServer(mFrameCount);
+    result = cblk->stepServer(mFrameCount, isOut());
     if (!result) {
         ALOGV("stepServer failed acquiring cblk mutex");
         mStepServerFailed = true;
@@ -4545,7 +4545,7 @@
     }
 
     // FIXME Same as above
-    framesReady = cblk->framesReady();
+    framesReady = cblk->framesReadyOut();
 
     if (CC_LIKELY(framesReady)) {
         uint32_t s = cblk->server;
@@ -4580,7 +4580,7 @@
 // the tryLock() could block for up to 1 ms, and a sequence of these could delay fast mixer.
 // FIXME Replace AudioTrackShared control block implementation by a non-blocking FIFO queue.
 size_t AudioFlinger::PlaybackThread::Track::framesReady() const {
-    return mCblk->framesReady();
+    return mCblk->framesReadyOut();
 }
 
 // Don't call for fast tracks; the framesReady() could result in priority inversion
@@ -4875,6 +4875,11 @@
     return NO_ERROR;
 }
 
+bool AudioFlinger::PlaybackThread::Track::isOut() const
+{
+    return true;
+}
+
 // timed audio tracks
 
 sp<AudioFlinger::PlaybackThread::TimedTrack>
@@ -5436,7 +5441,8 @@
         mStepServerFailed = false;
     }
 
-    framesAvail = cblk->framesAvailable_l();
+    // FIXME lock is not actually held, so overrun is possible
+    framesAvail = cblk->framesAvailableIn_l();
 
     if (CC_LIKELY(framesAvail)) {
         uint32_t s = cblk->server;
@@ -5512,6 +5518,10 @@
             mCblk->frameCount);
 }
 
+bool AudioFlinger::RecordThread::RecordTrack::isOut() const
+{
+    return false;
+}
 
 // ----------------------------------------------------------------------------
 
@@ -5528,7 +5538,6 @@
 {
 
     if (mCblk != NULL) {
-        mCblk->flags |= CBLK_DIRECTION;
         mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t);
         mOutBuffer.frameCount = 0;
         playbackThread->mTracks.add(this);
@@ -5631,7 +5640,7 @@
         uint32_t outFrames = pInBuffer->frameCount > mOutBuffer.frameCount ? mOutBuffer.frameCount :
                 pInBuffer->frameCount;
         memcpy(mOutBuffer.raw, pInBuffer->raw, outFrames * channelCount * sizeof(int16_t));
-        mCblk->stepUser(outFrames);
+        mCblk->stepUserOut(outFrames);
         pInBuffer->frameCount -= outFrames;
         pInBuffer->i16 += outFrames * channelCount;
         mOutBuffer.frameCount -= outFrames;
@@ -5702,7 +5711,7 @@
     ALOGVV("OutputTrack::obtainBuffer user %d, server %d", cblk->user, cblk->server);
     buffer->frameCount  = 0;
 
-    uint32_t framesAvail = cblk->framesAvailable();
+    uint32_t framesAvail = cblk->framesAvailableOut();
 
 
     if (framesAvail == 0) {
@@ -5720,7 +5729,7 @@
             }
             // read the server count again
         start_loop_here:
-            framesAvail = cblk->framesAvailable_l();
+            framesAvail = cblk->framesAvailableOut_l();
         }
     }
 
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index de2fbfa..1417105 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -456,6 +456,9 @@
             bool step();
             void reset();
 
+            virtual bool isOut() const = 0; // true for Track and TimedTrack, false for RecordTrack,
+                                            // this could be a track type if needed later
+
             const wp<ThreadBase> mThread;
             /*const*/ sp<Client> mClient;   // see explanation at ~TrackBase() why not const
             sp<IMemory>         mCblkMemory;
@@ -859,6 +862,7 @@
             void triggerEvents(AudioSystem::sync_event_t type);
             virtual bool isTimedTrack() const { return false; }
             bool isFastTrack() const { return (mFlags & IAudioFlinger::TRACK_FAST) != 0; }
+            virtual bool isOut() const;
 
         protected:
 
@@ -1468,6 +1472,8 @@
             static  void        appendDumpHeader(String8& result);
                     void        dump(char* buffer, size_t size);
 
+            virtual bool isOut() const;
+
         private:
             friend class AudioFlinger;  // for mState