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.

dm368 设置OSD层透明

TI的工程师们,你们好:

   我在开发dm368的时候遇到一个问题,如图:

我在LCD上把VIDEO0层和OSD1层都显示出来了,VIDEO0层铺满全屏,屏幕下方的绿色区域是OSD1层,这时由于OSD1的优先级较 高,会把video层盖住一部分;OSD1层上我跑了一个QT程序,并且把QT的背景设置成了透明的,但是透明的区域并没有显示出底层的video视频, 而是绿色的,请问怎么把OSD1 上的透明区域显示出video图像呢?

我在VPBE手册中也找到了设置OSD层的寄存器的位置,但是修改之后,没有什么效果。
0x01C7:0200 OSD VPBE – On Screen Display

Offset     Register              Description                                                            Section

200h      MODE                  OSD Mode Register                                             Section 6.3.1
204h      VIDWINMD          Video Window Mode Setup Register               Section 6.3.2
208h      OSDWIN0MD     OSD Window Mode Setup Register                 Section 6.3.3
20Ch     OSDWIN1MD     OSD Window 1 Mode Setup Register              Section 6.3.4
              (when used as a second OSD window)

  • 你好,

    运行QT的OSD1使用的是RGB888么?

    如果是,能否尝试使能transparent并且配置下面的寄存器?

    TRANSPVALL.RGBL   Transparency value (RGB565) for RGB565 data, or lower 16-bit of transparency value (GB) for RGB888.
    TRANSPVALU.RGBU Transparency value upper byte (R) for RGB888.

  • 您好:

        我的OSD0是PIXFMT_RGB565,  OSD1是PIXFMT_OSD_ATTR;按照您的回答我设置了相应的寄存器,但是QT界面的绿色背景依旧存在!
        根据您的回答,我分别设置了

    OSDWIN0MD.TE0=1(Transparency enable for OSD window 0)

    OSDWIN1MD.TE1=1 (Transparency enable for OSD window 1)

    TRANSPVALL.RGBL=0x5555

    TRANSPVALU.RGBH=0x4444


    然后用regrw.out工具看了里面的值,也都写进去了:

    OSD0和OSD1:
    root@DM368_IPNC:/opt/ipnc# ./regrw.out 1c71c08
     
     0x01c71c08: 0000303d 000030fc 00000000 00000000

    TRANSPVALL和TRANSPVALU:

    root@DM368_IPNC:/opt/ipnc# ./regrw.out 1c71cf4
     
     0x01c71cf4: 00005555 00004444 00000000 00000000

  • 你好,

    你之前的帖子说QT是在OSD window1上的,但从寄存器看OSD window1没有使能,但0使能了。

    我的想法是让绿色部分的QT内容完全不显示,而显示视频。其他颜色的QT内容保留。

    OSDWIN0MD.BLND1你的配置是7,但这表示OSD完全显示,video窗口不显示,我认为应该配置为0.

    由于OSDWIN0MD.BMP0MD=1, 所以只需要配置TRANSPVALL.RGBL。而TRANSPVALL.RGBL的值应是你需要让OSD透明的值,如果是绿色,这个值我认为可能是0x7E0,请你读取一下QT界面里面绿色地方的值来确保正确。

  • 您好:

            感谢您的回答;

           按照您的说法,我重新配置了寄存器,可还会显示绿色的背景;
           我重新阐述一下我的需求:我想在video层显示视频数据的时候,OSD层也能显示图片,但是这时,OSD层上的QT程序会把video层遮住,所以我想使QT上的某一区域透明化,能够显示出底层的video视频,所以我在QT上贴了一张透明的图片,但是在启动QT程序时,发现背景为绿色的,我不清楚这个绿色的背景是从哪儿出来的?
           我想在情况是:
    1.开机显示linux的LOGO, video层铺满全屏,osd层的位置我做了向下偏移,这时候也都正常

    root@DM368_IPNC:~# ./regrw.out 01c71c08
     
     0x01c71c08: 00003005 000030fc 00000000 00000000

    2.使OSD层透明:. /regrw.out -w 01c71cf4 15 (不清楚为什么是15,这个我一个一个试出来的)
    LCD显示就变成了:

    root@DM368_IPNC:~# ./regrw.out 01c71cf4
     
     0x01c71cf4: 00000015 00000000 000000ff 00000000

    3.启动QT程序后,绿色的不透明背景又出现了!


    这时候,配置./regrw.out -w 01c71cf4 7e0 也不行,我不清楚0x7e0这个值是怎么来的?是参考“ROM0/ROM1 Color Look-Up Table”的颜色表吗?

  • Hi,Chris Meng:

         谢谢您,问题解决了,我起先没明白,后来明白了:需要TRANSPVALL.RGBL的值与QT需要透明部分的颜色一致才行!

  • 我也想问下这个TRANSPVALL.RGBL 里面的值要写什么!!!!!!

  • 您好,请问您的解决方法能告诉我么,我也遇到这样的问题,困惑好久了没解决

  • 您好,你的qt在osd上完全透明显示的问题解决了么