ipa: rkisp1: blc: Report sensor black levels in metadata
Add sensor black levels to the metadata of the rkisp1 pipeline. Additionally enable raw support for this algorithm and add it to uncalibrated.yaml, so that black levels get reported when capturing tuning images. This is a bit of a hack, because no actual black level correction is taking place in raw mode, but it is the easiest way to get blacklevel reported for raw streams. Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
50c28e1351
commit
afa8cbca9e
3 changed files with 33 additions and 1 deletions
|
@ -9,6 +9,8 @@
|
|||
|
||||
#include <libcamera/base/log.h>
|
||||
|
||||
#include <libcamera/control_ids.h>
|
||||
|
||||
#include "libcamera/internal/yaml_parser.h"
|
||||
|
||||
/**
|
||||
|
@ -38,6 +40,13 @@ LOG_DEFINE_CATEGORY(RkISP1Blc)
|
|||
BlackLevelCorrection::BlackLevelCorrection()
|
||||
: tuningParameters_(false)
|
||||
{
|
||||
/*
|
||||
* This is a bit of a hack. In raw mode no black level correction
|
||||
* happens. This flag is used to ensure the metadata gets populated with
|
||||
* the black level which is needed to capture proper raw images for
|
||||
* tuning.
|
||||
*/
|
||||
supportsRaw_ = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -107,6 +116,9 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
|
|||
[[maybe_unused]] IPAFrameContext &frameContext,
|
||||
rkisp1_params_cfg *params)
|
||||
{
|
||||
if (context.configuration.raw)
|
||||
return;
|
||||
|
||||
if (frame > 0)
|
||||
return;
|
||||
|
||||
|
@ -125,6 +137,22 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
|
|||
params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_BLS;
|
||||
}
|
||||
|
||||
/**
|
||||
* \copydoc libcamera::ipa::Algorithm::process
|
||||
*/
|
||||
void BlackLevelCorrection::process([[maybe_unused]] IPAContext &context,
|
||||
[[maybe_unused]] const uint32_t frame,
|
||||
[[maybe_unused]] IPAFrameContext &frameContext,
|
||||
[[maybe_unused]] const rkisp1_stat_buffer *stats,
|
||||
ControlList &metadata)
|
||||
{
|
||||
metadata.set(controls::SensorBlackLevels,
|
||||
{ static_cast<int32_t>(blackLevelRed_),
|
||||
static_cast<int32_t>(blackLevelGreenR_),
|
||||
static_cast<int32_t>(blackLevelGreenB_),
|
||||
static_cast<int32_t>(blackLevelBlue_) });
|
||||
}
|
||||
|
||||
REGISTER_IPA_ALGORITHM(BlackLevelCorrection, "BlackLevelCorrection")
|
||||
|
||||
} /* namespace ipa::rkisp1::algorithms */
|
||||
|
|
|
@ -23,7 +23,10 @@ public:
|
|||
void prepare(IPAContext &context, const uint32_t frame,
|
||||
IPAFrameContext &frameContext,
|
||||
rkisp1_params_cfg *params) override;
|
||||
|
||||
void process(IPAContext &context, const uint32_t frame,
|
||||
IPAFrameContext &frameContext,
|
||||
const rkisp1_stat_buffer *stats,
|
||||
ControlList &metadata) override;
|
||||
private:
|
||||
bool tuningParameters_;
|
||||
int16_t blackLevelRed_;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue