CN101198060A - Jpeg头码流分析的硬件实现方法 - Google Patents
Jpeg头码流分析的硬件实现方法 Download PDFInfo
- Publication number
- CN101198060A CN101198060A CN 200710172932 CN200710172932A CN101198060A CN 101198060 A CN101198060 A CN 101198060A CN 200710172932 CN200710172932 CN 200710172932 CN 200710172932 A CN200710172932 A CN 200710172932A CN 101198060 A CN101198060 A CN 101198060A
- Authority
- CN
- China
- Prior art keywords
- bit
- current
- byte
- code stream
- mark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
一种JPEG头码流分析的硬件实现方法,包含以下步骤:JPEG头码流以每节拍32比特位宽的频率向头码流分析模块输入数据;构建MARK标记位的基于4种状态相互转换的状态机;对于不同状态下出现的各种不同码流成分标记进行预处理;对于不同成分码流标记进行各自的处理进程。本发明提供的JPEG头码流分析的硬件实现方法,通过对每次输入的32比特数据的分析,构建四种状态转换的状态机,得到码流中各个MARK标记位的所在位置,随后由对各个标记位的预处理过渡到对各码流成分的详细处理,准确地对头码流各成分数据进行分析;本方法实现思路清晰,实现过程简单,适合于硬件电路实现。
Description
技术领域
本发明属于数字图像处理领域,涉及一种能用硬件来实现JPEG头码流分析的方法。
背景技术
JPEG图像格式是当今Internet以及数码相机所采用的最为流行的图像格式,其优点是压缩比大,图像质量损失小。JPEG码流包括两部分内容:头码流部分和负载数据部分。头码流包含解码所必需的反量化表,哈夫曼码表,帧头,条带头,重启间隔等内容;负载数据是经过DCT变换、量化、哈夫曼编码后的图像数据。
JPEG头码流的结构特点是:其包含多个MARK标记位,由该些所述的MARK标记位来区分其后跟随的不同成分码表和相关参数信息;所述的MARK标记位由两个字节组成,结构为FF**,其中FF是统一的标记,**则由具体的码流来区分之后跟随的码表的不同内容。在FF**之后跟随的两个字节表示本成分码表内容的字节总数(包括所述的用来记载字节总数的这2个字节)。
其中,JPEG头码流的开始MARK标记位“FFD8”例外,该标记位后没有表示字节总数的码符,更没有相关的码表内容,该MARK标记位“FFD8”后直接跟随下一个成分码流的MARK标记。MARK标记位“FFDB”是反量化表的开始标记位,即该MARK标记位“FFDB”之后的2个字节表示整个反量化表字节总数,再之后的码流即为反量化表的码流信息。哈夫曼码表的开始MARK标记位是“FFC4”,即其之后的2个字节表示整个哈夫曼码表的字节总数,再之后的码流即为哈夫曼码表的码流信息。帧头的开始MARK标记位是“FFC0”,即其之后的2个字节表示整个帧头的字节总数,再之后的码流即为帧头的码流信息。条带头的开始MARK标记位是“FFDA”,即其之后的2个字节表示整个条带头的字节总数,再之后的码流即为条带头的码流信息。
JPEG头码流分析结果的正确与否直接影响最终的解码结果,所以对码流的分析要绝对准确,由于头码流字节相对较少,所以在分析时间上要求不高。在片上系统(SOC)设计中,JPEG头码流一般采用软件解码,其特点是实现灵活,缺点是对系统配置要求较高,实现成本较高。而在专用集成电路设计中,JPEG头码流部分则必须由硬件实现。由于头码流的内容变化多样,因而在用硬件分析实现时,具有一定的复杂度,综上原因,本发明提出一种JPEG头码流分析的硬件实现方法。
发明内容
本发明的主要目的在于提供一种JPEG头码流分析的硬件实现方法,其通过对每次输入的32比特数据的分析,构建四种状态转换的状态机,得到码流中各个MARK标记位的所在位置,随后由对各个标记位的预处理过渡到对各码流成分的详细处理,准确地对头码流各成分数据进行分析;本方法实现思路清晰,实现过程简单,适合于硬件电路实现。
为达上述目的,本发明提供一种JPEG头码流分析的硬件实现方法,其包含以下步骤:
步骤1、JPEG头码流以每节拍32比特位宽,即4个字节的频率向头码流分析模块输入数据;
步骤2、基于各个MARK标记位中统一的“FF”标记会以相同的概率出现在32比特位宽的码流中的第1,2,3或4字节位置上,构建MARK标记位的基于4种状态相互转换的状态机,以将当前MARK标记位中FF在32比特位宽中所处的字节位置作为当前状态,将当前码流成分的字节总数作为转换条件,确定转换后的下一状态,即下一个码流成分的MARK标记位中FF在32比特位宽中所处的字节位置;
步骤3、对于不同状态下出现的各种不同码流成分标记进行预处理,具体包括:
步骤3.1、置位输入计数器:根据当前成分码流所处的状态以及字节总数,置位输入计数器将要处理的本成分码流的32位比特数据的次数,随后每处理完32比特位数据,计数器减1,直到计数器为0;
步骤3.2、MARK标记位处理进程入口预处理:根据当前MARK标记位所在的位置和状态,判断当前的码流成分类型,并置位相应成分处理标志位和数据请求标记;
步骤4、对于不同成分码流标记进行各自的处理进程,分别包括:
步骤4.1、对码流进行丢弃处理进程;
步骤4.2、对反量化码表进行处理进程;
步骤4.3、对哈夫曼码表进行处理进程;
步骤4.4、对帧头进行处理进程;
步骤4.5、对条带流进行处理进程。
步骤2中,所述的MARK标记位的4种转换状态具体为:
0状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第1字节位置,即当前32位比特输入数据的前8位数据为FF;此时32位比特输入数据的后16位数据为本码流成分的字节总数;
1状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第2字节位置,即当前32位比特输入数据的第9-16位数据为FF;此时32位比特输入数据的最后8位数据为本码流成分的字节总数的高位,而下一个输入的32位比特数据的前8位数据为本码流成分的字节总数的低位,由此得到本码流成分的字节总数值;
2状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第3字节位置,即当前32位比特输入数据的第17-24位数据为FF;此时下一个输入的32位比特数据的前16位数据为本码流成分的字节总数;
3状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第4字节位置,即当前32位比特输入数据的最后8位数据为FF;此时下一个输入的32位比特数据的中间第9-24位数据为本码流成分的字节总数。
步骤2中,所述的MARK标记位的4种状态的转换条件和过程具体为:
将当前成分码流的字节总数对4进行取模操作,若得到结果为1时,下个MARK标记位的状态值为当前MARK标记位的状态值减1;其中,若当前MARK标记位的状态值为0,则下个MARK标记位的状态值为3;
将当前成分码流的字节总数对4进行取模操作,若得到结果为2时,下个MARK标记位的状态值不变,即为当前MARK标记位的状态值;
将当前成分码流的字节总数对4进行取模操作,若得到结果为3时,下个MARK标记位的状态值为当前MARK标记位的状态值加1;其中,若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为0;
将当前成分码流的字节总数对4进行取模操作,若得到结果为0时,下个MARK标记位的状态值为当前MARK标记位的状态值加2;其中,若当前MARK标记位的状态值为2,则下个MARK标记位的状态值为0;若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为1。
所述的状态机的初始状态是0,由于JPEG输入头码流的最前两个字节必须是JPEG头码流的开始MARK标记位“FFD8”,且其随后直接紧跟下一个成分码流的MARK标记,故其下一个状态强制为2。
步骤3.2中,判断当前的码流成分类型的具体步骤为:
当前码流成分的MARK标记位为0状态,则判断当前MARK标记位中的后一字节数据,即当前32位比特输入数据的第9-16位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为1状态,则判断当前32位比特输入数据的第17-24位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为2状态,则判断当前32位比特输入数据的最后8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为3状态,则判断下一个输入的32位比特数据的前8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程。
步骤3.2中,对步骤4中进行的不同进程的标记,具体为:
依据上述判断成分码流类型的数据,即MARK标记位中的FF之后的字节数据,若该数据为E0-EF,或者F0-FE,则标记步骤4中进行步骤4.1所述的码流丢弃处理进程;
若MARK标记位中FF之后字节的数据为DB,则标记步骤4中进行步骤4.2所述的反量化码表处理进程;
若MARK标记位中FF之后字节的数据为C4,则标记步骤4中进行步骤4.3所述的哈夫曼码表处理进程;
若MARK标记位中FF之后字节的数据为C0,则标记步骤4中进行步骤4.4所述的帧头处理进程;
若MARK标记位中FF之后字节的数据为DA,则标记步骤4中进行步骤4.5所述的条带头处理进程。
步骤4.1中,对当前MARK标记位后的内容作丢弃处理,即对输入的32比特位数据不做任何处理,丢弃的字节数根据当前MARK标记后的字节总数决定;在丢弃进程处理中,置位丢弃字节计数器,对输入数据作递减操作,直到丢弃字节计数器为1。
步骤4.2中,对不同的JPEG图像分量会使用不同的量化表,对反量化码表的处理包含两种情况,一种是MARK标记位FFDB后只跟随一个图像分量的量化表,即分离码表;一种是MARK标记位FFDB后跟随图像的所有量化表的集合,即组合码表,中间有标志位区分。
步骤4.2中,对反量化表的分离码表和组合码表采用统一的方法处理进程,由于每一张图像分量的量化表共有64个数值,故当量化表码表字节计数器在计数到64时,对码表作长度判断,并变换码表类型;然后通过判断已处理的字节数是否与该量化表总共包含的数据字节数相同,来判断当前量化表是分离式量化表或组合式量化表,对于分离式量化表,变化码表类型后结束该步骤;对于组合式量化表,则继续同样处理下一个图像分量的量化表,直至整个量化表处理完成。
步骤4.3、对哈夫曼码表进行处理进程(如图5所示):由于哈夫曼码表根据图像分量区分,同一图像分量又分为DC和AC分量,故对哈夫曼码表的处理包含两种情况,一种是MARK标记位FFC4后只跟一个图像分量的DC或AC表,即分离式码表;一种是MARK标记位FFC4后是所有哈夫曼码表的集合,即组合式码表,中间有标志位区分。
步骤4.3中,对哈夫曼码表处理进程将采用统一的方法处理这两种情况,其处理过程与量化表的处理过程类似,但由于哈夫曼码表的长度是由码表内容决定的,不是固定值,故需要通过设定多个计数参数并进行比较判断,以确保对分离式码表和组合式码表进行正确的处理;其设定有计算处理的字节数的计数器,计算当前已处理码表字节数的计数器,计算当前已处理码表个数的计数器,和计算当前码表前16字节所表示的数值累加值的计数器;通过判断该些计数器的计数值,得到当前哈夫曼码表为分离式码表还是组合式码表,如果为分离式码表,将相关码表信息存入指定存储单元,结束该步骤;如果为组合式码表,则继续处理该哈夫曼码表中的第一个码表,直至全部处理完毕。
步骤4.4中,对帧头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收帧头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
步骤4.5中,对条带头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收条带头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
本发明提供的JPEG头码流分析的硬件实现方法,是一种基于32比特位宽的码流分析方法,即JPEG码流以每节拍32比特位宽向头码流分析模块输入数据,头码流分析后的结果存入到相应的存储单元中。当前32比特位宽的数据处理完成后,头码流分析模块向前端模块请求发送新的32比特位宽数据。
本发明提供的JPEG头码流分析的硬件实现方法,通过对输入32比特位宽的数据进行分析,构建了四种状态转换的状态机,得到码流中各个MARK标记位的所在位置,随后由对各个标记位的预处理过渡到对各码流成分的详细处理,准确地对头码流各成分数据进行分析;本方法实现思路清晰,实现过程简单,适合于硬件电路实现。
附图说明
图1是本发明中的JPEG头码流分析方法的流程图;
图2是本发明中的4种状态的状态转换示意图;
图3是本发明中的丢弃进程的流程图;
图4是本发明中的反量化码表处理进程的流程图;
图5是本发明中的哈夫曼码表处理进程的流程图;
图6是本发明中的帧头处理进程流程图;
图7是本发明中的条带头处理进程流程图;
图8是本发明实施例中提供的JPEG头码流的实例图。
具体实施方式
以下结合图1~图8,详细说明本发明的较佳实施方式:
如图1所示,是本发明提供的JPEG头码流分析的硬件实现方法,其包含以下步骤:
步骤1、JPEG头码流以每节拍32比特位宽,即4个字节的频率向头码流分析模块输入数据;
步骤2、基于各个MARK标记位中统一的“FF”标记会以相同的概率出现在32比特位宽的码流中的第1,2,3或4字节位置上,构建MARK标记位的基于4种状态相互转换的状态机byte_left,以当前MARK标记位中FF在32比特位宽中所处的字节位置作为当前状态,将当前码流成分的字节总数作为转换条件,确定转换后的下一状态,即下一个码流成分的MARK标记位中FF在32比特位宽中所处的字节位置;
步骤2中,所述的MARK标记位的4种转换状态byte_left具体为:
0状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第1字节位置,即当前32位比特输入数据的前8位数据为FF;此时32位比特输入数据的后16位数据为本码流成分的字节总数;
1状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第2字节位置,即当前32位比特输入数据的第9-16位数据为FF;此时32位比特输入数据的最后8位数据为本码流成分的字节总数的高位,而下一个输入的32位比特数据的前8位数据为本码流成分的字节总数的低位,由此得到本码流成分的字节总数值;
2状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第3字节位置,即当前32位比特输入数据的第17-24位数据为FF;此时下一个输入的32位比特数据的前16位数据为本码流成分的字节总数;
3状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第4字节位置,即当前32位比特输入数据的最后8位数据为FF;此时下一个输入的32位比特数据的中间第9-24位数据为本码流成分的字节总数。
如图2和表1所示,步骤2中,所述的MARK标记位的4种状态的转换条件和过程具体为:
将当前成分码流的字节总数对4进行取模操作,若得到结果为1时,下个MARK标记位的状态值为当前MARK标记位的状态值减1;其中,若当前MARK标记位的状态值为0,则下个MARK标记位的状态值为3;
将当前成分码流的字节总数对4进行取模操作,若得到结果为2时,下个MARK标记位的状态值不变,即为当前MARK标记位的状态值;
将当前成分码流的字节总数对4进行取模操作,若得到结果为3时,下个MARK标记位的状态值为当前MARK标记位的状态值加1;其中,若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为0;
将当前成分码流的字节总数对4进行取模操作,若得到结果为0时,下个MARK标记位的状态值为当前MARK标记位的状态值加2;其中,若当前MARK标记位的状态值为2,则下个MARK标记位的状态值为0;若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为1。
转换方向 | 转换条件 |
1 | Mark后的字节长度为n*4+1 n=0,1,2,3,...... |
2 | Mark后的字节长度为n*4+3 n=0,1,2,3,...... |
3 | Mark后的字节长度为n*4+3 n=0,1,2,3,...... |
4 | Mark后的字节长度为n*4+1 n=0,1,2,3,...... |
5 | Mark后的字节长度为n*4+1 n=0,1,2,3,...... |
6 | Mark后的字节长度为n*4+3 n=0,1,2,3,...... |
7 | Mark后的字节长度为n*4+1 n=0,1,2,3,...... |
8 | Mark后的字节长度为n*4+3 n=0,1,2,3,...... |
9 | Mark后的字节长度为n*4+2 n=0,1,2,3,...... |
10 | Mark后的字节长度为n*4+2 n=0,1,2,3,...... |
11 | Mark后的字节长度为n*4+2 n=0,1,2,3,...... |
12 | Mark后的字节长度为n*4+2 n=0,1,2,3,...... |
13 | Mark后的字节长度为n*4 n=0,1,2,3,...... |
14 | Mark后的字节长度为n*4 n=0,1,2,3,...... |
15 | Mark后的字节长度为n*4 n=0,1,2,3,...... |
16 | Mark后的字节长度为n*4 n=0,1,2,3,...... |
表1、MARK标记位的4种状态的转换条件
所述的状态机的初始状态是0,由于JPEG输入头码流的最前两个字节必须是JPEG头码流的开始MARK标记位“FFD8”,且其随后直接紧跟下一个成分码流的MARK标记,故其下一个状态强制为2。
步骤3、对于不同状态下出现的各种不同码流成分标记进行预处理,具体包括:
步骤3.1、置位输入计数器:根据当前成分码流所处的状态以及字节总数,置位输入计数器将要处理的本成分码流的32位比特数据的次数,随后每处理完32比特位数据,计数器减1,直到计数器为0;
步骤3.2、MARK标记位处理进程入口预处理:根据当前MARK标记位所在的位置和状态,判断当前的码流成分类型,并置位相应成分处理标志位和数据请求标记;
步骤3.2中,判断当前的码流成分类型的具体步骤为:
当前码流成分的MARK标记位的状态byte_left为0,则判断当前MARK标记位中的后一字节数据,即当前32位比特输入数据的第9-16位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位的状态byte_left为1,则判断当前32位比特输入数据的第17-24位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位的状态byte_left为2,则判断当前32位比特输入数据的最后8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位的状态byte_left为3,则判断下一个输入的32位比特数据的前8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程。
步骤3.2中,对步骤4中进行的不同进程的标记,具体为:
依据上述判断成分码流类型的数据,即MARK标记位中的FF之后的字节数据,若该数据为E0-EF,或者F0-FE,则标记步骤4中进行步骤4.1所述的码流丢弃处理进程;
若MARK标记位中FF之后字节的数据为DB,则标记步骤4中进行步骤4.2所述的反量化码表处理进程;
若MARK标记位中FF之后字节的数据为C4,则标记步骤4中进行步骤4.3所述的哈夫曼码表处理进程;
若MARK标记位中FF之后字节的数据为C0,则标记步骤4中进行步骤4.4所述的帧头处理进程;
若MARK标记位中FF之后字节的数据为DA,则标记步骤4中进行步骤4.5所述的条带头处理进程。
步骤4、对于不同成分码流标记进行各自的处理进程,分别包括:
步骤4.1、对码流进行丢弃处理进程(如图3所示):对当前MARK标记位后的内容作丢弃处理,即对输入的32比特位数据不做任何处理,丢弃的字节数根据当前MARK标记后的字节总数决定;在丢弃进程处理中,置位丢弃字节计数器,对输入数据作递减操作,直到丢弃字节计数器为1。
步骤4.2、对反量化码表进行处理进程(如图4所示):对不同的JPEG图像分量会使用不同的量化表,对反量化码表的处理包含两种情况,一种是MARK标记位FFDB后只跟随一个图像分量的量化表,即分离码表;一种是MARK标记位FFDB后跟随图像的所有量化表的集合,即组合码表,中间有标志位区分。
步骤4.2中,对反量化表的分离码表和组合码表采用统一的方法处理进程,由于每一张图像分量的量化表共有64个数值,故当量化表码表字节计数器在计数到64时,对码表作长度判断,并变换码表类型;然后通过判断已处理的字节数是否与该量化表总共包含的数据字节数相同,来判断当前量化表是分离式量化表或组合式量化表,对于分离式量化表,变化码表类型后结束该步骤;对于组合式量化表,则继续同样处理下一个图像分量的量化表,直至整个量化表处理完成。
步骤4.3、对哈夫曼码表进行处理进程(如图5所示):由于哈夫曼码表根据图像分量区分,同一图像分量又分为DC和AC分量,故对哈夫曼码表的处理包含两种情况,一种是MARK标记位FFC4后只跟一个图像分量的DC或AC表,即分离式码表;一种是MARK标记位FFC4后是所有哈夫曼码表的集合,即组合式码表,中间有标志位区分。
步骤4.3中,对哈夫曼码表处理进程将采用统一的方法处理这两种情况,其处理过程与量化表的处理过程类似,但由于哈夫曼码表的长度是由码表内容决定的,不是固定值,故需要通过设定多个计数参数并进行比较判断,以确保对分离式码表和组合式码表进行正确的处理;其设定有计算处理的字节数的计数器,计算当前已处理码表字节数的计数器,计算当前已处理码表个数的计数器,和计算当前码表前16字节所表示的数值累加值的计数器;通过判断该些计数器的计数值,得到当前哈夫曼码表为分离式码表还是组合式码表,如果为分离式码表,将相关码表信息存入指定存储单元,结束该步骤;如果为组合式码表,则继续处理该哈夫曼码表中的第一个码表,直至全部处理完毕。
步骤4.4中,对帧头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收帧头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
步骤4.5中,对条带头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收条带头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
以下通过一优选实施例,即给出一JPEG头码流数据(如图8所示)的实例,来具体介绍本发明方法的分析步骤。
第一个MARK标记位FFD8的标记处理
如图1所示,reset之后,MARK标记位是否出现的判断标志MARK置为0,初始状态值byte_left为0,判断输入32位数据的前16位数据,由此判断得到当前成分码流的类型为FFD8,进入进程case1,由于FFD8是开始标志,只有两个字节组成,处理结束。下一个状态值byte_left强制置为2,MARK置为0。
第二个MARK标记位FFE0标记处理
MARK为0,状态值byte_left为2,判断输入32位数据的后16位数据,由此判断得到当前成分码流的类型为FFE0,进入进程case18,进行丢弃处理,此时设置丢弃处理的参数值,DropSign_RH置为1,MARK置为1,下一时钟进入drop process丢弃处理的预处理部分;由于当前状态值byte_left为2,下一个32位数据的前16位数据0010为字节总数,即当前标记成分码流共有16个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为0,置位输入计数器的值count置为3,进入到drop process丢弃处理进程,如图3所示,在以下的三个时钟周期内,共丢弃3×4个字节。图2中,JPEGDATAVALID_IH表示当前外部输入的32位数据是否有效。
第三个MARK标记位FFEC标记处理
MARK为0,状态值byte_left为0,判断输入32位数据的前16位数据,由此判断得到当前成分码流的类型为FFEC,进入进程case6,进行丢弃处理,此时设置丢弃处理的参数值,DropSign_RH置为1,MARK置为1,下一时钟进入drop process丢弃处理的预处理部分;由于当前状态值byte_left为0,则当前32位数据的后16位数据0011为字节总数,即当前标记成分码流共有17个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为3,置位输入计数器的值count置为3,进入到drop process丢弃处理进程,如图3所示,在以下的三个时钟周期内,共丢弃3×4个字节。
第四个MARK标记位FFEE标记处理
MARK为0,状态值byte_left为3,如图1所示,丢弃当前输入的32位数据的前24位数据,判断后8位数据,进入进程case20,请求新的32位输入数据,判断新输入32位数据的前8位,由此判断得到当前成分码流的类型为FFEC,进入进程case25,进行丢弃处理,此时设置丢弃处理的参数值,DropSign_RH置为1,MARK置为1;由于当前状态值byte_left为3,之前新输入的当前32位数据的中间16位数据000e为字节总数,即当前标记成分码流共有14个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为3;置位输入计数器的值count置为2,进入到drop process丢弃处理进程,如图3所示,在以下的两个时钟周期内,共丢弃2×4个字节。
第五个MARK标记位FFDB标记处理
MARK为0,状态值byte_left为3,丢弃输入32位数据的前24位数据,判断后8位数据,进入进程case20,请求新的32位输入数据,判断新输入32位数据的前8位,由此判断得到当前成分码流的类型,进入进程case21,进行反量化码表处理,此时设置反量化码表处理的参数值,DqTabSign_RH置1,MARK置为1;由于当前状态值byte_left为3,之前新输入的当前32位数据的中间16位数据0084为字节总数,即当前标记反量化码表共有132个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为1;
如图4所示,进行反量化码表处理进程:图4中,ByteNum_R表示当前成分码流的总字节数,其值先减3的原因是,ByteNum_R中已经包含了表示字节总数本身的两个字节;由于每一张量化表共有64个数值,依次处理每一个值,计数器StageLength_R递增,当StageLength_R=63,判断其是否小于ByteNum_R-3的值,如果两者正好相等,则表示当前量化表为分离式量化表,变化码表类型后本次处理结束;如果其小于ByteNum_R-3的值,则判断当前量化表以多表组合方式出现,依次判断下一张量化表的类型,并作相应处理,其中TotolNum_R表示处理过的总字节数,StageNum_R表示处理过的量化表的个数。
第六个MARK标记位FFC0标记处理
MARK为0,状态值byte_left为1,丢弃输入32位数据的前8位数据,判断输入32位数据的中间16位数据,由此判断得到当前成分码流的类型,进入进程case9,进行帧头处理,此时设置帧头处理的参数值,ProfileSign_RH置为1,MARK置为1;由于当前状态值byte_left为1,存储当前32位数据的最后8位数据00作为当前成分码流的字节总数的高8位,请求新的32位输入数据,进入帧头进程预处理部分,存储新输入数据的前8位数据11作为当前成分码流的字节总数的低8位,故字节总数为0011,即当前帧头码流共17个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为0;
如图6所示,进行帧头处理进程:图6中ProfileSign_RH为帧头处理标记,BytrIndex_R为字节处理计数器,ByteNum_R表示当前成分码流的总字节数,其值先减3的原因是,ByteNum_R中已经包含了表示字节总数本身的两个字节;当ProfileSign_RH<BytNum_R-3时,将当前处理的参数存入缓冲区,当ProfileSign_RH=ByteNum_R-3时,则将缓冲区内的参数放入相关寄存器。
第七个MARK标记位FFC4标记处理
MARK为0,状态值byte_left为0,判断输入32位数据的前16位数据,由此判断得到当前成分码流的类型,进入进程case4,进行哈夫曼码表处理,此时设置哈夫曼码表处理的参数值,HufTabSign_RH置为1,MARK置为1;由于当前状态值byte_left为0,则当前32位数据的后16位数据00CB为字节总数,即当前标记哈夫曼码表共有203个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为1;
如图5所示,进行哈夫曼码表处理进程,该过程与前述的反量化表处理过程类似,但由于哈夫曼码表的长度是由码表内容决定的,不是固定值,故需要通过设定多个计数参数来进行比较判断,以确保分离式码表和组合式码表的正确处理。图5中:HufTabSign_RH=1表示哈夫曼码表处理开始,TotolNum_R表示处理的字节计数,StageLength_R表示上一次哈夫曼码表处理的总字节数,初始值为零,HufferNum_R表示当前码表前16字节所表示的数值累加值;StageLength_R和HufferNum_R决定了单个哈夫曼码表处理的两个阶段;ByteNum_R表示当前成分码流的总字节数,StageNum_R表示处理过的哈夫曼表的个数。当TotolNum_R=ByteNum_R-4-StageNum_R时,表示当前哈夫曼表为分离式码表,将相关码表信息存入指定存储单元;否则判断为组合式码表,则调整相关参数并返回流程的顶端,开始处理第二个码表。
第八个MARK标记位FFDA标记处理
MARK为0,状态值byte_left为1,判断输入32位数据的中间16位数据,由此判断得到当前成分码流的类型,进入进程case13,进行条带头处理,此时设置条带头处理的参数值,SoSSign_RH置为1,MARK置为1;由于当前状态值byte_left为1,则存储当前32位数据的最后8位数据00作为条带头码流的字节总数的高8位,请求新的32位输入数据,进入条带头进程预处理部分,存储新输入32位数据的前8位数据0C作为条带头码流的字节总数的低8位,故字节总数为000C,即当前条带头码流共12个字节,根据图2和前述的表1所示的状态机转换方向和条件,得到下一状态byte_left为3;
如图7所示,进行条带头处理进程:图7中参数SosSign_RH为条带头处理标记,ByteIndex_R为字节处理计数器,ByteNum_R表示当前成分码流的总字节数,其先减3的原因是,ByteNum_R中包含了表示字节总数本身的两个字节;当ProfileSign_RH<ByteNum_R-3时,将当前处理的参数存入缓冲区,当ProfileSign_RH=ByteNum_R-3时,则将缓冲区内的参数放入相关寄存器内。
需要说明的是,虽然上述实施例详尽地描述了本发明的方法,但由于给定的码流不能体现所有的码流数据格式,所以本发明不限于上文的优选实例,本发明仅受权利要求书的精髓和范围限制。
本发明提供的JPEG头码流分析的硬件实现方法,是一种基于32比特位宽的码流分析方法,即JPEG码流以每节拍32比特位宽向头码流分析模块输入数据,头码流分析后的结果存入到相应的存储单元中。当前32比特位宽的数据处理完成后,头码流分析模块向前端模块请求发送新的32比特位宽数据。
本发明提供的JPEG头码流分析的硬件实现方法,通过对输入32比特位宽的数据进行分析,构建了四种状态转换的状态机,得到码流中各个MARK标记位的所在位置,随后由对各个标记位的预处理过渡到对各码流成分的详细处理,准确地对头码流各成分数据进行分析;本方法实现思路清晰,实现过程简单,适合于硬件电路实现。
Claims (17)
1.一种JPEG头码流分析的硬件实现方法,其特征在于,包含以下步骤:
步骤1、JPEG头码流以每节拍32比特位宽,即4个字节的频率向头码流分析模块输入数据;
步骤2、构建MARK标记位的基于4种状态相互转换的状态机;
步骤3、对于不同状态下出现的各种不同码流成分标记进行预处理;
步骤4、对于不同成分码流标记进行各自的处理进程,分别包括。
2.如权利要求1所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤2中,所述的状态机的构建方法为:以将当前MARK标记位中FF在32比特位宽中所处的字节位置作为当前状态,将当前码流成分的字节总数作为转换条件,确定转换后的下一状态,即下一个码流成分的MARK标记位中FF在32比特位宽中所处的字节位置。
3.如权利要求2所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤2中,所述的MARK标记位的4种转换状态具体为:
0状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第1字节位置,即当前32位比特输入数据的前8位数据为FF;此时32位比特输入数据的后16位数据为本码流成分的字节总数;
1状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第2字节位置,即当前32位比特输入数据的第9-16位数据为FF;此时32位比特输入数据的最后8位数据为本码流成分的字节总数的高位,而下一个输入的32位比特数据的前8位数据为本码流成分的字节总数的低位,由此得到本码流成分的字节总数值;
2状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第3字节位置,即当前32位比特输入数据的第17-24位数据为FF;此时下一个输入的32位比特数据的前16位数据为本码流成分的字节总数;
3状态:当前码流成分的MARK标记位中FF在32比特位宽中处于第4字节位置,即当前32位比特输入数据的最后8位数据为FF;此时下一个输入的32位比特数据的中间第9-24位数据为本码流成分的字节总数。
4.如权利要求3所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤2中,所述的MARK标记位的4种状态的转换条件和过程具体为:
将当前成分码流的字节总数对4进行取模操作,若得到结果为1时,下个MARK标记位的状态值为当前MARK标记位的状态值减1;其中,若当前MARK标记位的状态值为0,则下个MARK标记位的状态值为3;
将当前成分码流的字节总数对4进行取模操作,若得到结果为2时,下个MARK标记位的状态值不变,即为当前MARK标记位的状态值;
将当前成分码流的字节总数对4进行取模操作,若得到结果为3时,下个MARK标记位的状态值为当前MARK标记位的状态值加1;其中,若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为0;
将当前成分码流的字节总数对4进行取模操作,若得到结果为0时,下个MARK标记位的状态值为当前MARK标记位的状态值加2;其中,若当前MARK标记位的状态值为2,则下个MARK标记位的状态值为0;若当前MARK标记位的状态值为3,则下个MARK标记位的状态值为1。
5.如权利要求4所述的JPEG头码流分析的硬件实现方法,其特征在于,所述的状态机的初始状态是0,下一个状态强制为2。
6.如权利要求1所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤3中,具体包含以下步骤:
步骤3.1、置位输入计数器:根据当前成分码流所处的状态以及字节总数,置位输入计数器将要处理的本成分码流的32位比特数据的次数,随后每处理完32比特位数据,计数器减1,直到计数器为0;
步骤3.2、MARK标记位处理进程入口预处理:根据当前MARK标记位所在的位置和状态,判断当前的码流成分类型,并置位相应成分处理标志位和数据请求标记。
7.如权利要求6所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤3.2中,判断当前的码流成分类型的具体步骤为:
当前码流成分的MARK标记位为0状态,则判断当前MARK标记位中的后一字节数据,即当前32位比特输入数据的第9-16位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为1状态,则判断当前32位比特输入数据的第17-24位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为2状态,则判断当前32位比特输入数据的最后8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程;
当前码流成分的MARK标记位为3状态,则判断下一个输入的32位比特数据的前8位数据值,由此判断本成分码流的类型,并标记步骤4中将要进行的进程。
8.如权利要求7所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤3.2中,对步骤4中进行的不同进程的标记,具体为:
依据上述判断成分码流类型的数据,即MARK标记位中的FF之后的字节数据,若该数据为E0-EF,或者F0-FE,则标记步骤4中进行步骤4.1所述的码流丢弃处理进程;
若MARK标记位中FF之后字节的数据为DB,则标记步骤4中进行步骤4.2所述的反量化码表处理进程;
若MARK标记位中FF之后字节的数据为C4,则标记步骤4中进行步骤4.3所述的哈夫曼码表处理进程;
若MARK标记位中FF之后字节的数据为C0,则标记步骤4中进行步骤4.4所述的帧头处理进程;
若MARK标记位中FF之后字节的数据为DA,则标记步骤4中进行步骤4.5所述的条带头处理进程。
9.如权利要求1所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4中,具体包含以下步骤:
步骤4.1、对码流进行丢弃处理进程;
步骤4.2、对反量化码表进行处理进程;
步骤4.3、对哈夫曼码表进行处理进程;
步骤4.4、对帧头进行处理进程;
步骤4.5、对条带流进行处理进程。
10.如权利要求9所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.1中,对当前MARK标记位后的内容作丢弃处理,即对输入的32比特位数据不做任何处理;丢弃的字节数根据当前MARK标记后的字节总数决定。
11.如权利要求10所述的JPEG头码流分析的硬件实现方法,其特征在于,在丢弃进程处理中,置位丢弃字节计数器,对输入数据作递减操作,直到丢弃字节计数器为1。
12.如权利要求9所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.2中,对反量化码表的处理包含两种情况:
一种是MARK标记位FFDB后只跟随一个图像分量的量化表,即分离码表;
一种是MARK标记位FFDB后跟随图像的所有量化表的集合,即组合码表,中间有标志位区分。
13.如权利要求12所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.2中,对反量化码表的处理过程具体为:由于每一张图像分量的量化表共有64个数值,故当量化表码表字节计数器在计数到64时,对码表作长度判断,并变换码表类型;然后通过判断已处理的字节数是否与该量化表总共包含的数据字节数相同,来判断当前量化表是分离式量化表或组合式量化表,对于分离式量化表,变化码表类型后结束该步骤;对于组合式量化表,则继续同样处理下一个图像分量的量化表,直至整个量化表处理完成。
14.如权利要求9所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.3中,由于哈夫曼码表根据图像分量区分,同一图像分量又分为DC和AC分量,故对哈夫曼码表的处理包含两种情况:
一种是MARK标记位FFC4后只跟一个图像分量的DC或AC表,即分离式码表;
一种是MARK标记位FFC4后是所有哈夫曼码表的集合,即组合式码表,中间有标志位区分。
15.如权利要求14所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.3中,设定有计算处理的字节数的计数器,计算当前已处理码表字节数的计数器,计算当前已处理码表个数的计数器,和计算当前码表前16字节所表示的数值累加值的计数器;通过判断该些计数器的计数值,得到当前哈夫曼码表为分离式码表还是组合式码表,如果为分离式码表,将相关码表信息存入指定存储单元,结束该步骤;如果为组合式码表,则继续处理该哈夫曼码表中的第一个码表,直至全部处理完毕。
16.如权利要求9所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.4中,对帧头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收帧头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
17.如权利要求9所述的JPEG头码流分析的硬件实现方法,其特征在于,步骤4.5中,对条带头处理进程是对图像格式参数的处理,具体为:按时钟节拍逐次接收条带头码流的32比特位宽的数据,依次接收码流字节并计数,将结果存于缓冲区内,当计数值达到预设值时,将缓冲区的数据按顺序存入寄存器内。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710172932 CN101198060A (zh) | 2007-12-25 | 2007-12-25 | Jpeg头码流分析的硬件实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200710172932 CN101198060A (zh) | 2007-12-25 | 2007-12-25 | Jpeg头码流分析的硬件实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101198060A true CN101198060A (zh) | 2008-06-11 |
Family
ID=39548153
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710172932 Pending CN101198060A (zh) | 2007-12-25 | 2007-12-25 | Jpeg头码流分析的硬件实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101198060A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102469307A (zh) * | 2010-11-12 | 2012-05-23 | 珠海全志科技股份有限公司 | 解码器及码流解析装置 |
-
2007
- 2007-12-25 CN CN 200710172932 patent/CN101198060A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102469307A (zh) * | 2010-11-12 | 2012-05-23 | 珠海全志科技股份有限公司 | 解码器及码流解析装置 |
CN102469307B (zh) * | 2010-11-12 | 2014-04-16 | 珠海全志科技股份有限公司 | 解码器及码流解析装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107180074A (zh) | 一种视频分类方法及装置 | |
US11551785B2 (en) | Gene sequencing data compression preprocessing, compression and decompression method, system, and computer-readable medium | |
CN109784343B (zh) | 一种基于深度学习模型的资源分配方法及终端 | |
CN106131083A (zh) | 一种攻击报文检测和防范的方法及交换机 | |
CN102542024B (zh) | 一种视频资源语义标签的标定方法 | |
CN106227881A (zh) | 一种信息处理方法及服务器 | |
CN1324557C (zh) | 从串行化的数字音频数据流中提取数字音频数据字的方法 | |
CN110474711A (zh) | 编码方法、设备及可读存储介质 | |
US20120139763A1 (en) | Decoding encoded data | |
CN110474709A (zh) | 编码方法、设备及可读存储介质 | |
CN114979186B (zh) | 基于Flink组件的流量链接分析方法及系统 | |
CN101438598B (zh) | 用于产生两个独立绝对差和的指令 | |
CN101198060A (zh) | Jpeg头码流分析的硬件实现方法 | |
CN102547260B (zh) | 基于上下文自适应的可变长编码的解码方法及系统 | |
CN103780801A (zh) | 用于数字基带视频中场景剪切检测的启发式方法 | |
CN107769988A (zh) | 信息发送及检测报文丢失的方法、装置和网络设备 | |
CN101466037A (zh) | 一种软硬件配合的视频解码器实现方法 | |
CN102298782B (zh) | 用于无损视频压缩的参数估计的系统、方法 | |
CN112328951B (zh) | 一种分析样品的实验数据的处理方法 | |
CN101262493B (zh) | 通过流缓存实现网间数据传输加速的方法 | |
CN106327538B (zh) | 一种二维骨骼动画压缩方法及装置 | |
CN112241472A (zh) | 一种用于大数据状态监控系统 | |
CN100543772C (zh) | 数字视频分析方法 | |
CN110798223A (zh) | 一种最小游程切换点标记编码压缩方法及装置 | |
CN109309548A (zh) | 编码方法、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080611 |