[v2,4/4] debayer_egl: Sync output buffer after processing stats
diff mbox series

Message ID 20260518201508.140849-5-robert.mader@collabora.com
State New
Headers show
Series
  • software_isp: Implement DMABuf import for input buffers
Related show

Commit Message

Robert Mader May 18, 2026, 8:15 p.m. UTC
Instead of waiting for the GPU to finish the output buffer *before*
computing stats, do so afterwards. This allows work to happen in
parallel on the GPU and CPU, potentially improving throughput and
reducing latency.

This, however, requires us to include stats computation into the
debayer benchmark data.

Signed-off-by: Robert Mader <robert.mader@collabora.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/libcamera/software_isp/debayer_egl.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Patch
diff mbox series

diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp
index e5a661d2c..9ad0c871f 100644
--- a/src/libcamera/software_isp/debayer_egl.cpp
+++ b/src/libcamera/software_isp/debayer_egl.cpp
@@ -530,8 +530,6 @@  int DebayerEGL::debayerGPU(FrameBuffer *input, std::optional<DmaSyncer> *inputBu
 	if (err != GL_NO_ERROR) {
 		LOG(eGL, Error) << "Drawing scene fail " << err;
 		return -ENODEV;
-	} else {
-		egl_.syncOutput();
 	}
 
 	return 0;
@@ -554,8 +552,6 @@  void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output
 		goto error;
 	}
 
-	bench_.finishFrame();
-
 	metadata.planes()[0].bytesused = output->planes()[0].length;
 
 	/* Calculate stats for the whole frame */
@@ -564,6 +560,9 @@  void DebayerEGL::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output
 	stats_->processFrame(frame, 0, input);
 	inputBufferDmaSyncer.reset();
 
+	egl_.syncOutput();
+	bench_.finishFrame();
+
 	outputBufferReady.emit(output);
 	inputBufferReady.emit(input);