tw9992 video decoder for imx-8qm

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

tw9992 video decoder for imx-8qm

3,525 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
Reply
5 Replies

2,924 Views
liyu1
Contributor III

Simon Lin

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

0 Kudos
Reply

2,925 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
Reply

2,925 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!
-----------------------------------------------------------------------------------------------------------------------

2,925 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
Reply

2,925 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
Reply