libcamera: ipa: Raspberry Pi IPA

Initial implementation of the Raspberry Pi (BCM2835) libcamera IPA and
associated libraries.

All code is licensed under the BSD-2-Clause terms.
Copyright (c) 2019-2020 Raspberry Pi Trading Ltd.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2020-05-03 16:48:42 +01:00 committed by Laurent Pinchart
parent 740fd1b62f
commit 0db2c8dc75
69 changed files with 8242 additions and 0 deletions

View file

@ -0,0 +1,60 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (C) 2019, Raspberry Pi (Trading) Limited
*
* sharpen.cpp - sharpening control algorithm
*/
#include <math.h>
#include "../logging.hpp"
#include "../sharpen_status.h"
#include "sharpen.hpp"
using namespace RPi;
#define NAME "rpi.sharpen"
Sharpen::Sharpen(Controller *controller)
: Algorithm(controller)
{
}
char const *Sharpen::Name() const
{
return NAME;
}
void Sharpen::SwitchMode(CameraMode const &camera_mode)
{
// can't be less than one, right?
mode_factor_ = std::max(1.0, camera_mode.noise_factor);
}
void Sharpen::Read(boost::property_tree::ptree const &params)
{
RPI_LOG(Name());
threshold_ = params.get<double>("threshold", 1.0);
strength_ = params.get<double>("strength", 1.0);
limit_ = params.get<double>("limit", 1.0);
}
void Sharpen::Prepare(Metadata *image_metadata)
{
double mode_factor = mode_factor_;
struct SharpenStatus status;
// Binned modes seem to need the sharpening toned down with this
// pipeline.
status.threshold = threshold_ * mode_factor;
status.strength = strength_ / mode_factor;
status.limit = limit_ / mode_factor;
image_metadata->Set("sharpen.status", status);
}
// Register algorithm with the system.
static Algorithm *Create(Controller *controller)
{
return new Sharpen(controller);
}
static RegisterAlgorithm reg(NAME, &Create);