[libcamera-devel] [PATCH v9 08/18] libcamera: pipeline: vimc, uvcvideo: Don't rely on bufferCount

Jacopo Mondi jacopo at jmondi.org
Fri Dec 16 16:26:16 CET 2022


Hi Paul

On Fri, Dec 16, 2022 at 09:29:29PM +0900, Paul Elder via libcamera-devel wrote:
> From: Nícolas F. R. A. Prado <nfraprado at collabora.com>
>
> Instead of using bufferCount as the number of V4L2 buffer slots to
> reserve in the vimc and uvcvideo pipeline handlers, use a reasonably
> high constant: 16. Overallocating isn't a problem as buffer slots are
> cheap. Having too few, on the other hand, could degrade performance. It
> is expected that this number will be more than enough for most, if not
> all, use cases.
>
> This makes way for removing bufferCount.
>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado at collabora.com>
> Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
>
> ---

Seems reasonable

Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
  j

> Changes in v9:
> - rebased
>
> Changes in v8:
> - New
> ---
>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 5 +++--
>  src/libcamera/pipeline/vimc/vimc.cpp         | 5 +++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> index 4ce240a4..18966d01 100644
> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> @@ -97,6 +97,8 @@ private:
>  	{
>  		return static_cast<UVCCameraData *>(camera->_d());
>  	}
> +
> +	static constexpr unsigned int kUVCBufferSlotCount = 16;
>  };
>
>  UVCCameraConfiguration::UVCCameraConfiguration(UVCCameraData *data)
> @@ -239,9 +241,8 @@ int PipelineHandlerUVC::exportFrameBuffers(Camera *camera,
>  int PipelineHandlerUVC::start(Camera *camera, [[maybe_unused]] const ControlList *controls)
>  {
>  	UVCCameraData *data = cameraData(camera);
> -	unsigned int count = data->stream_.configuration().bufferCount;
>
> -	int ret = data->video_->importBuffers(count);
> +	int ret = data->video_->importBuffers(kUVCBufferSlotCount);
>  	if (ret < 0)
>  		return ret;
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index e58caf99..eaa6ebf7 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -106,6 +106,8 @@ private:
>  	{
>  		return static_cast<VimcCameraData *>(camera->_d());
>  	}
> +
> +	static constexpr unsigned int kVimcBufferSlotCount = 16;
>  };
>
>  namespace {
> @@ -334,9 +336,8 @@ int PipelineHandlerVimc::exportFrameBuffers(Camera *camera,
>  int PipelineHandlerVimc::start(Camera *camera, [[maybe_unused]] const ControlList *controls)
>  {
>  	VimcCameraData *data = cameraData(camera);
> -	unsigned int count = data->stream_.configuration().bufferCount;
>
> -	int ret = data->video_->importBuffers(count);
> +	int ret = data->video_->importBuffers(kVimcBufferSlotCount);
>  	if (ret < 0)
>  		return ret;
>
> --
> 2.35.1
>


More information about the libcamera-devel mailing list