summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi/controller/rpi/dpc.cpp
blob: 110f50560e7671623dae457efda7cb75cb0d74ea (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
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (C) 2019, Raspberry Pi (Trading) Limited
 *
 * dpc.cpp - DPC (defective pixel correction) control algorithm
 */

#include <libcamera/base/log.h>

#include "dpc.hpp"

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;
}

void Dpc::Read(boost::property_tree::ptree const &params)
{
	config_.strength = params.get<int>("strength", 1);
	if (config_.strength < 0 || config_.strength > 2)
		throw std::runtime_error("Dpc: bad strength value");
}

void Dpc::Prepare(Metadata *image_metadata)
{
	DpcStatus dpc_status = {};
	// Should we vary this with lux level or analogue gain? TBD.
	dpc_status.strength = config_.strength;
	LOG(RPiDpc, Debug) << "strength " << dpc_status.strength;
	image_metadata->Set("dpc.status", dpc_status);
}

// Register algorithm with the system.
static Algorithm *Create(Controller *controller)
{
	return (Algorithm *)new Dpc(controller);
}
static RegisterAlgorithm reg(NAME, &Create);
with lttng: [optional] lttng-ust-dev python3-jinja2 Using GStreamer plugin ~~~~~~~~~~~~~~~~~~~~~~ To use GStreamer plugin from source tree, set the following environment so that GStreamer can find it. export GST_PLUGIN_PATH=$(pwd)/build/src/gstreamer The debugging tool `gst-launch-1.0` can be used to construct and pipeline and test it. The following pipeline will stream from the camera named "Camera 1" onto the default video display element on your system. .. code:: gst-launch-1.0 libcamerasrc camera-name="Camera 1" ! videoconvert ! autovideosink .. section-end-getting-started