libcamera: ipu3: Map buffers in IPA

Map and unmap the parameters and statistic buffers in the IPA when the
pipeline handler allocates and frees the buffers.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund 2020-12-29 00:23:56 +01:00
parent 60b5f3b8b9
commit 82549ae253

View file

@ -141,6 +141,8 @@ private:
ImgUDevice imgu1_;
MediaDevice *cio2MediaDev_;
MediaDevice *imguMediaDev_;
std::vector<IPABuffer> ipaBuffers_;
};
IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
@ -586,6 +588,27 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
if (ret < 0)
return ret;
/* Map buffers to the IPA. */
unsigned int ipaBufferId = 1;
for (const std::unique_ptr<FrameBuffer> &buffer : imgu->paramBuffers_) {
buffer->setCookie(ipaBufferId++);
ipaBuffers_.push_back({
.id = buffer->cookie(),
.planes = buffer->planes()
});
}
for (const std::unique_ptr<FrameBuffer> &buffer : imgu->statBuffers_) {
buffer->setCookie(ipaBufferId++);
ipaBuffers_.push_back({
.id = buffer->cookie(),
.planes = buffer->planes()
});
}
data->ipa_->mapBuffers(ipaBuffers_);
return 0;
}
@ -593,6 +616,13 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)
{
IPU3CameraData *data = cameraData(camera);
std::vector<unsigned int> ids;
for (IPABuffer &ipabuf : ipaBuffers_)
ids.push_back(ipabuf.id);
data->ipa_->unmapBuffers(ids);
ipaBuffers_.clear();
data->imgu_->freeBuffers();
return 0;