ipa: rkisp1: Use frame counter for the request queued

Introduce a frameCount variable in the IPAFrameContext which increments
each time a request is queued. It is reset at configure call, when the
camera is started.

This will allow the frameCount to be used by other algorithms, without
having to keep multiple private frame counters.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Jean-Michel Hautbois 2022-02-24 12:33:43 +01:00
parent 4efca856c0
commit f84e5e01a4
3 changed files with 16 additions and 2 deletions

View file

@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021, Ideas On Board
* Copyright (C) 2021-2022, Ideas On Board
*
* ipa_context.cpp - RkISP1 IPA Context
*/
@ -113,4 +113,13 @@ namespace libcamera::ipa::rkisp1 {
* \brief Analogue gain multiplier
*/
/**
* \var IPAFrameContext::frameCount
* \brief Counter of requests queued to the IPA module
*
* The counter is reset to 0 when the IPA module is configured, and is
* incremented for each request being queued, after calling the
* Algorithm::prepare() function of all algorithms.
*/
} /* namespace libcamera::ipa::rkisp1 */

View file

@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2021, Ideas On Board
* Copyright (C) 2021-2022, Ideas On Board
*
* ipa_context.h - RkISP1 IPA Context
*
@ -43,6 +43,8 @@ struct IPAFrameContext {
uint32_t exposure;
double gain;
} sensor;
unsigned int frameCount;
};
struct IPAContext {

View file

@ -190,6 +190,8 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,
context_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);
context_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);
context_.frameContext.frameCount = 0;
for (auto const &algo : algorithms_) {
int ret = algo->configure(context_, info);
if (ret)
@ -243,6 +245,7 @@ void IPARkISP1::queueRequest(const uint32_t frame, const uint32_t bufferId,
algo->prepare(context_, params);
paramsBufferReady.emit(frame);
context_.frameContext.frameCount++;
}
void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,