diff options
-rw-r--r-- | src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index 6fbdba04..eb6d3167 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); @@ -1417,18 +1419,6 @@ void RPiCameraData::unicamBufferDequeue(FrameBuffer *buffer) 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; @@ -1709,6 +1706,14 @@ void RPiCameraData::tryRunPipeline() 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 * pipeline. |