DSP

Hi3519使用·记录

2019-07-13 18:44发布

为了看懂更多的代码,特意在这里集中各个关键词语的英文。 图像处理英文 亮度——Luma、 {MOD}度——Chrm(Chroma)、步幅(宽度)——stride、指针类型——pst、配置——CONF 帧内宏块(Intra)帧间宏块(Inter)
海思数据类型定义 公共数据类型 67:表达主要是类型+数据长度 结构体_S 枚举_E
系统控制
  1. 静态属性26 与动态属性 34
  2. 先VB_inti再SYS_init 29,退出时需要消除所有阻塞的MPI进程 30
  3. 绑定和bind结构数据成员 31
  4. 时间戳(3个函数)
    1. 建议1秒后进行一次微调 35
    2. 海思自己已经为音视频同步做了一个时钟,专门设定时间戳的值
  5. mmap映射 38
    1. 等同于linux - mmap的作用,内存映射,共享
  6. mmz内存分配 41
    1. 啥作用呢?
  7. 配置内存参数 45
    1. 通道使用哪个DDR,DDR的名字必须存在(哪里设置DDR的名字?)
  8. 设置MPP视频缓冲区 48 配置规则 
  9. VB_exit 不会清除VB_setconf的配置 51
  10. 创建一个视频缓存池
    1. 返回缓存池ID 52
    2. 创建池-从中获取一个块-获取这个块的物理地址--检错-释放块-销毁池 52
  11. 从缓存池中获取块(帧缓存块),2中情况
    1. 从指定缓存池取缓存块时,参数pcMmzName无效 55
    2. 任意一个公共缓存池中获取一块指定大小的缓存块 55, 第1个参数 Pool 设置为无效 ID 号(VB_INVALID_POOLID)
    3. MPP视频缓存池(1情况)与公共缓存池(2情况)
  12. 用户态获取一个缓存块的物理地址 / 用户态获取一个帧缓存块所在缓存池的 ID
  13. 视频缓存池映射用户态虚拟地址 59 / 获取一个视频缓存池中的缓存块的用户态虚拟地址 60
  14. 模块公共视频缓存池 61
  15. 根据虚拟地址获取对应的内存信息,包括物理地址及 cached 属性67

系统控制概念清理 缓存池概念:22说明+69数据定义 缓存池(==视频缓存池 )47、公共缓存池(==公共视频缓存池)55、模块缓存池60(用Ven图最好了,表达包含于被包含关系) MMZ内存40:强调用户态内存
视频输入
  1. 离线和在线模式 24 96 (功能上有差别)
  2. 参数 VI_DEV_ATTR_S 主要用来配置指定 VI 设备的视频接口模式,用于与外围 camera、sensor 或 codec 对接。101 也就是需要根据接口来设定参数。VI设备与VI通道的绑定关系 108
  3. VI_CHN_ATTR_S通道属性,连结VI设备与VI通道,设置说明 109
  4. 如果设置了后端模块与 VI 的绑定,在成功调用该接口后,后端模块就会得到视频数据 112 使能VI通道
  5. VI通道响应硬件中断 可节约系统资源 114
  6. 获取该 VI 通道数据 119,获取的是原始图像YUV格式(可动态设置深度 116)
  7. 用户图片(作为无视频信号时的插入图片)122  VI 通道不再需要输出用户图片时,应该调用此接口以恢复输出 AD 的原始视频数据 126
  8. HI_MPI_VI_BindChn 3519不支持
  9. HI_MPI_VI_Query可查询中断计数、通道使能状态、平均帧率、中断丢失数、获取 VB 失败 次数、图像宽高等信息 132
  10. 闪光灯(单闪、频闪两模式) 133 有啥作用?
  11. VI 设备的 CSC 用于图像的亮度、 {MOD}调、对比度、饱和度的调节 147
  12. 旋转149 注意图像宽高大小的改变
  13. 获取通道亮度和统计,帧的PTS  152 208
  14. VI 设备 dump 属性 157 啥作用?3519不支持
  15. 获取 RAW DATA 159-166 啥作用?
  16. DCI 自动对比度增强 209 
  17. WDR 工作属性 169

对物理地址与用户态虚拟地址的一个解析和一个使用方式:122 可以从 MPP 公共缓冲池中获取一块相应大小的视频缓存块,从缓存块信息中得到存放 YUV 数据的物理地址,然后将物理地址映射到用户空间,即可对这块内存进行 YUV 数据的填充操作
视频编码
  1. 本模块支持多路实时编码,且每路编码独立,编码协议和编码 profile 可以不同 636 (该说明是否能够证明H.264和H.265同时多路编码呢?)
  2. 通道支持接收 YUV 格式图像输入, 其中 H.264/H.265 只支持 Semi-planar YUV 4:2:0 ; VENC 将按照编码通道尺寸大小,调用 VGS 对源图像进行缩小,然后对缩小之后的图像进行编码。637
  3. CBR与VBR的控制概念 639
  4. 两种编码协议(H.264/H.265),GOP 结构属性;支持彩转灰; 裁剪编码,即 VENC 从图像中裁剪出一部分进行编码 642
  5. P 帧帧内刷新(P 帧刷新 ISlice/Intra 宏块行)
    1. 作用:码流平滑( 刷新 ISlice 可以提供更好的码流兼容性)、IP帧大小接近、降低I帧过大带来的网络冲击,网络延迟、传输容错概率 644
    2. 注意:
  6. 码流帧配置:多包或单包 645 图6-9(646) 讲述:包的类型、图像参数集的问题
  7. 码流buffer配置:仅给出下限 646 (需要防止因码流 buffer 不足而不断重编或者丢帧的情况)
API部分:
  1. VENC_CHN_ATTR_S 787
    1. 编码通道宽高差异(编码分辨率) 表6-3 650
    2. 编码器属性的约束 表6-4 651 :码流buffer深度、获取码流方式
    3. 码率控制器属性的约束 表6-5 652
      1. VI输出帧率、VPSS帧率 与VENC的码率控制关系
      2. SrcFrmRate与 DstFrmRate的设置关系
    4. 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编解码器的设计与实现_张新安》
工作原理:
  1. 视频输入单元通过 ITU-R BT.601/656 接口接收由 VADC 输出的数字视频信息, 并通过 AHB 总线把接收到的原始图像写入到外存 (SDR SDRAM 或 DDR SDRAM)中;
  2. 视频编解码器 器从外存中读取图像,进行运动估计(帧间预测)、帧 内 预 测 、 DCT 变 换 、 量 化 、 熵 编 码 (CAVLC+Exp-Golomb)、IDCT 变换、反量化、运动 补偿等操作, 最后将符合 H.264 协议的裸码流和编码重 构帧(作为下一帧的参考帧)写入到外存中;
  3. 视频输出 单元从外存中读取图像数据并通过 ITU-R BT.601/656 接口送给 VDAC 进行显示,应用的需求不同,视频输 出单元从外存中读取的图像内容也不同,
  4. 当需要对输入 图像进行预览时,视频输出单元从外存中读取原始图 像,当需要观察视频编码器的编码效果时,视频输出单 元从外存中读取编码重构帧;
  5. ARM 对视频编码器输出 的码流进行协议栈的封装,然后送给网口发送,以实现 视频点播业务。


《基于Hi3516A的H265码流实时传输系统设计_鲁云》

《基于Hi3515数字视频展台的研究_高洁》
输入:
  1. 加载MPP
    1. 最大的视频缓存池个数、最大缓存池中公共缓存块的个数、每个公共缓存块的大小
    2. MPP系统控制属性、控制参数
  2. 设置输入设备与输入通道的属性
    1. 根据VI设备(摄像头),设置VI属性(接口制式、接口时序)
    2. 根据VI通道属性(采集图像的视频分辨率、像素格式),设置VI通道
  3. 启动输入设备及通道
    1. 启动VI通道,设置通道采集帧率

输出:
  1. 定义(设置) 视频输出公共属性的结构体:背景、输出接口类型、接口时序
  2. 定义(设置)视频层属性:设备/显示/图像分辨率(示意图),设备与显示相同,显示与图像最好相同,输入像素格式
  3. 启动VO设备与VO视频层:
  4. 设置输出通道属性并启用输出通道:绑定通道关系


《基于Hi3515的视频传输终端的设计与实现_吴光辉》
SDK包的安装:运行./sdk.unpack 2.4.2:视频编码过程,非常多流程图,参考过程。 下面都在框图中结合3519进一步修改画出相应的
  1. H.264视频编码流程
  2. MPP系统初始化流程
  3. 输入设置与初始化流程
  4. 输出设置与初始化流程
  5. H.264编码配置过程

第三章:视频与数据的TS打包及应用(非常好) 备注:讲述清楚ES PES TS的原理和实现方法,对理解数据对接(操作视频流)有非常大的作用。比方说,以后会有从h.265视频流打包到flv格式,使用rtmp发送,这个流程就需要操作视频流了。
主要讲述:
  1. MPEG-2 TS介绍:语法结构(包的组成,想rtmp用flv格式推流那样子)
  2. H.264编码视频的TS封装
    1. TS封装原理(流程框图)
    2. H.264编码ES的PES打包
      1. H.264编码ES的结构(实际就是NALU):联合Hi3515的码流包结构体
      2. PES包结构:正如flv文件格式中需要的各个数据,FFmpeg-AVPacket使用转flv格式的过程一样
      3. PES打包过程
        1. IPB帧类型对PTS、DTS的影响
        2. PTS、DTS计算公式和插入方式
        3. PES包的TS封装:未看
    3. 多路视频和数据的TS复用
      1. PSI表信息的作用和插入:未看
      2. PCR的计算及插入:
        1. 编码端和解码端的时钟同步,不加以处理,解码端缓冲区的溢出
        2. 解码端的时钟过慢,造成解码端缓冲区的上溢,视频丢帧
        3. 解码端的时钟过快,造成解码端缓冲区的下溢,视频卡顿
      3. 基于Hi3515的多路视频的TS封装
        1. 利用Hi3515进行多通道编码时的多路分时编码而进行的封装复用

第六章:测试(很有作用)
  1. Hi3515的H.264编码ES流测试:NAL单元类型测试,需要寻找一个H.265的测试工具