#pragma once extern "C" { #include #include #include #include #include #include "device/device.h" #include "device/buffer_list.h" #include "device/buffer.h" #include "util/opts/log.h" #include "util/opts/fourcc.h" #include "util/opts/control.h" }; #ifdef USE_LIBCAMERA #include #include #include #include #include #include #include #include #include #include #include #include #include typedef struct buffer_s buffer_t; typedef struct buffer_list_s buffer_list_t; typedef struct device_s device_t; struct pollfd; typedef struct device_libcamera_s { std::shared_ptr camera_manager; std::shared_ptr camera; std::shared_ptr configuration; std::shared_ptr allocator; libcamera::ControlList controls; libcamera::ControlList applied_controls; bool vflip, hflip; } device_libcamera_t; typedef struct buffer_list_libcamera_s { buffer_list_t *buf_list; int fds[2]; void libcamera_buffer_list_dequeued(libcamera::Request *request); } buffer_list_libcamera_t; typedef struct buffer_libcamera_s { std::shared_ptr request; } buffer_libcamera_t; int libcamera_device_open(device_t *dev); void libcamera_device_close(device_t *dev); void libcamera_device_dump_options(device_t *dev, FILE *stream); int libcamera_device_dump_options2(device_t *dev, device_option_fn fn, void *opaque); int libcamera_device_set_fps(device_t *dev, int desired_fps); int libcamera_device_set_rotation(device_t *dev, bool vflip, bool hflip); int libcamera_device_set_option(device_t *dev, const char *key, const char *value); void libcamera_device_apply_controls(device_t *dev); int libcamera_buffer_open(buffer_t *buf); void libcamera_buffer_close(buffer_t *buf); int libcamera_buffer_enqueue(buffer_t *buf, const char *who); void libcamera_buffer_list_dequeued(buffer_list_t *buf_list, libcamera::Request *request); int libcamera_buffer_list_dequeue(buffer_list_t *buf_list, buffer_t **bufp); int libcamera_buffer_list_pollfd(buffer_list_t *buf_list, struct pollfd *pollfd, bool can_dequeue); int libcamera_buffer_list_open(buffer_list_t *buf_list); void libcamera_buffer_list_close(buffer_list_t *buf_list); int libcamera_buffer_list_alloc_buffers(buffer_list_t *buf_list); void libcamera_buffer_list_free_buffers(buffer_list_t *buf_list); int libcamera_buffer_list_set_stream(buffer_list_t *buf_list, bool do_on); #endif // USE_LIBCAMERA