@@ -51,6 +51,7 @@ public:
private:
void updateSensor(V4L2ControlList controls);
void queueRequestHardware(const void *cookie);
+ void metaDataReady(const void *cookie, IPAMetaData metaData);
};
class RkISP1RequestData : public RequestData
@@ -143,6 +144,8 @@ int RkISP1CameraData::initIPA()
&RkISP1CameraData::updateSensor);
ipa_->queueRequest.connect(this,
&RkISP1CameraData::queueRequestHardware);
+ ipa_->metaDataReady.connect(this,
+ &RkISP1CameraData::metaDataReady);
return 0;
}
@@ -175,6 +178,17 @@ void RkISP1CameraData::queueRequestHardware(const void *cookie)
LOG(RkISP1, Error) << "Failed to queue video";
}
+void RkISP1CameraData::metaDataReady(const void *cookie, IPAMetaData metaData)
+{
+ Request *request = reinterpret_cast<Request *>(const_cast<void *>(cookie));
+ PipelineHandlerRkISP1 *pipe =
+ static_cast<PipelineHandlerRkISP1 *>(pipe_);
+
+ pipe->processMetaData(request, metaData);
+
+ pipe->tryCompleteRequest(request);
+}
+
RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,
RkISP1CameraData *data)
: CameraConfiguration()
@@ -709,6 +723,9 @@ void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)
if (request->hasPendingBuffers())
return;
+ if (!request->metaData().ready)
+ return;
+
delete reqData;
request->data = nullptr;
@@ -734,8 +751,6 @@ void PipelineHandlerRkISP1::statReady(Buffer *buffer)
data->ipa_->updateStatistics(request, *buffer);
- /* TODO: Fetch libcamera status controls from IPA */
-
reqData->stat = nullptr;
statBuffers_.push(buffer);
Connect the pipeline handler to the IPA meta data signal. Add a check for that IPA meta data is available to the conditions for completing a request to the application. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)