[libcamera-devel] [PATCH v3 0/4] lc-compliance: Add test to queue more requests than hardware depth

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Apr 26 03:07:43 CEST 2021


Hi Nícolas,

Thank you for the patches.

On Wed, Apr 21, 2021 at 01:51:35PM -0300, Nícolas F. R. A. Prado wrote:
> The purpose of this series is to add a new test to lc-compliance that tests
> queuing a lot of requests at once in order to ensure that pipeline handlers are
> able to handle more requests than they have resources for (like internal buffers
> and buffers in the videodev) [1].
> 
> In order to achieve this, the FrameBufferAllocator had to be adapted in order to
> allow an arbitrary amount of buffers to be allocated. But there's also the issue
> of reporting the minimum amount of requests required by the pipeline handler,
> which was solved by creating a new QueueDepth property.
> 
> So patch 1 adds the new QueueDepth property to report the minimum amount of
> requests needed by the pipeline handler.
> 
> Patch 2 adds a count argument to allocate() so that the amount of buffers to
> allocate needs to be specified, as it is no longer assumed through bufferCount.
> 
> Patch 3 adds the test to lc-compliance.
> 
> Patch 4 removes bufferCount from the StreamConfiguration as it is no longer
> needed.
> 
> The amount of buffers to allocate in the lc-compliance test (patch 3) was
> hardcoded to 8 since more than that would cause errors when allocating.

We could probably go for less than 8, I'll comment on that in patch 3/4.

> Hirokazu,
> since you have a patch series addressing this issue on the IPU3
> pipeline [2], could you test this series? If both my and your patch series are
> working, lc-compliance should crash before applying your series but run through
> completion after applying it.

That's a perfect use of tests :-)

> Changes in v3:
> - Added patches 1 and 4 to add the QueueDepth property and remove bufferCount
> - Made the count argument required in patch 2
> - Added previously missing changes to the gstreamer and v4l2 compatibility
>   layers
> 
> Changes in v2:
> - Renamed and reworded commits and series
> - Dropped patches 2 and 3, which were hacks to test, and added patch 1 to add
>   count to FrameBufferAllocator
> - Thanks to Niklas:
>   - Created new standalone test instead of looping over the other tests
> 
> [1] https://bugs.libcamera.org/show_bug.cgi?id=24
> [2] https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019108.html
> 
> v1: https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019139.html
> v2: https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019398.html
> 
> Nícolas F. R. A. Prado (4):
>   libcamera: property: Add QueueDepth property
>   libcamera: framebuffer_allocator: Make allocate() require count
>   lc-compliance: Add test to queue more requests than hardware depth
>   libcamera: stream: Remove bufferCount
> 
>  include/libcamera/camera.h                    |  2 +-
>  include/libcamera/framebuffer_allocator.h     |  2 +-
>  include/libcamera/internal/pipeline_handler.h |  2 +-
>  include/libcamera/stream.h                    |  2 -
>  src/cam/capture.cpp                           | 10 +--
>  src/gstreamer/gstlibcameraallocator.cpp       |  4 +-
>  src/lc-compliance/simple_capture.cpp          | 83 ++++++++++++++++++-
>  src/lc-compliance/simple_capture.h            | 16 ++++
>  src/lc-compliance/single_stream.cpp           | 37 ++++++++-
>  src/libcamera/camera.cpp                      |  4 +-
>  src/libcamera/framebuffer_allocator.cpp       |  5 +-
>  src/libcamera/pipeline/ipu3/cio2.cpp          |  1 -
>  src/libcamera/pipeline/ipu3/ipu3.cpp          | 23 ++---
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 17 ++--
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      | 15 ++--
>  src/libcamera/pipeline/rkisp1/rkisp1_path.cpp |  2 -
>  src/libcamera/pipeline/rkisp1/rkisp1_path.h   |  4 +-
>  src/libcamera/pipeline/simple/converter.cpp   |  7 +-
>  src/libcamera/pipeline/simple/converter.h     |  5 +-
>  src/libcamera/pipeline/simple/simple.cpp      | 19 ++---
>  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  | 14 ++--
>  src/libcamera/pipeline/vimc/vimc.cpp          | 15 ++--
>  src/libcamera/pipeline_handler.cpp            |  1 +
>  src/libcamera/property_ids.yaml               |  5 ++
>  src/libcamera/stream.cpp                      |  9 +-
>  src/qcam/main_window.cpp                      |  4 +-
>  src/v4l2/v4l2_camera.cpp                      | 16 ++--
>  src/v4l2/v4l2_camera.h                        |  5 +-
>  src/v4l2/v4l2_camera_proxy.cpp                |  8 +-
>  test/camera/buffer_import.cpp                 | 10 ++-
>  test/camera/capture.cpp                       |  4 +-
>  test/camera/statemachine.cpp                  |  4 +-
>  test/libtest/buffer_source.cpp                |  4 +-
>  test/libtest/buffer_source.h                  |  2 +-
>  test/mapped-buffer.cpp                        |  4 +-
>  test/v4l2_videodevice/buffer_cache.cpp        |  4 +-
>  36 files changed, 246 insertions(+), 123 deletions(-)

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list