"); //-->
解码 h264/h265 视频或 jpg 图片,生成 yuv 图像。
1.1. 软件架构采用 MediaCodec 的 poll 模式来解耦输入和输出,可使解码帧率性能达到最优。 在主线程中灌码流数据:取出一个空的 input buffer,配置码流数据的地址信息(如 phys addr),再 queue input buffer 并通知解码器处理该帧数据; 另一个线程取输出 YUV 图像:通过 select 接收硬件解码完成通知,取出一个硬件填满输出图像的 output buffer,将解码结果写到文件中后归还 output buffer。
sample 代码位置在工程目录{sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/codec_sample。
目录结构如下:
. ├── codec_sample.sh ├── Kconfig ├── Makefile ├── Makefile.in └── src ├── Makefile ├── sample.c ├── sample_common.c ├── sample.h
根目录包含 Kconfig、codec_sample.sh 和外部接口的 makefile,Kconfig 用于控制该 demo 是否加入整体编译;codec_sample.sh 提供几种编解码执行脚本。
src 目录下的 makefile 用于 src 目录下的编译。src 目录下的 sample.c 是 main 入口的所在文件,sample_common 包含了一些共用的 api,sample_venc.c 包含编码相关函数,sample_vdec.c 包含解码相关函数。
2. 编译2.1. 编译环境本 sample 的编译环境使用 SDK 中的 build 工具,请参考: Build 环境建立 。
2.2. 编译说明本 sample 主要依赖 libmm 提供的 API 头文件:
#include "hb_media_codec.h" #include "hb_media_error.h"
编译依赖的库有如下:
LIBS += -lpthread -ldl -lhbmem -lalog -lmultimedia LIBS += -lavformat -lavcodec -lavutil -lswresample
编译命令:
# 进入SDK所有目录{sdk_dir},并source构建环境(参见上)。
# 编译本sample:
bdm libmm-sample
# 输出文件:
{sdk_dir}/out/debug-gcc_{gcc_version}/build/test/samples/platform_samples/source/S83_Sample/S83E04_Module/codec_sample3. 运行3.1. 支持平台Matrix 6P/H
3.2. 板端部署及配置刷写系统软件镜像后,本 sample 的可执行文件位于板端:/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/。
可能需要用到的资源:
执行脚本 codec_sample.sh 位于板端:/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/;
输入 H264、H265、JPG 文件可使用脚本或者用户自行准备。
codec_sample : 应用程序名字。
下面的表格是具体参数的说明:

Usage: ./codec_sample
-m --samplemode sample mode, default encoder, {0-encoder, 1-decoder}
-c --codecid codec id, default h264, {0-h264, 1-h265, 2-mjpeg, 3-jpeg}
-w --width width, default 3840
-h --height height, default 2160
-p --pixfmt pix fmt, default nv12, {0-yuv420p, 1-nv12, ..}
-n --threadnum test thread number, default 1
-i --inputfile input file name, default ./input_${w}x${h}_${pixfmt}.yuv
-o --outputfile output file name, default ./output_${w}x${h}_${pixfmt}.{code_type}
-u --core unit, default 03.3.3. 运行方法输入源准备:
执行如下脚本,此脚本的作用是把测试用的源文件拷贝到/map/路径下,然后用-i 指定文件路径;
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/decoder_resoure_prepare.sh
用户也可以不执行脚本,自行准备源文件,拷贝到/map/路径下,然后用-i 指定文件路径。
解码一路 3840x2160 的 h264 视频, 生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -i /map/input_3840x2160_nv12.h264
解码一路 1920x1080 的 h265 视频, 生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 1 -w 1920 -h 1080 -i /map/input_1920x1080_nv12.h265
解码一张 1920x1088 的 jpg 图片, 生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 3 -w 1920 -h 1088 -i /map/input_1920x1088_nv12.jpg
解码两路 3840x2160 的 h264 视频, 生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -n 2 -i /map/input_3840x2160_nv12.h264
解码四路 1920x1080 的 h265 视频, 生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -m 1 -c 1 -n 4 -w 1920 -h 1080 -i /map/input_1920x1080_nv12.h265
上面的命令默认跑 VPU 或者 JPU 硬件核 0,可通过-u 参数调整,加入-u 1 表示指定运行 VPU 核 1 或者 JPU 核 1,加入-u 2 表示指定运行 VPU 核 2 或者 JPU 核 2。
例如跑 VPU 核 1,解码一路 3840x2160 的 h264 视频,生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -u 1 -m 1 -i /map/input_3840x2160_nv12.h264
例如跑 JPU 核 2,解码一张 1920x1088 的 jpg 图片,生成 yuv 图像。
/app/sample/S83_Sample/S83E04_Module/codec_sample/bin/codec_sample -u 2 -m 1 -c 3 -w 1920 -h 1088 -i /map/input_1920x1088_nv12.jpg3.3.4. 运行结果说明
如下图所示为运行成功:
使用 yuvplayer 查看生成的 yuv 图像文件是否正常:
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
曲面显示屏取代传统汽车挡风玻璃
面向算法硬件加速的FPGA实现方法
采用Mean-Shift和Camshift算法相结合的火焰视频图像跟踪设计
加密算法之MD5算法
自动驾驶正推动汽车行业加速布局人形机器人
ADI:传感技术助力未来自动驾驶的发展
有关指纹算法
高阶智驾要落地,线控底盘为什么必须执行得准
目标跟踪算法在红外热成像跟踪技术上的应用
数字PID控制及其改进算法的应用
简单实用的单片机CRC 快速算法
携手ADI赢得未来
PID算法
数字PID控制算法之一
计算机科学与技术反思录(2)
求FSK信号的解调算法,主要是铁路上的移频信号!
vxwokrs下静态图像压缩算法(上)
地平线征程 6 系列集成 Cadence Tensilica Vision DSP,实现规模化量产,合作加速智能驾驶解决方案部署
76-81GHz自动驾驶CMOS RADAR
基于LPC2138的血压测量算法开发平台电路图
实时训练驾驶人工智能
Ouster推出 Rev8 OS 激光雷达系列 原生彩色激光雷达正式落地
[转帖]us/os就绪表的维护算法分析
无线传感器网络低功耗分簇路由算法设计
2035年自动驾驶出租车市场规模将达1680亿美元
特斯拉监督版FSD加入中国市场
掘金自动驾驶,不要把大坑当机会
CRC算法原理及C语言实现
自动驾驶的现状与未来(节选)
加快实现自动驾驶(完整小组讨论)