[libcamera-devel] [PATCH v2 03/10] pipeline: raspberrypi: Split out ISP Output0 buffer allocation
Naushir Patuck
naush at raspberrypi.com
Tue Nov 29 14:45:27 CET 2022
Add a new config parameter numOutput0Buffers specifying the number of internally
allocated ISP Output0 buffers. This parameter defaults to 1.
Split out the buffer allocation logic so that the buffer count for ISP Output0
can be different from the ISP Output1 and Statistics streams.
Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
---
.../pipeline/raspberrypi/raspberrypi.cpp | 21 +++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index 4486d31ea78d..f2b695af2399 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -305,6 +305,11 @@ public:
* the Unicam Image steram.
*/
unsigned int minTotalUnicamBuffers;
+ /*
+ * The number of internal buffers allocated for the ISP Output0
+ * stream.
+ */
+ unsigned int numOutput0Buffers;
};
Config config_;
@@ -1418,6 +1423,7 @@ int PipelineHandlerRPi::configurePipelineHandler(RPiCameraData *data)
config = {
.minUnicamBuffers = 2,
.minTotalUnicamBuffers = 4,
+ .numOutput0Buffers = 1,
};
return 0;
@@ -1502,12 +1508,19 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)
* so allocate the minimum required to avoid frame drops.
*/
numBuffers = minBuffers;
- } else {
+ } else if (stream == &data->isp_[Isp::Output0]) {
/*
* Since the ISP runs synchronous with the IPA and requests,
- * we only ever need one set of internal buffers. Any buffers
- * the application wants to hold onto will already be exported
- * through PipelineHandlerRPi::exportFrameBuffers().
+ * we only ever need a maximum of one internal buffer. Any
+ * buffers the application wants to hold onto will already
+ * be exported through PipelineHandlerRPi::exportFrameBuffers().
+ */
+ numBuffers = std::min(1u, data->config_.numOutput0Buffers);
+ } else {
+ /*
+ * Same reasoning as above, we only ever need a maximum
+ * of one internal buffer for Output1 (required for colour
+ * denoise) and ISP statistics.
*/
numBuffers = 1;
}
--
2.25.1
More information about the libcamera-devel
mailing list