blob: fbb66b8846c5270467ea06d2046b8b00c7610ee1 [file] [log] [blame]
#include "samples/risp4ml/common/utils.h"
#include "samples/risp4ml/isp_stages/dg.h"
static const uint16_t kDgFractional = kRawPipelineFraction;
static const uint16_t kDgUnityGain = 1 << kDgFractional;
static DgParams dg_params = {
.enable = true,
.gains = {kDgUnityGain, kDgUnityGain, kDgUnityGain, kDgUnityGain}};
void set_dg_params(DgParams* params) { dg_params = *params; }
void dg_process(Image* img) {
if (!dg_params.enable) return;
for (uint16_t y = 0; y < img->height; ++y) {
pixel_type_t* line = image_row(img, 0, y);
for (uint16_t x = 0; x < img->width; ++x) {
BayerIndex bayer_index = GetBayerIndex(kBayerType, x, y);
// + (1 << (kDgFractional -1)) adds 0.5 for more accurate rounding
uint32_t scaled_pixel = (uint32_t)line[x] * dg_params.gains[bayer_index] +
(1 << (kDgFractional - 1));
line[x] = (pixel_type_t)Clamp(scaled_pixel >> kDgFractional, 0,
kRawPipelineMaxVal);
}
}
}