专利名称:基于内存池技术的brew手机h.264解码优化方法
技术领域:
本发明涉及在嵌入式设备上的视频编解码领域,特别是涉及一种基于内存池技术 的BREW手机H. 264解码优化方法。
背景技术:
H. 264视频标准是由JVT (Joint Video Team,视频联合工作组)制定的新一代视 频编码标准。相对于H. 263和MPEG-4, H. 264节约了大约50%的码率,而且增强了对网络 传输支持。H. 264引入了面向IP包的编码机制,有利于网络中的分组传输,支持网络中视频 的流媒体传输。但是,化264为了提高编码效率,采用了许多高计算复杂度的算法,使得编 解码计算量很大,因此对软硬件的要求甚高,同时也加大了编解码的难度。
11.264采用了多帧参考技术,解码过程中需要保存已经解码完毕的视频图像帧,用 于作为后续解码的参考帧。H. 264规定使用解码图像缓冲区(DPB,DecodedPicture Buffer) 存储已经解码完毕的视频图像帧。视频解码器中用链表维护所有解码完毕的视频图像帧, 并动态标记视频图像帧为短期参考帧、长期参考帧。当解IDR帧完毕后,DPB中的所有视频 图像帧都会被释放。解码过程中,在每解一帧之前,申请一个视频图像缓冲区用于保存即将 解码的这一帧的图像信息。由于视频图像占用很大的内存空间,如果频繁申请和释放视频 图像缓冲区会造成很大的性能下降。 在BREW手机上申请大块内存性能比较低,这主要表现在以下两个方面 a)不同厂商生产的BREW手机,在CPU频率、内存大小等主要硬件指标接近的情况
下,申请大块内存的性能差别很大。 b)同一款BREW手机,申请大块内存的性能低,耗时长,并且极不稳定,耗时在 50ms-200ms之间。
发明内容
本发明的目的在于提供一种基于内存池技术的BREW手机H. 264解码优化方法。参 考帧缓冲区占用内存较大,并且解码过程中最多使用的参考帧缓冲区的数量是有限的。可 采用内存池的方式,用预先分配DPB的方式替代原有的在解码过程中动态申请参考帧缓冲 区。 本发明采用的技术方案的步骤如下 (1)在解码器启动时,预先分配16个参考帧缓冲区,把每个参考帧缓冲区的首地 址存入链表,并用 一个位图记录内存池中每个参考帧缓冲区的是否正在被使用,DPB使用的 内存空间、参考帧缓冲区链表和位图构成DPB内存池。 (2)解码过程中需要申请参考帧缓冲区时,不再直接申请内存空间,而是从DPB内 存池中获取,通过位图查找一个没有使用的参考帧缓冲区; a)如果找到,返回该参考帧缓冲区,并在位图中标记该参考帧缓冲区已用;
b)如果没有找到,在内存中申请一个参考帧缓冲区空间,并加入DPB内存池中,返回该参考帧缓冲区; (3)解码过程中释放DPB内存池时,只需要标记位图中对应的参考帧缓冲区为未用; (4)关闭解码器时,释放DPB内存池中的所有参考帧缓冲区。
本发明具有的有益的效果是 采用内存池的方式,在解码器启动时申请了足够的参考帧缓冲区,避免了在解码过程中频繁申请和释放参考帧缓冲区,最终减小了 H. 264解码时间。当在某些厂商生产的BREW手机上,申请大块内存性能比较低时,采用这种优化方法有效提升了H. 264解码器的解码性能。
图1为DPB内存池的数据结构示意图。 图2为在采用内存池的情况下申请参考帧缓冲区的流程图。
具体实施例方式
以下结合附图和实施例对本发明作进一步的说明。
(l)DPB内存池的结构 根据图1所示,DPB内存池共有两部分构成记录池中参考帧缓冲区使用情况的位图和存储参考帧缓冲区首地址的链表。位图中每一项和链表中的每个元素一一对应。
DPB内存池中采用链表而不是数组存储参考帧缓冲区首地址,是由于解码过程中参考帧缓冲区的数目是不确定的,使用链表更方便在池中参考帧缓冲区不足时增加新的参考帧缓冲区。
(2)DPB内存池的创建和销毁 在解码器启动时创建DPB内存池,H. 264解码器需要的参考帧缓冲区个数最小为16,所以初始状态下DPB内存池中参考帧缓冲区的个数为16 ;在解码器关闭时,销毁DPB内存池。 (3)参考帧缓冲区的申请和释放 在原有的11.264解码器代码中,申请参考帧缓冲区是直接调用C语言库函数malloc分配参考帧缓冲区所需的内存块;释放参考帧缓冲区也是通过调用free函数释放相应内存块。需要把解码器中所有直接申请和释放参考帧内存块的代码,修改成调用DPB内存池的申请和释放接口。 如图2所示,在DPB内存池中申请参考帧缓冲区,需要进行两次遍历①遍历位图获得首个空闲参考帧缓冲区在链表中的位置;②通过第一步获得位置遍历列表获得参考帧缓冲区地址。 在DPB内存池中释放参考帧缓冲区,需要进行一次遍历遍历列表,查找和待释放的参考帧缓冲区地址相同的列表元素。 由于11.264解码器需要的参考帧缓冲区的个数是有上限的,所有位图中项的个数和链表长度都是常数级的。所以申请和释放参考帧缓冲区都可以在常数时间内完成。
权利要求
一种基于内存池技术的BREW手机H.264解码优化方法,其特征在于采用内存池技术,避免了H.264DPB中的参考帧缓冲区所需的大块内存在解码过程中的频繁分配和释放;(1)在解码器启动时,预先分配16个参考帧缓冲区,把每个参考帧缓冲区的首地址存入链表,并用一个位图记录内存池中每个参考帧缓冲区的是否正在被使用,DPB使用的内存空间、参考帧缓冲区链表和位图构成DPB内存池。(2)解码过程中需要申请参考帧缓冲区时,不再直接申请内存空间,而是从DPB内存池中获取,通过位图查找一个没有使用的参考帧缓冲区;a)如果找到,返回该参考帧缓冲区,并在位图中标记该参考帧缓冲区已用;b)如果没有找到,在内存中申请一个参考帧缓冲区空间,并加入DPB内存池中,返回该参考帧缓冲区;(3)解码过程中释放DPB内存池时,只需要标记位图中对应的参考帧缓冲区为未用;(4)关闭解码器时,释放DPB内存池中的所有参考帧缓冲区。
全文摘要
本发明公开了一种基于内存池技术的BREW手机H.264解码优化方法。这种优化方法针对BREW手机分配大块内存效率比较低的特点,利用内存池技术,避免了在解码过程中频繁申请和释放参考帧缓冲区,从而大幅度提升了解码性能。本发明提出的方法易于软件实现,适用于内存分配性能比较低的平台,可应用于各种需要在嵌入式设备上实时处理多媒体数据的领域。
文档编号H04N7/26GK101739354SQ20091015501
公开日2010年6月16日 申请日期2009年12月14日 优先权日2009年12月14日
发明者卜佳俊, 汪兆鹏, 王超, 郑培元 申请人:浙江大学