diff options
| author | Yin-Chia Yeh <yinchiayeh@google.com> | 2017-03-02 23:15:54 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-03-02 23:15:55 +0000 |
| commit | b47ff3d67a7b5c67f1e17d8773037b2ec60c5a0c (patch) | |
| tree | 7d91bc751cc974eb4e99179cf9800ce61a73a5d6 /camera/provider/2.4/default/CameraProvider.cpp | |
| parent | 3a3dc8fef46d38a6c98b282ab6497a5b8eb1c742 (diff) | |
| parent | 248ed700fed7e682eddf3d0607592eb5f3a3fb1a (diff) | |
| download | android_hardware_interfaces-b47ff3d67a7b5c67f1e17d8773037b2ec60c5a0c.tar.gz android_hardware_interfaces-b47ff3d67a7b5c67f1e17d8773037b2ec60c5a0c.tar.bz2 android_hardware_interfaces-b47ff3d67a7b5c67f1e17d8773037b2ec60c5a0c.zip | |
Merge "Camera: default implementation of device 1.0"
Diffstat (limited to 'camera/provider/2.4/default/CameraProvider.cpp')
| -rw-r--r-- | camera/provider/2.4/default/CameraProvider.cpp | 61 |
1 files changed, 53 insertions, 8 deletions
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp index 5714f835b..ad9f0b862 100644 --- a/camera/provider/2.4/default/CameraProvider.cpp +++ b/camera/provider/2.4/default/CameraProvider.cpp @@ -18,7 +18,8 @@ #include <android/log.h> #include "CameraProvider.h" -#include "CameraDevice.h" +#include "CameraDevice_1_0.h" +#include "CameraDevice_3_2.h" #include <string.h> #include <utils/Trace.h> @@ -59,8 +60,6 @@ void CameraProvider::sCameraDeviceStatusChange( return; } - ALOGI("%s resolved provider %p", __FUNCTION__, cp); - Mutex::Autolock _l(cp->mCbLock); char cameraId[kMaxCameraIdLen]; snprintf(cameraId, sizeof(cameraId), "%d", camera_id); @@ -89,8 +88,6 @@ void CameraProvider::sTorchModeStatusChange( return; } - ALOGI("%s resolved provider %p", __FUNCTION__, cp); - Mutex::Autolock _l(cp->mCbLock); if (cp->mCallbacks != nullptr) { std::string cameraIdStr(camera_id); @@ -323,9 +320,57 @@ Return<void> CameraProvider::isSetTorchModeSupported(isSetTorchModeSupported_cb } Return<void> CameraProvider::getCameraDeviceInterface_V1_x( - const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb _hidl_cb) { - // TODO implement after device 1.0 is implemented - _hidl_cb(Status::INTERNAL_ERROR, nullptr); + const hidl_string& cameraDeviceName, getCameraDeviceInterface_V1_x_cb _hidl_cb) { + std::smatch sm; + bool match = matchDeviceName(cameraDeviceName, sm); + if (!match) { + _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); + return Void(); + } + + std::string cameraId = sm[2]; + std::string deviceVersion = sm[1]; + std::string deviceName(cameraDeviceName.c_str()); + ssize_t index = mCameraDeviceNames.indexOf(std::make_pair(cameraId, deviceName)); + if (index == NAME_NOT_FOUND) { // Either an illegal name or a device version mismatch + Status status = Status::OK; + ssize_t idx = mCameraIds.indexOf(cameraId); + if (idx == NAME_NOT_FOUND) { + ALOGE("%s: cannot find camera %s!", __FUNCTION__, cameraId.c_str()); + status = Status::ILLEGAL_ARGUMENT; + } else { // invalid version + ALOGE("%s: camera device %s does not support version %s!", + __FUNCTION__, cameraId.c_str(), deviceVersion.c_str()); + status = Status::OPERATION_NOT_SUPPORTED; + } + _hidl_cb(status, nullptr); + return Void(); + } + + if (mCameraStatusMap.count(cameraId) == 0 || + mCameraStatusMap[cameraId] != CAMERA_DEVICE_STATUS_PRESENT) { + _hidl_cb(Status::ILLEGAL_ARGUMENT, nullptr); + return Void(); + } + + sp<android::hardware::camera::device::V1_0::implementation::CameraDevice> device = + new android::hardware::camera::device::V1_0::implementation::CameraDevice( + mModule, cameraId, mCameraDeviceNames); + + if (device == nullptr) { + ALOGE("%s: cannot allocate camera device for id %s", __FUNCTION__, cameraId.c_str()); + _hidl_cb(Status::INTERNAL_ERROR, nullptr); + return Void(); + } + + if (device->isInitFailed()) { + ALOGE("%s: camera device %s init failed!", __FUNCTION__, cameraId.c_str()); + device = nullptr; + _hidl_cb(Status::INTERNAL_ERROR, nullptr); + return Void(); + } + + _hidl_cb (Status::OK, device); return Void(); } |
