[libcamera-devel] [PATCH] ipa: ipu3: Rectify ControlInfoMap matching in IPAConfigInfo
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed May 26 14:44:34 CEST 2021
Hi Paul,
On Wed, May 26, 2021 at 03:07:37PM +0300, Laurent Pinchart wrote:
> On Wed, May 26, 2021 at 05:18:14PM +0530, Umang Jain wrote:
> > The ControlInfoMap of entityControls member in IPAConfigInfo struct,
> > was not able to correctly match to the ControlInfoMap defined in
> > core.mojom. This resulted in a FATAL breakage when IPU3 IPA is meant to
> > run:
> >
> > FATAL IPADataSerializer ipa_data_serializer.cpp:437 ControlSerializer
> > not provided for serialization of ControlInfoMap
>
> Fixes: c76ca01323d8 ("ipa: ipu3: Introduce IPAConfigInfo in IPC")
>
> > Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
> As this fixes a breakage in master, I'll merge it right away.
>
> Paul, is there a way this issue could have been detected at compile time
> ? If that's not doable, could you send at least a documentation patch ?
Beside the ControlInfoMap vs. libcamera::ControlInfoMap, here's the diff
in the generated code.
diff -Naur x86-gcc-10.2.0-source/include/libcamera/ipa/ipu3_ipa_serializer.h x86-gcc-11.1.0-source/include/libcamera/ipa/ipu3_ipa_serializer.h
--- x86-gcc-10.2.0-source/include/libcamera/ipa/ipu3_ipa_serializer.h 2021-05-26 15:33:16.154762388 +0300
+++ x86-gcc-11.1.0-source/include/libcamera/ipa/ipu3_ipa_serializer.h 2021-05-25 12:19:18.146693517 +0300
@@ -265,7 +265,7 @@
public:
static std::tuple<std::vector<uint8_t>, std::vector<int32_t>>
serialize(const ipa::ipu3::IPAConfigInfo &data,
+ [[maybe_unused]] ControlSerializer *cs = nullptr)
- ControlSerializer *cs)
{
std::vector<uint8_t> retData;
@@ -298,7 +298,7 @@
static ipa::ipu3::IPAConfigInfo
deserialize(std::vector<uint8_t> &data,
+ ControlSerializer *cs = nullptr)
- ControlSerializer *cs)
{
return IPADataSerializer<ipa::ipu3::IPAConfigInfo>::deserialize(data.cbegin(), data.cend(), cs);
}
@@ -307,7 +307,7 @@
static ipa::ipu3::IPAConfigInfo
deserialize(std::vector<uint8_t>::const_iterator dataBegin,
std::vector<uint8_t>::const_iterator dataEnd,
+ [[maybe_unused]] ControlSerializer *cs = nullptr)
- ControlSerializer *cs)
{
ipa::ipu3::IPAConfigInfo ret;
std::vector<uint8_t>::const_iterator m = dataBegin;
diff -Naur x86-gcc-10.2.0-source/src/libcamera/proxy/ipu3_ipa_proxy.cpp x86-gcc-11.1.0-source/src/libcamera/proxy/ipu3_ipa_proxy.cpp
--- x86-gcc-10.2.0-source/src/libcamera/proxy/ipu3_ipa_proxy.cpp 2021-05-26 15:33:16.226762395 +0300
+++ x86-gcc-11.1.0-source/src/libcamera/proxy/ipu3_ipa_proxy.cpp 2021-05-25 12:19:18.262693528 +0300
@@ -272,7 +272,7 @@
std::vector<uint8_t> configInfoBuf;
std::tie(configInfoBuf, std::ignore) =
+ IPADataSerializer<IPAConfigInfo>::serialize(configInfo);
- IPADataSerializer<IPAConfigInfo>::serialize(configInfo, &controlSerializer_);
_ipcInputBuf.data().insert(_ipcInputBuf.data().end(), configInfoBuf.begin(), configInfoBuf.end());
diff -Naur x86-gcc-10.2.0-source/src/libcamera/proxy/worker/ipu3_ipa_proxy_worker.cpp x86-gcc-11.1.0-source/src/libcamera/proxy/worker/ipu3_ipa_proxy_worker.cpp
--- x86-gcc-10.2.0-source/src/libcamera/proxy/worker/ipu3_ipa_proxy_worker.cpp 2021-05-26 15:33:16.224762394 +0300
+++ x86-gcc-11.1.0-source/src/libcamera/proxy/worker/ipu3_ipa_proxy_worker.cpp 2021-05-25 12:19:18.389693540 +0300
@@ -146,7 +146,8 @@
IPAConfigInfo configInfo = IPADataSerializer<IPAConfigInfo>::deserialize(
_ipcMessage.data().cbegin() + configInfoStart,
- _ipcMessage.data().cend());
+ _ipcMessage.data().cend(),
+ &controlSerializer_);
ipa_->configure(configInfo);
> > ---
> > include/libcamera/ipa/ipu3.mojom | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom
> > index 6b6b431f..32c046ad 100644
> > --- a/include/libcamera/ipa/ipu3.mojom
> > +++ b/include/libcamera/ipa/ipu3.mojom
> > @@ -32,7 +32,7 @@ struct IPU3Action {
> >
> > struct IPAConfigInfo {
> > libcamera.IPACameraSensorInfo sensorInfo;
> > - map<uint32, ControlInfoMap> entityControls;
> > + map<uint32, libcamera.ControlInfoMap> entityControls;
> > libcamera.Size bdsOutputSize;
> > libcamera.Size iif;
> > };
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list