ipa: Switch to FrameBuffer interface

Switch the IPA interfaces and implementations to use the Framebuffer
interface.

- The IPA interface is switched to use the simpler FrameBuffer::Plane
  container when carrying dmabuf descriptions (fd and length) over the
  pipeline/IPA boundary.

- The RkISP1 IPA implementation takes advantage of the new simpler and
  safer (better control over file descriptors) FrameBuffer interface.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund 2019-11-25 22:14:40 +01:00
parent de9243bdc1
commit 007517618c
7 changed files with 76 additions and 43 deletions

View file

@ -144,17 +144,14 @@ void IPAInterfaceWrapper::map_buffers(struct ipa_context *_ctx,
for (unsigned int i = 0; i < num_buffers; ++i) {
const struct ipa_buffer &_buffer = _buffers[i];
IPABuffer &buffer = buffers[i];
std::vector<Plane> &planes = buffer.memory.planes();
std::vector<FrameBuffer::Plane> &planes = buffer.planes;
buffer.id = _buffer.id;
planes.resize(_buffer.num_planes);
for (unsigned int j = 0; j < _buffer.num_planes; ++j) {
if (_buffer.planes[j].dmabuf != -1)
planes[j].setDmabuf(_buffer.planes[j].dmabuf,
_buffer.planes[j].length);
/** \todo Create a Dmabuf class to implement RAII. */
::close(_buffer.planes[j].dmabuf);
planes[j].fd = FileDescriptor(_buffer.planes[j].dmabuf);
planes[j].length = _buffer.planes[j].length;
}
}