我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:大丰收高手论坛 > 动态缓冲 >

3535做动态分辨率解码 MPI20 禁用VDEC公共缓冲池

归档日期:07-04       文本归类:动态缓冲      文章编辑:爱尚语录

  最近做3535动态解码,要求普通模式下16路D1解码,偶尔能够支持4画面或者单画面高清解码。

  在3520D上,这种模式很正常,仅仅是高清部分能支持到1080P而已。移植到3535上,想做更高分辨率解码,就发现问题了。

  由于SDK默认的KO装载里面,VDEC KO装载,多了个针对VDEC的公共缓冲池的概念,折腾我不轻。因为自我感觉,内存占用太大了。

  /////////////////////////今天这篇主要着重强调,原来这个缓冲池,是可以关闭的。呵呵,发现新大陆了。

  使用公共缓冲池,我遇到的问题:如果程序启动,在VDEC初始化时,如果按照2480*1536去分配公共缓冲池,16路分割窗体,内存开销太大,512M内存不够用。其实MMZ内存大部分在浪费状态。

  //根据我测试的情况来看,这个公共缓冲池,如果u32BlkSize设置小了,高清解不了,如果u32BlkCnt个数不够,图像解不出来(比较郁闷的就是,底层线BlkSize在限制,内存就摆在那里,允许闲着,都不敢超标使用

  //而且这个参数不是针对某个通道的,针对全局的,只要你支持这么多解码通道,就必须把u32BlkCnt搞的足够大,只要你要支持大的分辨率u32BlkSize就必须大,而最后的VB内存就是2个参数乘出来的,超级大,弄不好几百兆。

  如果初始化阶段,按照D1方式配置,16路VDEC,运行中,如果要让某个通道解码更高分辨率,就比较麻烦了,这个公共缓冲池是个静态变量,一旦创建,如果销毁,通道解码就得重新配置了,太麻烦了,我感觉没什么好的动态切换方法。/////////MPI2.0文档中:注意】

  z VDEC 模块公共池仅在解码帧存分配方式使用模块公共 VB 池时才需要创建,即

  呵呵,太明显了,程序启动,开16路D1解码,MMZ内存仅仅用了92M,开启15个D1解码,再开一个通道2480*1536解码,MMZ也就使用130M左右。

  MMZ分配和以前3520D基本一致,随着通道的创建销毁,动态创建VB缓冲池,一个通道一个VB。

  /////////////这种动态的方法,很适合动态调整分辨率解码。应用比较完美。

  VDEC解码PrivateVB池模式比较适合动态创建的应用, 比如没有模式的NVR, 但是比较耗内存,而且有创建不出VDEC的可能

  VDEC解码ModuleVB池模式比较适合静态创建且内存较小的应用, 比如AHR或者有明确模式的NVR(比如16路1080P), 可以节约不少MMZ内存

本文链接:http://quangdungfc.net/dongtaihuanchong/469.html