From a814205664ba277f8eb85f9f0da28d6204e218b5 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sun, 5 Sep 2021 04:05:32 +0300 Subject: 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 Reviewed-by: Jean-Michel Hautbois Reviewed-by: Kieran Bingham --- src/android/camera_device.cpp | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) (limited to 'src/android/camera_device.cpp') 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 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); -- cgit v1.2.1