[v1,15/33] libcamera: rkisp1: Move useDewarper_ flag into RkISP1CameraData
diff mbox series

Message ID 20250930122726.1837524-16-stefan.klug@ideasonboard.com
State New
Headers show
Series
  • Full dewarper support on imx8mp
Related show

Commit Message

Stefan Klug Sept. 30, 2025, 12:26 p.m. UTC
The decision if the dewarper shall be used is not per pipeline but per
camera and per configuration (raw streams can't use it). Move the
corresponding flag into the camera data class. Rename the flag to
"usesDewarper" which is easier understand when we later add the ability
to enable/disable the dewarper on a per camera basis which will be
expressed using a "canUseDewarper" flag.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 28 ++++++++++++------------
 1 file changed, 14 insertions(+), 14 deletions(-)

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index d5790864d026..6550469842e1 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -123,6 +123,8 @@  public:
 	 */
 	MediaPipeline pipe_;
 
+	bool usesDewarper_;
+
 private:
 	void paramsComputed(unsigned int frame, unsigned int bytesused);
 	void setSensorControls(unsigned int frame,
@@ -234,7 +236,6 @@  private:
 
 	std::unique_ptr<V4L2M2MConverter> dewarper_;
 	Rectangle scalerMaxCrop_;
-	bool useDewarper_;
 
 	std::optional<Rectangle> activeCrop_;
 
@@ -285,7 +286,7 @@  RkISP1FrameInfo *RkISP1Frames::create(const RkISP1CameraData *data, Request *req
 		statBuffer = pipe_->availableStatBuffers_.front();
 		pipe_->availableStatBuffers_.pop();
 
-		if (pipe_->useDewarper_) {
+		if (data->usesDewarper_) {
 			mainPathBuffer = pipe_->availableMainPathBuffers_.front();
 			pipe_->availableMainPathBuffers_.pop();
 		}
@@ -715,8 +716,7 @@  CameraConfiguration::Status RkISP1CameraConfiguration::validate()
  */
 
 PipelineHandlerRkISP1::PipelineHandlerRkISP1(CameraManager *manager)
-	: PipelineHandler(manager, kRkISP1MaxQueuedRequests),
-	  hasSelfPath_(true), useDewarper_(false)
+	: PipelineHandler(manager, kRkISP1MaxQueuedRequests), hasSelfPath_(true)
 {
 }
 
@@ -879,7 +879,7 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 	const PixelFormat &streamFormat = config->at(0).pixelFormat;
 	const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat);
 	isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
-	useDewarper_ = dewarper_ && !isRaw_;
+	data->usesDewarper_ = dewarper_ && !isRaw_;
 
 	/* YUYV8_2X8 is required on the ISP source path pad for YUV output. */
 	if (!isRaw_)
@@ -893,7 +893,7 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 		/* imx8mp has only a single path. */
 		const auto &cfg = config->at(0);
 		Size ispCrop = format.size.boundedToAspectRatio(cfg.size);
-		if (useDewarper_)
+		if (data->usesDewarper_)
 			ispCrop = dewarper_->adjustInputSize(cfg.pixelFormat,
 							     ispCrop);
 		else
@@ -934,7 +934,7 @@  int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 			streamConfig[0] = IPAStream(cfg.pixelFormat,
 						    cfg.size);
 			/* Configure dewarp */
-			if (dewarper_ && !isRaw_) {
+			if (data->usesDewarper_) {
 				outputCfgs.push_back(const_cast<StreamConfiguration &>(cfg));
 				ret = dewarper_->configure(cfg, outputCfgs);
 				if (ret)
@@ -999,7 +999,7 @@  int PipelineHandlerRkISP1::exportFrameBuffers([[maybe_unused]] Camera *camera, S
 		 * It has mainpath and no self path. Hence, export buffers from
 		 * dewarper just for the main path stream, for now.
 		 */
-		if (useDewarper_)
+		if (data->usesDewarper_)
 			return dewarper_->exportBuffers(&data->mainPathStream_, count, buffers);
 		else
 			return mainPath_.exportBuffers(count, buffers);
@@ -1033,7 +1033,7 @@  int PipelineHandlerRkISP1::allocateBuffers(Camera *camera)
 	}
 
 	/* If the dewarper is being used, allocate internal buffers for ISP. */
-	if (useDewarper_) {
+	if (data->usesDewarper_) {
 		ret = mainPath_.exportBuffers(kRkISP1MinBufferCount, &mainPathBuffers_);
 		if (ret < 0)
 			return ret;
@@ -1158,7 +1158,7 @@  int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlL
 		}
 		actions += [&]() { stat_->streamOff(); };
 
-		if (useDewarper_) {
+		if (data->usesDewarper_) {
 			ret = dewarper_->start();
 			if (ret) {
 				LOG(RkISP1, Error) << "Failed to start dewarper";
@@ -1215,7 +1215,7 @@  void PipelineHandlerRkISP1::stopDevice(Camera *camera)
 			LOG(RkISP1, Warning)
 				<< "Failed to stop parameters for " << camera->id();
 
-		if (useDewarper_)
+		if (data->usesDewarper_)
 			dewarper_->stop();
 	}
 
@@ -1311,7 +1311,7 @@  int PipelineHandlerRkISP1::updateControls(RkISP1CameraData *data)
 {
 	ControlInfoMap::Map controls;
 
-	if (dewarper_) {
+	if (data->usesDewarper_) {
 		std::pair<Rectangle, Rectangle> cropLimits;
 		if (dewarper_->isConfigured(&data->mainPathStream_))
 			cropLimits = dewarper_->inputCropBounds(&data->mainPathStream_);
@@ -1479,7 +1479,7 @@  bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)
 				this, &PipelineHandlerRkISP1::dewarpBufferReady);
 
 			LOG(RkISP1, Info)
-				<< "Using DW100 dewarper " << dewarper_->deviceNode();
+				<< "Found DW100 dewarper " << dewarper_->deviceNode();
 		} else {
 			LOG(RkISP1, Warning)
 				<< "Found DW100 dewarper " << dewarper_->deviceNode()
@@ -1584,7 +1584,7 @@  void PipelineHandlerRkISP1::imageBufferReady(FrameBuffer *buffer)
 			info->metadataProcessed = true;
 	}
 
-	if (!useDewarper_) {
+	if (!data->usesDewarper_) {
 		completeBuffer(request, buffer);
 		tryCompleteRequest(info);