[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