android: Wait on fences in CameraStream::process()

Acquire fences for streams of type Mapped generated by
post-processing are not correctly handled and are currently
ignored by the camera HAL.

Fix this by adding CameraStream::waitFence(), executed before
starting the post-processing in CameraStream::process().

The change applies to all streams generated by post-processing (Mapped
and Internal) but currently acquire fences of Internal streams are
handled by the camera worker. Postpone that to post-processing time by
passing -1 to the Worker for Internal streams.

Also correct the release_fence handling for failed captures, as the
framework requires the release fences to be set to the acquire fence
value if the acquire fence has not been waited on.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Tested-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Jacopo Mondi
2021-09-24 17:59:20 +02:00
parent c8c1d07cea
commit 2eca16b674
3 changed files with 85 additions and 8 deletions
+3 -1
View File
@@ -119,13 +119,15 @@ public:
int configure();
int process(const libcamera::FrameBuffer &source,
buffer_handle_t camera3Dest,
camera3_stream_buffer_t &camera3Buffer,
const CameraMetadata &requestMetadata,
CameraMetadata *resultMetadata);
libcamera::FrameBuffer *getBuffer();
void putBuffer(libcamera::FrameBuffer *buffer);
private:
int waitFence(int fence);
CameraDevice *const cameraDevice_;
const libcamera::CameraConfiguration *config_;
const Type type_;