Camera service: Add skeleton support for camera2 devices.
- Add Camera2Client, which maps the current android.hardware.Camera
API to the new camera2 semantics
- Add Camera2Device, a C++ wrapper for the HAL camera 2 device
No functionality besides create/destroy; all client methods return
error or null.
Bug: 6243944
Change-Id: I6bd5136fa1efd8279b8cd2d9847d9b0bb2862294
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 03830c4..b273f6f 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -40,6 +40,8 @@
#include "CameraService.h"
#include "CameraClient.h"
#include "CameraHardwareInterface.h"
+#include "Camera2Client.h"
+#include "Camera2Device.h"
namespace android {
@@ -134,7 +136,6 @@
sp<ICamera> CameraService::connect(
const sp<ICameraClient>& cameraClient, int cameraId) {
int callingPid = getCallingPid();
- sp<CameraHardwareInterface> hardware = NULL;
LOG1("CameraService::connect E (pid %d, id %d)", callingPid, cameraId);
@@ -190,13 +191,41 @@
char camera_device_name[10];
snprintf(camera_device_name, sizeof(camera_device_name), "%d", cameraId);
- hardware = new CameraHardwareInterface(camera_device_name);
- if (hardware->initialize(&mModule->common) != OK) {
- hardware.clear();
+ int deviceVersion;
+ if (mModule->common.module_api_version == CAMERA_MODULE_API_VERSION_2_0) {
+ deviceVersion = info.device_version;
+ } else {
+ deviceVersion = CAMERA_DEVICE_API_VERSION_1_0;
+ }
+
+ 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,
+ 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,
+ info.facing, callingPid);
+ break;
+ }
+ default:
+ ALOGE("Unknown camera device HAL version: %d", deviceVersion);
return NULL;
}
- client = new CameraClient(this, cameraClient, hardware, cameraId, info.facing, callingPid);
mClient[cameraId] = client;
LOG1("CameraService::connect X (id %d)", cameraId);
return client;