summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi/raspberrypi.cpp
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2023-03-27 13:20:22 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-03-31 13:29:18 +0100
commitf6cc78b446de8dc03251aa5aab094852bca77285 (patch)
treeb0170e2ed5d6cbecc62fa5eae9c41e7ca7a8fd09 /src/ipa/raspberrypi/raspberrypi.cpp
parentcf6df17958f8af629410038d96e18b36df0ae6e7 (diff)
ipa: raspberrypi: Add hardware configuration to the controller
Add a new Controller::HardwareConfig structure that captures the hardware statistics grid/histogram sizes and pipeline widths. This ensures there is a single centralised places for these parameters. Add a getHardwareConfig() helper function to retrieve these values for a given hardware target. Update the statistics populating routine in the IPA to use the values from this structure instead of the hardcoded numbers. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/ipa/raspberrypi/raspberrypi.cpp')
-rw-r--r--src/ipa/raspberrypi/raspberrypi.cpp21
1 files changed, 8 insertions, 13 deletions
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 92c65a2c..e2452992 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -1394,20 +1394,19 @@ RPiController::StatisticsPtr IPARPi::fillStatistics(bcm2835_isp_stats *stats) co
{
using namespace RPiController;
+ const Controller::HardwareConfig &hw = controller_.getHardwareConfig();
unsigned int i;
StatisticsPtr statistics =
std::make_unique<Statistics>(Statistics::AgcStatsPos::PreWb, Statistics::ColourStatsPos::PostLsc);
/* RGB histograms are not used, so do not populate them. */
- statistics->yHist = RPiController::Histogram(stats->hist[0].g_hist, NUM_HISTOGRAM_BINS);
+ statistics->yHist = RPiController::Histogram(stats->hist[0].g_hist,
+ hw.numHistogramBins);
- /*
- * All region sums are based on a 13-bit pipeline bit-depth. Normalise
- * this to 16-bits for the AGC/AWB/ALSC algorithms.
- */
- constexpr unsigned int scale = Statistics::NormalisationFactorPow2 - 13;
+ /* All region sums are based on a 16-bit normalised pipeline bit-depth. */
+ unsigned int scale = Statistics::NormalisationFactorPow2 - hw.pipelineWidth;
- statistics->awbRegions.init({ DEFAULT_AWB_REGIONS_X, DEFAULT_AWB_REGIONS_Y });
+ statistics->awbRegions.init(hw.awbRegions);
for (i = 0; i < statistics->awbRegions.numRegions(); i++)
statistics->awbRegions.set(i, { { stats->awb_stats[i].r_sum << scale,
stats->awb_stats[i].g_sum << scale,
@@ -1415,11 +1414,7 @@ RPiController::StatisticsPtr IPARPi::fillStatistics(bcm2835_isp_stats *stats) co
stats->awb_stats[i].counted,
stats->awb_stats[i].notcounted });
- /*
- * There are only ever 15 regions computed by the firmware due to zoning,
- * but the HW defines AGC_REGIONS == 16!
- */
- statistics->agcRegions.init(15);
+ statistics->agcRegions.init(hw.agcRegions);
for (i = 0; i < statistics->agcRegions.numRegions(); i++)
statistics->agcRegions.set(i, { { stats->agc_stats[i].r_sum << scale,
stats->agc_stats[i].g_sum << scale,
@@ -1427,7 +1422,7 @@ RPiController::StatisticsPtr IPARPi::fillStatistics(bcm2835_isp_stats *stats) co
stats->agc_stats[i].counted,
stats->awb_stats[i].notcounted });
- statistics->focusRegions.init({ 4, 3 });
+ statistics->focusRegions.init(hw.focusRegions);
for (i = 0; i < statistics->focusRegions.numRegions(); i++)
statistics->focusRegions.set(i, { stats->focus_stats[i].contrast_val[1][1] / 1000,
stats->focus_stats[i].contrast_val_num[1][1],