xvr_demo使用说明


1. 概述

xvr_demo主要有两个用途,一是基本功能开发参考,二是基本功能测试调试。以下是xvr_demo目录对应功能的简单说明:

sdk/verify

├── xvr_demo

├──── internal ------------------------------------------ API封装

├──── sensor ------------------------------------------- 各厂家sensor源码

├──── source

│  ├──── audio --------------------------------------------------音频

│  ├──── algo ---------------------------------------------------智能算法

│  ├──── nvr -----------------------------------------------------解码显示

│  ├──── dvr ---------------------------------------------------- sensor数据采集编码显示

│  ├──── venc ---------------------------------------------------编码

│  ├──── fisheye--------------------------------------------------鱼眼矫正

│  ├──── hdmi ---------------------------------------------------hdmi兼容性测试

│  ├──── stress --------------------------------------------------解码显示压力测试

2. 编译

  1. 完整编译project,xvr_demo的编译依赖于project;

  2. cd sdk/verify/xvr_demo/;

  3. make clean;make;

  4. get bin from sdk/verify/xvr_demo/out/arm/app.


3. 使用说明

3.1. nvr

3.1.1. 简介

prog_nvr主要提供解码显示相关功能的流程参考,默认UI同时显示一个小红色块。

图3-1:nvr demo流程框图

3.1.2. 配置文件

xvr_demo/source/nvr/config_nvr.json是所用视频测试码流的相关参数和UI显示所需要的相关参数的配置文件。以下是配置文件的参数介绍:

"dispOutputMode" : 0:同源输出, 1:异源输出,
"chnNum" : layer0的通道数,范围[0,64],同源输出的通道数是chnNum+chnNum1
"chnNum1" : layer2的通道数,范围[0,64]
"dispTiming" : 同源显示分辨率,赋值参考resolution
"dispTiming1" : 异源VGA显示分辨率, 赋值参考resolution
"CASE" :
    "resolution" : 显示分辨率的传参参考,无需设置
"fbArgs" : FB相关参数
    "mouseIconFilePath" : 鼠标文件路径,
    "mousePicWidth" : 鼠标图片宽,
    "mousePicHeight" :鼠标图片高,
    "gfxTestFilePath" : GFX测试文件路径(ARGB1555格式文件),
    "gfxTestPicWidth" : 宽,
    "gfxTestPicHeight" :高

"vdecAttr" : 码流相关参数
    "chnId" : 通道号,
    "fileName" : 码流文件,
    "picWidth" : 宽,
    "picHeight" : 高,
    "codecType" : 0:h264, 1:h265, 2:jpeg,
    "refFrameNum" : 参考帧数,
    "esAddHead" : 码流是否头处理(sstar提供的测试码流通常有加头设为1,dump出来的裸流没有加头设为0)

3.1.3. 程序执行

配置好config_nvr.json后,执行./prog_nvr config_nvr.json即可。

3.1.4. 辅助命令

执行程序后,会有以下命令切换,

[-------Test case list------]
|-> 0: splite windows manually
|-> 1: splite windows automatically
|-> 2: change timing manually
|-> 3: change timing automatically
|-> 4: PIP
|-> 5: zoom
|-> 6: capture pic
|-> 7: pause
|-> 8: vdisp case
|-> 9: get vdec state
|->10: set CSC
|->11: show mouse
|->12: exit

0:手动切屏

按照提示输入参数,input chnNum[1-32] and chnNum1[1-32],for example: 4 4

同源输出:解码显示路数为chnNum+ chnNum1

异源输出:HDMI解码显示路数为chnNum,VGA解码显示路数为chnNum1

1:随机循环切屏

在手动切屏的基础上对chnNum和chnNum1随机传参,循环切屏

2:手动切分辨率

按照提示输入参数,

同源输出:Homology, input timing value, for example: 1

异源输出:Heterology, input timing value, for example: 2 4

3:随机循环切分辨率

在手动切分辨率的基础上对dispTiming和dispTiming1随机传参,循环切分辨率。

4:PIP

画中画,就是在视频层上面再叠加一个视频窗口,其流程与普通预览一样,区别在于一般用DISP layer1和layer3作为PIP上层的小图画面显示。

5:区域放大

区域放大利用的是模块的裁剪和放大功能,VDEC、SCL、DISP都支持裁剪,SCL、DISP支持放大。demo默认用DISP来裁剪放大。

按照提示输入参数要放大的区域。

6:抓图

抓图分两种,抓指定大小的数据进行编码以及抓原图数据进行编码。抓原图直接VENC绑定VDEC port1抓取数据即可;抓指定大小数据则是VDEC->SCL->VENC,通过设置SCL out size来指定大小。

按照提示输入参数,若输入宽高和原始码流分辨率不同,走绑定SCL抓图,若一样走绑VDEC抓图。

7:解码暂停

让送流线程空转来暂停送流

8:VDISP模块使用效果参考

Demo的pipeline:VDEC->SCL->VDISP->DISP或JPD->SCL->SCL-VDISP->DISP,达到一个PIP有4个画面的效果,这4个画面的拼接用到的是VDISP。普通预览用到VDISP无需再加一级别SCL,如上面流程框图。

9:获取解码状态

通过调用MI_VDEC_GetChnStat来查看当前的解码状况,包含解码类型、帧堆积量等。

10:设置输出模式

通过调用MI_DISP_SetHdmiParam来设置显示的亮度、对比度、饱和度、色度以及锐度。

11:鼠标显示

启动鼠标显示线程,鼠标文件及其对应路径要跟配置文件的“mouseIconFilePath”一致。

12:退出

亦可Ctrl+C退出。


3.2. dvr

3.2.1. 简介

Dvr demo 用于视频采集功能的测试,验证BT1120和BT656是否能正常采集,是否可以正常显示出来。对于采用不同的AD芯片需要编译不同的demo,驱动部分需要调整。

3.2.2. 配置文件

BT656目录用于采集720P视频的配置。

BT1120目录用于采集1080P视频的配置。

例如:1cam_bt656frame720P_disp_1Multi.ini

1cam 表示,只采集一路视频;bt656表示采集格式;720P表示采集视频大小;1Mult 表示vif设置的复合工作模式是1路。

CamNum = 1     #表明当前配置文件有多少路视频

[Cam0]          #表示第一路视频的配置开始
UseVenc = 1     #暂时用不上
SensorPad = 2    #使用哪个pad
ResIndex = 0     #选择sensor 端的视频设置是哪个
ifMode = BT656   #采集的视频格式,可选BT656或者BT1120

UseDisp = 1      #表示用到DISP模块做输出显示
#DispPort0BindMod = VENC #set VENC:DISP CVBS bind to VENC

VifDev = 4        # vif的DEV通道,跟chn是一个概念
vifOutPortId =0    # 目前都是0
vifPortCropX=0    #下面四个参数是采集的图像范围
vifPortCropY=0
vifPortCropW=1280
vifPortCropH=720
vifPortW=1280    #vif输出的宽高信息
vifPortH=720
vifpixel=14      # vif输出格式,14代表E_MI_SYS_PIXEL_FRAME_YUV422_UYVY,参考MI_SYS_PixelFormat_e


HDR = 0        #HDR类型,0是关闭,参考MI_VIF_HDRType_e
RunMode = 1Multi # vif的workmode,bt656支持1/2/4 Multi,bt1120只支持1/2 Multi,参考MI_VIF_WorkMode_e

IspDevId =0    #跟vif绑定的ISP device
IspInFilePath=NULL
IspInFileW=0
IspInFileH=0
IspInFilePixel=0

IspInFr=30  # isp input frame rate
IspbindType=Frame
#Realtime/Frame
NRLevel = 2     #3D降噪级别,0是关闭
IspRotation = 0  #是否旋转 0是不旋转,参考MI_SYS_Rotate_e
IspMirror = 0    #是否水平翻转
IspFlip = 0      #是否垂直翻转
IspInCropX = 0;  #下面4个参数代表isp input crop范围s
IspInCropY = 0;
IspInCropW = 1280;
IspInCropH = 720;
IqBinPath = NULL #"/mnt/imx274_api_hdr.bin"

Ispport0Use = 1  #是否使用isp port0
Ispport0PortCropX = 0  #下面4个参数为isp outport范围,通常和input crop一致,缩放一般会由scl做
Ispport0PortCropY = 0
Ispport0PortCropW = 1280
Ispport0PortCropH = 720
Ispport0Pixel = 11  #输出格式,11代表E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420,disp只能吃这种格式

Ispport0EncodeType = 2 #编码格式,2:h264,3:h265,4: jpeg
#Ispport0userdepth = 0
#Ispport0depth = 4

Ispport1Use = 0  # isp port1 设定

Ispport1PortCropX = 0
Ispport1PortCropY = 0
Ispport1PortCropW = 1280
Ispport1PortCropH = 720
Ispport1Pixel = 11
Ispport1EncodeType = 2
#Ispport1userdepth = 0
#Ispport1depth = 4

Ispport2Use = 0
Ispport2EncodeType = 2
#Ispport1userdepth = 0
#Ispport1depth = 4

SclIspRealtimeUseSclId = 1 # SCL source的4种选择
SclYUVRealtimeUseSclId = 0
SclRdma0UseSclId = 0
SclRotRdmaUseSclId =0

SclRdma0InFilePath =NULL
SclRdma0InFileW=0
SclRdma0InFileH=0
SclRdma0InFilePixel=0

SclRotRdmaInFilePath =NULL
SclRotRdmaInFileW=0
SclRotRdmaFileH=0
SclRotRdmaFilePixel=0

SclRotation= 0  #scl是否做旋转 0:0, 1:90, 2:180, 3:270

Scl0Use = 1  # SCL有多个port,可以1进多出,这里表示用scl0
Scl0PortCropX = 0  # SCL0 crop范围
Scl0PortCropY = 0
Scl0PortCropW = 1280
Scl0PortCropH = 720
Scl0mirror = 0
Scl0flip = 0
Scl0W = 640  # SCL0 输出size
Scl0H = 360  # SCL0 输出size
Scl0Pixel = 11
Scl0BindMod = VENC  # SCL bind到 VENC,也可以bind DISP,看使用情况
Scl0Bindtype = 1    # frame mode,默认工作方式,参考MI_SYS_BindType_e
Scl0EncodeType = 2  #编码格式,2:h264,3:h265,4: jpeg
Scl0EncodeFps = 30
#BindType:1 Frame, 4 RealTime
#Encode:2 h264, 3 h265, 4 JPEG
Scl0userdepth = 2
Scl0depth = 4
#Scl0OutPutPath = "/mnt"
#Scl0DumpBuffNum = 1

Scl1Use = 0  # scl1设定,与前面scl0各项代表的意思类同
Scl1PortCropX = 0
Scl1PortCropY = 0
Scl1PortCropW = 0
Scl1PortCropH = 0
Scl1mirror = 0
Scl1flip = 0
Scl1W = 1280
Scl1H = 720
Scl1Pixel = 11
Scl1Bindtype = 1
Scl1EncodeType = 2
#port1OutPutPath = "/mnt"
#port1DumpBuffNum = 1

Scl2Use = 0
Scl2PortCropX = 0
Scl2PortCropY = 0
Scl2PortCropW = 0
Scl2PortCropH = 0
Scl2mirror = 0
Scl2flip = 0
Scl2W = 1280
Scl2H = 720
Scl2Pixel = 11
Scl2Bindtype = 1
Scl2EncodeType = 2
#port2OutPutPath = "/mnt"
#port2DumpBuffNum = 1

Scl3Use = 0
Scl3PortCropX = 0
Scl3PortCropY = 0
Scl3PortCropW = 0
Scl3PortCropH = 0
Scl3mirror = 0
Scl3flip = 0
Scl3W = 1280
Scl3H = 720
Scl3Pixel = 0
Scl3Bindtype = 1
Scl3EncodeType = 2
#port0OutPutPath = "/mnt"
#port0DumpBuffNum = 1
#port0userdepth = 0
#port0depth = 4
#BindType:1 Frame, 4 RealTime
#Encode:2 h264, 3 h265, 4 JPEG

Scl4Use = 0
Scl4PortCropX = 0
Scl4PortCropY = 0
Scl4PortCropW = 0
Scl4PortCropH = 0
Scl4mirror = 0
Scl4flip = 0
Scl4W = 1280
Scl4H = 720
Scl4Pixel = 11
Scl4Bindtype = 1
Scl4EncodeType = 2
#port1OutPutPath = "/mnt"
#port1DumpBuffNum = 1

Scl5Use = 0
Scl5PortCropX = 0
Scl5PortCropY = 0
Scl5PortCropW = 0
Scl5PortCropH = 0
Scl5mirror = 0
Scl5flip = 0
Scl5W = 736
Scl5H = 1280
Scl5Pixel = 11
Scl5Bindtype = 1
Scl5EncodeType = 2

VencChn = 0  #venc 使用的chn id
VencW = 640
VencH = 360
VencRCMode = 1 #RCMode:1 H264_CBR, 2 H264_VBR, 4 H264_FIXQP, 5 H264_AVBR, 8 h265_CBR
VencUseAdvanceIDR = 1
VencGop = 30
VecnBase = 1  #下述三个参数,MI_VENC_API.doc 文档
VencEnhance = 0
VencPred = 1

VdecType = 0   #码流格式
VdecChn = 0
VdecPicW = 640  #解码通道宽高
VdecPicH = 360
VdecW = 640
VdecH = 360
VdecDpbBufMode = 1

3.2.3. 使用说明

前提条件,需要sensor的分辨率能对应上,验哪种case就需要把sensor分辨率切到相应分辨率下。

Dvr demo 源码编译出来的可执行档是prog_dvr,执行方式是./prog + ini文件路径,会加载ini里面设置的参数运行,不需要输入其他命令。

在demo里面,根据padid的配置情况,自动计算出当前使用了多少个Ad 芯片,并做相应的初始化。

N制是30帧,P制是25帧;目前每一个ini文件对应一种视频路数场景。

比如:

跑8路720P BT1120采集显示:./prog_dvr 8cam_bt1120frame720P_disp_2Multi.ini

跑16路720P BT656采集显示:./prog_dvr 16cam_bt656frame720P_disp_2Multi.ini

  • xs9931

    st_main_dvr.c修改egAdchip为E_AD_DH9931重新编译。

    xs9931的driver目前加了8种case(也可以自己扩展),可以在ini里面修改配置使用不同的case:

    index 0, Crop(0,0,1280,720), outputsize(1280,720), maxfps 30, minfps 30, 
    ResDesc 1280x720@30fps[1x]
    
    index 1, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 30, minfps 30, 
    ResDesc 1920x1080@30fps[1x] single
    
    index 2, Crop(0,0,1280,720), outputsize(1280,720), maxfps 30, minfps 30, 
    ResDesc 1280x720@30fps[2x]
    
    index 3, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 30, minfps 30, 
    ResDesc 1920x1080@30fps[2x]
    
    index 4, Crop(0,0,1280,720), outputsize(1280,720), maxfps 30, minfps 30, 
    ResDesc 1280x720@30fps[4x]
    
    index 5, Crop(0,0,960,1080), outputsize(960,1080), maxfps 30, minfps 30, 
    ResDesc 960x1080@30fps[4x]
    
    index 6, Crop(0,0,1280,1440), outputsize(1280,1440), maxfps 30, minfps 30, 
    ResDesc 1280x1440@30fps[1x] double
    
    index 7, Crop(0,0,2560,1440), outputsize(2560,1440), maxfps 30, minfps 30, 
    ResDesc 2560x1440@30fps[1x] double
    

    目前公版上使用了两个9931 芯片,挂在同一路I2C 总线上。Sensor Pad0 / 2 对应于第一个AD芯片,pad1 / 3 对应第二个AD芯片。

  • TP2830

    st_main_dvr.c修改egAdchip为E_AD_TP2830重新编译。

    目前demo写了以下这几种case。由于TP2830 driver 是能看到源码的,并且各种case 的设定比较复杂,没办法覆盖所有的test case,因此如果需要修改或者添加case,得再tp2830_module_init里面添加,如要支持BT1120,修改使用_16bit的枚举类型。

    index 0, SDR 1Chn 720P
    
    index 1, SDR 1Chn 1080P
    
    index 2, SDR 2Chn 720P
    
    index 3, DDR 2Chn 1080P
    
    index 4, DDR 4Chn 720P
    
    index 5, DDR 4Chn 1080P
    
  • NVP6158C

    st_main_dvr.c修改egAdchip为E_AD_NVP6158C重新编译,支持以下这几种case:

    index 0 1280x720@30_NTSC_1Mux
    
    index 1 1280x720@25_PAL_1Mux
    
    index 2 1280x720@30_NTSC_2Mux
    
    index 3 1280x720@25_PAL_2Mux
    
    index 4 1280x720@30_NTSC_4Mux
    
    index 5 1280x720@25_PAL_4Mux
    
    index 6 1920x1080@30_NTSC_1Mux
    
    index 7 1920x1080@25_PAL_1Mux
    
    index 8 1920x1080@30_NTSC_2Mux
    
    index 9 1920x1080@25_PAL_2Mux
    
    index 10 960x1080@30_NTSC_4Mux
    
    index 11 1920x1080@30_NTSC_1Mux_bt1120
    
    index 121920x1080@30_NTSC_2Mux_bt1120
    
    index 13 960x240@60i_1Mux
    
    index 14 960x290@50i_1Mux
    
    index 15 640x720@25_PAL_1Mux
    
    index 16 640x720@25_PAL_2Mux
    
    index 17 1280x720@25_PAL_1Mux_bt1120
    
    index 18 1280x720@25_PAL_2Mux_bt1120
    

3.3. audio

3.3.1. 简介

prog_audio提供音频播放和录音的功能参考。

3.3.2. 传参说明

prog_audio使用说明:

-t: 程序的运行时间(秒数),不指定则会一直运行
-I: 使能AI
-o: AI录音的输出路径
-d: AI的设备ID(WDMA1[0] WDMA2[1] WDMA3[2] WDMA4[3] WDMA5[4])
-m:AI的声道模式(Mono[1] Stereo[2] 4ch[4] 6ch[6] 8ch[8])
-v: AI音量参数(Amic 0~19, Dmic 0~6, Linein 0~7)
-s: AI采样率8000/16000/32000/48000/96000
-a : AI 挂载设备号(10进制输入)

-O : Enable AO
-i : AO 音频路径
-D : AO 设备ID(RDMA1[0] RDMA2[1] RDMA3[2])
-A : AO挂载设备号(16进制输入)
-M : AO 通道模式(Stereo[0] Double_mono[1] Double_left[2] Double_right[3] Exchange[4] Only_left[5] Only_right[6])
-V : AO 音量参数(-60 ~ 30)

3.3.3. 程序执行

a.录音测试

./prog_audio -I -o . -d 0 -a 1 -m 2 -s 16000 -v 18

b.音频播放

./prog_audio -O -i ./music/16K_16bit_MONO_30s.wav -D 0 -A 0x1 -M 1

3.4. venc

3.4.1. 简介

prog_venc提供了VENC使用参考。

3.4.2. 传参说明

./prog_venc xxx.json dump

使用参数:

--Dump 可选参数,带dump则为编码并存为es流,否则只编码不存文件。性能测试不建议带该参数,直接使用./prog_venc xxx.json,如果带dump,则会增加每隔一段时间循环删除旧文件,创建新文件的动作。

--xxx.json 必选参数,为编码配置文件。

"dev0": 使能Venc0,用Venc0需设置为1,否则设置为0.  
"dev0_chnNum": Venc0 chn数,如8,则开启venc0的8路编码,通道数为0-7.
"dev1": 0, 使能Venc1,用Venc1需设置为1,否则设置为0.
"dev1_chnNum": Venc1 chn数,如8,则开启venc1的8路编码,通道数为0-7.
"multi_yuv": 是否采用读多个yuv文件的方式进行编码,设置为1是开启(参考Venc_config_multi_yuv_h264.json),设置为0是不开启(即读一个yuv文件来编码,参考Venc_config_h264.json)。性能测试建议设置为0,如果置1,则会增加多个文件的open,close动作。

"attr": 编码参数
"codec": 编码类型,"h264"为H264模式,"h265"为H265模式
"eRcMode": 码率控制方式, fixqp,cbr, vbr, avbr
"yuv_path": 读取yuv文件的路径(注意读多个yuv文件时候要把多个yuv文件放到同一目录,此处的路径写法参考Venc_config_multi_yuv_h264.json,文件里会自动增加后缀去读取)
"yuv_width": yuv数据宽(720)
"yuv_height": yuv数据高(576)
"yuv_fmt": yuv数据格式(11即为E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420)
"output_path": 存成es流文件的路径
"frame_count": 编码帧数,到达改帧以后,自动删除旧文件,重新创建新的文件。需和dump一起使用。

"ref": 参考帧模式: NORMAL IP, LTR(VI REF IDR), LTR(VI REF VI),TSVC-2,TSVC-3
"set": 使能参考帧模式,设置为1开启,设置为0关闭(即普通模式NORMAL IP)

"base","enhance","pred" 这3个数值决定参考帧的模式,如下表:

参考帧模式 参数取值
NORMAL IP Enhance = 0
LTR(VI REF IDR) Enhance = *, pred = 0
LTR(VI REF VI) Enhance = *, pred = 1
TSVC-2 Enhance = 1, pred = 1
TSVC-3 Base = 1, Enhance = 3, pred = 1

base取值大于1,enhance取值[0,255], pred取值0或1。


3.5. algo

3.5.1. 简介

prog_algo提供了算法相关使用参考,目前支持人形人脸机动车非机动车检测。

pipeline:画检测框通过st_main_algo.c中宏定义DRAW_DETECT_RECT_BY_FB来控制,默认FB画框.

  1. Draw rect by RGN

    VDEC->SCL(RGN)->DISP         JPD->SCL(RGN)->DISP
    |                               |
    ->SCL->IPU                     ->SCL->IPU
    
  2. Draw rect by FB

    VDEC->DISP                    JPD->SCL->DISP
    |                               |
    ->SCL->IPU                     ->SCL->IPU
    

3.5.2. 配置文件

xvr_demo/source/algo/config.json是所用视频测试码流的相关参数和UI显示所需要的相关参数的配置文件。与nvr demo的配置文件一样,具体细节参考3.1.2章节。

3.5.3. 程序执行

  1. 算法库

    路径:xvr_demo/source/algo/

    sstar_alarm_api.h → 头文件

    libsstar_algo_alarm.a → 静态库

    libsstar_algo_alarm.so → 动态库,注意运行程序前先添加库的路径到环境变量。

    export LD_LIBRARY_PATH=LD_LIBRARY_PATH: → libsstar_algo_alarm.so的路径

  2. 算法模型

    路径:xvr_demo/source/algo/model

    sypf5360302_fixed.sim_sgsimg.img → 人形人脸检测模型

    sypc5.480303_fixed.sim_sgsimg.img → 人形机动车检测模型

    sypc5.480301_fixed.sim_sgsimg.img → 人形机动车非机动车检测模型

    prog_algo执行时会在默认当前路径加载算法模型,因此提前将模型与prog_algo置于同一路径下。

  3. 程序执行及参数

    ./prog_algo config.json alarmType bDrawRect
    

    参数说明:

    -- alarmType

    1:face and person,人形人脸检测

    2:smd,人形机动车检测

    3:smd2,人形机动车非机动车检测

    -- bDrawRect

    0:不画检测框

    1:画检测框

3.5.4. 辅助命令

程序执行后会有以下辅助命令:

[-------Test case list------]
|-> 0: add alarm chn
|-> 1: del alarm chn
|-> 2: add alarm rgn on specified chn
|-> 3: del alarm rgn on specified chn
|-> 4: reset alarm rgn on specified chn
|-> 5: set send frame time interval(ms)
|-> 6: exit

0:增加一路检测通道

1:删除一路检测通道

2:在指定通道增加一个检测区域

3:在指定通道删除一个检测区域

4:在指定通道重置一个检测区域

5:设置vdec送帧的间隔来控制送流速度

6:程序退出


3.6. fisheye

3.6.1. 简介

prog_fisheye提供鱼眼矫正相关参考。

3.6.2. 程序执行

resource目录下放置了demo运行所需的配置资源文件,其中1080p_fisheye.nv12为原始鱼眼图片资源,CalibPoly_new.bin为镜头畸变参数,xx.json为LDC模块需要的配置文件。将上述资源文件与prog_fisheye置于同一级目录下,运行./prog_fisheye即可。

3.6.3. 辅助命令

  1. exit

    退出APP。

  2. info

    查看输入数字0-16,分别对应的矫正json文件。

  3. 0-16

    输入数字0-16,代表切换到不同的模式下去重新矫正一张图片。

    注意连续矫正时候,之前相同名称的图片会被覆盖。

    0  - 1O模式
    1  - 侧面 1P_Wm
    2  - 侧面 1P_Wm + 3R_Wm
    3  - 侧面 1P_Wm + 4R_Wm
    4  - 侧面 1P_Wm + 8R_Wm
    5  - 底部 2P_Dm
    6  - 底部 1P_Dm + 1R_Dm
    7  - 底部 1P_Dm + 6R_Dm
    8  - 底部 1O + 3R_Dm
    9  - 底部 1O + 4R_Dm
    10 - 底部 1O + 8R_Dm
    11 - 顶部 2P_Cm
    12 - 顶部 1P_Cm + 1R_Cm
    13 - 顶部 1P_Cm + 6R_Cm
    14 - 顶部 1O + 3R_Cm
    15 - 顶部 1O + 4R_Cm
    16 - 顶部 1O + 8R_Cm
    

    最后矫正出的文件在:output/demo/xxx/xxx/image/


3.7. stress

3.7.1. 简介

stress demo是一个针对NVR做压力测试的demo,可以通过脚本配置需要测试的es流,非常灵活方便。

可以用于码流验证,性能验证,压力测试等等。流程参考nvr demo。

3.7.2. 配置文件

prog_stress都是从config文件去读需要播放的es流信息,所以需要提前将要播的es加到config中,格式如下:

//    Index,  Type,  Width,  Height,  RefNum, bEsAddHead,  Path,
VDEC =  0,   h264,  1920,   1080,     1,       1,          1080P30.h264

index最好是从0往下递增,某个流不想测试也可以直接把这行注释。path默认路径是demo所在路径,这里也可以带路径传入,比如 ../nref/1080p_2ref.h265。

3.7.3. 程序执行

demo有多种使用方法,可以灵活运用

  1. #./prog_stress configFilePath timing index DispWin

    参数1永远是配置文件路径;参数2为timing,数值参考下面结构体;参数3为要播放的es流index;参数4为播放路数,每路都用相同的码流,这个参数可以不带,默认播放1路。

  2. #./prog_stress configFilePath mix timing index1 index2 index3 ...

    参数2为mix代表混合播放,参数3为timing值,后面带几个index就播放几路,index可重复

  3. #./prog_stress configFilePath play DispWin timing

    参数2为play代表随机播放,DispWin 为路数,timing可以不带,默认输出1080p60.

    执行后会从config文件里面随机挑出DispWin路来播放,只要不超规格,index也有可能重复。

  4. #./prog_stress configFilePath rand1

    压力测试项,timing随机,随机播放1 ~ 64路/全部销毁/随机播放1 ~ 64路...,如此循环,间隔时间写死10s;index也是随机,只要不超规格。

  5. #./prog_stress configFilePath rand2

    压力测试项,先随机播放64路,timing随机,然后每隔5s随机销毁1路,再隔5s随机添加一路,如此循环。

  6. #./prog_stress configFilePath rand3

    压力测试项,先随机播放64路,timing随机,然后每隔10s切屏一次,切屏路数1~64路随机,如此循环。

  7. #./prog_stress configFilePath loop

    将config中的码流遍历播放一次,timing随机。

3.7.4. 辅助命令

  1. exit

    退出程序,也可以用ctrl+c

  2. sleep [arg]

    调整送流时间间隔,单位ms

  3. drop [arg]

    每隔arg ~ 2*arg帧丢掉当前帧一定数据,如果当前帧大小为size,会随机丢掉1 ~ size数据量。

    drop 0 则会恢复正常送流。

  4. del [arg]

    删除第arg通道,记得是从1开始数,从左到右,从上往下数

  5. add [arg1] [arg2]

    添加第arg1通道,index为arg2

  6. split [arg1] [arg2]

    切换到arg1分屏,原来为arg2分屏

  7. help

    打印命令用法


3.8. hdmi

3.8.1. 简介

prog_hdmi用于HDMI兼容性测试,同时开启音频视频播放及UI显示。

3.8.2. 程序执行

将xvr_demo/source/hdmi中的资源文件目录ui_dat及其内容与prog_hdmi置于同一目录,执行./prog_hdmi

通过鼠标左击相应分辨率图片进行分辨率切换。由于该demo 只是用于测试HDMI兼容性的,有视频、音频、鼠标即可,为了方便使用,并没做资源文件的动态指定。

  1. 是否需要FB,通过FB_ENABLE 开关进行切换

  2. ui_dat目录存放的是可点击图标的图片数据,以及鼠标数据所支持的分辨率:720P_50hz, 720P_60hz, 1080P_50hz, 1080P_60hz, 1280x800, 1280x1024, 1024x768, 1366x768, 1440x900, 1600x1200, 1680x1050, 2560x1440, 3840x2160

  3. 48K_16bit_MONO_60s.wav 是代码里面固定的音频文件,如要更改,在st_main_hdmi.c指定后重新编译

  4. D125.h265 代码里面固定了的es流文件,如要更改,在st_main_hdmi.c指定后重新编译


3.9. wm

3.9.1. 简介

prog_wm用于介绍wm模块用法以及测试wm模块性能,绑定关系为vdec-wm-disp。

3.9.2. 配置文件

prog_wm的配置文件同prog_stress的使用,需要提前将要播的es加到config.txt中,格式如下:

//    Index,  Type,  Width,  Height,  RefNum, bEsAddHead,  Path,
VDEC =  0,   h264,  1920,   1080,     1,       1,          1080P30.h264

index最好是从0往下递增,某个流不想测试也可以直接把这行注释。path默认路径是demo所在路径,这里也可以带路径传入,比如 ../nref/1080p_2ref.h265。

3.9.3. 程序执行

./prog_wm config.txt 4 1 80 1920 1080

参数1:config.txt 如上述配置文件。

参数2:DISP显示timing, 4代表1080P60, 13代表4K30。

参数3:config.txt当中的index数,代表当前选择config.txt中哪个文件进行解码。1代表 index为1对应的文件。

参数4:代表解码路数,也代表wm窗口的路数,因为是一一对应关系。80代表80路。

参数5:wm输出宽,1920代表wm输出宽1920,一般和显示分辨率对应。

参数6:wm输出高,1080代表wm输出高1080,一般和显示分辨率对应。