以下、本発明の実施の形態について説明する。最初に符号化部の構成について説明する。
図1は、本発明を適用した符号化部の構成例を示すブロック図である。図1に示される符号化部10は、ソフトウェアプログラムにより構成され、画像データを符号化して符号化データを生成するソフトウェアエンコーダが所定の情報処理装置のCPU(Central Processing Unit)により実行されることにより実現される機能を模式的に示したものである。図1に示されるように符号化部10は、ウェーブレット変換部11、途中計算用バッファ部12、係数並び替え用バッファ部13、係数並び替え部14、およびエントロピ符号化部15の機能を有する。
符号化部10に入力された画像データは、ウェーブレット変換部11を介して途中計算用バッファ部12に一時的に溜め込まれる。ウェーブレット変換部11は、途中計算用バッファ部12に溜め込まれた画像データに対してウェーブレット変換を施す。すなわち、ウェーブレット変換部11は、途中計算用バッファ部12から画像データを読み出して分析フィルタによりフィルタ処理を施して低域成分および高域成分の係数のデータを生成し、生成された係数データを途中計算用バッファ部12に格納する。ウェーブレット変換部11は、水平分析フィルタと垂直分析フィルタとを有し、画像データ群に対して、画面水平方向と画面垂直方向の両方について分析フィルタ処理を行う。ウェーブレット変換部11は、途中計算用バッファ部12に格納された低域成分の係数データを再度読み出し、読み出した係数データに対して分析フィルタによるフィルタ処理を施して、高域成分および低域成分の係数のデータをさらに生成する。生成された係数データは、途中計算用バッファ部12に格納される。
ウェーブレット変換部11は、この処理を繰り返して分解レベルが所定レベルに達したら、途中計算用バッファ部12から係数データを読み出し、読み出された係数データを係数並び替え用バッファ部13に書き込む。
係数並び替え部14は、係数並び替え用バッファ部13に書き込まれた係数データを所定の順序で読み出し、エントロピ符号化部15に供給する。エントロピ符号化部15は、供給された係数データを、所定の方法で量子化し、例えばハフマン符号化や算術符号化といった所定のエントロピ符号化方式で符号化する。エントロピ符号化部15は、生成した符号化データを符号化部10の外部に出力する。
次に、図1のウェーブレット変換部11で行われる処理について、より詳細に説明する。先ず、ウェーブレット変換について、概略的に説明する。画像データに対するウェーブレット変換では、図2に概略的に示されるように、画像データを空間周波数の高い帯域と低い帯域とに分割する処理を、分割の結果得られる空間周波数の低い帯域のデータに対して再帰的に繰り返す。こうして、空間周波数の低い帯域のデータをより小さな領域に追い込んでいくことで、効率的な圧縮符号化を可能とする。
なお、図2は、画像データの最低域成分領域に対する低域成分の領域Lおよび高域成分の領域Hへの分割処理を3回、繰り返し、分割の階層の総数を示す分割レベル=3とした場合の例である。図2において、"L"および"H"は、それぞれ低域成分および高域成分を表し、"L"および"H"の順序は、前側が横方向に分割した結果の帯域を示し、後側が縦方向に分割した結果の帯域を示す。また、"L"および"H"の前の数字は、その領域の階層を示しており、低域成分の階層ほど小さい値で表されている。この階層の最大値が、ウェーブレット変換のその時の分割レベル(分割数)を示す。
また、図2の例から分かるように、画面の右下の領域から左上の領域にかけて段階的に処理がなされ、低域成分が追い込まれていく。すなわち、図2の例では、画面の右下の領域が最も低域成分の少ない(高域成分が最も多く含まれる)領域3HHとされる、画面が4分割された左上の領域は、さらに4分割され、この4分割された領域のうち左上の領域がさらに4分割される。最も左上隅の領域は、最も低域成分を多く含む領域0LLとされる。
低域成分に対して繰り返し変換および分割を行うのは、画像のエネルギが低域成分に集中しているためである。このことは、図3Aに一例が示される分割レベル=1の状態から、図3Bに一例が示される分割レベル=3の状態のように分割レベルを進めていくに従って、図3Bに示されるようにしてサブバンドが形成されていくことからも、理解される。例えば、図2におけるウェーブレット変換の分割レベルは3であり、この結果、10個のサブバンドが形成されている。
ウェーブレット変換部11は、通常、低域フィルタと高域フィルタとから構成されるフィルタバンクを用いて、上述のような処理を行う。なお、デジタルフィルタは、通常、複数タップ長のインパルス応答すなわちフィルタ係数を持っているため、フィルタ処理を行えるだけの入力画像データまたは係数データを予めバッファリングしておく必要がある。また、ウェーブレット変換を多段にわたって行う場合も同様に、前段で生成したウェーブレット変換係数を、フィルタ処理が行える数だけバッファリングしておく必要がある。
このウェーブレット変換の具体的な例として、5×3フィルタを用いた方法について説明する。この5×3フィルタを用いた方法は、JPEG(Joint Photographic Experts Group)2000規格でも採用されており、少ないフィルタタップ数でウェーブレット変換を行うことができる点で、優れた方法である。
5×3フィルタのインパルス応答(Z変換表現)は、次の式(1)および式(2)に示すように、低域フィルタH0(z)と、高域フィルタH1(z)とから構成される。
H0(z)=(−1+2z-1+6z-2+2z-3−z-4)/8 ・・・(1)
H1(z)=(−1+2z-1−z-2)/2 ・・・(2)
これら式(1)および式(2)によれば、低域成分および高域成分の係数を、直接的に算出することができる。ここで、リフティング(Lifting)技術を用いることで、フィルタ処理の計算を減らすことができる。
次に、このウェーブレット変換方法について、さらに具体的に説明する。図4は、5×3フィルタのリフティングによるフィルタ処理を、分解レベル=2まで実行した例を示している。なお、図4において、図の左側に分析フィルタとして示される部分は、図1のウェーブレット変換部11のフィルタである。また、図の右側に合成フィルタとして示される部分は、後述するウェーブレット逆変換部のフィルタである。
なお、以下の説明では、例えば表示デバイスなどにおいて画面の左上隅の画素を先頭として、画素が画面の左端から右端に向けて走査されて1ラインが構成され、ライン毎の走査が画面の上端から下端に向けて行われて1画面が構成されるものとする。
図4において、左端列は、原画像データのライン上の対応する位置にある画素データが縦方向に並べられて示されている。すなわち、ウェーブレット変換部11におけるフィルタ処理は、垂直フィルタを用いて画面上を画素が縦に走査されて行われる。左端から1列目乃至3列目が分割レベル=1のフィルタ処理を示し、4列目乃至6列目が分割レベル=2のフィルタ処理を示す。左端から2列目は、左端の原画像データの画素に基づく高域成分出力、左端から3列目は、原画像データおよび高域成分出力に基づく低域成分出力を示す。分割レベル=2のフィルタ処理は、左端から4列目乃至6列目に示されるように、分割レベル=1のフィルタ処理の出力に対して処理がなされる。
分解レベル=1のフィルタ処理において、第1段階のフィルタ処理として、原画像データの画素に基づき高域成分の係数データが算出され、第2段階のフィルタ処理として、第1段階のフィルタ処理で算出された高域成分の係数データと、原画像データの画素とに基づき低域成分の係数データが算出される。分解レベル=1の一例のフィルタ処理を、図4における左側(分析フィルタ側)の第1列目乃至第3列目に示す。算出された高域成分の係数データは、図1の係数並び替え用バッファ部13に格納される。また、算出された低域成分の係数データは、図1の途中計算用バッファ部12に格納される。
図4においては、係数並び替え用バッファ部13は、一点鎖線で囲まれた部分として示し、途中計算用バッファ部12は、点線で囲まれた部分として示す。
途中計算用バッファ部12に保持された分解レベル=1のフィルタ処理の結果に基づき、分解レベル=2のフィルタ処理が行われる。分解レベル=2のフィルタ処理では、分解レベル=1のフィルタ処理において低域成分の係数として算出された係数データを、低域成分および高域成分を含んだ係数データと見做して、分解レベル=1と同様のフィルタ処理を行う。分解レベル=2のフィルタ処理により算出された、高域成分の係数データおよび低域成分の係数データは、係数並び替え用バッファ部13に格納される。
ウェーブレット変換部11では、上述したようなフィルタ処理を、画面の水平方向および垂直方向にそれぞれ行う。例えば、先ず、分解レベル=1のフィルタ処理を水平方向に行い、生成された高域成分および低域成分の係数データを途中計算用バッファ部12に格納する。次に、途中計算用バッファ部12に格納された係数データに対して、垂直方向に分解レベル=1のフィルタ処理を行う。この分解レベル=1の水平および垂直方向の処理により、高域成分をさらに高域成分および低域成分に分解した係数データのそれぞれによる領域HHおよび領域HLと、低域成分をさらに高域成分および低域成分に分解した係数データのそれぞれによる領域LHおよび領域LLとの4領域が形成される。
そして、分解レベル=2では、水平方向および垂直方向のそれぞれについて、分解レベル=1で生成された低域成分の係数データに対してフィルタ処理が行われる。すなわち、分解レベル=2では、分解レベル=1で分割されて形成された領域LLがさらに4分割され、領域LL内にさらに領域HH、領域HL、領域LHおよび領域LLが形成される。
ウェーブレット変換部11は、ウェーブレット変換によるフィルタ処理を、画面の縦方向について、数ライン毎の処理に分割して、複数回に分けて段階的に行うようにしている。図4の例では、画面上の第1ラインからの処理になる1回目の処理は、7ラインについてフィルタ処理を行い、8ライン目からの処理になる2回目以降の処理は、4ライン毎にフィルタ処理を行っている。このライン数は、高域成分と低域成分とに2分解した後に、1ライン分の最低域成分が生成されるために必要なライン数に基づく。
なお、以下において、この最低域成分の1ライン分(最低域成分のサブバンドの1ライン分の係数データ)を生成するために必要な、他のサブバンドも含めたラインの集まりを、プレシンクト(またはラインブロック)と称する。ここでラインとは、ウェーブレット変換前の画像データに対応するピクチャ若しくはフィールド内、または各サブバンド内において形成される1行分の画素データ若しくは係数データのことを示す。すなわち、プレシンクト(ラインブロック)とは、ウェーブレット変換前の元の画像データにおける、ウェーブレット変換後の最低域成分のサブバンド1ライン分の係数データを生成するために必要なライン数分の画素データ群、または、その画素データ群をウェーブレット変換して得られる各サブバンドの係数データ群のことを示す。
図4によれば、分解レベル=2のフィルタ処理結果で得られる係数C5は、係数C4および途中計算用バッファ部12に格納された係数Caに基づき算出され、係数C4は、途中計算用バッファ部12に格納された係数Ca、係数Cbおよび係数Ccに基づき算出される。さらに、係数Ccは、係数並び替え用バッファ部13に格納される係数C2および係数C3、並びに、第5ラインの画素データに基づき算出される。また、係数C3は、第5ライン乃至第7ラインの画素データに基づき算出される。このように、分割レベル=2における低域成分の係数C5を得るためには、第1ライン乃至第7ラインの画素データが必要とされる。
これに対して、2回目以降のフィルタ処理においては、前回までのフィルタ処理で既に算出され係数並び替え用バッファ部13に格納されている係数データを用いることができるので、必要なライン数が少なくて済む。
すなわち、図4によれば、分解レベル=2のフィルタ処理結果で得られる低域成分の係数のうち、係数C5の次の係数である係数C9は、係数C4および係数C8、並びに、途中計算用バッファ部12に格納された係数Ccに基づき算出される。係数C4は、上述した1回目のフィルタ処理により既に算出され、係数並び替え用バッファ部13に格納されている。同様に、係数Ccは、上述の1回目のフィルタ処理により既に算出され、途中計算用バッファ部12に格納されている。したがって、この2回目のフィルタ処理においては、係数C8を算出するためのフィルタ処理のみが、新たになされることになる。この新たなフィルタ処理は、第8ライン乃至第11ラインがさらに用いられてなされる。
このように、2回目以降のフィルタ処理は、前回までのフィルタ処理により算出され途中計算用バッファ部12および係数並び替え用バッファ部13に格納されたデータを用いることができるので、それぞれ4ライン毎の処理で済むことになる。
なお、画面上のライン数が符号化のライン数と合致しない場合は、原画像データのラインを所定の方法で複製してライン数を符号化のライン数と合わせて、フィルタ処理を行う。
このように、最低域成分1ライン分の係数データが得られるだけのフィルタ処理を段階的に、画面全体のラインに対して複数回に分けて(プレシンクト単位で)行うことで、符号化データを伝送した際に低遅延で復号画像を得ることを可能としている。
ウェーブレット変換を行うためには、ウェーブレット変換そのものを実行するために用いられる第1のバッファと、所定の分割レベルまで処理を実行する間に生成される係数を格納するための第2のバッファとが必要とされる。第1のバッファは、途中計算用バッファ部12に対応し、図4においては点線で囲まれて示されている。また、第2のバッファは、係数並び替え用バッファ部13に対応し、図4においては一点鎖線に囲まれて示されている。第2のバッファに格納された係数は、復号の際に用いられるため、後段のエントロピ符号化処理の対象とされる。
次に、図1の係数並び替え部14の処理について説明する。上述したように、ウェーブレット変換部11で算出された係数データは、係数並び替え用バッファ部13に格納され、係数並び替え部14により順序を並び替えられて読み出され、コーディングユニット単位でエントロピ符号化部15に送出される。
既に説明したように、ウェーブレット変換においては、高域成分側から低域成分側へと係数が生成されていく。図4の例では、1回目において、原画像の画素データにより、分解レベル=1のフィルタ処理で、高域成分の係数C1、係数C2および係数C3が順次生成される。そして、分解レベル=1のフィルタ処理で得られた低域成分の係数データに対して分解レベル=2のフィルタ処理を行い、低域成分の係数C4および係数C5が順次生成される。すなわち、第1回目では、係数C1、係数C2、係数C3、係数C4、係数C5の順に、係数データが生成される。この係数データの生成順は、ウェーブレット変換の原理上、必ずこの順序(高域から低域の順)になる。
これに対して、復号側では、低遅延で即座に復号を行うためには低域成分から画像の生成および出力を行う必要がある。そのため、符号化側で生成された係数データを最低域成分側から高域成分側に向けて並び替えて復号側に供給することが望ましい。
図4の例を用いて、より具体的に説明する。図4の右側は、逆ウェーブレット変換を行う合成フィルタ側を示す。復号側の、出力画像データの第1ライン目を含む1回目の合成処理(逆ウェーブレット変換処理)は、符号化側の1回目のフィルタ処理で生成された最低域成分の係数C4および係数C5と、係数C1とを用いて行われる。
すなわち、1回目の合成処理においては、係数C5、係数C4、係数C1の順に符号化側から復号側に係数データを供給し、復号側では、分解レベル=2に対応する合成処理である合成レベル=2の処理で、係数C5および係数C4に対して合成処理を行って係数Cfを生成し、バッファに格納する。そして、分解レベル=1に対応する合成処理である合成レベル=1の処理で、この係数Cfと係数C1に対して合成処理を行って、第1ラインを出力する。
このように、第1回目の合成処理においては、符号化側で係数C1、係数C2、係数C3、係数C4、係数C5の順に生成され係数並び替え用バッファ部13に格納された係数データが、係数C5、係数C4、係数C1、・・・の順に並び替えられて復号側に供給される。
なお、図4の右側に示す合成フィルタ側では、符号化側から供給される係数について、括弧内に符号化側での係数の番号を記し、括弧外に合成フィルタのライン順を記す。例えば係数C1(5)は、図4の左側の分析フィルタ側では係数C5であって、合成フィルタ側では第1ライン目であることを示す。
符号化側の2回目以降のフィルタ処理で生成された係数データによる復号側の合成処理は、前回の合成処理の際に合成あるいは符号化側から供給された係数データを用いて行うことができる。図4の例では、符号化側の2回目のフィルタ処理で生成された低域成分の係数C8および係数C9を用いて行う、復号側の2回目の合成処理は、符号化側の1回目のフィルタ処理で生成された係数C2および係数C3がさらに必要とされ、第2ライン乃至第5ラインが復号される。
すなわち、2回目の合成処理においては、係数C9、係数C8、係数C2、係数C3の順に符号化側から復号側に係数データを供給する。復号側では、合成レベル=2の処理において、係数C8および係数C9と、1回目の合成処理の際に符号化側から供給された係数C4とを用いて係数Cgを生成し、バッファに格納する。この係数Cgと、上述の係数C4と、1回目の合成処理により生成されバッファに格納された係数Cfとを用いて係数Chを生成し、バッファに格納する。
そして、合成レベル=1の処理において、合成レベル=2の処理で生成されバッファに格納された係数Cgおよび係数Chと、符号化側から供給された係数C2(合成フィルタでは係数C6(2)と示されている)および係数C3(合成フィルタでは係数C7(3)と示されている)とを用いて合成処理が行われ、第2ライン乃至第5ラインが復号される。
このように、第2回目の合成処理においては、符号化側で係数C2、係数C3、(係数C4、係数C5)、係数C6、係数C7、係数C8、係数C9の順に生成された係数データが、係数C9、係数C8、係数C2、係数C3、・・・の順に並び替えられて復号側に供給される。
3回目以降の合成処理においても、同様にして、係数並び替え用バッファ部13に格納された係数データが所定の順序に並び替えられて復号部に供給され、4ラインずつ、ラインが復号される。
なお、符号化側において画面の下端のラインを含むフィルタ処理(以下、最後の回と呼ぶ)に対応する復号側の合成処理では、それまでの処理で生成されバッファに格納された係数データを全て出力することになるため、出力ライン数が多くなる。図4の例では、最後の回に8ラインが出力される。
なお、係数並び替え部14による係数データの並び替え処理は、例えば、係数並び替え用バッファ部13に格納された係数データを読み出す際の読み出しアドレスを、所定の順序に設定することでなされる。
図5を用いて、上述までの処理をより具体的に説明する。図5は、5×3フィルタを用いて、分解レベル=2までウェーブレット変換によるフィルタ処理を施した例である。ウェーブレット変換部11において、図5Aに一例が示されるように、入力画像データの第1ラインから第7ラインに対して1回目のフィルタ処理が水平および垂直方向にそれぞれ行われる(図5AのIn−1)。
1回目のフィルタ処理の分解レベル=1の処理において、係数C1、係数C2、および係数C3の3ライン分の係数データが生成され、図5Bに一例が示されるように、分解レベル=1で形成される領域HH、領域HLおよび領域LHのそれぞれに配置される(図5BのWT−1)。
また、分解レベル=1で形成される領域LLは、分解レベル=2による水平および垂直方向のフィルタ処理でさらに4分割される。分解レベル=2で生成される係数C5および係数C4は、分解レベル=1による領域LL内において、領域LLに係数C5による1ラインが配置され、領域HH、領域HLおよび領域LHのそれぞれに、係数C4による1ラインが配置される。
ウェーブレット変換部11による2回目以降のフィルタ処理では、4ライン毎にフィルタ処理が行われ(図5AのIn−2・・・)、分解レベル=1で2ラインずつの係数データが生成され(図5BのWT−2)、分解レベル=2で1ラインずつの係数データが生成される。
図4の2回目の例では、分解レベル=1のフィルタ処理で係数C6および係数C7の2ライン分の係数データが生成され、図5Bに一例が示されるように、分解レベル1で形成される領域HH、領域HLおよび領域LHの、1回目のフィルタ処理で生成された係数データの次から配置される。同様に、分解レベル=1による領域LL内において、分解レベル=2のフィルタ処理で生成された1ライン分の係数C9が領域LLに配置され、1ライン分の係数C8が領域HH、領域HLおよび領域LHにそれぞれ配置される。
図5Bのようにウェーブレット変換されたデータを復号した際には、図5Cに一例が示されるように、符号化側の第1ライン乃至第7ラインによる1回目のフィルタ処理に対して、復号側の1回目の合成処理による第1ラインが出力される(図5CのOut−1)。以降、符号化側の2回目から最後の回の前までのフィルタ処理に対して、復号側で4ラインずつが出力される(図5CのOut−2・・・)。そして、符号化側の最後の回のフィルタ処理に対して、復号側で8ラインが出力される。
ウェーブレット変換部11で高域成分側から低域成分側へと生成された係数データは、係数並び替え用バッファ部13に順次格納される。係数並び替え部14は、上述した係数データの並び替えが可能となるまで係数並び替え用バッファ部13に係数データが蓄積されると、係数並び替え用バッファ部13から合成処理に必要な順に並び替えて係数データを読み出す。読み出された係数データは、エントロピ符号化部15に順次、供給される。
エントロピ符号化部15は、供給される係数データを順次符号化し、生成した符号化データを符号化部10の外部に出力する。
次に、図1の符号化部10に対応する復号部について説明する。図6は、本発明を適用した復号部の構成例を示すブロック図である。図6に示される復号部20は、ソフトウェアプログラムにより構成され、画像データが符号化された符号化データを復号して画像データを復元するソフトウェアデコーダが所定の情報処理装置のCPUにより実行されることにより実現される機能を模式的に示したものである。図6に示されるように、復号部20は、エントロピ復号部21、係数バッファ部22、およびウェーブレット逆変換部23の機能を有する。
エントロピ復号部21は、供給された符号化データをエントロピ符号化部15による符号化方法に対応する復号方法で復号し、係数データを得る。その係数データは、係数バッファ部22に格納される。ウェーブレット逆変換部23は、係数バッファ部22に格納された係数データを用いて、合成フィルタによる合成フィルタ処理(ウェーブレット逆変換)を行い、合成フィルタ処理の結果を再び係数バッファ部22に格納する。ウェーブレット逆変換部23は、この処理を分解レベルに応じて繰り返して、復号された画像データ(出力画像データ)を得ると、それを外部に出力する。
次に、符号化部10および復号部20により実行される処理の流れの例について説明する。最初に、図7のフローチャートを参照して符号化部10により実行される符号化処理の流れの例を説明する。
符号化処理が開始されると、ウェーブレット変換部11は、ステップS1において、処理対象プレシンクトの番号Aを初期設定にする。通常の場合、番号Aは「1」に設定される。設定が終了すると、ウェーブレット変換部11は、ステップS2において、最低域サブバンドにおいて上からA番目の1ラインを生成するのに必要なライン数(すなわち、1プレシンクト)の画像データを取得し、その画像データに対して、ステップS3において画面垂直方向に並ぶ画像データに対して分析フィルタリングを行う垂直分析フィルタリング処理を行い、ステップS4において画面水平方向に並ぶ画像データに対して分析フィルタリング処理を行う水平分析フィルタリング処理を行う。
ステップS5においてウェーブレット変換部11は、分析フィルタリング処理を最終レベルまで行ったか否かを判定する。分解レベルが最終レベルに達していないと判定された場合、処理はステップS3に戻り、現在の分解レベルに対して、ステップS3およびステップS4の分析フィルタリング処理が繰り返される。
ステップS5において、分析フィルタリング処理が最終レベルまで行われたと判定された場合、処理は、ステップS6に進む。
ステップS6において、係数並び替え部14は、プレシンクトA(ピクチャ(フレームまたはフィールド)の上からA番目のプレシンクト)の係数を低域から高域の順番に並び替える。エントロピ符号化部15は、ステップS7において、その係数に対してライン毎にエントロピ符号化し、ステップS8において、プレシンクトAの符号化データを送出する。
ウェーブレット変換部11は、ステップS9において番号Aの値を「1」インクリメントして次のプレシンクトを処理対象とし、ステップS10において、処理対象のピクチャ(フレームまたはフィールド)について、未処理の画像入力ラインが存在するか否かを判定する。未処理の画像入力ラインが存在すると判定された場合、処理は、ステップS2に戻り、新たな処理対象のプレシンクトに対してそれ以降の処理が繰り返される。
以上のようにステップS2乃至ステップS10の処理が繰り返し実行され、各プレシンクトが符号化される。そして、ステップS10において、未処理の画像入力ラインが存在しないと判定された場合、そのピクチャに対する符号化処理が終了される。次のピクチャに対しては新たに符号化処理が開始される。
このように、ウェーブレット変換部11は、プレシンクト単位で垂直分析フィルタリング処理および水平分析フィルタリング処理を最終レベルまで連続して行うので、従来の方法と比較して、一度に(同時期に)保持する(バッファリングする)必要のあるデータの量が少なく、用意すべきバッファのメモリ量を大幅に低減させることができる。また、最終レベルまで分析フィルタリング処理が行われることにより、後段の係数並び替えやエントロピ符号化等の処理も行うことができる(つまり、係数並び替えやエントロピ符号化をプレシンクト単位で行うことができる)。従って、画面全体に対してウェーブレット変換を行う方法と比較して遅延時間を大幅に低減させることができる。
次に、図8のフローチャートを参照して、復号部20により実行される復号処理の流れの例を説明する。
復号処理が開始されると、エントロピ復号部21は、ステップS31において、復号部20の外部より供給される符号化データを取得し、ステップS32において、ライン毎に符号化データをエントロピ復号する。ステップS33において、係数バッファ部22は、その復号されて得られた係数データを保持する。ステップS34においてウェーブレット逆変換部23は、係数バッファ部22に1プレシンクト分の係数データが蓄積されたか否かを判定する。1プレシンクト分の係数データが蓄積されていないと判定された場合、処理は、ステップS31に戻り、それ以降の処理が実行される。つまり、ウェーブレット逆変換部23は、係数バッファ部22に1プレシンクト分の係数データが蓄積されるまで待機する。
ステップS34において係数バッファ部22に1プレシンクト分の係数データが蓄積されたと判定された場合、処理はステップS35に進む。ステップS35において、ウェーブレット逆変換部23は、係数バッファ部22に保持されている係数データを1プレシンクト分読み出し、ステップS36において、その読み出した係数データに対して、画面垂直方向に並ぶ係数データに対して合成フィルタリング処理を行う垂直合成フィルタリング処理を行い、ステップS37において、画面水平方向に並ぶ係数データに対して合成フィルタリング処理を行う水平合成フィルタリング処理を行う。ステップS38において、ウェーブレット逆変換部23は、合成フィルタリング処理がレベル1(分解レベルの値が「1」のレベル)まで終了したか否か、すなわち、ウェーブレット変換前の状態まで逆変換したか否かを判定する。レベル1まで達していないと判定された場合、処理はステップS36に戻り、ステップS36およびステップS37のフィルタリング処理が繰り返される。
ステップS38において、レベル1までウェーブレット逆変換処理が終了されたと判定した場合、処理はステップS39に進む。ステップS39において、ウェーブレット逆変換部23は、ウェーブレット逆変換処理により得られた画像データを外部に出力する。
ステップS40において、エントロピ復号部21は、復号処理を終了するか否かを判定する。復号処理を終了しないと判定された場合、処理はステップS31に戻り、それ以降の処理が繰り返される。また、ステップS40において、プレシンクトが終了するなどして復号処理が終了されると判定した場合、復号処理は終了される。
従来のウェーブレット逆変換の方法の場合、処理対象の分解レベルの全係数に対して、まず、画面水平方向に水平合成フィルタリング処理を行い、次に画面垂直方向に垂直合成フィルタリング処理を行っていた。つまり、各合成フィルタリング処理の度に、その合成フィルタリング処理の結果をバッファに保持させる必要があるが、その際、バッファは、その時点の分解レベルの合成フィルタリング結果と、次の分解レベルの全係数を保持する必要があり、多大なメモリ容量を必要とすることになる(保持するデータ量が多い)。
また、この場合、ピクチャ(フレームまたはフィールド)内において全てのウェーブレット逆変換が終了するまで画像データ出力が行われないので、入力から出力までの遅延時間が増大する。
これに対して、復号部20のウェーブレット逆変換部23の場合、上述したようにプレシンクト単位で垂直合成フィルタリング処理および水平合成フィルタリング処理をレベル1まで連続して行うので、従来の方法と比較して、一度に(同時期に)バッファリングする必要のあるデータの量が少なく、用意すべきバッファのメモリ量を大幅に低減させることができる。また、レベル1まで合成フィルタリング処理(ウェーブレット逆変換処理)が行われることにより、ピクチャ内の全画像データが得られる前に(プレシンクト単位で)画像データを順次出力させることができ、従来の方法と比較して遅延時間を大幅に低減させることができる。
以上のような各種処理は、例えば、図9に示されるように、適宜、並列的に実行させることもできる。
図9は、図1に示される符号化部10および図6に示される復号部20の各部により実行される処理の各要素の並列動作の例を概略的に示す図である。この図9は、上述した図5と対応するものである。画像データの入力In−1(図9A)に対して、ウェーブレット変換部11(図1)で1回目のウェーブレット変換WT−1が施される(図9B)。図4を参照し説明したように、この1回目のウェーブレット変換WT−1は、最初の3ラインが入力された時点で開始され、係数C1が生成される。すなわち、画像データIn−1の入力からウェーブレット変換WT−1が開始されるまで、3ライン分の遅延が生じる。
生成された係数データは、係数並び替え用バッファ部13(図1)に格納される。以降、入力された画像データに対してウェーブレット変換が施され、1回目の処理が終了すると、そのまま2回目のウェーブレット変換WT−2に処理が移行する。
2回目のウェーブレット変換WT−2のための画像データIn−2の入力と、当該2回目のウェーブレット変換WT−2の処理と並列的に、係数並び替え部14(図1)により3個の、係数C1、係数C4、および係数C5の並び替えOrd−1が実行される(図9C)。
なお、ウェーブレット変換WT−1の終了から並び替えOrd−1が開始されるまでの遅延は、例えば、並び替え処理を係数並び替え部14に指示する制御信号の伝達に伴う遅延や、制御信号に対する係数並び替え部14の処理開始に要する遅延、プログラム処理に要する遅延といった、装置やシステム構成に基づく遅延であって、符号化処理における本質的な遅延ではない。
係数データは、並び替えが終了した順に係数並び替え用バッファ部13から読み出され、エントロピ符号化部15(図1)に供給され、エントロピ符号化EC−1が行われる(図9D)。このエントロピ符号化EC−1は、3個の、係数C1、係数C4、および係数C5の、全ての並び替えの終了を待たずに開始することができる。例えば、最初に出力される係数C5による1ラインの並び替えが終了した時点で、当該係数C5に対するエントロピ符号化を開始することができる。この場合、並び替えOrd−1の処理開始からエントロピ符号化EC−1の処理開始までの遅延は、1ライン分となる。
エントロピ符号化部15によるエントロピ符号化EC−1が終了した符号化データは、所定の信号処理が施された後、復号部20(図6)に伝送される(図9E)。
以上のように、符号化部10に対しては、1回目の処理による7ライン分の画像データ入力に続けて、画面上の下端のラインまで画像データが順次、入力される。符号化部10では、画像データの入力In−n(nは2以上)に伴い、上述したようにして、4ライン毎にウェーブレット変換WT−n、並び替えOrd−nおよびエントロピ符号化EC−nを行う。符号化部10における最後の回の処理に対する並び替えOrdおよびエントロピ符号化ECは、6ラインに対して行われる。これらの処理は、符号化部10において、図9A乃至図9Dに例示されるように、並列的に行われる。
符号化部10によるエントロピ符号化EC−1により符号化された符号化データは、復号部20に供給される。復号部20のエントロピ復号部21(図6)は、供給された、エントロピ符号化EC−1により符号化された符号化データに対して、順次、エントロピ符号の復号iEC−1を行い、係数データを復元する(図9F)。復元された係数データは、順次、係数バッファ部22に格納される。ウェーブレット逆変換部23は、係数バッファ部22にウェーブレット逆変換が行えるだけ係数データが格納されたら、係数バッファ部22から係数データを読み出して、読み出された係数データを用いてウェーブレット逆変換iWT−1を行う(図9G)。
図4を参照して説明したように、ウェーブレット逆変換部23によるウェーブレット逆変換iWT−1は、係数C4および係数C5が係数バッファ部22に格納された時点で開始することができる。したがって、エントロピ復号部21による復号iEC−1が開始されてからウェーブレット逆変換部23によるウェーブレット逆変換iWT−1が開始されるまでの遅延は、2ライン分となる。
ウェーブレット逆変換部23において、1回目のウェーブレット変換による3ライン分のウェーブレット逆変換iWT−1が終了すると、ウェーブレット逆変換iWT−1で生成された画像データの出力Out−1が行われる(図9H)。出力Out−1では、図4および図5を用いて説明したように、第1ライン目の画像データが出力される。
復号部20に対して、符号化部10における1回目の処理による3ライン分の符号化された係数データの入力に続けて、エントロピ符号化EC−n(nは2以上)により符号化された係数データが順次、入力される。復号部20では、入力された係数データに対して、上述したようにして、4ライン毎にエントロピ復号iEC−nおよびウェーブレット逆変換iWT−nを行い、ウェーブレット逆変換iWT−nにより復元された画像データの出力Out−nを順次、行う。符号化部10の最後の回に対応するエントロピ復号iECおよびウェーブレット逆変換iWTは、6ラインに対して行われ、出力Outは、8ラインが出力される。これらの処理は、復号部20において、図9F乃至図9Hに例示されるように、並列的に行われる。
上述のようにして、画面上部から下部の方向に順番に、符号化部10および復号部20における各処理を並列的に行うことで、画像圧縮処理および画像復号処理をより低遅延で行うことが可能となる。
図9を参照して、5×3フィルタを用いて分解レベル=2までウェーブレット変換を行った場合の、画像入力から画像出力までの遅延時間を計算してみる。第1ライン目の画像データが符号化部10に入力されてから、この第1ライン目の画像データが復号部20から出力されるまでの遅延時間は、下記の各要素の総和となる。なお、ここでは、伝送路における遅延や、装置各部の実際の処理タイミングに伴う遅延などの、システムの構成により異なる遅延は、除外している。
(1)最初のライン入力から7ライン分のウェーブレット変換WT−1が終了するまでの遅延D_WT
(2)3ライン分の係数並び替えOrd−1に伴う時間D_Ord
(3)3ライン分のエントロピ符号化EC−1に伴う時間D_EC
(4)3ライン分のエントロピ復号iEC−1に伴う時間D_iEC
(5)3ライン分のウェーブレット逆変換iWT−1に伴う時間D_iWT
図9を参照して、上述の各要素による遅延の計算を試みる。(1)の遅延D_WTは、10ライン分の時間である。(2)の時間D_Ord、(3)の時間D_EC、(4)の時間D_iEC、および(5)の時間D_iWTは、それぞれ3ライン分の時間である。また、符号化部10において、並び替えOrd−1が開始されてから1ライン後には、エントロピ符号化EC−1を開始することができる。同様に、復号部20において、エントロピ復号iEC−1が開始されてから2ライン後には、ウェーブレット逆変換iWT−1を開始することができる。また、エントロピ復号iEC−1は、エントロピ符号化EC−1で1ライン分の符号化が終了した時点で処理を開始することができる。
したがって、この図9の例では、符号化部10に第1ライン目の画像データが入力されてから、復号部20から当該第1ライン目の画像データが出力されるまでの遅延時間は、10+1+1+2+3=17ライン分となる。
遅延時間について、より具体的な例を挙げて考察する。入力される画像データがHDTV(High Definition Television)のインタレースビデオ信号の場合、例えば1920画素×1080ラインの解像度で1フレームが構成され、1フィールドは、1920画素×540ラインとなる。したがって、フレーム周波数を30Hzとした場合、1フィールドの540ラインが16.67msec(=1sec/60フィールド)の時間に、符号化部10に入力されることになる。
したがって、7ライン分の画像データの入力に伴う遅延時間は、0.216msec(=16.67msec×7/540ライン)であり、例えば1フィールドの更新時間に対して非常に短い時間となる。また、上述した(1)の遅延D_WT、(2)の時間D_Ord、(3)の時間D_EC、(4)の時間D_iEC、および(5)の時間D_iWTの総和についても、処理対象のライン数が少ないため、遅延時間が非常に短縮される。
次に、以上のようなソフトウェアエンコーダやソフトウェアデコーダに割り当てられるハードウェア資源の例について説明する。図10は、パーソナルコンピュータの構成例を示すブロック図である。
図10において、パーソナルコンピュータ100のCPU101−1、CPU101−2、CPU101−3、およびCPU101−4は、それぞれ、ソフトウェアプログラムに従って各種の処理を実行する演算処理部である。以下において、CPU101−1乃至CPU101−4を互いに区別して説明する必要の無い場合、CPU101と称する。CPU101は、共有バスであるバス104を介してROM(Read Only Memory)102およびRAM(Random Access Memory)103と相互に接続されている。ROM102には予めソフトウェアプログラムやデータが格納されている。RAM103には、ROM102や記憶部123に格納されているソフトウェアプログラムやデータがロードされる。
CPU101−1にはキャッシュメモリ111−1が内蔵され、CPU101−2にはキャッシュメモリ111−2が内蔵され、CPU101−3にはキャッシュメモリ111−3が内蔵され、CPU101−4にはキャッシュメモリ111−4が内蔵される。以下において、キャッシュメモリ111−1乃至キャッシュメモリ111−4を互いに区別して説明する必要の無い場合、キャッシュメモリ111と称する。
キャッシュメモリ111は、例えばSRAM(Static Random Access Memory)のような、高速で動作する記憶媒体であり、そのキャッシュメモリ111を内蔵するCPU101により独占的に使用される。このキャッシュメモリ111は、記憶容量辺りの単価が高く、また、CPU101に内蔵されるため、キャッシュメモリ111の記憶容量を増大させるとCPU101の回路規模も増大してしまう。そこでコストの低減や回路規模の増大を抑制するために、キャッシュメモリ111の記憶容量は、一般的に、例えば数百キロバイト乃至数メガバイト程度と、数百メガバイト乃至数ギガバイト程度の記憶容量を有する、CPU101の外部に設けられたRAM103よりも小容量に抑えられている。
もちろん、キャッシュメモリ111としてどのようなメモリを用いるようにし、また、その記憶容量をどの程度にするようにしてもよいが、ここでは、キャッシュメモリ111が、そのキャッシュメモリ111を内蔵するCPU101により独占的に使用され、RAM103より高速にデータの読み出しや書き込みが可能であるものの、その記憶容量がRAM103より小容量であり、格納可能な情報量に制限がある記憶媒体であるものとする。
このキャッシュメモリ111に対して、RAM103は、CPU101−1乃至CPU101−4等により共有され、キャッシュメモリ111よりもデータの読み出しや書き込みが低速であり、かつ、キャッシュメモリ111より大容量であるものとする。なお、もちろん、実際にはRAM103の記憶容量も有限であるが、以下においては、説明の便宜上、RAM103の記憶容量は、上述した符号化処理や復号処理に必要な容量に対して十分に大きく、その容量の制限については特に考慮しないものとする。
つまり、キャッシュメモリ111は、高速でプログラムやデータの入出力が可能であるが、容量に制限があるので、ソフトウェアエンコーダやソフトウェアデコーダの全てのソフトウェアプログラムやデータを格納することが困難であることもある。これに対して、RAM103は、任意のソフトウェアプログラムやデータを格納可能であるが、それらの入出力が低速である。
CPU101は、自分自身に内蔵されるキャッシュメモリ111またはRAM103にソフトウェアプログラムやデータをロードし、それらを用いて符号化や復号の各種処理を行う。
バス104にはまた、入出力インタフェース120も接続されている。入出力インタフェース120には、キーボード、マウスなどよりなる入力部121、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部122、ハードディスクなどより構成される記憶部123、モデムなどより構成される通信部124が接続されている。通信部124は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース120にはまた、必要に応じてドライブ125が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア131が適宜装着され、それらから読み出されたソフトウェアプログラムが、必要に応じて記憶部123にインストールされる。なお、ソフトウェアプログラムは、ネットワークを介して通信部124よりインストールすることも可能である。
なお、図10においては、パーソナルコンピュータ100に、CPU101が4つ設けられているように説明したが、CPU101の数は任意である。ただし、後述するソフトウェアエンコーダやソフトウェアデコーダの実装方法によっては、CPU101の最小数に制限がある場合もあり、例えば、CPU101が2つ必要な場合や、4つ必要な場合もある。また、このCPU101−1乃至CPU101−4が、4つのコアを有する物理的には1つのCPU101であるものとしてもよい。その場合、各CPUコア(CPU101−1乃至CPU101−4)にキャッシュメモリ111−1乃至キャッシュメモリ111−4が設けられているものとしてもよいし、各CPUコアが共有する唯一のキャッシュメモリ111の、各CPUコアに割り当てられたキャッシュメモリ111の部分領域がキャッシュメモリ111−1乃至キャッシュメモリ111−4であるとしてもよい。
このような構成のパーソナルコンピュータ100において、図1の符号化部10や図6の復号部20を、不要に処理の効率を低下させたり、遅延時間を増大させたりしないように実装するためには、符号化部10や復号部20の各処理に対してCPU101やRAM103等のパーソナルコンピュータ100のハードウェア資源を適切に割り当てる必要がある。以下にその割り当ての例について説明する。
図11は、図1の符号化部10に対するハードウェア資源の割り当ての例を示す図である。図11に示される例においては、符号化部10のウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の全処理に対してCPU101−1が割り当てられ、途中計算用バッファ部12および係数並び替え用バッファ部13は、キャッシュメモリ111−1に形成される。
このとき、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1にロードされる。CPU101−1は、そのソフトウェアプログラムの関数を必要に応じてキャッシュメモリ111−1より読み出して実行する。
符号化される画像データの輝度成分である画像データYと、色差成分である画像データCは、RAM103に保持される。なお、実際には、色差成分にはCbとCrとがあるが、ここでは説明の簡略化のため、CbとCrをまとめてCとする。なお、以下においては輝度成分Yと色差成分CよりなるYC(YCbCr)コンポーネントについて説明するが、R成分、G成分、およびB成分よりなるRGBコンポーネントの場合も同様である。
図11の例の場合、画像データYも画像データCもCPU101−1において符号化される。つまり、CPU101−1は、ウェーブレット変換部11の処理を実行することにより、RAM103より画像データYを読み出してウェーブレット変換処理を行う。その際、CPU101−1は、キャッシュメモリ111−1の記憶領域の一部を途中計算用バッファ部12として利用し、ウェーブレット変換処理の垂直方向および水平方向の分析フィルタリング処理において発生する中間データ(例えば、途中の分割レベルの低域成分)をその途中計算用バッファ部12に保持させる。また、CPU101−1は、キャッシュメモリ111−1の記憶領域の、他の一部を係数並び替え用バッファ部13として利用し、ウェーブレット変換により生成された係数データをその係数並び替え用バッファ部13に保持させる。
CPU101−1は、係数並び替え部14の処理を実行することにより、キャッシュメモリ111−1の係数並び替え用バッファ部13に保持されている係数データを所定の順に並び替えながら読み出す。CPU101−1は、エントロピ符号化部15の処理を実行することにより、係数並び替え部14の処理により順序が並び替えられながらキャッシュメモリ111−1より読み出された係数データを符号化し、符号化データYを生成する。CPU101−1は、生成した符号化データYをRAM103に供給して格納させる。
CPU101−1は、画像データCに対しても画像データYの場合と同様に処理を行う。
図11のように、パーソナルコンピュータ100において符号化部10を実装する場合、符号化部10の全ての処理は、1つのCPU101において実行され、符号化処理中に発生するウェーブレット変換の中間データや係数データは、全てそのCPU101のキャッシュメモリ111に格納される。
このとき、例えば、他のCPU101−2乃至CPU101−4も、このCPU101−1と同様に符号化部10に割り当てられるようにしてもよい。つまり、図11に示されるCPU101−1の場合と同様に、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれにもロードされる。CPU101−2乃至CPU101−4は、それぞれのキャッシュメモリ111よりそれらのソフトウェアプログラムを読み出して実行し、符号化部10のウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各処理を実行する。このとき、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれには、キャッシュメモリ111−1と同様に、途中計算用バッファ部12および係数並び替え用バッファ部13が形成される。
つまり、この場合、CPU101−1乃至CPU101−4により4つの符号化部10が実現される。これらの符号化部10は、例えば、符号化される動画像データのピクチャ毎に符号化処理が割り当てられる。つまり、この場合、CPU101−1乃至CPU101−4は、互いに異なるピクチャに対する符号化処理を互いに並行して実行する。その場合の処理の流れを図12に模式的に示す。
図12においては、図中縦方向上から下向きに時系列が示されており、各CPUにおいて実行される処理が四角で示されている。
図12の例において、CPU101−1は、最初に、先頭のピクチャの先頭のプレシンクト(P1)の輝度成分Yである画像データYをRAM103より読み出し、その画像データYに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P1DWT(Y))、得られた係数データをキャッシュメモリ111−1に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P1VLC(Y))。このエントロピ符号化により生成された符号化データYは、RAM103に蓄積される。次に、CPU101−1は、この先頭のプレシンクト(P1)の色差成分Cである画像データCをRAM103より読み出し、その画像データCに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P1DWT(C))、得られた係数データをキャッシュメモリ111−1に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P1VLC(C))。このエントロピ符号化により生成された符号化データCは、RAM103に蓄積される。
この時点で、RAM103には、少なくとも1プレシンクト分以上の符号化データYおよび符号化データCが蓄積されるので、それら符号化データYおよび符号化データCの出力が開始される。
このように、CPU101−1およびキャッシュメモリ111−1において実現されるウェーブレット変換部11乃至エントロピ符号化部15は、画像データYおよび画像データCの両方に対して、互いに同様に処理を行ったり、データを保持したりする。換言するにCPU101−1およびキャッシュメモリ111−1は、画像データYと画像データCの何れに対しても同様に符号化に関する処理を行ったりデータを保持したりする。
先頭のプレシンクトに対する処理が終了すると、CPU101−1は、次に、先頭のピクチャの2番目のプレシンクト(P2)の画像データYをRAM103より読み出し、その画像データYに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P2DWT(Y))、得られた係数データをキャッシュメモリ111−1に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P2VLC(Y))。このエントロピ符号化により生成された符号化データYは、RAM103に蓄積された後出力される。次に、CPU101−1は、2番目のプレシンクト(P2)の画像データCをRAM103より読み出し、その画像データCに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P2DWT(C))、得られた係数データをキャッシュメモリ111−1に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P2VLC(C))。このエントロピ符号化により生成された符号化データCは、RAM103に蓄積された後出力される。
CPU101−1は、先頭のピクチャの3番目以降のプレシンクトに対しても同様に処理を行い、最後のn番目のプレシンクト(Pn)の画像データYと画像データCのそれぞれに対して、ウェーブレット変換、並びに、係数並び替えおよびエントロピ符号化を行う(PnDWT(Y),PnVLC(Y),PnDWT(C),PnVLC(C))。得られた符号化データYおよび符号化データCは、それまでのプレシンクトと同様にRAM103に蓄積された後出力される。n番目のプレシンクトの符号化データCが出力されると、先頭のピクチャの符号化データは全て出力されたので、先頭のピクチャについて符号化データの出力が終了される。
このCPU101−1の処理と並行して、図12に示されるように、CPU101−2は2番目のピクチャについて、CPU101−3は3番目のピクチャについて、CPU101−4は4番目のピクチャについて、それぞれ、先頭のプレシンクトからn番目のプレシンクトまで、CPU101の場合と同様にウェーブレット変換、並びに、係数並び替えおよびエントロピ符号化の各処理を行い、画像データYおよび画像データCより符号化データYおよび符号化データCを生成し、それらをRAM103に保持させた後出力させるようにすることができる。
つまり、この場合、CPU101−2およびキャッシュメモリ111−2、CPU101−3およびキャッシュメモリ111−3、並びに、CPU101−4およびキャッシュメモリ111−4のそれぞれも、CPU101−1およびキャッシュメモリ111−1と同様に、画像データYと画像データCの両方に対して同様に符号化に関する処理を行ったり、データを保持したりする。
この場合、CPU101−1は、先頭のピクチャに対する処理が終了すると次に5番目のピクチャに対して符号化処理を行う。そのCPU101−1の処理と並行してCPU101−2乃至CPU101−4も同様に、それぞれ6番目乃至8番目のピクチャに対して符号化処理を行う。なお、9番目以降のピクチャについても同様に処理される。
以上のように、図11に示される割り当ての例の場合、符号化部10は、4つのピクチャの符号化処理を同時に並行して行うことができる。さらに、この場合、一連の符号化処理の中でCPUの切り替えを行う必要がない。また、キャッシュメモリ111のみを用いてRAM103を使用せずに処理を行うことができるので、ウェーブレット変換部11や係数並び替え部14は、途中計算用バッファ部12や係数並び替え用バッファ部13へのデータの読み出しや書き込みも高速に行うことができる。従って、このようなハードウェア資源の割り当てにより、符号化部10は、高速に画像データを符号化することができる。つまり、図11に示される割り当ての例の場合、符号化部10は、高スループットで符号化を行うことができる。また、パーソナルコンピュータ100は、そのCPU101の数によらず(例えば1つであっても)、符号化部10を実装することができる。
しかしながら、キャッシュメモリ111の容量は少ないので、同時に蓄積可能なデータ量に制限があり、符号化する画像データのデータ量や内容によっては、キャッシュメモリ111の容量が不足し、溢れが生じる恐れがあるので、図11に示される割り当ての例は、符号化の実行に必要なバッファ量が多い場合には適用することができないこともある。
また、画像データYの符号化も、画像データCの符号化も1つのCPU101において行われるので、符号化処理が開始されてから先頭のプレシンクトの符号化データが符号化部10より出力されるまでの時間、すなわち符号化処理の遅延時間が長い。従って、その符号化データが復号部20において復号され、復元された画像データの画像がモニタに表示されるまでの遅延時間も長くなる。同様の理由により先頭のピクチャがモニタに表示されるまでの時間が長い。
図13に、図1の符号化部10に対するハードウェア資源の割り当ての、他の例を示す。図13に示される例においては、図11の場合と同様に、符号化部10のウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の全処理に、CPU101−1が割り当てられる。ただし、途中計算用バッファ部12は、キャッシュメモリ111−1に形成されるものの、係数並び替え用バッファ部13は、RAM103に形成される。
このとき、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1にロードされる。CPU101−1は、そのソフトウェアプログラムの関数を必要に応じてキャッシュメモリ111−1より読み出して実行する。
図13の例の場合も、図11の例の場合と同様に、画像データYおよび画像データCのいずれもCPU101−1において符号化される。つまり、CPU101−1は、ウェーブレット変換部11の処理を実行することにより、RAM103より画像データYを読み出してウェーブレット変換処理を行う。その際、CPU101−1は、キャッシュメモリ111−1の記憶領域の一部を途中計算用バッファ部12として利用し、ウェーブレット変換処理の垂直方向および水平方向の分析フィルタリング処理において発生する中間データ(例えば、途中の分割レベルの低域成分)をその途中計算用バッファ部12に保持させる。
ただし、図13の例の場合、図11の例の場合と異なり、CPU101−1は、RAM103の記憶領域の一部を係数並び替え用バッファ部13として利用し、ウェーブレット変換により生成された係数データをその係数並び替え用バッファ部13に保持させる。
CPU101−1は、係数並び替え部14の処理を実行することにより、RAM103の係数並び替え用バッファ部13に保持されている係数データを所定の順に並び替えながら読み出す。CPU101−1は、エントロピ符号化部15の処理を実行することにより、係数並び替え部14の処理により順序が並び替えられながらRAM103より読み出された係数データを符号化し、符号化データYを生成する。CPU101−1は、生成した符号化データYをRAM103に供給して格納させる。
CPU101−1は、画像データCに対しても画像データYの場合と同様に処理を行う。
図13のように、パーソナルコンピュータ100において符号化部10を実装する場合、符号化部10の全ての処理は、1つのCPU101において実行され、符号化処理中に発生するウェーブレット変換の中間データは、高速に動作する、そのCPU101のキャッシュメモリ111に格納され、ウェーブレット変換により生成される係数データは、大容量のRAM103に格納される。
このとき、例えば、他のCPU101−2乃至CPU101−4も、このCPU101−1と同様に符号化部10に割り当てられるようにしてもよい。つまり、図13の場合と同様に、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれにもロードされる。CPU101−2乃至CPU101−4は、それぞれのキャッシュメモリ111よりそれらのソフトウェアプログラムを読み出して実行し、符号化部10のウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各処理を実行する。このとき、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれには、キャッシュメモリ111−1と同様に、途中計算用バッファ部12が形成され、RAM103にはそれぞれの係数並び替え用バッファ部13が形成される。
つまりこの場合、CPU101−1乃至CPU101−4により4つの符号化部10が実現される。これらの符号化部10は、例えば、符号化される動画像データのピクチャ毎に符号化処理が割り当てられる。つまり、この場合、CPU101−1乃至CPU101−4は、互いに異なるピクチャに対する符号化処理を互いに並行して実行する。その場合の処理の流れは、図11の場合と同様に、図12に模式的に示される。
以上のような図13に示される割り当ての例の場合、係数並び替え用バッファ部13がRAM103に形成されるため、図11の割り当ての例の場合よりも、キャッシュメモリ111の多くを途中計算用バッファ部12として使用することができる。つまり、途中計算用バッファ部12の容量を大きくすることができる。また、係数並び替え用バッファ部13の容量も大きくすることができる。つまり、図13の例のように割り当てられた場合の方が、符号化部10は、図11のように割り当てられた場合よりも、バッファ溢れの発生を抑制することができ、より広範な条件下で実現可能である。
ただし、係数並び替え用バッファ部13が、読み出しおよび書き込みがキャッシュメモリ111よりも低速なRAM103に形成されるため、図11の割り当ての例の場合よりも、スループットは低下する。しかしながら、データの読み出しや書き込みの回数が多い途中計算用バッファ部12は、高速に動作するキャッシュメモリ111に形成されるので、そのスループットの低下は少ない。
図14に、図1の符号化部10に対するハードウェア資源の割り当ての、さらに他の例を示す。図14に示される例においては、図13の割り当ての例よりさらに、画像データYの符号化を行う符号化部と画像データCの符号化を行う符号化部のそれぞれに対して、互いに異なるCPUが割り当てられている。つまり、画像データYの符号化を行う符号化部のウェーブレット変換部11−1、係数並び替え部14−1、およびエントロピ符号化部15−1の全処理に対してCPU101−1が割り当てられ、途中計算用バッファ部12−1は、キャッシュメモリ111−1に形成され、係数並び替え用バッファ部13−1は、RAM103に形成される。また、画像データCの符号化を行う符号化部のウェーブレット変換部11−2、係数並び替え部14−2、およびエントロピ符号化部15−2の全処理に対してCPU101−2が割り当てられ、途中計算用バッファ部12−2は、キャッシュメモリ111−2に形成され、係数並び替え用バッファ部13−2は、RAM103に形成される。
このとき、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1およびキャッシュメモリ111−2にロードされる。CPU101−1およびCPU101−2は、それぞれ、そのソフトウェアプログラムの関数を必要に応じてキャッシュメモリ111−1またはキャッシュメモリ111−2より読み出して実行する。
図14の例の場合、画像データYはCPU101−1において符号化され、画像データCはCPU101−2において符号化される。つまり、CPU101−1は、画像データYについて、図13の例の場合と同様に、ウェーブレット変換部11−1の処理を実行することにより、RAM103より画像データYを読み出してウェーブレット変換処理を行う。その際、CPU101−1は、キャッシュメモリ111−1の記憶領域の一部を途中計算用バッファ部12として利用し、ウェーブレット変換処理の垂直方向および水平方向の分析フィルタリング処理において発生する中間データをその途中計算用バッファ部12に保持させる。
CPU101−1は、図13の例の場合と同様に、RAM103の記憶領域の一部を係数並び替え用バッファ部13として利用し、ウェーブレット変換により生成された係数データをその係数並び替え用バッファ部13に保持させる。CPU101−1は、係数並び替え部14の処理を実行することにより、RAM103の係数並び替え用バッファ部13に保持されている係数データを所定の順に並び替えながら読み出す。CPU101−1は、エントロピ符号化部15の処理を実行することにより、係数並び替え部14の処理により順序が並び替えられながらRAM103より読み出された係数データを符号化し、符号化データYを生成する。CPU101−1は、生成した符号化データYをRAM103に供給して格納させる。
ただし、図14の例の場合、図13の例の場合と異なり、そのCPU101−1の処理と並行して、CPU101−2が、画像データCについて、図13の例の場合と同様に、ウェーブレット変換、係数並び替え、およびエントロピ符号化を行う。
図14のように、パーソナルコンピュータ100において符号化部10を実装する場合、画像データYおよび画像データCに対する符号化部10の全ての処理は、それぞれ互いに異なる1つのCPU101において実行され、それらの符号化処理中に発生するウェーブレット変換の中間データは、それぞれのCPU101に内蔵されるキャッシュメモリ111に格納され、それぞれのウェーブレット変換により生成される係数データは、ともにRAM103に格納される。つまり、2つのCPUを1組として符号化処理が行われる。
このとき、例えば、他のCPU101−3およびCPU101−4も、このCPU101−1およびCPU101−2と同様に、符号化部10に割り当てられるようにしてもよい。つまり、図14の場合と同様に、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−3およびキャッシュメモリ111−4のそれぞれにもロードされる。CPU101−3およびCPU101−4は、それぞれのキャッシュメモリ111よりそれらのソフトウェアプログラムを読み出して実行し、符号化部10のウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各処理を実行する。このとき、キャッシュメモリ111−3には、画像データY用の途中計算用バッファ部12−1が形成され、キャッシュメモリ111−4には、画像データC用の途中計算用バッファ部12−2が形成され、RAM103には、画像データY用の係数並び替え用バッファ部13−1および画像データC用の係数並び替え用バッファ部13−2の両方が形成される。
つまり、この場合、CPU101−1乃至CPU101−4により2つの符号化部10が実現される。これらの符号化部10は、例えば、符号化される動画像データのピクチャ毎に符号化処理が割り当てられる。例えば、CPU101−1およびCPU101−2が奇数番目のピクチャの符号化処理を行い、CPU101−3およびCPU101−4が偶数番目のピクチャの符号化処理を行うようになされる。その場合の処理の流れを図15に示す。
図15の例において、CPU101−1は、先頭のピクチャの先頭のプレシンクト(P1)の画像データYをRAM103より読み出し、その画像データYに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P1DWT(Y))、得られた係数データをRAM103に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P1VLC(Y))。このエントロピ符号化により生成された符号化データYは、RAM103に蓄積される。そのCPU101−1の処理に並行して、CPU101−2は、先頭のピクチャの先頭のプレシンクト(P1)の画像データCをRAM103より読み出し、その画像データCに対してキャッシュメモリ111−2に中間データを保持させながらウェーブレット変換を行い(P1DWT(C))、得られた係数データをRAM103に保持させた後、その係数データに対して、順序の並び替えおよびエントロピ符号化を行う(P1VLC(C))。このエントロピ符号化により生成された符号化データCも、RAM103に蓄積される。
従って、この場合の符号化部10は、CPU101−1およびCPU101−2が先頭のプレシンクトについてエントロピ符号化を終了した時点で、RAM103に1プレシンクト分以上の符号化データ(符号化データYおよび符号化データC)が蓄積されるので、符号化データの出力を開始することができる。
2番目以降のプレシンクトについても同様に、画像データYは、CPU101−1により符号化され、それと並行して、画像データCは、CPU101−2により符号化される。最後のn番目のプレシンクト(Pn)の画像データYおよび画像データCが符号化され、符号化データYおよび符号化データCが出力されると、先頭のピクチャの符号化データは全て出力されたので、先頭のピクチャについて符号化データの出力が終了される。
このCPU101−1およびCPU101−2の処理と並行して、図15に示されるように、CPU101−3およびCPU101−4により2番目のピクチャについて、CPU101−1およびCPU101−2の処理と同様の符号化処理を行うようにすることができる。つまり、この場合、CPU101−3は2番目のピクチャの画像データYについて符号化を行い、CPU101−4は2番目のピクチャの画像データCについて符号化を行う。
この場合、CPU101−1およびCPU101−2は、先頭のピクチャに対する処理を終了すると、次に、3番目のピクチャに対して復号処理を行う。そのCPU101−1およびCPU101−2の処理と並行して、CPU101−3およびCPU101−4も同様に4番目のピクチャに対して復号処理を行う。5番目以降のピクチャについても同様に処理される。
以上のように、図14に示される割り当ての例の場合、画像データYと画像データCを並行して符号化することにより、図11や図13の例の場合よりも、符号化データの出力開始タイミング、すなわち、先頭のプレシンクトの符号化データYおよび符号化データCの出力タイミングを早めることができるので、符号化処理の遅延時間を低減させることができる。付言するに、同様の理由から、図14に示される割り当ての例の場合の方が、図11や図13の例の場合よりも速く、先頭ピクチャの符号化を完了させることができる。従って、符号化部10において符号化された符号化データを復号部20において順次復号し、復元された画像データの画像をモニタに表示させる場合、符号化が開始されてから最初のピクチャが表示されるまでの遅延時間は、図14に示される割り当ての例の場合の方が、図11や図13の例の場合よりも短くなる。
また、図13の例の場合と同様に、途中計算用バッファ部12がキャッシュメモリ111に形成され、係数並び替え用バッファ部13がRAM103に形成されるので、図11の例の場合よりも、途中計算用バッファ部12および係数並び替え用バッファ部13の容量を大きくすることができ、バッファ溢れの発生を抑制することができ、さらにスループットの低下を小さくすることができる。
なお、図14の例の場合、画像データYのウェーブレット変換の中間データと、画像データCのウェーブレット変換の中間データとが、互いに異なるキャッシュメモリ111に蓄積されるので、図13の例の場合よりも、途中計算用バッファ部12の容量をさらに大きくすることができ、バッファ溢れの発生をより抑制することができる。
ただし、実際には、画像データYの方が画像データCよりも情報量が多く絵が複雑であるので、符号化処理に要する時間が長い。従って、CPU101−2に待機時間が発生するので、CPU101の使用効率は図13の場合よりも低下し、スループットも図13の場合よりも低下する。
図16に、図1の符号化部10に対するハードウェア資源の割り当ての、さらに他の例を示す。図16に示される例においては、図14の割り当ての例よりさらに、ウェーブレット変換部11と、係数並び替え部14およびエントロピ符号化部15のそれぞれに対して互いに異なるCPU101が割り当てられている。
つまり、画像データYのウェーブレット変換処理を行うウェーブレット変換部11−1に対して、CPU101−1が割り当てられ、画像データYの係数データの係数並び替えを行う係数並び替え部14−1、および、画像データYの係数データのエントロピ符号化を行うエントロピ符号化部15−1に対して、CPU101−2が割り当てられる。途中計算用バッファ部12−1は、CPU101−1のキャッシュメモリ111−1に形成され、係数並び替え用バッファ部13−1は、RAM103に形成される。
同様に、画像データCのウェーブレット変換処理を行うウェーブレット変換部11−2に対して、CPU101−3が割り当てられ、画像データCの係数データの係数並び替えを行う係数並び替え部14−2、および、画像データCの係数データのエントロピ符号化を行うエントロピ符号化部15−2に対して、CPU101−4が割り当てられる。途中計算用バッファ部12−2は、CPU101−3のキャッシュメモリ111−3に形成され、係数並び替え用バッファ部13−2は、RAM103に形成される。
このとき、ウェーブレット変換部11の機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1およびキャッシュメモリ111−3にロードされ、係数並び替え部14およびエントロピ符号化部15の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−2およびキャッシュメモリ111−4にロードされる。CPU101−1乃至CPU101−4は、それぞれ、それらのソフトウェアプログラムの関数を、必要に応じて、それぞれのキャッシュメモリ111より読み出して実行する。
図16の例の場合、画像データYはCPU101−1およびCPU101−2において符号化され、画像データCはCPU101−3およびCPU101−4において符号化される。つまり、CPU101−1は、画像データYについて、ウェーブレット変換部11−1の処理を実行することにより、RAM103より画像データYを読み出してウェーブレット変換処理を行う。その際、CPU101−1は、キャッシュメモリ111−1の記憶領域の一部または全部を途中計算用バッファ部12−1として利用し、ウェーブレット変換処理の垂直方向および水平方向の分析フィルタリング処理において発生する中間データをその途中計算用バッファ部12−1に保持させる。
CPU101−1は、図14の例の場合と同様に、RAM103の記憶領域の一部を係数並び替え用バッファ部13−1として利用し、ウェーブレット変換により生成された係数データをその係数並び替え用バッファ部13−1に保持させる。
ただし、図16の例の場合、図14の例の場合と異なり、CPU101−2が、係数並び替え部14−1の処理を実行することにより、CPU101−1が生成し、RAM103の係数並び替え用バッファ部13−1に保持されている係数データを所定の順に並び替えながら読み出す。CPU101−2は、エントロピ符号化部15−1の処理を実行することにより、係数並び替え部14−1の処理により順序が並び替えられながらRAM103より読み出された係数データを符号化し、符号化データYを生成する。CPU101−2は、生成した符号化データYをRAM103に供給して格納させる。
このCPU101−1およびCPU101−2の処理と並行して、CPU101−3およびCPU101−4が、画像データCについて、画像データYの場合と同様に、ウェーブレット変換、係数並び替え、およびエントロピ符号化を行う。
図16のように、パーソナルコンピュータ100において符号化部10を実装する場合、CPU101−1乃至CPU101−4の4つのCPUを1組として符号化処理が行われる。従って、この場合、CPU101−1乃至CPU101−4により1つの符号化部10が実現される。当然、この符号化部10は、符号化される動画像データの全てのピクチャの符号化処理を行うようになされる。その場合の処理の流れを図17に示す。
CPU101−1乃至CPU101−4は、互いに独立して動作することができ、図17に示される例のように、各処理を並行して実行することができる。
図17に示される例においては、CPU101−1は、先頭のピクチャの先頭のプレシンクト(P1)の画像データYをRAM103より読み出し、その画像データYに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P1DWT(Y))、得られた係数データをRAM103に格納する。
係数データをRAM103に格納すると、CPU101−1は、続けて、先頭のピクチャの2番目のプレシンクト(P2)の画像データYをRAM103より読み出し、その画像データYに対してキャッシュメモリ111−1に中間データを保持させながらウェーブレット変換を行い(P2DWT(Y))、得られた係数データをRAM103に格納する。このとき、CPU101−2は、そのCPU101−1のP2DWT(Y)の処理と並行して、RAM103に格納された先頭のプレシンクト(P1)の係数データを読み出し、順序の並び替えおよびエントロピ符号化を行う(P1VLC(Y))。得られた符号化データYをRAM103に格納すると、CPU101−2は、続けて、RAM103に格納された2番目のプレシンクト(P1)の係数データを読み出し、順序の並び替えおよびエントロピ符号化を行う(P2VLC(Y))。
つまり、CPU101−1およびCPU101−2は、処理対象を互いに1プレシンクト分ずらして、ウェーブレット変換と、係数並び替えおよびエントロピ符号化を並行して実行する。3番目以降のプレシンクトについても同様に、ウェーブレット変換と、係数並び替えおよびエントロピ符号化が並行して実行される。
なお、この画像データYに対する符号化処理と並行して、CPU101−3およびCPU101−4は、画像データCに対して同様に処理を行う。つまり、CPU101−1がP1DWT(Y)の処理を実行するのと並行して、CPU101−3がP1DWT(C)の処理を実行し、CPU101−1がP2DWT(Y)の処理を実行するのと並行して、CPU101−3がP2DWT(C)の処理を実行し、CPU101−4がP1VLC(C)の処理を実行する。
従って、この場合の符号化部10は、CPU101−2およびCPU101−4が先頭のプレシンクトについてエントロピ符号化を終了した時点で、RAM103に1プレシンクト分以上の符号化データ(符号化データYおよび符号化データC)が蓄積されるので、符号化データの出力を開始することができる。
2番目以降のプレシンクトについても同様に、画像データYは、CPU101−1およびCPU101−2により符号化され、それと並行して、画像データCは、CPU101−3およびCPU101−4により符号化される。最後のn番目のプレシンクト(Pn)の画像データYおよび画像データCが符号化され、符号化データYおよび符号化データCが出力されると、先頭のピクチャの符号化データは全て出力されたので、先頭のピクチャについて符号化データの出力が終了される。
2番目以降のピクチャについても同様に処理される。
以上のように、図16に示される割り当ての例の場合、図14の例の場合と同様に、符号化データの出力開始タイミングを早くすることができ、遅延時間を低減させることができる。付言するに、図16に示される割り当ての例の場合、符号化部10は、図17に示されるように、図14の例の場合よりも速く最初のピクチャの符号化を行うことができるので、符号化部10において符号化された符号化データを復号部20において順次復号し、復元された画像データの画像をモニタに表示させる場合、符号化が開始されてから最初のピクチャが表示されるまでの遅延時間を短くすることができる。
また、図13の例の場合と同様に、途中計算用バッファ部12がキャッシュメモリ111に形成され、係数並び替え用バッファ部13がRAM103に形成されるので、図11の例の場合よりも、途中計算用バッファ部12および係数並び替え用バッファ部13の容量を大きくすることができ、バッファ溢れの発生を抑制することができ、さらにスループットの低下を小さくすることができる。
さらに、図16の例の場合、図14の例の場合と同様に、画像データYのウェーブレット変換の中間データと、画像データCのウェーブレット変換の中間データとが、互いに異なるキャッシュメモリ111に蓄積されるので、図13の例の場合よりも、途中計算用バッファ部12の容量をさらに大きくすることができ、バッファ溢れの発生をより抑制することができる。
ただし、実際には、画像データYの方が画像データCよりも情報量が多く絵が複雑であるので、符号化処理に要する時間が長い。従って、CPU101−3およびCPU101−4に待機時間が発生する。さらに、符号化処理の途中でCPU101が切り替わるので制御が複雑になるとともに処理時間も増大する。従って、CPU101の使用効率は図14の場合よりもさらに低下し、スループットも図14の場合よりもさらに低下する。
ウェーブレット変換、係数並び替え、およびエントロピ符号化の各処理は、それぞれ複数の関数により構成されているので、上述したようなウェーブレット変換と係数並び替えの間以外のところで割り当てるCPU101を変更するようにすることも可能であるが、並列に実行可能な処理でなければ互いに異なるCPU101が割り当てられるようにしても処理時間を短縮することはできない。図1に示される符号化部10において、ウェーブレット変換部11の処理に含まれる詳細な処理を並列化することは困難である。また、係数並び替えは、係数並び替え用バッファ部13からの係数データの読み出しであるので、この係数並び替えとエントロピ符号化に互いに異なるCPU101を割り当てると、さらにCPU101間で係数データの転送も必要になるので、処理が非効率になる。従って、符号化部10においては、上述したように、ウェーブレット変換と、係数並び替えおよびエントロピ符号化とで分けるのが理想的である。
従来あるコンピュータのように、コンピュータが自動的に処理を実行するCPUを割り当てる場合、負荷状況等に応じて割り当てを行うため、このように最適な位置で処理を分割し、互いに異なるCPUに割り当てるとは限らず、場合によっては符号化処理の効率が大幅に低減してしまう恐れがある。予め、図17の例のように、ウェーブレット変換と、係数並び替えおよびエントロピ符号化との間で処理を分割するようにすることにより、符号化部10は、効率よく符号化処理を実行することができる。
なお、図16においては、係数並び替え用バッファ部13−1および係数並び替え用バッファ部13−2をRAM103に形成するように説明したが、係数並び替え用バッファ部13−1は、CPU101−2のキャッシュメモリ111−2に形成されるようにしてもよく、また、係数並び替え用バッファ部13−2は、CPU101−4のキャッシュメモリ111−4に形成されるようにしてもよい。
図18は、図6の復号部20に対するハードウェア資源の割り当ての例を示す図である。図18に示される例においては、図11の符号化部10の例の場合と同様に、復号部20のエントロピ復号部21およびウェーブレット逆変換部23の全処理に対してCPU101−1が割り当てられ、係数バッファ部22は、キャッシュメモリ111−1に形成される。
このとき、エントロピ復号部21およびウェーブレット逆変換部23の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1にロードされる。CPU101−1は、そのソフトウェアプログラムの関数を必要に応じてキャッシュメモリ111−1より読み出して実行する。
復号される符号化データYと符号化データCは、RAM103に保持される。
図18の例の場合、符号化データYも符号化データCもCPU101−1において復号される。つまり、CPU101−1は、エントロピ復号部21の処理を実行することにより、RAM103より符号化データYを読み出してエントロピ復号を行う。CPU101−1は、キャッシュメモリ111−1の記憶領域の一部または全部を係数バッファ部22として利用し、エントロピ復号により生成された係数データをその係数バッファ部22に保持させる。
CPU101−1は、ウェーブレット逆変換部23の処理を実行することにより、キャッシュメモリ111−1の係数バッファ部22に保持されている係数データを読み出し、ウェーブレット逆変換処理を行い、画像データYを復元する。CPU101−1は、復元した画像データYをRAM103に供給して格納させる。
CPU101−1は、画像データCに対しても画像データYの場合と同様に処理を行う。
図18のように、パーソナルコンピュータ100において符号化部10を実装する場合、復号部20の全ての処理は、1つのCPU101において実行され、エントロピ復号処理により生成される係数データは、そのCPU101のキャッシュメモリ111に格納される。
このとき、例えば、他のCPU101−2乃至CPU101−4も、このCPU101−1と同様に復号部20に割り当てられるようにしてもよい。つまり、図18に示されるCPU101−1の場合と同様に、エントロピ復号部21およびウェーブレット逆変換部23の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれにもロードされる。CPU101−2乃至CPU101−4は、それぞれのキャッシュメモリ111よりそれらのソフトウェアプログラムを読み出して実行し、復号部20のエントロピ復号部21およびウェーブレット逆変換部23を実行する。このとき、キャッシュメモリ111−2乃至キャッシュメモリ111−4のそれぞれには、キャッシュメモリ111−1と同様に、係数バッファ部22が形成される。
つまり、この場合、CPU101−1乃至CPU101−4により4つの復号部20が実現される。これらの復号部20は、例えば、符号化データの符号化前の画像データのピクチャ毎に割り当てられる。つまり、この場合、CPU101−1乃至CPU101−4は、互いに異なるピクチャに対する復号処理を互いに並行して実行する。その場合の処理の流れを図19に模式的に示す。
図19に示されるように、エントロピ復号部21の処理を実行するCPU101−1は、RAM103より先頭のピクチャの先頭のプレシンクトの符号化データYを読み出してエントロピ復号を行い(P1VLD(Y))、得られた係数データを、キャッシュメモリ111−1の係数バッファ部22に格納させる。次に、ウェーブレット逆変換部23の処理を実行するCPU101−1は、その係数バッファ部22より係数データを読み出し、ウェーブレット逆変換を行い(P1DWT(Y))、得られた画像データYをRAM103に供給して保持させる。画像データYについて処理が終了すると、CPU101−1は、次に符号化データCについて同様の処理を行う(P1VLD(C),P1DWT(C))。
この時点で、RAM103には、少なくとも1プレシンクト分以上の画像データYおよび画像データCが蓄積されるので、それら画像データYおよび画像データCの出力が開始される。
先頭のプレシンクトに対して復号処理が終了すると、CPU101−1は、2番目以降のプレシンクトに対して復号処理を同様に行う(P2VLD(Y),P2DWT(Y),P2VLD(C),P2DWT(C),・・・)。
図19に示されるように、このCPU101−1の処理と並行して、CPU101−2は2番目のピクチャについて、CPU101−3は3番目のピクチャについて、CPU101−4は4番目のピクチャについて、同様の復号処理を行うこともできる。この場合、CPU101−1は、先頭のピクチャに対する処理が終了すると、次に、5番目のピクチャに対して復号処理を行う。そのCPU101−1の処理と並行して、CPU101−2乃至CPU101−4も同様に、それぞれ6番目乃至8番目のピクチャに対して復号処理を行う。なお、9番目以降のピクチャについても同様に処理される。
つまり、このように図18に示される割り当ての場合、復号部20は4つのピクチャの復号処理を同時に並行して行うことができる。さらに、この場合、一連の復号処理の中でCPUの切り替えを行う必要が無い。また、キャッシュメモリ111のみを用いてRAM103を使用せずに処理を行うことができるので、復号部20は、高速に符号化データを復号することができる。つまり復号部20は、高スループットで復号処理を行うことができる。また、パーソナルコンピュータ100は、そのCPU101の数によらず(例えば1つであっても)、復号部20を実装することができる。
しかしながら、キャッシュメモリ111の容量は少ないので、同時に蓄積可能なデータ量に制限があり、復号する符号化データのデータ量や内容によっては、キャッシュメモリ111の容量が不足し、溢れが生じる恐れがあるので、図18に示される割り当ての例は、復号の実行に必要なバッファ量が多い場合には適用することができないこともある。
図20は、図6の復号部20に対するハードウェア資源の割り当ての、他の例を示す図である。図20に示される例においては、符号化データYの復号を行う復号部と、符号化データCの復号を行う復号部のそれぞれに対して互いに異なるCPUが割り当てられている。
つまり、符号化データYの復号を行う復号部のエントロピ復号部21−1およびウェーブレット逆変換部23−1の全処理に対して、CPU101−1が割り当てられ、係数バッファ部22−1はキャッシュメモリ111−1に形成される。また、符号化データCの復号を行う復号部のエントロピ復号部21−2およびウェーブレット逆変換部23−2の全処理に対してCPU101−2が割り当てられ、係数バッファ部22−2はキャッシュメモリ111−2に形成される。
このときエントロピ復号部21およびウェーブレット逆変換部23の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1およびキャッシュメモリ111−2にロードされる。CPU101−1およびCPU101−2は、それぞれ、そのソフトウェアプログラムの関数を必要に応じてキャッシュメモリ111−1またはキャッシュメモリ111−2に読み出して実行する。
図20の例の場合、符号化データYはCPU101−1において復号され、符号化データCは、CPU101−2において復号される。つまり、CPU101−1は、エントロピ復号部21−1の処理を実行することにより、RAM103より符号化データYを読み出してエントロピ復号を行う。CPU101−1は、キャッシュメモリ111−1の記憶領域の一部または全部を係数バッファ部22−1として利用し、エントロピ復号により生成された係数データをその係数バッファ部22−1に保持させる。
CPU101−1は、ウェーブレット逆変換部23−1の処理を実行することにより、キャッシュメモリ111−1の係数バッファ部22−1に保持されている係数データを読み出し、ウェーブレット逆変換処理を行い、画像データYを復元する。CPU101−1は、復元した画像データYをRAM103に供給して格納させる。
CPU101−2は、エントロピ復号部21−2の処理を実行することにより、RAM103より符号化データCを読み出してエントロピ復号を行う。CPU101−2は、キャッシュメモリ111−2の記憶領域の一部または全部を係数バッファ部22−2として利用し、エントロピ復号により生成された係数データをその係数バッファ部22−2に保持させる。
CPU101−2は、ウェーブレット逆変換部23−2の処理を実行することにより、キャッシュメモリ111−2の係数バッファ部22−2に保持されている係数データを読み出し、ウェーブレット逆変換処理を行い、画像データCを復元する。CPU101−2は、復元した画像データCをRAM103に供給して格納させる。
図20のように、パーソナルコンピュータ100において符号化部10を実装する場合、画像データYおよび画像データCに対する復号部20の全ての処理は、それぞれ互いに異なる1つのCPU101において実行され、エントロピ復号により発生する係数データは、それぞれのCPU101に内蔵されるキャッシュメモリ111に格納され、ウェーブレット逆変換により復元される画像データYおよび画像データCは、ともにRAM103に格納される。つまり、2つのCPUを1組として符号化処理が行われる。
このとき、例えば、他のCPU101−3およびCPU101−4も、このCPU101−1およびCPU101−2と同様に、復号部20に割り当てられるようにしてもよい。つまり、図20のCPU101−1およびCPU101−2の場合と同様に、エントロピ復号部21およびウェーブレット逆変換部23の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−3およびキャッシュメモリ111−4のそれぞれにもロードされる。CPU101−3およびCPU101−4は、それぞれのキャッシュメモリ111よりそれらのソフトウェアプログラムを読み出して実行し、復号部20のエントロピ復号部21およびウェーブレット逆変換部23の各処理を実行する。このとき、キャッシュメモリ111−3には、符号化データY用の係数バッファ部22−1が形成され、キャッシュメモリ111−4には、符号化データC用の係数バッファ部22−2が形成される。
つまり、この場合、CPU101−1乃至CPU101−4により2つの復号部20が実現される。これらの復号部20は、例えば、符号化データの符号化前の画像データのピクチャ毎に割り当てられる。例えば、CPU101−1およびCPU101−2が奇数番目のピクチャの復号処理を行い、CPU101−3およびCPU101−4が偶数番目のピクチャの復号処理を行うようになされる。その場合の処理の流れを図21に示す。
この場合、図21に示されるように、エントロピ復号部21−1の処理を実行するCPU101−1は、RAM103より先頭のピクチャの先頭のプレシンクトの符号化データYを読み出してエントロピ復号を行い(P1VLD(Y))、得られた係数データを、キャッシュメモリ111−1の係数バッファ部22−1に格納させる。次に、ウェーブレット逆変換部23−1の処理を実行するCPU101−1は、その係数バッファ部22−1より係数データを読み出し、ウェーブレット逆変換を行い(P1DWT(Y))、得られた画像データYをRAM103に供給して保持させる。
この処理と並行して、エントロピ復号部21−2の処理を実行するCPU101−2は、RAM103より先頭のピクチャの先頭のプレシンクトの符号化データCを読み出してエントロピ復号を行い(P1VLD(C))、得られた係数データを、キャッシュメモリ111−2の係数バッファ部22−2に格納させる。次に、ウェーブレット逆変換部23−2の処理を実行するCPU101−2は、その係数バッファ部22−2より係数データを読み出し、ウェーブレット逆変換を行い(P1DWT(C))、得られた画像データCをRAM103に供給して保持させる。
従って、この場合の復号部20は、CPU101−1およびCPU101−2が先頭のプレシンクトについてウェーブレット逆変換を終了した時点で、RAM103に1プレシンクト分以上の画像データ(画像データYおよび画像データC)が蓄積されるので、画像データの出力を開始することができる。
2番目以降のプレシンクトについても同様に、符号化データYはCPU101−1により、符号化データCはCPU101−2により、互いに並行して復号される。
このCPU101−1およびCPU101−2の処理と並行して、CPU101−3およびCPU101−4により2番目のピクチャについてCPU101−1およびCPU101−2の処理と同様の復号処理を行うようにすることができる。この場合、CPU101−3は2番目のピクチャの符号化データYについて復号を行い、CPU101−4は2番目のピクチャの符号化データCについて復号を行う。
この場合、CPU101−1およびCPU101−2は、先頭のピクチャに対する処理を終了すると、次に、3番目のピクチャに対して復号処理を行う。そのCPU101−1およびCPU101−2の処理と並行して、CPU101−3およびCPU101−4も同様に4番目のピクチャに対して復号処理を行う。5番目以降のピクチャについても同様に処理される。
従って、図20に示される割り当ての例の場合、符号化データYと符号化データCを並行して復号することにより、図18の例の場合よりも、復元された画像データの出力開始タイミング、すなわち、先頭のプレシンクトの画像データYおよび画像データCの出力タイミングを早くすることができるので、復号処理の遅延時間を低減させることができる。付言するに、同様の理由から、図20に示される割り当ての例の場合の方が、図18の例の場合よりも速く、先頭ピクチャの復号を完了させることができる。従って、復号部20において復元された画像データの画像をモニタに表示させる場合、復号処理が開始されてから最初のピクチャが表示されるまでの遅延時間は、図20に示される割り当ての例の場合の方が、図18の例の場合よりも短くなる。
また、符号化データYが復号されて得られる係数データと、符号化データCが復号されて得られる係数データとが、互いに異なるキャッシュメモリ111に蓄積されるので、図18の例の場合よりも、係数バッファ部22の容量を大きくすることができ、バッファ溢れの発生をより抑制することができる。
なお、画像データYの方が画像データCよりも情報量が多く絵が複雑であるので、復号処理に要する時間が長い。従って、CPU101−2やCPU101−4に待機時間が発生するので、CPU101の使用効率は図18の例の場合よりも低下し、スループットも図18の場合よりも低下する。
図22に、図6の復号部20の割り当ての、さらに他の例を示す。図22に示される例においては、図20の割り当ての例よりさらに、エントロピ復号部21と、ウェーブレット逆変換部23のそれぞれに対して互いに異なるCPU101が割り当てられている。
つまり、符号化データYを復号するエントロピ復号部21−1に対して、CPU101−1が割り当てられ、エントロピ復号部21−1において生成された係数データのウェーブレット逆変換処理を行うウェーブレット逆変換部23−1に対して、CPU101−2が割り当てられている。係数バッファ部22−1は、キャッシュメモリ111−2に形成される。
同様に、符号化データCを復号するエントロピ復号部21−2に対して、CPU101−3が割り当てられ、エントロピ復号部21−2において生成された係数データのウェーブレット逆変換処理を行うウェーブレット逆変換部23−2に対して、CPU101−4が割り当てられている。係数バッファ部22−2は、キャッシュメモリ111−4に形成される。
このとき、エントロピ復号部21の機能を実現するソフトウェアプログラムは、キャッシュメモリ111−1およびキャッシュメモリ111−3にロードされ、ウェーブレット逆変換部23の各機能を実現するソフトウェアプログラムは、キャッシュメモリ111−2およびキャッシュメモリ111−4にロードされる。CPU101−1乃至CPU101−4は、それぞれ、それらのソフトウェアプログラムの関数を、必要に応じて、それぞれのキャッシュメモリ111より読み出して実行する。
図22の例の場合、符号化データYはCPU101−1およびCPU101−2において復号され、符号化データCはCPU101−3およびCPU101−4において復号される。つまり、CPU101−1は、符号化データYについて、エントロピ復号部21−1の処理を実行することにより、RAM103より符号化データYを読み出してエントロピ復号処理を行う。その際、CPU101−1は、キャッシュメモリ111−2の記憶領域の一部または全部を係数バッファ部22として利用し、生成した係数データをその係数バッファ部22に保持させる。
CPU101−2は、ウェーブレット逆変換部23−1の処理を実行することにより、CPU101−1が生成し、RAM103の係数バッファ部22に保持されている係数データを読み出し、ウェーブレット逆変換処理として階層的に垂直方向および水平方向に合成フィルタリング処理を行い、画像データYを生成する。CPU101−2は、生成した画像データYをRAM103に供給して格納させる。
このCPU101−1およびCPU101−2の処理と並行して、CPU101−3およびCPU101−4が、画像データCについて、図22の例の場合と同様に、エントロピ復号処理およびウェーブレット逆変換処理を行う。
図22の例のように、パーソナルコンピュータ100において復号部20を実装する場合、CPU101−1乃至CPU101−4の4つのCPUを1組として復号処理が行われる。従って、この場合、CPU101−1乃至CPU101−4により1つの復号部20が実現される。当然、この復号部20は、復号されて復元される動画像データの全てのピクチャの復号処理を行うようになされる。その場合の処理の流れを図23に示す。
CPU101−1乃至CPU101−4は、互いに独立して動作するので、図23に示される例のように、各処理を並行して実行することができる。
この場合、図23に示されるように、エントロピ復号部21−1の処理を実行するCPU101−1は、RAM103より先頭のピクチャの先頭のプレシンクトの符号化データYを読み出してエントロピ復号を行い(P1VLD(Y))、得られた係数データを、キャッシュメモリ111−2の係数バッファ部22−1に格納させる。エントロピ復号部21−1の処理を実行するCPU101−1は、2番目のプレシンクトの符号化データYに対して同様にエントロピ復号(P2VLD(Y))を行う。
このP2VLD(Y)に並行して、ウェーブレット逆変換部23−1の処理を実行するCPU101−2は、係数バッファ部22−1より、先頭のピクチャの先頭のプレシンクトの係数データを読み出し、ウェーブレット逆変換(P1DWT(Y))を行い、得られた画像データYを、RAM103に保持させた後出力させる。ウェーブレット逆変換部23−1の処理を実行するCPU101−2は、2番目のプレシンクトの係数データに対して同様にウェーブレット逆変換(P2DWT(Y))を行う。
CPU101−1およびCPU101−2は、3番目以降のプレシンクトに対しても、同様に、処理対象を互いに1プレシンクト分ずらして、エントロピ復号と、ウェーブレット逆変換とを並行して実行する。
なお、この画像データYに対する復号処理と並行して、CPU101−3およびCPU101−4は、画像データCに対して同様に復号処理を行う。つまり、CPU101−1がP1VLD(Y)の処理を実行するのと並行して、CPU101−3がP1VLD(C)の処理を実行し、CPU101−2がP1DWT(Y)の処理を実行するのと並行して、CPU101−4がP1DWT(C)の処理を実行する。
従って、この場合の復号部20は、CPU101−2およびCPU101−4が先頭のプレシンクトについてウェーブレット逆変換を終了した時点で、RAM103に1プレシンクト分以上の画像データ(画像データYおよび画像データC)が蓄積されるので、画像データの出力を開始することができる。
2番目以降のプレシンクトについても同様に、符号化データYは、CPU101−1およびCPU101−2により復号され、それと並行して、符号化データCは、CPU101−3およびCPU101−4により復号される。最後のn番目のプレシンクト(Pn)の符号化データYおよび符号化データCが復号され、画像データYおよび画像データCが出力されると、先頭のピクチャの画像データは全て出力されたので、先頭のピクチャについて画像データの出力が終了される。
2番目以降のピクチャについても同様に処理される。
以上のように、図22に示される割り当ての例の場合、エントロピ復号処理とウェーブレット逆変換処理とを並行して行うことにより、図20の例の場合よりも、復元された画像データの出力開始タイミング、すなわち、先頭のプレシンクトの画像データYおよび画像データCの出力タイミングを早くすることができるので、復号処理の遅延時間を低減させることができる。付言するに、同様の理由から、図22に示される割り当ての例の場合の方が、図20の例の場合よりも速く、先頭ピクチャの復号を完了させることができる。従って、復号部20において復元された画像データの画像をモニタに表示させる場合、復号処理が開始されてから最初のピクチャが表示されるまでの遅延時間は、図22に示される割り当ての例の場合の方が、図20の例の場合よりも短くなる。
また、図20の例の場合と同様に、符号化データYを復号して得られる係数データと、符号化データCを復号して得られる係数データとが互いに異なるキャッシュメモリ111に蓄積されるので、図18の例の場合よりも、係数バッファ部22の容量をさらに大きくすることができ、バッファ溢れの発生をより抑制することができる。
ただし、実際には、画像データYの方が画像データCよりも情報量が多く絵が複雑であるので、復号処理に要する時間が長い。従って、CPU101−3およびCPU101−4に待機時間が発生する。さらに、復号処理の途中でCPU101が切り替わるので制御が複雑になるとともに処理時間も増大する。従って、CPU101の使用効率は図20の場合よりもさらに低下し、スループットも図20の場合よりもさらに低下する。
エントロピ復号およびウェーブレット逆変換の各処理は、それぞれ複数の関数により構成されているので、上述したようなエントロピ復号とウェーブレット逆変換の間以外のところで割り当てるCPU101を変更するようにすることも可能であるが、並列に実行可能な処理でなければ互いに異なるCPU101に割り当てられるようにしても処理時間を短縮することはできない。図6に示される復号部20において、エントロピ復号やウェーブレット逆変換の処理に含まれる詳細な処理を並列化することは困難である。従って、復号部20においては、上述したように、エントロピ復号とウェーブレット逆変換とで分けるのが理想的である。
従来あるコンピュータのように、コンピュータが自動的に処理を実行するCPUを割り当てる場合、負荷状況等に応じて割り当てを行うため、このように最適な位置で処理を分割し、互いに異なるCPUに割り当てるとは限らず、場合によっては復号処理の効率が大幅に低減してしまう恐れがある。予め、図22の例のように、エントロピ復号とウェーブレット逆変換との間で処理を分割するようにすることにより、復号部20は、効率よく復号処理を実行することができる。
ところで、図1においては、係数の並び替えをウェーブレット変換の直後(エントロピ符号化の前)に行うように説明したが、符号化データが低域から高域の順に復号部20(図6)のウェーブレット逆変換部23に供給されればよく(つまり、低域のサブバンドに属する係数データを符号化して得られる符号化データから、高域のサブバンドに属する係数データを符号化して得られる符号化データに向かう順に供給されればよく)、並び替えのタイミングは、ウェーブレット変換の直後以外であってもよい。
例えば、図24に示されるように、エントロピ符号化によって得られる符号化データの順序を並び替えるようにしてもよい。図24の場合の符号化部10は、図1の場合と同様に、ウェーブレット変換部11、途中計算用バッファ部12、およびエントロピ符号化部15を有するが、図1の係数並び替え用バッファ部13および係数並び替え部14の代わりに、符号並び替え用バッファ部213および符号並び替え部214を有する。
ウェーブレット変換部11より出力された係数データはエントロピ符号化部15に供給される。エントロピ符号化部15は、供給される係数データをその供給順に符号化し、符号化により得られた符号化データを符号並び替え用バッファ部213に保持させる。つまり、符号並び替え用バッファ部213には、符号化データが高域から低域の順に供給される。符号並び替え部214は、符号並び替え用バッファ部213に保持されている符号化データを、ウェーブレット逆変換処理が行われる順、すなわち、低域から高域の順に読み出すことにより符号化データの並び替えを行い、RAM103に保持させた後、その順で出力させる。
図24には、このような符号化部10に対するハードウェア資源の割り当ての例も示す。図24の例の場合、1つのCPU101において、符号化処理の各処理を全て行うように割り当てが行われている。つまり、符号化データの順序を並び替える場合も、図11を参照して説明した係数データを並び替える場合と同様にハードウェア資源を割り当てることができる。同様に、図13、図14、または図16の例のようにハードウェア資源を割り当てることもできる。図16の例のようにハードウェア資源を割り当てるときの様子を図25に示す。
図25に示されるように、この場合、画像データYのウェーブレット変換処理を行うウェーブレット変換部11−1に対して、CPU101−1が割り当てられ、画像データYの係数データのエントロピ符号化を行うエントロピ符号化部15−1、および、符号化データYの並び替えを行う符号並び替え部214−1に対して、CPU101−2が割り当てられる。途中計算用バッファ部12−1は、CPU101−1のキャッシュメモリ111−1に形成され、符号並び替え用バッファ部213−1は、RAM103に形成される。
同様に、画像データCのウェーブレット変換処理を行うウェーブレット変換部11−2に対して、CPU101−3が割り当てられ、画像データCの係数データのエントロピ符号化を行うエントロピ符号化部15−2、および、符号化データCの並び替えを行う符号並び替え部214−2に対して、CPU101−4が割り当てられる。途中計算用バッファ部12−2は、CPU101−3のキャッシュメモリ111−3に形成され、符号並び替え用バッファ部213−2は、RAM103に形成される。
このように、符号化データの順序を並び替える場合も、係数データを並び替える場合と同様に、ハードウェア資源の割り当てを適切に行うことにより、符号化部10は、効率よく符号化処理を実行することができる。なお、符号化データの順序を並び替える場合も、図25に示されるようにウェーブレット変換部11−1、エントロピ符号化部15−1、および符号並び替え部214−1(または、ウェーブレット変換部11−2、エントロピ符号化部15−2、および符号並び替え部214−2)に対して複数のCPU101を割り当てるとき、そのCPU101の切り替え位置を予め定めておくことにより、不適切なハードウェア資源の割り当てを抑制することができる。
なお、ハードウェア資源の割り当て方法は、上述した以外であってもよい。例えば、図25の例において、符号並び替え用バッファ部213−1がキャッシュメモリ111−2に形成され、符号並び替え用バッファ部213−2がキャッシュメモリ111−4に形成されるようにしてもよいし、エントロピ符号化部15−1に対してCPU101−1を割り当て、エントロピ符号化部15−2に対してCPU101−3を割り当てるようにしてもよいし、ウェーブレット変換部11−1、エントロピ符号化部15−1、および符号並び替え部214−1に対して互いに異なるCPU101を割り当て、ウェーブレット変換部11−2、エントロピ符号化部15−2、および符号並び替え部214−2に対して互いに異なるCPU101を割り当てるようにしてもよい。
なお、この場合、復号部20の構成およびハードウェア資源の割り当て方法は、図18乃至図23を参照して説明した場合と同様である。
並び替えは、復号部20側で行うようにしてもよい。その場合、符号化部10は、図26に示されるように、ウェーブレット変換部11、途中計算用バッファ部12、およびエントロピ符号化部15を有し、図1のような係数並び替え用バッファ部13や係数並び替え部14を有していない。
もちろん、このときの符号化部10のCPU101への割り当ても、図12乃至図17を参照して説明した、係数データを並び替える場合と同様に行うことができる。つまり、この場合も、ハードウェア資源の割り当てを適切に行うことにより、符号化部10は、効率よく符号化処理を実行することができる。一例として、図16の例に対応する例を図26に示す。
このときの符号化部10に対応する復号部20の構成は、図27に示されるようになる。すなわち、復号部20は、係数バッファ部22とウェーブレット逆変換部23との間に、係数データの順序を並び替えるための係数並び替え用バッファ部223を有する。このときの復号部20も図18乃至図23を参照して説明した例と同様に、CPU101に割り当てることができる。つまり、この場合も、ハードウェア資源の割り当てを適切に行うことにより、復号部20は、効率よく復号処理を実行することができる。一例として、図22の例に対応する例を図27に示す。
図27の例の場合、係数バッファ部22−1より出力される輝度成分Yの係数データを保持する係数並び替え用バッファ部223−1、および、係数バッファ部22−2より出力される色差成分Cの係数データを保持する係数並び替え用バッファ部223−2は、RAM103に形成される。
ウェーブレット逆変換部23−1の処理を実行するCPU101−2は、RAM103の係数並び替え用バッファ部223−1より、輝度成分Yの係数データを、並び替えた順、すなわち低域から高域に向かう順で読み出し、その順で係数データに対してウェーブレット逆変換処理を行う。CPU101−2は、生成された画像データYをRAM103に保持させた後出力させる。
同様に、ウェーブレット逆変換部23−2の処理を実行するCPU101−4は、RAM103の係数並び替え用バッファ部223−2より、色差成分Cの係数データを、並び替えた順、すなわち低域から高域に向かう順で読み出し、その順で係数データに対してウェーブレット逆変換処理を行う。CPU101−4は、生成された画像データCをRAM103に保持させた後出力させる。
以上のように、符号化部10および復号部20の各処理を適切にCPU101に割り当てることにより、符号化部10および復号部20の処理効率を向上させ、スループットを向上させたり、遅延時間を低減させたりすることができる。
なお、図27においては、係数並び替え用バッファ部223−1および係数並び替え用バッファ部223−2をRAM103に形成するように説明したが、係数並び替え用バッファ部223−1は、CPU101−2のキャッシュメモリ111−2に形成されるようにしてもよく、また、係数並び替え用バッファ部223−2は、CPU101−4のキャッシュメモリ111−4に形成されるようにしてもよい。
なお、符号化部10や復号部20に求められる特性が、画像データの内容(画像)、符号化方法、復号方法、使用可能なハードウェア資源、または使用目的等によって異なる場合がある。例えば、画像の画素数が4000×2000以上である高精細映像を符号化処理の対象とする場合やフレームレートが高い場合、符号化処理や復号処理の処理量(処理されるデータ量)が多い。そのため、符号化処理や復号処理をリアルタイム(即時的)に行うためには、処理の高スループット化が優先される。また、例えばテレビ会議システムや家庭用ビデオゲームシステムのように、より低遅延で画像データの伝送を行う必要がある場合、符号化処理や復号処理も低遅延化が優先される。また、現在使用可能なハードウェア資源や、予想されるメモリの使用量によっては、実現不可能な割り当てパターンが存在する可能性もある。
つまり、ハードウェアの割り当てパターンの例を上述したが、どのような割り当てパターンが最善であるか(より効率よく処理を行うことができるか)は、画像データの内容(画像)、符号化方法、復号方法、使用可能なハードウェア資源、または使用目的等によって変化することがある。
そこで多様な条件において適切な割り当てパターンを適用することができるように、上述したようなハードウェアの割り当てパターンを予め複数用意し、条件に応じて適切に割り当てパターンを選択するようにしてもよい。以下にその場合について説明する。最初に、ソフトウェアエンコーダやソフトウェアデコーダに対して割り当てられるハードウェア資源の例について説明する。図28は、ソフトウェアエンコーダやソフトウェアデコーダが実装される情報処理システムの構成例を示すブロック図である。
図28に示されるように、情報処理システム300は、情報処理装置301、その情報処理装置301とPCIバス302によって接続された、記憶装置303、複数台のビデオテープレコーダ(VTR)であるVTR304−1乃至VTR304−S、ユーザがこれらに対する操作入力を行うためのマウス305、キーボード306、並びに操作コントローラ307により構成されるシステムであり、インストールされたプログラムによって、上述したような画像符号化処理や画像復号処理等を行うシステムである。
例えば情報処理システム300の情報処理装置301は、RAID(Redundant Arrays of Independent Disks)でなる大容量の記憶装置303に記憶されている動画コンテンツを符号化して得られた符号化データを記憶装置303に記憶させたり、記憶装置303に記憶されている符号化データを復号して得られた復号画像データ(動画コンテンツ)を記憶装置303に記憶させたり、符号化データや復号画像データをVTR304−1乃至VTR304−Sを介してビデオテープに記録したりすることができる。また、情報処理装置301は、VTR304−1乃至VTR304−Sに装着されたビデオテープに記録された動画コンテンツを記憶装置303に取り込み得るようにもなされている。その際、情報処理装置301が、動画コンテンツを符号化するようにしてもよい。
情報処理装置301は、マイクロプロセッサ401、GPU(Graphics Processing Unit)402、XDR(Extreme Data Rate)-RAM403、サウスブリッジ404、HDD(Hard Disk Drive)405、USBインタフェース(USB I/F)406、およびサウンド入出力コーデック407を有している。
GPU402は専用のバス411を介してマイクロプロセッサ401に接続される。XDR-RAM403は専用のバス412を介してマイクロプロセッサ401に接続される。サウスブリッジ404は、専用のバスを介してマイクロプロセッサ401のI/Oコントローラ444に接続される。このサウスブリッジ404には、HDD405、USBインタフェース406、および、サウンド入出力コーデック407も接続されている。このサウンド入出力コーデック407にはスピーカ421が接続されている。また、GPU402にはディスプレイ422が接続されている。
またサウスブリッジ404には、さらに、PCIバス302を介して、マウス305、キーボード306、VTR304−1乃至VTR304−S、記憶装置303、並びに、操作コントローラ307が接続されている。
マウス305およびキーボード306は、ユーザの操作入力を受け、PCIバス302およびサウスブリッジ404を介して、ユーザの操作入力の内容を示す信号を、マイクロプロセッサ401に供給する。記憶装置303およびVTR304−1乃至VTR304−Sは、所定のデータを記録または再生できるようになされている。
PCIバス302にはさらに、必要に応じてドライブ308が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア311が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じてHDD405にインストールされる。
マイクロプロセッサ401は、OS(Operating System)等の基本プログラムを実行する汎用のメインCPUコア441と、メインCPUコア441に共有バス445を介して接続された複数(この場合8個)のRISC(Reduced Instruction Set Computer)タイプの信号処理プロセッサである、サブCPUコア442−1乃至サブCPUコア442−8と、例えば256[MByte]の容量を持つXDR-RAM403に対するメモリコントロールを行うメモリコントローラ443と、サウスブリッジ404との間でデータの入出力を管理するI/O(In/Out)コントローラ444とが1チップに集積されたマルチコア構成でなり、例えば動作周波数4[GHz]を実現している。
このマイクロプロセッサ401は、起動時、HDD405に格納された制御プログラムに基づき、HDD405に格納されている必要なアプリケーションプログラムを読み出してXDR-RAM403に展開し、この後このアプリケーションプログラム及びオペレータ操作に基づいて必要な制御処理を実行する。
また、マイクロプロセッサ401は、ソフトウェアを実行することにより、例えば、上述した符号化処理や復号処理を実現し、エンコードの結果得られた符号化ストリームを、サウスブリッジ404を介して、HDD405に供給して記憶させたり、デコードした結果得られる動画像コンテンツの再生映像を、GPU402へデータ転送して、ディスプレイ422に表示させたりすることができる。
マイクロプロセッサ401内の各CPUコアの使用方法は任意であるが、例えば、メインCPUコア441が、画像符号化処理や画像復号処理の制御に関する処理を行い、8個のサブCPUコア442−1乃至サブCPUコア442−8に、ウェーブレット変換、係数並び替え、エントロピ符号化、エントロピ復号、ウェーブレット逆変換、量子化、および逆量子化等の各処理を、例えば図9を参照して説明したように同時並列的に実行させるようにしてもよい。その際、メインCPUコア441が、8個のサブCPUコア442−1乃至サブCPUコア442−8のそれぞれに対してプレシンクト単位で処理を割り振るようにすれば、符号化処理や復号処理が、図9を参照して説明した場合と同様にプレシンクト単位で同時並列的に実行される。つまり、符号化処理や復号処理の効率を向上させ、処理全体の遅延時間を短縮させ、さらに、負荷、処理時間、および、処理に必要なメモリ容量を低減させることができる。もちろん、これ以外の方法で各処理を行うようにしてもよい。
GPU402は、ディスプレイ422に表示する動画コンテンツの再生映像を動かすときのテクスチャの張り込みなどに関する最終的なレンダリング処理に加えて、動画コンテンツの再生映像及び静止画コンテンツの静止画像をディスプレイ422に一度に複数表示するときの座標変換計算処理や、動画コンテンツの再生映像及び静止画コンテンツの静止画像に対する拡大・縮小処理等を行う機能を司り、マイクロプロセッサ401の処理負担を軽減させるようになされている。
GPU402は、マイクロプロセッサ401の制御のもとに、供給された動画コンテンツの映像データや静止画コンテンツの画像データに対して所定の信号処理を施し、その結果得られた映像データや画像データをディスプレイ422へ送出して、画像信号をディスプレイ422へ表示させる。
ところで、マイクロプロセッサ401における8個のサブCPUコア442−1乃至サブCPUコア442−8で同時並列的にデコードされた複数の動画コンテンツにおける再生映像は、バス411を介してGPU402へデータ転送されるが、このときの転送速度は、例えば、最大30[Gbyte/sec]であり、特殊効果の施された複雑な再生映像であっても高速かつ滑らかに表示し得るようになされている。
また、マイクロプロセッサ401は、動画コンテンツの映像データ及び音声データのうち音声データに対して音声ミキシング処理を施し、その結果得られた編集音声データを、サウスブリッジ404およびサウンド入出力コーデック407を介して、スピーカ421へ送出することにより、音声信号に基づく音声をスピーカ421から出力させることもできる。
このような情報処理システム300のマイクロプロセッサ401における8個のサブCPUコア442−1乃至サブCPUコア442−8のそれぞれには、図29に示されるように、キャッシュメモリとしてLS(Local Store)451−1乃至LS451−8が内蔵されている。つまり、8個のサブCPUコア442−1乃至サブCPUコア442−8は、各自が内蔵するLS451−1乃至LS451−8とXDR-RAM403の記憶領域を利用することができる。
図10のパーソナルコンピュータ100のキャッシュメモリ111の場合と同様に、LS451−1乃至LS451−8は、サブCPUコア442−1乃至サブCPUコア442−8のそれぞれが独占的に使用することができ、かつ、共有バス445を介さずにデータの読み出しや書き込みを行うことができ、さらに、XDR-RAM403よりも高速に動作する。従って、LS451−1乃至LS451−8は、XDR-RAM403よりも高速にデータの読み出しや書き込みが可能である。ただし、LS451−1乃至LS451−8は、XDR-RAM403と比べて容量当たりの単価が高く、かつ、その容量が小さい。
実際には、XDR-RAM403の容量も有限であるが、以下においては、XDR-RAM403の容量は十分に大きいものとし、逆に、LS451−1乃至LS451−8の容量は小さく、必要最小限のデータしか保持することができないものとする。
なお、以下において、サブCPUコア442−1乃至サブCPUコア442−8を互いに区別して説明する必要の無い場合、サブCPUコア442と称する。また、LS451−1乃至LS451−8を互いに区別して説明する必要の無い場合、LS451と称する。このサブCPUコア442(LS451)の数は、図28においては8個設けられるように示されているが、実際には任意である。
サブCPUコア442−1乃至サブCPUコア442−8は、メインCPUコア441により、予め用意された複数の割り当て方法から最適なものが選択され、その割り当て方法に従って符号化部10および復号部20の各処理が割り当てられる。
そのメインCPUコア441が有する機能ブロックを図30に示す。
図30に示されるように、メインCPUコア441は、情報処理システム300全体の制御を行い、ソフトウェアプログラムの処理をハードウェアに実行させる基本ソフトウェアであるOS501、符号化部10を実装する際の割り当て方法の選択を行う符号化選択制御部502、復号部20を実装する際の割り当て方法の選択を行う復号選択制御部503、および、メインCPUコア441のローカルなキャッシュメモリであるキャッシュ504を有する。
OS501は、情報処理システム300のハードウェア資源を管理しており、符号化選択制御部502や復号選択制御部503からの要求に基づいて、ハードウェア資源に関する情報である資源情報を提供したり、処理に対してハードウェア資源を割り当てたりする。例えば、OS501は、符号化プログラムや復号プログラムをHDD405より読み出し、LS451やXDR-RAM403に割り当てたり、処理をサブCPUコア442に実行させたりする。また、OS501は、例えば、XDR-RAM403に必要な容量の領域を確保したりする。
符号化選択制御部502は、画像パラメータ取得部511、符号化パラメータ取得部512、資源情報取得部513、演算精度選択部514、途中計算用バッファ使用量算出部515、係数並び替え用バッファ使用量算出部516、符号化プログラム選択部517、およびプログラム実行部518を有する。
画像パラメータ取得部511は、XDR-RAM403に保持されている、符号化処理の処理対象である画像データ541の画像、または、復号処理の処理対象である符号化データ542の画像に関するパラメータ情報である画像パラメータ543を取得する。符号化パラメータ取得部512は、XDR-RAM403に保持されている、符号化処理に関するパラメータ情報である符号化パラメータ544を取得する。資源情報取得部513は、現在利用可能なサブCPUコアの個数やLS451の容量等の情報のうち、少なくともいずれか1つを含む資源情報を、OS501を介して取得する。演算精度選択部514は、符号化パラメータ取得部512により取得された符号化パラメータ544に基づいて、ウェーブレット変換処理における演算精度を選択する。
途中計算用バッファ使用量算出部515は、途中計算用バッファ部12として必要な容量を示す途中計算用バッファ使用量を各コンポーネントについて算出する。係数並び替え用バッファ使用量算出部516は、係数並び替え用バッファ部13として必要な容量を示す係数並び替え用バッファ使用量を各コンポーネントについて算出する。
符号化プログラム選択部517は、各種条件に従って、XDR-RAM403に保持されている符号化プログラム546−1、符号化プログラム546−2、および符号化プログラム546−3の中から、実行するプログラム(利用符号化プログラムとも称する)を1つ選択する。プログラム実行部518は、符号化プログラム選択部517により選択された符号化プログラム(利用符号化プログラム)を実行することにより、その符号化プログラムの割り当て方法に従って、図1の符号化部10の各工程(プロセス)に、サブCPUコア442−1乃至サブCPUコア442−8等のハードウェア資源を割り当て、それらのハードウェア資源に画像データ541の符号化処理を行わせる。ここで工程(プロセス)とは、図1に示される各処理部が実行する処理のことを示す。
復号選択制御部503は、画像パラメータ取得部521、復号パラメータ取得部522、資源情報取得部523、係数バッファ使用量算出部524、復号プログラム選択部525、およびプログラム実行部526を有する。
画像パラメータ取得部521は、XDR-RAM403に保持されている画像パラメータ543を取得する。復号パラメータ取得部522は、XDR-RAM403に保持されている、復号処理に関するパラメータ情報である復号パラメータ545を取得する。資源情報取得部523は、OS501を介して情報処理システム300の資源情報を取得する。
係数バッファ使用量算出部524は、係数バッファ部22として必要な容量を示す係数バッファ使用量を各コンポーネントについて算出する。
復号プログラム選択部525は、各種条件に従って、XDR-RAM403に保持されている復号プログラム547−1、復号プログラム547−2、および復号プログラム547−3の中から、実行するプログラム(利用復号プログラムとも称する)を1つ選択する。プログラム実行部526は、復号プログラム選択部525により選択された復号プログラム(利用復号プログラム)を実行することにより、その復号プログラムの割り当て方法に従って、図6の復号部20の各工程(プロセス)に、サブCPUコア442−1乃至サブCPUコア442−8等のハードウェア資源を割り当て、それらのハードウェア資源に符号化データ542の復号処理を行わせる。ここで工程(プロセス)とは、図6に示される各処理部が実行する処理のことを示す。
キャッシュ504には、符号化方式の選択に用いられるウェーブレット変換用関係テーブル531、および、係数並び替え用関係テーブル532が保持されている。
ウェーブレット変換用関係テーブル531は、図31に示されるように、分解数、5×3フィルタ、および9×7フィルタの各項により構成されるテーブル情報であり、ウェーブレット変換用の途中計算用バッファ部12に必要な容量を算出するための関係指数を求めるためのテーブル情報である。
また、係数並び替え用関係テーブル532は、図32に示されるように、分解数、5×3フィルタ、および9×7フィルタの各項により構成されるテーブル情報であり、係数並び替え用バッファ部13に必要な容量を算出するための関係指数を求めるためのテーブル情報である。
XDR-RAM403には、画像データ541、符号化データ542、画像パラメータ543、符号化パラメータ544、復号パラメータ545、符号化プログラム546−1乃至符号化プログラム546−3、並びに、復号プログラム547−1乃至復号プログラム547−3が保持される。
画像データ541は、符号化対象とされる例えば動画像のデータである。符号化データ542は、復号対象とされるデータであり、画像データを符号化して得られるデータである。
画像パラメータ543は、画像に関するパラメータ情報である。この画像パラメータ543の内容は任意であり、どの様なパラメータを含むようにしてもよいが、例えば、画像の縦横サイズ、ビット深度、ウェーブレットフィルタの種類、およびウェーブレット変換の分解数等のパラメータを含む。
符号化パラメータ544は、予め設定された符号化条件を示すパラメータ情報である。この符号化パラメータ544の内容は任意であり、どの様なパラメータを含むようにしてもよいが、例えば、ウェーブレット変換処理およびウェーブレット逆変換処理において使用されるフィルタの種類、ウェーブレット変換の分割レベル、並びに、演算精度、レイテンシ、またはスループット等の優先事項の有無等のパラメータを含む。
復号パラメータ545は、予め設定された復号条件を示すパラメータ情報である。この復号パラメータ545の内容は任意であり、どの様なパラメータを含むようにしてもよいが、例えば、演算精度、レイテンシ、またはスループット等の優先事項の有無等のパラメータを含む。
符号化プログラム546−1乃至符号化プログラム546−3は、それぞれ、図1の符号化部10を実現するソフトウェアプログラムであり、さらに、自分自身に対するハードウェアの割り当て方法が予め定められている。ただし、その割り当て方は、ソフトウェアプログラム毎に互いに異なる。なお、以下において、これらの符号化プログラム546−1乃至符号化プログラム546−3を互いに区別して説明する必要の無い場合、単に符号化プログラム546と称する。
復号プログラム547−1乃至復号プログラム547−3は、それぞれ、図6の復号部20を実現するソフトウェアプログラムであり、さらに、自分自身に対するハードウェアの割り当て方法が予め定められている。ただし、その割り当て方は、ソフトウェアプログラム毎に互いに異なる。なお、以下において、これらの復号プログラム547−1乃至復号プログラム547−3を互いに区別して説明する必要の無い場合、単に復号プログラム547と称する。
図30においてはXDR-RAM403に、3つの符号化プログラム546が保持されるように示されているが、このXDR-RAM403が保持する符号化プログラム546の数(つまり割り当てパターンの数)は任意であり、2つ以下であってもよいし、4つ以上であってもよい。また、図30においてはXDR-RAM403に3つの復号プログラム547が保持されるように示されているが、このXDR-RAM403が保持する復号プログラム547の数(つまり割り当てパターンの数)は任意であり、2つ以下であってもよいし、4つ以上であってもよい。
なお、図30において、画像データ541乃至復号パラメータ545は、それぞれ、1つずつ示されているが、これは各データの数を示しているわけではない。XDR-RAM403に同時に保持される画像データ541乃至復号パラメータ545の数は任意である。
次に、以上のようなメインCPUコア441により実行される各処理について説明する。
最初に、符号化選択制御部502により実行される符号化選択制御処理の流れの例を図33のフローチャートを参照して説明する。符号化選択制御処理は、符号化処理を行う際に、サブCPUコア442−1乃至サブCPUコア442−8の割り当て方が互いに異なる複数の符号化プログラム546の中から1つを利用符号化プログラムとして選択するために実行される処理である。例えば、ユーザにより符号化処理の実行を指示されると、符号化選択制御部502は、符号化選択制御処理を開始する。
符号化選択制御処理が開始されると、ステップS101において、画像パラメータ取得部511は、XDR-RAM403より画像パラメータ543を取得する。ステップS102において、符号化パラメータ取得部512は、XDR-RAM403より符号化パラメータ544を取得する。ステップS103において、資源情報取得部513は、OS501を介して、使用可能なハードウェア資源に関する情報である資源情報を取得する。ステップS104において、演算精度選択部514は、ステップS101の処理において取得された画像パラメータ543や、ステップS102の処理において取得された符号化パラメータ544等に基づいて、ウェーブレット変換処理の演算精度を選択し、設定する。演算精度選択処理の詳細な流れについては後述する。
演算精度が選択されると、途中計算用バッファ使用量算出部515は、ステップS105において、ウェーブレット変換用関係テーブル531等を用いて、途中計算用バッファ部12として必要な容量を示す途中計算用バッファ使用量を算出する。係数並び替え用バッファ使用量算出部516は、ステップS106において、係数並び替え用関係テーブル532等を用いて、係数並び替え用バッファ部13として必要な容量を示す係数並び替え用バッファ使用量を算出する。
ステップS107において、符号化プログラム選択部517は、画像パラメータ543、資源情報、選択された演算精度、並びに、算出された途中計算用バッファ使用量および係数並び替え用バッファ使用量等の各種情報に基づいて符号化プログラムを選択する。符号化プログラム選択処理の詳細については後述する。
符号化プログラムが選択されると、ステップS108において、プログラム実行部518は、選択された符号化プログラム546の割り当て方法に従って、各工程(プロセス)に対してサブCPUコア442−1乃至サブCPUコア442−8を割り当て、処理を実行させる。
ステップS108の処理が終了すると、符号化選択制御処理は終了される。
次に、図33のステップS104において実行される演算精度選択処理の流れの例を図34のフローチャートを参照して説明する。
演算精度選択処理が開始されると、演算精度選択部514は、ステップS121において、符号化パラメータ544に基づいて、ウェーブレット変換処理において使用されるフィルタの種類が5×3フィルタであるか9×7フィルタであるかを判定する。5×3フィルタであると判定された場合、処理はステップS122に進む。
ステップS122において、演算精度選択部514は、符号化パラメータ544に基づいて、可逆符号化を行うか否かを判定する。可逆符号化を行うと判定された場合、処理はステップS123に進む。ステップS123において、演算精度選択部514は、画像パラメータ543に基づいて、画像データ541のビット深度が13以下であるか否かを判定する。
ビット深度が13以下であると判定された場合、処理はステップS124に進む。ステップS124において、演算精度選択部514は、演算精度として16ビット固定小数点型を選択し、設定する。ステップS124の処理が終了すると、演算精度選択処理が終了され、処理は図33のステップS104に戻り、ステップS105以降の処理が実行される。
また、図34のステップS123において、ビット深度が13より大きいと判定された場合、処理はステップS125に進む。ステップS125において、演算精度選択部514は、演算精度として32ビット固定小数点型を選択し、設定する。ステップS125の処理が終了すると、演算精度選択処理が終了され、処理は図33のステップS104に戻り、ステップS105以降の処理が実行される。
図34のステップS122において、非可逆符号化が行われると判定された場合、処理はステップS126に進む。ステップS126において、演算精度選択部514は、符号化パラメータ544に基づいて、精度優先であるか否かを判定する。精度優先でないと判定された場合、処理はステップS123に戻り、それ以降の処理が繰り返される。
また、ステップS126において、精度優先であると判定された場合、処理はステップS127に進む。さらに、ステップS121において、画像パラメータ543に基づいて、ウェーブレット変換処理に使用されるフィルタの種類が9×7フィルタであると判定された場合、処理はステップS127に進む。
ステップS127において、演算精度選択部514は、演算精度として32ビット浮動小数点型を選択し、設定する。ステップS127の処理が終了すると、演算精度選択処理が終了され、処理は図33のステップS104に戻り、ステップS105以降の処理が実行される。
以上のように演算精度が選択される。
次に、図33のステップS107において実行される符号化プログラム選択処理の流れの例を図35のフローチャートを参照して説明する。
ステップS141において、符号化プログラム選択部517は、途中計算用バッファ使用量算出部515が算出した途中計算用バッファ使用量と、資源情報取得部513により確認されたLS451の使用可能な記憶容量を示す使用可能量に基づいて、LS451の使用可能量が2コンポーネント分の途中計算用バッファ部12として十分な容量があるか否かを判定する。つまり、符号化プログラム選択部517は、LS451の使用可能量が2コンポーネントのそれぞれの途中計算用バッファ使用量の和以上であるか否かを判定する。十分であると判定された場合、処理はステップS142に進む。
ステップS142において、符号化プログラム選択部517は、途中計算用バッファ使用量算出部515が算出した途中計算用バッファ使用量と、係数並び替え用バッファ使用量算出部516が算出した係数並び替え用バッファ使用量と、資源情報取得部513により確認されたLS451の使用可能量に基づいて、LS451の使用可能量が2コンポーネント分の途中計算用バッファ部12および係数並び替え用バッファ部13として十分な容量があるか否かを判定する。つまり、符号化プログラム選択部517は、LS451の使用可能量が、2コンポーネントのそれぞれの途中計算用バッファ使用量および係数並び替え用バッファ使用量の総和以上であるか否かを判定する。十分であると判定された場合、処理はステップS143に進む。
ステップS143において、符号化プログラム選択部517は、符号化パラメータ544に基づいてスループット優先であるか否かを判定する。スループット優先であると判定された場合、処理はステップS144に進む。
ステップS144において、符号化プログラム選択部517は、図11を参照して説明した割り当て方法を適用する符号化プログラムAを選択する。つまりこの場合、図11に示されるように、符号化部10の全ての処理に対して1つのサブCPUコア442が割り当てられる。また、そのLS451には、途中計算用バッファ部12および係数並び替え用バッファ部13の両方が形成される。ステップS144の処理が終了すると、符号化プログラム選択処理は終了され、処理は図33のステップS107に戻り、ステップS108に処理が進む。
図35のステップS142において、LS451の使用可能量が2コンポーネント分の途中計算用バッファ部12および係数並び替え用バッファ部13として十分でないと判定された場合、処理はステップS145に進む。ステップS145において、符号化プログラム選択部517は、符号化パラメータ544に基づいてスループット優先であるか否かを判定する。スループット優先であると判定された場合、処理はステップS146に進む。また、ステップS143において、スループット優先でないと判定された場合、処理はステップS146に進む。
ステップS146において、符号化プログラム選択部517は、図13を参照して説明した割り当て方法を適用する符号化プログラムBを選択する。つまりこの場合、図13に示されるように、符号化部10の全ての処理に対して1つのサブCPUコア442が割り当てられる。また、そのLS451には、途中計算用バッファ部12が形成され、係数並び替え用バッファ部13は共有メモリであるXDR-RAM403に形成される。ステップS146の処理が終了すると、符号化プログラム選択処理は終了され、処理は図33のステップS107に戻り、ステップS108に処理が進む。
図35のステップS145において、スループット優先でないと判定された場合、処理はステップS147に進む。ステップS147において、符号化プログラム選択部517は、資源情報取得部513が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が1個であるか否かを判定する。1個であると判定された場合、処理はステップS146に戻る。また、ステップS147において、使用可能なサブCPUコア442が複数存在すると判定された場合、処理はステップS148に進む。ステップS148において、符号化プログラム選択部517は、資源情報取得部513が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が2個であるか否かを判定する。2個であると判定された場合、処理はステップS149に進む。
ステップS149において、符号化プログラム選択部517は、図14を参照して説明した割り当て方法を適用する符号化プログラムCを選択する。つまりこの場合、図14に示されるように、2つのサブCPUコア442を1組として、画像データYを符号化する符号化部10の全ての処理に対して一方のサブCPUコア442が割り当てられ、画像データCを符号化する符号化部10の全ての処理に対して他方のサブCPUコア442が割り当てられる。また、画像データYに対するウェーブレット変換で利用される途中計算用バッファ部12−1は、画像データYを符号化するサブCPUコア442のLS451に形成され、画像データCに対するウェーブレット変換で利用される途中計算用バッファ部12−2は、画像データCを符号化するサブCPUコア442のLS451に形成される。また、画像データYより生成された係数データを保持する係数並び替え用バッファ部13−1と、画像データCより生成された係数データを保持する係数並び替え用バッファ部13−2は、両方とも共有メモリであるXDR-RAM403に形成される。ステップS149の処理が終了すると、符号化プログラム選択処理は終了され、処理は図33のステップS107に戻り、ステップS108に処理が進む。
図35のステップS141において、LS451の使用可能量が2コンポーネント分の途中計算用バッファ部12として十分でないと判定された場合、処理はステップS150に進む。ステップS150において、符号化プログラム選択部517は、途中計算用バッファ使用量算出部515が算出した途中計算用バッファ使用量と、資源情報取得部513により確認されたLS451の使用可能量に基づいて、LS451の使用可能量が1コンポーネント分の途中計算用バッファ部12として十分な容量があるか否かを判定する。つまり、符号化プログラム選択部517は、LS451の使用可能量が、各コンポーネントの途中計算用バッファ使用量以上であるか否かを判定する。十分であると判定された場合、処理はステップS151に進む。
ステップS151において、符号化プログラム選択部517は、資源情報取得部513が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が1個であるか否かを判定する。使用可能なサブCPUコア442が複数存在すると判定された場合、処理はステップS152に進む。ステップS152において、符号化プログラム選択部517は、資源情報取得部513が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が2個であるか否かを判定する。2個であると判定された場合、処理はステップS149に戻る。
ステップS152において、現在使用可能なサブCPUコア442が3個以上あると判定された場合、処理はステップS153に進む。ステップS153において、符号化プログラム選択部517は、符号化パラメータ544に基づいてスループット優先であるか否かを判定する。スループット優先であると判定された場合、処理はステップS149に戻る。
また、ステップS153において、スループット優先でないと判定された場合、処理はステップS154に進む。また、ステップS148において、現在使用可能なサブCPUコア442が3個以上あると判定された場合、処理はステップS154に進む。
ステップS154において、符号化プログラム選択部517は、図16を参照して説明した割り当て方法を適用する符号化プログラムDを選択する。つまりこの場合、図16に示されるように、4つのサブCPUコア442を1組として、画像データYを符号化する符号化部10のウェーブレット変換部11−1の処理、画像データYを符号化する符号化部10の係数並び替え部14−1およびエントロピ符号化部15−1の処理、画像データCを符号化する符号化部10のウェーブレット変換部11−2の処理、画像データCを符号化する符号化部10の係数並び替え部14−2およびエントロピ符号化部15−2の各処理に対して、互いに異なるサブCPUコア442が割り当てられる。
また、画像データYを符号化する符号化部10の途中計算用バッファ部12−1は、ウェーブレット変換部11−1の処理が割り当てられたサブCPUコア442のLS451に形成され、画像データCを符号化する符号化部10の途中計算用バッファ部12−2は、ウェーブレット変換部11−2の処理が割り当てられたサブCPUコア442のLS451に形成される。
さらに、画像データYを符号化する符号化部10の係数並び替え用バッファ部13−1と、画像データCを符号化する符号化部10の係数並び替え用バッファ部13−2は、両方とも共有メモリであるXDR-RAM403に形成される。ステップS154の処理が終了すると、符号化方式選択処理は終了され、処理は図33のステップS107に戻り、ステップS108に処理が進む。
図35のステップS150において、LS451の使用可能量が1コンポーネント分の途中計算用バッファ部12として十分でないと判定された場合、処理はステップS155に進む。また、ステップS151において、現在使用可能なサブCPUコアが1個であると判定された場合、処理はステップS155に進む。この場合、予め用意された4つの符号化プログラムのいずれも選択することができないので(実装不可能であるので)、符号化プログラム選択部517は、ステップS155において、例えばユーザに通知する等のエラー処理を行う。ステップS155の処理が終了すると、符号化プログラム選択処理は終了され、処理は図33のステップS107に戻り、ステップS108に処理が進む。
以上のように、符号化選択制御部502は、画像パラメータ543、資源情報、または符号化パラメータ544等に基づいて、実際の条件下において、符号化部10がより効率的に動作するように、適切にハードウェア資源の割り当てを行うことができる。
なお、この割り当ては、どのような単位で行うようにしてもよく、例えば、プレシンクト毎に行うようにしてもよいし、ピクチャ毎に行うようにしてもよい。また、以上においては4つの割り当て方法を予め用意し、符号化プログラム選択部517がその中から選択するように説明したが、用意するハードウェア資源の割り当て方法は、いくつであってもよい。つまり、符号化プログラム546の数は任意である。さらに、ハードウェア資源の割り当て方法は、任意であり、上述した4つの割り当て方法以外の方法であってもよい。
また、8つのサブCPUコア442−1乃至サブCPUコア442−8の内、任意のサブCPUコア442を用いて、上述した符号化プログラムA乃至符号化プログラムDを併用する(並列的に動作させる)ようにしてもよい。つまり、例えば、符号化選択制御部502は、プレシンクト毎やピクチャ毎に互いに異なる符号化方式を採用し、ハードウェア資源の割り当て方を変更することもできる。このようにすることにより、符号化選択制御部502は、ハードウェア資源をより有効に利用するように符号化部10の各処理にハードウェア資源を割り当て、符号化部10がより効率的に動作するようにすることができる。
次に、図36のフローチャートを参照して、復号選択制御部503により実行される復号選択制御処理の流れの例を説明する。復号選択制御処理は、復号処理を行う際に、サブCPUコア442−1乃至サブCPUコア442−8の割り当て方が互いに異なる複数の復号プログラム547の中から1つを利用復号プログラムとして選択するために実行される処理である。例えば、ユーザにより復号処理の実行を指示されると、復号選択制御部503は、復号選択制御処理を開始する。
復号選択制御処理が開始されると、ステップS201において、画像パラメータ取得部521は、XDR-RAM403に保持されている処理対象の符号化データ542についての画像パラメータ543を取得する。ステップS202において、復号パラメータ取得部522は、XDR-RAM403に保持されている復号パラメータ545を取得する。ステップS203において、資源情報取得部523は、OS501を介して、使用可能なハードウェア資源に関する情報である資源情報を取得する。
係数バッファ使用量算出部524は、ステップS204において、ウェーブレット変換用関係テーブル531等を用いて、係数バッファ部22として必要な容量を示す係数バッファ使用量を算出する。
ステップS205において、復号プログラム選択部525は、画像パラメータ543、復号パラメータ545、資源情報、並びに、算出された係数バッファ使用量等の各種情報に基づいて利用復号プログラムを選択する。復号プログラム選択処理の詳細については後述する。
復号プログラムが選択されると、ステップS206において、プログラム実行部526は、利用復号プログラムとして選択された復号プログラム547の割り当て方法に従って、各工程(プロセス)に対してサブCPUコア442−1乃至サブCPUコア442−8を割り当て、処理を実行させる。
ステップS206の処理が終了すると、符号化選択制御処理は終了される。
次に、図36のステップS205において実行される復号プログラム選択処理の流れの例を図37のフローチャートを参照して説明する。
ステップS221において、復号プログラム選択部525は、係数バッファ使用量算出部524が算出した係数バッファ使用量と、資源情報取得部523により確認されたLS451の使用可能量に基づいて、LS451の使用可能量が係数バッファ部22として十分な容量があるか否かを判定する。つまり、復号プログラム選択部525は、LS451の使用可能量が、各コンポーネントの係数バッファ使用量以上であるか否かを判定する。十分であると判定された場合、処理はステップS222に進む。
ステップS222において、復号プログラム選択部525は、復号パラメータ545に基づいて、復号処理がスループット優先であるか否かを判定する。スループット優先であると判定された場合、処理はステップS223に進む。
ステップS223において、復号プログラム選択部525は、係数バッファ使用量算出部524が算出した係数バッファ使用量と、資源情報取得部523により確認されたLS451の使用可能量に基づいて、LS451の使用可能量が2コンポーネント分の係数バッファ部22として十分な容量があるか否かを判定する。つまり、復号プログラム選択部525は、LS451の使用可能量が、2コンポーネントのそれぞれの係数バッファ使用量の和以上か否かを判定する。十分であると判定された場合、処理はステップS224に進む。
ステップS224において、復号プログラム選択部525は、図18を参照して説明した割り当て方法を適用する復号プログラムAを選択する。つまりこの場合、図18に示されるように、復号部20の全ての処理に対して1つのサブCPUコア442が割り当てられる。また、そのLS451には、係数バッファ部22が形成される。ステップS224の処理が終了すると、復号プログラム選択処理は終了され、処理は図36のステップS205に戻り、ステップS206に処理が進む。
図37のステップS222において、復号処理がスループット優先でないと判定された場合、処理はステップS225に進む。ステップS225において、復号プログラム選択部525は、資源情報取得部523が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が1個であるか否かを判定する。1個であると判定された場合、処理はステップS223に戻り、それ以降の処理が繰り返される。また、ステップS225において、使用可能なサブCPUコア442が複数存在すると判定された場合、処理はステップS226に進む。
ステップS226において、復号プログラム選択部525は、資源情報取得部523が取得した資源情報に基づいて、現在使用可能なサブCPUコア442が2個であるか否かを判定する。2個であると判定された場合、処理はステップS227に進む。また、ステップS223において、LS451の使用可能量が2コンポーネント分の係数バッファ部22として十分でないと判定された場合、処理はステップS227に進む。
ステップS227において、復号プログラム選択部525は、図20を参照して説明した割り当て方法を適用する復号プログラムBを選択する。つまりこの場合、図20に示されるように、2つのサブCPUコア442を1組として、符号化データYを復号する復号部20の全ての処理に対して一方のサブCPUコア442が割り当てられ、符号化データCを復号する復号部20の全ての処理に対して他方のサブCPUコア442に割り当てられる。また、符号化データYを復号する復号部20の係数バッファ部22−1は、符号化データYを復号する復号部20が割り当てられたサブCPUコア442のLS451に形成され、符号化データCを復号する復号部20の係数バッファ部22−2は、符号化データCを復号する復号部20が割り当てられたサブCPUコア442のLS451に形成される。ステップS227の処理が終了すると、復号プログラム選択処理は終了され、処理は図36のステップS204に戻り、ステップS205に処理が進む。
図37のステップS226において、現在使用可能なサブCPUコア442が3個以上であると判定された場合、処理はステップS228に進む。
ステップS228において、復号プログラム選択部525は、図22を参照して説明した割り当て方法を適用する復号プログラムCを選択する。つまりこの場合、図22に示されるように、4つのサブCPUコア442を1組として、符号化データYを復号する復号部20のエントロピ復号部21−1の処理、符号化データYを復号する復号部20のウェーブレット逆変換部23−1の処理、符号化データCを復号する復号部20のエントロピ復号部21−2の処理、および、符号化データCを復号する復号部20のウェーブレット逆変換部23−2の各処理に対して、互いに異なるサブCPUコア442が割り当てられる。
また、符号化データYを復号する復号部20の係数バッファ部22−1は、ウェーブレット逆変換部23−1の処理が割り当てられたサブCPUコア442のLS451に形成され、符号化データCを復号する復号部20の係数バッファ部22−2は、ウェーブレット逆変換部23−2の処理が割り当てられたサブCPUコア442のLS451に形成される。
ステップS228の処理が終了すると、復号プログラム選択処理は終了され、処理は図36のステップS204に戻り、ステップS205に処理が進む。
図37のステップS221において、LS451の使用可能量が係数バッファ部22として十分でないと判定された場合、処理はステップS229に進む。この場合、予め用意された3つの復号プログラムのいずれも選択することができないので(実装不可能であるので)、復号プログラム選択部525は、ステップS229において、例えばユーザに通知する等のエラー処理を行う。ステップS229の処理が終了すると、復号プログラム選択処理は終了され、処理は図36のステップS204に戻り、ステップS205に処理が進む。
以上のように、復号選択制御部503は、符号化データ542の画像パラメータ543、資源情報、または復号パラメータ545等に基づいて、実際の条件下において、復号部20がより効率的に動作するように、適切にハードウェア資源の割り当てを行うことができる。
なお、この割り当ては、どのような単位で行うようにしてもよく、例えば、プレシンクト毎に行うようにしてもよいし、ピクチャ毎に行うようにしてもよい。また、以上においては4つの割り当て方法を予め用意し、復号プログラム選択部525がその中から選択するように説明したが、用意するハードウェア資源の割り当て方法は、いくつであってもよい。つまり、復号プログラム547の数は任意である。さらに、ハードウェア資源の割り当て方法は、任意であり、上述した4つの割り当て方法以外の方法であってもよい。
また、8つのサブCPUコア442−1乃至サブCPUコア442−8の内、任意のサブCPUコア442を用いて、上述した復号プログラムA乃至復号プログラムCを併用する(並列的に動作させる)ようにしてもよい。つまり、例えば、復号選択制御部503は、プレシンクト毎やピクチャ毎に互いに異なる復号方式を採用し、ハードウェア資源の割り当て方を変更することもできる。このようにすることにより、復号選択制御部503は、ハードウェア資源をより有効に利用するように復号部20の各処理にハードウェア資源を割り当て、復号部20がより効率的に動作するようにすることができる。
次に、割り当ての具体的な例について説明する。
第1の例として、符号化される画像データ541は、その画像サイズが1920画素×1080画素であり、そのデータ構成が輝度成分Yと色差成分CよりなるコンポーネントY/Cであり、そのビット深度が12ビットであるものとし、ウェーブレット変換に用いられるフィルタは、5×3フィルタであり、ウェーブレット変換の分解レベルは4であり、精度優先の設定はなされていないものとする。また、現在使用可能なサブCPUコア442の数が4個以上であるとし、各サブCPUコア442のLS451の容量が256[kByte]とする。
さらに符号化パラメータ544において符号化条件として、非可逆符号化とレイテンシ優先の設定がされている。また、復号パラメータ545において復号条件としてレイテンシ優先の設定がされている。
このような場合において、演算精度選択部514は、図34に示されるフローチャートのように演算精度選択処理を行い、5×3フィルタ、可逆符号化、精度優先設定無し、および、ビット深度13以下の条件に基づいて、16ビット固定小数点型を選択する。また、途中計算用バッファ使用量算出部515は、ウェーブレット変換用関係テーブル531を用いて、5×3フィルタと分解数4の条件から、関係指数に「7.5」を設定し、さらに、入力画像の横サイズ(1920画素)と、演算精度(16ビット)と、その関係指数(7.5)を乗算することにより、途中計算用バッファ使用量を算出する。
また、係数並び替え用バッファ使用量算出部516は、係数並び替え用関係テーブル532を用いて、5×3フィルタと分解数4の条件から、関係指数に「42.25」を設定し、さらに、入力画像の横サイズ(1920画素)と、単位サイズと、その関係指数(42.25)を乗算することにより、係数並び替え用バッファ使用量を算出する。
以上の算出結果および資源情報等に基づいて、符号化プログラム選択部517は、図35に示されるフローチャートのように符号化プログラム選択処理を行う。LS451の使用可能量が、2コンポーネント分の途中計算用バッファ部12として十分であるものの、2コンポーネント分の途中計算用バッファ部12および係数並び替え用バッファ部13としては不十分であり、優先項目はレイテンシであり、使用可能なサブCPUコア442の数が4個であるので、符号化プログラム選択部517は、図16に示されるように割り当てを行う符号化プログラムDを選択する。
このような割り当てにより、符号化部10は、符号化処理を図17に示されるように進めることができる。つまり、このような割り当てにより、符号化部10は、低遅延で符号化処理を行うことができる。
なお、この条件において、復号部20を割り当てる場合、復号プログラム選択部525は、図37に示されるフローチャートのように復号プログラム選択処理を行う。LS451の使用可能量が、係数バッファ部22として十分であり、優先項目がレイテンシであり、使用可能なサブCPUコア442の数が4個であるので、復号プログラム選択部525は、図22に示されるように割り当てを行う復号プログラムCを選択する。
このような割り当てにより、復号部20は、復号処理を図23に示されるように進めることができる。つまり、このような割り当てにより、復号部20は、低遅延で復号処理を行うことができる。
例えば、テレビジョン会議システムのように、リアルタイムに画像の授受を行うことが要求されるシステムにおいては、低遅延で符号化処理や復号処理を行うことが求められる。このような場合でも、符号化選択制御部502および復号選択制御部503は、符号化部10および復号部20が低遅延に処理を行うことができるように、ハードウェア資源を適切に割り当てることができる。
第2の例として、符号化される画像データ541は、その画像サイズが1280画素×720画素であり、そのデータ構成が輝度成分Yと色差成分CよりなるコンポーネントY/Cであり、そのビット深度が12ビットであるものとし、ウェーブレット変換に用いられるフィルタが9×7フィルタであり、ウェーブレット変換の分解レベルが4であるものとする。また、現在使用可能なサブCPUコア442の数が4個以上であるとし、各サブCPUコア442のLS451の容量が256[kByte]とする。
さらに符号化パラメータ544において符号化条件としてスループット優先の設定がされている。また、復号パラメータ545において復号条件としてスループット優先の設定がされている。
このような場合において、演算精度選択部514は、図34に示されるフローチャートのように演算精度選択処理を行い、9×7フィルタの条件に基づいて、32ビット浮動小数点型を選択する。また、途中計算用バッファ使用量算出部515は、ウェーブレット変換用関係テーブル531を用いて、9×7フィルタと分解数4の条件から、関係指数に「11.25」を設定し、さらに、入力画像の横サイズ(1280画素)と、演算精度(32ビット)と、その関係指数(11.25)を乗算することにより、途中計算用バッファ使用量を算出する。
また、係数並び替え用バッファ使用量算出部516は、係数並び替え用関係テーブル532を用いて、9×7フィルタと分解数4の条件から、関係指数に「94.75」を設定し、さらに、入力画像の横サイズ(1280画素)と、単位サイズと、その関係指数(94.75)を乗算することにより、係数並び替え用バッファ使用量を算出する。
以上の算出結果および資源情報等に基づいて、符号化プログラム選択部517は、図35に示されるフローチャートのように符号化プログラム選択処理を行う。LS451の使用可能量が、2コンポーネント分の途中計算用バッファ部12として十分であるものの、2コンポーネント分の途中計算用バッファ部12および係数並び替え用バッファ部13としては不十分であり、優先項目がスループットであることから、符号化プログラム選択部517は、図13に示されるように割り当てを行う符号化プログラムBを選択する。
このような割り当てにより、符号化部10は、符号化処理を図12に示されるように進めることができる。つまり、このような割り当てにより、符号化部10は、高スループットで符号化処理を行うことができる。
なお、この条件において、復号部20を割り当てる場合、復号プログラム選択部525は、図37に示されるフローチャートのように復号プログラム選択処理を行う。LS451の使用可能量が、係数バッファ部22として十分であり、優先項目がスループットであり、さらに、LS451の使用可能量が、2コンポーネント分の係数バッファ部22としても十分であるので、復号プログラム選択部525は、図18に示されるように割り当てを行う復号プログラムAを選択する。
このような割り当てにより、復号部20は、復号処理を図19に示されるように進めることができる。つまり、このような割り当てにより、復号部20は、高スループットで復号処理を行うことができる。
例えば、フレームレートが高い画像データを処理するシステムのように、符号化処理や復号処理をより高速に行うこと(高スループット)が要求される場合がある。このような場合でも、符号化選択制御部502および復号選択制御部503は、符号化部10および復号部20が高スループットで処理を行うことができるように、ハードウェア資源を適切に割り当てることができる。
第3の例として、符号化される画像データ541は、その画像サイズが4096画素×2160画素であり、そのデータ構成が輝度成分Yと色差成分CよりなるコンポーネントY/Cであり、そのビット深度が12ビットであるものとし、ウェーブレット変換に用いられるフィルタが9×7フィルタであり、ウェーブレット変換の分解レベルが4であるものとする。また、現在使用可能なサブCPUコア442の数が4個以上であるとし、各サブCPUコア442のLS451の容量が256[kByte]とする。
さらに符号化パラメータ544において符号化条件としてスループット優先の設定がされている。また、復号パラメータ545において復号条件としてスループット優先の設定がされている。
このような場合において、演算精度選択部514は、図34に示されるフローチャートのように演算精度選択処理を行い、9×7フィルタの条件に基づいて、32ビット浮動小数点型を選択する。また、途中計算用バッファ使用量算出部515は、ウェーブレット変換用関係テーブル531を用いて、9×7フィルタと分解数4の条件から、関係指数に「11.25」を設定し、さらに、入力画像の横サイズ(4096画素)と、演算精度(32ビット)と、その関係指数(11.25)を乗算することにより、途中計算用バッファ使用量を算出する。
また、係数並び替え用バッファ使用量算出部516は、係数並び替え用関係テーブル532を用いて、9×7フィルタと分解数4の条件から、関係指数に「94.75」を設定し、さらに、入力画像の横サイズ(4096画素)と、単位サイズと、その関係指数(94.75)を乗算することにより、係数並び替え用バッファ使用量を算出する。
以上の算出結果および資源情報等に基づいて、符号化プログラム選択部517は、図35に示されるフローチャートのように符号化プログラム選択処理を行う。LS451の使用可能量が、2コンポーネント分の途中計算用バッファ部12として不十分であるが、1コンポーネント分の途中計算用バッファ部12としては十分であり、使用可能なサブCPUコア442の数が4個で、優先項目がスループットであることから、符号化プログラム選択部517は、図14に示されるように割り当てを行う符号化プログラムCを選択する。
このような割り当てにより、符号化部10は、符号化処理を図15に示されるように進めることができる。つまり、このような割り当てにより、符号化部10は、符号化プログラムDよりも高スループットで、かつ、符号化プログラムBよりも低遅延に符号化処理を行うことができる。
なお、この条件において、復号部20を割り当てる場合、復号プログラム選択部525は、図37に示されるフローチャートのように復号プログラム選択処理を行う。LS451の使用可能量が、係数バッファ部22として十分であり、優先項目がスループットであり、さらに、LS451の使用可能量が、2コンポーネント分の係数バッファ部22として不十分であり、使用可能なサブCPUコア442の数が4個であるので、復号プログラム選択部525は、図20に示されるように割り当てを行う復号プログラムBを選択する。
このような割り当てにより、復号部20は、復号処理を図21に示されるように進めることができる。つまり、このような割り当てにより、復号部20は、復号プログラムCよりも高スループットで、かつ、復号プログラムAよりも低遅延に復号処理を行うことができる。
例えば、高精細映像の画像データを処理するシステムのように、符号化処理や復号処理をより高速に行うこと(高スループット)が要求されるものの、画像データのデータ量が多い場合がある。このような場合、スループット向上のために、1つのサブCPUコア442で符号化処理および復号処理を行うようにすると、LS451の容量が不足し、不要な遅延が増大する恐れがある。そのため、符号化選択制御部502および復号選択制御部503は、符号化部10および復号部20が、バッファ溢れ等の発生により遅延時間が不要に増大しないように、かつ、極力スループットを向上させるように、ハードウェア資源を適切に割り当てることができる。
以上のように、ハードウェア資源の割り当てパターンを、入力画像信号の種類、符号化処理や復号処理のパラメータ(要求されるレイテンシやスループット等の特性)、および利用可能なハードウェア資源等に応じて適切に選択することにより、より多様な条件下において、より効率よく符号化処理や復号処理を実行させることができる。このとき、効率よく符号化処理や復号処理を行うことができるようにハードウェアの割り当てパターンが設定された符号化プログラムや復号プログラムを予め用意する(割り当てパターンを制限する)ことにより、符号化処理や復号処理の効率の低下を抑制することができる。
以上においては、ハードウェアの割り当てを行う符号化プログラム546がプレシンクト単位でウェーブレット変換を行うように説明したが、符号化プログラム546は、例えば、ピクチャ全体を1単位としてウェーブレット変換を行うようにしてもよいし、ピクチャ全体を縦方向および横方向に所定数に分割して得られる部分領域であるタイルを単位としてウェーブレット変換を行うようにしてもよい。その場合の符号化部10の構成は、例えば図26に構成例が示される、係数並び替えを復号部20において行う場合と同様になる。つまり、この場合のハードウェアの割り当てパターンは、係数並び替えを復号部20において行う場合と同様になる。
復号プログラム547は、符号化データ542の符号化方式に応じた復号方式により復号を行う。つまり、例えば、符号化データ542がピクチャ全体を1単位としてウェーブレット変換されたものであれば、その符号化データ542を復号する復号プログラム547も、ピクチャ全体を1単位としてウェーブレット逆変換を行うようになされている。また、例えば、符号化データ542がピクチャ全体を縦方向および横方向に所定数に分割して得られる部分領域であるタイルを単位としてウェーブレット変換されたものであれば、その符号化データ542を復号する復号プログラム547も、そのタイルを1単位としてウェーブレット逆変換を行うようになされている。
また、符号化プログラム546の符号化方式および復号プログラム547の復号方式は、上述した方式以外にも、例えば、MPEG(Moving Picture Experts Group)2規格やH.264/AVC(Advanced Video Coding)規格に準拠した方式であってもよい。
図38は、ソフトウェアプログラムにより構成され、画像データを符号化して符号化データを生成する、MPEG2規格に準拠したソフトウェアエンコーダが所定の情報処理装置のCPUにより実行されることにより実現される機能(プロセス)を模式的に示す図である。図38に示されるように、このソフトウェアエンコーダは、画像データをMPEG2方式で符号化する符号化部601と、符号化部601より出力される符号化データを一時的に保持するバッファ部602により構成される。
符号化部601は、画像符号化タイプ指定部611、画像符号化順序並び替え部612、スキャンコンバータ613、予測モード決定部614、動きベクトル検出部615、量子化制御部616、演算部617、DCT(Discrete Cosine Transform)部618、量子化部619、可変長符号化部620、逆量子化部621、IDCT(Inverse Discrete Cosine Transform)部622、加算部623、フレームメモリ624、および動き補償部625を有する。
符号化部601に入力された映像信号は画像符号化タイプ指定部611に入力される。画像符号化タイプ指定部611は入力される画像データの各フレームをIピクチャ、Pピクチャ又はBピクチャのうちのどの画像タイプのピクチャとして処理するかを指定して画像符号化順序並び替え部612に送出する。この符号化部601は、例えば15個のフレームを1GOP(Group Of Picture)として処理の1単位とする。
画像符号化順序並び替え部612は、指定された画像符号化タイプに従って各フレームを符号化する順番に並び替えてスキャンコンバータ613に送出すると共に、その画像データの画像符号化タイプの情報を予測モード決定部614、動きベクトル検出部615、および量子化制御部616に送出する。また画像符号化順序並び替え部612は現在符号化されているフレームの動きベクトルを検出するために現在画像と、その現在画像より時間的に過去にある画像(以下、これを過去参照画像と呼ぶ)及び又は現在画像より時間的に未来にある画像(以下、これを未来参照画像と呼ぶ)とを動きベクトル検出部615に送出する。
スキャンコンバータ613は、画像データをフレーム毎にブロックフォーマットの信号に変換し、この1フレームの信号を、16ラインを1単位として、N個のスライスに区分すると共に、各スライスを16×16の画素に対応する輝度信号によって構成されるM個のマクロブロックに分割し、各マクロブロックを量子化制御部616および演算部617に送出する。
動きベクトル検出部615は画像データの各フレームに同期した画像符号化タイプに従って各フレームの画像データをIピクチャ、Pピクチャ又はBピクチャとして処理する。すなわちIピクチャとして処理されるフレームの画像データは、動きベクトル検出部615に内蔵される、過去参照画像を格納する過去参照画像メモリ(図示せず)に格納され、Bピクチャとして処理されるフレームの画像データは、動きベクトル検出部615に内蔵される、現在画像を格納する現在画像メモリ(図示せず)に格納され、Pピクチャとして処理されるフレームの画像データは、動きベクトル検出部615に内蔵される、未来参照画像を格納する未来参照画像メモリ(図示せず)に格納される。
ここで次のタイミングにおいて、Bピクチャ又はPピクチャとして処理すべきフレームが動きベクトル検出部615に入力されたとき、これまでに未来参照画像メモリに格納されていた最初のPピクチャの画像データは過去参照画像メモリに格納される。また次のBピクチャの画像データは現在画像メモリに格納され、次のPピクチャの画像データは未来参照画像メモリに格納される。以降このような動作が順次繰り返される。
動きベクトル検出部615は順方向予測における動きベクトル、および、そのときの動きベクトル推定残差を予測モード決定部614に送出する。ここで動きベクトル検出部615は、Bピクチャの場合には、逆方向予測における動きベクトルとそのときの動きベクトル推定残差とを送出する。予測モード決定部614はイントラモード、順方向予測モード、逆方向予測モード又は双方向予測モードのうちどの予測モードを選択するかを決定する。
ここでイントラモードは、符号化対象となるフレームの画像データをそのまま伝送データとして伝送する処理であり、順方向予測モードは、過去参照画像との予測残差と順方向動きベクトルとを伝送する処理である。また逆方向予測モードは、未来参照画像との予測残差と逆方向動きベクトルとを伝送する処理であり、双方向予測モードは、過去参照画像と未来参照画像の2つの予測画像の平均値との予測残差と順方向及び逆方向の2つの動きベクトルとを伝送する処理である。Bピクチャの場合には、これら4種類の予測モードをマクロブロック単位で切り換える。
予測モード決定部614は画像符号化順序並び替え部612から送出される画像符号化タイプに基づいて、Iピクチャの場合にはイントラモードを選択し、Pピクチャの場合にはイントラモード又は順方向予測モードのいずれかの予測モードを選択し、Bピクチャの場合には、イントラモード、順方向予測モード、逆方向予測モード又は双方向予測モードのうちいずれかの予測モードを選択し、選択した予測モードの情報を演算部617に送出する。
演算部617はスキャンコンバータ613より読み出されたマクロブロックに対して、予測モードに基づいてイントラ、順方向予測、逆方向予測又は双方向予測の演算を行う。演算部617は、Iピクチャとして処理すべき画像データ(マクロブロック)が入力された場合、その画像データをイントラ符号化してDCT部618に送出する。DCT部618はイントラ符号化された画像データをDCT係数に変換して量子化部619に送出する。
量子化部619は各DCT係数を量子化制御部616から指定された量子化ステップで量子化して可変長符号化部620および逆量子化部621に送出する。可変長符号化部620は量子化された画像データ、予測モード決定部614から送出される予測モードおよび動きベクトル検出部615から送出される動きベクトルを例えばハフマン符号などの可変長符号に変換し、符号化データとしてバッファ部602に出力する。
逆量子化部621は量子化された画像データを量子化時における量子化ステップに応じて逆量子化してIDCT(逆DCT)部622に送出する。IDCT部622は逆量子化部621からの出力を逆DCT処理する。IDCT部622からの出力は加算部623を介してフレームメモリ624内の、過去参照画像を格納する過去参照画像記憶部(図示せず)に格納される。
次に演算部617にスキャンコンバータ613からPピクチャとして処理すべき画像データが入力され、予測モード決定部614から送出される予測モードがイントラモードの場合、画像データは上述のIピクチャの場合と同様にイントラ符号化されてDCT部618、量子化部619、および可変長符号化部620を介してバッファ部602に出力され、逆量子化部621、IDCT部622、および加算部623を介して、フレームメモリ624内の、未来参照画像を格納する未来参照画像記憶部(図示せず)に格納される。
予測モードが順方向予測モードの場合、フレームメモリ624の過去参照画像記憶部に格納されている画像データ(この場合Iピクチャの画像データ)が読み出されて動き補償部625に送出される。動き補償部625はこの画像データを動きベクトル検出部615から送出される順方向動きベクトルに対応して動き補償する。
すなわち動き補償部625は、順方向予測モードの場合、フレームメモリ624の過去参照画像記憶部の読出しアドレスを、動きベクトル検出部615が現在出力しているマクロブロックの位置に対応する位置から順方向動きベクトルに対応する分だけずらしてデータを読み出して予測参照画像を生成し、演算部617及び加算部623に送出する。
演算部617はスキャンコンバータ613から送出される参照画像のマクロブロックのデータから、動き補償部625から送出されたマクロブロックに対応する予測参照画像の画像データを減算して予測残差としての差分データを得、この差分データをDCT部618に送出する。この差分データはDCT部618、量子化部619、および可変長符号化部620を介してバッファ部602に出力される。またこの差分データは逆量子化部621、およびIDCT部622によって局所的に復号されて加算部623に送出される。
加算部623はIDCT部622から送出される差分データに、動き補償部625から送出される予測参照画像の画像データを加算する。これにより局所的に復号したPピクチャの画像データが得られる。このPピクチャの画像データはフレームメモリ624内の、未来参照画像を格納する未来参照画像記憶部に格納される。
次に演算部617にスキャンコンバータ613からBピクチャとして処理すべきフレームの画像データが入力され、予測モード決定部614から送出される予測モードがイントラモード又は順方向予測モードの場合、そのフレームの画像データは上述のPピクチャの場合と同様に処理される。これに対して予測モードが逆方向予測モードに設定された場合、フレームメモリ624の未来参照画像記憶部に格納されている画像データ(この場合Pピクチャの画像データ)が読み出されて動き補償部625に送出される。動き補償部625はこの画像データを動きベクトル検出部615から送出される逆方向動きベクトルに対応して動き補償する。
すなわち動き補償部625は、逆方向予測モードの場合、フレームメモリ624の未来参照画像記憶部の読出しアドレスを、動きベクトル検出部615が現在出力しているマクロブロックの位置に対応する位置から動きベクトルに対応する分だけずらしてデータを読み出して予測参照画像を生成し、演算部617および加算部623に送出する。
演算部617はスキャンコンバータ613から送出される参照画像のマクロブロックのデータから、動き補償部625から送出されたマクロブロックに対応する予測参照画像の画像データを減算して予測残差としての差分データを得、この差分データをDCT部618に送出する。この差分データはDCT部618、量子化部619、および可変長符号化部620を介して、バッファ部602に送出される。またこの差分データは逆量子化部621、およびIDCT部622によって局所的に復号されて加算部623に送出される。加算部623はIDCT部622から送出される差分データに、動き補償部625から送出される予測参照画像の画像データを加算する。これにより局所的に復号したBピクチャの画像データが得られる。
双方向予測モードの場合には、フレームメモリ624の過去参照画像記憶部に格納されている画像データ(この場合Iピクチャの画像データ)と、未来参照画像記憶部に格納されている画像データ(この場合Pピクチャの画像データ)とが読み出されて動き補償部625に送出される。動き補償部625はこの画像データを動きベクトル検出部615から送出される順方向動きベクトル及び逆方向動きベクトルに対応して動き補償する。
すなわち、動き補償部625は、双方向予測モードの場合、フレームメモリ624の過去参照画像記憶部と未来参照画像記憶部の読出しアドレスを、動きベクトル検出部615が現在出力しているマクロブロックの位置に対応する位置から順方向動きベクトル及び逆方向動きベクトルに対応する分だけずらしてデータを読み出して予測参照画像を生成し、演算部617、および加算部623に送出する。
演算部617はスキャンコンバータ613から送出される参照画像のマクロブロックのデータから、動き補償部625から送出されたマクロブロックに対応する予測参照画像の画像データの平均値を減算して予測残差としての差分データを得、この差分データをDCT部618に送出する。この差分データはDCT部618、量子化部619、および可変長符号化部620を介して、バッファ部602に出力される。またこの差分データは逆量子化部621およびIDCT部622によって局所的に復号されて加算部623に送出される。
加算部623はIDCT部622から送出される差分データに、動き補償部625から送出される予測参照画像の画像データを加算する。これにより局所的に復号したBピクチャの画像データが得られる。ここでBピクチャは他の画像の予測画像として使用されないので、フレームメモリ624には格納されない。
量子化制御部616は、所定の量子化制御アルゴリズムに従って、量子化部619において各マクロブロックを量子化する際に用いる量子化ステップを算出し、その量子化ステップを量子化部619に供給する。
量子化制御部616には、バッファ部602に蓄積されている符号化データのデータ量(符号量)の情報が供給される。量子化制御部616は、その符号量に基づいて、量子化ステップや、各フレームの割り当て符号量を算出し、量子化ステップの情報を量子化部619に供給したり、割り当て符号量の情報を可変長符号化部620に供給したりする。
このようなソフトウェアエンコーダの各工程(プロセス)に対するハードウェアの割り当て方法の例について、図28に示される情報処理システム300に割り当てる場合を例に説明する。ここで工程(プロセス)とは、図38に示される各処理部が実行する処理のことを示す。例えば、符号化部601全体に対してサブCPUコア442−1を割り当て、フレームメモリ624等の、符号化部601内部の記憶部をLS451−1により実現させ、バッファ部602をXDR-RAM403により実現させるようにしてもよい。つまり、この場合、符号化部601の全ての処理は1つのサブCPUコア442により実行され、符号化処理中においてデータは、そのサブCPUコア442のローカルメモリであるLS451に保持され、符号化結果は共有メモリであるXDR-RAM403に保持される。この場合、ソフトウェアエンコーダに対して、サブCPUコア442−1乃至サブCPUコア442−8のそれぞれが、例えば1GOP等所定の処理単位毎に割り当てられるようにすることもできる。その場合、各サブCPUコア442において行われる符号化処理は互いに並行して実行されるようにしてもよい。
図38に示されるようなMPEG2方式のエンコーダにおいては、例えば動き補償部625や動きベクトル検出部615の処理の負荷が、他の処理部において実行される処理の負荷に比べて大きい場合が多い。そこで、図39に示されるように、符号化部601の処理に(全プロセスに対して)複数のサブCPUコア442を割り当てるようにしてもよい。
図39の例においては、符号化部601内の処理部のうち、画像符号化タイプ指定部611、画像符号化順序並び替え部612、スキャンコンバータ613、予測モード決定部614、量子化制御部616、演算部617、DCT部618、量子化部619、可変長符号化部620、逆量子化部621、IDCT部622、および加算部623に対してサブCPUコア442−1が割り当てられ、動きベクトル検出部615および動き補償部625に対してサブCPUコア442−2が割り当てられている。また、フレームメモリ624は、LS451−2により実現され、バッファ部602は、XDR-RAM403により実現される。
もちろん、これ以外の割り当て方法を採用することも可能であり、例えば、図39に示されるように、符号化部601内の処理部(プロセス)に対して複数のサブCPUコア442を割り当てる場合、1つのサブCPUコア442を割り当てる処理部(プロセス)の構成は任意であり、図39に示される以外の組み合わせであってもよいし、3つ以上のサブCPUコア442を符号化部601内の処理部(プロセス)に対して割り当てることもできる。例えば、符号化部601内の各処理部(プロセス)に対して互いに異なるサブCPUコア442を割り当てるようにしてもよい。
このように、符号化プログラム546がMPEG2に準拠するソフトウェアエンコーダのソフトウェアプログラムである場合も、ハードウェアの割り当てパターンを複数用意することができる。つまり、図30を参照して説明した場合と同様に、ハードウェアの割り当てパターンが互いに異なる複数の符号化プログラム546を用意することができる。従って、この場合も、図30を参照して説明した場合と同様に、符号化選択制御部502は、画像パラメータ543、符号化パラメータ544、および資源情報等に基づいて、採用する符号化プログラム546を複数用意された中から選択することができる。ただしこの場合、途中計算用バッファ使用量算出部515や係数並び替え用バッファ使用量算出部516は省略することができる。
この場合の、符号化選択制御部502による符号化選択制御処理の流れの例を図40のフローチャートを参照して説明する。なお、この符号化選択制御処理は、例えば1GOP毎等、所定の処理単位毎に繰り返し実行される。
符号化選択制御処理が開始されると、符号化選択制御部502の画像パラメータ取得部511は、ステップS301において画像パラメータ543を取得する。ステップS302において、符号化パラメータ取得部512は、符号化パラメータ544を取得する。ステップS303において、資源情報取得部513は、資源情報を取得する。ステップS304において、符号化プログラム選択部517は、ステップS301において取得された画像パラメータ543、ステップS302において取得された符号化パラメータ544、およびステップS303において取得された資源情報に基づいて、符号化プログラム546の中から利用符号化プログラムを選択する。ステップS305において、プログラム実行部518は、ステップS304において選択された利用符号化プログラムを実行する。利用符号化プログラムが実行されると、符号化選択制御処理は終了される。
実際のソフトウェアプログラムにおいては、図38や図39に示されるMPEG2方式の符号化部601の各処理部はそれぞれ複数の関数により構成されているので、各処理部(プロセス)内でも割り当てるサブCPUコア442を変更するようにすることも可能であるが、並列に実行可能な処理でなければ互いに異なるサブCPUコア442が割り当てられるようにしても処理時間を短縮することはできず、逆に、より非効率になる恐れもある。
従来あるコンピュータのように、コンピュータが自動的に処理を実行するCPUを割り当てる場合、負荷状況等に応じて割り当てを行うため、上述したようにサブCPUコア442の割り当てを行うとは限らず、場合によっては符号化処理の効率が大幅に低減してしまう恐れがある。従って、MPEG2方式の符号化部601であっても、効率よく符号化処理を行うことができるようにハードウェアの割り当てパターンが設定された符号化プログラムを予め用意することにより、符号化処理の効率の低下を抑制することができる。また、その割り当てパターンが互いに異なる複数の符号化プログラムを予め用意し、符号化選択制御部502が、その中から条件に応じて選択するようにすることにより、より多様な条件下において効率よく符号化処理を実行することができる。
なお、図示は省略するが、図38に示される符号化部601に対応するMPEG2方式に準拠した復号部を実現する復号プログラムに対しても複数のパターンでハードウェアを割り当てることができる。つまり、図30の場合と同様に、復号選択制御部503により、予め用意された、復号処理の各プロセスに対するハードウェアの割り当てパターンが互いに異なる複数の復号プログラム547の中から利用復号プログラムを選択し、実行させることができる。
この復号処理の場合も、符号化処理の場合と同様に、効率よく復号処理を行うことができるようにハードウェアの割り当てパターンが設定された復号プログラムであって、その割り当てパターンが互いに異なる復号プログラムを予め複数用意することにより、より多様な条件下において効率よく復号処理を実行することができる。
以上のように、ハードウェア資源の割り当てパターンを、入力画像信号の種類、符号化処理や復号処理のパラメータ(要求されるレイテンシやスループット等の特性)、および利用可能なハードウェア資源等に応じて適切に選択することにより、より多様な条件下において、より効率よく符号化処理や復号処理を実行させることができる。
図41は、ソフトウェアプログラムにより構成され、画像データを符号化して符号化データを生成する、H.264/AVC規格に準拠したソフトウェアエンコーダが所定の情報処理装置のCPUにより実行されることにより実現される機能(プロセス)を模式的に示す図である。図41に示されるように、このソフトウェアエンコーダは、画像データをH.264/AVC方式で符号化する符号化部700により構成される。
符号化部700は、符号化制御部711、減算部721、DCT部722、量子化部723、可変長符号化部724、逆量子化部725、IDCT部726、加算部727、デブロッキングフィルタ部728、動き補償部729、重み付き予測部730、フレーム内予測部731、選択部732、および動きベクトル検出部733を有する。
符号化制御部711は、入力画像データに基づいて量子化ステップサイズや各ピクチャの割り当て符号量を算出し、量子化ステップサイズの情報を量子化部723に供給し、割り当て符号量の情報を可変長符号化部724に供給する。また、符号化制御部711は、所定数の画素群であるブロック毎にフレーム内予測の予測方向を選択し、その予測方向の情報をフレーム内予測部731に供給する。
減算部721は、入力画像データから、選択部732より供給される予測結果を減算し、その減算結果をDCT部722に供給する。DCT部722は、減算部721より供給される減算結果に対してDCT変換を行い、その係数を量子化部723およびフレーム内予測部731に供給する。量子化部723は、DCT部722の出力を、符号化制御部711より供給された量子化ステップサイズで量子化し、その結果を可変長符号化部724および逆量子化部725に供給する。可変長符号化部724は、符号化制御部711より供給される割り当て符号量、および動きベクトル検出部733より供給される動きベクトルに基づいて、量子化部723より供給される量子化係数を符号化し、符号化データを出力する。
逆量子化部725は、量子化部723による量子化に対応する方法で逆量子化を行い、その結果をIDCT部726に供給する。IDCT部726は、逆量子化部725の出力に対して、逆DCT変換を行い、その結果を加算部727に供給する。加算部727は、そのIDCT結果と、入力画像データを加算し、得られた画像データをデブロッキングフィルタ部728に供給する。デブロッキングフィルタ部728は、加算部727の出力に対して、画像の符号化時に生じるブロック歪を減少させるためのフィルタを用いてブロック歪の除去を適応的に行う。デブロッキングフィルタ部728は、そのフィルタ結果を動き補償部729に供給する。
動き補償部729は、複数のピクチャを参照ピクチャとして用い、動きベクトル検出部733より供給される動きベクトルに基づいてその中から最適なものを選択し、デブロッキングフィルタ部728の出力に対して動き補償を行う。動き補償部729は、その動き補償の情報を重み付き予測部730に供給する。重み付き予測部730は、動き補償部729より供給される動き補償の情報に所定の重み係数を乗算し、さらに所定の係数を加算することにより、オフセット付き重み補間情報を生成し、それを選択部732に供給する。
フレーム内予測部731は、DCT部722より供給されるDCT結果に対して、符号化制御部711より供給された予測方向にフレーム内予測を行い、その予測結果を選択部732に供給する。選択部732は、制御モードがイントラモードであるか否かによって、重み付き予測部730より供給されるオフセット付き重み補間情報、並びに、フレーム内予測部731より供給される予測結果のうちいずれか一方を選択し、減算部721に供給する。
動きベクトル検出部733は、入力画像データに基づいてピクチャ間の動きベクトルを検出し、その動きベクトルの情報を動き補償部729および可変長符号化部724に供給する。
このようなソフトウェアエンコーダの各工程(プロセス)に対するハードウェアの割り当て方法の例について、図28に示される情報処理システム300に割り当てる場合を例に説明する。ここで工程(プロセス)とは、図41に示される各処理部が実行する処理のことを示す。例えば、符号化部700全体に対してサブCPUコア442−1を割り当てるようにしてもよい。つまり、この場合、符号化部700の全ての処理は1つのサブCPUコア442により実行され、符号化処理中においてデータは、そのサブCPUコア442のローカルメモリであるLS451に保持され、符号化結果は共有メモリであるXDR-RAM403に保持される。この場合、ソフトウェアエンコーダに対して、サブCPUコア442−1乃至サブCPUコア442−8のそれぞれが、例えば1GOP等所定の処理単位毎に割り当てられるようにすることもできる。その場合、各サブCPUコア442において行われる符号化処理は互いに並行して実行されるようにしてもよい。
図41に示されるようなH.264/AVC方式のエンコーダにおいても、例えば動き補償部729や動きベクトル検出部733等の処理の負荷が、他の処理部において実行される処理の負荷に比べて大きい場合が多い。そこで、図42に示されるように、符号化部700の処理に(全プロセスに対して)複数のサブCPUコア442を割り当てるようにしてもよい。
図42の例においては、符号化部700内の処理部のうち、符号化制御部711に対してサブCPUコア442−1が割り当てられ、減算部721、DCT部722、量子化部723、可変長符号化部724、逆量子化部725、IDCT部726、加算部727、フレーム内予測部731、および選択部732に対してサブCPUコア442−2が割り当てられ、デブロッキングフィルタ部728、動き補償部729、および重み付き予測部730に対してサブCPUコア442−3が割り当てられ、動きベクトル検出部733に対してサブCPUコア442−4が割り当てられている。
もちろん、これ以外の割り当て方法を採用することも可能であり、例えば、図42に示されるように、符号化部700内の処理部(プロセス)に対して複数のサブCPUコア442を割り当てる場合、1つのサブCPUコア442を割り当てる処理部(プロセス)の構成は任意であり、図42に示される以外の組み合わせであってもよいし、5つ以上のサブCPUコア442を符号化部700内の処理部(プロセス)に対して割り当てることもできる。例えば、符号化部700内の各処理部(プロセス)に対して互いに異なるサブCPUコア442を割り当てるようにしてもよい。
このように、符号化プログラム546がH.264/AVCに準拠するソフトウェアエンコーダのソフトウェアプログラムである場合も、ハードウェアの割り当てパターンを複数用意することができる。つまり、図30を参照して説明した場合と同様に、ハードウェアの割り当てパターンが互いに異なる複数の符号化プログラム546を用意することができる。従って、この場合も、図30を参照して説明した場合と同様に、符号化選択制御部502は、画像パラメータ543、符号化パラメータ544、および資源情報等に基づいて、採用する符号化プログラム546を複数用意された中から選択することができる。ただしこの場合、途中計算用バッファ使用量算出部515や係数並び替え用バッファ使用量算出部516は省略することができる。また、符号化選択制御処理の流れは、図40のフローチャートを参照して説明したMPEG2方式の符号化プログラムの場合と同様であるのでその説明は省略する。
実際のソフトウェアプログラムにおいては、図40や図41に示されるH.264/AVC方式の符号化部700の各処理部はそれぞれ複数の関数により構成されているので、各処理部(プロセス)内でも割り当てるサブCPUコア442を変更するようにすることも可能であるが、並列に実行可能な処理でなければ互いに異なるサブCPUコア442が割り当てられるようにしても処理時間を短縮することはできず、逆に、より非効率になる恐れもある。
従来あるコンピュータのように、コンピュータが自動的に処理を実行するサブCPUコア442を割り当てる場合、負荷状況等に応じて割り当てを行うため、上述したようにサブCPUコア442の割り当てを行うとは限らず、場合によっては符号化処理の効率が大幅に低減してしまう恐れがある。従って、H.264/AVC方式の符号化部700であっても、効率よく符号化処理を行うことができるようにハードウェアの割り当てパターンが設定された符号化プログラムを予め用意することにより、符号化処理の効率の低下を抑制することができる。また、その割り当てパターンが互いに異なる複数の符号化プログラムを予め用意し、符号化選択制御部502が、その中から条件に応じて選択するようにすることにより、より多様な条件下において効率よく符号化処理を実行することができる。
なお、図示は省略するが、図41に示される符号化部700に対応するH.264/AVC方式に準拠した復号部を実現する復号プログラムに対しても複数のパターンでハードウェアを割り当てることができる。つまり、図30の場合と同様に、復号選択制御部503により、予め用意された、ハードウェアの割り当てパターンが互いに異なる複数の復号プログラム547の中から利用復号プログラムを選択し、実行させることができる。
この復号処理の場合も、符号化処理の場合と同様に、効率よく復号処理を行うことができるようにハードウェアの割り当てパターンが設定された復号プログラムであって、その割り当てパターンが互いに異なる復号プログラムを予め複数用意することにより、より多様な条件下において効率よく復号処理を実行することができる。
以上のように、ハードウェア資源の割り当てパターンを、入力画像信号の種類、符号化処理や復号処理のパラメータ(要求されるレイテンシやスループット等の特性)、および利用可能なハードウェア資源等に応じて適切に選択することにより、より多様な条件下において、より効率よく符号化処理や復号処理を実行させることができる。
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
例えば、図11に示されるように、符号化部10が、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各処理を行う1つの演算処理部と、途中計算用バッファ部12および係数並び替え用バッファ部13が形成される1つの記憶部により構成されるようにしてもよい。
同様に、符号化部10が、図13に示されるように、ウェーブレット変換部11、係数並び替え部14、およびエントロピ符号化部15の各処理を行う1つの演算処理部と、途中計算用バッファ部12が形成される高速に読み出しおよび書き込みが可能な第1の記憶部と、係数並び替え用バッファ部13が形成される大容量の第2の記憶部とにより構成されるようにしてもよい。
また、同様に、符号化部10が、図14に示されるように、ウェーブレット変換部11−1、係数並び替え部14−1、およびエントロピ符号化部15−1の各処理を行う第1の演算処理部と、途中計算用バッファ部12−1が形成される高速に読み出しおよび書き込みが可能な第1の記憶部と、ウェーブレット変換部11−2、係数並び替え部14−2、およびエントロピ符号化部15−2の各処理を行う第2の演算処理部と、途中計算用バッファ部12−2が形成される高速に読み出しおよび書き込みが可能な第2の記憶部と、係数並び替え用バッファ部13−1および係数並び替え用バッファ部13−2が形成される大容量の第3の記憶部とにより構成されるようにしてもよい。
さらに、同様に、符号化部10が、図16に示されるように、ウェーブレット変換部11−1の処理を行う第1の演算処理部と、途中計算用バッファ部12−1が形成される高速に読み出しおよび書き込みが可能な第1の記憶部と、係数並び替え部14−1およびエントロピ符号化部15−1の各処理を行う第2の演算処理部と、ウェーブレット変換部11−2の処理を行う第3の演算処理部と、途中計算用バッファ部12−2が形成される高速に読み出しおよび書き込みが可能な第2の記憶部と、係数並び替え部14−2およびエントロピ符号化部15−2の各処理を行う第4の演算処理部と、係数並び替え用バッファ部13−1および係数並び替え用バッファ部13−2が形成される大容量の第3の記憶部とにより構成されるようにしてもよい。
同様に、復号部20が、図18に示されるように、エントロピ復号部21およびウェーブレット逆変換部23の各処理を行う1つの演算処理部と、係数バッファ部22が形成される記憶部とにより構成されるようにしてもよい。
また、同様に、復号部20が、図20に示されるように、エントロピ復号部21−1およびウェーブレット逆変換部23−1の各処理を行う第1の演算処理部と、係数バッファ部22−1が形成される第1の記憶部と、エントロピ復号部21−2およびウェーブレット逆変換部23−2の各処理を行う第2の演算処理部と、係数バッファ部22−2が形成される第2の記憶部とにより構成されるようにしてもよい。
さらに、同様に、復号部20が、図22に示されるように、エントロピ復号部21−1の処理を行う第1の演算処理部と、ウェーブレット逆変換部23−1の処理を行う第2の演算処理部と、係数バッファ部22−1が形成される第1の記憶部と、エントロピ復号部21−2の処理を行う第3の演算処理部と、ウェーブレット逆変換部23−2の処理を行う第4の演算処理部と、係数バッファ部22−2が形成される第2の記憶部とにより構成されるようにしてもよい。
このように符号化部10や復号部20をハードウェアで構成する場合も、上述したように各ソフトウェアプログラムの場合と同様の効果を得ることができる。
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータ、または、複数の装置よりなる情報処理システムの情報処理装置などに、プログラム記録媒体からインストールされる。
この記録媒体は、例えば、図10や図28に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク(MD(Mini-Disk)(登録商標)を含む)、もしくは半導体メモリなどよりなるリムーバブルメディア131またはリムーバブルメディア311により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM102や、記憶部123または記憶装置303に含まれるハードディスク、または、HDD405などで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数のデバイス(装置)により構成される装置全体を表すものである。
なお、以上において、1つの装置として説明した構成を分割し、複数の装置として構成するようにしてもよい。逆に、以上において複数の装置として説明した構成をまとめて1つの装置として構成されるようにしてもよい。また、各装置の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置の構成の一部を他の装置の構成に含めるようにしてもよい。つまり、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
10 符号化部, 11 ウェーブレット変換部, 12 途中計算用バッファ部, 13 係数並び替え用バッファ部, 14 係数並び替え部, 15 エントロピ符号化部, 20 復号部, 21 エントロピ復号部, 22 係数バッファ部, 23 ウェーブレット変換部, 100 パーソナルコンピュータ, 101 CPU, 103 RAM, 111 キャッシュメモリ, 300 情報処理システム, 403 XDR-RAM, 441 メインCPUコア, 442 サブCPUコア, 451 LS, 502 符号化選択制御部, 503 復号選択制御部, 504 キャッシュ, 517 符号化プログラム選択部, 518 プログラム実行部, 525 復号プログラム選択部, 526 プログラム実行部