Here is my develop environment
bsp:yocto-5.15.71-2.2.1-pegasus
soc:imx8qm
Video decoder: isl79987
Apply patch:L5.4.70_2.3.0_ISL7998x_Patch.7z (from https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/ISL79987-and-adv7180-de-interlace-driver...
I test waving mode in 720X480,and get below preview
I asked FAE about this question, reply as below
ISL79987 needs to be paired with i.MX8QXP (Rev C0) to work properly. i.MX8QM contains an errata as shown below. Due to this errata, there will be screen problems when using virtual-channel and de-interlace.
iMX8QM needs to modify the settings to workaround with ISL79987 under the following conditions:
====================================
The 4 x de-interlace can't work on iMX8QM B0 chip. It can only work on iMX8QXP/DX C0 chips.
For iMX8QM, it can only support 4 x 720*240 @ 60fps with ISL79987 set in field mode. The modification in linux kernel:
static video_fmt_t video_fmts[] = {
{ /*! NTSC */
.v4l2_id = V4L2_STD_NTSC,
.name = "NTSC",
.width = 720, /* ACT_FRM_WIDTH plus 1 */
.height = 240, /* ACT_FRM_WIDTH plus 1 */
.frame_rate = 30,
},
......
isl7998x_write_reg(isl7998x_data, 0xFF, 0x05);
if (isl7998x_data->num_lanes == 2)
isl7998x_write_reg(isl7998x_data, 0x00, 0x02);
else
isl7998x_write_reg(isl7998x_data, 0x00, 0x01);
- isl7998x_write_reg(isl7998x_data, 0x01, 0x25); //For frame mode
+ isl7998x_write_reg(isl7998x_data, 0x01, 0x05); //For field mode
isl7998x_write_reg(isl7998x_data, 0x02, 0xA0);
isl7998x_write_reg(isl7998x_data, 0x03, 0x10);
&isi_0 {
interface = <2 0 2>;
deinterlace_mode = <0>; /* 0 ~ 1: No de-interlacing,
2: Odd even weave, 3: Even odd weave
4: Odd even blending, 5: Even odd blending
6 ~ 7: Line doubling */
ntsc_top = <0>; /* 0 for ISL79987. */
status = "okay";
};
&isi_1 {
interface = <2 1 2>;
deinterlace_mode = <0>; /* 0 ~ 1: No de-interlacing,
2: Odd even weave, 3: Even odd weave
4: Odd even blending, 5: Even odd blending
6 ~ 7: Line doubling */
ntsc_top = <0>; /* 0 for ISL79987. */
status = "okay";
};
&isi_2 {
interface = <2 2 2>;
deinterlace_mode = <0>; /* 0 ~ 1: No de-interlacing,
2: Odd even weave, 3: Even odd weave
4: Odd even blending, 5: Even odd blending
6 ~ 7: Line doubling */
ntsc_top = <0>; /* 0 for ISL79987. */
status = "okay";
};
&isi_3 {
interface = <2 3 2>;
deinterlace_mode = <0>; /* 0 ~ 1: No de-interlacing,
2: Odd even weave, 3: Even odd weave
4: Odd even blending, 5: Even odd blending
6 ~ 7: Line doubling */
ntsc_top = <0>; /* 0 for ISL79987. */
status = "okay";
};
====================================
I set field mode and 720X240,the video looks acceptable
If I want to do de-interlace by modify queue buffer and de-queue buffer for 720X480 preview