Message ID | 20250606164156.1442682-20-barnabas.pocze@ideasonboard.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
On Fri, Jun 06, 2025 at 06:41:52PM +0200, Barnabás Pőcze wrote: > From: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > > Use the newly introduced `metadataAvailable()` function to send metadata > items to the application. > > Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> > [Adjust commit message, split rpi changes.] > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > Original: https://patchwork.libcamera.org/patch/22232/ > --- > src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 5 +---- > src/libcamera/pipeline/ipu3/ipu3.cpp | 14 +++++++------- > src/libcamera/pipeline/mali-c55/mali-c55.cpp | 2 +- > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 7 +++---- > src/libcamera/pipeline/simple/simple.cpp | 5 +++-- > src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 3 +-- > src/libcamera/pipeline/vimc/vimc.cpp | 3 +-- > src/libcamera/pipeline/virtual/virtual.cpp | 2 +- > 8 files changed, 18 insertions(+), 23 deletions(-) > > diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > index 1c6da2006..f07df2d59 100644 > --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp > @@ -1100,10 +1100,7 @@ void PipelineHandlerISI::bufferReady(FrameBuffer *buffer) > Request *request = buffer->request(); > > /* Record the sensor's timestamp in the request metadata. */ > - ControlList &metadata = request->metadata(); > - if (!metadata.contains(controls::SensorTimestamp.id())) > - metadata.set(controls::SensorTimestamp, > - buffer->metadata().timestamp); > + metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); > > completeBuffer(request, buffer); > if (request->hasPendingBuffers()) > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp > index b4a4283f4..0f59d0727 100644 > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp > @@ -1250,7 +1250,7 @@ void IPU3CameraData::metadataReady(unsigned int id, const ControlList &metadata) > return; > > Request *request = info->request; > - request->metadata().merge(metadata); > + pipe()->metadataAvailable(request, metadata); > > info->metadataProcessed = true; > if (frameInfos_.tryComplete(info)) > @@ -1277,12 +1277,14 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer) > > pipe()->completeBuffer(request, buffer); > > - request->metadata().set(controls::draft::PipelineDepth, 3); > + pipe()->metadataAvailable(request, controls::draft::PipelineDepth, 3); > + > /* \todo Actually apply the scaler crop region to the ImgU. */ > const auto &scalerCrop = request->controls().get(controls::ScalerCrop); > if (scalerCrop) > cropRegion_ = *scalerCrop; > - request->metadata().set(controls::ScalerCrop, cropRegion_); > + > + pipe()->metadataAvailable(request, controls::ScalerCrop, cropRegion_); > > if (frameInfos_.tryComplete(info)) > pipe()->completeRequest(request); > @@ -1322,8 +1324,7 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer) > * \todo The sensor timestamp should be better estimated by connecting > * to the V4L2Device::frameStart signal. > */ > - request->metadata().set(controls::SensorTimestamp, > - buffer->metadata().timestamp); > + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); > > info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence); > > @@ -1417,8 +1418,7 @@ void IPU3CameraData::frameStart(uint32_t sequence) > return; > } > > - request->metadata().set(controls::draft::TestPatternMode, > - *testPatternMode); > + pipe()->metadataAvailable(request, controls::draft::TestPatternMode, *testPatternMode); > } > > REGISTER_PIPELINE_HANDLER(PipelineHandlerIPU3, "ipu3") > diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp > index 19980f6d2..d1a107629 100644 > --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp > +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp > @@ -1523,7 +1523,7 @@ void PipelineHandlerMaliC55::statsProcessed(unsigned int requestId, > MaliC55FrameInfo &frameInfo = frameInfoMap_[requestId]; > > frameInfo.statsDone = true; > - frameInfo.request->metadata().merge(metadata); > + metadataAvailable(frameInfo.request, metadata); > > tryComplete(&frameInfo); > } > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > index 34be87087..aa5ea8799 100644 > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > @@ -433,7 +433,7 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta > if (!info) > return; > > - info->request->metadata().merge(metadata); > + pipe()->metadataAvailable(info->request, metadata); > info->metadataProcessed = true; > > pipe()->tryCompleteRequest(info); > @@ -1476,8 +1476,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) > * \todo The sensor timestamp should be better estimated by connecting > * to the V4L2Device::frameStart signal. > */ > - request->metadata().set(controls::SensorTimestamp, > - metadata.timestamp); > + metadataAvailable(request, controls::SensorTimestamp, metadata.timestamp); > > if (isRaw_) { > const ControlList &ctrls = > @@ -1560,7 +1559,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) > LOG(RkISP1, Error) << "Cannot queue buffers to dewarper: " > << strerror(-ret); > > - request->metadata().set(controls::ScalerCrop, activeCrop_.value()); > + metadataAvailable(request, controls::ScalerCrop, activeCrop_.value()); > } > > void PipelineHandlerRkISP1::dewarpBufferReady(FrameBuffer *buffer) > diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp > index 05387ca7c..937c781c6 100644 > --- a/src/libcamera/pipeline/simple/simple.cpp > +++ b/src/libcamera/pipeline/simple/simple.cpp > @@ -909,7 +909,8 @@ void SimpleCameraData::imageBufferReady(FrameBuffer *buffer) > } > > if (request) > - request->metadata().set(controls::SensorTimestamp, > + // TODO: is this correct? should it be set later? At what time would you suggest to set it ? What makes you think this is the wrong place ? In my understanding this is the time when a buffer is dequeued from the video device, hence the first time we can access the timestamp information.. > + pipe->metadataAvailable(request, controls::SensorTimestamp, > buffer->metadata().timestamp); > > /* > @@ -997,7 +998,7 @@ void SimpleCameraData::metadataReady(uint32_t frame, const ControlList &metadata > if (!info) > return; > > - info->request->metadata().merge(metadata); > + pipe()->metadataAvailable(info->request, metadata); > info->metadataProcessed = true; > tryCompleteRequest(info->request); > } > diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > index e0036e3b5..d1bdc1c24 100644 > --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp > @@ -883,8 +883,7 @@ void UVCCameraData::imageBufferReady(FrameBuffer *buffer) > Request *request = buffer->request(); > > /* \todo Use the UVC metadata to calculate a more precise timestamp */ > - request->metadata().set(controls::SensorTimestamp, > - buffer->metadata().timestamp); > + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); > > pipe()->completeBuffer(request, buffer); > pipe()->completeRequest(request); > diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp > index f8a29da41..59445627b 100644 > --- a/src/libcamera/pipeline/vimc/vimc.cpp > +++ b/src/libcamera/pipeline/vimc/vimc.cpp > @@ -617,8 +617,7 @@ void VimcCameraData::imageBufferReady(FrameBuffer *buffer) > } > > /* Record the sensor's timestamp in the request metadata. */ > - request->metadata().set(controls::SensorTimestamp, > - buffer->metadata().timestamp); > + pipe->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); > > pipe->completeBuffer(request, buffer); > pipe->completeRequest(request); > diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp > index 049ebcba5..93c1733d6 100644 > --- a/src/libcamera/pipeline/virtual/virtual.cpp > +++ b/src/libcamera/pipeline/virtual/virtual.cpp > @@ -331,7 +331,7 @@ int PipelineHandlerVirtual::queueRequestDevice([[maybe_unused]] Camera *camera, > ASSERT(found); > } > > - request->metadata().set(controls::SensorTimestamp, timestamp); > + metadataAvailable(request, controls::SensorTimestamp, timestamp); > completeRequest(request); > > return 0; > -- > 2.49.0 >
2025. 06. 19. 15:55 keltezéssel, Jacopo Mondi írta: > On Fri, Jun 06, 2025 at 06:41:52PM +0200, Barnabás Pőcze wrote: >> From: Jacopo Mondi <jacopo.mondi@ideasonboard.com> >> >> Use the newly introduced `metadataAvailable()` function to send metadata >> items to the application. >> >> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> >> [Adjust commit message, split rpi changes.] >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> >> --- >> Original: https://patchwork.libcamera.org/patch/22232/ >> --- >> src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 5 +---- >> src/libcamera/pipeline/ipu3/ipu3.cpp | 14 +++++++------- >> src/libcamera/pipeline/mali-c55/mali-c55.cpp | 2 +- >> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 7 +++---- >> src/libcamera/pipeline/simple/simple.cpp | 5 +++-- >> src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 3 +-- >> src/libcamera/pipeline/vimc/vimc.cpp | 3 +-- >> src/libcamera/pipeline/virtual/virtual.cpp | 2 +- >> 8 files changed, 18 insertions(+), 23 deletions(-) >> >> diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp >> index 1c6da2006..f07df2d59 100644 >> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp >> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp >> @@ -1100,10 +1100,7 @@ void PipelineHandlerISI::bufferReady(FrameBuffer *buffer) >> Request *request = buffer->request(); >> >> /* Record the sensor's timestamp in the request metadata. */ >> - ControlList &metadata = request->metadata(); >> - if (!metadata.contains(controls::SensorTimestamp.id())) >> - metadata.set(controls::SensorTimestamp, >> - buffer->metadata().timestamp); >> + metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); >> >> completeBuffer(request, buffer); >> if (request->hasPendingBuffers()) >> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp >> index b4a4283f4..0f59d0727 100644 >> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp >> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp >> @@ -1250,7 +1250,7 @@ void IPU3CameraData::metadataReady(unsigned int id, const ControlList &metadata) >> return; >> >> Request *request = info->request; >> - request->metadata().merge(metadata); >> + pipe()->metadataAvailable(request, metadata); >> >> info->metadataProcessed = true; >> if (frameInfos_.tryComplete(info)) >> @@ -1277,12 +1277,14 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer) >> >> pipe()->completeBuffer(request, buffer); >> >> - request->metadata().set(controls::draft::PipelineDepth, 3); >> + pipe()->metadataAvailable(request, controls::draft::PipelineDepth, 3); >> + >> /* \todo Actually apply the scaler crop region to the ImgU. */ >> const auto &scalerCrop = request->controls().get(controls::ScalerCrop); >> if (scalerCrop) >> cropRegion_ = *scalerCrop; >> - request->metadata().set(controls::ScalerCrop, cropRegion_); >> + >> + pipe()->metadataAvailable(request, controls::ScalerCrop, cropRegion_); >> >> if (frameInfos_.tryComplete(info)) >> pipe()->completeRequest(request); >> @@ -1322,8 +1324,7 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer) >> * \todo The sensor timestamp should be better estimated by connecting >> * to the V4L2Device::frameStart signal. >> */ >> - request->metadata().set(controls::SensorTimestamp, >> - buffer->metadata().timestamp); >> + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); >> >> info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence); >> >> @@ -1417,8 +1418,7 @@ void IPU3CameraData::frameStart(uint32_t sequence) >> return; >> } >> >> - request->metadata().set(controls::draft::TestPatternMode, >> - *testPatternMode); >> + pipe()->metadataAvailable(request, controls::draft::TestPatternMode, *testPatternMode); >> } >> >> REGISTER_PIPELINE_HANDLER(PipelineHandlerIPU3, "ipu3") >> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp >> index 19980f6d2..d1a107629 100644 >> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp >> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp >> @@ -1523,7 +1523,7 @@ void PipelineHandlerMaliC55::statsProcessed(unsigned int requestId, >> MaliC55FrameInfo &frameInfo = frameInfoMap_[requestId]; >> >> frameInfo.statsDone = true; >> - frameInfo.request->metadata().merge(metadata); >> + metadataAvailable(frameInfo.request, metadata); >> >> tryComplete(&frameInfo); >> } >> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp >> index 34be87087..aa5ea8799 100644 >> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp >> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp >> @@ -433,7 +433,7 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta >> if (!info) >> return; >> >> - info->request->metadata().merge(metadata); >> + pipe()->metadataAvailable(info->request, metadata); >> info->metadataProcessed = true; >> >> pipe()->tryCompleteRequest(info); >> @@ -1476,8 +1476,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) >> * \todo The sensor timestamp should be better estimated by connecting >> * to the V4L2Device::frameStart signal. >> */ >> - request->metadata().set(controls::SensorTimestamp, >> - metadata.timestamp); >> + metadataAvailable(request, controls::SensorTimestamp, metadata.timestamp); >> >> if (isRaw_) { >> const ControlList &ctrls = >> @@ -1560,7 +1559,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) >> LOG(RkISP1, Error) << "Cannot queue buffers to dewarper: " >> << strerror(-ret); >> >> - request->metadata().set(controls::ScalerCrop, activeCrop_.value()); >> + metadataAvailable(request, controls::ScalerCrop, activeCrop_.value()); >> } >> >> void PipelineHandlerRkISP1::dewarpBufferReady(FrameBuffer *buffer) >> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp >> index 05387ca7c..937c781c6 100644 >> --- a/src/libcamera/pipeline/simple/simple.cpp >> +++ b/src/libcamera/pipeline/simple/simple.cpp >> @@ -909,7 +909,8 @@ void SimpleCameraData::imageBufferReady(FrameBuffer *buffer) >> } >> >> if (request) >> - request->metadata().set(controls::SensorTimestamp, >> + // TODO: is this correct? should it be set later? > > At what time would you suggest to set it ? What makes you think this > is the wrong place ? I believe my concern was what happens if this runs multiple times for the same request. But now I think that cannot happen, so it should be fine. > > In my understanding this is the time when a buffer is dequeued from > the video device, hence the first time we can access the timestamp > information.. > > >> + pipe->metadataAvailable(request, controls::SensorTimestamp, >> buffer->metadata().timestamp); >> >> /* >> @@ -997,7 +998,7 @@ void SimpleCameraData::metadataReady(uint32_t frame, const ControlList &metadata >> if (!info) >> return; >> >> - info->request->metadata().merge(metadata); >> + pipe()->metadataAvailable(info->request, metadata); >> info->metadataProcessed = true; >> tryCompleteRequest(info->request); >> } >> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp >> index e0036e3b5..d1bdc1c24 100644 >> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp >> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp >> @@ -883,8 +883,7 @@ void UVCCameraData::imageBufferReady(FrameBuffer *buffer) >> Request *request = buffer->request(); >> >> /* \todo Use the UVC metadata to calculate a more precise timestamp */ >> - request->metadata().set(controls::SensorTimestamp, >> - buffer->metadata().timestamp); >> + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); >> >> pipe()->completeBuffer(request, buffer); >> pipe()->completeRequest(request); >> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp >> index f8a29da41..59445627b 100644 >> --- a/src/libcamera/pipeline/vimc/vimc.cpp >> +++ b/src/libcamera/pipeline/vimc/vimc.cpp >> @@ -617,8 +617,7 @@ void VimcCameraData::imageBufferReady(FrameBuffer *buffer) >> } >> >> /* Record the sensor's timestamp in the request metadata. */ >> - request->metadata().set(controls::SensorTimestamp, >> - buffer->metadata().timestamp); >> + pipe->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); >> >> pipe->completeBuffer(request, buffer); >> pipe->completeRequest(request); >> diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp >> index 049ebcba5..93c1733d6 100644 >> --- a/src/libcamera/pipeline/virtual/virtual.cpp >> +++ b/src/libcamera/pipeline/virtual/virtual.cpp >> @@ -331,7 +331,7 @@ int PipelineHandlerVirtual::queueRequestDevice([[maybe_unused]] Camera *camera, >> ASSERT(found); >> } >> >> - request->metadata().set(controls::SensorTimestamp, timestamp); >> + metadataAvailable(request, controls::SensorTimestamp, timestamp); >> completeRequest(request); >> >> return 0; >> -- >> 2.49.0 >>
diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index 1c6da2006..f07df2d59 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -1100,10 +1100,7 @@ void PipelineHandlerISI::bufferReady(FrameBuffer *buffer) Request *request = buffer->request(); /* Record the sensor's timestamp in the request metadata. */ - ControlList &metadata = request->metadata(); - if (!metadata.contains(controls::SensorTimestamp.id())) - metadata.set(controls::SensorTimestamp, - buffer->metadata().timestamp); + metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); completeBuffer(request, buffer); if (request->hasPendingBuffers()) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index b4a4283f4..0f59d0727 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1250,7 +1250,7 @@ void IPU3CameraData::metadataReady(unsigned int id, const ControlList &metadata) return; Request *request = info->request; - request->metadata().merge(metadata); + pipe()->metadataAvailable(request, metadata); info->metadataProcessed = true; if (frameInfos_.tryComplete(info)) @@ -1277,12 +1277,14 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer) pipe()->completeBuffer(request, buffer); - request->metadata().set(controls::draft::PipelineDepth, 3); + pipe()->metadataAvailable(request, controls::draft::PipelineDepth, 3); + /* \todo Actually apply the scaler crop region to the ImgU. */ const auto &scalerCrop = request->controls().get(controls::ScalerCrop); if (scalerCrop) cropRegion_ = *scalerCrop; - request->metadata().set(controls::ScalerCrop, cropRegion_); + + pipe()->metadataAvailable(request, controls::ScalerCrop, cropRegion_); if (frameInfos_.tryComplete(info)) pipe()->completeRequest(request); @@ -1322,8 +1324,7 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer) * \todo The sensor timestamp should be better estimated by connecting * to the V4L2Device::frameStart signal. */ - request->metadata().set(controls::SensorTimestamp, - buffer->metadata().timestamp); + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence); @@ -1417,8 +1418,7 @@ void IPU3CameraData::frameStart(uint32_t sequence) return; } - request->metadata().set(controls::draft::TestPatternMode, - *testPatternMode); + pipe()->metadataAvailable(request, controls::draft::TestPatternMode, *testPatternMode); } REGISTER_PIPELINE_HANDLER(PipelineHandlerIPU3, "ipu3") diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp index 19980f6d2..d1a107629 100644 --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp @@ -1523,7 +1523,7 @@ void PipelineHandlerMaliC55::statsProcessed(unsigned int requestId, MaliC55FrameInfo &frameInfo = frameInfoMap_[requestId]; frameInfo.statsDone = true; - frameInfo.request->metadata().merge(metadata); + metadataAvailable(frameInfo.request, metadata); tryComplete(&frameInfo); } diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 34be87087..aa5ea8799 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -433,7 +433,7 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta if (!info) return; - info->request->metadata().merge(metadata); + pipe()->metadataAvailable(info->request, metadata); info->metadataProcessed = true; pipe()->tryCompleteRequest(info); @@ -1476,8 +1476,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) * \todo The sensor timestamp should be better estimated by connecting * to the V4L2Device::frameStart signal. */ - request->metadata().set(controls::SensorTimestamp, - metadata.timestamp); + metadataAvailable(request, controls::SensorTimestamp, metadata.timestamp); if (isRaw_) { const ControlList &ctrls = @@ -1560,7 +1559,7 @@ void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer) LOG(RkISP1, Error) << "Cannot queue buffers to dewarper: " << strerror(-ret); - request->metadata().set(controls::ScalerCrop, activeCrop_.value()); + metadataAvailable(request, controls::ScalerCrop, activeCrop_.value()); } void PipelineHandlerRkISP1::dewarpBufferReady(FrameBuffer *buffer) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 05387ca7c..937c781c6 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -909,7 +909,8 @@ void SimpleCameraData::imageBufferReady(FrameBuffer *buffer) } if (request) - request->metadata().set(controls::SensorTimestamp, + // TODO: is this correct? should it be set later? + pipe->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); /* @@ -997,7 +998,7 @@ void SimpleCameraData::metadataReady(uint32_t frame, const ControlList &metadata if (!info) return; - info->request->metadata().merge(metadata); + pipe()->metadataAvailable(info->request, metadata); info->metadataProcessed = true; tryCompleteRequest(info->request); } diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp index e0036e3b5..d1bdc1c24 100644 --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp @@ -883,8 +883,7 @@ void UVCCameraData::imageBufferReady(FrameBuffer *buffer) Request *request = buffer->request(); /* \todo Use the UVC metadata to calculate a more precise timestamp */ - request->metadata().set(controls::SensorTimestamp, - buffer->metadata().timestamp); + pipe()->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); pipe()->completeBuffer(request, buffer); pipe()->completeRequest(request); diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index f8a29da41..59445627b 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -617,8 +617,7 @@ void VimcCameraData::imageBufferReady(FrameBuffer *buffer) } /* Record the sensor's timestamp in the request metadata. */ - request->metadata().set(controls::SensorTimestamp, - buffer->metadata().timestamp); + pipe->metadataAvailable(request, controls::SensorTimestamp, buffer->metadata().timestamp); pipe->completeBuffer(request, buffer); pipe->completeRequest(request); diff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp index 049ebcba5..93c1733d6 100644 --- a/src/libcamera/pipeline/virtual/virtual.cpp +++ b/src/libcamera/pipeline/virtual/virtual.cpp @@ -331,7 +331,7 @@ int PipelineHandlerVirtual::queueRequestDevice([[maybe_unused]] Camera *camera, ASSERT(found); } - request->metadata().set(controls::SensorTimestamp, timestamp); + metadataAvailable(request, controls::SensorTimestamp, timestamp); completeRequest(request); return 0;