[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