I’m trying to modify my YUV422(16bpp) sensor driver to capture YUV420(12bpp). The driver works fine with YUV422 I am able to capture stream with v4l2-ctl and gstreamer without any problems.
The sensor is able to stream YUV420 but I cannot capture it on jetson side. I have modified the device tree, and kernel images like so:
mode0 {
mclk_khz = "48000";
num_lanes = [34 00];
tegra_sinterface = "serial_a";
cil_settletime = "20";
phy_mode = "DPHY";
csi_pixel_bit_depth = "12";
discontinuous_clk = "yes";
mode_type = "yuv";
pixel_phase = "uyvy";
active_w = "640";
active_h = "480";
readout_orientation = [30 00];
line_length = "640";
pix_clk_hz = "280000000";
embedded_metadata_height = [30 00];
};
Kernel files sensor_common.c and camera_common.c changes:
static int extract_pixel_format(
const char *pixel_t, u32 *format)
{
...
else if (strncmp(pixel_t, "yuv_uyvy12", size) == 0) //yuv420
*format = V4L2_PIX_FMT_YUV420;
...
}
static const struct camera_common_colorfmt camera_common_color_fmts[] = {
...
{
MEDIA_BUS_FMT_UYVY8_1_5X8,
V4L2_COLORSPACE_SRGB,
V4L2_PIX_FMT_YUV420,
},
...
}
Kernel compiles and installs successfully. After I insmod my driver I get a segmentation fault(NULL pointer derefference).
What is the correct way to support YUV420 format?