summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattijs Korpershoek <mkorpershoek@baylibre.com>2023-05-29 15:30:17 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2023-05-30 18:29:08 +0300
commit1450e09a0839d6ffa90abeede0bb1c959167eaab (patch)
treed7e033d5b3842db8ce7870791cd3ea0ca4a3550c
parent76e1cb9f7176b4e7a935295d4e633ee24a0fef67 (diff)
android: mm: generic: use GRALLOC_HARDWARE_MODULE_ID
PlatformFrameBufferAllocator is an abstraction over gralloc. Right now hardwareModule_ points towards a CAMERA_HARDWARE_MODULE_ID. When gralloc_open() is called we observe: libcamera: DEBUG HAL camera3_hal.cpp:75 Open camera gpu0 libcamera: ERROR Camera camera.cpp:524 Camera in Configured state trying acquire() requiring state Available 01-23 14:14:04.742 370 416 E libcamera: FATAL HAL generic_frame_buffer_allocator.cpp:105 gralloc_open() failed: -87 Which is wrong, gralloc_open() is attempting to re-open the camera HAL, instead of the gralloc HAL. Point to a GRALLOC_HARDWARE_MODULE_ID instead so that we can request buffers from gralloc in android. Note: this adds new dependencies on android's libhardware [1] and on libdl. [1] https://android.googlesource.com/platform/hardware/libhardware Fixes: c58662c5770e ("android: Introduce PlatformFrameBufferAllocator") Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/android/mm/generic_frame_buffer_allocator.cpp7
-rw-r--r--src/android/mm/meson.build4
2 files changed, 9 insertions, 2 deletions
diff --git a/src/android/mm/generic_frame_buffer_allocator.cpp b/src/android/mm/generic_frame_buffer_allocator.cpp
index 3750e1bf..7ecef2c6 100644
--- a/src/android/mm/generic_frame_buffer_allocator.cpp
+++ b/src/android/mm/generic_frame_buffer_allocator.cpp
@@ -5,6 +5,7 @@
* generic_camera_buffer.cpp - Allocate FrameBuffer using gralloc API
*/
+#include <dlfcn.h>
#include <memory>
#include <vector>
@@ -72,9 +73,10 @@ class PlatformFrameBufferAllocator::Private : public Extensible::Private
public:
Private(CameraDevice *const cameraDevice)
: cameraDevice_(cameraDevice),
- hardwareModule_(cameraDevice->camera3Device()->common.module),
+ hardwareModule_(nullptr),
allocDevice_(nullptr)
{
+ hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &hardwareModule_);
ASSERT(hardwareModule_);
}
@@ -85,7 +87,7 @@ public:
private:
const CameraDevice *const cameraDevice_;
- struct hw_module_t *const hardwareModule_;
+ const struct hw_module_t *hardwareModule_;
struct alloc_device_t *allocDevice_;
};
@@ -93,6 +95,7 @@ PlatformFrameBufferAllocator::Private::~Private()
{
if (allocDevice_)
gralloc_close(allocDevice_);
+ dlclose(hardwareModule_->dso);
}
std::unique_ptr<HALFrameBuffer>
diff --git a/src/android/mm/meson.build b/src/android/mm/meson.build
index d40a3b0b..85f12f91 100644
--- a/src/android/mm/meson.build
+++ b/src/android/mm/meson.build
@@ -4,6 +4,10 @@ platform = get_option('android_platform')
if platform == 'generic'
android_hal_sources += files(['generic_camera_buffer.cpp',
'generic_frame_buffer_allocator.cpp'])
+ android_deps += [
+ libdl,
+ dependency('libhardware'),
+ ]
elif platform == 'cros'
android_hal_sources += files(['cros_camera_buffer.cpp',
'cros_frame_buffer_allocator.cpp'])