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-Q1:VPAC 和 Multiscaler:如何获得另一条使用 dmabuf-import 的路径

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1500497/am62a7-q1-vpac-and-multiscaler-how-to-get-a-second-path-to-use-dmabuf-import-as-well

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

工具/软件:

尊敬的 Suren PorwarJianzhong Xu:

我终于能够在10.1.0上测试流水线、它主要按预期工作。

当我使用多缩放器将一条路径切换到1920x1080时、我需要将编码器元素切换为使用 dmabuf 而不是 dmabuf-import、这仍然会对帧速率产生影响(28.5而不是30、可能是因为存在额外的副本)。 如果我使用 dmabuf-import、则我的管道错误会出现、因为编码器无法获得内存。 如果我将第二条路径的大小设置为3840x2160、则不会出现此问题。

我的当前脚本:

#!/bin/bash

DCC_ISP_FILE=/opt/imaging/ar0823/linear/dcc_viss.bin
DCC_2A_FILE=/opt/imaging/ar0823/linear/dcc_2a.bin
LDC_DCC_FILE=/opt/imaging/ar0823/linear/dcc_ldc.bin

MULTICASTADDR1=224.1.1.1
MULTICASTADDR2=224.1.1.2
PORT=5004

if [ x$TEE == x ]; then
    TEE=tee
fi
HEVC_PROFILE="main"
HEVC_LEVEL="1"
VIDEO_BITRATE=6000000
ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"

TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")

if [ $? -ne 0 ]; then
        echo 'Terminating...' >&2
        exit 1
fi

eval set -- "$TEMP"
unset TEMP

while true; do
        case "$1" in
                '-h'|'--help')
                        echo "$0 - H.265 compress a JPEG file into a one second stream"
                        echo "Parameters:"
                        echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                        echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                        echo "  -b 0..700000000 (Video Bitrate)"
                        echo "  --mc <multicast ip address>"
                        echo "  --port <port number> (default 5000)"
                        echo "  -h This help"
                        exit 0
                        shift
                        continue
                ;;
                '-p'|'--profile')
                        case "$2" in
                                'main'|'Main'|'0')
                                        HEVC_PROFILE="main"
                                        ;;
                                'main-still-picture'|'1')
                                        HEVC_PROFILE="main-still-picture"
                                        ;;
                                'main-10'|'2')
                                        HEVC_PROFILE="main-10"
                                        ;;
                                *)
                                        HEVC_PROFILE="main"
                                        ;;
                        esac
                        echo "HEVC Profile: '$HEVC_PROFILE'"
                        shift 2
                        continue
                ;;
                '-l'|'--level')
                        case "$2" in
                                '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                        HEVC_LEVEL="$2"
                                        ;;
                                *)
                                        HEVC_LEVEL="1"
                                        ;;
                        esac
                        echo "HEVC Level: '$HEVC_LEVEL'"
                        shift 2
                        continue
                ;;
                '-b'|'--bitrate')
                        echo "Video Bitrate: '$2'"
                        VIDEO_BITRATE=$2
                        shift 2
                        continue
                ;;
                'mc')
                        MULTICASTADDR=$2
                        shift 2
                        continue
                ;;
                'port')
                        PORT=$2
                        shift 2
                        continue
                ;;
                '--')
                        shift
                        break
                ;;
                *)
                        echo 'Internal error!' >&2
                        exit 1
                ;;
        esac
done

#media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
#media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
        ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
        ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                dcc-isp-file=${DCC_ISP_FILE} \
                sink_0::dcc-2a-file=${DCC_2A_FILE} format-msb=11 \
        ! queue max-size-buffers=1 leaky=0 \
        ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE} \
        ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
        ! queue max-size-buffers=1 leaky=0 \
        ! ${TEE} name=multi \
        multi.src_0 \
        ! queue max-size-buffers=1 leaky=0 name=qstream1 \
        ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
        ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
        ! rtph265pay config-interval=1 pt=96 mtu=1400 \
        ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
        multi.src_1 \
        ! queue max-size-buffers=1 leaky=0 name=qstream2 \
        ! tiovxmultiscaler target=0 \
                sink_0::pool-size=4 src::pool-size=4 \
        ! video/x-raw, format=NV12, width=1920, height=1080 \
        ! v4l2h265enc output-io-mode=dmabuf extra-controls=${ENC_EXTRA_CONTROLS} \
        ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
        ! rtph265pay config-interval=1 pt=96 mtu=1400 \
        ! udpsink host=${MULTICASTADDR2} auto-multicast=true port=${PORT}

有什么想法如何改善这一点?

此致、

Bas Vermeulen

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

    尊敬的 Bas:

    我们正在研究这个问题、我们会尽快回复您。

    此致、

    建中

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

    尊敬的 Bas:

    您可以尝试下面的流水线

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
    ! 视频/x-Bayer、宽度=3840、高度=2160、帧速率=30/1、格式=grbg12 \
    ! tiovxisp sink_0:::device=/dev/v4l-subdev2 sensor-name="sensor_ONSEMI_AR0823"\
    dcc-isp-file=${dcc_isp_file}\
    Sink_0:::dcc-2a-file=${DCC_2A_FILE}format-msb=11 \
    ! 队列 max-size-buffers=1 leafy=0 \
    ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE}\
    ! video/x-raw、格式=NV12、宽度=3840、高度=2160、帧速率=30/1 \
    ! 队列 max-size-buffers=1 leafy=0 \
    ! ${TEE}name=multi \
    multi.src_0 \
    ! queue max-size-buffers=1 leafy=0 name=qstream1 \
    ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_extra_controls}\
    ! "video/x-H265、profile=(string)${HEVC_profile}、Level=(string)${HEVC_LEVEL}"\
    ! rtph265pay config-interval=1 pt=96 MTU=1400 \
    ! udpsink host=${MULTICASTADDR1}auto-multiplics=true port=${port}\
    multi.src_1 \
    ! queue max-size-buffers=1 leafy=0 name=qstream2 \
    ! tiovxmultiscaler target=0 \
    Sink_0::pool-size=4 src::pool-size=4 \
    ! 视频/x-RAW、格式=NV12、宽度=1920、高度=1080、 STRIDE-Y-ALIGN=16  \
    ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_extra_controls}\
    ! "video/x-H265、profile=(string)${HEVC_profile}、Level=(string)${HEVC_LEVEL}"\
    ! rtph265pay config-interval=1 pt=96 MTU=1400 \
    ! udpsink host=${MULTICASTADDR2}自动多播=true port=${port}

    编码器的高度需要与16对齐

    应届毕业生
    Rahul T r

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

    尊敬的 Rahul:

    向功能中添加 strip-y-align=16不会对双流水线产生影响。 我仍然得到28至28.5 fps。

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.40         35.01            28          3879       |
    |tiovxisp0                     62.85        35.00            28          3877       |
    |queue0                        10.90        35.00            28          3878       |
    |tiovxldc0                     34.29        35.00            28          3877       |
    |capsfilter1                   0.34         35.00            28          3877       |
    |queue1                        0.20         35.00            28          3877       |
    |multi                         0.36         17.50            57          7754       |
    |qstream1                      0.28         35.00            28          3877       |
    |hdqueue                       0.77         35.00            28          3877       |
    |tiovxmultiscaler0             23.36        35.00            28          3876       |
    |capsfilter3                   0.43         35.00            28          3876       |
    |v4l2h265enc0                  43.91        34.99            28          3875       |
    |capsfilter2                   0.36         34.99            28          3875       |
    |v4l2src0                      159.91       17.50            57          7750       |
    |rtph265pay0                   0.67         34.99            28          3875       |
    |v4l2h265enc1                  30.31        34.99            28          3875       |
    |capsfilter4                   0.45         34.99            28          3875       |
    |rtph265pay1                   0.60         34.99            28          3875       |
    +-----------------------------------------------------------------------------------+

    我已经尝试移除主(3840x2160)流、如果我这样做、可以获得30fps (包括多标量)

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.28         33.30            30          1164       |
    |tiovxisp0                     24.84        33.26            30          1164       |
    |queue0                        0.56         33.26            30          1164       |
    |tiovxldc0                     24.02        33.26            30          1163       |
    |capsfilter1                   0.36         33.26            30          1163       |
    |queue1                        0.21         33.26            30          1163       |
    |multi                         0.33         16.63            60          2326       |
    |qstream1                      0.23         33.26            30          1163       |
    |v4l2src0                      73.80        16.64            60          2324       |
    |capsfilter2                   0.19         33.26            30          1163       |
    |hdqueue                       2.82         33.26            30          1163       |
    |tiovxmultiscaler0             23.50        33.25            30          1162       |
    |capsfilter3                   0.45         33.26            30          1162       |
    |v4l2h265enc0                  18.47        33.23            30          1161       |
    |capsfilter4                   0.29         33.23            30          1161       |
    |rtph265pay0                   0.51         33.23            30          1161       |
    +-----------------------------------------------------------------------------------+

    瓶颈似乎是两个流同时运行,我怀疑将第二个流复制到它自己的 dmabuffer。

    Bas

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

    尊敬的 Bas:

    我认为、    同时对3840x2160@30fps 和1920x1080@30fps 进行编码超出了编码器的功能。  

    我让 Suren Porwar 对此发表评论。

    此致、

    建中

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

    尊敬的 Bas:

    在 AM62A7 max 上、我们可以做 的是4K@30fps 编码/解码。  在您的用例中、您是否增加了 CMA 内存以运行4K+ FHD 流?  

    当您进行 dmabuf-import 时、您看到了什么错误。 可以附加日志吗?

    此致、

    Suren

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

    您好、Suren、

    技术参考手册(7.4视频加速器)提到、WAVE5可以执行8位3840x2160@ 60fps (我相信在500 MHz 下运行)。 我的编解码器以400 MHz 运行、这意味着它应该能够获得48fps 的解码或编码。 编码3840x2160 @ 30fps 时、我应该使用关于250 MHz 的信息、剩下150 MHz 用于1920x1080 @ 30fps 的编码(只应使用125 MHz)。

    阅读所有这些让我想到的东西,如果我在500 MHz 时钟 VPU ,我得到30fps 的4K 流和全高清流在同一时间。

    更改器件树中 VPU 的时钟的正确方法是什么?

    此致、

    Bas Vermeulen

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

    尊敬的 Bas:

    是的、我们应该能够  使用400MHz 时钟执行4K@30和 FHD@30。  

    此外、您是否能够运行 Rahul 建议的以下管道、因为它在管道中的两个编码器上都显示 dmabuf-import?

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
    ! 视频/x-Bayer、宽度=3840、高度=2160、帧速率=30/1、格式=grbg12 \
    ! tiovxisp sink_0:::device=/dev/v4l-subdev2 sensor-name="sensor_ONSEMI_AR0823"\
    dcc-isp-file=${dcc_isp_file}\
    Sink_0:::dcc-2a-file=${DCC_2A_FILE}format-msb=11 \
    ! 队列 max-size-buffers=1 leafy=0 \
    ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE}\
    ! video/x-raw、格式=NV12、宽度=3840、高度=2160、帧速率=30/1 \
    ! 队列 max-size-buffers=1 leafy=0 \
    ! ${TEE}name=multi \
    multi.src_0 \
    ! queue max-size-buffers=1 leafy=0 name=qstream1 \
    ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_extra_controls}\
    ! "video/x-H265、profile=(string)${HEVC_profile}、Level=(string)${HEVC_LEVEL}"\
    ! rtph265pay config-interval=1 pt=96 MTU=1400 \
    ! udpsink host=${MULTICASTADDR1}auto-multiplics=true port=${port}\
    multi.src_1 \
    ! queue max-size-buffers=1 leafy=0 name=qstream2 \
    ! tiovxmultiscaler target=0 \
    Sink_0::pool-size=4 src::pool-size=4 \
    ! 视频/x-RAW、格式=NV12、宽度=1920、高度=1080、 STRIDE-Y-ALIGN=16  \
    ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_extra_controls}\
    ! "video/x-H265、profile=(string)${HEVC_profile}、Level=(string)${HEVC_LEVEL}"\
    ! rtph265pay config-interval=1 pt=96 MTU=1400 \
    ! udpsink host=${MULTICASTADDR2}自动多播=true port=${port}
    [/报价]

    我做了一些实验视频测试 src 和4K +FHD 编码管道与 dmabuf 和它的工作,但 FPS 是低的。  

    我们将在明天连接800万像素摄像头后、验证我们终端上的一些内容并做出响应。  

    感谢您的耐心。

    此致、

    Suren

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

    尊敬的 Bas:

    您能否应用此补丁并查看是否能够将 dmabuf-import 与1920x1080流水线结合使用。

    e2e.ti.com/.../hack_2D00_to_2D00_outputbuf_2D00_calc.txt

    让我们知道应用此补丁后的情况。

    此致、

    Suren