Camera NDK library: capture session implementation

Bug: 23012001
Change-Id: I3fd93205dcf1b9ed5a947cb944919eb531f219fc
diff --git a/include/camera/ndk/NdkCameraCaptureSession.h b/include/camera/ndk/NdkCameraCaptureSession.h
index b3367c7..5d5cae2 100644
--- a/include/camera/ndk/NdkCameraCaptureSession.h
+++ b/include/camera/ndk/NdkCameraCaptureSession.h
@@ -39,27 +39,32 @@
 
 typedef struct ACameraCaptureSession_stateCallbacks {
     void*                               context;
-    ACameraCaptureSession_stateCallback onConfigured;
-    ACameraCaptureSession_stateCallback onConfigureFailed;
-    ACameraCaptureSession_stateCallback onClosed;
+    ACameraCaptureSession_stateCallback onClosed; // session is unusable after this callback
     ACameraCaptureSession_stateCallback onReady;
     ACameraCaptureSession_stateCallback onActive;
 } ACameraCaptureSession_stateCallbacks;
 
+enum {
+    CAPTURE_FAILURE_REASON_FLUSHED = 0,
+    CAPTURE_FAILURE_REASON_ERROR
+};
+
 typedef struct ACameraCaptureFailure {
-    uint32_t frameNumber;
-    int      reason;
-    int      sequenceId;
-    int      wasImageCaptured;
+    int64_t frameNumber;
+    int     reason;
+    int     sequenceId;
+    bool    wasImageCaptured;
 } ACameraCaptureFailure;
 
+/* Note that the ACaptureRequest* in the callback will be different to what app has submitted,
+   but the contents will still be the same as what app submitted */
 typedef void (*ACameraCaptureSession_captureCallback_start)(
         void* context, ACameraCaptureSession* session,
-        ACaptureRequest* request, long timestamp);
+        const ACaptureRequest* request, int64_t timestamp);
 
 typedef void (*ACameraCaptureSession_captureCallback_result)(
         void* context, ACameraCaptureSession* session,
-        ACaptureRequest* request, ACameraMetadata* result);
+        ACaptureRequest* request, const ACameraMetadata* result);
 
 typedef void (*ACameraCaptureSession_captureCallback_failed)(
         void* context, ACameraCaptureSession* session,
@@ -67,22 +72,30 @@
 
 typedef void (*ACameraCaptureSession_captureCallback_sequenceEnd)(
         void* context, ACameraCaptureSession* session,
-        int sequenceId, long frameNumber);
+        int sequenceId, int64_t frameNumber);
+
+typedef void (*ACameraCaptureSession_captureCallback_sequenceAbort)(
+        void* context, ACameraCaptureSession* session,
+        int sequenceId);
 
 typedef struct ACameraCaptureSession_captureCallbacks {
     void*                                             context;
-    ACameraCaptureSession_captureCallback_start       onCaptureStarted;
-    ACameraCaptureSession_captureCallback_result      onCaptureProgressed;
-    ACameraCaptureSession_captureCallback_result      onCaptureCompleted;
-    ACameraCaptureSession_captureCallback_failed      onCaptureFailed;
-    ACameraCaptureSession_captureCallback_sequenceEnd onCaptureSequenceCompleted;
-    ACameraCaptureSession_captureCallback_sequenceEnd onCaptureSequenceAborted;
+    ACameraCaptureSession_captureCallback_start         onCaptureStarted;
+    ACameraCaptureSession_captureCallback_result        onCaptureProgressed;
+    ACameraCaptureSession_captureCallback_result        onCaptureCompleted;
+    ACameraCaptureSession_captureCallback_failed        onCaptureFailed;
+    ACameraCaptureSession_captureCallback_sequenceEnd   onCaptureSequenceCompleted;
+    ACameraCaptureSession_captureCallback_sequenceAbort onCaptureSequenceAborted;
 } ACameraCaptureSession_captureCallbacks;
 
+enum {
+    CAPTURE_SEQUENCE_ID_NONE = -1
+};
+
 /*
  * Close capture session
  */
-camera_status_t ACameraCaptureSession_close(ACameraCaptureSession*);
+void ACameraCaptureSession_close(ACameraCaptureSession*);
 
 struct ACameraDevice;
 typedef struct ACameraDevice ACameraDevice;
@@ -98,14 +111,16 @@
  */
 camera_status_t ACameraCaptureSession_capture(
         ACameraCaptureSession*, /*optional*/ACameraCaptureSession_captureCallbacks*,
-        int numRequests, const ACaptureRequest* requests);
+        int numRequests, ACaptureRequest** requests,
+        /*optional*/int* captureSequenceId);
 
 /**
  * Send repeating capture request(s)
  */
 camera_status_t ACameraCaptureSession_setRepeatingRequest(
         ACameraCaptureSession*, /*optional*/ACameraCaptureSession_captureCallbacks*,
-        int numRequests, const ACaptureRequest* requests);
+        int numRequests, ACaptureRequest** requests,
+        /*optional*/int* captureSequenceId);
 
 /**
  * Stop repeating capture request(s)