[libcamera-devel] [PATCH v3 00/10] libcamera: ipu3: Allow zero-copy RAW stream

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jun 25 03:40:19 CEST 2020


Hi Niklas,

On Tue, Jun 23, 2020 at 04:09:20AM +0200, Niklas Söderlund wrote:
> Hi,
> 
> This series removes the need to copy the buffer when capturing RAW
> buffers from the IPU3 pipeline. This is made possible by allocating an
> internal queue of buffers in the pipeline handler which is used when the
> application does not provide an buffer for the RAW stream.
> 
> There is on issue with this series. If the camera is configured to
> supply the application with more then one stream and one of them is a
> RAW stream. Then the sequence number of the RAW buffers in all requests
> are set to 0 before the request completes. This is due to that if two or
> more streams are used the RAW buffer is always queued to the ImgU input
> to serve as input to the vf and/or output buffers. When the RAW buffers
> is dequeued from the ImgU input device the kernel sets the sequence
> number to zero. This should either be solved in the kernel or by 
> reworking how sequence numbers handled going out of libcamera, does it 
> make sens to have seq numbers on the buffer level ?
> 
> As the RPi pipeline handler already started using the copy approach we
> can not yet rename to role nor remove the copyFrom() helper. I aim to
> work on that once the approach taken in this series is agreed upon.

I think the approach is good. It will be a good occasion to add support
in the core for what CIO2Device::tryReturnBuffer() does in private :-)

> Niklas Söderlund (10):
>   libcamera: camera_sensor: Make mbusCodes() return a set
>   libcamera: ipu3: Fold mediaBusToFormat() into only caller
>   libcamera: ipu3: Breakout stream assignment to new function
>   libcamera: ipu3: Calculate number of buffers for ImgU
>   libcamera: ipu3: cio2: Move the CIO2Device class to separate files
>   libcamera: ipu3: cio2: Consolidate information about formats
>   libcamera: ipu3: cio2: Add function to generate configuration
>   libcamera: ipu3: cio2: Make the V4L2 devices private
>   libcamera: ipu3: cio2: Hide buffer allocation and freeing from users
>   libcamera: ipu3: Allow zero-copy RAW stream capture
> 
>  include/libcamera/internal/camera_sensor.h |   4 +-
>  include/libcamera/internal/formats.h       |   2 +-
>  src/libcamera/camera_sensor.cpp            |   1 -
>  src/libcamera/formats.cpp                  |   7 +-
>  src/libcamera/pipeline/ipu3/cio2.cpp       | 298 ++++++++++++
>  src/libcamera/pipeline/ipu3/cio2.h         |  66 +++
>  src/libcamera/pipeline/ipu3/ipu3.cpp       | 497 +++++----------------
>  src/libcamera/pipeline/ipu3/meson.build    |   1 +
>  test/camera-sensor.cpp                     |   2 +-
>  9 files changed, 475 insertions(+), 403 deletions(-)
>  create mode 100644 src/libcamera/pipeline/ipu3/cio2.cpp
>  create mode 100644 src/libcamera/pipeline/ipu3/cio2.h

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list