libcamera/src/ipa/ipu3/algorithms/agc.h
Jean-Michel Hautbois b5d2adbeab ipa: ipu3: agc: Introduce lineDuration in IPASessionConfiguration
Instead of having a local cached value for line duration, store it in
the IPASessionConfiguration::sensor structure.
While at it, configure the default analogue gain and shutter speed to
controlled fixed values.

The latter is set to be 10ms as it will in most cases be close to the
one needed, making the AGC faster to converge.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
2022-03-11 20:47:32 +05:30

59 lines
1.3 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021, Ideas On Board
*
* agc.h - IPU3 AGC/AEC mean-based control algorithm
*/
#pragma once
#include <linux/intel-ipu3.h>
#include <libcamera/base/utils.h>
#include <libcamera/geometry.h>
#include "algorithm.h"
namespace libcamera {
struct IPACameraSensorInfo;
namespace ipa::ipu3::algorithms {
class Agc : public Algorithm
{
public:
Agc();
~Agc() = default;
int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
void process(IPAContext &context, const ipu3_uapi_stats_3a *stats) override;
private:
double measureBrightness(const ipu3_uapi_stats_3a *stats,
const ipu3_uapi_grid_config &grid) const;
utils::Duration filterExposure(utils::Duration currentExposure);
void computeExposure(IPAContext &context, double yGain,
double iqMeanGain);
double estimateLuminance(IPAFrameContext &frameContext,
const ipu3_uapi_grid_config &grid,
const ipu3_uapi_stats_3a *stats,
double gain);
uint64_t frameCount_;
utils::Duration minShutterSpeed_;
utils::Duration maxShutterSpeed_;
double minAnalogueGain_;
double maxAnalogueGain_;
utils::Duration filteredExposure_;
uint32_t stride_;
};
} /* namespace ipa::ipu3::algorithms */
} /* namespace libcamera */