tw9992 video decoder for imx-8qm

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

tw9992 video decoder for imx-8qm

2,423 Views
simonlin
Contributor II

Hi 

Here is my environment

HW platform: imx8-qm, tw9992

OS: android9

I would like to use tw9992 video decoder  from imx6 to imx-8qm, and found the difference between imx6 and imx8 as below

       

i.mx6

i.mx8

Image Processing

IPU

ISI

V4L2 slave device (different v4l2 ioctl)

int-device

subdevice

Media Controller Framework

no

yes

Here is my settings

static struct reg_value tw9992_init_default[] = {

    {0x02,0x40}, /* YSEL[3:0]=0,YIN0 */

    {0x04,0x00},{0x05,0x09},

    {0x06,0x00}, /*R06[7],Softreset */

    {0x07,0x02},{0x08,0x12},

    {0x09,0xF0},{0x0A,0x09},{0x0B,0xD1},{0x0C,0xCC},{0x0D,0x00},

    {0x10,0x00},{0x11,0x64},{0x12,0x11},{0x13,0x80},{0x14,0x80},{0x15,0x00},{0x17,0x80},

    {0x18,0x44},{0x19,0x06},{0x1A,0x00},{0x1C,0x0F},{0x1D,0x7F},{0x1F,0x00},

    {0x20,0x50},{0x21,0x22},{0x22,0xF0},{0x23,0xD8},{0x24,0xBC},{0x25,0xB8},{0x26,0x44},{0x27,0x38},

    {0x28,0x00},{0x29,0x00},{0x2A,0x78},{0x2B,0x44},{0x2C,0x30},{0x2D,0x14},{0x2E,0xA5},{0x2F,0xE2},

    {0x33,0x05},{0x34,0x1A},{0x35,0x00},{0x36,0x5A},{0x37,0x18},{0x38,0xDD},

    {0x39,0x00},{0x3A,0x30},{0x3B,0x00},{0x3C,0x00},{0x3D,0x00},{0x3F,0x1A},

    {0x40,0x80},{0x41,0x00},{0x42,0x00},

    {0x48,0x02},{0x49,0x00},{0x4A,0x81},{0x4B,0x0A},{0x4C,0x00},{0x4D,0x01},{0x4E,0x01},

    {0x50,0x00},{0x51,0x00},{0x52,0x00},{0x56,0x00},{0x57,0x00},

    {0x58,0x00},

    {0x60,0x00},{0x61,0x00},{0x62,0x00},

    {0x70,0x81}, /*R70[7]=1:PowerDown,You have to clear!. R70[4]=0,NTSC, 1Lane */

    {0x71,0xA5}, /*R71[5]=1,FrameMode*/

    {0x72,0xA0},

    {0x73,0x20}, /*R73[5]=1, FS_SPECIAL=1. You have to clear later! */

    {0x74,0xF0},{0x75,0x00},{0x76,0x17},{0x77,0x05},

    {0x78,0x88},{0x79,0x06},{0x7A,0x28},{0x7B,0x46},{0x7C,0xB3},{0x7D,0x06},{0x7E,0x13},

    {0x7F,0x10}, /*R7F[1:0]=00,VC0*/

    {0x80,0x05},{0x81,0xA0},{0x82,0x13},{0x83,0x11},{0x84,0x02},{0x85,0x0E},{0x86,0x08},{0x87,0x37},

    {0x88,0x00},{0x89,0x00},{0x8A,0x02},{0x8B,0x33},{0x8C,0x22},{0x8D,0x03},{0x8E,0x22},{0x8F,0x01},

    {0x90,0x00},{0x91,0x0C},{0x92,0x00},{0x93,0x0E},{0x94,0x07},{0x95,0xFF},{0x96,0x1A},

    {0x9B,0x02},

    {0xA0,0x00},{0xA1,0x00},{0xA2,0x30},{0xA3,0xC0},{0xA4,0x00},

    {0xC0,0x06},{0xC1,0x20},{0xC2,0x30},{0xC3,0x00},

    {0xC8,0x58},{0xCA,0x1E},{0xCB,0x1A},

    {0xD1,0x0E},{0xD2,0x0C},

    {0xCF,0x0E},

    {0xD3,0x0A},{0xD4,0x0E},{0xD0,0x0E}

};

 

        struct reg_value tw9992_Decoder_NTSC[] = {

    {0x07,0x02},{0x08,0x15},{0x09,0xf0},{0x0a,0x12},{0x0b,0xd0}

};

struct reg_value tw9992_Decoder_PAL[] = {

    {0x07,0x12},{0x08,0x19},{0x09,0x20},{0x0a,0x0f},{0x0b,0xd0}

};

 

    sensor->pix.width = 720;

    sensor->pix.height = 480;

    sensor->pix.field = V4L2_FIELD_INTERLACED;

    sensor->pix.pixelformat = V4L2_PIX_FMT_YUYV;

    sensor->pix.bytesperline = 720 * 2;

    sensor->pix.sizeimage = 720 * 2 * 480;

    sensor->pix.priv = 1;  /* NOTE: 1:TV_in, 0:Camera */

    sensor->streamcap.capturemode = 0; /* for Camera type */

    sensor->streamcap.timeperframe.denominator = 30;

    sensor->streamcap.timeperframe.numerator = 1;

    sensor->streamcap.capability = V4L2_MODE_HIGHQUALITY | V4L2_CAP_TIMEPERFRAME;

    sensor->is_mipi = 1;    /*fixed*/

    sensor->lanes = 1;      /*fixed*/

    sensor->bclock = 216;   /*fixed*/

    sensor->on = false; /* _dev_init() will assign true*/

    sensor->std_id = V4L2_STD_NTSC;  /*unlock*/

    sensor->input_source = 0;           /*CVBS1*/

Get raw data by below command, raw data as attachment

v4l2-ctl -d /dev/video1 --set-standard=ntsc --set-fmt-video=width=720,height=480,pixelformat=YUYV --stream-mmap=3 --stream-skip=0 --stream-to=/sdcard/tw9992.raw --stream-count=1 --stream-poll

But the use XnView check raw data is incorrect

Does anyone have the similar experience?

 

0 Kudos
5 Replies

1,822 Views
liyu1
Contributor III

Simon Lin

       能分享一下你的driver部分吗?

0 Kudos

1,823 Views
simonlin
Contributor II

Hi Li

You can take this reference, I follow it is OK

https://community.nxp.com/docs/DOC-344823 

0 Kudos

1,823 Views
igorpadykov
NXP Employee
NXP Employee

Hi Simon

some isi patches were sent via mail, for testing unit test can be used:

mx8_v4l2_cap_drm.c\mxc_v4l2_test\test - imx-test - i.MX Driver Test Application Software 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

1,823 Views
simonlin
Contributor II

Hi 

Thanks for your response

I try your patch to modify my driver, then use mx8_v4l2_cap_drm test the tv-in function

It looks something wrong, how should I do ?

(init_video_channel:503): init channel[0] v4l2_dev_name=/dev[ 183.913165] mxc-isi 58140000.isi: mxc_isi_capture_open, ISI4
/video1 w/h=(1280,800)
(open_drm_device:611): Open /dev[ 183.924675] tw9992_s_power#1006: on=1
/dri/card0 success
(open_v4l2_device:644): open /dev/video1 success
========================================================
command pid dev master a uid magic[ 183.984317] mxc-isi 58140000.isi: mxc_isi_capture_release

composer@2.1-se 3628 0 y y 1000 0
[ 183.998481] tw9992_s_power#1006: on=0
composer@2.1-se 3628 128 n n 1000 0
mx8_v4l2_cap_dr 4909 0 n y 0 0
========================================================
Please ensure there is no other master client
========================================================

0 Kudos

1,823 Views
igorpadykov
NXP Employee
NXP Employee

Hi Simon

since tw9992 is not officially supported in nxp bsps suggest to

proceed with help of Commercial Support and Engineering Services | NXP 

Best regards
igor

0 Kudos