Plumb through VIMC mojo interface to enable buffers passing. VIMC does not have parameters or statistics buffers but we can mimick the typical case of passing IPA buffers from pipeline handler to IPA using mock buffers. The mock IPA buffers are FrameBuffers which are dmabuf backed (in other words, mmap()able through MappedFramebuffer inside the IPA). This commits shows: - Passing the parameter buffer from the pipeline handler to the IPA through functions defined in mojom interface. - Passing request controls ControlList to the IPA. Any tests using VIMC will now loop in the IPA paths. Any tests running in isolated mode will help us to test IPA IPC code paths especially around (de)serialization of data passing from pipeline handlers to the IPA. Future IPA interface tests can simply extend the vimc mojom interface to achieve/test a specific use case as required. Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
/*
|
|
* \todo Document the interface and remove the related EXCLUDE_PATTERNS entry.
|
|
*/
|
|
|
|
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(libcamera.IPASettings settings) => (int32 ret);
|
|
|
|
configure(libcamera.IPACameraSensorInfo sensorInfo,
|
|
map<uint32, libcamera.IPAStream> streamConfig,
|
|
map<uint32, libcamera.ControlInfoMap> entityControls) => (int32 ret);
|
|
|
|
start() => (int32 ret);
|
|
stop();
|
|
|
|
mapBuffers(array<libcamera.IPABuffer> buffers);
|
|
unmapBuffers(array<uint32> ids);
|
|
|
|
/*
|
|
* The vimc driver doesn't use parameters buffers. To maximize coverage
|
|
* of unit tests that rely on the VIMC pipeline handler, we still define
|
|
* interface functions that mimick how other pipeline handlers typically
|
|
* handle parameters at runtime.
|
|
*/
|
|
[async] fillParams(uint32 frame, uint32 bufferId);
|
|
[async] processControls(uint32 frame, libcamera.ControlList controls);
|
|
};
|
|
|
|
interface IPAVimcEventInterface {
|
|
paramsFilled(uint32 bufferId);
|
|
};
|