[libcamera-devel] [PATCH v3 03/22] libcamera: pipeline: rkisp1: Breakout mainpath size and format constraints

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Sep 25 03:41:48 CEST 2020


Breakout the mainpath size and format constrains as it will be used in
more places then just validate(). While at it use the new helpers to
validate Size.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
* Changes since v2
- Reduce indentation level of namespace { }.
- Remove space before { in array declaration.

* Changes since v1
- Use list initializers
- Use constexpr instead of static const
- Define constants in anonymoys namespace
---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 34 +++++++++++++-----------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 77a48106ec68cb7b..a5b6bb07e4f8dee2 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -37,6 +37,21 @@ namespace libcamera {
 
 LOG_DEFINE_CATEGORY(RkISP1)
 
+namespace {
+constexpr Size RKISP1_RSZ_MP_SRC_MIN{ 32, 16 };
+constexpr Size RKISP1_RSZ_MP_SRC_MAX{ 4416, 3312 };
+constexpr std::array<PixelFormat, 7> RKISP1_RSZ_MP_FORMATS{
+	formats::YUYV,
+	formats::YVYU,
+	formats::VYUY,
+	formats::NV16,
+	formats::NV61,
+	formats::NV21,
+	formats::NV12,
+	/* \todo Add support for 8-bit greyscale to DRM formats */
+};
+} /* namespace */
+
 class PipelineHandlerRkISP1;
 class RkISP1ActionQueueBuffers;
 
@@ -456,17 +471,6 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,
 
 CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 {
-	static const std::array<PixelFormat, 7> formats{
-		formats::YUYV,
-		formats::YVYU,
-		formats::VYUY,
-		formats::NV16,
-		formats::NV61,
-		formats::NV21,
-		formats::NV12,
-		/* \todo Add support for 8-bit greyscale to DRM formats */
-	};
-
 	const CameraSensor *sensor = data_->sensor_;
 	Status status = Valid;
 
@@ -482,8 +486,8 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 	StreamConfiguration &cfg = config_[0];
 
 	/* Adjust the pixel format. */
-	if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) ==
-	    formats.end()) {
+	if (std::find(RKISP1_RSZ_MP_FORMATS.begin(), RKISP1_RSZ_MP_FORMATS.end(),
+		      cfg.pixelFormat) == RKISP1_RSZ_MP_FORMATS.end()) {
 		LOG(RkISP1, Debug) << "Adjusting format to NV12";
 		cfg.pixelFormat = formats::NV12,
 		status = Adjusted;
@@ -520,8 +524,8 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 				/ sensorFormat_.size.width;
 	}
 
-	cfg.size.width = std::max(32U, std::min(4416U, cfg.size.width));
-	cfg.size.height = std::max(16U, std::min(3312U, cfg.size.height));
+	cfg.size.boundTo(RKISP1_RSZ_MP_SRC_MAX);
+	cfg.size.expandTo(RKISP1_RSZ_MP_SRC_MIN);
 
 	if (cfg.size != size) {
 		LOG(RkISP1, Debug)
-- 
2.28.0



More information about the libcamera-devel mailing list