Camera3: Refactor stream code to be DRY

Bug: 8851039
Change-Id: Iaac2926bfa25dd6e9db8b307765d4fe709b88d21
diff --git a/services/camera/libcameraservice/camera3/Camera3InputStream.h b/services/camera/libcameraservice/camera3/Camera3InputStream.h
index fd9f464..8adda88 100644
--- a/services/camera/libcameraservice/camera3/Camera3InputStream.h
+++ b/services/camera/libcameraservice/camera3/Camera3InputStream.h
@@ -21,7 +21,7 @@
 #include <gui/Surface.h>
 #include <gui/BufferItemConsumer.h>
 
-#include "Camera3Stream.h"
+#include "Camera3IOStreamBase.h"
 
 namespace android {
 
@@ -34,7 +34,7 @@
  * buffers by feeding them into the HAL, as well as releasing the buffers back
  * the buffers once the HAL is done with them.
  */
-class Camera3InputStream : public Camera3Stream {
+class Camera3InputStream : public Camera3IOStreamBase {
   public:
     /**
      * Set up a stream for formats that have fixed size, such as RAW and YUV.
@@ -42,7 +42,6 @@
     Camera3InputStream(int id, uint32_t width, uint32_t height, int format);
     ~Camera3InputStream();
 
-    virtual status_t waitUntilIdle(nsecs_t timeout);
     virtual void     dump(int fd, const Vector<String16> &args) const;
 
     /**
@@ -58,14 +57,16 @@
 
     sp<BufferItemConsumer> mConsumer;
     Vector<BufferItem> mBuffersInFlight;
-    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;
+    /**
+     * Camera3IOStreamBase
+     */
+    virtual status_t returnBufferCheckedLocked(
+            const camera3_stream_buffer &buffer,
+            nsecs_t timestamp,
+            bool output,
+            /*out*/
+            sp<Fence> *releaseFenceOut);
 
     /**
      * Camera3Stream interface
@@ -74,11 +75,9 @@
     virtual status_t getInputBufferLocked(camera3_stream_buffer *buffer);
     virtual status_t returnInputBufferLocked(
             const camera3_stream_buffer &buffer);
-    virtual bool     hasOutstandingBuffersLocked() const;
     virtual status_t disconnectLocked();
 
     virtual status_t configureQueueLocked();
-    virtual size_t   getBufferCountLocked();
 
 }; // class Camera3InputStream