ipa: raspberrypi: Code refactoring to match style guidelines
Refactor all the source files in src/ipa/raspberrypi/ to match the recommended formatting guidelines for the libcamera project. The vast majority of changes in this commit comprise of switching from snake_case to CamelCase, and starting class member functions with a lower case character. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
b4a3eb6b98
commit
177df04d2b
63 changed files with 2093 additions and 2161 deletions
|
@ -31,40 +31,40 @@ Contrast::Contrast(Controller *controller)
|
|||
{
|
||||
}
|
||||
|
||||
char const *Contrast::Name() const
|
||||
char const *Contrast::name() const
|
||||
{
|
||||
return NAME;
|
||||
}
|
||||
|
||||
void Contrast::Read(boost::property_tree::ptree const ¶ms)
|
||||
void Contrast::read(boost::property_tree::ptree const ¶ms)
|
||||
{
|
||||
// enable adaptive enhancement by default
|
||||
config_.ce_enable = params.get<int>("ce_enable", 1);
|
||||
config_.ceEnable = params.get<int>("ce_enable", 1);
|
||||
// the point near the bottom of the histogram to move
|
||||
config_.lo_histogram = params.get<double>("lo_histogram", 0.01);
|
||||
config_.loHistogram = params.get<double>("lo_histogram", 0.01);
|
||||
// where in the range to try and move it to
|
||||
config_.lo_level = params.get<double>("lo_level", 0.015);
|
||||
config_.loLevel = params.get<double>("lo_level", 0.015);
|
||||
// but don't move by more than this
|
||||
config_.lo_max = params.get<double>("lo_max", 500);
|
||||
config_.loMax = params.get<double>("lo_max", 500);
|
||||
// equivalent values for the top of the histogram...
|
||||
config_.hi_histogram = params.get<double>("hi_histogram", 0.95);
|
||||
config_.hi_level = params.get<double>("hi_level", 0.95);
|
||||
config_.hi_max = params.get<double>("hi_max", 2000);
|
||||
config_.gamma_curve.Read(params.get_child("gamma_curve"));
|
||||
config_.hiHistogram = params.get<double>("hi_histogram", 0.95);
|
||||
config_.hiLevel = params.get<double>("hi_level", 0.95);
|
||||
config_.hiMax = params.get<double>("hi_max", 2000);
|
||||
config_.gammaCurve.read(params.get_child("gamma_curve"));
|
||||
}
|
||||
|
||||
void Contrast::SetBrightness(double brightness)
|
||||
void Contrast::setBrightness(double brightness)
|
||||
{
|
||||
brightness_ = brightness;
|
||||
}
|
||||
|
||||
void Contrast::SetContrast(double contrast)
|
||||
void Contrast::setContrast(double contrast)
|
||||
{
|
||||
contrast_ = contrast;
|
||||
}
|
||||
|
||||
static void fill_in_status(ContrastStatus &status, double brightness,
|
||||
double contrast, Pwl &gamma_curve)
|
||||
static void fillInStatus(ContrastStatus &status, double brightness,
|
||||
double contrast, Pwl &gammaCurve)
|
||||
{
|
||||
status.brightness = brightness;
|
||||
status.contrast = contrast;
|
||||
|
@ -73,104 +73,100 @@ static void fill_in_status(ContrastStatus &status, double brightness,
|
|||
: (i < 24 ? (i - 16) * 2048 + 16384
|
||||
: (i - 24) * 4096 + 32768);
|
||||
status.points[i].x = x;
|
||||
status.points[i].y = std::min(65535.0, gamma_curve.Eval(x));
|
||||
status.points[i].y = std::min(65535.0, gammaCurve.eval(x));
|
||||
}
|
||||
status.points[CONTRAST_NUM_POINTS - 1].x = 65535;
|
||||
status.points[CONTRAST_NUM_POINTS - 1].y = 65535;
|
||||
}
|
||||
|
||||
void Contrast::Initialise()
|
||||
void Contrast::initialise()
|
||||
{
|
||||
// Fill in some default values as Prepare will run before Process gets
|
||||
// called.
|
||||
fill_in_status(status_, brightness_, contrast_, config_.gamma_curve);
|
||||
fillInStatus(status_, brightness_, contrast_, config_.gammaCurve);
|
||||
}
|
||||
|
||||
void Contrast::Prepare(Metadata *image_metadata)
|
||||
void Contrast::prepare(Metadata *imageMetadata)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
image_metadata->Set("contrast.status", status_);
|
||||
imageMetadata->set("contrast.status", status_);
|
||||
}
|
||||
|
||||
Pwl compute_stretch_curve(Histogram const &histogram,
|
||||
ContrastConfig const &config)
|
||||
Pwl computeStretchCurve(Histogram const &histogram,
|
||||
ContrastConfig const &config)
|
||||
{
|
||||
Pwl enhance;
|
||||
enhance.Append(0, 0);
|
||||
enhance.append(0, 0);
|
||||
// If the start of the histogram is rather empty, try to pull it down a
|
||||
// bit.
|
||||
double hist_lo = histogram.Quantile(config.lo_histogram) *
|
||||
(65536 / NUM_HISTOGRAM_BINS);
|
||||
double level_lo = config.lo_level * 65536;
|
||||
double histLo = histogram.quantile(config.loHistogram) *
|
||||
(65536 / NUM_HISTOGRAM_BINS);
|
||||
double levelLo = config.loLevel * 65536;
|
||||
LOG(RPiContrast, Debug)
|
||||
<< "Move histogram point " << hist_lo << " to " << level_lo;
|
||||
hist_lo = std::max(
|
||||
level_lo,
|
||||
std::min(65535.0, std::min(hist_lo, level_lo + config.lo_max)));
|
||||
<< "Move histogram point " << histLo << " to " << levelLo;
|
||||
histLo = std::max(levelLo,
|
||||
std::min(65535.0, std::min(histLo, levelLo + config.loMax)));
|
||||
LOG(RPiContrast, Debug)
|
||||
<< "Final values " << hist_lo << " -> " << level_lo;
|
||||
enhance.Append(hist_lo, level_lo);
|
||||
<< "Final values " << histLo << " -> " << levelLo;
|
||||
enhance.append(histLo, levelLo);
|
||||
// Keep the mid-point (median) in the same place, though, to limit the
|
||||
// apparent amount of global brightness shift.
|
||||
double mid = histogram.Quantile(0.5) * (65536 / NUM_HISTOGRAM_BINS);
|
||||
enhance.Append(mid, mid);
|
||||
double mid = histogram.quantile(0.5) * (65536 / NUM_HISTOGRAM_BINS);
|
||||
enhance.append(mid, mid);
|
||||
|
||||
// If the top to the histogram is empty, try to pull the pixel values
|
||||
// there up.
|
||||
double hist_hi = histogram.Quantile(config.hi_histogram) *
|
||||
(65536 / NUM_HISTOGRAM_BINS);
|
||||
double level_hi = config.hi_level * 65536;
|
||||
double histHi = histogram.quantile(config.hiHistogram) *
|
||||
(65536 / NUM_HISTOGRAM_BINS);
|
||||
double levelHi = config.hiLevel * 65536;
|
||||
LOG(RPiContrast, Debug)
|
||||
<< "Move histogram point " << hist_hi << " to " << level_hi;
|
||||
hist_hi = std::min(
|
||||
level_hi,
|
||||
std::max(0.0, std::max(hist_hi, level_hi - config.hi_max)));
|
||||
<< "Move histogram point " << histHi << " to " << levelHi;
|
||||
histHi = std::min(levelHi,
|
||||
std::max(0.0, std::max(histHi, levelHi - config.hiMax)));
|
||||
LOG(RPiContrast, Debug)
|
||||
<< "Final values " << hist_hi << " -> " << level_hi;
|
||||
enhance.Append(hist_hi, level_hi);
|
||||
enhance.Append(65535, 65535);
|
||||
<< "Final values " << histHi << " -> " << levelHi;
|
||||
enhance.append(histHi, levelHi);
|
||||
enhance.append(65535, 65535);
|
||||
return enhance;
|
||||
}
|
||||
|
||||
Pwl apply_manual_contrast(Pwl const &gamma_curve, double brightness,
|
||||
double contrast)
|
||||
Pwl applyManualContrast(Pwl const &gammaCurve, double brightness,
|
||||
double contrast)
|
||||
{
|
||||
Pwl new_gamma_curve;
|
||||
Pwl newGammaCurve;
|
||||
LOG(RPiContrast, Debug)
|
||||
<< "Manual brightness " << brightness << " contrast " << contrast;
|
||||
gamma_curve.Map([&](double x, double y) {
|
||||
new_gamma_curve.Append(
|
||||
gammaCurve.map([&](double x, double y) {
|
||||
newGammaCurve.append(
|
||||
x, std::max(0.0, std::min(65535.0,
|
||||
(y - 32768) * contrast +
|
||||
32768 + brightness)));
|
||||
});
|
||||
return new_gamma_curve;
|
||||
return newGammaCurve;
|
||||
}
|
||||
|
||||
void Contrast::Process(StatisticsPtr &stats,
|
||||
[[maybe_unused]] Metadata *image_metadata)
|
||||
void Contrast::process(StatisticsPtr &stats,
|
||||
[[maybe_unused]] Metadata *imageMetadata)
|
||||
{
|
||||
Histogram histogram(stats->hist[0].g_hist, NUM_HISTOGRAM_BINS);
|
||||
// We look at the histogram and adjust the gamma curve in the following
|
||||
// ways: 1. Adjust the gamma curve so as to pull the start of the
|
||||
// histogram down, and possibly push the end up.
|
||||
Pwl gamma_curve = config_.gamma_curve;
|
||||
if (config_.ce_enable) {
|
||||
if (config_.lo_max != 0 || config_.hi_max != 0)
|
||||
gamma_curve = compute_stretch_curve(histogram, config_)
|
||||
.Compose(gamma_curve);
|
||||
Pwl gammaCurve = config_.gammaCurve;
|
||||
if (config_.ceEnable) {
|
||||
if (config_.loMax != 0 || config_.hiMax != 0)
|
||||
gammaCurve = computeStretchCurve(histogram, config_).compose(gammaCurve);
|
||||
// We could apply other adjustments (e.g. partial equalisation)
|
||||
// based on the histogram...?
|
||||
}
|
||||
// 2. Finally apply any manually selected brightness/contrast
|
||||
// adjustment.
|
||||
if (brightness_ != 0 || contrast_ != 1.0)
|
||||
gamma_curve = apply_manual_contrast(gamma_curve, brightness_,
|
||||
contrast_);
|
||||
gammaCurve = applyManualContrast(gammaCurve, brightness_, contrast_);
|
||||
// And fill in the status for output. Use more points towards the bottom
|
||||
// of the curve.
|
||||
ContrastStatus status;
|
||||
fill_in_status(status, brightness_, contrast_, gamma_curve);
|
||||
fillInStatus(status, brightness_, contrast_, gammaCurve);
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mutex_);
|
||||
status_ = status;
|
||||
|
@ -178,8 +174,8 @@ void Contrast::Process(StatisticsPtr &stats,
|
|||
}
|
||||
|
||||
// Register algorithm with the system.
|
||||
static Algorithm *Create(Controller *controller)
|
||||
static Algorithm *create(Controller *controller)
|
||||
{
|
||||
return (Algorithm *)new Contrast(controller);
|
||||
}
|
||||
static RegisterAlgorithm reg(NAME, &Create);
|
||||
static RegisterAlgorithm reg(NAME, &create);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue