海思Hi3519A开发(5.梳理海思文档与运行sample代码)

文章目录

  • 1 梳理文档
    • 主要的文档
    • 主要例程
    • 关于 yuv 文件的工具
  • 2 运行 sample 代码
    • 编译
    • 执行程序

1 梳理文档

唉,海思的文档真的是让人一言难尽…我也不多吐槽了,还是说说最近的体会吧。
大家作为开发者最关心 API 怎么用,海思也对应地提供了 API 参考文档和例程。


主要的文档

  • 在 Hi3519A V100R001C02SPC010\ReleaseDoc\zh\01.software\board\MPP 目录下的
    HiMPP V4.0 媒体处理软件开发参考.pdf
  • 以及在 Hi3519A V100R001C02SPC010\ReleaseDoc\zh\01.software\board\SVP 目录下的
    HiIVE API 参考.pdfHiIVS API参考.pdf

大部分需要用到的 API 都在 IVE 中, IVS主要对应的是 Motion Detection(移动侦测)。

主要例程

在 Linux 中进入 Hi3519AV100_SDK_V2.0.1.0/smp/a53_linux/mpp/sample 目录,里面的文件大部分都和 MPP 有关系,我们需要例程的在 Hi3519AV100_SDK_V2.0.1.0/smp/a53_linux/mpp/sample/svp/ive 目录下。
sample_ive_main.c 主要有以下功能

   printf("\t 0)BgModel,:0, not encode;1,encode.:0,not call vo;1,call vo.(VI->VPSS->IVE->VGS->[VENC_H264]->[VO_HDMI]).\n");
   printf("\t 1)Gmm,:0, not encode;1,encode.:0,not call vo;1,call vo.(VI->VPSS->IVE->VGS->[VENC_H264]->[VO_HDMI]).\n");
   printf("\t 2)Occlusion detected.(VI->VPSS->IVE->VO_HDMI).\n");
   printf("\t 3)Motion detected.(VI->VPSS->IVE->VGS->VO_HDMI).\n");
   printf("\t 4)Canny,:0, part canny;1,complete canny.(FILE->IVE->FILE).\n");
   printf("\t 5)Gmm2.(FILE->IVE->FILE).\n");
   printf("\t 6)MemoryTest.(FILE->IVE->FILE).\n");
   printf("\t 7)Sobel.(FILE->IVE->FILE).\n");
   printf("\t 8)Ann.(FILE->IVE->STDIO).\n");
   printf("\t 9)St Lk.(FILE->IVE->FILE).\n");
   printf("\t a)Svm.(FILE->IVE->STDIO).\n");
   printf("\t b)Cnn.(FILE->IVE->STDIO).\n");

关于 yuv 文件的工具

海思的图片格式为 yuv,如果我们想测试自己的图片那就要把文件格式转换为 yuv

  1. 海思提供的代码
    参考文档是在 Hi3519A V100R001C02SPC010\ReleaseDoc\zh\01.software\pc\DEC_LIB 目录下的
    MJPEG PC解码库软件API参考.pdf
    对应的代码是 Hi3519A V100R001C02SPC010\Hi3519A V100R001C02SPC010\01.software\pc\DEC_LIB 目录下的 Hi_MJPEG_DEC_LIB_V1.0.0.6.rar ,程序的2个命令行参数分别是输入的文件名和输出的文件名。

  2. 使用 ffmpeg

    参考文档 【FFMPE系列】之FFMPEG常用命令

    安装 ffmpeg
    apt install ffmpeg

    将 MP4 视频转换为 yuv 格式文件(如果有需要也可以把 gray 改成 yuv420p 等其他格式)
    ffmpeg -i 1920x1080.mp4 -s 1920x1080 -pix_fmt gray 1920x1080.yuv

    播放 YUV 格式文件
    ffplay -video_size 1920x1080 -pix_fmt gray -i 1920x1080.yuv

2 运行 sample 代码

编译

  • a53_linux 下的 mpp 目录全部复制到 nfs 服务器中。
  • 执行以下命令:
    cd sample
    source /etc/profile
    export LC_ALL=C
    make
  • 等待编译完成
  • 在开发板上挂载 nfs
    mount -t nfs xxx.xxx.xxx.xxx:/nfs /nfsroot -o nolock
    (更新)
    这个命令连接不是很稳定
    换成mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xxx.xxx.xxx.xxx:/nfs /mnt
  • 板子加载驱动
    cd /nfsroot/mpp/ko
    ./load3519av100 -i -sensor0 imx334

执行程序

cd /nfsroot/mpp/sample/svp/ive
./sample_ive_main 4 1
效果如下:

/nfsroot/mpp/sample/svp/ive # ./sample_ive_main
Usage : ./sample_ive_main <index> [complete] [encode] [vo]
index:
         0)BgModel,<encode>:0, not encode;1,encode.<vo>:0,not call vo;1,call vo.(VI->VPSS->IVE->VGS->[VENC_H264]->[VO_HDMI]).
         1)Gmm,<encode>:0, not encode;1,encode.<vo>:0,not call vo;1,call vo.(VI->VPSS->IVE->VGS->[VENC_H264]->[VO_HDMI]).
         2)Occlusion detected.(VI->VPSS->IVE->VO_HDMI).
         3)Motion detected.(VI->VPSS->IVE->VGS->VO_HDMI).
         4)Canny,<complete>:0, part canny;1,complete canny.(FILE->IVE->FILE).
         5)Gmm2.(FILE->IVE->FILE).
         6)MemoryTest.(FILE->IVE->FILE).
         7)Sobel.(FILE->IVE->FILE).
         8)Ann.(FILE->IVE->STDIO).
         9)St Lk.(FILE->IVE->FILE).
         a)Svm.(FILE->IVE->STDIO).
         b)Cnn.(FILE->IVE->STDIO).
/nfsroot/mpp/sample/svp/ive # ./sample_ive_main 4 1
[SAMPLE_IVE_Canny]-219: Process success!

此时在 data/output/canny 里已经生成了经过边缘检测处理后的图像。
使用 yuvplayer 打开看一下效果
海思Hi3519A开发(5.梳理海思文档与运行sample代码)_第1张图片

你可能感兴趣的:(华为海思Hi3519A开发)