mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-25 17:45:06 +03:00
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:
parent
60b5f3b8b9
commit
82549ae253
1 changed files with 30 additions and 0 deletions
|
@ -141,6 +141,8 @@ private:
|
||||||
ImgUDevice imgu1_;
|
ImgUDevice imgu1_;
|
||||||
MediaDevice *cio2MediaDev_;
|
MediaDevice *cio2MediaDev_;
|
||||||
MediaDevice *imguMediaDev_;
|
MediaDevice *imguMediaDev_;
|
||||||
|
|
||||||
|
std::vector<IPABuffer> ipaBuffers_;
|
||||||
};
|
};
|
||||||
|
|
||||||
IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
|
IPU3CameraConfiguration::IPU3CameraConfiguration(IPU3CameraData *data)
|
||||||
|
@ -586,6 +588,27 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -593,6 +616,13 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)
|
||||||
{
|
{
|
||||||
IPU3CameraData *data = cameraData(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();
|
data->imgu_->freeBuffers();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue