[libcamera-devel] [PATCH v5 01/10] libcamera: property: Add MinNumRequests property

Naushir Patuck naush at raspberrypi.com
Thu Jul 8 11:26:54 CEST 2021


Hi Nicolas,

Thank you for your patch.

On Wed, 7 Jul 2021 at 15:42, Nícolas F. R. A. Prado <nfraprado at collabora.com>
wrote:

> The MinNumRequests property reports the bare minimum number of requests
> needed in the camera pipeline for capture to be possible. It is equal to
> the number of buffers required by the driver. At this quantity, there's
> no guarantee that frames won't be dropped or that manual per-frame
> controls will apply correctly. The quantity needed for those may be
> added as separate properties in the future.
>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado at collabora.com>
> ---
>  src/libcamera/pipeline/ipu3/ipu3.cpp               | 6 ++++++
>  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 6 ++++++
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp           | 2 ++
>  src/libcamera/pipeline/simple/simple.cpp           | 2 ++
>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp       | 2 ++
>  src/libcamera/pipeline/vimc/vimc.cpp               | 3 +++
>  src/libcamera/property_ids.yaml                    | 9 +++++++++
>  7 files changed, 30 insertions(+)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp
> b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 76c3bb3d8aa9..017018c845fa 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1111,6 +1111,12 @@ int PipelineHandlerIPU3::registerCameras()
>                 /* Initialize the camera properties. */
>                 data->properties_ = cio2->sensor()->properties();
>
> +               /*
> +                * \todo Make sure this is correct even after the stream is
> +                * configured to CIO2
> +                */
> +               data->properties_.set(properties::MinNumRequests, 1);
> +
>                 ret = initControls(data.get());
>                 if (ret)
>                         continue;
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 082eb1ee1c23..f99a21de6918 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1045,6 +1045,12 @@ bool PipelineHandlerRPi::match(DeviceEnumerator
> *enumerator)
>         /* Initialize the camera properties. */
>         data->properties_ = data->sensor_->properties();
>
> +       /*
> +        * \todo Make sure this is correct after the stream is configured
> for
> +        * any of the roles
> +        */
> +       data->properties_.set(properties::MinNumRequests, 1);
> +
>

Could you elaborate a bit on the above \todo, I'm not entirely sure it is
relevant for the
Raspberry Pi pipeline handler.

Thanks,
Naush

        /*
>          * Set a default value for the ScalerCropMaximum property to show
>          * that we support its use, however, initialise it to zero because
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 00df4f0b3e6b..b5cbf2394b1c 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -24,6 +24,7 @@
>  #include <libcamera/ipa/core_ipa_interface.h>
>  #include <libcamera/ipa/rkisp1_ipa_interface.h>
>  #include <libcamera/ipa/rkisp1_ipa_proxy.h>
> +#include <libcamera/property_ids.h>
>  #include <libcamera/request.h>
>  #include <libcamera/stream.h>
>
> @@ -944,6 +945,7 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity
> *sensor)
>
>         /* Initialize the camera properties. */
>         data->properties_ = data->sensor_->properties();
> +       data->properties_.set(properties::MinNumRequests, 3);
>
>         /*
>          * \todo Read dealy values from the sensor itself or from a
> diff --git a/src/libcamera/pipeline/simple/simple.cpp
> b/src/libcamera/pipeline/simple/simple.cpp
> index b29fff9820e5..c4adea61519f 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -25,6 +25,7 @@
>
>  #include <libcamera/camera.h>
>  #include <libcamera/control_ids.h>
> +#include <libcamera/property_ids.h>
>  #include <libcamera/request.h>
>  #include <libcamera/stream.h>
>
> @@ -436,6 +437,7 @@ int SimpleCameraData::init()
>         }
>
>         properties_ = sensor_->properties();
> +       properties_.set(properties::MinNumRequests, 3);
>
>         return 0;
>  }
> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> index 0f634b8da609..0258111ad6cf 100644
> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> @@ -525,6 +525,8 @@ int UVCCameraData::init(MediaDevice *media)
>         properties_.set(properties::PixelArraySize, resolution);
>         properties_.set(properties::PixelArrayActiveAreas, {
> Rectangle(resolution) });
>
> +       properties_.set(properties::MinNumRequests, 1);
> +
>         /* Initialise the supported controls. */
>         ControlInfoMap::Map ctrls;
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp
> b/src/libcamera/pipeline/vimc/vimc.cpp
> index 12f7517fd0ae..8c3f7ccb46bd 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -21,6 +21,7 @@
>  #include <libcamera/control_ids.h>
>  #include <libcamera/controls.h>
>  #include <libcamera/formats.h>
> +#include <libcamera/property_ids.h>
>  #include <libcamera/request.h>
>  #include <libcamera/stream.h>
>
> @@ -517,6 +518,8 @@ int VimcCameraData::init()
>         /* Initialize the camera properties. */
>         properties_ = sensor_->properties();
>
> +       properties_.set(properties::MinNumRequests, 2);
> +
>         return 0;
>  }
>
> diff --git a/src/libcamera/property_ids.yaml
> b/src/libcamera/property_ids.yaml
> index 12ecbce5eed4..4efa952ee393 100644
> --- a/src/libcamera/property_ids.yaml
> +++ b/src/libcamera/property_ids.yaml
> @@ -678,6 +678,15 @@ controls:
>          \todo Turn this property into a "maximum control value" for the
>          ScalerCrop control once "dynamic" controls have been implemented.
>
> +  - MinNumRequests:
> +      type: int32_t
> +      description: |
> +        The bare minimum number of requests needed in the camera pipeline
> for
> +        capture to be possible, as required by the driver. Note that this
> +        quantity does not guarantee that frames won't be dropped or that
> manual
> +        per-frame controls will be applied properly.
> +
> +
>    #
> ----------------------------------------------------------------------------
>    # Draft properties section
>
> --
> 2.32.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210708/25e58664/attachment.htm>


More information about the libcamera-devel mailing list