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:GStreamer 应用程序接收器性能问题

Guru**** 2589245 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/589689/am5728-gstreamer-appsink-performance-issue

主题中讨论的其他器件:AM5728

大家好:

 

现在、我们使用 am5728开发 h264解码应用。

我们的 gstreamer 流水线如下所示:

h264 file -> h264parse -> ducatih264dec -> VPE -> appsink。

最后、我们从应用接收器获取 YUV 缓冲器。

现在,我们发现应用程序的性能非常低。 情况是这样的

当我们从应用程序接收器复制3MB 缓冲区时、其成本约为50ms。

我们认为时间太长了。

 

下面是 appsink 回调函数

SAMPLE = GST_APP_SINK_PULL_SAMPLE (GST_APP_SINK (对象));

Buffer = GST_SAMPLE_GET_buffer (sample);

GST_buffer_map (buffer、&map、GST_MAP_read);

gettimeofday (&tv1、&tz);

memcpy (pConv、map.data、map.size);

gettimeofday (&tv2、&tz);

tv2–tv1 = 50ms

因此、我们想知道如何减少复制时间

 

我们的 am5728是定制板。

处理器 SDK 为03.03.00.04

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

    memcpy 很慢。 尝试使用 DMA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复
    以及如何使用 DMA、毕竟我们不知道缓冲区的(来自应用程序接收器)物理地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已要求软件团队进行评论。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    VPE 和编解码器的缓冲器正在从 OMAP-bo 中分配。 omapdrm 驱动程序不支持对其分配的缓冲区执行缓存操作、因此在没有启用读取缓存的情况下、memcpy 速度较慢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好, Manisha

              首先感谢您的回复。

              那么、我们如何解决这个问题

              如果我们使用 EDMA 来传输数据、以及如何从应用接收器获取物理地址。

              或者、您是否有任何其他建议、 我们只想从 gstreamer 流水线复制数据。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果能够修改代码、则可以从 CMEM 驱动程序(它支持高速缓存管理)而不是从 omapdrm 驱动程序分配缓冲区。 检查双摄像头演示环回.c 文件(遵循#ifdef USE_CMEM_BUF 下的代码)以了解如何从 CMEM 驱动器分配缓冲区。
    git.ti.com/.../master
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好, Manisha

              是的,我们可以使用 CMEM 来分配缓冲区,例如 alloc_cmem_buffer()

              但我们对于如何在 gstreamer 流水线中使用 CMEM 缓冲器感到非常困惑。

    此致

       

          

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

    大家好

        任何人都可以帮助我解决这个问题

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要修改 gstreamer 插件以从 cmem 分配缓冲区。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ,我如何获取 gstreamer 插件源代码?

    谢谢  

    此致

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

    您可以从此处获取-

    git.ti.com/.../gst-plugin-ducati

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

    大家好

    几个月前、我们发现 am5728 appsink 性能非常低、我们向 e2e 发送一篇文章、下面是网站。

    https://e2e.ti.com/support/arm/sitara_arm/f/791/t/589689

    e2e 已经告诉我们解决方案,修改了 appsink 的源代码并将内存分配从 OMAP-bo 更改为 CMEM。

    现在我们还不知道如何修改源代码,因为 我们找不到内存分配代码。

    您能给我们一些建议。

    我们的 Processor SDK RT3.3

     

    谢谢

    此致