従来、各種映像機器では、H.264/MPEG−4AVC、WMV9(Windows Media Video 9 )、MPEG−4(ISO/IEC14496 Information Technology-Generic Coding of Audio-Visual Object )等で画像データを符号化処理、復号化処理している。ここでこれらの符号化方法は、ラスタ走査の順序で、マクロブロックをイントラ符号化処理、インター符号化処理する。
ここでマクロブロックは、イントラ符号化処理、インター符号化処理の基本処理単位である。輝度信号のマクロブロックは、図18(A)及び(B)に示すように、水平方向及び垂直方向に16画素×16画素のブロックである。H.264/MPEG−4AVCでは、各マクロブロックを最適予測モードで処理しており、この最適予測モードによっては、1つマクロブロックを細分割して動き補償する場合がある。
ここでこの動き補償における処理単位は、16画素×16画素のマクロブロックの他に、図18(B1)〜(B3)に示すように、16画素×16画素のマクロブロックを水平方向及び又は垂直方向に分割した16画素×8画素、8画素×16画素、8画素×8画素のブロックが用意されている。なおH.264/MPEG−4AVCでは、これら16画素×8画素、8画素×16画素、8画素×8画素のブロックもマクロブロックと称され、16画素×16画素のマクロブロックと同様に、マクロブロックタイプ(mb type )で特定される。図19〜図21は、各スライスにおけるこのマクロブロックタイプ(mb type)と動き補償処理との関係を示す図表である。
また動き補償において、8画素×8画素のマクロブロックは、図18(C1)〜(C4)に示すように、さらに水平方向及び又は垂直方向に分割された8画素×4画素、4画素×8画素、又は4画素×4画素のサブマクロブロック単位で処理される場合もある。ここでサブマクロブロックは、サブマクロブロックタイプ(sb mb type)で特定される。図22及び図23は、このサブマクロブロックタイプ(sb mb type)と動き補償処理との対応関係を示す図表である。なお8画素×8画素のマクロブロックは、これらサブマクロブロックの階層では、サブマクロブロックと称される。
ここでIスライスは、図19に示すように、16画素×16画素のマクロブロックだけがイントラ予測で動き補償される。これに対して図20に示すように、Pスライスでは、16画素×16画素、16画素×8画素、8画素×16画素のマクロブロックが前予測で動き補償され、又は8画素×8画素のマクロブロックが図22に示すように処理される。またBスライスでは、図21に示すように、16画素×16画素、16画素×8画素、8画素×16画素のマクロブロックが前方向、又は双方向で動き補償され、又は8画素×8画素のマクロブロックが図23に示すように処理される。
またH.264/MPEG−4AVCのインター符号化処理では、6タップのフィルタを用いて1/4画素精度で動き補償している。すなわち図24に示すように、黒丸で示す整数画素位置の予測値を求める場合、参照フレームの対応する画素値を割り当てて予測値を生成する。これに対して四角印で示すように、1/2画素精度の位置である隣接する画素間の中間位置の予測値を求める場合、6タップのフィルタを用いて前後3つの画素値から予測値を生成する。またさらに三角印で示す1/4画素精度の予測値を生成する場合、同様に6タップのフィルタを用いて、前後、3つの1/2画素精度の予測値から予測値を求める。
従って4画素×4画素のサブマクロブロックを動き補償する場合、図25に示すように、4画素×4画素のサブマクロブロックに対して水平方向及び垂直方向、両側にそれぞれ2画素及び3画素だけ大きな領域である9×9画素の領域の参照画像データが必要になり、この場合、81画素の参照画像データが必要になる。従って8×8画素のサブマクロブロックの双方向予測では、81×2×4=648個の参照画像データが必要になり、16画素×16画素のマクロブロックの全てを4画素×4画素のサブマクロブロックで処理する場合、648×4=2592個の参照画像データが必要になる。なおここで参照画像データは、動き補償に使用する参照フレームの画像データである。
ここで図26及び図27は、この動き補償と必要画像データ数の関係を示す図表である。ここでイントラ予測では、参照画像データは不要となる。これに対して16画素×16画素のマクロブロックでは、前予測に、(16+5)画素×(16+5)画素=441個の参照画像データが必要になり、双方向予測では、441個×2=882個の参照画像データが必要になる。
このような画像データの処理に関して、例えば特開2000−30047号公報には、複数のマクロブロックを同時並列的に処理して、符号化処理、復号化処理を高速度化する方法が提案されている。
ここで図28は、この特開2000−30047号公報に提案の手法を適用するとして、本願出願人が検討したH.264/MPEG−4AVCのエンコーダ/デコーダを示すブロック図である。このエンコーダ/デコーダ1において、ビデオI/O2は、画像データを入出力する入出力回路であり、符号化処理する画像データを入力してバスBUSに出力し、また復号化処理した画像データを出力する。ビットストリームI/O3は、ビットストリームの入出力回路であり、符号化処理したビットストリームを出力し、また復号化処理するビットストリームを入力する。メモリ4は、ビデオI/O2、ビットストリームI/O3を介してバスBUSに入力された画像データ及びビットストリーム、参照画像データ、処理途中の各種データ、処理結果の画像データ及びビットストリームを一時格納するメモリであり、保持したデータをバスBUSに出力してこのエンコーダ/デコーダ1の各部に出力する。
前処理部5は、符号化時、メモリ4に保持した画像データを順次入力して最適予測モードを選択し、動きベクトルを検出して出力する。なおここでこの最適予測モードは、メモリ4に保持した符号化処理前の画像データを参照画像データに設定して実行する。また前処理部5は、復号化時、メモリ4に保持したビットストリームを読み出してマクロブロックタイプ、動き補償等の情報をデコードする。
並列処理部6は、この前処理部5で処理された画像データ、ビットストリームをメモリ4を介して入力し、複数マクロブロックを、同時並列的に処理して符号化、復号化の処理を実行する。すなわち並列処理部6は、複数のマクロブロック処理部(MB処理部)7A〜7Nと、この複数のマクロブロック処理部7A〜7Nの動作を管理する状態管理部8が設けられる。
ここで各マクロブロック処理部7A〜7Nは、符号化時、それぞれ前処理部5で処理されてメモリ4に保持された画像データをマクロブロック単位で入力し、前処理部5で選択された最適予測モードに従って符号化処理する。また符号化処理結果であるビットストリームをメモリ4に格納する。また復号化時、これとは逆に前処理部5で処理されてメモリ4に保持されたビットストリームをマクロブロック単位で入力し、前処理部5で検出された情報に従って復号化処理する。また復号化処理結果である画像データをメモリ4に格納する。
状態管理部8は、H.264/MPEG−4AVCで定められたマクロブロック間の参照関係に基づいて、前処理部5で処理された画像データ、ビットストリームのうちで、マクロブロック処理部7A〜7Nで処理可能なマクロブロックを選択し、この選択したマクロブロックの処理を各マクロブロック処理部7A〜7Nに指示する。
後処理部9は、この並列処理部6で処理されてメモリ4に保持されたデータを後処理してビットストリーム、画像データを出力する。すなわち後処理部9は、符号化時、並列処理部6で処理されてメモリ4に保持されたデータに量子化スケール、マクロブロックタイプ等の情報を付加してビットストリームを生成し、また並列処理部6で処理されてメモリ4に保持された参照画像データをデブロックフィルタリング処理してブロック歪みを除去する。これに対して復号化時、並列処理部で復号された画像データをデブロックフィルタリング処理して出力する。
図29は、このエンコーダ/デコーダ1において、1フレームの画像データの符号化処理を示すフローチャートである。このエンコーダ/デコーダ1において、画像データは、ビデオI/O2を介してメモリ4に保持され、各フレームの画像データが順次符号化処理される。画像データは、符号化処理順序になると、この処理手順が開始されてステップSP1からステップSP2に移り、メモリ4から読み出されて前処理部5で処理された後、処理結果がメモリ4に格納される。また続くステップSP3においてマクロブロック処理部7A〜7Nで順次マクロブロック単位で並列処理され、続くステップSP4において後処理部9で処理される。また続くステップSP5において、1フレーム分の処理の完了が後処理部9から通知されると、ステップSP6に移ってこの処理手順を終了する。
この図28の構成によれば、各部の構成をそれ程、高速度化しなくても、高解像度の画像データ、ビットストリームを符号化、復号化することができると考えられる。
しかしながら図26及び図27に示したように、各マクロブロックでは最適予測モードに応じて処理に必要な画像データの数が大きく変化することから、単にマクロブロック処理部7A〜7Nで処理可能となったマクロブロックを並列処理したのでは、バスBUSの負荷が一時的に著しく増大することが判った。
すなわち1つのマクロブロックを処理する場合に必要な画像データ数は(図26)、イントラ予測で最小の0個であるのに対し、8画素×8画素のサブマクロブロック単位で処理する場合に最大の2592個である。従ってn個のマクロブロック処理部で並列処理する場合、最小で0×n個の画像データをメモリ4から並列処理部6に転送することが必要になるのに対し、最大で2592×n個の画像データをメモリ4から並列処理部6に転送することが必要になる。従ってバスBUSは、平均レートはそれ程高く無いにも係わらず、この2592×n個の画像データを転送可能に高性能に構成することが必要になる。
ここで図30は、このメモリ4から並列処理部6に転送することが必要な参照画像データのデータ数を検討した特性曲線図である。この図30において矢印Aで示す部分が、最大数の画像データを転送することが必要になる期間である。この矢印Aの部分で何ら障害無く画像データを転送可能に高性能にバスBUSを構成すると、バスBUSは、他の殆どの期間の間、遊んでいることになる。
特開2000−30047号公報
(1)実施例の構成
図2は、本発明の実施例1のエンコーダ/デコーダを示すブロック図である。このエンコーダ/デコーダ10は、H.264/MPEG−4AVCのフォーマットで画像データを符号化処理、復号化処理する。なおこのエンコーダ/デコーダ10において、図28について上述したエンコーダ/デコーダ1と同一の構成は、対応する符号を付して示し、重複した説明は省略する。また以下において、マクロブロックは、特に大きさを記載している場合を除いて、16画素×16画素の基本処理単位のマクロブロックを意味するものとする。
このエンコーダ/デコーダ10は、バスBUSに接続された演算処理手段のプログラムの実行により、この演算処理部で前処理部11、並列処理部12、後処理部13の機能ブロックが形成され、また並列処理部12に、複数のマクロブロック処理部(MB処理部)15A〜15N、これら複数のマクロブロック処理部15A〜15Nの動作を管理する状態管理部16の機能ブロックが形成される。またこの演算処理手段が実行するプログラムの切り換えにより、これらの機能ブロック11〜16が構成を切り換え、エンコーダとデコーダとで構成を切り換える。なおこのプログラムは、このエンコーダ/デコーダ10に事前にインストールして提供されるものの、この事前のインストールによる提供に代えて、光ディスク、磁気ディスク、メモリカード等の記録媒体に記録して提供するようにしてもよく、またインターネット等のネットワークを介したダウンロードにより提供するようにしてもよい。
ここで図3は、このエンコーダ/デコーダ10をエンコーダとして構成した場合の、画像データの処理に関するエンコーダ/デコーダ10のブロック図である。この構成において、前処理部11は、マクロブロック処理部15A〜15Nで処理する画像データpixelを事前にまとめてフレーム単位で処理する。具体的に、前処理部11は、各マクロブロックの最適予測モードを検出する。またさらにインター予測では、メモリ4に格納された参照フレームに対して動きベクトルを検出する。なお前処理部11は、符号化処理を完了した現フレームの隣接マクロブロックに代えて、処理対象の画像データpixelによる原画像の隣接マクロブロックを参照して最適予測モードを検出する。
マクロブロック処理部15A〜15Nは、前処理部11の処理結果に基づいて画像データpixelをそれぞれマクロブロック単位で処理する並列処理可能な機能ブロックである。マクロブロック処理部15A〜15Nは、前処理部11で検出された最適予測モードに応じて予測値を作成し、この予測値を用いてマクロブロックの画像データを符号化処理する。
すなわち図4に示すように、マクロブロック処理部15A〜15Nは、マクロブロック単位でバッファメモリから画像データpixelを減算回路21に入力する。減算回路21は、最適予測モードに応じて動作を切り換え、イントラ符号化する場合には、イントラ予測回路22で生成される予測値と画像データpixelとの差分データを生成し、インター符号化する場合には、動き予測補償回路23で生成される予測値と画像データpixelとの差分データを生成する。
ディスクリートコサイン変換回路(DCT)24は、減算回路21から出力される差分データを直交変換処理して係数データを出力する。量子化回路(Q)25は、所定の量子化スケールでこの係数データを量子化して出力する。マクロブロック処理部15A〜15Nは、この量子化回路25の出力データcoefを後処理部13に出力する。
逆量子化回路(Q-1)26は、量子化回路25の出力データcoefを逆量子化処理し、量子化回路25に入力される係数データを復号する。逆ディスクリートコサイン変換回路(IDCT)27は、逆量子化回路26の出力データを逆ディスクリートコサイン変換処理し、ディスクリートコサイン変換回路24に入力される差分データを復号する。加算回路28は、この復号した差分データにイントラ予測回路22又は動き予測補償回路23で生成した予測値を加算し、マクロブロック処理部15A〜15Nの入力データpixelを復号する。
イントラ予測回路22は、この加算回路28で復号される現フレームFnの画像データpixelを用いて、イントラ符号化する場合の予測値を出力する。動き予測補償回路23は、加算回路28で復号されて、メモリ4に保持された参照フレームFn−1の画像データpixelを用いて動き補償の処理を実行し、インター符号化する場合の予測値を出力する。なお以下において、この参照フレームFn−1の画像データを参照画像データと呼ぶ。
マクロブロック処理部15A〜15Nは、Iピクチャーでは、イントラ符号化の最適予測モードで画像データpixelを符号化するように、イントラ予測回路22の予測値を選択的に減算回路21に出力する。またIピクチャー以外では、イントラ符号化の最適予測モードとインター符号化の最適予測モードのうちで、発生符号量が少ない側の最適予測モードで画像データpixelを符号化するように、これらイントラ予測回路22、動き予測補償回路23の予測値を選択的に減算回路21に出力する。なおマクロブロック処理部15A〜15Nは、これらの処理を基本の処理単位である16画素×16画素のマクロブロック単位で実行する。なおマクロブロック処理部15A〜15Nは、この16画素×16画素のマクロブロック以外のマクロブロック、サブマクロブロックを処理単位とする予測モードを最適予測モードとして処理する場合もあるが、この場合もマクロブロック、サブマクロブロックを順次処理して最終的には、16画素×16画素のマクロブロック単位で画像データpixelを符号化処理する。
後処理部13(図2)は、メモリ4を介してマクロブロック処理部15A〜15Nの出力データcoefを一定の順序で入力する。また入力したデータcoefを可変長符号化処理した後、量子化スケール、マクロブロックタイプ(mb type )等の情報を付加してビットストリームstreamを出力する。またマクロブロック処理部15A〜15Nから出力して一旦メモリ4に格納した現フレームFnの画像データを、デブロックフィルタリング処理してブロック歪みを除去する。
状態管理部16は、前処理部11、マクロブロック処理部15A〜15N、後処理部13で画像データpixelをパイプライン処理するように、前処理部11、マクロブロック処理部15A〜15N、後処理部13を管理する。またこのときマクロブロック処理部15A〜15Nでは、同時並列的にマクロブロックを処理するように、マクロブロック処理部15A〜15Nの動作を管理する。
これに対して図5は、このエンコーダ/デコーダ10をデコーダとして構成した場合の、画像データの処理に関するエンコーダ/デコーダ10のブロック図である。この構成において、前処理部11は、マクロブロック処理部15A〜15Nで処理するビットストリームstreamを事前にまとめてフレーム単位で処理する機能ブロックである。具体的に、前処理部11は、エンコーダの後処理部13に対応して、メモリ4に入力されたビットストリームstreamを可変長復号化処理し、さらには各マクロブロックのマクロブロックタイプ、動き補償処理等の情報を取得して出力する。
マクロブロック処理部15A〜15Nは、エンコーダのマクロブロック処理部15A〜15Nに対応して、前処理部11の出力データcoefをそれぞれマクロブロック単位で処理して画像データpixelを出力する。
すなわち図6に示すように、マクロブロック処理部15A〜15Nは、マクロブロック単位でメモリ4から前処理部11の出力データcoefを逆量子化回路(Q-1)41に入力する。ここで逆量子化回路41は、ビットストリームデータstreamに設定された量子化スケールで前処理部11の出力データcoefを逆量子化処理し、エンコーダの量子化回路25に入力される係数データを復号する。逆ディスクリートコサイン変換回路(IDCT)42は、逆量子化回路41の出力データを逆ディスクリートコサイン変換処理し、エンコーダのディスクリートコサイン変換回路24に入力される差分データを復号する。加算回路43は、この復号した差分データにイントラ予測回路44又は動き予測補償回路45で生成した予測値を加算し、画像データpixelを復号する。
イントラ予測回路44は、この加算回路43で復号される現フレームFnの画像データpixelを用いて、イントラ符号化の場合の予測値を出力する。動き予測補償回路45は、加算回路43で復号されて、メモリ4に保持された参照画像データを用いて動き補償の処理を実行し、インター符号化する場合の予測値を出力する。
後処理部13(図5)は、マクロブロック処理部15A〜15Nの出力データpixelをデブロックフィルタリング処理してブロック歪みを除去する。またこのブロック歪みを除去した画像データpixelを参照画像データとしてメモリ4に格納する。
このデコーダの構成においても、状態管理部16は、前処理部11、マクロブロック処理部15A〜15N、後処理部13でビットストリームstreamをパイプライン処理するように、またマクロブロック処理部15A〜15Nでは、同時並列的にマクロブロックを処理するように、前処理部11、マクロブロック処理部15A〜15N、後処理部13を管理する。
図7は、これら前処理部11、マクロブロック処理部15A〜15N、後処理部13における符号化処理時の画像データの処理順序を示すフローチャートである。このエンコーダ/デコーダ10は、処理を開始するとステップSP11からステップSP12に移り、前処理部11で画像データの処理を開始する。また続くステップSP13で動き補償(MC)関係等のパラメータを順次初期化し、続くステップSP14において、前処理部11で処理したデータをマクロブロック処理部15A〜15Nで同時並列的に処理する。また続くステップSP15においてマクロブロック処理部15A〜15Nで全フレームの処理を完了したか否か判断し、ここで否定結果が得られると、ステップSP14を繰り返す。これに対してマクロブロック処理部15A〜15Nで全フレームの処理を完了すると、ステップSP15からステップSP16に移り、後処理部13で後処理した後、ステップSP17に移って処理を完了する。
これに対して図8は、1フレーム単位で見た場合の、エンコーダ/デコーダ10における画像データの符号化処理時の処理順序を示すフローチャートである。エンコーダ/デコーダ10は、処理対象のフレームが処理順序になると、この処理手順を開始してステップSP21からステップSP22に移り、メモリ4に格納した対応する1フレーム分の画像データを前処理部11で処理する。また続くステップSP23において、動き補償(MC)関係等のパラメータを順次初期化し、続くステップSP24において、前処理部11で処理したデータをマクロブロック処理部15A〜15Nで同時並列的に処理する。また続くステップSP25においてマクロブロック処理部15A〜15Nで処理したデータを後処理した後、続くステップSP26で全てのデータの処理完了を待機し、ステップSP27に移って処理を完了する。
なお図7のフローチャートでは、1つのファイルの処理を前処理部11が完了すると、続いてマクロブロック処理部15A〜15Nが処理を開始し、このマクロブロック処理部15A〜15Nが1つのファイルの処理を完了すると、後処理部13の処理が、この処理の完了したファイルを続いて処理するように記載されている。また図8のフローチャートでは、1フレーム分の処理を前処理部11が完了すると、続いてマクロブロック処理部15A〜15Nが処理を開始し、このマクロブロック処理部15A〜15Nが1フレーム分の処理を完了すると、後処理部13の処理が、この処理の完了した1フレーム分のデータを続いて処理するように記載されている。しかしながらこの図7及び図8は、各部の処理順序を明確にするために便宜的に示したものであり、前処理部11、マクロブロック処理部15A〜15N、後処理部13は、実際には、状態管理部16の管理によりそれぞれ前段の処理により処理可能となったマクロブロックを順次処理し、状態管理部16の管理によるパイプライン処理により画像データを符号化処理、復号化処理する。
この状態管理部16の管理のために、エンコーダ/デコーダ10(図2)は、前処理部11に、マクロブロックタイプ、サブマクロブロックタイプ検出部11Aと、参照画像データ数検出部11Bとが設けられる。ここでマクロブロックタイプ、サブマクロブロックタイプ検出部11Aは、16画素×16画素のマクロブロック毎に、当該マクロブロックのマクロブロックタイプ、動き補償タイプ(図19〜図21参照)、当該マクロブロックを構成するマクロブロック、サブマクロブロックのサブマクロブロックタイプ、動き補償タイプ(図18〜図23参照)を検出する。マクロブロックタイプ、サブマクロブロックタイプ検出部11Aは、エンコーダでは、最適予測モードからこれらマクロブロックタイプ、サブマクロブロックタイプ、動き補償タイプを検出する。またデコーダでは、ビットストリームに設定されたヘッダ情報からこれらの情報を取得する。
参照画像データ数検出部11Bは、マクロブロックタイプ、サブマクロブロックタイプ検出部11Aの検出結果に基づいて、16画素×16画素のマクロブロック毎に、図26により示される参照画像データ数を検出して並列処理部12の状態管理部16に通知する。
状態管理部16は、H.264/MPEG−4AVCで定められたマクロブロック間の参照関係に基づいて、前処理部11で処理された画像データ、ビットストリームのうちで、マクロブロック処理部15A〜15Nで処理可能なマクロブロックを選択する。ここで図9において参照関係を矢印で示すように、H.264/MPEG−4AVCでは、ラスタ走査の順序で符号化処理して、先に処理する隣接マクロブロック(x−1,y−1)、(x,y−1)、(x+1,y−1)、(x−1,y)の何れかを参照してマクロブロック(x,y)を符号化処理する予測モードが存在する。従ってMPEG−4等では、結局、これらの隣接マクロブロック(x−1,y−1)、(x,y−1)、(x+1,y−1)、(x−1,y)の符号化処理、復号化処理の完了を待って、マクロブロック(x,y)を符号化処理、復号化処理しなければならない。
ここで図10は、1フレーム中におけるマクロブロックの位置を示す平面図である。マクロブロック間の参照関係により、H.264/MPEG−4AVCでは、1フレーム中のマクロブロックのうちで、ラスタ走査開始端の座標(0,0)のマクロブロックをマクロブロック処理部15A〜15Nの何れかで初めに処理することが必要になる。またこの場合、この座標(0,0)以外の他のマクロブロックは、マクロブロック処理部15A〜15Nで処理できないことになる。なおこの図10及び以下の図11及び図12では、処理可能なマクロブロックの座標を丸印により囲って示す。
またこのラスタ走査の開始位置の座標(0,0)のマクロブロックの処理を完了すると、この座標(0,0)のマクロブロックの水平方向に隣接する座標(1,0)のマクロブロックがマクロブロック処理部15A〜15Nで処理可能となる。しかしながら座標(1,0)以外の他のマクロブロックについては、座標(0,0)のマクロブロックの処理を開始する場合と同様に、マクロブロック処理部15A〜15Nで処理できないことになる。
しかしながら図11に示すように、この続く座標(1,0)のマクロブロックの処理を完了した場合、1つ下のスライス層の走査開始位置である座標(0,1)のマクロブロックは、ラスタ走査の順序で先に走査する隣接マクロブロックが既に処理されていることになり、マクロブロック処理部15A〜15Nで処理することが可能となる。従ってこの場合、丸印で示す座標(2,0)、(0,1)の2つのマクロブロックが共にマクロブロック処理部15A〜15Nで処理可能となる。
またこの図11に示す状況から、座標(2,0)、(0,1)の2つのマクロブロックの符号化処理を完了すると、今度は、座標(2,0)、(0,1)のマクロブロックに続く座標(3,0)、(1,1)のマクロブロックが共にマクロブロック処理部15A〜15Nで処理可能となる。
またこの座標(3,0)、(1,1)の2つのマクロブロックの処理を完了すると、図12に示すように、さらに1つ下のスライス層の走査開始位置である座標(0,2)のマクロブロックは、ラスタ走査の順序で先に走査する隣接マクロブロックが既に符号化処理されていることになり、マクロブロック処理部15A〜15Nで処理することが可能となる。従ってこの場合、丸印で示す座標(4,0)、(2,1)、(0,2)の3つのマクロブロックが共にマクロブロック処理部15A〜15Nで処理可能となる。
この図10〜図12で説明したH.264/MPEG−4AVCで定められたマクロブロック間の参照関係に基づいて、状態管理部16は、フレーム毎に、前処理部11で処理されたマクロブロックのうちで、ラスタ走査の順序で走査した場合に、先に走査する隣接マクロブロックの全てが、マクロブロック処理部15A〜15Nで処理を完了しているマクロブロックを、マクロブロック処理部15A〜15Nで処理可能な処理可能マクロブロックに設定する。
状態管理部16は(図2)、前処理部11の参照画像データ数検出部11Bから通知される参照画像データ数を目標参照画像データ数計算部16Aで、平均値化して目標参照画像データ数を計算する。またマクロブロック処理部15A〜15Nで同時並列的に処理するマクロブロックの参照画像データ数の総計が、この目標参照画像データ数となるように、マクロブロック割り当て部(MB割り当て部)16Bで、処理可能マクロブロックからマクロブロック処理部15A〜15Nで処理するマクロブロックを選択する。
図13は、状態管理部16の制御による1つのマクロブロック処理部の処理手順を示すフローチャートである。マクロブロック処理部は、画像データ、ストリーミングデータの処理を開始するとステップSP31からステップSP32に移り、状態管理部16に処理するマクロブロックを問い合わせする。
続いてマクロブロック処理部は、ステップSP33において、状態管理部16が処理可能マクロブロックの有無を判定する。ここで処理可能マクロブロックが存在しない場合、続くステップSP34において、状態管理部16で全て画像データの処理を終了したか否か判断する。このステップSP34で肯定結果が得られると、マクロブロック処理部は、状態管理部16からの通知に従ってステップSP34からステップSP35に移り、この処理手順を終了する。
これに対して例えば図10、図11に示すように、ラスタ走査開始端側のマクロブロックを他のマクロブロック処理部が処理している場合は、未だ画像データ、ビットストリームの処理を完了していないにも係わらず、当該マクロブロック処理部の処理可能マクロブロックが存在しないことになる。従ってこの場合、マクロブロック処理部は、状態管理部16からの通知に従って新たに処理可能マクロブロックが発生するに十分と予測される時間だけ待機した後、ステップSP34からステップSP32に戻る。
これに対して処理可能マクロブロックが存在する場合、マクロブロック処理部は、ステップSP33からステップSP36に移る。ここでマクロブロック処理部は、状態管理部16で処理対象のマクロブロックが決定され、この処理対象マクロブロックが状態管理部16から通知される。マクロブロック処理部は、続くステップSP37において、この通知された処理対象マクロブロックの処理を開始し、続くステップSP38でこの処理対象マクロブロックの処理を完了する。また続くステップSP39で、この処理対象マクロブロックの処理の完了を状態管理部16に通知し、状態管理部16では、この通知に従って目標参照画像データ数を計算する目標参照画像データ数計算処理が実行される。続いてマクロブロック処理部は、ステップSP32に戻り、続くマクロブロックの割り当てを状態管理部16に問い合わせする。
並列処理部12では、マクロブロック処理部15A〜15N毎に、この処理手順が実行されて、各マクロブロック処理部15A〜15Nに処理対象マクロブロックが割り当てられる。
図14は、状態管理部16の目標参照画像データ数の計算処理を示すフローチャートである。状態管理部16は、図13のステップSP39で示すように、マクロブロック処理部で1つのマクロブロックの処理を完了する毎に、また前処理部11から1つのマクロブロックの処理の完了が通知される毎に、この処理手順を実行し、現在の処理可能マクロブロックの参照画像データ数(1 Sum MC Pixel)を平均値化して目標参照画像データ数(Sum MC Pixel Target )を計算する。
すなわち状態管理部16は、この処理手順を開始すると、ステップSP41からステップSP42に移る。ここで状態管理部16は、処理可能マクロブロックの新たな追加か、1つのマクロブロックのマクロブロック処理部15A〜15Nの処理の完了かを判定する。ここで処理可能マクロブロックの新たな追加の場合、状態管理部16は、ステップSP42からステップSP43に移る。ここで状態管理部16は、処理可能マクロブロック数(All Sum MC)を値1だけインクリメントする。また続くステップSP44において、参照画像データ数検出部11Bからの通知に基づいて、この追加された処理可能マクロブロックの参照画像データ数(1 Sum MC Pixel)を検出する。また続くステップSP45において、それまでの参照画像データ数の総計(Sum MC Pixel)に、ステップSP44で検出した参照画像データ数(1 Sum MC Pixel)を加算し、参照画像データの総計(Sum MC Pixel)を更新する。
続いて状態管理部16は、ステップSP46に移り、ステップSP45で更新した参照画像データの総計(Sum MC Pixel)を、ステップSP43で計算した処理可能マクロブロック数(All Sum MC)で割り算して平均値(Sum MC Pixel/All Sum MC)を計算する。また平均値(Sum MC Pixel/All Sum MC)にマクロブロック処理部15A〜15Nの個数を乗算して目標参照画像データ数(Sum MC Pixel Target )を計算し、ステップSP47に移ってこの処理手順を終了する。
これに対してこの処理手順の開始が1つのマクロブロックのマクロブロック処理部15A〜15Nの処理の完了によるものの場合、状態管理部16は、ステップSP42からステップSP49に移る。ここで状態管理部16は、処理可能マクロブロック数(All Sum
MC)を値1だけデクリメントする。また続くステップSP50において、この処理の完了したマクロブロックの参照画像データ数(1 Sum MC Pixel)を検出する。また続くステップSP51において、それまでの参照画像データ数の総計(Sum MC Pixel)から、ステップSP50で検出した参照画像データ数(1 Sum MC Pixel)を減算し、参照画像データの総計(Sum MC Pixel)を更新する。
続いて状態管理部16は、ステップSP46に移り、この場合、ステップSP51で更新した参照画像データの総計(Sum MC Pixel)を、ステップSP49で計算した処理可能マクロブロック数(All Sum MC)で割り算して平均値(Sum MC Pixel/All Sum MC)を計算する。またこの平均値(Sum MC Pixel/All Sum MC)にマクロブロック処理部15A〜15Nの個数を乗算して目標参照画像データ数(Sum MC Pixel Target )を計算し、ステップSP47に移ってこの処理手順を終了する。
図1は、この目標参照画像データ数(Sum MC Pixel Target )を基準にした処理マクロブロックの設定を示すフローチャートである。この図1の処理手順は、図13のステップSP33、SP36に対応する状態管理部16の処理手順である。状態管理部16は、マクロブロック処理部15A〜15Nから処理対象マクロブロックの割り当て要求があると、この処理手順を開始してステップSP61からステップSP62に移る。ここで状態管理部16は、選択可能マクロブロックが存在するか否か判断する。ここで選択可能マクロブロックが存在しない場合、マクロブロックの割り当てが困難な旨、割り当て要求のあったマクロブロック処理部15A〜15Nに通知した後、ステップSP62からステップSP63に移ってこの処理手順を終了する。
これに対して選択可能マクロブロックが存在する場合、状態管理部16は、ステップSP62からステップSP64に移る。ここで状態管理部16は、他のマクロブロック処理部15A〜15Nが現在処理中のマクロブロックについて、参照画像データ数の総和(Cur Sum MC Pixel)を計算する。
続いて状態管理部16は、ステップSP65に移り、処理可能マクロブロックの各参照画像データ数(1 Sum MC Pixel)をそれぞれステップSP64で求めた参照画像データ数の総和(Cur Sum MC Pixel)に加算する。また各加算値(Cur Sum MC Pixel+1 Sum MC Pixel)から目標参照画像データ数(Sum MC Pixel Target )を減算し、減算値(Cur Sum MC Pixel+1 Sum MC Pixel−Sum MC Pixel Target )の絶対値を求める。このステップSP65の処理により状態管理部16は、現在処理中のマクロブロックに対し、各選択可能マクロブロックを処理対象に加えた場合の、目標参照画像データ数(Sum MC Pixel Target )に対する全参照画像データ数の偏差を検出する。
続いて状態管理部16は、ステップSP66に移り、ステップSP55で計算した絶対値のうちで最も値の小さな絶対値を検出し、この絶対値の選択可能マクロブロックを要求のあったマクロブロック処理部15A〜15Nの処理対象に設定する。状態管理部16は、この処理対象に設定したマクロブロックを要求のあったマクロブロック処理部15A〜15Nに通知すると、ステップSP63に移ってこの処理手順を終了する。
この図14の処理により、状態管理部16は、図15に示すように、複数のマクロブロック処理部で処理中の参照画像データ数の総計が、目標参照画像データ数となるように、マクロブロック処理部で処理可能なマクロブロックから各マクロブロック処理部の処理対象マクロブロックを設定し、バスBUSの一時的な負荷の増大を防止する。なおこの図15の例は、マクロブロック処理部15A〜15Nが4個の場合に、1つのマクロブロック処理部で座標(22,0)のマクロブロックの処理を完了し、その時点で、他のマクロブロック処理部が座標(1,20)、(3,14)、(4,11)のマクロブロックを処理している場合である。状態管理部16は、この座標(22,0)のマクロブロックの処理を完了したマクロブロック処理部からの問い合わせにより、座標(1,20)、(3,14)、(4,11)のマクロブロックにおける参照画像データ数の総計を計算する。またこの計算した総計に基づいて、座標(0,23)、(2,17)、(5,8)、(6,5)、(7,2)、(8,0)の選択可能なマクロブロックから、4つのマクロブロック処理部で処理するマクロブロックの参照画像データ数の総計が目標参照画像データ数に最も近づくマクロブロックを選択して、問い合わせのあったマクロブロック処理部の処理対象に設定する。
すなわち図16に示すようにマクロブロックMB1〜MBnを処理可能な場合、状態管理部16は、参照画像データ数の総計が最も目標参照画像データ数に近づく処理可能マクロブロックMB3を問い合わせのあったマクロブロック処理部の処理対象に設定する。なおここで図16は、マクロブロック処理部で処理するマクロブロックについて、参照画像データ数の総計の時間変化を示す特性曲線図である。
ここでH.264/MPEG−4AVCでは、参照画像データ数が最大である8画素×8画素のサブマクロブロックで1つのマクロブロックを処理した場合(図26)、このマクロブロックに隣接するマクロブロックでは、イントラ予測することが規格で定められており、このイントラ予測では、参照画像データ数が0個となる。従って8画素×8画素のサブマクロブロックで使用する最大の最小画像データ数をMとおくと、マクロブロックの参照画像データ数の平均値は、最大でM/2個となる。従って上述の目標参照画像データ数は、M/2個より小さい値となり、図16との対比により図17に示すように、複数のマクロブロック処理部15A〜15Nで必要とする参照画像データ数は、目標参照画像データ数を中心にして上下動することになる。
そこでこのエンコーダ/デコーダ10では、マクロブロック処理部15A〜15Nで必要とする参照画像データ数をM/2個に設定し、この参照画像データ数M/2個を基準にしてバスBUSが設計される。
(2)実施例の動作
以上の構成において、この実施例のエンコーダ/デコーダ10(図2)では、例えばチュナー、光ディスク装置等から出力される画像データが、ビデオI/O2を介して順次メモリ4に格納され、このメモリ4に格納された画像データが、前処理部11、並列処理部12、後処理部13でパイプライン処理され、ビットストリームI/O3を介して出力される。またこのエンコーダ/デコーダ10で画像データを復号する場合、ビットストリームI/O3を介して入力されるビットストリームがメモリ4に順次格納され、このビットストリームが前処理部11、並列処理部12、後処理部13でパイプライン処理されて画像データが復号化され、この復号した画像データがビデオI/O2を介して出力される。この前処理部11、並列処理部12、後処理部13におけるパイプライン処理により、エンコーダ/デコーダ10では、1つの機能ブロックで符号化、復号化する場合に比して、高速度の画像データを符号化、復号化することができる。
また画像データ、ビットストリームは、それぞれ前処理部11で前処理された後、並列処理部12に設けられた複数のマクロブロック処理部15A〜15Nにおいてマクロブロック単位で同時並列的に処理され、後処理部13で後処理される。このマクロブロック処理部15A〜15Nにおけるマクロブロック単位の同時並列的な処理により、画像データ、ビットストリームは、さらに一段と高速度に処理されることになり、画像データ、ビットストリームが高解像度の場合であっても、各部の構成を高性能化することなく、リアルタイムで処理することが可能となる。
しかしながらこのエンコーダ/デコーダ10では、H.264/MPEG−4AVCで画像データを符号化、復号化しており、H.264/MPEG−4AVCでは、最適予測モードに応じて動き補償に使用する参照画像データ数が大きく変化することになる(図26、図27及び図30)。このエンコーダ/デコーダ10では、複数のマクロブロック処理部15A〜15Nで動き補償の処理をそれぞれ実行することから、これら複数のマクロブロック処理部15A〜15Nの動き補償モードによっては、メモリ4から多数の参照画像データを並列処理部12に転送することが必要になり、バスBUSの負担が一時的に著しく増大することになる。
そこでこのエンコーダ/デコーダ10では、各マクロブロック処理部15A〜15Nの動作を管理する状態管理部16で各マクロブロック処理部15A〜15Nの処理対象マクロブロックを設定するようにして、この複数のマクロブロック処理部15A〜15Nで処理中の参照画像データ数の総計が、目標参照画像データ数となるように各マクロブロック処理部15A〜15Nの処理対象マクロブロックが設定される。
その結果、このエンコーダ/デコーダ10では、この目標参照画像データ数を上下するように、各マクロブロック処理部15A〜15Nで必要とする参照画像データの総数が制御され(図17)、バスBUSの一時的な著しい負荷の増大を防止することができる。従って、バスBUSは、バンド幅を低減して構成を簡略化することができる。特に、高速度のメモリに参照画像データを格納してキャッシングにより処理速度を高速度化することも考えられ、この場合には、このキャッシュメモリに格納して準備する参照画像データ数の大きな変動を防止することができ、キャッシュメモリを小容量化することができる。
より具体的に、H.264/MPEG−4AVCでは、ラスタ走査の順序でマクロブロックを処理した場合に、先に処理する隣接マクロブロックを参照してマクロブロックを処理する参照関係があることから、このエンコーダ/デコーダ10では、前処理部11で処理されたマクロブロックのうちで、この参照関係を満足するマクロブロックが、マクロブロック処理部15A〜15Nの処理可能マクロブロックに設定される。またこの処理可能マクロブロックの中から、複数のマクロブロック処理部15A〜15Nで処理中の参照画像データ数の総計が、目標参照画像データ数となるように、各マクロブロック処理部15A〜15Nの処理対象マクロブロックが設定される。その結果、このエンコーデ/デコーダ10では、処理済の隣接マクロブロックの処理結果を参照するフォーマットで画像データを符号化、復号化する場合でも、複数のマクロブロック処理部15A〜15Nで同時並列的にマクロブロックを処理して、高速度で符号化、復号化の処理を実行しつつバスBUSの一時的な負担の増大を防止することができる。また前処理部とのパイプライン処理によっても、高速度で符号化、復号化の処理を実行しつつバスBUSの一時的な負担の増大を防止することができる。
またエンコーダ/デコーダ10では、マクロブロック処理部15A〜15Nの処理可能マクロブロックで必要な参照画像データ数から、目標参照画像データ数が設定される。より具体的には、処理可能なマクロブロックの参照画像データ数が平均値化されて目標参照画像データ数が設定される。従ってエンコーダ/デコーダ10では、画像データに応じて変化する動き補償モードに応じて適応的に目標参照画像データ数が設定され、種々に画像が変化する場合等にあっても、目標参照画像データ数を基準として各マクロブロック処理部に処理対象マクロブロックを適切に割り当て、バスBUSの一時的な負担の増大を防止することができる。
(3)実施例の効果
以上の構成によれば、複数のマクロブロック処理部で処理中の参照画像データ数の総計が目標参照画像データ数となるように、マクロブロック処理部で処理可能なマクロブロックから各マクロブロック処理部の処理対象マクロブロックを設定することにより、複数の処理部で同時並列的に画像データを符号化処理、復号化処理する場合に、バスの一時的な負荷の増大を防止することができる。
また前処理してこの各マクロブロック処理部の処理可能なマクロブロックを設定することにより、符号化処理、復号化処理をパイプライン処理して高速度に画像データを処理することができる。
また隣接マクロブロックの参照関係を満足するマクロブロックを、各マクロブロック処理部の処理可能なマクロブロックに設定することにより、隣接マクロブロックを参照するフォーマットの符号化処理、復号化処理に適用して、符号化処理、復号化処理を高速度で実行することができる。
また複数のマクロブロック処理部で処理可能なマクロブロックにおける参照画像データ数から、目標参照画像データ数を計算することにより、種々に画像が変化する場合等にあっても、目標参照画像データ数を基準とした各マクロブロック処理部への処理対象マクロブロックの割り当てを適切に実行してバスBUSの一時的な負担の増大を防止することができる。
より具体的に、複数のマクロブロック処理部で処理可能なマクロブロックにおける参照画像データ数の平均値を求めて、目標参照画像データ数に設定することにより、種々に画像が変化する場合等にあっても、目標参照画像データ数を基準とした各マクロブロック処理部への処理対象マクロブロックの割り当てを適切に実行してバスBUSの一時的な負担の増大を防止することができる。
1、10……エンコーダ/デコーダ、4……メモリ4、11……前処理部、6、12……並列処理部、7A〜7N、15A〜15N……マクロブロック処理部、8、16……状態管理部、9、13……後処理部