Camera: ProCamera - implement onResultReceived callback for metadata callbacks

Change-Id: I46775402b007244bc383d6343a620eebbd492aad
diff --git a/camera/IProCameraCallbacks.cpp b/camera/IProCameraCallbacks.cpp
index 756fba2..6cd36bf 100644
--- a/camera/IProCameraCallbacks.cpp
+++ b/camera/IProCameraCallbacks.cpp
@@ -28,6 +28,8 @@
 
 #include <camera/IProCameraCallbacks.h>
 
+#include <system/camera_metadata.h>
+
 namespace android {
 
 enum {
@@ -35,8 +37,12 @@
     DATA_CALLBACK,
     DATA_CALLBACK_TIMESTAMP,
     LOCK_STATUS_CHANGED,
+    RESULT_RECEIVED,
 };
 
+void readMetadata(const Parcel& data, camera_metadata_t** out);
+void writeMetadata(Parcel& data, camera_metadata_t* metadata);
+
 class BpProCameraCallbacks: public BpInterface<IProCameraCallbacks>
 {
 public:
@@ -96,6 +102,15 @@
         remote()->transact(LOCK_STATUS_CHANGED, data, &reply,
                            IBinder::FLAG_ONEWAY);
     }
+
+    void onResultReceived(int32_t frameId, camera_metadata* result) {
+        ALOGV("onResultReceived");
+        Parcel data, reply;
+        data.writeInterfaceToken(IProCameraCallbacks::getInterfaceDescriptor());
+        data.writeInt32(frameId);
+        writeMetadata(data, result);
+        remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY);
+    }
 };
 
 IMPLEMENT_META_INTERFACE(ProCameraCallbacks,
@@ -152,6 +167,16 @@
             onLockStatusChanged(newLockStatus);
             return NO_ERROR;
         } break;
+        case RESULT_RECEIVED: {
+            ALOGV("RESULT_RECEIVED");
+            CHECK_INTERFACE(IProCameraCallbacks, data, reply);
+            int32_t frameId = data.readInt32();
+            camera_metadata_t *result = NULL;
+            readMetadata(data, &result);
+            onResultReceived(frameId, result);
+            return NO_ERROR;
+            break;
+        }
         default:
             return BBinder::onTransact(code, data, reply, flags);
     }