[libcamera-devel,v5,12/12] pipeline: raspberrypi: Add minimal memory usage config file
diff mbox series

Message ID 20230118085953.7027-13-naush@raspberrypi.com
State Superseded
Headers show
Series
  • Raspberry Pi: Platform configuration and buffer allocation improvements
Related show

Commit Message

Naushir Patuck Jan. 18, 2023, 8:59 a.m. UTC
Add a platform configuration file that allocates the least amount of frame
buffer memory possible. This configuration does come with the following
compromises:

- Startup frame drops are disabled, so the first few frames will not have
fully converged AE/AWB/ALSC applied.

- Applications must provide ISP Output0 and Unicam Image (if a RAW stream is
configured) buffers in requests.

- Only 1 Unicam Image buffer will be allocated if a RAW stream is not
configured, causing the framerate to be effectively halved.

To use the configuration on the Raspberry Pi platform, invoke the application
with the following prepended to the command line:

LIBCAMERA_RPI_CONFIG_FILE=/usr/local/share/libcamera/pipeline/raspberrypi/minimal_mem.yaml

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
---
 .../pipeline/raspberrypi/data/meson.build     |  1 +
 .../raspberrypi/data/minimal_mem.yaml         | 29 +++++++++++++++++++
 2 files changed, 30 insertions(+)
 create mode 100644 src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml

Comments

Kieran Bingham Jan. 20, 2023, 11:25 a.m. UTC | #1
Quoting Naushir Patuck via libcamera-devel (2023-01-18 08:59:53)
> Add a platform configuration file that allocates the least amount of frame
> buffer memory possible. This configuration does come with the following
> compromises:
> 
> - Startup frame drops are disabled, so the first few frames will not have
> fully converged AE/AWB/ALSC applied.
> 
> - Applications must provide ISP Output0 and Unicam Image (if a RAW stream is
> configured) buffers in requests.

This sounds like a configuration option that should prevent configuring
streams with the OptionalStream hint set.

> 
> - Only 1 Unicam Image buffer will be allocated if a RAW stream is not
> configured, causing the framerate to be effectively halved.
> 
> To use the configuration on the Raspberry Pi platform, invoke the application
> with the following prepended to the command line:
> 
> LIBCAMERA_RPI_CONFIG_FILE=/usr/local/share/libcamera/pipeline/raspberrypi/minimal_mem.yaml
> 
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
> ---
>  .../pipeline/raspberrypi/data/meson.build     |  1 +
>  .../raspberrypi/data/minimal_mem.yaml         | 29 +++++++++++++++++++
>  2 files changed, 30 insertions(+)
>  create mode 100644 src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/data/meson.build b/src/libcamera/pipeline/raspberrypi/data/meson.build
> index 1c70433bbcbc..6aecd8ae68c8 100644
> --- a/src/libcamera/pipeline/raspberrypi/data/meson.build
> +++ b/src/libcamera/pipeline/raspberrypi/data/meson.build
> @@ -2,6 +2,7 @@
>  
>  conf_files = files([
>      'example.yaml',
> +    'minimal_mem.yaml',
>  ])
>  
>  install_data(conf_files,
> diff --git a/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml b/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml
> new file mode 100644
> index 000000000000..5cd593025140
> --- /dev/null
> +++ b/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml
> @@ -0,0 +1,29 @@
> +{
> +        "version": 1.0,
> +        "target": "bcm2835",
> +
> +        "pipeline_handler":
> +        {
> +                # The minimum number of internal buffers to be allocated for
> +                # Unicam. This value must be greater than 0, but less than or
> +                # equal to min_total_unicam_buffers.
> +                "min_unicam_buffers": 0,
> +
> +                # The minimum total (internal + external) buffer count used for
> +                # Unicam. The number of internal buffers allocated for Unicam is
> +                # given by:
> +                #
> +                # internal buffer count = max(min_unicam_buffers,
> +                #         min_total_unicam_buffers - external buffer count)
> +                "min_total_unicam_buffers": 1,
> +
> +                # Override any request from the IPA to drop a number of startup
> +                # frames.
> +                "disable_startup_frame_drops": true,
> +
> +                # Always process a pending request with the last captured sensor
> +                # frame.  Note that this might lead to avoidable frame drops
> +                # during periods of transient heavy CPU loading.
> +                "return_newest_frames": false

It seems like there will be a lot of duplciation of the documentation..

But aside from that, I think this fits the previous patches so :


Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> +        }
> +}
> -- 
> 2.25.1
>

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/raspberrypi/data/meson.build b/src/libcamera/pipeline/raspberrypi/data/meson.build
index 1c70433bbcbc..6aecd8ae68c8 100644
--- a/src/libcamera/pipeline/raspberrypi/data/meson.build
+++ b/src/libcamera/pipeline/raspberrypi/data/meson.build
@@ -2,6 +2,7 @@ 
 
 conf_files = files([
     'example.yaml',
+    'minimal_mem.yaml',
 ])
 
 install_data(conf_files,
diff --git a/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml b/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml
new file mode 100644
index 000000000000..5cd593025140
--- /dev/null
+++ b/src/libcamera/pipeline/raspberrypi/data/minimal_mem.yaml
@@ -0,0 +1,29 @@ 
+{
+        "version": 1.0,
+        "target": "bcm2835",
+
+        "pipeline_handler":
+        {
+                # The minimum number of internal buffers to be allocated for
+                # Unicam. This value must be greater than 0, but less than or
+                # equal to min_total_unicam_buffers.
+                "min_unicam_buffers": 0,
+
+                # The minimum total (internal + external) buffer count used for
+                # Unicam. The number of internal buffers allocated for Unicam is
+                # given by:
+                #
+                # internal buffer count = max(min_unicam_buffers,
+                #         min_total_unicam_buffers - external buffer count)
+                "min_total_unicam_buffers": 1,
+
+                # Override any request from the IPA to drop a number of startup
+                # frames.
+                "disable_startup_frame_drops": true,
+
+                # Always process a pending request with the last captured sensor
+                # frame.  Note that this might lead to avoidable frame drops
+                # during periods of transient heavy CPU loading.
+                "return_newest_frames": false
+        }
+}