summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-03-21 18:20:01 +0100
committerJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-06-06 18:59:25 +0200
commitc6124d757cac2661108a806edc9b0a9b72b1abd3 (patch)
tree95f5c2a06b0276a107a20effea9ecf26dfef29cd
parentfab47108e1e26d84d2c4afd3876f158b3a4c4f3f (diff)
libcamera: rkisp1: Generate config using main path
The generateConfiguration() implementation in the Rockchip RkISP1 pipeline handler uses by default the self path (if available) for the Viewfinder and VideoRecording StreamRoles. The validate() implementation, at the contrary, prefers using the main path, when available, for all streams. As the self-path is limited in output resolution to 1920x1920, generating a configuration using the self path limits the maximum stream size to 1920x1920, while higher resolutions can be obtained by using the main path. Align the generateConfiguration() implementation to the validate() one by using the main path by default if available. Bug: https://bugs.libcamera.org/show_bug.cgi?id=180 Reported-by: libcamera@luigi311.com Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 8a30fe06..78c4a6dd 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -630,23 +630,18 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,
* first stream and use it for all streams.
*/
std::optional<ColorSpace> colorSpace;
-
bool mainPathAvailable = true;
- bool selfPathAvailable = data->selfPath_;
for (const StreamRole role : roles) {
- bool useMainPath;
switch (role) {
case StreamRole::StillCapture:
- useMainPath = mainPathAvailable;
/* JPEG encoders typically expect sYCC. */
if (!colorSpace)
colorSpace = ColorSpace::Sycc;
break;
case StreamRole::Viewfinder:
- useMainPath = !selfPathAvailable;
/*
* sYCC is the YCbCr encoding of sRGB, which is commonly
* used by displays.
@@ -656,7 +651,6 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,
break;
case StreamRole::VideoRecording:
- useMainPath = !selfPathAvailable;
/* Rec. 709 is a good default for HD video recording. */
if (!colorSpace)
colorSpace = ColorSpace::Rec709;
@@ -669,7 +663,6 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,
return nullptr;
}
- useMainPath = true;
colorSpace = ColorSpace::Raw;
break;
@@ -679,14 +672,21 @@ PipelineHandlerRkISP1::generateConfiguration(Camera *camera,
return nullptr;
}
+ /*
+ * Prefer the main path if available, as it supports higher
+ * resolutions.
+ *
+ * \todo Using the main path unconditionally hides support for
+ * RGB (only available on the self path) in the streams formats
+ * exposed to applications. This likely calls for a better API
+ * to expose streams capabilities.
+ */
RkISP1Path *path;
-
- if (useMainPath) {
+ if (mainPathAvailable) {
path = data->mainPath_;
mainPathAvailable = false;
} else {
path = data->selfPath_;
- selfPathAvailable = false;
}
StreamConfiguration cfg =