[libcamera-devel] [PATCH v3 1/4] libcamera: property: Add QueueDepth property
Naushir Patuck
naush at raspberrypi.com
Thu Apr 22 10:07:32 CEST 2021
Hi Nícolas,
Thank you for your work.
On Wed, 21 Apr 2021 at 17:52, Nícolas F. R. A. Prado <
nfraprado at collabora.com> wrote:
> The QueueDepth property reports the minimum amount of requests needed in
> the camera pipeline.
>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado at collabora.com>
> ---
> src/libcamera/pipeline/ipu3/ipu3.cpp | 4 ++++
> src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++++
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 2 ++
> src/libcamera/pipeline/rkisp1/rkisp1_path.h | 4 ++--
> src/libcamera/pipeline/simple/simple.cpp | 6 ++++--
> src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 2 ++
> src/libcamera/pipeline/vimc/vimc.cpp | 3 +++
> src/libcamera/property_ids.yaml | 5 +++++
> 8 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp
> b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 51446fcf5bc1..6067db2f37a3 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1049,6 +1049,10 @@ int PipelineHandlerIPU3::registerCameras()
> /* Initialize the camera properties. */
> data->properties_ = cio2->sensor()->properties();
>
> + /* TODO This can be changed to CIO2 after configuration,
> but
> + * both are 4 currently */
> + data->properties_.set(properties::QueueDepth, 4);
> +
> ret = initControls(data.get());
> if (ret)
> continue;
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 2a917455500f..8d1ade3a4352 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1035,6 +1035,10 @@ bool PipelineHandlerRPi::match(DeviceEnumerator
> *enumerator)
> /* Initialize the camera properties. */
> data->properties_ = data->sensor_->properties();
>
> + /* TODO Can be 1, 2 or 4 depending on configuration, for now use
> the max
> + * which is 4 */
> + data->properties_.set(properties::QueueDepth, 4);
> +
>
Going by the definition given in the cover letter for this patch:
> So patch 1 adds the new QueueDepth property to report the minimum amount
of
> requests needed by the pipeline handler.
This value should be set to a value of 1 for the Raspberry Pi pipeline
handler.
Regards,
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 549f4a4e61a8..7d876e9387d7 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -21,6 +21,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>
>
> @@ -940,6 +941,7 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity
> *sensor)
>
> /* Initialize the camera properties. */
> data->properties_ = data->sensor_->properties();
> + data->properties_.set(properties::QueueDepth, RKISP1_BUFFER_COUNT);
>
> /*
> * \todo Read dealy values from the sensor itself or from a
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> index 3b3e37d258d0..7540dd41ad84 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> @@ -26,6 +26,8 @@ class V4L2Subdevice;
> struct StreamConfiguration;
> struct V4L2SubdeviceFormat;
>
> +static constexpr unsigned int RKISP1_BUFFER_COUNT = 4;
> +
> class RkISP1Path
> {
> public:
> @@ -56,8 +58,6 @@ public:
> Signal<FrameBuffer *> &bufferReady() { return video_->bufferReady;
> }
>
> private:
> - static constexpr unsigned int RKISP1_BUFFER_COUNT = 4;
> -
> const char *name_;
> bool running_;
>
> diff --git a/src/libcamera/pipeline/simple/simple.cpp
> b/src/libcamera/pipeline/simple/simple.cpp
> index f6095d38e97a..6ee24f2f14e8 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -22,6 +22,7 @@
> #include <linux/media-bus-format.h>
>
> #include <libcamera/camera.h>
> +#include <libcamera/property_ids.h>
> #include <libcamera/request.h>
> #include <libcamera/stream.h>
>
> @@ -141,6 +142,8 @@ static const SimplePipelineInfo supportedDevices[] = {
>
> } /* namespace */
>
> +static constexpr unsigned int kNumInternalBuffers = 3;
> +
> class SimpleCameraData : public CameraData
> {
> public:
> @@ -238,8 +241,6 @@ protected:
> int queueRequestDevice(Camera *camera, Request *request) override;
>
> private:
> - static constexpr unsigned int kNumInternalBuffers = 3;
> -
> SimpleCameraData *cameraData(const Camera *camera)
> {
> return static_cast<SimpleCameraData *>(
> @@ -424,6 +425,7 @@ int SimpleCameraData::init()
> }
>
> properties_ = sensor_->properties();
> + properties_.set(properties::QueueDepth, kNumInternalBuffers);
>
> return 0;
> }
> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> index b6c6ade5ebaf..591f46b60d23 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::QueueDepth, 4);
> +
> /* Initialise the supported controls. */
> ControlInfoMap::Map ctrls;
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp
> b/src/libcamera/pipeline/vimc/vimc.cpp
> index 8f5f4ba30953..605b3fe89152 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -20,6 +20,7 @@
> #include <libcamera/formats.h>
> #include <libcamera/ipa/ipa_interface.h>
> #include <libcamera/ipa/ipa_module_info.h>
> +#include <libcamera/property_ids.h>
> #include <libcamera/request.h>
> #include <libcamera/stream.h>
>
> @@ -516,6 +517,8 @@ int VimcCameraData::init()
> /* Initialize the camera properties. */
> properties_ = sensor_->properties();
>
> + properties_.set(properties::QueueDepth, 4);
> +
> return 0;
> }
>
> diff --git a/src/libcamera/property_ids.yaml
> b/src/libcamera/property_ids.yaml
> index 104e9aaf4fa3..0b7d1271a26b 100644
> --- a/src/libcamera/property_ids.yaml
> +++ b/src/libcamera/property_ids.yaml
> @@ -678,6 +678,11 @@ controls:
> \todo Turn this property into a "maximum control value" for the
> ScalerCrop control once "dynamic" controls have been implemented.
>
> + - QueueDepth:
> + type: int32_t
> + description: |
> + Minimum amount of requests needed in the camera pipeline.
> +
> #
> ----------------------------------------------------------------------------
> # Draft properties section
>
> --
> 2.31.1
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210422/c3cd94bd/attachment.htm>
More information about the libcamera-devel
mailing list