summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-09-30 21:31:44 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2020-10-01 22:23:25 +0200
commit1455bd0dc25d6c5a2cc8ef99dc030b9dca3df77d (patch)
tree461688f804d68216d62d68c853ec3bfb74a965b1
parentd687b004d1d4a5f95b5acbe44a79f2933f72525f (diff)
libcamera: pipeline: rkisp1: Fix media bus propagation for NV{12,21}
The upstream driver has changed how the link formats are validated when starting to stream [1]. This revealed that libcamera did not adjust the media bus format from the link between {main,self} resizer source pad and the capture video device as expected by the driver. The media bus code YUYV8_2X8 was hardcoded to MEDIA_BUS_FMT_YUYV8_2X8 for all pixel formats while it must be adjusted to YUYV8_1_5X8 for NV12 and NV21, fix this. 1. 6803a9e0e1e43e9e ("media: staging: rkisp1: cap: simplify link validation by comparing media bus code") Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/pipeline/rkisp1/rkisp1_path.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
index 410e9f5d..63c643f2 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
@@ -7,6 +7,8 @@
#include "rkisp1_path.h"
+#include <linux/media-bus-format.h>
+
#include <libcamera/formats.h>
#include <libcamera/stream.h>
@@ -125,6 +127,16 @@ int RkISP1Path::configure(const StreamConfiguration &config,
<< "Configuring " << name_ << " resizer output pad with "
<< ispFormat.toString();
+ switch (config.pixelFormat) {
+ case formats::NV12:
+ case formats::NV21:
+ ispFormat.mbus_code = MEDIA_BUS_FMT_YUYV8_1_5X8;
+ break;
+ default:
+ ispFormat.mbus_code = MEDIA_BUS_FMT_YUYV8_2X8;
+ break;
+ }
+
ret = resizer_->setFormat(1, &ispFormat);
if (ret < 0)
return ret;