| /* SPDX-License-Identifier: LGPL-2.1-or-later */ | |
| /* | |
| * Copyright (C) 2019, Google Inc. | |
| * | |
| * camera_ops.h - Android Camera HAL Operations | |
| */ | |
| #include "camera_ops.h" | |
| #include <system/camera_metadata.h> | |
| #include "camera_device.h" | |
| using namespace libcamera; | |
| /* | |
| * Translation layer between the Android Camera HAL device operations and the | |
| * CameraDevice. | |
| */ | |
| static int hal_dev_initialize(const struct camera3_device *dev, | |
| const camera3_callback_ops_t *callback_ops) | |
| { | |
| if (!dev) | |
| return -EINVAL; | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| camera->setCallbacks(callback_ops); | |
| return 0; | |
| } | |
| static int hal_dev_configure_streams(const struct camera3_device *dev, | |
| camera3_stream_configuration_t *stream_list) | |
| { | |
| if (!dev) | |
| return -EINVAL; | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| return camera->configureStreams(stream_list); | |
| } | |
| static const camera_metadata_t * | |
| hal_dev_construct_default_request_settings(const struct camera3_device *dev, | |
| int type) | |
| { | |
| if (!dev) | |
| return nullptr; | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| return camera->constructDefaultRequestSettings(type); | |
| } | |
| static int hal_dev_process_capture_request(const struct camera3_device *dev, | |
| camera3_capture_request_t *request) | |
| { | |
| if (!dev) | |
| return -EINVAL; | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| return camera->processCaptureRequest(request); | |
| } | |
| static void hal_dev_dump([[maybe_unused]] const struct camera3_device *dev, | |
| [[maybe_unused]] int fd) | |
| { | |
| } | |
| static int hal_dev_flush(const struct camera3_device *dev) | |
| { | |
| if (!dev) | |
| return -EINVAL; | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| camera->flushAndStop(); | |
| return 0; | |
| } | |
| int hal_dev_close(hw_device_t *hw_device) | |
| { | |
| if (!hw_device) | |
| return -EINVAL; | |
| camera3_device_t *dev = reinterpret_cast<camera3_device_t *>(hw_device); | |
| CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv); | |
| camera->close(); | |
| return 0; | |
| } | |
| camera3_device_ops hal_dev_ops = { | |
| .initialize = hal_dev_initialize, | |
| .configure_streams = hal_dev_configure_streams, | |
| .register_stream_buffers = nullptr, | |
| .construct_default_request_settings = hal_dev_construct_default_request_settings, | |
| .process_capture_request = hal_dev_process_capture_request, | |
| .get_metadata_vendor_tag_ops = nullptr, | |
| .dump = hal_dev_dump, | |
| .flush = hal_dev_flush, | |
| .reserved = { nullptr }, | |
| }; |