(57)【要約】【課題】簡単な構成でＯＳの機能に大きく依存することなく、デコード処理を効率的且つ円滑に行うことができる動画像処理方法、プログラム、及び、装置を提供する。【解決手段】動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理ステップと、処理ステップにおいて、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行する、複数の処理部を用いて動画像を処理する方法を提供する。本方法によると動画像の処理に限らず、処理部を複数用いて処理を行う場合、スライスの数が処理部の個数の整数倍ではない個数であっても、簡単な構成でＯＳの機能に大きく依存することなく、効率的に処理を実行できる。【選択図】図１
2011526009.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、複数の処理部を用いて動画像を処理する方法であって、
前記動画像のフレームを、前記複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、
前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理ステップと、
前記処理ステップにおいて、処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、
を実行する、方法。
【請求項２】
コンピュータが、複数コアからなるＣＰＵを用いて動画像を処理する方法であって、
前記動画像のフレームを、前記複数コアの個数の倍数ではない個数の複数のスライスに分割するステップと、
前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理ステップと、
前記処理ステップにおいて、処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、
を実行する、方法。
【請求項３】
コンピュータが、複数のＣＰＵを用いて動画像を処理する方法であって、
前記動画像のフレームを、前記複数のＣＰＵの個数の倍数ではない個数の複数のスライスに分割するステップと、
前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理ステップと、
前記処理ステップにおいて、処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、
を備える、方法。
【請求項４】
前記スイッチング・ステップは、
前記スライスの処理が所定の位置まで進んだときには、他のスライスの処理を行わせるためのイベントを発生するイベント発生命令を実行するステップと、
前記イベント発生命令から発生されるイベントに待機し、該イベントに応答して、前記スライスの処理を行わせるためのイベント待機命令を実行するステップと、を含んで構成されてなる、請求項１に記載の方法。
【請求項５】
前記イベント発生命令は、ＯＳによって提供される第１の関数に基づいて前記イベントを発生し、
前記イベント待機命令は、ＯＳによって提供される第２の関数に基づいて前記イベントに待機する、請求項４に記載の方法。
【請求項６】
前記イベント発生命令及び前記イベント待機命令は、前記スライスの処理を行う１単位であるスレッドがレジスタをストアし、他のスレッドにジャンプすることにより実現する、請求項４に記載の方法。
【請求項７】
前記イベント発生命令は、
前記スライスの処理を行う１単位であるスレッドの処理量を前記処理部の数に応じて分割した各々の位置に配置されている、請求項４に記載の方法。
【請求項８】
前記イベント発生命令は、
前記スライスの処理を行う１単位であるスレッドの処理量を前記処理部の数に応じて等分割した各々の位置に配置されている、請求項４に記載の方法。
【請求項９】
前記スレッドの数に対して、前記スレッドの各々を前記処理量に従って分割した部分の数を乗算して求めた値を、前記処理部の数の倍数とし、
前記スイッチング・ステップは、前記スレッドの部分を単位として実行される、請求項７に記載の方法。
【請求項１０】
前記処理ステップによる処理は、前記複数のスライスからなる動画像のデコード処理である、請求項１に記載の方法。
【請求項１１】
前記複数のスライスからなる動画像は、ＡＶＣイントラ規格により符号化された動画像である、請求項１０に記載の方法。
【請求項１２】
前記処理部は、少なくとも一つのＤＳＰを含んで構成されている、請求項１に記載の方法。
【請求項１３】
コンピュータが、複数の処理部を用いて動画像を処理するプログラムであって、
前記動画像のフレームを、前記複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、
前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理ステップと、
前記処理ステップにおいて、処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、
を実行する、プログラム。
【請求項１４】
複数の処理部を用いて動画像を処理する装置であって、
前記動画像のフレームを、前記複数の処理部の個数の倍数ではない個数の複数のスライスに分割する分割部と、
前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理部と、
処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング部と、
を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理部を用いて動画像を処理する方法、プログラム、及び装置に関する。
【背景技術】
【０００２】
一般に、動画像の情報量は、静止画像に比べてはるかに膨大であり、情報伝達メディアや蓄積メディアへの利用に際して静止画以上に効率の高い圧縮技術が求められる。たとえば、画像圧縮の国際標準化委員会の一つであるＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）によって制定された動画像符号化／復号方式（ＭＰＥＧ１、ＭＰＥＧ２、ＭＰＥＧ４；以下これらを総称して「ＭＰＥＧ」と言う）、ＪＰＥＧ（Ｊｏｉｎｔ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）方式、あるいはＪＰＥＧ２０００方式などは、こうした用途に好ましい圧縮技術である。
【０００３】
近年標準化されたＨ．２６４／ＡＶＣ（Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ：ＩＳＯ／ＩＥＣ１４４９６−１０；以後「ＡＶＣ」と言う）方式は、従来のＭＰＥＧ２やＭＰＥＧ４の動画符号化方式に比べて、さらに１．５〜２倍の圧縮性能を誇る符号化規格である。特開２００６−２２９４１１号公報には、ＡＶＣイントラ符号化方式（以後、「ＡＶＣイントラ規格」と呼ぶ）が開示されている。この方式の高い圧縮性能は、１）画面内（イントラ）の相関を利用したイントラ予測方式、２）画像間（インター）の相関を利用した可変ブロック動き予測方式を効率化により実現されている。この方式によれば、動画像に対して静止画符号用のイントラ符号化を用いて符号化した場合においても、ＪＰＥＧやＪＰＥＧ２０００に比べて高い圧縮性能を実現することが確認されている。
【０００４】
また、演算処理を高速化するために複数のコア又は複数のＣＰＵを用いる処理が行われている。これら複数のコア又は複数のＣＰＵを用いた処理の制御は主にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の機能の制御の下で行われている。
【０００５】
動画像の処理では、高い信頼性を保ちながらもより一層の高速化が求められている。処理の信頼性の向上及び高速化のため、例えば、ＯＳの機能の制御の下、複数のコア又は複数のＣＰＵを用いて動画像の処理が行われている。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
動画像を複数のコア又は複数のＣＰＵを用いて処理する場合、処理する動画像を分割して、それぞれのコア又は複数のＣＰＵに適宜割り当てる必要がある。上述の符号化方式によれば、動画像を形成する画像データを、独立してデコードすることができる所定数のスライス（独立して処理することができる１単位）に分割して処理することが通例である。このようにして動画像を、従来のＯＳの機能による制御の下で複数のコア又は複数のＣＰＵに割り当ててデコード処理する場合には以下の問題が生じうる。
【０００７】
そもそも、従来のＯＳの機能の制御の下、複数のコア又は複数のＣＰＵを用いて処理を行うとしても、従来のＯＳの機能が、ユーザがマウスを操作するなどして新たな処理を発生させると、それまで複数のコア又はＣＰＵに分割していた処理を改めて分割し直すために、単純に、使用するコア又はＣＰＵの個数に比例した性能を期待することはできない場合がある。
【０００８】
さらに、ＣＰＵの処理時間に対してＣＰＵを切り換えるスイッチングの間隔が十分に小さくない場合には、処理に偏りができて、複数のＣＰＵを効率的に使えないことがある。また、スイッチング間隔が必要以上に小さい場合にはスイッチングのオーバーヘッドにより全体のパフォーマンスが下がってしまう。
【０００９】
また、画像データを分割したスライスの数が、利用可能な複数のＣＰＵの個数の整数倍でないことがある。このような場合、それぞれの画像データをＣＰＵの数に応じて効率的に分割することができないため、他のスライスに遅れてデコードされるスライスが生じうる。そうすると、１つの画像データをデコード処理する時間がかかり、動画像の入力速度が大きな場合には再生が途中で中断するなどの問題が生じることがあった。
【００１０】
したがって、本発明では、上記課題にかんがみ、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、ＣＰＵを切り換えるスイッチングの間隔を適切に確保しつつ、ＯＳの機能に大きく依存することなく、簡単な構成でデコード処理を効率的且つ円滑に行うことができる動画像処理方法、プログラム、及び、装置を提供することを目的とする。
【００１１】
さらに本発明では、動画像の処理に限らず、コア、ＣＰＵ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）などの処理部を複数用いて処理を行う場合に、スライスの数が処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、ＯＳの機能に大きく依存することなく、簡単な構成でデコード処理を効率的且つ円滑に行うことができる処理方法、プログラム、及び、装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一態様によると、コンピュータが、複数の処理部を用いて動画像を処理する方法であって、前記動画像のフレームを、前記複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、前記複数のスライスの各々に割り当てられて、前記複数のスライスの各々を処理する処理ステップと、前記処理ステップにおいて、処理する前記スライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行する方法が提供される。
【００１３】
本方法によれば、動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理ステップと、処理ステップにおいて、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行するので、ＯＳの機能に大きく依存することなく、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、簡単な構成でデコード処理を効率的且つ円滑に行うことができる。上述の方法において、処理部は、複数のコアからなるＣＰＵの一つのコアであってもよく、又は複数のＣＰＵであってもよい。
【００１４】
また、本発明によると、上述のスイッチング・ステップは、スライスの処理が所定の位置まで進んだときには、他のスライスの処理を行わせるためのイベントを発生するイベント発生命令と、イベント発生命令から発生されるイベントに待機し、該イベントに応答して、スライスの処理を行わせるためのイベント待機命令と、を含んで構成してもよい。
【００１５】
本方法によれば、スイッチング・ステップは、スライスの処理が所定の位置まで進んだときには、他のスライスの処理を行わせるためのイベントを発生するイベント発生命令と、イベント発生命令から発生されるイベントに待機し、該イベントに応答して、スライスの処理を行わせるためのイベント待機命令と、を含むので、ＯＳの機能に大きく依存せずにスライスを適切に切り換えることができるので、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、デコード処理を効率的且つ円滑に行うことができる。
【００１６】
また、本発明によると、イベント発生命令は、ＯＳによって提供される第１の関数（例えば、セットイベント関数）に基づいてイベントを発生し、イベント待機命令は、ＯＳによって提供される第２の関数（例えば、ウェイトイベント関数）に基づいてイベントに待機するように構成してもよい。
【００１７】
本方法によれば、ＯＳによって提供される第１の関数に基づいてイベントを発生し、ＯＳによって提供される第２の関数に基づいてイベントに待機するように構成することができるので、簡単な構成で実現することができる。
【００１８】
また、本発明によると、イベント発生命令及びイベント待機命令は、ＯＳによって提供される専用の命令でなくともスライスの処理を行う１単位であるスレッドがレジスタをストアし、他のスレッドにジャンプすることにより実現するようにしてもよい。
【００１９】
本方法によれば、スライスの処理を行う１単位であるスレッドが内部状態のレジスタをストアし、他のスレッドにジャンプすることにより実現することができるので、イベント発生命令やイベント待機命令と同等の機能を簡単な構成で実現することができる。
【００２０】
また、本発明によると、イベント発生命令は、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて分割した各々の位置に配置することができる。
【００２１】
本方法によれば、イベント発生命令を、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて分割した各々の位置に配置することができるので、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、簡単な構成でＯＳの機能に大きく依存することなく、処理を効率的且つ円滑に行うことができる。
【００２２】
また、本発明によると、イベント発生命令は、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて等分割した各々の位置に配置することができる。
【００２３】
本方法によれば、イベント発生命令を、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて等分割した各々の位置に配置することができるので、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、簡単な構成でＯＳの機能に大きく依存することなく、処理を効率的且つ円滑に行うことができる。
【００２４】
また、本発明によると、スレッドの数に対して、スレッドの各々の処理量を処理部の数に従って分割した部分の数を乗算して求めた値を、処理部の数の倍数とできるので、スイッチング・ステップは、スレッドの部分を単位として実行するようにしてもよい。本方法によれば、スレッドの数に対して、スレッドの処理量を処理部の数に応じて分割した数を乗算して求めた値を、処理部の数の倍数とできるので、スライスの数が処理部の個数の整数倍ではない個数であっても、簡単な構成でＯＳの機能に大きく依存することなく、処理を効率的且つ円滑に行うことができる。
【００２５】
また、本発明によると、処理ステップによる処理は、複数のスライスからなる動画像のデコード処理としてもよい。本方法によれば、処理ステップによる処理は、複数のスライスからなる動画像のデコード処理とできるので、簡単な構成でＯＳの機能に大きく依存することなく、デコード処理を効率的且つ円滑に行うことができる。
【００２６】
また、本発明によると、複数のスライスからなる動画像は、ＡＶＣイントラ規格により符号化された動画像であってもよい。また、処理部は、汎用ＣＰＵだけでなく、音声や画像処理に特化したマイクロプロセッサであるＤＳＰを含んで構成してもよい。
【００２７】
さらに、本発明の別の態様によると、コンピュータが、複数の処理部を用いて動画像を処理するプログラムであって、動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理ステップと、処理ステップにおいて、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行するプログラムが提供される。
【００２８】
本プログラムによれば、動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理ステップと、処理ステップにおいて、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行するので、ＯＳの機能に大きく依存することなく、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、簡単な構成でデコード処理を効率的且つ円滑に行うことができる。
【００２９】
さらに、本発明の別の態様によると、複数の処理部を用いて動画像を処理する装置であって、動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割する分割部と、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理部と、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング部と、を備える、装置が提供される。
【００３０】
本装置によれば、動画像のフレームを、複数の処理部の個数の倍数ではない個数の複数のスライスに分割する分割部と、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理部と、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング部と、を備えるので、ＯＳの機能に大きく依存することなく、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、簡単な構成でデコード処理を効率的且つ円滑に行うことができる。
【発明を実施するための形態】
【００３１】
まず、本発明の概要について図１〜図３を参照して説明する。図１は、本発明の方法を実行する動画処理装置の機能構成図である。図２は、スライスの構成を説明する図である。図３は、本発明の方法の概要を説明するフローチャートである。
【００３２】
図１に示すように、本発明の動画処理方法を実行する動画処理装置は、動画像を構成する動画データを処理してデコードする複数の処理部１〜４と、動画データを入力すると複数のスライスに順に分割するスライス分割部５と、スライス分割部５によって分割された複数のスライスを、それぞれ複数の処理部１〜４に切り換えるスイッチング部６と、を備え、複数の処理部１〜４は、スイッチング部６によって切り換えられたスライスを処理してデコードする。
【００３３】
図２に示すように、動画像の一フレームは複数のスライスに分割されて処理される。スライスとは、ＭＰＥＧ規格等では、開始コードをもつ一連のデータの中の最小単位であって、任意の長さのマクロブロックの帯であるが、ピクチャをまたがることはできない。一般に、マクロブロックは、１６画素Ｘ１６ラインの正方形の画素ブロックで輝度ブロックと色差ブロックで構成される。
【００３４】
ここで、スイッチング部６が、スライス分割部５によって分割された複数のスライスを、それぞれ複数の処理部１〜４に切り換えると、各スライスをデコード処理するためのスレッドと呼ばれるタスクが発生する。本発明によると、スライス分割部５は、複数の処理部の個数の倍数ではない個数の複数のスライスに分割することができる。詳細については後述するが、スイッチング部６はスライス分割部５によって分割された複数のスライスを細分化して、それぞれに対応するスレッドの処理の進展に応じて、処理部１〜４に切り換える。
【００３５】
図３に示すように、本発明の動画処理方法は、動画像を構成する動画データのフレームを複数のスライスに分割するステップ（ステップＳ１０１）と、分割された複数のスライスを、対応するそれぞれの処理部にデコード処理を実行させるステップ（ステップＳ１０２）と、それぞれの処理部が処理した処理量がしきい値と等価になったか否かを判定するステップ（ステップＳ１０３）と、処理量がしきい値と等価になったと判定した場合は、処理するスライスを切り換える、スライス・スイッチングを実行するステップ（ステップＳ１０４）と、全動画データのデコードが終了したか否かを判定するステップ（ステップＳ１０５）と、を含み、ステップＳ１０５において、全動画データのデコードが終了していないと判定した場合には、処理はステップＳ１０２に戻り、終了したと判定した場合には、動画処理を終了する。また、図３において、説明を容易にするため、ステップＳ１０２〜Ｓ１０４を単独の流れで説明しているが、ステップＳ１０２〜ステップＳ１０４の数は、動画を処理する処理部の数と同じ個数であって、例えば、図１に示すように処理部が処理部１〜４と４個の場合は、ステップＳ１０２１〜Ｓ１０４１、ステップＳ１０２２〜Ｓ１０４２、ステップＳ１０２３〜Ｓ１０４３、ステップＳ１０２４〜Ｓ１０４４と、処理する処理部と同数のフローによる並列処理によって実行される。
【００３６】
本発明によると、ステップＳ１０３で比較するしきい値を処理するスライスの処理量を処理部の数によって割った量に基づいて決定し、処理量がこのしきい値に到達した時にステップＳ１０４において処理するスライスを適切に切り換えるため、ステップＳ１０１で、分割する複数のスライスの個数は、処理部の個数の整数倍でなくてもよい。
【００３７】
本発明を実施するための最良の形態について、図面を参照して、以下に説明する。
（実施の形態）
【００３８】
図４〜図７を参照して、本発明の一実施の形態の動画処理装置について説明する。
［動画処理装置のハードウェア構成］
【００３９】
図４は、一実施の形態の動画処理装置のハードウェア構成図である。
【００４０】
図４に示すように、本実施の形態の動画処理装置１は、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）群から構成される制御部３００と、バスライン２００と、通信Ｉ／Ｆ（Ｉ／Ｆ：インタフェース）３２０、メインメモリ３３０、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）３４０、表示装置３５０、Ｉ／Ｏコントローラ３６０、キーボード及びマウス等の入出力装置３７０、ハードディスク３８０、光ディスクドライブ３９０、並びに半導体メモリ４１０を備える。尚、ハードディスク３８０、光ディスクドライブ３９０、並びに、半導体メモリ４１０をまとめて記憶装置４２０と呼ぶ。
【００４１】
制御部３００は、動画処理装置１を統括的に制御する部分であり、ハードディスク３８０に記憶された各種プログラムを適宜読み出して実行することにより、上述したハードウェアと協働し、本発明に係る各種機能を実現している。本実施の形態では、制御部３００は、４個のＣＰＵ３０１〜３０４から構成されている。
【００４２】
通信Ｉ／Ｆ３２０は、動画処理装置１が、通信ネットワークＮ（図１）を介して遠方のユーザ端末等と動画データ又は操作情報などを送受信する場合のネットワーク・アダプタである。通信Ｉ／Ｆ３２０は、モデム、ケーブル・モデム及びイーサネット（登録商標）・アダプタを含んでよい。
【００４３】
ＢＩＯＳ３４０は、動画処理装置１の起動時に制御部３００が実行するブートプログラムや、動画処理装置１がハードウェアに依存するプログラム等を記録する。
【００４４】
表示装置３５０は、ブラウン管液晶装置（ＣＲＴ）、液晶表示装置（ＬＣＤ）等のディスプレイ装置を含む。
【００４５】
Ｉ／Ｏコントローラ３６０には、ハードディスク３８０、光ディスクドライブ３９０、及び半導体メモリ４１０等の記憶装置４２０を接続することができる。
【００４６】
入出力装置３７０は、オペレータの操作に応じて、動画処理装置１を制御するために必要な情報をオペレータから入力する、又はオペレータに出力するようになっている。
【００４７】
ハードディスク３８０は、本ハードウェアを動画処理装置１として機能させるためのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、本発明の機能を実行するプログラムを含む各種プログラム及びデータを記憶する。なお、動画処理装置１は、外部に別途設けたハードディスク（図示せず）を外部記憶装置として利用することもできる。
【００４８】
光ディスクドライブ３９０としては、例えば、ＤＶＤ−ＲＯＭドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＡＭドライブ、ＣＤ−ＲＡＭドライブを使用することができる。この場合は各ドライブに対応した光ディスク４００を使用する。光ディスク４００から光ディスクドライブ３９０によりプログラム又は動画データを読み取り、Ｉ／Ｏコントローラ３６０を介してメインメモリ３３０又はハードディスク３８０に提供することもできる。
【００４９】
なお、本発明でいうコンピュータとは、記憶装置４２０、制御部３００等を備えた情報処理装置をいい、動画処理装置１は、記憶装置４２０、ＣＰＵ３０１〜３０４等を備えた情報処理装置により構成され、この情報処理装置は、本発明のコンピュータの概念に含まれる。本実施の形態では、ＣＰＵ３０１〜３０４が図１で説明した処理部１〜４を構成する。スライス分割部５及びスイッチング部６は、制御部３００がハードディスク３８０に記憶されたプログラムを実行して実現される。
【００５０】
動画処理については、各ＣＰＵ３０１〜３０４がそれぞれの規格に従って実行するので、その詳細な説明は省略する。例えば、ＡＶＣイントラ規格により符号化された動画像を用いることもできる。制御部３００によって復号された情報は、表示装置３５によって表示してもよく、あるいは、通信Ｉ／Ｆ３２０によって、他の端末等に送信してもよく、又はハードディスク３８０に記憶してもよい。
［スレッド切り換え処理の原理］
【００５１】
図３のステップＳ１０４を参照して説明したスライスを切り換える処理は、スレッドを切り換える処理でもある。図５〜図７は、本実施の形態の動画処理装置１が実行するスレッド切り換え処理の原理を説明する図である。
【００５２】
図５を参照して、本実施の形態のスレッドについて説明する。図５は、本実施の形態の動画処理装置１が実行する各スレッドを説明する図である。
【００５３】
まず５個のスライスを処理するために設けられるスレッドを、それぞれスレッド“Ｔ０”、“Ｔ１”、“Ｔ２”、“Ｔ３”、“Ｔ４”とする。“ｔ０”、“ｔ１”、“ｔ２”、“ｔ３”、“ｔ４”は、スレッドを分割する各ポイントを示し、これらのポイントによって画定される各スレッドの区間を“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”とする。
【００５４】
本発明によると、スレッドの処理を分割する場合、分割する区間の数をＮｄ、スレッドの数をＮｔ、処理部の数をＮｃとすると、分割する区間の数は、以下の式が成り立つようにして決定する。
Ｎｔ×Ｎｄ＝Ｎｃ×ｉ（ｉは正の整数）
具体的には、スレッドの数Ｎｔに対して、スレッドを分割した数Ｎｄを乗算して求めた値が、処理部の数Ｎｃの倍数になればよい。
【００５５】
例えば、５個のスレッドに対して、処理を行う処理部の数を４個とすると、スレッドを分割した区間の数、Ｎｄは、Ｎｄ×５が４の倍数となるようにして算出する。本実施の形態では、理解を容易にするため、スレッドを分割した区間を４として説明しているが、本発明はこれに限定されず、分割する区間の数Ｎｄが、スレッドの数Ｎｔに対して、スレッドを分割した区間の数Ｎｄを乗算して求めた値が、処理部の数Ｎｃの倍数になれば如何なる数でもよく、例えば、４、８、１２、１６等様々なケースが可能である。
【００５６】
本実施の形態では、最初にスレッドＴ０、Ｔ１、Ｔ２、Ｔ３にＣＰＵ３０１、ＣＰＵ３０２、ＣＰＵ３０３、ＣＰＵ３０４が割り当てられるが、スレッドＴ４にＣＰＵは割り当てられない。このため、ｔ０では、各ＣＰＵ３０１〜３０４がそれぞれスレッドＴ０、Ｔ１、Ｔ２、Ｔ３の処理を開始して、各スレッドＴ０、Ｔ１、Ｔ２、Ｔ３のＡの部分の処理を実行するようになっている。一方、スレッドＴ４にはイベント３を待って処理を再開させるイベント待機命令を発するフラグであるウェイトフラグｗ３が立てられるが、ｔ０では、処理は行われない。
【００５７】
ｔ１では、スレッドＴ０、Ｔ１、Ｔ２の処理を続行して、各スレッドＴ０、Ｔ１、Ｔ２のＢの部分の処理を実行するようになっているが、スレッドＴ３にはイベント３を発生させるイベント発生命令を発する設定フラグｓ３とイベント２を待って処理を再開させるウェイト待機命令を発するウェイトフラグｗ２が立てられ、処理を中断するようになっている。
【００５８】
ｔ２では、スレッドＴ０、Ｔ１の処理を続行して、各スレッドＴ０、Ｔ１のＣの部分の処理を実行するようになっているが、スレッドＴ２にはイベント２を発生するイベント発生命令を発する設定フラグｓ２とイベント１を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ１が立てられ、処理を中断するようになっている。
【００５９】
ｔ３では、スレッドＴ０の処理を続行して、スレッドＴ１のＤの部分の処理を実行するようになっているが、スレッドＴ１にはイベント１を発生するイベント発生命令を発する設定フラグｓ１とイベント０を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ０が立てられ、処理を中断するようになっている。
【００６０】
ｔ４では、スレッドＴ０にはイベント０を発生するイベント発生命令を発する設定フラグｓ０が立てられ、処理を中断するようになっている。
【００６１】
本実施の形態では、イベント発生命令はＯＳによって提供される第１の関数に基づいてイベントを発生し、イベント待機命令は、ＯＳによって提供される第２の関数に基づいてイベントに待機するように構成してもよい。また、イベント発生命令及びイベント待機命令は、スライスの処理を行う１単位であるスレッドがレジスタをストアし、他のスレッドにジャンプすることにより実現してもよい。
【００６２】
図６及び図７を参照して、本実施の形態のスレッド切り換え処理について詳細に説明する。図６は、本実施の形態の動画処理装置１が実行するスイッチング処理、即ち、スレッド切り換え処理を説明するタイミングチャートである。図７は、各ＣＰＵ３０１〜３０４と、処理するスレッド部分との対応を示す表である。ここで、図２に示すように、画像データを５つに分割したスライスをそれぞれスライス１、２、３、４、５とする。
【００６３】
本実施の形態では、説明を容易にするため、１つのスライスを、例えば、２００個のマクロブロックの帯として処理するものとする。さらに、各ＣＰＵ３０１〜３０４がスレッドを切り換える際にしきい値となる処理量は、処理するスライスの処理量を処理するＣＰＵの数で割った値とする。従って、マクロブロック２００個を、処理するＣＰＵの数、即ち、４によって割った値で、マクロブロック５０個となる。
【００６４】
まず、ｔ０において、図６に示すように、スレッドＴ０、Ｔ１、Ｔ２、Ｔ３のＡの部分の処理が開始する。一方、スレッドＴ４にはイベント３を待って処理を再開させるイベント待機命令を発するフラグであるウェイトフラグｗ３が立てられているので、イベント３が発生するまでＣＰＵは割り当てられない（図５参照）。具体的には、図７に示すように、各ＣＰＵ３０１〜３０４がそれぞれスレッドＴ０、Ｔ１、Ｔ２、Ｔ３の処理を開始し、各スレッドＴ０、Ｔ１、Ｔ２、Ｔ３のＡの部分の処理、即ちそれぞれのスライス１、２、３、４のマクロブロック５０個分を処理する。
【００６５】
ｔ１に移行すると、図６に示すように、スレッドＴ０、Ｔ１、Ｔ２のＢの部分の処理を続行すると同時に、スレッドＴ４の処理が開始する。具体的には、図７に示すように、各ＣＰＵ３０１〜３０３がそれぞれスレッドＴ０、Ｔ１、Ｔ２の処理を続行して、各スレッドＴ０、Ｔ１、Ｔ２のＢの部分の処理、即ちそれぞれのスライス１、２、３のマクロブロック５０個分を処理する。スレッドＴ３にはイベント３を発生するイベント発生命令を発する設定フラグｓ３とイベント２を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ２が立てられているので（図５参照）、イベント３を発生するイベント発生命令を発する設定フラグｓ３によってイベント３を発生した後、イベント２が発生するまでＣＰＵが割り当てられない状態となる。一方、スレッドＴ４は、イベント３を待って処理を再開させるイベント待機命令を発するフラグであるウェイトフラグｗ３が立てられているので（図５参照）、スレッドＴ３で発生したイベント３に応答して、スレッドＴ４の処理が再開される。この場合、図７に示すように、直前までスレッドＴ３を処理していたＣＰＵ３０４が処理を引き継ぎ、スレッドＴ４のＡの部分の処理、即ち、対応するスライス４のマクロブロック５０個分を処理する。
【００６６】
ｔ２に移行すると、図６に示すように、Ｔ０、Ｔ１のＣの部分と、Ｔ４のＢの部分の処理を続行すると同時に、スレッドＴ３の処理が再開する。具体的には、図７に示すように、各ＣＰＵ３０１、３０２、３０４がそれぞれスレッドＴ０、Ｔ１、Ｔ４の処理を続行して、各スレッドＴ０、Ｔ１のＣ部分及びＴ４のＢの部分の処理、即ちそれぞれのスライス１、２、５のマクロブロック５０個分を処理する。スレッドＴ２にはイベント２を発生するイベント発生命令を発する設定フラグｓ２とイベント１を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ１が立てられているので（図５参照）、イベント２を発生した後、イベント１が発生するまでＣＰＵが割り当てられない状態となる。一方、スレッドＴ３は、イベント２を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ２が立てられているので（図５参照）、スレッドＴ２で発生したイベント２に応答して、スレッドＴ３の処理が再開される。この場合、図７に示すように、直前までスレッドＴ２を処理していたＣＰＵ３０３が処理を引き継ぎ、スレッドＴ３のＢの部分の処理、即ち、対応するスライス４のマクロブロック５０個分を処理する。
【００６７】
ｔ３に移行すると、図６に示すように、スレッドＴ０のＤの部分、Ｔ３、Ｔ４のＣの部分の処理を続行すると同時に、スレッドＴ２の処理が再開する。具体的には、図７に示すように、各ＣＰＵ３０１、３０３、３０４がスレッドＴ０、Ｔ３、Ｔ４の処理を続行してスレッドＴ０のＤ部分及びスレッドＴ３、Ｔ４のＣの部分の処理、即ち、それぞれのスライス１、４、５のマクロブロック５０個分を処理する。スレッドＴ１にはイベント１を発生するイベント発生命令を発する設定フラグｓ１とイベント０を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ０が立てられているので（図５参照）、イベント１を発生した後、イベント０が発生するまでＣＰＵが割り当てられない状態となる。一方、スレッドＴ２は、イベント１を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ１が立てられているので（図５参照）、スレッドＴ１で発生したイベント１に応答して、スレッドＴ２の処理が再開される。この場合、図７に示すように、直前までスレッドＴ１を処理していたＣＰＵ３０２が処理を引き継ぎ、スレッドＴ２のＣの部分の処理、即ち、対応するスライス３のマクロブロック５０個分を処理する。
【００６８】
ｔ４に移行すると、図６に示すように、スレッドＴ１の処理を再開すると同時に、Ｔ２、Ｔ３、Ｔ４の処理が続行する。具体的には、図７に示すように、各ＣＰＵ３０２、３０３、３０４がスレッドＴ２、Ｔ３、Ｔ４の処理を続行して、スレッドＴ２、Ｔ３、Ｔ４のＤ部分の処理、即ちそれぞれのスライス３、４、５のマクロブロック５０個分を処理する。スレッドＴ０にはイベント０を発生するイベント発生命令を発する設定フラグｓ０が立てられているので（図５参照）、ＣＰＵが割り当てられない状態となる。一方、スレッドＴ１は、イベント０を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ０が立てられているので（図５参照）、スレッドＴ０で発生したイベント０に応答して、スレッドＴ１の処理が再開される。この場合、図７に示すように、直前までスレッドＴ０を処理していたＣＰＵ３０１が処理を引き継ぎ、スレッドＴ１のＤの部分の処理、即ち、対応するスライス１のマクロブロック５０個分を処理する。上記処理のプログラムコードを図８及び図９に示す。
【００６９】
図６に示すタイミングチャートから明らかなように、本実施の形態の方法によると、ＣＰＵ３０４をスレッドＴ３からスレッドＴ４に切り換える際には、ｔ０〜ｔ１の期間、ＣＰＵ３０３をスレッドＴ２からスレッドＴ３に切り換える際には、ｔ１〜ｔ２の期間、ＣＰＵ３０２をスレッドＴ１からスレッドＴ２に切り換える際には、ｔ２〜ｔ３の期間、ＣＰＵ３０１をスレッドＴ０からスレッドＴ１に切り換える際には、ｔ３〜ｔ４の期間と、スイッチングの間隔を適切に確保することができる。
【００７０】
イベント発生命令は、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて分割した各々の位置に配置することができる。スレッドの処理量を分割する割合などは処理するデータ又は処理後のデータ量に応じてしきい値を設けて決定することができる。この場合、処理する処理部の性能、処理するデータの特徴も考慮することが好ましい。イベント発生命令は、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて等分割した各々の位置に配置することが好ましい。
［画像処理装置の動作］
【００７１】
図１０を参照して、本実施の形態の画像処理装置１のデコード処理の動作について説明する。以下の処理の制御は、制御部３００がハードディスク３８０に記憶されたＯＳを含む各種プログラムを実行して行われる。
【００７２】
始めに、動画データを入力すると、動画データを５個のスライス１、２、３、４、５に順番に切り出し、スライス１をデコードするスレッドＴ０、スライス２をデコードするスレッドＴ１、スライス３をデコードするスレッドＴ２、スライス４をデコードするスレッドＴ３、スライス５をデコードするスレッドＴ４を生成する。
【００７３】
この時、スレッドＴ０にはしきい値としてスレッド全体の処理量、即ち、マクロブロック２００個をデコードする処理量が割り当てられる。しきい値に到達すると、イベント０を発生するイベント発生命令を発する設定フラグｓ０が立てられ、処理を中断するようになっている。
【００７４】
また、スレッドＴ１にはしきい値としてスレッドの四分の三の処理量、即ち、マクロブロック１５０個をデコードする処理量が割り当てられる。しきい値に到達すると、イベント１を発生するイベント発生命令を発する設定フラグｓ１とイベント０を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ０が立てられ、処理を中断するようになっている。
【００７５】
さらに、スレッドＴ２にはしきい値としてスレッドの二分の一の処理量、即ち、マクロブロック１００個をデコードする処理量が割り当てられる。しきい値に到達すると、イベント２を発生するイベント発生命令を発する設定フラグｓ２とイベント１を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ１が立てられ、処理を中断するようになっている。
【００７６】
スレッドＴ３にはスレッドの四分の一の処理量、即ち、マクロブロック５０個をデコードする処理量が割り当てられる。しきい値に到達すると、イベント０を発生するイベント発生命令を発する設定フラグｓ３とイベント２を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ２が立てられ、処理を中断するようになっている。
【００７７】
スレッドＴ４にはイベント３を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ３が立てられている。
【００７８】
ステップＳ１において、スライス１をデコードするスレッドＴ０にＣＰＵ３０１を割り当て、ＣＰＵ３０１にスライス１のデコード処理を開始させる。デコード処理を開始すると、スレッドＴ０の制御はステップＳ２１に移行し、処理量がしきい値に到達したか、具体的にはスレッドの全体の処理に相当するマクロブロック２００個のデコード処理を完了したか否かを判定する。処理量がしきい値に到達したと判定した場合、制御はステップＳ２２に進む。一方で、処理量がしきい値に到達していないと判定した場合は、ステップＳ１に戻り、デコードの処理を継続する。
【００７９】
ステップＳ２において、スライス２をデコードするスレッドＴ１にＣＰＵ３０２を割り当て、ＣＰＵ３０２にスライス２のデコード処理を開始させる。デコード処理を開始すると、スレッドＴ１の制御はステップＳ１６に移行し、処理量がしきい値に到達したか、具体的にはスレッドの全体の処理量の四分の三に相当するマクロブロック１５０個のデコード処理を完了したか否かを判定する。処理量がしきい値に到達したと判定した場合、制御はステップＳ１７に進む。一方で、処理量がしきい値に到達していないと判定した場合は、ステップ２に戻り、デコードの処理を継続する。
【００８０】
ステップＳ３において、スライス３をデコードするスレッドＴ２にＣＰＵ３０３を割り当て、ＣＰＵ３０３にスライス３のデコード処理を開始させる。デコード処理を開始すると、スレッドＴ２の制御はステップＳ１１に移行し、処理量がしきい値に到達したか、具体的にはスレッドの全体の処理量の二分の一に相当するマクロブロック１００個のデコード処理を完了したか否かを判定する。処理量がしきい値に到達したと判定した場合、制御はステップＳ１２に進む。一方で、処理量がしきい値に到達していないと判定した場合は、ステップＳ３に戻り、デコードの処理を継続する。
【００８１】
ステップＳ４において、スライス４をデコードするスレッドＴ３にＣＰＵ３０４を割り当て、ＣＰＵ３０４にスライス４のデコード処理を開始させる。デコード処理を開始すると、スレッドＴ３の制御はステップＳ６に移行し、処理量がしきい値に到達したか、具体的にはスレッドの全体の処理量の四分の一に相当するマクロブロック５０個のデコード処理を完了したか否かを判定する。処理量がしきい値に到達したと判定した場合、制御はステップＳ７に進む。一方で、処理量がしきい値に到達していないと判定した場合は、ステップＳ４に戻り、デコードの処理を継続する。
【００８２】
ステップＳ５において、スライス５をデコードするスレッドＴ４にイベント待機処理を実行させる。具体的には、イベント３を待って処理を再開させるイベント待機命令を発するフラグであるウェイトフラグｗ３を立てる。
【００８３】
ステップＳ６において、スレッドＴ３の処理量がしきい値に到達した、具体的にはスレッドの四分の一の処理が終了した、即ち、マクロブロック５０個のデコードが終了したと判定された場合、制御はステップＳ７へ進む。
【００８４】
ステップＳ７において、イベント３が発生する。具体的にはイベント３を発生するイベント発生命令を発するイベント設定フラグ３を実行してイベント３を発生させると制御はステップＳ８に進む。ステップＳ８において、ＣＰＵ３０４はデコード処理を中断する。制御はステップＳ９に進み、イベント待機処理を行う。具体的には、イベント２を待って処理を再開させるイベント待機命令を発するウェイトフラグｗ２が立てられる。
【００８５】
スレッドＴ４では、ステップＳ７において発生したイベント３にウェイトフラグｗ３が応答して、処理が開始される。具体的には、制御はステップＳ１０に進み、スレッドＴ３でデコード処理を中断したＣＰＵ３０４がスレッドＴ４のデコード処理を開始する。その後、スレッドＴ４のデコード処理が全て完了すると、スレッドＴ４の処理は完了する。
【００８６】
スレッドＴ２では、ステップＳ１１において、スレッドＴ２の処理量がしきい値に到達した、具体的にはスレッドの二分の一の処理が終了した、即ち、マクロブロック１００個のデコードが終了したと判定されると、制御はステップＳ１２へ進む。
【００８７】
ステップＳ１２において、イベント２が発生する。具体的にはイベント設定フラグ２を実行してイベント２を発生させると制御はステップＳ１３に進む。ステップＳ１３において、ＣＰＵ３０３はデコード処理を中断する。ステップＳ１４において、イベント待機処理を行う。具体的には、イベント１を待って処理を再開するウェイトフラグｗ１が立てられる。
【００８８】
スレッドＴ３では、ステップＳ１２において発生したイベント２にウェイトフラグｗ２が応答して、処理が再開される。具体的には、制御はステップＳ１５に進み、スレッドＴ２でデコード処理を中断したＣＰＵ３０３がデコード処理を再開する。その後、スレッドＴ３のデコード処理が全て完了すると、スレッドＴ３の処理は完了する。
【００８９】
スレッドＴ１では、ステップＳ１６において、スレッドＴ１の処理量がしきい値に到達した、具体的にはスレッドの四分の三の処理が終了した、即ち、マクロブロック１５０個のデコードが終了したと判定されると、制御はステップＳ１７へ進む。
【００９０】
ステップＳ１７において、イベント１が発生する。具体的にはイベント設定フラグ１を実行してイベント１を発生させると制御はステップＳ１８に進む。ステップＳ１８において、ＣＰＵ３０２はデコード処理を中断する。ステップＳ１９において、イベント待機処理を行う。具体的には、イベント０を待って処理を再開するウェイトフラグｗ０が立てられる。
【００９１】
スレッドＴ２では、ステップＳ１７において発生したイベント１にウェイトフラグｗ１が応答して、処理が再開される。具体的には、制御はステップＳ２０に進み、スレッドＴ１でデコード処理を中断したＣＰＵ３０２がデコード処理を再開する。その後、スレッドＴ２のデコード処理が全て完了すると、スレッドＴ２の処理は完了する。
【００９２】
スレッドＴ０では、ステップＳ２１において、スレッドＴ０の処理量がしきい値に到達した、具体的にはスレッド全体の処理が終了した、即ち、マクロブロック２００個のデコードが終了したと判定された場合、制御はステップＳ２２へ進む。
【００９３】
ステップＳ２２において、イベント０が発生する。具体的にはイベント設定フラグ０を実行してイベント０を発生させるとスレッドＴ０の処理は完了する。
【００９４】
スレッドＴ１では、ステップＳ２２において発生したイベント０にウェイトフラグｗ０が応答して、処理が再開される。具体的には、制御はステップＳ２３に進み、スレッドＴ０でデコード処理を完了したＣＰＵ３０１がデコード処理を再開する。その後、スレッドＴ１のデコード処理が全て完了すると、スレッドＴ１の処理は完了する。
【００９５】
このように、本実施の形態によると、複数の処理部の個数の倍数ではない個数の複数のスライスに分割するステップと、複数のスライスの各々に割り当てられて、複数のスライスの各々を処理する処理ステップと、処理ステップにおいて、処理するスライスを切り替えるスライス・スイッチングを実行するスイッチング・ステップと、を実行することができる。
【００９６】
ここで、スイッチング・ステップは、スライスの処理が所定の位置まで進んだときには、他のスライスの処理を行わせるためのイベントを発生するイベント発生命令と、を含むので、ＯＳの機能に大きく依存せずにスライスを適切に切り換えることができる。したがって、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、処理部を切り換えるスイッチングの間隔を適切に確保しつつ、デコード処理を効率的且つ円滑に行うことができる。
【００９７】
また、イベント発生命令は、ＯＳによって提供される第１の関数に基づいてイベントを発生し、イベント待機命令は、ＯＳによって提供される第２の関数に基づいてイベントに待機するように構成してもよい。また、イベント発生命令及びイベント待機命令は、スライスの処理を行う１単位であるスレッドがレジスタをストアし、他のスレッドにジャンプすることにより実現することができるので、簡単な構成で実現できる。
【００９８】
既に説明したように、イベント発生命令は、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて分割した各々の位置に配置することができる。本実施の形態では、説明を容易にするため、一つのスレッドで一つのスライスを処理する場合について説明したが、実際には、一つのスレッドで処理するスライスの数は複数の場合が多い。一つのスレッドで処理するスライスの数が複数となる場合は、例えば、スライスの数だけ同様の処理を繰り返せばよい。
【００９９】
スレッドの処理量を分割する割合などは処理するデータ又は処理後のデータ量に応じてしきい値を設けて決定することができる。この場合、処理する処理部の性能、処理するデータの特徴も考慮してもよく、スライスの処理を行う１単位であるスレッドの処理量を処理部の数に応じて等分割して求めてもよい。具体的には、スレッドの数に対して、スレッドの処理量を分割する場合、処理部の数に応じて分割した数を乗算して求めた値が、処理部の数の倍数となるようにする。これによって、スライスの数がＣＰＵなどの処理部の個数の整数倍ではない個数であっても、簡単な構成でＯＳの機能に大きく依存することなく、処理を効率的且つ円滑に行うことができる。
【０１００】
本実施の形態では、各ＣＰＵ３０１〜３０４がスレッドを切り換える際にしきい値となる処理量を、一つのスライスを構成するマクロブロック２００個を、処理するＣＰＵの数、即ち、４によって分割した値で、マクロブロック５０個としたが、本発明はこれに限定されない。例えば、各ＣＰＵ３０１〜３０４が処理するデコードする前のデータのデータ量を、処理するＣＰＵの数で分割した値としてもよい。
【０１０１】
一般的に、動画像は、画像データに含まれる低周波成分に大きな量子化係数を与え、高周波成分がゼロとなるように圧縮するため、個々のマクロブロックを構成する画像データの大きさは均一ではない。したがって、しきい値をデコードする前の圧縮データのデータ量を、処理する処理部の数で分割した値とするよりも、デコードして得られたマクロブロックの数を、処理する処理部の数によって分割した値とする方が高品質の動画をデコードすることができる。さらに、しきい値は、処理する量を処理する処理部の数で分割した値であればよく、必ずしも均等に分割する必要はない。処理する処理部の性能、デコードするデータに応じて、例えば、あるスレッドの一部の部分を他の部分より大きくしてもよい。
【０１０２】
また、しきい置を処理するデータ量又はデコードしたマクロブロックの数で設定するのではなく、目標とするマクロブロックの数をデコードするために要する処理時間で設定してもよい。
【０１０３】
本実施の形態では、複数の処理部を図４又は図１１に示すように、複数のＣＰＵ１Ａ〜４Ａとして構成したが、本発明はこれに限定されない。図１２に示すように、複数の処理部を、例えば、ＣＰＵを構成する複数のコア１Ｂ〜４Ｂとして構成してもよく、又は図１３に示すように、例えば、複数のＣＰＵ１Ｃ〜３ＣとＤＳＰ４Ｃの組み合わせとしてもよい。
【０１０４】
以上、本発明の実施の形態について説明したが、本発明は上述した実施の形態に限定されるものではない。また、本発明の実施の形態に記載された効果は、本発明から生じる最も好適な効果を列挙したものに過ぎず、本発明による効果は、本発明の実施例に記載されたものに限定されるものではない。
【０１０５】
例えば、本発明の用途は、動画像のデコード処理に限定されることはなく、動画像のエンコード処理に適用してもよいし、数値計算、ＤＶ（Ｄｉｇｉｔａｌ  Ｖｉｄｅｏ）コーデック、様々なシミュレーションなど、高速で安定した処理が求められる様々な用途に適用可能である。
【図面の簡単な説明】
【０１０６】
【図１】本発明の方法を実行する動画処理装置の機能構成図である。
【図２】動画像の一フレームを構成するスライスの構成を説明する図である。
【図３】本発明の方法の概要を説明するフローチャートである。
【図４】本発明の一実施の形態の動画処理装置のハードウェア構成図である。
【図５】図４の動画処理装置が実行するスレッドを説明する図である。
【図６】図４の動画処理装置が実行するスイッチング処理を説明するタイミングチャートである。
【図７】スイッチング処理によって割り当てられるＣＰＵと各スライスとの関係を表す表である。
【図８】図４の動画処理装置が実行する擬似コードの概要図である。
【図９】図８に続く図４の動画処理装置が実行する擬似コードの概要図である。
【図１０】図４の動画処理装置が実行する動作を説明するフローチャートである。
【図１１】図４の動画処理装置の機能構成図である。
【図１２】図４の動画処理装置を処理部をコアで構成した場合の機能構成図である。
【図１３】図４の動画処理装置を処理部にＤＳＰを組み合わせて構成した場合の機能構成図である。
【符号の説明】
【０１０７】
１〜４              処理部
５                  スライス分割部
６                  スイッチング部
２００              バスライン
３００              制御部
３０１〜３０４      ＣＰＵ
３２０              通信インタフェース
３３０              メインメモリ
３４０              ＢＩＯＳ
３５０              表示装置
３６０              Ｉ／Ｏコントローラ
３７０              入出力装置
４２０              記憶装置
【図１】
2011526009.tif 000003
【図２】
2011526009.tif 000004
【図３】
2011526009.tif 000005
【図４】
2011526009.tif 000006
【図５】
2011526009.tif 000007
【図６】
2011526009.tif 000008
【図７】
2011526009.tif 000009
【図８】
2011526009.tif 000010
【図９】
2011526009.tif 000011
【図１０】
2011526009.tif 000012
【図１１】
2011526009.tif 000013
【図１２】
2011526009.tif 000014
【図１３】
2011526009.tif 000015
【国際調査報告】
2011526009.tif 000016
2011526009.tif 000017
2011526009.tif 000018
2011526009.tif 000019