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:AM62A 上的流开关崩溃问题(wave5 解码器)

Guru**** 2923960 points

Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1630272/am62a7-stream-switching-crash-issue-on-am62a-wave5-decoder

器件型号: AM62A7
主题: AM62P 中讨论的其他器件

尊敬的工程师:

我目前正在两个不同端口之间切换流、每个流都从不同的摄像头推送。 但是、我在运行时遇到随机崩溃。

在启动过程中、我注意到以下错误:
 rmmod: ERROR: Module wave5 is in use

为了解决这个问题、我进行了 init_script.sh 如下修改:

diff --git a/edgeai-gst-apps/init_script.sh b/edgeai-gst-apps/init_script.sh
old mode 100755
new mode 100644
index 69d6d19..ab9dbd0
--- a/edgeai-gst-apps/init_script.sh
+++ b/edgeai-gst-apps/init_script.sh
@@ -59,8 +59,7 @@ elif [ "$SOC" == "j784s4" ]; then
     k3conf set clock 400 1 720000000 &> /dev/null #VPAC1
     k3conf set clock 92 0 480000000 &> /dev/null #DMPAC
 elif [ "$SOC" == "am62a" ]; then
-    rmmod wave5
-    modprobe wave5 vpu_poll_interval=1
+    lsmod | grep -q wave5 || modprobe wave5 vpu_poll_interval=1
 fi

尽管发生了此更改、但我仍然看到运行时错误和警告:

[  539.203443] vdec 30210000.video-codec: wave5_vpu_enc_finish_encode: encoded buffer (1) was not in ready queue 0.
[  539.214308] vdec 30210000.video-codec: wave5_vpu_enc_finish_encode: no source buffer with index: 1 found
[  573.338134] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
[  573.348087] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
[  573.358347] vdec 30210000.video-codec: wave5_vpu_dec_finish_decode: could not get output info.

** (python3:1854): WARNING **: v4l2h264dec0: Too old frames, bug in decoder -- please file a bug

问题似乎与 wave5 切换流时的 VPU 解码器或缓冲区处理有关。

请告知:

  • 是否可以通过适当的处理方法来解决此问题?
  • 或者、是否有任何推荐的流切换替代方法来避免这些崩溃?

此致、
Sajan

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

    您好、Sajan、

    您使用哪个 SDK 版本来验证这一点? 您能否共享用于切换流的应用程序和/或 gstreamer 流水线?

    此致

    Suren

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

    您好、Suren、

    ]您使用哪个 SDK 版本来验证此问题? [/报价]

    SDK 10.01。

    Gstreamer 流水线:

    pipeline_str = (
                f"udpsrc port={config['port']} address=127.0.0.1 "
                "caps=\"application/x-rtp,media=video,encoding-name=H264,payload=96\" ! "
                "rtph264depay ! h264parse config-interval=-1 ! "
                "v4l2h264dec capture-io-mode=dmabuf ! "
                "kmssink sync=false force-modesetting=true"
            )
    

    BR、
    Sajan

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

    您好、Sajan、

    如果可以迁移到使用最新的 SDK 并按照下面提供的过程将 GStreamer 版本升级到 1.24.13、则在视频流之间切换时不会出现内存泄漏问题。

    请在下方找到使用 Yocto Scarthgap 迁移到 GStreamer 1.24.13 的最新内核步骤。

    该文件夹包含两 项内容:

    可使用 AM62P EVM 进行测试的 WIC 迁移。

    Yocto 构建文件是最新的 ZIP 文件。  

    链接:tidrive.ext.ti.com/.../de3f3067-fc1a-439a-844b-4a4ac9bf9310

    访问代码:cS1gyv2_

    假设您使用 OE 层配置来使用设置环境、则在 AM62P EVM 上通过这些更改在终端复制构建的步骤  

    processor-sdk-scarthgap-chromium-11.01.16.13-config.txt

    1.

    解压缩 yocto-build-files-latest.zip 文件。 您应该会看到三个文件夹 (oe-core、arago、ti)、每个文件夹都包含要应用的补丁。

    2.

    复制 Yocto 设置的 source/oe-core、source/meta-arago 和 source/meta-ti 目录中的相应补丁。

    3.

    cd 进入 source/oe-core 并运行 git am 0001-move-oe-core-to-1.24.13.patch
    cd 进入 sources/meta-arago 并运行 git am 0001-meta-arago-patchs-to-migrate-to-1.24.13.patch
    cd 进入 source/meta-ti 并运行 git am 0001-meta-ti-meta-ti-bsp-update-to-latest-kernel.patch

    4.

    从配置中移除 qt6 和铬、以加快时间并消除 qt6 相关性错误
    -这将在 build/conf/bblayer.conf 中


    5.

    在 local.conf 的底部添加行以删除需要 qt6 的其他依赖项
    image_install:remove =“ti-apps-launcher qmltermwidget“
    演示:删除=“ti-apps-launcher“


    6.

    更新 meta-ti-SDK 层中的文件以更改 gstreamer 文件的 PV
    -找到在 sources/meta-tisdk/meta-ti-basic/食谱 多媒体/gstreamer /

    mv gstreamer1.0-plugins-good_1.22.%.bbappend gstreamer1.0-plugins-good_1.24.%.bbappend

    7. 进入 Build 目录并发布 Build。

    构建>。 conf/setenv

    build>机器=am62pxx-EVM bitbake -k tisdk-default-image

    请告诉我该怎么做。

    此致

    Suren

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

    您好、Suren、

    感谢您发送编修。 我正在使用 AM62A EVM、并想检查这些相同的补丁和步骤是否也适用于 AM62A、或者是否需要进行任何 AM62A 特定的更改。

    此外、我无法访问您共享的 TI 驱动器链接。 我尝试通过 ENT.TI.COM 登录、但两个登录选项都失败了 您能否检查链接/访问权限是否仍然有效、或通过其他方法共享文件?

    此外、您能否解释一下为什么在 GStreamer 升级的同时还需要内核更新(meta-ti-BSP 补丁)? 内存泄漏部分是内核/驱动程序方面的问题吗?

    我目前正在使用 SDK 10.01、但尚未在 Scarthgap SDK 上测试我的应用程序。 您建议在应用这些 GStreamer 补丁之前首先在 Scarthgap 上验证应用程序、还是应该同时完成这两项更改?

    再次感谢您的帮助。

    此致、
    Sajan

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

    您好、Sajan、

    GStreamer 版本没有从 10.1 更改为 11.1 SDK、且 AM62A/AM62 的编解码器 IP 相同、因此此功能有效。

    如果您可以仅使用 gstreamer 相关补丁并且不想升级内核、那么即使在 AM62A 上、它也应该可以正常工作。

    请告诉我该怎么做。

    此致、

    Suren

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

    您好、Suren、

    您能帮助我访问您提到的补丁文件吗


    此致、
    Sajan

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

    您好、Sajan、

    我以前的帖子有下载的信息:

    [引述 userid=“533957“ url=“~/support/processors-group/processors/f/processors-forum/1630272/am62a7-stream-switching-crash-issue-on-am62a-wave5-decoder/6287925

    可使用 AM62P EVM 进行测试的 WIC 迁移。

    Yocto 构建文件是最新的 ZIP 文件。  

    链接:tidrive.ext.ti.com/.../de3f3067-fc1a-439a-844b-4a4ac9bf9310

    访问代码:cS1gyv2_

    [/报价]

    zip 文件中应包含补丁。

    此致

    Suren

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

    您好、Suren、

    我尝试访问它,不幸的是,登录不能为我工作.


    此致、
    Sajan

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

    您好、Sajan、

    检查您是否能够访问此内容:

    tidrive.ext.ti.com/.../de3f3067-fc1a-439a-844b-4a4ac9bf9310

    jc2hH9`C

    此致

    Suren

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

    您好、Suren、

    您提到了以 processor-sdk-scarthgap-chromium-11.01.16.13-config.txt 为基础、您能否还确认我应该使用 PROCESSOR-SDK-ANALYESSOR-11.01.07.05 还是 11.02.00? 我是否可以对其应用给定的补丁?

    另外、您能否验证以下日志不是编程错误(例如不正确的资源清理,内存未释放等)、并且是解码器/编码器的已知/预期警告?

    v4l2h264dec0: Too old frames, bug in decoder -- please file a bug
    vdec 30210000.video-codec: wave5_vpu_enc_finish_encode: encoded buffer (1) was not in ready queue 0.
    vdec 30210000.video-codec: wave5_vpu_enc_finish_encode: no source buffer with index: 1 found

    谢谢!

    此致、
    Sajan

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

    您好、Sajan、

    使用 AM62A 或 AM62P 进行验证? 如果使用 AM62P、则 scarthgap-chromimum-11.01.16.13-config.txt 作为基础可以工作。  

    对于 AM62A — 您需要使用  

    PROCESSOR-SDK-analyticse-11.01.07.05

    最新的 SDK 版本中已修复上述所有警告/错误。   

    此致

    Suren

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

    尊敬的 Suren:

    是的、我正在使用 AM62A。
    尝试使用 PROCESSOR-SDK-ANALYSION-11.01.07.05 中提供的补丁进行修补。

    sources/oe-core$ git am 0001-move-oe-core-to-1.24.13.patch 
    Applying: move oe-core to 1.24.13
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/CVE-2025-47806.patch: does not exist in index
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/CVE-2025-47807.patch: does not exist in index
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/CVE-2025-47808.patch: does not exist in index
    error: patch failed: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.12.bb:10
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.12.bb: patch does not apply
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/CVE-2025-47183-001.patch: does not exist in index
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/CVE-2025-47183-002.patch: does not exist in index
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/CVE-2025-47219.patch: does not exist in index
    error: patch failed: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.12.bb:4
    error: meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.12.bb: patch does not apply
    Patch failed at 0001 move oe-core to 1.24.13
    hint: Use 'git am --show-current-patch=diff' to see the failed patch
    When you have resolved this problem, run "git am --continue".
    If you prefer to skip this patch, run "git am --skip" instead.
    To restore the original branch and stop patching, run "git am --abort".
    
    sources/meta-ti$ git am 0001-meta-ti-meta-ti-bsp-update-to-latest-kernel.patch 
    Applying: meta-ti: meta-ti-bsp: update to latest kernel
    error: patch failed: meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb:22
    error: meta-ti-bsp/recipes-kernel/linux/linux-ti-staging_6.12.bb: patch does not apply
    Patch failed at 0001 meta-ti: meta-ti-bsp: update to latest kernel
    hint: Use 'git am --show-current-patch=diff' to see the failed patch
    When you have resolved this problem, run "git am --continue".
    If you prefer to skip this patch, run "git am --skip" instead.
    To restore the original branch and stop patching, run "git am --abort".
    
    sources/meta-arago$ git am 0001-meta-arago-patches-to-migrate-to-1.24.13.patch 
    Applying: meta-arago patches to migrate to 1.24.13
    .git/rebase-apply/patch:165: trailing whitespace.
     
    .git/rebase-apply/patch:169: trailing whitespace.
     
    .git/rebase-apply/patch:178: trailing whitespace.
     
    .git/rebase-apply/patch:187: trailing whitespace.
     
    .git/rebase-apply/patch:195: trailing whitespace.
     
    warning: squelched 36 whitespace errors
    warning: 41 lines add whitespace errors.
    

    我尝试手动修补每个文件并进行重建。您能建议修复吗?

    此致、
    Sajan

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

    您好、Sajan

    我期待这是为了在 AM62A 上复制它、下周中旬回复您。 AM62A 的用途是什么? 我想大家都在使用 AM62P、所以与大家分享了这些补丁、它解决了一些与带有 gstreamer 的 V4L2 框架相关的问题、并修复了一些内存泄漏问题。

    此致

    Suren

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

    尊敬的 Suren:

    我们只是跟进我们讨论的 AM62A 流切换问题、如果有任何更新、请告知我。

    此致、
    Sajan

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

    您好、Suren、

    请您分享这个补丁。

    此致、
    Sajan

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

    您好、Suren、

    请提供该补丁。

    此致、
    Sajan

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

    您好、Sajan、

    在 AM62A 上、您可以获取 WIC 映像并重新测试您的应用程序、让我们知道它是否解决了问题:

    tidrive.ext.ti.com/.../d6939a39-8f98-4131-a214-28705a2c4ebd

    4mu3r!先生

    请告诉我它如何与此图像。

    此致

    Suren

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

    尊敬的 Suren:

    我在 WIC 上尝试了我的应用程序、似乎有一些错误日志:

    root@am62axx-evm:/opt# ./sample_app/app_edgeai.py config/custom_config.yaml -n
    libtidl_onnxrt_EP loaded 0x12ca1420 
    Final number of subgraphs created are : 1, - Offloaded Nodes - 124, Total Nodes - 124 
    APP: Init ... !!!
       526.059427 s: APP_LOG: ERROR: Unable to map memory @ 0xa1000000 of size 262144 bytes !!!
    APP: ERROR: Log writer init failed !!!
    APP_LOG: ERROR: Unable to map memory @ 0xa2000000 of size 3288576 bytes !!!
    APP: ERROR: File IO writer init failed !!!
    APP: Init ... Done !!!
    Traceback (most recent call last):
      File "/opt/./sample_app/app_edgeai.py", line 39, in <module>
        main(sys.argv)
      File "/opt/./sample_app/app_edgeai.py", line 16, in main
        demo = EdgeAIDemo(config)
               ^^^^^^^^^^^^^^^^^^
      File "/opt/sample_app/edge_ai_class.py", line 94, in __init__
        model_obj.create_runtime()
      File "/usr/lib/python3.12/site-packages/edgeai_dl_inferer.py", line 315, in create_runtime
        self.run_time = RunTime(self.artifacts,
                        ^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/site-packages/edgeai_dl_inferer.py", line 170, in __init__
        self.interpreter = _onnxruntime.InferenceSession(
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 387, in __init__
        self._create_inference_session(providers, provider_options, disabled_optimizers)
      File "/usr/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 439, in _create_inference_session
        sess.initialize_session(providers, provider_options, disabled_optimizers)
    onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Create state function failed. Return value:-1

    edgeai-gst-apps 也有同样的问题。
    您能帮我解决一下吗

    此致、
    Sajan

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

    您好、Sajan

    e2e.ti.com/.../libgstvideo4linux2.so

    请将其复制到 rootfs (sudo cp libgstvideo4linux2.so/media//rootfs/usr/lib/gstreamer-1.0/libgstvideo4linux2.so)

    试一下。

    希望这有所帮助

    此致

    Suren

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

    您好、Suren、

    [引述 userid=“533957“ url=“~/support/processors-group/processors/f/processors-forum/1630272/am62a7-stream-switching-crash-issue-on-am62a-wave5-decoder/6321878

    e2e.ti.com/.../libgstvideo4linux2.so

    请将其复制到 rootfs (sudo cp libgstvideo4linux2.so/media//rootfs/usr/lib/gstreamer-1.0/libgstvideo4linux2.so)

    [/报价]

    我尝试过以下操作:

    root@am62axx-evm:/opt# ls -la /usr/lib/gstreamer-1.0/libgstvideo*
    -rwxr-xr-x 1 root root 398968 Apr 24 04:43 /usr/lib/gstreamer-1.0/libgstvideo4linux2.so
    -rwxr-xr-x 1 root root  68352 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideobox.so
    -rwxr-xr-x 1 root root  68728 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideoconvertscale.so
    -rwxr-xr-x 1 root root  68704 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideocrop.so
    -rwxr-xr-x 1 root root  68944 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideofilter.so
    -rwxr-xr-x 1 root root  67896 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideofiltersbad.so
    -rwxr-xr-x 1 root root  68504 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideoframe_audiolevel.so
    -rwxr-xr-x 1 root root 134784 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideomixer.so
    -rwxr-xr-x 1 root root 334408 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideoparsersbad.so
    -rwxr-xr-x 1 root root  68512 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideorate.so
    -rwxr-xr-x 1 root root  67712 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideosignal.so
    -rwxr-xr-x 1 root root  68656 Mar  9  2018 /usr/lib/gstreamer-1.0/libgstvideotestsrc.so
    

    遗憾的是、仍然存在错误。

    root@am62axx-evm:/opt# ./sample_app/app_edgeai.py -n
    libtidl_onnxrt_EP loaded 0x1a025d30 
    Final number of subgraphs created are : 1, - Offloaded Nodes - 283, Total Nodes - 283 
    APP: Init ... !!!
       552.519995 s: APP_LOG: ERROR: Unable to map memory @ 0xa1000000 of size 262144 bytes !!!
    APP: ERROR: Log writer init failed !!!
    APP_LOG: ERROR: Unable to map memory @ 0xa2000000 of size 3288576 bytes !!!
    APP: ERROR: File IO writer init failed !!!
    APP: Init ... Done !!!
    Traceback (most recent call last):
      File "/opt/./sample_app/app_edgeai.py", line 38, in <module>
        main(sys.argv)
      File "/opt/./sample_app/app_edgeai.py", line 16, in main
        demo = EdgeAIDemo(config)
               ^^^^^^^^^^^^^^^^^^
      File "/opt/sample_app/edge_ai_class.py", line 85, in __init__
        model_obj.create_runtime()
      File "/usr/lib/python3.12/site-packages/edgeai_dl_inferer.py", line 315, in create_runtime
        self.run_time = RunTime(self.artifacts,
                        ^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/site-packages/edgeai_dl_inferer.py", line 170, in __init__
        self.interpreter = _onnxruntime.InferenceSession(
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 387, in __init__
        self._create_inference_session(providers, provider_options, disabled_optimizers)
      File "/usr/lib/python3.12/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 439, in _create_inference_session
        sess.initialize_session(providers, provider_options, disabled_optimizers)
    onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Create state function failed. Return value:-1
    


    此致、
    Sajan

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

    您好、Suren、

    请您提供同样的帮助。

    此致、
    Sajan

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

    您好、Sajan、

    您是否在 uEnv.txt 中的 name_overlays 中添加了 ti/k3-am62a7-sk-edgeai.dtbo、并查看您看到的错误是否消失了。  

    请参阅: https://software-dl.ti.com/processor-sdk-linux/esd/AM62AX/11_01_07_05/exports/docs/devices/AM62AX/edgeai/faq.html#why-does-error-unable-to-map-memory-0xa2000000-appear-after-applying-a-custom-dtbo-using-name-overlays-from-sdk-11-1-with-edgeai

    此致

    Suren

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

    您好、Suren、

    建议的解决方案是否可行。 我正在尝试针对 SDK v11 重新编译模型。

    之后我会更新您关于 kmssink 上的视频切换。

    谢谢。

    此致、
    Sajan

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

    您好、Suren、

    我尝试通过 kmssink 测试两个 RTSP 视频流的切换。 在 SDK 10 上运行相同的应用时、我观察到 RAM 使用量随着时间的推移而逐渐增加、这最终导致内存不足的情况和应用程序故障。

    在从两个应用程序中删除视频保存逻辑及其相关功能后、RAM 的使用保持稳定、并且两个应用程序继续运行、而没有任何明显的内存增长。

    从我最初的观察可以看出、SDK 11 上的视频切换行为看起来是稳定的、并且不再出现之前看到的终端错误。 但是、在 SDK 11 上的测试期间、观察到以下内核崩溃/错误(附加了日志)。

    基于这种行为、RAM 消耗问题是否与视频保存实现、缓冲区处理或流水线内可能的内存泄漏有关? 请分享您对导致记忆逐渐增加和最终崩溃的原因的想法。

    日志:

    [  852.524614] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000160
    [  852.533449] Mem abort info:
    [  852.536284]   ESR = 0x0000000096000006
    [  852.540073]   EC = 0x25: DABT (current EL), IL = 32 bits
    [  852.545409]   SET = 0, FnV = 0
    [  852.548485]   EA = 0, S1PTW = 0
    [  852.551678]   FSC = 0x06: level 2 translation fault
    [  852.556619] Data abort info:
    [  852.559507]   ISV = 0, ISS = 0x00000006, ISS2 = 0x00000000
    [  852.565039]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [  852.570137]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [  852.575466] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000888da6000
    [  852.581925] [0000000000000160] pgd=08000008860a7003, p4d=08000008860a7003, pud=0800000886f11003, pmd=0000000000000000
    [  852.592569] Internal error: Oops: 0000000096000006 [#1] PREEMPT SMP
    [  852.598839] Modules linked in: wave5 imx219 v4l2_cci ds90ub953 rpmsg_ctrl snd_soc_hdmi_codec rpmsg_char e5010_jpeg_enc snd_soc_simple_card snd_soc_simple_card_utils crct10dif_ce v4l2_jpeg displa]
    [  852.672472] CPU: 3 UID: 0 PID: 1567 Comm: vpu_irq_thread Tainted: G           O       6.12.35-ti-00946-g72f48d59b8f0 #1
    [  852.683250] Tainted: [O]=OOT_MODULE
    [  852.686734] Hardware name: Texas Instruments AM62A7 SK (DT)
    [  852.692298] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [  852.699256] pc : wave5_vdi_write_register+0x0/0x14 [wave5]
    [  852.704761] lr : wave5_vpu_clear_interrupt+0x34/0x48 [wave5]
    [  852.710426] sp : ffff800083ff3d80
    [  852.713732] x29: ffff800083ff3d80 x28: ffff000812c24000 x27: 0000000000005150
    [  852.720861] x26: 0000000000000100 x25: 0000000000000000 x24: ffff000812cbfd10
    [  852.727997] x23: 0000000000000000 x22: 0000000000000100 x21: 0000000000000000
    [  852.735132] x20: 0000000000000100 x19: ffff000812c24000 x18: 0000000000000001
    [  852.742267] x17: 0000000000000000 x16: 0000000000000000 x15: 010761a223d989a0
    [  852.749399] x14: 029d887c69ac319e x13: ffff0008012a5300 x12: 0000000000000001
    [  852.756534] x11: ffff0008012a5300 x10: ffff00080efeb200 x9 : ffff00087f8272c0
    [  852.763666] x8 : ffff0008012a5300 x7 : ffff000801bc0710 x6 : 0000000000000002
    [  852.770802] x5 : 0000000000000400 x4 : 0000000000000902 x3 : ffff00080efeb180
    [  852.777935] x2 : 0000000000000000 x1 : 0000000000000030 x0 : 0000000000000000
    [  852.785068] Call trace:
    [  852.787513]  wave5_vdi_write_register+0x0/0x14 [wave5]
    [  852.792666]  wave5_vpu_handle_irq+0xdc/0x1a8 [wave5]
    [  852.797639]  wave5_vpu_irq_work_fn+0x3c/0x4c [wave5]
    [  852.802613]  kthread_worker_fn+0xc4/0x174
    [  852.806629]  kthread+0x110/0x114
    [  852.809851]  ret_from_fork+0x10/0x20
    [  852.813431] Code: 9104a042 91120021 95b486de 17fffff4 (f940b000) 
    [  852.819517] ---[ end trace 0000000000000000 ]---
    

    此致、
    Sajan

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

    您好、Sajan、

    您能帮助我们在 11.1 SDK 上重现此问题吗? 因为我们最终没有看到这个问题

    此致

    Suren

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

    您好、Suren、

    我尝试粘贴代码、但代码插入不起作用。 我同时尝试了两个应用、两个接收器都是 rtsp、通过一个简单的 python 脚本切换流。 已在运行 30 分钟以上后得到问题。

    此致、
    Sajan

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

    您好、Sajan、

    我们可以在达拉斯时间的星期四 Morning(达拉斯时间)进行同步、看看您的设置中可能会发生什么情况?

    此致

    Suren

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

    您好、Suren、

    好的、没问题。

    此致、
    Sajan

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

    已向您发送一封包含详细信息的电子邮件。

    此致

    Suren

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

    您好、Sajan

    我当前运行以下流水线、其中 IMX219 连接到我的 AM62A、并根据我之前提供的补丁、GStreamer 升级到 1.24。 我能够每 2 秒启动/停止流水线、并且没有发现任何问题。

    我运行了一个类似以下应用程序:

    /* imx219-switch-fakesink.c
     *
     * GStreamer pipeline: v4l2src -> tiovxisp -> v4l2h264enc -> fakesink
     * Cycles: record 2s, pause 2s, repeat.
     *
     * Build:
     *   gcc $(pkg-config --cflags --libs gstreamer-1.0) \
     *       -o imx219-switch-fakesink imx219-switch-fakesink.c
     */
    
    #include <gst/gst.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <signal.h>
    #include <unistd.h>
    
    #define DEVICE "/dev/video-imx219-cam0"
    
    #define PIPELINE_STR \
        "v4l2src device=/dev/video-imx219-cam0 io-mode=dmabuf-import ! " \
        "video/x-bayer,width=1920,height=1080,format=rggb ! " \
        "tiovxmemalloc pool-size=2 ! queue max-size-bytes=0 ! " \
        "tiovxisp sensor-name=\"SENSOR_SONY_IMX219_RPI\" "\
        "dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_1920x1080.bin " \
        "sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_1920x1080.bin sink_0::device=/dev/v4l-imx219-subdev0 ! " \
        "video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! tee name=t " \
        "t. ! queue ! kmssink driver-name=tidss sync=false " \
        "t. ! queue ! v4l2h264enc ! fakesink "
    
    static GstElement *pipeline = NULL;
    static GstBus     *bus      = NULL;
    
    static volatile int keep_running = 1;
    static volatile int is_running   = 0;
    
    /* ------------------------------------------------------------------ */
    
    /* Poll the bus for error / EOS messages (non-blocking). */
    static void check_messages(void)
    {
        if (!bus)
            return;
    
        GstMessage *msg;
        while ((msg = gst_bus_pop_filtered(bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS))) {
            switch (GST_MESSAGE_TYPE(msg)) {
            case GST_MESSAGE_ERROR: {
                GError *err   = NULL;
                gchar  *debug = NULL;
                gst_message_parse_error(msg, &err, &debug);
                fprintf(stderr, "Error: %s, %s\n",
                        err->message, debug ? debug : "none");
                g_error_free(err);
                g_free(debug);
                keep_running = 0;
                break;
            }
            case GST_MESSAGE_EOS:
                printf("End of stream reached\n");
                break;
            default:
                break;
            }
            gst_message_unref(msg);
        }
    }
    
    /* Sleep for `ms` milliseconds in 100 ms increments, checking messages
     * and honouring the keep_running flag. */
    static void sleep_ms(int ms)
    {
        for (int i = 0; i < ms / 100 && keep_running; i++) {
            usleep(100000);
            check_messages();
        }
    }
    
    /* ------------------------------------------------------------------ */
    
    static void create_pipeline(void)
    {
        GError *error = NULL;
    
        pipeline = gst_parse_launch(PIPELINE_STR, &error);
        if (!pipeline || error) {
            fprintf(stderr, "Failed to create pipeline: %s\n",
                    error ? error->message : "unknown error");
            if (error)
                g_error_free(error);
            exit(1);
        }
    
        bus = gst_element_get_bus(pipeline);
    }
    
    static void start_recording(void)
    {
        if (pipeline) {
            gst_element_set_state(pipeline, GST_STATE_NULL);
            gst_object_unref(pipeline);
            pipeline = NULL;
        }
        if (bus) {
            gst_object_unref(bus);
            bus = NULL;
        }
    
        create_pipeline();
        gst_element_set_state(pipeline, GST_STATE_PLAYING);
        printf("Recording started\n");
        is_running = 1;
    }
    
    static void stop_recording(void)
    {
        if (pipeline) {
            gst_element_send_event(pipeline, gst_event_new_eos());
            usleep(500000); /* 0.5 s – let EOS propagate */
            gst_element_set_state(pipeline, GST_STATE_NULL);
            printf("Recording stopped\n");
        }
        is_running = 0;
    }
    
    static void cleanup(void)
    {
        if (pipeline) {
            gst_element_set_state(pipeline, GST_STATE_NULL);
            gst_object_unref(pipeline);
            pipeline = NULL;
        }
        if (bus) {
            gst_object_unref(bus);
            bus = NULL;
        }
        printf("Cleanup complete\n");
    }
    
    /* ------------------------------------------------------------------ */
    
    static void signal_handler(int sig)
    {
        (void)sig;
        printf("\nInterrupted by user. Stopping...\n");
        keep_running = 0;
    }
    
    int main(int argc, char *argv[])
    {
        gst_init(&argc, &argv);
        signal(SIGINT, signal_handler);
    
        while (keep_running) {
            printf("\n--- Starting new recording cycle ---\n");
    
            start_recording();
            sleep_ms(2000);
            stop_recording();
    
            printf("Pausing for 2 seconds\n");
            sleep_ms(2000);
        }
    
        if (is_running)
            stop_recording();
    
        cleanup();
        return 0;
    }

    日志:

    e2e.ti.com/.../imx219_2D00_enc_2D00_switch_2D00_log.txt

    您能否尝试在终端运行相同的应用并进行观察、以便我们能够在本周晚些时候设置调试调用。

    此致

    Suren

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

    您好、Suren、

    请尝试通过击键或鼠标事件切换流。 我还在 rx0 和 rx1 上使用了 2 个摄像头。 使用的接收器为 udpsink、然后从端口访问视频。

    此致、
    Sajan

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

    您好、Sajan、

    因此、您正在对每个摄像机捕获进行编码、并在网络上进行流式传输。 您是否每隔两秒在这些摄像机之间切换一次? 您是否能够运行我提供的应用程序?

    您能否分享有关切换方式的应用程序/示例流水线?

    此致

    Suren

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

    您好、Suren、

    因此您正在对每个摄像机捕获进行编码并在网络上流式传输

    是的。 此外、我还可以运行您提供的应用程序、它可以正常工作。

    您能否分享您的应用程序/示例流水线示例以了解如何切换?

    我正在共享 Google 驱动器链接、因为我无法在此聊天中插入代码。
    https://docs.google.com/document/d/1blvsq_zr3Qj33_jXYlz2Um9BMTMi-P01DoySqMUTPL4/edit?usp=sharing

    保持 CL 和 OD 应用程序输出到远程。
    例如:


    输出:
      输出 0:
        接收器:远程
        主机:127.0.0.1
        端口:8081
        第二百六十四章
        宽度:1280
        高度:720
        比特率:4000000
        GOP-大小:10.


    此致、
    Sajan