首页> 中国专利> 生成数据流并识别在数据流内的位置

生成数据流并识别在数据流内的位置

摘要

一种用于生成通过可变长度编码方案被编码的数据流的方法和包括计算机程序产品的装置。包含多个码字的数据流的码字根据可变长度编码方案被编码。分隔标志被插在该数据流中的编码数据块之间。

著录项

  • 公开/公告号CN101647288A

    专利类型发明专利

  • 公开/公告日2010-02-10

    原文格式PDF

  • 申请/专利权人 斯卡拉多AB公司;

    申请/专利号CN200880005052.0

  • 发明设计人 萨米·尼尔米;乔安·斯滕;

    申请日2008-02-15

  • 分类号H04N7/50(20060101);H03M7/42(20060101);H04N7/26(20060101);

  • 代理机构11018 北京德琦知识产权代理有限公司;

  • 代理人罗正云;王琦

  • 地址 瑞典伦德

  • 入库时间 2023-12-17 23:27:13

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-30

    专利权的转移 IPC(主分类):H04N7/50 登记生效日:20181109 变更前: 变更后: 申请日:20080215

    专利申请权、专利权的转移

  • 2018-11-30

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04N7/50 变更前: 变更后: 申请日:20080215

    专利权人的姓名或者名称、地址的变更

  • 2013-01-23

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04N7/50 变更前: 变更后: 申请日:20080215

    专利权人的姓名或者名称、地址的变更

  • 2012-12-05

    授权

    授权

  • 2012-09-26

    专利申请权的转移 IPC(主分类):H04N7/50 变更前: 变更后: 登记生效日:20120828 申请日:20080215

    专利申请权、专利权的转移

  • 2010-04-28

    实质审查的生效 IPC(主分类):H04N7/50 申请日:20080215

    实质审查的生效

  • 2010-02-10

    公开

    公开

查看全部

说明书

技术领域

本发明涉及一种用于生成通过可变长度编码方案被编码的数据流的方法和装置,包括计算机程序产品,以及一种用于识别码字在可变长度码流内的位置的方法。

背景技术

现在通常在任何具有显示器的电子设备中观看诸如照片、静止图片、图形等等的图像。然而,使图像能够在显示器上观看是不够的;随着所捕获图像的尺寸的增大,能够在合理的时间内显示图像也很关键。在显示器上显示图像的电子设备的用户在大多数情况下对能够改变图像的视野(view)感兴趣。用户所要求的一些常用操作是放大图像以观看该图像的细节、摇动缩放的图像得到全景(pan in)以便跟踪特征或仅仅是得到对细节的纵览、旋转图像以便方便在显示器上观看等等。而且,由这种电子设备的用户处理的图像的分辨率日益增加,即用于限定图像的像素的数目变得越来越大。

所述电子设备可以例如是移动电话、个人数字助理、掌上电脑或就待处理的图像看来具有有限的处理能力的其它设备。例如,许多具有用于观看图像的显示器的所述电子设备并不包括足够的处理能力以施行诸如缩放、摇全景等等的操作,也不会呈现出连续呈现的视图之间的频繁发生且令人烦恼的延迟。这可能导致图像的持续放大或缩小可能被体验为呈现具有长的图像间延迟的多个图像。因此,持续缩放的体验没有被获得,这可能使该用户不愉快。这还可能导致用户的错误处理或输入。

处理该问题的一种常见方式是要么增加该设备的处理能力,要么避免其中用户期望持续流畅的体验的操作。

发明内容

本发明的目的是改进对可变长度编码流和或图像的操作,并改善对这种流和/或图像进行持续操作的用户的体验,以及改善将捕获的图像解码至屏幕的时间。

根据本发明的一个方面,上述目的通过一种用于生成通过可变长度编码方案被编码的数据流的方法来实现。该方法包括根据可变长度编码方案对包含多个码字的数据流的码字进行编码,并且在所述数据流中的编码码字之间插入分隔标志。

通过提出分隔标志,方便了对可变长度码数据流的局部访问。例如,加速对通过可变长度编码被编码的表示任意区域的图像的图像数据的访问变得可能。而且该标志使得无需对设置在待访问的数据之前的每个单一码进行解码就访问形成可变长度码数据流中的数据的一部分的数据成为可能。因此,可以节省时间和处理能力。相同的优点适用于为了指示共享相同传输和存储介质的分离数据流,例如被复用的数据流而对这些标志的使用。

在一个实施例中,分隔标志的所述插入通过在特定码字之后插入至少16个连续的二进制一被施行。在另一个实施例中,分隔标志的所述插入通过插入16个连续的二进制零而非16b个连续的一被施行。通过使用包含16个连续的二进制一或零的标志,可以快速而有效地施行对该标志的搜索。其原因在于在字节级上即8比特上检测该标志变得可能。字节级的检测是可能的,因为在可变长度码数据流中的该标志的一部分,16个连续二进制一或零,将总是由仅包含二进制一或仅包含二进制零的字节表示。

根据另一实施例,特定码字是数据块的末尾码字。通过使该标志识别一的末尾以及另一个数据块的开始,可以方便且明显更快地施行对单独数据块的访问。

根据又一实施例,分隔标志的所述插入通过在两个或者更多特定码字之间插入至少16个连续的二进制一被施行。

在一个实施例中,用于生成通过可变长度编码方案被编码的数据流的方法包括:根据可变长度编码方案对包含多个数据块的数据流的数据块进行编码,并且在该数据流中的编码数据块之间插入分隔标志。

如上关于上述实施例中的一个所提及的,提出分隔标志方便了对可变长度码数据流的局部访问。例如,加速对通过可变长度编码被编码的表示任意区域的图像的图像数据的访问变得可能。而且该标志使得无需对设置在待访问的数据之前的每个单一码进行解码就访问形成可变长度码数据流中的数据的一部分的数据成为可能。因此,可以节省时间和处理能力。相同的优点可以适用于为了指示共享相同传输和存储介质的分离数据流,例如被复用的数据流而对这些标志的使用。而且通过使该标志识别数据块,可以方便且明显更快地施行对单独数据块的访问。

根据一个实施例,插入分隔标志的动作进一步包括在晚于先前的块被编码且早于下一个编码数据块被添加到该先前的数据块的时刻插入该分隔标志。

在另一个实施例中,所述编码和分隔标志的插入由硬件施行,从而加速对该标志的插入。

在一个实施例中,标志在该数据流中的所述插入连同通过所述可变长度编码方案对该数据流的编码一起被施行。通过插入该标志连同将该数据流编码成可变长度码,该编码与如果要通过对整个流进行解码来将这些标志插入该数据流中相比,可以明显更快地被施行。

根据另一实施例,数据块的编码根据JPEG标准被施行,并且其中根据JPEG标准,每个数据块对应于一数据单元。通过在包含JPEG数据块的数据流中插入所述标志,对由编码数据流表示的图像的特定部分的访问变得更快并且需要更小的处理能力。相应地,可以方便对图像的部分的操作。

根据另一实施例,该方法包括:如果该分隔标志包括二进制一,则在该分隔标志之前插入八个二进制零,或者如果该分隔标志包括二进制零,则在该分隔标志之前插入八个二进制一。在分隔标志之前插入这些序列中的任何一个或者任何其它已知序列,方便了识别该分隔标志在该数据流中的精确起始点。可替代地,在该分隔标志之前插入的序列是八比特组,其中所述八比特组包括至少一比特的二进制零值,并且所述至少一比特的二进制零值被设置在所述八比特组中的预定位置。而且,所述至少一比特的二进制零值的预定位置可以是该八比特组中作为最低有效比特的位置。

根据本发明的另一方面,上述目的通过一种用于检索与可变长度码流内的特别感兴趣的码字相关的数据的方法来实现。该方法包括识别预定义的标志在该可变长度码流内的位置,计算该特别感兴趣的码字在该可变长度码流内的起始位置,并且检索与该特别感兴趣的码字相关的数据。

通过在可变长度码流内使用预定义的标志以识别在该数据流中感兴趣的位置,对该位置的访问与如果对整个数据流进行解码来找到该位置相比,可能需要更少的时间和处理能力。例如,加速对通过可变长度编码被编码的表示图像任意区域的图像数据的访问变得可能。

该标志还使得无需对设置在待访问的数据之前的每个单一码进行解码就对置于可变长度码数据流内的数据进行访问成为可能。

相同的优点可以适用于为了指示共享相同传输和存储介质的分离数据流,例如,被复用的数据流而对这些标志的使用。

根据该方法的具体实施例,该方法进一步包括识别至少一个附加预定义的标志在该可变长度码流内的位置,计算特别感兴趣的至少一个附加码字在该可变长度码流内的起始位置,并且检索与该特别感兴趣的至少一个附加码字相关的数据。因为多个标志被识别并且被用于对该数据流解码,所以该过程可能需要更少的时间和处理能力。

在另一实施例中,检索与该特别感兴趣的码字相关的数据包括:检索所计算出的该特别感兴趣的码字在所述码流内的起始位置,并将该起始位置插入该述可变长度码流的特征列表中。通过检索该特别感兴趣的码字的位置并且保存该位置,可以映射该数据流,从而使得对所述数据流的部分进行更快的将来访问成为可能。

根据又一实施例,检索与该特别感兴趣的码字相关的数据包括:检索由该特定码字表示的值。该实施例加速对更少使用的特定值的访问,例如,当对没有假定要保存的图像施行操作时。

在一个实施例中,该可变长度码流是图像的压缩表示,并且该特别感兴趣的码字是可变长度码流中的数据单元的DC系数,因此方便了快速生成所捕获图像的缩小版本。

在某些其它实施例中,当根据本发明的第二方面的方法时,与关于本发明的第一方面所提到的标志相对应的标志和关于本发明的第一方面所提到的标志之前的码的排列呈现大致相同的优点。

在又一实施例中,所述识别该预定义的标志的位置进一步包括:识别设置在该可变长度码流中与该标志相邻的预定符号,并且其中从该预定符号到该预定义的标志或从该预定义的标志到该预定符号之间的转变被识别为该标志的位置。通过实施该实施例,方便了对预定义的标志的位置的确定。

根据另一实施例,该预定符号是块结束符号EOB。

在又一实施例中,对该特定码字在该可变长度码流内的起始位置的计算是基于该预定义的标志的位置和该标志的已知长度。

根据另一方法,该可变长度码流包括包含多个码字的数据块,其中该特别感兴趣的码字是数据块的首个码字,因此计算该特别感兴趣的码字的起始位置对应于计算所述数据块的起始位置。通过使该标志识别一的末尾以及另一数据块的开始,可以方便且明显更快地施行对单独数据块的访问。

具体实施方式

本发明涉及一种方便对已经通过可变长度编码方案(VLC)或熵编码方案被编码的数据块流快速编制索引的方法、装置以及计算机程序产品。根据本发明的一个实施例,快速编制索引是通过在数据流中连续设置的数据块之间插入数据块分隔标志来实现的。在本申请中,数据流应该被理解为由于作为同一数据文件的部分、由于作为经由网络发送的同一数据消息的部分(根据网络可以将这种消息分成不同的包或者在一个持续流中发送)、由于作为同一信息流的部分(例如,流音频或流视频或它们的组合)而彼此相关的数据。

本发明的实施例可应用于任何类型的数据流,在这些数据流中,数据块通过VLC方案或诸如哈夫曼编码、算术编码等等的熵编码方案被编码。这些编码方案被设计为对信息进行压缩,并且使用这些编码方案的一个效果在于并非编码数据流中的所有符号(也称为码字)都具有相同的码长。

然而,这些编码的方案是为了知道一个符号在哪里结束,另一个符号在哪里开始,必须处理流中所有先前的符号。

在本申请的上下文中,符号应该被理解为来自一组单元的一个单元,其中每个单元具有分配给它们的单独比特码。在本申请中,数据块应该被理解为表示较大数据流的一部分的一些数据,例如,图像数据的一部分、音频流的一部分、图像流的矩形图像块等等。

在一个实施例中,可能期望根据更多的特定规则,例如通过交替来自第一信号的n个符号和来自第二信号的m个符号以及来自第三信号的k个符号,来对两个或者更多可变长度编码流进行混合。

这对在接收端分离这些信号造成很大的困难,因为必须对所有符号进行处理以便找到不同信号之间的边界。

在另一实施例中,还可能期望快速找到特定的符号,或者例如在可变长度编码流中每隔n-1个符号得到的符号。这通常也要求所有符号被处理以便找到期望符号的位置。

在又一实施例中,期望能够通过单条通信信道发送两个或更多信号。这通常通过交替这两个或更多信号来实现,使得第一信号的n个比特首先被发送,之后第二信号的m个比特被发送,之后第一信号的b个比特被发送,等等。

本发明通过提出特定标志来处理以上使用可变长度编码流中的问题,这些特定标志能够被插入在可变长度编码过程中生成的流。这些标志可以用于加速寻找数据流中的特定符号的过程。另外,本发明提出一种以有效方式去除所述标志以便创建或再现一个或多个原始流的方法。

所述标志的实例用法:

可变长度编码流由具有不同比特长度的符号构成。例如,下列符号可以由下列码字表示:

A=10

B=110

C=111

D=0000

E=0001

下列符号“CBCDBEDCABCBECB”的比特流将变成:

11111011 10000110 00010000 11110110 11111000 01111110

为了将该比特流解码成原始符号,必须从左边对该比特流进行编码并且读取这些比特直到产生有效符号为止。通过对整个比特流进行解码,可以获知这些符号之间的边界位于哪里:

这种办法的问题在于用软件施行相对来说是耗时的,特别当许多符号必须被处理时。

用十六进制数书写的同一比特流为:

FB 86 10 F6 F8 7E

根据本发明的各种实施例,提出比特标志或符号分隔标志以允许快速寻找特定的标志。

这些比特标志可以由一连串长度为八的倍数并且至少16比特长的二进制一构成。最引入关注的标志由16个二进制一,即11111111 11111111构成。

如果我们想在该流中的符号A之后标记该边界,该标记将通过在该流中的符号A之后插入16个二进制一来完成:

因此,结果得到的比特流变成:

1111101110000110000100001111011111111111111111101111100001111110

用二进制数书写的同一比特流为:

FB 86 10 F7 FF FE F8 7E

现在,因为我们已经将十六个二进制一写入该流中,我们的标志将总是得到至少一个从不被“00”跟随的“FF”字节;意味着自然出现的FF码能够用“FF00”来标记以指示非标志;根据本发明的各个实施例,所有其它FF的出现被保证为标志。

这意味着我们能够容易地在被看作连续字节的比特流中定位字节FF,而后我们能够通过使用简单的算术逻辑去除该标志并恢复原始流。

直到该标志之前的字节的那些字节以及直到该标志之后一个字节的那些字节能够被直接复制。剩下的任务是恢复用括号标记的通过插入二进制一而被分离的字节。

FB 86 10(F7 FF FE)F8 7E

用二进制数书写F7 FF FE看起来如下:

去除所插入的比特的操作变得很简单,因为当将它们连在一起时,可以将所插入的二进制一看作比特掩码:

原始字节=B1&B3=abcde111&11111fgh=abcdefgh

结果得到的流将变成:

FB 86 10(F7&FE)F8 7E=FB 86 10 F6 F8 7E

如果知道了这十六个一之前或之后的符号并且它包含至少一个零,则找出所标记的符号之间的边界的比特位置,即该标志的位置,是不费吹灰之力的。当该标志已经被去除时,该标志的位置是下一个符号的位置。

这可以通过寻找“FF”左边的第一个零并且通过知道包含该零的符号的外观和/或编码,而后计算该符号在哪里结束来实现。

另一种实现方式是通过使用256个条目的查找表来寻找“FF”之前的字节,该查找表输入了具有已知符号的所有可能条目,比特位置(p)是该表中的值。

下面的实例示出查找表技术:

假定十六个一之前的已知符号是10,则字节1仅有的可能性如下,其中x是二进制一和二进制零的所有排列,并且p指示16个一中的首个比特。

字节1    字节2

xxxxxx10 p1111111,64排列,pos=8

xxxxx10p 11111111,32排列,pos=7

xxxx10p1 11111111,16排列,pos=6

xxx10p11 11111111,8排列,pos=5

xx10p111 11111111,4排列,pos=4

x10p1111 11111111,2排列,pos=3

10p11111 11111111,1排列,pos=2

0p111111 11111111,1排列,pos=1

在上述实例中,查找F7(11110111)会得到pos=6,(111101p11==111101111)。

如果不知道该符号,则可能例如总是插入优选具有8比特长度的总长度的已知码(K),这允许我们容易地将它去除,同时知道定位所标记的符号之间的边界所需的符号。

用于该目的的很好的码是“00000000”,因为当去除该标志时,它能够被用作比特掩码,即:

K=0000 0000

这样修改后的流将具有如下外观:

如果设置成字节,修改后的流将具有如下外观:

1111101 110000110 00010000 11110000 00000111 11111111 11111110

11111000 01111110

并且如果用十六进数书写,就变成:

FB 86 10(F0 07 FF FE)F8 7E

根据以上所述,可以找到FF,并且通过查看FF之前的表示已知符号K的字节,可以获知符号K在哪里结束,从而反向计算以找到K之前的符号在哪里结束,该结束位置表示所标记的符号之间的边界。

符号K在从右边数第一个位置处具有其首个二进制零,因此符号K之前的符号在所找到的二进制零的左边七个位置处结束。

F0 07 FF FE=11110000 00000111 11111111 11111110

然后,能够通过寻找以下用x标记的FF左边的二进制零的第一次出现来施行去除:

11110000 0000x111 11111111 11111110

并且在找到该出现之后,去除从所找到的二进制零的左边7比特开始的接下来的24比特,用r标记:

11110rrr rrrrrrrr rrrrrrrr rrrrr110

现在可以将四个字节连成一个,结果得到:

1111110=F6

结果得到的总字节数组因此变成原始流:

FB 86 10 F6 F8 7E。

由于为零的K能够充当掩码,因此通过一些简单的算术逻辑很容易完成上述对该标志的去除:

B=(B1|B2)&B4=(F0|07)&FE=F7&FE=F6

下面给出当通过同一信道发送两个或更多信号时使用所述标记方法的实例。

下面考虑将要通过仅一个信道发送的两个比特流。

如果用十六进制数书写,则变成:

如果用十六进制数书写,则变成:

B0 87 1D 6B 85 82

在这个实例中,交替这两个流,以便发送流A的五个码字,之后发送流B的八个码字,之后发送流A的五个码字,等等:

得到二进制流:

101101110000110101100001000011100011101000010000

101111101101011100001011000001000001100001111110

用十六进制书写:

B7 0D 61 0E 3A 10 BE D7 0B 04 18 7E

现在接收机必须处理所有VLC符号以便再现这两个原始流。

本发明的实施例引入特殊标志以便能够以更有效的方式分隔这两个流,注意与下列实例相比,通常插入标志的方案更加难得发生,因此不需要很多的开销:

B7 0C 01 FF FE 21 7C 01 FF FE 18 7E

B0 87 1D 00 7F FF EB 85 82 00 FF FF

现在通过输出第一流直到FF为止,然后继续输出第二流直到FF为止,而后继续输出第一流直到下一个FF等等,能够在这些FF标志处交替这两个流,从而得到下列传输流:

B7 0C 01 FF B0 87 1D 00 7F FF FE 21 7C 01 FF EB 85 82 00 FF FFFE 18 7E

现在轮到接收机分隔这两个流,它根据FF分隔这两个流,颠倒上述过程:

流A:B7 0C 01 FF       FE 21 7C 01 FF              FE 18 7E

流B:      B0 87 1D 00 7F FF        EB 85 82 00 FF FF

现在能够通过简单的算术逻辑处理每个流以去除这些标志:

B=(b1|b2)&b4,

流A:B7 0C 01 FF FE 21 7C 01 FF FE 18 7E

流B:B0 87 1D 00 7F FF EB 85 82 00 FF FF

变成

流A:B7(0C|01)&FE 21(7C|01)&FE 18 7E=B7 0C 21 7C 18 7E

流B:B0 87 1D(00|7F)&EB 85(82|00)&FF=B0 87 1D 6B 85 82

这是原始流。在接收侧上的分离操作在完全没有任何比特操作或者可变长度编码的情况下完成。

根据另外的实施例,符号K可以是任何在预定义比特位置具有预定义的零的7比特数。可以将上述描述推广到通过知道预定义的零的位置来寻找该标志的起点。根据这些实施例中的一个,该零为最低有效比特,而最高有效7比特能够用于其它数据,例如从0增加到127的数。那样,仅通过查看字节流来跳过多达128个标记的码字将是容易的。

根据本发明的一个方面,上述的通用方法可以被实现以用于处理JPEG流。以下描述对现有JPEG编码器进行微小变化的修改,以便创建不兼容的JPEG数据的包括指示DU的结束的特定标志的可替换流的方式。然后,该不兼容的JPEG数据能够被分析以映射每个DU的开始,并且当将该不兼容的JPEG数据存储到非易失性存储器中时,能够去除这些不兼容标志。

此外,应该注意的是,码字意在被理解为能够被解码以产生先前被编码的单元的一连串比特。并非所有码字都具有相同的长度。尽管存在这个事实,但是并不严格地意味着它们被当作单一符号的可变长度表示。这种更为复杂的码字的实例是在jpeg流中使用的码字。这里定义的JPEG码字将被一非零数跟随的一连串零基于该非零数的量级编码成被该数的最低有效比特跟随的零行程的符号连同该非零数的量级的组合。

因此根据我们的定义,针对被非零数或它们的任意子集跟随的一连串零产生的整串零能够被当作码字。

其它被当作码字的子集将是该零行程的符号连同该非零数的长度的组合,或者表示最低有效比特的比特。

JPEG流由多个64个系数的数据单元(DU)组成。这些系数由可变长度的哈夫曼编码符号表示,通常最末尾的系数为零,并且块结束(EOB)符号用于终止在末端具有零的数据单元(DU)。

对于一些应用,知道DU的比特位置是很有用的:

1)大的JPEG图像在小屏幕上的即时显示。如果已知DU位置,那么仅仅对块的第一系数解码从而创建原始图像的按比例缩小的版本是很快的。

2)如果已知DU位置,则可以随机访问任何DU。如果也知道绝对DC系数,那么可以对某区域的JPEG进行解码而无需对先前的块进行解码。

该方法允许修改可以存在于硬件中的编码器部件,以便创建指示块结束的标志,接收SW部件可以用该标志来寻找DU位置,而后容易地去除这些标志,从而允许快速创建DU位置数据库,和/或编码图像的按比例缩小的版本。由于速度问题,可以在HW中进行编码。这是一种简单的办法,其允许标准JPEG HW被修改而无需用于存储JPEG数据流的数据单元的起始位置的额外存储器。额外的存储器将需要2*数据单元数(16比特)=>2mpix=60000个DU=>120kb的存储器,该存储器非常昂贵,因为它优选地是占用大片硅区域的零等待状态存储器。

下列描述覆盖了对这种JPEG数据的编码和解码。

编码器:

1)修改HW以便EOB总是被创建。可替代地,使用灵巧的Q表来保证HW总是将EOB放在末尾。如果零总是插在量化系数nr 64中,则该硬件将需要插入EOB。

2)确保针对在原始哈夫曼编码流中出现的每个FF,后缀“00”都被插入。这在有效JPEG流中已经完成。

3)在每个DU(或EOB)之后添加多个八的倍数个但是至少是16个二进制一。

这还能够通过下列操作来完成:修改哈夫曼表,使得EOB符号被修改成包含具有12个后缀二进制一的通常的2-4字节的符号,并且DC表被修改成在真正的DC符号之前包含四个一。然后,编码器被强制总是对比特流中的EOB进行编码。这意味着在EOB和DC之间将总存在16个二进制一的标志。

作为本实施例的实例,就以上讨论的对给定的正常EOB进行的调整看来,正常EOB和新EOB可以如下:

正常EOB:1010

新EOB:1010111111111111

而且,正常DC和新DC可以如下表所述地那样彼此相关:

  正常DC:  新DC:  000  1111000  001  1111001  010  1111010  011  1111011  100  1111100  110  1111110  1110  11111110  11110  111111110  111110  1111111110  1111110  11111111110  11111110  111111111110  111111110  1111111111110

这个方案导致,利用上面的EOB的实例和在以上表中作为第三DC的新DC的实例,与第三DC相结合的EOB对应于“1010 1111111111111111010”。因此,该结果与在EOB之后添加16个二进制一时一样。

以下给出通过该方法的一个实施例添加16个二进制一的实例,以下实例被概括为通用哈夫曼编码流。

该实例使用下列哈夫曼表:

A=10(EOB)

B=110

C=111

D=0000

E=0001

在硬件中编码的符号“CBCDBEDCABCBECB”的哈夫曼编码串得到以下比特流:

11111011 1000011000010000 11110110 11111000 01111110...

FB 86 10 F6 F8 7E

下划线部分指示EOB。

然后,16个二进制一被插在EOB之后:

11111011 10000110 00010000 11110111 11111111 1111111011111000 01111110...

FB 86 10 F7 FF FE F8 7E

现在给出解码的实例,可以用软件进行解码。

步骤1。寻找没有后缀“00”的FF。在JPEG流中,仅“FF00”被允许,但是在这些规则下这不可能出现。意味着100%地确定找到的FF是我们的标志。(假设重新开始的标志不用于JPEG流)

现在,朝着EOB符号(这个实例中为10)向下查找,并且正好在EOB之后找到下一个DU的起点。

去除十六个一,并且记住下一个DU的比特地址。

11111011 10000110 00010000 11110110 11111000 01111110...

FB 86 10 F7 FF FE F8 7E

FB 86 10 F6       F8 7E

正如所看到的,仅一个字节必须被修改,两个字节必须被去除,并且其余字节已经被正确地字对齐:

FB 86 10 F7 FF FE F8 7E

FB 86 10 F6       F8 7E

更好地,如果插入的一的数目是32,那么其余的将被长字对齐,允许32比特的内存拷贝(memcpy)。这可能并不总是期望的,因为增加再多两个字节就增加了文件的大小,从而增加了当数据通过网络中的总线进行转移时的带宽需求。

FB 86 10 F7 FF FF FF FE F8 7E

FB 86 10 F6             F8 7E

将这两个字节连成一个的过程也是不费吹灰之力的:

FB 86 10 F7 FF FE F8 7E

FB 86 10 F6       F8 7E

连接F7和FE的操作很简单,仅仅是对它们进行逻辑“与”操作,因为所插入的16个一充当比特掩码。

字节1=F7

字节2=FE

连接的字节=字节1&字节2

当考虑以下实例时,就更容易明白上述内容:

abcde111 11111111 11111fgh

字节1=abcde111

字节2=11111fgh

连接的字节=abcde111&11111fgh=abcdefgh

上述实例描述了快速寻找流中所有DU的比特地址的过程,以及快速去除标志以便再现原始流的过程。

该算法可以被修改以用于寻找每个DU的DC系数。然后,通过对DC系数进行解码,每个DC的数据可以用于再现大小是该图像的八分之一的版本。如果需要大小是原来的四分之一的表示,也能够完成,其中DC系数和若干个随后的AC系数被解码以便能够对这些系数施行2×2的IDCT。通过使这些标志指示DC系数的位置,跳过对其它系数的哈夫曼解码变得可能,从而允许在捕获的瞬间快得多地将图像缩放到小屏幕。该实施方式可以在任何应用中使用以便加速显示尺寸缩小的图像的过程。

这种应用的一个实例是使用显示器作为取景器的图像采集应用。这些应用中的一个普遍问题是表示图像视野的图像呈现的延迟。换句话说,当用户在显示器上看到期望的视野时,时间已经过去很久。在与此相似的应用中,通过提供包含指示DC系数的位置的标志的数据流,并实施查找这些标志、在这些标志处检索与DC系数相关的信息并且根据这种信息生成即将在显示器上呈现的尺寸缩小的图像的显示过程,可以显著减小这种延迟。

此外,根据本发明的一个方面,提出一种对JPEG编码器进行微小变化的修改以便创建不兼容的JPEG数据的包括用于指示DU的结束的特殊标志的可替代流的方式。然后,能够对不兼容的JPEG数据进行分析以映射每个DU的开始,并且在将该不兼容的JPEG数据存储到非易失性存储器时能够去除这些不兼容标志。

在上述实例中,该标志被设置成在至少16个二进制一处。该标志还可以被设置成16个二进制零,即0000000000000000。如果该标志被设置成16个二进制零,则在该标志之前插入的已知码可以是“11111111”。因此,码“000000001111111111111111”被反转为“111111110000000000000000”。

本发明能够在数字电子电路中或者在计算机硬件、固件、软件中或者在它们的组合中被实施。本发明的装置能够以有形地包含在机器可读存储设备中供可编程处理器执行的计算机程序产品的方式实现;本发明的方法步骤可以由执行指令程序的可编程处理器通过对输入数据进行操作并生成输出施行本发明的功能来施行。本发明可以有利地以一个或者更多计算机程序的方式实现,这些计算机程序可在包括被连接为从数据存储系统、至少一个输入设备以及至少一个输出设备接收数据和指令并且将数据和指令发送至数据存储系统、至少一个输入设备以及至少一个输出设备的至少一个可编程处理器的可编程系统上执行。每个计算机程序可以用高级程序化编程语言或面向对象的编程语言实现,或者如需要,用汇编语言或机器语言实现;并且在任何情况下,该语言可以是编译语言或解释语言。合适的处理器包括,举例来说,通用和专用微处理器。一般而言,处理器将从只读存储器和/或随机存取存储器接收指令和数据。一般而言,计算机将包括一个或更多用于存储数据文件的大容量存储器;这种设备包括诸如内部硬盘和可移动盘之类的磁盘;磁光盘;以及光盘。适合有形地包含计算机程序指令和数据的存储设备包括所有形式的非易失性存储器,举例来说,包括诸如EPROM、EEPROM和闪存设备之类的半导体存储器设备;诸如内部硬盘和可移动盘之类的磁盘;磁光盘;CD-ROM盘。以上任意一个能够被ASIC(特定用途集成电路)增补或被并入ASIC中。

为了提供与用户的交互,本发明可以在具有诸如用于向用户显示信息的显示器或LCD屏幕之类的显示设备的计算机系统上实施。用户能够通过各种输入设备向计算机系统提供输入,所述输入设备例如键盘和诸如鼠标之类的定点设备、轨迹球、麦克风、触控式显示器、换能器读卡器、磁带或纸带读出器、书写板、指示笔、语音或手写识别器之类的输入设备,或者任何其它已知输入设备,当然,还例如其它计算机。计算机系统能够被编程为提供图形用户界面,计算机程序通过该图形用户界面与用户交互。

最后,可选地,处理器能够利用网络连接连接至计算机或电信网络,例如,因特网或企业内部互联网,在施行上述方法步骤过程中,处理器能够通过该网络连接从该网络接收信息,或者可以将信息输出到网络。这种信息经常用待利用处理器执行的指令序列表示,可以例如以包含在载波中的计算机数据信号的形式从该网络接收并输出到该网络。上述设备和材料对计算机硬件和软件领域的技术人员来说将是熟悉的。

应该注意的是,本发明使用各种计算机实现的操作,这些计算机实现的操作涉及存储在计算机系统中的数据。这些操作包括但不限于要求对物理量进行物理操纵的操作。通常,虽然不是必要地,这些量采用能够被存储、被传递、组合、比较、以及以其它方式操纵的电信号或磁信号的形式。这里描述的形成本发明的部分的操作是有用的机器操作。所施行的操纵用术语来表示经常是指,例如,产生、识别、运行、确定、比较、执行、下载或检测。有时候,主要是为了通用的原因,把这些电信号或磁信号称为比特、值、元素、变量、字符、数据等是方便的。然而,应该记住的是,所有这些术语或类似的术语都与合适的物理量相关联,并且仅仅是应用于这些量的方便标签。

本发明还涉及用于施行以上提及的操作的设备、系统或装置。该系统可以为了所需目的而专门构造,它也可以是由存储在计算机中的计算机程序选择性激活或配置的通用计算机。上面所展现的过程并不固有地与任何特定计算机或其它计算装置相关。特别地,各种通用计算机可以与根据这里的教导所写的程序一起使用,或者可替代地,可以更方便地构造更专用的计算机系统以施行所需操作。

已经描述了本发明的若干种实施方式。然而,将理解的是,可以进行不偏离本发明的精神和范围的各种修改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号