summaryrefslogtreecommitdiff
path: root/test/controls/control_list.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/controls/control_list.cpp')
0 files changed, 0 insertions, 0 deletions
'n40' href='#n40'>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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (C) 2019, Raspberry Pi Ltd
 *
 * noise.cpp - Noise control algorithm
 */

#include <math.h>

#include <libcamera/base/log.h>

#include "../device_status.h"
#include "../noise_status.h"

#include "noise.h"

using namespace RPiController;
using namespace libcamera;

LOG_DEFINE_CATEGORY(RPiNoise)

#define NAME "rpi.noise"

Noise::Noise(Controller *controller)
	: Algorithm(controller), modeFactor_(1.0)
{
}

char const *Noise::name() const
{
	return NAME;
}

void Noise::switchMode(CameraMode const &cameraMode,
		       [[maybe_unused]] Metadata *metadata)
{
	/*
	 * For example, we would expect a 2x2 binned mode to have a "noise
	 * factor" of sqrt(2x2) = 2. (can't be less than one, right?)
	 */
	modeFactor_ = std::max(1.0, cameraMode.noiseFactor);
}

int Noise::read(const libcamera::YamlObject &params)
{
	auto value = params["reference_constant"].get<double>();
	if (!value)
		return -EINVAL;
	referenceConstant_ = *value;

	value = params["reference_slope"].get<double>();
	if (!value)
		return -EINVAL;
	referenceSlope_ = *value;