RK3566 MPPJPEG 编码初入门 mpi_enc_test

一、导览

本文介绍了使用rk mpp 库的demo 程序,对一帧 nv12的yuv 图像进行jpeg 编码,最后输出jpeg图像的过程。作为学习mpp 入门的教程。
rk mpp 的源码仓库地址是:https://github.com/rockchip-linux/mpp/
参考文档在:https://github.com/rockchip-linux/mpp/blob/develop/doc/Rockchip_Developer_Guide_MPP_CN.md

二、编译程序

下载源码后,mpp 框架是使用CMake 进行编译的,首先需要配置好交叉编译工具,我是在linux 平台,aarch64 架构下使用的,所以编辑 mpp/build/linux/aarch64/arm.linux.cross.cmake
CMAKE_C_COMPILER、CMAKE_CXX_COMPILER 设置成项目所使用的工具链
在这里插入图片描述
然后执行 make-Makefiles.bash ,将自动调用cmake 生成makefile 文件,最后直接make 就能编译整个mpp 以及demo

编译生成的文件如下:

  • librockchip_mpp.so:mpp的运行时动态库
  • test/* :test 目录下存放所有的demo app

三、执行

首先将librockchip_mpp.so 添加到链接路径,准备好一张yuv图像,以及mpi_enc_test 程序

# 将ov5648.yuv 编码成jpeg图像,-t 表示编码类型为jpeg
root@RK356X:/mnt/nfs/output# ./mpi_enc_test -w 800 -h 600 -t 8 -i ./ov5648.yuv -o tmp.jpeg

demo输出的log需要通过 /var/sys/message 查看:

Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: cmd parse result:
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: input  file name: ./ov5648.yuv
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: output file name: tmp.jpeg
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: width      : 800
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: height     : 600
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: format     : 0
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_utils: type       : 8
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: ./mpi_enc_test start
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: jpege default encode only one frame. Use -n [num] for rc case
Dec  9 03:02:08 RK356X user.info mpp[392]: mpp_info: mpp version: unknown mpp version for missing VCS info
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: 0x7fac001e20 encoder test start w 800 h 600 type 8
Dec  9 03:02:08 RK356X user.info mpp[392]: mpp_enc: MPP_ENC_SET_RC_CFG bps 1800000 [112500 : 1912500] fps [30:30] gop 60
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: chn 0 encoded frame 0    size 41650  
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: chn 0 encode 1 frames time 11 ms delay   6 ms fps 89.27 bps 9996000
Dec  9 03:02:08 RK356X user.info mpp[392]: mpi_enc_test: ./mpi_enc_test average frame rate 89.27

可以看到编码了一帧图像,耗时11ms+6ms

直接运行/mpi_enc_test可以打印help信息:

Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: usage: ./mpi_enc_test [options]
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -i       input_file         input frame file                      
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -o       output_file        output encoded bitstream file         
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -w       width              the width of input picture            
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -h       height             the height of input picture           
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -hstride hor_stride         the horizontal stride of input picture
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -vstride ver_stride         the vertical stride of input picture  
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -f       format             the format of input picture           
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -t       type               output stream coding type             
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -tsrc    source type        input file source coding type         
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -n       max frame number   max encoding frame number             
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -g       gop reference mode gop_mode:gop_len:vi_len               
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -rc      rate control mode  set rc_mode                           
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -bps     bps target:min:max set tareget/min/max bps and rc_mode   
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -fps     in/output fps      set input and output frame rate       
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -qc      quality control    set qp_init/min/max/min_i/max_i       
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -s       instance_nb        number of instances                   
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -v       trace option       q - quiet f - show fps                
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -l       loop count         loop encoding times for each frame    
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -ini     ini file           encoder extra ini config file         
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi_enc_utils: -slt     slt file           slt verify data file                  
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: mpp coding type support list:
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: mpeg2            id 2
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: mpeg4            id 4
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: h.263            id 3
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: h.264/AVC        id 7
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: h.265/HEVC       id 16777220
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: vp8              id 9
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: VP9              id 10
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: avs+             id 16777221
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: jpeg             id 8
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: dec id 0 coding: av1              id 16777224
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: enc id 1 coding: h.264/AVC        id 7
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: enc id 1 coding: jpeg             id 8
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: enc id 1 coding: h265             id 16777220
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: type: enc id 1 coding: vp8              id 9
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: mpp color support list:
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 0     0x00000 YUV420SP,      NV12
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 1     0x00001 YUV420SP-10bit
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 2     0x00002 YUV422SP,      NV24
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 3     0x00003 YUV422SP-10bit
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 4     0x00004 YUV420P,       I420
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 5     0x00005 YUV420SP,      NV21
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 6     0x00006 YUV422P,       422P
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 7     0x00007 YUV422SP,      NV42
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 8     0x00008 YUV422-YUYV,   YUY2
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 10    0x0000a YUV422-UYVY,   UYVY
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 12    0x0000c YUV400-Y8,     Y800
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 15    0x0000f YUV444SP
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 16    0x00010 YUV444P
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65536 0x10000 RGB565
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65537 0x10001 BGR565
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65538 0x10002 RGB555
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65539 0x10003 BGR555
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65542 0x10006 RGB888
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65543 0x10007 BGR888
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65546 0x1000a ARGB8888
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65547 0x1000b ABGR8888
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65548 0x1000c BGRA8888
Dec  9 03:06:05 RK356X user.info mpp[399]: mpi: color: id 65549 0x1000d RGBA8888

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230998.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4.27-UE5.1设置打包Android环境

打包Android配置文件 1. 配置打包Android的SDK需求文件位于下面文件中: 2. 指定了对应的SDK环境变量名字以及NDK需求等: UE4.27-UE5.1--脚本自动配置 安装前提 1. 务必关闭虚幻编辑器和Epic Games Launcher,以确保NDK组件的安装或引擎环境…

概率论之 证明 正态分布的上a 分位点的对称的性质

公式(Z(a) -Z(1-a)) 表示正态分布的上(a)分位点与下(1-a)分位点在分布曲线上关于均值的对称性。 左侧 (Z(a)): 这是分布曲线上累积概率为(a)的那个点。也就是说,这是一个使得这个点及其左侧的面积占据整个曲线下方(a)的位置。 右侧 (Z(1-a))&#xff1…

基于STM32 + DMA介绍,应用和步骤详解(ADC多通道)

前言 本篇博客主要学习了解DMA的工作原理和部分寄存器解析,针对ADC多通道来对代码部分,应用部分作详细讲解,掌握代码编程原理。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。 本次博客开发板使用的是正点原子精英版&am…

软件设计师——程序设计语言基础(二)

📑前言 本文主要是【程序设计语言基础】——软件设计师——程序设计语言基础的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与…

感染HPV怎么办?佳卫苗杀灭病毒HPV助你告别焦虑

感染了HPV,我是不是要得宫颈癌了? 生活中经常能听到类似的问题,许多女性在医院检查出HPV病毒感染后,立马觉得人生黯淡无光,陷入无尽焦虑,随后便走上病急乱投医的错误之路。 首先,我们要明确一…

【Linux系统化学习】进程地址空间 | 虚拟地址和物理地址的关系

个人主页点击直达:小白不是程序媛 Linux专栏:Linux系统化学习 代码仓库:Gitee 目录 虚拟地址和物理地址 页表 进程地址空间 进程地址空间存在的意义 虚拟地址和物理地址 我们在学习C/C的时候肯定都见过下面这张有关于内存分布的图片&a…

机器学习-SVM(支持向量机)

推荐课程:【机器学习实战】第5期 支持向量机 |数据分析|机器学习|算法|菊安酱_哔哩哔哩_bilibili 赞美菊神ヾ ( ゜ⅴ゜)ノ 一、什么是支持向量机? 支持向量机(Support Vector Machine, SVM)是一类按监督学习&#xff0…

Windows的C盘爆掉了怎么办?

本文参考: C盘太满怎么办?亲测8种好用方法! 如果C盘的分区爆掉了,变红色了,是时候该处理这个问题了,解决你的C盘焦虑! 第一招:删除C盘文件 首先你会想到清理C盘里面的文件&#x…

spring集成mybatis简单教程

首先说下实现了什么效果,就是不用每次查询前手动创建 sessionFactory和添加datasource文件了。 整个工程结构是这样的 这次我也把代码放在了gitee上,方便大家更全貌的看到所有的实现细节。代码链接如下: Java: 一些Java代码 (gitee.com) …

第一课【习题】HarmonyOS应用/元服务上架

元服务发布的国家与地区仅限于“中国大陆” 编译打包的软件包存放在项目目录build > outputs > default下 创建应用时,应用包名需要和app.json5或者config.json文件中哪个字段保持一致? 发布应用时需要创建证书,证书类型选择什么…

时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队

对于小规模数据,我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间,它省去了低阶、系数和常数,仅代表的增长趋势,所以在小规模数据情况下, O(n2) 的排序算法可能会比 O(nlogn) 的…

[ROS2] --- 通信接口

1 通信接口的定义 通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让大家都好理解,我们可以给传递的数据定义一个标准的结构,这就是通信接口。 ROS的通信系统&am…

网络知识学习(笔记三)(传输层的TCP)

前面已经介绍了传输层的UDP协议的报文以及一下相关的知识点,本次主要是传输层的TCP协议,包括TCP报文的详细介绍;可靠传输、流量控制、拥塞控制等;建立连接、释放连接。 一、TCP基本知识点介绍 1.1、TCP协议的几个重要的知识点 …

IntelliJ IDEA 智能(AI)编码工具插件

文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件(免费)仅仅是模板填充,不智能。 Squaretest插件(收费)…

C语言搭建项目-学生管理系统(非链表)

、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…

clickhouse数据库磁盘空间使用率过高问题排查

一、前言 clickhouse天天触发磁盘使用率过高告警,所以需要进行排查,故将排查记录一下。 二、排查过程 1、连接上进入clickhouse 2、执行语句查看各库表使用磁盘情况 SELECT database, table, formatReadableSize(sum(bytes_on_disk)) as disk_space F…

Leetcode—2034.股票价格波动【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—2034.股票价格波动 算法思想 实现代码 class StockPrice { public:int last 0;multiset<int> total;unordered_map<int, int> m;StockPrice() {}void update(int timestamp, int price) {if(m.count(time…

TrustZone之Translation Look aside Buffer(TLB)

TLB缓存最近使用的地址转换。处理器具有多个独立的translation regimes。TLB记录了一个条目表示的translation regime&#xff0c;包括安全状态。虽然TLBs的结构是由实现定义的&#xff0c;但以下图表显示了一个示例&#xff1a; 当软件在EL1或EL2中发出TLB失效操作&#xff08…

Zabbix补充

Zabbix的自动发现机制&#xff1a; Zabbix客户端主动和服务端联系&#xff0c;将自己的地址和端口发送服务端&#xff0c;来实现自动添加主机 客户端是自动的一方 缺点&#xff1a;自定义的网段的主机数量太多&#xff0c;登记耗时会很久&#xff0c;而且这个自动发现机制不是…

已通过考试和认证注册以及后续计划表

已通过考试和认证注册以及后续计划表 软考 - 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试信息系统集成及服务项目管理人员工程类考试计划你关注的证书样子 软考 - 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试 高级 信息系统项目管理师&…