[PATCH] pipeline: simple: Consider output sizes when choosing pipe config
Milan Zamazal
mzamazal at redhat.com
Mon Oct 14 10:54:43 CEST 2024
Hi Robert,
thank you for the patch.
Robert Mader <robert.mader at collabora.com> writes:
> In order to avoid having to adjust the size further down below which
> again can break user assumptions. Notably, without this the capture size
> of 1920x1080 gets adjusted to 1912x1080 when used with the swISP using a
> bayer pattern width of 4, breaking users like Gstreamer down the line.
>
> Closes https://bugs.libcamera.org/show_bug.cgi?id=236
>
> Signed-off-by: Robert Mader <robert.mader at collabora.com>
>
> ---
>
> I'm not really sure if this is the correct approach, but sending it out
> already for feedback. So far this gives me promissing results on tested
> devices.
> ---
> src/libcamera/pipeline/simple/simple.cpp | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 3ddce71d..2d185b90 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -1048,7 +1048,8 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()
> const Size &size = pipeConfig->captureSize;
>
> if (size.width >= maxStreamSize.width &&
> - size.height >= maxStreamSize.height) {
> + size.height >= maxStreamSize.height &&
> + pipeConfig->outputSizes.contains(maxStreamSize)) {
Some more explanation is needed. The original code simply selects the
smallest size that can cover the output. Now with this change, what if
`size' is sufficiently high but outputSizes doesn't contain exactly
maxStreamSize but it contains some larger value? And what happens if
software ISP is not enabled for the pipeline?
> if (!pipeConfig_ || size < pipeConfig_->captureSize)
> pipeConfig_ = pipeConfig;
> }
More information about the libcamera-devel
mailing list