modules: camera: Camera v3 Devices

Default camera HAL statically allocates camera devices. Update camera
device to API v3.

Change-Id: Ic53ffcf3b746b9b4011b932e26dbb0f533cba554
diff --git a/modules/camera/CameraHAL.cpp b/modules/camera/CameraHAL.cpp
index 9880908..6cae7d2 100644
--- a/modules/camera/CameraHAL.cpp
+++ b/modules/camera/CameraHAL.cpp
@@ -17,6 +17,7 @@
 #include <cstdlib>
 #include <hardware/camera_common.h>
 #include <hardware/hardware.h>
+#include "Camera.h"
 
 //#define LOG_NDEBUG 0
 #define LOG_TAG "DefaultCameraHAL"
@@ -42,10 +43,23 @@
   : mNumberOfCameras(num_cameras),
     mCallbacks(NULL)
 {
+    int i;
+
+    // Allocate camera array and instantiate camera devices
+    mCameras = new Camera*[mNumberOfCameras];
+    for (i = 0; i < mNumberOfCameras; i++) {
+        mCameras[i] = new Camera(i);
+    }
 }
 
 CameraHAL::~CameraHAL()
 {
+    int i;
+
+    for (i = 0; i < mNumberOfCameras; i++) {
+        delete mCameras[i];
+    }
+    delete [] mCameras;
 }
 
 int CameraHAL::getNumberOfCameras()
@@ -76,6 +90,7 @@
 {
     int id;
     char *nameEnd;
+    Camera *cam;
 
     ALOGV("%s: module=%p, name=%s, device=%p", __func__, mod, name, dev);
     id = strtol(name, &nameEnd, 10);
@@ -86,8 +101,7 @@
         ALOGE("%s: Invalid camera id %d", __func__, id);
         return -ENODEV;
     }
-    // TODO: check for existing use; allocate and return new camera device
-    return 0;
+    return mCameras[id]->open(mod, dev);
 }
 
 extern "C" {