[{"id":35321,"web_url":"https://patchwork.libcamera.org/comment/35321/","msgid":"<175476089620.2727593.14255881568376003750@ping.linuxembedded.co.uk>","date":"2025-08-09T17:34:56","subject":"Re: [PATCH v2 14/16] pipeline: rkisp1: Query kernel for available\n\tparams blocks","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Stefan Klug (2025-08-08 15:12:52)\n> Query the params device for RKISP1_CID_SUPPORTED_PARAMS_BLOCKS and\n> inject the information into the IPA hardware context for use by the\n> algorithms.\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> ---\n>  include/libcamera/ipa/rkisp1.mojom       |  2 +-\n>  src/ipa/rkisp1/ipa_context.h             |  1 +\n>  src/ipa/rkisp1/rkisp1.cpp                | 20 +++++++++++-----\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 29 ++++++++++++++++++++----\n>  4 files changed, 41 insertions(+), 11 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom\n> index 043ad27ea199..068e898848c4 100644\n> --- a/include/libcamera/ipa/rkisp1.mojom\n> +++ b/include/libcamera/ipa/rkisp1.mojom\n> @@ -16,7 +16,7 @@ struct IPAConfigInfo {\n>  \n>  interface IPARkISP1Interface {\n>         init(libcamera.IPASettings settings,\n> -            uint32 hwRevision,\n> +            uint32 hwRevision, uint32 supportedBlocks,\n>              libcamera.IPACameraSensorInfo sensorInfo,\n>              libcamera.ControlInfoMap sensorControls)\n>                 => (int32 ret, libcamera.ControlInfoMap ipaControls);\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index 362ab2fda5fe..60cfab228edf 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -36,6 +36,7 @@ struct IPAHwSettings {\n>         unsigned int numHistogramBins;\n>         unsigned int numHistogramWeights;\n>         unsigned int numGammaOutSamples;\n> +       uint32_t supportedBlocks;\n>         bool compand;\n>  };\n>  \n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index cf66d5553dcd..9ba0f0e6eb9d 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -52,6 +52,7 @@ public:\n>         IPARkISP1();\n>  \n>         int init(const IPASettings &settings, unsigned int hwRevision,\n> +                uint32_t supportedBlocks,\n>                  const IPACameraSensorInfo &sensorInfo,\n>                  const ControlInfoMap &sensorControls,\n>                  ControlInfoMap *ipaControls) override;\n> @@ -89,27 +90,30 @@ private:\n>  \n>  namespace {\n>  \n> -const IPAHwSettings ipaHwSettingsV10{\n> +IPAHwSettings ipaHwSettingsV10{\n>         RKISP1_CIF_ISP_AE_MEAN_MAX_V10,\n>         RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,\n>         RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,\n>         RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,\n> +       0,\n>         false,\n>  };\n>  \n> -const IPAHwSettings ipaHwSettingsIMX8MP{\n> +IPAHwSettings ipaHwSettingsIMX8MP{\n>         RKISP1_CIF_ISP_AE_MEAN_MAX_V10,\n>         RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,\n>         RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,\n>         RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,\n> +       0,\n>         true,\n>  };\n>  \n> -const IPAHwSettings ipaHwSettingsV12{\n> +IPAHwSettings ipaHwSettingsV12{\n>         RKISP1_CIF_ISP_AE_MEAN_MAX_V12,\n>         RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12,\n>         RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12,\n>         RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12,\n> +       0,\n>         false,\n>  };\n>  \n> @@ -132,20 +136,22 @@ std::string IPARkISP1::logPrefix() const\n>  }\n>  \n>  int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n> +                   uint32_t supportedBlocks,\n>                     const IPACameraSensorInfo &sensorInfo,\n>                     const ControlInfoMap &sensorControls,\n>                     ControlInfoMap *ipaControls)\n>  {\n> +       IPAHwSettings *hw = nullptr;\n>         /* \\todo Add support for other revisions */\n>         switch (hwRevision) {\n>         case RKISP1_V10:\n> -               context_.hw = &ipaHwSettingsV10;\n> +               hw = &ipaHwSettingsV10;\n>                 break;\n>         case RKISP1_V_IMX8MP:\n> -               context_.hw = &ipaHwSettingsIMX8MP;\n> +               hw = &ipaHwSettingsIMX8MP;\n>                 break;\n>         case RKISP1_V12:\n> -               context_.hw = &ipaHwSettingsV12;\n> +               hw = &ipaHwSettingsV12;\n>                 break;\n>         default:\n>                 LOG(IPARkISP1, Error)\n> @@ -153,6 +159,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n>                         << \" is currently not supported\";\n>                 return -ENODEV;\n>         }\n> +       hw->supportedBlocks = supportedBlocks;\n> +       context_.hw = hw;\n>  \n>         LOG(IPARkISP1, Debug) << \"Hardware revision is \" << hwRevision;\n>  \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 06785cb2fd57..435c618731a2 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -100,7 +100,7 @@ public:\n>  \n>         PipelineHandlerRkISP1 *pipe();\n>         const PipelineHandlerRkISP1 *pipe() const;\n> -       int loadIPA(unsigned int hwRevision);\n> +       int loadIPA(unsigned int hwRevision, uint32_t supportedBlocks);\n>  \n>         Stream mainPathStream_;\n>         Stream selfPathStream_;\n> @@ -390,7 +390,7 @@ const PipelineHandlerRkISP1 *RkISP1CameraData::pipe() const\n>         return static_cast<const PipelineHandlerRkISP1 *>(Camera::Private::pipe());\n>  }\n>  \n> -int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n> +int RkISP1CameraData::loadIPA(unsigned int hwRevision, uint32_t supportedBlocks)\n>  {\n>         ipa_ = IPAManager::createIPA<ipa::rkisp1::IPAProxyRkISP1>(pipe(), 1, 1);\n>         if (!ipa_)\n> @@ -412,7 +412,8 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n>         }\n>  \n>         ret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision,\n> -                        sensorInfo, sensor_->controls(), &ipaControls_);\n> +                        supportedBlocks, sensorInfo, sensor_->controls(),\n> +                        &ipaControls_);\n>         if (ret < 0) {\n>                 LOG(RkISP1, Error) << \"IPA initialization failure\";\n>                 return ret;\n> @@ -1318,6 +1319,12 @@ int PipelineHandlerRkISP1::updateControls(RkISP1CameraData *data)\n>         return 0;\n>  }\n>  \n> +/*\n> + * By default we assume all the blocks that were included in the first\n> + * extensible parameters series are available. That is the lower 20bits.\n> + */\n> +const uint32_t kDefaultExtParamsBlocks = 0xfffff;\n> +\n>  int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>  {\n>         int ret;\n> @@ -1355,7 +1362,21 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>         isp_->frameStart.connect(data->delayedCtrls_.get(),\n>                                  &DelayedControls::applyControls);\n>  \n> -       ret = data->loadIPA(media_->hwRevision());\n> +       uint32_t supportedBlocks = kDefaultExtParamsBlocks;\n> +\n> +       auto &controls = param_->controls();\n> +       if (controls.find(RKISP1_CID_SUPPORTED_PARAMS_BLOCKS) != controls.end()) {\n> +               auto ctrl = param_->getControls({ RKISP1_CID_SUPPORTED_PARAMS_BLOCKS });\n> +               supportedBlocks = static_cast<uint32_t>(\n> +                       ctrl.get(RKISP1_CID_SUPPORTED_PARAMS_BLOCKS).get<int32_t>());\n> +       } else {\n> +               LOG(RkISP1, Error)\n> +                       << \"Failed to query supported params blocks. Falling back to defaults.\";\n> +       }\n> +\n> +       LOG(RkISP1, Error) << \"Supported params blocks: \" << supportedBlocks;\n\nPerhaps just a LOG(, Debug) ?\n\nOtherwise, it seems reasonable so with that:\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> +\n> +       ret = data->loadIPA(media_->hwRevision(), supportedBlocks);\n>         if (ret)\n>                 return ret;\n>  \n> -- \n> 2.48.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id CEF2FBEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  9 Aug 2025 17:35:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ECBB06921A;\n\tSat,  9 Aug 2025 19:35:00 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C74F469154\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  9 Aug 2025 19:34:58 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C477EC6E;\n\tSat,  9 Aug 2025 19:34:07 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"u/uO+4JB\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1754760847;\n\tbh=0v6BiWtSv2GxAX1xiNKQKrcHJ6QisE7o8LbrfZ9IAWQ=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=u/uO+4JBxaGQBDKygYn+1XwT7+TQQpHzKiqQJOIdBZQANBjR2vUhUCJrwkZ4PoL/T\n\tXI10M5TgLGi3OE10ROOBoZ2Xyy0W/cUocmjMxmxRWVBKRyPvMm4v35nf9cN1qNGG66\n\tmBIujFS8baqp65c2vk9mtcWqAMHrgIiPflsAhJ9U=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250808141315.413839-15-stefan.klug@ideasonboard.com>","References":"<20250808141315.413839-1-stefan.klug@ideasonboard.com>\n\t<20250808141315.413839-15-stefan.klug@ideasonboard.com>","Subject":"Re: [PATCH v2 14/16] pipeline: rkisp1: Query kernel for available\n\tparams blocks","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"Stefan Klug <stefan.klug@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Sat, 09 Aug 2025 18:34:56 +0100","Message-ID":"<175476089620.2727593.14255881568376003750@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35407,"web_url":"https://patchwork.libcamera.org/comment/35407/","msgid":"<d517ba2f-35a5-4d51-b8dc-36e058399f4d@ideasonboard.com>","date":"2025-08-14T12:21:53","subject":"Re: [PATCH v2 14/16] pipeline: rkisp1: Query kernel for available\n\tparams blocks","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/people/156/","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"content":"Hi Stefan\n\nOn 08/08/2025 15:12, Stefan Klug wrote:\n> Query the params device for RKISP1_CID_SUPPORTED_PARAMS_BLOCKS and\n> inject the information into the IPA hardware context for use by the\n> algorithms.\n> \n> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n> ---\n\nCouple of nitpicks, but:\n\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n\n>   include/libcamera/ipa/rkisp1.mojom       |  2 +-\n>   src/ipa/rkisp1/ipa_context.h             |  1 +\n>   src/ipa/rkisp1/rkisp1.cpp                | 20 +++++++++++-----\n>   src/libcamera/pipeline/rkisp1/rkisp1.cpp | 29 ++++++++++++++++++++----\n>   4 files changed, 41 insertions(+), 11 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/rkisp1.mojom b/include/libcamera/ipa/rkisp1.mojom\n> index 043ad27ea199..068e898848c4 100644\n> --- a/include/libcamera/ipa/rkisp1.mojom\n> +++ b/include/libcamera/ipa/rkisp1.mojom\n> @@ -16,7 +16,7 @@ struct IPAConfigInfo {\n>   \n>   interface IPARkISP1Interface {\n>   \tinit(libcamera.IPASettings settings,\n> -\t     uint32 hwRevision,\n> +\t     uint32 hwRevision, uint32 supportedBlocks,\n>   \t     libcamera.IPACameraSensorInfo sensorInfo,\n>   \t     libcamera.ControlInfoMap sensorControls)\n>   \t\t=> (int32 ret, libcamera.ControlInfoMap ipaControls);\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index 362ab2fda5fe..60cfab228edf 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -36,6 +36,7 @@ struct IPAHwSettings {\n>   \tunsigned int numHistogramBins;\n>   \tunsigned int numHistogramWeights;\n>   \tunsigned int numGammaOutSamples;\n> +\tuint32_t supportedBlocks;\n>   \tbool compand;\n>   };\n>   \n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index cf66d5553dcd..9ba0f0e6eb9d 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -52,6 +52,7 @@ public:\n>   \tIPARkISP1();\n>   \n>   \tint init(const IPASettings &settings, unsigned int hwRevision,\n> +\t\t uint32_t supportedBlocks,\n>   \t\t const IPACameraSensorInfo &sensorInfo,\n>   \t\t const ControlInfoMap &sensorControls,\n>   \t\t ControlInfoMap *ipaControls) override;\n> @@ -89,27 +90,30 @@ private:\n>   \n>   namespace {\n>   \n> -const IPAHwSettings ipaHwSettingsV10{\n> +IPAHwSettings ipaHwSettingsV10{\n>   \tRKISP1_CIF_ISP_AE_MEAN_MAX_V10,\n>   \tRKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,\n>   \tRKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,\n>   \tRKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,\n> +\t0,\n>   \tfalse,\n>   };\n>   \n> -const IPAHwSettings ipaHwSettingsIMX8MP{\n> +IPAHwSettings ipaHwSettingsIMX8MP{\n>   \tRKISP1_CIF_ISP_AE_MEAN_MAX_V10,\n>   \tRKISP1_CIF_ISP_HIST_BIN_N_MAX_V10,\n>   \tRKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10,\n>   \tRKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10,\n> +\t0,\n>   \ttrue,\n>   };\n>   \n> -const IPAHwSettings ipaHwSettingsV12{\n> +IPAHwSettings ipaHwSettingsV12{\n>   \tRKISP1_CIF_ISP_AE_MEAN_MAX_V12,\n>   \tRKISP1_CIF_ISP_HIST_BIN_N_MAX_V12,\n>   \tRKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12,\n>   \tRKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12,\n> +\t0,\n>   \tfalse,\n>   };\n>   \n> @@ -132,20 +136,22 @@ std::string IPARkISP1::logPrefix() const\n>   }\n>   \n>   int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n> +\t\t    uint32_t supportedBlocks,\n>   \t\t    const IPACameraSensorInfo &sensorInfo,\n>   \t\t    const ControlInfoMap &sensorControls,\n>   \t\t    ControlInfoMap *ipaControls)\n>   {\n> +\tIPAHwSettings *hw = nullptr;\n>   \t/* \\todo Add support for other revisions */\n>   \tswitch (hwRevision) {\n>   \tcase RKISP1_V10:\n> -\t\tcontext_.hw = &ipaHwSettingsV10;\n> +\t\thw = &ipaHwSettingsV10;\n>   \t\tbreak;\n>   \tcase RKISP1_V_IMX8MP:\n> -\t\tcontext_.hw = &ipaHwSettingsIMX8MP;\n> +\t\thw = &ipaHwSettingsIMX8MP;\n>   \t\tbreak;\n>   \tcase RKISP1_V12:\n> -\t\tcontext_.hw = &ipaHwSettingsV12;\n> +\t\thw = &ipaHwSettingsV12;\n>   \t\tbreak;\n>   \tdefault:\n>   \t\tLOG(IPARkISP1, Error)\n> @@ -153,6 +159,8 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,\n>   \t\t\t<< \" is currently not supported\";\n>   \t\treturn -ENODEV;\n>   \t}\n> +\thw->supportedBlocks = supportedBlocks;\n> +\tcontext_.hw = hw;\n>   \n>   \tLOG(IPARkISP1, Debug) << \"Hardware revision is \" << hwRevision;\n>   \n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 06785cb2fd57..435c618731a2 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -100,7 +100,7 @@ public:\n>   \n>   \tPipelineHandlerRkISP1 *pipe();\n>   \tconst PipelineHandlerRkISP1 *pipe() const;\n> -\tint loadIPA(unsigned int hwRevision);\n> +\tint loadIPA(unsigned int hwRevision, uint32_t supportedBlocks);\n>   \n>   \tStream mainPathStream_;\n>   \tStream selfPathStream_;\n> @@ -390,7 +390,7 @@ const PipelineHandlerRkISP1 *RkISP1CameraData::pipe() const\n>   \treturn static_cast<const PipelineHandlerRkISP1 *>(Camera::Private::pipe());\n>   }\n>   \n> -int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n> +int RkISP1CameraData::loadIPA(unsigned int hwRevision, uint32_t supportedBlocks)\n>   {\n>   \tipa_ = IPAManager::createIPA<ipa::rkisp1::IPAProxyRkISP1>(pipe(), 1, 1);\n>   \tif (!ipa_)\n> @@ -412,7 +412,8 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision)\n>   \t}\n>   \n>   \tret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision,\n> -\t\t\t sensorInfo, sensor_->controls(), &ipaControls_);\n> +\t\t\t supportedBlocks, sensorInfo, sensor_->controls(),\n> +\t\t\t &ipaControls_);\n>   \tif (ret < 0) {\n>   \t\tLOG(RkISP1, Error) << \"IPA initialization failure\";\n>   \t\treturn ret;\n> @@ -1318,6 +1319,12 @@ int PipelineHandlerRkISP1::updateControls(RkISP1CameraData *data)\n>   \treturn 0;\n>   }\n>   \n> +/*\n> + * By default we assume all the blocks that were included in the first\n> + * extensible parameters series are available. That is the lower 20bits.\n> + */\n> +const uint32_t kDefaultExtParamsBlocks = 0xfffff;\n> +\n>   int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>   {\n>   \tint ret;\n> @@ -1355,7 +1362,21 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n>   \tisp_->frameStart.connect(data->delayedCtrls_.get(),\n>   \t\t\t\t &DelayedControls::applyControls);\n>   \n> -\tret = data->loadIPA(media_->hwRevision());\n> +\tuint32_t supportedBlocks = kDefaultExtParamsBlocks;\n> +\n> +\tauto &controls = param_->controls();\n> +\tif (controls.find(RKISP1_CID_SUPPORTED_PARAMS_BLOCKS) != controls.end()) {\n> +\t\tauto ctrl = param_->getControls({ RKISP1_CID_SUPPORTED_PARAMS_BLOCKS });\n> +\t\tsupportedBlocks = static_cast<uint32_t>(\n> +\t\t\tctrl.get(RKISP1_CID_SUPPORTED_PARAMS_BLOCKS).get<int32_t>());\n\ngetControls() has failure modes; maybe \n.get(<int32_t>)(kDefaultExtParamsBlocks)?\n\n> +\t} else {\n> +\t\tLOG(RkISP1, Error)\n> +\t\t\t<< \"Failed to query supported params blocks. Falling back to defaults.\";\n> +\t}\n> +\n> +\tLOG(RkISP1, Error) << \"Supported params blocks: \" << supportedBlocks;\n\nProbably meant to be a debug call\n\n> +\n> +\tret = data->loadIPA(media_->hwRevision(), supportedBlocks);\n>   \tif (ret)\n>   \t\treturn ret;\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 4CE42BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 14 Aug 2025 12:22:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DF64869257;\n\tThu, 14 Aug 2025 14:21:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A42B269247\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 14 Aug 2025 14:21:56 +0200 (CEST)","from [192.168.0.43]\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5B42C6DF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 14 Aug 2025 14:21:02 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"YUSeA4fA\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1755174062;\n\tbh=Up7W71RPKoa9f6aIRYgdLDE8Xz8UMswto8SCz2Y+Vlo=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=YUSeA4fABmGWWnDyc6vRsD+HrmoAvAyVwU5uuIP2gK3rxE5OGQSvB4bLLsDQ5Dgta\n\tEdW4cK2NxVB+IZUsEHvRZAD0rgCclzBLLTrWe2bWZZVqOLbOfl0bz3fENS3FXjC/NW\n\tYn7V1jDNlKfOMGBlbY3Wk1MflZSmqpy6oTbeg9rI=","Message-ID":"<d517ba2f-35a5-4d51-b8dc-36e058399f4d@ideasonboard.com>","Date":"Thu, 14 Aug 2025 13:21:53 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2 14/16] pipeline: rkisp1: Query kernel for available\n\tparams blocks","To":"libcamera-devel@lists.libcamera.org","References":"<20250808141315.413839-1-stefan.klug@ideasonboard.com>\n\t<20250808141315.413839-15-stefan.klug@ideasonboard.com>","Content-Language":"en-US","From":"Dan Scally <dan.scally@ideasonboard.com>","In-Reply-To":"<20250808141315.413839-15-stefan.klug@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]