diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2017-01-23 17:27:26 -0800 |
---|---|---|
committer | Yin-Chia Yeh <yinchiayeh@google.com> | 2017-03-01 22:24:39 -0800 |
commit | 248ed700fed7e682eddf3d0607592eb5f3a3fb1a (patch) | |
tree | b1189f979a00501cd5147855641a815b527516ab /camera/device/3.2/default/CameraDeviceSession.cpp | |
parent | 77b2bf00f5c270940516f3aee32c89165dcbf4d1 (diff) |
Camera: default implementation of device 1.0
Also some updates to HIDL interface:
- Add releaseRecordingFrameHandle to ICameraDevice
for native handle metadata recording mode
- Add handleCallbackTimestamp to ICameraDevieCallback
for native handle metadata recording mode
- Add missing face detection metadata to
ICameraDeviceCallback::dataCallback
- Instead of passing native handle, pass buffer ID
in dequeueBuffer/enqueueBuffer/cancelBuffer in
ICameraDevicePreviewCallback
- Add CameraFrameMetadata in types.hal for face
metadata
Test: Camera CTS passing (except FlashLightTest) on Angler
Bug: 30985004
Change-Id: Idf72a4b5f4c934845ac698f0b13536608ffd0100
Diffstat (limited to 'camera/device/3.2/default/CameraDeviceSession.cpp')
-rw-r--r-- | camera/device/3.2/default/CameraDeviceSession.cpp | 187 |
1 files changed, 1 insertions, 186 deletions
diff --git a/camera/device/3.2/default/CameraDeviceSession.cpp b/camera/device/3.2/default/CameraDeviceSession.cpp index 0f3d97bdb3..3c3c078eb8 100644 --- a/camera/device/3.2/default/CameraDeviceSession.cpp +++ b/camera/device/3.2/default/CameraDeviceSession.cpp @@ -29,198 +29,13 @@ namespace device { namespace V3_2 { namespace implementation { -namespace { - -// Copy pasted from Hwc.cpp. Use this until gralloc mapper HAL is working -class HandleImporter { -public: - HandleImporter() : mInitialized(false) {} - - bool initialize() - { - // allow only one client - if (mInitialized) { - return false; - } - - if (!openGralloc()) { - return false; - } - - mInitialized = true; - return true; - } - - void cleanup() - { - if (!mInitialized) { - return; - } - - closeGralloc(); - mInitialized = false; - } - - // In IComposer, any buffer_handle_t is owned by the caller and we need to - // make a clone for hwcomposer2. We also need to translate empty handle - // to nullptr. This function does that, in-place. - bool importBuffer(buffer_handle_t& handle) - { - if (!handle->numFds && !handle->numInts) { - handle = nullptr; - return true; - } - - buffer_handle_t clone = cloneBuffer(handle); - if (!clone) { - return false; - } - - handle = clone; - return true; - } - - void freeBuffer(buffer_handle_t handle) - { - if (!handle) { - return; - } - - releaseBuffer(handle); - } - - bool importFence(const native_handle_t* handle, int& fd) - { - if (handle == nullptr || handle->numFds == 0) { - fd = -1; - } else if (handle->numFds == 1) { - fd = dup(handle->data[0]); - if (fd < 0) { - ALOGE("failed to dup fence fd %d", handle->data[0]); - return false; - } - } else { - ALOGE("invalid fence handle with %d file descriptors", - handle->numFds); - return false; - } - - return true; - } - - void closeFence(int fd) - { - if (fd >= 0) { - close(fd); - } - } - -private: - bool mInitialized; - - bool openGralloc() - { - const hw_module_t* module; - int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); - if (err) { - ALOGE("failed to get gralloc module"); - return false; - } - - uint8_t major = (module->module_api_version >> 8) & 0xff; - if (major > 1) { - ALOGE("unknown gralloc module major version %d", major); - return false; - } - - if (major == 1) { - err = gralloc1_open(module, &mDevice); - if (err) { - ALOGE("failed to open gralloc1 device"); - return false; - } - - mRetain = reinterpret_cast<GRALLOC1_PFN_RETAIN>( - mDevice->getFunction(mDevice, GRALLOC1_FUNCTION_RETAIN)); - mRelease = reinterpret_cast<GRALLOC1_PFN_RELEASE>( - mDevice->getFunction(mDevice, GRALLOC1_FUNCTION_RELEASE)); - if (!mRetain || !mRelease) { - ALOGE("invalid gralloc1 device"); - gralloc1_close(mDevice); - return false; - } - } else { - mModule = reinterpret_cast<const gralloc_module_t*>(module); - } - - return true; - } - - void closeGralloc() - { - if (mDevice) { - gralloc1_close(mDevice); - } - } - - buffer_handle_t cloneBuffer(buffer_handle_t handle) - { - native_handle_t* clone = native_handle_clone(handle); - if (!clone) { - ALOGE("failed to clone buffer %p", handle); - return nullptr; - } - - bool err; - if (mDevice) { - err = (mRetain(mDevice, clone) != GRALLOC1_ERROR_NONE); - } else { - err = (mModule->registerBuffer(mModule, clone) != 0); - } - - if (err) { - ALOGE("failed to retain/register buffer %p", clone); - native_handle_close(clone); - native_handle_delete(clone); - return nullptr; - } - - return clone; - } - - void releaseBuffer(buffer_handle_t handle) - { - if (mDevice) { - mRelease(mDevice, handle); - } else { - mModule->unregisterBuffer(mModule, handle); - } - native_handle_close(handle); - native_handle_delete(const_cast<native_handle_t*>(handle)); - } - - // gralloc1 - gralloc1_device_t* mDevice; - GRALLOC1_PFN_RETAIN mRetain; - GRALLOC1_PFN_RELEASE mRelease; - - // gralloc0 - const gralloc_module_t* mModule; -}; - -HandleImporter sHandleImporter; - -} // Anonymous namespace +HandleImporter& CameraDeviceSession::sHandleImporter = HandleImporter::getInstance(); CameraDeviceSession::CameraDeviceSession( camera3_device_t* device, const sp<ICameraDeviceCallback>& callback) : camera3_callback_ops({&sProcessCaptureResult, &sNotify}), mDevice(device), mCallback(callback) { - // For now, we init sHandleImporter but do not cleanup (keep it alive until - // HAL process ends) - sHandleImporter.initialize(); - mInitFail = initialize(); } |