[libcamera-devel] [PATCH v2] ipa: ipu3: List the events in their order of calling
Jacopo Mondi
jacopo at jmondi.org
Sat Nov 6 11:28:34 CET 2021
Hi Jean-Michel
On Fri, Nov 05, 2021 at 05:36:25PM +0100, Jean-Michel Hautbois wrote:
> The IPU3 IPA has three events which are handled from the pipeline
> handler.
>
> The events are received in the sequence, EventProcessControls,
> EventFillParams, and finally EventStatReady, while the code lists these
> in a different order.
>
> Update the flow of IPAIPU3::processEvent() to match the expected
> sequence of events, to help support the reader in interpreting the flow
> of events through the IPA.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Thanks, it makes it easier to follow the operations flow!
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> ---
> src/ipa/ipu3/ipu3.cpp | 27 +++++++++++++++++----------
> 1 file changed, 17 insertions(+), 10 deletions(-)
>
> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
> index 5c51607d..93b700bd 100644
> --- a/src/ipa/ipu3/ipu3.cpp
> +++ b/src/ipa/ipu3/ipu3.cpp
> @@ -509,6 +509,13 @@ void IPAIPU3::unmapBuffers(const std::vector<unsigned int> &ids)
> /**
> * \brief Process an event generated by the pipeline handler
> * \param[in] event The event sent from pipeline handler
> + *
> + * The expected event handling over the lifetime of a Request has
> + * the following sequence:
> + *
> + * - EventProcessControls : Handle controls from a new Request
> + * - EventFillParams : Prepare the ISP to process the Request
> + * - EventStatReady : Process statistics after ISP completion
> */
> void IPAIPU3::processEvent(const IPU3Event &event)
> {
> @@ -517,32 +524,32 @@ void IPAIPU3::processEvent(const IPU3Event &event)
> processControls(event.frame, event.controls);
> break;
> }
> - case EventStatReady: {
> + case EventFillParams: {
> auto it = buffers_.find(event.bufferId);
> if (it == buffers_.end()) {
> - LOG(IPAIPU3, Error) << "Could not find stats buffer!";
> + LOG(IPAIPU3, Error) << "Could not find param buffer!";
> return;
> }
>
> Span<uint8_t> mem = it->second.planes()[0];
> - const ipu3_uapi_stats_3a *stats =
> - reinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());
> + ipu3_uapi_params *params =
> + reinterpret_cast<ipu3_uapi_params *>(mem.data());
>
> - parseStatistics(event.frame, event.frameTimestamp, stats);
> + fillParams(event.frame, params);
> break;
> }
> - case EventFillParams: {
> + case EventStatReady: {
> auto it = buffers_.find(event.bufferId);
> if (it == buffers_.end()) {
> - LOG(IPAIPU3, Error) << "Could not find param buffer!";
> + LOG(IPAIPU3, Error) << "Could not find stats buffer!";
> return;
> }
>
> Span<uint8_t> mem = it->second.planes()[0];
> - ipu3_uapi_params *params =
> - reinterpret_cast<ipu3_uapi_params *>(mem.data());
> + const ipu3_uapi_stats_3a *stats =
> + reinterpret_cast<ipu3_uapi_stats_3a *>(mem.data());
>
> - fillParams(event.frame, params);
> + parseStatistics(event.frame, event.frameTimestamp, stats);
> break;
> }
> default:
> --
> 2.32.0
>
More information about the libcamera-devel
mailing list