[libcamera-devel] [PATCH v2 00/13] libcamera: ipu3: Refactoring of ImgU

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Jun 28 02:15:19 CEST 2020


Hi,

This series do some cleanup of the IPU3 pipeline. It removes dead or
almost dead code, replacing it with something more coherent to what is
done elsewhere in the pipeline. It breaks out the ImgU to a separate cpp
and h file.

It reworks a bit how the streams are identified and handled inside the
pipeline. When the pipeline was first developed only the output and
viewfinder streams where available, now we have a RAW stream in addition
to this. Some of the abstraction around streams and which hardware
resource they are backed by made sens in the earlier context but not so
much once RAW is added to the mix. The biggest difference in this rework
is that the ImgUDevice gets explicit functions to configure each of its
sink instead of having a generic one which depends which pointer is
passed to it. This makes reading code where RAW and ImgU streams are
mixed much nicer IMHO.

Lastly some assumptions that buffers must be allocated at video nodes
that are not involved in the capture session are being challenged. This
was true a year ago but not any more it seems. Chancing this simplifies
the driver enormously and saves on memory that otherwise would be
wasted. I have really tried to force the end result to failed by
resetting the hardware between each test so that no video node
configuration from a previous sessions saves the day.

I have for both sensors reset the hardware and then tested the following
capture combinations successfully. After the first capture session for
each one in the list that was done after a power cycle all the other
captures where tried in a semi random order and always succeeded.

  cam -c 1 -s role=viewfinder -C
  cam -c 1 -s role=still  -C
  cam -c 1 -s role=still -s role=viewfinder -C
  cam -c 1 -s role=still -s role=viewfinder -s role=stillraw -C
  cam -c 1 -s role=stillraw -C

Niklas Söderlund (13):
  libcamera: ipu3: Remove unused name_ filed from IPU3Stream
  libcamera: ipu3: Import instead of allocate statistic buffers
  libcamera: ipu3: Always import buffers for ImgU sinks
  libcamera: ipu3: Remove usage of IPU3CameraData from ImgUDevice
  libcamera: ipu3: imgu: Move the ImgUDevice class to separate files
  libcamera: ipu3: imgu: Do not cache index
  libcamera: ipu3: imgu: Mark things that are internal as private
  libcamera: ipu3: imgu: Use specific functions to configure each sink
  libcamera: ipu3: Do not duplicate data in IPU3Stream
  libcamera: ipu3: Remove the active flag from IPU3Stream
  libcamera: ipu3: Remove IPU3Stream
  libcamera: ipu3: imgu: Remove ImgUOutput
  libcamera: ipu3: imgu: Use unique_ptr for video and subdevices

 src/libcamera/pipeline/ipu3/imgu.cpp    | 353 +++++++++++++++
 src/libcamera/pipeline/ipu3/imgu.h      |  87 ++++
 src/libcamera/pipeline/ipu3/ipu3.cpp    | 548 +++---------------------
 src/libcamera/pipeline/ipu3/meson.build |   1 +
 4 files changed, 505 insertions(+), 484 deletions(-)
 create mode 100644 src/libcamera/pipeline/ipu3/imgu.cpp
 create mode 100644 src/libcamera/pipeline/ipu3/imgu.h

-- 
2.27.0



More information about the libcamera-devel mailing list