ipa: rkisp1: agc: Introduce HW revision in IPAContext

The ISP can use 25 or 81 cells depending on its revision. Remove the
cached value in IPARkISP1 and use IPASessionConfiguration to store it
and pass it to AGC later.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Jean-Michel Hautbois 2021-11-19 11:13:34 +01:00
parent 431749b399
commit af7f70b69a
3 changed files with 20 additions and 0 deletions

View file

@ -55,4 +55,12 @@ namespace libcamera::ipa::rkisp1 {
* are run. This needs to be turned into real per-frame data storage. * are run. This needs to be turned into real per-frame data storage.
*/ */
/**
* \var IPASessionConfiguration::hw
* \brief RkISP1-specific hardware information
*
* \var IPASessionConfiguration::hw.revision
* \brief Hardware revision of the ISP
*/
} /* namespace libcamera::ipa::rkisp1 */ } /* namespace libcamera::ipa::rkisp1 */

View file

@ -8,11 +8,16 @@
#pragma once #pragma once
#include <linux/rkisp1-config.h>
namespace libcamera { namespace libcamera {
namespace ipa::rkisp1 { namespace ipa::rkisp1 {
struct IPASessionConfiguration { struct IPASessionConfiguration {
struct {
rkisp1_cif_isp_version revision;
} hw;
}; };
struct IPAFrameContext { struct IPAFrameContext {

View file

@ -74,6 +74,7 @@ private:
uint32_t maxGain_; uint32_t maxGain_;
/* revision-specific data */ /* revision-specific data */
rkisp1_cif_isp_version hwRevision_;
unsigned int hwAeMeanMax_; unsigned int hwAeMeanMax_;
unsigned int hwHistBinNMax_; unsigned int hwHistBinNMax_;
unsigned int hwGammaOutMaxSamples_; unsigned int hwGammaOutMaxSamples_;
@ -114,6 +115,9 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision)
LOG(IPARkISP1, Debug) << "Hardware revision is " << hwRevision; LOG(IPARkISP1, Debug) << "Hardware revision is " << hwRevision;
/* Cache the value to set it in configure. */
hwRevision_ = static_cast<rkisp1_cif_isp_version>(hwRevision);
camHelper_ = CameraSensorHelperFactory::create(settings.sensorModel); camHelper_ = CameraSensorHelperFactory::create(settings.sensorModel);
if (!camHelper_) { if (!camHelper_) {
LOG(IPARkISP1, Error) LOG(IPARkISP1, Error)
@ -176,6 +180,9 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,
/* Clean context at configuration */ /* Clean context at configuration */
context_ = {}; context_ = {};
/* Set the hardware revision for the algorithms. */
context_.configuration.hw.revision = hwRevision_;
return 0; return 0;
} }