Files
external_libcamera/include/libcamera/ipa/ipu3.mojom
Jacopo Mondi 11fe4333c5 libcamera: ipu3: Initialize controls in the IPA
All the IPU3 Camera controls are currently initialized by the pipeline
handler which initializes them using the camera sensor configuration and
platform specific requirements.

However, some controls are better initialized by the IPA, which might,
in example, cap the exposure times and frame duration to the constraints
of its algorithms implementation.

Also, moving forward, the IPA should register controls to report its
capabilities, in example the ability to enable/disable 3A algorithms on
request.

Move the existing controls initialization to the IPA, by providing
the sensor configuration and its controls to the IPU3IPA::init()
function, which initializes controls and returns them to the pipeline
through an output parameter.

The existing controls initialization has been copied verbatim from the
pipeline handler to the IPA, if not a for few line breaks adjustments
and the resulting Camera controls values are not changed.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
2021-08-12 10:08:32 +02:00

59 lines
1.3 KiB
Plaintext

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* \todo Document the interface and remove the related EXCLUDE_PATTERNS entry.
*/
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;
int64 frameTimestamp;
uint32 bufferId;
libcamera.ControlList controls;
};
struct IPU3Action {
IPU3Operations op;
libcamera.ControlList controls;
};
struct IPAConfigInfo {
libcamera.IPACameraSensorInfo sensorInfo;
map<uint32, libcamera.ControlInfoMap> entityControls;
libcamera.Size bdsOutputSize;
libcamera.Size iif;
};
interface IPAIPU3Interface {
init(libcamera.IPASettings settings,
libcamera.IPACameraSensorInfo sensorInfo,
libcamera.ControlInfoMap sensorControls)
=> (int32 ret, libcamera.ControlInfoMap ipaControls);
start() => (int32 ret);
stop();
configure(IPAConfigInfo configInfo) => (int32 ret);
mapBuffers(array<libcamera.IPABuffer> buffers);
unmapBuffers(array<uint32> ids);
[async] processEvent(IPU3Event ev);
};
interface IPAIPU3EventInterface {
queueFrameAction(uint32 frame, IPU3Action action);
};