多媒体示例程序

概述

墨芯一代 Antoum 芯片集成了先进的多媒体硬件加速器套件,包括 4 个高效视频解码器引擎、1 个视频编码器引擎、4 个 JPEG 编解码器引擎和 4 个灵活的图像处理引擎。视频解码器引擎能够支持包括 H.264、H.265 在内的多种视频格式,实现多达 32 路 1080p 视频的同时解码,且解码可高达 60 帧每秒(FPS);JPEG 编解码器引擎则擅长处理多路 JPEG 图像的编解码任务,能够以 435 FPS 速度解码 4 路 1080p 的图片;此外,图像处理引擎还具备出色的多路图片裁剪与缩放功能,满足多样化的图像处理需求。

前提条件

  • 服务器已安装墨芯 AI 计算卡(例如 S30), 且能被系统正确识别。

  • 已安装 SOLA。安装 SOLA 的步骤,请参见 SOLA Toolkit 安装指南

  • 安装 FFmpeg,FFmpeg 安装步骤如下:

$ wget  https://moffett-oss-bucket.tos-cn-shanghai.volces.com/sola-demo/sola-demo-3.11.0.tar.gz
$ tar -zxvf sola-demo-3.11.0.tar.gz
$ cd sola-demo-3.11.0/multimedia/third_party/ffmpeg-4.4.5
$ ./configure --enable-shared --disable-static --disable-doc --disable-x86asm
$ make -j

# 默认安装到 /usr/local
$ sudo make install
$ cd ../../

检查当前 ld 搜索路径是否包含 /usr/local/lib:

$ ldconfig -v 2>/dev/null | grep ':'

如果没有包含,则参考以下方式添加:

$ echo /usr/local/lib | sudo tee -a /etc/ld.so.conf.d/x86_64-linux-gnu.conf

最后执行以下命令刷新系统动态库搜索路径的缓存:

$ sudo ldconfig

编译示例程序

在 multimedia 目录下,执行以下命令,编译 multimedia 目录下的所有示例程序:

$./build.sh

编译完成后,会在当前目录下生成 build/[project] 目录,其中包含了编译好的示例程序。

使用墨芯 AI 计算卡实现视频解码

视频解码是将压缩编码的视频数据还原为原始图像和声音的过程,它是视频播放、监控、传输等系统中的关键环节。

输入输出信息说明

信息 说明
输入形式 - 视频文件:如 MP4、H.264、H.265 文件
- RTMP 在线视频流
注意
- 输入视频分辨率 ≤ 1920×1080
- 最多支持 32 路并行解码
输入编码格式 H.264 / H.265(HEVC)
输出格式 JPEG 格式图片

使用示例

在multimedia 目录下编译后,二进制程序会生成在 build/AppDecode 目录下,测试文件位于 data/input/vpu 目录下,执行以下命令,实现视频解码:

$ ./build/AppDecode/AppDec --device_id=0 --core_id=0 --input_file=data/input/vpu/cip_B_NEC_3.265 --chan_num=1

说明:运行以上命令后,会在当前目录下生成解码后的 JPEG 图片,图片格式为 devX.coreY.output_vZ_f{n}.jpg,其中 X 代表 device_id,Y 代表 core_id,Z 代表 channel_id,{n} 代表帧序号(例如dev0.core0.output_v1_f1.jpg)。您可以将这些生成的图片与位于data/golden/vpu 目录下的对应图片进行对比,若两者完全一致,则表明解码过程成功。

参数说明如下:

参数 是否必须 说明
device_id 指定运行应用程序的 Antoum 芯片:
- 可单独指定(如 1)或连续指定(如 0-2
- 取值范围0{device_count - 1}
- 默认值0
core_id 指定 Antoum 芯片的运行核:
- 可单独指定(如 1)或连续指定(如 0-3
- 取值范围03
- 默认值0
input_file 输入视频文件/在线视频流的路径(需完整路径)
chan_num 核上视频处理的总路数:
- 取值范围18
- 默认值1
save_file 是否保存处理结果为 JPG 图片:
- 0:不保存
- 1:保存(默认)
output_dir 输出 JPG 图片的存放目录(默认当前目录)

使用墨芯 AI 计算卡实现图片裁剪缩放

图像处理技术是指对数字图像进行各种操作和处理的技术。它可以用于图像增强、图像复原、图像压缩、图像分割、图像识别等领域。

输入输出信息说明

信息 说明
输入信息
格式 NV12 格式图片
尺寸要求 必须 ≥ 8x8 且 ≤ 4096x4096
并行处理 最多支持 32 路并行
输出信息
格式 JPEG 格式图片
尺寸要求 必须 ≥ 32x32 且 ≤ 4096x4096,且宽度为 16 的倍数
裁剪窗 必须 ≥ 8x8 且 ≤ 输入图像尺寸

使用示例

在multimedia 目录下编译后,二进制程序会生成在 build/AppPPB 目录下,测试文件位于 data/input/pp 目录下,在 multimedia 目录下执行以下命令,实现图片的裁剪缩放:

$ ./build/AppPPB/AppPpb --device_id=0 --core_id=0 --input_img=data/input/pp/640x480.yuv --input_width=640 --input_height=480 --output_width=640 --output_height=480 --crop_top=0 --crop_left=0 --crop_bottom=480 --crop_right=640 --chan_num=1

说明:运行后会在当前目录下生成裁剪缩放后的 JPEG 图片,图片格式为 devX.coreY.outputZ.jpg,其中 X 代表 device_id,Y 代表 core_id,Z 代表 channel_id(例如 dev0.core0.output1.jpg)。 您可将生成的图片与 data/golden/pp 目录下的对应的图片进行对比,查看是否符合预期。

参数说明如下:

参数 是否必须 说明 取值范围与默认值
device_id 指定运行的 Antoum 芯片(可单独或连续指定,如 10-2 0 ~ {device_count-1}
默认值:0
core_id 指定芯片运行的核(可单独或连续指定,如 10-3 0 ~ 3
默认值:0
input_img 输入 YUV 图片路径 -
input_width 输入图片宽度 8 ~ 4096
input_height 输入图片高度 8 ~ 4096
output_width 输出 JPEG 图片宽度(需为 16 的倍数) 32 ~ 4096
output_height 输出 JPEG 图片高度 32 ~ 4096
crop_top 裁剪框左上角纵坐标 0 ~ input_height
默认值:0
crop_left 裁剪框左上角横坐标 0 ~ input_width
默认值:0
crop_bottom 裁剪框右下角纵坐标 crop_top ~ input_height
默认值:input_height
crop_right 裁剪框右下角横坐标 crop_left ~ input_width
默认值:input_width
chan_num 核上图像处理总路数 1 ~ 8
默认值:1
save_file 是否保存结果:
0=不保存
1=保存为 JPG
默认值:1
output_dir 输出 JPG 目录(默认当前目录) -