summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-05 04:05:32 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-09-07 19:18:34 +0300
commita814205664ba277f8eb85f9f0da28d6204e218b5 (patch)
treef5aa797bd1eb0420acd19959d87dbe5bf400e418
parent32635054bc76e2ababd8ea2177fca1f88229541a (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>
-rw-r--r--src/android/camera_device.cpp25
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);