0-memcpy video recording framework

Part II: proposed camera hal change

Change-Id: I51663cf5de2b00f71e4ff1828080094676065444
diff --git a/include/camera/CameraHardwareInterface.h b/include/camera/CameraHardwareInterface.h
index 3a77dd1..561a46d 100644
--- a/include/camera/CameraHardwareInterface.h
+++ b/include/camera/CameraHardwareInterface.h
@@ -21,6 +21,8 @@
 #include <ui/egl/android_natives.h>
 #include <utils/RefBase.h>
 #include <surfaceflinger/ISurface.h>
+#include <ui/android_native_buffer.h>
+#include <ui/GraphicBuffer.h>
 #include <camera/Camera.h>
 #include <camera/CameraParameters.h>
 
@@ -47,6 +49,17 @@
                               const sp<IMemory>& dataPtr,
                               void* user);
 
+#ifdef USE_GRAPHIC_VIDEO_BUFFERS
+/**
+ * Replace data_callback_timestamp. Once we are done, this
+ * should be renamed as data_callback_timestamp, and the existing
+ * data_callback_timestamp should be deleted.
+ */
+typedef void (*videobuffer_callback_timestamp)(nsecs_t timestamp,
+                                        int32_t msgType,
+                                        const sp<android_native_buffer_t>& buf,
+                                        void* user);
+#endif
 typedef void (*data_callback_timestamp)(nsecs_t timestamp,
                                         int32_t msgType,
                                         const sp<IMemory>& dataPtr,
@@ -87,6 +100,46 @@
 public:
     virtual ~CameraHardwareInterface() { }
 
+#ifdef USE_GRAPHIC_VIDEO_BUFFERS
+    /**
+     * Replace existing setCallbacks() method. Once we are done, the
+     * videobuffer_callback_timestamp parameter will be renamed to
+     * data_callback_timestamp, but its signature will be the same
+     * as videobuffer_callback_timestamp, which will be renamed
+     * to data_callback_timestamp and the exiting data_callback_timestamp
+     * will be deleted.
+     */
+    virtual void        setCallbacks(notify_callback notify_cb,
+                                data_callback data_cb,
+                                videobuffer_callback_timestamp data_cb_timestamp,
+                                void* user) = 0;
+
+    /**
+     * Replace releaseRecordingFrame(). releaseRecordingFrame() should be
+     * changed so that it has the same signature of releaseVideoBuffer(),
+     * once we are done, and releaseVideoBuffer() will be deleted.
+     */
+    virtual void        releaseVideoBuffer(const sp<android_native_buffer_t>& buf) = 0;
+
+    /**
+     * This method should be called after startRecording().
+     *
+     * @param nBuffers the total number of video buffers allocated by the camera
+     *  hal
+     * @param buffers an array allocated by the camera hal to hold the pointers
+     *  to the individual video buffers. The video buffers and the buffers array
+     *  should NOT be modified/released by camera hal until stopRecording() is
+     *  called and all outstanding video buffers previously sent out via
+     *  CAMERA_MSG_VIDEO_FRAME have been released via releaseVideoBuffer().
+     *  Camera hal client must not release the individual buffers and the buffers
+     *  array.
+     * @return no error if OK.
+     */
+    virtual status_t    getVideoBufferInfo(
+                            sp<android_native_buffer_t>** buffers,
+                            size_t *nBuffers) = 0;
+#endif
+
     /** Set the ANativeWindow to which preview frames are sent */
     virtual status_t setPreviewWindow(const sp<ANativeWindow>& buf) = 0;