Camera3: Refactor stream code to be DRY

Bug: 8851039
Change-Id: Iaac2926bfa25dd6e9db8b307765d4fe709b88d21
diff --git a/services/camera/libcameraservice/camera3/Camera3ZslStream.h b/services/camera/libcameraservice/camera3/Camera3ZslStream.h
index b863e7f..c7f4490 100644
--- a/services/camera/libcameraservice/camera3/Camera3ZslStream.h
+++ b/services/camera/libcameraservice/camera3/Camera3ZslStream.h
@@ -21,8 +21,7 @@
 #include <gui/Surface.h>
 #include <gui/RingBufferConsumer.h>
 
-#include "Camera3Stream.h"
-#include "Camera3OutputStreamInterface.h"
+#include "Camera3OutputStream.h"
 
 namespace android {
 
@@ -35,8 +34,7 @@
  * processing.
  */
 class Camera3ZslStream :
-        public Camera3Stream,
-        public Camera3OutputStreamInterface {
+        public Camera3OutputStream {
   public:
     /**
      * Set up a ZSL stream of a given resolution. Depth is the number of buffers
@@ -45,7 +43,6 @@
     Camera3ZslStream(int id, uint32_t width, uint32_t height, int depth);
     ~Camera3ZslStream();
 
-    virtual status_t waitUntilIdle(nsecs_t timeout);
     virtual void     dump(int fd, const Vector<String16> &args) const;
 
     enum { NO_BUFFER_AVAILABLE = BufferQueue::NO_BUFFER_AVAILABLE };
@@ -65,6 +62,8 @@
      */
     status_t clearInputRingBuffer();
 
+  protected:
+
     /**
      * Camera3OutputStreamInterface implementation
      */
@@ -76,41 +75,27 @@
     // Input buffers pending to be queued into HAL
     List<sp<RingBufferConsumer::PinnedBufferItem> > mInputBufferQueue;
     sp<RingBufferConsumer>                          mProducer;
-    sp<ANativeWindow>                               mConsumer;
 
     // Input buffers in flight to HAL
     Vector<sp<RingBufferConsumer::PinnedBufferItem> > mBuffersInFlight;
-    size_t                                          mTotalBufferCount;
-    // sum of input and output buffers that are currently acquired by HAL
-    size_t                                          mDequeuedBufferCount;
-    Condition                                       mBufferReturnedSignal;
-    uint32_t                                        mFrameCount;
-    // Last received output buffer's timestamp
-    nsecs_t                                         mLastTimestamp;
-
-    // The merged release fence for all returned buffers
-    sp<Fence>                                       mCombinedFence;
 
     /**
      * Camera3Stream interface
      */
 
-    // getBuffer/returnBuffer operate the output stream side of the ZslStream.
-    virtual status_t getBufferLocked(camera3_stream_buffer *buffer);
-    virtual status_t returnBufferLocked(const camera3_stream_buffer &buffer,
-            nsecs_t timestamp);
     // getInputBuffer/returnInputBuffer operate the input stream side of the
     // ZslStream.
     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();
-
+    // Actual body to return either input or output buffers
+    virtual status_t returnBufferCheckedLocked(
+            const camera3_stream_buffer &buffer,
+            nsecs_t timestamp,
+            bool output,
+            /*out*/
+            sp<Fence> *releaseFenceOut);
 }; // class Camera3ZslStream
 
 }; // namespace camera3