blob: 8aac03f794fcb3b9c65e6fec8793c271b5e92a0e (
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: BSD-2-Clause */
/*
* Copyright (C) 2019, Raspberry Pi Ltd
*
* DPC (defective pixel correction) control algorithm
*/
#include <libcamera/base/log.h>
#include "dpc.h"
using namespace RPiController;
using namespace libcamera;
LOG_DEFINE_CATEGORY(RPiDpc)
/*
* We use the lux status so that we can apply stronger settings in darkness (if
* necessary).
*/
#define NAME "rpi.dpc"
Dpc::Dpc(Controller *controller)
: Algorithm(controller)
{
}
char const *Dpc::name() const
{
return NAME;
}
int Dpc::read(const libcamera::YamlObject ¶ms)
{
config_.strength = params["strength"].get<int>(1);
if (config_.strength < 0 || config_.strength > 2) {
LOG(RPiDpc, Error) << "Bad strength value";
return -EINVAL;
}
return 0;
}
void Dpc::prepare(Metadata *imageMetadata)
{
DpcStatus dpcStatus = {};
/* Should we vary this with lux level or analogue gain? TBD. */
dpcStatus.strength = config_.strength;
LOG(RPiDpc, Debug) << "strength " << dpcStatus.strength;
imageMetadata->set("dpc.status", dpcStatus);
}
/* Register algorithm with the system. */
static Algorithm *create(Controller *controller)
{
return (Algorithm *)new Dpc(controller);
}
static RegisterAlgorithm reg(NAME, &create);
|