一种数据缓存方法和装置的制作方法

文档序号:6576267阅读:83来源:国知局
专利名称:一种数据缓存方法和装置的制作方法
技术领域
本发明属于数据存储领域,尤其涉及一种数据緩存方法和装置。
背景技术
在接收数据时,为了使接收的数据在重现(如播放)时流畅,不产生卡屏 现象, 一般需要在用于接收和重现数据的设备中内置存储设备(也称为内存), 通过内存对接收的数据进行緩存。由于用于緩存的内存的存储空间不可能无限 大,因此,为了达到较好的数据重现效果,需要设计较合理的数据緩存方法。
现有技术提供了一种乒乓形式的数据援存方法,简述如下采用两块緩存 分别为緩存A和緩存B,当緩存A在緩存数据时,将緩存B提供给编码或处理 程序使用,当緩存A中的数据緩存完毕时,向緩存B中传输数据,同时将緩存 A提供给编码或处理程序使用。这种数据緩存方法对编码程序的实时性要求较 高, 一般要求编码或处理程序的运行速度快于采集数据的速度,否则数据就会 丟失;当采集速度太快,两块緩存都满的时候,需要硬件上能够暂停采集,对 硬件功能有要求;编码程序可能一次需要多帧原始数据,以避免内存拷贝,提 高编码效率,兵乓操作的双緩冲方式无法满足。
现有技术提供另一种采用緩存队列的数据緩存方法,简述如下将采用緩 存队列对数据采集完毕的帧緩存进行管理,当编码程序需要一帧新的数据的时 候,从緩存队列中获取一帧数据。这种数据緩存方法由于没有标识为准备状态 的帧緩存,难以保证在当前帧接收完时,马上有下一帧緩存供数据采集使用; 从緩存队列中获取一帧数据时,需要把数据从帧緩存中拷贝出来,降低了编码 程序的效率;编码程序无法一次获取多帧数据或者释》文多帧数据。

发明内容
本发明的目的在于提供一种数据緩存方法,旨在解决采用内存緩存数据时, 当帧緩存接收完一帧数据后,可快速的切换到另 一个帧緩存来接收下一帧数据, 从而在内存的容量可以满足当前数据存储需要时,避免了具有恒定速度或流量 的数据帧丢失的问题。
本发明是这样实现的, 一种内存的数据緩存方法,所述内存的存储空间被
配置为多块帧i爰存,所述方法包括下述步骤
A、 设置每块帧緩存的状态,所述帧缓存的状态用于标识帧援存的数据存 储状态;
B、 在当前帧数据緩存完毕前,根据每块帧緩存的状态确定用于緩存下一 帧数据的帧緩存,并根据每块帧緩存的状态以及预设的状态更新条件下的状态 更新机制,更新每块帧緩存的状态。
进一步的,所述帧緩存的状态包括正在緩存数据状态、准备緩存数据状态、 已经緩存数据状态、被数据占用状态、以及空闲状态,所述状态更新条件包括 一帧数据緩存完毕、读取帧緩存、以及释放帧緩存。
进一步的,所述步骤B具体包括
B1 、实时检测数据存储状态是否达到预设的状态更新条件; B2、在当前帧数据緩存完毕时,将下一帧数据传输至处于准备緩存数据状 态的帧緩存,并采用处于空闲状态的其中一块帧緩存存储再下一帧数据,同时 将处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据状态,将处于准 备緩存数据状态的帧緩存的状态更新为正在緩存数据状态,将处于空闲状态的 其中 一块帧緩存的状态更新为准备緩存数据状态;
B3、当读取帧緩存时,将读取的帧緩存的状态更新为被数据占用状态; B4、当释放帧緩存时,将被释放的帧緩存的状态更新为空闲状态。 进一步的,所述方法还包括下述步骤
设置先进先出的已緩存数据队列和数据占用队列,当所述帧緩存的状态为已经緩存数据状态时,使所述帧缓存进入所迷已緩存数据队列,当所述帧缓存 的状态为被数据占用状态时,使所述帧緩存进入所述数据占用队列。
进一步的,所迷步骤B具体包括
B1,、实时检测数据存储状态是否达到预设的状态更新条件; B2'、如果当前帧数据緩存完毕,将下一帧数据传输至处于准备緩存数据状 态的帧緩存,并采用处于空闲状态的其中一块帧缓存存储再下一帧数据,同时 将处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据状态,将处于准 备缓存数据状态的帧緩存的状态更新为正在緩存数据状态,如果当前不存在处 于空闲状态的帧緩存,按照先进先出的顺序,将最早进入所述已緩存数据队列 中帧緩存的状态更新为准备缓存数据状态,或者动态申请一块新的帧緩存,并 将所述新的帧缓存的状态设为准备緩存数据状态,同时动态调整内存的存储空 间的帧緩存总数;
B3,、当读取帧緩存时,按照先进先出的顺序,将所述已緩存数据队列中的 被读取的 一块或者多块帧緩存的状态更新为被数据占用状态;
B4,、当释放帧緩存时,按照先进先出的顺序,将所述数据占用队列中被释 放的 一块或者多块帧緩存的状态更新为空闲状态。
本发明的另一目的在于提供一种内存的数据緩存装置,所述内存的存储空 间被配置为多块帧緩存,所述装置包括
帧緩存配置单元,用于设置每块帧緩存的状态,所述帧緩存的状态用于标 识帧緩存的数据存储状态,所述帧緩存的状态包括正在緩存数据状态、准备緩 存数据状态、已经緩存数据状态、被数据占用状态、以及空闲状态;
数据緩存单元,用于用于在当前帧数据緩存完毕前,根据每块帧緩存的状 态确定用于緩存下一帧数据的帧緩存,并根据每块帧緩存的状态以及预设的状 态更新条件下的状态更新机制,更新每块帧緩存的状态,所述状态更新条件包 括一帧数据緩存完毕、读取帧緩存、以及释放帧緩存。
进一步的,所述数据緩存单元包括条件检测子单元,用于实时检测数据存储状态是否达到预设的状态更新条
件;
数据传输子单元,用于在所述条件检测子单元检测到数据存储状态达到一 帧数据緩存完毕的状态更新条件时,向处于准备接收数据状态的帧緩存中传输 数据;
緩存任务产生子单元,用于根据每块帧緩存的状态以及条件检测子单元得 到的当前达到的状态更新条件,确定每块帧緩存的緩存任务;
状态更新子单元,用于在所述条件;险测子单元^r测到的数据存储状态达到 预设的状态更新条件时,采用该状态更新条件下的状态更新机制,更新每块帧 緩存的状态。
进一步的,所述装置还包括
队列存储单元,用于存储已緩存数据队列和数据占用队列,当所述帧緩存 的状态为已经緩存数据状态时,使所述帧緩存进入所述已緩存数据队列,当所 述帧緩存的状态为被数据占用状态时,使所述帧緩存进入所述数据占用队列。
进一步的,所述状态更新子单元在一帧数据緩存完毕时,采用处于准备緩 存数据状态的帧緩存存储下一帧数据,并将处于正在緩存数据状态的帧緩存的 状态更新为已经緩存数据状态,将处于准备緩存数据状态的帧緩存的状态更新 为正在緩存数据状态,如果当前不存在处于空闲状态的帧i爰存时,按照先进先 出的顺序,将最早进入所述已緩存数据队列中帧緩存的状态更新为准备緩存数 据状态;
在读取帧缓存时,按照先进先出的顺序,将所述已緩存数据队列中被读取 的一块或者多块帧緩存的状态更新为^l数据占用状态;
在释放帧緩存时,按照先进先出的顺序,将所述数据占用队列中被释放的 一块或者多块帧緩存更新为空闲状态。
进一步的,所述装置还包括
帧援存申请单元,用于在一帧数据缓存完毕,且不存在处于空闲状态的帧緩存时,动态申请一块新的帧緩存,并将所述新的帧緩存的状态设为准备緩存 数据状态,同时动态调整内存的存储空间的帧緩存总数。
在本发明实施例中,通过将内存配置为多块帧緩存,设置每块帧緩存的状 态,根据每块帧緩存的状态以及预设的状态更新条件下的状态更新机制,确定 每块帧緩存的緩存任务,并更新每块帧緩存的状态,从而在一帧数据帧缓存完 毕时,切换到另一个帧緩存来接收下一帧数据,避免了具有恒定速度或流量的 数据帧纟皮丢失。通过建立两个先进先出队列,从而保证最早输入的数据先被编 码程序使用,使数据保持连续性。由于可以动态的改变帧緩存的个数,在内存 容量允许时,可以达到不丢失一帧数据的效果。


图l是本发明实施例提供的数据緩存方法的实现流程图2是本发明实施例提供的帧緩存状态更新机制的一个具体示例图3是本发明实施例提供的Ready队列和Output队列的状态轮替的具体示 例图4是本发明实施例提供的C^D的状态轮替示意图; 图5是本发明实施例提供的C+D的Ready队列和Output队列的状态轮替 示意图6是本发明实施例提供的D^E的状态轮替示意图; 图7是本发明实施例提供的D^E的Ready队列和Output队列的状态轮替 示意图8是本发明实施例提供的数据緩存装置的结构示意图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,设置每块帧緩存的状态,所述帧緩存的状态用于标识 帧緩存的数据存储状态,根据每块帧緩存的状态以及预设的状态更新条件下的 状态更新机制,确定每块帧緩存的緩存任务,并更新每块帧緩存的状态,从而 在一帧数据帧緩存完毕时,即可快速的切换到另一个帧緩存来接收下一帧数据, 避免了具有恒定速度或流量的数据帧被丟失。
图1示出了本发明实施例提供的内存的数据緩存方法的实现流程,详述如

在步骤S101中,将内存的存储空间配置为N块帧緩存,并设置每块帧援 存的状态,帧緩存的状态用于标识帧緩存的数据存储状态。
在将内存的存储空间配置为N块帧緩存时,将每块帧緩存的大小配置为一 帧数据大小,并为每块帧緩存配置一标号,如Buffer—1 , Buffer—2,Buffer_3,……, Buffer—n,以区分每块帧緩存。其中N为大于3的自然数。
在N块帧緩存中緩存数据时,设置5种帧缓存的状态,用于标识帧緩存的 数据存储状态。其中5种帧緩存的状态分别为正在緩存数据状态(也称为Getting 状态)、准备緩存数据状态(也称为Preparing状态)、已经緩存数据状态(也 称为Ready状态)、被数据占用状态(也称为Output状态)、以及空闲状态(也 称为Null状态)。其中Getting状态是指帧緩存正在援存数据;Preparing状态 是指帧緩存准备緩存数据;Ready状态是指帧緩存已经緩存数据,可以提供给 编码程序使用;Output状态是指帧緩存已经被数据占用,暂时不能用来緩存数 据;Null状态是指帧緩存处于无可用数据的空闲状态,可以用来緩存数据。
在开始緩存数据前,为每块帧緩存设置初始状态,其中设置至少一块帧緩 存的状态为Preparing状态,其余帧緩存可以均设置为Null状态。如可以设置 Buffer—1的状态为Preparing状态,Buffer—2、 Buffer—3、 Buffer—4、 Buffer—5的 状态均为Null状态。
在步骤S102中,在当前帧数据缓存完毕前,根据每块帧緩存的状态确定用于緩存下 一 帧数据的帧緩存,并根据每块帧緩存的状态以及预设的状态更新条 件下的状态更新机制,更新每块帧緩存的状态。
在本发明实施例中,釆用直接存储器存取方式(Direct Memory Access, DMA)将源地址中的数据传输至目的地址中,其中目的地址即为本发明实施例 中的内存的相应地址。当帧緩存的数据存储状态达到预设的更新条件时,如一 帧数据(如处于Getting状态的A帧)緩存完毕时,根据每块帧緩存的状态切 换到另一块帧緩存来存储下一帧数据,即马上向处于Preparing状态的帧緩存中 (如Buffer—1中)传输B帧数据,同时产生DMA中断,DMA中断处理函数 根据每块帧緩存的状态,确定每块帧緩存的緩存任务,并根据预设的状态更新 条件下的状态更新机制,更新每块帧缓存的状态。
其中确定每块帧緩存的緩存任务包括DMA的目的地址和源地址,以及传 输长度。其中DMA的目的地址的确定过程如下中断处理函数从所有帧緩存 中寻找处于Null状态的帧緩存,如果处于Null状态的帧緩存的数量大于1,则 从中任意选择一块帧緩存(如Buffer_2 )作为DMA的目的地址。
在本发明另一实施例中,如果当前不存在处于Null状态的帧緩存,则中断 处理函数从所有帧緩存中寻找处于Ready状态的帧緩存,如果处于Ready状态 的帧緩存的数量大于1,则从中任意选择一块帧缓存作为DMA的目的地址。
在本发明另 一实施例中,可以预先创建一先进先出(First In First Out, FIFO ) 队列,用于管理处于Ready状态的帧緩存,在此称为已緩存数据队列(Ready 队歹'])。该Ready队列的最大容量为N-2,其中N为配置的帧緩存的块数。 如果当前不存在处于Null状态的帧緩存,则中断处理函数按照先进先出的顺序 从该Ready队列中选择一块帧緩存作为DMA的目的地址。
在本发明另一实施例中,为了避免数据帧的丢失,确定下一数据帧的緩存 任务时,如果当前不存在处于Null状态的帧緩存,则动态申请一块新的帧緩存, 并将该新的帧緩存作为DMA的目的地址。同时动态调整内存的存储空间的帧 缓存总^t,即由原来的N调整为N+1,此时Ready队列和Output队列的容量也随着增加。
在本发明实施例中,预设的状态更新条件包括一帧数据緩存完毕、读取帧
緩存、以及释放帧緩存。其中一帧数据緩存完毕是指N块帧緩存中处于Getting 状态的帧緩存中数据緩存完毕;读取帧緩存是指编码程序从处于Ready状态的 帧緩存中读取数据;释放帧緩存是指编码程序使用完处于Output状态的帧緩存 中的数据。状态更新条件包括一帧数据緩存完毕、读取帧緩存、以及释放帧緩 存。
而在上述预设的状态更新条件下的状态更新机制如下所述 在当前帧数据緩存完毕时,将下一帧数据传输至处于准备緩存数据状态的 帧緩存,并采用处于空闲状态的其中一块帧緩存存储再下一帧数据,同时将处 于Getting状态的帧緩存的状态更新为Ready状态,将处于Preparing状态的帧 緩存的状态更新为Getting状态,将处于Null状态的其中一块帧纟爰存的状态更 新为Preparing状态。
在本发明另一实施例中,在当前帧数据緩存完毕时,如果不存在处于Null 状态的帧緩存,则将处于Ready状态的其中一块帧緩存的状态更新为Preparing 状态。
在本发明另一实施例中,在当前帧数据緩存完毕时,如果不存在处于Null 状态的帧緩存,则按照先进先出的顺序从Ready队列中确定一块帧緩存,并将 该帧乡爰存的状态更新为Preparing状态。
为了避免数据帧的丟失,在本发明另一实施例中,在当前帧数据緩存完毕 时,如果不存在处于Null状态的帧緩存,则动态申请一块新的帧緩存,并将该 新的帧緩存的状态设置为Preparing状态。同时动态调整内存的存储空间的帧緩 存总数,即由原来的N调整为N + 1 ,此时Ready队列和Output队列的容量也 随着增加。
当读取帧緩存时,将读取的帧緩存的状态更新为Output状态。 在本发明实施例中,由于只有在帧緩存已经緩存完数据,即帧緩存处于Ready状态时,编码程序才能从该帧緩存中读取到有效数据,而编码程序在处 于Ready状态的帧緩存中读取数据时,是按照先进先出的顺序读取的,因此, 将编码程序取走数据的帧缓存的状态更新为Output状态的过程,即是将最先进
在本发明另一实施例中,当Ready队列中帧緩存的数量大于1时,如果编 码程序需要同时使用多块帧緩存中的数据,则可以^l安照先进先出的顺序一次从 Ready队列中读取多个帧緩存中的数据,从而使编码程序可以同时使用原始帧 和参考帧,从而提高了编码效率。此时,将编码程序读取数据的所有帧緩存的 状态更新为Output状态。从而使编码程序可以同时使用多块帧緩存中的数据, 提高了编码效率。
在本发明实施例中,由于数据緩存完毕后的帧緩存即可直接提供给编码程 序使用,从而避免了内存拷贝。
当释放帧緩存时,将被释放的帧緩存的状态更新为Null状态。
在本发明实施例中,可以预先创建一 FIFO队列,用于管理处于Output状 态的帧緩存,在此称为数据占用队列(Output队列)。该Output队列的最大容 量为N-3,其中N为配置的帧緩存的块数,且任意时刻,Ready队列和Output 队列中的帧緩存的数量之和小于或者等于N-2,其中N为配置的帧緩存的块 数。由于只有在编码程序已经读取帧緩存中的数据,即帧緩存处于Output状态 时,编码程序才能使用该帧緩存中的数据,因此,在将编码程序使用完其中数 据的帧緩存的状态更新为Null状态的过程,即是将最先进入Output队列中的帧 緩存的状态更新为Null状态。
在本发明另一实施例中,当Output队列中帧緩存的数量大于1时,如果编 码程序同时使用完多块帧緩存,则可以按照先进先出的顺序同时从Output队列 中释放多个帧缓存,此时,将编码程序释放的所有帧緩存的状态从Output状态 更新为Null状态。
图2示出了本发明实施例提供的帧緩存状态更新机制的一个具体示例,详述如下
在此假设将内存配置为5块帧緩存,分别为Buffer—1、 Buffer_2、 Buffer—3、 Buffer—4、 Buffer_5,并假设在开始緩存数据后的某个时刻A, 5块帧緩存的状 态如图2中的A所示,此时,Ready队列和Output队列的状态如图3中的A所 示。以下循着图2和图3所示的A+B^C^D+E这几个时刻的状态变更来详 细说明在状态更新条件下的緩存机制。 (1 ) A^B
请参阅图2, Buffer—1数据緩存完毕,此时,DMA继续向处于Preparing 状态的Buffer—2传输数据,并根据每块帧缓存的状态,确定下一数据帧的緩存 任务,同时根据状态更新条件下的状态更新机制,更新每块帧緩存的状态,其 具体过程为产生DMA中断,中断处理函数查询处于Null状态下的帧緩存(此 处为Buffer—3),将Buffer一3作为下一数据帧的目的地址,同时中断处理函数 根据新的一帧数据緩存完毕条件下的状态更新机制,将处于Getting状态的 Buffer—1的状态更新为Ready状态,将处于Preparing状态的Buffer—2的状态更 新为Getting状态,将处于Null状态的Buffer—3的状态更新为Preparing状态, 从而实现图2所示的A^B的状态轮替。
请参阅图3,由于Buffer—1的状态由Getting状态更新为Ready状态,因此, 使Buffer—1进入Ready队列,从而实现图3所示的A^B的Ready队列和Output 队列的状态轮替。 (2) C
请参阅图2,读取帧緩存,即编码程序需要读取一帧数据,此时,编码程 序按照先进先出的顺序从Ready队列中读取一帧(即Buffer_4中的数据),此 时,根据读取帧緩存条件下的状态更新机制,将处于Ready状态的Buffei^4的 状态更新为Output状态,从而实现图2所示的B>>C的状态轮替。
请参阅图3,由于Buffer—4的状态由Ready状态更新为Output状态,因此, 将Buffer_4从Ready队列中取出,并使Buffer_4进入Output队列,从而实现图
153所示的B+C的Ready队列和Output队列的状态^^替。 (3) C》D
C^D的状态轮替主要包括两个步骤
步骤l:请参阅图4,读取帧緩存,即编码程序需要读取一帧数据,此时, 编码程序按照先进先出的顺序从Ready队列中读取一帧(即Buffer—5中的数 据),此时,根据读取帧緩存条件下的状态更新机制,将处于Ready状态的 Buffer—5的状态更新为Output状态,从而实现图4所示的C^C,的状态轮替。
请参与图5 ,由于Buffer—5的状态由Ready状态更新为Output状态,因此, 将Buffer—5从Ready队列中删除,并使Buffer—5进入Output队列,从而实现图 5所示的C^C,的Ready队列和Output队列的状态轮替。
步骤2:请参阅图4, Buffer_2数据緩存完毕,此时,DMA继续向处于 Preparing状态的Buffer—3传输数据,并根据每块帧緩存的状态,确定下一数据 帧的緩存任务,同时根据状态更新条件下的状态更新机制,更新每块帧緩存的 状态,其具体过程为产生DMA中断,中断处理函数查询5块帧緩存中是否 存在处于Null状态的帧緩存,由于不存在,此时,按照先进先出的顺序从Ready 队列中选择最早进入Ready队列的帧緩存(此处为Buffer_l ),将BufferJ作 为下一数据帧的缓存任务的目的地址。同时中断处理函数根据新的一帧数据緩 存完毕条件下的状态更新机制,将处于Ready状态的Buffer—1的状态更新为
Preparing状态,将处于Getting状态的Buffer—2的状态更新为Ready状态,将 处于Preparing状态的Buffer_3的状态更新为Getting状态,从而实现图4所示 的C,^D的状态轮替。经步骤1和步骤2之后,即可实现图2所示的C^D的 状态轮替。
请参阅图5,由于Buffer—1的状态由Ready状态更新为Preparing状态,因 此,将Buffer—1从Ready队列中删除;由于Buffer—2的状态由Getting状态更 新为Ready状态,因此,使Buffer—2进入Ready队列,从而实现图5所示的C'+D 的Ready队列和Output队列的状态轮替。经步骤1和步骤2之后,即可实现图3所示的C^D的Ready队列和Output队列的状态轮替。 (4) D—E
D^E的状态轮替主要包括两个步骤
步骤1:请参阅图6, BufferJ数据緩存完毕,此时,DMA继续向处于 Preparing状态的BufferJ传输数据,并根据每块帧緩存的状态,确定下一数据 帧的緩存任务,同时根据状态更新条件下的状态更新机制,更新每块帧緩存的 状态,其具体过程为产生DMA中断,中断处理函数查询5块帧緩存中是否 存在处于Null状态的帧緩存,由于不存在,此时,按照先进先出的顺序从Ready 队列中选择最早进入Ready队列的帧緩存(此处为Buffer—2 ),将Buffer_2作 为下一数据帧的緩存任务的目的地址。同时中断处理函数根据数据緩存完毕条 件下的状态更新机制,将处于Ready状态的Buffer—2的状态更新为Preparing 状态,将处于Getting状态的Buffer—3的状态更新为Ready状态,将处于Preparing 状态的Buffer—l的状态更新为Getting状态,从而实现图6所示的D^D,的状 态轮替。
请参阅图7 ,由于Buffer—2的状态由Ready状态更新为Preparing状态,因 此,将Buffer—2从Ready队列中删除;由于Buffer_3的状态由Getting状态更 新为Ready状态,因此,使Buffer—3进入Ready队列,从而实现图7所示的 D+D,的Ready队列和Output队列的状态4仑替。
步骤2:请参阅图6,编码程序按照先入先出的顺序释放Buffer—4,此时, 根据释放帧緩存的条件下的状态更新机制,将处于Output状态的Buffer_4的状 态更新为Null状态,从而实现图6所示的D,">E的状态轮替。经步骤1和步骤 2后,即可实现图2所示的D+E的状态4仑替。
请参阅图7,由于Buffe匸4的状态由Output状态更新为Null状态,因此, 将Buffer—4从Output队列中删除,从而实现图7所示的D,"^E的Ready队列 和Output队列的状态轮替。经步骤1和步骤2后,即可实现图3所示的D+E 的Ready队列和Output队列的状态轮替。图8示出了本发明实施例提供的内存的数据緩存装置的结构,为了便于说
明,仅示出了与本发明实施例相关的部分。该数据緩存装置可以是内置于数据 緩存设备中的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立 的挂件集成到数据緩存设备中或者运行于数据緩存设备的应用系统中。该内存
的存储空间被配置为多块帧緩存,其中
帧緩存配置单元81设置内存中预设的每块帧緩存的状态,帧緩存的状态用 于标识帧缓存的数据存储状态。在将内存的存储空间配置为N块帧緩存时,将 每块帧援存的大小配置为一帧数据大小,并为每块帧緩存配置一标号,如
Buffer—1, Buffer—2, Buffer—3, ......, Buffer_n,以区分每块帧緩存。其中N
为大于等于2的自然数。帧緩存的状态包括Getting状态、Preparing状态、Ready 状态、Output状态、以及Null状态。帧缓存各状态的所表示的数据存储状态如 上所述,在此不再赘述。
数据緩存单元82在当前帧数据緩存完毕前,根据每块帧緩存的状态确定用 于緩存下 一帧数据的帧緩存,并根据每块帧緩存的状态以及预设的状态更新条 件下的状态更新机制,更新每块帧緩存的状态。该数据緩存单元82包括条件检 测子单元821,数据传输子单元822,緩存任务产生子单元823,以及状态更新 子单元824。
条件检测子单元821实时检测数据存储状态是否达到预设的状态更新条 件。其中预设的状态更新条件包括一帧数据緩存完毕、读取帧緩存、以及释放 帧緩存。
数据传输子单元822在条件检测子单元821检测到数据存储状态达到一帧 数据緩存完毕的状态更新条件时,向处于Preparing状态的帧緩存中传输数据。
緩存任务产生子单元823在当前帧数据緩存完毕前,根据每块帧緩存的状 态确定用于緩存下一帧数据的帧緩存。其中确定用于緩存下一帧数据的帧緩存 包括DMA的目的地址和源地址、以及传输长度。緩存任务产生子单元823确 定DMA的目的地址的过程如下从所有帧緩存中寻找处于Null状态的帧緩存,如果处于Null状态的帧緩存的数量大于1,则从中任意选择一块帧緩存(如 Buffer—2 ) DMA的目的地址。
在本发明另一实施例中,如果当前不存在处于Null状态的帧緩存,则緩存 任务产生子单元823从所有帧緩存中寻找处于Ready状态的帧緩存,如果处于 Ready状态的帧緩存的数量大于1,则从中任意选择一块帧緩存作为DMA的目 的地址。
在本发明另一实施例中,该数据緩存装置还包括队列存储单元83。该队列 存储单元83预先建立两个先进先出队列,分别为Ready队列和Output队列。 其中用于管理处于Ready状态的帧緩存,其最大容量为N-2, N为配置的帧緩 存的块数。Output队列用于管理处于Output状态的帧緩存,其最大容量为N-3, N为配置的帧緩存的块数,且任意时刻,Ready队列和Output队列中的帧緩 存的数量之和小于或者等于N-2。此时,如果当前不存在处于Null状态的帧 缓存,则緩存任务产生子单元823按照先进先出的顺序从队列存储单元83的 Ready队列中选择一块帧緩存作为DMA的目的地址。
为了避免数据帧的丢失,在本发明另一实施例中,该数据緩存装置还包括 帧緩存申请单元,如果当前不存在处于Null状态的帧緩存,则帧缓存申请单元 动态申请一块新的帧緩存,并动态调整内存的存储空间的帧緩存总数。此时緩 存任务产生子单元823将帧緩存申请单元申请的帧緩存作为DMA的目的地址。
状态更新子单元824在条件检测子单元821检测到数据存储状态达到预设 的状态更新条件时,采用该状态更新条件下的状态更新^4'j,更新每块帧緩存 的状态。
当一帧数据緩存完毕时,将处于Getting状态的帧緩存的状态更新为Ready 状态,将处于Preparing状态的帧緩存的状态更新为Getting状态,将处于Null 状态的其中一块帧緩存的状态更新为Preparing状态。
在本发明另一实施例中,当一帧数据緩存完毕时,如果不存在处于Null状 态的帧緩存,则状态更新子单元824将处于Ready状态的其中一块帧緩存的状态更新为Preparing爿犬态。
在本发明另一实施例中,当一帧数据緩存完毕时,如果不存在处于Null状 态的帧緩存,则状态更新子单元824按照先进先出的顺序^v队列存储单元83 中的Ready队列中确定一块帧緩存,并将该帧缓存的状态更新为Preparing状态。
为了避免数据帧的丟失,在本发明另一实施例中,在新的一帧数据緩存完 毕条件下,如果不存在处于Null状态的帧緩存,则状态更新子单元824将帧緩 存申请单元申请的帧緩存的状态设为Preparing状态。
在读取帧緩存时,将被读取的帧緩存的状态更新为Output状态。在本发明 实施例中,由于只有在帧緩存已经缓存数据,即帧緩存处于Ready状态时,才 能从该帧緩存中读取到有效数据,而在读取帧緩存时,是按照先进先出的顺序 读取的,因此,将被读取的帧緩存的状态更新为Output状态的过程,即是将最 先进入Ready队列中的帧緩存的状态更新为Output状态。
在本发明另 一实施例中,当Ready队列中帧《爰存的数量大于1时,如果编 码程序需要同时使用多块帧緩存中的数据,则可以按照先进先出的顺序一次从 Ready队列中读取多个帧緩存中的数据,此时,将被读取的所有帧緩存的状态 更新为Output状态。从而使编码程序可以同时使用多块帧緩存中的数据,提高 了编码效率。
在释放帧緩存时,将被释放的帧緩存的状态更新为Null状态。 由于只有在编码程序已经读取帧緩存中的数据,即帧緩存处于Output状态 时,编码程序才能使用该帧緩存中的数据,同时为了保证数据帧的连续性,在 本发明实施例中,在将被释放的帧緩存的状态更新为Null状态时,按照先进先 出的顺序将最先进入Output队列中的帧緩存的状态更新为Null状态。
在本发明另一实施例中,当Output队列中帧緩存的数量大于1时,如果编 码程序同时使用完多块帧緩存,则可以按照先进先出的顺序同时从Output队列 中释放多个帧緩存,此时,将被释放的所有帧緩存的状态从Output状态更新为 Null状态。
2在本发明实施例中,通过将内存配置为N块帧緩存,并为每块帧緩存设置 标识数据存储情况的状态,并根据每块帧緩存的状态以及预设的状态更新条件 下的状态更新机制,确定每块帧缓存的緩存任务,并更新每块帧緩存的状态, 从而在当前数据帧存储完毕时,即可快速的切换到另 一个帧緩存来接收下一帧
数据;通过建立两个先进先出队列,从而保证最早输入的数据先被编码程序使 用,使数据保持连续性;由于Ready队列的容量可以在1块帧緩存至N - 2块 帧緩存之间动态变动,从而在一定程度上起到了平衡输入数据的速度和编码速 度的作用;当每块帧緩存均緩存数据且编码程序未释放帧緩存时,将最早緩存 数据的帧緩存释放,从而可以重新緩存数据;由于两个先进先出队列的容量均 可以大于1,从而可以一次为编码程序提供多个帧緩存的数据,有效的提高了 编码速度;同时由于可以动态的改变帧緩存的个数,在内存容量允许时,可以 达到不丢失一帧数据的效果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发 明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明 的保护范围之内。
权利要求
1、一种内存的数据缓存方法,所述内存的存储空间被配置为多块帧缓存,其特征在于,所述方法包括下述步骤A、设置每块帧缓存的状态,所述帧缓存的状态用于标识帧缓存的数据存储状态;B、在当前帧数据缓存完毕前,根据每块帧缓存的状态确定用于缓存下一帧数据的帧缓存,并根据每块帧缓存的状态以及预设的状态更新条件下的状态更新机制,更新每块帧缓存的状态。
2、 如权利要求l所迷的方法,其特征在于,所述帧緩存的状态包括正在緩 存数据状态、准备緩存数据状态、已经緩存数据状态、被数据占用状态、以及 空闲状态,所述状态更新条件包括一帧数据緩存完毕、读取帧緩存、以及释放 帧緩存。
3、 如权利要求2所述的方法,其特征在于,所述步骤B具体包括 B1 、实时检测数据存储状态是否达到预设的状态更新条件;B2、在当前帧数据緩存完毕时,将下一帧数据传输至处于准备緩存数据状 态的帧緩存,并采用处于空闲状态的其中一块帧緩存存储再下一帧数据,同时 将处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据状态,将处于准 备緩存数据状态的帧緩存的状态更新为正在緩存数据状态,将处于空闲状态的 其中一块帧緩存的状态更新为准备緩存数据状态;B3、当读取帧緩存时,将读取的帧緩存的状态更新为被数据占用状态; B4、当释放帧緩存时,将被释放的帧緩存的状态更新为空闲状态。
4、 如权利要求3所迷的方法,其特征在于,所述方法还包括下述步骤 设置先进先出的已緩存数据队列和数据占用队列,当所述帧緩存的状态为已经緩存数据状态时,使所述帧緩存进入所述已緩存数据队列,当所述帧緩存 的状态为被数据占用状态时,使所述帧緩存进入所述数据占用队列。
5、 如权利要求4所述的方法,其特征在于,所述已緩存数据队列的最大容量为帧缓存块数减2,所述数据占用队列的最大容量为帧緩存块数减3,所述已 緩存数据队列中的帧緩存块数与数据占用队列中的帧緩存块数之和小于或者等 于内存中预设的帧緩存总数减2。
6、 如权利要求4所述的方法,其特征在于,所述步骤B具体包括 B1'、实时检测数据存储状态是否达到预设的状态更新条件;B2'、如果当前帧数据缓存完毕,将下一帧数据传输至处于准备援存数据状 态的帧緩存,并采用处于空闲状态的其中一块帧緩存存储再下一帧数据,同时 将处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据状态,将处于准 备緩存数据状态的帧緩存的状态更新为正在緩存数据状态,如果当前不存在处 于空闲状态的帧緩存,按照先进先出的顺序,将最早进入所述已緩存数据队列 中帧緩存的状态更新为准备緩存数据状态,或者动态申请一块新的帧緩存,并 将所述新的帧緩存的状态设为准备緩存数据状态,同时动态调整内存的存储空 间的帧緩存总凄t;B3,、当读取帧緩存时,按照先进先出的顺序,将所述已緩存数据队列中的 被读取的一块或者多块帧緩存的状态更新为被数据占用状态;B4,、当释放帧缓存时,按照先进先出的顺序,将所述数据占用队列中被释 放的一块或者多块帧緩存的状态更新为空闲状态。
7、 一种内存的数据緩存装置,所述内存的存储空间被配置为多块帧緩存, 其特征在于,所述装置包括帧緩存配置单元,用于设置每块帧緩存的状态,所述帧緩存的状态用于标 识帧缓存的数据存储状态,所述帧緩存的状态包括正在緩存数据状态、准备緩 存数据状态、已经緩存数据状态、被数据占用状态、以及空闲状态;数据緩存单元,用于在当前帧数据緩存完毕前,根据每块帧緩存的状态确 定用于緩存下一帧数据的帧緩存,并根据每块帧緩存的状态以及预设的状态更 新条件下的状态更新机制,更新每块帧緩存的状态,所述状态更新条件包括一帧数据缓存完毕、读取帧緩存、以及释放帧緩存。
8、 如权利要求7所述的装置,其特征在于,所述数据緩存单元包括 条件检测子单元,用于实时检测数据存储状态是否达到预设的状态更新条件;数据传输子单元,用于在所述条件4企测子单元检测到数据存储状态达到一 帧数据緩存完毕的状态更新条件时,向处于准备接收数据状态的帧緩存中传输 数据;緩存任务产生子单元,用于在当前帧数据緩存完毕前,根据每块帧緩存的 状态确定用于緩存下一帧数据的帧緩存;状态更新子单元,用于在所述条件检测子单元检测到数据存储状态达到预 设的状态更新条件时,采用所述状态更新条件下的状态更新^4'J,更新每块帧緩存的状态。
9、 如权利要求8所述的装置,其特征在于,所述状态更新子单元在一帧数 据緩存完毕时,将处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据 状态,将处于准备緩存数据状态的帧緩存的状态更新为正在緩存数据状态,将 处于空闲状态的其中 一 块帧緩存的状态更新为准备緩存数据状态;在读取帧緩存时,将被读取的帧緩存的状态更新为被数据占用状态; 在释放帧緩存时,将被释放的帧緩存的状态更新为空闲状态。
10、 如权利要求8所述的装置,其特征在于,所述装置还包括 队列存储单元,用于存储已緩存数据队列和数据占用队列,当所述帧緩存的状态为已经緩存数据状态时,使所述帧緩存进入所述已緩存数据队列,当所 述帧緩存的状态为^皮数据占用状态时,使所述帧緩存进入所述数据占用队列。
11、 如权利要求IO所述的装置,其特征在于,所述已緩存数据队列的最大 容量为帧緩存块数减2,所述数据占用队列的最大容量为帧緩存块数减3,所述 已緩存数据队列中的帧緩存块数与数据占用队列中的帧緩存块数之和小于或者 等于内存中预设的帧緩存总数减2。
12、 如权利要求IO所述的装置,其特征在于,所述状态更新子单元在一帧数据緩存完毕时,采用处于准备緩存数据状态的帧緩存存储下一帧数据,并将 处于正在緩存数据状态的帧緩存的状态更新为已经緩存数据状态,将处于准备 緩存数据状态的帧緩存的状态更新为正在緩存数据状态,如果当前不存在处于 空闲状态的帧緩存时,按照先进先出的顺序,将最早进入所述已緩存数据队列中帧緩存的状态更新为准备緩存数据状态;在读取帧緩存时,按照先进先出的顺序,将所迷已緩存数据队列中被读取 的 一 块或者多块帧緩存的状态更新为被数据占用状态;在释放帧緩存时,按照先进先出的顺序,将所述数据占用队列中被释放的 一块或者多块帧緩存更新为空闲状态。
13、如权利要求IO所述的装置,其特征在于,所述装置还包括帧缓存申请单元,用于在一帧数据缓存完毕,且不存在处于空闲状态的帧 緩存时,动态申请一块新的帧緩存,并将所述新的帧缓存的状态设为准备緩存 数据状态,同时动态调整内存的存储空间的帧緩存总数。
全文摘要
本发明适用于数据存储领域,提供了一种数据缓存方法、装置及设备,所述方法包括下述步骤将内存的存储空间配置为多块帧缓存,并设置每块帧缓存的状态,所述帧缓存的状态用于标识帧缓存的数据存储状态;在当前帧数据缓存完毕前,根据每块帧缓存的状态确定用于缓存下一帧数据的帧缓存,并根据每块帧缓存的状态以及预设的状态更新条件下的状态更新机制,更新每块帧缓存的状态。本发明实施例在缓存当前数据帧时,即确定下一数据帧的缓存任务,从而保证在当前新的一帧数据缓存完毕时,可以快速的切换到用于缓存下一数据帧的帧缓存,避免了数据丢失。本发明实施例同时可以提高编码效率。
文档编号G06F12/08GK101567849SQ20091010692
公开日2009年10月28日 申请日期2009年4月30日 优先权日2009年4月30日
发明者侯景昆 申请人:炬才微电子(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1