[libcamera-devel] [PATCH v5 00/19] libcamera: ipu3: Add ImgU support

Jacopo Mondi jacopo at jmondi.org
Tue Mar 26 09:38:43 CET 2019


Hello,
   patch count reduced a bit, from the 31 of v4+multiple-stream to this
19 for v5 of ImgU support series only.

Quite some changes compared to v4 mostly suggested by Laurent during review:
- Made CIO2Device and ImgUDevice classes and moved most of the code in class
  methods. The pipeline handler code now mostly interacts with a 'cio2' and
  an 'imgu' objects, and call methods on them to perform format configuration,
  memory allocation and start/stop of video devices.
- Removed buffer queueing from viewfinder and stat: the nodes need to be linked
  and configured but buffers might not be queued there.
- Profiled buffer sharing between CIO2 and ImgU input: requests for output
  buffers can be queued asynchronously without stalling the pipeline
- Cache camera sizes and format at camera creation time
- Add a few patches for geometry and v4l2_subdevice, to generalize helpers
  methods previously implemented for IPU3 pipeline only

Two points remain to be clarified:
- It is not yet clear to me how to calculate the sizes in the capture pipeline
  based on the requested output resolutions. Upstream pointed us to an XML
  file with all sizes hardcoded, which is an unacceptable solution as sizes
  have to be calculated dynamically based on requested stream configurations.
  -> upstream will provide a programmatic way to do so
- When operating on one of the two ImgU pipes, if the other one is still linked
  from a previous capture operation, the whole ImgU unit stall.
  Please see 19/19 I try to explain the issue in a lengthy comment.
  -> to be notified to upstream

I will send multiple stream support separately, to ease integration of ImgU
support first.

Thanks
   j

Jacopo Mondi (19):
  libcamera: formats: Add toString() methods
  libcamera: formats: Define FormatEnum type
  libcamera: geometry: Add 0-initialized SizeRange constructor
  libcamera: geometry: Add toString to Rectangle
  libcamera: v4l2_subdevice: Rename deviceName() method
  libcamera: v4l2_device: Create device from entity name
  libcamera: v4l2_subdevice:  Create device from entity name
  libcamera: ipu3: Cache the camera sizes
  libcamera: ipu3: Set stream configuration from sensor
  libcamera: ipu3: Create CIO2Device class
  libcamera: ipu3: Create ImgUDevice class
  libcamera: ipu3: Apply image format to the pipeline
  libcamera: ipu3: Implement memory handling
  libcamera: ipu3: Implement camera start/stop
  libcamera: ipu3: Queue requests to ImgU
  libcamera: ipu3: Connect CIO2 and ImgU bufferReady signals
  libcamera: ipu3: Use NV12 as default image format
  libcamera: ipu3: Limit resolution to 2560x1920
  libcamera: ipu3: Enable ImgU media links

 src/libcamera/formats.cpp              |   27 +
 src/libcamera/geometry.cpp             |   27 +-
 src/libcamera/include/formats.h        |   22 +
 src/libcamera/include/geometry.h       |   13 +-
 src/libcamera/include/v4l2_device.h    |    6 +
 src/libcamera/include/v4l2_subdevice.h |   15 +-
 src/libcamera/meson.build              |    1 +
 src/libcamera/pipeline/ipu3/ipu3.cpp   | 1183 ++++++++++++++++++++----
 src/libcamera/v4l2_device.cpp          |   40 +
 src/libcamera/v4l2_subdevice.cpp       |   49 +-
 test/v4l2_subdevice/list_formats.cpp   |    6 +-
 11 files changed, 1203 insertions(+), 186 deletions(-)
 create mode 100644 src/libcamera/formats.cpp
 create mode 100644 src/libcamera/include/formats.h

--
2.21.0



More information about the libcamera-devel mailing list