summaryrefslogtreecommitdiffstats
path: root/multimedia/libcamera/patches/216-pipeline-rkisp2-honour-requested-stream-strides.patch
blob: d93629d0570db9603847a8c13b6074988d6ba684 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From 632dcf0d683f28c7b1450a0b3437123339df7879 Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Mon, 19 Oct 2026 11:57:12 +0100
Subject: [PATCH] pipeline: rkisp2: Honour requested stream strides

DMA consumers can require padding between image rows. Pass the requested
stream stride through format validation and capture configuration, and
report the resulting stride and frame size.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
 src/libcamera/pipeline/rkisp2/rkisp2.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

--- a/src/libcamera/pipeline/rkisp2/rkisp2.cpp
+++ b/src/libcamera/pipeline/rkisp2/rkisp2.cpp
@@ -664,11 +664,19 @@ CameraConfiguration::Status RkISP2Camera
 	V4L2DeviceFormat format;
 	format.fourcc = data_->video_->toV4L2PixelFormat(cfg.pixelFormat);
 	format.size = cfg.size;
+	format.planes[0].bpl = cfg.stride;
 
 	int ret = data_->mainPath_->tryFormat(&format);
 	if (ret)
 		return Invalid;
 
+	if (cfg.stride && cfg.stride != format.planes[0].bpl)
+		status = Adjusted;
+	cfg.stride = format.planes[0].bpl;
+	cfg.frameSize = 0;
+	for (unsigned int i = 0; i < format.planesCount; i++)
+		cfg.frameSize += format.planes[i].size;
+
 	cfg.bufferCount = kRkISP2StreamBufferCount;
 
 	std::transform(rawFormats.begin(), rawFormats.end(),
@@ -880,6 +888,7 @@ int PipelineHandlerRkISP2::configure(Cam
 	outputFormat.fourcc = mainPathFormat(mainPath_.get(), cfg.pixelFormat);
 	outputFormat.size = cfg.size;
 	outputFormat.colorSpace = cfg.colorSpace;
+	outputFormat.planes[0].bpl = cfg.stride;
 
 	LOG(RkISP2, Debug) << "Configuring main path with: " << outputFormat;
 	ret = mainPath_->setFormat(&outputFormat);