From ca20503f6295a6cc25261ad5b975a73c961ae73b Mon Sep 17 00:00:00 2001 From: Eric Curtin Date: Mon, 7 Feb 2022 15:01:36 +0000 Subject: cam: kms_sink: Use the first suitable pipeline found When searching for a suitable pipeline, we mistakenly only break from the inner loop. This results in the last suitable output being selected. Pick the first one instead. Fixes: 1de0f90dd432 ("cam: kms_sink: Print display pipelineconfiguration") Signed-off-by: Eric Curtin Reviewed-by: Laurent Pinchart Reviewed-by: Kieran Bingham Signed-off-by: Laurent Pinchart --- src/cam/kms_sink.cpp | 16 +++++++++++----- src/cam/kms_sink.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/cam') diff --git a/src/cam/kms_sink.cpp b/src/cam/kms_sink.cpp index d30fba78..da579846 100644 --- a/src/cam/kms_sink.cpp +++ b/src/cam/kms_sink.cpp @@ -136,7 +136,7 @@ int KMSSink::configure(const libcamera::CameraConfiguration &config) return 0; } -int KMSSink::configurePipeline(const libcamera::PixelFormat &format) +int KMSSink::selectPipeline(const libcamera::PixelFormat &format) { /* * If the requested format has an alpha channel, also consider the X @@ -174,25 +174,31 @@ int KMSSink::configurePipeline(const libcamera::PixelFormat &format) crtc_ = crtc; plane_ = plane; format_ = format; - break; + return 0; } if (plane->supportsFormat(xFormat)) { crtc_ = crtc; plane_ = plane; format_ = xFormat; - break; + return 0; } } } } - if (!crtc_) { + return -EPIPE; +} + +int KMSSink::configurePipeline(const libcamera::PixelFormat &format) +{ + const int ret = selectPipeline(format); + if (ret) { std::cerr << "Unable to find display pipeline for format " << format.toString() << std::endl; - return -EPIPE; + return ret; } std::cout diff --git a/src/cam/kms_sink.h b/src/cam/kms_sink.h index 1e4290ad..4a0a872c 100644 --- a/src/cam/kms_sink.h +++ b/src/cam/kms_sink.h @@ -47,6 +47,7 @@ private: libcamera::Request *camRequest_; }; + int selectPipeline(const libcamera::PixelFormat &format); int configurePipeline(const libcamera::PixelFormat &format); void requestComplete(DRM::AtomicRequest *request); -- cgit v1.2.1