[libcamera-devel] [PATCH 00/20] libcamera: ipu3: Rework pipe configuration
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Jul 15 00:11:44 CEST 2020
Hi Jacopo,
On Tue, Jul 14, 2020 at 12:41:52PM +0200, Jacopo Mondi wrote:
> Hello,
> quite a big update compared to v2, even if most changes happens in 3 patches
>
> The new stream size computations which happens at generateConfiguration()
> and validate() time now enforces a new rule
> - All YUV streams should be aligned to the 64 pixels in widht and 32 pixels
> in height multiple which is strictly smaller than the CIO2 output frame.
>
> This is reflected in how configurations are generated, how the CIO2 size is
> computed when no raw stream is requested, and how the YUV streams are adjusted
> to respect this margin constraint and the device required alignment.
>
> Most of this changes happens in patch [5/20] and [14/20]
>
> I also have simplified a bit the ImgU pipe parameters calculation. There is
> a huge space for improvements there probably, but I'm very cautious in touching
> this. The changelog is in the patch for the records.
I understand your concern here, so I won't push too hard, and we can
improve the code further on top.
> Also, compared to v2, the ImgU pipe gets configured only if there's at least
> one YUV stream requested, otherwise setting sizes for the IF and BDS rectangle
> without actually capturing frames from any of the ImgU output, stalls the
> ImgU which require system to be rebooted to work correctly again.
That's a lovely one :-) Could you capture this in a comment in the code
? Should we avoid starting the ImgU at all in that case ? To be very
clear, it's not something that needs to be fixed in this series.
> Validated by using all the possible stream roles combinations, and inspecting
> images which despite the horrible quality (as there's no 3A working) are
> actually there.
>
> I'm sure that poking the system with more size combinations will highlight more
> issues, but I still think this is an acceptable start.
Absolutely ! Thank you for your great work here.
> v2 -> v3:
> - Rework stream size logic to respect alignements and margins
> - Add utils::alignUp/utils::alignDown
> - Rework stream adjustments
> - Simplify a bit the ImgU pipe parameters calculation
> - Do not configure the ImgU if only RAW stream is requested
>
> Jacopo Mondi (19):
> libcamera: ipu3: Rename mbusCodesToInfo
> libcamera: utils: Add alignUp and alignDown functions
> libcamera: geometry: Add isNull() function to Rectangle class
> libcamera: ipu3: Remove streams from generateConfiguration
> libcamera: ipu3: Make sure the config is valid
> libcamera: ipu3: cio2: Report format and sizes
> libcamera: ipu3: Do not overwrite StreamConfiguration
> libcamera: ipu3: Report StreamFormats
> libcamera: ipu3: Remove initialization of Size
> libcamera: ipu3: Validate the stream combination
> libcamera: camera: Zero streams before validate()
> libcamera: ipu3: cio2: Mark sensor() as const
> libcamera: ipu3: Adjust and assign streams in validate()
> libcamera: ipu3: Remove streams from IPU3CameraConfiguration
> libcamera: ipu3: Remove camera_ from IPU3CameraConfiguration
> libcamera: ipu3: imgu: Calculate ImgU pipe configuration
> libcamera: ipu3: Validate the pipe configuration
> libcamera: ipu3: Configure ImgU with the computed parameters
> libcamera: ipu3: imgu: Rename configureInput()
>
> Laurent Pinchart (1):
> libcamera: geometry: Add helper functions to the Size class
>
> include/libcamera/geometry.h | 34 +++
> include/libcamera/internal/utils.h | 3 +
> src/libcamera/camera.cpp | 4 +-
> src/libcamera/geometry.cpp | 42 +++
> src/libcamera/pipeline/ipu3/cio2.cpp | 54 +++-
> src/libcamera/pipeline/ipu3/cio2.h | 7 +-
> src/libcamera/pipeline/ipu3/imgu. | 0
> src/libcamera/pipeline/ipu3/imgu.cpp | 387 +++++++++++++++++++++++--
> src/libcamera/pipeline/ipu3/imgu.h | 22 +-
> src/libcamera/pipeline/ipu3/ipu3.cpp | 414 +++++++++++++--------------
> src/libcamera/utils.cpp | 22 ++
> test/geometry.cpp | 35 +++
> test/utils.cpp | 18 ++
> 13 files changed, 799 insertions(+), 243 deletions(-)
> create mode 100644 src/libcamera/pipeline/ipu3/imgu.
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list