多媒体示例程序
概述
墨芯一代 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 )- 取值范围: 0 ~ 3 - 默认值: 0 |
input_file |
是 | 输入视频文件/在线视频流的路径(需完整路径) |
chan_num |
是 | 核上视频处理的总路数: - 取值范围: 1 ~ 8 - 默认值: 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 芯片(可单独或连续指定,如 1 、0-2 ) |
0 ~ {device_count-1} 默认值: 0 |
core_id | 否 | 指定芯片运行的核(可单独或连续指定,如 1 、0-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 目录(默认当前目录) | - |