为了看懂更多的代码,特意在这里集中各个关键词语的英文。
图像处理英文
亮度——Luma、 {MOD}度——Chrm(
Chroma)、步幅(宽度)——stride、指针类型——pst、配置——CONF
帧内宏块(Intra)帧间宏块(Inter)
海思数据类型定义
公共数据类型 67:表达主要是类型+数据长度
结构体_S
枚举_E
系统控制
- 静态属性26 与动态属性 34
- 先VB_inti再SYS_init 29,退出时需要消除所有阻塞的MPI进程 30
- 绑定和bind结构数据成员 31
- 时间戳(3个函数)
- 建议1秒后进行一次微调 35
- 海思自己已经为音视频同步做了一个时钟,专门设定时间戳的值
- mmap映射 38
- 等同于linux - mmap的作用,内存映射,共享
- mmz内存分配 41
- 啥作用呢?
- 配置内存参数 45
- 通道使用哪个DDR,DDR的名字必须存在(哪里设置DDR的名字?)
- 设置MPP视频缓冲区 48 配置规则
- VB_exit 不会清除VB_setconf的配置 51
- 创建一个视频缓存池
- 返回缓存池ID 52
- 创建池-从中获取一个块-获取这个块的物理地址--检错-释放块-销毁池 52
- 从缓存池中获取块(帧缓存块),2中情况
- 从指定缓存池取缓存块时,参数pcMmzName无效 55
- 任意一个公共缓存池中获取一块指定大小的缓存块 55, 第1个参数 Pool 设置为无效 ID 号(VB_INVALID_POOLID)
- MPP视频缓存池(1情况)与公共缓存池(2情况)
- 用户态获取一个缓存块的物理地址 / 用户态获取一个帧缓存块所在缓存池的 ID
- 视频缓存池映射用户态虚拟地址 59 / 获取一个视频缓存池中的缓存块的用户态虚拟地址 60
- 模块公共视频缓存池 61
- 根据虚拟地址获取对应的内存信息,包括物理地址及 cached 属性67
系统控制概念清理
缓存池概念:22说明+69数据定义
缓存池(==视频缓存池 )47、公共缓存池(==公共视频缓存池)55、模块缓存池60(用Ven图最好了,表达包含于被包含关系)
MMZ内存40:强调用户态内存
视频输入
- 离线和在线模式 24 96 (功能上有差别)
- 参数 VI_DEV_ATTR_S 主要用来配置指定 VI 设备的视频接口模式,用于与外围 camera、sensor 或 codec 对接。101 也就是需要根据接口来设定参数。VI设备与VI通道的绑定关系 108
- VI_CHN_ATTR_S通道属性,连结VI设备与VI通道,设置说明 109
- 如果设置了后端模块与 VI 的绑定,在成功调用该接口后,后端模块就会得到视频数据 112 使能VI通道
- VI通道响应硬件中断 可节约系统资源 114
- 获取该 VI 通道数据 119,获取的是原始图像YUV格式(可动态设置深度 116)
- 用户图片(作为无视频信号时的插入图片)122 VI 通道不再需要输出用户图片时,应该调用此接口以恢复输出 AD 的原始视频数据 126
- HI_MPI_VI_BindChn 3519不支持
- HI_MPI_VI_Query可查询中断计数、通道使能状态、平均帧率、中断丢失数、获取 VB 失败 次数、图像宽高等信息 132
- 闪光灯(单闪、频闪两模式) 133 有啥作用?
- VI 设备的 CSC 用于图像的亮度、 {MOD}调、对比度、饱和度的调节 147
- 旋转149 注意图像宽高大小的改变
- 获取通道亮度和统计,帧的PTS 152 208
- VI 设备 dump 属性 157 啥作用?3519不支持
- 获取 RAW DATA 159-166 啥作用?
- DCI 自动对比度增强 209
- WDR 工作属性 169
对物理地址与用户态虚拟地址的一个解析和一个使用方式:122
可以从 MPP 公共缓冲池中获取一块相应大小的视频缓存块,从缓存块信息中得到存放 YUV 数据的物理地址,然后将物理地址映射到用户空间,即可对这块内存进行 YUV 数据的填充操作
视频编码
- 本模块支持多路实时编码,且每路编码独立,编码协议和编码 profile 可以不同 636 (该说明是否能够证明H.264和H.265同时多路编码呢?)
- 通道支持接收 YUV 格式图像输入, 其中 H.264/H.265 只支持 Semi-planar YUV 4:2:0 ; VENC 将按照编码通道尺寸大小,调用 VGS 对源图像进行缩小,然后对缩小之后的图像进行编码。637
- CBR与VBR的控制概念 639
- 两种编码协议(H.264/H.265),GOP 结构属性;支持彩转灰; 裁剪编码,即 VENC 从图像中裁剪出一部分进行编码 642
- P 帧帧内刷新(P 帧刷新 ISlice/Intra 宏块行)
- 作用:码流平滑( 刷新 ISlice 可以提供更好的码流兼容性)、IP帧大小接近、降低I帧过大带来的网络冲击,网络延迟、传输容错概率 644
- 注意:
- 码流帧配置:多包或单包 645 图6-9(646) 讲述:包的类型、图像参数集的问题
- 码流buffer配置:仅给出下限 646 (需要防止因码流 buffer 不足而不断重编或者丢帧的情况)
API部分:
- VENC_CHN_ATTR_S 787
- 编码通道宽高差异(编码分辨率) 表6-3 650
- 编码器属性的约束 表6-4 651 :码流buffer深度、获取码流方式
- 码率控制器属性的约束 表6-5 652
- VI输出帧率、VPSS帧率 与VENC的码率控制关系
- SrcFrmRate与 DstFrmRate的设置关系
- CBR的平均比特率配置 表6-6 652 和 波动等级(码率的波动范围的大小划分) 653
码流包结构图 6-11 676
码流buffer折回
帧率控制VPSS- VENC_FRAME_RATE_S和VI- VENC_FRAME_RATE_S
颜 {MOD}格式VI- VENC_FRAME_RATE_S
物理地址与用户虚拟地址,
链接
《基于Hi3510的H_264编解码器的设计与实现_张新安》
工作原理:
- 视频输入单元通过 ITU-R BT.601/656 接口接收由 VADC 输出的数字视频信息, 并通过 AHB 总线把接收到的原始图像写入到外存 (SDR SDRAM 或 DDR SDRAM)中;
- 视频编解码器 器从外存中读取图像,进行运动估计(帧间预测)、帧 内 预 测 、 DCT 变 换 、 量 化 、 熵 编 码 (CAVLC+Exp-Golomb)、IDCT 变换、反量化、运动 补偿等操作, 最后将符合 H.264 协议的裸码流和编码重 构帧(作为下一帧的参考帧)写入到外存中;
- 视频输出 单元从外存中读取图像数据并通过 ITU-R BT.601/656 接口送给 VDAC 进行显示,应用的需求不同,视频输 出单元从外存中读取的图像内容也不同,
- 当需要对输入 图像进行预览时,视频输出单元从外存中读取原始图 像,当需要观察视频编码器的编码效果时,视频输出单 元从外存中读取编码重构帧;
- ARM 对视频编码器输出 的码流进行协议栈的封装,然后送给网口发送,以实现 视频点播业务。
《基于Hi3516A的H265码流实时传输系统设计_鲁云》
《基于Hi3515数字视频展台的研究_高洁》
输入:
- 加载MPP
- 最大的视频缓存池个数、最大缓存池中公共缓存块的个数、每个公共缓存块的大小
- MPP系统控制属性、控制参数
- 设置输入设备与输入通道的属性
- 根据VI设备(摄像头),设置VI属性(接口制式、接口时序)
- 根据VI通道属性(采集图像的视频分辨率、像素格式),设置VI通道
- 启动输入设备及通道
- 启动VI通道,设置通道采集帧率
输出:
- 定义(设置) 视频输出公共属性的结构体:背景、输出接口类型、接口时序
- 定义(设置)视频层属性:设备/显示/图像分辨率(示意图),设备与显示相同,显示与图像最好相同,输入像素格式
- 启动VO设备与VO视频层:
- 设置输出通道属性并启用输出通道:绑定通道关系
《基于Hi3515的视频传输终端的设计与实现_吴光辉》
SDK包的安装:运行./sdk.unpack
2.4.2:视频编码过程,非常多流程图,参考过程。
下面都在框图中结合3519进一步修改画出相应的
- H.264视频编码流程
- MPP系统初始化流程
- 输入设置与初始化流程
- 输出设置与初始化流程
- H.264编码配置过程
第三章:视频与数据的TS打包及应用(非常好)
备注:讲述清楚ES PES TS的原理和实现方法,对理解数据对接(操作视频流)有非常大的作用。比方说,以后会有从h.265视频流打包到flv格式,使用rtmp发送,这个流程就需要操作视频流了。
主要讲述:
- MPEG-2 TS介绍:语法结构(包的组成,想rtmp用flv格式推流那样子)
- H.264编码视频的TS封装
- TS封装原理(流程框图)
- H.264编码ES的PES打包
- H.264编码ES的结构(实际就是NALU):联合Hi3515的码流包结构体
- PES包结构:正如flv文件格式中需要的各个数据,FFmpeg-AVPacket使用转flv格式的过程一样
- PES打包过程
- IPB帧类型对PTS、DTS的影响
- PTS、DTS计算公式和插入方式
- PES包的TS封装:未看
- 多路视频和数据的TS复用
- PSI表信息的作用和插入:未看
- PCR的计算及插入:
- 编码端和解码端的时钟同步,不加以处理,解码端缓冲区的溢出
- 解码端的时钟过慢,造成解码端缓冲区的上溢,视频丢帧
- 解码端的时钟过快,造成解码端缓冲区的下溢,视频卡顿
- 基于Hi3515的多路视频的TS封装
- 利用Hi3515进行多通道编码时的多路分时编码而进行的封装复用
第六章:测试(很有作用)
- Hi3515的H.264编码ES流测试:NAL单元类型测试,需要寻找一个H.265的测试工具