diff options
Diffstat (limited to 'include/libcamera/ipa/raspberrypi.mojom')
-rw-r--r-- | include/libcamera/ipa/raspberrypi.mojom | 131 |
1 files changed, 131 insertions, 0 deletions
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); +}; |