ISL79987 de-interlace for iMX8QM

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

ISL79987 de-interlace for iMX8QM

236 Views
simonlin
Contributor II

Hi @qiang_li-mpu_se 

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

simonlin_4-1702285620774.png

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.

simonlin_5-1702285750763.jpeg

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:

  1. isl7998x.c:

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);

  1. dts file:

&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

simonlin_3-1702284308153.png

If I want to do de-interlace by modify queue buffer and de-queue buffer for 720X480 preview

Can you provide advises?
0 Kudos
Reply
0 Replies