(58)【調査した分野】(Int.Cl.,DB名)
前記優先度は、前記複数の要素データの各々の要素データ毎にその要素データに含まれるブロックに対する復号処理の進捗度に基いて算出され、該進捗度が低いほど優先度が高い、請求項1記載の装置。
前記優先度は、前記複数の要素データの各々の要素データ毎にその要素データに含まれる未処理のブロックに対する予測された処理時間に基いて算出され、該予測された処理時間が長いほど優先度が高い、請求項1または2記載の装置。
画像または音声の符号化データを復号する方法であって、該符号化データが独立して復号可能な複数の要素データからなり、該複数の要素データの各々が少なくとも一つのブロックからなり、前記方法は、
プロセッサが前記少なくとも一つのブロックのうち、最初に処理される第1のブロックを特定するブロック情報を生成するステップと、
プロセッサが前記最初のブロックに後続するブロックに対応するブロック情報を生成するステップであって、該ブロック情報がそのブロックが含まれる前記要素データにおける復号処理の順序と、該ブロックと該ブロックが含まれる要素データとは別の要素データに含まれるブロックとの間の復号処理の順序を決める優先度が計算され、その計算された優先度とを含む、該ステップと、
複数のプロセッサが前記生成されたブロック情報に対応するブロックを並列して復号するステップであって、前記要素データにおける最も早い前記復号処理の順序および最も高い前記計算された優先度の両方を含む前記ブロック情報に対応するブロックが前のブロックの復号処理が終了した該複数のプロセッサのうちの一つに割り当てられて復号される、該ステップと、
プロセッサが前記復号されたブロックを格納するとともに、そのブロックに対応する復号された要素データを形成するステップと、
を含む、前記方法。
前記優先度は、前記複数の要素データの各々の要素データ毎にその要素データに含まれるブロックに対する復号処理の進捗度に基いて算出され、該進捗度が低いほど優先度が高い、請求項5記載の方法。
前記優先度は、前記複数の要素データの各々の要素データ毎にその要素データに含まれる未処理のブロックに対する予測された処理時間に基いて算出され、該予測された処理時間が長いほど優先度が高い、請求項5または6記載の方法。
画像または音声の符号化データを復号するプログラムであって、該符号化データが独立して復号可能な複数の要素データからなり、該複数の要素データの各々が少なくとも一つのブロックからなり、
プロセッサが前記少なくとも一つのブロックのうち、最初に処理される第1のブロックを特定するブロック情報を生成するステップと、
プロセッサが前記最初のブロックに後続するブロックに対応するブロック情報を生成するステップであって、該ブロック情報がそのブロックが含まれる前記要素データにおける復号処理の順序と、該ブロックと該ブロックが含まれる要素データとは別の要素データに含まれるブロックとの間の復号処理の順序を決める優先度が計算され、その計算された優先度とを含む、該ステップと、
複数のプロセッサが前記生成されたブロック情報に対応するブロックを並列して復号するステップであって、前記要素データにおける最も早い前記復号処理の順序および最も高い前記計算された優先度の両方を含む前記ブロック情報に対応するブロックが前のブロックの復号処理が終了した該複数のプロセッサのうちの一つに割り当てられて復号される、該ステップと、
プロセッサが前記復号されたブロックを格納するとともに、そのブロックに対応する復号された要素データを形成するステップと、を実行するように構成した、前記プログラム。
【発明を実施するための形態】
【0017】
以下、図面に基づいて本発明に係る実施形態を説明する。
【0018】
{第1の実施形態}
本発明の第1の実施形態は、符号化された画像データを復号する復号装置および復号方法についての例である。以下の具体例では、第1の実施形態に係る復号装置および復号方法が、符号化された画像データに対してMPEG−2に準拠した復号処理を実行するとして説明する。
【0019】
図1は、本発明の第1の実施形態に係る復号装置の構成を示すブロック図である。
【0020】
図1を参照するに、復号装置10は、復号処理を実行する複数のCPU20,21と、符号化された画像データを記憶するRAM22と、CPU20,21が実行するプログラムを格納したROM23と、CPU20,21、RAM22、ROM23を接続するバス24とを有している。
【0021】
CPU20,21は、ROM23に記録されているプログラムをRAM22に展開し、復号処理を実行する。CPU20,21はそれぞれ1個ずつプロセッサ(CPUコア)を有しているが、CPU20,21の少なくとも一方が2個以上のプロセッサを有するCPUモジュールとして構成されていてもよい。復号装置10が有するプロセッサの数は2個以上であれば何個でもよい。
【0022】
RAM22は、符号化された画像データなどを記憶している。
【0023】
符号化された画像データは、この画像データを構成する要素であるスライスを複数備えている。スライスは複数のブロックで構成されており、ブロック単位で復号される。説明を簡単にするため、スライスとブロックは以下のように定義される。すなわち、スライスはMPEG−2のスライスである。また、ブロックはMPEG−2のマクロブロックである。
【0024】
図2は、MPEG−2のスライスとマクロブロックを示す図である。
【0025】
図2を参照するに、MPEG−2では1枚の画面1000が16ライン幅のスライス1100で構成されている。スライス1100は16ライン×16画素のマクロブロック1200で構成されている。
【0026】
第1の実施形態では、スライスを構成するブロックの単位で処理部に復号処理が割り当てられる。ブロックは、スライスよりもデータサイズが小さい。ブロックの単位で処理部に復号処理を割り当てることで、従来よりも処理部に対する復号処理の割り当てがより効率的となる。以下では、説明を簡単にするため、符号化フレームのうち、I(Intra)フレームのみを使用すると仮定する。なお、以下の説明は、同様にP(Predictive)フレームやB(Bidirectionally Predictive)フレームの復号処理にも拡張できる。
【0027】
図3は、本発明の第1の実施形態に係る復号装置の機能構成図である。
【0028】
図3を参照するに、復号装置10は、復号処理部30として動作する。CPU20は、RAM22上に展開されるプログラムによって、メイン処理部31、ワーカー処理部32a、スライスデコーダ33aとして動作する。CPU21は、RAM22上に展開されるプログラムによって、ワーカー処理部32b、スライスデコーダ33bとして動作する。
【0029】
メイン処理部31は、各スライスのブロックの復号処理を開始するために必要な処理を実行する。
図3では、CPU20にメイン処理部31が割り当てられているが、CPU21にメイン処理部31が割り当てられていてもよい。ワーカー処理部32a,32bは、スライスデコーダ33a,33bにブロックを割り当て、割り当てたブロックの復号処理を実行させる。
【0030】
スライスデコーダ33a,33bは、ワーカー処理部32a,32bによって割り当てられたブロックの復号処理を実行する。各ワーカー処理部と各スライスデコーダは一対一の対応関係を有する。すなわち、ワーカー処理部32aはスライスデコーダ33aと対応関係を有しており、スライスデコーダ33aにブロックを割り当て、割り当てたブロックの復号処理を実行させる。また、ワーカー処理部32bはスライスデコーダ33bと対応関係を有しており、スライスデコーダ33bにブロックを割り当て、割り当てたブロックの復号処理を実行させる。この例では、スライスデコーダがソフトウェアで実現されることを想定しているが、ハードウェアで実現されてもよい。
【0031】
RAM22は、キュー34、スライスバッファ35、ビデオメモリ36、スライスコンテキスト37、カウンタ38を有している。
【0032】
キュー34にはラッパーブロックが格納される。ラッパーブロックは、処理対象のブロックの情報を含む。スライスバッファ35には、符号化されたスライスが格納される。ビデオメモリ36には、復号処理されたスライスが格納される。スライスコンテキスト37には、スライスの復号処理の状態に関する情報が格納される。スライスの復号処理の状態に関する情報は、具体的にはスライスの符号の開始位置の情報と、そのスライスの出力先のビデオメモリ36の位置の情報とを含む。カウンタ38には、復号処理の開始時に初期化され各スライスの復号処理が完了するごとに更新される値が格納される。
【0033】
スライスデコーダ33a,33bによる復号処理は、より詳細には以下のように行われる。スライスコンテキスト37は、スライスの符号の開始位置の情報と、そのスライスの出力先のビデオメモリ36の位置の情報とが与えられて初期化される。スライスデコーダ33a,33bは、与えられたスライスコンテキスト37に従って、スライスの先頭のブロックから1個ずつ順番にブロックを復号し、復号したブロックをビデオメモリ36に出力する。スライスデコーダ33a,33bは、スライスのブロックを復号する毎にスライスコンテキスト37を更新する。
【0034】
<スライスを構成するブロック>
MPEG−2のスライスは、独立に復号処理できるデータであるが、同じスライスに属するブロック(マクロブロック)は、スライス先頭のブロックを除いて、次の3つの依存関係を持つ。
【0035】
(1)DC予測:ラスタ順で1個前のブロックから現在のブロックのDC成分が予測される。
【0036】
(2)量子化スケール:ラスタ順で1個前のブロックの量子化スケールと同じ量子化スケールを使う場合、ブロックの量子化スケールを省略できる。
【0037】
(3)符号の開始位置:あるブロックの符号の開始位置は、それまでのブロックの符号をすべて復号しなければ明らかにならない。
【0038】
上記のDC予測、量子化スケール、符号の開始位置はスライスコンテキストとして保存される。
【0039】
符号化されたストリームの各スライスを復号するには、MPEGヘッダ(シーケンスヘッダやピクチャヘッダなど)に含まれる、スライスに共通の情報(クロマサブサンプリング、DC精度、量子化マトリクスなど)が必要である。説明を簡単にするため、スライスが復号される前にこの情報が解析され、スライスデコーダに暗黙的にこの情報が与えられると仮定する。
【0040】
各スライスの符号の開始位置は、ストリーム中のスライスヘッダによって合図される。ストリームからこのスライスヘッダを探すことで、各スライスの符号の開始位置が得られる。ただし、スライス中のブロックの符号の開始位置を復号処理される前に予め知ることはできない。
【0041】
本発明の第1の実施形態では、スライスSはK個のブロックに分割する。1つのスライスSを分割したK個のブロックをS
0/K,S
1/K,・・・S
(K−1)/Kとする。なお、ブロックの個数Kは1以上であれば、いずれの整数を選択してもよいが、以下の点を考慮することが好ましい。
【0042】
スライスをブロックに分割する方法は任意であるが、分割幅は適当に決める必要がある。分割幅はブロックの処理時間と関係するため、分割幅が大きすぎると、各ワーカー処理部に処理を均等に割り当てることが難しくなる。逆に、分割幅が小さすぎると、キューへのアクセス、スライスの処理状態(スライスコンテキスト)の保存・復元、スライスの処理におけるキャッシュミスなどによるオーバーヘッドが増加する。
【0043】
<ブロックの依存関係(ラッパーブロック)>
1つのスライスSを構成するK個のブロックS
0/K,S
1/K,・・・S
(K−1)/Kには依存関係(逐次性)がある。依存関係とは、2つのブロックに関して、一方のブロックの処理を開始する前に他方のブロックの処理が完了しているということである。この依存関係は、S
0/K→S
1/K→・・・S
(K−1)/Kと表される。S
k/K→S
(k+1)/K(k=0,・・・,K−1)は、ブロックS
(k+1)/Kの処理を開始する前にブロックS
k/Kの処理が完了していることを表す。
【0044】
ラッパーブロックは、各スライスSのブロックの処理の依存関係の情報を有し、特に、処理対象のブロックを特定する情報を含んでいる。各スライスSのラッパーブロックW
k/Kがキュー34から取り出されると、以下の処理が実行される。
【0045】
0≦k<K−1の場合:ブロックS
k/Kが処理される。その後、次に処理されるブロックS
(k+1)/Kに関するラッパーブロックW
(k+1)/Kがキューに追加される。
【0046】
k=K−1の場合:ブロックS
k/Kが処理され、スライスSの復号処理が完了する。
【0047】
復号処理の初期状態において、各スライスの最初のラッパーブロックW
0/Kが生成され、キュー34に格納される。ワーカー処理部32a,32bは、スライスSのラッパーブロックW
k/Kをキュー34から取り出して、ラッパーブロックW
k/Kが指定するスライスSのブロックS
k/Kの処理を行った後、スライスSの次のブロックS
(k+1)/Kの処理に関するラッパーブロックW
(k+1)/Kをキューに追加する。このようにすることで、スライスSのブロックS
(k+1)/Kの処理を開始する前にスライスSのブロックS
k/Kの処理が完了しているという依存関係が保証される。
【0048】
<キューの制御>
図4は、各ワーカー処理部にラッパーブロックを割り当てる様子を示す図である。
図4を参照するに、キュー34には処理待ちのラッパーブロックが置かれ、ワーカー処理部32a,32bはキュー34からラッパーブロックを取り出し、取り出したラッパーブロックを処理する。
【0049】
図4に示す例では、キュー34は3つのラッパーブロックを格納することができる。キュー34にラッパーブロックが追加されるときには、ラッパーブロックからなる列の最後尾にラッパーブロックが追加される。また、キュー34からラッパーブロックが取り出されるときには、ラッパーブロックからなる列の先頭のラッパーブロックが取り出される。ただし、ラッパーブロックに優先度を関連付けておき、キュー34に格納されたラッパーブロックを、そのラッパーブロックに関連付けられた優先度の高い順に取り出してもよい。
図4では、キュー34に3つのラッパーブロックA,B,Cが格納された状態において、ラッパーブロック列の先頭のブロックAが取り出され、取り出されたラッパーブロックAがワーカー処理部32aによって処理される様子が示されている。
【0050】
キュー34からラッパーブロックを取り出す、あるいはキュー34にラッパーブロックを追加するため、複数のワーカー処理部が同時にキュー34にアクセスすると、そのアクセスは排他制御される。すなわち、同時に1つのワーカー処理部からのアクセスのみが許可され、他のワーカー処理部がアクセスできない。この制御によって、2つ以上のワーカー処理部が同一のラッパーブロックをキュー34から取り出して処理することはなくなり、キュー34の状態の整合性が保たれる。
【0051】
<ブロックを処理する優先度>
スライスを分割したブロックに対して、優先度という指標を与え、複数のスライスについてそれぞれブロックがキュー34にある場合に、優先度の高いブロックを優先的に処理することで、ワーカー処理部32a,32bに対する処理の割り当てが、より効率的になりやすくなる。本発明の第1の実施形態では、3つの優先度P
0,P
1,P
2が定義される。それぞれの優先度はブロック毎に与えられる。
【0052】
優先度P
0は、スライスにおけるブロックの処理の進捗割合に基づく指標である。ブロックS
k/Kの優先度P
0(S
k/K)は、ブロックS
k/Kを含む以降のブロックの処理時間とスライスS全体の処理時間の比として(1)式のように定義される。
【数1】
【0053】
(1)式において、T(S
j/K)はブロックS
j/Kの処理時間であり、T(S)はスライスS全体の処理時間である。実際には、T(S
j/K)とT(S)が未知であっても、それらの比がある程度の正確さで予測できれば、優先度P
0を求めることができる。(1)式は(2)式と等価である。
【数2】
【0054】
(2)式は、進捗割合の低いスライスのブロックが優先的に処理されることを示している。各ブロックの処理時間が同一であると仮定すると、K個のブロックのうちブロックS
0/KからブロックS
k−1/Kまでのk個のブロックの処理が終了したときの進捗割合はk/Kと表される。したがって、(2)式から優先度P
0は(3)式となる。
【数3】
【0055】
優先度P
1は、スライスにおける未処理のブロックの処理時間に基づく指標である。ブロックS
k/Kの優先度P
1(S
k/K)は、ブロックS
k/Kを含む以降のブロックの処理時間として(4)式のように定義される。
【数4】
【0056】
(4)式において、T(S
j/K)はブロックS
j/Kの処理時間である。
【0057】
T(S
j/K)が未知の場合には、例えば、処理が終了しているブロックの処理時間からT(S
j/K)を予測すればよい。(4)式は、残りの処理時間(残りの処理時間の予測値)が長いスライスのブロックが優先的に処理されることを示している。
【0058】
優先度P
2は、ブロックに対応するラッパーブロックがキュー34に追加されたタイミングに基づく指標である。ブロックS
k/Kの優先度P
2(S
k/K)は、ブロックS
k/Kに対応するラッパーブロックがキュー34に追加された時刻t
k/Kとして(5)式のように定義される。
【数5】
【0059】
(5)式に従って、最後に処理されたブロックが属するスライスと同じスライスのブロックの処理を優先的に行うことで、キャッシュの利用効率が高まり、処理速度が向上する。
【0060】
ブロックの分割幅(ブロックの処理時間)がある程度大きく、スライス全体で同一の優先度P
0を持つブロックが多数存在するとき、例えば、優先度P
1,P
2を導入すると、ワーカー処理部32a,32bに対して、より均等にブロックの処理を割り当てることができる。
【0061】
図5Aは、本発明の第1の実施形態に係るメイン処理部31の復号処理を示すフローチャートである。
【0062】
図5Aを参照するに、メイン処理部31は処理S10を実行する。処理S10は次に説明するステップS100、S101、S105、S110、S116、S115、S120、およびS125を含んでいる。
【0063】
最初に、ステップS100では、1つのシーンまたはクリップの復号処理が終了したか否かの判定結果に応じて、処理が分岐する。
【0064】
1つのシーンまたはクリップの復号処理が終了していない場合、ステップS101では、メイン処理部31は、1つのシーンまたはクリップを構成する1つのフレームにおいて処理対象とするスライスを選択する。
【0065】
次いで、ステップS105では、メイン処理部31は、処理対象とするスライスの数と同じ値をカウンタ38に格納する。
【0066】
次いで、ステップS110では、メイン処理部31は、各スライスの最初のラッパーブロックを生成する。このとき、スライスの数と同数のラッパーブロックが生成される。
【0067】
生成されたラッパーブロックには、スライスコンテキストが含まれている。このスライスコンテキストには、復号処理すべきスライスの符号が格納されているスライスバッファ35の位置の情報と、そのスライスの出力先のビデオメモリ36の位置の情報と、そのラッパーブロックが属するスライスの復号処理の進捗割合と、優先度とが含まれている。
【0068】
スライスバッファ35の位置は、復号処理すべきスライスのブロックの開始位置を示す。ビデオメモリ36の位置は、復号処理後のブロックを格納する位置を示す。
【0069】
進捗割合は、例えば(復号処理されたブロックの数)/(スライスに含まれる全てのブロックの数)として計算される。または、進捗割合を、(復号処理されたブロックの符号長の累積値)/(スライスに含まれる全てのブロックの符号長の合計値)として計算することもできる。
【0070】
進捗割合の計算に使用される、スライスに含まれる全てのブロックの数や、スライスに含まれる全てのブロックの符号長の合計値は、スライス全体の復号処理が開始される前にスライスコンテキスト37に保存されている。ブロックが復号処理される毎に、復号処理されたブロックの数や、復号処理されたブロックの符号長の累積値が更新され、スライスコンテキスト37に保存される。
【0071】
優先度は、1から進捗割合を引いた値として定義される。この優先度は、優先度P
0に相当する。この例では、優先度P
0のみを使用するが、優先度P
0に加えて優先度P
1や優先度P
2を使用してもよい。
【0072】
ステップS110では、各スライスの進捗割合が0なので、各スライスの最初のラッパーブロックに関連付けられる優先度は1である。各スライスの最初のラッパーブロックがキュー34から取り出されるとき、各ラッパーブロックは、キュー34に入れられた順番で取り出される。
【0073】
次いで、ステップS115では、メイン処理部31は、生成したラッパーブロックをキュー34に入れる。
【0074】
次いで、ステップS116では、メイン処理部31は、ワーカー処理部32a,32bから、ステップS101で選択したスライスの復号処理の終了が通知されるまで待機する。
【0075】
ワーカー処理部32a,32bから、ステップS101で選択したスライスの復号処理の終了が通知されるとステップS120に進む。ステップS120では、1つのフレームの全てのスライスの復号処理が終了したか否かの判定結果に応じて、処理が分岐する。続けて他のスライスの復号処理を行う場合、ステップS101からの処理が再度実行される。1つのフレームの全てのスライスの復号処理が終了した場合、ステップS100からの処理が再度実行される。
【0076】
ステップS100において1つのシーンまたはクリップの復号処理が終了した場合、ステップS125では、メイン処理部31は、ワーカー処理部32a,32bの数と同じ数の終了用のラッパーブロックを生成してキュー34に入れる。終了用のラッパーブロックには例えば終了を明示する情報が含まれているため、終了用のラッパーブロックとステップS110で生成されたラッパーブロックとを区別することが可能である。終了用のラッパーブロックをキュー34に入れた後、メイン処理部31は処理S10を終了する。
【0077】
図5Bは、本発明の第1の実施形態に係るワーカー処理部32a,32bの復号処理を示すフローチャートである。
【0078】
図5Bを参照するに、ワーカー処理部32a,32bはそれぞれ処理S20a、S20bを実行し、ワーカー処理部32a,32bはこれらの処理S20a、S20bを並列して実行する。処理S20aは次に説明するステップS200、S205、S206、S210、S215、S220、S225、S230、S235、S240、S245、およびS250を含んでいる。処理S20bは処理S20aと同様であるので、フローの詳細の図示を省略している。
【0079】
最初に、図示を省略しているが、ワーカー処理部32a,32bは、キュー34にラッパーブロックがない場合、キュー34にラッパーブロックが追加されるまで待機する。
【0080】
キュー34にラッパーブロックがある場合、ステップS200では、ワーカー処理部32a,32bはキュー34から先頭のラッパーブロックを取り出す。
【0081】
次いで、ワーカー処理部32a,32bは、ステップS200でキュー34から取り出したラッパーブロックが終了用のラッパーブロックであるか否かを確認する。ステップS200でキュー34から取り出したラッパーブロックが終了用のラッパーブロックである場合、ステップS206では、ワーカー処理部32a,32bは、自身が使用しているRAM22の領域を解放するなどの終了処理を行い、処理S20a,S20bを終了する。
【0082】
ステップS200でキュー34から取り出したラッパーブロックが終了用のラッパーブロックでない場合、ステップS210では、ワーカー処理部32a,32bは、キュー34から取り出したラッパーブロックが示す処理対象のブロックの復号処理をスライスデコーダ33a,33bに行わせる。
【0083】
具体的には、ステップS210では以下の処理が行われる。ラッパーブロックには、スライスコンテキストが含まれている。前述したように、このスライスコンテキストには、復号処理すべきスライスの符号が格納されているスライスバッファ35の位置の情報と、そのスライスの出力先のビデオメモリ36の位置の情報とが含まれている。ワーカー処理部32a,32bはこれらの情報をスライスデコーダ33a,33bに与える。
【0084】
スライスデコーダ33a,33bは、符号化されたスライスのデータをビット単位またはバイト単位でスライスバッファ35から読み出し、読み出したデータを復号処理する。ブロックの復号処理が終了すると、スライスデコーダ33a,33bは、復号処理したブロックのデータをビデオメモリ36に保存し、スライスコンテキスト37を更新する。
【0085】
ワーカー処理部32a,32bがスライスデコーダ33a,33bに与える、スライスの出力先のビデオメモリ36の位置の情報は、フレーム中のスライスの位置とそのスライス中のブロックの位置とに対応したビデオメモリ36中の位置を示している。スライスデコーダ33a,33bは、復号処理したブロックのデータを、上記の情報が示す位置に保存する。1フレームを構成する全てのスライスに含まれる全てのブロックの復号処理が終了したとき、ビデオメモリ36に保存されている各ブロックは、符号化された各スライスに対応した、復号処理されたスライスを構成している。
【0086】
次いで、ステップS215では、ワーカー処理部32a,32bは、スライスコンテキスト37に基づいて、復号処理されたブロックが属するスライスの進捗割合と優先度を計算する。前述したように、進捗割合は、例えば(復号処理されたブロックの数)/(スライスに含まれる全てのブロックの数)、または(復号処理されたブロックの符号長の累積値)/(スライスに含まれる全てのブロックの符号長の合計値)として計算される。優先度は、1から進捗割合を引いた値として計算される。
【0087】
次いで、ステップS220では、スライスの最後のラッパーブロックが処理されたか否かの判定結果に応じて、処理が分岐する。進捗割合の値を使用すれば、スライスの最後のラッパーブロックが処理されたか否かの判定を行うことができる。すなわち、進捗割合が1より小さければ、スライスの最後のラッパーブロックはまだ処理されていない。また、進捗割合が1であれば、スライスの最後のラッパーブロックが処理されたことになる。
【0088】
スライスの最後のラッパーブロックが処理されたとき、ステップS225では、ワーカー処理部32a,32bは、カウンタ38の値を1つデクリメントする。複数のワーカー処理部が同時にカウンタ38にアクセスすると、そのアクセスは排他制御される。
【0089】
次いで、ステップS230では、ワーカー処理部32a,32bは、カウンタ38の値を確認する。ステップS105でスライスの数と同じ値に設定されたカウンタ38の値は、各スライスの最後のブロックが復号処理されるごとに、ステップS225で1ずつデクリメントされる。このため、カウンタの値が0でなければ、復号処理が終了していないスライスが存在しているので、ステップS200からの処理が再度実行される。また、カウンタの値が0になったとき、全てのスライスのラッパーブロックの処理が終わっているので、ステップS250では、ワーカー処理部32a,32bは、
図5AのステップS101で選択されたスライスの復号処理の終了をメイン処理部31に通知する。次いで、ステップS200からの処理が再度実行される。
【0090】
ステップS220でスライスの最後のラッパーブロックがまだ処理されていないとき、ステップS235では、ワーカー処理部32a,32bは、ステップS210で復号処理したブロックが属するスライスと同じスライスに属するブロックであって、ステップS210で復号処理したブロックの次のブロックを特定する情報を含むラッパーブロックを生成する。
【0091】
生成されたラッパーブロックには、スライスコンテキストが含まれている。このスライスコンテキストには、復号処理後に更新されたスライスコンテキスト37から得られる、復号処理すべきスライスの符号が格納されているスライスバッファ35の位置の情報と、そのスライスの出力先のビデオメモリ36の位置の情報と、ステップS215で算出された、そのラッパーブロックが属するスライスの復号処理の進捗割合と、優先度とが含まれる。
【0092】
次いで、ステップS240では、ワーカー処理部32a,32bは、生成したラッパーブロックをキュー34に入れる。
【0093】
次いで、ステップS245では、ワーカー処理部32a,32bは、ステップS240でキュー34に追加されたラッパーブロックを含むキュー34内のラッパーブロックを、各ラッパーブロックに関連付けられた優先度の降順に整列する。次いで、ステップS200からの処理が再度実行される。
【0094】
スライスを含む1枚のフレーム全体の符号化された画像データは以下のように復号処理される。例えば、1枚のフレームがU個のスライスで構成され、フレームの上から順に1,2,・・・,Uの番号が各スライスに付与されていると仮定する。V個(V≦U)以下のスライスを単位として、復号処理が実行される。例えば、1番目からV番目までのV個のスライスが処理対象として選択され(
図5AのステップS101に対応)、
図5Aに示すフローチャートに従って処理される。V個のスライスの復号処理が終了すると、V+1番目から2V番目までのV個のスライスが処理対象として選択され(
図5AのステップS101に対応)、
図5Aに示すフローチャートに従って処理される。残りのスライスがV個以下となったとき、残りの全てのスライスが処理対象として選択され(
図5AのステップS101に対応)、
図5Aに示すフローチャートに従って復号処理される。以上によって、1枚のフレーム全体の符号化された画像データが復号処理される。
【0095】
符号化された動画データを復号処理する場合、1枚のフレーム全体の符号化された画像データの復号処理が終了したら、次のフレームに係る、フレーム全体の符号化された画像データの復号処理が開始される。上記の処理は実施可能な処理の一例であり、上記に限定されない。例えば、各々のスライスの復号処理は独立に実行できるので、必ずしもフレーム内で連続して配置されたスライスを単位として復号処理を実行しなくてもよい。
【0096】
図6は、本発明の第1の実施形態に係るワーカー処理部32a,32bの他の復号処理を示すフローチャートである。
【0097】
図6を参照するに、第1の実施形態に係る他の復号方法では、優先度は使用されない。この点が先の
図5Bに示すフローチャートと異なっている。このため、ラッパーブロックがキュー34から取り出されるとき、各ラッパーブロックは、キュー34に入れられた順番で取り出される。
図6では、
図5Bに示す処理と同じ処理には同じステップ番号が付してあり、以下ではその説明を省略し、
図5Bに示すフローチャートと異なる箇所のみを説明する。
【0098】
図6に示すフローチャートでは、ステップS215でスライスの進捗割合と優先度が計算されるが、優先度が使用されないため、ステップS255では進捗割合のみが計算される。また、
図6に示すフローチャートでは、
図5BのステップS245の処理は実行されない。
【0099】
<復号処理の例>
ワーカー処理部の振る舞い(同時に複数のワーカー処理部がキューにアクセスした場合の調停やブロックの処理時間など)は、割り込みの発生などの要因によって非決定論的であり、実装によって異なる可能性がある。第1の実施形態では、キューを使用した典型的な復号処理の例を示す。また、説明を簡単にするため、キューへのアクセスに必要な時間を無視できるものと考える。
【0100】
以下では、M=3、N=2の場合のスライスの復号処理の一例を示す。以下の例で示されるスライスの処理方法は必ずしも最適であるとは限らない。説明を簡単にするため、以下ではラッパーブロックと、スライスを分割したブロックとを区別せず、単にブロックと記載する。
【0101】
図7は、スライスとブロックの例を示す図である。
図7を参照するに、3つのスライスA,B,Cは、同一の処理時間を必要とする、分割幅の等しい2つのブロックに分割できる。例えば、スライスAはブロックA
0/2とブロックA
1/2とに分割できる。各ブロックの右上に付与された符号は各ブロックの処理の順番を表している。例えば、ブロックA
0/2については、「0/2」が処理の順番を表している。「0/2」の「2」はブロックの総数を表している。ブロックA
0/2はブロックA
1/2よりも先に処理される。
【0102】
スライスBはブロックB
0/2とブロックB
1/2とに分割できる。ブロックB
0/2はブロックB
1/2よりも先に処理される。スライスCはブロックC
0/2とブロックC
1/2とに分割できる。ブロックC
0/2はブロックC
1/2よりも先に処理される。
【0103】
図8は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図9は、キューの状態を示す図である。
【0104】
時刻t=t
0に全てのスライスの最初のブロックA
0/2,B
0/2,C
0/2がキューに追加される(
図5AのステップS115に対応)。
【0105】
時刻t=t
0+Δt(時刻t=t
0の直後)にキューから先頭のブロックA
0/2とその次のブロックB
0/2が取り出され、ブロックA
0/2の処理がワーカー処理部#0に割り当てられ、ブロックB
0/2の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図6のステップS210に対応)。
【0106】
時刻t=t
1にブロックA
0/2とブロックB
0/2の処理が終了すると、ブロックA
0/2の次に処理すべきブロックA
1/2と、ブロックB
0/2の次に処理すべきブロックB
1/2とがキューに追加される(
図6のステップS240に対応)。時刻t=t
0では最後尾のブロックであったブロックC
0/2が時刻t=t
1では先頭のブロックとなり、ブロックC
0/2の後にブロックA
1/2とブロックB
1/2が追加されている。
【0107】
時刻t=t
1+Δtにキューから先頭のブロックC
0/2とその次のブロックA
1/2が取り出され、ブロックC
0/2の処理がワーカー処理部#0に割り当てられ、ブロックA
1/2の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図6のステップS210に対応)。
【0108】
時刻t=t
2にブロックC
0/2とブロックA
1/2の処理が終了すると、ブロックC
0/2の次に処理すべきブロックC
1/2がキューに追加される(
図6のステップS240に対応)。ブロックA
1/2の処理が終了したため、スライスAの処理は終了する。時刻t=t
1では最後尾のブロックであったブロックB
1/2が時刻t=t
2では先頭のブロックとなり、ブロックB
1/2の後にブロックC
1/2が追加されている。
【0109】
時刻t=t
2+Δtにキューから先頭のブロックB
1/2とその次のブロックC
1/2が取り出され、ブロックB
1/2の処理がワーカー処理部#0に割り当てられ、ブロックC
1/2の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図6のステップS210に対応)。
【0110】
ブロックB
1/2とブロックC
1/2の処理が終了すると、スライスBとスライスCの処理は終了する。この時点よりも前にスライスAの処理は終了しているため、ブロックB
1/2とブロックC
1/2の処理が終了した時点で、全てのスライスの処理は終了している。
【0111】
この例では、全てのスライスが同一の処理時間のブロックに均等に分割されており、ブロックの総数がワーカー処理部の数の倍数になっている。このため、
図8に示すように、2つのワーカー処理部に対して均等にブロックの処理を割り当てることができる。
【0112】
<復号処理性能>
第1の実施形態の復号方法による処理性能について一実施例を挙げて、以下に説明する。以下の説明では、ワーカー処理部の処理がスレッドにより実行されるとする。また、ワーカー処理部の数Nとスライスの数Mの関係はM≧Nであるとし、全てのスライスの実行時間(実行時間の予測値)は等しく、その時間はTであるとする。実施例では、全てのスライスは均一にK個のブロックに分けられ、それぞれのブロックはT/Kの実行時間を必要とする。説明を簡単にするため、ワーカー処理部による処理の切り替えに要する時間や、キューへのアクセス時間などのオーバーヘッドは無視できるものと考える。
【0113】
ワーカー処理部に割り当てられるタイムクォンタムは、典型的には、数10ミリ秒から数100ミリ秒程度である。ビデオフレームは、典型的には、毎秒30枚のフレームからなり、実時間で画像を再生するには、1フレームを少なくとも1/30秒すなわち約33ミリ秒で復号処理する必要がある。実際のアプリケーション、例えばビデオ編集システムでは、複数のビデオクリップを同時に再生したり、ビデオエフェクトやトランジションを適用したりするため、33ミリ秒よりも短い復号処理時間が求められる。
【0114】
参考例として、タイムクォンタムが1スライスの処理時間Tと同じ、またはそれよりも大きい場合に、M個のスライスの処理をM個のワーカー処理部によって実行することを考える。タイムクォンタムはタイムスライスとも呼ばれ、OSがワーカー処理部による処理の実行を切り替える間隔を意味する。まず、プロセッサの数Nと同数のスライスの処理が、それぞれに対応するワーカー処理部によって開始される。
【0115】
N個のスライスは並列に処理され、タイムクォンタムを使い切るまでに処理が完了する。N個のスライスの処理が完了すると、残りのスライスの数がN個より少なくなるまで、同様にN個のスライスが並列に処理される。
【0116】
以下の議論では、以下の記号(P1)と記号(P2)を使用する。記号(P1)はXを上回らない最大の整数を示しており、記号(P2)はXを下回らない最小の整数を示している。
【数6】
【数7】
【0117】
MがNで割り切れる場合、M/N回の並列処理を行えば、全てのスライスの処理が完了する。MがNで割り切れない場合、D((6)式)回の並列処理が行われた後、最後にE((7)式)個のスライスが並列に処理される。この最後の並列処理では、スライスが割り当てられないF((8)式)個のワーカー処理部は停止している。
【数8】
【数9】
【数10】
【0118】
参考例では、合計の処理時間T
1は(9)式となる。
【数11】
【0119】
本発明では、MK個のブロックの処理を、N個のワーカー処理部により、ブロック間の依存関係を保ったまま並列に実行することができる。1スライスの処理時間がTであり、1スライスはK個のブロックからなるので、各ブロックの処理時間はT/Kである。各ワーカー処理部は1個のCPUに対応するので、スライスの処理中にはワーカー処理部の切り替えが発生しない。参考例の性能の議論で用いた(9)式において、MをMKに置き換え、TをT/Kに置き換えると、本発明の合計の処理時間T
2を(10)式のように求めることができる。
【数12】
【0120】
参考例の処理性能と本発明の処理性能を比較する指標であるスピードアップ率Rは(11)式で定義される。
【数13】
【0121】
参考例の処理時間T
1が本発明の処理時間T
2と同じとき、R=1となる。このため、参考例の処理性能と本発明の処理性能は同等となる。また、参考例の処理時間T
1が本発明の処理時間T
2よりも長くなると、R>1となる。そうすると、本発明の処理性能が参考例の処理性能を上回る。
【0122】
以下に、いくつかのN,Mの組み合わせに対して、Kとスピードアップ率Rの関係を示す。
図10は、1スライス当たりのブロックの数Kに対するスピードアップ率Rを示すグラフである。
【0123】
K=1のとき、スピードアップ率は1となり、参考例と本発明の処理性能は同等である。合計のブロック数MKがNの倍数となるとき、スピードアップ率Rは最大値R
max((12)式)となる。
【数14】
【0124】
N=2,M=3の場合とN=4とM=10の場合には、Kが2以上になる。そうすると、スピードアップ率が1を超え、本発明の処理性能が参考例の処理性能を上回る。N=3,M=8の場合には、Kが3以上になると、スピードアップ率が1を超える。そうすると、本発明の処理性能が参考例の処理性能を上回る。また、Kが大きくなればなるほど、すなわち、スライスの分割が細かくなればなるほど、スピードアップ率RがR
maxに近づいていく。
【0125】
このように、本発明では、各スライスを所定数以上のブロックに分割できる場合には、ワーカー処理部に対する処理の割り当てが効率的になり、参考例よりも処理速度が向上する。
【0126】
<優先度P
0を使用したスライスの復号処理の例>
第1の実施形態に係る復号処理方法として、優先度P
0を使用しない場合の復号処理の例と、優先度P
0を使用する場合の復号処理の例を示す。説明を簡単にするため、キューへのアクセスに必要な時間やブロックの並べ替えに必要な時間を無視できるものと考える。
【0127】
図11は、スライスとブロックの例を示す図である。
図11を参照するに、3つのスライスA,B,Cがある。スライスA,Bは3個のブロックからなり、スライスCは4個のブロックからなる。スライスA,B,Cのブロックの分割幅(ブロックの処理時間)は同一である。このため、スライスCの処理時間はスライスA,Bの処理時間よりも長い。
【0128】
スライスAはブロックA
0/3とブロックA
1/3とブロックA
2/3とに分割される。スライスAの各ブロックは、ブロックA
0/3、ブロックA
1/3、ブロックA
2/3の順に処理される。スライスBはブロックB
0/3とブロックB
1/3とブロックB
2/3とに分割される。スライスBの各ブロックは、ブロックB
0/3、ブロックB
1/3、ブロックB
2/3の順に処理される。スライスCはブロックC
0/4とブロックC
1/4とブロックC
2/4とブロックC
3/4とに分割される。スライスCの各ブロックは、ブロックC
0/4、ブロックC
1/4、ブロックC
2/4、ブロックC
3/4の順に処理される。
【0129】
図12は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図13は、キューの状態を示す図である。
図12と
図13に示す例では、優先度P
0は使用しない。
【0130】
時刻t=t
0に全てのスライスの最初のブロックA
0/3,B
0/3,C
0/4がキューに追加される(
図5AのステップS115に対応)。
【0131】
時刻t=t
0+Δtにキューから先頭のブロックA
0/3とその次のブロックB
0/3が取り出され、ブロックA
0/3の処理がワーカー処理部#0に割り当てられ、ブロックB
0/3の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図6のステップS210に対応)。
【0132】
時刻t=t
1にブロックA
0/3とブロックB
0/3の処理が終了すると、ブロックA
0/3の次に処理すべきブロックA
1/3と、ブロックB
0/3の次に処理すべきブロックB
1/3とがキューに追加される(
図6のステップS240に対応)。時刻t=t
0では最後尾のブロックであったブロックC
0/4が時刻t=t
1では先頭のブロックとなり、ブロックC
0/4の後にブロックA
1/3とブロックB
1/3が追加されている。
【0133】
時刻t=t
1+Δtにキューから先頭のブロックC
0/4とその次のブロックA
1/3が取り出され、ブロックC
0/4の処理がワーカー処理部#0に割り当てられ、ブロックA
1/3の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図6のステップS210に対応)。
【0134】
時刻t=t
2にブロックC
0/4とブロックA
1/3の処理が終了すると、ブロックC
0/4の次に処理すべきブロックC
1/4と、ブロックA
1/3の次に処理すべきブロックA
2/3とがキューに追加される(
図6のステップS240に対応)。時刻t=t
1では最後尾のブロックであったブロックB
1/3が時刻t=t
2では先頭のブロックとなり、ブロックB
1/3の後にブロックC
1/4とブロックA
2/3が追加されている。
【0135】
時刻t=t
2+Δtにキューから先頭のブロックB
1/3とその次のブロックC
1/4が取り出され、ブロックB
1/3の処理がワーカー処理部#0に割り当てられ、ブロックC
1/4の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図6のステップS210に対応)。
【0136】
時刻t=t
3にブロックB
1/3とブロックC
1/4の処理が終了すると、ブロックB
1/3の次に処理すべきブロックB
2/3と、ブロックC
1/4の次に処理すべきブロックC
2/4とがキューに追加される(
図6のステップS240に対応)。時刻t=t
2では最後尾のブロックであったブロックA
2/3が時刻t=t
3では先頭のブロックとなり、ブロックA
2/3の後にブロックB
2/3とブロックC
2/4が追加されている。
【0137】
時刻t=t
3+Δtにキューから先頭のブロックA
2/3とその次のブロックB
2/3が取り出され、ブロックA
2/3の処理がワーカー処理部#0に割り当てられ、ブロックB
2/3の処理がワーカー処理部#1に割り当てられる(
図6のステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図6のステップS210に対応)。
【0138】
時刻t=t
4にブロックA
2/3とブロックB
2/3の処理が終了すると、スライスAとスライスBの処理は終了する。時刻t=t
4ではキューにブロックは追加されないので、キューにあるブロックはブロックC
2/4だけである。
【0139】
時刻t=t
4+ΔtにキューからブロックC
2/4が取り出され、ブロックC
2/4の処理がワーカー処理部#0に割り当てられる(
図6のステップS205に対応)。ワーカー処理部#0にブロックC
2/4の処理が割り当てられると、ワーカー処理部#0はブロックC
2/4の処理を行う(
図6のステップS210に対応)。ワーカー処理部#1にはブロックの処理が割り当てられず、ワーカー処理部#1は停止している。
【0140】
時刻t=t
5にブロックC
2/4の処理が終了すると、ブロックC
2/4の次に処理すべきブロックC
3/4がキューに追加される(
図6のステップS240に対応)。時刻t=t
5では、キューにあるブロックはブロックC
3/4だけである。
【0141】
時刻t=t
5+ΔtにキューからブロックC
3/4が取り出され、ブロックC
3/4の処理がワーカー処理部#0に割り当てられる(
図6のステップS205に対応)。ワーカー処理部#0にブロックC
3/4の処理が割り当てられると、ワーカー処理部#0はブロックC
3/4の処理を行う(
図6のステップS210に対応)。ワーカー処理部#1にはブロックの処理が割り当てられず、ワーカー処理部#1は停止している。
【0142】
ブロックC
3/4の処理が終了すると、スライスCの処理は終了する。この時点よりも前にスライスA,Bの処理は終了しているため、ブロックC
3/4の処理が終了した時点で、全てのスライスの処理は終了している。
【0143】
この例では、スライスCの処理がスライスA,Bの処理よりも相対的に遅れるので、スライスA,Bの処理が終了した時点で、並列に処理できないスライスCのブロックC
2/4,C
3/4が残ってしまう。
【0144】
以下では、優先度P
0を使用する場合の復号処理の例を示す。
図14は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを復号処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図15は、キューの状態を示す図である。
図14と
図15に示す例では、優先度P
0が使用される。優先度P
0を使用する場合の復号処理の例で用いるスライスは、
図11に示したスライスと同じである。
【0145】
優先度P
0は次のように使用される。ブロックがキューに追加されたときに、ブロック毎の優先度P
0の高い順にブロックが並べられる。この結果、優先度P
0の最も高いブロックがキューの先頭に配置され、優先的に取り出される。優先度P
0が同じブロックが複数存在するとき、それら複数のブロックは、キューに追加された順に並べられる。キュー内のブロックの順番を変更するのは、ブロックがキューに追加されたときでなくてもよく、ブロックがキューから取り出される直前などでもよい。以上に述べたキューの実装は必ずしも最適ではない。例えば、ヒープ(heap)などのデータ構造を使うとより効率的な実装になる。
【0146】
時刻t=t
0に全てのスライスの最初のブロックA
0/3,B
0/3,C
0/4がキューに追加される(
図5AのステップS115に対応)。このとき、ブロックA
0/3,B
0/3,C
0/4の順にブロックがキューに追加されると仮定する。(1)式によれば、各ブロックの優先度P
0は、P
0(A
0/3)=P
0(B
0/3)=P
0(C
0/4)=1である。3つのブロックの優先度P
0が等しいので、キュー内のブロックの順番は変わらない。
【0147】
時刻t=t
0+Δtにキューから先頭のブロックA
0/3とその次のブロックB
0/3が取り出され、ブロックA
0/3の処理がワーカー処理部#0に割り当てられ、ブロックB
0/3の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図5BのステップS210に対応)。
【0148】
時刻t=t
1にブロックA
0/3とブロックB
0/3の処理が終了すると、ブロックA
0/3の次に処理すべきブロックA
1/3と、ブロックB
0/3の次に処理すべきブロックB
1/3とがキューに追加される(
図5BのステップS240に対応)。このとき、ブロックA
1/3,B
1/3の順にブロックがキューに追加されると仮定する。時刻t=t
1では、ブロックC
0/4とブロックA
1/3とブロックB
1/3とがキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(C
0/4)=1、P
0(A
1/3)=P
0(B
1/3)=2/3となるので、ブロックC
0/4,A
1/3,B
1/3の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0149】
時刻t=t
1+Δtにキューから先頭のブロックC
0/4とその次のブロックA
1/3が取り出され、ブロックC
0/4の処理がワーカー処理部#0に割り当てられ、ブロックA
1/3の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0150】
時刻t=t
2にブロックC
0/4とブロックA
1/3の処理が終了すると、ブロックC
0/4の次に処理すべきブロックC
1/4と、ブロックA
1/3の次に処理すべきブロックA
2/3とがキューに追加される(
図5BのステップS240に対応)。時刻t=t
2では、ブロックB
1/3とブロックC
1/4とブロックA
2/3とがキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
1/3)=2/3、P
0(C
1/4)=3/4、P
0(A
2/3)=1/3となるので、ブロックC
1/4,B
1/3,A
2/3の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0151】
時刻t=t
2+Δtにキューから先頭のブロックC
1/4とその次のブロックB
1/3が取り出され、ブロックC
1/4の処理がワーカー処理部#0に割り当てられ、ブロックB
1/3の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0152】
時刻t=t
3にブロックC
1/4とブロックB
1/3の処理が終了すると、ブロックC
1/4の次に処理すべきブロックC
2/4と、ブロックB
1/3の次に処理すべきブロックB
2/3とがキューに追加される(
図5BのステップS240に対応)。時刻t=t
3では、ブロックA
2/3とブロックC
2/4とブロックB
2/3とがキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(A
2/3)=P
0(B
2/3)=1/3、P
0(C
2/4)=2/4となるので、ブロックC
2/4,A
2/3,B
2/3の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0153】
時刻t=t
3+Δtにキューから先頭のブロックC
2/4とその次のブロックA
2/3が取り出され、ブロックC
2/4の処理がワーカー処理部#0に割り当てられ、ブロックA
2/3の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0154】
時刻t=t
4にブロックC
2/4とブロックA
2/3の処理が終了すると、ブロックC
2/4の次に処理すべきブロックC
3/4がキューに追加される(
図5BのステップS240に対応)。ブロックA
2/3の処理が終了したため、スライスAの処理は終了する。時刻t=t
4では、ブロックB
2/3とブロックC
3/4とがキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
2/3)=1/3、P
0(C
3/4)=1/4となるので、ブロックB
2/3,C
3/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0155】
時刻t=t
4+Δtにキューから先頭のブロックB
2/3とその次のブロックC
3/4が取り出され、ブロックB
2/3の処理がワーカー処理部#0に割り当てられ、ブロックC
3/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0156】
ブロックB
2/3とブロックC
3/4の処理が終了すると、スライスBとスライスCの処理は終了する。この時点よりも前にスライスAの処理は終了しているため、ブロックB
2/3とブロックC
3/4の処理が終了した時点で、全てのスライスの処理は終了している。
【0157】
この例では、優先度P
0を使用しないとスライスA,Bの処理よりも相対的に遅れてしまうスライスCの処理を優先的に進めることで、スライスA,B,Cの処理がほぼ均等に進むので、並列に処理できないブロックが最後に残ってしまうことはない。
【0158】
このように、優先度P
0を使用することで、全てのスライスの処理の進捗割合をできるだけ同一に保ったまま並列処理を進めることができる。たとえ、処理時間が正確に予測できない場合であっても、全てのスライスの処理の進捗割合ができるだけ同一に保たれるので、全てのスライスの処理がほぼ同時に終了する。このため、並列に処理できないブロックが最後に残りにくくなり、最後にワーカー処理部にブロックの処理が割り当てられない状態が発生しにくくなる。よって、スライスの並列処理を効率的に行うことができる。
【0159】
<優先度P
0,P
1を使用したスライスの復号処理の例>
優先度P
0を使用した場合の復号処理の例と、優先度P
0,P
1を使用した場合の復号処理の例を示す。説明を簡単にするため、キューへのアクセスに必要な時間やブロックの並べ替えに必要な時間を無視できるものと考える。
【0160】
図16は、スライスとブロックの例を示す図である。
図16を参照するに、3つのスライスA,B,Cがある。スライスA,B,Cは2個のブロックからなる。スライスA,Bのブロックの分割幅は同一であるが、スライスCのブロックの分割幅はスライスA,Bのブロックの分割幅の2倍である。このため、スライスCの処理時間はスライスA,Bの処理時間の2倍となる。
【0161】
スライスAはブロックA
0/2とブロックA
1/2とに分割される。スライスAの各ブロックは、ブロックA
0/2、ブロックA
1/2の順に処理される。スライスBはブロックB
0/2とブロックB
1/2とに分割される。スライスBの各ブロックは、ブロックB
0/2、ブロックB
1/2の順に処理される。スライスCはブロックC
0/2とブロックC
1/2とに分割される。スライスCの各ブロックは、ブロックC
0/2、ブロックC
1/2の順に処理される。
【0162】
図17は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図18は、キューの状態を示す図である。
図17と
図18に示す例では、優先度P
0が使用される。
【0163】
時刻t=t
0に全てのスライスの最初のブロックA
0/2,B
0/2,C
0/2がキューに追加される(
図5AのステップS115に対応)。このとき、ブロックA
0/2,B
0/2,C
0/2の順にブロックがキューに追加されると仮定する。(1)式によれば、各ブロックの優先度P
0は、P
0(A
0/2)=P
0(B
0/2)=P
0(C
0/2)=1である。3つのブロックの優先度P
0が等しいので、キュー内のブロックの順番は変わらない。
【0164】
時刻t=t
0+Δtにキューから先頭のブロックA
0/2とその次のブロックB
0/2が取り出され、ブロックA
0/2の処理がワーカー処理部#0に割り当てられ、ブロックB
0/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図5BのステップS210に対応)。
【0165】
時刻t=t
1にブロックA
0/2とブロックB
0/2の処理が終了すると、ブロックA
0/2の次に処理すべきブロックA
1/2と、ブロックB
0/2の次に処理すべきブロックB
1/2とがキューに追加される(
図5BのステップS240に対応)。このとき、ブロックA
1/2,B
1/2の順にブロックがキューに追加されると仮定する。(1)式によれば、時刻t=t
1にキューに置かれている各ブロックの優先度P
0は、P
0(C
0/2)=1、P
0(A
1/2)=P
0(B
1/2)=1/2となるので、ブロックC
0/2,A
1/2,B
1/2の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0166】
時刻t=t
1+Δtにキューから先頭のブロックC
0/2とその次のブロックA
1/2が取り出され、ブロックC
0/2の処理がワーカー処理部#0に割り当てられ、ブロックA
1/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0167】
時刻t=t
2にブロックA
1/2の処理が終了する。この時点でブロックC
0/2の処理は終了していない。ブロックA
1/2の処理が終了したため、スライスAの処理は終了する。時刻t=t
2では、ブロックB
1/2のみがキューに置かれている。
【0168】
時刻t=t
2+ΔtにキューからブロックB
1/2が取り出され、ブロックB
1/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックB
1/2の処理が割り当てられると、ワーカー処理部#1はブロックB
1/2の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックC
0/2の処理を継続している。
【0169】
時刻t=t
3にブロックB
1/2とブロックC
0/2の処理が終了すると、ブロックC
0/2の次に処理すべきブロックC
1/2がキューに追加される(
図5BのステップS240に対応)。ブロックB
1/2の処理が終了したため、スライスBの処理は終了する。時刻t=t
3では、ブロックC
1/2のみがキューに置かれている。
【0170】
時刻t=t
3+ΔtにキューからブロックC
1/2が取り出され、ブロックC
1/2の処理がワーカー処理部#0に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#0にブロックC
1/2の処理が割り当てられると、ワーカー処理部#0はブロックC
1/2の処理を行う(
図5BのステップS210に対応)。ワーカー処理部#1にはブロックの処理が割り当てられず、ワーカー処理部#1は停止している。
【0171】
ブロックC
1/2の処理が終了すると、スライスCの処理は終了する。この時点よりも前にスライスA,Bの処理は終了しているため、ブロックC
1/2の処理が終了した時点で、全てのスライスの処理は終了している。
【0172】
この例では、スライスA,Bのブロックよりも処理時間がかかるスライスCのブロックが最後に残ってしまう。
【0173】
以下では、優先度P
0に加えて優先度P
1を使用する場合の処理の例を示す。
図19は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図20は、キューの状態を示す図である。
図19と
図20に示す例では、優先度P
0,P
1が使用される。優先度P
0,P
1を使用する場合の処理の例で用いるスライスは、
図16に示したスライスと同じである。スライスA,Bの処理時間をTとし、スライスCの処理時間を2Tとする。
【0174】
優先度P
0,P
1は次のように使用される。ブロックがキューに追加されたときに、ブロック毎の優先度P
0に基づいて、キュー内のブロックの順番が決定される。優先度P
0が同じブロックが複数存在するとき、それら複数のブロックの順番は、ブロック毎の優先度P
1に基づいて決定される。優先度P
1が同じブロックが複数存在するとき、それら複数のブロックは、キューに追加された順に並べられる。キュー内のブロックの順番を変更するのは、ブロックがキューに追加されたときでなくてもよく、ブロックがキューから取り出される直前などでもよい。
【0175】
時刻t=t
0に全てのスライスの最初のブロックA
0/2,B
0/2,C
0/2がキューに追加される(
図5AのステップS115に対応)。このとき、ブロックA
0/2,B
0/2,C
0/2の順にブロックがキューに追加されると仮定する。(1)式によれば、各ブロックの優先度P
0は、P
0(A
0/2)=P
0(B
0/2)=P
0(C
0/2)=1である。3つのブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(A
0/2)=P
1(B
0/2)=T、P
1(C
0/2)=2Tとなるので、ブロックC
0/2,A
0/2,B
0/2の順にブロックが並ぶ。
【0176】
時刻t=t
0+Δtにキューから先頭のブロックC
0/2とその次のブロックA
0/2が取り出され、ブロックC
0/2の処理がワーカー処理部#0に割り当てられ、ブロックA
0/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図5BのステップS210に対応)。
【0177】
時刻t=t
1にブロックA
0/2の処理が終了すると、ブロックA
0/2の次に処理すべきブロックA
1/2がキューに追加される(
図5BのステップS240に対応)。この時点でブロックC
0/2の処理は終了していない。時刻t=t
1では、ブロックB
0/2とブロックA
1/2がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
0/2)=1、P
0(A
1/2)=1/2であるので、ブロックB
0/2,A
1/2の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0178】
時刻t=t
1+Δtにキューから先頭のブロックB
0/2が取り出され、ブロックB
0/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックB
0/2の処理が割り当てられると、ワーカー処理部#1はブロックB
0/2の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックC
0/2の処理を継続している。
【0179】
時刻t=t
2にブロックC
0/2とブロックB
0/2の処理が終了すると、ブロックC
0/2の次に処理すべきブロックC
1/2と、ブロックB
0/2の次に処理すべきブロックB
1/2とがキューに追加される(
図5BのステップS240に対応)。時刻t=t
2では、ブロックA
1/2とブロックC
1/2とブロックB
1/2とがキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(A
1/2)=P
0(C
1/2)=P
0(B
1/2)=1/2となる。3つのブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(C
1/2)=T、P
1(A
1/2)=P
1(B
1/2)=T/2、となるので、ブロックC
1/2,A
1/2,B
1/2の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0180】
時刻t=t
2+Δtにキューから先頭のブロックC
1/2とその次のブロックA
1/2が取り出され、ブロックC
1/2の処理がワーカー処理部#0に割り当てられ、ブロックA
1/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に各ブロックの処理を行う(
図5BのステップS210に対応)。
【0181】
時刻t=t
3にブロックA
1/2の処理が終了する。ブロックA
1/2の処理が終了したため、スライスAの処理は終了する。この時点でブロックC
1/2の処理は終了していない。時刻t=t
3では、ブロックB
1/2がキューに置かれている。
【0182】
時刻t=t
3+Δtにキューから先頭のブロックB
1/2が取り出され、ブロックB
1/2の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックB
1/2の処理が割り当てられると、ワーカー処理部#1はブロックB
1/2の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックC
1/2の処理を継続している。
【0183】
ブロックC
1/2とブロックB
1/2の処理が終了すると、スライスCとスライスBの処理は終了する。この時点よりも前にスライスAの処理は終了しているため、ブロックC
1/2とブロックB
1/2の処理が終了した時点で、全てのスライスの処理は終了している。
【0184】
この例では、スライスA,Bよりも処理時間がかかるスライスCの処理を優先的に進めることで、スライスCのブロックが最後に単独で残ってしまうことはない。
【0185】
このように、優先度P
1を使用することで、処理時間が相対的に長いスライスのブロックが最後に残りにくくなる。このため、最後にワーカー処理部にブロックの処理が割り当てられない状態が発生しにくくなる。よって、スライスの並列処理を効率的に行うことができる。
【0186】
<優先度P
0,P
1,P
2を使用したスライスの復号処理の例>
優先度P
0,P
1,P
2を使用した場合のより複雑な復号処理の例を示す。説明を簡単にするため、キューへのアクセスに必要な時間やブロックの並べ替えに必要な時間を無視できるものと考える。
【0187】
図21は、スライスとブロックの例を示す図である。
図21を参照するに、3つのスライスA,B,Cがある。スライスA,Bは4個のブロックからなり、スライスCは3個のブロックからなる。スライスA,Bは均等に4つのブロックに分割されるが、スライスCは1:2:1の比で3つのブロックに分割される。スライスB,Cの処理時間は同じであるが、スライスAの処理時間はスライスB,Cの処理時間の1.5倍である。
【0188】
スライスAは、処理時間が等しいブロックA
0/4とブロックA
1/4とブロックA
2/4とブロックA
3/4とに分割される。スライスAの各ブロックは、ブロックA
0/4、ブロックA
1/4、ブロックA
2/4、ブロックA
3/4の順に処理される。スライスAの処理時間を6Tとする。
【0189】
スライスBは、処理時間が等しいブロックB
0/4とブロックB
1/4とブロックB
2/4とブロックB
3/4とに分割される。スライスBの各ブロックは、ブロックB
0/4、ブロックB
1/4、ブロックB
2/4、ブロックB
3/4の順に処理される。スライスBの処理時間を4Tとする。
【0190】
スライスCはブロックC
0/4とブロックC
1/4とブロックC
3/4とに分割される。ブロックC
0/4,C
3/4の処理時間は等しいが、ブロックC
1/4の処理時間はブロックC
0/4,C
3/4の処理時間の2倍である。スライスCの各ブロックは、ブロックC
0/4、ブロックC
1/4、ブロックC
3/4の順に処理される。
【0191】
図22は、2つのワーカー処理部#0,#1が3つのスライスA,B,Cを復号処理するときに各ワーカー処理部に対してブロックが割り当てられる様子を示す図である。
図23は、キューの状態を示す図である。
図22と
図23に示す例では、優先度P
0,P
1,P
2が使用される。
【0192】
優先度P
0,P
1,P
2は次のように使用される。ブロックがキューに追加されたときに、ブロック毎の優先度P
0に基づいて、キュー内のブロックの順番が決定される。優先度P
0が同じブロックが複数存在するとき、それら複数のブロックの順番は、ブロック毎の優先度P
1に基づいて決定される。優先度P
1が同じブロックが複数存在するとき、それら複数のブロックの順番は、ブロック毎の優先度P
2に基づいて決定される。キュー内のブロックの順番を変更するのは、ブロックがキューに追加されたときでなくてもよく、ブロックがキューから取り出される直前などでもよい。
【0193】
時刻t=t
0に全てのスライスの最初のブロックA
0/4,B
0/4,C
0/4がキューに追加される(
図5AのステップS115に対応)。このとき、ブロックA
0/4,B
0/4,C
0/4の順にブロックがキューに追加されると仮定する。(1)式によれば、各ブロックの優先度P
0は、P
0(A
0/4)=P
0(B
0/4)=P
0(C
0/4)=1である。3つのブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(A
0/4)=6T、P
1(B
0/4)=P
1(C
0/4)=4Tとなるので、ブロックA
0/4はブロックB
0/4,C
0/4よりも前に置かれる。
【0194】
また、2つのブロックB
0/4,C
0/4の優先度P
1が等しいので、優先度P
2が使用される。ブロックB
0/4,C
0/4がキューに追加された時刻は同じなので、ブロックB
0/4,C
0/4の優先度P
2は等しい。このため、ブロックB
0/4,C
0/4の順番は変更されない。よって、時刻t=t
0では、ブロックA
0/4,B
0/4,C
0/4の順にブロックが並ぶ。
【0195】
時刻t=t
0+Δtにキューから先頭のブロックA
0/4とその次のブロックB
0/4が取り出され、ブロックA
0/4の処理がワーカー処理部#0に割り当てられ、ブロックB
0/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図5BのステップS210に対応)。
【0196】
時刻t=t
1にブロックB
0/4の処理が終了すると、ブロックB
0/4の次に処理すべきブロックB
1/4がキューに追加される(
図5BのステップS240に対応)。この時点でブロックA
0/4の処理は終了していない。時刻t=t
1では、ブロックC
0/4とブロックB
1/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(C
0/4)=1、P
0(B
1/4)=3/4となるので、ブロックC
0/4,B
1/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0197】
時刻t=t
1+Δtにキューから先頭のブロックC
0/4が取り出され、ブロックC
0/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックC
0/4の処理が割り当てられると、ワーカー処理部#1はブロックC
0/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックA
0/4の処理を継続している。
【0198】
時刻t=t
2にブロックA
0/4の処理が終了すると、ブロックA
0/4の次に処理すべきブロックA
1/4がキューに追加される(
図5BのステップS240に対応)。この時点でブロックC
0/4の処理は終了していない。時刻t=t
2では、ブロックB
1/4とブロックA
1/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
1/4)=3/4、P
0(A
1/4)=3/4となる。各ブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(B
1/4)=3T、P
1(A
1/4)=4.5Tとなるので、ブロックA
1/4,B
1/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0199】
時刻t=t
2+Δtにキューから先頭のブロックA
1/4が取り出され、ブロックA
1/4の処理がワーカー処理部#0に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#0にブロックA
1/4の処理が割り当てられると、ワーカー処理部#0はブロックA
1/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#1はブロックC
0/4の処理を継続している。
【0200】
時刻t=t
3にブロックC
0/4の処理が終了すると、ブロックC
0/4の次に処理すべきブロックC
1/4がキューに追加される(
図5BのステップS205に対応)。この時点でブロックA
1/4の処理は終了していない。時刻t=t
3では、ブロックB
1/4とブロックC
1/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
1/4)=3/4、P
0(C
1/4)=3/4となる。各ブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(B
1/4)=3T、P
1(C
1/4)=3Tとなる。
【0201】
各ブロックの優先度P
1が等しいので、優先度P
2が使用される。各ブロックの優先度P
2は、P
2(B
1/4)=t
1、P
2(C
1/4)=t
3となる。優先度P
2を使用すると、ブロックC
1/4,B
1/4の順にブロックが並び(
図5BのステップS245に対応)、より遅い時刻にキューに追加されたブロックが、より早い時刻にキューに追加されたブロックよりも優先的に処理されるようになる。
【0202】
時刻t=t
3+Δtにキューから先頭のブロックC
1/4が取り出され、ブロックC
1/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックC
1/4の処理が割り当てられると、ワーカー処理部#1はブロックC
1/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックA
1/4の処理を継続している。
【0203】
時刻t=t
4にブロックA
1/4の処理が終了すると、ブロックA
1/4の次に処理すべきブロックA
2/4がキューに追加される(
図5BのステップS240に対応)。この時点でブロックC
1/4の処理は終了していない。時刻t=t
4では、ブロックB
1/4とブロックA
2/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(B
1/4)=3/4、P
0(A
2/4)=2/4となるので、ブロックB
1/4,A
2/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0204】
時刻t=t
4+Δtにキューから先頭のブロックB
1/4が取り出され、ブロックB
1/4の処理がワーカー処理部#0に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#0にブロックB
1/4の処理が割り当てられると、ワーカー処理部#0はブロックB
1/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#1はブロックC
1/4の処理を継続している。
【0205】
時刻t=t
5にブロックB
1/4とブロックC
1/4の処理が終了すると、ブロックB
1/4の次に処理すべきブロックB
2/4と、ブロックC
1/4の次に処理すべきブロックC
3/4とがキューに追加される(
図5BのステップS240に対応)。時刻t=t
5では、ブロックA
2/4とブロックB
2/4とブロックC
3/4とがキューに置かれている。
【0206】
(1)式によれば、各ブロックの優先度P
0は、P
0(A
2/4)=P
0(B
2/4)=2/4、P
0(C
3/4)=1/4となるので、ブロックA
2/4,B
2/4はブロックC
3/4よりも前に置かれる。2つのブロックA
2/4,B
2/4の優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(A
2/4)=3T、P
1(B
2/4)=2Tとなるので、ブロックA
2/4はブロックB
2/4よりも前に置かれる。よって、時刻t=t
5では、ブロックA
2/4,B
2/4,C
3/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0207】
時刻t=t
5+Δtにキューから先頭のブロックA
2/4とその次のブロックB
2/4が取り出され、ブロックA
2/4の処理がワーカー処理部#0に割り当てられ、ブロックB
2/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。各ワーカー処理部にブロックの処理が割り当てられると、各ワーカー処理部は並列に処理を開始する(
図5BのステップS210に対応)。
【0208】
時刻t=t
6にブロックB
2/4の処理が終了すると、ブロックB
2/4の次に処理すべきブロックB
3/4がキューに追加される(
図5BのステップS240に対応)。この時点でブロックA
2/4の処理は終了していない。時刻t=t
6では、ブロックC
3/4とブロックB
3/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(C
3/4)=P
0(B
3/4)=1/4となる。各ブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(C
3/4)=P
1(B
3/4)=Tとなる。
【0209】
各ブロックの優先度P
1が等しいので、優先度P
2が使用される。各ブロックの優先度P
2は、P
2(C
3/4)=t
5、P
2(B
3/4)=t
6となる。優先度P
2を使用すると、より遅い時刻にキューに追加されたブロックが、より早い時刻にキューに追加されたブロックよりも優先的に処理される。このため、ブロックB
3/4,C
3/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0210】
時刻t=t
6+Δtにキューから先頭のブロックB
3/4が取り出され、ブロックB
3/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックB
3/4の処理が割り当てられると、ワーカー処理部#1はブロックB
3/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックA
2/4の処理を継続している。
【0211】
時刻t=t
7にブロックA
2/4の処理が終了すると、ブロックA
2/4の次に処理すべきブロックA
3/4がキューに追加される(
図5BのステップS240に対応)。この時点でブロックB
3/4の処理は終了していない。時刻t=t
7では、ブロックC
3/4とブロックA
3/4がキューに置かれている。(1)式によれば、各ブロックの優先度P
0は、P
0(C
3/4)=P
0(A
3/4)=1/4となる。各ブロックの優先度P
0が等しいので、優先度P
1が使用される。(4)式によれば、P
1(C
3/4)=T、P
1(A
3/4)=1.5Tとなるので、ブロックA
3/4,C
3/4の順にブロックが並ぶ(
図5BのステップS245に対応)。
【0212】
時刻t=t
7+Δtにキューから先頭のブロックA
3/4が取り出され、ブロックA
3/4の処理がワーカー処理部#0に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#0にブロックA
3/4の処理が割り当てられると、ワーカー処理部#0はブロックA
3/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#1はブロックB
3/4の処理を継続している。
【0213】
時刻t=t
8にブロックB
3/4の処理が終了する。ブロックB
3/4の処理が終了したため、スライスBの処理は終了する。この時点でブロックA
3/4の処理は終了していない。時刻t=t
8では、ブロックC
3/4がキューに置かれている。
【0214】
時刻t=t
8+Δtにキューから先頭のブロックC
3/4が取り出され、ブロックC
3/4の処理がワーカー処理部#1に割り当てられる(
図5BのステップS205に対応)。ワーカー処理部#1にブロックC
3/4の処理が割り当てられると、ワーカー処理部#1はブロックC
3/4の処理を行う(
図5BのステップS210に対応)。このとき、ワーカー処理部#0はブロックA
3/4の処理を継続している。
【0215】
ブロックA
3/4とブロックC
3/4の処理が終了すると、スライスAとスライスCの処理は終了する。この時点よりも前にスライスBの処理は終了しているため、ブロックA
3/4とブロックC
3/4の処理が終了した時点で、全てのスライスの処理は終了している。
【0216】
この例では、優先度P
0を使用することで、全てのスライスの処理の進捗割合をできるだけ同一に保ったまま並列処理を進めることができる。また、優先度P
1を使用することで、処理時間が相対的に長いスライスAのブロックが最後に単独で残ることはない。よって、スライスの並列処理を効率的に行うことができる。
【0217】
また、この例では、優先度P
2を使用することで、ワーカー処理部#1がスライスCのブロックC
0/4,C
1/4の処理を連続して行い、スライスBのブロックB
2/4,B
3/4の処理を連続して行っている。このように、同じスライスのブロックの処理を連続して行うことで、キャッシュの利用効率が高まり、処理速度が向上する。
【0218】
以上説明したように、第1の実施形態によれば、スライスを分割したブロックの単位でワーカー処理部に処理が割り当てられるので、スライスの単位でワーカー処理部に処理が割り当てられる場合と比較して、いずれかのワーカー処理部が処理の順番待ちのために処理対象が供給されずに休止することを抑制できる。そのため、ワーカー処理部全体の休止時間の合計が減少する。その結果、ワーカー処理部全体の利用効率が高まる。したがって、符号化されたスライスの復号処理の速度が向上する。
【0219】
プロセッサの数Nとスライスの数Mにかかわらず、同一の方法で全てのワーカー処理部に、なるべく均等にスライスの処理が割り当てられる。特に、各スライスの処理時間が事前に分からない、もしくは各スライスの処理時間を正確に予測できない場合でも、全てのスライスの進捗状況がほぼ同一に保たれたまま処理が進む。このため、全体の処理時間に占める、並列に処理できる時間の割合が高くなり、効率的にワーカー処理部を使うことができる。
【0220】
CPUに一対一に対応した、プロセッサの数と同数のワーカー処理部のみが使用されるため、スライスの処理中には、ワーカー処理部のコンテキストスイッチが起こらない。コンテキストスイッチとは、複数のワーカー処理部が同じプロセッサを共有するために、プロセッサの実行状態(コンテキスト)を保存または復元する操作のことである。ワーカー処理部のコンテキストスイッチが起こらないため、処理速度の低下が防止される。
【0221】
スライスの処理時間がOSのタイムクォンタムに比べて小さい場合でも、各ワーカー処理部はブロック単位で並列に処理を行うことができる。短い間隔で複数のスライスを切り替えながら処理を実行することで、プロセッサの数よりも多いスライスを擬似的に並列に処理することができる。
【0222】
キューには並列処理可能なブロックのみが置かれており、キューから取り出されたラッパーブロックは、すぐに任意のワーカー処理部に割り当てられる。このため、スライスの処理中には、キューへのアクセス以外の同期処理が不要である。
【0223】
{第2の実施形態}
本発明の第2の実施形態は、符号化された画像データを復号処理する編集装置および編集方法についての例である。
【0224】
図24は、本発明の第2の実施形態に係る編集装置のハードウェア構成を示すブロック図である。なお、第1の実施形態と共通する要素については同じ符号を付し、その説明を省略する。
【0225】
図24を参照するに、編集装置100は、光ディスクやその他の記録媒体を駆動するためのドライブ101、CPU20、CPU21、CPU102、ROM23、ROM103、RAM22、RAM104、HDD105、通信インターフェース106、入力インターフェース107、出力インターフェース108、ビデオ・オーディオインターフェース114、およびこれらを接続するバス110を備えている。
【0226】
編集装置100は、先の
図1に示したCPU20、CPU21、RAM22、およびROM23からなる第1の実施形態に係る復号装置と同様の復号装置を有する。さらに、
図24においては、図示を省略するが、編集装置100は、先の
図3に示した機能構成と同様の機能構成を有する。編集装置100は、さらに、符号化処理機能と、編集機能を有する。なお、編集装置100において、符号化処理機能は必須ではない。
【0227】
ドライブ101にはリムーバブルメディア101aが装着され、このリムーバブルメディア101aからデータの読み出しが行われる。ドライブ101は外付けのドライブであってもよい。ドライブ101は、光ディスク、磁気ディスク、光磁気ディスク、ブルーレイディスク、半導体メモリなどを採用することができる。素材データの読み出しは、通信インターフェース106を介して接続可能なネットワーク上のリソースから行ってもよい。
【0228】
CPU102は、ROM103に記録されている制御プログラムをRAM104に展開し、編集装置100全体の動作を制御する。
【0229】
HDD105は、編集装置としてのアプリケーションプログラムが格納されている。CPU102がこのアプリケーションプログラムをRAM104上で展開し、コンピュータを編集装置として機能させる。また、リムーバブルメディア101aから読み出された素材データや各クリップの編集データなどをこのHDD105に格納してもよい。
【0230】
通信インターフェース106は、たとえばUSB(Universal Serial Bus)、LAN、HDMI等のインターフェースである。
【0231】
入力インターフェース107は、キーボードやマウスなどの操作部400を介してユーザが入力する指示を受け付け、バス110を介してCPU102に操作信号を供給する。
【0232】
出力インターフェース108は、LCD(液晶表示装置)やCRTなどの表示装置、スピーカなどの出力装置500に、CPU102からの画像データや音声データを供給する。
【0233】
ビデオ・オーディオインターフェース114は、編集装置100の外部の装置とバス110との間でデータの受け渡しを行う。ビデオ・オーディオインターフェース114は、例えば、SDI(Serial Digital Interface)などに準拠したインターフェースである。
【0234】
図25は、本発明の第2の実施形態に係る編集装置の機能構成図である。
【0235】
図25を参照するに、編集装置100のCPU102は、メモリ上に展開されるアプリケーションプログラムによって、ユーザインターフェース部70、編集部73、情報入力部74、情報出力部75の各機能ブロックを構成する。
【0236】
このような各機能ブロックにより、素材データと編集データを含むプロジェクトファイルのインポート機能、各クリップに対する編集機能、素材データおよび/または編集データを含むプロジェクトファイルのエクスポート機能、プロジェクトファイルのエクスポート時における素材データに対するマージン設定機能などを実現する。以下、編集機能について詳細に説明する。
【0237】
図26は、本発明の第2の実施形態に係る編集装置の編集画面の一例を示す図である。
【0238】
図26を
図25とともに参照するに、編集画面の表示データが表示制御部72により生成され、出力装置500のディスプレイに出力される。
【0239】
編集画面150は、編集されたコンテンツや取得した素材データの再生画面を表示する再生ウィンドウ151、各クリップがタイムラインに沿って配置される複数のトラックで構成されるタイムラインウィンドウ152、取得した素材データをアイコンで表示するビンウィンドウ153などを備えている。
【0240】
ユーザインターフェース部70は、操作部400を介してユーザが入力した指示を受け付ける指示受付部71、ディスプレイやスピーカなどの出力装置500に対する表示制御を行う表示制御部72を含んでいる。
【0241】
編集部73は、操作部400を介してユーザから入力された指示により指定されたクリップが参照する素材データ、あるいはデフォルトで指定されているプロジェクト情報を備えるクリップが参照する素材データを、情報入力部74を介して取得する。また、編集部73は、操作部400を介してユーザから入力された指示により、後述するクリップのタイムラインウィンドウ上の配置、クリップのトリミングや、シーン間のトランジッションの設定や、ビデオフィルタをかける等の編集処理を行う。
【0242】
情報入力部74は、HDD105内に記録されている素材データが指定された場合には、ビンウィンドウ153にアイコンを表示する。HDD105内に記録されていない素材データが指定された場合には、ネットワーク上のリソースやリムーバブルメディアなどから素材データを読み出してビンウィンドウ153にアイコンを表示する。図示した例では、3つの素材データがアイコンIC1〜IC3で表示されている。
【0243】
指示受付部71は、編集に用いるクリップと、素材データの参照範囲と、その参照範囲がコンテンツの時間軸上にしめる時間位置との指定を編集画面上で受け付ける。具体的には、指示受付部71は、クリップID、参照範囲の開始点および時間長、クリップが配置されるコンテンツ上の時間情報などの指定を受け付ける。このためにユーザは、表示されているクリップ名を手がかりに、所望の素材データのアイコンをタイムライン上にドラッグ&ドロップする。指示受付部71は、この操作によるクリップIDの指定を受け付けて、選択されたクリップが参照する参照範囲に応じた時間長でトラック上にクリップが配置される。
【0244】
トラック上に配置されたクリップは、クリップの開始点、終了点、タイムライン上の時間的な配置などを適宜変更することが可能となっている。例えば、編集画面上に表示されるマウスカーソルを移動させて所定の操作を行うことで指示を入力することが可能である。
【0245】
図27は、本発明の第2の実施形態に係る編集方法を示すフローチャートである。圧縮符号化された素材データを編集する場合を例に挙げて、
図27を参照しつつ、本発明の第2の実施形態に係る編集方法を説明する。
【0246】
最初に、ステップS400では、ユーザによりHDD105に記録されている、符号化された素材データが指定されると、CPU102はその指定を受付けて、その素材データをビンウィンドウ153にアイコンとして表示する。さらに、ユーザにより、その表示されたアイコンをタイムラインウィンドウ152に配置する指示がされると、CPU102はその指示を受付けて、素材のクリップをタイムラインウィンドウ152に配置する。
【0247】
次いで、ステップS410では、ユーザにより、素材について、操作部400を介した所定の操作により表示される編集内容の中から、例えば復号処理および伸張処理が選択されると、CPU102はその選択を受け付ける。
【0248】
次いで、ステップS420では、復号処理および伸張処理の指示を受け付けたCPU102は、CPU20,21に復号処理および伸張処理の指示を出力する。CPU102から復号処理および伸張処理の指示が入力されたCPU20,21は、圧縮符号化された素材データを復号処理および伸張処理する。この際、CPU20,21は、第1の実施形態に係る復号方法を実行して、復号処理された素材データを生成する。
【0249】
次いで、ステップS430では、CPU20,21は、ステップS420で生成された素材データを、バス110を介してRAM22に格納する。RAM22に一時的に格納された素材データはHDD105に記録される。なお、HDDに記録する代わりに、編集装置外の装置に素材データを出力してもよい。
【0250】
なお、上記のステップS400とS410との間に、クリップのトリミングや、シーン間のトランジッションの設定や、ビデオフィルタをかけてもよい。これらの処理を行う場合は、処理の対象となるクリップやクリップの一部について、ステップS420の復号処理および伸張処理を行う。その後に処理されたクリップやクリップの一部は記憶される。その後のレンダリングの際に他のクリップやクリップの他の部分と合成される。
【0251】
第2の実施形態によれば、編集装置は、第1の実施の形態と同様の復号装置を有し、第1の実施の形態と同様の復号方法を用いて、符号化された素材データを復号処理するので、第1の実施形態と同様の効果が得られ、復号処理の効率が向上する。
【0252】
なお、復号処理の際に、CPU102が、CPU20およびCPU21と同様のステップを実行してもよい。特に、CPU102が復号処理以外の処理を行わない期間に実行することが好ましい。
【0253】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、請求の範囲に記載された本発明の範囲内において、種々の変形・変更が可能である。例えば、符号化された音声データの復号処理に本発明を適用してもよい。たとえば、上述した実施形態では、MPEG−2に準拠した復号処理を例に説明したが、MPEG−2に限定されず、他の画像符号化方式、たとえば、MPEG−4ヴィジュアル、MPEG−4 AVC、FRExt(Fidelity Range Extension)や音声符号化方式にも適用できることはいうまでもない。