[libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Store timestamp in the correct Request metadata

Naushir Patuck naush at raspberrypi.com
Mon May 17 11:58:19 CEST 2021


Hi,

Gentle ping to get some feedback on this patch series.  It fixes a possible
segfault that has been reported, and would be nice to get in soon.

Regards,
Naush


On Wed, 12 May 2021 at 09:47, Naushir Patuck <naush at raspberrypi.com> wrote:

> Write the controls::SensorTimestamp value in the Request metadata when
> the request is popped from the queue ready to run the pipeline. This
> ensures that the timestamp is written to the correct Request item,
> which may not be at the top of the queue when the Unicam buffer dequeue
> occurs.
>
> Fixes: fcfb1dc02a6b ("libcamera: raspberry: Report sensor timestamp")
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 29 +++++++++++--------
>  1 file changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 6fbdba0487bf..eb6d31670567 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -221,6 +221,8 @@ public:
>
>  private:
>         void checkRequestCompleted();
> +       void fillRequestMetadata(const ControlList &bufferControls,
> +                                Request *request);
>         void tryRunPipeline();
>         bool findMatchingBuffers(BayerFrame &bayerFrame, FrameBuffer
> *&embeddedBuffer);
>
> @@ -1416,18 +1418,6 @@ void RPiCameraData::unicamBufferDequeue(FrameBuffer
> *buffer)
>                         << ", timestamp: " << buffer->metadata().timestamp;
>
>         if (stream == &unicam_[Unicam::Image]) {
> -               /*
> -                * Record the sensor timestamp in the Request.
> -                *
> -                * \todo Do not assume the request in the front of the
> queue
> -                * is the correct one
> -                */
> -               Request *request = requestQueue_.front();
> -               ASSERT(request);
> -
> -               request->metadata().set(controls::SensorTimestamp,
> -                                       buffer->metadata().timestamp);
> -
>                 /*
>                  * Lookup the sensor controls used for this frame sequence
> from
>                  * DelayedControl and queue them along with the frame
> buffer.
> @@ -1689,6 +1679,13 @@ void RPiCameraData::applyScalerCrop(const
> ControlList &controls)
>         }
>  }
>
> +void RPiCameraData::fillRequestMetadata(const ControlList &bufferControls,
> +                                       Request *request)
> +{
> +       request->metadata().set(controls::SensorTimestamp,
> +
>  bufferControls.get(controls::SensorTimestamp));
> +}
> +
>  void RPiCameraData::tryRunPipeline()
>  {
>         FrameBuffer *embeddedBuffer;
> @@ -1708,6 +1705,14 @@ void RPiCameraData::tryRunPipeline()
>         /* See if a new ScalerCrop value needs to be applied. */
>         applyScalerCrop(request->controls());
>
> +       /*
> +        * Clear the request metadata and fill it with some initial non-IPA
> +        * related controls. We clear it first because the request metadata
> +        * may have been populated if we have dropped the previous frame.
> +        */
> +       request->metadata().clear();
> +       fillRequestMetadata(bayerFrame.controls, request);
> +
>         /*
>          * Process all the user controls by the IPA. Once this is
> complete, we
>          * queue the ISP output buffer listed in the request to start the
> HW
> --
> 2.25.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210517/174c4325/attachment.htm>


More information about the libcamera-devel mailing list