1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 /* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * capture.h - Cam capture */ #ifndef __CAM_CAPTURE_H__ #define __CAM_CAPTURE_H__ #include <memory> #include <stdint.h> #include <vector> #include <libcamera/buffer.h> #include <libcamera/camera.h> #include <libcamera/framebuffer_allocator.h> #include <libcamera/request.h> #include <libcamera/s/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2019, Google Inc. * * 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->flush(); 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 }, };