以下、発明を実施するための最良の形態(以下実施の形態とする)について説明する。なお、説明は以下の順序で行う。
1.第1の実施の形態(デバイス:符号化処理または復号処理を行うデバイスの構成例)
2.第2の実施の形態(符号化処理:内部メモリおよび外部メモリの使用を計画的に行う例)
3.第3の実施の形態(符号化処理:入出力バッファの構成例)
4.第4の実施の形態(復号処理:内部メモリおよび外部メモリの使用を計画的に行う例)
<1.第1の実施の形態>
[デバイスの構成例]
図2は、本発明を適用した符号化処理や復号処理を実行するデバイスの構成例を示すブロック図である。図2に示される情報処理システム100は、エンコーダやデコーダのソフトウエアプログラムが実行されるハードウエア資源の例である。
図2に示されるように、情報処理システム100は、エンコーダやデコーダを実現する情報処理装置101を有する。その情報処理装置101には、PCIバス(Peripheral Components Interconnect bus)102を介して各種装置が接続される。例えば、記憶装置103や、複数台のビデオテープレコーダ(VTR)であるVTR104−1乃至VTR104−Sが接続される。また、ユーザがこれらに対する操作入力を行うためのマウス105、キーボード106、並びに操作コントローラ107等も接続される。情報処理システム100は、これらの各装置により構成されるシステムであり、インストールされたプログラムによって、画像符号化処理や画像復号処理等を行うシステムである。
例えば情報処理システム100の情報処理装置101は、大容量の記憶装置103に記憶されている動画コンテンツを読み出して符号化し、得られた符号化データを記憶装置103に書き戻すことができるようになされている。また、例えば、情報処理装置101は、記憶装置103に記憶されている符号化データを読み出して復号し、得られた復号画像データ(動画コンテンツ)を記憶装置103に書き戻すことができるようになされている。さらに、情報処理装置101は、符号化処理により得られた符号化データや、復号処理により得られた復号画像データをVTR104−1乃至VTR104−Sを介してビデオテープに記録したりすることができるようにもなされている。また、情報処理装置101は、VTR104−1乃至VTR104−Sに装着されたビデオテープに記録された動画コンテンツを記憶装置103に取り込み得るようにもなされている。その際、情報処理装置101が、動画コンテンツを符号化するようにしてもよい。
情報処理装置101は、マイクロプロセッサ201、GPU(Graphics Processing Unit)202の他に、XDR(Extreme Data Rate)-RAM(Random Access Memory)203やサウスブリッジ204を有している。また、情報処理装置101は、HDD(Hard Disk Drive)205、USB(Universal Serial Bus)インタフェース(USB I/F)206、およびサウンド入出力コーデック207を有している。
GPU202は専用のバス211を介してマイクロプロセッサ201に接続される。XDR-RAM203は専用のバス212を介してマイクロプロセッサ201に接続される。サウスブリッジ204は、専用のバスを介してマイクロプロセッサ201のI/Oコントローラ244に接続される。このサウスブリッジ204には、HDD205、USBインタフェース206、および、サウンド入出力コーデック207も接続されている。このサウンド入出力コーデック207にはスピーカ221が接続されている。また、GPU202にはディスプレイ222が接続される。サウスブリッジ204には、さらに、PCIバス102を介して、マウス105、キーボード106、VTR104−1乃至VTR104−S、記憶装置103、並びに、操作コントローラ107が接続される。
マウス105およびキーボード106は、ユーザの操作入力を受け、PCIバス102およびサウスブリッジ204を介して、ユーザの操作入力の内容を示す信号を、マイクロプロセッサ201に供給する。記憶装置103およびVTR104−1乃至VTR104−Sは、所定のデータを記録または再生できるようになされている。PCIバス102にはさらに、必要に応じてドライブ108が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア111が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じてHDD205にインストールされる。
マイクロプロセッサ201は、OS(Operating System)等の基本プログラムを実行する汎用のメインCPUコア241を有する。また、メインCPUコア241には、共有バス245を介して複数(この場合8個)のRISC(Reduced Instruction Set Computer)タイプの信号処理プロセッサである、サブCPUコア242−1乃至サブCPUコア242−8が接続される。また、共有バス245には、例えば256[MByte]の容量を持つXDR-RAM203に対するメモリコントロールを行うメモリコントローラ243も接続される。さらに、共有バス245には、サウスブリッジ204との間でデータの入出力を管理するI/O(In/Out)コントローラ244も接続される。マイクロプロセッサ201は、これらの構成が1チップに集積された、マルチコア構成のプロセッサである。マイクロプロセッサ201のの動作周波数は、例えば4[GHz]である。
このマイクロプロセッサ201は、起動時、HDD205に格納された制御プログラムに基づき、HDD205に格納されている必要なアプリケーションプログラムを読み出してXDR-RAM203に展開し、この後このアプリケーションプログラム及びオペレータ操作に基づいて必要な制御処理を実行する。また、マイクロプロセッサ201は、ソフトウエアを実行することにより符号化処理や復号処理を実現する。例えば、マイクロプロセッサ201は、エンコードの結果得られた符号化ストリームを、サウスブリッジ204を介してHDD205に供給して記憶させることができる。また、マイクロプロセッサ201は、例えば、デコードした結果得られる動画像コンテンツの再生映像を、GPU202へデータ転送し、ディスプレイ222に表示させることができる。
マイクロプロセッサ201内の各CPUコアの使用方法は任意であるが、例えば、メインCPUコア241が、画像符号化処理や画像復号処理の制御に関する処理を行い、8個のサブCPUコア242−1乃至サブCPUコア242−8がそれぞれ、符号化処理または復号処理を行う。このような情報処理システム100のマイクロプロセッサ201における8個のサブCPUコア242−1乃至サブCPUコア242−8のそれぞれには、キャッシュメモリが内蔵されている。つまり、8個のサブCPUコア242−1乃至サブCPUコア242−8は、それぞれ、各自の内部メモリであるキャッシュメモリと外部メモリであるXDR-RAM203の両方を利用することができる。
各キャッシュメモリは、サブCPUコア242−1乃至サブCPUコア242−8のそれぞれが独占的に使用することができ、かつ、共有バス245を介さずにデータの読み出しや書き込みを行うことができ、さらに、XDR-RAM203よりも高速に動作する。従って、キャッシュメモリは、XDR-RAM203よりも高速にデータの読み出しや書き込みが可能である。ただし、キャッシュメモリは、XDR-RAM203と比べて容量当たりの単価が高く、かつ、その容量が小さい。したがって、以下においては、キャッシュメモリの容量は有限であるとし、符号化処理および復号処理において、その有限の容量をより効率よく活用する方法について説明する。
なお、実際には、XDR-RAM203の容量も有限である。ただし、XDR-RAM203の場合、符号化処理や復号処理において必要な空き容量に比べて圧倒的に大きな容量を安価に実現することができるので、以下においてはXDR-RAM203の容量は十分に大きい(容量の制限を特に受けない)ものとして説明する。
なお、以下において、サブCPUコア242−1乃至サブCPUコア242−8を互いに区別して説明する必要の無い場合、サブCPUコア242と称する。このサブCPUコア242の数は、図2においては8個設けられるように示されているが、実際には任意である。各サブCPUコア242には、事前に、メインCPUコア241により符号化処理や復号処理を行うためのソフトウエアプログラムが割り当てられる(キャッシュメモリにロードされる)。各サブCPUコア242は、割り当てられたソフトウエアプログラムを実行することにより、符号化処理や復号処理を実現する。
<2.第2の実施の形態>
[エンコーダの構成例]
図3は、このようなサブCPUコア242において実現されるエンコーダ(符号化装置)の構成例を示すブロック図である。
図3において、プロセッサ301は、他と独立して動作する1つの演算処理部であり、図2のマイクロプロセッサ201におけるサブCPUコア242の1つに対応する。図3に示されるように、プロセッサ301は、内部メモリ311を有する。この内部メモリ311は、例えばSRAM(Static Random Access Memory)により構成され、プロセッサ301に内蔵される。内部メモリ311は、後述する外部メモリ383に対して、例えば、回路規模が大きく実装密度をあげにくい、消費電力が大きい、高速動作が可能、および、読み書きの手順が簡潔であるといった特徴を有する。つまり、内部メモリ311は、外部メモリ383に比べて、容量が小さく、高速にデータの読み出しや書き込みを行うことができる(内部メモリ311は、外部メモリ383より小容量かつ高速にアクセス可能である)。
この内部メモリ311の容量は任意であるが、容量を増大させるほど、プロセッサ301のコストは増大する。以下においては、256キロバイトとして説明する。ただし、内部メモリ311には、プロセッサ301において処理されるデータの他に、プロセッサ301において実行されるプログラムも保持される。したがって、データ保持に利用可能な容量はさらに少なくなる。以下においては、データの保持に利用可能な内部メモリ311の空き容量が、全体の半分の128キロバイトであるものとして説明する。
プロセッサ301は、内部メモリ311に保持されるプログラムを実行することにより、ウェーブレット変換部312、エントロピ符号化部326、および出力制御部327の機能を実現する。ウェーブレット変換部312は、プロセッサ301の外部より入力されるベースバンドの画像データに対してウェーブレット変換を行い、所定の分割レベルまで低域成分と広域成分を分割する。ウェーブレット変換は、入力データを低域成分と高域成分に分割するフィルタ処理を水平方向と垂直方向の両方に対して行う処理である。ウェーブレット変換処理においては、このようなフィルタ処理が、そのフィルタ処理により得られた水平方向および垂直方向に低域な成分(LL成分)に対して再帰的に繰り返される。図4は、ウェーブレット変換の様子を説明するための模式図である。図4の例に示されるように、ベースバンドの原画像351は、ウェーブレット変換により(LL成分に対してフィルタ処理が再帰的に繰り返されることにより)、所定の分割レベルまで低域成分と広域成分に分割されたウェーブレット変換係数352に変換される。ウェーブレット変換部312は、このようなフィルタ処理を行うフィルタ処理部323を有する。フィルタ処理部323は、水平分析フィルタ部331と垂直分析フィルタ部332を有する。
水平分析フィルタ部331は、入力画像データを画面水平方向に低域な成分と高域な成分に分割する水平分析フィルタ処理を行う。図5および図6は水平方向および垂直方向の分析フィルタ処理の様子の例を説明する模式図である。図5の左に示されるように、ベースバンドの原画像は、ライン単位に入力され、水平方向のフィルタリングを実行するのに必要なMコラムのサンプルが用意でき次第、水平分析フィルタリングが実行される。このように水平フィルタリングが行われると、画像データは、図5の右に示されるように、水平方向に低域な成分(L)と高域な成分(H)とに分割される(水平分析フィルタ処理結果352A)。水平フィルタリング処理は、各ラインについて行われる。
垂直分析フィルタ部332は、この水平分析フィルタ処理結果352Aを画面垂直方向に低域な成分と高域な成分に分割する垂直分析フィルタ処理を行う。水平分析フィルタ処理がライン毎に行われ、垂直方向のフィルタリングを実行するのに必要なNラインのサンプル(水平分析フィルタ処理結果352A)が用意でき次第(図5右)、垂直分析フィルタ部332により垂直分析フィルタリングが実行される。この垂直分析フィルタリングは、水平方向の低域成分と高域成分のそれぞれについて行われる。その結果、水平分析フィルタ処理結果は、図6の左に示されるように、水平方向および垂直方向の両方に低域な成分(LL成分)、水平方向に高域で垂直方向に低域な成分(HL成分)、水平方向に低域で垂直方向に高域な成分(LH成分)、および、水平方向および垂直方向の両方に高域な成分(HH成分)の4つの成分のウェーブレット変換係数(以下、係数と称する)に分割される(分割レベル1の係数352B)。
水平分析フィルタ部331および垂直分析フィルタ部332は、次に、この分割レベル1の係数352Bの、水平方向および垂直方向の低域成分(LL成分)に対して、分析フィルタ処理を行い、図6の左に示されるように、分割レベル2の係数352C(LLLL成分、LLHL成分、LLLH成分、およびLLHH成分)を生成する。このように、水平分析フィルタ部331および垂直分析フィルタ部332は、水平方向および垂直方向の両方に低域なLL成分に対して分析フィルタ処理を再帰的に繰り返し、原画像351を所望の分割レベルまで分割する。
以上の2つのフィルタ処理は、図7に示されるように、水平フィルタリング、垂直フィルタリングの順に行われる。なお、図8に示されるように、フィルタ処理を垂直フィルタリング、水平フィルタリングの順に行うようにしても、得られる結果(係数データ)は図7の場合と同一である(完全に一致する)。つまり、水平フィルタリングと垂直フィルタリングのどちらを先に行うようにしてもよい。ただし、一般的に、原画像351の画像データは、時系列順にピクチャ毎に供給される。各ピクチャは、ライン毎に上から下に向かう順に供給される。各ラインは左から右に向かう順に画素毎に供給される。したがって、入力バッファ321に1ライン蓄積される毎に処理することができるので、水平フィルタ処理を先に行う方が入力バッファ321の蓄積量(遅延時間)を低減させることができる。
なお、図5および図6に示されるように、ベースバンドの原画像351のNライン分の画像データから生成される分割レベル1の係数のライン数はN/2となる。さらにそれをフィルタ処理して生成される分割レベル2の係数のライン数は、N/4となる。このようにウェーブレット変換を繰り返す毎に(分割レベルが1つ進む毎に)、生成されるライン数は2のべき乗分の1の大きさで小さくなっていく。最終分割レベルの係数を1ライン生成するために必要なベースバンドのライン数(Nの最小値)は、そのフィルタリング処理を何回繰り返すか(最終分割レベルの階層数)によって決められる。通常、この階層数は予め定められる。この、最終分割レベルの係数を1ライン生成するために必要なベースバンドの画像データ(複数ライン分の画像データ)、または、各階層の係数をまとめてラインブロック(またはプレシンクト)と称する。図9は、そのラインブロックの様子を示す模式図である。図9において斜線で示される部分が1ラインブロックを構成する係数である。図9に示されるように、ラインブロックは、最終分割レベルである分割レベル3の各成分の1ライン分の係数、分割レベル2の各成分の2ライン分の係数、並びに、分割レベル1の各成分の4ライン分の係数により構成される。内部メモリ311に蓄積するデータ量と遅延時間を低減するためには、より少ないデータ量毎にフィルタ処理を行うのが望ましい。そこで、ウェーブレット変換部312は、このラインブロック単位にウェーブレット変換処理を行う。
水平分析フィルタ部331および垂直分析フィルタ部332は、フィルタリング演算を効率よく行うために、実際にはリフティング演算により行う。図10はJPEG2000 Part-1でも採用されているドビッシー型の9×7実数精度フィルタをリフティング表現した図である。図中、最上部の一列が入力信号列である。データ処理は画面上から下方向に流れ、以下の4つのステップを経由して、Step3において高域係数、Step4において低域係数が出力される。
step1:di1=di0+α(si0+si+10) ・・・(1)
step2:si1=si0+β(di-11+di1) ・・・(2)
step3:di2=di1+γ(si1+si+11) ・・・(3)
step4:si2=si1+δ(di-12+di2) ・・・(4)
(α=-1.586134342,β=-0.05298011857,γ=0.8829110755,δ=0.4435068520)
上記より、Step1からStep3の途中の係数は、Step4が終了して低域係数が出力されるまでの間、記憶保持されなければならず、これが図3の途中計算バッファ325に記録される。そして、この係数は、ウェーブレット変換の演算を行う過程で、必要に応じて途中計算バッファ325から係数を読みだされて、次のStepの演算に利用される。
図11は、9×7フィルタのリフティング演算(垂直方向)と途中計算バッファ内での演算過程を具体化した図である。図11に示されるように、ライン6→ライン5→ライン4→ライン3→ライン2→ライン1の順番で、上から下方向にライン入力があるとき、高域成分の係数はStep3で出力され、低域成分の係数はStep4で出力される。このとき、低域成分の係数は、図11に示されるように、ライン1が入力されて初めて出力される。このように9×7フィルタのリフティング演算を1通り行うためには、最低6ラインの入力が必要になる。また、次の低域成分の係数を出力するためには、今回算出した各係数(途中の係数も含む)と、2ライン分の入力が必要になる。なお、水平方向のフィルタ処理も同様に9×7フィルタを用いたリフティング演算により行うことができる。その場合、ラインとして説明したところをコラムと置き換えることにより、上述の説明を適用することができる。
図3に戻り、ウェーブレット変換部312は、入力制御部322、途中計算バッファ制御部324、および外部メモリ入出力制御部381を有する。入力制御部322は、フィルタ処理部323へのデータ入力を制御する。途中計算バッファ制御部324は、フィルタ処理部323により生成されるフィルタ処理結果や処理途中の係数の入出力を制御する。途中計算バッファ制御部324は、次回以降のフィルタ処理において再利用されるデータの保持を制御する。外部メモリ入出力制御部381は、所定のフィルタ処理の結果の保持を制御する。エントロピ符号化部326は、フィルタ処理部323より供給されるフィルタ処理結果の係数を符号化して符号化データを生成する。出力制御部327は、エントロピ符号化部326において生成される符号化データのプロセッサ301からの出力を制御する。
内部メモリ311には、ウェーブレット変換部312に入力される画像データ、フィルタ処理部323のフィルタ処理の処理結果や処理途中の係数データ、およびエントロピ符号化部326において生成された符号化データ等が一時的に保持される。内部メモリ311には、これらのデータを保持するために、入力バッファ321、途中計算バッファ325、入出力バッファ382、および出力バッファ328が形成される。入力バッファ321は、ウェーブレット変換部312に入力される前の画像データを保持する。入力バッファ321の読み出しは入力制御部322に制御される。途中計算バッファ325は、フィルタ処理結果または途中の係数データのうち、次回以降のフィルタ処理に使用される係数データを、分割レベル毎に独立して保持する。つまり、途中計算バッファ325は、分析フィルタ処理の演算過程として得られる係数、または、後述する第1の目標分割レベルより下位(第1の目標分割レベルを含む)の分析フィルタ処理の演算結果として得られるLL成分の係数を、その分割レベル毎に保持する。その保持している係数は、必要に応じて読み出され、次回以降のフィルタ処理に提供される。途中計算バッファ325のデータの入出力は、途中計算バッファ制御部324により制御される。なお、この途中計算バッファ325は、外部メモリ383に比べて小容量であり、かつ、高速にアクセス可能である。入出力バッファ382は、フィルタ処理結果であり、次回のフィルタ処理に利用する係数データのうち、外部メモリ383に保持させる係数データを保持する。入出力バッファ382のデータの入出力は、外部メモリ入出力制御部381に制御される。出力バッファ328は、エントロピ符号化部326により生成された符号化データを保持する。出力バッファ328のデータの入出力は、出力制御部327により制御される。
外部メモリ383は、プロセッサ301とは別に形成される記憶領域であり、例えば、図2のXDR-RAM203に対応する。外部メモリ383は、上述した内部メモリ311に対して、例えば、回路規模が小さく実装密度を上げやすい、消費電力が小さい、動作が低速、および、読み書きの手順が複雑であるといった特徴を有する。つまり、外部メモリ383は、内部メモリ311に比べて、動作が低速であるものの、大容量のデータを保持することができる。
[動作説明]
次に、図3に示されるエンコーダの動作について説明する。例えば、XDR-RAM203等の外部メモリ383や、HDD205に記憶されている原画像351は、ウェーブレット変換処理の処理単位ごとに読み出され、共有バス245を介して、矢印361に示されるように入力バッファ321に供給され、一時的に保持される。入力制御部322は、入力バッファ321に所定ライン数(例えば1ライン)の画像データが蓄積されると、矢印362に示されるようにそれを読み出し、矢印363に示されるようにフィルタ処理部323に供給する。
水平分析フィルタ部331は、入力された原画像351に対して水平分析フィルタリングを行う。途中計算バッファ制御部324は、その水平分析フィルタリング結果(係数)を、適宜、矢印364のように取得し、矢印365のように途中計算バッファ325に保持させる。所定ライン数(例えば6ライン)の係数が蓄積されると、途中計算バッファ制御部324は、矢印366のように読み出し、矢印367のようにフィルタ処理部323に供給する。垂直分析フィルタ部332は、その係数に対して垂直分析フィルタリングを行う。
水平分析フィルタリングと垂直分析フィルタリングが1回ずつ行われ、LL成分、HL成分、LH成分、およびHH成分の、4つのサブバンドが生成されると、フィルタ処理部323は、算出したフィルタリング結果のうち、HL成分、LH成分、およびHH成分を、矢印368に示されるようにエントロピ符号化部326に供給する。エントロピ符号化部326は、供給された係数を順次符号化し、生成した符号化データを、矢印369に示されるように出力制御部327に供給する。出力制御部327は、取得した符号化データを矢印370に示されるように、出力バッファ328に供給して一時的に保持させる。出力制御部327は、出力バッファ328を制御し、所定のタイミングで出力バッファ328に保持されている符号化データを、矢印371に示されるように、符号化コードストリーム353としてプロセッサ301の外部(例えばXDR-RAM203やHDD205等)に出力させる。
フィルタ処理部323は、目標の分割レベルに達するまで、LL成分の係数に対してフィルタ処理を再帰的に繰り返す。そこで、途中計算バッファ制御部324は、算出されたLL成分の係数を、矢印364に示されるようにフィルタ処理部323より取得し、矢印365に示されるように途中計算バッファ325に保持させる。また、垂直分析フィルタリングにおいて生成されたリフティング演算途中の係数の一部は、次のラインに対する垂直分析フィルタリングにおいても使用される。そこで、途中計算バッファ制御部324は、算出されたその他の係数(LL成分、HL成分、LH成分、およびHH成分のいずれでもないリフティング演算途中の係数)を、矢印364に示されるようにフィルタ処理部323より取得し、矢印365に示されるように途中計算バッファ325に保持させる。
途中計算バッファ制御部324は、フィルタ処理部323による次の分割レベルを対象とするフィルタ処理のために、途中計算バッファ325に保持されている係数を、適宜、矢印366のように読み出し、矢印367に示されるようにフィルタ処理部323に供給する。フィルタ処理部323は、処理対象分割レベルを1つ上位のレベルに更新し、途中計算バッファ制御部324により途中計算バッファ325より読み出されたLL成分を入力データとして、水平分析フィルタリングや垂直分析フィルタリングを行う。フィルタ処理部323は、1つ目の目標分割レベル(第1の目標分割レベル)に達するまで、各分割レベルのLL成分に対して、このようにフィルタ処理を再帰的に繰り返す。第1の目標分割レベルのLL成分は、途中計算バッファ325ではなく外部メモリ383に保持される。外部メモリ入出力制御部381は、第1の目標分割レベルのLL成分の係数が生成されると、それを、矢印391に示されるようにフィルタ処理部323より取得し、矢印392および矢印393に示されるように、入出力バッファ382を介して外部メモリ383に保持させる。
そして、フィルタ処理の処理対象レベルが第1の目標分割レベルになると、外部メモリ入出力制御部381は、外部メモリ383に保持されているLL成分の係数を、矢印394および矢印395に示されるように入出力バッファ382を介して読み出し、矢印396に示されるようにフィルタ処理部323に供給する。つまり、水平分析フィルタ部331は、外部メモリ383より読み出された係数に対して水平分析フィルタリングを行う。フィルタ処理部323は、分割レベルが2つ目の目標分割レベル(第2の目標分割レベル)に達するまで、上述したように、各分割レベルのLL成分に対してフィルタ処理を再帰的に繰り返す。このとき、生成されるLL成分の係数や途中の係数は、途中計算バッファ制御部324の制御によって、適宜、途中計算バッファ325に保持され、必要に応じて利用される。
以上のようにして生成された第2の目標分割レベルの各成分の係数は、矢印368に示されるようにエントロピ符号化部326に供給され、符号化される。そして、その符号化により生成された符号化データは、矢印369に示されるように出力制御部327に供給され、矢印370および矢印371に示されるように出力バッファ328を介してプロセッサ301の外部(例えばXDR-RAM203やHDD205等)に、符号化コードストリーム353として出力される。
仮に、従来のように、ウェーブレット変換処理において生成される、各分割レベルのLL成分の係数や、次回のフィルタリングに必要な途中の係数を、全て途中計算バッファ325に保持させるとすると、途中計算バッファ325には、図12に示されるように係数が保持される。つまり、途中計算バッファ325に保持される係数の垂直ライン数は、各分割レベルにおいて固定値(例えば6)であるが、水平サイズは、分割レベルが1つ進むごとに、ウェーブレット変換の特徴から2分の1ずつ小さくなる。例えば、原画像の水平サイズが4096画素の場合、分割レベル1の水平サイズは4096画素となり、分割レベル2の水平サイズは2048画素となり、分割レベル3の水平サイズは1024画素となる。したがって、途中計算バッファ325の必要メモリ量は、以下の式(5)のようになる。なお、ウェーブレット変換の第2の目標分割レベルは4とする。
4096(画素)×(1+1/2+1/4+1/8)×6(ライン)×4(バイト)
=184K(バイト) ・・・(5)
なお、4バイト(=32ビット)は、ウェーブレット変換係数の精度として必要なビット数である。つまり、例えば、内部メモリ311の容量が256Kバイトで、そのうち半分がプログラムや他のデータで使用され、空き容量が128Kバイトであるとすると、従来の方法では、途中計算バッファ325では容量が不足する。この場合、容量不足分の係数は外部メモリ383に保持させる必要があるため、この係数保持を無計画に行うと、外部メモリ383へのアクセス数が増大し、遅延時間が不要に増大する恐れがある。
例えば、大容量の外部メモリ383を単純に優先的に利用するようにすると、途中計算バッファ325は使用されず、処理速度が不要に低下してしまう恐れがあった。逆に、高速に読み書き可能な途中計算バッファ325を単純に優先的に使用するようにすると、分割レベルの深い階層において外部メモリ383が使用されるので、アクセス頻度が増大し、処理速度が不要に低下してしまう恐れがあった。
そこで、図3に示される本発明を適用したエンコーダは、所定の階層の分割レベル(第1の目標分割レベル)を予め定め、その予め定められた第1の目標分割レベルのLL成分のみを外部メモリ383に保持させるようにする。例えば、この第1の目標分割レベルを分割レベル1とし、図13Aに示されるように、1回フィルタ処理を行い、生成された1LL成分を外部メモリ383に保持させるようにする。そして、次の分割レベルのフィルタ処理は、図13Bに示されるように、外部メモリ383より読み出された1LL成分に対して行われるようにする。それ以降の係数(保持する必要がある係数)は、途中計算バッファ325に保持させるようにする。
つまり、第1の目標分割レベルの1つ下位の分割レベルの係数まで途中計算バッファ325に保持し、第1の目標分割レベルのLL成分を外部メモリ383に一時的に退避させる。第1の目標分割レベルの1つ下位のフィルタ処理が完了すると、途中計算バッファ325に保持される下位の階層の係数が不要になる。そこで、外部メモリ383に保持される第1の目標分割レベルのLL成分を用いてそれ以降の階層に対するフィルタ処理が開始される。このとき途中計算バッファ325に空き容量が生じるので、それ以降に生成される係数は、途中計算バッファ325に保持させることができる。つまり、外部メモリ383を用いることにより、途中計算バッファ325を、時間的に2回に分けて利用する。
この方法を用いる場合の、途中計算バッファ325に必要なメモリ量について、計算する。なお、第1の目標分割レベルより前のウェーブレット変換をステップ1とし、第1の目標分割レベル以降のウェーブレット変換をステップ2とする。なお、第1の目標分割レベルを分割レベル1とし、第2の目標分割レベルを分割レベル3とする。
ステップ1:
4,096(水平サイズ)×1×6(ライン)×4(バイト)
=98K(バイト) ・・・(6)
ステップ2:
2,048(1分割後の水平サイズ)×(1+0.5+0.25)×6(ライン)×4(バイト)
=86K(バイト) ・・・(7)
ステップ1とステップ2は時間的にずれているので、この場合、途中計算バッファ325の容量は、98Kバイト以上あればよい。つまり、ウェーブレット変換処理全体において、途中計算バッファ325に、途中計算バッファ325の記憶容量以上の容量の係数を保持させることができる。
以上のように制御することにより、高速に読み書き可能な途中計算バッファ325をより多く利用し、外部メモリ383の利用を必要最小限に抑制することができるので、外部メモリ383を利用することによる処理時間の増大を抑制することができる。すなわち、図3に示されるエンコーダは、よりハードウエア資源をより有効に利用することができ、ウェーブレット変換を用いた符号化処理をより容易かつより高速に行うことができる。このように、図3に示されるエンコーダは、符号化処理全体の処理時間を低減させることができるとともに、コストの増大を抑制することができる。
[処理の流れの説明]
次に以上のような符号化処理の流れの例を、図14のフローチャートを参照して説明する。図3のエンコーダは、この符号化処理を、原画像351のラインブロック毎(所定ライン数毎)に実行する。
符号化処理が開始されると、ウェーブレット変換部312は、ステップS101において、入力バッファ321に入力された原画像351に対して水平分析フィルタリングを行う第1水平分析フィルタ処理を行う。第1水平分析フィルタ処理の詳細については後述する。第1水平分析フィルタ処理が終了すると、ウェーブレット変換部312は、ステップS102において、処理後の分割レベルが第1の目標分割レベルであるか否かを判定する。現在の処理対象分割レベルが第1の目標分割レベルの1つ下位でなく、フィルタ処理により第1の目標分割レベルの係数が生成されないと判定された場合、処理はステップS103に進む。
ステップS103において、ウェーブレット変換部312、エントロピ符号化部326、および出力制御部327は、水平分析フィルタ処理結果に対して垂直分析フィルタリングを行い、生成したLL成分を途中計算バッファ325に保持させるとともに、その他の成分を符号化して出力する処理である第1垂直分析フィルタ符号化処理を行う。第1垂直分析フィルタ符号化処理の詳細については後述する。第1垂直分析フィルタ符号化処理が終了すると、ウェーブレット変換部312は、ステップS104において、処理対象分割レベルを1つ上位の分割レベルに更新し、内部メモリ311の途中計算バッファ325に保持したLL成分を入力データとする。ウェーブレット変換部312は、ステップS105において、新たな処理対象分割レベルに対して水平分析フィルタリングを行う第2水平分析フィルタ処理を行う。すなわち、ウェーブレット変換部312は、前回のフィルタ処理において途中計算バッファ325に保持されるLL成分に対して水平分析フィルタリングを行う。第2水平分析フィルタ処理の詳細については後述する。
ステップS105の処理が終了すると、処理は、ステップS102に戻る。つまり、ウェーブレット変換部312は、ステップS102において処理後の分割レベルが第1の目標分割レベルであると判定されるまで、ステップS102乃至ステップS105の処理を繰り返し実行する。そして、ステップS102において、現在の処理対象分割レベルが第1の目標分割レベルの1つ下位であり、フィルタ処理により第1の目標分割レベルの係数が生成されると判定された場合、処理はステップS106に進む
ステップS106において、ウェーブレット変換部312、エントロピ符号化部326、および出力制御部327は、水平分析フィルタ処理結果に対して垂直分析フィルタリングを行い、生成した第1目標分割レベルのLL成分を外部メモリ383に保持させるとともに、その他の成分を符号化して出力する処理である第2垂直分析フィルタ符号化処理を行う。第2垂直分析フィルタ符号化処理の詳細については後述する。ここまでのステップS101乃至ステップS106が、上述した「ステップ1」の処理として実行される。第1目標分割レベルのLL成分が外部メモリ383に蓄積され、第2垂直分析フィルタ符号化処理が終了すると、処理はステップS111に進む。
ステップS111において、ウェーブレット変換部312は、処理対象分割レベルを1つ上位の分割レベルに更新し、外部メモリ383に保持したLL成分を入力データとする。ウェーブレット変換部312は、ステップS112において、外部メモリ383より読み出された第1目標分割レベルのLL成分に対して水平分析フィルタリングを行う第3水平分析フィルタ処理を行う。第3水平分析フィルタ処理の詳細については後述する。
ステップS113において、ウェーブレット変換部312は、処理後の分割レベルが第2の目標分割レベルであるか否かを判定する。現在の処理対象分割レベルが第2の目標分割レベルの1つ下位でなく、フィルタ処理により第2の目標分割レベルの係数が生成されないと判定された場合、処理はステップS114に進む。ステップS114において、ウェーブレット変換部312、エントロピ符号化部326、および出力制御部327は、第1垂直分析フィルタ符号化処理を行う。ステップS115において、ウェーブレット変換部312は、処理対象分割レベルを1つ上位の分割レベルに更新し、内部メモリ311の途中計算バッファ325に保持したLL成分を入力データとする。ウェーブレット変換部312は、ステップS116において、第2水平分析フィルタ処理を行う。
ステップS116の処理が終了すると、処理は、ステップS113に戻る。つまり、ウェーブレット変換部312は、ステップS113において処理後の分割レベルが第2の目標分割レベルであると判定されるまで、ステップS113乃至ステップS116の処理を繰り返し実行する。そして、ステップS113において、現在の処理対象分割レベルが第2の目標分割レベルの1つ下位であり、フィルタ処理により第2の目標分割レベルの係数が生成されると判定された場合、処理はステップS117に進む。
ステップS117において、ウェーブレット変換部312、エントロピ符号化部326、および出力制御部327は、水平分析フィルタ処理結果に対して垂直分析フィルタリングを行い、生成した第2目標分割レベルの各成分を符号化して出力する処理である第3垂直分析フィルタ符号化処理を行う。第3垂直分析フィルタ符号化処理の詳細については後述する。ここまでのステップS111乃至ステップS117が、上述した「ステップ2」の処理として実行される。
以上のようにステップS117の処理が終了されると、符号化処理が終了される。このように、外部メモリ383を利用して、符号化処理をステップ1とステップ2の2つに分けて行うようにしたので、図3のエンコーダは、符号化処理全体において、途中計算バッファ325に記憶容量以上の情報を保持させることができ、ハードウエア資源の利用効率を向上させることができる。
次に、図15のフローチャートを参照して、第1水平分析フィルタ処理の流れの詳細な例を説明する。第1水平分析フィルタ処理が開始されると、入力制御部322は、ステップS131において、内部メモリ311の入力バッファ321から処理対象ラインの画像データを入力する。途中計算バッファ制御部324は、ステップS132において、内部メモリ311の途中計算バッファ325から、水平分析フィルタリングに必要なその他の係数を読み出す。フィルタ処理に必要な係数が揃うと、水平分析フィルタ部331は、ステップS133において、ステップS131およびステップS132において得られた係数に対して水平分析フィルタリングを行う。ステップS134において、途中計算バッファ制御部324は、その水平分析フィルタリングの処理結果(分析結果)の係数を内部メモリ311の途中計算バッファ325に保持させる。ステップS135において、途中計算バッファ制御部324は、次回に必要なその他の係数を内部メモリの途中計算バッファ325に保持させる。ステップS136において、ウェーブレット変換部312は、内部メモリの入力バッファ321に保持される画像データ(ラインブロック(例えば6ライン分の画像データ))を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS131に戻し、それ以降の処理を繰り返す。
すなわち、ウェーブレット変換部312は、入力バッファ321に保持されるラインブロック毎の原画像351に対して、ステップS131乃至ステップS136の処理を繰り返し実行することにより、1ラインずつ水平分析フィルタリングを行う。このステップS131乃至ステップS136の処理は、任意のタイミングで行われるようにしてよいが、入力バッファ321の容量をより少なくし、符号化処理時間をより短縮させるために、入力バッファ321に画像データが1ライン分蓄積される毎に行われるようにするのが望ましい。ステップS136において、内部メモリ311の入力バッファ321に保持される画像データ(ラインブロック)を全て処理したと判定された場合、第1水平分析フィルタ処理が終了され、処理は図14のステップS101に戻され、ステップS102に進められる。
次に、図16のフローチャートを参照して、第1垂直分析フィルタ符号化処理の流れの詳細な例を説明する。第1垂直分析フィルタ符号化処理が開始されると、途中計算バッファ制御部324は、ステップS151において、内部メモリ311の途中計算バッファ325から処理対象分割レベルにおける水平分析フィルタリング結果の係数を処理単位ライン数(例えば6ライン)分読み出す。また、途中計算バッファ制御部324は、ステップS152において、内部メモリ311の途中計算バッファ325から垂直分析フィルタリングに必要なその他の係数を読み出す。ステップS153において、垂直分析フィルタ部332は、ステップS151およびステップS152の処理により読み出された各係数に対して垂直分析フィルタリングを行う。ステップS154において、途中計算バッファ制御部324は、垂直分析フィルタリング結果のうち、LL成分の係数を内部メモリ311の途中計算バッファ325に保持させる。ステップS155において、エントロピ符号化部326は、垂直分析フィルタリング結果のうち、HL成分、LH成分、およびHH成分の係数をエントロピ符号化する。ステップS156において、出力制御部327は、ステップS155において生成された符号化データを、出力バッファ328を介して、符号化コードストリーム353として、プロセッサ301より出力する。ステップS157において、途中計算バッファ制御部324は、次回のフィルタ処理に必要な係数(その他の係数)を内部メモリ311の途中計算バッファ325に保持させる。
ステップS158において、ウェーブレット変換部312は、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS151に戻し、それ以降の処理を繰り返す。すなわち、ウェーブレット変換部312は、途中計算バッファ325に保持される、所定量(例えば6ライン分)の処理対象分割レベルの係数に対して、ステップS151乃至ステップS158の処理を繰り返し実行する。したがって、途中計算バッファ325の容量をより少なくし、符号化処理時間をより短縮させるために、垂直分析フィルタリングの処理単位ライン数分の水平分析フィルタ処理結果が途中計算バッファ325に蓄積され次第、ステップS151乃至ステップS158の処理が行われるようにするのが望ましい。
ステップS158において、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したと判定された場合、処理は図14に戻される。図14のステップS106において実行された第1垂直分析フィルタ符号化処理の場合、処理は、図14のステップS106に戻され、ステップS111に進められる。また、図14のステップS114において実行された第1垂直分析フィルタ符号化処理の場合、処理は、図14のステップS114に戻され、ステップS115に進められる。
次に、図17のフローチャートを参照して、第2水平分析フィルタ処理の流れの詳細な例を説明する。第2水平分析フィルタ処理の処理内容は、基本的に第1水平分析フィルタ処理と同様であるが、第2水平分析フィルタ処理は、途中計算バッファ325に保持される、1つ下位の分割レベルにおいて行われた垂直分析フィルタ処理結果のLL成分に対して行われる。したがって、第2水平分析フィルタ処理が開始されると、途中計算バッファ制御部324は、ステップS171において、内部メモリ311の途中計算バッファ325から、処理対象分割レベルの処理対象ラインの係数を読み出し、フィルタ処理部323に入力する。ステップS172乃至ステップS175の各処理は、図15のステップS132乃至ステップS135の各処理と同様に行われる。
ただし、ステップS173の水平分析フィルタリングは、ステップS171およびステップS172において途中計算バッファ325より読み出された係数に対して行われる。この係数は、垂直分析フィルタリング結果であるので、ステップS171乃至ステップS176の各処理は、処理対象ラインブロックの処理対象分割レベルの係数が途中計算バッファ325に全て保持されてから実行される。
ステップS176において、ウェーブレット変換部312は、内部メモリの途中計算バッファ325に保持される、処理対象ラインブロックの処理対象分割レベルの係数を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS171に戻し、それ以降の処理を繰り返す。すなわち、ウェーブレット変換部312は、途中計算バッファ325に保持される処理対象ラインブロックの処理対象分割レベルの係数に対して、ステップS171乃至ステップS176の処理を繰り返し実行することにより、1ラインずつ水平分析フィルタリングを行う。ステップS176において、途中計算バッファ325に保持される処理対象分割レベルの係数(処理対象ラインブロックの係数)を全て処理したと判定された場合、第2水平分析フィルタ処理が終了され、処理は図14に戻される。図14のステップS105において実行された第2水平分析フィルタ処理の場合、処理は、図14のステップS105に戻され、さらにステップS102に戻される。また、図14のステップS116において実行された第2水平分析フィルタ処理の場合、処理は、図14のステップS116に戻され、さらにステップS113に戻される。
次に、図18のフローチャートを参照して、第2垂直分析フィルタ符号化処理の流れの詳細な例を説明する。第2垂直分析フィルタ符号化処理の処理内容は、基本的に第1垂直分析フィルタ符号化処理と同様であるが、第2垂直分析フィルタ符号化処理は、生成した分析結果のLL成分を外部メモリ383に蓄積する。したがって、ウェーブレット変換部312は、図18のステップS191乃至ステップS193の各処理を、図16のステップS151乃至ステップS153の各処理と同様に行い、第1垂直分析フィルタ符号化処理の場合と同様に垂直分析フィルタリングを行う。
ステップS194において、外部メモリ入出力制御部381は、ステップS193において行われた垂直分析フィルタリング結果のLL成分を内部メモリ311の入出力バッファ382に保持させる。ステップS195において、外部メモリ入出力制御部381は、ステップS194において保持させた内部メモリ311の入出力バッファ382のLL成分を、外部メモリ383に書き込み、保持させる。LL成分以外の係数については、第1垂直分析フィルタ符号化処理の場合と同様に処理される。したがって、エントロピ符号化部326は、図18のステップS196の処理を図16のステップS155の場合と同様に行う。出力制御部327は、図18のステップS197の処理を図16のステップS156の場合と同様に行う。途中計算バッファ制御部324は、図18のステップS198の処理を図16のステップS157の場合と同様に行う。
図18のステップS199において、ウェーブレット変換部312は、図16のステップS158の場合と同様に、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS191に戻し、それ以降の処理を繰り返す。すなわち、ウェーブレット変換部312は、途中計算バッファ325に保持される、所定量(例えば6ライン分)の処理対象分割レベルの係数に対して、ステップS191乃至ステップS199の処理を繰り返し実行する。したがって、途中計算バッファ325の容量をより少なくし、符号化処理時間をより短縮させるために、垂直分析フィルタリングの処理単位ライン数分の水平分析フィルタ処理結果が途中計算バッファ325に蓄積され次第、ステップS191乃至ステップS199の処理が行われるようにするのが望ましい。ステップS199において、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したと判定された場合、処理は、図14のステップS106に戻され、ステップS111に進められる。
次に、図19のフローチャートを参照して、第3水平分析フィルタ処理の流れの詳細な例を説明する。第3水平分析フィルタ処理の処理内容は、基本的に第1水平分析フィルタ処理と同様であるが、第3水平分析フィルタ処理は、外部メモリ383に保持される、1つ下位の分割レベルにおいて行われた垂直分析フィルタ処理結果のLL成分に対して行われる。したがって、第3水平分析フィルタ処理が開始されると、外部メモリ入出力制御部381は、ステップS211において、外部メモリ383から、処理対象分割レベルの処理対象ラインの係数を読み出し、内部メモリ311の入出力バッファ382に保持させる。外部メモリ入出力制御部381は、ステップS212において、ステップS211において保持させた係数を、内部メモリ311の入出力バッファ382より読み出し、フィルタ処理部323に入力する。図19のステップS213乃至ステップS216の各処理は、図15のステップS132乃至ステップS135の各処理と同様に行われる。
ただし、ステップS214の水平分析フィルタリングは、ステップS211およびステップS212において外部メモリより読み出された係数、並びに、ステップS213において途中計算バッファ325より読み出された係数に対して行われる。この係数は、垂直分析フィルタリング結果であるので、ステップS211乃至ステップS217の各処理は、処理対象ラインブロックの処理対象分割レベルの係数が外部メモリ383に全て保持されてから実行される。
ステップS217において、ウェーブレット変換部312は、外部メモリ383に保持される、処理対象ラインブロックの処理対象分割レベルの係数を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS211に戻し、それ以降の処理を繰り返す。すなわち、ウェーブレット変換部312は、外部メモリ383に保持される処理対象ラインブロックの処理対象分割レベルの係数に対して、ステップS211乃至ステップS217の処理を繰り返し実行することにより、1ラインずつ水平分析フィルタリングを行う。ステップS217において、外部メモリ383に保持される処理対象分割レベルの係数(処理対象ラインブロックの係数)を全て処理したと判定された場合、第3水平分析フィルタ処理が終了され、処理は、図14のステップS112に戻され、ステップS113に進められる。
次に、図20のフローチャートを参照して、第3垂直分析フィルタ符号化処理の流れの詳細な例を説明する。第3垂直分析フィルタ符号化処理の処理内容は、基本的に第1垂直分析フィルタ符号化処理と同様であるが、第3垂直分析フィルタ符号化処理は、生成した分析結果のLL成分を他の成分と同様に符号化して出力する。
したがって、ウェーブレット変換部312は、図20のステップS231乃至ステップS233の各処理を、図16のステップS151乃至ステップS153の各処理と同様に行い、第1垂直分析フィルタ符号化処理の場合と同様に垂直分析フィルタリングを行う。ステップS234において、エントロピ符号化部326は、分析結果の各成分の係数をエントロピ符号化する。つまり、エントロピ符号化部326は、LL成分も含む全ての垂直分析フィルタリング結果を符号化する。ステップS235において、出力制御部327は、ステップS234において生成された符号化データ(LL成分に対応する符号化データも含む)を、出力バッファ328を介して、符号化コードストリーム353として、プロセッサ301の外部に出力する。ステップS236において、途中計算バッファ制御部324は、図16のステップS157の場合と同様に、次回のフィルタ処理に必要なその他の係数を内部メモリ311の途中計算バッファ325に保持させる。
ステップS237において、ウェーブレット変換部312は、図16のステップS158の場合と同様に、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したか否かを判定する。全て処理していないと判定した場合、ウェーブレット変換部312は、処理をステップS231に戻し、それ以降の処理を繰り返す。すなわち、ウェーブレット変換部312は、途中計算バッファ325に保持される、所定量(例えば6ライン分)の処理対象分割レベルの係数に対して、ステップS231乃至ステップS237の処理を繰り返し実行する。したがって、途中計算バッファ325の容量をより少なくし、符号化処理時間をより短縮させるために、垂直分析フィルタリングの処理単位ライン数分の水平分析フィルタ処理結果が途中計算バッファ325に蓄積され次第、ステップS231乃至ステップS237の処理が行われるようにするのが望ましい。ステップS237において、内部メモリ311の途中計算バッファ325に保持される処理対象分割レベルにおける水平分析フィルタリング結果の係数を全て処理したと判定された場合、処理は、図14のステップS117に戻され、符号化処理が終了される。
以上のように、第1の目標分割レベルを外部メモリ383に保持させることにより、分割レベル毎に再帰的に繰り返されるフィルタ処理を、ステップ1とステップ2の2つに分ける。このようにすることにより、途中計算バッファ325を、ステップ1とステップ2の2回に分けて利用することができ、途中計算バッファ325の実際の記憶容量より多い量の係数を途中計算バッファ325に保持させることができる。つまり、途中計算バッファ325の記憶容量を時分割して利用することにより擬似的に記憶容量を増大させることができる。したがって、途中計算バッファ325の利用効率を向上させることができる。
なお、この第1目標分割レベルとする分割レベルは、ウェーブレット変換処理の最終分割レベルである第2目標分割レベルより下位の階層であれば、任意の分割レベルとしてよい。ただし、途中計算バッファ325(内部メモリ311)として必要な記憶容量、つまり、ステップ1において必要な容量とステップ2において必要な容量の大きい方の値ができるだけ小さくなるようにするのが望ましい。
図12を参照して説明したように、保持される係数は、分割レベルが上位になる毎に半減する。したがって、第1目標分割レベルが分割レベル1とするのが望ましい。例えば式(6)および式(7)の例の場合、ステップ1において必要なメモリ容量が98Kバイトであり、ステップ2において必要なメモリ容量が86Kバイトであるので、途中計算バッファ325の記憶容量は98Kバイトあればよい。分割レベル2とすると、ステップ2において必要なメモリ容量は低減するが、ステップ1において必要なメモリ容量が増大するので、途中計算バッファ325(内部メモリ311)として必要な記憶容量は増大してしまう。例えば式(6)および式(7)の例の場合、使用可能な内部メモリ311の空き容量が128Kバイトであっても、十分に対応することができる。
なお、例えば、第1目標分割レベルとして複数の分割レベルを設定するようにしてもよい。例えば、再帰的に繰り返されるフィルタ処理において、複数回外部メモリ383にLL成分を保持させるようにしてもよい。しかしながら、この場合、途中計算バッファ325の容量を低減させることができる可能性はあるが、外部メモリ383へのアクセス回数が増大するので、処理時間が増大してしまう。また、LL成分の保存先の切り替えを、ある分割レベルの垂直分析フィルタリング中に行うようにしても良い。しかしながら、その場合、ステップ1に必要な容量とステップ2に必要な容量をより均等に配分することができるが、切り替えのための制御が複雑になり、符号化処理の負荷が増大する恐れがある。また、不要な待機時間が増大する等して符号化処理時間が増大する恐れがある。これに対して、上述したように、LL成分の保存先の切り替えをフィルタ処理単位で(分割レベル単位で)行うようにする、つまり、第1の目標分割レベルのLL成分を外部メモリ383に退避させるようにすることにより、切り替えの制御を容易にすることができる。
<3.第3の実施の形態>
[メモリバンク構成1]
なお、プロセッサ301内部のバスと、外部のバスとで転送速度が異なる(外部のバスの方が遅い)ので、外部メモリ383への係数の転送(またはその外部メモリ383からの転送)は、入出力バッファ382を介して行うのが望ましい。このとき、入出力バッファ382の、外部メモリ383への係数の書き込み時に利用される領域のメモリバンク構成は任意であり、1バンク構成としてもよいが、2バンク構成としてもよい。
メモリバンク構成を1バンクとする場合、メモリコントローラは、その領域全体を1つの領域として管理するため、制御が容易であるものの、データの読み出しと書き込みを同時に行うことができない。つまり、最初に、図21Aの矢印601に示されるように、外部メモリ入出力制御部381から入出力バッファ382に係数がストア(Store1)される。そのストアが完了すると、次に、図21Bの矢印602に示されるように、入出力バッファ382から外部メモリ383に係数が読み出される((DMA(Direct Memory Access))Load1)。その読み出しが終了すると、図21Cの矢印603に示されるように、外部メモリ入出力制御部381から入出力バッファ382に新たな係数がストア(Store2)される。以上のように、入出力バッファ382は、係数の入出力を並行して行うことができない。
これに対して、メモリバンク構成を2バンクとする場合、メモリコントローラは、その領域全体を2つの領域として管理するため、データの読み出しと書き込みを同時に行うことができる。例えば、最初に、図22Aの矢印611に示されるように、外部メモリ入出力制御部381から入出力バッファ382のバンクA(BankA)に係数がストア(Store1)される。この時点でバンクB(BankB)は、空状態(Empty)である。そのストアが完了すると、次に、図22Bの矢印612に示されるように、入出力バッファ382のバンクAから外部メモリ383に係数が読み出される((DMA)Load1)。この処理と並行して、図22Bの矢印613に示されるように、外部メモリ入出力制御部381から入出力バッファ382のバンクBに係数がストア(Store2)される。そのストアおよび転送が完了すると、次に、図22Cの矢印614に示されるように、入出力バッファ382のバンクBから外部メモリ383に係数が読み出される((DMA)Load2)。この処理と並行して、図22Cの矢印615に示されるように、外部メモリ入出力制御部381から入出力バッファ382のバンクAに係数がストア(Store3)される。したがって、外部メモリ383への係数の書き込み時に利用される領域のメモリバンク構成を1バンク構成とする場合、図23Aに示されるように、ウェーブレット変換(DWT1,DWT2,DWT3,DWT4)および入出力バッファ382へのストア(Store1,Store2,Store3,Store4)を、入出力バッファ382から外部メモリ383への読み出し(Load1,Load2,Load3,Load4)と並行して行うことができず、処理時間が増大する。
これに対して、外部メモリ383への係数の書き込み時に利用される領域のメモリバンク構成を2バンク構成とする場合、図23Bに示されるように、ウェーブレット変換(DWT1,DWT2,DWT3,DWT4)および入出力バッファ382へのストア(Store1,Store2,Store3,Store4)を、入出力バッファ382から外部メモリ383への読み出し(Load1,Load2,Load3,Load4)と並行して行うことができ、1バンク構成の場合と比べて、不要な待機時間を削減し、処理時間を低減させることができる。
つまり、外部メモリ383への係数の書き込み時に利用される領域のメモリバンク構成を2バンク構成とすることにより、図3のエンコーダは、ハードウエア資源の利用効率を向上させることができる。もちろん、バンク数は任意であり3バンク以上としてもよい。
[メモリバンク構成2]
なお、入出力バッファ382の、外部メモリ383からの係数の読み出し時に利用される領域のメモリバンク構成も任意であり、1バンク構成としてもよいし、2バンク構成としてもよい。
メモリバンク構成を1バンクとする場合、最初に、図24Aの矢印701に示されるように、外部メモリ383から入出力バッファ382に係数がストア((DMA)Store1)される。そのストアが完了すると、次に、図24Bの矢印702に示されるように、入出力バッファ382から外部メモリ入出力制御部381に係数が読み出される(Load1)。その読み出しが終了すると、図24Cの矢印703に示されるように、外部メモリ383から入出力バッファ382に新たな係数がストア((DMA)Store2)される。以上のように、入出力バッファ382は、係数の入出力を並行して行うことができない。
これに対して、メモリバンク構成を2バンクとする場合、メモリコントローラは、その領域全体を2つの領域として管理するため、データの読み出しと書き込みを同時に行うことができる。例えば、最初に、図25Aの矢印711に示されるように、外部メモリ383から入出力バッファ382のバンクA(BankA)に係数がストア((DMA)Store1)される。この時点でバンクB(BankB)は、空状態(Empty)である。そのストアが完了すると、次に、図25Bの矢印712に示されるように、入出力バッファ382のバンクAから外部メモリ入出力制御部381に係数が読み出される(Load1)。この処理と並行して、図25Bの矢印713に示されるように、外部メモリ383から入出力バッファ382のバンクBに係数がストア((DMA)Store2)される。そのストアおよび読み出しが完了すると、次に、図25Cの矢印714に示されるように、入出力バッファ382のバンクBから外部メモリ入出力制御部381に係数が転送(Load2)される。この処理と並行して、図25Cの矢印715に示されるように、外部メモリ383から入出力バッファ382のバンクAに係数がストア((DMA)Store3)される。以上のように、入出力バッファ382は、係数の入出力を並行して行うことができる。
したがって、外部メモリ383からの係数の読み出し時に利用される領域のメモリバンク構成を1バンク構成とする場合、図26Aに示されるように、外部メモリ383から入出力バッファ382へのストア(Store1,Store2,Store3,Store4)を、入出力バッファ382から外部メモリ入出力制御部381への読み出し(Load1,Load2,Load3,Load4)およびウェーブレット変換(DWT1,DWT2,DWT3,DWT4)と並行して行うことができず、処理時間が増大する。
これに対して、外部メモリ383からの係数の読み出し時に利用される領域のメモリバンク構成を2バンク構成とする場合、図26Bに示されるように、外部メモリ383から入出力バッファ382へのストア(Store1,Store2,Store3,Store4)を、入出力バッファ382から外部メモリ入出力制御部381への読み出し(Load1,Load2,Load3,Load4)およびウェーブレット変換(DWT1,DWT2,DWT3,DWT4)と並行して行うことができ、1バンク構成の場合と比べて、不要な待機時間を削減し、処理時間を低減させることができる。つまり、外部メモリ383からの係数の読み出し時に利用される領域のメモリバンク構成を2バンク構成とすることにより、図3のエンコーダは、ハードウエア資源の利用効率を向上させることができる。もちろん、バンク数は任意であり3バンク以上としてもよい。
なお、図3のエンコーダをハードウエアにより実現する場合も、上述したソフトウエアプログラムによるエンコーダの場合と同様に、内部メモリ(途中計算バッファ)と外部メモリとを利用することができるエンコーダを実現することができる。つまり、ハードウエア資源の利用効率を向上させるエンコーダを実現することができる。
<4.第4の実施の形態>
[デコーダの構成例]
図27は、図2に示されるサブCPUコア242において実現されるデコーダ(復号装置)の構成例を示すブロック図である。図27に示されるデコーダは、図3を参照して説明したエンコーダの符号化処理に対応する復号処理を行う。詳細については後述するが、このデコーダも、エンコーダの場合と同様に、復号処理におけるウェーブレット逆変換処理を、外部メモリを計画的に用いて行い、途中計算バッファの利用効率を向上させるようになされている。
図27において、デコーダは、プロセッサ801および外部メモリ883のハードウエア資源を用いて実現される。プロセッサ801は、他と独立して動作する1つの演算処理部であり、図2のマイクロプロセッサ201におけるサブCPUコア242の1つに対応する。つまり、図3のプロセッサ301と同様である。換言するに、エンコーダのソフトウエアプログラムが実行されているサブCPUコア242がプロセッサ301であり、デコーダのソフトウエアプログラムが実行されているサブCPUコア242がプロセッサ801である。
図27に示されるように、プロセッサ801は、内部メモリ811を有する。この内部メモリ811は、図3の内部メモリ311と同様の記憶領域である。つまり、内部メモリ811は、外部メモリ883に比べて、容量が小さく、高速にデータの読み出しや書き込みを行うことができる(内部メモリ811は、外部メモリ883より小容量かつ高速にアクセス可能である)。この内部メモリ811の容量は任意であるが、以下においては、256キロバイトとして説明する。当然、容量を増大させれば、プロセッサ801の製造コストは増大する。また、以下においては、データの保持に利用可能な内部メモリ811の空き容量が、全体の半分の128キロバイトであるものとして説明する。
プロセッサ801は、内部メモリ811に保持されるプログラムを実行することにより、入力制御部822、エントロピ復号部823、およびウェーブレット逆変換部812の機能を実現する。
入力制御部822は、後述する入力バッファ821の入出力を制御することにより、エントロピ復号部823へのデータ入力を制御する。エントロピ復号部823は、入力制御部822より供給される入力データ(エンコーダより供給される符号化データ)に対して、図3のエントロピ符号化部326によるエントロピ符号化に対応するエントロピ復号を行い、得られた係数をウェーブレット逆変換部812に供給する。
ウェーブレット逆変換部812は、エントロピ復号部823より供給される係数に対してウェーブレット逆変換を行い、目標解像度の画像データを生成する。ウェーブレット逆変換は、ウェーブレット変換処理により低域成分と高域成分に分割された係数を合成するフィルタ処理を水平方向と垂直方向の両方に対して行う処理である。ウェーブレット逆変換処理においては、このようなフィルタ処理が再帰的に繰り返される。例えば、ある分割レベルにおいてフィルタ処理により得られる係数を、1つ下位の分割レベルの水平方向および垂直方向に低域な成分(LL成分)とし、その分割レベルの他の成分と合わせて再度フィルタ処理が行われる。このようなフィルタ処理の繰り返しが、目標解像度の画像データが得られるまで繰り返される。
なお、ウェーブレット変換・ウェーブレット逆変換は、スケーラブルな係数変換であり、分割レベルの階層数が、ウェーブレット変換処理とウェーブレット逆変換処理とで一致する必要はない。つまり、復号後の画像データの解像度(目標解像度)は、符号化前のベースバンドの画像データの解像度より小さくてもよい。ただし、外部メモリ883の使用を計画的に行うために、ウェーブレット逆変換における分割レベルの階層数は、予め定められている必要がある。この階層数は、デコーダにおいて予め定められていてもよいし、エンコーダより指定されるようにしてもよい。以下においては、説明の便宜上、復号後の画像データの解像度(目標解像度)と、符号化前のベースバンドの画像データの解像度が互いに等しい(分割レベルの階層数がウェーブレット変換処理とウェーブレット逆変換処理とで一致する)ものとして説明する。
ウェーブレット逆変換部812は、このようなフィルタ処理を行うフィルタ処理部824を有する。フィルタ処理部824は、垂直合成フィルタ部831と水平合成フィルタ部832を有する。垂直合成フィルタ部831は、画面垂直方向に低域成分と高域成分を合成する垂直合成フィルタ処理を行う。水平合成フィルタ部832は、画面水平方向に低域成分と高域成分を合成する水平合成フィルタ処理を行う。垂直合成フィルタ処理は、例えばエントロピ復号部823等より供給される入力データに対して行われ、水平合成フィルタ処理は、垂直合成フィルタ処理結果に対して行われる。垂直合成フィルタ処理および水平合成フィルタ処理が行われることにより、係数は、画面垂直方向および水平方向に合成され、LL成分、HL成分、LH成分、およびHH成分の4つの成分が合成され、1つの成分の係数(またはベースバンドの画像データ)が生成される。
上述したように、エンコーダにおいてウェーブレット変換処理が分割レベル3まで実行されていた場合、分割レベル3、分割レベル2、分割レベル1の順に各分割レベルにおいて合成フィルタ処理(ウェーブレット逆変換)が実行される。また、以上の2つのフィルタ処理は、垂直合成フィルタリング、水平合成フィルタリングの順に行われる。なお、フィルタ処理を水平合成フィルタリング、垂直合成フィルタリングの順に行うようにしてもよい。
ウェーブレット逆変換部812は、途中計算バッファ制御部825、外部メモリ入出力制御部881、および出力制御部827を有する。途中計算バッファ制御部825は、フィルタ処理部824により生成される合成フィルタ処理結果や処理途中の係数の入出力を制御する。途中計算バッファ制御部825は、次回以降の合成フィルタ処理において再利用されるデータの保持を制御する。外部メモリ入出力制御部881は、所定の分割レベルにおける合成フィルタ処理の結果の保持を制御する。出力制御部827は、フィルタ処理部824による合成フィルタ処理結果であるベースバンドの画像データ(原画像351)のプロセッサ801からの出力を制御する。
内部メモリ811には、エントロピ復号部823に入力される符号化データ、並びに、フィルタ処理部824のフィルタ処理の処理結果や処理途中の係数データ等が一時的に保持される。内部メモリ811には、これらのデータを保持するために、入力バッファ821、途中計算バッファ826、入出力バッファ882、および出力バッファ828が形成される。入力バッファ821は、エントロピ復号部823に入力される前の符号化データ(エンコーダより供給される符号化データ)を保持する。入力バッファ821の読み出しは入力制御部822に制御される。途中計算バッファ826は、合成フィルタ処理結果または途中の係数データのうち、次回以降の合成フィルタ処理に使用される係数データを、分割レベル毎に独立して保持する。つまり、途中計算バッファ826は、合成フィルタ処理の演算過程として得られる係数、または、第1の目標分割レベルより上位(第1の目標分割レベルを含む)の合成フィルタ処理の演算結果として得られるLL成分の係数を、その分割レベル毎に保持する。その保持している係数は、必要に応じて読み出され、次回以降のフィルタ処理に提供される。途中計算バッファ826のデータの入出力は、途中計算バッファ制御部825により制御される。なお、この途中計算バッファ826は、外部メモリ883に比べて小容量であり、かつ、高速にアクセス可能である。入出力バッファ882は、合成フィルタ処理結果であり、次回の合成フィルタ処理に利用する係数データのうち、外部メモリ883に保持させる係数データを保持する。入出力バッファ882のデータの入出力は、外部メモリ入出力制御部881に制御される。出力バッファ828は、フィルタ処理部824による合成フィルタ処理により生成されたベースバンドの画像データを保持する。出力バッファ828のデータの入出力は、出力制御部827により制御される。
図28に示されるように、内部メモリ811(途中計算バッファ826)に保持される係数は、分割レベル3、分割レベル2、分割レベル1の順に、水平サイズの大きさが2倍ずつ大きくなる。つまり、フィルタ処理の進行方向は逆だが(合成フィルタ処理の場合、上位層から下位層へ向かう順に進む)、各階層において保持される係数の量は、図12に示されるウェーブレット変換の場合と同様である。
外部メモリ883は、プロセッサ801とは別に形成される記憶領域であり、例えば、図2のXDR-RAM203に対応する。つまり、外部メモリ883は、図3と外部メモリ383に対応するものであり、例えば図2に示されるシステムにおいてエンコーダおよびデコーダの両方が実現される場合、すなわち、例えば図2のサブCPUコア242−1においてエンコーダが実現され、サブCPUコア242−2においてデコーダが実現されるような場合、エンコーダとデコーダが互いに共通の外部メモリを使用するようにしてもよい。外部メモリ883は、内部メモリ811に対して、例えば、回路規模が小さく実装密度を上げやすい、消費電力が小さい、動作が低速、および、読み書きの手順が複雑であるといった特徴を有する。つまり、外部メモリ883は、内部メモリ811に比べて、動作が低速であるものの、大容量のデータを保持することができる。
[動作説明]
次に、図27に示されるデコーダの動作について説明する。例えば、XDR-RAM203等の外部メモリ883や、HDD205に記憶されている符号化ストリーム353は、ウェーブレット逆変換処理の処理単位ごとに読み出され、共有バス245を介して、矢印861に示されるように入力バッファ821に供給され、一時的に保持される。入力制御部822は、入力バッファ821に所定量(例えば、ウェーブレット逆変換処理の処理単位)の符号化データが蓄積されると、矢印862に示されるようにそれを読み出し、矢印863に示されるようにエントロピ復号部823に供給する。エントロピ復号部823は、供給される符号化データを復号し、得られた係数を矢印864のようにウェーブレット逆変換部812のフィルタ処理部824に供給する。
フィルタ処理部824の垂直合成フィルタ部831は、入力された、LL成分、HL成分、LH成分、およびHH成分の各成分の係数に対して垂直合成フィルタリングを行う。途中計算バッファ制御部825は、その垂直合成フィルタリング結果(垂直方向に低域成分と高域成分が合成された係数)を、適宜、矢印865のように取得し、矢印866のように途中計算バッファ826に保持させる。所定ライン数(例えば6ライン)の係数が蓄積されると、途中計算バッファ制御部825は、矢印867のように読み出し、矢印868のようにフィルタ処理部824に供給する。水平合成フィルタ部832は、その係数に対して水平合成フィルタリングを行う。
実際には、垂直合成フィルタリングおよび水平合成フィルタリングの各処理は、リフティング演算を用いて行われる。例えば図29に示されるように、9×7フィルタの場合には6ライン分のバファリングが必要であり、画面上から下方向にライン入力がある。従って、ライン1が最新の入力ということになる。図29の左図のケース1では最上部から6ライン分の垂直方向の係数(低域(○)、高域(□))が並んでおり、リフティング演算は画面左から右方向に行われる。Step1からStep4まで実行することで、ライン5の係数が得られる。図中の赤丸及び赤四角の記号は、6ラインに入っている実際の係数である。それまでの係数は途中計算用としてバッファされ、次の演算に使用される。
次に垂直方向にラインをずらしながらフィルタリングを行うが、1ライン入力してもリフティング演算は出来ないので、本実施形態では2ラインずらす。その結果がケース2になる。ケース1と同様に左から右の時間方向にリフティング演算を行い、Step3まで行う。次のStep4は、ライン6の□の係数が必要であるが、これはケース1のライン4で生成された係数をそのまま使えば良い。
以上の動作により、ケース2のStep4とStep3の出力が、次のレベルの低域成分(LL)として使われる。これを図28で説明すると、例えば分割レベル3でのライン6とライン5のLL成分出力が、分割レベル2のライン1に入力することを示している。同様にして、レベル2でのライン6とライン5のLL成分出力が、レベル1のライン1に入力することを示している。つまり、垂直合成フィルタ部831は、垂直方向のフィルタリングを実行するのに必要なNラインのサンプルが用意でき次第、垂直合成フィルタリングを実行する。また、水平合成フィルタ部832は、水平方向のフィルタリングを実行するのに必要なMコラムのサンプルが用意でき次第、水平合成フィルタリングを実行する。
フィルタ処理部824は、目標の分割レベルに達するまで、合成フィルタ処理を再帰的に繰り返す。そこで、途中計算バッファ制御部825は、算出された係数を、矢印865に示されるようにフィルタ処理部824より取得し、矢印866に示されるように途中計算バッファ826に保持させる。また、途中計算バッファ制御部825は、合成フィルタリングにおいて生成されたリフティング演算途中の係数の一部も、同様に途中計算バッファ826に保持させる。途中計算バッファ制御部825は、フィルタ処理部824による次(1つ下位)の分割レベルを対象とする合成フィルタ処理のために、途中計算バッファ826に保持されている係数を、適宜、矢印867のように読み出し、矢印868に示されるようにフィルタ処理部824に供給する。フィルタ処理部824は、処理対象分割レベルを1つ下位のレベルに更新し、途中計算バッファ制御部825により途中計算バッファ826より読み出された係数をLL成分とし、その他の成分をエントロピ復号部823より取得し、それらの係数に対して垂直合成フィルタリングや水平合成フィルタリングを行う。
フィルタ処理部824は、1つ目の目標分割レベル(第1の目標分割レベル)に達するまで、各分割レベルのLL成分に対して、このようにフィルタ処理を再帰的に繰り返す。第1の目標分割レベルの係数(後にLL成分として使用される係数)は、途中計算バッファ826ではなく外部メモリ883に保持される。外部メモリ入出力制御部881は、第1の目標分割レベルの係数が生成されると、それを、矢印869に示されるようにフィルタ処理部824より取得し、矢印870および矢印871に示されるように、入出力バッファ882を介して外部メモリ883に保持させる。
そして、フィルタ処理の処理対象レベルが第1の目標分割レベルになると、外部メモリ入出力制御部881は、外部メモリ883に保持されている係数を、矢印872および矢印873に示されるように入出力バッファ882を介して読み出し、矢印874に示されるようにフィルタ処理部824に供給する。この係数は、LL成分として使用される。垂直合成フィルタ部831は、この外部メモリ883より読み出されたLL成分の係数と、エントロピ復号部823より供給された、第1の目標分割レベルのその他の成分や演算途中の係数を用いて、垂直合成フィルタリングを行う。水平合成フィルタリングは、これまでの階層と同様に行われる。この第1の目標分割レベルにおける合成フィルタ処理結果は、途中計算バッファ826に保持される。それ以降、フィルタ処理部824は、分割レベルが2つ目の目標分割レベル(第2の目標分割レベル)に達するまで、上述したように、各分割レベルの係数に対してフィルタ処理を再帰的に繰り返す。このとき、生成されるLL成分の係数や途中の係数は、途中計算バッファ制御部825の制御によって、適宜、途中計算バッファ826に保持され、必要に応じて利用される。以上のようにして生成された第2の目標分割レベルの係数、すなわち、ベースバンドの画像データは、矢印875に示されるように出力制御部827により取得される。出力制御部827は、取得した係数を矢印876および矢印877に示されるように、出力バッファ828を介して、原画像351として、プロセッサ801の外部に出力する。
仮に、従来のように、ウェーブレット逆変換処理において生成される各分割レベルの係数を、全て途中計算バッファ826に保持させるとすると、エンコーダの場合と同様に、途中計算バッファ826の容量よりも係数のデータ量の方が大きくなる。つまり、従来の方法では、途中計算バッファ826では容量が不足する。この場合、容量不足分の係数は外部メモリ883に保持させる必要があるため、この係数保持を無計画に行うと、外部メモリ883へのアクセス数が増大し、遅延時間が不要に増大する恐れがある。例えば、大容量の外部メモリ883を単純に優先的に利用するようにすると、途中計算バッファ826は使用されず、処理速度が不要に低下してしまう恐れがあった。逆に、高速に読み書き可能な途中計算バッファ826を単純に優先的に使用するようにすると、分割レベルの深い階層において外部メモリ883が使用されるので、アクセス頻度が増大し、処理速度が不要に低下してしまう恐れがあった。
そこで、図27に示される本発明を適用したデコーダは、所定の階層の分割レベル(第1の目標分割レベル)を予め定め、その予め定められた第1の目標分割レベルのLL成分のみを外部メモリ883に保持させるようにする。例えば、この第1の目標分割レベルを分割レベル1とすると、図30Aに示されるように、分割レベル1になるまで合成フィルタ処理が繰り返される。そして生成された分割レベル1の係数は、外部メモリ883に保持された後、分割レベル1のLL成分(1LL)の係数として読み出され、分割レベル1の合成フィルタ処理に使用される。つまり、第1の目標分割レベルの1つ上位の分割レベルの係数まで途中計算バッファ826に保持し、第1の目標分割レベルのLL成分を外部メモリ883に一時的に退避させる。第1の目標分割レベルの1つ上位のフィルタ処理が完了すると、途中計算バッファ826に保持される上位の階層の係数が不要になる。そこで、外部メモリ883に保持される第1の目標分割レベルの係数を用いてそれ以降の階層に対するフィルタ処理が開始される。このとき途中計算バッファ826に空き容量が生じるので、それ以降に生成される係数は、途中計算バッファ826に保持させることができる。つまり、外部メモリ883を用いることにより、途中計算バッファ826を、時間的に2回に分けて利用する。
なお、第1の目標分割レベルより前のウェーブレット変換をステップ1とし、第1の目標分割レベル以降のウェーブレット変換をステップ2とする。ステップ1とステップ2は時間的にずれているので、この場合、途中計算バッファ826の容量は、98Kバイト以上あればよい。つまり、ウェーブレット変換処理全体において、途中計算バッファ826に、途中計算バッファ826の記憶容量以上の容量の係数を保持させることができる。
以上のように制御することにより、高速に読み書き可能な途中計算バッファ826をより多く利用し、外部メモリ883の利用を必要最小限に抑制することができるので、外部メモリ883を利用することによる処理時間の増大を抑制することができる。すなわち、図27に示されるデコーダは、よりハードウエア資源をより有効に利用することができ、ウェーブレット変換を用いた復号処理をより容易かつより高速に行うことができる。このように、図27に示されるデコーダは、復号処理全体の処理時間を低減させることができるとともに、コストの増大を抑制することができる。
[処理の流れの説明]
次に以上のような復号処理の流れの例を、図31のフローチャートを参照して説明する。図27のデコーダは、この復号処理を、原画像351のラインブロックに対応する所定量の符号化データ毎に実行する。
復号処理が開始されると、入力制御部822、エントロピ復号部823、およびウェーブレット逆変換部812は、ステップS401において、入力バッファ821に入力された符号化データを復号し、得られた係数に対して垂直合成フィルタリングを行う第1復号垂直合成フィルタ処理を行う。第1復号垂直合成フィルタ処理の詳細については後述する。第1復号垂直合成フィルタ処理が終了すると、ウェーブレット逆変換部812は、ステップS402において、処理後の分割レベルが第1の目標分割レベルであるか否かを判定する。現在の処理対象分割レベルが第1の目標分割レベルの1つ上位でなく、フィルタ処理により第1の目標分割レベルの係数が生成されないと判定された場合、処理はステップS403に進む。
ステップS403において、ウェーブレット逆変換部812は、垂直合成フィルタ処理結果に対して水平合成フィルタリングを行い、生成した係数を途中計算バッファ826に保持させる処理である第1水平合成フィルタ処理を行う。第1水平合成フィルタ処理の詳細については後述する。第1水平合成フィルタ処理が行われると、ウェーブレット逆変換部812は、ステップS404において、処理対象分割レベルを1つ下位の分割レベルに更新し、内部メモリ811の途中計算バッファ826に保持した合成結果の係数を、処理対象分割レベルのLL成分とし、入力データとする。ウェーブレット逆変換部812、エントロピ復号部823、および入力制御部822は、ステップS405において、入力バッファ821に入力された符号化データを復号し、得られた処理対象分割レベルのHL成分、LH成分、およびHH成分の係数と、途中計算バッファ826より読み出したLL成分とに対して垂直合成フィルタリングを行う第2復号垂直合成フィルタ処理を行う。第2復号垂直合成フィルタ処理の詳細については後述する。
ステップS405の処理が終了すると、処理は、ステップS402に戻る。つまり、入力制御部822、エントロピ復号部823、およびウェーブレット逆変換部812は、ステップS402において処理後の分割レベルが第1の目標分割レベルであると判定されるまで、ステップS402乃至ステップS405の処理を繰り返し実行する。そして、ステップS402において、現在の処理対象分割レベルが第1の目標分割レベルの1つ上位であり、フィルタ処理により第1の目標分割レベルの係数が生成されると判定された場合、処理はステップS406に進む。
ステップS406において、ウェーブレット逆変換部812は、垂直合成フィルタ処理結果に対して水平合成フィルタリングを行い、生成した第1目標分割レベルの係数を外部メモリ883に保持させる処理である第2水平合成フィルタ処理を行う。第2水平合成フィルタ処理の詳細については後述する。ここまでのステップS401乃至ステップS406が、上述した「ステップ1」の処理として実行される。
第1目標分割レベルの係数(LL成分)が外部メモリ883に蓄積され、第2水平合成フィルタ処理が終了すると、処理はステップS411に進む。ステップS411において、ウェーブレット逆変換部812は、処理対象分割レベルを1つ下位の分割レベルに更新し、外部メモリ883に保持した合成結果の係数を、処理対象分割レベルのLL成分とし、入力データとする。ステップS412において、ウェーブレット逆変換部812、エントロピ復号部823、および入力制御部822は、第3復号垂直合成フィルタ処理を行う。第3復号垂直合成フィルタ処理の詳細については後述する。
ステップS413において、ウェーブレット逆変換部812は、処理後の分割レベルが第2の目標分割レベルであるか否かを判定する。現在の処理対象分割レベルが第2の目標分割レベルの1つ上位でなく、フィルタ処理により第2の目標分割レベルの係数が生成されないと判定された場合、処理はステップS414に進む。
ステップS414において、ウェーブレット逆変換部812は、垂直合成フィルタ処理結果に対して第1の水平合成フィルタ処理を行う。ステップS415において、ウェーブレット逆変換部812は、処理対象分割レベルを1つ下位の階層に更新し、内部メモリ811の途中計算バッファ826に保持される合成結果の係数をLL成分とする。ステップS416において、ウェーブレット逆変換部812は、第2復号垂直合成フィルタ処理を行う。ステップS416の処理が終了されると、処理は、ステップS413に戻る。
ステップS413において、処理後の分割レベルが第2の目標分割レベルに達したと判定された場合、処理はステップS417に進む。ステップS417において、ウェーブレット逆変換部812は、垂直合成フィルタ処理結果に対して水平合成フィルタリングを行い、生成した第2の目標分割レベルの係数を出力させる処理である第3水平合成フィルタ処理を行う。第3水平合成フィルタ処理の詳細については後述する。ここまでのステップS411乃至ステップS417が、上述した「ステップ2」の処理として実行される。
以上のようにステップS417の処理が終了されると、復号処理が終了される。このように、外部メモリ883を利用して、復号処理をステップ1とステップ2の2つに分けて行うようにしたので、図27のデコーダは、復号処理全体において、途中計算バッファ826に実際の記憶容量以上の情報を保持させることができ、ハードウエア資源の利用効率を向上させることができる。
次に、図32のフローチャートを参照して、第1復号垂直合成フィルタ処理の流れの詳細な例を説明する。
第1復号垂直合成フィルタ処理が開始されると、入力制御部822は、ステップS431において、内部メモリ811の入力バッファ821から処理対象分割レベルの各成分の処理単位ライン数の符号化データを入力し、エントロピ復号部823に供給する。エントロピ復号部823は、ステップS432において、供給された符号化データを復号する。
ステップS433において、途中計算バッファ制御部825は、内部メモリ311の途中計算バッファ826から、垂直合成フィルタリングに必要なその他の係数を読み出す。フィルタ処理に必要な係数が揃うと、垂直合成フィルタ部831は、ステップS434において、ステップS432およびステップS433の処理により得られた係数に対して垂直合成フィルタリングを行う。ステップS435において、途中計算バッファ制御部825は、その垂直方向の合成結果の係数を内部メモリ811の途中計算バッファ826に保持させる。ステップS436において、途中計算バッファ制御部825は、次回の合成フィルタ処理に必要なその他の係数を内部メモリ811の途中計算バッファ826に保持させる。
ステップS437において、ウェーブレット逆変換部812は、内部メモリ811の入力バッファ821に保持される処理対象分割レベルの符号化データを全て処理したか否かを判定する。全て処理していないと判定された場合、処理は、ステップS431に戻り、それ以降の処理を繰り返す。すなわち、ウェーブレット逆変換部812は、入力バッファ821に保持される処理対象分割レベルの符号化データに対して、ステップS431乃至ステップS437の処理を繰り返し実行することにより、所定量単位で垂直合成フィルタリングを行う。ステップS437において、内部メモリ811の入力バッファ821に保持される画像データ(ラインブロック)を全て処理したと判定された場合、第1復号垂直合成フィルタ処理が終了され、処理は、図31のステップS401に戻り、ステップS402に進む。
次に、図33のフローチャートを参照して、第1水平合成フィルタ処理の流れの詳細な例を説明する。
第1水平合成フィルタ処理が開始されると、途中計算バッファ制御部825は、ステップS451において、内部メモリ811の途中計算バッファ826から処理対象分割レベルにおける垂直合成フィルタリング結果の各成分の処理単位ライン数(例えば6ライン)の係数を読み出す。また、途中計算バッファ制御部825は、ステップS452において、内部メモリ811の途中計算バッファ826から水平合成フィルタリングに必要なその他の係数を読み出す。ステップS453において、水平合成フィルタ部832は、ステップS451およびステップS452の処理により読み出された各係数を用いて水平合成フィルタリングを行う。ステップS454において、途中計算バッファ制御部825は、水平方向の合成結果の係数を内部メモリ811の途中計算バッファ826に保持させる。ステップS455において、途中計算バッファ制御部825は、次回のフィルタ処理に必要なその他の係数を内部メモリ811の途中計算バッファ826に保持させる。
ステップS456において、ウェーブレット逆変換部812は、内部メモリ811の途中計算バッファ826に保持される処理対象分割レベルにおける垂直合成フィルタリング結果の係数を全て処理したか否かを判定する。全て処理していないと判定された場合、処理は、ステップS451に戻り、それ以降の処理を繰り返す。
すなわち、ウェーブレット逆変換部812は、途中計算バッファ826に保持される、処理対象分割レベルの係数に対して、所定量の係数毎にステップS451乃至ステップS456の処理を繰り返し実行する。
ステップS456において、内部メモリ811の途中計算バッファ826に保持される処理対象分割レベルにおける垂直合成フィルタリング結果の係数を全て処理したと判定された場合、処理は図31に戻る。図31のステップS403において実行された第1水平合成フィルタ符号化処理の場合、処理は、図31のステップS403に戻り、ステップS404に進む。また、図31のステップS414において実行された第1水平分析フィルタ符号化処理の場合、処理は、図31のステップS414に戻り、ステップS415に進む。
次に、図34のフローチャートを参照して、第2復号垂直合成フィルタ処理の流れの詳細な例を説明する。第2復号垂直合成フィルタ処理の処理内容は、基本的に第1復号垂直合成フィルタ処理と同様であるが、第2復号垂直合成フィルタ処理は、途中計算バッファ826に保持される、1つ上位の分割レベルにおいて算出された合成結果をLL成分とし、そのLL成分を用いた垂直合成フィルタ処理を行う。
したがって、第2復号垂直合成フィルタ処理が開始されると、入力制御部822は、ステップS471において、内部メモリ811の入力バッファ821から処理対象分割レベルの、HL成分、LH成分、およびHH成分の処理単位ライン数の符号化データを入力し、エントロピ復号部823に供給する。エントロピ復号部823は、ステップS472において、供給された符号化データを復号する。ステップS473において、途中計算バッファ制御部825は、内部メモリ311の途中計算バッファ826から、処理対象分割レベルのLL成分の処理単位ライン数の係数を読み出す。
ステップS474乃至ステップS478の各処理は、図32のステップS433乃至ステップS437の各処理と同様に実行される。ステップS478において、内部メモリ811の入力バッファ821に保持される画像データ(ラインブロック)を全て処理したと判定された場合、第2復号垂直合成フィルタ処理が終了され、処理は図31に戻る。図31のステップS405において実行された第2復号垂直合成フィルタ処理の場合、処理は、図31のステップS405に戻り、さらにステップS402に戻る。また、図31のステップS416において実行された第2復号垂直合成フィルタ処理の場合、処理は、図31のステップS416に戻り、さらに図31のステップS413に戻る。
次に、図35のフローチャートを参照して、第2水平合成フィルタ処理の流れの詳細な例を説明する。第2水平合成フィルタ処理の処理内容は、基本的に第1水平合成フィルタ処理と同様であるが、第2水平合成フィルタ処理は、算出した合成結果を、外部メモリ883に保持させる。
つまり、第2水平合成フィルタ処理が開始されると、途中計算バッファ制御部825および水平合成フィルタ部832は、ステップS491乃至ステップS493の各処理を、図33のステップS451乃至ステップS453の各処理と同様に実行し、水平合成フィルタリングを行う。ステップS494において、外部メモリ入出力制御部881は、ステップS493の処理により生成された合成結果の係数を、内部メモリ811の入出力バッファ882に保持させる。ステップS495において、外部メモリ入出力制御部881は、ステップS494の処理により入出力バッファ882に保持される合成結果の係数を、外部メモリ883に書き込む。
ステップS496およびステップS497の各処理は、図33のステップS455およびステップS456の各処理と同様に行われる。ステップS497において、内部メモリ811の途中計算バッファ826に保持される処理対象分割レベルにおける垂直合成フィルタリング結果の係数を全て処理したと判定された場合、処理は図31のステップS406に戻り、ステップS411に進む。
次に、図36のフローチャートを参照して、第3復号垂直合成フィルタ処理の流れの詳細な例を説明する。第3復号垂直合成フィルタ処理の処理内容は、基本的に第1復号垂直合成フィルタ処理と同様であるが、第3復号垂直合成フィルタ処理は、外部メモリ883に保持される、1つ上位の分割レベルにおいて算出された合成結果をLL成分とし、そのLL成分を用いた垂直合成フィルタ処理を行う。
したがって、第3復号垂直合成フィルタ処理が開始されると、入力制御部822は、ステップS511において、内部メモリ811の入力バッファ821から処理対象分割レベルの、HL成分、LH成分、およびHH成分の処理単位ライン数の符号化データを入力し、エントロピ復号部823に供給する。エントロピ復号部823は、ステップS512において、供給された符号化データを復号する。ステップS513において、外部メモリ入出力制御部881は、外部メモリ883から、処理対象分割レベルのLL成分の処理単位ライン数の係数を読み出し、内部メモリ811の入出力バッファ882に保持させる。ステップS514において、外部メモリ入出力制御部881は、内部メモリ811の入出力バッファ882から、ステップS513の処理により保持させたLL成分の係数を読み出し、フィルタ処理部824に入力する。
ステップS515乃至ステップS519の各処理は、図32のステップS433乃至ステップS437の各処理と同様に実行される。ステップS519において、内部メモリ811の入力バッファ821に保持される処理対象分割レベルの符号化データを全て処理したと判定された場合、第3復号垂直合成フィルタ処理が終了され、処理は、図31のステップS412に戻り、ステップS413に進む。
次に、図37のフローチャートを参照して、第3水平合成フィルタ処理の流れの詳細な例を説明する。第3水平合成フィルタ処理の処理内容は、基本的に第1水平合成フィルタ処理と同様であるが、第3水平合成フィルタ処理は、算出した合成結果の係数を、プロセッサ801の外部に出力する。
つまり、第3水平合成フィルタ処理が開始されると、途中計算バッファ制御部825および水平合成フィルタ部832は、ステップS531乃至ステップS533の各処理を、図33のステップS451乃至ステップS453の各処理と同様に実行し、水平合成フィルタリングを行う。ステップS534において、出力制御部827は、ステップS533の処理により生成された合成結果の係数(ベースバンドの画像データ)を、出力バッファ828を介してプロセッサ801の外部に出力させる。ステップS535およびステップS536の各処理は、図33のステップS455およびステップS456の各処理と同様に実行される。
ステップS536において、内部メモリ811の途中計算バッファ826に保持される処理対象分割レベルにおける垂直合成フィルタリング結果の係数を全て処理したと判定された場合、処理は図31のステップS417に戻り、復号処理が終了される。
以上のように、第1の目標分割レベルを外部メモリ883に保持させることにより、分割レベル毎に再帰的に繰り返されるフィルタ処理を、ステップ1とステップ2の2つに分ける。このようにすることにより、途中計算バッファ826を、ステップ1とステップ2の2回に分けて利用することができ、途中計算バッファ826の実際の記憶容量より多い量の係数を途中計算バッファ826に保持させることができる。つまり、途中計算バッファ826の記憶容量を時分割して利用することにより擬似的に記憶容量を増大させることができる。したがって、途中計算バッファ826の利用効率を向上させることができる。
なお、この第1目標分割レベルとする分割レベルは、ウェーブレット変換処理の最終分割レベルである第2目標分割レベルより上位の階層であれば、任意の分割レベルとしてよい。ただし、途中計算バッファ826(内部メモリ811)として必要な記憶容量、つまり、ステップ1において必要な容量とステップ2において必要な容量の大きい方の値ができるだけ小さくなるようにするのが望ましい。図28に示されるように、保持される係数は、分割レベルが上位になる毎に半減する。したがって、分割レベル1を第1目標分割レベルとするのが望ましい。
なお、例えば、第1目標分割レベルとして複数の分割レベルを設定するようにしてもよい。また、LL成分の保存先の切り替えを、ある分割レベルの水平合成フィルタリング中に行うようにしても良い。いずれも符号化処理の場合と同様である。また、図27に示されるデコーダにおいても、入出力バッファ882のメモリバンク構成を1バンク構成としてもよいし、2バンク構成としてもよい。符号化処理の場合と同様に、2バンク構成とする方が、入出力バッファ882に対するデータの入出力を、ウェーブレット逆変換処理と並行して行うことができる。つまり、ハードウエア資源の利用効率を向上させることができる。
なお、エンコーダの場合に説明したように、デコーダの場合も、入出力バッファ882のメモリバンクの構成を複数バンクとしてもよい。入出力バッファ882のメモリバンクを2バンク以上とすることにより、外部メモリ883への情報の読み出しや書き込みを、ウェーブレット逆変換処理と並行して行うことができるようになる。
以上のように、図3のエンコーダと図27のデコーダは、例えば、図2に示される情報処理システム100の情報処理装置101により実現される。マイクロプロセッサ201には、複数のサブCPUコア242が設けられているが、このような場合、一部または全部のサブCPUコア242のそれぞれにおいて、図3のエンコーダまたは図27のデコーダを実現するようにしてもよい。つまり、マイクロプロセッサ201において、例えば、1つまたは複数のエンコーダを実現するようにしてもよいし、1つまたは複数のデコーダを実現するようにしてもよいし、エンコーダおよびデコーダの両方を実現するようにしてもよい。
本発明を適用した図3のエンコーダおよび図27のデコーダは、複数の記憶領域を計画的に利用することにより、ハードウエア資源の利用効率を向上させるものであるので、複数の記憶領域を有する情報処理装置であれば実現可能であり、図2に示される情報処理装置101以外において実現することもできる。例えば、シングルコアのプロセッサを1つ有するパーソナルコンピュータにおいても実現することができる。もちろん、マルチコアプロセッサであってもよいし、複数の記憶領域を有する限り、プロセッサの個数等、各種ハードウエア構成は任意である。
また図3および図27においては、利用する記憶領域を内部メモリと外部メモリとして説明したが、どのような記憶領域を利用するようにしてもよい。例えば図2の情報処理装置101を適用する場合、エンコーダおよびデコーダの外部メモリや内部メモリは、例えば、各サブCPUコア242の内部メモリ、XDR-RAM203、HDD205、GPU202の内部メモリ、メインCPUコア241の内部メモリ、または、他のサブCPUコア242の内部メモリ等、どの記憶領域を用いて実現するようにしてもよい。また、複数の記憶領域を用いて実現するようにしてもよい。
ただし、本発明を適用することにより、複数の記憶領域を計画的に利用するエンコーダやデコーダを実現することができる。したがって、主に利用する記憶領域の容量が制限され、ウェーブレット変換や逆ウェーブレット変換において保持する必要のある係数を全て保持することができないが、他の記憶領域を利用することにより全ての係数を保持することができる情報処理装置において実現する場合の方が、本発明を適用することにより得られる効果はより大きくなる。また、本発明を適用することにより、主に利用する記憶領域をより有効に利用するエンコーダまたはデコーダを実現することができるので、主に利用する記憶領域へのアクセス速度(情報の読み出しや書き込みの速度)が他の記憶領域に比べて高速である情報処理装置において実現する場合の方が、本発明を適用することにより得られる効果はより大きくなる。
なお、この記憶領域のアクセス速度は、記憶領域の特性によるものであってもよいし、その記憶領域が接続されるバスの特性によるものであってもよい。また、例えば、専用バスで接続される専用メモリと、共有バスで接続される共有メモリのような統計的なアクセス速度の差も考えられる。
特に、図3や図27を参照して説明したような内部メモリや外部メモリを利用する場合、本発明を適用することにより、各記憶領域へのアクセス制御をより適切に行うことができる。また、実行される符号化処理および復号処理も任意であるが、上述したようなウェーブレット変換またはウェーブレット逆変換を利用した、所定数のライン単位で行われる符号化処理または復号処理の場合、本発明を適用することにより、各フローチャートを参照して説明したように、より適切に各記憶領域へのアクセス制御を行うことができ、ハードウエア資源の利用効率をより向上させることができる。
なお、以上においては、エンコーダまたはデコーダとして説明したが、本発明は、ウェーブレット変換・ウェーブレット逆変換の各処理においてハードウエア資源の利用効率を向上させるものである。したがって、エントロピ符号化部326やエントロピ復号部823は、省略することができる。例えば、図3のエンコーダの場合、エントロピ符号化部326を他のプロセッサにおいて実現するようにし、出力制御部327がフィルタ処理部323の出力を、出力バッファ328を介して、プロセッサ301の外部にあるその他のプロセッサに出力するようにしてもよい。同様に、例えば、図27のデコーダの場合、エントロピ復号部823を他のプロセッサにおいて実現するようにし、入力制御部822が、エントロピ復号部823の出力を、入力バッファ821を介してプロセッサ801の外部より取得するようにしてもよい。
上述した一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、ネットワークや記録媒体からインストールされる。この記録媒体は、例えば、図2に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc - Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini Disc)を含む)、もしくは半導体メモリなどよりなるリムーバブルメディア111により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているHDD205や記憶装置103に含まれるハードディスクやメモリなどで構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
もちろん、上述した一連の処理は、汎用のハードウエアを用いてソフトウエアを実行することにより実現させることもできるが、専用のハードウエアにより実現させることもできる。
また、本明細書において、システムとは、複数のデバイス(装置)により構成される装置全体を表わすものである。
なお、以上において、1つの装置(または処理部)として説明した構成を分割し、複数の装置(または処理部)として構成するようにしてもよい。逆に、以上において複数の装置(または処理部)として説明した構成をまとめて1つの装置(または処理部)として構成されるようにしてもよい。また、各装置(または処理部)の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置(または処理部)の構成の一部を他の装置(または処理部)の構成に含めるようにしてもよい。つまり、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
本発明を適用したエンコーダおよびデコーダは、例えば、デジタルシネマ用編集装置、アーカイブシステム、放送局の画像伝送装置、画像データベース、医用画像の記録システム、ネットワークサーバ、ノンリニア編集装置、ゲーム機、テレビ受像機システム、HDDレコーダ、PC上のオーサリング・ツールまたはそのソフトウェア・モジュール等として適用することができる。もちろん、これ以外に適用するようにしてもよい。
100 情報処理システム, 101 情報処理装置, 201 マイクロプロセッサ, 203 XDR-RAM, 242 サブCPUコア, 301 プロセッサ, 311 内部メモリ, 312 ウェーブレット変換部, 323 フィルタ処理部, 324 途中計算バッファ制御部, 325 途中計算バッファ, 326 エントロピ符号化部, 381 外部メモリ入出力制御部, 382 入出力バッファ, 383 外部メモリ, 801 プロセッサ, 811 内部メモリ, 812 ウェーブレット逆変換部, 823 エントロピ復号部, 824 フィルタ処理部, 825 途中計算バッファ制御部, 826 途中計算バッファ, 881 外部メモリ入出力制御部, 882 入出力バッファ, 883 外部メモリ