Hi @JerryChang,
I did as you suggested :
- Adding the patch of Topic 252803
diff --git a/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c b/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c
index 69ebee6a8..8f0df46e1 100644
--- a/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c
+++ b/kernel/nvidia/drivers/media/platform/tegra/camera/vi/vi5_fops.c
@@ -304,6 +304,9 @@ static int tegra_channel_capture_setup(struct tegra_channel *chan, unsigned int
setup.csi_port = csi_chan->ports[vi_port].csi_port;
}
+ if (chan->fmtinfo->fourcc == V4L2_PIX_FMT_NV16)
+ setup.channel_flags |= CAPTURE_CHANNEL_FLAG_SEMI_PLANAR;
+
err = vi_capture_setup(chan->tegra_vi_channel[vi_port], &setup);
if (err) {
dev_err(chan->vi->dev, "vi capture setup failed\n");
@@ -354,6 +357,12 @@ static void vi5_setup_surface(struct tegra_channel *chan,
desc_memoryinfo->surface[0].size = chan->format.bytesperline * height;
desc->ch_cfg.atomp.surface_stride[0] = bpl;
+ if (chan->fmtinfo->fourcc == V4L2_PIX_FMT_NV16) {
+ desc_memoryinfo->surface[1].base_address = offset + chan->format.sizeimage / 2;
+ desc_memoryinfo->surface[1].size = chan->format.bytesperline * height;
+ desc->ch_cfg.atomp.surface_stride[1] = bpl;
+ }
+
if (chan->embedded_data_height > 0) {
- Launching v4l2-ctl command for NV16 : same result
trace_v4l2_nv16.txt (795.2 KB)