@@ -526,7 +526,7 @@ int DebayerCpu::configure(const StreamConfiguration &inputCfg,
window_.width = outputCfg.size.width;
window_.height = outputCfg.size.height;
- /* Don't pass x,y since process() already adjusts src before passing it */
+ /* Don't pass x,y from window_ since process() already adjusts for it. */
stats_->setWindow(Rectangle(window_.size()));
/* pad with patternSize.Width on both left and right side */
@@ -393,8 +393,11 @@ int DebayerEGL::configure(const StreamConfiguration &inputCfg,
window_.width = outputCfg.size.width;
window_.height = outputCfg.size.height;
- /* Don't pass x,y since process() already adjusts src before passing it */
- stats_->setWindow(Rectangle(window_.size()));
+ /*
+ * Don't pass x,y from window_ since process() already adjusts for it.
+ * But crop the window to 2/3 of its width and height for speedup.
+ */
+ stats_->setWindow(Rectangle(window_.size()).croppedBy(2, 3));
LOG(Debayer, Debug) << "Input width " << inputCfg.size.width << " height " << inputCfg.size.height;
LOG(Debayer, Debug) << "Output width " << outputCfg.size.width << " height " << outputCfg.size.height;
The statistics in software ISP is computed basically over the whole image area, although only on part of the pixels. It is not necessary to cover the whole image area, it's sufficient to compute the statistics let's say over the central area of 2/3 of the image width and height, which should be both sufficient and faster. The speedup is not that important with the CPU implementation but it may save CPU work more noticeably with GPU debayering implementation. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> --- src/libcamera/software_isp/debayer_cpu.cpp | 2 +- src/libcamera/software_isp/debayer_egl.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-)