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.

[参考译文] AM62A7:GStreamer kmssink 延迟问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1503160/am62a7-gstreamer-kmssink-delay-question

器件型号:AM62A7

工具/软件:

我在尝试在屏幕上显示我的60fps 摄像头视频时、Gstreamer 出现问题。 我设置了一个流水线、如下所示:

v4l2src → tiovxisp → sink(kmssink or fakesink)

然后我尝试 fakesink  kmssink 将两个和用作接收端。 我将同一个探头连接到其接收器焊盘以测量延迟—检查缓冲器的 PT 与当前时间的关系。

借助 fakesink、一切均以低延迟的60fps 速率平稳运行。 但当我切换到 kmssink时、延迟会跳到 ​150ms 、帧速率下降到 ​30fps —尽管两个接收器都有 sync=false

有什么想法,为什么会 kmssink 导致这样一个巨大的减速?

下面是 fakesink pilepline 的信息

 > 此 ​灌电流探头 ​测量连续回调调用之间的时间差(以毫秒为单位)、这有助于估算实际帧速率。

下面是 kmssink 流水线的信息

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

    探头类型为  GST_PAD_PROBLE_TYPE_DATA_INDROWER
    探头功能为  

    GstPadProbeReturn sinkProbeCB(GstPad *pad, GstPadProbeInfo *info, gpointer user_data)
    {
        static uint32_t start_time = 0;
        printf("sinkprobe tick = [%d]\n", flork_tick() - start_time);
        start_time = flork_tick();
    
        GstBuffer *buffer = NULL;
    
        buffer = GST_PAD_PROBE_INFO_BUFFER(info);
        GstElement *pipeline = static_cast<GstElement *>(user_data);
        GstClockTime now = gst_element_get_current_running_time(pipeline);
    
        GstClockTime pts = GST_BUFFER_PTS(buffer);
        if (pts == GST_CLOCK_TIME_NONE)
        {
            g_print("Warning: Buffer has no PTS!\n");
            return GST_PAD_PROBE_PASS;
        }
    
        GstClockTime latency_ns = now - pts;
        double latency_ms = static_cast<double>(latency_ns) / 1e6;
    
        g_print("Frame PTS: %" GST_TIME_FORMAT " | Current Time: %" GST_TIME_FORMAT " | Latency: %.2f ms\n",
                GST_TIME_ARGS(pts), GST_TIME_ARGS(now), latency_ms);
    
        return GST_PAD_PROBE_OK;
    }
    

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

    尊敬的 Jason:

    您使用的是哪个 SDK 版本?

    如果您使用10.1 SDK、则可以使用 kmssink 的 skip-vsync 属性、并将其设置为 true、看看是否能使用 kmssink 看到60fps?

    此致、

    Suren

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

    SDK 版本: 10_00_00_08

    我查看 gst-inspect 并发现当前的 SDK 版本 kmssink 实际上具有一个​skip-vsync 属性。 将其设置为后 true、现在开始 ​60 FPS ​高速媒体访问单元。

    sinkprobe tick = [16]
    Frame PTS: 0:00:00.500944162 | Current Time: 0:00:00.558655352 | Latency: 57.71 ms
    sinkprobe tick = [17]
    Frame PTS: 0:00:00.517474387 | Current Time: 0:00:00.576154151 | Latency: 58.68 ms
    sinkprobe tick = [16]
    Frame PTS: 0:00:00.533994557 | Current Time: 0:00:00.592405181 | Latency: 58.41 ms
    sinkprobe tick = [17]
    Frame PTS: 0:00:00.550520222 | Current Time: 0:00:00.609898300 | Latency: 59.38 ms

    但我很 担心。 如果我们跳过 VSYNC、这是否会引入类似的问题 ​屏幕撕裂 ​或其他视觉伪影?

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

    使用其他 tiovx 模块进行进一步测试后、我找到了一些结果: ​

    kmssink 属性 : sync=false skip-vsync=true

    流水线型  v4l2src → tiovxisp → tiovxmultiscaler → kmssink、帧速率仍然下降到30fps、延迟较高。

    v4l2src -> tiovxisp ->tiovxmultiscaler -> kmssink
    
    sinkprobe tick = [34]
    Frame PTS: 0:00:03.007049018 | Current Time: 0:00:03.167870008 | Latency: 160.82 ms
    sinkprobe tick = [33]
    Frame PTS: 0:00:03.040058779 | Current Time: 0:00:03.201022453 | Latency: 160.96 ms
    sinkprobe tick = [35]
    Frame PTS: 0:00:03.073052819 | Current Time: 0:00:03.235262267 | Latency: 162.21 ms
    sinkprobe tick = [33]
    Frame PTS: 0:00:03.106052120 | Current Time: 0:00:03.268450817 | Latency: 162.40 ms

    令人惊讶的是、当使用时  v4l2src → tiovxisp → tiovxmultiscaler → tiovxmosaic → kmssink、性能提高到50fps、延迟更低、但它仍然不是全60fps。

    v4l2src -> tiovxisp -> tiovxmultiscaler ->tiovxmosaic -> kmssink
    
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.516314095 | Current Time: 0:00:00.624603323 | Latency: 108.29 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.549383716 | Current Time: 0:00:00.645592801 | Latency: 96.21 ms
    sinkprobe tick = [22]
    Frame PTS: 0:00:00.565924901 | Current Time: 0:00:00.667193151 | Latency: 101.27 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.582465837 | Current Time: 0:00:00.688164466 | Latency: 105.70 ms

    PS:  v4l2src→tiovxisp→tiovxmultiscaler→fakesink :  

    sinkprobe tick = [22]
    Frame PTS: 0:00:00.648727244 | Current Time: 0:00:00.745174800 | Latency: 96.45 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.665251769 | Current Time: 0:00:00.766227120 | Latency: 100.98 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.681776769 | Current Time: 0:00:00.787742271 | Latency: 105.97 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.714830359 | Current Time: 0:00:00.808779544 | Latency: 93.95 ms

    v4l2src→tiovxisp→tiovxmultiscaler→tiovxmosaic→fakesink

    sinkprobe tick = [21]
    Frame PTS: 0:00:00.666214074 | Current Time: 0:00:00.774878008 | Latency: 108.66 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.682735488 | Current Time: 0:00:00.795850003 | Latency: 113.11 ms
    sinkprobe tick = [22]
    Frame PTS: 0:00:00.715785779 | Current Time: 0:00:00.817246576 | Latency: 101.46 ms
    sinkprobe tick = [21]
    Frame PTS: 0:00:00.732311939 | Current Time: 0:00:00.838145352 | Latency: 105.83 ms

    它只能达到50fps

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

    尊敬的 Jason:

     v4l2src → tiovxisp → tiovxmultiscaler → kmssink、帧速率仍降至30fps、延迟较长

    请使用我 在此 E2E 的以下帖子中提供的补丁更新多标量插件。

    此致、

    建中

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

    尊敬的建中:

    v4l2src → tiovxisp → tiovxmultiscaler → tiovxmosaic → kmssink

    关于我之前在这个流水线中报告的高延迟问题-现在已经修复了。 在 tiovxmosaic 和 kmssink 之间添加 capsFilter 后、延迟在3-4秒输出后稳定在80-90ms 左右、并保持稳定的60fps。 谢谢!

    此致、

    Jason

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

    尊敬的 Jason:

    感谢您的更新。 您能否确认这个80-90ms 延迟适用于 多标量插件补丁?

    此致、

    建中

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

    尊敬的建中:

    我确认我更新了/opt/edgeai-gst-plugins/ext/tiovx/gsttiovxmultiscaler.c 和  tiovx_multi_calscaler_module 有更新、添加了 tiovx_multi_calscaler_module_update_input_params 函数调用。

    应届毕业生、

    Jason

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

    Jason、

    感谢您的确认。 我将关闭此工单。

    此致、

    建中

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

    尊敬的建中:

    如上所述更新插件后、我现在遇到了新问题。

    以下是我后续帖子中的消息的详细信息:

    AM62A7:分离视频流时出现 GStreamer 颜色格式错误-处理器论坛-处理器- TI E2E 支持论坛

    此致、

    Jason