diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/libcamera/internal/ipa_context_wrapper.h | 53 | ||||
-rw-r--r-- | include/libcamera/internal/ipa_manager.h | 31 | ||||
-rw-r--r-- | include/libcamera/internal/ipa_module.h | 4 | ||||
-rw-r--r-- | include/libcamera/internal/ipa_proxy.h | 31 | ||||
-rw-r--r-- | include/libcamera/internal/meson.build | 1 | ||||
-rw-r--r-- | include/libcamera/internal/pipeline_handler.h | 1 | ||||
-rw-r--r-- | include/libcamera/ipa/ipa_interface.h | 147 | ||||
-rw-r--r-- | include/libcamera/ipa/ipu3.h | 23 | ||||
-rw-r--r-- | include/libcamera/ipa/ipu3.mojom | 43 | ||||
-rw-r--r-- | include/libcamera/ipa/meson.build | 7 | ||||
-rw-r--r-- | include/libcamera/ipa/raspberrypi.h | 31 | ||||
-rw-r--r-- | include/libcamera/ipa/raspberrypi.mojom | 131 | ||||
-rw-r--r-- | include/libcamera/ipa/rkisp1.h | 22 | ||||
-rw-r--r-- | include/libcamera/ipa/rkisp1.mojom | 44 | ||||
-rw-r--r-- | include/libcamera/ipa/vimc.h | 28 | ||||
-rw-r--r-- | include/libcamera/ipa/vimc.mojom | 24 |
16 files changed, 282 insertions, 339 deletions
diff --git a/include/libcamera/internal/ipa_context_wrapper.h b/include/libcamera/internal/ipa_context_wrapper.h deleted file mode 100644 index ec27e48e..00000000 --- a/include/libcamera/internal/ipa_context_wrapper.h +++ /dev/null @@ -1,53 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * ipa_context_wrapper.h - Image Processing Algorithm context wrapper - */ -#ifndef __LIBCAMERA_INTERNAL_IPA_CONTEXT_WRAPPER_H__ -#define __LIBCAMERA_INTERNAL_IPA_CONTEXT_WRAPPER_H__ - -#include <libcamera/ipa/ipa_interface.h> - -#include "libcamera/internal/control_serializer.h" - -namespace libcamera { - -class IPAContextWrapper final : public IPAInterface -{ -public: - IPAContextWrapper(struct ipa_context *context); - ~IPAContextWrapper(); - - int init(const IPASettings &settings) override; - int start(const IPAOperationData &data, - IPAOperationData *result) override; - void stop() override; - void configure(const CameraSensorInfo &sensorInfo, - const std::map<unsigned int, IPAStream> &streamConfig, - const std::map<unsigned int, const ControlInfoMap &> &entityControls, - const IPAOperationData &ipaConfig, - IPAOperationData *result) override; - - void mapBuffers(const std::vector<IPABuffer> &buffers) override; - void unmapBuffers(const std::vector<unsigned int> &ids) override; - - virtual void processEvent(const IPAOperationData &data) override; - -private: - static void queue_frame_action(void *ctx, unsigned int frame, - struct ipa_operation_data &data); - static const struct ipa_callback_ops callbacks_; - - void doQueueFrameAction(unsigned int frame, - const IPAOperationData &data); - - struct ipa_context *ctx_; - IPAInterface *intf_; - - ControlSerializer serializer_; -}; - -} /* namespace libcamera */ - -#endif /* __LIBCAMERA_INTERNAL_IPA_CONTEXT_WRAPPER_H__ */ diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h index 4a143b6a..e904a2be 100644 --- a/include/libcamera/internal/ipa_manager.h +++ b/include/libcamera/internal/ipa_manager.h @@ -14,20 +14,45 @@ #include <libcamera/ipa/ipa_module_info.h> #include "libcamera/internal/ipa_module.h" +#include "libcamera/internal/log.h" #include "libcamera/internal/pipeline_handler.h" #include "libcamera/internal/pub_key.h" namespace libcamera { +LOG_DECLARE_CATEGORY(IPAManager) + class IPAManager { public: IPAManager(); ~IPAManager(); - static std::unique_ptr<IPAProxy> createIPA(PipelineHandler *pipe, - uint32_t maxVersion, - uint32_t minVersion); + template<typename T> + static std::unique_ptr<T> createIPA(PipelineHandler *pipe, + uint32_t maxVersion, + uint32_t minVersion) + { + IPAModule *m = nullptr; + + for (IPAModule *module : self_->modules_) { + if (module->match(pipe, minVersion, maxVersion)) { + m = module; + break; + } + } + + if (!m) + return nullptr; + + std::unique_ptr<T> proxy = std::make_unique<T>(m, !self_->isSignatureValid(m)); + if (!proxy->isValid()) { + LOG(IPAManager, Error) << "Failed to load proxy"; + return nullptr; + } + + return proxy; + } private: static IPAManager *self_; diff --git a/include/libcamera/internal/ipa_module.h b/include/libcamera/internal/ipa_module.h index c2df2476..19fc5827 100644 --- a/include/libcamera/internal/ipa_module.h +++ b/include/libcamera/internal/ipa_module.h @@ -33,7 +33,7 @@ public: bool load(); - struct ipa_context *createContext(); + IPAInterface *createInterface(); bool match(PipelineHandler *pipe, uint32_t minVersion, uint32_t maxVersion) const; @@ -52,7 +52,7 @@ private: bool loaded_; void *dlHandle_; - typedef struct ipa_context *(*IPAIntfFactory)(); + typedef IPAInterface *(*IPAIntfFactory)(void); IPAIntfFactory ipaCreate_; }; diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h index 49399f4e..f651a3ae 100644 --- a/include/libcamera/internal/ipa_proxy.h +++ b/include/libcamera/internal/ipa_proxy.h @@ -27,8 +27,6 @@ public: std::string configurationFile(const std::string &file) const; - void stop() override = 0; - protected: std::string resolvePath(const std::string &file) const; @@ -38,35 +36,6 @@ private: IPAModule *ipam_; }; -class IPAProxyFactory -{ -public: - IPAProxyFactory(const char *name); - virtual ~IPAProxyFactory() = default; - - virtual std::unique_ptr<IPAProxy> create(IPAModule *ipam) = 0; - - const std::string &name() const { return name_; } - - static void registerType(IPAProxyFactory *factory); - static std::vector<IPAProxyFactory *> &factories(); - -private: - std::string name_; -}; - -#define REGISTER_IPA_PROXY(proxy) \ -class proxy##Factory final : public IPAProxyFactory \ -{ \ -public: \ - proxy##Factory() : IPAProxyFactory(#proxy) {} \ - std::unique_ptr<IPAProxy> create(IPAModule *ipam) \ - { \ - return std::make_unique<proxy>(ipam); \ - } \ -}; \ -static proxy##Factory global_##proxy##Factory; - } /* namespace libcamera */ #endif /* __LIBCAMERA_INTERNAL_IPA_PROXY_H__ */ diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build index a1071721..1fe3918c 100644 --- a/include/libcamera/internal/meson.build +++ b/include/libcamera/internal/meson.build @@ -26,7 +26,6 @@ libcamera_internal_headers = files([ 'event_notifier.h', 'file.h', 'formats.h', - 'ipa_context_wrapper.h', 'ipa_manager.h', 'ipa_module.h', 'ipa_proxy.h', diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index d81c9b85..d455d3c9 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -47,7 +47,6 @@ public: std::list<Request *> queuedRequests_; ControlInfoMap controlInfo_; ControlList properties_; - std::unique_ptr<IPAProxy> ipa_; private: LIBCAMERA_DISABLE_COPY(CameraData) diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h index df12f9ce..47f81d1d 100644 --- a/include/libcamera/ipa/ipa_interface.h +++ b/include/libcamera/ipa/ipa_interface.h @@ -10,111 +10,6 @@ #include <stddef.h> #include <stdint.h> -#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 <map> #include <vector> @@ -125,52 +20,18 @@ struct ipa_context *ipaCreate(); namespace libcamera { -struct IPASettings { - std::string configurationFile; -}; - -struct IPAStream { - unsigned int pixelFormat; - Size size; -}; - -struct IPABuffer { - unsigned int id; - std::vector<FrameBuffer::Plane> planes; -}; - -struct IPAOperationData { - unsigned int operation; - std::vector<uint32_t> data; - std::vector<ControlList> controls; -}; - struct CameraSensorInfo; class IPAInterface { public: virtual ~IPAInterface() = default; - - virtual int init(const IPASettings &settings) = 0; - virtual int start(const IPAOperationData &data, - IPAOperationData *result) = 0; - virtual void stop() = 0; - - virtual void configure(const CameraSensorInfo &sensorInfo, - const std::map<unsigned int, IPAStream> &streamConfig, - const std::map<unsigned int, const ControlInfoMap &> &entityControls, - const IPAOperationData &ipaConfig, - IPAOperationData *result) = 0; - - virtual void mapBuffers(const std::vector<IPABuffer> &buffers) = 0; - virtual void unmapBuffers(const std::vector<unsigned int> &ids) = 0; - - virtual void processEvent(const IPAOperationData &data) = 0; - Signal<unsigned int, const IPAOperationData &> queueFrameAction; }; } /* namespace libcamera */ -#endif + +extern "C" { +libcamera::IPAInterface *ipaCreate(); +} #endif /* __LIBCAMERA_IPA_INTERFACE_H__ */ diff --git a/include/libcamera/ipa/ipu3.h b/include/libcamera/ipa/ipu3.h deleted file mode 100644 index cbaaef04..00000000 --- a/include/libcamera/ipa/ipu3.h +++ /dev/null @@ -1,23 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2020, Google Inc. - * - * ipu3.h - Image Processing Algorithm interface for IPU3 - */ -#ifndef __LIBCAMERA_IPA_INTERFACE_IPU3_H__ -#define __LIBCAMERA_IPA_INTERFACE_IPU3_H__ - -#ifndef __DOXYGEN__ - -enum IPU3Operations { - IPU3_IPA_ACTION_SET_SENSOR_CONTROLS = 1, - IPU3_IPA_ACTION_PARAM_FILLED = 2, - IPU3_IPA_ACTION_METADATA_READY = 3, - IPU3_IPA_EVENT_PROCESS_CONTROLS = 4, - IPU3_IPA_EVENT_STAT_READY = 5, - IPU3_IPA_EVENT_FILL_PARAMS = 6, -}; - -#endif /* __DOXYGEN__ */ - -#endif /* __LIBCAMERA_IPA_INTERFACE_IPU3_H__ */ diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom new file mode 100644 index 00000000..6ee11333 --- /dev/null +++ b/include/libcamera/ipa/ipu3.mojom @@ -0,0 +1,43 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +module ipa.ipu3; + +import "include/libcamera/ipa/core.mojom"; + +enum IPU3Operations { + ActionSetSensorControls = 1, + ActionParamFilled = 2, + ActionMetadataReady = 3, + EventProcessControls = 4, + EventStatReady = 5, + EventFillParams = 6, +}; + +struct IPU3Event { + IPU3Operations op; + uint32 frame; + uint32 bufferId; + ControlList controls; +}; + +struct IPU3Action { + IPU3Operations op; + ControlList controls; +}; + +interface IPAIPU3Interface { + init(IPASettings settings) => (int32 ret); + start() => (int32 ret); + stop(); + + configure(map<uint32, ControlInfoMap> entityControls) => (); + + mapBuffers(array<IPABuffer> buffers); + unmapBuffers(array<uint32> ids); + + [async] processEvent(IPU3Event ev); +}; + +interface IPAIPU3EventInterface { + queueFrameAction(uint32 frame, IPU3Action action); +}; diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build index 499d1bc0..fe8aa65b 100644 --- a/include/libcamera/ipa/meson.build +++ b/include/libcamera/ipa/meson.build @@ -54,7 +54,12 @@ libcamera_generated_ipa_headers += custom_target('core_ipa_serializer_h', './' +'@INPUT@' ]) -ipa_mojom_files = [] +ipa_mojom_files = [ + 'ipu3.mojom', + 'raspberrypi.mojom', + 'rkisp1.mojom', + 'vimc.mojom', +] ipa_mojoms = [] diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h index ee673a46..d10c1733 100644 --- a/include/libcamera/ipa/raspberrypi.h +++ b/include/libcamera/ipa/raspberrypi.h @@ -18,37 +18,6 @@ namespace libcamera { namespace RPi { -enum ConfigParameters { - IPA_CONFIG_LS_TABLE = (1 << 0), - IPA_CONFIG_STARTUP_CTRLS = (1 << 1), - IPA_RESULT_CONFIG_FAILED = (1 << 2), - IPA_RESULT_SENSOR_PARAMS = (1 << 3), - IPA_RESULT_SENSOR_CTRLS = (1 << 4), - IPA_RESULT_DROP_FRAMES = (1 << 5), -}; - -enum Operations { - IPA_ACTION_SET_DELAYED_CTRLS = 1, - IPA_ACTION_V4L2_SET_ISP, - IPA_ACTION_STATS_METADATA_COMPLETE, - IPA_ACTION_RUN_ISP, - IPA_ACTION_EMBEDDED_COMPLETE, - IPA_EVENT_SIGNAL_STAT_READY, - IPA_EVENT_SIGNAL_ISP_PREPARE, - IPA_EVENT_QUEUE_REQUEST, -}; - -enum BufferMask { - ID = 0x00ffff, - STATS = 0x010000, - EMBEDDED_DATA = 0x020000, - BAYER_DATA = 0x040000, - EXTERNAL_BUFFER = 0x100000, -}; - -/* Size of the LS grid allocation. */ -static constexpr unsigned int MaxLsGridSize = 32 << 10; - /* * List of controls handled by the Raspberry Pi IPA * diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom new file mode 100644 index 00000000..bab19a94 --- /dev/null +++ b/include/libcamera/ipa/raspberrypi.mojom @@ -0,0 +1,131 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +module ipa.rpi; + +import "include/libcamera/ipa/core.mojom"; + +enum BufferMask { + MaskID = 0x00ffff, + MaskStats = 0x010000, + MaskEmbeddedData = 0x020000, + MaskBayerData = 0x040000, + MaskExternalBuffer = 0x100000, +}; + +/* Size of the LS grid allocation. */ +const uint32 MaxLsGridSize = 0x8000; + +enum ConfigOutputParameters { + ConfigStaggeredWrite = 0x01, +}; + +struct SensorConfig { + uint32 gainDelay; + uint32 exposureDelay; + uint32 vblank; + uint32 sensorMetadata; +}; + +struct ISPConfig { + uint32 embeddedbufferId; + uint32 bayerbufferId; +}; + +struct ConfigInput { + uint32 op; + uint32 transform; + FileDescriptor lsTableHandle; +}; + +struct ConfigOutput { + uint32 params; + SensorConfig sensorConfig; + ControlList controls; +}; + +struct StartControls { + ControlList controls; + int32 dropFrameCount; +}; + +interface IPARPiInterface { + init(IPASettings settings) => (int32 ret); + start(StartControls controls) => (StartControls result); + stop(); + + /** + * \fn configure() + * \brief Configure the IPA stream and sensor settings + * \param[in] sensorInfo Camera sensor information + * \param[in] streamConfig Configuration of all active streams + * \param[in] entityControls Controls provided by the pipeline entities + * \param[in] ipaConfig Pipeline-handler-specific configuration data + * \param[out] results Pipeline-handler-specific configuration result + * + * This method shall be called when the camera is configured to inform + * the IPA of the camera's streams and the sensor settings. + * + * The \a sensorInfo conveys information about the camera sensor settings that + * the pipeline handler has selected for the configuration. + * + * The \a ipaConfig and \a results parameters carry data passed by the + * pipeline handler to the IPA and back. + */ + configure(CameraSensorInfo sensorInfo, + map<uint32, IPAStream> streamConfig, + map<uint32, ControlInfoMap> entityControls, + ConfigInput ipaConfig) + => (ConfigOutput results, int32 ret); + + /** + * \fn mapBuffers() + * \brief Map buffers shared between the pipeline handler and the IPA + * \param[in] buffers List of buffers to map + * + * This method informs the IPA module of memory buffers set up by the pipeline + * handler that the IPA needs to access. It provides dmabuf file handles for + * each buffer, and associates the buffers with unique numerical IDs. + * + * IPAs shall map the dmabuf file handles to their address space and keep a + * cache of the mappings, indexed by the buffer numerical IDs. The IDs are used + * in all other IPA interface methods to refer to buffers, including the + * unmapBuffers() method. + * + * All buffers that the pipeline handler wishes to share with an IPA shall be + * mapped with this method. Buffers may be mapped all at once with a single + * call, or mapped and unmapped dynamically at runtime, depending on the IPA + * protocol. Regardless of the protocol, all buffers mapped at a given time + * shall have unique numerical IDs. + * + * The numerical IDs have no meaning defined by the IPA interface, and + * should be treated as opaque handles by IPAs, with the only exception + * that ID zero is invalid. + * + * \sa unmapBuffers() + */ + mapBuffers(array<IPABuffer> buffers); + + /** + * \fn unmapBuffers() + * \brief Unmap buffers shared by the pipeline to the IPA + * \param[in] ids List of buffer IDs to unmap + * + * This method removes mappings set up with mapBuffers(). Numerical IDs + * of unmapped buffers may be reused when mapping new buffers. + * + * \sa mapBuffers() + */ + unmapBuffers(array<uint32> ids); + + [async] signalStatReady(uint32 bufferId); + [async] signalQueueRequest(ControlList controls); + [async] signalIspPrepare(ISPConfig data); +}; + +interface IPARPiEventInterface { + statsMetadataComplete(uint32 bufferId, ControlList controls); + runIsp(uint32 bufferId); + embeddedComplete(uint32 bufferId); + setIsp(ControlList controls); + setDelayedControls(ControlList controls); +}; diff --git a/include/libcamera/ipa/rkisp1.h b/include/libcamera/ipa/rkisp1.h deleted file mode 100644 index bb824f29..00000000 --- a/include/libcamera/ipa/rkisp1.h +++ /dev/null @@ -1,22 +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__ - -#ifndef __DOXYGEN__ - -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 /* __DOXYGEN__ */ - -#endif /* __LIBCAMERA_IPA_INTERFACE_RKISP1_H__ */ diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom new file mode 100644 index 00000000..9270f9c7 --- /dev/null +++ b/include/libcamera/ipa/rkisp1.mojom @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +module ipa.rkisp1; + +import "include/libcamera/ipa/core.mojom"; + +enum RkISP1Operations { + ActionV4L2Set = 1, + ActionParamFilled = 2, + ActionMetadata = 3, + EventSignalStatBuffer = 4, + EventQueueRequest = 5, +}; + +struct RkISP1Event { + RkISP1Operations op; + uint32 frame; + uint32 bufferId; + ControlList controls; +}; + +struct RkISP1Action { + RkISP1Operations op; + ControlList controls; +}; + +interface IPARkISP1Interface { + init(IPASettings settings) => (int32 ret); + start() => (int32 ret); + stop(); + + configure(CameraSensorInfo sensorInfo, + map<uint32, IPAStream> streamConfig, + map<uint32, ControlInfoMap> entityControls) => (); + + mapBuffers(array<IPABuffer> buffers); + unmapBuffers(array<uint32> ids); + + [async] processEvent(RkISP1Event ev); +}; + +interface IPARkISP1EventInterface { + queueFrameAction(uint32 frame, RkISP1Action action); +}; diff --git a/include/libcamera/ipa/vimc.h b/include/libcamera/ipa/vimc.h deleted file mode 100644 index 27a4a61d..00000000 --- a/include/libcamera/ipa/vimc.h +++ /dev/null @@ -1,28 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -/* - * Copyright (C) 2019, Google Inc. - * - * vimc.h - Vimc Image Processing Algorithm module - */ - -#ifndef __LIBCAMERA_IPA_VIMC_H__ -#define __LIBCAMERA_IPA_VIMC_H__ - -#ifndef __DOXYGEN__ - -namespace libcamera { - -#define VIMC_IPA_FIFO_PATH "/tmp/libcamera_ipa_vimc_fifo" - -enum IPAOperationCode { - IPAOperationNone, - IPAOperationInit, - IPAOperationStart, - IPAOperationStop, -}; - -} /* namespace libcamera */ - -#endif /* __DOXYGEN__ */ - -#endif /* __LIBCAMERA_IPA_VIMC_H__ */ diff --git a/include/libcamera/ipa/vimc.mojom b/include/libcamera/ipa/vimc.mojom new file mode 100644 index 00000000..165d9401 --- /dev/null +++ b/include/libcamera/ipa/vimc.mojom @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +module ipa.vimc; + +import "include/libcamera/ipa/core.mojom"; + +const string VimcIPAFIFOPath = "/tmp/libcamera_ipa_vimc_fifo"; + +enum IPAOperationCode { + IPAOperationNone, + IPAOperationInit, + IPAOperationStart, + IPAOperationStop, +}; + +interface IPAVimcInterface { + init(IPASettings settings) => (int32 ret); + start() => (int32 ret); + stop(); +}; + +interface IPAVimcEventInterface { + dummyEvent(uint32 val); +}; |