[libcamera-devel] [PATCH v2 03/10] pipeline: raspberrypi: Split out ISP Output0 buffer allocation
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Dec 2 13:19:24 CET 2022
Hi Naush,
Thank you for the patch.
On Tue, Nov 29, 2022 at 01:45:27PM +0000, Naushir Patuck via libcamera-devel wrote:
> 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.
I'd comment here that the value can only be 0 or 1.
> + */
> + 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);
Is it OK to call Stream::prepareBuffers() below if numBuffers is 0 ?
> + } 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;
> }
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list