[libcamera-devel,00/13] libcamera: ipu3: Refactoring of ImgU
mbox series

Message ID 20200627030043.2088585-1-niklas.soderlund@ragnatech.se
Headers show
Series
  • libcamera: ipu3: Refactoring of ImgU
Related show

Message

Niklas Söderlund June 27, 2020, 3 a.m. UTC
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 stremas 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

I have also played a bit with qcam and it works as expected and the 
resulting normal och raw frames are generated and contains the expected 
data.

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: Align how CIO2 and ImgU are stored in CameraData
  libcamera: ipu3: imgu: Remove ImgUOutput

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

Comments

Jacopo Mondi June 27, 2020, 10:17 a.m. UTC | #1
Hi Niklas,

    I only have very small comments on the series, nice clean up !

For the whole series
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

Thanks
  j

On Sat, Jun 27, 2020 at 05:00:30AM +0200, Niklas Söderlund wrote:
> 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 stremas 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
>
> I have also played a bit with qcam and it works as expected and the
> resulting normal och raw frames are generated and contains the expected
> data.
>
> 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: Align how CIO2 and ImgU are stored in CameraData
>   libcamera: ipu3: imgu: Remove ImgUOutput
>
>  src/libcamera/pipeline/ipu3/imgu.cpp    | 351 ++++++++++++++
>  src/libcamera/pipeline/ipu3/imgu.h      |  87 ++++
>  src/libcamera/pipeline/ipu3/ipu3.cpp    | 581 ++++--------------------
>  src/libcamera/pipeline/ipu3/meson.build |   1 +
>  4 files changed, 515 insertions(+), 505 deletions(-)
>  create mode 100644 src/libcamera/pipeline/ipu3/imgu.cpp
>  create mode 100644 src/libcamera/pipeline/ipu3/imgu.h
>
> --
> 2.27.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel