[libcamera-devel] [PATCH 15/22] ipa: ipu3: Mark the beginning and and of a frame

Kieran Bingham kieran.bingham at ideasonboard.com
Mon Nov 8 16:45:55 CET 2021


Quoting Jean-Michel Hautbois (2021-11-08 13:13:43)
> Introduce the skeleton for two functions which will be used to
> instantiate a frame context, and do everything needed when a frame is
> received. Do the same for the other end, once the algorithms have run
> and updated the frame context to later deallocate the corresponding
> frame context.
> 

These definitely make sense to me. I'm not sure if they need their own
patch to add as a skeleton yet, but let see later.

Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

Can stand here, but I wonder if there's anything later that might make
sense to squash in so they all build up together. Perhaps it's fine on
it's own though.


> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
> ---
>  src/ipa/ipu3/ipu3.cpp | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
> 
> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
> index 62df7819..dcf4da65 100644
> --- a/src/ipa/ipu3/ipu3.cpp
> +++ b/src/ipa/ipu3/ipu3.cpp
> @@ -160,6 +160,14 @@ private:
>         void setControls(unsigned int frame);
>         void calculateBdsGrid(const Size &bdsOutputSize);
>  
> +       /*
> +        * Internal events that mark the beginning of processing a new frame
> +        * to the point that it has successfully completed processing its
> +        * statistics.
> +        */
> +       void frameStarted(unsigned int frame);
> +       void frameCompleted(unsigned int frame);
> +
>         std::map<unsigned int, MappedFrameBuffer> buffers_;
>  
>         ControlInfoMap ctrls_;
> @@ -510,6 +518,14 @@ void IPAIPU3::unmapBuffers(const std::vector<unsigned int> &ids)
>         }
>  }
>  
> +void IPAIPU3::frameStarted([[maybe_unused]] unsigned int frame)
> +{
> +}
> +
> +void IPAIPU3::frameCompleted([[maybe_unused]] unsigned int frame)
> +{
> +}
> +
>  /**
>   * \brief Process an event generated by the pipeline handler
>   * \param[in] event The event sent from pipeline handler
> @@ -525,6 +541,14 @@ void IPAIPU3::processEvent(const IPU3Event &event)
>  {
>         switch (event.op) {
>         case EventProcessControls: {
> +               /*
> +                * To save incurring extra IPC calls, we do not send explicit events
> +                * when a new request is started or completed.
> +                * ProcessControls is the first event handled upon receipt of a new
> +                * request, so we can handle all actions required to start processing
> +                * a new frame.
> +                */
> +               frameStarted(event.frame);
>                 processControls(event.frame, event.controls);
>                 break;
>         }
> @@ -558,6 +582,13 @@ void IPAIPU3::processEvent(const IPU3Event &event)
>                 context_.frameContext.agc.gain = camHelper_->gain(event.sensorControls.get(V4L2_CID_ANALOGUE_GAIN).get<int32_t>());
>  
>                 parseStatistics(event.frame, event.frameTimestamp, stats);
> +               /*
> +               * To save incurring extra IPC calls, we do not send explicit events

Indentation is wrong in this block

> +               * when we have completed all handling of a request.
> +               * Once the statistics are fully processed, we will no longer handle this
> +               * frame.
> +               */
> +               frameCompleted(event.frame);
>                 break;
>         }
>         default:
> -- 
> 2.32.0
>


More information about the libcamera-devel mailing list