blob: 3542f61cf1100ce53bf5ed9e98ec3b470cb4b694 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021-2022, Ideas On Board
*
* blc.cpp - RkISP1 Black Level Correction control
*/
#include "blc.h"
/**
* \file blc.h
*/
namespace libcamera {
namespace ipa::rkisp1::algorithms {
/**
* \class BlackLevelCorrection
* \brief RkISP1 Black Level Correction control
*
* The pixels output by the camera normally include a black level, because
* sensors do not always report a signal level of '0' for black. Pixels at or
* below this level should be considered black. To achieve that, the RkISP BLC
* algorithm subtracts a configurable offset from all pixels.
*
* The black level can be measured at runtime from an optical dark region of the
* camera sensor, or measured during the camera tuning process. The first option
* isn't currently supported.
*/
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
void BlackLevelCorrection::prepare(IPAContext &context,
rkisp1_params_cfg *params)
{
if (context.frameContext.frameCount > 0)
return;
/*
* Substract fixed values taken from imx219 tuning file.
* \todo Use a configuration file for it ?
*/
params->others.bls_config.enable_auto = 0;
params->others.bls_config.fixed_val.r = 256;
params->others.bls_config.fixed_val.gr = 256;
params->others.bls_config.fixed_val.gb = 256;
params->others.bls_config.fixed_val.b = 256;
params->module_en_update |= RKISP1_CIF_ISP_MODULE_BLS;
params->module_ens |= RKISP1_CIF_ISP_MODULE_BLS;
params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_BLS;
}
REGISTER_IPA_ALGORITHM(BlackLevelCorrection, "BlackLevelCorrection")
} /* namespace ipa::rkisp1::algorithms */
} /* namespace libcamera */
|