|
@@ -10,13 +10,13 @@ firmware 固件
|
|
|
|
|
|
README.md 本文件
|
|
|
|
|
|
-### 【wave420l代码结构】
|
|
|
+## wave420l代码结构
|
|
|
|
|
|
wave420l源码由两部分组成:
|
|
|
|
|
|
- code/vdi/linux/driver: 编译生成vpu.ko,为wave420l的模块文件,主要功能是空间分配及映射、中断注册及平台无关功能实现。
|
|
|
+ code/vdi/linux/driver: 编译生成venc.ko,为wave420l的模块文件,主要功能是空间分配及映射、中断注册及平台无关功能实现。
|
|
|
|
|
|
- code/下除vdi/linux/driver以外的目录: 编译生成sample app。主要功能是初始化vpu,设置vpu工作参数,启动vpu编码工作。
|
|
|
+ code/下除vdi/linux/driver以外的目录: 编译生成sample app。主要功能是初始化venc,设置venc工作参数,启动venc编码工作。
|
|
|
|
|
|
## 代码编译
|
|
|
|
|
@@ -30,45 +30,121 @@ Wave420Driver.mak 编译linux模块驱动makefile文件
|
|
|
|
|
|
Wave420Enc.mak 编译单路编码示例程序makefile
|
|
|
|
|
|
-### 驱动模块编译
|
|
|
+build.sh 工程编译脚本
|
|
|
|
|
|
-$ source set_env.sh
|
|
|
+### 编译脚本
|
|
|
|
|
|
-$ make -f Wave420Driver.mak
|
|
|
+提供一键编译脚本,所有的输出文件存放在venc_driver目录中。其中驱动在venc_driver/driver目录中,其他运行时需要的应用程序、运行脚本、yuv源文件、固件等,存放在venc_driver中。
|
|
|
|
|
|
-编译成功后在vdi/linux/driver目录下会生成vpu.ko,在运行wave420l sample app前,需要先通过专用加载脚本加载该模块。
|
|
|
-
|
|
|
-### sample app程序编译
|
|
|
-
|
|
|
-$ source set_env.sh
|
|
|
-
|
|
|
-$ make -f Wave420Enc.mak
|
|
|
-
|
|
|
-编译成功后在code目录下会生成w4_enc_test可执行程序。
|
|
|
+```bash
|
|
|
+$ ./build.sh
|
|
|
+```
|
|
|
|
|
|
## wave420L运行
|
|
|
|
|
|
-### 1.vpu.ko加载
|
|
|
-
|
|
|
-编译生成的vpu.ko不能直接通过insmod命令加载,需要使用code\vdi\linux\driver\load.sh脚本进行加载。
|
|
|
-
|
|
|
-### 2.sample app运行
|
|
|
-
|
|
|
-运行run.sh,开始编码。具体命令如下:
|
|
|
-
|
|
|
-***./w4_enc_test --secondary-axi=0 --stream-endian=16 --frame-endian=16 --enable-lineBufInt -n25 --kbps=30 --nv21=0 --picWidth=256 --picHeight=128 --output=set1_001A.cfg.bin --cfgFileName=./cfg/set1_001A.cfg --ref_stream_path=./yuv/foreman_256x128.yuv***
|
|
|
-
|
|
|
-典型的放置目录结构如下:
|
|
|
-
|
|
|
-![image-20211013174222901](C:\Users\jiack\AppData\Roaming\Typora\typora-user-images\image-20211013174222901.png)
|
|
|
-
|
|
|
-monet.bin/monet.h:与wave420l/firmware目录下内容对应
|
|
|
-
|
|
|
-w4_enc_test:sample app测试程序
|
|
|
-
|
|
|
-vpu.ko:vpu驱动程序
|
|
|
-
|
|
|
-load.sh:vpu.ko加载脚本
|
|
|
-
|
|
|
-其它:与code目录下相同名字的内容对应
|
|
|
-
|
|
|
+### 1. venc.ko加载
|
|
|
+
|
|
|
+编译生成的venc.ko通过专用的加载脚本进行加载(load.sh)/卸载(unload.sh)。
|
|
|
+
|
|
|
+脚本存放在目录venc_driver/driver中。
|
|
|
+
|
|
|
+```bash
|
|
|
+# cd venc_driver/
|
|
|
+# ls
|
|
|
+cfg enc_352x288_8b.sh stream
|
|
|
+driver enc_4096x2160_8b.sh w4_enc_test
|
|
|
+enc_1920x1080_8b.sh monet.bin yuv
|
|
|
+enc_256x128.sh output
|
|
|
+enc_352x288_10b.sh run.sh
|
|
|
+# cd driver/
|
|
|
+# ls
|
|
|
+load.sh unload.sh venc.ko
|
|
|
+# ./load.sh
|
|
|
+[ 1213.628546] SUCCESS alloc_chrdev_region
|
|
|
+[ 1213.636767] [pmu]domain: 0x40 enable
|
|
|
+```
|
|
|
+
|
|
|
+### 2. sample app运行
|
|
|
+
|
|
|
+运行所有的enc_*.sh,执行编码操作。
|
|
|
+
|
|
|
+也可以执行./run.sh,运行所有测试脚本。
|
|
|
+
|
|
|
+编码输出的H265流文件存放在output目录中。
|
|
|
+
|
|
|
+```bash
|
|
|
+$ cd venc_driver/
|
|
|
+$ ./enc_1920x1080_8b.sh
|
|
|
+[VDI] instance pool physaddr=0x4005000, virtaddr=0xffffffff98142000, base=0x4005000, size=4096
|
|
|
+[VDI] map vdb_register core_idx=0, virtaddr=0x3f97f12000, size=65535
|
|
|
+[VDI] allocate_common_memory, physaddr=0xffffffffa0100000, virtaddr=0xffffffff97d12000
|
|
|
+[VDI] vdi_get_common_memory physaddr=0xffffffffa0100000, size=2097152, virtaddr=0xffffffff97d12000
|
|
|
+[VDI] success to init driver
|
|
|
+FW PATH = monet.bin
|
|
|
+[VDI] instance pool physaddr=0x4005000, virtaddr=0xffffffff97dfc000, base=0x4005000, size=4096
|
|
|
+[VDI] map vdb_register core_idx=0, virtaddr=0x3f97dec000, size=65535
|
|
|
+[VDI] allocate_common_memory, physaddr=0xffffffffa0100000, virtaddr=0xffffffff97bec000
|
|
|
+[VDI] vdi_get_common_memory physaddr=0xffffffffa0100000, size=2097152, virtaddr=0xffffffff97bec000
|
|
|
+[VDI] success to init driver
|
|
|
+
|
|
|
+VPU INIT Start!!!
|
|
|
+
|
|
|
+get hw version 0 !!!
|
|
|
+VPU coreNum : [0]
|
|
|
+Firmware : CustomerCode: 0000 | version : 0.0.0 rev.196485
|
|
|
+Hardware : 0009
|
|
|
+API : 5.5.34
|
|
|
+
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa0300000, virtaddr=0x3f970ec000~0x3f97bec000, size=11534336
|
|
|
+STREAM_BUF=0xa0300000 STREAM_BUF_SIZE=11534336(0xb00000)
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa0020000, virtaddr=0x3f970cc000~0x3f970ec000, size=131072
|
|
|
+* Enc InitialInfo =>
|
|
|
+ instance #0,
|
|
|
+ minframeBuffercount: 2
|
|
|
+ minSrcBufferCount: 1
|
|
|
+ picWidth: 1920
|
|
|
+ picHeight: 1080
|
|
|
+ [VDI] vdi_allocate_dma_memory, physaddr=0xa0e00000, virtaddr=0x3f96dd4000~0x3f970cb600, size=3110400
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa1100000, virtaddr=0x3f96adc000~0x3f96dd3600, size=3110400
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa0040000, virtaddr=0x3f96abb000~0x3f96adc000, size=135168
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa0080000, virtaddr=0x3f96a98000~0x3f96abb000, size=143360
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa00c0000, virtaddr=0x3f96a86000~0x3f96a98000, size=73728
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa1400000, virtaddr=0x3f96a45000~0x3f96a86000, size=266240
|
|
|
+Allocated source framebuffers : 1, size : 3110400
|
|
|
+[VDI] vdi_allocate_dma_memory, physaddr=0xa1500000, virtaddr=0x3f9674d000~0x3f96a44600, size=3110400
|
|
|
+output bin file: ./output/inter_8b_11.cfg.265
|
|
|
+Enc Start : Press any key to stop.
|
|
|
+------------------------------------------------------------------------------
|
|
|
+I NO T RECON RD_PTR WR_PTR BYTES SRCIDX USEDSRCIDX Cycle
|
|
|
+------------------------------------------------------------------------------
|
|
|
+00 1 0 0 a0300000 a0319f70 19f70 0 0 5111808
|
|
|
+00 2 1 1 a0300000 a030b867 b867 0 0 5013504
|
|
|
+00 3 1 0 a0300000 a030bbb2 bbb2 0 0 5046272
|
|
|
+00 4 1 1 a0300000 a030ba33 ba33 0 0 5046272
|
|
|
+00 5 1 0 a0300000 a030ba09 ba09 0 0 5046272
|
|
|
+00 6 1 1 a0300000 a030b63d b63d 0 0 5046272
|
|
|
+00 7 1 0 a0300000 a030ba7c ba7c 0 0 5046272
|
|
|
+00 8 1 1 a0300000 a030bb5d bb5d 0 0 5046272
|
|
|
+00 9 1 0 a0300000 a030b736 b736 0 0 5046272
|
|
|
+00 10 1 1 a0300000 a030baa1 baa1 0 0 5046272
|
|
|
+00 10 0 -1 a0300000 a0300000 0 -1 -2 0
|
|
|
+
|
|
|
+inst 0 Enc End. Tot Frame 10
|
|
|
+# ls
|
|
|
+ErrorLog.txt enc_352x288_10b.sh run.sh
|
|
|
+cfg enc_352x288_8b.sh stream
|
|
|
+driver enc_4096x2160_8b.sh w4_enc_test
|
|
|
+enc_1920x1080_8b.sh monet.bin yuv
|
|
|
+enc_256x128.sh output
|
|
|
+```
|
|
|
+
|
|
|
+### 3. venc.ko卸载
|
|
|
+
|
|
|
+```bash
|
|
|
+$ cd venc_driver/driver/
|
|
|
+$ ./unload.sh
|
|
|
+```
|
|
|
+
|
|
|
+### 4. 文件导出
|
|
|
+
|
|
|
+可以通过网络scp或者tftp将编码后的文件导出,使用视频播放工具(例如VLC)播放流视频。
|