近年、画像情報の冗長性を利用して、離散コサイン変換等の直交変換及び動き補償により画像を圧縮するMPEG等の方式に準拠した装置が、放送局などにおける情報配信、及び、一般家庭等における情報受信の双方において普及しつつある。
特に、MPEG2(ISO/IEC 13818-2)は、汎用画像符号化方式として定義されており、飛び越し走査画像及び順次走査画像の双方に、また、標準解像度画像及び高精細画像の双方に、それぞれ対応しているため、プロフェッショナル用途及びコンシューマー用途のアプリケーションに広く用いられている。具体的に、MPEG2では、例えば720×480画素による標準解像度・飛び越し操作方式の画像データを4〜8[Mbps]のビットレートに圧縮し、また、1920×1088画素による高解像度・飛び越し操作方式の画像データを18〜22[Mbps]のビットレートに圧縮して、高画質且つ高圧縮率を実現することができる。
しかしながらMPEG2は、放送用に適合した高画質符号化方式であり、MPEG1より符号量の少ない高圧縮率の符号化方式に対応していない。これに対して、近年の携帯端末の普及によってMPEG1よりも符号量の少ない高圧縮率の符号化方式のニーズの高まりが予測される。このためMPEG4(ISO/IEC 14496-2)による符号化方式の規格が1998年12月に国際標準規格として承認された。
一方では、テレビ会議用の画像符号化を当初の目的としたH.264(ITU-T/Q6/16 VCEG)の規格化が進んでいる。H.264は、MPEG2やMPEG4等の従来の符号化方式と比べて符号化・復号処理により多くの演算量が要求される。しかし、H.264では、MPEG2やMPEG4に比べてより高い符号化効率を実現できることが知られている。また、MPEG4の活動の一環として、H.264でサポートされていない機能をH.264に取り入れ、より高い符号化効率を実現する符号化方式の標準化がJVT(Joint Video Team)で行われている。2003年3月には、H.264/AVC(Advanced Video Coding)が国際標準規格として認められた。この規格は、MPEG−4 Part10とも称される。以降この規格を便宜上AVC規格と称する。また、非特許文献1には、この規格に基づく処理内容が記載されている。
AVC規格に準拠した符号化方式の具体例の画像情報符号化装置について説明する。図15は、離散コサイン変換若しくはカルーネン・レーベ変換等の直交変換と動き補償により画像圧縮を実現する画像情報符号化装置100のブロック図である。図15に示すように画像情報符号化装置100は、A/D(Analog/digital)変換器101と、画像並び換えバッファ102と、加算器103と、直交変換部104と、量子化部105と、可逆符号化部106と、蓄積バッファ107と、逆量子化部108と、逆直交変換部109と、デブロックフィルタ110と、フレームメモリ111と、イントラ予測部112と、動き予測・補償部113と、レート制御部114とにより構成されている。
A/D変換器101は、入力された画像信号をデジタル信号に変換する。画像並び換えバッファ102は、この画像情報符号化装置100が出力する画像圧縮情報GOP(Group of Picture)構造に応じてフレームを並び替える。ここで、画像並び換えバッファ102において、イントラ(画面内)符号化を行う画像は、そのフレーム全体の画像情報が直交変換器104に供給される。直交変換器104は、離散コサイン変換又はカルーネン・レーベ変換等の直交変換を画像情報に施して、得られた変換係数を量子化部105に供給する。量子化部105は、直交変換部104から供給された変換係数に対して量子化処理を施す。
可逆符号化部106は、量子化された変換係数に対して可変長符号化・算術符号化等の可逆符号化を施し、符号化された変換係数を蓄積バッファ107に供給して蓄積させる。この符号化された変換係数は画像圧縮情報として出力される。
ここで、量子化部105の挙動は、レート制御部114によって制御される。また、量子化部105は、量子化後の変換係数を逆量子化部108に供給する。逆量子化部108は、量子化された変換係数を逆量子化して逆直交変換部109に供給する。逆直交変換部109は、逆量子化された変換係数に逆直交変換処理を施して復号画像情報を生成してデブロックフィルタ110に供給する。デブロックフィルタ110は、復号画像情報からブロック歪みを除去し、フレームメモリ111に供給して蓄積させる。
一方、画像並び換えバッファ102は、インター(画面間)符号化が行われる画像に関する参照画像情報を生成する。動き予測・補償部113は、この参照画像情報を加算器103に供給する。加算器103は、参照画像情報を当該画像情報との差分信号に変換する。また、動き補償・予測部113は、同時に動きベクトル情報を可逆符号化部106に供給する。
可逆符号化部106は、この動きベクトル情報に対して可変長符号化または算術符号化などの可逆符号化処理を施し、画像圧縮情報のヘッダ部に挿入される情報を形成する。なお、その他の処理についてはイントラ符号化処理が施される画像圧縮情報と同様であるためその説明を省略する。
続いて、画像情報符号化装置100が出力する圧縮画像情報を復号する画像情報複号処理装置200の概略構成を図16に示す。図16に示すように画像情報復号処理装置200は、蓄積バッファ201と、可逆復号化部202と、逆量子化部203と、逆直交変換部204と、加算器205と、デブロックフィルタ206と、画面並べ替えバッファ207と、D/A変換器208と、イントラ予測部209と、フレームメモリ210と、動き予測・補償部211とにより構成されている。
蓄積バッファ201は、入力された画像圧縮情報を一時的に記憶した後に可逆復号化部202に供給する。可逆復号化部202は、画像圧縮情報の形式に基づいて画像圧縮情報に可変長復号又は算術復号などの処理を施し、量子化された変換係数を逆量子化部203に供給する。また、可逆復号化部202は、当該フレームがイントラ符号化されたものである場合に画像圧縮情報のヘッダ部に格納されたイントラ予測情報も復号してその情報をイントラ予測部209に供給し、当該フレームがインター符号化されたものである場合に画像圧縮情報のヘッダ部に格納された動きベクトル情報も復号してその情報を動き予測・補償部211に供給する。
逆量子化部203は、可逆復号化部202から供給された変換係数に逆量子化処理を施し、その変換係数を逆直交変換部204に供給する。逆直交変換部204は、画像圧縮情報の形式に基づいて係数変換に逆離散コサイン変換又は逆カルーネン・レーベ変換などの逆直交変換を施す。
加算器205は、逆直交変換部204から供給される変換係数に、イントラ予測部209から出力される予測画像による予測値、若しくは、動き予測・補償部211から出力される予測画像による予測値を加算してデブロックフィルタ206に供給する。
デブロックフィルタ206は、加算器205から供給される画像情報のブロック歪みを除去して画面並べ替えバッファ207へ供給する。画面並べ替えバッファ207は、デブロックフィルタ206から供給される画像データのフレームをGOP構造に応じて並べ替えてD/A変換器208に供給する。D/A変換器208は、画面並べ替えバッファ207から供給されるデータをアナログ信号に変換して出力する。
フレームメモリ210は、デブロックフィルタ206から出力される画像データを参照画像情報として記憶する。動き予測・補償部211は、可逆復号化部202から通知される動きベクトル情報に応じた参照画像情報をフレームメモリ210から読み出し、その参照画像情報に動き補償処理を施して予測画像による予測値を生成し、この予測値を加算器205に供給する。また、イントラ予測部209は、可逆復号化部202から通知されるイントラ予測情報に応じた参照画像情報をフレームメモリ210から読み出し、その参照画像情報にイントラ予測処理を施して予測画像による予測値を生成し、この予測値を加算器205に供給する。
AVCなどの符号化規格では、1つの画面(フレーム)内を所定画素数のブロックに分割し、当該ブロック単位で符号化処理及び復号処理が行われる。この画素ブロックのことをマクロブロックという。
続いて、イントラ予測処理について詳述する。
上述したAVC規格による符号化・復号処理において、画素情報の輝度成分に関してはHigh Profileを除くと、4×4画素ブロック単位に予測を行うイントラ4×4予測モードと16×16画素ブロック(マクロブロック)単位で予測を行うイントラ16×16予測モードとの2つの予測方式が用いられている。
一方、色差成分に関しては、Cb,Crそれぞれの8×8ブロック単位で予測を行う。この予測符号化処理は、イントラ16×16予測モードと同様であって、この予測モードを8×8ブロック単位に変更したものである。
これらの予測モードのうち、イントラ4×4予測モードでは、図17に示すように、予測値を生成する4×4画素a〜pの予測対象ブロックに対して、近傍13個の画素A〜Mの一部が予測値の生成に供する予測画素に設定され、この予測画素により予測値が生成される。ここで、予測画素A〜Mは、予測対象ブロックの走査開始端側で垂直方向に隣接する4個の画素A〜Dと、この4個の画素A〜Dの走査終了端側の画素Dに続く4個の画素E〜Hと、予測対象ブロックの走査開始端側で水平方向に隣接する4個の画素I〜Lと、この水平方向に隣接する4個の画素I〜Lのうち走査開始端側の画素Iの上方に位置する画素Mとにより形成される。
イントラ4×4予測モードでは、これら13個の予測画素A〜Mと、予測値の生成に供する4×4個の画素a〜pとの相対的な関係によって、図18及び図19に示すように、モード0〜モード8の予測モードが設定されている。例えばモード0及びモード1では、予測値の生成に使用する13個の予測画素A〜Mのうち、それぞれ垂直方向及び水平方向に隣接する予測画素A〜D及びI〜Lにより予測値を生成する。
より具体的には、図20(A)に示すようにモード0は、垂直方向に隣接する予測画素A〜Dにより予測値を生成するモードである。また、図20(B)に示すようにモード1は、水平方向に隣接する予測画素I〜Lより予測値を生成するモードである。また、図20(C)に示すようにモード2は、13個の予測画素A〜Mのうち、このブロックの垂直方向及び水平方向に隣接する画素A〜D及びI〜Lにより予測画を生成するモードである。また、図20(D)に示すようにモード3は、13個の予測画素A〜Mのうち、水平方向に連続する画素A〜Hにより予測値を生成するモードである。また、図20(E)に示すようにモード4は、13個の予測画素A〜Mのうち4×4個の画素a〜pによるブロックに隣接する画素A〜D・画素I〜Mによって予測値を生成するモードである。また、図20(F)に示すようにモード5は、13個の予測画素A〜Mのうち、4×4個の画素a〜pによるブロックに隣接する画素A〜D・画素I〜K・画素Mにより予測値を生成するモードである。また、図20(G)に示すようにモード6は、13個の予測画素A〜Mのうち、4×4個の画素a〜pによるブロックに隣接する画素A〜C・画素I〜Mにより予測値を生成するモードである。また、図20(H)に示すようにモード7は、13個の予測画素A〜Mのうち、4×4個の画素a〜pによるブロックの上方に隣接する4個の画素A〜Dと、この4個の画素A〜Dに続く4個の画素E〜Gとにより予測値を生成するモードである。さらに、図20(I)に示すようにモード8は、13個の予測画素A〜Mのうち4×4個の画素によるブロックの左方に隣接する4個の画素I〜Lにより予測値を生成するモードである。
これに対して、イントラ16×16予測モードでは、図21に示すように、予測値を生成する16×16個の画素P(0,15)〜P(15,15)によるブロックBに対して、このブロックBの上方に隣接する画素P(0,−1)〜P(15,−1)及びこのブロックBの左方に隣接する画素P(−1,0)〜P(−1,15)が予測画素に設定され、これらの予測画素により予測値が生成される。
また、イントラ16×16予測モードでは、図22に示すように、モード0〜モード3の予測モードが設定されている。モード0では、図23(A)に示すように、ブロックBの上方に隣接する各画素P(0,−1)〜P(15,−1)の画素値によりブロックBの垂直方向に連続する各画素の予測値が生成される。また、モード1では、図23(B)に示すように、ブロックBの左方に隣接する各画素P(−1,0)〜P(−1,15)の画素値によりブロックBの水平方向に連続する各画素の予測値が生成される。また、モード2では、図23(C)に示すように、画素P(0,−1)〜P(15,−1)及びP(−1,0)〜P(−1,15)による画素値の平均値によりブロックBを構成する各画素の予測値が生成される。また、モード3では、図23(D)に示すように斜め方向の演算処理により各画素の予測値が生成される。
なお、8×8画素のマクロブロックが処理対象となる色差信号では、ブロックサイズが輝度信号と異なるが処理工程が同様であるから、その説明を省略する。
以上説明した画像情報符号処理装置100及び画像情報復号処理装置200については、例えば特許文献1などに記載されている。
ところで、上述したようにイントラ予測を行うには、予測対象のマクロブロックの周辺画素が必要なので、これら周辺画素の属するマクロブロックの画像情報も必要となる。
このようなイントラ予測を専用ハードウェアで実装する一般的なイントラ予測ハードウェア処理系300は、図24(A)に示すように、参照画像情報が記憶されているメインメモリ301と、イントラ予測を行うイントラ予測回路302とから構成される。また、イントラ予測回路302には、SRAM(Static Random Access Memory)などのローカルメモリ303が内蔵されている。
例えば、図24(B)に示すようにマクロブロックAの右方及び下方の画素列は、マクロブロックB,C,Dの周辺画素としてイントラ予測を行う場合に必要となる。したがって、マクロブロックB,C,Dのイントラ予測を高速で行うため、イントラハードウェア処理系300では、マクロブロックAのうちイントラ予測に必要となる2つの画素列のみをローカルメモリ303に保持する。
「Draft Errata List with Revision-Marked Corrections for H.264/AVC」, JVT-1050, Thomas Wiegand et al., Joint Video Team (JVT) of ISO/IEC MPEG & ITU-T VCEG, 2003
特開2006―94081号公報
以下、本発明を実施するための最良の形態について、図面を参照しながら詳細に説明する。なお、本発明は、以下の実施形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更が可能であることは勿論である。
(1)画像情報復号処理装置の構成及び動作
まず、本実施の形態における画像情報復号処理装置の概略構成を図1に示す。図1に示すように、画像情報復号処理装置10は、蓄積バッファ11と、可逆復号化部12と、逆量子化部13と、逆直交変換部14と、加算器15と、デブロックフィルタ16と、画面並べ替えバッファ17と、D/A変換器18と、イントラ予測部19と、フレームメモリ20と、動き・補償部21とにより構成されている。
蓄積バッファ11は、入力された画像圧縮情報を一時的に記憶した後に可逆復号化部12に供給する。可逆復号化部12は、画像圧縮情報の形式に基づいて画像圧縮情報に可変長復号又は算術復号などの処理を施し、量子化された変換係数を逆量子化部13に供給する。また、可逆復号化部12は、当該フレームがイントラ符号化されたものである場合に画像圧縮情報のヘッダ部に格納されたイントラ予測情報をも復号してその情報をイントラ予測部19に供給し、当該フレームがインター符号化されたものである場合に画像圧縮情報のヘッダ部に格納された動きベクトル情報をも復号してその情報を動き予測・補償部21に供給する。
逆量子化部13は、可逆復号化部12から供給された変換係数に逆量子化処理を施し、その変換係数を逆直交変換部14に供給する。逆直交変換部14は、画像圧縮情報の形式に基づいて係数変換に逆離散コサイン変換又は逆カルーネン・レーベ変換などの逆直交変換を施す。
加算器15は、逆直交変換部14から供給される変換係数に、イントラ予測部19から出力される予測画像による予測値、若しくは、動き予測・補償部21から出力される予測画像による予測値を加算してデブロックフィルタ16に供給する。
デブロックフィルタ16は、加算器15から供給される画像情報のブロック歪みを除去して画面並べ替えバッファ17へ供給する。画面並べ替えバッファ17は、デブロックフィルタ16から供給される画像データのフレームをGOP(Group Of Picture)構造に応じて並べ替えてD/A変換器18に供給する。D/A変換器18は、画面並べ替えバッファ17から供給されるデータをアナログ信号に変換して出力する。
フレームメモリ20は、デブロックフィルタ16から出力される画像データを参照画像情報として記憶する。動き予測・補償部21は、可逆復号化部12から通知される動きベクトル情報に応じた参照画像情報をフレームメモリ20から読み出し、その参照画像情報に動き補償処理を施して予測画像による予測値を生成し、この予測値を加算器15に供給する。また、イントラ予測部19は、可逆復号化部12から通知されるイントラ予測情報に応じた参照画像情報をフレームメモリ20から読み出し、その参照画像情報にイントラ予測処理を施して予測画像による予測値を生成し、この予測値を加算器15に供給する。なお、フレームメモリ20が記憶する参照画像情報は、1つの画面を所定数のブロックに分割した複数画素から構成されるマクロブロック単位で管理されている。
(2)画像情報復号処理装置における本発明の適用部分
以上のように、本実施形態に係る画像情報復号処理装置10の概略構成について説明したが、以下ではイントラ予測部19におけるフレームメモリ20に記憶されている参照画像情報の読み出し処理に注目して詳細に説明する。なお、以下では、フレームメモリ20に記憶される参照画像情報としてのマクロブロックを参照マクロブロックと呼び、イントラ予測部19によって予測画像の予測値が出力されるマクロブロックをカレントマクロブロックと呼ぶ。また、イントラ予測情報が含まれているマクロブロックをイントラマクロブロックと呼び、動きベクトル情報が含まれているマクロブロックをインターマクロブロックと呼ぶ。
(2−1)第1のソフトウェア処理系
まず、イントラ予測部19が行うイントラ予測処理をソフトウェアで実装する第1のソフトウェア処理系30の構成を図2に示す。
第1のソフトウェア処理系30は、図2に示すように、CPU31と、L1キャッシュ32と、L2キャッシュ33と、メインメモリ34とから構成されている。
CPU31は、イントラ予測処理以外に、画像復号処理装置1による復号処理全体を行う。また、CPU31は、L1キャッシュ32とL2キャッシュ33とからなる2段階のキャッシュ構造を有している。
メインメモリ34は、上述した参照画像情報を記憶するフレームメモリ20の役割を果たすとともに、復号処理を行うために必要なデータを一時的に保持する汎用メモリである。
以上のような構成からなるソフトウェア処理系30において、参照マクロブロックをCPU31が読み出す場合、CPU31は、まずL1キャッシュ32にアクセスし、L1キャッシュ32にその参照マクロブロックが存在しなければL2キャッシュ33にアクセスし、さらにその参照マクロブロックがL2キャッシュ33にも存在しなければ最終的にメインメモリ34にアクセスする。したがって、CPU31が必要なデータを高速に読み出すためには、このようなデータがメインメモリ34よりもL2キャッシュ33上に記憶されている必要がある。
イントラ予測処理に必要なデータとしては、図3に示すように、カレントマクロブロックに対して左横・左斜上・上・右斜上の周辺マクロブロックを参照マクロブロックとして参照する必要がある。
但し、これら周辺マクロブロックの中にインターマクロブロックが存在する場合には、カレントマクロブロック内に記憶されているフラグconstrained_intra_flagの値に応じて、このインターマクロブロックを参照してカレントマクロブロックのイントラ予測処理を行うか否かが決まる。例えば、フラグconstrained_intra_flagが1の場合には、インターマクロブロックを参照しない。また、周辺マクロブロックとカレントマクロブロックとが別スライスに属する場合には、このような周辺マクロブロックをイントラ予測処理で参照しない。
また、このような符号化規格では、参照マクロブロックの全ての画素を用いて予測対象のマクロブロックの予測値を生成するものではない。換言すれば、参照マクロブロックの一部の画素がイントラ予測処理に使用される。本実施形態では、参照マクロブロックと区別するために、このような画素を参照画素データと呼ぶ。
具体的に、AVC規格では様々なサイズのマクロブロックで1画面を分割するが、本実施形態では具体例として、輝度成分Yのマクロブロックサイズを図4(A)に示すように16×16画素サイズとし、色差成分Cb,Crのマクロブロックサイズを図4(B)に示すよう8×8画素サイズとする。
ここで、輝度成分Yに関しては、参照マクロブロックのうち、下端水平ラインY_Hの16画素と右端垂直ラインY_Vの16画素とが参照画素データとしてイントラ予測処理に用いられる。色差成分Cb,Crに関してはCb成分とCr成分のそれぞれにおいて、参照マクロブロックのうち下端垂直ラインCb_V,Cr_Vの8画素と右端水平ラインCb_H,Cr_Hの8画素とが参照画素データとしてイントラ処理に用いられる。
例えば、1画素当たりのデータサイズが1バイトとすると、輝度成分Yが32バイトで、色差成分Cb,Crがそれぞれ16バイトで、これらを合計した64バイトの画素データがイントラ予測の際に1つの参照マクロブロックから最低限読み出す必要のあるデータとなる。
ここで、輝度成分Yにおける16×16画素のマクロブロックにおいて、図4(A)に示すように、下端水平ラインY_Hと右端垂直ラインY_Vとの両方に属する重複画素Y_Dが1つ存在する。また、色差成分Cbにおける8×8画素のマクロブロックにおいて、下端水平ラインCb_Hと右端垂直ラインCb_Vとの両方に属する重複画素Cb_Dが1つ存在する。同様に、色差成分Crにおける8×8画素のマクロブロックにおいて、下端水平ラインCr_Hと右端垂直ラインCr_Vとの両方に属する重複画素Cr_Dが1つ存在する。これら3つの重複画素Y_D,Cb_D,Cr_Dについては、それぞれ下端水平ライン及び右端垂直ラインで個々の記憶領域を割り当てて管理する必要がない。よって、輝度成分Yに関する参照画素データでは、下端水平ラインY_Hを重複画素Y_Dを除いた15画素とする。同様にして、色差成分Cb、Crに関する参照画素データでは、下端水平ラインCb_H,Cr_Hを7画素とする。このようにして、イントラ予測の際に1つの参照マクロブロックから読み出させるのに最低限必要となる画素データは、輝度成分が31バイトとし、色差成分が30バイトとして合計で61バイトとなる。
ソフトウェア処理系30では、マクロブロック毎に、このような合計61バイトのデータを参照画素データとして、L2キャッシュ33内の記憶領域に管理する。
このようにイントラ予測に必要な画素のみをL2キャッシュ33の記憶領域で記憶させることにより、L2キャッシュの記憶容量を削減することができる。
ここで、L2キャッシュ33の記憶領域が2のべき乗単位でデータサイズを管理するので、合計61バイトの周辺画素データをL2キャッシュ33で管理する場合には、キャッシュの構造上、図5に示すように、最低限64バイトの記憶領域が割り当てられ、1マクロブロック当たりの参照画素データに3バイト分のマージンデータ領域が存在することとなる。第1のソフトウェア処理系20では、このような3バイト分のマージンデータ領域に、イントラ予測の際に当該周辺画素データをCPU21へ読み出す必要があるか否かを判断するための情報を割り当てる。
具体的にマージンデータ領域には、当該マクロブロックがイントラマクロブロック又はインターマクロブロックのどちらであるかを示す1ビットのイントラ/インターフラグと、当該マクロブロックがフィールド構造又はフレーム構造のどちらであるかを示す1ビットのフィールド/フレームフラグと、当該マクロブロックがスキップマクロブロックであるか否かを示す1ビットのスキップフラグと、フレーム内における当該マクロブロックのスライス位置を示す2バイトのスライスポインタとが格納される。
また、これらのフラグ情報は、周辺画素データに先立ってCPU31に読み出される。このため、L1キャッシュ32には、参照画素データ内におけるフラグ情報のアドレス位置が記憶されているものとする。
なお、図5では、これら3つのフラグを輝度成分Yの重複画素データY_Dに相当するマージンデータ領域に、2バイトのスライスポインタを色差成分Cb,Crの重複画素データCb_D,Cr_Dに相当するマージンデータ領域にそれぞれ格納されるが、このような場合に限定せず所望とするマージンデータ領域に種々の情報を割り当てるようにしてもよい。
また、AVC規格にはAFF(Adaptive flame field)という適応型の符号化処理を行うモードがあり、このようなモードで符号化処理が施されたマクロブロックに対しては、2つのマクロブロックを1組としてイントラ予測処理が行われる。さらに、このようなマクロブロックがAFF形式の場合には、1組のマクロブロックがフィールド構造又はフレーム構造の何れかに応じてこのマクロブロック内における参照画素データの位置が異なる。
図6に示すように、予測対象の1組のマクロブロック(以下カレントペアーと呼ぶ。)の上方に、このカレントペアーに参照される1組のマクロブロック(以下参照ペアーと呼ぶ。)が位置するものとし、参照マクロブロック内における参照画素データの位置を次に示す4つの条件に場合分けて説明する。
ここで、図6に示す各マクロブロックは、輝度成分Yに関するものであって、そのサイズが16×16画素とする。また、AFF形式における1組当たり2つのマクロブロックのうち、上部にあたるものをトップマクロブロックとし、下部にあたるものをボトムマクロブロックと呼ぶ。
図6(A)は、カレントペアー41及び参照ペアー42がともにフレーム構造の場合に、カレントペアー41を構成する2つのマクロブロックのイントラ予測に必要となる参照画素データを示したものである。カレントペアー41におけるトップマクロブロック41aのイントラ予測に必要な参照画素データは、参照ペアー42のボトムマクロブロック42bにおける16行目の水平ラインの画素列である。また、カレントペアー41におけるボトムマクロブロック41bのイントラ予測に必要な参照画素データは、カレントペアー41のトップマクロブロック41aにおける16行目の水平ラインの画素列である。
図6(B)は、カレントペアー51及び参照ペアー52がともにフィールド構造の場合に、カレントペアー51を構成する2つのマクロブロックのイントラ予測に必要となる参照画素データを示したものである。カレントペアー51におけるトップマクロブロック51aのイントラ予測を行うのに必要な参照画素データは、参照ペアー52のトップマクロブロック52aにおける16行目の水平ラインの画素列である。また、カレントペアー51におけるボトムマクロブロック51bのイントラ予測を行うのに必要な参照画素データは、参照ペアー52のボトムマクロブロック52bにおける16行目の水平ラインの画素列である。
図6(C)は、カレントペアー61がフレーム構造で参照ペアー62がフィールド構造の場合に、カレントペアー61を構成する2つのマクロブロックに参照される参照画素データを示したものである。カレントペアー61におけるトップマクロブロック61aのイントラ予測を行うのに必要な参照画素データは、参照ペアー62のボトムマクロブロック62bにおける16行目の水平ラインの画素列である。また、カレントペアー61におけるボトムマクロブロック61bのイントラ予測を行うのに必要な参照画素データは、カレントペアー61のトップマクロブロック61aにおける16行目の水平ラインの画素列である。
図6(D)は、カレントペアー71がフィールド構造で参照ペアー72がフレーム構造の場合に、カレントペアー71を構成する2つのマクロブロックに参照される参照画素データを示したものである。カレントペアー71におけるトップマクロブロック71aのイントラ予測を行うのに必要な参照画素データは、参照ペアー72のボトムマクロブロック72bにおける15行目の水平ラインの画素列である。また、カレントペアー71におけるボトムマクロブロック71bのイントラ予測を行うのに必要な参照画素データは、参照ペアー72のトップマクロブロック72bにおける16行目の水平ラインの画素列である。
このように、マクロブロックがAFF形式の場合では、各マクロブロックの構造に応じてカレントマクロブロックが参照する参照画素データの位置が異なる。このため、ソフトウェア処理系30は、マクロブロックがAFF形式の場合に、1組のマクロブロックペアー毎に2つの参照画素データとそれらのマージンデータ領域とを設定する。
図7(A)は、輝度成分Yに関するマクロブロックペアーがフレーム構造の場合に設定される参照画素データの位置を示す図である。上述したようにフレーム構造の場合には、トップマクロブロックの下端水平ラインの画素列が参照されない。よって、トップマクロブロックに関しては、右端垂直ラインY_V11のみが参照画素データに設定される。また、ボトムマクロブロックに関しては、右端垂直ラインY_V12、及び、15,16行目の2つ下端水平ラインY_H11,Y_H12が参照画素データとして設定される。
図7(B)は、輝度成分Yに関するマクロブロックペアーがフィールド構造の場合に設定される参照画素データの位置を示す図である。上述したようにフィールド構造の場合には、トップマクロブロックの下端水平ラインの画素列も参照画素データとして用いられる。よって、トップマクロブロックは、右端垂直ラインY_V21と下端水平ラインY_H21とが参照画素データとして設定される。同様にして、ボトムマクロブロックは、右端垂直ラインY_V22と下端水平ラインY_H22とが参照画素データとして設定される。
また、色差成分Cb,Crに関する参照画素データは、ブロックサイズが輝度成分Yと異なるが、カレントペアーに参照される参照画素データの位置に関して同様の関係を有する。
すなわち、色差成分Cbに関するマクロブロックペアーがフィールド構造の場合には、図8(A)に示すように、トップマクロブロックの右端垂直ラインCb_V11と、ボトムマクロブロックの右端垂直ラインCb_V12と、ボトムマクロブロックの7,8行目の2つの下端水平ラインCb_H11,Cb_H12とが、参照画素データとして設定される。同様に、色差成分Crに関するマクロブロックがフィールド構造の場合には、トップマクロブロックの右端垂直ラインCr_V11と、ボトムマクロブロックの右端垂直ラインCr_V12と、ボトムマクロブロックの7,8行目の2つの下端水平ラインCr_H11,Cr_H12とが、参照画素データとして設定される。
よって、マクロブロックペアーがフィールド構造の場合には、図8(B)に示すように、輝度成分Y及び色差成分Cb,Crを合計して128バイトの参照画素データがL2キャッシュ33の記憶領域に記憶されることとなる。
なお、上述したように、マクロブロックペアーを1単位として参照画素データを設定した場合にも、右端垂直ラインと下端垂直ラインとが重複する画素が存在するので、これら重複画素のデータに上述したフラグ情報を設定する。
具体的には、トップマクロブロックに関するフラグ情報は、下端水平ラインY_H11,Cb_H11,Cr_H11の合計3バイトのマージンデータ領域に設定される。また、ボトムマクロブロックに関するフラグ情報は、下端水平ラインY_H12,Cb_H12,Cr_H12の合計3バイトのマージンデータ領域に設定される。
一方、色差成分Cbに関するマクロブロックペアーがフレーム構造の場合には、図9(A)に示すように、トップマクロブロックの右端垂直ラインCb_V21と、トップマクロブロックの下端水平ラインCb_H21と、ボトムマクロブロックの右端垂直ラインCb_V22と、ボトムマクロブロックの下端水平ラインCb_H22とが参照画素データとして設定される。同様に、色差成分Crに関するマクロブロックがフレーム構造の場合には、トップマクロブロックの右端垂直ラインCr_V21と、トップマクロブロックの下端水平ラインCr_H21と、ボトムマクロブロックの右端垂直ラインCr_V12と、ボトムマクロブロックの下端水平ラインCr_H22とが参照画素データとして設定される。
よって、マクロブロックペアーがフィールド構造の場合には、図9(B)に示すように、輝度成分Y及び色差成分Cb,Crを合計して128バイトの参照画素データがL2キャッシュ33の記憶領域に記憶されることとなる。
なお、上述したように、マクロブロックペアーを1単位として参照画素データを設定した場合にも、右端垂直ラインと下端垂直ラインとが重複する画素が存在するので、これら重複画素のデータに上述したフラグ情報を設定する。
具体的には、トップマクロブロックに関するフラグ情報は、下端水平ラインY_H21,Cb_H21,Cr_H21の合計3バイトのマージンデータ領域に設定される。また、ボトムマクロブロックに関するフラグ情報は、下端水平ラインY_H22,Cb_H22,Cr_H22の合計3バイトのマージンデータ領域に設定される。
次に、ソフトウェア処理系30による参照画素データを用いた予測画生成処理について図10を参照して説明する。ここで、CPU31は、予測画生成処理プログラムに従って、周辺マクロブロックの復号された画素データを用いてカレントマクロブロックの予測処理を行う。
なお、ソフトウェア処理系30では、カレントマクロブロックの予測処理に必要となる参照マクロブロックが、全て復号されていることを前提として以下の処理を実行する。また、カレントマクロブロックがAFF形式の場合には、カレントペアーを1単位としてイントラ予測処理を行うものとする。
ステップS10において、CPU31は、カレントマクロブロックの予測画生成処理が完了した後に、カレントマクロブロックの参照画素データをL2キャッシュ33に記憶させるカレントアドレス番号を設定する。ここで、復号処理後にL2キャッシュ33上に記憶されるカレントマクロブロックの参照画素データを、カレント参照画素データと呼び、当該カレントマクロブロックが参照する参照画素データと明確に区別する。また、マクロブロックがAFF形式の場合、CPU31は、マクロブロック毎にカレントアドレス番号を設定する。
ステップS11において、CPU31は、カレントマクロブロックがスキップマクロブロックか否かを判断する。ここで、CPU31は、スキップマクロブロックであると判断するとステップS12へ進み、スキップマクロブロックではないと判断するとステップS15へ進む。
ステップS12において、CPU31は、カレントマクロブロックに応じたフラグ情報をL1キャッシュ32に書き込む。ここで、フラグ情報は、イントラ/インターフラグと、フィールド/フレームフラグと、スキップフラグと、スライスポインタとからなる。
ステップS13において、CPU21は、カレントマクロブロックに含まれるベクトル情報が指し示す復号された画像データを、L2キャッシュ33及びメインメモリ34へアクセスして読み出す。そしてCPU31は読み出された復号画像データをカレントマクロブロックの予測画像とし、算出器15へ出力する。
ステップS14において、CPU31は、ステップS13により復号したカレントマクロブロックからカレント参照画素データとなる画素を選択し、L1キャッシュ32に記憶されているフラグ情報を付加したカレント参照画素データを、L2キャッシュ33の記憶領域に書き込む。この処理工程が完了すると、CPU31は、まだ復号されていないマクロブロックをカレントマクロブロックに設定して、予測画生成処理プログラムを実行する。
一方、カレントマクロブロックがスキップマクロブロックでない場合、予測画生成処理プログラムは、ステップS11からステップS15へ進む。
ステップS15において、CPU21は、カレントマクロブロックがイントラマクロブロックであるか否かを判断する。ここで、CPU31は、イントラマクロブロックであると判断するとステップS16へ進み、イントラマクロブロックでない、すなわちインターマクロブロックであると判断するとステップS24へ進む。
ステップS16において、CPU31は、カレントマクロブロックがAFF形式であるか否かを判断する。ここで、CPU31は、AFF形式でないと判断するとステップS17へ進み、AFF形式であると判断するとステップS21へ進む。
ステップS17及びステップS20において、CPU31は、周辺マクロブロックの中から、カレントマクロブロックをイントラ予測するのに必要な参照マクロブロックの参照画素データに含まれるフラグ情報をL2キャッシュ33から読み出す。そして、CPU31は、読み出したフラグ情報に基づいて、これらの参照画素データがイントラ予測処理に有効であるか否かを判断する。
具体的に、CPU31は、スライスヘッダに基づいて、カレントマクロブロックのスライス番号と参照画素データのスライス番号が異なる場合に、この参照画素データを無効にする。また、CPU31は、カレントマクロブロックに含まれるフラグconstrained_intra_flagが1の場合にイントラ/インターフラグによりインターマクロブロックであると判断して、当該参照画素データを無効にする。
カレントマクロブロックがAFF形式でない場合には、図11(A)に示すように、カレントマクロブロックの左横・左斜上・上・右斜上の参照マクロブロックがカレントマクロブロックのイントラ予測に用いられる。したがって、ステップS18では、CPU31は、これらの4つの参照マクロブロックのうち、有効であると判断されたマクロブロックのアドレスを設定して、ステップS19へ進む。
一方、カレントマクロブロックがAFFの場合、カレントペアーのトップマクロブロックTopが参照する可能性のある参照マクロブロックは、図11(B)に示すように、カレントペアーに対して左横に位置する参照ペアーのトップマクロブロックTopL・ボトムマクロブロックBttmLと、カレントペアーに対して左斜上に位置する参照ペアーのトップマクロブロックTopLA・ボトムマクロブロックBttmLAと、カレントペアーに対して上に位置する参照ペアーのトップマクロブロックTopA・ボトムマクロブロックBttmAと、カレントペアーに対して右斜上に位置するトップマクロブロックTopRA・ボトムマクロブロックBttmRAとの合計8個である。
また、カレントペアーのボトムマクロブロックBttmが参照する可能性のある参照マクロブロックは、図11(C)に示すように、カレントペアーのトップマクロブロックTopと、カレントペアーに対して左横に位置するトップマクロブロックTopL・ボトムマクロブロックBttmLと、カレントペアーに対して左斜上に位置するボトムマクロブロックBttmLAと、カレントペアーに対して上に位置するボトムマクロブロックBttmAと、カレントペアーに対して右斜上に位置するボトムマクロブロックBttmRAの合計6個である。このように、ボトムマクロブロックBttmが参照する参照マクロブロックは、トップマクロブロックTopが参照する参照マクロブロックに含まれている。
よって、ステップS21では、カレントペアーのトップマクロブロックTopがイントラマクロブロックの場合、CPU31は、図12(A)に示すように、合計8個のマクロブロックのうち、有効であると判断されたマクロブロックのアドレスを設定する。また、トップマクロブロックTopがイントラマクロブロックでない場合、すなわち、トップマクロブロックTopがインターマクロブロック又はスキップマクロブロックである場合、CPU31は、図12(B)に示すように、ボトムマクロブロックBttmのみが参照する合計6個の参照マクロブロックのうち、有効であると判断されたマクロブロックのアドレスを設定する。よって、イントラ予測に必要最低限の参照マクロブロックをL2キャッシュ33から読み出すことができる。
ステップS19及びステップS22において、CPU31は、それぞれステップS18及びステップS21で設定したアドレスに対応する参照画素データをL2キャッシュ33から読み出す。
ステップS23において、CPU31は、ステップS19及びステップS22で有効と判断された参照画素データを用いてカレントマクロブロックのイントラ予測を行って、復号したマクロブロックを算出器15へ出力して、ステップS24へ進む。
また、カレントマクロブロックがインターマクロブロックであると判断されてステップS24に進んだ場合には、CPU31は、動きベクトル情報に基づいてカレントマクロブロックにインター予測処理を施して、動き予測・補償部21から算出器15へ復号されたマクロブロック単位の画像情報を出力して、ステップS25へ進む。
ステップS25において、CPU31は、カレントマクロブロックに含まれるフラグ情報に基づいて、イントラ/インターフラグとフィールド/フレームフラグとスキップフラグとスライスポインタとからなるフラグ情報をステップS10で設定したカレントアドレスに対応するL1キャッシュ32の記憶領域に書き込んでステップS26へ進む。
ステップS26において、CPU31は、ステップS13により復号したカレントマクロブロックからカレント参照画素データとなる画素を選択し、L1キャッシュ32に記憶されているフラグ情報を付加したカレント参照画素データを、カレントアドレスに対応するL2キャッシュ33の記憶領域に書き込む。ここで、上述したように、カレントマクロブロックがAFFの場合には、カレントペアーのマクロブロックがフィールド構造又はフレーム構造によって、マクロブロック内の画素データのうち、参照画素データとして書き込まれるデータが異なる。
この処理工程が完了すると、CPU31は、まだ復号されていないマクロブロックをカレントマクロブロックに設定して、予測画生成処理プログラムを実行する。
このように、ソフトウェア処理系30では、メインメモリ34にアクセスすることなく、イントラ予測処理に必要な画素データをL2キャッシュ33から参照画素データとして読み出す。このため、ソフトウェア処理系30では、参照画素データをCPU31へ読み出す際にキャッシュミスの頻度を低減するので処理速度を向上することができる。また、ソフトウェア処理系30では、イントラ予測処理に必要な画素データを、マクロブロック毎に参照画素データとして管理しているので、1画素単位で管理する場合に比べて、L2キャッシュ33が必要な記憶容量をより小さくすることができる。さらに、ソフトウェア処理系30では、参照画素データに含まれるフラグ情報に基づいて参照画素データのイントラ予測における有効性を判断し、必要な参照画素データを効率よく選択してCPU31へ読み出すので、イントラ予測処理の処理速度を速くすることができる。
(2−2)第2のソフトウェア処理系
第2のソフトウェア処理系80は、図13に示すように、CPU81と、L1キャッシュ82と、L2キャッシュ83と、メインメモリ84とに加えて、SIMD(Single Instruction/Multiple Data)プロセッサ85と、ローカルメモリ86と、DMA(Direct Memory Access)コントローラ87とから構成されている。
SIMDプロセッサ85は、1つの命令で複数のデータ処理を行うプロセッサである。第2のソフトウェア処理系80では、イントラ予測部19が行う処理を主にSIMDプロセッサ85上で行うものとする。
ローカルメモリ86は、SIMDプロセッサ85のワーキングメモリとしての役割をはたし、DMAコントローラ87を介してL2キャッシュ83へ直接アクセス可能となっている。
以上のような構成からなる第2のソフトウェア処理系80において、SIMDプロセッサ85が使用するデータを読み出す場合には、まずローカルメモリ86にアクセスし、ローカルメモリ86に演算処理に必要なデータが存在しない場合にはDMAコントローラ87を介してL2キャッシュ83へアクセスし、さらに当該データがL2キャッシュ83に存在しなければ、最終的にメインメモリ84にアクセスする。
また、第2のソフトウェア処理系80では、第1のソフトウェア処理系20と同様に、復号されたマクロブロックの画像データから、カレントマクロブロックのイントラ予測処理に用いられる可能性がある画素データを参照画素データとしてL2キャッシュ83上に保持する。そして、第2のソフトウェア処理系80において、SIMDプロセッサ85は、DMAコントローラ87を介してL2キャッシュ83から参照画素データを読み出して、カレントマクロブロックのイントラ予測処理を行う。
なお、L2キャッシュ83上に記憶される参照画素データは、第1のソフトウェア処理系20におけるL2キャッシュ33上に記憶されるものと同様なので、その説明を省略する。
次に、第2のソフトウェア処理系80による参照画素データを用いた予測画像の生成処理に関して図14を参照して詳細に説明する。ここで、CPU81は、予測画生成処理プログラムに従って、以下に示す処理を実行する。
ステップS30において、CPU81は、カレントマクロブロックの復号処理が完了した後に、カレントマクロブロックの参照画素データをL2キャッシュ83上に記憶させるカレントアドレスを設定する。さらに、CPU81は、カレントマクロブロックのイントラ予測とカレント参照画素データの書込処理とを行わせる制御命令をSIMDプロセッサ85に供給する。そして、CPU81から供給される制御命令に従って、SIMDプロセッサ85が以下に示す処理工程を行うものとする。
ステップS31において、SIMDプロセッサ85は、カレントマクロブロックがスキップマクロブロックであるか否かを判断する。ここで、SIMDプロセッサ85は、スキップマクロブロックであると判断するとステップS32へ進み、スキップマクロブロックではないと判断するとステップS35へ進む。
ステップS32において、SIMDプロセッサ85は、カレントマクロブロックに応じたフラグ情報を、カレントアドレスに対応するL2キャッシュ83の記憶領域に書き込む。ここで、フラグ情報は、イントラ/インターフラグと、フィールド/フレームフラグと、スキップフラグと、スライスポインタとからなる。
ステップS33において、SIMDプロセッサ85は、カレントマクロブロックに含まれるベクトル情報が指し示す復号された画像データを、L2キャッシュ83、メインメモリ84の順にアクセスして読み出す。
なお、ステップS32及びステップS33は、処理順序の入れ替えや並列処理などを行うようにしても良い。
ステップS34において、SIMDプロセッサ85は、ステップS33で復号したカレントマクロブロックを構成する画素データのうち、カレント参照画素データを設定する。そして、SIMDプロセッサ85は、マージンデータ領域にフラグ情報を付加したカレント参照画素データを、DMAコントローラ87によりL2キャッシュ83へ転送させ、カレントアドレスに応じた記憶領域に書き込む。この処理工程が完了すると、CPU81は、まだ復号されていないマクロブロックをカレントマクロブロックに設定して、予測画生成処理プログラムを実行する。
一方、カレントマクロブロックがスキップマクロブロックでない場合、予測画生成処理プログラムは、ステップS31からステップS35へ進む。
ステップS35において、SIMDプロセッサ85は、カレントマクロブロックがイントラマクロブロックであるか否かを判断する。ここで、SIMDプロセッサ85は、イントラマクロブロックであると判断するとステップS36へ進み、イントラマクロブロックではない、すなわちインターマクロブロックであると判断するとステップS43へ進む。
ここで、SIMDプロセッサ85では、インターマクロブロックに対してインター予測処理を行わない。また、カレントペアーの場合には、1つでもイントラマクロブロックがあればステップS36へ進む。
ステップS36において、SIMDプロセッサ85は、カレントマクロブロックがAFF形式であるか否かを判断する。ここで、SIMDプロセッサ85は、AFF形式でないと判断するとステップS37へ進み、AFF形式であると判断するとステップS40へ進む。
ステップS37及びステップS40において、SIMDプロセッサ85は、周辺マクロブロックの中から、イントラ予測するのに必要な参照マクロブロックの参照画素データに含まれるフラグ情報を、DMAコントローラ87を介してL2キャッシュ83から読み出す。そして、SIMDプロセッサ85は、読み出したフラグ情報に基づいて、これらの参照画素データがイントラ予測処理に有効であるか否かを判断してそれぞれステップS38及びステップS41へ進む。
ここで、具体的な判断処理に関しては、図10のステップS17及びステップS20と同様なので、その説明を省略する。
ステップS38では、SIMDプロセッサ85は、図10のステップS18と同様に、図11に示す4つの参照マクロブロックのうち、有効と判断されたマクロブロックに対応するアドレスを読み出して、ステップS39へ進む。
一方、ステップS41では、カレントペアーのトップマクロブロックTopがイントラマクロブロックの場合、SIMDプロセッサ85は、図12(A)に示すように、図10のステップS21と同様に、合計8個のマクロブロックのうち、有効と判断されたマクロブロックのアドレスを設定する。また、トップマクロブロックTopがイントラマクロブロックでない場合、すなわち、トップマクロブロックTopがインターマクロブロック又はスキップマクロブロックである場合、SIMDプロセッサ85は、図10のステップS21と同様に、図12(B)に示すように、ボトムマクロブロックBttmのみが参照する合計6個の参照マクロブロックのうち、有効と判断されたマクロブロックのアドレスを設定する。
ステップS39及びステップS42において、SIMDプロセッサ85は、それぞれステップS38及びステップS41で設定したアドレスに対応する参照画素データに含まれるフラグ情報をL2キャッシュ83から読み出す。そして、SIMDプロセッサ85は、有効と判断した参照画素データをL2キャッシュ83から読み出して、ステップS43へ進む。
ステップS43において、SIMDプロセッサ85は、カレントマクロブロックに含まれるフラグ情報に基づいて、イントラ/インターフラグとフィールド/フレームフラグとスキップフラグとスライスポインタとからなるフラグ情報を、DMAコントローラ87によりL2キャッシュ83にDMA転送させ、カレントアドレスが指し示す記憶領域に書き込む。
ステップS44において、SIMDプロセッサ85は、ステップS39及びステップS42で有効と判断された参照画素データを用いてカレントマクロブロックのイントラ予測を行う。
また、ステップS44において、ステップS35でインターマクロブロックと判断されたマクロブロックは、CPU81又はインター予測処理を専用で行うプロセッサなどにより復号処理が施される。そして、復号処理が施されたインターマクロブロックはローカルメモリ76に供給される。
ステップS45において、SIMDプロセッサ85は、ステップS44で復号したカレントマクロブロックを構成する画素データのうち、カレント参照画素データを設定する。そして、SIMDプロセッサ85は、マージンデータ領域にフラグ情報を付加したカレント参照画素データを、DAMコントローラ87によりL2キャッシュ83へ転送させ、カレントアドレスに応じた記憶領域に書き込む。この処理工程が完了すると、CPU81は、まだ復号されていないマクロブロックをカレントマクロブロックに設定して、予測画生成処理プログラムを実行する。
このようにソフトウェア処理系80では、復号処理のうちイントラ予測処理をSIMDプロセッサ85で行わせるので、それ以外に必要な復号処理をCPU81が行う。このため、ソフトウェア処理系80では、第1のソフトウェア処理系20のようにプロセッサが復号処理全体を行う場合に比べてプロセッサの演算処理量を軽減して、より高速に圧縮画像信号を復号することができる。
10 画像情報復号処理装置、11 蓄積バッファ、12 可逆復号化部、13 逆量子化部、14 逆直交変換部、15 加算器、16 デブロックフィルタ、17 画面並べ替えバッファ、18 D/A変換器、19 イントラ予測部、20 フレームメモリ、21 動き・補償部、30 第1のソフトウェア処理系、80 第2のソフトウェア処理系、31、81 CPU、32、82 L1キャッシュ、33、83 L2キャッシュ、34、84 メインメモリ、85 SIMDプロセッサ、86 ローカルメモリ、87 DMAコントローラ