Camera service: Initialization for camera2 clients and devices

- Refactor initialization code to hide device type from CameraService
- Add metadata queue class to Camera2Device
- Initialization of Camera2Device, Camera2Client
- Conversion from HAL2 device static metadata to camera API
  parameters.

Bug: 6243944
Change-Id: I524145b45438e906d8493dae202704ce8f090aeb
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index b273f6f..d01fcf9 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -39,9 +39,7 @@
 
 #include "CameraService.h"
 #include "CameraClient.h"
-#include "CameraHardwareInterface.h"
 #include "Camera2Client.h"
-#include "Camera2Device.h"
 
 namespace android {
 
@@ -188,9 +186,6 @@
         return NULL;
     }
 
-    char camera_device_name[10];
-    snprintf(camera_device_name, sizeof(camera_device_name), "%d", cameraId);
-
     int deviceVersion;
     if (mModule->common.module_api_version == CAMERA_MODULE_API_VERSION_2_0) {
         deviceVersion = info.device_version;
@@ -199,33 +194,23 @@
     }
 
     switch(deviceVersion) {
-    case CAMERA_DEVICE_API_VERSION_1_0: {
-        sp<CameraHardwareInterface> hardware =
-            new CameraHardwareInterface(camera_device_name);
-        if (hardware->initialize(&mModule->common) != OK) {
-            return NULL;
-        }
-
-        client = new CameraClient(this, cameraClient, hardware, cameraId,
+      case CAMERA_DEVICE_API_VERSION_1_0:
+        client = new CameraClient(this, cameraClient, cameraId,
                 info.facing, callingPid);
         break;
-    }
-    case CAMERA_DEVICE_API_VERSION_2_0: {
-        sp<Camera2Device> hardware =
-            new Camera2Device(camera_device_name);
-        if (hardware->initialize(&mModule->common) != OK) {
-            return NULL;
-        }
-
-        client = new Camera2Client(this, cameraClient, hardware, cameraId,
+      case CAMERA_DEVICE_API_VERSION_2_0:
+        client = new Camera2Client(this, cameraClient, cameraId,
                 info.facing, callingPid);
         break;
-    }
-    default:
+      default:
         ALOGE("Unknown camera device HAL version: %d", deviceVersion);
         return NULL;
     }
 
+    if (client->initialize(mModule) != OK) {
+        return NULL;
+    }
+
     mClient[cameraId] = client;
     LOG1("CameraService::connect X (id %d)", cameraId);
     return client;
@@ -383,6 +368,7 @@
 
 // tear down the client
 CameraService::Client::~Client() {
+    mCameraService->releaseSound();
 }
 
 // ----------------------------------------------------------------------------