一种码流数据的读取移除方法和装置的制作方法

文档序号:7517326阅读:247来源:国知局
专利名称:一种码流数据的读取移除方法和装置的制作方法
技术领域
本发明属于解码处理领域,尤其涉及一种码流数据的读取移除方法和装置。
背景技术
在解码单元对内存中的码流数据进行解码处理时,由于受解码单元解码需要的码流宽度的限制,一般需要通过直接存储访问(Direct Memory Access,DMA)读取单元从内存中读取预设长度的码流数据,并将读取的码流数据暂存在存储单元中,解码单元对存储单元中的码流数据进行解码处理,并在解码处理完毕后,输出码流移除信号和码流移除长度, 根据码流移除信号和码流移除长度移除存储单元中的码流数据,以便可以继续将内存中的码流数据写入存储单元,为解码单元做码流数据准备,解码单元的一次解码过程可能包含多次解码处理。现有技术一般通过存储移位单元根据码流移除信号和码流移除长度移除存储单元中的码流数据,请参阅图1,为现有技术提供的码流数据读取移除方案的硬件结构框图。 其中存储移位单元主要包括移位器、存储单元和码流结尾比特位序号计数器。其中码流结尾比特位序号计数器计算码流数据在存储单元的结尾位置,DMA读取单元在传递数据时,从码流结尾比特位序号后面的位置开始将码流数据写入存储单元中。移位器将存储单元中的码流数据左移(8*start_bias+start_offset)位(时钟触发沿时刻dma_done和firSt_read都为高情况)或length位(时钟触发沿时刻skip为高情况)。其中start_bias表示码流起始偏移字节数。start^ffset表示解码前码流在起始字节内部的比特偏移量。dma_done表示DMA完成一次读码流操作,高有效。firSt_read 表示当前DMA读码流操作是否为本次解码的第一次DMA读码流操作,高电平表示是,否则表示不是。length表示码流移除长度。现有技术由于采用移位器电路实现存储单元中的码流数据移位操作,从而导致电平翻转比较多,如当存储单元的大小为M比特时,采用移位器电路实现存储单元中的码流数据移位操作时,可能有M比特位发生电平翻转,从而极大的增加了硬件功耗。

发明内容
本发明实施例的目的在于提供一种码流数据的读取移除方法,旨在解决现有技术采用移位器电路移除码流数据时导致的发生电平翻转的比特位数多、增加硬件功耗的问题。本发明实施例是这样实现的,一种码流数据的读取移除方法,所述方法包括下述步骤计算码流数据在存储单元中的起始字节位置bytejndex和码流数据在起始字节内部的比特偏移量offset ;多路选择器根据所述bytejndex和offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据;
将选择的码流数据输出至解码单元进行解码处理,并在解码处理完毕后,输出码流移除信号Skip信号和码流移除长度length信号,以便根据所述skip信号和length信号更新所述byte_index和offset。本发明实施例的另一目的在于提供一种码流数据的读取移除装置,所述装置包括存储单元,用于存储DMA读取单元从内存中读取的码流数据,为解码单元解码准备码流数据;起始字节位置计算单元,用于计算码流数据在存储单元中的起始字节位置byte_ index ;偏移量计算单元,用于计算码流数据在起始字节内部的比特偏移量offset ;多路选择器,用于根据所述起始字节位置计算单元计算得到的bytejndex以及偏移量计算单元计算得到的offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据输出至解码单元。在本发明实施例中,通过采用bytejndex和offset来对存储单元中的码流数据进行有效寻址,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据输出至解码单元进行解码处理,相对于原有技术方案,本发明不对存储单元中的数据进行移位操作,因此,可以极大的减少可能发生电平翻转的比特位数,极大的降低了硬件功耗。


图1是现有技术提供的码流数据读取移除方案的硬件结构框图;图2是本发明第一实施例提供的码流数据的读取移除方法的实现流程图;图3是本发明第二实施例提供的码流数据的读取移除方法的实现流程图;图4是本发明第三实施例提供的码流数据的读取移除方法的实现流程图;图5是本发明第四实施例提供的码流数据的读取移除方法的实现流程图;图6是本发明实施例提供的码流数据的读取移除装置的结构框图;图7是本发明另一实施例提供的码流数据的读取移除装置的结构框图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在本发明实施例中,先计算码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,多路选择器根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,将选择的码流数据输出至解码单元进行解码处理,本发明实施根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量对存储单元中存储的码流数据进行寻址,选择解码单元解码所需的码流宽度比特码流数据,从而减少了电平翻转的比特数,降低了硬件功耗。
为了便于理解和说明,在此列出本发明实施例中使用到的各术语的含义。start 表示解码开始信号,高有效;start_addr 表示码流起始地址;start_addr表示 start_addr 最低位;start_addr[l:0]表示 start_addr 低两位;start_offset 表示解码前码流在起始字节内部的比特偏移,在整个解码过程中, 该值不会发生改变;start_bias 表示码流起始偏移字节数。由于DMA可以按照半字对齐方式或者字对齐方式传递码流数据,而start_addr是字节对齐方式,因此,会造成码流字节的偏移,所以,当DMA按照半字对齐方式传递数据时,start_bias = start_addr
;当DMA按照字对齐方式传递数据时,start_bias = start_addr [1 0]。skip 表示码流移除信号,高有效;length:表示码流移除长度,其大于或者等于0,小于或者等于N,其中N为解码单元解码所需的码流数据宽度。dma_done 表示DMA完成一次读码流操作,高有效;first_read 表示当前DMA读码流操作是否为本次解码的第一次DMA读码流操作, 高电平表示是,否则表示不是。在时钟触发沿时刻,如果start信号为高,则first_read更新为1 ;如果dma_done信号为高,则first_read更新为0。data_buffer 表示存储单元;存储单元的空闲区存储单元共2*CNT字节大小,分为高CNT部分(高CNT字节) 和低CNT部分(低CNT字节),当开始解码时高CNT部分为空闲区,之后bytejndex确定的起始字节所在的部分不是空闲区,另外一个部分为空闲区;byte_index 表示码流数据在存储单元中的起始字节位置;byte_index[x-l:2]byte_index;byte_index[l 0]表示 byte_index 低两位的值;offset 表示码流数据在起始字节内部的比特偏移量,其取值范围为0 7,因为一个字节包括8比特位,因此码流数据在字节内部的比特偏移的最小偏移量为0,最大偏移量为7,该offset值在解码过程中将发生改变;new_addr 表示解码后的新的码流地址;offset_and_length 表示 offset 与 length 之禾口 ;offset_and_length [2 0]表示 offset_and_length 的低 3 位值;byte_shift 表示 ofTset_and_length 右移 3 位后的值,艮byte_shift = offset_ and_length >> 3 ;函数mint (χ)若 χ 为整数则 mint (χ) =χ,否则 mint (χ) = [x]+l,其中[]表示
取整操作。max_index 表示存储单元中包含的字节数;M 表示存储单元中包含的比特数,M = 8*max_index ;CNT:表示DMA每次传送的字节数,按照DMA每次传送都是写一半的存储单元空间, 因此,max_index = 2*CNT ;
N 表示解码单元解码需要的码流数据宽度;A 表示存储单元中的可用码流字节数;AO 表示为保证解码正确,存储单元中所存放码流的最小字节数,当A小于AO时, 标志存储单元中的码流不可用。Al 表示存储单元一半空间所包含的字节数,需设定Al大于A0,当A小于或者等于Al时,DMA读码流单元启动,从内存中读取码流数据,并把码流数据写入存储单元的空闲区中。为了保证第一次DMA读码流完成后码流数据可用,在DMA按照半字对齐方式传送码流数据时,CNT-I彡AO ;在DMA按照字对齐方式传送码流数据时,CNT-3彡AO。由于offset最大为7,因此,存储单元中至少包含N+7比特位码流数据,才表示存储单元中的码流数据可用,所以AO = [((N+7)+7)/8],其中[]表示取整操作。按照存储单元中码流数据的数量小于或者等于存储单元的存储空间的一半时即需从内存中读取码流数据的原则,需要Al = CNT。综上所述,可以得到当DMA按照半字对齐方式传送码流数据时,[ ((N+7) +7) /8] = AO 彡 CNT-I ;......(1)当DMA按照字对齐方式传送码流数据时,[ ((N+7) +7) /8] = AO 彡 CNT-3 ;......(2)AO < Al = CNT ;......(3)实施例一图2示出了本发明第一实施例提供的码流数据的读取移除方法的实现流程,详述如下在步骤SlOl中,计算码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量。其中码流数据在存储单元中的起始字节位置(bytejndex)的具体计算过程如下当解码开始信号(start)为有效时,byte_index = start_bias ;在本发明实施例中,当start信号为高电平时视为解码开始信号有效,如当启动解码时,start信号保持一个时钟周期的高电平,表示解码开始信号保持一个时钟周期有效。当DMA按照半字对齐方式传送码流数据时,start_bias = start_addr
;当DMA 按照字对齐方式传送码流数据时,start_bias = start_addr [1 0]。。当码流移除信号(skip)有效时,先判断byte_index+byte_shift-max_index 彡 0 是否成立,如果成立,贝Ij byte—index = byte_index+byte_shift-max_index,否贝Ij byte— index = byte_index+byte_shift。其中码流数据在起始字节内部的比特偏移量的具体计算过程如下当解码开始信号为有效时,offset = start_offset ;当码流移除信号(skip)有效时,offset= offset_and_length[20]。在步骤S102中,多路选择器根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,从存储单元中选择解码单元解码所需的码流宽度比特码流数据。其中多路选择器根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,从存储单元中选择解码单元解码所需的码流宽度比特码流数据的具体实现步骤可以采用现有技术提供的任意一种方式实现,本发明实施例提供了如下实现方法a、根据bytejndex右移两位后的值(即为bytejndex [x_l 2])确定码流数据在存储单元中的起始字,第一选择电路从该起始字的最高位开始按照从高到低的顺序选择 N+31比特位的码流数据传递给第二选择电路。其中χ表示bytejndex位数。由于bytejndex是表示码流数据在存储单元中的起始字节位置的,而存储单元中的每一个字节都有可能成为码流数据在存储单元中的起始字节,因此,该bytejndex必须可以标识存储单元中的每个字节,所以bytejndex位数与存储单元的总内存空间有关,即存储单元为M比特大小,则bytejndex为mint (log/8)位。 如当存储单元的总大小为512比特,即64字节时,该byte_index位数为6个比特,即χ = 6 ;当存储单元的总大小为1024比特,即128字节时,该bytejndex位数为7个比特,即χ =7,依次类推。b、根据bytejndex的低两位的值(即为bytejndex [1 0])确定码流数据在上述起始字中的起始字节,第二选择电路从该起始字节的最高位开始按照从高到低的顺序选择 N+7比特位的码流数据传递给第三选择电路。其中根据bytejndex的右移两位后的值(即为bytejndex [x_l 2])确定码流数据在存储单元中的起始字,以及根据bytejndex的低两位的值(即为bytejndex[1 0]) 确定码流数据在上述起始字中的起始字节的原理如下由于存储单元中包含有2*CNT个字节,即包含mint(CNT/^)个字,把字从高到低编号为 0 mint (CNT/2)-1。byte_index [χ-1 2]确定的起始字为 data_buffer 中编号为byte_indeX[X-l:2]的字;每个字中包括4个字节,从高到低编号为0 3,byte_ index[1:0]确定的起始字节为起始字中编号为bytejndex[1 0]的字节。C、根据offset确定码流数据在上述起始字节中的偏移位数,第三选择电路将从第二选择电路传递来的N+7比特位的码流数据的最高位起,由高到低顺序,从第 (offset+Ι)位开始选定N比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。在本发明实施例中,在根据bytejndex的右移两位后的值(即为byte_ index [χ-1 2])确定码流数据在存储单元中的起始字时,由于每个字包括4个字节,所以可能存在最多3字节(即M比特位)的数据偏移,在根据bytejndex的低两位的值(即为 byte_index[l:0])确定码流数据在上述起始字中的起始字节时,由于每个字节包括8比特位,所以可能存在最多7比特的数据偏移,所以为了保证根据上述步骤可以选择出解码单元解码所需的码流宽度比特码流数据,在第一选择电路从该起始字的最高位开始按照从高到低的顺序选择码流数据时,需要多选择31位(即M+7 = 31位)码流数据,在第二选择电路从该起始字节的最高位开始按照从高到低的顺序选择码流数据时,需要多选择7位码流数据。在步骤S103中,将选择的码流数据输出至解码单元进行解码处理,并在解码处理完毕后,输出skip信号和length信号。以便根据输出的skip信号和length信号更新码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,再根据更新后的码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量, 从存储单元中选择下一次解码所需的码流数据,循环执行,直到解码结束。在本发明实施例中,根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量对存储单元中存储的码流数据进行寻址,选择解码单元解码所需的码流宽度比特码流数据,从而避免了采用移位器移除存储单元中的码流数据,显著减少了电平翻转的比特数,降低了硬件功耗。实施例二 由于当存储单元中的可用码流字节数小于AO时,则存储单元的码流数据被标记为不可用,为了解码单元可以正确的进行解码操作,图3示出了本发明第二实施例提供的码流数据的读取移除方法的实现流程,图3所示的码流数据的读取移除方法中的步骤S201 至S203与图2所示的码流数据的读取移除方法中的步骤SlOl至S103相同,在此不再赘述, 其不同之处仅在于,图3所示的码流数据的读取移除方法还包括下述步骤在步骤S204中,计算存储单元中可用码流的字节数。其具体计算过程如下所述, 当然还可以采用现有技术提供其他计算方法计算,在此不再一一举例说明当start信号为高时,A = O;当dma_d0ne信号为高,skip信号为低时,判断当前DMA读码流操作是否为本次解码的第一次DMA读码流操作,即判断f irstjead为高还是低,如果为高,即当前DMA读码流操作为本次解码的第一次DMA读码流操作,则A = CNT-start_bias,如果为低,即当前DMA 读码流操作不是本次解码的第一次DMA读码流操作,则A = A+CNT ;当dma_done 信号为低,skip 信号为高时,则 A = A_byte_shift ;当 dma_done 信号为高,skip 信号为高时,则 A = A+CNT_byte_shift。在步骤S205中,根据存储单元中可用码流的字节数标记存储单元中的码流数据是否可用。即判断A < AO是否成立,如成立,则标记存储单元中的码流数据不可用,否则标记存储单元中的码流数据可用。可以理解,上述步骤S204和步骤S205可以在图3所示的步骤S201、S202、S203之前或者之后执行。由于当存储单元中的可用码流字节数A小于或者等于Al时,表示存储单元中至少有一半的空间是空闲的,为了不中断此次解码操作,图4示出了本发明第三实施例提供的码流数据的读取移除方法的实现流程,图4所示的码流数据的读取移除方法中的步骤S301 至S304与图3所示的码流数据的读取移除方法中的步骤S201至S204相同,在此不再赘述, 其不同之处仅在于,图4所示的码流数据的读取移除方法还包括下述步骤在步骤S305中,判断存储单元中可用码流的字节是否小于或者等于Al,并在存储单元中可用码流的字节数小于或者等于Al时,启动DMA读取单元。DMA读取单元继续从内存中读取码流数据,并将读取的码流数据写入存储单元的空闲区。可以理解,上述步骤S304、S305可以在图4所示的步骤S301、S302、S303之前或者之后执行。在解码完成后,为了使其他单元获得解码完成后的码流地址,图5示出了本发明第四实施例提供的码流数据的读取移除方法的实现流程,图5所示的码流数据的读取移除方法中的步骤S401至S403与图2所示的码流数据的读取移除方法中的步骤SlOl至S103 相同,在此不再赘述,其不同之处仅在于,图5所示的码流数据的读取移除方法还包括下述步骤在步骤S404中,计算解码后的新码流地址,并在整个解码过程结束后,将解码后的新码流地址传递至上层单元。其中解码后的新码流地址的具体计算步骤如下当解码开始信号为有效,即start信号为高时,解码后的新码流地址neW_addr = start_addr ;当码流移除信号为有效,即skip信号为高时,先判断offset_and_length是否大于7,如果是,解码后的新码流地址neW_addr = neW_addr+byte_Shift,否则解码后的新码流地址new_addr保持不变。在本发明实施例中,在解码单元对选择的码流数据解码处理完毕后,会输出skip 信号和length信号,此时,原有的解码后的新码流地址可能被更新,因此,在整个解码过程完成后,解码后的新码流地址可以保持最新。在本发明另一实施例中,该方法还包括下述步骤在解码结束后,将offset值传递至上层单元,以备上层单元使用。图6示出了本发明实施例提供的码流数据的移除装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。该码流数据的移除装置可以是内置于解码器中的软件单元、硬件单元或者软硬件相结合的单元或者作为独立的挂件集成到解码器或者解码器的应用系统中。其中存储单元1存储DMA读取单元从内存中读取的码流数据,为解码单元解码准备码流数据。起始字节位置计算单元2计算码流数据在存储单元中的起始字节位置。其具体计算过程如下当解码开始信号(start)为有效时,byte_index = start_bias ;在本发明实施例中,当start信号为高电平时视为解码开始信号有效,如当启动解码时,start信号保持一个时钟周期的高电平,表示解码开始信号保持一个时钟周期有效。当DMA按照半字对齐方式传送码流数据时,start_bias = start_addr
;当DMA 按照字对齐方式传送码流数据时,start_bias = start_addr [1 0] 0当码流移除信号(skip)有效时,先判断byte_index+byte_shift-max_index 彡 0 是否成立,如果成立,贝Ij byte—index = byte_index+byte_shift-max_index,否贝Ij byte— index = byte_index+byte_shift。偏移量计算单元3计算码流数据在起始字节内部的比特偏移量,并在解码结束时把该偏移量返回给上层单元。其具体计算过程如下当解码开始信号为有效时,offset = start_offset ;当码流移除信号(skip)有效时,offset= offset_and_length[20]。多路选择器4根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据输出至解码单元。该多路选择器4包括第一选择电路41、第二选择电路 42以及第三选择电路43。其中
第一选择电路41根据bytejndex右移两位后的值(即为bytejndex [x_l 2]) 确定码流数据在存储单元中的起始字,并从该起始字的最高位开始按照从高到低的顺序选择N+31比特位的码流数据传递给第二选择电路42。其中χ表示bytejndex位数。由于bytejndex是表示码流数据在存储单元中的起始字节位置的,而存储单元中的每一个字节都有可能成为码流数据在存储单元中的起始字节,因此,该bytejndex必须可以标识存储单元中的每个字节,所以bytejndex位数与存储单元的总内存空间有关,即存储单元为M比特大小,则bytejndex为mint (log/8)位。 如当存储单元的总大小为512比特,即64字节时,该byte_index位数为6个比特,即χ = 6 ;当存储单元的总大小为1024比特,即128字节时,该byte_index位数为7个比特,即χ =7,依次类推。第二选择电路42根据bytejndex的低两位的值(即为byte_indeX[l :0])确定码流数据在上述起始字中的起始字节,并从该起始字节的最高位开始按照从高到低的顺序选择N+7比特位的码流数据传递给第三选择电路43。其中根据bytejndex的除低两位以外的其他位的值(即为bytejndex [x_l 2]) 确定码流数据在存储单元中的起始字,以及根据bytejndex的低两位的值(即为byte_ index[1:0])确定码流数据在上述起始字中的起始字节的原理如上所述,在此不再赘述。第三选择电路43根据offset确定码流数据在上述起始字节中的偏移位数, 并从第二选择电路传递来的N+7比特位的码流数据的最高位起,由高到低顺序,从第 (offset+Ι)位开始选定N比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。在本发明实施例中,解码单元对码流数据解码处理完毕后,输出skip信号和 length信号,根据skip信号和length信号更新码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,再根据码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,从存储单元1中选择下一次解码所需的码流数据,循环执行,直到解码结束。由于当存储单元中的可用码流字节数小于AO时,则存储单元的码流数据被标记为不可用,为了解码单元可以正确的进行解码操作,在本发明另一实施例中,该装置还包括可用码流字节数计算单元5和码流可用标记单元6。其中可用码流字节数计算单元5计算存储单元中可用码流的字节数。其具体计算过程如下当start信号为高时,A = 0 ;当dma_d0ne信号为高,skip信号为低时,判断当前DMA读码流操作是否为本次解码的第一次DMA读码流操作,即判断f irstjead为高还是低,如果为高,即当前DMA读码流操作为本次解码的第一次DMA读码流操作,则A = CNT-start_bias,如果为低,即当前DMA 读码流操作不是本次解码的第一次DMA读码流操作,则A = A+CNT ;当dma_done 信号为低,skip 信号为高时,则 A = A_byte_shift ;当 dma_done 信号为高,skip 信号为高时,则 A = A+CNT_byte_shift。码流可用标记单元6根据存储单元中可用码流的字节数标记存储单元中的码流数据是否可用,当存储单元中的可用码流的字节数小于AO时,标记存储单元中的码流数据不可用,否则标记存储单元中的码流数据可用。由于当存储单元中的可用码流字节数A小于或者等于Al时,表示存储单元中至少有一半的空间是空闲的,为了不中断此次解码操作,在本发明另一实施例中,该装置还包括可用码流字节数判断单元7。该可用码流字节数判断单元7判断存储单元中可用码流的字节是否小于或者等于Al,即判断A < Al是否成立,并在存储单元中可用码流的字节数小于或者等于Al时,启动DMA读取单元,以便继续从内存中读取码流数据,并将读取的码流数据写入存储单元1的空闲区。在解码完成后,为了使其他单元获得解码完成后的码流地址,在本发明另一实施例中,该装置还包括码流新地址计算单元8。该码流新地址计算单元8计算解码后的新码流地址,并在解码结束后,将解码后的新码流地址传递至上层单元。其中解码后的新码流地址的具体计算步骤如下当解码开始信号为有效时,解码后的新码流地址neW_addr = start_addr ;当码流移除信号为有效时,先判断0ffSet_and_length是否大于7,如果是,解码后的新码流地址 new_addr = new_addr+byte_shift,否则解码后的新码流地址new_addr保持不变。在本发明实施例中,在解码单元对选择的码流数据解码处理完毕后,会输出skip 信号和length信号,此时,原有的解码后的新码流地址可能被更新。图7示出了本发明另一实施例提供的码流数据的读取移除装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。其中DMA读取单元从内存中读取码流数据并将读取的码流数据写入存储单元的空闲区中。当码流数据的移除装置还包括可用码流字节数判断单元时,该DMA读取单元还与可用码流字节数判断单元连接,在DMA读取单元完成一次读码流操作时,向可用码流字节数判断单元输出有效的dma_d0ne信号,并在可用码流字节数判断单元判定存储单元中码流数据的可用字节数小于或者等于Al时启动。解码单元对多路选择器输出的码流数据进行解码处理,并在解码处理完毕后,返回码流移除信号和码流移除长度。码流数据的移除装置根据返回的码流移除信号和码流移除长度更新码流数据在存储单元中的起始字节位置和码流数据在起始字节内部的比特偏移量,以及解码后的新码流地址以及存储单元中的可用码流的字节数。以下以一个具体的示例说明本发明实施例提供的解码器的工作原理假设解码单元解码需要的码流宽度为32比特,即N = 32 ;存储单元的大小为512 比特,即M = 512,max_index = 64 ;码流数据在存储单元中的起始字节位置bytejndex共有 mint(lo&512/8) = 6 比特,即 χ = 6 ;由于 max_index = 2*CNT = 64,因此,CNT = 32 ;DMA 数据宽度为32比特,即DMA按照字对齐方式传递码流数据;由于N = 32,CNT = 32,DMA按照字对齐方式传递码流数据,所以根据式⑵,即[((N+7)+7)/8] =AO彡CNT-3,可以得到 AO = 5,根据式(3),即AO < Al = CNT,可以得到Al = 32 ;在解码开始时,可以获取到码流起始地址start_addr和解码前码流在起始字节内部的比特偏移start_0ffset。启动解码时,start信号保持一个时钟周期的高电平。此时bytejndex = start, bias, offset = start_offset, A = O, new_addr = start_addr。由于 DMA 按照字对齐方
石马^ ,@]lt;, byte—index = start—bias = start_addr [1:0]。由于A = 0,A0 = 5,因此A < AO,所以标记存储单元中的码流数据不可用,由于A=0,A1 = 32,因此A < Al,所以启动DMA读取单元,DMA读取单元从内存中读取码流数据, 并把读取的码流数据写入存储单元的空闲区,在读取码流数据时,按照每次读取写一半存储单元的原则。当DMA读取单元完成读码流操作时,dma_done信号保持一个时钟周期的高电平, 此时,A = CNT-start_bias = 32_start_addr [1 0],start_addr [1 0]最大值为 3,所以 A 最小值为29,因此此时满足A彡A0,所以此时标记存储单元中的码流数据可用。根据byte_indeX[X-l:2]确定码流数据在存储单元中的起始字,第一选择电路从该起始字的最高位开始按照从高到低的顺序选择N+31比特位的码流数据传递给第二选择电路。由于χ = 6,N = 32,所以,根据byte_index[5:2]确定码流数据在存储单元中的起始字,第一选择电路从该起始字的最高位开始按照从高到低的顺序选择63比特位的码流数据传递给第二选择电路。根据byte_indeX[l:0]确定码流数据在上述起始字中的起始字节,第二选择电路从该起始字节的最高位开始按照从高到低的顺序选择39比特位的码流数据传递给第三选择电路。根据offset确定码流数据在上述起始字节中的偏移位数,第三选择电路从第二选择电路传递来的39比特位的码流数据的最高位起,由高到低顺序,从第(offset+Ι)位开始选定32比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。由于此时 offset = start_offset,因此,根据start_offset确定码流数据在上述起始字节中的偏移位数,第三选择电路从第二选择电路传递来的39比特位的码流数据的最高位起,由高到低顺序,从第(offset+Ι)位开始选定32比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。解码单元对选择的码流数据进行解码处理,并返回skip信号和length信号,根据 skip 信号禾口 length 信号更新 byte_index、offset、A 以及 new_addr。在更新byte_index时,由于skip信号有效,因此,先判断byte_index+byte_ shift-max_index > 0 是否成立,如果成立,贝Ij byte_index = byte_index+byte_ shift_max_index,否则,byte_index = byte_index+byte_shift。在更新offset 时,由于 skip 信号有效,因此,offset = offset_and_ length[2:0]。在更新A时,由于skip信号有效,即为高,判断dma_d0ne信号是高还是低,如果 dma_done 信号为高,则 A = A+CNT_byte_shift,如果 dma_done 信号为低,则 A = A+CNT。在更新new_addr时,由于skip信号有效,即为高,此时先判断offset_and_length > 7 是否成立,如果成立,new_addr = new_addr+byte_shift,否则 new_shift 保持不变。在更新bytejndex、offset、A以及neW_addr后,多路选择器继续根据更新后的 byte_index和offset从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据传送至解码单元进行解码处理,循环执行,直到解码结束,在解码结束后,将最后的neW_addr和offset传递至上层单元,以供上层单元使用。在上述过程中,当遇到A < Al时,则启动DMA读取单元,DMA读取单元从内存中读取码流数据,并将读取的码流数据写入存储单元的空闲区中;当遇到々< AO时,则标记存储单元中的码流数据不可用。在本发明实施例中,通过采用bytejndex和offset来对存储单元中的码流数据进行有效寻址,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据输出至解码单元进行解码处理。对于偏移量计算单元、码流新地址计算单元、 可用码流数计算单元等原技术方法和本发明都存在的单元,忽略这些单元内的电平翻转, 只考虑对存储单元内码流数据进行移除操作造成的电平翻转问题。当存储单元的大小为 M比特时,若采用原技术方法则移除操作时整个存储单元即M比特电平都可能发生翻转; 而采用本发明提供的方法,移除操作时存储单元内M比特电平不会发生翻转,只有byte_ index的位数即mint (log/8)比特电平可能发生翻转,可能发生电平翻转的比特位数减少了(M-mintaog^8))位,因此,本发明极大的减少了硬件电平翻转的比特数,降低了硬件功
耗。”。 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种码流数据的读取移除方法,其特征在于,所述方法包括下述步骤计算码流数据在存储单元中的起始字节位置bytejndex和码流数据在起始字节内部的比特偏移量offset ;多路选择器根据所述bytejndex和offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据;将选择的码流数据输出至解码单元进行解码处理,并在解码处理完毕后,输出码流移除信号skip信号和码流移除长度length信号,以便根据所述skip信号和length信号更新所述 byte_index 禾口 offset。
2.如权利要求1所述的方法,其特征在于,所述计算码流数据在存储单元中的起始字节位置bytejndex的步骤具体为当解码开始信号start信号为有效时,bytejndex = start_bias,其中start_bias表示码流起始偏移字节数,当直接存储访问DMA按照半字对齐方式传送码流数据时,start, bias = start_addr
;当DMA按照字对齐方式传送码流数据时,start_bias = start_ addr[l 0],其中start_addr表示码流起始地址,start_addr
表示码流起始地址的最低位,start_addr[l 0]表示码流起始地址的低两位;当码流移除信号skip信号有效时,先判断byte_index+byte_shift-max_index彡0是否成立,如果成立,贝1J byte—index = byte_index+byte_shift-max_index,否贝byte—index =byte_index+byte_shift, byte_shift ^7^ offset_and_length 3 白勺it, offset_and_length表示offset与length之禾口,max_index表示存储单元中包含的字节数。
3.如权利要求1所述的方法,其特征在于,所述计算码流数据在起始字节内部的比特偏移量offset的步骤具体为当解码开始信号start信号为有效时,offset = start_offset,其中start_offset表示解码前码流在起始字节内部的比特偏移;当码流移除信号skip信号有效时,offset = offset_and_length[2 0],其中 offset_and_length 表不 offset 与 length 之禾口,offset_and_length [2 0]表不 offset_ and_length 的低 3 位。
4.如权利要求1所述的方法,其特征在于,所述多路选择器根据所述bytejndex和 offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据的步骤具体为根据bytejndex[x-1 2]确定码流数据在存储单元中的起始字,第一选择电路从该起始字的最高位开始按照从高到低的顺序选择N+31比特位的码流数据传递给第二选择电路,其中χ表示bytejndex位数,N表示解码单元解码所需的码流宽度,byte_ index [x-1 2]表示byte_index右移两位后的值;根据bytejndex[1 0]确定码流数据在上述起始字中的起始字节,第二选择电路从该起始字节的最高位开始按照从高到低的顺序选择N+7比特位的码流数据传递给第三选择电路,其中byte_index[l 0]表示bytejndex低两位;根据offset确定码流数据在上述起始字节中的偏移位数,第三选择电路从第二选择电路传递来的N+7比特位的码流数据的最高位起,由高到低顺序,从第(offset+Ι)位开始选定N比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。
5.如权利要求1至4任一权利要求所述的方法,其特征在于,所述方法还包括下述步骤计算存储单元中可用码流的字节数A ;当A < AO时,标记存储单元中的码流数据不可用,否则标记存储单元中的码流数据可用,其中AO表示为保证解码正确,存储单元中所存放码流的最小字节数。
6.如权利要求5所述的方法,其特征在于,所述方法还包括下述步骤判断A < Al是否成立,并在A < Al成立时,启动DMA读取单元,DMA读取单元从内存中读取码流数据,并将读取的码流数据写入存储单元的空闲区,其中Al表示存储单元一半空间所包含的字节数。
7.如权利要求5所述的方法,其特征在于,所述计算存储单元中可用码流的字节数A的步骤具体为当start信号为高时,A = O;当dma_done信号为高,skip信号为低时,判断f irSt_read为高还是低,如果为高,则A =CNT-start_bias,如果为低,则A = A+CNT,其中dma_done信号为DMA完成一次读码流操作的标志,first_read为高标志当前读码流操作为本次解码的第一次DMA读码流操作,CNT 为DMA每次传送的字节数;当dma_done信号为低,skip信号为高时,则A = A-byte_shift ;当dma_done信号为高,skip信号为高时,则A = A+CNT_byte_shift。
8.一种码流数据的读取移除装置,其特征在于,所述装置包括存储单元,用于存储DMA读取单元从内存中读取的码流数据,为解码单元解码准备码流数据;起始字节位置计算单元,用于计算码流数据在存储单元中的起始字节位置byte_ index ;偏移量计算单元,用于计算码流数据在起始字节内部的比特偏移量offset ;多路选择器,用于根据所述起始字节位置计算单元计算得到的bytejndex以及偏移量计算单元计算得到的offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据,并将选择的码流数据输出至解码单元。
9.如权利要求8所述的装置,其特征在于,所述多路选择器包括第一选择电路,用于根据byte_index[x-l 2]确定码流数据在存储单元中的起始字, 第一选择电路从该起始字的最高位开始按照从高到低的顺序选择N+31比特位的码流数据传递给第二选择电路,其中χ表示bytejndex位数,N表示解码单元解码所需的码流宽度, 其中byte_index[x-l 2]表示byte_index右移两位后的值;第二选择电路,用于根据byte_index[l 0]确定码流数据在上述起始字中的起始字节,第二选择电路从该起始字节的最高位开始按照从高到低的顺序选择N+7比特位的码流数据传递给第三选择电路,其中byte_indeX[l 0]表示bytejndex低两位;第三选择电路,用于根据offset确定码流数据在上述起始字节中的偏移位数,第三选择电路从第二选择电路传递来的N+7比特位的码流数据的最高位起,由高到低顺序,从第 (offset+Ι)位开始选定N比特位码流数据作为解码单元解码所需的码流宽度比特码流数据。
10.如权利要求8或9所述的装置,其特征在于,所述装置还包括可用码流字节数计算单元,用于计算存储单元中可用码流的字节数A ; 码流可用标记单元,用于根据存储单元中可用码流的字节数标记存储单元中的码流数据是否可用,当A < AO时,标记存储单元中的码流数据不可用,否则标记存储单元中的码流数据可用,其中AO表示为保证解码正确,存储单元中所存放码流的最小字节数。
11.如权利要求10所述的装置,其特征在于,所述装置还包括 可用码流字节数判断单元,用于判断A < Al是否成立,并在A < Al成立时,启动DMA 读取单元,DMA读取单元从内存中读取码流数据,并将读取的码流数据写入存储单元的空闲区,其中Al表示存储单元一半空间所包含的字节数。
全文摘要
本发明适用于解码处理领域,提供了一种码流数据的读取移除方法和装置,该方法包括下述步骤计算码流数据在存储单元中的起始字节位置byte_index和码流数据在起始字节内部的比特偏移量offset;多路选择器根据所述byte_index和offset,从存储单元中选择解码单元解码所需的码流宽度比特码流数据;将选择的码流数据输出至解码单元进行解码处理,并在解码处理完毕后,输出码流移除信号skip信号和码流移除长度length信号。本发明实施例通过采用byte_index和offset来对存储单元中的码流数据进行有效寻址的方式来代替码流数据移位操作,因此,可以极大的减少可能发生电平翻转的比特位数,极大的降低了硬件功耗。
文档编号H03M13/15GK102263562SQ20101018656
公开日2011年11月30日 申请日期2010年5月28日 优先权日2010年5月28日
发明者冷永春, 胡胜发, 蔡宁宁, 高展 申请人:安凯(广州)微电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1