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.

[参考译文] AM5728:平铺机中的 SGX 缓冲器

Guru**** 2611385 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637857/am5728-sgx-buffers-in-tiler

器件型号:AM5728

尊敬的团队:

客户提供:

我们在使用多个 GStreamer 视频管道时遇到了问题。 一些正在运行的应用程序已结束、我们遇到了此错误:

[1111.109174] omapdrm omapdrm.0:无法重映射:-12 (3)

我们在以下网站上提到了 PSDKLA-3753: http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Automotive_Post_Release_Fixes

这解释了观察到的行为、因为缓冲区是以平铺方式分配的、并且最大可用容量为128MB。

实际上、我们能够检查 Cat /sys/kernel/debug/dri/0/tiler_map 的舵柄存储器使用情况、直到 我们超过限制为止一切都正常。

超过限制后、我们得到了上述误差。 但是、我们不使用 PSDKLA、因为据我所知、建议将其用于不同的平台(DRA7xx)。 我们使用 PROCESSOR-SDK-LINUX-AM57X、该器件旨在与 AM57X 配合使用。 我们检查了最后一个版本04_01_00_06、它似乎没有涵盖与 PSDKLA-3753相同的功能。 它更新了 omapdrm (内核空间)、libdrm-OMAP (用户空间)、但不更新与 PSDKLA 内此提交类似的 SGX 部件: http://arago-project.org/git/projects/?p=meta-glsdk.git;a=commit;h=c2c93adce12d24f124ff9b8c979115227d555dce

因此、所有 SGX 缓冲区仍以平铺方式分配(包括 Weston)。

  • 您是否计划同时更新 SGX 器件?
  • 我已经了解到有必要为编码器/解码器部件分配平铺层中的内存、但是否可以为 CMA 区域中的 VPE 分配缓冲区?


感谢您的支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bartosz、
    是的、此修复程序仅适用于 DRA7xx 器件+基于 v4.4的内核 SDK。
    因此是配方文件 arago-project.org/.../
    提到一个分支名称 ti-img-SGX/1.14.3699939_k4.4。

    内核4.9没有针对这个的所有内核补丁。 缺少一个补丁。
    arago-project.org/.../
    第3个修补程序在 k4.9上不可用,因为它是一个 hack,并且不可进行上流处理。

    您可以尝试在内核和 SGX 配方补丁上应用第三个补丁、它应该也适用于基于4.9K 的 SDK (但您可能会错过 TI-img-SGX/1.14.3699939分支中的几个 SGX-DDK-um 错误修复、这是 SDK 的当前分支)
    如果 SGX 用户空间库没有依赖关系、则可以使用。

    因此、包括 Weston 在内的所有 SGX 分配都将来自 CMA 区域。

    VPE 缓冲器也可以与 CMA 配合使用、但由于存在常见的 dumb 分配器、因此无法与 gstreamer 配合使用
    和 VPE。
    在 CMA 区域中分配缓冲区时需要设置标志 OMA_BO_MEM_CONTIG、现在无法传递该标志
    VPE。

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

    您好 Ramprasad、

    谢谢、这对您有所帮助。 我们有一些问题:

    我们发现、它还应与其他 SDK 的源代码一起使用、但对于是否计划同时为适用于 AM57XX 的 SDK 更新 SGX 器件的问题、没有直接的答案。 对于上述 PSDKLA、此修复程序的严重程度为 S2。

    2.[引用用户="Ramprasad"]

    您可以尝试在内核和 SGX 配方补丁上应用第三个补丁、它应该也适用于基于4.9K 的 SDK (但您可能会错过 TI-img-SGX/1.14.3699939分支中的几个 SGX-DDK-um 错误修复、这是 SDK 的当前分支)
    如果 SGX 用户空间库没有依赖关系、则可以使用。

    [/报价]

     请您详细说明/澄清 "不依赖 SGX 用户空间库"的含义吗?

    谢谢、

    此致、

    Bartosz

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

    您好 Ramprasad、

    我们是否可以信赖您对上述两个问题的反馈?

    谢谢、
    Bartosz

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

    尊敬的团队:

    对上述2个问题有任何反馈?

    谢谢、

    此致

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

    您好!

    让我与专家核实一下、然后再与您联系。


    此致、
    玛格丽塔

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

    您的 gstreamer 流水线和用例是什么? 您将 SGX 用于什么用途?谁拥有它?  需要这些信息来引导您选择正确的路径和方法。  

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

    大家好、Manisha、

    用例显示来自 IP 摄像机(CCTV 系统)的视频。 因此、有必要启动多条 gstreamer 管道。 示例:

    gs-launch-1.0 rtspsrc latiter=200 location="rtsp://192.168.35.212/ axis-media/media.amp?videococodec=h264&h264profile=main&resolution=1024x768&fps=25"! rtph264depay! h264parse! ducatih264dec! VPE! 'VIDEO/x-RAW、宽=1024、高=768'! 陆上接收机

    需要使用具有 capsfilter 的 VPE、因为没有该视频图像就会像我之前报告的那样卡住。

    据我们所知、Weston、Waylandsink、解码器和 VPE 的存储器现在来自 tiler、这对我们的用例来说是非常有限的。 每个实例都"占用"大量平铺内存。 仅 Weston 就占20MB 以上的瓷砖(固定大小为218MB)。

    感谢你的帮助。

    此致、

    Bartosz

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

    作为一个快速应答、您能否尝试从 DTS 文件中禁用 DMM。 这将导致 DMM 不可用、DRM 驱动程序将使用默认 CMA。 请告诉我它是如何为您服务的。

    您可以在 Linux 目录 arch\arm\boot\dts\dra7.dtsi 下的 dra7.dtsi 文件中找到 DMM 条目

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

    大家好、Manisha、

    祝您2018年一切顺利。 回到我们的讨论:

    1.在 dra7.dts 中禁用 DMM 的 Hack 会导致 gstreamer 插件初始化中出现以下错误:

    MmRpc_create:错误:连接失败
    ./git/libdce.c:416:DCI_IPC_init 错误:失败 eError == DCE_Eok 错误 val -4../git/libdce.c:479:

    您是否有任何指导原则、为什么会发生这种情况/如何克服这种情况?

    2.我们发现、如果我们按照编解码器文档中的说明更改 gstreamer 插件、我们可以使用更少的平铺存储器:  

    解码器会分配较大的缓冲区来处理帧的重新排序、这不是必需的、因为它已经由源/jitterbuffer 元素处理。 ipumm/textrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264vdec/docs 中的文档包含有关通过减少 DDR 使用量的部分。 Gstreamer 插件将这些参数设置为自动。 是否可以为 gstreamer 插件添加该内容?

    感谢您的帮助、
    此致、Bartosz

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

    谢谢 Bartosz! 祝你新年快乐!!

    [引用用户="Bartosz Marcinkowski"]

    在 dra7.dts 中禁用 DMM 的 Hack 会导致 gstreamer 插件初始化中出现以下错误:

    MmRpc_create:错误:连接失败
    ./git/libdce.c:416:DCI_IPC_init 错误:失败 eError == DCE_Eok 错误 val -4../git/libdce.c:479:

    您是否有任何指导原则、为什么会发生这种情况/如何克服这种情况?

    [/报价]

    这是否适用于没有 Ducati 编解码器的流水线?

    [引用 user="Bartosz Marcinkowski">解码器会分配大型缓冲区来处理帧的重新排序、而这不是必需的、因为它已经由源/jitterbuffer 元素处理。 ipumm/textrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264vdec/docs 中的文档包含有关通过减少 DDR 使用量的部分。 Gstreamer 插件将这些参数设置为自动。 是否可以为 gstreamer 插件添加该功能?[/quot]

    我认为 jitterbuffer 元素不能处理 H.264标准强加的缓冲区重新排序。 如果您知道编码器的配置并且知道编码器不使用任何长期参考帧、则可以降低解码器缓冲器的要求。 如果应用程序应该作为通用解码器运行、能够对给定配置文件和级别的任何 H.264流进行解码、那么您将需要遵守该缓冲器上的解码器要求。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于我现在负责从客户端创建端口、我将直接回复。

    我还在最近确认了这一点。 之前、我使用了来自源的 X 分支、该分支提供了该错误并预编译了 wayland 分支。 对于 wayland、我不确定这是否是由不兼容的内核引起的。 编译陆地分支、以查看是否存在相同的问题。

    对于第二部分、gstreamer 是用于构建专用管线的高度可配置工具、用户可以对编码器进行一些控制。

    对于每种类型的源、可能有不同的管道来处理延迟、分辨率、质量、缩放和旋转、摄像机名称的标题等方面的要求

    这里的问题是、使用基线配置文件时没有 B 帧、但 Ducati 插件文档说只对具有 B 帧的编解码器有意义。 但是、当我启动流水线并查看更平铺机的使用情况时、没有区别。
    在本例中、我们发现摄像头默认使用 GOP=32、这会导致大量缓冲器使用。 减小该值是一种不理想的解决方法、因为它会增加网络负载。

    Jitterbuffer 处理 RTP 流的网络重新传输/重新排序、在该帧具有与来自编码器相同的顺序之后、如果数据未及时到达、则会标记为帧丢失。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Ondrej Bilka">通过 hack、我还遇到了陆地撞车事件、我最近才确认过这一点。 之前、我使用了来自源的 X 分支、该分支提供了该错误并预编译了 wayland 分支。 对于 wayland、我不确定这是否是由不兼容的内核引起的。 编译陆地分支、以查看存在相同的问题。

    通过"hack"、您是否指的是在 DTS 文件 hack 中禁用 DMM? 您运行了哪个应用程序来确认航迹是否崩溃? 您看到了哪种类型的错误日志? 您说的是陆地分支是什么意思?

    [引用 user="Ondrej Bilka"] Jitterbuffer 处理 RTP 流的网络重传/重定序,在该帧与编码器的顺序相同之后,如果数据未及时到达,则会标记为丢失帧。

    与显示延迟/重新排序相比、网络数据重新排序有所不同。 您可能会对这两者感到困惑。

    有两个参数需要控制以减小 H.264解码器 DDR 存储器封装。 IH264VDEC_Params::dpbSizeInFrames。

    IVIDDEC3_Params::displayDelay ->当帧的编码顺序(因此、解码顺序)与显示顺序不同时。  

    H264VDEC_Params::dpbSizeInFrames ->最大参考帧数(过去)编码器可以引用编码来编码当前帧。 对于5.1级、这被指定为16、但并非所有编码器都需要使用它。 大多数编码器最多可使用2到3个参考帧。  这个 wiki 页面可能有助于加深理解。  

      [引用 user="Ondrej Bilka">在本例中,我们发现摄像机默认使用 GOP=32,这会导致大量缓冲区使用。 减小该值是一种不理想的解决方法、因为它会增加网络负载。

    降低脚部印花的重要因素不是 GOP 尺寸、而是 GOP 结构。 从 H.264随编解码器用户指南附录 F 部分提供-

    "对于简单的 GOP 结构、通常、如果 dpbSizeInFrame 配置为 M+1、就足够了。 显示延迟设置为 M、其中 M = SPS -> max_num_ref_frames。"

    您可能可以检查编码流的 SPS NAL 单元中的最大参考帧、并 相应地设置 viddecParams 字段值。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、它是 DMM Hack、Wayland 在启动时崩溃、系统只能通过串行端口/控制台进行访问。 也许下次您建议这样的黑客攻击时、您应该测试它以查看机器是否正确引导。

    我没有感到困惑。 问题是、您编码以确定显示重新排序的编号在 gstreamer 插件中根本不起作用。 您应该像我写的那样更仔细地阅读文章:
    这里的问题是、使用基线配置文件时没有 B 帧、但 Ducati 插件文档说只对具有 B 帧的编解码器有意义。

    基线配置文件不需要重新排序、软件解码器播放延迟低于200ms 的相同流。 只有您的硬件解码器才需要500ms 才能工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ondrej、

    在这种情况下、当我们的开箱即用处理器 SDK Linux 产品不满足客户的确切需求、并且我们无法接受 SDK 产品中的请求时、 我们通过外部 git 存储库提供了大部分源代码、并提供了通过 Arago 构建设置进行构建的设置。 对于处理器 SDK 产品之外的任何自定义需求和要求、我们的客户可以使用源代码、进行修改并通过 Arago 构建设置进行构建、以查看是否满足需求。 有时、我们可以向客户提供建议或想法、以帮助他们满足自己的定制需求。 这并不一定意味着我们始终验证建议。 如果我们整合了验证建议的努力、但这不符合验证所需的时间、那么我们将无法首先提供许多客户认为有用的建议。

    如果引号中提到您的帖子"仅对具有 B 帧的编解码器有意义、那将有助于我更好地理解您的帖子。 "没有这种说法,这种说法就失去了意义。

    无论如何、我建议修改 num_ref_frames 的 ducatih264dec gstreamer 插件源代码(仅当您确定传入的编码流不会使用更多您要设置的 N 个参考帧时)并尝试这样做。 可在以下链接中找到源代码。 在该源代码中查找 num_ref_frames。 我要再次强调,我没有尝试过这项建议。 此外、请注意、此建议仅有助于管理编解码器存储器要求、而不是延迟。  

    git.ti.com/.../gstducatih264dec.c