Camera3: Refactor stream code to be DRY

Bug: 8851039
Change-Id: Iaac2926bfa25dd6e9db8b307765d4fe709b88d21
diff --git a/services/camera/libcameraservice/camera3/Camera3OutputStream.h b/services/camera/libcameraservice/camera3/Camera3OutputStream.h
index 2464dce..ce317f9 100644
--- a/services/camera/libcameraservice/camera3/Camera3OutputStream.h
+++ b/services/camera/libcameraservice/camera3/Camera3OutputStream.h
@@ -21,6 +21,7 @@
 #include <gui/Surface.h>
 
 #include "Camera3Stream.h"
+#include "Camera3IOStreamBase.h"
 #include "Camera3OutputStreamInterface.h"
 
 namespace android {
@@ -31,7 +32,7 @@
  * A class for managing a single stream of output data from the camera device.
  */
 class Camera3OutputStream :
-        public Camera3Stream,
+        public Camera3IOStreamBase,
         public Camera3OutputStreamInterface {
   public:
     /**
@@ -53,7 +54,6 @@
      * Camera3Stream interface
      */
 
-    virtual status_t waitUntilIdle(nsecs_t timeout);
     virtual void     dump(int fd, const Vector<String16> &args) const;
 
     /**
@@ -62,19 +62,22 @@
      */
     status_t         setTransform(int transform);
 
-  private:
+  protected:
+    Camera3OutputStream(int id, camera3_stream_type_t type,
+            uint32_t width, uint32_t height, int format);
+
+    virtual status_t returnBufferCheckedLocked(
+            const camera3_stream_buffer &buffer,
+            nsecs_t timestamp,
+            bool output,
+            /*out*/
+            sp<Fence> *releaseFenceOut);
+
     sp<ANativeWindow> mConsumer;
+  private:
     int               mTransform;
-    size_t            mTotalBufferCount;
-    size_t            mDequeuedBufferCount;
-    Condition         mBufferReturnedSignal;
-    uint32_t          mFrameCount;
-    nsecs_t           mLastTimestamp;
 
-    // The merged release fence for all returned buffers
-    sp<Fence>         mCombinedFence;
-
-    status_t         setTransformLocked(int transform);
+    virtual status_t  setTransformLocked(int transform);
 
     /**
      * Internal Camera3Stream interface
@@ -83,12 +86,9 @@
     virtual status_t returnBufferLocked(
             const camera3_stream_buffer &buffer,
             nsecs_t timestamp);
-    virtual bool     hasOutstandingBuffersLocked() const;
 
     virtual status_t configureQueueLocked();
-    virtual size_t   getBufferCountLocked();
     virtual status_t disconnectLocked();
-
 }; // class Camera3OutputStream
 
 } // namespace camera3