blob: 78ab7bff549f29a549162e07e8680db95569e20c (
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
60
61
62
63
64
65
66
67
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021, Google inc.
*
* blc.cpp - IPU3 Black Level Correction control
*/
#include "blc.h"
#include <string.h>
/**
* \file blc.h
* \brief IPU3 Black Level Correction control
*/
namespace libcamera {
namespace ipa::ipu3::algorithms {
/**
* \class BlackLevelCorrection
* \brief A class to handle black level correction
*
* 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 ImgU 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.
*/
BlackLevelCorrection::BlackLevelCorrection()
{
}
/**
* \brief Fill in the parameter structure, and enable black level correction
* \param context The shared IPA context
* \param params The IPU3 parameters
*
* Populate the IPU3 parameter structure with the correction values for each
* channel and enable the corresponding ImgU block processing.
*/
void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context,
ipu3_uapi_params *params)
{
/*
* The Optical Black Level correction values
* \todo The correction values should come from sensor specific
* tuning processes. This is a first rough approximation.
*/
params->obgrid_param.gr = 64;
params->obgrid_param.r = 64;
params->obgrid_param.b = 64;
params->obgrid_param.gb = 64;
/* Enable the custom black level correction processing */
params->use.obgrid = 1;
params->use.obgrid_param = 1;
}
} /* namespace ipa::ipu3::algorithms */
} /* namespace libcamera */
|