(57)【要約】【課題】フレーム入力から、ビットストリーム出力までの時間を安定させることができるようにする。【解決手段】符号化タスク生成部３１は、符号化プログラムを、ME、TS、およびVLCの機能に分割し、分割された機能に対してエンコードタスクを生成し、そのエンコードタスクに対して、機能毎に設定された優先度を付加し、タスク実行順序制御部３３の優先度キューに投入する。タスク実行順序制御部３３は、符号化タスク生成部３１により投入された優先度キューのタスクに付加された優先度と、リソース負荷検出部３２からのリソースの負荷情報とに基づき、実行すべきタスクを決定し、実行する。本発明は、例えば、画像を符号化する画像符号化装置に適用することができる。【選択図】図６
2011182169.tif 000002
【特許請求の範囲】
【請求項１】
符号化処理を動き予測、変換量子化、および可変長符号化の機能に分割し、分割された機能に対してタスクを生成し、前記機能毎に設定された優先度を付加するタスク生成手段と、
前記タスク生成手段により生成された前記タスクに付加された前記優先度に基づいて、前記タスクの実行を制御する実行制御手段と
を備える符号化装置。
【請求項２】
前記タスク生成手段は、生成された前記タスクに、前記符号化処理の一連の流れにおいて、入力側から出力側に向けて高くなるように前記機能毎に設定された前記優先度を付加する
請求項１に記載の符号化装置。
【請求項３】
前記符号化処理の負荷を監視する負荷監視手段
をさらに備え、
前記実行制御手段は、前記タスクに付加された前記優先度および前記負荷監視手段により監視された前記負荷に基づいて、前記タスクの実行を制御する
請求項２に記載の符号化装置。
【請求項４】
前記負荷監視手段により監視された前記負荷に基づいて、符号化対象のフレームの分割数を決定する分割数決定手段
をさらに備え、
前記タスク生成手段は、分割された機能に対するタスクを、前記分割数決定手段により決定された前記分割数だけ生成し、前記機能毎に設定された前記優先度を付加する
請求項３に記載の符号化装置。
【請求項５】
前記タスク生成手段は、前記動き予測の機能を、さらに、複数のサブ機能に分割して、分割されたサブ機能に対してタスクを生成し、前記サブ機能毎に設定された前記優先度を付加する
請求項２に記載の符号化装置。
【請求項６】
タスク生成手段と、実行制御手段とを備える符号化装置の符号化方法において、
前記タスク生成手段が、符号化処理を動き予測、変換量子化、および可変長符号化の機能に分割し、分割された機能に対してタスクを生成し、前記機能毎に設定された優先度を付加し、
前記実行制御手段が、生成された前記タスクに付加された前記優先度に基づいて、前記タスクの実行を制御する
符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化装置および方法に関し、特に、フレーム入力から、ビットストリーム出力までの時間を安定させることができるようにした符号化装置および方法に関する。
【背景技術】
【０００２】
マルチコア／マルチタスクOS環境においては、動画像符号化プログラム自身を複数の機能やデータに分割して、並列実行させることでプログラムの実行効率をあげることができる（例えば、特許文献１参照）。
【０００３】
しかしながら、マルチタスクOS環境においては、動画像符号化プログラム以外にも多くのタスクが同時に実行されており、また、動画像符号化プログラムも複数のタスクに分割されている。物理コア数以上に実行可能なタスクが存在する場合、それらが実行される順番は、OSが管理するスケジューラの方針に基づいて処理される。
【０００４】
図１には、動画像符号化プログラムを３つのタスクに分割し、複数のフレームについて理想的に処理される様子が示されている。いま、簡単のために、動画像符号化プログラムは、ME(動き予測)、TS(Transform Scaling：変換・量子化)、およびVLC（可変長符号化）という３つのエンコードタスクに分割されているものとする。括弧内のn-1,n,n+1は、それぞれ、フレーム番号を示し、各タスクが、n-1フレーム、ｎフレーム、n+1フレームのタスクであることを表している。
【０００５】
理想的に、物理コア数が３であれば、３つのタスクの同時実行が可能である。すなわち、n-1フレームのMEのタスクが終わると、nフレームのMEのタスクが開始されるとともに、n-1フレームのMEの結果が用いられて、n-1フレームのTSのタスクが開始される。次に、nフレームのMEのタスクが終わると、n-1フレームのTSのタスクも終わる。したがって、n+1フレームのMEのタスクが開始されるとともに、nフレームのMEの結果が用いられて、nフレームのTSのタスクが開始され、n-1フレームのTSの結果が用いられて、n-1フレームのVLCのタスクが開始される。
【０００６】
そして、n+1フレームのMEのタスクが終わると、nのフレームのTSのタスクと、n-1フレームのVLCのタスクも終わる。したがって、n+1フレームのMEの結果が用いられて、n+1フレームのTSのタスクが開始され、nのフレームのTSの結果が用いられて、nフレームのVLCのタスクが開始される。さらに、n+1フレームのTSのタスクが終わると、nフレームのVLCのタスクも終わり、次に、n+1フレームのTS の結果が用いられて、n+1フレームのVLCのタスクが開始される。
【０００７】
ただし、実際のスケジューリングはOSや物理コア数に依存してしまう。例えば、物理コア数２の環境においては、同時実行可能なタスク数は２であり、例えば、図２に示されるように処理される。
【０００８】
図２の例においては、一方のコアでn-1フレームのMEのタスクが終わると、nフレームのMEのタスクが開始され、他方のコアでn-1フレームのMEの結果が用いられて、n-1フレームのTSのタスクが開始される。一方のコアでnフレームのMEのタスクが終わると、そのMEの結果が用いられて、nフレームのTSのタスクが開始される。このとき、他方のコアでn-1フレームのTSのタスクが終わるので、その結果が用いられて、n-1フレームのVLCのタスクが開始される。
【０００９】
また、一方のコアでnフレームのTSのタスクが終わると、そこで、n+1フレームのMEのタスクが開始される。このとき、他方のコアでn-1フレームのVLCのタスクが終わるので、nフレームのTSの結果が用いられて、nフレームのVLCのタスクが開始される。さらに、一方のコアでn+1フレームのMEのタスクが終わると、その結果が用いられて、n+1フレームのTSのタスクが開始される。このとき、他方のコアでnフレームのVLCのタスクが終わるので、n+2フレームのMEのタスクが開始される。
【００１０】
さらに、一方のコアでn+1フレームのTSのタスクが終わると、他方のコアでn+2フレームのMEのタスクが終わる。したがって、一方のコアでn+2フレームのME結果が用いられて、n+2フレームのTSのタスクが開始され、他方のコアでn+1フレームのTS結果が用いられて、n+1フレームのVLCのタスクが開始される。そして、一方のコアでn+2フレームのTSのタスクが終わるので、n+3フレームのMEのタスクが開始される。
【００１１】
しかしながら、図２の左から３つ目のタスクが開始されるタイミングにおいては、n+1番目のフレームのME、n番目のフレームのTS、およびn-1番目のフレームのVLCのタスクがいずれも実行可能であり、実際の実行順序は、OSスケジューラに依存する。したがって、動画像符号化プログラムのタスクは、図２の例に限らず、例えば、次の図３のように実行されることもある。
【００１２】
図３の例においては、一方のコアでn-1フレームのMEのタスクが終わると、nフレームのMEのタスクが開始され、他方のコアでn-1フレームのMEの結果が用いられて、n-1フレームのTSのタスクが開始される。一方のコアでnフレームのMEのタスクが終わると、そのMEの結果が用いられて、nフレームのTSのタスクが開始される。このとき、他方のコアでn-1フレームのTSのタスクが終わるので、n+1フレームのMEのタスクが開始される。
【００１３】
また、一方のコアでnフレームのTSのタスクが終わると、他方のコアでn+1フレームのMEのタスクも終わる。したがって、一方のコアで、n+1フレームのMEの結果が用いられて、n+1フレームのTSのタスクが開始され、他方のコアで、n-1フレームのTSの結果が用いられて、n-1フレームのVLCのタスクが開始される。
【００１４】
一方のコアでn+1フレームのTSのタスクが終わると、nフレームのTS結果が用いられて、nフレームのVLCのタスクが開始される。このとき、他方のコアで、n-1フレームのVLCのタスクが終わるので、n+2フレームのMEのタスクが開始される。
【００１５】
さらに、一方のコアで、nフレームのVLCのタスクが終わり、他方のコアでn+2フレームのMEのタスクが終わると、一方のコアで、n+2フレームのMEの結果が用いられて、n+2フレームのTSのタスクが開始される。このとき、他方のコアで、n+1フレームのTSの結果が用いられて、n+1フレームのVLCのタスクが開始される。そして、一方のコアで、n+2フレームのTSのタスクが終了すると、n+3フレームのMEのタスクが開始される。
【００１６】
ここで、図２のＴ１と図３のＴ２は、どちらも、n-1フレームのMEのタスクが開始されてから、n-1フレームのVLCのタスクが終了するまでの時間を矢印の長さで示している。これらのＴ１およびＴ２の長さは、タスクの実行順序、すなわち、OSスケジューラにより変わってしまう。
【００１７】
また、タスクの分割として、符号化の処理対象のフレームを上下２分割して、並行処理を行うことも可能である。具体的には、図４Ａに示されるように、１つのフレームが、（０）と（１）の上下２つに分割される。そして、一方のコアで、上フレーム（０）のMEのタスクが実行され、他方のコアで下フレーム（１）のMEのタスクが実行され、一旦待ち合わせる。
【００１８】
次に、上フレーム（０）のTSのタスクが実行され、他方のコアで下フレーム（１）のTSのタスクが実行され、一旦待ち合わせる。さらに、上フレーム（０）のVLCのタスクが実行され、他方のコアで下フレーム（１）のVLCのタスクが実行され、一旦待ち合わせる。
【００１９】
なお、図４の場合においても、マルチタスクOS環境であるので、例えば、図５に示されるように、エンコードタスク以外のタスクも実行され、エンコードタスクの処理中に他のタスク実行が混在することもよくある。
【００２０】
例えば、図５においては、一方のコアにおいて、上フレーム（０）のMEのタスクの後に、エンコード以外のタスクが実行され、他方のコアにおいて、下フレーム（１）のTSのタスクの前に、エンコード以外のタスクが実行される例が示されている。すなわち、この場合も、エンコード以外のタスクにより、待ち合わせ時間が延び、VLCのタスクの開始が遅れてしまっている。
【００２１】
なお、上述した図は適宜、本発明を実施するための形態の説明にも用いられる。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２００８−２８７４６０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２３】
以上のように、マルチコア／マルチOS環境においては、MEのタスクを実行してから、VLCのタスクの実行が終了するまでの時間、すなわち、符号化対象のフレームが入力されてからビットストリームに変換されるまでの間が実行の度に変わり得る。これらの変動は、物理コア数を超えたタスク実行の順序が符号化プログラムから制御困難であるため起こり得る。
【００２４】
このような処理時間の変動（揺らぎ）は、一定間隔でフレームを入力して、一定時間内で処理を返す、リアルタイム系のアプリケーションでは、処理落ち、コマ落ちといったことが生じてしまう恐れがある。
【００２５】
例えば、エンコードデータ分割を、MBライン単位のように細かくすることで、処理の充填率を上げる提案もなされているが、そのためには、図４に示した待ち合わせのようなタスク間同期ポイントが増加してしまう。また、環境によっては、同期処理コストが高いものもあり、非効率な結果になる恐れもある。
【００２６】
本発明は、このような状況に鑑みてなされたものであり、フレーム入力から、ビットストリーム出力までの時間を安定させることができるものである。
【課題を解決するための手段】
【００２７】
本発明の一の側面の符号化装置は、符号化処理を動き予測、変換量子化、および可変長符号化の機能に分割し、分割された機能に対してタスクを生成し、前記機能毎に設定された優先度を付加するタスク生成手段と、前記タスク生成手段により生成された前記タスクに付加された前記優先度に基づいて、前記タスクの実行を制御する実行制御手段とを備える。
【００２８】
前記タスク生成手段は、生成された前記タスクに、前記符号化処理の一連の流れにおいて、入力側から出力側に向けて高くなるように前記機能毎に設定された前記優先度を付加することができる。
【００２９】
前記符号化処理の負荷を監視する負荷監視手段をさらに備え、前記実行制御手段は、前記タスクに付加された前記優先度および前記負荷監視手段により監視された前記負荷に基づいて、前記タスクの実行を制御することができる。
【００３０】
前記負荷監視手段により監視された前記負荷に基づいて、符号化対象のフレームの分割数を決定する分割数決定手段をさらに備え、前記タスク生成手段は、分割された機能に対するタスクを、前記分割数決定手段により決定された前記分割数だけ生成し、前記機能毎に設定された前記優先度を付加することができる。
【００３１】
前記タスク生成手段は、前記動き予測の機能を、さらに、複数のサブ機能に分割して、分割されたサブ機能に対してタスクを生成し、前記サブ機能毎に設定された前記優先度を付加することができる。
【００３２】
本発明の一側面の符号化方法は、タスク生成手段と、実行制御手段とを備える符号化装置の符号化方法において、前記タスク生成手段が、符号化処理を動き予測、変換量子化、および可変長符号化の機能に分割し、分割された機能に対してタスクを生成し、前記機能毎に設定された優先度を付加し、前記実行制御手段が、生成された前記タスクに付加された前記優先度に基づいて、前記タスクの実行を制御する。
【００３３】
本発明の一側面においては、符号化処理が動き予測、変換量子化、および可変長符号化の機能に分割され、分割された機能に対してタスクが生成され、前記機能毎に設定された優先度が付加される。そして、生成された前記タスクに付加された前記優先度に基づいて、前記タスクの実行が制御される。
【００３４】
なお、上述の符号化装置は、独立した装置であっても良いし、１つの符号化装置を構成している内部ブロックであってもよい。
【発明の効果】
【００３５】
本発明の一側面によれば、フレーム入力から、ビットストリーム出力までの時間を安定させることができる。これにより、本発明の一側面によれば、瞬間的な処理落ちやコマ落ちを抑制することができる。したがって、リアルタイムの再生品質の劣化を抑えることができる。
【図面の簡単な説明】
【００３６】
【図１】エンコードタスクのフレームパイプライン処理の例を示す図である。
【図２】２コア環境におけるエンコードタスク実行の例を示す図である。
【図３】２コア環境におけるエンコードタスク実行の他の例を示す図である。
【図４】フレーム２分割の場合の２コア環境におけるエンコードタスク実行の例を示す図である。
【図５】フレーム２分割の場合の２コア環境におけるエンコードタスク実行の他の例を示す図である。
【図６】本発明を適用した画像符号化装置の一実施の形態の構成を示すブロック図である。
【図７】タスク実行順序制御処理を説明するフローチャートである。
【図８】本発明の効果を説明するための従来の例を示す図である。
【図９】本発明の効果を説明する図である。
【図１０】本発明の他の例を説明する図である。
【図１１】本発明を適用した画像符号化装置のその他の実施の形態の構成を示すブロック図である。
【図１２】タスク実行順序制御処理の他の例を説明するフローチャートである。
【図１３】本発明の効果を説明する図である。
【図１４】符号化ブロックの構成例を示すブロック図である。
【図１５】サブ機能に分割する場合の本発明の効果を説明するための従来の例を示す図である。
【図１６】サブ機能に分割する場合の本発明の効果を説明する図である。
【図１７】画面分割について説明する図である。
【図１８】優先度と画面分割を組み合わせた場合の本発明の効果を説明するための従来の例を示す図である。
【図１９】優先度と画面分割を組み合わせた場合の本発明の効果を説明する図である。
【図２０】コンピュータのハードウエアの構成例を示すブロック図である。
【発明を実施するための形態】
【００３７】
以下、図を参照して本発明の実施の形態について説明する。
【００３８】
［画像符号化装置の構成例］
図６は、本発明を適用した画像符号化装置としてのパーソナルコンピュータの第１の実施の形態の構成を表している。
【００３９】
このパーソナルコンピュータ１１は、符号化制御ブロック２１と、OS（オペレーションシステム）２２により構成されている。符号化制御ブロック２１は、符号化プログラムの実行を制御するためにエンコードタスクを生成して、OS２２に供給する。
【００４０】
OS２２は、タスクスケジューラと称されるスケジューリング機能を有しており、タスクスケジューラに従って、符号化制御ブロック２１からのエンコードタスクやエンコードタスク以外のその他のタスクを実行する。その他のタスクとしては、例えば、メールや表計算などの機能があげられる。
【００４１】
図６の例において、符号化制御ブロック２１は、符号化タスク生成部３１、リソース負荷検出部３２、およびタスク実行順序制御部３３を含むように構成されている。
【００４２】
符号化タスク生成部３１は、符号化プログラムのタスク生成を行う機能ブロックである。すなわち、符号化タスク生成部３１は、符号化プログラムを、ME(動き予測)、TS(Transform Scaling：変換・量子化)、およびVLC（可変長符号化）の機能に分割し、分割された機能に対してエンコードタスクを生成する。なお、符号化タスク生成部３１には、図示されないが、処理対象フレームも入力される。符号化タスク生成部３１は、処理対象フレームを含むように、エンコードタスクを生成するので、エンコードタスクには、処理対象フレームが含まれている。
【００４３】
符号化タスク生成部３１は、そのエンコードタスクに対して、機能毎に設定された優先度を付加し、優先度が付加されたエンコードタスクを、タスク実行順序制御部３３の優先度キューに投入する。
【００４４】
符号化タスク生成部３１は、機能毎の優先度を、符号化の一連の流れのうち、出力側（ビットストリーム生成）から入力側（原画フレームの入力）に向けて低くなるように設定する。すなわち、ME,TS,VLCの場合、VLC ＞  TS  ＞  MEの順に高い優先度に設定される。出力側が完了しないと、出力に影響が出る恐れがあるためである。したがって、VLCのタスクには、TSやMEより高く設定された優先度が付加され、TSのタスクには、MEのタスクより高く設定された優先度が付加され、MEのタスクには、３つの中では一番低く設定された優先度が付加される。
【００４５】
なお、エンコードアルゴリズムや規格(H．264及びMPEG-4 Part10 （Advanced Video Coding、以下H．264/AVCと記す）やMPEG（Moving Picture Experts Group）2)によっては、分割される機能が変わることもあるが、優先度の設定の仕方は同様である。
【００４６】
リソース負荷検出部３２は、符号化処理の負荷、すなわち、リソースの負荷を検出し、検出した負荷情報を、タスク実行順序制御部３３に供給する。リソースの負荷としては、例えば、使用プロセッサの負荷や空きプロセッサ数、プロセッサのパフォーマンスやメモリ残量、ハードディスクなどの読み出し速度などの情報が検出される。
【００４７】
具体的には、リソース負荷検出部３２は、エンコードタスクで使用しているプロセッサの負荷（使用コア数、空きコア数）を計測する。あるいは、リソース負荷検出部３２は、OS２２が提供する負荷を計測する機能を参照して使用コア数を推定する。また、プロセッサとしては、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などが含まれる。
【００４８】
タスク実行順序制御部３３は、優先度キューを有している。タスク実行順序制御部３３は、符号化タスク生成部３１により投入された優先度キューのタスクに付加された優先度と、リソース負荷検出部３２からのリソースの負荷情報とに基づき、実行すべきタスクを決定し、実行する。
【００４９】
ここで、優先度キューは、優先度値に従って内部で整列して、最高の優先度をもつデータを取り出すことができるデータ構造となっている。すなわち、タスク実行順序制御部３３は、最高の優先度をもつタスク順に、リソース負荷検出部３２からの空きプロセッサコア数だけのタスクを優先度キューから取り出し、実行可能タスクとして、OS２２に渡す処理を行う。
【００５０】
［タスク実行順序制御処理の例］
次に、図７のフローチャートを参照して、パーソナルコンピュータ１１のタスク実行順序制御処理について説明する。この処理は、例えば、ユーザにより、図示せぬ操作入力部などが操作されて、符号化プログラムの実行が指示されることにより開始される。
【００５１】
ステップＳ１１において、符号化タスク生成部３１は、符号化プログラムを、ME、TS、およびVLCの機能に分割し、分割された機能に対してエンコードタスクを生成する。
【００５２】
符号化タスク生成部３１は、ステップＳ１２において、そのエンコードタスクに対して、機能毎に設定された優先度を付加し、ステップＳ１３において、優先度が付加されたエンコードタスクを、タスク実行順序制御部３３の優先度キューに投入する。
【００５３】
その間、リソース負荷検出部３２は、エンコードタスクで使用しているプロセッサの負荷（使用コア数）を計測することにより、リソースの負荷を検出し、検出した負荷情報を、タスク実行順序制御部３３に供給している。
【００５４】
ステップＳ１４において、タスク実行順序制御部３３は、優先度キューにタスクが残っているか否かを判定する。ステップＳ１４において、タスクが残っていると判定された場合、タスク実行順序制御部３３は、ステップＳ１５において、リソース負荷検出部３２からの負荷情報を取得する。そして、ステップＳ１６において、タスク実行順序制御部３３は、取得した負荷情報に基づいて、符号化に用いるための空きプロセッサがあるか否かを判定する。
【００５５】
ステップＳ１６において、空きプロセッサがないと判定された場合、処理はステップＳ１４に戻り、それ以降の処理が繰り返される。
【００５６】
ステップＳ１６において、空きプロセッサがあると判定された場合、タスク実行順序制御部３３は、ステップＳ１７において、優先度キューのタスクのうち、最高優先度をもつタスクを実行する。すなわち、タスク実行順序制御部３３は、最高優先度をもつタスクを優先度キューから取り出し、実行可能なタスクとして、OS２２に渡す。
【００５７】
これに対応して、OS２２は、タスクスケジューラに従って、タスク実行順序制御部３３からの最高優先度をもつタスクを、空きプロセッサに実行させることができる。タスク実行順序制御部３３は、優先度の高い順に、タスクをOS２２に渡すので、OS２２は、渡されたタスクを選択し、実行する。すなわち、タスク実行順序制御部３３は、エンコードタスクの実行順を制御することができる。
【００５８】
これにより、OS２２においては、エンコードタスク以外のタスク実行が入るとしても、エンコードタスクについては、例えば、図２を参照して上述した順にタスクが実行される。すなわち、図２や図３のように同じコア環境であっても、タスク実行順が変わることがないので、フレーム入力から、ビットストリーム出力までの時間を安定させることができる。
【００５９】
ステップＳ１４において、タスクが残っていないと判定された場合、タスク実行順序制御処理は終了される。
【００６０】
[効果の説明]
次に、図８乃至図１０を参照し、従来と比較して、本発明の効果についてさらに具体的に説明する。図８の例においては、従来の符号化プログラムのタスク生成部と、決定したタスクを、OS２２が有するタスクスケジューラに従って順序を選択、実行するOS２２が示されている。
【００６１】
なお、タスク生成部とOS２２との間にある横ラインより上は、符号化プログラムからの制御が可能なブロックを示しており、横ラインより下は、符号化プログラムからの制御が困難なブロックを示している。すなわち、図８の例の場合、符号化プログラムからの制御可能であるのは、実行可能タスクを渡すところだけであり、OS２２のスケジューリングは、符号化プログラムからの制御が困難であった。
【００６２】
したがって、OS２２には、符号化プログラム側の実行可能タスクが実行可能な分だけ複数蓄積される状態となり、その結果、図２および図３を参照して上述したようなエンコードタスク実行終了時間の揺らぎが発生していた。
【００６３】
そこで、本発明においては、図９に示されるように、符号化タスク生成部３１と、OS２２との間に、タスク実行順序制御部３３という層が新たに追加される。このタスク実行順序制御部３３は、符号化タスク生成部３１からの入力（実行可能タスク）のうち、最高優先度をもつ実行可能タスクから順に、空きプロセッサコア数分だけ、OS２２に渡す。
【００６４】
すなわち、OS２２においては、従来のように、実行可能タスクが複数蓄積されていくのではなく、空きプロセッサコア数分だけの実行可能タスクしか渡されない。したがって、OS２２は、渡された実行可能タスクを実行するしかない。これにより、OSのスケジューリング機能に由来する不確実性を軽減することができる。
【００６５】
なお、例えば、空きプロセッサコア数が０の場合に限っては、１のタスクを渡しておくようにすることもできる。また、上述したように、タスク実行順序制御部３３は、符号化タスク生成部３１からの入力（タスクおよび優先度）と、OS２２（リソース負荷検出部３２）からの入力を基にしてOS２２に渡すタスクを決定する。
【００６６】
ここで、上記説明においては、リソース負荷検出部３２が、エンコードタスクで使用しているプロセッサの負荷（使用コア数）を計測し、リソースの負荷を検出する例を説明したが、これに限定されない。
【００６７】
例えば、図１０に示されるように、リソース負荷検出部３２には、符号化タスク生成部３１から、エンコードタスクの実行時間も入力させることができる。また、リソース負荷検出部３２には、OS２２から、例えば、プロセッサの使用率や実行中および実行待機中のタスク数なども入力させることができる。
【００６８】
リソース負荷検出部３２は、符号化タスク生成部３１からの入力と、OS２２からの入力を基にして、現在の空きプロセッサ使用率を導出する。また、リソース負荷検出部３２は、実行中の符号化プログラムのタスクと、そのタスクの終了時間を予測し、プロセッサの負荷を予測することもできる。タスクの終了時刻は、これまでに実行してきた同種のタスクの実際の実行にかかった時間差から推測したり、または、事前に導出した統計より該当タスクの実行時間を推測することができる。
【００６９】
リソース負荷検出部３２は、現在の空きプロセッサリソース率および近未来の空きプロセッサリソース率を導出し、その情報を、タスク実行順序制御部３３に供給する。タスク実行順序制御部３３は、プロセッサのリソース率がある限り、現在実行可能なタスクの中で最も優先度の高いタスクを選択して、OS２２に渡す。
【００７０】
なお、近未来のプロセッサリソース率を利用する目的は、現在瞬間的にプロセッサ負荷が高くても、次の瞬間にプロセッサが空く可能性があるからであり、必要に応じてタスクを先行入力することで、プロセッサの使用効果をあげることができる。
【００７１】
以上、符号化プログラムを機能分割して、タスクを生成し、リソースの負荷とタスクに付加された優先度に基づいて、実行制御を行う例を説明したが、次に、リソースの負荷に応じて、フレームを分割し、その分割数のタスクを生成する例について説明する。
【００７２】
［画像符号化装置の他の構成例］
図１１は、本発明を適用した画像符号化装置としてのパーソナルコンピュータの第２の実施の形態の構成を表している。
【００７３】
図１１のパーソナルコンピュータ５１は、符号化制御ブロック２１の代わりに、符号化制御ブロック６１が追加された点が、図６のパーソナルコンピュータ１１と異なっている。また、パーソナルコンピュータ５１は、OS２２を備えている点は、図６のパーソナルコンピュータ１１と共通している。
【００７４】
符号化制御ブロック６１は、リソース負荷検出部３２、データ分割数決定部７１、および符号化タスク生成部７２を含むように構成されている。
【００７５】
リソース負荷検出部３２は、図６の場合と同様に、符号化処理の負荷、すなわち、リソースの負荷を検出する。そして、リソース負荷検出部３２は、検出した負荷情報を、データ分割数決定部７１に供給する。
【００７６】
データ分割数決定部７１には、リソース負荷検出部３２からの負荷情報の他に、図示せぬ入力部などより処理対象フレームが入力される。データ分割数決定部７１は、リソース負荷検出部３２からのリソースの負荷情報に基づき、エンコードタスク以外の負荷を考慮して、入力される処理対象フレームのデータ分割数を決定する。データ分割数決定部７１は、処理対象フレームを決定した分割数に分割し、分割した処理データを、符号化タスク生成部７２に出力する。
【００７７】
図１１の例においては、処理対象フレームが３つに分割された例が示されている。したがって、データ分割数決定部７１は、例えば、処理対象フレームの上１／３の処理データ０、処理対象フレームの真ん中１／３の処理データ１、処理対象フレームの下１／３の処理データ２をそれぞれ符号化タスク生成部７２に出力する。
【００７８】
符号化タスク生成部７２は、符号化プログラムにおいて、いまから処理を行う機能（ME , TS or VLC）についてそれぞれ、分割された処理データ毎にエンコードタスクを生成し、生成したエンコードタスクを実行する。
【００７９】
すなわち、図１１の例の場合、符号化タスク生成部７２は、処理データ０に対するタスク０、処理データ１に対するタスク１、および、処理データ３に対するタスク３を生成し、生成したタスク１乃至３を、実行可能なタスクとして、OS２２に渡す処理を行う。
【００８０】
［タスク実行順序制御処理の他の例］
次に、図１２のフローチャートを参照して、パーソナルコンピュータ５１のタスク実行順序制御処理について説明する。この処理は、例えば、符号化プログラムが機能分割されている場合には、分割された機能毎に実行される処理である。例えば、いまからTSが行われるとする。
【００８１】
データ分割数決定部７１には、処理対象フレームが入力される。
【００８２】
リソース負荷検出部３２は、エンコードタスクで使用しているプロセッサの負荷（使用コア数）を計測することにより、リソースの負荷を検出し、検出した負荷情報を、データ分割数決定部７１に供給している。
【００８３】
データ分割数決定部７１は、ステップＳ５１において、リソース負荷検出部３２からの負荷情報を取得し、ステップＳ５２において、取得した負荷情報に基づいて、符号化に用いるための空きプロセッサ数を求める。
【００８４】
データ分割数決定部７１は、ステップＳ５３において、空きプロセッサ数が１より多いか否かを判定する。ステップＳ５３において、空きプロセッサ数が１より多い、すなわち、空きプロセッサ数が複数あると判定された場合、データ分割数決定部７１は、ステップＳ５４において、空きプロセッサ数分に、処理対象フレームのデータを分割する。分割した処理データは、符号化タスク生成部７２に出力される。
【００８５】
ステップＳ５５において、符号化タスク生成部７２は、いまから行うTSについて、分割された処理データ毎にエンコードタスクを生成し、生成したエンコードタスクを実行する。
【００８６】
すなわち、図１１の例の場合、符号化タスク生成部７２は、処理データ０に対するタスク０、処理データ１に対するタスク１、および、処理データ３に対するタスク３を生成し、生成したタスク１乃至３を、実行可能なタスクとして、OS２２に渡す処理を行う。
【００８７】
一方、ステップＳ５３において、空きプロセッサ数が１以下である、すなわち、０または１であると判定された場合、データ分割数決定部７１は、ステップＳ５６において、データを分割せず、処理対象フレームのデータを、符号化タスク生成部７２に出力する。
【００８８】
ステップＳ５７において、符号化タスク生成部７２は、いまから行うTSについて、１つのエンコードタスクを生成し、生成したエンコードタスクを実行する。すなわち、符号化タスク生成部７２は、１つのタスクを生成し、実行可能なタスクとして、OS２２に渡す処理を行う。
【００８９】
換言するに、ステップＳ５４およびＳ５６においてデータ分割数決定部７１は、max(1,空きプロセッサ数)で、データ分割を行っている。
【００９０】
以上のように、空きプロセッサ数に応じて、処理対象フレームのデータの分割を行うようにしたので、待ち合わせまでの時間を安定化することができる。
【００９１】
すなわち、図５を参照して上述したように、処理対象フレームのデータを分割して、ME,TS,VLCの処理をこなそうとすると、エンコードタスク以外のタスクにより、エンコードタスクの開始が乱れていた。これに対して、各ME, TS,TSを行う際に、エンコード託す以外のタスクがあるか否かを考慮して、データの分割数を決定するようにした。例えば、図１３に示されるように、MEやVLCを行う際には、エンコードタスク以外のタスクがないので、２つにデータ分割されているが、TSを行う際に、エンコード託す以外のタスクがあるので、その負荷を考慮して、データ分割をしないようにした。
【００９２】
これにより、待ち合わせ時間が延びてしまうことが抑制され、待ち合わせ時間までの時間を安定化させることができる。
【００９３】
なお、上記説明においては、符号化プログラムの機能を、ME,TS,VLCと分割し、それぞれに優先度を付加するように説明したが、それらの機能をさらに複数のステージ（サブ機能）に分割し、優先度を付加することも可能である。
【００９４】
MEは、アルゴリズムによって、動き予測の探索対象フレーム、探索範囲、探索アルゴリズムなどを切り替えて実行することがあるので、各ステージに分割することが可能である。
【００９５】
例えば、入力フレーム上の粗く広範囲に探索するステージや、再構築フレーム（いわゆる、ローカルデコードフレーム）を密に探索するステージに分けることも可能で、それぞれのステージのタスク優先度を変えることもできる。例えば、入力フレームの探索は、再構築フレームの探索よりも優先度が低く設定される。
【００９６】
MEを例にさらに具体的に説明する。なお、以下、説明の簡単のために、実行環境を２コアとするが、もちろん、コア数は２つに限定されず、２より大きい場合にも適用させることができる。
【００９７】
[サブ機能の優先度の説明]
図１４は、MEを探索対象フレームの種類でサブステージに分けた場合の符号化処理の構成を示すブロック図である。図１４の例においては、MEが、入力画像を探索対象としたME-Aと、DPB(Decoded Picture Buffer)１１４内の参照画像を探索対象としたME-Bのサブ機能に分割されている例が示されている。
【００９８】
図１４に示される機能ブロックは、ME-A部１０１、符号化前情報記憶部１０２、ME-B部１０３、MC(動き補償：Motion compensation)部１０４、イントラ判断部１０５、イントラ予測部１０６、スイッチ１０７、演算部１０８、TS部１０９、VLC部１１０、逆TS部１１１、演算部１１２、デブロックフィルタ１１３、およびDPB１１４を含むように構成されている。
【００９９】
入力画像は、ME-B部１０３、イントラ判断部１０５、演算部１０８に入力される。これらの各部に入力される入力画像を探索範囲として、ME-A部１０１は、動き予測を行い、その結果の動きベクトル情報を、符号化前情報記憶部１０２に出力する。
【０１００】
符号化前情報記憶部１０２は、ME-A部１０１からの動きベクトル情報を記憶する。
【０１０１】
ME-B部１０３は、入力画像と符号化前情報記憶部１０２に記憶されている動きベクトル情報を参照し、DPB１１４内の参照画像を探索対象として動き予測を行い、その結果の動きベクトル情報をMC部１０４に出力する。MC部１０４は、ME-B部１０３からの動きベクトル情報を用いて、DPB１１４内の参照画像に補償処理を行い、予測画像を生成し、生成された予測画像をスイッチ１０７に出力する。
【０１０２】
イントラ判断部１０５は、入力画像に基づいて、イントラ予測が可能であるか否かを判定し、可能であると判定した場合、入力画像を、イントラ予測部１０６に出力する。イントラ予測部１０６は、入力画像における周辺画素を用いてイントラ予測を行い、予測画像を生成し、生成した予測画像を、スイッチ１０７に出力する。
【０１０３】
スイッチ１０７は、MC部１０４からの予測画像とイントラ予測部１０６からの予測画像を参照して、符号化効率のよい方をマクロブロックタイプに決定し、決定した方の予測画像を、演算部１０８および１１２に出力する。
【０１０４】
演算部１０８は、入力画像とスイッチ１０７からの予測画像の差分をTS部１０９に出力する。TS部１０９は、演算部１０８からの差分をDCT変換および量子化し、量子化後のデータを、VLC部１１０と逆TS部１１１に出力する。VLC部１１０は、量子化後のデータを可変長符号化し、ビットストリームを、図示せぬ後段に出力する。
【０１０５】
一方、逆TS部１１１は、TS部１０９からの量子化後のデータに対して、逆量子化および逆DCT変換し、逆DCT変換後のデータを、演算部１１２に出力する。演算部１１２は、逆DCT変換後のデータ（入力画像と予測画像の差分に相当）とスイッチ１０７からの予測画像を加算し、加算した結果の画像を、デブロックフィルタ１１３に出力する。
【０１０６】
デブロックフィルタ１１３は、演算部１１２からの画像にデブロッキングフィルタを行い、フィルタ後の画像を、DPB１１４に出力する。DPB１１４は、デブロックフィルタ１１３からの画像、すなわち、符号化済みの参照画像を記憶する。
【０１０７】
なお、以下、簡単のために、図１４の符号化処理において、ME-AおよびME-B以外の処理を、Rとまとめることにする。すなわち、Rは、MC、イントラ判断、イントラ予測、マクロブロックタイプ決定、TS、VLC、逆TS、およびデブロックフィルタなどの処理を表している。
【０１０８】
また、以降の説明で、優先度を付加する場合は、ME-A＜ME-B＜Rという順序、すなわち、Rの優先度が一番高く、ME-Aの優先度が一番低いという順序を付けるものとする。
【０１０９】
ここで、図１５は、ME-AおよびME-Bの優先度を考慮しない場合に、上述した符号化処理を実行した場合の例を示している。なお、ME-A[n]は、n番目のフレームを対象としたME-Aのタスク、ME-B[n]は、n番目のフレームを対象としたME-Bのタスク、R[n]は、n番目のフレームを対象とした、符号化処理におけるME-AおよびME-B以外のすべての処理のタスクを表している。
【０１１０】
優先度が考慮されていないので、図１５の例においては、一方のコアで、n-1番目のフレームのME-Aのタスクが終わると、n番目のフレームのME-Aのタスクが開始され、他方のコアで、n-1番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n-1番目のフレームのME-Bのタスクが開始される。
【０１１１】
一方のコアで、n番目のフレームのME-Aのタスクが終わると、n+1番目のフレームのME-Aのタスクが開始される。このとき、他方のコアで、n-1番目のフレームのME-Bのタスクが終わり、n番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n番目のフレームのME-Bのタスクが開始される。
【０１１２】
また、一方のコアで、n+1番目のフレームのME-Aのタスクが終わると、n+1番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n+1番目のフレームのME-Bのタスクが開始される。このとき、他方のコアで、n番目のフレームのME-Bのタスクが終わると、n-1番目のフレームのME-Bの結果の動きベクトル情報が用いられてn-1番目のフレームのRの処理のタスクが開始される。
【０１１３】
さらに、一方のコアで、n+1番目のフレームのME-Bが終わった後、n番目のフレームのME-Bの結果の動きベクトル情報が用いられてn番目のフレームのRの処理のタスクが開始される。このとき、他方のコアで、n-1番目のフレームのRの処理のタスクが終わると、n+2番目のME-Aのタスクが開始される。
【０１１４】
一方のコアで、n番目のフレームのRの処理のタスクが終わると、他方のコアで、n+2番目のME-Aのタスクが終わる。このとき、一方のコアで、n+2番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n+2番目のフレームのME-Bのタスクが開始され、他方のコアで、n+1番目のフレームのME-Bの結果の動きベクトル情報が用いられてn+1番目のフレームのRの処理のタスクが開始される。
【０１１５】
そして、一方のコアで、n+2番目のフレームのME-Bのタスクが終了すると、他方のコアで、n+1番目のフレームのRの処理のタスクが終了し、一方のコアで、n+3番目のME-Aのタスクが開始される。
【０１１６】
図１６は、図１５の例において、ME-A＜ME-B＜Rという順序の優先度を付加しそれを考慮して、上述した符号化処理を実行した場合の例を示している。
【０１１７】
図１６の例においては、一方のコアで、n-1番目のフレームのME-Aのタスクが終わると、n番目のフレームのME-Aのタスクが開始され、他方のコアで、n-1番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n-1番目のフレームのME-Bのタスクが開始される。
【０１１８】
一方のコアで、n番目のフレームのME-Aのタスクが終わると、他方のコアで、n-1番目のフレームのME-Bのタスクが終わる。このとき、実行可能なタスクとしては、n+1番目のフレームのME-A、n番目のフレームのME-B、およびn-1番目のフレームのRの処理があるが、ME-AよりもME-BおよびRのタスクの優先度が高い。したがって、一方のコアで、n番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n番目のフレームのME-Bのタスクが開始される。他方のコアで、n-1番目のフレームのME-Bの結果の動きベクトル情報が用いられてn-1番目のフレームのRの処理のタスクが開始される。
【０１１９】
次に、一方のコアで、n番目のフレームのME-Bのタスクが終わり、他方のコアで、n-1番目のフレームのRの処理のタスクが終わる。このとき、実行可能なタスクとしては、n+1番目のフレームのME-A、およびn番目のフレームのRの処理しかない。したがって、一方のコアで、n+1番目のフレームのME-Aのタスクが開始され、他方のコアで、n番目のフレームのME-Bの結果の動きベクトル情報が用いられてn番目のフレームのRの処理のタスクが開始される。
【０１２０】
また、一方のコアで、n+1番目のフレームのME-Aのタスクが終わり、他方のコアで、n番目のフレームのRの処理のタスクが終わる。このとき、実行可能なタスクとしては、n+1番目のフレームのME-B、およびn+2番目のフレームのME-Aしかない。したがって、一方のコアで、n+1番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n+1番目のME-Bのタスクが開始され、他方のコアで、n+2番目のフレームのME-Aのタスクが開始される。
【０１２１】
さらに、一方のコアで、n+1番目のME-Bのタスクが終了し、他方のコアで、n+2番目のフレームのME-Aのタスクが終了する。このとき、実行可能なタスクとしては、n+3番目のフレームのME-A、n+2番目のフレームのME-B、およびn+1番目のフレームのRの処理があるが、ME-AよりもME-BおよびRのタスクの優先度が高い。したがって、一方のコアで、n+2番目のフレームのME-Aの結果の動きベクトル情報が参照されて、n+2番目のフレームのME-Bのタスクが開始される。他方のコアで、n+1番目のフレームのME-Bの結果の動きベクトルが用いられてn+1番目のフレームのRの処理のタスクが開始される。
【０１２２】
また、一方のコアで、n+2番目のフレームのME-Bのタスクが終わり、他方のコアで、n+1番目のフレームのRの処理のタスクが終わる。このとき、実行可能なタスクとしては、n+2番目のフレームのRの処理、およびn+3番目のフレームのME-Aしかない。したがって、一方のコアで、n+3番目のフレームのME-Aのタスクが開始され、図示されないが、他方のコアで、n+2番目のフレームのME-Bの結果の動きベクトル情報が用いられてn+2番目のフレームのRの処理のタスクが開始される。
【０１２３】
以上のように、MEをサブ機能に分けた場合も、サブ機能のタスクの優先度に応じてタスクを実行させるようにしたので、図１５のt1と図１６のt2に示されるように、n-1番目のフレームのRの処理のタスク完了までの時間を短縮することができる。図１６のRの処理のタスクを、図１５の例よりも早いタイミングで完了させる、すなわち、そのタイミングを制御することができる。
【０１２４】
また、上記説明においては、優先度の例（図６）と画面分割の例（図１１）を別々に説明したが、次のように組み合わせて用いることも可能である。
【０１２５】
[優先度と画面内分割の組み合わせの説明]
次に、図１７乃至図１９を参照して、優先度と画面内分割を組み合わせる例について説明する。
【０１２６】
図１７の例においては、画面内分割数が３である場合のフレームが示されている。すなわち、フレームは、縦に３分割した領域で構成されている。以下、分割した各領域を、セグメントと称し、上から順に、０番目のセグメント、１番目のセグメント、２番目のセグメントとする。各セグメントは、論理的には並列（順不同）に実行可能である。
【０１２７】
図１８は、優先度と画面分割を考慮しない場合に、図１４の符号化処理を実行した場合の例を示している。なお、ME-A[n](m)は、n番目のフレーム内ｍ番目のセグメントを対象としたME-Aのタスク、ME-B[n] (m)は、n番目のフレーム内ｍ番目のセグメントを対象としたME-Bのタスク、R[n] (m)は、n番目のフレーム内ｍ番目のセグメントを対象とした、符号化処理におけるME-AおよびME-B以外のすべての処理のタスクを表している。
【０１２８】
図１８の例においては、一方のコアで、n番目のフレーム内0番目のセグメントのME-Aのタスクが開始され、n番目のフレーム内1番目のセグメントのME-Aのタスクが開始される。
【０１２９】
一方のコアで、n番目のフレーム内0番目のセグメントのME-Aのタスクが終了され、他方のコアで、n番目のフレーム内1番目のセグメントのME-Aのタスクが終了される。このとき、ME-B[n]の実行依頼があるが、優先度が考慮されていないので、一方のコアで、n番目のフレーム内2番目のセグメントのME-Aのタスクが開始される。また、他方のコアで、n番目のフレーム内0番目のセグメントのME-Aの結果が参照されて、n番目のフレーム内0番目のセグメントのME-Bのタスクが開始される。
【０１３０】
次に、一方のコアで、n番目のフレーム内2番目のセグメントのME-Aのタスクが終了するので、n番目のフレーム内1番目のセグメントのME-Aの結果が参照されて、n番目のフレーム内1番目のセグメントのME-Bのタスクが開始される。このとき、他方のコアで、n番目のフレーム内0番目のセグメントのME-Bのタスクが終了するので、n番目のフレーム内2番目のセグメントのME-Aの結果が参照されて、n番目のフレーム内2番目のセグメントのME-Bのタスクが開始される。
【０１３１】
一方のコアで、n番目のフレーム内1番目のセグメントのME-Bのタスクが終了するので、n番目のフレーム内0番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内0番目のセグメントのRの処理のタスクが開始される。このとき、他方のコアで、n番目のフレーム内2番目のセグメントのME-Bのタスクが終了するので、n番目のフレーム内1番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内1番目のセグメントのRの処理のタスクが開始される。
【０１３２】
そして、一方のコアで、n番目のフレーム内0番目のセグメントのRの処理のタスクが終了すると、n番目のフレーム内2番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内2番目のセグメントのRの処理のタスクが開始される。
【０１３３】
図１９は、図１８の例において、ME-A＜ME-B＜Rという順序の優先度を付加しそれを考慮して、上述した符号化処理を実行した場合の例を示している。
【０１３４】
一方のコアで、n番目のフレーム内0番目のセグメントのME-Aのタスクが終了され、他方のコアで、n番目のフレーム内1番目のセグメントのME-Aのタスクが終了される。このとき、ME-B[n]の実行依頼があり、優先度が考慮されるので、一方のコアで、n番目のフレーム内0番目のセグメントのME-Aの結果が参照されて、n番目のフレーム内0番目のセグメントのME-Bのタスクが開始される。また、他方のコアで、n番目のフレーム内1番目のセグメントのME-Aの結果が参照されて、n番目のフレーム内1番目のセグメントのME-Bのタスクが開始される。
【０１３５】
ここで、ME-Aの結果（動きベクトル情報）がなくても、ME-Bを実行することができるが、ME-Bの結果（動きベクトル情報）がなくては、Rの処理を実行することができない。したがって、一方のコアで、n番目のフレーム内0番目のセグメントのME-Bのタスクが終了すると、n番目のフレーム内2番目のセグメントのME-Bのタスクが開始される。また、他方のコアで、n番目のフレーム内1番目のセグメントのME-Bのタスクが終了し、n番目のフレーム内0番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内0番目のセグメントのRの処理のタスクが開始される。
【０１３６】
次に、一方のコアで、n番目のフレーム内2番目のセグメントのME-Bのタスクが終了すると、n番目のフレーム内1番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内1番目のセグメントのRの処理のタスクが開始される。このとき、他方のコアで、n番目のフレーム内0番目のセグメントのRの処理のタスクが終了するので、n番目のフレーム内2番目のセグメントのME-Bの結果が用いられて、n番目のフレーム内2番目のセグメントのRの処理のタスクが開始される。
【０１３７】
そして、一方のコアで、n番目のフレーム内1番目のセグメントのRの処理のタスクが終了し、他方のコアで、n番目のフレーム内2番目のセグメントのRの処理のタスクが終了する。したがって、ここで、優先度が一番低く、処理が残っていたn番目のフレーム内0番目のセグメントのME-Aのタスクが開始される。
【０１３８】
以上のように、優先度と画面分割を組み合わせた場合も、図１８のt3と図１９のt4に示されるように、n番目のフレームのRの処理のタスク完了までの時間を短縮することができる。図１９のRの処理のタスクを、図１８の例よりも早いタイミングで完了させる、すなわち、そのタイミングを制御することができる。
【０１３９】
以上により、MEのサブ機能の優先度や画面分割を行った場合も、タスクの優先度実行によって、符号化処理の出力（ビットストリーム）までの時間を短縮、あるいは、不必要に長くならないように制御することができる。したがって、処理時間の揺らぎを小さくすることが可能となる。
【０１４０】
以上においては、例えば、符号化方式としてH．264/AVC方式を用いるようにしたが、本発明はこれに限らず、MPEG2などのその他の符号化方式／復号方式を適用することができる。また、上記説明においては、パーソナルコンピュータの例を説明したが、それに限定されず、汎用のコンピュータなどであってもよい。
【０１４１】
なお、本発明は、例えば、MPEG、H．26x等の様に、離散コサイン変換等の直交変換と動き補償によって圧縮された画像情報（ビットストリーム）を、衛星放送、ケーブルテレビジョン、インターネット、または携帯電話機などのネットワークメディアを介して受信する際に用いられる画像符号化装置および画像復号装置に適用することができる。また、本発明は、光、磁気ディスク、およびフラッシュメモリのような記憶メディア上で処理する際に用いられる画像符号化装置および画像復号装置に適用することができる。さらに、本発明は、それらの画像符号化装置および画像復号装置などに含まれる動き予測補償装置にも適用することができる。
【０１４２】
上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用のパーソナルコンピュータなどが含まれる。
【０１４３】
［パーソナルコンピュータの構成例］
図２０は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。
【０１４４】
コンピュータにおいて、CPU(Central Processing Unit)３０１、ROM(Read Only Memory)３０２、RAM(Random Access Memory)３０３は、バス３０４により相互に接続されている。
【０１４５】
バス３０４には、さらに、入出力インタフェース３０５が接続されている。入出力インタフェース３０５には、入力部３０６、出力部３０７、記憶部３０８、通信部３０９、およびドライブ３１０が接続されている。
【０１４６】
入力部３０６は、キーボード、マウス、マイクロホンなどよりなる。出力部３０７は、ディスプレイ、スピーカなどよりなる。記憶部３０８は、ハードディスクや不揮発性のメモリなどよりなる。通信部３０９は、ネットワークインタフェースなどよりなる。ドライブ３１０は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブルメディア３１１を駆動する。
【０１４７】
以上のように構成されるコンピュータでは、CPU３０１が、例えば、記憶部３０８に記憶されているプログラムを入出力インタフェース３０５及びバス３０４を介してRAM３０３にロードして実行することにより、上述した一連の処理が行われる。
【０１４８】
コンピュータ（CPU３０１）が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア３１１に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供することができる。
【０１４９】
コンピュータでは、プログラムは、リムーバブルメディア３１１をドライブ３１０に装着することにより、入出力インタフェース３０５を介して、記憶部３０８にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部３０９で受信し、記憶部３０８にインストールすることができる。その他、プログラムは、ROM３０２や記憶部３０８に、あらかじめインストールしておくことができる。
【０１５０】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０１５１】
本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０１５２】
１１  パーソナルコンピュータ，  ２１  符号化制御ブロック，  ２２  OS，  ３１  符号化タスク生成部，  ３２  リソース負荷検出部，  ３３  タスク実行順序制御部，  ５１  パーソナルコンピュータ，  ６１  符号化制御ブロック，  ７１  データ分割数決定部，  ７２  符号化タスク生成部
【図１】
2011182169.tif 000003
【図２】
2011182169.tif 000004
【図３】
2011182169.tif 000005
【図４】
2011182169.tif 000006
【図５】
2011182169.tif 000007
【図６】
2011182169.tif 000008
【図７】
2011182169.tif 000009
【図８】
2011182169.tif 000010
【図９】
2011182169.tif 000011
【図１０】
2011182169.tif 000012
【図１１】
2011182169.tif 000013
【図１２】
2011182169.tif 000014
【図１３】
2011182169.tif 000015
【図１４】
2011182169.tif 000016
【図１５】
2011182169.tif 000017
【図１６】
2011182169.tif 000018
【図１７】
2011182169.tif 000019
【図１８】
2011182169.tif 000020
【図１９】
2011182169.tif 000021
【図２０】
2011182169.tif 000022