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.

[参考译文] Linux/DRA756:Linux 支持与放大器;DSS 中的写回管道示例

Guru**** 2589245 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581247/linux-dra756-linux-support-examples-for-writeback-pipeline-in-dss

器件型号:DRA756

工具/软件:Linux

我有一个基于 Debian 的应用程序、它使用 Wayland & QT 进行图形应用。 
到目前为止,我已经创建了一个应用程序,该应用程序使用 DSS 搅拌机将图形覆盖到视频流中,并通过 HDMI 接口发送出去。 
这是我们的主要用例之一、工作正常、但我一直在讨论如何启用我们的第二个用例; 
在此用例中、我们需要 DSS 中四条可用视频管道中的三条作为搅拌机的输入。 
- HMI 
-视频源 
- Gfx 叠层 
我们需要将图形叠加到视频中、并在运行 H.264并存储为 mp4文件之前、通过 Writeback 流水线将其回路。 我们还需要同时将 HMI 发送到 HDMI 接口。 

首先、我想确认在 Linux 内核驱动程序中启用了 WriteBack 流水线。

其次、我只想请求有关如何创建此类流水线的任何示例、或者只是一些有关从何处开始的一般性指针。

非常感谢。

Tom Brown
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    是的、PSDKLA 版本3.02支持 DSS 写回流水线。
    processors.wiki.ti.com/.../Category:Processor_SDK_Linux_Automotive

    根据用例、您可以查看在帧捕获模式下使用 DSS 写回。

    此处提供了使用写回的示例应用:
    github.com/.../wbtest.cpp

    此致、
    Anand
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Anand、我有一个关于如何为此设置 DTB 的后续问题:

    我们有一个连接到显示子系统的 HDMI PHY 的屏幕。 对于实时图像、我们希望通过顶部的覆盖层和 UI 将来自摄像机的视频输出到屏幕。 我们正在进行映射:

    用于将视频传输到 HDMI 的平面1
    UI 到 HDMI 的平面2
    用于覆盖 HDMI 的平面3

    并将其连接到与 HDMI 关联的 CRTC。

    为了进行录制、我们希望在 HDMI 上显示 UI 时、使用顶部的覆盖层捕获摄像机的输出。 在器件树中、我们向 dpi3添加了面板。 从 userspace 中、我们可以看到两个 crtcs。 我们希望:

    视频到 dpi3的平面1
    平面2用于覆盖到 dpi3
    UI 到 HDMI 的平面0

    但是、当我们将面板添加到 dpi3时、平面0是 CRTC 0 (HDMI)的主要平面0、平面1是 CRTC 1 (dpi3)的主要平面1、我们无法更改它们。 请参阅 kmsprint -l 的输出:

    连接器0 (27) HDMI-A-1 (已连接)
    连接器1 (31)未知-1 (已连接)
    编码器0 (26) TMDS
    编码器1 (30) TMDS
    CRTC 0 (29) 1280x768 80.159 1280/64/136/200 768/1/23/23 60 (60.02)
    CRTC 1 (33) 1920x1080 30.000 1920/1/1/1 1080/1/1/1 14 (14.41)
    平面0 (28) fb-id:47 (crtcs:0) 0、0 1280x768 -> 0、0 1280x768 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 AR24)
    平面1 (32) fb-id:45 (crtcs:1) 0、0 1920x1080 -> 0 1920x1080 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY)
    平面2 (34)(crtcs:0 1) 0 0x0 -> 0 0x0 0x0 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 RA24 AR24 NV12 YUYVY)
    平面3 (35)(crtcs:0 1) 0 0x0 -> 0 0x0 0x0 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 RA24 AR24 NV12 YUYVY)
    FB 47 1280x768
    FB 45 1920x1080

    因此、我们无法再进行录制、因为平面0无法进行视频、而平面1只能与 crtc1 (dpi3)配合使用。

    是否可以告诉 omapdrm 使平面0成为 dpi3输出的主要平面、而平面1成为 HDMI 的主要平面?

    下面是我们的器件树中 DSS 更改的摘录:

    /{
    别名{
    display0 =虚假面板(&F);
    display1 = hdmi0;
    };

    FASH_panel:connector@2{
    兼容="面板-dpi";
    标签="内部";

    面板正时{
    hactive =<1920>;
    Vactive =<1080/>;
    时钟频率=<30000000>;

    前沿=<1>;
    后沿=<1>;
    HSYNC-LEN =<1>;

    垂直前沿=<1>;
    后沿=<1>;
    vsync-len =<1>;
    };

    port@lcd3{
    internal_panel_in:端点{
    远程端点=<&dpi3_out>;
    };
    };
    };

    hdmi0:连接器@1{
    兼容="HDMI 连接器";
    标签="HDMI";

    端口{
    HDMI_connector_in:端点{
    远程端点=<&HDMI_OUT>;
    };
    };
    };
    };


    DSS{
    状态="ok";
    VDDA_VIDEO_SUPPLY =<Registered调节器_J6_1v8pll>;

    端口{
    dpi3_out:端点@0{
    远程端点=<&internal_panel_in_>;
    数据线=<24>;
    };
    };
    };

    HDMI{(&H)
    状态="ok";
    VDDA-SUPPLY =<Registered调节器_J6_1v8phy>;
    pinctrl-names ="default";
    pinctrl-0 =<&HDMI_PINs>;

    端口{
    HDMI_OUT:端点{
    通道=<1 0 3 2 5 4 7 6>;/*反极性*/
    远程端点=<&HDMI_connector_in_>;
    };
    };
    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您可以尝试在 DTS 中交换显示屏的顺序吗?

    别名{

    display1 =虚假面板(&F);

    display0 = hdmi0;

    };

    root@dra7xx-EVM:~# kmsprint-l
    连接器0 (32) HDMI-A-1 (已连接)
    连接器1 (36)未知-1
    (已连接)编码器0 (31) TMDS
    编码器1 (35) TMDS
    CRTC 0 (34) 1280x720 74.250 1280/110/40/220720/5/5/20 60 (36) TMDS 编码器1 (35) TMDS CRTC 0 (34) 1280x720 604/60x
    384/6080
    (60x 384/60x 384/60x 38x 38x 38x 60x 38x 38x 38x 38x 60x 38x 38x 60x 38x 60x 38x 38 43 0、0 1280x720 -> 0、0 1280x720 (RG16 RX12 XR12 RA12 AR15 AR15 RG24 RX24 XR24 RA24 AR24)
    平面1 (37) fb-id:43 0、0 1280x800 -> 0 1280x800 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RX24 24 RX24 24 VR24 24 VR24 UY24 VRY12)
    
    平面2 (39) 0、0 0x0 -> 0 0x0 (RG16 RX12 XR12 RA12 YU15 AR15 RG24 RX24 RA24 AR24 NV12 YUYVY)
    平面3 (40) 0 0x0 -> 0 0x0 0x0 (RG16 RX12 RX12 AR12 RX12 AR15 AR15 AR15 R15 UYV UYVY)平面3 (40 0 0x0 0x0 0x0 0x0 0x0 0x0 0x24 ARXR24 ARRXRY24 ARRXRY24 ARY24 V ARY24 ARY24
    FB 43 1280x800
    FB 43 1280x800 

    此致、

    Venkat

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Venkat。

    此建议未奏效。 请参阅回复:

    我们已经尝试了你的建议,但它没有改变任何东西。 这是"kmsprint-l"的输出(从 GitHub 编译、其中包括每个平面的可用 crtcs):

    连接器0 (27) HDMI-A-1 (已连接)
    连接器1 (31)未知-1 (已连接)
    编码器0 (26) TMDS
    编码器1 (30) TMDS
    CRTC 0 (29) 1280x768@79.500 79.500 1280/64/128/192 768/3/10/17 0 (59.87)
    CRTC 1 (33) 1920x1080 30.000 1920/1/1/1 1080/1/1/1 14 (14.41)
    平面0 (28) fb-id:45 (crtcs:0) 0、0 1280x768 -> 0、0 1280x768 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 AR24)
    平面1 (32) fb-id:44 (crtcs:1) 0、0 1920x1080 -> 0 1920x1080 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY)
    平面2 (34)(crtcs:0 1) 0 0x0 -> 0 0x0 0x0 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 RA24 AR24 NV12 YUYVY)
    平面3 (35)(crtcs:0 1) 0 0x0 -> 0 0x0 0x0 (RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 RA24 AR24 NV12 YUYVY)
    FB 45 1280x768
    FB 44 1920x1080

    如您所见、HDMI 连接器只能使用平面0、2和3。 您可以使用 modetest 从 libdrm 获取相同的信息。 对于实时图像、我们希望视频流的覆盖层和 UI 位于顶部、但平面0无法处理视频。 我们希望 HDMI 能够使用平面1、2和3。

    我们认为、连接器被分配主平面的顺序在 drivers/GPU/DRM/omapdrm/omap_drv.c:omap_modeset_init ()中定义。 这遵循将 OMAP-DSS_DEVICES 添加到 panel_list 的顺序:HDMI 和 panel-dpi 调用 omapdss_register_display()的顺序。 在我们的系统中,hdmim_probe ()在 panel_dpi_probe ()之前调用,因此 HDMI 将平面0作为主平面,将平面1作为主平面。

    我们的问题是 TI 是否提供了一种将主平面分配给 crtcs 的方法、或者是否有一种实现我们所需的替代方法:将平面0作为主层的虚假连接器和将平面1作为主层的 HDMI。

    此致、
    Tom
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >>我们的问题是、TI 是否提供了一种将主平面分配给 crtcs 的方法、或者是否有另一种实现我们所需的方法:将平面0作为主层的虚假连接器和将平面1作为主层的 HDMI。

    不在 K4.4中、但可能在 K4.9中。 我将检查 K4.4是否有替代方法。

    此致、
    Venkat