An acquisition fence is associated to each camera3_stream_buffer_t part of a
capture request.
Streams generated by libcamera (Type::Direct) are queued to the
libcamera::Camera and their fences are waited on by the CameraWorker class.
Acquisition fences for Streams generated by post-processing have been so far
ignored and the fence was not closed, resulting in a leak that crashed the
camera service with:
FATAL FileDescriptor file_descriptor.cpp:265 Failed to dup() fd: Too many open files
Fix this by instrumenting CameraStream to handle fences in the process()
function.
This is a temporary workaround until libcamera is not instrumented with a
mechanism to handle fences internally.
v2:
- Handle ::Internal stream type and shuffle the patch order as suggested by
Hiro.
Jacopo Mondi (2):
android: Post-pone fences reset in capture result
android: Wait on fences in CameraStream::process()
src/android/camera_device.cpp | 50 ++++++++++++++++++++++++-----------
src/android/camera_stream.cpp | 48 +++++++++++++++++++++++++++++++--
src/android/camera_stream.h | 4 ++-
3 files changed, 84 insertions(+), 18 deletions(-)
--
2.32.0