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. 编译¶
-
完整编译project,xvr_demo的编译依赖于project;
-
cd sdk/verify/xvr_demo/;
-
make clean;make;
-
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画框.
-
Draw rect by RGN
VDEC->SCL(RGN)->DISP JPD->SCL(RGN)->DISP | | ->SCL->IPU ->SCL->IPU
-
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. 程序执行¶
-
算法库
路径: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的路径
-
算法模型
路径: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置于同一路径下。
-
程序执行及参数
./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. 辅助命令¶
-
exit
退出APP。
-
info
查看输入数字0-16,分别对应的矫正json文件。
-
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有多种使用方法,可以灵活运用
-
#./prog_stress configFilePath timing index DispWin
参数1永远是配置文件路径;参数2为timing,数值参考下面结构体;参数3为要播放的es流index;参数4为播放路数,每路都用相同的码流,这个参数可以不带,默认播放1路。
-
#./prog_stress configFilePath mix timing index1 index2 index3 ...
参数2为mix代表混合播放,参数3为timing值,后面带几个index就播放几路,index可重复
-
#./prog_stress configFilePath play DispWin timing
参数2为play代表随机播放,DispWin 为路数,timing可以不带,默认输出1080p60.
执行后会从config文件里面随机挑出DispWin路来播放,只要不超规格,index也有可能重复。
-
#./prog_stress configFilePath rand1
压力测试项,timing随机,随机播放1 ~ 64路/全部销毁/随机播放1 ~ 64路...,如此循环,间隔时间写死10s;index也是随机,只要不超规格。
-
#./prog_stress configFilePath rand2
压力测试项,先随机播放64路,timing随机,然后每隔5s随机销毁1路,再隔5s随机添加一路,如此循环。
-
#./prog_stress configFilePath rand3
压力测试项,先随机播放64路,timing随机,然后每隔10s切屏一次,切屏路数1~64路随机,如此循环。
-
#./prog_stress configFilePath loop
将config中的码流遍历播放一次,timing随机。
3.7.4. 辅助命令¶
-
exit
退出程序,也可以用ctrl+c
-
sleep [arg]
调整送流时间间隔,单位ms
-
drop [arg]
每隔arg ~ 2*arg帧丢掉当前帧一定数据,如果当前帧大小为size,会随机丢掉1 ~ size数据量。
drop 0 则会恢复正常送流。
-
del [arg]
删除第arg通道,记得是从1开始数,从左到右,从上往下数
-
add [arg1] [arg2]
添加第arg1通道,index为arg2
-
split [arg1] [arg2]
切换到arg1分屏,原来为arg2分屏
-
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兼容性的,有视频、音频、鼠标即可,为了方便使用,并没做资源文件的动态指定。
-
是否需要FB,通过FB_ENABLE 开关进行切换
-
ui_dat目录存放的是可点击图标的图片数据,以及鼠标数据所支持的分辨率:720P_50hz, 720P_60hz, 1080P_50hz, 1080P_60hz, 1280x800, 1280x1024, 1024x768, 1366x768, 1440x900, 1600x1200, 1680x1050, 2560x1440, 3840x2160
-
48K_16bit_MONO_60s.wav 是代码里面固定的音频文件,如要更改,在st_main_hdmi.c指定后重新编译
-
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,一般和显示分辨率对应。