[libcamera-devel,5/6] libcamera: pipeline: rkisp1: Add plumbing for IPA meta data

Message ID 20190831210220.29819-6-niklas.soderlund@ragnatech.se
State Superseded
Delegated to: Niklas Söderlund
Headers show
Series
  • libcamera: ipa: Add IPA meta data
Related show

Commit Message

Niklas Söderlund Aug. 31, 2019, 9:02 p.m. UTC
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(-)

Patch

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index ab7c595f1e3bd39f..501edc20bb43514f 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -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);