@@ -116,6 +116,7 @@ private:
unsigned int xShift_;
unsigned int stride_;
+ unsigned int sumShift_;
std::vector<SwIspStats> stats_;
SharedMemObject<SwIspStats> sharedStats_;
@@ -362,6 +362,11 @@ void SwStatsCpu::finishFrame(uint32_t frame, uint32_t bufferId)
for (unsigned int j = 0; j < SwIspStats::kYHistogramSize; j++)
sharedStats_->yHistogram[j] += s.yHistogram[j];
}
+ if (sumShift_) {
+ sharedStats_->sum_.r() >>= sumShift_;
+ sharedStats_->sum_.g() >>= sumShift_;
+ sharedStats_->sum_.b() >>= sumShift_;
+ }
}
sharedStats_->valid = valid;
@@ -422,6 +427,7 @@ int SwStatsCpu::configure(const StreamConfiguration &inputCfg, unsigned int stat
if (bayerFormat.packing == BayerFormat::Packing::None &&
setupStandardBayerOrder(bayerFormat.order) == 0) {
processFrame_ = &SwStatsCpu::processBayerFrame2;
+ sumShift_ = bayerFormat.bitDepth - 8;
switch (bayerFormat.bitDepth) {
case 8:
stats0_ = &SwStatsCpu::statsBGGR8Line0;
@@ -442,6 +448,7 @@ int SwStatsCpu::configure(const StreamConfiguration &inputCfg, unsigned int stat
/* Skip every 3th and 4th line, sample every other 2x2 block */
ySkipMask_ = 0x02;
xShift_ = 0;
+ sumShift_ = 0;
processFrame_ = &SwStatsCpu::processBayerFrame2;
switch (bayerFormat.order) {