ipa: raspberrypi: Replace Raspberry Pi debug with libcamera debug
This commit deals with all the "small" algorithms (that is, not Agc/Awb/Alsc). A few unnecessary debug messages have also been removed. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
eb605eab5b
commit
d97b1bcd2a
9 changed files with 97 additions and 45 deletions
|
@ -8,12 +8,16 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../black_level_status.h"
|
#include "../black_level_status.h"
|
||||||
#include "../logging.hpp"
|
|
||||||
|
|
||||||
#include "black_level.hpp"
|
#include "black_level.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiBlackLevel)
|
||||||
|
|
||||||
#define NAME "rpi.black_level"
|
#define NAME "rpi.black_level"
|
||||||
|
|
||||||
|
@ -29,12 +33,15 @@ char const *BlackLevel::Name() const
|
||||||
|
|
||||||
void BlackLevel::Read(boost::property_tree::ptree const ¶ms)
|
void BlackLevel::Read(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
RPI_LOG(Name());
|
|
||||||
uint16_t black_level = params.get<uint16_t>(
|
uint16_t black_level = params.get<uint16_t>(
|
||||||
"black_level", 4096); // 64 in 10 bits scaled to 16 bits
|
"black_level", 4096); // 64 in 10 bits scaled to 16 bits
|
||||||
black_level_r_ = params.get<uint16_t>("black_level_r", black_level);
|
black_level_r_ = params.get<uint16_t>("black_level_r", black_level);
|
||||||
black_level_g_ = params.get<uint16_t>("black_level_g", black_level);
|
black_level_g_ = params.get<uint16_t>("black_level_g", black_level);
|
||||||
black_level_b_ = params.get<uint16_t>("black_level_b", black_level);
|
black_level_b_ = params.get<uint16_t>("black_level_b", black_level);
|
||||||
|
LOG(RPiBlackLevel, Debug)
|
||||||
|
<< " Read black levels red " << black_level_r_
|
||||||
|
<< " green " << black_level_g_
|
||||||
|
<< " blue " << black_level_b_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlackLevel::Prepare(Metadata *image_metadata)
|
void BlackLevel::Prepare(Metadata *image_metadata)
|
||||||
|
|
|
@ -5,15 +5,19 @@
|
||||||
* ccm.cpp - CCM (colour correction matrix) control algorithm
|
* ccm.cpp - CCM (colour correction matrix) control algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../awb_status.h"
|
#include "../awb_status.h"
|
||||||
#include "../ccm_status.h"
|
#include "../ccm_status.h"
|
||||||
#include "../logging.hpp"
|
|
||||||
#include "../lux_status.h"
|
#include "../lux_status.h"
|
||||||
#include "../metadata.hpp"
|
#include "../metadata.hpp"
|
||||||
|
|
||||||
#include "ccm.hpp"
|
#include "ccm.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiCcm)
|
||||||
|
|
||||||
// This algorithm selects a CCM (Colour Correction Matrix) according to the
|
// This algorithm selects a CCM (Colour Correction Matrix) according to the
|
||||||
// colour temperature estimated by AWB (interpolating between known matricies as
|
// colour temperature estimated by AWB (interpolating between known matricies as
|
||||||
|
@ -129,9 +133,9 @@ void Ccm::Prepare(Metadata *image_metadata)
|
||||||
lux_ok = get_locked(image_metadata, "lux.status", lux);
|
lux_ok = get_locked(image_metadata, "lux.status", lux);
|
||||||
}
|
}
|
||||||
if (!awb_ok)
|
if (!awb_ok)
|
||||||
RPI_WARN("Ccm: no colour temperature found");
|
LOG(RPiCcm, Warning) << "no colour temperature found";
|
||||||
if (!lux_ok)
|
if (!lux_ok)
|
||||||
RPI_WARN("Ccm: no lux value found");
|
LOG(RPiCcm, Warning) << "no lux value found";
|
||||||
Matrix ccm = calculate_ccm(config_.ccms, awb.temperature_K);
|
Matrix ccm = calculate_ccm(config_.ccms, awb.temperature_K);
|
||||||
double saturation = saturation_;
|
double saturation = saturation_;
|
||||||
struct CcmStatus ccm_status;
|
struct CcmStatus ccm_status;
|
||||||
|
@ -144,13 +148,15 @@ void Ccm::Prepare(Metadata *image_metadata)
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
ccm_status.matrix[j * 3 + i] =
|
ccm_status.matrix[j * 3 + i] =
|
||||||
std::max(-8.0, std::min(7.9999, ccm.m[j][i]));
|
std::max(-8.0, std::min(7.9999, ccm.m[j][i]));
|
||||||
RPI_LOG("CCM: colour temperature " << awb.temperature_K << "K");
|
LOG(RPiCcm, Debug)
|
||||||
RPI_LOG("CCM: " << ccm_status.matrix[0] << " " << ccm_status.matrix[1]
|
<< "colour temperature " << awb.temperature_K << "K";
|
||||||
<< " " << ccm_status.matrix[2] << " "
|
LOG(RPiCcm, Debug)
|
||||||
<< ccm_status.matrix[3] << " " << ccm_status.matrix[4]
|
<< "CCM: " << ccm_status.matrix[0] << " " << ccm_status.matrix[1]
|
||||||
<< " " << ccm_status.matrix[5] << " "
|
<< " " << ccm_status.matrix[2] << " "
|
||||||
<< ccm_status.matrix[6] << " " << ccm_status.matrix[7]
|
<< ccm_status.matrix[3] << " " << ccm_status.matrix[4]
|
||||||
<< " " << ccm_status.matrix[8]);
|
<< " " << ccm_status.matrix[5] << " "
|
||||||
|
<< ccm_status.matrix[6] << " " << ccm_status.matrix[7]
|
||||||
|
<< " " << ccm_status.matrix[8];
|
||||||
image_metadata->Set("ccm.status", ccm_status);
|
image_metadata->Set("ccm.status", ccm_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,17 @@
|
||||||
*/
|
*/
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../contrast_status.h"
|
#include "../contrast_status.h"
|
||||||
#include "../histogram.hpp"
|
#include "../histogram.hpp"
|
||||||
|
|
||||||
#include "contrast.hpp"
|
#include "contrast.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiContrast)
|
||||||
|
|
||||||
// This is a very simple control algorithm which simply retrieves the results of
|
// This is a very simple control algorithm which simply retrieves the results of
|
||||||
// AGC and AWB via their "status" metadata, and applies digital gain to the
|
// AGC and AWB via their "status" metadata, and applies digital gain to the
|
||||||
|
@ -97,11 +102,13 @@ Pwl compute_stretch_curve(Histogram const &histogram,
|
||||||
double hist_lo = histogram.Quantile(config.lo_histogram) *
|
double hist_lo = histogram.Quantile(config.lo_histogram) *
|
||||||
(65536 / NUM_HISTOGRAM_BINS);
|
(65536 / NUM_HISTOGRAM_BINS);
|
||||||
double level_lo = config.lo_level * 65536;
|
double level_lo = config.lo_level * 65536;
|
||||||
RPI_LOG("Move histogram point " << hist_lo << " to " << level_lo);
|
LOG(RPiContrast, Debug)
|
||||||
|
<< "Move histogram point " << hist_lo << " to " << level_lo;
|
||||||
hist_lo = std::max(
|
hist_lo = std::max(
|
||||||
level_lo,
|
level_lo,
|
||||||
std::min(65535.0, std::min(hist_lo, level_lo + config.lo_max)));
|
std::min(65535.0, std::min(hist_lo, level_lo + config.lo_max)));
|
||||||
RPI_LOG("Final values " << hist_lo << " -> " << level_lo);
|
LOG(RPiContrast, Debug)
|
||||||
|
<< "Final values " << hist_lo << " -> " << level_lo;
|
||||||
enhance.Append(hist_lo, level_lo);
|
enhance.Append(hist_lo, level_lo);
|
||||||
// Keep the mid-point (median) in the same place, though, to limit the
|
// Keep the mid-point (median) in the same place, though, to limit the
|
||||||
// apparent amount of global brightness shift.
|
// apparent amount of global brightness shift.
|
||||||
|
@ -113,11 +120,13 @@ Pwl compute_stretch_curve(Histogram const &histogram,
|
||||||
double hist_hi = histogram.Quantile(config.hi_histogram) *
|
double hist_hi = histogram.Quantile(config.hi_histogram) *
|
||||||
(65536 / NUM_HISTOGRAM_BINS);
|
(65536 / NUM_HISTOGRAM_BINS);
|
||||||
double level_hi = config.hi_level * 65536;
|
double level_hi = config.hi_level * 65536;
|
||||||
RPI_LOG("Move histogram point " << hist_hi << " to " << level_hi);
|
LOG(RPiContrast, Debug)
|
||||||
|
<< "Move histogram point " << hist_hi << " to " << level_hi;
|
||||||
hist_hi = std::min(
|
hist_hi = std::min(
|
||||||
level_hi,
|
level_hi,
|
||||||
std::max(0.0, std::max(hist_hi, level_hi - config.hi_max)));
|
std::max(0.0, std::max(hist_hi, level_hi - config.hi_max)));
|
||||||
RPI_LOG("Final values " << hist_hi << " -> " << level_hi);
|
LOG(RPiContrast, Debug)
|
||||||
|
<< "Final values " << hist_hi << " -> " << level_hi;
|
||||||
enhance.Append(hist_hi, level_hi);
|
enhance.Append(hist_hi, level_hi);
|
||||||
enhance.Append(65535, 65535);
|
enhance.Append(65535, 65535);
|
||||||
return enhance;
|
return enhance;
|
||||||
|
@ -127,7 +136,8 @@ Pwl apply_manual_contrast(Pwl const &gamma_curve, double brightness,
|
||||||
double contrast)
|
double contrast)
|
||||||
{
|
{
|
||||||
Pwl new_gamma_curve;
|
Pwl new_gamma_curve;
|
||||||
RPI_LOG("Manual brightness " << brightness << " contrast " << contrast);
|
LOG(RPiContrast, Debug)
|
||||||
|
<< "Manual brightness " << brightness << " contrast " << contrast;
|
||||||
gamma_curve.Map([&](double x, double y) {
|
gamma_curve.Map([&](double x, double y) {
|
||||||
new_gamma_curve.Append(
|
new_gamma_curve.Append(
|
||||||
x, std::max(0.0, std::min(65535.0,
|
x, std::max(0.0, std::min(65535.0,
|
||||||
|
|
|
@ -5,10 +5,14 @@
|
||||||
* dpc.cpp - DPC (defective pixel correction) control algorithm
|
* dpc.cpp - DPC (defective pixel correction) control algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../logging.hpp"
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "dpc.hpp"
|
#include "dpc.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
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
|
// We use the lux status so that we can apply stronger settings in darkness (if
|
||||||
// necessary).
|
// necessary).
|
||||||
|
@ -37,7 +41,7 @@ void Dpc::Prepare(Metadata *image_metadata)
|
||||||
DpcStatus dpc_status = {};
|
DpcStatus dpc_status = {};
|
||||||
// Should we vary this with lux level or analogue gain? TBD.
|
// Should we vary this with lux level or analogue gain? TBD.
|
||||||
dpc_status.strength = config_.strength;
|
dpc_status.strength = config_.strength;
|
||||||
RPI_LOG("Dpc: strength " << dpc_status.strength);
|
LOG(RPiDpc, Debug) << "strength " << dpc_status.strength;
|
||||||
image_metadata->Set("dpc.status", dpc_status);
|
image_metadata->Set("dpc.status", dpc_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,18 @@
|
||||||
* geq.cpp - GEQ (green equalisation) control algorithm
|
* geq.cpp - GEQ (green equalisation) control algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../device_status.h"
|
#include "../device_status.h"
|
||||||
#include "../logging.hpp"
|
|
||||||
#include "../lux_status.h"
|
#include "../lux_status.h"
|
||||||
#include "../pwl.hpp"
|
#include "../pwl.hpp"
|
||||||
|
|
||||||
#include "geq.hpp"
|
#include "geq.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiGeq)
|
||||||
|
|
||||||
// We use the lux status so that we can apply stronger settings in darkness (if
|
// We use the lux status so that we can apply stronger settings in darkness (if
|
||||||
// necessary).
|
// necessary).
|
||||||
|
@ -44,11 +48,12 @@ void Geq::Prepare(Metadata *image_metadata)
|
||||||
LuxStatus lux_status = {};
|
LuxStatus lux_status = {};
|
||||||
lux_status.lux = 400;
|
lux_status.lux = 400;
|
||||||
if (image_metadata->Get("lux.status", lux_status))
|
if (image_metadata->Get("lux.status", lux_status))
|
||||||
RPI_WARN("Geq: no lux data found");
|
LOG(RPiGeq, Warning) << "no lux data found";
|
||||||
DeviceStatus device_status = {};
|
DeviceStatus device_status = {};
|
||||||
device_status.analogue_gain = 1.0; // in case not found
|
device_status.analogue_gain = 1.0; // in case not found
|
||||||
if (image_metadata->Get("device.status", device_status))
|
if (image_metadata->Get("device.status", device_status))
|
||||||
RPI_WARN("Geq: no device metadata - use analogue gain of 1x");
|
LOG(RPiGeq, Warning)
|
||||||
|
<< "no device metadata - use analogue gain of 1x";
|
||||||
GeqStatus geq_status = {};
|
GeqStatus geq_status = {};
|
||||||
double strength =
|
double strength =
|
||||||
config_.strength.Empty()
|
config_.strength.Empty()
|
||||||
|
@ -60,10 +65,11 @@ void Geq::Prepare(Metadata *image_metadata)
|
||||||
double slope = config_.slope * strength;
|
double slope = config_.slope * strength;
|
||||||
geq_status.offset = std::min(65535.0, std::max(0.0, offset));
|
geq_status.offset = std::min(65535.0, std::max(0.0, offset));
|
||||||
geq_status.slope = std::min(.99999, std::max(0.0, slope));
|
geq_status.slope = std::min(.99999, std::max(0.0, slope));
|
||||||
RPI_LOG("Geq: offset " << geq_status.offset << " slope "
|
LOG(RPiGeq, Debug)
|
||||||
<< geq_status.slope << " (analogue gain "
|
<< "offset " << geq_status.offset << " slope "
|
||||||
<< device_status.analogue_gain << " lux "
|
<< geq_status.slope << " (analogue gain "
|
||||||
<< lux_status.lux << ")");
|
<< device_status.analogue_gain << " lux "
|
||||||
|
<< lux_status.lux << ")";
|
||||||
image_metadata->Set("geq.status", geq_status);
|
image_metadata->Set("geq.status", geq_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,16 @@
|
||||||
|
|
||||||
#include "linux/bcm2835-isp.h"
|
#include "linux/bcm2835-isp.h"
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../device_status.h"
|
#include "../device_status.h"
|
||||||
#include "../logging.hpp"
|
|
||||||
|
|
||||||
#include "lux.hpp"
|
#include "lux.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiLux)
|
||||||
|
|
||||||
#define NAME "rpi.lux"
|
#define NAME "rpi.lux"
|
||||||
|
|
||||||
|
@ -33,7 +37,6 @@ char const *Lux::Name() const
|
||||||
|
|
||||||
void Lux::Read(boost::property_tree::ptree const ¶ms)
|
void Lux::Read(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
RPI_LOG(Name());
|
|
||||||
reference_shutter_speed_ =
|
reference_shutter_speed_ =
|
||||||
params.get<double>("reference_shutter_speed");
|
params.get<double>("reference_shutter_speed");
|
||||||
reference_gain_ = params.get<double>("reference_gain");
|
reference_gain_ = params.get<double>("reference_gain");
|
||||||
|
@ -84,7 +87,7 @@ void Lux::Process(StatisticsPtr &stats, Metadata *image_metadata)
|
||||||
LuxStatus status;
|
LuxStatus status;
|
||||||
status.lux = estimated_lux;
|
status.lux = estimated_lux;
|
||||||
status.aperture = current_aperture;
|
status.aperture = current_aperture;
|
||||||
RPI_LOG(Name() << ": estimated lux " << estimated_lux);
|
LOG(RPiLux, Debug) << ": estimated lux " << estimated_lux;
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(mutex_);
|
std::unique_lock<std::mutex> lock(mutex_);
|
||||||
status_ = status;
|
status_ = status;
|
||||||
|
@ -93,7 +96,7 @@ void Lux::Process(StatisticsPtr &stats, Metadata *image_metadata)
|
||||||
// algorithms get the latest value.
|
// algorithms get the latest value.
|
||||||
image_metadata->Set("lux.status", status);
|
image_metadata->Set("lux.status", status);
|
||||||
} else
|
} else
|
||||||
RPI_WARN(Name() << ": no device metadata");
|
LOG(RPiLux, Warning) << ": no device metadata";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register algorithm with the system.
|
// Register algorithm with the system.
|
||||||
|
|
|
@ -7,13 +7,17 @@
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../device_status.h"
|
#include "../device_status.h"
|
||||||
#include "../logging.hpp"
|
|
||||||
#include "../noise_status.h"
|
#include "../noise_status.h"
|
||||||
|
|
||||||
#include "noise.hpp"
|
#include "noise.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiNoise)
|
||||||
|
|
||||||
#define NAME "rpi.noise"
|
#define NAME "rpi.noise"
|
||||||
|
|
||||||
|
@ -37,7 +41,6 @@ void Noise::SwitchMode(CameraMode const &camera_mode,
|
||||||
|
|
||||||
void Noise::Read(boost::property_tree::ptree const ¶ms)
|
void Noise::Read(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
RPI_LOG(Name());
|
|
||||||
reference_constant_ = params.get<double>("reference_constant");
|
reference_constant_ = params.get<double>("reference_constant");
|
||||||
reference_slope_ = params.get<double>("reference_slope");
|
reference_slope_ = params.get<double>("reference_slope");
|
||||||
}
|
}
|
||||||
|
@ -58,10 +61,11 @@ void Noise::Prepare(Metadata *image_metadata)
|
||||||
status.noise_constant = reference_constant_ * factor;
|
status.noise_constant = reference_constant_ * factor;
|
||||||
status.noise_slope = reference_slope_ * factor;
|
status.noise_slope = reference_slope_ * factor;
|
||||||
image_metadata->Set("noise.status", status);
|
image_metadata->Set("noise.status", status);
|
||||||
RPI_LOG(Name() << ": constant " << status.noise_constant
|
LOG(RPiNoise, Debug)
|
||||||
<< " slope " << status.noise_slope);
|
<< "constant " << status.noise_constant
|
||||||
|
<< " slope " << status.noise_slope;
|
||||||
} else
|
} else
|
||||||
RPI_WARN(Name() << " no metadata");
|
LOG(RPiNoise, Warning) << " no metadata";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register algorithm with the system.
|
// Register algorithm with the system.
|
||||||
|
|
|
@ -5,12 +5,17 @@
|
||||||
* sdn.cpp - SDN (spatial denoise) control algorithm
|
* sdn.cpp - SDN (spatial denoise) control algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../noise_status.h"
|
#include "../noise_status.h"
|
||||||
#include "../sdn_status.h"
|
#include "../sdn_status.h"
|
||||||
|
|
||||||
#include "sdn.hpp"
|
#include "sdn.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiSdn)
|
||||||
|
|
||||||
// Calculate settings for the spatial denoise block using the noise profile in
|
// Calculate settings for the spatial denoise block using the noise profile in
|
||||||
// the image metadata.
|
// the image metadata.
|
||||||
|
@ -40,19 +45,19 @@ void Sdn::Prepare(Metadata *image_metadata)
|
||||||
struct NoiseStatus noise_status = {};
|
struct NoiseStatus noise_status = {};
|
||||||
noise_status.noise_slope = 3.0; // in case no metadata
|
noise_status.noise_slope = 3.0; // in case no metadata
|
||||||
if (image_metadata->Get("noise.status", noise_status) != 0)
|
if (image_metadata->Get("noise.status", noise_status) != 0)
|
||||||
RPI_WARN("Sdn: no noise profile found");
|
LOG(RPiSdn, Warning) << "no noise profile found";
|
||||||
RPI_LOG("Noise profile: constant " << noise_status.noise_constant
|
LOG(RPiSdn, Debug)
|
||||||
<< " slope "
|
<< "Noise profile: constant " << noise_status.noise_constant
|
||||||
<< noise_status.noise_slope);
|
<< " slope " << noise_status.noise_slope;
|
||||||
struct SdnStatus status;
|
struct SdnStatus status;
|
||||||
status.noise_constant = noise_status.noise_constant * deviation_;
|
status.noise_constant = noise_status.noise_constant * deviation_;
|
||||||
status.noise_slope = noise_status.noise_slope * deviation_;
|
status.noise_slope = noise_status.noise_slope * deviation_;
|
||||||
status.strength = strength_;
|
status.strength = strength_;
|
||||||
image_metadata->Set("sdn.status", status);
|
image_metadata->Set("sdn.status", status);
|
||||||
RPI_LOG("Sdn: programmed constant " << status.noise_constant
|
LOG(RPiSdn, Debug)
|
||||||
<< " slope " << status.noise_slope
|
<< "programmed constant " << status.noise_constant
|
||||||
<< " strength "
|
<< " slope " << status.noise_slope
|
||||||
<< status.strength);
|
<< " strength " << status.strength;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register algorithm with the system.
|
// Register algorithm with the system.
|
||||||
|
|
|
@ -7,12 +7,16 @@
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "../logging.hpp"
|
#include "libcamera/internal/log.h"
|
||||||
|
|
||||||
#include "../sharpen_status.h"
|
#include "../sharpen_status.h"
|
||||||
|
|
||||||
#include "sharpen.hpp"
|
#include "sharpen.hpp"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
using namespace libcamera;
|
||||||
|
|
||||||
|
LOG_DEFINE_CATEGORY(RPiSharpen)
|
||||||
|
|
||||||
#define NAME "rpi.sharpen"
|
#define NAME "rpi.sharpen"
|
||||||
|
|
||||||
|
@ -35,10 +39,13 @@ void Sharpen::SwitchMode(CameraMode const &camera_mode,
|
||||||
|
|
||||||
void Sharpen::Read(boost::property_tree::ptree const ¶ms)
|
void Sharpen::Read(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
RPI_LOG(Name());
|
|
||||||
threshold_ = params.get<double>("threshold", 1.0);
|
threshold_ = params.get<double>("threshold", 1.0);
|
||||||
strength_ = params.get<double>("strength", 1.0);
|
strength_ = params.get<double>("strength", 1.0);
|
||||||
limit_ = params.get<double>("limit", 1.0);
|
limit_ = params.get<double>("limit", 1.0);
|
||||||
|
LOG(RPiSharpen, Debug)
|
||||||
|
<< "Read threshold " << threshold_
|
||||||
|
<< " strength " << strength_
|
||||||
|
<< " limit " << limit_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sharpen::SetStrength(double strength)
|
void Sharpen::SetStrength(double strength)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue