[libcamera-devel] [PATCH LIBCAMERA v2] libcamera: rkisp1: Use parametered constructor instead of default

Kaaira Gupta kgupta at es.iitr.ac.in
Sat Mar 21 19:32:46 CET 2020


Use of default constructor StreamConfiguration() in deprecated, hence
make it private. Make Stream class a friend of StreamConfiguration as it
uses the default constructor.

Replace default constructor StreamConfiguration() by it's parametrized
counterpart by using StreamFormats in generateConfiguration() in rkisp1

Also, use erase(), instead of replace() in validate() to prevent it from
creating a new instance with empty constructor.

Signed-off-by: Kaaira Gupta <kgupta at es.iitr.ac.in>
---
Changes since v1:
	- replace resize() by erase() in validate() to prevent it from
creating a new instance with empty constructor.

WIP:
        - It fails to build as other pipelines still use default
          constructor.

 include/libcamera/stream.h               |  4 ++-
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 39 ++++++++++++++++--------
 src/libcamera/stream.cpp                 |  9 ------
 3 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h
index b1441f8..c19aed6 100644
--- a/include/libcamera/stream.h
+++ b/include/libcamera/stream.h
@@ -37,7 +37,6 @@ private:
 };
 
 struct StreamConfiguration {
-	StreamConfiguration();
 	StreamConfiguration(const StreamFormats &formats);
 
 	PixelFormat pixelFormat;
@@ -52,8 +51,11 @@ struct StreamConfiguration {
 	std::string toString() const;
 
 private:
+	StreamConfiguration();
 	Stream *stream_;
 	StreamFormats formats_;
+
+	friend class Stream;
 };
 
 enum StreamRole {
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 2f909ce..8e8414e 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -218,6 +218,21 @@ private:
 	Camera *activeCamera_;
 };
 
+namespace {
+
+static const std::array<PixelFormat, 8> formats{
+	PixelFormat(DRM_FORMAT_YUYV),
+	PixelFormat(DRM_FORMAT_YVYU),
+	PixelFormat(DRM_FORMAT_VYUY),
+	PixelFormat(DRM_FORMAT_NV16),
+	PixelFormat(DRM_FORMAT_NV61),
+	PixelFormat(DRM_FORMAT_NV21),
+	PixelFormat(DRM_FORMAT_NV12),
+	/* \todo Add support for 8-bit greyscale to DRM formats */
+};
+
+} /* namespace */
+
 RkISP1Frames::RkISP1Frames(PipelineHandler *pipe)
 	: pipe_(dynamic_cast<PipelineHandlerRkISP1 *>(pipe))
 {
@@ -430,17 +445,6 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,
 
 CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 {
-	static const std::array<PixelFormat, 8> formats{
-		PixelFormat(DRM_FORMAT_YUYV),
-		PixelFormat(DRM_FORMAT_YVYU),
-		PixelFormat(DRM_FORMAT_VYUY),
-		PixelFormat(DRM_FORMAT_NV16),
-		PixelFormat(DRM_FORMAT_NV61),
-		PixelFormat(DRM_FORMAT_NV21),
-		PixelFormat(DRM_FORMAT_NV12),
-		/* \todo Add support for 8-bit greyscale to DRM formats */
-	};
-
 	const CameraSensor *sensor = data_->sensor_;
 	Status status = Valid;
 
@@ -449,7 +453,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
 
 	/* Cap the number of entries to the available streams. */
 	if (config_.size() > 1) {
-		config_.resize(1);
+		config_.erase(config_.begin() + 1, config_.end() - 1);
 		status = Adjusted;
 	}
 
@@ -537,7 +541,16 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera
 	if (roles.empty())
 		return config;
 
-	StreamConfiguration cfg{};
+	std::map<PixelFormat, std::vector<SizeRange>> pixelformats;
+
+	for (PixelFormat pixelformat : formats) {
+		std::vector<SizeRange> sizes{
+			SizeRange{ { 32, 16 }, { 4416, 3312 } }
+		};
+		pixelformats[pixelformat] = sizes;
+	}
+	StreamFormats format(pixelformats);
+	StreamConfiguration cfg(format);
 	cfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);
 	cfg.size = data->sensor_->resolution();
 
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index ea3d214..96b3dc5 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -274,15 +274,6 @@ SizeRange StreamFormats::range(const PixelFormat &pixelformat) const
  * configured for a single video stream.
  */
 
-/**
- * \todo This method is deprecated and should be removed once all pipeline
- * handlers provied StreamFormats.
- */
-StreamConfiguration::StreamConfiguration()
-	: pixelFormat(0), stream_(nullptr)
-{
-}
-
 /**
  * \brief Construct a configuration with stream formats
  */
-- 
2.17.1



More information about the libcamera-devel mailing list