Windsome Zeng ee4bb83b67 To get the best performance, use the new sifive_ccache_flush_entire function when data size is larger than 512KB. 3 months ago
..
code ee4bb83b67 To get the best performance, use the new sifive_ccache_flush_entire function when data size is larger than 512KB. 3 months ago
firmware 5b9ddff6da soft_3rdpart/wave511: Add LICENSE.txt 1 year ago
README.md bfc590321f soft_3rdpart/wave511: Added compilation instructions for ffmpeg 2 years ago

README.md

工程目录介绍

  1. code 驱动、测试源码和各种脚本等
  2. doc 设计文档相关
  3. firmware IP内部固件二进制程序
  4. media 测试用多媒体视频源
  5. ffmpeg ffmpeg工程
  6. README.md 本文件

工程编译

  1. 运行 . build_env.sh 编译环境设置
  2. make -f WaveDecDriver.mak 驱动编译
  3. make -f WaveDecode.mak 单路解码测试程序编译
  4. make -f WaveDecodeMult.mak 多路解码测试程序编译
  5. make -f WaveDecode-ffmpeg.mak 多媒体文件解码测试程序编译
  6. build_for_vdec.sh 本工程一键编译脚本
  7. build_ffmpeg.sh 编译ffmpeg脚本

注意: 运行make -f WaveDecode-ffmpeg.mak 之前,需要先执行./build_ffmpeg.sh,编译得到ffmpeg相关的库文件和头文件。强烈建议使用build_for_vdec.sh一键编译脚本编译全部文件。

编译输出文件

  1. vpu.ko 内核解码驱动程序
  2. dec_test 单路解码测试程序
  3. multi_instance_dec_test 多路解码测试程序
  4. ffmpeg_dec_test 带ffmpeg解析功能的解码测试程序

运行调试流程如下

  1. 编译内核
  2. 设置tftp 服务器
  3. Freedom 中加载uboot,并且启动
  4. 在Uboot控制台中利用网络加载内核并启动,样例如下: tftpboot 0xa0000000 192.168.70.220:image.fit bootm start 0xa0000000 bootm loados 0xa0000000 go 0x80700000 0x86000000
  5. 输入内核用户/密码(root/sifive),配置网络参数,样例如下: ifconfig eth0 down ifconfig eth0 192.168.70.250 netmask 255.255.255.0 route add default gw 192.168.70.1 ifconfig eth0 up
  6. 使用scp等工具,把调试用相关驱动、脚本和测试源下载到linux系统中 例如:scp x:\yyy\zzz root@192.168.70.250:~,可能的其他文件包括: Vpu.ko 驱动程序 load.sh 驱动加载脚本 unload.sh 驱动卸载脚本 chagall.bin firmware程序 dec_test 单路测试程序 multi_instance_dec_test 多路测试程序 ffmpeg_dec_test 带容器解析功能的测试程序 bd_10b_01.cfg_0.264 码流文件 xxxx.mp4 多媒体文件
  7. 运行 load.sh 加载驱动
  8. 运行 dec_test/multi_instance_dec_test/ffmpeg_dec_test 解码测试
  9. 取回yuv视频帧,并验证,样例如下: scp root@192.168.70.250:~\zzz.yuv x:\yyy\

测试程序命令行样例

  1. 单路解码 ./dec_test –output ./out.dat –input tv0.265 –codec 12

  2. 2路解码 ./multi_instance_dec_test –codec 0,0 –input bd_8b_01.cfg_0.264-0,bd_8b_01.cfg_0.264-1 –output bd_8b_01.cfg_0.yuv-0,bd_8b_01.cfg_0.yuv-1 –instance-num 2 –enable-wtl 1,1

  3. 4路解码 ./multi_instance_dec_test –codec 0,0,0,0 –input bd_8b_01.cfg_0.264-0,bd_8b_01.cfg_0.264-1,bd_8b_01.cfg_0.264-2,bd_8b_01.cfg_0.264-3 –output bd_8b_01.cfg_0.yuv-0,bd_8b_01.cfg_0.yuv-1,bd_8b_01.cfg_0.yuv-2,bd_8b_01.cfg_0.yuv-3 –instance-num 4 –enable-wtl 1,1,1,1

4.支持ffmpeg parser/demuxer ./ffmpeg_dec_test –codec 12 –output hevc_fhd_inter_8b_11.cfg_0.yuv –input media/hevc_fhd_inter_8b_11.cfg_0.mkv

备注

  1. VDEC默认使用cma方式从通用的CMA空间分配mem。如果想给VDEC指定特定的预留空间,可以在dts文件中做预留,同时,在文件code/vdi/linux/driver/vdec.c中,打开VPU_SUPPORT_RESERVED_VIDEO_MEMORY宏。预留方式简单示例:

    ```dts reserved_memory: reserved-memory {

    #address-cells = <2>;
    #size-cells = <2>;
    ranges;
    vpu_reserved: framebuffer@d8000000 {
        reg = <0x0 0xd8000000 0x0 0x20000000>;
    };
    

    }; vpu_dec:vpu_dec@118F0000 {

    compatible = "starfive,vdec";
    reg = <0 0x118F0000 0 0x10000>;
    memory-region = <&vpu_reserved>;
    interrupt-parent = <&plic>;
    interrupts = <23>;
    clocks = <&vpuclk>;
    clock-names = "vcodec";
    status = "okay";
    

    };