diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-05 04:05:32 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-07 19:18:34 +0300 |
commit | a814205664ba277f8eb85f9f0da28d6204e218b5 (patch) | |
tree | f5aa797bd1eb0420acd19959d87dbe5bf400e418 /src/android | |
parent | 32635054bc76e2ababd8ea2177fca1f88229541a (diff) |
android: camera_device: Don't assume all planes use the same fd
Now that libcamera correctly supports frame buffers with different
dmabuf for each plane, remove the assumption that a single dmabuf is
used.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/android')
-rw-r--r-- | src/android/camera_device.cpp | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index d782067e..ab31bdda 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -749,25 +749,6 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer PixelFormat pixelFormat, const Size &size) { - FileDescriptor fd; - /* - * This assumes all the planes are in the same dmabuf. - * - * \todo Verify that this assumption holds, fstat() can be used to check - * if two fds refer to the same dmabuf. - */ - for (int i = 0; i < camera3buffer->numFds; i++) { - if (camera3buffer->data[i] != -1) { - fd = FileDescriptor(camera3buffer->data[i]); - break; - } - } - - if (!fd.isValid()) { - LOG(HAL, Fatal) << "No valid fd"; - return nullptr; - } - CameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ); if (!buf.isValid()) { LOG(HAL, Fatal) << "Failed to create CameraBuffer"; @@ -776,6 +757,12 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer std::vector<FrameBuffer::Plane> planes(buf.numPlanes()); for (size_t i = 0; i < buf.numPlanes(); ++i) { + FileDescriptor fd{ camera3buffer->data[i] }; + if (!fd.isValid()) { + LOG(HAL, Fatal) << "No valid fd"; + return nullptr; + } + planes[i].fd = fd; planes[i].offset = buf.offset(i); planes[i].length = buf.size(i); |