吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡述MPSoC VCU調試方法和調試流程

YCqV_FPGA_EETre ? 來源:博客園 ? 作者:Hank FU ? 2021-10-13 10:43 ? 次閱讀

概要介紹

MPSoC VCU在很多產品中得到了應用。在不同產品的調試過程中,有一些共同的辦法。

首先看看Video子系統的簡單框圖,其中包含視頻輸入、編解碼、視頻輸出等模塊。視頻輸入模塊,硬件可能是HDMI-RX和FrmBufWrite; 軟件一般是Linux V4L2。編解碼模塊是VCU,配套的軟件是GStreamer,或者Ctrl-SW。視頻輸出模塊,硬件可能是HDMI-TX和FrmBufRead; 軟件一般是Linux DRM。

e53bb5fa-2bce-11ec-82a8-dac502259ad0.png

調試時,根據上述框圖,逐個檢查其中的模塊的輸入輸出。

視頻輸入模塊

檢查視頻輸入源
調試VCU時,首先檢查視頻輸入模塊的輸出是否正常。如果Linux V4L2管理視頻輸入模塊的硬件,則會創建Linux的media/video設備,可以使用工具media-ctl查看它們的信息。對于HDMI-Rx,可以看到有沒有連接源設備,視頻輸入源的分辨率、格式等。

#media-ctl -p -d /dev/media0 
 
Media controller API version 0.1.0
  
Media device information
------------------------
driver          xilinx-video
model           Xilinx Video Composite Device
serial
bus info
hw revision     0x0
driver version  0.0.0
  
Device topology
- entity 1: vcap_hdmi output 0 (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "a0000000.v_hdmi_rx_ss":0 [ENABLED]
  
- entity 5: a0000000.v_hdmi_rx_ss (1 pad, 1 link)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        pad0: Source
                [fmt:RBG24/1920x1080 field:none]
                [dv.caps:BT.656/1120 min:0x0@25000000 max:4096x2160@297000000 stds:CEA-861,DMT,CVT,GTF caps:progressive,reduced-blanking,custom]
                [dv.detect:BT.656/1120 1920x1080p60 (2200x1125) stds:CEA-861 flags:CE-video]
                -> "vcap_hdmi output 0":0 [ENABLED]

抓取原始圖像
在確保視頻輸入源的工作正常、分辨率和格式正確后,可以再繼續使用yavta來抓取原始圖像,從而檢查圖像內容。

#yavta -n 3 -c10 -f UYVY -f UYVY -s 1920x1080 --skip 7 -F /dev/video0
Device /dev/video0 opened.
Device `vcap_hdmi output 0' on `platform0' is a video output (without mplanes)[63898.159475] xilinx-frmbuf a0010000.v_frmbuf_wr: Framebuffer not configured for fourcc 0x59565955
 device.
Video format set: UYVY (59565955) 1920x1080 field none[63898.173868] xilinx-frmbuf a0010000.v_frmbuf_wr: Framebuffer not configured for fourcc 0x59565955
, 1 planes:
 * Stride 3840, buffer size 4147200
Video format:[63898.188189] xilinx-frmbuf a0010000.v_frmbuf_wr: Framebuffer not configured for fourcc 0x59565955
 UYVY (59565955) 1920x1080 field none, 1 planes:
 * Stride 3840, buffer size 4147200
3 buffers requested.
length: 1 offset: 3444933696 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0x7fa84b0000.
length: 1 offset: 3444933696 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0x7fa80bb000.
length: 1 offset: 3444933696 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0x7fa7cc6000.
Unable to start streaming: Invalid argument (22).
3 buffers released.

檢查原始圖像
接下來再使用YUV Player 或者 YUV Player github 分支檢查原始圖像是否正確。需要根據圖像源,正確設置分辨率和YUV格式。如果圖像輪廓就時錯誤的,這表明Y數據就是錯誤的,或者分辨率的行寬是錯誤的,如果輪廓正確、顏色錯誤,這表明Y數據是對的,分辨率的高不對,或色彩格式不對。大塊的連續色彩錯誤,有可能是把Y數據,當成了UV數據。

Encoder
得到了正確的YUV數據后,繼續使用Encoder編碼。如果有問題,保存Encoder輸出的碼流,傳送到PC機上,使用FFMpeg檢查。首先可以使用ffplay播放,用肉眼觀察圖像。

Microsoft Windows [Version 10.0.18363.1801]
(c) 2019 Microsoft Corporation. All rights reserved.
C:prj>ffplay vcu_example.h265
ffplay version N-89369-g5a93a85fd0 Copyright (c) 2003-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  4.100 / 56.  4.100
  libavcodec     58.  6.102 / 58.  6.102
  libavformat    58.  2.103 / 58.  2.103
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  6.100 /  7.  6.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[hevc @ 000001b016710180] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, hevc, from 'vcu_example.h265':=    0KB sq=    0B f=0/0
  Duration: N/A, bitrate: N/A
    Stream #0 Video: hevc (Main), yuv420p(tv, unknown/bt709/unknown), 3840x2160, 45 fps, 45 tbr, 1200k tbn, 45 tbc
    nan M-V:    nan fd=   2 aq=    0KB vq=  844KB sq=    0B f=0/0

其次可以使用ffprobe導出碼流信息,查看各幀的類型和大小。

C:prj>ffprobe vcu_example.h265 > vcu_example.h265.txt
ffprobe version N-89369-g5a93a85fd0 Copyright (c) 2007-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  4.100 / 56.  4.100
  libavcodec     58.  6.102 / 58.  6.102
  libavformat    58.  2.103 / 58.  2.103
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  6.100 /  7.  6.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[hevc @ 0000019dfe94cd80] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, hevc, from 'vcu_example.h265':
  Duration: N/A, bitrate: N/A
    Stream #0 Video: hevc (Main), yuv420p(tv, unknown/bt709/unknown), 3840x2160, 45 fps, 45 tbr, 1200k tbn, 45 tbc

還可以使用ffmpeg把每一幀轉換成bmp圖片,仔細查看。

C:prj>ffmpeg  -i vcu_example.h265  -frames 10 vcu_example.%04d.bmp
ffmpeg version N-89369-g5a93a85fd0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  4.100 / 56.  4.100
  libavcodec     58.  6.102 / 58.  6.102
  libavformat    58.  2.103 / 58.  2.103
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  6.100 /  7.  6.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[hevc @ 000002bda8bd9880] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, hevc, from 'vcu_example.h265':
  Duration: N/A, bitrate: N/A
    Stream #0 Video: hevc (Main), yuv420p(tv, unknown/bt709/unknown), 3840x2160, 45 fps, 45 tbr, 1200k tbn, 45 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> bmp (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'vcu_example.%04d.bmp':
  Metadata:
    encoder         : Lavf58.2.103
    Stream #0 Video: bmp, bgr24, 3840x2160, q=2-31, 200 kb/s, 45 fps, 45 tbn, 45 tbc
    Metadata:
      encoder         : Lavc58.6.102 bmp
frame=   10 fps=0.0 q=-0.0 Lsize=N/A time=0000.22 bitrate=N/A speed=0.568x
video:243001kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

有問題時,再使用保存的YUV文件,使用xilinx發布的ctrlsw_encoder在ZCU106單板上編碼,對比效果。也可以試試Xilinx提供的配置文件。如果有區別,再對比實際代碼和xilinx發布的ctrlsw_encoder、配置文件的區別。

Decoder
檢查完encoder的輸出,再檢查decoder的輸出。ctrlsw_decoder默認輸出I420(YUV420)/I422(YUV422)格式的YUV輸出。如果需要,可以參考VCU Ctrl-SW 2020.2輸出 NV12 的 YUV 文件,使ctrlsw_decoder輸出NV12/NV16的文件。輸出后,也可以使用YUV Player 或者 YUV Player github 分支檢查解碼后的YUV圖像是否正確。

圖像質量
如果圖像質量有問題,建議使用大的顯示器或電視機查看。顯示器或電視機要真實支持檢查的分辨率,在顯示中不能有縮放,避免縮放引起新的問題。也可以使用ffmpeg的下面命令,將碼流轉換為bmp圖片,一幀一幀查看。

C:prj>ffmpeg  -i vcu_example.h265  -frames 10 vcu_example.%04d.bmp
ffmpeg version N-89369-g5a93a85fd0 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
  libavutil      56.  4.100 / 56.  4.100
  libavcodec     58.  6.102 / 58.  6.102
  libavformat    58.  2.103 / 58.  2.103
  libavdevice    58.  0.100 / 58.  0.100
  libavfilter     7.  6.100 /  7.  6.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[hevc @ 000001bb953e9880] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, hevc, from 'vcu_example.h265':
  Duration: N/A, bitrate: N/A
    Stream #0 Video: hevc (Main), yuv420p(tv, unknown/bt709/unknown), 3840x2160, 45 fps, 45 tbr, 1200k tbn, 45 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> bmp (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'vcu_example.%04d.bmp':
  Metadata:
    encoder         : Lavf58.2.103
    Stream #0 Video: bmp, bgr24, 3840x2160, q=2-31, 200 kb/s, 45 fps, 45 tbn, 45 tbc
    Metadata:yo
      encoder         : Lavc58.6.102 bmp
frame=   10 fps=0.0 q=-0.0 Lsize=N/A time=0000.22 bitrate=N/A speed=0.553x
video:243001kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

通常,增大碼率、減小QP值、使用VBR、使用跳幀等,可以優化圖像質量。

VCU性能

如果檢查VCU性能,建議使用實際視頻輸入輸出,因為文件操作有耗時內存拷貝。如果用文件,也一定要把文件放在Linux的ramdisk上,不能使用sd等存放。

測試性能時,千萬記住,不能使用軟件復制Video數據,包括Gstreamer的tee插件。

案例

使用VBR優化圖像質量
有項目反應圖像質量與參考的視頻有差距。拿到VCU編碼的視頻碼流和參考視頻碼流后,使用ffprobe分析,得到每一幀的大小。發現VCU的視頻碼流的I幀小于150KByte,而參考視頻碼流的視頻碼流的I幀有400KByte。建議使用VBR。應用VBR后,圖像質量明顯改善。

解決I幀小導致的圖像質量問題
有項目反應圖像質量與參考的視頻有差距。拿到VCU編碼的視頻碼流和參考視頻碼流后,使用ffprobe分析,得到每一幀的大小。發現VCU的視頻碼流的I幀大約時是180KByte,而參考視頻碼流的視頻碼流的I幀有1000KByte。該項目使用VBR后,I幀圖像也沒有增大。檢查VCU的配置,發現配置文件了有“MaxPictureSize = 1500”,相當于180KByte。建議客戶設置“MaxPictureSize = 20000”,或者移除這一條后,圖像質量明顯改善。MaxPictureSize用于限制幀編碼后的最大大小,目的是減少碼率波動,會限制I幀的質量。

建議
分析VCU的問題時,請提供VCU的視頻碼流、參考視頻碼流、原始碼流、配置文件。

作者:Hank FU,hankf@xilinx.com,文章來源:博客園
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PC
    PC
    +關注

    關注

    9

    文章

    2102

    瀏覽量

    154656
  • MPSoC
    +關注

    關注

    0

    文章

    199

    瀏覽量

    24321
  • VCU
    VCU
    +關注

    關注

    17

    文章

    82

    瀏覽量

    20625

原文標題:【工程師分享】MPSoC VCU調試方法和調試流程

文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發圈】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Wine開發系列——如何使用Wine日志調試問題

    ? 輸出調試日志是調試程序的一種常見方法,尤其是處理那些難以捉摸的多線程錯誤、隨機崩潰等問題時。 通過在合適的位置輸出調試日志,可以幫助我們更快地定位問題所在。 對于不熟悉的代碼,經常
    的頭像 發表于 01-06 11:29 ?191次閱讀

    FOC電機的故障檢測方法 FOC電機調試技巧大全

    FOC(Field Oriented Control,磁場定向控制)電機在運行時可能會出現各種故障,因此掌握有效的故障檢測方法調試技巧至關重要。以下是對FOC電機故障檢測方法調試
    的頭像 發表于 11-21 15:07 ?1018次閱讀

    如何進行硬件調試

    硬件調試是硬件系統設計、開發和制造過程中不可或缺的一環,旨在對可能出現的問題進行分析和解決。以下是進行硬件調試的一般步驟和方法: 一、準備階段 熟悉設計文檔:在開始調試之前,需要詳細閱
    的頭像 發表于 11-10 10:17 ?888次閱讀
    如何進行硬件<b class='flag-5'>調試</b>?

    在米爾電子MPSOC實現12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    的ZU4EV MPSoC平臺,接入真4k 60UHD-SDI視頻源后,使用VCU進行高效H.265編解碼,再通過SGMII萬兆以太網實現網絡推流,以確保高質量4K視頻的流暢傳輸。2. 視頻質量下降的原因與優化
    發表于 11-01 16:56

    伺服電機有哪些調試方法?如何調?

    伺服電機是一種高精度的電機,廣泛應用于自動化設備、機器人、數控機床等領域。為了確保伺服電機的性能和穩定性,需要進行正確的調試。以下是一些常見的伺服電機調試方法及其操作步驟: 電機參數設置 在調
    的頭像 發表于 10-22 11:04 ?1503次閱讀

    在米爾電子MPSOC實現12G SDI視頻采集H.265壓縮SGMII萬兆以太網推流

    米爾電子的ZU4EV MPSoC平臺,接入真4k 60UHD-SDI視頻源后,使用VCU進行高效H.265編解碼,再通過SGMII萬兆以太網實現網絡推流,以確保高質量4K視頻的流暢傳輸。 2.視頻質量
    發表于 10-14 17:42

    無線網橋的連接與調試方法

    無線網橋的連接與調試方法主要涉及設備的配置、網絡參數的設定以及通信質量的優化。以下是詳細的步驟和注意事項:
    的頭像 發表于 10-01 15:23 ?1006次閱讀

    FPD link系統概念與診斷調試方法

    電子發燒友網站提供《FPD link系統概念與診斷調試方法.pdf》資料免費下載
    發表于 09-27 11:11 ?0次下載
    FPD link系統概念與診斷<b class='flag-5'>調試</b><b class='flag-5'>方法</b>

    數字電源的低壓調試和高壓調試

    數字電源的低壓調試和高壓調試是電力系統中非常關鍵的部分,它們直接關系到設備的穩定運行和電能供應的質量。以下是對這兩種調試方法的詳細解析:
    的頭像 發表于 09-15 11:39 ?553次閱讀

    ESP32 崩潰后調試信息定位到源碼方法

    arduino 通過調試信息定位出錯源碼
    的頭像 發表于 08-27 14:29 ?1113次閱讀

    深度學習的模型優化與調試方法

    深度學習模型在訓練過程中,往往會遇到各種問題和挑戰,如過擬合、欠擬合、梯度消失或爆炸等。因此,對深度學習模型進行優化與調試是確保其性能優越的關鍵步驟。本文將從數據預處理、模型設計、超參數調整、正則化、模型集成以及調試與驗證等方面,詳細介紹深度學習的模型優化與
    的頭像 發表于 07-01 11:41 ?1001次閱讀

    變頻器的參數調試方法有哪些?

    參數調試方法,包括基本參數設置、頻率設定、加減速時間調整、轉矩提升、制動功能設置、通訊設置等方面的內容。 ? ? ??一、基本參數設置 ? ? ??1、電壓等級選擇:根據變頻器輸入電源的電壓等級,選擇合適的電壓等級參數。例如
    的頭像 發表于 06-23 15:29 ?3005次閱讀
    變頻器的參數<b class='flag-5'>調試</b><b class='flag-5'>方法</b>有哪些?

    變頻器的參數調試方法有哪些

    變頻器是一種將工頻電源轉換為頻率和電壓可調的電能控制裝置,廣泛應用于工業自動化、電力系統、交通等領域。變頻器參數的調試是確保其正常運行和滿足特定應用需求的關鍵環節。本文將詳細介紹變頻器參數調試方法
    的頭像 發表于 06-17 15:20 ?2038次閱讀

    PLC系統的安裝與調試流程

    PLC控制系統的安裝與調試,涉及到各項工作,并且只能按序進行,一環緊扣一環,稍有不慎都將導致調試失敗,不但延誤工期,甚至會損壞設備。本文介紹了在現場實踐中總結出的PLC控制系統的安裝與調試技術經驗
    的頭像 發表于 03-27 17:08 ?921次閱讀
    PLC系統的安裝與<b class='flag-5'>調試</b><b class='flag-5'>流程</b>

    調試模式下如何調試看門狗?

    大家在調試GD32 MCU系統的時候,若開了看門狗外設,是否會碰到進入調試模式看門狗就會咬狗造成無法調試的問題?
    的頭像 發表于 02-23 09:30 ?1322次閱讀
    <b class='flag-5'>調試</b>模式下如何<b class='flag-5'>調試</b>看門狗?
    房产| 威尼斯人娱乐城官方地址| 百家乐官网赢多少该止赢| 桌上游戏| 威尼斯人娱乐棋牌平台| 24山吉凶八卦图| 百家乐官网趋势图怎么看| 百家乐棋牌游戏币| 百家乐官网如何骗人| 清水县| 百家乐77scs官| 百家乐游戏机说明书| 百家乐官网追注法| 金城百家乐官网玩法| 大发888国际游戏平台| 金矿百家乐的玩法技巧和规则 | 金榜娱乐城| 百家乐大| 百家乐赌神| 沙龙百家乐官网娱乐| 百家乐官网龙虎斗扎金花| 皇冠网开户| 大发888国际娱乐bet| 百家乐游戏网上投注| 博网百家乐现金网| 百家乐官网娱乐平台备用网址 | 做生意家里摆什么招财| 百家乐官网技巧何为百家乐官网之路| 永靖县| 网上棋牌是真的吗| 威尼斯人娱乐场55556| 百家乐技巧-澳门百家乐官方网址| 24山分别指什么| 蓝盾百家乐官网网址| 百家乐官网视频中国象棋| 365新网址| 太阳城代理最新网址| 百家乐怎么发牌| 娱乐城百家乐可以代理吗| 百家乐赢法口诀| 为什么百家乐官网玩家越来越多选择网上百家乐官网 |