From f934fd1cb9371dc49e32aee061284a2dadd8ea89 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Fri, 15 May 2020 19:01:30 +0300 Subject: libcamera: Move IPA headers from include/ipa/ to include/libcamera/ipa/ The IPA headers are installed into $prefix/include/libcamera/ipa/, but are located in the source tree in include/ipa/. This requires files within libcamera to include them with #include while a third party IPA would need to use #include Not only is this inconsistent, it can create issues later if IPA headers need to include each other, as the first form of include directive wouldn't be valid once the headers are installed. Fix the problem by moving the IPA headers to include/libcamera/ipa/. Signed-off-by: Laurent Pinchart Acked-by: Jacopo Mondi --- Documentation/Doxyfile.in | 3 +- include/ipa/ipa_controls.h | 47 ------ include/ipa/ipa_interface.h | 173 --------------------- include/ipa/ipa_module_info.h | 29 ---- include/ipa/ipa_vimc.h | 24 --- include/ipa/meson.build | 10 -- include/ipa/raspberrypi.h | 58 ------- include/ipa/rkisp1.h | 18 --- include/libcamera/internal/ipa_context_wrapper.h | 2 +- include/libcamera/internal/ipa_manager.h | 4 +- include/libcamera/internal/ipa_module.h | 4 +- include/libcamera/internal/ipa_proxy.h | 2 +- include/libcamera/ipa/ipa_controls.h | 47 ++++++ include/libcamera/ipa/ipa_interface.h | 173 +++++++++++++++++++++ include/libcamera/ipa/ipa_module_info.h | 29 ++++ include/libcamera/ipa/ipa_vimc.h | 24 +++ include/libcamera/ipa/meson.build | 10 ++ include/libcamera/ipa/raspberrypi.h | 58 +++++++ include/libcamera/ipa/rkisp1.h | 18 +++ include/libcamera/meson.build | 1 + include/meson.build | 1 - src/ipa/libipa/ipa_interface_wrapper.cpp | 2 +- src/ipa/libipa/ipa_interface_wrapper.h | 2 +- src/ipa/raspberrypi/raspberrypi.cpp | 7 +- src/ipa/rkisp1/rkisp1.cpp | 7 +- src/ipa/vimc/vimc.cpp | 6 +- src/libcamera/control_serializer.cpp | 2 +- src/libcamera/ipa_controls.cpp | 2 +- src/libcamera/ipa_interface.cpp | 2 +- src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 2 +- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 +- src/libcamera/pipeline/vimc/vimc.cpp | 4 +- src/libcamera/proxy/ipa_proxy_linux.cpp | 4 +- src/libcamera/proxy/ipa_proxy_thread.cpp | 4 +- .../proxy/worker/ipa_proxy_linux_worker.cpp | 2 +- test/ipa/ipa_interface_test.cpp | 3 +- 36 files changed, 393 insertions(+), 393 deletions(-) delete mode 100644 include/ipa/ipa_controls.h delete mode 100644 include/ipa/ipa_interface.h delete mode 100644 include/ipa/ipa_module_info.h delete mode 100644 include/ipa/ipa_vimc.h delete mode 100644 include/ipa/meson.build delete mode 100644 include/ipa/raspberrypi.h delete mode 100644 include/ipa/rkisp1.h create mode 100644 include/libcamera/ipa/ipa_controls.h create mode 100644 include/libcamera/ipa/ipa_interface.h create mode 100644 include/libcamera/ipa/ipa_module_info.h create mode 100644 include/libcamera/ipa/ipa_vimc.h create mode 100644 include/libcamera/ipa/meson.build create mode 100644 include/libcamera/ipa/raspberrypi.h create mode 100644 include/libcamera/ipa/rkisp1.h diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in index c3fe5f66..5f484752 100644 --- a/Documentation/Doxyfile.in +++ b/Documentation/Doxyfile.in @@ -794,8 +794,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "@TOP_SRCDIR@/include/ipa" \ - "@TOP_SRCDIR@/include/libcamera" \ +INPUT = "@TOP_SRCDIR@/include/libcamera" \ "@TOP_SRCDIR@/src/ipa/libipa" \ "@TOP_SRCDIR@/src/libcamera" \ "@TOP_BUILDDIR@/include/libcamera" \ diff --git a/include/ipa/ipa_controls.h b/include/ipa/ipa_controls.h deleted file mode 100644 index 6d3bf279..00000000 --- a/include/ipa/ipa_controls.h +++ /dev/null @@ -1,47 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipa_controls.h - IPA Control handling - */ -#ifndef __LIBCAMERA_IPA_CONTROLS_H__ -#define __LIBCAMERA_IPA_CONTROLS_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define IPA_CONTROLS_FORMAT_VERSION 1 - -struct ipa_controls_header { - uint32_t version; - uint32_t handle; - uint32_t entries; - uint32_t size; - uint32_t data_offset; - uint32_t reserved[3]; -}; - -struct ipa_control_value_entry { - uint32_t id; - uint8_t type; - uint8_t is_array; - uint16_t count; - uint32_t offset; - uint32_t padding[1]; -}; - -struct ipa_control_info_entry { - uint32_t id; - uint32_t type; - uint32_t offset; - uint32_t padding[1]; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* __LIBCAMERA_IPA_CONTROLS_H__ */ diff --git a/include/ipa/ipa_interface.h b/include/ipa/ipa_interface.h deleted file mode 100644 index dc9fc714..00000000 --- a/include/ipa/ipa_interface.h +++ /dev/null @@ -1,173 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipa_interface.h - Image Processing Algorithm interface - */ -#ifndef __LIBCAMERA_IPA_INTERFACE_H__ -#define __LIBCAMERA_IPA_INTERFACE_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct ipa_context { - const struct ipa_context_ops *ops; -}; - -struct ipa_settings { - const char *configuration_file; -}; - -struct ipa_sensor_info { - const char *model; - uint8_t bits_per_pixel; - struct { - uint32_t width; - uint32_t height; - } active_area; - struct { - int32_t left; - int32_t top; - uint32_t width; - uint32_t height; - } analog_crop; - struct { - uint32_t width; - uint32_t height; - } output_size; - uint64_t pixel_rate; - uint32_t line_length; -}; - -struct ipa_stream { - unsigned int id; - unsigned int pixel_format; - unsigned int width; - unsigned int height; -}; - -struct ipa_control_info_map { - unsigned int id; - const uint8_t *data; - size_t size; -}; - -struct ipa_buffer_plane { - int dmabuf; - size_t length; -}; - -struct ipa_buffer { - unsigned int id; - unsigned int num_planes; - struct ipa_buffer_plane planes[3]; -}; - -struct ipa_control_list { - const uint8_t *data; - unsigned int size; -}; - -struct ipa_operation_data { - unsigned int operation; - const uint32_t *data; - unsigned int num_data; - const struct ipa_control_list *lists; - unsigned int num_lists; -}; - -struct ipa_callback_ops { - void (*queue_frame_action)(void *cb_ctx, unsigned int frame, - struct ipa_operation_data &data); -}; - -struct ipa_context_ops { - void (*destroy)(struct ipa_context *ctx); - void *(*get_interface)(struct ipa_context *ctx); - void (*init)(struct ipa_context *ctx, - const struct ipa_settings *settings); - int (*start)(struct ipa_context *ctx); - void (*stop)(struct ipa_context *ctx); - void (*register_callbacks)(struct ipa_context *ctx, - const struct ipa_callback_ops *callbacks, - void *cb_ctx); - void (*configure)(struct ipa_context *ctx, - const struct ipa_sensor_info *sensor_info, - const struct ipa_stream *streams, - unsigned int num_streams, - const struct ipa_control_info_map *maps, - unsigned int num_maps); - void (*map_buffers)(struct ipa_context *ctx, - const struct ipa_buffer *buffers, - size_t num_buffers); - void (*unmap_buffers)(struct ipa_context *ctx, const unsigned int *ids, - size_t num_buffers); - void (*process_event)(struct ipa_context *ctx, - const struct ipa_operation_data *data); -}; - -struct ipa_context *ipaCreate(); - -#ifdef __cplusplus -} - -#include -#include - -#include -#include -#include -#include - -namespace libcamera { - -struct IPASettings { - std::string configurationFile; -}; - -struct IPAStream { - unsigned int pixelFormat; - Size size; -}; - -struct IPABuffer { - unsigned int id; - std::vector planes; -}; - -struct IPAOperationData { - unsigned int operation; - std::vector data; - std::vector controls; -}; - -struct CameraSensorInfo; - -class IPAInterface -{ -public: - virtual ~IPAInterface() {} - - virtual int init(const IPASettings &settings) = 0; - virtual int start() = 0; - virtual void stop() = 0; - - virtual void configure(const CameraSensorInfo &sensorInfo, - const std::map &streamConfig, - const std::map &entityControls) = 0; - - virtual void mapBuffers(const std::vector &buffers) = 0; - virtual void unmapBuffers(const std::vector &ids) = 0; - - virtual void processEvent(const IPAOperationData &data) = 0; - Signal queueFrameAction; -}; - -} /* namespace libcamera */ -#endif - -#endif /* __LIBCAMERA_IPA_INTERFACE_H__ */ diff --git a/include/ipa/ipa_module_info.h b/include/ipa/ipa_module_info.h deleted file mode 100644 index 3b1c37d2..00000000 --- a/include/ipa/ipa_module_info.h +++ /dev/null @@ -1,29 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipa_module_info.h - Image Processing Algorithm module information - */ -#ifndef __LIBCAMERA_IPA_MODULE_INFO_H__ -#define __LIBCAMERA_IPA_MODULE_INFO_H__ - -#include - -#define IPA_MODULE_API_VERSION 1 - -namespace libcamera { - -struct IPAModuleInfo { - int moduleAPIVersion; - uint32_t pipelineVersion; - char pipelineName[256]; - char name[256]; -} __attribute__((packed)); - -extern "C" { -extern const struct IPAModuleInfo ipaModuleInfo; -} - -} /* namespace libcamera */ - -#endif /* __LIBCAMERA_IPA_MODULE_INFO_H__ */ diff --git a/include/ipa/ipa_vimc.h b/include/ipa/ipa_vimc.h deleted file mode 100644 index 8e82dd94..00000000 --- a/include/ipa/ipa_vimc.h +++ /dev/null @@ -1,24 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipa_vimc.h - Vimc Image Processing Algorithm module - */ - -#ifndef __LIBCAMERA_IPA_VIMC_H__ -#define __LIBCAMERA_IPA_VIMC_H__ - -namespace libcamera { - -#define VIMC_IPA_FIFO_PATH "/tmp/libcamera_ipa_vimc_fifo" - -enum IPAOperationCode { - IPAOperationNone, - IPAOperationInit, - IPAOperationStart, - IPAOperationStop, -}; - -} /* namespace libcamera */ - -#endif /* __LIBCAMERA_IPA_VIMC_H__ */ diff --git a/include/ipa/meson.build b/include/ipa/meson.build deleted file mode 100644 index 3d5c0dd6..00000000 --- a/include/ipa/meson.build +++ /dev/null @@ -1,10 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -libcamera_ipa_api = files([ - 'ipa_controls.h', - 'ipa_interface.h', - 'ipa_module_info.h', -]) - -install_headers(libcamera_ipa_api, - subdir: join_paths(libcamera_include_dir, 'ipa')) diff --git a/include/ipa/raspberrypi.h b/include/ipa/raspberrypi.h deleted file mode 100644 index c109469e..00000000 --- a/include/ipa/raspberrypi.h +++ /dev/null @@ -1,58 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019-2020, Raspberry Pi Ltd. - * - * raspberrypi.h - Image Processing Algorithm interface for Raspberry Pi - */ -#ifndef __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ -#define __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ - -#include -#include - -enum RPiOperations { - RPI_IPA_ACTION_V4L2_SET_STAGGERED = 1, - RPI_IPA_ACTION_V4L2_SET_ISP, - RPI_IPA_ACTION_STATS_METADATA_COMPLETE, - RPI_IPA_ACTION_RUN_ISP, - RPI_IPA_ACTION_RUN_ISP_AND_DROP_FRAME, - RPI_IPA_ACTION_SET_SENSOR_CONFIG, - RPI_IPA_ACTION_EMBEDDED_COMPLETE, - RPI_IPA_EVENT_SIGNAL_STAT_READY, - RPI_IPA_EVENT_SIGNAL_ISP_PREPARE, - RPI_IPA_EVENT_QUEUE_REQUEST, - RPI_IPA_EVENT_LS_TABLE_ALLOCATION, -}; - -enum RPiIpaMask { - ID = 0x0ffff, - STATS = 0x10000, - EMBEDDED_DATA = 0x20000, - BAYER_DATA = 0x40000 -}; - -/* Size of the LS grid allocation. */ -#define MAX_LS_GRID_SIZE (32 << 10) - -namespace libcamera { - -/* List of controls handled by the Raspberry Pi IPA */ -static const ControlInfoMap RPiControls = { - { &controls::AeEnable, ControlInfo(false, true) }, - { &controls::ExposureTime, ControlInfo(0, 999999) }, - { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) }, - { &controls::AeMeteringMode, ControlInfo(0, static_cast(controls::MeteringModeMax)) }, - { &controls::AeConstraintMode, ControlInfo(0, static_cast(controls::ConstraintModeMax)) }, - { &controls::AeExposureMode, ControlInfo(0, static_cast(controls::ExposureModeMax)) }, - { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) }, - { &controls::AwbEnable, ControlInfo(false, true) }, - { &controls::ColourGains, ControlInfo(0.0f, 32.0f) }, - { &controls::AwbMode, ControlInfo(0, static_cast(controls::AwbModeMax)) }, - { &controls::Brightness, ControlInfo(-1.0f, 1.0f) }, - { &controls::Contrast, ControlInfo(0.0f, 32.0f) }, - { &controls::Saturation, ControlInfo(0.0f, 32.0f) }, -}; - -} /* namespace libcamera */ - -#endif /* __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ */ diff --git a/include/ipa/rkisp1.h b/include/ipa/rkisp1.h deleted file mode 100644 index 4fe0482b..00000000 --- a/include/ipa/rkisp1.h +++ /dev/null @@ -1,18 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * rkisp1.h - Image Processing Algorithm interface for RkISP1 - */ -#ifndef __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ -#define __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ - -enum RkISP1Operations { - RKISP1_IPA_ACTION_V4L2_SET = 1, - RKISP1_IPA_ACTION_PARAM_FILLED = 2, - RKISP1_IPA_ACTION_METADATA = 3, - RKISP1_IPA_EVENT_SIGNAL_STAT_BUFFER = 4, - RKISP1_IPA_EVENT_QUEUE_REQUEST = 5, -}; - -#endif /* __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ */ diff --git a/include/libcamera/internal/ipa_context_wrapper.h b/include/libcamera/internal/ipa_context_wrapper.h index a717d406..bd770e13 100644 --- a/include/libcamera/internal/ipa_context_wrapper.h +++ b/include/libcamera/internal/ipa_context_wrapper.h @@ -7,7 +7,7 @@ #ifndef __LIBCAMERA_IPA_CONTEXT_WRAPPER_H__ #define __LIBCAMERA_IPA_CONTEXT_WRAPPER_H__ -#include +#include #include "libcamera/internal/control_serializer.h" diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h index f07d91fc..2412d757 100644 --- a/include/libcamera/internal/ipa_manager.h +++ b/include/libcamera/internal/ipa_manager.h @@ -10,8 +10,8 @@ #include #include -#include -#include +#include +#include #include "libcamera/internal/ipa_module.h" #include "libcamera/internal/pipeline_handler.h" diff --git a/include/libcamera/internal/ipa_module.h b/include/libcamera/internal/ipa_module.h index 2f569db0..5b54cb31 100644 --- a/include/libcamera/internal/ipa_module.h +++ b/include/libcamera/internal/ipa_module.h @@ -11,8 +11,8 @@ #include #include -#include -#include +#include +#include #include "libcamera/internal/log.h" #include "libcamera/internal/pipeline_handler.h" diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h index 1111065b..e9a36608 100644 --- a/include/libcamera/internal/ipa_proxy.h +++ b/include/libcamera/internal/ipa_proxy.h @@ -11,7 +11,7 @@ #include #include -#include +#include namespace libcamera { diff --git a/include/libcamera/ipa/ipa_controls.h b/include/libcamera/ipa/ipa_controls.h new file mode 100644 index 00000000..6d3bf279 --- /dev/null +++ b/include/libcamera/ipa/ipa_controls.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_controls.h - IPA Control handling + */ +#ifndef __LIBCAMERA_IPA_CONTROLS_H__ +#define __LIBCAMERA_IPA_CONTROLS_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define IPA_CONTROLS_FORMAT_VERSION 1 + +struct ipa_controls_header { + uint32_t version; + uint32_t handle; + uint32_t entries; + uint32_t size; + uint32_t data_offset; + uint32_t reserved[3]; +}; + +struct ipa_control_value_entry { + uint32_t id; + uint8_t type; + uint8_t is_array; + uint16_t count; + uint32_t offset; + uint32_t padding[1]; +}; + +struct ipa_control_info_entry { + uint32_t id; + uint32_t type; + uint32_t offset; + uint32_t padding[1]; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* __LIBCAMERA_IPA_CONTROLS_H__ */ diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h new file mode 100644 index 00000000..dc9fc714 --- /dev/null +++ b/include/libcamera/ipa/ipa_interface.h @@ -0,0 +1,173 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_interface.h - Image Processing Algorithm interface + */ +#ifndef __LIBCAMERA_IPA_INTERFACE_H__ +#define __LIBCAMERA_IPA_INTERFACE_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct ipa_context { + const struct ipa_context_ops *ops; +}; + +struct ipa_settings { + const char *configuration_file; +}; + +struct ipa_sensor_info { + const char *model; + uint8_t bits_per_pixel; + struct { + uint32_t width; + uint32_t height; + } active_area; + struct { + int32_t left; + int32_t top; + uint32_t width; + uint32_t height; + } analog_crop; + struct { + uint32_t width; + uint32_t height; + } output_size; + uint64_t pixel_rate; + uint32_t line_length; +}; + +struct ipa_stream { + unsigned int id; + unsigned int pixel_format; + unsigned int width; + unsigned int height; +}; + +struct ipa_control_info_map { + unsigned int id; + const uint8_t *data; + size_t size; +}; + +struct ipa_buffer_plane { + int dmabuf; + size_t length; +}; + +struct ipa_buffer { + unsigned int id; + unsigned int num_planes; + struct ipa_buffer_plane planes[3]; +}; + +struct ipa_control_list { + const uint8_t *data; + unsigned int size; +}; + +struct ipa_operation_data { + unsigned int operation; + const uint32_t *data; + unsigned int num_data; + const struct ipa_control_list *lists; + unsigned int num_lists; +}; + +struct ipa_callback_ops { + void (*queue_frame_action)(void *cb_ctx, unsigned int frame, + struct ipa_operation_data &data); +}; + +struct ipa_context_ops { + void (*destroy)(struct ipa_context *ctx); + void *(*get_interface)(struct ipa_context *ctx); + void (*init)(struct ipa_context *ctx, + const struct ipa_settings *settings); + int (*start)(struct ipa_context *ctx); + void (*stop)(struct ipa_context *ctx); + void (*register_callbacks)(struct ipa_context *ctx, + const struct ipa_callback_ops *callbacks, + void *cb_ctx); + void (*configure)(struct ipa_context *ctx, + const struct ipa_sensor_info *sensor_info, + const struct ipa_stream *streams, + unsigned int num_streams, + const struct ipa_control_info_map *maps, + unsigned int num_maps); + void (*map_buffers)(struct ipa_context *ctx, + const struct ipa_buffer *buffers, + size_t num_buffers); + void (*unmap_buffers)(struct ipa_context *ctx, const unsigned int *ids, + size_t num_buffers); + void (*process_event)(struct ipa_context *ctx, + const struct ipa_operation_data *data); +}; + +struct ipa_context *ipaCreate(); + +#ifdef __cplusplus +} + +#include +#include + +#include +#include +#include +#include + +namespace libcamera { + +struct IPASettings { + std::string configurationFile; +}; + +struct IPAStream { + unsigned int pixelFormat; + Size size; +}; + +struct IPABuffer { + unsigned int id; + std::vector planes; +}; + +struct IPAOperationData { + unsigned int operation; + std::vector data; + std::vector controls; +}; + +struct CameraSensorInfo; + +class IPAInterface +{ +public: + virtual ~IPAInterface() {} + + virtual int init(const IPASettings &settings) = 0; + virtual int start() = 0; + virtual void stop() = 0; + + virtual void configure(const CameraSensorInfo &sensorInfo, + const std::map &streamConfig, + const std::map &entityControls) = 0; + + virtual void mapBuffers(const std::vector &buffers) = 0; + virtual void unmapBuffers(const std::vector &ids) = 0; + + virtual void processEvent(const IPAOperationData &data) = 0; + Signal queueFrameAction; +}; + +} /* namespace libcamera */ +#endif + +#endif /* __LIBCAMERA_IPA_INTERFACE_H__ */ diff --git a/include/libcamera/ipa/ipa_module_info.h b/include/libcamera/ipa/ipa_module_info.h new file mode 100644 index 00000000..3b1c37d2 --- /dev/null +++ b/include/libcamera/ipa/ipa_module_info.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_module_info.h - Image Processing Algorithm module information + */ +#ifndef __LIBCAMERA_IPA_MODULE_INFO_H__ +#define __LIBCAMERA_IPA_MODULE_INFO_H__ + +#include + +#define IPA_MODULE_API_VERSION 1 + +namespace libcamera { + +struct IPAModuleInfo { + int moduleAPIVersion; + uint32_t pipelineVersion; + char pipelineName[256]; + char name[256]; +} __attribute__((packed)); + +extern "C" { +extern const struct IPAModuleInfo ipaModuleInfo; +} + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_IPA_MODULE_INFO_H__ */ diff --git a/include/libcamera/ipa/ipa_vimc.h b/include/libcamera/ipa/ipa_vimc.h new file mode 100644 index 00000000..8e82dd94 --- /dev/null +++ b/include/libcamera/ipa/ipa_vimc.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_vimc.h - Vimc Image Processing Algorithm module + */ + +#ifndef __LIBCAMERA_IPA_VIMC_H__ +#define __LIBCAMERA_IPA_VIMC_H__ + +namespace libcamera { + +#define VIMC_IPA_FIFO_PATH "/tmp/libcamera_ipa_vimc_fifo" + +enum IPAOperationCode { + IPAOperationNone, + IPAOperationInit, + IPAOperationStart, + IPAOperationStop, +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_IPA_VIMC_H__ */ diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build new file mode 100644 index 00000000..3d5c0dd6 --- /dev/null +++ b/include/libcamera/ipa/meson.build @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: CC0-1.0 + +libcamera_ipa_api = files([ + 'ipa_controls.h', + 'ipa_interface.h', + 'ipa_module_info.h', +]) + +install_headers(libcamera_ipa_api, + subdir: join_paths(libcamera_include_dir, 'ipa')) diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h new file mode 100644 index 00000000..c109469e --- /dev/null +++ b/include/libcamera/ipa/raspberrypi.h @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019-2020, Raspberry Pi Ltd. + * + * raspberrypi.h - Image Processing Algorithm interface for Raspberry Pi + */ +#ifndef __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ +#define __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ + +#include +#include + +enum RPiOperations { + RPI_IPA_ACTION_V4L2_SET_STAGGERED = 1, + RPI_IPA_ACTION_V4L2_SET_ISP, + RPI_IPA_ACTION_STATS_METADATA_COMPLETE, + RPI_IPA_ACTION_RUN_ISP, + RPI_IPA_ACTION_RUN_ISP_AND_DROP_FRAME, + RPI_IPA_ACTION_SET_SENSOR_CONFIG, + RPI_IPA_ACTION_EMBEDDED_COMPLETE, + RPI_IPA_EVENT_SIGNAL_STAT_READY, + RPI_IPA_EVENT_SIGNAL_ISP_PREPARE, + RPI_IPA_EVENT_QUEUE_REQUEST, + RPI_IPA_EVENT_LS_TABLE_ALLOCATION, +}; + +enum RPiIpaMask { + ID = 0x0ffff, + STATS = 0x10000, + EMBEDDED_DATA = 0x20000, + BAYER_DATA = 0x40000 +}; + +/* Size of the LS grid allocation. */ +#define MAX_LS_GRID_SIZE (32 << 10) + +namespace libcamera { + +/* List of controls handled by the Raspberry Pi IPA */ +static const ControlInfoMap RPiControls = { + { &controls::AeEnable, ControlInfo(false, true) }, + { &controls::ExposureTime, ControlInfo(0, 999999) }, + { &controls::AnalogueGain, ControlInfo(1.0f, 32.0f) }, + { &controls::AeMeteringMode, ControlInfo(0, static_cast(controls::MeteringModeMax)) }, + { &controls::AeConstraintMode, ControlInfo(0, static_cast(controls::ConstraintModeMax)) }, + { &controls::AeExposureMode, ControlInfo(0, static_cast(controls::ExposureModeMax)) }, + { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) }, + { &controls::AwbEnable, ControlInfo(false, true) }, + { &controls::ColourGains, ControlInfo(0.0f, 32.0f) }, + { &controls::AwbMode, ControlInfo(0, static_cast(controls::AwbModeMax)) }, + { &controls::Brightness, ControlInfo(-1.0f, 1.0f) }, + { &controls::Contrast, ControlInfo(0.0f, 32.0f) }, + { &controls::Saturation, ControlInfo(0.0f, 32.0f) }, +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_IPA_INTERFACE_RASPBERRYPI_H__ */ diff --git a/include/libcamera/ipa/rkisp1.h b/include/libcamera/ipa/rkisp1.h new file mode 100644 index 00000000..4fe0482b --- /dev/null +++ b/include/libcamera/ipa/rkisp1.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * rkisp1.h - Image Processing Algorithm interface for RkISP1 + */ +#ifndef __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ +#define __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ + +enum RkISP1Operations { + RKISP1_IPA_ACTION_V4L2_SET = 1, + RKISP1_IPA_ACTION_PARAM_FILLED = 2, + RKISP1_IPA_ACTION_METADATA = 3, + RKISP1_IPA_EVENT_SIGNAL_STAT_BUFFER = 4, + RKISP1_IPA_EVENT_QUEUE_REQUEST = 5, +}; + +#endif /* __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ */ diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build index f9c8e64b..32b8d142 100644 --- a/include/libcamera/meson.build +++ b/include/libcamera/meson.build @@ -24,6 +24,7 @@ libcamera_api = files([ include_dir = join_paths(libcamera_include_dir, 'libcamera') subdir('internal') +subdir('ipa') install_headers(libcamera_api, subdir : include_dir) diff --git a/include/meson.build b/include/meson.build index 4f41c9ce..2ac9a3a0 100644 --- a/include/meson.build +++ b/include/meson.build @@ -3,5 +3,4 @@ libcamera_include_dir = 'libcamera' subdir('android') -subdir('ipa') subdir('libcamera') diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp index 90f270c0..2a2e43ab 100644 --- a/src/ipa/libipa/ipa_interface_wrapper.cpp +++ b/src/ipa/libipa/ipa_interface_wrapper.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include "libcamera/internal/byte_stream_buffer.h" #include "libcamera/internal/camera_sensor.h" diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h index b426034d..a1c70159 100644 --- a/src/ipa/libipa/ipa_interface_wrapper.h +++ b/src/ipa/libipa/ipa_interface_wrapper.h @@ -9,7 +9,7 @@ #include -#include +#include #include "libcamera/internal/control_serializer.h" diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 46b24453..9669f212 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -12,14 +12,15 @@ #include #include -#include -#include -#include #include #include #include +#include +#include +#include #include #include + #include #include "libcamera/internal/camera_sensor.h" diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index 4f6e0342..fbdc908f 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -14,12 +14,13 @@ #include -#include -#include -#include #include #include +#include +#include +#include #include + #include #include "libcamera/internal/log.h" diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp index 3fa6be65..af278a48 100644 --- a/src/ipa/vimc/vimc.cpp +++ b/src/ipa/vimc/vimc.cpp @@ -5,7 +5,7 @@ * ipa_vimc.cpp - Vimc Image Processing Algorithm module */ -#include +#include #include #include @@ -14,8 +14,8 @@ #include -#include -#include +#include +#include #include diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp index bf162b6c..258db6df 100644 --- a/src/libcamera/control_serializer.cpp +++ b/src/libcamera/control_serializer.cpp @@ -11,9 +11,9 @@ #include #include -#include #include #include +#include #include #include "libcamera/internal/byte_stream_buffer.h" diff --git a/src/libcamera/ipa_controls.cpp b/src/libcamera/ipa_controls.cpp index b1d14190..8fd72651 100644 --- a/src/libcamera/ipa_controls.cpp +++ b/src/libcamera/ipa_controls.cpp @@ -5,7 +5,7 @@ * ipa_controls.cpp - IPA control handling */ -#include +#include /** * \file ipa_controls.h diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp index c890eada..69835e63 100644 --- a/src/libcamera/ipa_interface.cpp +++ b/src/libcamera/ipa_interface.cpp @@ -5,7 +5,7 @@ * ipa_interface.cpp - Image Processing Algorithm interface */ -#include +#include /** * \file ipa_interface.h diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index e254e555..07ca9f5d 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -11,9 +11,9 @@ #include #include -#include #include #include +#include #include #include #include diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 7a0c8771..d807fc2c 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -13,10 +13,10 @@ #include -#include #include #include #include +#include #include #include diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 50a9f2df..ca36348a 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -14,11 +14,11 @@ #include #include -#include -#include #include #include #include +#include +#include #include #include diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp index 7d6f8799..be34f20a 100644 --- a/src/libcamera/proxy/ipa_proxy_linux.cpp +++ b/src/libcamera/proxy/ipa_proxy_linux.cpp @@ -7,8 +7,8 @@ #include -#include -#include +#include +#include #include "libcamera/internal/ipa_module.h" #include "libcamera/internal/ipa_proxy.h" diff --git a/src/libcamera/proxy/ipa_proxy_thread.cpp b/src/libcamera/proxy/ipa_proxy_thread.cpp index 03d4c0d9..6fbebed2 100644 --- a/src/libcamera/proxy/ipa_proxy_thread.cpp +++ b/src/libcamera/proxy/ipa_proxy_thread.cpp @@ -7,8 +7,8 @@ #include -#include -#include +#include +#include #include "libcamera/internal/ipa_context_wrapper.h" #include "libcamera/internal/ipa_module.h" diff --git a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp index 9ba94d01..0c4687f7 100644 --- a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp +++ b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp @@ -9,8 +9,8 @@ #include #include -#include #include +#include #include #include "libcamera/internal/ipa_module.h" diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp index c394377d..2f02af49 100644 --- a/test/ipa/ipa_interface_test.cpp +++ b/test/ipa/ipa_interface_test.cpp @@ -14,10 +14,9 @@ #include #include +#include #include -#include - #include "libcamera/internal/device_enumerator.h" #include "libcamera/internal/ipa_manager.h" #include "libcamera/internal/ipa_module.h" -- cgit v1.2.1