背景技术
视频编解码器(video codec)用来对视频信号进行编码及解码。无论是视频编码过程或视频解码过程,都必须对视频信号进行运动估计(motionestimation)。运动估计在视频编解码过程中占有相当大的计算量。一般来说,运动估计过程所需的计算量约占视频编解码过程的总体计算量的40%~70%,因此若能提升运动估计过程的速度,则可大大地提升视频编解码器的整体效能。
视频信号是由多个帧(frame)所组成,而每一帧又由多个宏块(macroblock)所组成。一个宏块包含了16×16个像素(pixel)。当视频编解码器进行运动估计时,一般是以一个宏块为单位以进行估计。图1A为视频编解码器对一个当前帧进行运动估计的示意图。当前帧150包含多个行160~190,每一行包括多个宏块,每一宏块包括16×16个像素。举例来说,当前帧150的行160包括宏块161~16N,而当前帧150的行170包括宏块171~17N。当视频编解码器对当前帧150进行运动估计时,首先将行160的第一个宏块161设为当前宏块,并对当前宏块161进行运动估计。
当产生当前宏块161的运动估计数据后,视频编解码器接着对将行160的第二个宏块162设为当前宏块,并对当前宏块162进行运动估计。接着,视频编解码器依序分别将行160的第三个宏块163、第四个宏块164、第五个宏块165、...、第N个宏块16N设为当前宏块,并对当前宏块163、164、165、...、16N进行运动估计。当视频编解码器对当前帧150的行160进行运动估计完毕后,视频编解码器继续对当前帧150的第二行170的宏块171~17N进行运动估计。如此反复上述步骤,直到当前帧150的最后一行190的宏块191~19N进行运动估计完毕为止。
图1B为视频编解码器对一当前宏块进行运动估计的示意图。假设当前宏块位于当前帧,而视频编解码器以一参考帧的数据为依据对当前帧进行运动估计,且参考帧包括一同位宏块(collocated macroblock)105具有与当前宏块于当前帧中相同的位置。当视频编解码器对当前宏块进行运动估计时,需要参考帧中以同位宏块105为中心的多个宏块的数据作为依据。于一实施例中,对当前宏块进行运动估计所需要的数据包括参考帧中的同位宏块105、位于该同位宏块上方的一上方宏块102、位于该同位宏块下方的一下方宏块108、位于该同位宏块左方的一左方宏块104、位于该同位宏块右方的一右方宏块106、位于该同位宏块左上方的一左上方宏块101、位于该同位宏块右上方的一右上方宏块103、位于该同位宏块左下方的一左下方宏块107、以及位于该同位宏块右下方的一右下方宏块109。
由于视频编解码器需要参考帧中的多个宏块的数据以对当前宏块进行运动估计,因此视频编解码器会以一搜索窗100自参考帧撷取所需的宏块的数据。一般而言,参考帧数据具有较高的数据量,因此皆储存于视频编解码器以外的存储器中。每当视频编解码器对一当前区块进行运动估计时,视频编解码器便由存储器中取得当前宏块所对应的搜索窗100内的宏块数据,并将该搜索窗数据储存入一片内存储器,以供进行当前区块的运动估计。
然而,上述运动估计过程存在许多缺点。首先,每次视频编解码器更换当前宏块,搜索窗数据必须进行对应的更换,而视频编解码器便需要重新存取一次存储器中的参考帧数据以取得搜索窗数据。由于存取外部存储器中的参考帧数据会导致运动估计过程的延迟,因此以高频率存取存储器中的参考帧数据会使系统的效能降低。
然而,相邻的区块对应的搜索窗数据彼此间有大部分的宏块为重迭的。图2A为水平相邻的两搜索窗210及220的示意图。搜索窗210包含以同位宏块201为中心的9个宏块,而搜索窗220包含以同位宏块202为中心的9个宏块。由图2A中可见,搜索窗210与220有六个宏块相重迭,如阴影区域所示。图2B为垂直相邻的两搜索窗260及270的示意图。搜索窗260包含以同位宏块206为中心的9个宏块,而搜索窗270包含以同位宏块207为中心的9个宏块。由图2B中可见,搜索窗260与270亦有六个宏块相重迭,如着色区域所示。由于邻近的搜索窗的大部份宏块为重迭,对于传统的视频编解码器更换当前进行区块时,需要更换搜索窗内的所有巨集块的数据,即一次读取图1A中的三行数据,或者当每次读取一行时分为三次读取,而造成读取数据的重迭和冗余。若能妥善的利用搜索窗的重迭性质以安排搜索窗数据的读取,便可减少运动估计过程之中对外部次存储器的存取频率并节省读取数据所使用的带宽,从而减少运动估计过程的延迟,而提高系统效能。
具体实施方式
图3为依据本发明的视频编解码器302的区块图。视频编解码器302可对视频数据进行编码及解码。该视频数据可为MPEG4视频数据或H.263视频数据。该视频数据包括多个帧(frame),每一帧包括多个宏块(macro block)。当视频编解码器302对视频数据进行编码及解码时,视频编解码器302会依序对该视频数据的多个帧的各宏块进行运动估计(motion prediction)。其中视频编解码器302正进行运动估计的帧称为当前帧(current frame),而视频编解码器302正进行运动估计的宏块称为当前宏块(current macro block)。
于一实施例中,视频编解码器302耦接至一外部存储器304,其中该外部存储器304包括一参考帧数据310。该参考帧数据310供视频编解码器302对当前帧进行运动估计的参考用,因此视频编解码器302在对当前帧进行运动估计前必须先自外部存储器304下载部份参考帧数据310。于一实施例中,视频编解码器302包括一控制器312、一接口电路314、一片内存储器316、以及一运动估计电路318。控制器312为视频编解码器302的核心,控制接口电路314、片内存储器316、以及运动估计电路318的运作。接口电路314可依据控制器312的指示自外部存储器304读取部份参考帧数据310以得到一片内存储数据320,并将片内存储数据320储存于片内存储器316。于一实施例中,片内存储器316中储存的片内存储数据320包含参考帧数据310的三行宏块。片内存储器316可由片内存储器316读取片内存储数据320,根据一搜索窗得到一搜索窗数据,其中搜索窗为在存储器316中选取一定的连续数据例如窗形区域内的数据,并且这些连续的数据可以按照数据的排列方式例如数据阵列方向进行移动。最后,运动估计电路318依据搜索窗数据针对当前宏块进行运动估计,以得到当前宏块的运动估计数据。
图4A为依据本发明的片内存储器316所储存的片内存储数据的示意图。于一实施例中,当运动估计电路318欲开始进行当前帧的运动估计时,控制器312控制接口电路314自外部存储器304读取参考帧数据310的完整前三行数据。参考帧310的前三行数据在片内存储器316中储存的范围包括宏块412~41(N-1)、422~42(N-1)、432~43(N-1)。其中,参考帧310的第一行数据包括宏块412~41(N-1),参考帧310的第二行数据包括宏块422~42(N-1),而参考帧310的第三行数据包括宏块432~43(N-1)。除了参考帧数据310的完整前三行数据外,图4A左侧的宏块411、421、431为参考帧往左侧扩展的一列数据,而图4A右侧的宏块41N、42N、43N为参考帧往右侧扩展的一列数据。因此,片内存储器316中储存的片内存储数据400的行数目为三行,列数目为参考帧310的列数目加二列。在一个实施例中,可以进行列扩展,即向左侧扩展和右侧扩展,例如将参考帧每行的第一个巨集块和最后一个巨集块分别复制到图4A左侧的宏块411、421、431和图4A右侧的宏块41N、42N、43N,在其他实施例中也可以采用预设的数值补充到上述宏块中。
图4A中的片内存储数据下载至片内存储器316中储存的过程如下。首先,控制器312控制接口电路314自外部存储器304读取参考帧往左侧扩展的三个宏块411、421、431,然后将宏块411、421、431储存至片内存储器316。接着,控制器312控制接口电路314自外部存储器304读取参考帧数据310的前三行的第一列宏块412、422、432,然后将宏块412、422、432储存至片内存储器316。接着,控制器312控制接口电路314自外部存储器304读取参考帧数据310的前三行的第二列宏块413、423、433,然后将宏块413、423、433储存至片内存储器316。同样的,控制器312控制接口电路314依次读取参考帧数据310的各行宏块并储存至片内存储器316,直到参考帧数据310的最后一行宏块41(N-1)、42(N-1)、43(N-1)储存至片内存储器316为止。最后,控制器312控制接口电路314自外部存储器304读取参考帧往右侧扩展的三个宏块41N、42N、43N,然后将宏块41N、42N、43N储存至片内存储器316。
图4B~图4H为依据本发明的控制器312依据运动估计过程更新片内存储器316所储存的片内存储数据的示意图。于图4B中,假设进行运动估计的当前宏块于当帧前中位于同位宏块422的相同位置。首先,控制器312将搜索窗移至位置410以由片内存储器316读取宏块411~413、421~423、431~433的数据作为搜索窗数据,并将搜索窗数据传送至运动估计电路318进行当前宏块的运动估计。搜索窗410包含以同位宏块422为中心位置的九个宏块。当当前宏块的运动估计执行完毕,运动估计电路318将当前宏块右移一个宏块,而控制器312亦将搜索窗右移一个宏块宽度至位置420,以由片内存储器316读取宏块412~414、422~424、432~434的数据作为供当前宏块的运动估计的搜索窗数据,如图4C所示。
此时,图4B中的宏块411、421、431已由图4C的搜索窗420中移除。其中,宏块421、431的数据仍旧会在后续移动估计过程中运用,但宏块411的数据已不再被运用。因此,控制器312将宏块411标示为一空宏块,接着控制接口电路314自外部存储器304读取参考帧第4行往左侧扩展的一个宏块441的数据,并将宏块441的数据储存在片内存储器316中原本存放宏块411的空间,如图4C所示。
同样的,于图4D中,当当前宏块的运动估计执行完毕,运动估计电路318将当前宏块再右移一个宏块,而控制器312亦将搜索窗对应地右移至位置430,以由片内存储器316读取宏块413~415、423~425、433~435的数据作为供当前宏块的运动估计的搜索窗数据。此时,图4C中的宏块412、422、432已由图4D的搜索窗430中移除。其中,宏块422、432的数据仍旧会在后续移动估计过程中运用,但宏块412的数据已不再被运用。因此,控制器312将宏块412标示为一空宏块,接着控制接口电路314自外部存储器304读取参考帧数据的第4行的第一个宏块442的数据,并将宏块442的数据储存在片内存储器316中原本存放宏块412的空间,如图4D所示。
同样的,控制器312将依据前述的过程随着搜索窗的移动反复自外部存储器304读取参考帧数据,以更新片内存储器316中储存的片内存储数据320。于图4E中,搜索窗已移动至440的位置,而片内存储器316中原本存放第一行的宏块411~41(N-4)的空间已更新为参考帧数据的第4行的宏块441~44(N-4)。于图4F中,进行运动估计的当前宏块再度右移一个宏块,而搜索窗对应地移动至450的位置。控制器312控制接口电路314将宏块41(N-3)标示为空宏块,接着自外部存储器304读取参考帧数据的第4行的宏块44(N-3)的数据,并将宏块44(N-3)的数据储存在片内存储器316中原本存放宏块41(N-3)的空间。
由于图4F中进行运动估计的当前宏块是位于当前帧中该行的最后一个宏块,因此当运动估计电路318对当前宏块进行运动估计完毕后,会将当前宏块移至当前帧中的下一行开头。于图4G中,控制器312将搜索窗对应地移动至460的位置。此时片内存储器316中原本存放第1行宏块的空间已完全被替换为参考帧第4行的数据,因此运动估计电路318可直接依据搜索窗460包含的宏块数据对当前宏块进行运动估计。同样的,由于之前自图4F的搜索窗450移出的共有9个宏块41(N-2)~41N、42(N-2)~42N、43(N-2)~43N,其中三个宏块41(N-2)、41(N-1)、41N已不再为后续运动估计过程所运用,因此控制器312将宏块41(N-2)、41(N-1)、41N标示为空宏块,接着控制接口电路314自外部存储器304读取参考帧数据的第4行的宏块44(N-2)、44(N-1)、44N的数据,并将宏块44(N-2)、44(N-1)、44N的数据储存在片内存储器316中原本存放宏块41(N-2)、41(N-1)、41N的空间。
于图4H中,进行运动估计的当前宏块再度右移一个宏块,而搜索窗对应地移动至470的位置。此时,图4G中的宏块441、421、431已由图4H的搜索窗470中移除,其中,宏块421的数据已不再被后续移动估计过程中运用。因此,控制器312将宏块421标示为空宏块,接着控制接口电路314自外部存储器304读取参考帧第5行往左侧扩展的一个宏块451的数据,并将宏块451的数据储存在片内存储器316中原本存放宏块421的空间。控制器312将随着进行运动估计的当前宏块的移动,继续进行搜索窗的对应移动及片内存储器316中片内存储数据320的更新,直到运动估计电路318将当前帧中所有宏块的运动估计皆已执行完毕为止。
图5为依据本发明自外部存储器304下载数据至片内存储器316的方法500的流程图。首先,控制器312检查是否参考帧数据310的前三行宏块已加载至片内存储器316完毕(步骤502)。若参考帧数据310的前三行宏块尚未完全加载至片内存储器316,则控制器312控制接口电路314自外部存储器304加载一个48×16大小的数据至片内存储器316,其中该48×16大小的数据包含位于同一列的三个宏块(步骤504)。亦即,控制器312控制接口电路314持续自外部存储器304下载数据(步骤504),直到参考帧数据310的前三行宏块已完全加载至片内存储器316为止(步骤502)。接着,控制器312检查是否片内存储器316中有一个16×16的单一宏块的空位(步骤508)。若片内存储器316中有一个空宏块,则控制器312控制接口电路314自外部存储器304读取参考帧数据310以加载一个16×16的宏块的数据至片内存储器316中用以存放空宏块的空间(步骤510)。步骤508及510将持续进行以更新片内存储器316中储存的片内存储数据320,直到参考帧数据310的所有的宏块皆已加载完毕为止(步骤506)。在本实施例中一个宏块的大小为16×16个像素,本领域的技术人员可以理解宏块的大小亦可采用例如8×8等其他规格。
图6为依据本发明的使用片内存储器316中储存的数据的方法600的流程图。首先,控制器312检查是否片内存储器316已载入搜索窗中的数据(步骤602)。若片内存储器316已载入搜索窗中的数据,则运动估计电路318便可由片内存储器316读取搜索窗中的数据,以供当前宏块的运动估计之用。接着,控制器312检查是否当前宏块的运动估计执行完毕(步骤604)。若运动估计电路318已对当前宏块执行运动估计完毕,则控制器312继续检查是否当前宏块为本行的最后一个宏块(步骤606)。若当前宏块不为本行的最后一个宏块,则控制器312仅将片内存储数据320中的一个宏块标示为空宏块(步骤608),如图4C、图4D、图4F、图4H所示。若当前宏块为本行的最后一个宏块(步骤606),则控制器312一次将片内存储数据320中的三个宏块标示为空宏块,如图4F与图4G所示。片内存储器316中被标示为空宏块的空间将被控制器312用来储存接口电路314自参考帧数据310读取的更新宏块数据。最后,控制器312检查是否当前宏块为本帧的最后一个宏块(步骤612)。若当前宏块不为本帧的最后一个宏块,则上述步骤602~612重复执行。
以上对本发明的介绍均基于搜索窗包含3×3,即9个巨集块,根据9个巨集块进行中心巨集块的运动估计,本领域的普通技术人员可以理解,上述搜索窗的尺寸并不限于3×3,亦可采用4×4,5×5,6×6,N×N等尺寸,而N取决于运动估计演算法的精度,在每次计算下一个中心宏块的运动估计时,同样可以采用本发明中标志移出的巨集块为空,仅更新移入的巨集块数据。而采用较大的搜索窗相比于传统技术减少的冗余越多,带来的效果越好。当然,如果搜索窗的尺寸N为奇数时,可以确定中心宏块为1个,位置为搜索窗中第(N+1)/2行,第(N+1)/2列,如果搜索窗的尺寸N为偶数时,中心宏块为4个,位置为N/2,N/2+1行和N/2,N/2+1列围成的4个宏块,这4个宏块运动估计结果可以共用同一位置搜索窗计算所得的运动估计结果。同时在运动估计开始前,将片内数据向左右扩展(N-1)/2个(N为奇数)或N/2-1个(N为偶数)。
其中当N为奇数时,搜索窗数据包括参考帧数据中从当前宏块开始左右两边分别第(N-1)/2列的宏块且上下两边分别第(N-1)/2行的宏块,以及上述宏块所包围的方形区域内的宏块。当N为偶数时,搜索窗数据包括参考帧数据中从当前宏块开始左右两边分别第N/2-1列的宏块且上下两边分别第N/2-1行的宏块,以及上述宏块所包围的方形区域内的宏块,其中当N为偶数时,该当前宏块包括共享运动估计结果并形成2×2方形矩阵的4个宏块。
虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,本领域技术人员,在不脱离本发明的精神和范围的前提下,可作若干的更动与润饰,因此本发明的保护范围是以本发明的权利要求为准。