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.

[参考译文] TDA4VM:GStreamer 只推送 TDA4VM 中的一帧流冻结

Guru**** 2966500 points

Other Parts Discussed in Thread: TDA4VM, SK-TDA4VM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1652793/tda4vm-gstreamer-is-pushing-only-one-frame---stream-freeze-in-tda4vm

器件型号: TDA4VM
主题中讨论的其他器件: TDA4VL、

您好、专家。

目前我正在 TDA4VM (edge-AI-SDK11) 中移植 AR0234 Bayer 传感器。

我的硬件设置

摄像头 1 --> J18 连接器-->平台

摄像头 2 --> J19 连接器-->平台

问题:当我同时串流两个摄像头流时、有时我的 gstreamer 只停留在一个帧中。 仅按下一个帧、之后不按下任何帧显示。 我已确保传感器侧没有问题。 如果我重新启动视频流、我也无法按键显示。

在流冻结情况下、以下是 perf 状态日志。 (HWA 中无)

image.png

当我正在流式传输单个摄像头时、没有流自由、如果重新启动也没有问题、则会出现“n“个时间。  

正常情况下的 PERF 状态:

image.png

 

每次使用 Ctrl+c 关闭流。

我使用以下脚本执行媒体链接和 GST 流水线。 请告诉我,如果管道建设有任何问题?.  
我相信硬件方面没有问题 、我对流水线构建(尤其是 tiovxisp 和 tiovxmosaic 插件)存有疑问。 我在 SDK10 中也遇到过同样的问题。  

注意:在脚本中、我使用了一些符号链接名称。   

root@tda4vm-sk:/opt/edgeai-gst-apps# cat CUTDA4_StreamLauncher.sh 
#!/bin/bash

# Ask user to select camera(s)
echo "Select camera(s):"
echo "1) J18"
echo "2) J19"
echo "3) Both J18 + J19"
read -p "Enter your choice (1/2/3): " cam_choice

# Validate the camera selection input
if [[ "$cam_choice" != "1" && "$cam_choice" != "2" && "$cam_choice" != "3" ]]; then
    echo "Invalid camera choice. Please select 1, 2, or 3."
    exit 1
fi

# Ask user to select resolution
echo "Select resolution:"
echo "1) 1920x1200"
echo "1) 1920x1080"
echo "2) 1280x720"
read -p "Enter your choice (1 or 2 or 3): " res_choice

# Resolution logic and validation
if [[ "$res_choice" == "1" ]]; then
    WIDTH=1920
    HEIGHT=1200
elif [[ "$res_choice" == "2" ]]; then
    WIDTH=1920
    HEIGHT=1080
elif [[ "$res_choice" == "3" ]]; then
    WIDTH=1280
    HEIGHT=720
else
    # Handle invalid resolution input
    echo "Invalid resolution choice"
    exit 1
fi

# Camera configuration parameters for J18
J18_DEV=0
J18_BRIDGE="cdns_csi2rx.4504000.csi-bridge"
J18_TICSI="4500000.ticsi2rx"
J18_SENSOR="ar0234 6-0042"
J18_VIDEO="/dev/video0"

# Camera configuration parameters for J19
J19_DEV=1                                     
J19_BRIDGE="cdns_csi2rx.4514000.csi-bridge"   
J19_TICSI="4510000.ticsi2rx"                  
J19_SENSOR="ar0234 7-0042"

# Function to get J19 video device node dynamically from media-ctl
get_j19_video_device() {
    # Extract the device node from the media-ctl output where context 0 is linked
    J19_VIDEO=$(media-ctl -d 1 -p -e "4510000.ticsi2rx context 0" | grep video | awk '{print $4}')
}

# Get the J19 video device dynamically
get_j19_video_device

# Function to configure media-ctl for a camera (J18/J19)
configure_camera() {
    local dev_id=$1
    local bridge=$2
    local ticsi=$3
    local sensor=$4
    local width=$5
    local height=$6

    # Set up media control for bridge, ticsi, and sensor with specified format
    media-ctl -d "$dev_id" --set-v4l2 "\"$bridge\":0[fmt:SGRBG10_1X10/1920x1200 field:none]"
    media-ctl -d "$dev_id" --set-v4l2 "\"$ticsi\":0[fmt:SGRBG10_1X10/1920x1200 field:none]"
    media-ctl -d "$dev_id" --set-v4l2 "\"$sensor\":0[fmt:SGRBG10_1X10/1920x1200]"
}

# GStreamer launching based on selected camera choice
case "$cam_choice" in
    1)
        # J18 only
        # Configure camera settings for J18
        configure_camera $J18_DEV "$J18_BRIDGE" "$J18_TICSI" "$J18_SENSOR" $WIDTH $HEIGHT

	# Launch GStreamer pipeline for J18
 #       gst-launch-1.0 -q \
 #           v4l2src device=$J18_VIDEO ! "video/x-raw,width=$WIDTH,height=$HEIGHT,format=UYVY" ! \
 #           kmssink sync=false driver-name=tidss -v
	
GST_DEBUG=3	gst-launch-1.0 v4l2src device=$J18_VIDEO io-mode=5 ! video/x-bayer, \
		width=$WIDTH, height=$HEIGHT, framerate=60/1, format=grbg10 ! \
		tiovxisp sink_0::device=/dev/v4l-ar0234-subdev0 sensor-name="SENSOR_AR0234"  \
		dcc-isp-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_viss.bin \
		sink_0::dcc-2a-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_2a.bin format-msb=9 ! \
		video/x-raw, format=NV12, width=$WIDTH, height=$HEIGHT, framerate=60/1 !  \
		kmssink driver-name=tidss sync=false

        ;;
    2)
        # J19 only
        # Configure camera settings for J19
        configure_camera $J19_DEV "$J19_BRIDGE" "$J19_TICSI" "$J19_SENSOR" $WIDTH $HEIGHT

	# Launch GStreamer pipeline for J19
	gst-launch-1.0 v4l2src device=$J19_VIDEO io-mode=5 ! video/x-bayer, \
		width=$WIDTH, height=$HEIGHT, framerate=60/1, format=grbg10 ! \
		tiovxisp sink_0::device=/dev/v4l-ar0234-subdev0 sensor-name="SENSOR_AR0234"  \
		dcc-isp-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_viss.bin \
		sink_0::dcc-2a-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_2a.bin format-msb=9 ! \
		video/x-raw, format=NV12, width=$WIDTH, height=$HEIGHT, framerate=60/1 !  \
		kmssink driver-name=tidss sync=false
        ;;
    3)
        # Both J18 and J19
        # Configure camera settings for both J18 and J19
        configure_camera $J18_DEV "$J18_BRIDGE" "$J18_TICSI" "$J18_SENSOR" $WIDTH $HEIGHT
        configure_camera $J19_DEV "$J19_BRIDGE" "$J19_TICSI" "$J19_SENSOR" $WIDTH $HEIGHT

	# Launch GStreamer pipeline for both J18 and J19
	gst-launch-1.0 -v v4l2src device=$J18_VIDEO io-mode=5 ! video/x-bayer,\
		width=$WIDTH, height=$HEIGHT, framerate=60/1, format=grbg10 ! queue leaky=2 ! \
		tiovxisp sink_0::device=/dev/v4l-ar0234-subdev0 sensor-name="SENSOR_AR0234"   \
		dcc-isp-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_viss.bin                      \
		sink_0::dcc-2a-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_2a.bin format-msb=9    \
		sink_0::pool-size=8 src::pool-size=8 ! video/x-raw, format=NV12,              \
		width=$WIDTH, height=$HEIGHT ! queue ! mosaic.sink_0 			      \
		v4l2src device=$J19_VIDEO io-mode=5 ! video/x-bayer,              \
		width=$WIDTH, height=$HEIGHT, framerate=60/1, format=grbg10 ! queue leaky=2 ! \
		tiovxisp sink_0::device=/dev/v4l-ar0234-subdev1 sensor-name="SENSOR_AR0234"   \
		dcc-isp-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_viss.bin                  \
		sink_0::dcc-2a-file=/opt/imaging/ar0234/linear/$HEIGHT/dcc_2a.bin format-msb=9 \
		sink_0::pool-size=8 src::pool-size=8 ! video/x-raw, format=NV12,              \
		width=1920, height=1200 ! queue ! mosaic.sink_1                               \
		tiovxmosaic name=mosaic                                                       \
		sink_0::startx="<0>" sink_0::starty="<0>" sink_0::widths="<960>" sink_0::heights="<640>" \
		sink_1::startx="<960>" sink_1::starty="<0>" sink_1::widths="<960>" sink_1::heights="<640>" ! \
		video/x-raw, width=1920, height=1080 ! kmssink driver-name=tidss sync=false
        ;;
    *)
        # Invalid camera choice
        echo "Invalid camera choice"
        exit 1
        ;;
esac
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jeyaprakash:

    我不确定流水线构建(特别是 tiovxisp 和 tiovxmosaic 插件)

    如果您用虚拟元素(如 videotestsrc)替换流水线中的摄像头/tiovxisp 元素、您是否观察到冻结?

    此致、

    Takuma

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

    否、这仅与 流水线中的摄像头/tiovxisp 元素一起发生。 即使流冻结问题发生后、我也能推送 videotestsrc 来显示、但无法推送摄像机缓冲区。

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

    尊敬的 Jeyaprakash:

    已理解、然后问题似乎隔离到摄像头/tiovxisp 设置中。 我建议将这个问题分开。

    1. 首先、您是否有一个已知可正常 使用的使用 AR0234 的单摄像头流水线?
    2. 其次、您是否有使用 AR0234 的已知可正常使用的双摄像头流水线?

    对于这两种情况、您可以使用 fakesink 作为虚拟灌入元素进行测试、以查看流水线中是否存在冻结。

    此致、

    Takuma

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

    尊敬的 Takuma:

    感谢您的答复、以下是观察结果。

    1.对于单相机,我没有面临任何问题,即使在多次重新启动.

    扭矩

    gst-launch-1.0 v4l2src device=/dev/video-ar0234-cam0 io-mode=5! video/x-Bayer、width=$width、height=$height、帧速率=60/1、format=grbg10! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=“sensor_AR0234“ dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9! video/x-raw、格式=NV12、宽度=1920、高度=1200、帧速率=60/1! kmssink driver-name=tidss sync=false

    fakesink

    gst-launch-1.0 v4l2src device=/dev/video-ar0234-cam0 io-mode=5! video/x-Bayer、width=$width、height=$height、帧速率=60/1、format=grbg10! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=“sensor_AR0234“ dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9! video/x-raw、格式=NV12、宽度=1920、高度=1200、帧速率=60/1! fakesink sync=false

    2.对于双相机流,即使是假的,我面临冻结的问题。

    扭矩

    gst-launch-1.0 -v v4l2src device=/dev/video-ar0234-cam0 io-mode=5! video/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=“sensor_AR0234“  dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9  SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、格式=NV12、宽度=1920、高度=1200! 排队! 马赛克.SINK_0    v4l2src device=/dev/video-ar0234-cam1 IO-mode=5! 视频/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev1 sensor-name=“sensor_AR0234“  dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin  SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9 SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、格式=NV12、宽度=1920、高度=1200! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0::高度=“<640>“ sink_1:::startx=“<960>“ sink_1:::starty=“<04>“ width=“<960>“ sink_1>“ 视频/x-RAW、宽度=1920、高度=1080! kmssink driver-name=tidss sync=false

    fakesink

    gst-launch-1.0 -v v4l2src device=/dev/video-ar0234-cam0 io-mode=5! video/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=“sensor_AR0234“  dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9  SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、格式=NV12、宽度=1920、高度=1200! 排队! 马赛克.SINK_0    v4l2src device=/dev/video-ar0234-cam1 IO-mode=5! 视频/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev1 sensor-name=“sensor_AR0234“  dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin  SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9 SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、格式=NV12、宽度=1920、高度=1200! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0::高度=“<640>“ sink_1:::startx=“<960>“ sink_1:::starty=“<04>“ width=“<960>“ sink_1>“ 视频/x-RAW、宽度=1920、高度=1080! fakesink sync=false

    从上述测试可以看出、使用马赛克块时、存在冻结问题。

    请分享您对此的见解。 如何解决这个问题。

    此致、

    Jeyaprakash C K.

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

    尊敬的 Jeyaprakash:

    我希望通过之前使用 videotestsrc 的测试来排除马赛克块。 但在执行 videotestsrc 替换实验时是否使用了马赛克块?

    您能否分享为 videotestsrc 实验运行的管道?

    此致、

    Takuma

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

    尊敬的 Takuma:

    感谢您的答复。

    使用上述管道(2 台摄像机)的流冻结后,我可以使用马赛克块推送 videotestsrc。 下面是我使用的 GST 流水线。

    gst-launch-1.0 -v videotestsrc pattern=0 is-live=true! video/x-raw、format=NV12、width=1920、height=1200、帧速率=60/1! 排队! mosaik.sink_0 videotestsrc pattern=3 is-live=true! video/x-raw、format=NV12、width=1920、height=1200、帧速率=60/1! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0::高度=“<640>“ sink_1:::startx=“<960>“ sink_1:::starty=“<04>“ width=“<960>“ sink_1>“ 视频/x-RAW、宽度=1920、高度=1080! kmssink driver-name=tidss sync=false

    此致、

    Jeyaprakash C K

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

    尊敬的 Jeyaprakash:

    谢谢。 马赛克看起来相同、输入分辨率+输入格式也相同。 我认为可以排除马赛克节点。

    接下来、能否运行两个单独的 GStreamer 流水线? 每个摄像头一个、然后是假的?

    如下所示:

    1. gst-launch-1.0 v4l2src device=/dev/video-ar0234-cam0 io-mode=5! video/x-Bayer、width=$width、height=$height、帧速率=60/1、format=grbg10! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=“sensor_AR0234“ dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9! video/x-raw、格式=NV12、宽度=1920、高度=1200、帧速率=60/1! fakesink sync=false >/dev/null &

    2. gst-launch-1.0 v4l2src device=/dev/video-ar0234-cam1 io-mode=5! 视频/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev1 sensor-name=“sensor_AR0234“  dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin  SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9 SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、格式=NV12、宽度=1920、高度=1200!  fakesink sync=false

    想看看逐个运行是否会暂停另一个流。 应该可以在两个不同的 GStreamer 流水线中同时运行两个单独的摄像头同步流。  

    此致、

    Takuma

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

    尊敬的 Takuma:

    感谢您提供的信息。

    如您所述、我已经尝试过该实验 (两个带有假水槽的独立 GST 管道)。  我可以多次重新启动流“n“、而不会出现任何问题。

    此外、我还观察到以下 perf 状态行为。 (其他要点)

    AE 模式= 0

    单摄像机箱:VPAC:21.38 %

    双摄像头箱: VPAC : 15.27 %(不是增加,而是减少)

    另外,当我使用 kmssink,预览是不正确的,我是 gettng 帧在较低的曝光与较低的 fps。

    AE 模式=1

    双摄像头箱:VPAC:45.21 %

    此致、

    Jeyaprakash C K.

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

    尊敬的 Jeyaprakash:

    有意思。 VPAC 使用量的减少可能表明 tiovxisp 存在某种问题。 它将解释为什么会发生冻结、因为如果其中一个流水线停止并且不再提供帧、它可以使整个流水线冻结。

    接下来的几个步骤基于此信息:

    • 是否可以设置 waylandsink、而不是 fakesink 和 kmssink? 您可能需要手动运行 systemctl start empty 以启动 wayland 组合器(如果已停机)。 这样就可以提供一个合成器、使您能够在两个单独的窗口中同时可视化两个流水线、以便您可以在运行多个 GStreamer 实例时直观地查看其中一个流水线是否死亡
    • 您是否还可以使用 gst_debug=tiovxisp:5 作为环境变量进行测试? 它应该会为 tiovxisp 元素提供更多详细的日志。 请分享此输出。

    此致、

    Takuma

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

    尊敬的 Jeyaprakash:

    感谢您的日志。 就 3 个对数而言似乎没有太大差异。 否则、两个单独的 GStreamer 流水线同时工作这一事实可能是初始化两个摄像头时出现了一些时序问题、尤其是初始化该节点的 ISP、因为它们都使用相同的 ISP 硬件。

    1. 您是否可以使用 gst_debug=*tiovx*:5 重新运行?
    2. 作为一项测试,您可以尝试使用 intervideosink 和 intervideossrc 来模拟原始流水线,但现在 Intervideosink 和 intervideossrc 允许您分离输入和输出流水线?

    此致、

    Takuma

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

    您好、Takuma、

    感谢您的答复。

    1.  

    场景 1:正确按大小写正确按帧时、

    e2e.ti.com/.../TI_2D00_RTOS_2D00_stream_2D00_freeze_2D00_logs.c

    场景 2:仅推入一帧的情况下、流冻结(注意:在流 GST 关闭期间、没有 deinit 日志)

    场景 3:当没有流推的案例时(此案例将在第二个案例之后发生)

    检查附件

    2.我尝试了以下的赞美

    端子 1:

    gst-launch-1.0 -e v4l2src device=/dev/video-ar0234-cam0 io-mode=5! 视频/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev0 sensor-name=SENSOR_AR0234 dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9 SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、format=NV12、width=1920、height=1200! Intervideosink channel=cam0 sync=fals

    2 号航站楼:

     gst-launch-1.0 -e v4l2src device=/dev/video-ar0234-cam1 io-mode=5! 视频/x-Bayer、宽度=1920、高度=1200、帧速率=60/1、格式=grbg10! 队列泄漏=2! tiovxisp SINK_0:::device=/dev/v4l-ar0234-subdev1 sensor-name=SENSOR_AR0234 dcc-isp-file=/opt/imaging/ar0234/linear/1200/dcc_viss.bin SINK_0::dcc-2a-file=/opt/imaging/ar0234/linear/1200/dcc_2a.bin format-msb=9 SINK_0:::pool-size=8 src::pool-size=8! video/x-raw、format=NV12、width=1920、height=1200! Intervideosink channel=CAM1 sync=false

    3 号航站楼:

    root@tda4vm-sk:/opt/edgeai-gst-apps # gst-launch-1.0 -v intervideosrc channel=cam0! video/x-raw、format=NV12、width=1920、height=1200! 排队! mosaich.sink_0 intervideosrc channel=CAM1! video/x-raw、format=NV12、width=1920、height=1200! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0::高度=“<640>“ sink_1:::startx=“<960>“ sink_1:::starty=“<04>“ width=“<960>“ sink_1>“ 视频/x-RAW、宽度=1920、高度=1080! kmssink driver-name=tidss sync=false

    但我无法从终端 3 推流显示,它显示黑色刮擦,我可以关闭和重新启动成功,但总是我得到黑色的蒸汽。 我在下面附加了在终端 3 中运行的 gstreamer 命令的 GST 日志

    root@tda4vm-sk:/opt/edgeai-gst-apps # gst-launch-1.0 -v intervideosrc channel=cam0! video/x-raw、format=NV12、width=1920、height=1200! 排队! mosaich.sink_0 intervideosrc channel=CAM1! video/x-raw、format=NV12、width=1920、height=1200! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0::高度=“<640>“ sink_1:::startx=“<960>“ sink_1:::starty=“<04>“ width=“<960>“ sink_1>“ 视频/x-RAW、宽度=1920、高度=1080! kmssink driver-name=tidss sync=false
    应用程序:初始化...!!
    7857.154088 s:内存:初始...!!
    7857.154149 s:MEM:初始化的 DMA 堆 (FD=5)!!!
    7857.154262 s:内存:初始化...完成!!
    7857.154275 s:ipc: init ...!!
    7857.226170 s:ipc:初始化...完成!!!
    remote_service:初始化...!!
    remote_service:初始化...完成!!!
    7857.233779s:GTC 频率= 200MHz
    应用程序:初始化...完成!!
    7857.233930 s:vx_zone_info:全局启用 vx_zone_error
    7857.233944 s:vx_zone_info:全局启用 vx_zone_warning
    7857.233953 s:vx_zone_info:全局启用 vx_zone_info
    7857.235265 s:vx_zone_info:[tivxPlatformCreateTargetId:169]已添加目标 MPU-0
    7857.235438 s:vx_zone_info:[tivxPlatformCreateTargetId:169]添加了目标 MPU-1
    7857.235541 s:vx_zone_info:[tivxPlatformCreateTargetId:169]添加了目标 MPU-2
    7857.235635 s:vx_zone_info:[tivxPlatformCreateTargetId:169]添加了目标 MPU-3
    7857.235648 s:vx_zone_info:[tivxInitLocal:202]初始化完成!!!
    7857.235660 s:vx_zone_info:全局禁用 vx_zone_info
    正在将管道设置为已暂停...
    流水线是实时的,不需要 PREROLL ...
    /GstPipeline:pipLine0/GstKMSSink:kmssink0:显示宽度=1920
    /GstPipeline:pipLine0/GstKMSSink:kmssink0:显示高度=1080
    流水线是 PREROLLED。
    正在设置播放管道...
    新时钟:GstSystemClock
    /GstPipeline:pipaine0/GstInterVideoSrc:intervideosrc0.GstPad:CAPS src = video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1200、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstCapsFilter:capsfilter0.GstPad:CAPS src = video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1200、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstQueue:queue0.GstPad:Sink:cap = video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1200、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstQueue:queue0.GstPad:Sink:cap = video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1200、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstCapsFilter:capsfilter0.GstPad:sink: caps= video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1200、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstTIOVXMosaic:Mosaic。GstTIOVXMisoPad:src:cap = video/x-raw、format=(字符串)NV12、width=(int) 1920、height=(int) 1080、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstCapsFilter:capsfilter2.GstPad:CAPS src = video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstKMSSink:kmssink0.GstPad:sink: caps= video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080、帧速率=(分数)30/1
    /GstPipeline:pipaine0/GstCapsFilter:capsfilter2.GstPad:sink: caps= video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080、帧速率=(分数)30/1
    重新分配延迟...
    处理中断。:99。
    中断:正在停止流水线...
    执行在 0:00:46.603916668 之后结束
    正在将管道设置为空...
    正在释放管道...
    应用程序:Deinit ...!!
    REMOTE_SERVICE:取消初始化...!!!
    REMOTE_SERVICE:取消初始化...完成!!!
    7903.963294 s : IPC: Deinit ...!
    7903.963903 S: IPC: DeInit ..完成!!
    7903.964030 s:内存:Deinit ...!!
    7903.964059 s:DDR_SHARED_MEM:Alloc's:14 alloc's、共 43892624 字节
    7903.964081 s:ddr_shared_mem:free's:14 free's of 43892624 bytes
    7903.964097 s:DDR_SHARED_MEM:open 的:0 个 0 字节的分配
    7903.964110 s:内存:Deinit ...完成!!
    应用程序:Deinit ...完成!!
    root@tda4vm-sk:/opt/edgeai-gst-apps

    下面是从端子 3 发出的关于硬件利用率的屏幕截图。

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

    尊敬的 Jeyaprakash:

    看起来取消初始化会在马赛克和/或 tiovxisp 中停止。 最有可能是 tiovxisp、因此 VISS 图中有一些挂起的东西、因为 场景 3 似乎错过了几个与 ISP 相关的日志、例如 Finish init 模块。

    要澄清一下、在启动时第一次运行时是否出现过该问题? 或者只有在同一引导中停止和启动后才会出现问题? 想看看插件的取消初始化代码中是否存在问题。

    此致、

    Takuma

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

    您好、Takuma、

    感谢您的回答。

    有时、启动后首次启动 GST 时会发生此问题。

    有时、在新启动后 GST 启动几次迭代后、会发生此问题。 但一旦冻结后、我需要重新启动才能再次获取流。

    此致、

    Jeyaprakash C K

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

    尊敬的 Jeyaprakash:

    好的、明白。 进行此设置和调试需要几天。 在初始化过程中、看起来是某种使 ISP 插件冻结的竞态条件。

    此致、

    Takuma

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

    尊敬的 Takuma:

    我们对此问题有任何更新吗?

    此致、

    Jeyaprakash C K  

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

    尊敬的 Jeyaprakash:

    目前正在尝试使用 TDA4VL 上的两个 IMX390 和融合板来设置测试。 应与 TDA4VM 在 ISP 方面具有相同的硬件加速器、因此如果问题与摄像头器件无关、应该出现问题。 还需要一天。

    此致、

    Takuma

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

    尊敬的 Jeyaprakash:

    道歉。 我们将再花几天时间讨论这个主题。

    此致、

    Takuma

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

    尊敬的 Jeyaprakash:

    在设置 IMX390 融合板时遇到了一些问题、因此我 获得了一些 与 SK-TDA4VM 兼容的 IMX219 摄像头来进行测试设置。 到目前为止、我可以使用马赛克和 ISP 元件在同一管道中同时运行两个摄像头流水线:

    • gst-launch-1.0 v4l2src device=/dev/video-imx219-cam0 io-mode=5! 视频/x-Bayer、宽度=1920、高度=1080、帧速率=30/1、格式=rggb10! 队列泄漏=2! tiovxisp sink_0::device=/dev/v4l-imx219-subdev0 sensor-name=“sensor_sony_IMX219_RPI“ dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a.bin format-msb=9 sink_0:::pool-size=8 src:::pool-size=8! video/x-raw、format=NV12、width=1920、height=1080! 排队! 马赛克.SINK_0 v4l2src device=/dev/video-imx219-cam1 IO-mode=5! 视频/x-Bayer、宽度=1920、高度=1080、帧速率=30/1、格式=rggb10! 队列泄漏=2! tiovxisp sink_0::device=/dev/v4l-imx219-subdev1 sensor-name=“sensor_sony_IMX219_RPI“ dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a.bin format-msb=9 sink_0:::pool-size=8 src:::pool-size=8! video/x-raw、format=NV12、width=1920、height=1080! 排队! mosaich.sink_1 tiovxmosaic name=mosaic sink_0::startx=“<0>“ sink_0::starty=“<0>“ sink_0::width=“<960>“ sink_0:::height=“<540>“ sink_1:::startx=“<960>“ sink_1:::<540>“ width=“<540>“ sink_1>“ video/x-raw、format=NV12、width=1920、height=1080! kmssink driver-name=tidss sync=false

    如果我运行管道, 10 次中的 10 次,它似乎是正常工作. 但有一些注意事项:

    • 我必须运行以下 media-ctl 设置来设置 V4L2 框架、以便为两个摄像头提供 1080p 图像:  
      • media-ctl -d 0 --set-v4l2 '“cdns_csi2rx.4504000.csi-bridge“:0[fmt:SRGGB10_1x10/1920x1080 field:none]&& media-ctl -d
    • 如果我快速关闭并启动多流水线 GStreamer(在关闭前一个流水线的 1 秒内)、那么流水线似乎会停滞。 我认为上一个流水线的清理仍在运行、因此上一个运行可能会留下一些伪影。 另一方面、如果我在两次运行之间留出一些时间(例如 3 秒)、则在重新运行流水线时没有问题。

    我在实验之后注意到了以下几点:

    • 如果您使用的脚本仍然是第一篇文章中的脚本,我看到 CAM1 流水线的宽度和高度是硬编码的,而 cam0 流水线使用宽度和高度变量。 具体来说:
      • Cam0—! video/x-raw、format=NV12、width=$width、height=$height! 排队! 马赛克.SINK_0
      • CAM1 — ! video/x-raw、格式=NV12、宽度=1920、高度=1200! 排队! 马赛克.SINK_1
      • 如果 mediactl 使用非硬编码值、则可能会导致分辨率不匹配
    • 帧速率比我的工作管道要高一点。 您的管道是 60fps、而我的管道是 30fps。 也许您的流水线在 VISS 硬件上达到了一些限制。  
      • 作为一个实验、您可以尝试将 fps 降低到 30fps 吗?
    • 否则,如何做实验在你的最后?  
      • 也就是说、流水线是否通过自动脚本快速连续地停止和启动?

    此致、

    Takuma