This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAP 35x Display : Overlay Data Corruption (in specific condition)



Hi,

I am facing a critical issue in OMAP Display controller.

I am using video overlay 1 and 2.

VID 1 is used for camera(video) streaming.

VID 2 is used for Text(label) display.

I am getting overlay corruption(flickering) issue in the following condition:

> Camera Video streaming @ 60 fps in VID 1 layer (Video Format : UYVY)

>  Label displayed in VID 2 layer in 24-bit format(Video Format: RGB 24 un-packed)

Please check the following image.

Below image is actual(expected) output.

If you are not able to see the above image please go to : 

http://e2e.ti.com/cfs-filesystemfile.ashx/__key/CommunityServer-Components-ImageFileViewer/CommunityServer-Discussions-Components-Files-42/1777.img3.jpg_2D00_550x384.jpg

 and the following image is corrupted output.

 

 

If you are not able to see the above image please go to : 

http://e2e.ti.com/cfs-filesystemfile.ashx/__key/CommunityServer-Components-ImageFileViewer/CommunityServer-Discussions-Components-Files-42/1538.img4.jpg_2D00_550x384.jpg

You can see the label corruption and repeatation of multiple labels horizontally.

This corruption is occurring frequently (i.e) at least once in 10 seconds (but randomly)

Also the VID1 camera stream is affected, it is having small horizontal white lines(5 to 20 pixel length) randomly appearing and disappearing.

 When i configured the VID2 layer as 16-bit i am not getting this issue, but i need it as 24-bit only.

also with VID1 @30 fps and VID2 as 24-bit i am not getting this issue.

Is this a bus bandwidth related issue? or Is there any display controller configuration related issue?

if it is bandwidth related issue, is there any option available in display controller to optimize the bus usage?

Following is the registry dump of  VID1 and VID2 layer registries(taken before enabling each layer):

DISPC_VID1.BA0                               : 0x8732aa00 
DISPC_VID1.BA1                               : 0x8732aa00
DISPC_VID1.POSITION                   : 0x0
DISPC_VID1.SIZE                             : 0x2cf04ff
DISPC_VID1.ATTRIBUTES             : 0x8a76
DISPC_VID1.FIFO_THRESHOLD :  0x3ff01ff
DISPC_VID1.ROW_INC                  : 0x1
DISPC_VID1.PIXEL_INC                 : 0x1
DISPC_VID1.FIR                               : 0x2000233
DISPC_VID1.PICTURE_SIZE        : 0x16702bf
DISPC_VID1.ACCU0                       : 0x0
DISPC_VID1.ACCU1                       : 0x0

DISPC_VID2.BA0                             : 0x873bb000
DISPC_VID2.BA1                             : 0x873bb000
DISPC_VID2.POSITION                  : 0x0
DISPC_VID2.SIZE                            : 0x2cf04ff
DISPC_VID2.ATTRIBUTES             : 0x8010
DISPC_VID2.FIFO_THRESHOLD : 0x3ff01ff
DISPC_VID2.ROW_INC                  : 0x1
DISPC_VID2.PIXEL_INC                : 0x1
DISPC_VID2.FIR                              : 0x4000400
DISPC_VID2.PICTURE_SIZE        : 0x2cf04ff
DISPC_VID2.ACCU0                       : 0x0
DISPC_VID2.ACCU1                       : 0x0

 

Additional Information:

Display Resolution : 1280 x 720 @60 Hz

Pixel Clock: 74.25 MHz ( DSI PLL clock is used as source for pixel clock)

Camera Stream Source Resolution: 640 x 360

Display controller's up/down scaler is used to scale it up to 1280 x 720 .

Please help me in solving this issue.

thanks in advance,

sarathy

 

 

 

 

  • Hi Sarathy,

    It seems like you are hitting memory bandwidth issue here, the only option for such issues is to fine tune for given use-case. You can try couple of things here -

     

     - Are you using rotation? If  yes, then can you try disabling it?

     - When you say you are using VD1 for camera streaming, how are you dealing with buffers? Is is in MMAP mode or USERPTR mode?

     - Overlay optimization (You can get patch from here)

     

    Thanks,

    Vaibhav

  • Few more questions and suggestions -

     

    - Which PSP release (kernel Version) are you using?

    - If you are not doing anything with GFX plane, can you try disabling it? You can do this using sysfs interface (Please refer to UserGuide)

     

    Thanks,

    Vaibhav

  • Hi Vaibhav,

    Thanks for your reply.

    I am trying the GFX plane skip option implemented in overlay optimization code in the patch link you have posted.

    Hope this will be useful for me, I will keep posted the updates regarding this.

    I am working in Win CE 6.0 BSP(6.15) .

    thanks

    sarathy

  • Hi,

    I have some basic doubts in doing overlay optimization,

    Is it possible to do overlay optimization with both VID 1 and VID 2 overlay enabled?(bcos in display driver code(dispc.c), setup_overlay_opt() is getting called only when the plane count is < 2)

    Since i have VID1 overlay for full screen i need to disable the GFX layer, Is it required to follow any sequence in disabling the GFX plane or we can directly disable it by clearing DISPC_GFX_ATTRIBUTES[GFXENABLE] bit?

    I am using the display color key for VID2, Is it possible to enable overlay optimization in this case?

    Without enabling DISPC_CONTROL[OVERLAYOPTIMIZATION] bit, is it possible to disable the GFX layer?

    thanks,

    Sarathy

  • Hi Sarathy,

    Please refer to the section "7.4.2.4.3 Overlay Optimization (Only Available in Normal Mode)" from TRM, it clearly says that the overlay optimization is only applicable between GFX and Video1 plane.

    As far as disabling GFX plane is concerned, you can very well do this using SYSFS interface, no need to modify the kernel for this.

    # echo 0 > /sys/devices/platform/omapdss/overlay0/enabled

    Please refer to the PSP User guide (http://processors.wiki.ti.com/index.php/UserGuideDisplayDrivers_PSP_03.00.00.05#SYSFS_Software_Interfaces) for more details.

     

    Thanks,

    Vaibhav

  • Hi Vaibhav,

    Thanks for your suggestions.

    I can able to solve the issue by disabling the GFX layer, now i am not getting flicker(corruption) in Video layer.

    Now i need some more help in using the Gamma Table. I cannot able to use the gamma table without enabling the graphics layer(i.e) the table values are getting updated only when the graphics layer is enabled.

    Is there any other way available in OMAP to update the gamma table value without enabling the GFX layer?

     Thanks,

    Sarathy

  • Hi Sarathy,

    The behavior is expected one, the gamma table is only applicable for GFX plane and that is the reason it doesn't get updated  when you disable GFX plane. Let me understand one thing, why do you want to update gamma table without GFX plane is being used?

     

    Thanks,

    Vaibhav

  • Hi Vaibhav,

    Gamma table is common for all the 3 layers, only palette is specific for the GFX layer. So we are using gamma table for gamma correction in camera streaming.

    Thanks,

    Sarathy

  • Hi all,

    I am working on beagle board, frame buffer driver(dss2 or omap2). I used mplayer to play video on GFX window. Though GFX window supports only RGB, mplayer had done color conversion using software and played the video file. But when i try to play video on Vid1 window, which supports RGB and yuv color spaces, there are no errors from mplayer, log says as video file is getting played but i am not seeing any video on lcd, i disabled GFX through sys, before playing video on Vid1. 

    If any idea, please suggest me.

    Thanks,

    Srilatha.