Hi3518E学习笔记

本文主要介绍了Hi3518E的视频缓冲池的重要概念,阐述视频缓冲池VB在整个视频编解码中的地位。


一、Hi3518E的地址内存空间分布

如果您在Hi3518E上面部署好整个系统,会知道在进行烧录镜像时会在启动参数要求指定地址空间的分布。其中会涉及一个比较重要但是陌生的名词:MMZ。下文是从SDK中摘抄出来的片段。

2、DEMO板DDR内存管理示意
    以容量为128MBytes的DDR内存为例,以下为根据本文档和SDK默认配置得到的内存管理示意图:
    
    DDR:                                                           
    
    -----|-------|  0x80000000   # Memory managed by OS.              
    32M  | OS    |                                                 
         |       |                                                 
    -----|-------|  0x82000000   # Memory managed by MMZ block anonymous.          
    32 M | MMZ   |                                                 
         |       |                                                 
    -----|-------|  0x84000000   # Memory managed by MMZ block jpeg.                       
             
    
    注意:
	(1)用户在配置启动参数时需要设置OS的管理内存为32M,“setenv bootargs 'mem=32M ...”。	  
	(2)系统启动后,配置load3518e脚本中指定总内存为64(-total 64),加载时指定osmem为32(-osmem 32),则MMZ管理的内存为32M;
	(3)如果有特殊应用,可以自行修改load3518e脚本,进行mmz区域划分,如“insmod mmz.ko mmz=anonymous,0,0x82000000,30M:jpeg,0,0x83D00000,2M anony=1”。   
        (4)在Hi3518EV201的bootargs的配置中,设置的启动地址请不要写为0x82000000,因为此芯片的DDR总大小为32M,地址边界为0x82000000,建议为0x81000000。 
View Code

 通过官方文档,我们可以查到其具体的含义:

  

  MMZ 驱动管理用户创建的分配池,用户程序分配内存的时候可以指定要在哪个分配池中分配内存,分配器将查找满足要求的分配池并从中分配合适的内存块给程序使用。

另外还有一个重要的概念:公共缓冲池。顾名思义,公共缓冲池就是为VI部分、VPSS部分、VENC部分共用的部分,是它们操作的全局变量,当一个模块处理完后可以通知下一个模块使用,比较方便。

  

  上图是 公共缓冲池的数据流图。我们可以看到公共缓冲池中有很多个缓冲池,每个缓冲池有很多个缓冲块(B1、B2、、、Bn)。进行视频编解码时,首先VI模块从VB中取得Bm缓冲块,处理后扔给VPSS,VPSS再根据需要(比如裁剪、缩放等)将Bm变换成Bi、Bj、Bk等缓冲块。这些缓冲块会被流向VENC、VDA、VO等模块,最后处理完成后,会释放这些缓冲块到缓冲池中,方便下一次使用。至于具体的流向,比如VPSS->VENC需要根据提供的API函数进行绑定。

 

原文地址:https://www.cnblogs.com/qiabaowei/p/8570612.html