以下、図面を参照して本発明の実施形態を詳細に説明する。
図1は、多様な動画圧縮コーデックのそれぞれで使われる動き補償のためのフィルタの特性を表で示す図である。さらなる高解像度の画像を復元するために、現在動画圧縮コーデックでは、動きベクトルが参照画像内の画素、すなわち整数画素のみを指示せず、整数画素の間の1/2に位置した1/2画素または整数画素の間の1/4に位置した1/4画素も指示するようにしている。しかし、1/2画素及び1/4画素は、参照画像に本来存在しない画素であるため、この画素の値は、画素補間法を利用して生成される。図1は、このような画素補間に使われるフィルタの特性を動画圧縮コーデック別に示す。
図1を参照するに、MPEG4、H.264/AVC、VC1の色差成分(chrominance component)は、何れもキュービックフィルタ(cubic filter)を使用しており、VC1は、リニアフィルタ(linear filter)を共に使用する。また、輝度成分(luminance component)については、MPEG4は、キュービックフィルタを使用し、H.264/AVCは、リニアフィルタを使用し、VC1は、キュービックフィルタとリニアフィルタとを共に使用しているということが分かる。以下では、MPEG4、H.264/AVC、VC1による画素補間の形を図2Aないし図2Eを参照しつつ詳細に説明する。
図2Aは、H.264/AVCによる輝度成分の画素補間の形を示す図である。図2Aに示された大文字アルファベットは、整数画素を表し、小文字アルファベットは、サブ画素を表す。整数画素は、画素補間に使われる本来の画素を意味し、サブ画素は、整数画素を利用して画素補間によって生成された値を有する画素、すなわち1/2画素、1/4画素を意味する。図2Aを参照するに、H.264/AVCの輝度成分に対する画素補間は、1/4画素単位までなされる。まず、図2Aに示された1/2画素、すなわち、b、h、m、s位置の画素は、次のような式(1)によって6個の係数を有する6タップフィルタを利用して計算される。
b1=(E−5*F+20*G+20*H−5*I+J)
h1=(A−5*C+20*G+20*M−5*R+T)
b=Clip1Y((b1+16)>>5)
h=Clip1Y((h1+16)>>5) (1)
j1=cc−5*dd+20*h1+20*m1−5*ee+ff、または
j1=aa−5*bb+20*b1+20*s1−5*gg+hh
j=Clip1Y((j1+512)>>10)
s=Clip1Y((s1+16)>>5)
m=Clip1Y((m1+16)>>5)
前記数式で“*”は、乗算演算を表す。以下でも同様である。
次いで、図2Aに示された1/4画素、すなわち、残りの画素は、次のような式(2)によって平均フィルタを利用して計算される。この平均フィルタは、2個の係数を有する2タップフィルタの一種であって、以下でも同様である。
a=(G+b+1)>>1
c=(H+b+1)>>1
d=(G+h+1)>>1
n=(M+h+1)>>1
f=(b+j+1)>>1
i=(h+j+1)>>1
k=(j+m+1)>>1 (2)
q=(j+s+1)>>1
e=(b+h+1)>>1
g=(b+m+1)>>1
p=(h+s+1)>>1
r=(m+s+1)>>1
前記の式(1)及び(2)のうち、表記“>>”は、右側シフト演算を意味し、“>>”の次の数字は、何ビットをシフトするかを表す。例えば、“>>1”は、1ビットシフトを意味し、二等分と同等である。以下でも同様である。
図2Bは、H.264/AVCによる色差成分の画素補間の様子を示す図である。図2Bに示されたP1、P2、P3、P4は、整数画素を表し、4個の矢印の収斂点は、サブ画素を表す。図2Bを参照するに、H.264/AVCの色差成分に対する画素補間は、固定された位置ではない、任意の位置でなされる。すなわち、図2Bに示された任意の位置の画素は、次のような式(3)によってキュービックフィルタを使用して計算される。このキュービックフィルタは、4個の係数を有する4タップフィルタの一種であって、以下でも同様である。
P=((8−xFrc)*(8−yFrc)*P1+xFrc*(8−yFrc)*P2+(8−xFrc)*yFrc*P3+xFrc*yFrc*P4+32)>>6 (3)
図2Cは、VC1によってリニアフィルタを使用した画素補間の形を示す図である。図2Cに示されたP1、P2、P3、P4は、整数画素を表し、整数画素P2とP3との間に位置した点は、サブ画素を表す。図2Cを参照するに、VC1によってリニアフィルタを使用した画素補間は、1/4画素単位までなされる。すなわち、図2Cに示された黒点に該当する1/2画素及び1/4画素は、次のような式(4)によってキュービックフィルタを使用して計算される。
P=(a*P1+b*P2+c*P3+d*P4+rc)>>s (4)
前記の式(4)のうち、表記“a”、“b”、“c”、“d”は、キュービックフィルタの4個のタップのそれぞれの係数であって、サブ画素の位置によってその値が決定される。また、表記“s”も、サブ画素の位置によってその値が決定される。
図2Dは、MPEG4による画素補間の様子を示す図である。図2Dに示されたP1、P2、P3、P4は、整数画素を表し、整数画素の間に位置した黒点は、サブ画素を表す。図2Dを参照するに、MPEG4の輝度成分及び色差成分に対する画素補間は、1/2画素単位までなされる。例えば、P1の位置をdx=0、dy=0とすれば、図2Cに示された黒色点に該当する1/2画素は、次のような式(5)によってキュービックフィルタを使用して計算される。
dx=1、dy=0:P=(P1+P2+1−rc)>>1
dx=0、dy=1:P=(P1+P3+1−rc)>>1 (5)
dx=1、dy=1:P=(P1+P2+P3+P4−rc)>>1
前記の式(5)のうち、表記“rc”は、ラウンド制御(rounding control)を意味し、0または1を有する。以下でも同様である。
図2Eは、VC1によってキュービックフィルタを使用した画素補間の様子を示す図である。図2Eに示されたP1、P2、P3、P4は、整数画素を表し、4個の矢印の収斂点は、サブ画素を表す。図2Eを参照するに、H.264/AVCの色差成分に対する画素補間は、固定され位置ではない、任意の位置でなされる。すなわち、図2Bに示された任意の位置の画素は、次のような式(6)によってキュービックフィルタを使用して計算される。
P=(a*P1+b*P2+c*P3+d*P4+rc)>>s (6)
前記の式(6)のうち、表記“a”、“b”、“c”、“d”は、キュービックフィルタの4個のタップのそれぞれの係数であって、サブ画素の位置によってその値が決定される。また、表記“s”も、サブ画素の位置によってその値が決定される。
前記のように、MPEG4、H.264/AVC、VC1で使われるフィルタのそれぞれのタップ数と係数値とは異なるが、このような係数値は、調整が可能であり、あるタップの係数値を0にすることによってタップ数も調整が可能である。例えば、6タップフィルタを構成する6個のタップのうち、2個のタップの係数値を0にすることによって、この6タップフィルタは、4タップフィルタとして使われる。また、4タップフィルタを構成する4個のタップのうち、2個のタップの係数値を0にすることによって、この4タップフィルタは、2タップフィルタ、すなわち平均フィルタとして使われる。したがって、MPEG4、H.264/AVC、VC1のそれぞれで使われるフィルタの間には、相互共有できる部分が存在するということが分かり、これを利用すれば、前記の3つのコーデック(CODEC)を何れもさらに小さい数のフィルタを利用して動き補償を効率的に処理しうる。
前記の3つのコーデックのうち、H.264/AVCが最も複雑な方式で画素を補間する。しかし、H.264/AVCは、輝度成分に対してリニアフィルタリング方式の6タップフィルタを使用し、色差成分に対しては、キュービックフィルタリング方式の4タップフィルタを使用するため、これらは、MPEG4、VC1のキュービックフィルタリング方式の4タップフィルタ及びVC1のリニアフィルタリング方式の4タップフィルタに使われる。したがって、MPEG4、VC1の画素補間法は、H.264/AVCの画素補間法のサブセットと言える。
すなわち、6個のタップを有する一つのリニアフィルタは、その6個のタップのそれぞれの係数値を調整することにより、MPEG4のリニアフィルタ、H.264/AVCのリニアフィルタ、VC1のリニアフィルタの何れにも使われる。また、4個のタップを有するキュービックフィルタは、その4個のタップのそれぞれの係数値を調整することにより、MPEG4のキュービックフィルタ、H.264/AVCのキュービックフィルタ、VC1のキュービックフィルタの何れもに使われる。しかし、H.264/AVCによる輝度成分の画素補間過程は、式(2)による平均フィルタリング過程を要求している。
しかし、式(2)によって算出される1/4画素のそれぞれは、その位置によって画素補間時に利用される周辺の画素が異なる。すなわち、e、g、p、r位置の画素の値は、そのそれぞれの画素を中心にしたダイアモンド位置の画素値を利用して算出され、f、i、k、g位置の画素の値は、そのそれぞれの画素を中心にした十字位置の画素値を利用して算出される。このように、H.264/AVCの1/4画素補間過程は、画素の位置による複雑なフィルタリング過程であるため、ハードウェアとして具現されるのが容易でなかった。
図3は、本発明の一実施形態によるキュービックフィルタを示す図である。図3を参照するに、本実施形態では、前記のようなH.264/AVCの1/4画素補間過程を、図3に示したように、キュービックフィルタに適用した。図3に示された形態のキュービックフィルタを利用すれば、H.264/AVCの1/4画素補間過程は、キュービックフィルタという共通モジュールを通じてなされる。
一般的に、キュービックフィルタは、キュービックの頂点のそれぞれに位置した整数画素(Integer pel)の値を利用して、キュービックの辺のそれぞれの中心に位置した1/2画素の値及びキュービックの中心に位置した1/2画素(Half pel)の値を算出する。本実施形態では、このようなキュービックフィルタの特性を利用して前記の式(2)に該当する計算を処理する。例えば、a位置の1/4画素(Quater pel)の値は、G位置の整数画素の値、b位置の1/2画素の値を、図3に示されたキュービックフィルタに適用することによって算出される。当業者ならば、他の位置の1/4画素の値も、図3に示したように算出されるということが分かる。
図4は、本発明の一実施形態によるマルチコーデック支援動き補償装置の構成図である。図4を参照するに、本実施形態によるマルチコーデック支援動き補償装置は、スレーブインターフェース(スレーブI/F)10、マスターインターフェース(マスターI/F)20、DMA(Direct Memory Access)I/F 30、動き補償エンジン40、第1メモリ50、第2メモリ60、及び加算器70で構成される。
スレーブI/F 10は、本実施形態によるマルチコーデック支援動き補償装置を備える動画復号化装置(図示せず)のシステムバスを経由して、外部動画符号化装置(図示せず)から伝送されたレジデューデータをフェッチし、フェッチされたレジデューデータを第2メモリ60に出力する。また、スレーブI/F 10は、システムバスを経由して、外部動画符号化装置から動き補償のために必要なパラメータであるMC(Motion Compensation)パラメータをフェッチし、フェッチされたMCパラメータをマスターI/F 20に出力する。
マスターI/F 20は、スレーブI/F 10から入力されたMCパラメータを解釈し、その解釈結果に基づいて、MCパラメータを選別してDMA I/F 30及び動き補償エンジン40に出力することにより、DMA I/F 30を構成するDMAモジュール31及びFIFO(First−In First−Out)モジュール32のそれぞれの動作を制御し、動き補償エンジン40を構成する垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44、及びキュービックフィルタ45のそれぞれの動作を制御する。
第1メモリ50は、動き補償エンジン40によって生成された動き補償データを保存し、第2メモリ60は、スレーブI/F 10から入力されたレジデューデータを保存する。一般的に、第1メモリ50及び第2メモリ60は、SRAM(スタティックランダムアクセスメモリ)で具現される。加算器70は、第1メモリ50に保存された動き補償データと第2メモリ60に保存されたレジデューデータとを合算することによって現在画像を復元し、復元された現在画像のデータをDMA I/F 30に出力する。
DMA I/F 30は、DMAモジュール31及びFIFOモジュール32で構成される。DMAモジュール31は、マスターI/F 20から入力されたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリ(図示せず)から、参照画像と現在画像との間に共有される参照画像の32ビット単位のデータをフェッチし、加算器70によって復元された現在画像を外部メモリに保存する。
FIFOモジュール32は、DMAモジュール31によってフェッチされた32ビット単位のデータを8ビット単位で抽出して順次に動き補償エンジン40に出力する。特に、FIFOモジュール32は、実際に動き補償のために必要なデータのみを動き補償エンジン40に出力する8ビットアンパッキング以外に、参照画像に動きベクトルが指示するデータが存在しない場合、この動きベクトルによるパッディングも共に行う。
動き補償エンジン40は、DMA I/F 30から入力された8ビット単位のデータに対する動き補償を行う。さらに詳細に説明すると、動き補償エンジン40は、マスターI/F 20から入力されたMCパラメータ中の複数のコーデックのうち何れか一つを表すコーデック情報、複数の色成分のうち何れか一つを表す色情報、及び複数のフィルタのうち何れか一つを表すフィルタ情報によって現在画像に対応する参照画像の画素を補間する複数の方式、すなわち、垂直リニアフィルタリング、水平リニアフィルタリング、キュービックフィルタリングのうち少なくとも一つの方式を利用して、参照画像の画素の値からその画素の間に位置した画素の値を算出する。
図4を参照するに、動き補償エンジン40は、さらに垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44、及びキュービックフィルタ45で構成される。
垂直フィルタ41は、マスターI/F 20から入力されたMCパラメータ中の複数のコーデックのうち何れか一つを表すコーデック情報、複数の色成分のうち何れか一つを表す色情報、及び複数のフィルタのうち何れか一つを表すフィルタ情報によって、選択的にDMA I/F 30から入力された参照画像の何れか一ブロックの何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素の値を算出する。特に、垂直フィルタ41は、6個のタップを有するリニアフィルタで具現され、前記の垂直ラインに位置した整数画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち前記のブロックの動きベクトルが指示する1/2画素の値を算出する。
第1水平フィルタ42は、マスターI/F 20から入力されたMCパラメータのうちコーデック情報、色情報、及びフィルタ情報によって、選択的にDMA I/F 30から入力された参照画像の何れか一ブロックの何れか一つの水平ラインに位置した整数画素の値から、その水平ラインに位置した整数画素の間に位置した1/2画素の値を算出する。特に、第1水平フィルタ42は、6個のタップを有するリニアフィルタで具現され、前記の水平ラインに位置した画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち前記のブロックの動きベクトルが指示する1/2画素の値を算出する。
第2水平フィルタ43は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に第1水平フィルタ42によって処理される水平ラインでない他の水平ラインに位置した整数画素または1/2画素の値から、その水平ラインに位置した整数画素の間に位置した1/2画素の値を算出する。ここで、1/2画素は、周辺の整数画素から算出される。特に、第2水平フィルタ43は、6個のタップを有するリニアフィルタで具現され、前記の水平ラインに位置した整数画素または1/2画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち前記のブロックの動きベクトルが指示する1/2画素の値を算出する。
キュービック整列部44は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に前記のブロックの動きベクトルが指示する1/2画素、1/4画素、または任意の位置の画素の値を生成するために要求されるキュービック位置に、DMA I/F 30から入力された整数画素または1/2画素の値を整列する。
キュービックフィルタ45は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に図3に示されたところによって、キュービック整列部44によって整列された4個の整数画素の値から、この整列された画素の間に位置した1/2画素、1/4画素、または任意の位置の画素の値を算出する。また、キュービックフィルタ45は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に第1水平フィルタ42及び第2水平フィルタ43から入力された輝度成分のブロックの何れか一つのキュービックに位置した2個の整数画素または1/2画素の値から、このキュービックに位置した2個の画素の間に位置した1/2画素または1/4画素の値を算出する。特に、キュービックフィルタ45は、4個のタップを有するキュービックフィルタで具現され、前記のキュービック位置の2個または4個の画素の値をこのキュービック位置に対応する2個のタップまたは4個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記のブロックの動きベクトルが指示する1/2画素、1/4画素、任意の位置の画素の値を算出する。
垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44及びキュービックフィルタ45のそれぞれは、全ての画素に対して動作するのではなく、動きベクトルの値によって動作する。それは、マスターI/F 20から入力されたMCパラメータのうち動きベクトルが整数画素の位置を指示する場合には、参照画面と予測画面との間の動きが正確に整数画素間隔の倍数に該当する場合であるため、参照画面を構成する整数画素の値が予測画面を構成する画素の値となるので、垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44、及びキュービックフィルタ45による画素値補間が不要である。しかし、マスターI/F 20から入力されたMCパラメータのうち動きベクトルが1/2画素または1/4画素の位置を指示する場合には、参照画面と予測画面との間の動きが正確に整数画素間隔の倍数に該当しない場合であるため、参照画面を構成する整数画素の値を利用して補間された値が予測画面を構成する画素の値となるので、垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44及びキュービックフィルタ45による画素値補間が必要である。
垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、キュービック整列部44及びキュービックフィルタ45による画素値補間が参照画像全体に対して行われば、垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43及びキュービックフィルタ45によって処理されず、そのまま通過された整数画素の値、これらフィルタによって算出された1/2画素の値、1/4画素の値及び任意の位置の画素の値全体は、前記の参照画像に対応する現在画像の動き補償データとして完成される。
図5ないし図7は、図4に示された動き補償装置での各コーデック別動作シナリオを示す図である。図5ないし図7を参照するに、H.264/AVCの輝度成分とVC1とは、リニアフィルタリングを行うために、水平フィルタリングと垂直フィルタリングとを行い、その他の場合には、キュービック整列を通じてキュービックフィルタリングを行う。
図5は、図4に示された動き補償装置でのH.264/AVCのリニアフィルタ及びキュービックフィルタの動作シナリオを示す図である。図5を参照するに、図4に示された動き補償装置は、次のような動作シナリオによってH.264/AVCの輝度成分フィルタリングを行う。
DMA I/F 30は、マスターI/F 20から入力されたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリから参照画像の輝度成分を所定サイズのブロック単位でフェッチし、フェッチされた輝度成分のブロックを垂直フィルタ41に出力する。
垂直フィルタ41は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素のうち何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素の値を算出する。特に、垂直フィルタ41は、前記の垂直ラインに位置した整数画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記のブロックの動きベクトルが指示する1/2画素の値を算出し、算出された1/2画素の値を第1水平フィルタ42または第2水平フィルタ43に出力する。垂直フィルタ41は、前記のブロックの動きベクトルが整数画素を指示すれば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値をそのまま第1水平フィルタ42または第2水平フィルタ43に出力する。
例えば、動きベクトルが指示する画素の位置が図2Aに示されたhである場合ならば、垂直フィルタ41は、A、C、G、M、R、T位置の整数画素値を6個のタップに適用して、h1=(A−5*C+20*G+20*M−5*R+T)、h=Clip1Y((h1+16)>>5)を計算することによってh位置の1/2画素の値を算出する。
第1水平フィルタ42は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、垂直フィルタ41を経由してDMA I/F 30から入力された輝度成分のブロックを構成する整数画素のうち何れか一つの水平ラインに位置した整数画素の値から、この水平ラインに位置した整数画素の間に位置した1/2画素の値を算出する。特に、第1水平フィルタ42は、前記の水平ラインに位置した整数画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記のブロックの動きベクトルが指示する1/2画素の値を算出し、算出された1/2画素の値をキュービックフィルタ45に出力する。また、第1水平フィルタ42は、前記のブロックの動きベクトルが整数画素を指示すれば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値をそのままキュービックフィルタ45に出力する。また、第1水平フィルタ42は、垂直フィルタ41から入力された1/2画素の値をそのままキュービックフィルタ45に出力する。
例えば、動きベクトルが指示する画素の位置が図2に示されたbである場合ならば、第1水平フィルタ42は、E、F、G、H、I、J位置の整数画素値を6個のタップに適用してb1=(E−5*F+20*G+20*H−5*I+J)、b=Clip1Y((b1+16)>>5)を計算することによってb位置の1/2画素の値を算出する。
第2水平フィルタ43は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、垂直フィルタ41を経由してDMA I/F 30から入力された輝度成分のブロックを構成する整数画素のうち、前記の水平ラインでない他の水平ラインに位置した整数画素または1/2画素の値からこの水平ラインに位置した整数画素または1/2画素の間に位置した1/2画素の値を算出する。特に、第2水平フィルタ43は、この水平ラインに位置した整数画素または1/2画素の値を6個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記のブロックの動きベクトルが指示する1/2画素の値を算出し、算出された1/2画素の値をキュービックフィルタ45に出力する。また、第2水平フィルタ43は、前記のブロックの動きベクトルが整数画素を指示すれば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値をそのままキュービックフィルタ45に出力する。また、第2水平フィルタ43は、垂直フィルタ41から入力された1/2画素の値をそのままキュービックフィルタ45に出力する。
例えば、動きベクトルが指示する画素の位置が図2に示されたjである場合ならば、第2水平フィルタ43は、cc、dd、h1、m1、ee、ff位置の1/2画素値を6個のタップに適用して、j1=cc−5*dd+20*h1+20*m1−5*ee+ff、j=Clip1Y((j1+512)>>10)を計算することによってj位置の1/2画素の値を算出する。前記の式(2)のうち、f=(b+j+1)>>1のように、ある1/4画素の値を求めるためには、同時に二つの1/2画素の値が要求される場合がある。このような場合、b位置の1/2画素の値を算出する過程とj位置の1/2画素の値を算出する過程とを同時に処理するために、第1水平フィルタ42と第2水平フィルタ43とが別途に存在する。
キュービックフィルタ45は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、第1水平フィルタ42及び第2水平フィルタ43から入力された輝度成分のブロックの何れか一つのキュービックに位置した整数画素または1/2画素の値から、このキュービックに位置した2個の画素の間に位置した1/4画素の値を算出する。特に、キュービックフィルタ45は、前記のキュービック位置の2個の画素の値を、4個のタップのうち前記のキュービック位置に対応する2個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち前記のブロックの動きベクトルが指示する1/4画素の値を算出し、算出された1/4画素の値を第1メモリ50に出力する。また、キュービックフィルタ45は、第1水平フィルタ42または第2水平フィルタから入力された整数画素または1/2画素の値をそのまま第1メモリ50に出力する。
例えば、動きベクトルが指示する画素の位置が図2に示されたaである場合ならば、キュービックフィルタ45は、G位置の整数画素値及びb位置の1/2画素値を、4個のタップのうち前記キュービック位置に対応する2個のタップに適用して、a=(G+b+1)>>1を計算することによってa位置の1/4画素の値を算出する。
図5を参照するに、図4に示された動き補償装置は、次のような動作シナリオによって、H.264/AVCの色差成分Cbフィルタリングを行う。
DMA I/F 30は、マスターI/F 20から入力されたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリから参照画像の色差成分Cbを所定サイズのブロック単位でフェッチし、フェッチされた色差成分Cbのブロックをキュービック整列部44に出力する。
キュービック整列部44は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が色差成分Cbを表し、フィルタ情報がキュービックフィルタを表せば、マスターI/F 20から入力された動きベクトルが指示する任意の位置の画素の値を生成するために要求されるキュービック位置に、DMA I/F 30から入力された色差成分Cbのブロックを構成する整数画素の値のうち4個を整列し、整列された4個の整数画素の値をキュービックフィルタ45に出力する。
キュービックフィルタ45は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がH.264/AVCを表し、色情報が色差成分Cbを表し、フィルタ情報がキュービックフィルタを表せば、図3に示されたところによって、キュービック整列部44によって整列された4個の整数画素の値から、この整列された画素の間に位置した任意の位置の画素の値を算出する。特に、キュービックフィルタ45は、前記のキュービック位置の4個の画素の値を前記キュービック位置に対応する4個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち前記ブロックの動きベクトルが指示する1/4画素の値を算出し、算出された1/4画素の値を第1メモリ50に出力する。
例えば、動きベクトルが指示する画素の位置が図2Bに示された4つの矢印の収斂点である場合ならば、キュービックフィルタ45は、P1、P2、P3及びP4位置の整数画素値を4個のタップに適用して、P=((8−xFrc)*(8−yFrc)*P1+xFrc*(8−yFrc)*P2+(8−xFrc)*yFrc*P3+xFrc*yFrc*P4+32)>>6を計算することによって、任意の位置の画素の値を算出する。
図5を参照するに、DMA I/F 30、キュービック整列部44、キュービックフィルタ45のそれぞれは、色差成分Crに対しても、前記色差成分Cbの動作シナリオと同一に動作する。したがって、H.264/AVCの色差成分Cbフィルタリングの動作シナリオについての詳細な説明は省略する。
図6は、図4に示された動き補償装置でのVC1のリニアフィルタの動作シナリオを示す図である。図6を参照するに、図4に示された動き補償装置は、次のような動作シナリオによってVC1の輝度成分フィルタリングを行う。
DMA I/F 30は、マスターI/F 20から入力されたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリから参照画像の輝度成分を所定サイズのブロック単位でフェッチし、フェッチされた輝度成分のブロックを垂直フィルタ41に出力する。
垂直フィルタ41は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がV1を表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素のうち何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素または1/4画素の値を算出する。特に、垂直フィルタ41は、前記の垂直ラインに位置した整数画素の値を4個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記ブロックの動きベクトルが指示する1/2画素または1/4画素の値を算出し、算出された1/2画素または1/4画素の値を第1水平フィルタ42に出力する。垂直フィルタ41は、4タップフィルタの係数値を調整することによって1/2画素または1/4画素の値を算出しうる。また、垂直フィルタ41は、前記ブロックの動きベクトルが整数画素を指示すれば、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値をそのまま第1水平フィルタ42に出力する。
図5に示された実施形態では、垂直フィルタ41及び第1水平フィルタ42として6タップフィルタが使われた。6タップフィルタは、6個のタップのうち2個のタップが使われずに、ハードウェア構造の変更なしに4タップフィルタとして使われるため、図6に示された実施形態では、垂直フィルタ41及び第1水平フィルタ42は、4タップフィルタとなりうる。
第1水平フィルタ42は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がV1を表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表せば、垂直フィルタ41を経由してDMA I/F 30から入力された輝度成分のブロックを構成する整数画素のうち何れか一つの水平ラインに位置した整数画素値から、この水平ラインに位置した整数画素の間に位置した1/2画素または1/4画素の値を算出する。特に、第1水平フィルタ42は、前記水平ラインに位置した整数画素値を4個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記ブロックの動きベクトルが指示する1/2画素または1/4画素の値を算出し、算出された1/2画素または1/4画素の値をキュービックフィルタ45に出力する。また、第1水平フィルタ42は、前記ブロックの動きベクトルが整数画素を指示すれば、垂直フィルタ41を経由してDMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値をそのまま第1メモリ50に出力する。また、第1水平フィルタ42は、垂直フィルタ41から入力された1/2画素または1/4画素の値をそのまま第1メモリ50に出力する。
例えば、動きベクトルが指示する画素の位置が図2Cに示された黒点である場合ならば、第1水平フィルタ42は、P1、P2、P3及びP4位置の整数画素値を4個のタップに適用してP=(a*P1+b*P2+c*P3+d*P4+rc)>>sを計算することにより、図2Cに示された黒色点に該当する1/2画素または1/4画素の値を算出する。垂直フィルタ41の具体的な例は、示されていないが、水平フィルタリングが垂直フィルタリングに変わることを除いては、前記の通りである。また、図6を参照するに、DMA I/F 30、垂直フィルタ41、第2水平フィルタ43のそれぞれは、色差成分Cb、Crに対しても、前記輝度成分の動作シナリオと同一に動作する。
VC1のリニアフィルタとして参照画像の輝度成分に対する動きを補償する過程は、二つの水平フィルタが同時に使われねばならない場合がないため、何れか一つの水平フィルタのみが使われればよい。特に、本実施形態では、第1水平フィルタ42及び第2水平フィルタ43のうち、第1水平フィルタ42を使用するとしたが、当業者ならば、第2水平フィルタ43を使用することもあるということが分かる。
図7は、図4に示された動き補償装置でのMPEG4及びVC1のキュービックフィルタの動作シナリオを示す図である。図7を参照するに、図4に示された動き補償装置は、次のような動作シナリオによってMPEG4及びVC1の輝度成分フィルタリングを行う。
DMA I/F 30は、マスターI/F 20から入力されたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリから参照画像の色差成分Cbを所定サイズのブロック単位でフェッチし、フェッチされた輝度成分のブロックをキュービック整列部44に出力する。
キュービック整列部44は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がMPEG4またはVC1を表し、色情報が輝度成分を表し、フィルタ情報がキュービックフィルタを表せば、マスターI/F 20から入力された動きベクトルが指示する1/2画素または任意の位置の画素の値を生成するために要求されるキュービック位置に、DMA I/F 30から入力された輝度成分のブロックを構成する整数画素の値のうち4個を整列し、整列された4個の整数画素の値をキュービックフィルタ45に出力する。
キュービックフィルタ45は、マスターI/F 20から入力されたMCパラメータのうち、コーデック情報がMPEG4またはVC1を表し、色情報が輝度成分を表し、フィルタ情報がキュービックフィルタを表せば、図3に示されたところによって、キュービック整列部44によって整列された4個の整数画素の値から、この整列された画素の間に位置した1/2画素または任意の位置の画素の値を算出する。特に、キュービックフィルタ45は、前記キュービック位置の4個の画素の値を前記キュービック位置に対応する4個のタップに適用することにより、マスターI/F 20から入力されたMCパラメータのうち、前記ブロックの動きベクトルが指示する1/2画素または任意の位置の画素の値を算出し、算出された1/2画素または任意の位置の画素の値を第1メモリ50に出力する。
例えば、動きベクトルが指示する画素の位置が図2Dに示された黒点である場合ならば、キュービックフィルタ45は、P1、P2、P3及びP4位置の整数画素値を4個のタップに適用して、P=(P1+P2+1−rc)>>1、P=(P1+P3+1−rc)>>1、P=(P1+P2+P3+P4−rc)>>1を計算することにより、図2Dに示された黒色点に該当する画素の値を算出する。また、動きベクトルが指示する画素の位置が図2Eに示された4つの矢印の収斂点である場合ならば、キュービックフィルタ45は、P1、P2、P3及びP4位置の整数画素値を4個のタップに適用して、P=(a*P1+b*P2+c*P3+d*P4+rc)>>sを計算することにより、任意の位置の画素の値を算出する。
図7を参照するに、DMA I/F 30、キュービック整列部44、キュービックフィルタ45のそれぞれは、色差成分Cb、Crに対しても、前記輝度成分の動作シナリオと同一に動作する。
特に、本実施形態は、レジスターアレイ方式を採択している。第1水平フィルタ42または第2水平フィルタ43による水平フィルタリング及び垂直フィルタ41による垂直フィルタリングを何れも行う場合には、水平フィルタリングの結果値を垂直フィルタリングで使用するか、または垂直フィルタリングの結果値を水平フィルタリングで使用する。
図8は、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンを示す図である。図8を参照するに、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、H.264/AVCの場合に、何れか一つのブロックの何れか一つのラインを構成する画素の数が21個であることを考慮して、21個の8ビットレジスターで構成される。H.264/AVC以外の他のコーデックの場合には、何れか一つのブロックの何れか一つのラインを構成する画素の数が21個未満である。特に、H.264/AVCは、6タップフィルタを使用するため、このようなレジスターアレイチェーンが5個必要であり、相互直列に連結される。何れか一つのレジスターアレイチェーンの出力値は、これに連結された他のレジスターアレイチェーンの入力値となる。
図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、DMA I/F 30からクロックごとに8ビットに該当する一画素の値を入力され、入力された画素値をR0レジスターに保存すると同時に、21個のレジスターのそれぞれに現在保存された画素値を右側に一つずつシフトし、これにより、R20レジスターに保存された画素値を送出する。
特に、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、H.264/AVC、VC1のそれぞれの動きベクトルが指示する画素の位置が整数画素である場合、クロックごとに8×1
MUXを通じてブロックサイズによって、R3レジスターに保存された画素値、R7レジスターに保存された画素値、R15レジスターに保存された画素値のうち何れか一つを出力する。例えば、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、動き補償エンジン40によって4x4ブロック単位で動き補償がなされる場合には、R3レジスターに保存された画素値を出力し、8×8ブロック単位で動き補償がなされる場合には、R7レジスターに保存された画素値を出力し、16×16ブロック単位で動き補償がなされる場合には、R15レジスターに保存された画素値を出力する。
もし、H.264/AVCの動きベクトルが指示する画素の位置が整数画素ではない場合、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、ブロックサイズによってR8レジスターに保存された画素値、R12レジスターに保存された画素値、R20レジスターに保存された画素値のうち何れか一つを出力する。例えば、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、動き補償エンジン40によって4×4ブロック単位で動き補償がなされる場合には、R8レジスターに保存された画素値を出力し、8×8ブロック単位で動き補償がなされる場合には、R12レジスターに保存された画素値を出力し、16×16ブロック単位で動き補償がなされる場合には、R20レジスターに保存された画素値を出力する。
もし、VC1コーデックで動きベクトルが指示する画素の位置が整数画素ではない場合、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、ブロックサイズによって、R10レジスターの出力値、R18レジスターの出力値のうち何れか一つを出力する。例えば、図4に示された垂直フィルタ41の内部のレジスターアレイチェーンは、動き補償エンジン40によって8×8ブロック単位で動き補償がなされる場合には、R10レジスターに保存された画素値を出力し、16×16ブロック単位で動き補償がなされる場合には、R20レジスターに保存された画素値を出力する。VC1の場合には、4×4ブロックモードを支援しない。
図9は、図4に示された垂直フィルタ41の内部の6タップフィルタの構成図である。図9を参照するに、図4に示された垂直フィルタ41の内部の6タップフィルタは、図8に示されたレジスターアレイチェーンの出力値を入力される。すなわち、図4に示された垂直フィルタ41の内部の6タップフィルタは、図8に示されたレジスターアレイチェーンから6個のクロックの間に出力されて累積された6個の画素値、すなわち、レジスター1〜5に保存された5個の整数画素値及び現在入力された一つの画素値から、この画素の間に位置した1/2画素の値を算出する。一つのレジスターアレイチェーンからの出力値は、6タップフィルタの一つのレジスターに保存されるため、6タップフィルタの5個のレジスターに対応してレジスターアレイチェーンが5個が必要である。すなわち、図9に示された6タップフィルタは、式(1)に示された演算、例えば、b1=(E−5*F+20*G+20*H−5*I+J)を計算するために、9個のレジスター、4個の乗算器、5個の加算器を備えている。図9に示された最も左側の加算器の二つの入力端子と4個の乗算器のそれぞれの入力端子とが6個のタップに該当する。
図10は、図4に示された動き補償装置の内部でのデータ処理についてのタイミング図である。図10を参照するに、外部メモリに対して参照画像に該当する32ビット単位のデータを伝送することを要請した後に、このデータを受信するために待機するデータレーテンシ区間と外部メモリから32ビット単位のデータを受信するデータ伝達区間との間、DMA I/F 30、垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、及びキュービックフィルタ45は、パイプライン形態でそのそれぞれの動作を行う。一般的に、データレーテンシ区間及びデータ伝達区間が非常に長いため、垂直フィルタ41、第1水平フィルタ42、第2水平フィルタ43、及びキュービックフィルタ45のフィルタリング動作がこの区間に隠されて行われる。これにより、動き補償をさらに高速で処理しうる。
図11は、本発明の望ましい一実施形態によるマルチコーデック支援動き補償方法のフローチャートである。図11を参照するに、本実施形態によるマルチコーデック支援動き補償方法は、図4に示されたマルチコーデック支援動き補償装置で時系列的に処理されるステップで構成される。したがって、以下省略された内容であっても、図11に示されたマルチコーデック支援動き補償装置について前述した内容は、本実施形態によるマルチコーデック支援動き補償方法にも適用される。
ステップ100で、マルチコーデック支援動き補償装置は、システムバスを経由して外部符号化装置から、参照画像と現在画像との差に該当するレジデューデータ及び動き補償のために必要なパラメータのMCパラメータをフェッチする。
ステップ200で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたレジデューデータを保存する。
ステップ300で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、現在画像のブロックと参照画像の対応ブロックとの間の変位を表す動きベクトルを参照して、システムバスを経由して外部メモリから参照画像と現在画像との間に共有される参照画像の32ビット単位のデータをフェッチする。
ステップ400で、マルチコーデック支援動き補償装置は、ステップ300でフェッチされた32ビット単位のデータに対して、8ビットアンパッキング及び動きベクトルによるパッディングを行う。
ステップ500で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、複数のコーデックのうち何れか一つを表すコーデック情報、複数の色成分のうち何れか一つを表す色情報、及び複数のフィルタのうち何れか一つを表すフィルタ情報によって、選択的にステップ400での処理結果に該当する参照画像の何れか一つのブロックの何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素の値を算出する。
さらに詳細に説明すれば、ステップ500で、マルチコーデック支援動き補償装置は、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表す場合、またはコーデック情報がVC1を表し、色情報が輝度成分または色差成分を表し、フィルタ情報がリニアフィルタを表す場合に、ステップ400での処理結果に該当する参照画像の何れか一つのブロックの何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素の値を算出する。残りの場合については、前記のようなステップ500での垂直フィルタリングは、行われない。
ステップ600で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的にステップ400での処理結果に該当する参照画像の何れか一つのブロックの何れか一つの水平ラインに位置した整数画素の値から、この水平ラインに位置した整数画素の間に位置した1/2画素または1/4画素の値を算出する。
さらに詳細に説明すれば、ステップ600で、マルチコーデック支援動き補償装置は、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表す場合、またはコーデック情報がVC1を表し、色情報が輝度成分または色差成分を表し、フィルタ情報がリニアフィルタを表す場合に、ステップ400での処理結果に該当する参照画像の何れか一つのブロックの何れか一つの垂直ラインに位置した整数画素の値から、この垂直ラインに位置した整数画素の間に位置した1/2画素または1/4画素の値を算出する。残りの場合については、前記のようなステップ600での垂直フィルタリングは、行われない。
ステップ700で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的にステップ600で処理される水平ラインでない他の水平ラインに位置した整数画素または1/2画素の値から、この水平ラインに位置した整数画素または1/2画素の間に位置した1/2画素の値を算出する。
さらに詳細に説明すると、ステップ700で、マルチコーデック支援動き補償装置は、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表す場合に、ステップ600で処理される水平ラインでない他の水平ラインに位置した整数画素または1/2画素の値から、この水平ラインに位置した整数画素または1/2画素の間に位置した1/2画素の値を算出する。残りの場合については、前記のようなステップ700での垂直フィルタリングは、行われない。
ステップ800で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に輝度成分のブロックの何れか一つのキュービックに位置した整数画素またはステップ600及びステップ700で算出された1/2画素の値から、このキュービックに位置した2個の画素の間に位置した1/4画素の値を算出する。
さらに詳細に説明すると、ステップ800で、マルチコーデック支援動き補償装置は、コーデック情報がH.264/AVCを表し、色情報が輝度成分を表し、フィルタ情報がリニアフィルタを表す場合に、輝度成分のブロックの何れか一つのキュービックに位置した整数画素またはステップ600及びステップ700で算出された1/2画素の値から、このキュービックに位置した2個の画素の間に位置した1/4画素の値を算出する。残りの場合については、前記のようなステップ800でのキュービックフィルタリングは行われない。
ステップ900で、マルチコーデック支援動き補償装置は、ステップ100でフェッチされたMCパラメータのうち、コーデック情報、色情報、及びフィルタ情報によって、選択的に前記ブロックの動きベクトルが指示する1/2画素、1/4画素、または任意の位置の画素の値を生成するために要求されるキュービック位置に、ステップ400での処理結果に該当する整数画素の値を整列する。
さらに詳細に説明すると、ステップ900で、マルチコーデック支援動き補償装置は、コーデック情報がH.264/AVCを表し、色情報が色差成分を表し、フィルタ情報がキュービックフィルタを表す場合、コーデック情報がMPEG4を表し、色情報が輝度成分または色差成分を表し、フィルタ情報がキュービックフィルタを表す場合、またはコーデック情報がVC1を表し、色情報が輝度成分または色差成分を表し、フィルタ情報がキュービックフィルタを表す場合に、前記ブロックの動きベクトルが指示する1/2画素、1/4画素、または任意の位置の画素の値を生成するために要求されるキュービック位置に、ステップ400での処理結果に該当する整数画素の値を整列する。残りの場合については、前記のようなステップ900でのキュービック整列は行われない。
ステップ1000で、マルチコーデック支援動き補償装置は、図3に示されたところによって、ステップ900で整列された4個の整数画素の値から、この整列された画素の間に位置した1/2画素、1/4画素、または任意の位置の画素の値を算出する。
ステップ1100で、マルチコーデック支援動き補償装置は、ステップ300からステップ1000までの過程が参照画像全体に対して完了されたか否かを確認し、その結果、完了されたならば、ステップ1200に進み、完了されていなければ、ステップ300に戻る。
ステップ1200で、マルチコーデック支援動き補償装置は、ステップ300からステップ1000までの過程によって生成された動き補償データを保存する。
ステップ1300で、マルチコーデック支援動き補償装置は、ステップ1200で保存された動き補償されたデータとステップ200で保存されたレジデューデータとを合算することによって現在画像を復元する。
一方、前述した本発明の実施形態は、コンピュータで実行できるプログラムで作成可能であり、コンピュータで読み取り可能な記録媒体を利用して、前記プログラムを動作させる汎用デジタルコンピュータで具現される。また、前述した本発明の実施形態で使われたデータの構造は、コンピュータで読み取り可能な記録媒体に色々な手段を通じて記録される。前記コンピュータで読み取り可能な記録媒体は、マグネチック保存媒体(例えば、ROM(リードオンリメモリ)、フロッピー(登録商標)ディスク、ハードディスクなど)、光学的判読媒体(例えば、CD−ROM、DVDなど)のような保存媒体を含む。
以上、本発明についてその望ましい実施形態を中心に説明した。当業者は、本発明が本発明の本質的な特性から逸脱しない範囲で変形された形態で具現されるということが分かるであろう。したがって、開示された実施形態は、限定的な観点でなく、説明的な観点で考慮されねばならない。本発明の範囲は、前述した説明でなく、特許請求の範囲に現れており、それと同等な範囲内にある全ての差異点は、本発明に含まれていると解釈されねばならない。