(57)【特許請求の範囲】
【請求項１】
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、
分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置であって、
前記演算処理装置は、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、第１のサイズを有するタイルに対して、第１の数のコアを割り当て、前記第１のサイズより大きい第２のサイズのタイルに対して、前記第１の数より大きい第２の数のコアを割り当てる、
ことを特徴とする画像処理装置。
【請求項２】
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、
分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置であって、
前記演算処理装置は、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、タイルに含まれる分割数が第１の数であるタイルに対して、第２の数のコアを割り当て、タイルに含まれる分割数が前記第１の数より大きい第３の数であるタイルに対して、前記第２の数より大きい第４の数のコアを割り当てる、
ことを特徴とする画像処理装置。
【請求項３】
前記演算処理装置は、
前記複数のコアが割り当てられた前記１列分の複数のタイルと、前記第１方向に隣接するタイルに対しては、前記コアの割り当てを行わない、
ことを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項４】
前記演算処理装置は、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項５】
前記演算処理装置は、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、さらに後続の第３画像ブロックラインを処理する第３コアの動作が停止するとき、前記第３コアを、前記第１コアおよび前記第２コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする請求項４に記載の画像処理装置。
【請求項６】
前記演算処理装置は、
前記１列分の複数のタイルの１つに複数のコアを割り当てたとき、前記複数のコアが割り当てられたタイルを分割した複数の画像ブロックラインに対して、前記複数のコアの割り当てを制御し、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする請求項１または請求項２に記載の画像処理装置。
【請求項７】
１つの画像データを複数のタイルに分割し、分割されたタイルに対して複数のコアを割り当てて画像処理を行う画像処理方法であって、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、第１のサイズを有するタイルに対して、第１の数のコアを割り当て、前記第１のサイズより大きい第２のサイズのタイルに対して、前記第１の数より大きい第２の数のコアを割り当てる、
ことを特徴とする画像処理方法。
【請求項８】
１つの画像データを複数のタイルに分割し、分割されたタイルに対して複数のコアを割り当てて画像処理を行う画像処理方法であって、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、タイルに含まれる分割数が第１の数であるタイルに対して、第２の数のコアを割り当て、タイルに含まれる分割数が前記第１の数より大きい第３の数であるタイルに対して、前記第２の数より大きい第４の数のコアを割り当てる、
ことを特徴とする画像処理方法。
【請求項９】
さらに、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする請求項７または請求項８に記載の画像処理方法。
【請求項１０】
さらに、
前記１列分の複数のタイルの１つに複数のコアを割り当てたとき、前記複数のコアが割り当てられたタイルを分割した複数の画像ブロックラインに対して、前記複数のコアの割り当てを制御し、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする請求項７または請求項８に記載の画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、画像処理装置および画像処理方法に関する。
【背景技術】
【０００２】
近年、様々な動画像の圧縮技術が提案され、実用化されている。多くの動画像圧縮技術(例えば、MPEG(Moving Picture Experts Group)-2、H.264およびH.265(HEVC: High Efficiency Video Coding)等)において、符号化／復号化処理を行う際、画面内予測(イントラ予測)および画面間予測(インター予測)の技術が用いられている。
【０００３】
ところで、インター予測は、複数のフレーム(画面)における画像を処理するため、処理時間が長くなる。さらに、画面サイズは、フルハイビジョン(Full HD(1920×1080)から４Ｋ(3840×2160等)や８Ｋ(7680×4320等)と大きくなる傾向にあり、それに従って、処理時間も、４倍(４Ｋ)や１６倍(８Ｋ)と増大することになる。
【０００４】
そのため、最近では、複数のプロセッサコア(コア)を使用して、動画像の符号化および復号化を行うことが一般化している。しかしながら、複数のコアを使用すると、例えば、復号化の処理順番等において、コアの待ち合わせ(ウェイト)時間が生じることになる。
【０００５】
ところで、従来、複数のコアを使用して画像処理を効率的に行うようにした画像処理装置および画像処理方法としては、様々なものが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０２−２４２４８５号公報
【特許文献２】特開平０８−０４４６７８号公報
【特許文献３】特開２００３−０５１０１９号公報
【特許文献４】特開２０１１−１６７８５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように、複数のコアを使用して画像処理を効率的に行うようにした画像処理技術としては、様々な提案がなされているが、画面サイズの増大と相俟って、例えば、復号化の処理順番等において、コアの待ち合わせ時間が生じる。
【０００８】
このようなコアの待ち合わせ時間は、全体としての画像処理の遅延を招くことになるため、低減するのが好ましい。しかしながら、複数のコアを有する画像処理装置において、コアの待ち合わせ時間の低減は、十分なものとはいえないのが現状である。
【課題を解決するための手段】
【０００９】
一実施形態によれば、１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置が提供される。
【００１０】
前記演算処理装置は、前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、第１のサイズを有するタイルに対して、第１の数のコアを割り当て、前記第１のサイズより大きい第２のサイズのタイルに対して、前記第１の数より大きい第２の数のコアを割り当てる。
【発明の効果】
【００１１】
開示の画像処理装置および画像処理方法は、メモリ容量の増大を招くことなく、マルチコアによる画像処理の遅延を低減することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、動画像の符号化処理および復号化処理を説明するための図である。
【図２】図２は、符号化処理および復号化処理の単位を説明するための図(その１)である。
【図３】図３は、符号化処理および復号化処理の単位を説明するための図(その２)である。
【図４】図４は、符号化処理および復号化処理の単位を説明するための図(その３)である。
【図５】図５は、符号化処理および復号化処理の単位を説明するための図(その４)である。
【図６】図６は、動画像圧縮規格の一例における分割サイズを説明するための図(その１)である。
【図７】図７は、動画像圧縮規格の一例における分割サイズを説明するための図(その２)である。
【図８】図８は、動きベクトル復号化処理の一例を説明するための図(その１)である。
【図９】図９は、動きベクトル復号化処理の一例を説明するための図(その２)である。
【図１０】図１０は、隣接メモリの一例を説明するための図(その１)である。
【図１１】図１１は、隣接メモリの一例を説明するための図(その２)である。
【図１２】図１２は、ピクチャ内のタイル分割の一例を説明するための図である。
【図１３】図１３は、ＣＴＢライン毎のコアの割り当てを説明するための図である。
【図１４】図１４は、図１３に示すＣＴＢライン毎のコアの割り当てにおける課題を説明するための図である。
【図１５】図１５は、タイル毎のコアの割り当てを説明するための図である。
【図１６】図１６は、本実施形態に係る画像処理装置の一例を示すブロック図である。
【図１７】図１７は、図１６に示す画像処理装置に適用される第１実施例のコアの割り当て処理の一例を説明するためのフローチャートである。
【図１８】図１８は、図１６に示す画像処理装置に適用される第２実施例のコアの割り当て処理を説明するための図である。
【図１９】図１９は、第２実施例のコアの割り当て処理の一例を説明するためのフローチャート(その１)である。
【図２０】図２０は、図１９に示すフローチャートにおける処理を説明するための図である。
【図２１】図２１は、第２実施例のコアの割り当て処理の一例を説明するためのフローチャート(その２)である。
【図２２】図２２は、図２１に示すフローチャートにおける処理を説明するための図である。
【図２３】図２３は、第２実施例のコアの割り当て処理の一例を説明するためのフローチャート(その３)である。
【図２４】図２４は、図２３に示すフローチャートにおける処理を説明するための図である。
【図２５】図２５は、４つのコアによる並列処理を説明するための図である。
【図２６】図２６は、第２実施例のコアの割り当て処理の効果を説明するための図(その１)である。
【図２７】図２７は、第２実施例のコアの割り当て処理の効果を説明するための図(その２)である。
【発明を実施するための形態】
【００１３】
まず、本実施例の画像処理装置および画像処理方法を詳述する前に、図１〜図１５を参照して、画像処理技術の一例、関連技術としての画像処理技術、並びに、その問題点を説明する。
【００１４】
図１は、動画像の符号化処理および復号化処理を説明するための図であり、符号器１，復号器３および外部メモリ５を示すものである。図１に示されるように、符号器１は、例えば、４Ｋ画像等の符号化対象の入力画像Ｉinを受け取って符号化し、例えば、ＨＥＶＣ(High Efficiency Video Coding)ストリーム等の画像ストリームＩstmを生成する。
【００１５】
符号器１は、ＣＴＢ(Coding Tree Block)分割部１０，減算器１１，直交変換量子化部１２，エントロピー符号化部１３，逆量子化逆直交変換部１４，予測モード選択部１５，加算器１６および動きベクトル検出部１７を含む。
【００１６】
さらに、符号器１は、フレーム間予測部１８，フレーム内予測部１９，現フレームバッファ２０，過去フレームバッファ２１，フレームバッファ管理部２２およびデブロッキングフィルタ２３を含む。
【００１７】
ＣＴＢ分割部１０は、入力画像Ｉinを受け取ってＣＴＢ分割処理し、減算器１１は、ＣＴＢ分割部１０からのＣＴＢ分割処理された画像と、予測モード選択部１５から出力される予測画像の差分値を算出し、その差分値を直交変換量子化部１２に出力する。
【００１８】
直交変換量子化部１２は、減算器１１からの画素差分値を直交変換した後、量子化を行い、その量子化したデータを、エントロピー符号化部１３および逆量子化逆直交変換部１４に出力する。
【００１９】
エントロピー符号化部１３は、直交変換量子化部１２により量子化されたデータを可変長符号化変換して符号化信号(画像ストリームＩstm)を出力する。また、エントロピー符号化部１３は、フレーム間予測部１８からの予測差分値(ＭＶＤ：Motion Vector Difference)を含む符号化信号(Ｉstm)を出力する。
【００２０】
さらに、エントロピー符号化部１３は、例えば、復号化装置(図示しない)において、予測差分値(ＭＶＤ)により動きベクトル(ＭＶ：Motion Vector)を算出し、復号化した出力画像を生成する。
【００２１】
逆量子化逆直交変換部１４は、直交変換量子化部１２より量子化されたデータを逆量子化した後、逆直交変換を行い、処理後のデータを加算器１６に出力する。予測モード選択部１５は、フレーム間予測部１８とフレーム内予測部１９で生成した予測画像において、予測精度が良い方を選択して、上述した減算器１１および加算器１６に出力する。
【００２２】
加算器１６は、逆量子化逆直交変換部１４から出力される逆量子化逆直交変換された画素と、予測モード選択部１５から出力される画素を加算する。動きベクトル検出部１７は、ＣＴＢ分割部１０から入力されたＣＴＢと、過去フレームバッファ２１に格納された参照画像とを用いて、対象ＣＴＢの動きベクトル(ＭＶ)を検出する。
【００２３】
フレーム間予測部１８は、周辺領域の動きベクトル(ＭＶ)に基づいて、動きベクトル予測値(ＭＶＰ：Motion Vector Predictor)を算出する。さらに、フレーム間予測部１８は、対象マクロブロックの動きベクトル(ＭＶ)と動きベクトル予測値(ＭＶＰ)の間の予測差分値(ＭＶＤ)を算出する。
【００２４】
フレーム内予測部１９は、現フレームバッファ２０に保持された参照画像を受け取り、隣接ブロックからの画素レベルに基づいて、参照画像のフレーム内予測を行う。現フレームバッファ２０は、加算器１６からの値を格納し、過去フレームバッファ２１は、フレームバッファ管理部２２からの値を格納する。
【００２５】
フレームバッファ管理部２２は、デブロッキングフィルタ２３の出力データを受け取って過去フレームバッファ２１に出力し、過去フレームバッファ２１は、その出力データを記憶する。
【００２６】
デブロッキングフィルタ２３は、現フレームバッファ２０に保持された参照画像を受け取り、隣接する２つのマクロブロックの境界を平滑化して出力する。なお、符号器１の出力である、例えば、ＨＥＶＣストリーム(画像ストリームＩstm：符号化信号)は、例えば、インターネット等の通信回線や衛星回線等を経由して復号器３に送られる。
【００２７】
図１に示されるように、復号器３は、例えば、ＨＥＶＣストリーム等の画像ストリームＩstmを受け取って復号化し、４Ｋ画像等の復号化された出力画像Ｉoutを生成して出力する。
【００２８】
復号器３は、エントロピー復号化部３０，逆量子化逆直交変換部３１，加算器３２，予測モード選択部３３，現フレームバッファ３４，フレーム内予測部３５およびフレーム間予測部３６を含む。さらに、復号器３は、デブロッキングフィルタ３７，フレームバッファ管理部３８および過去フレームバッファ３９を含む。
【００２９】
なお、図１に示されるように、外部メモリ５は、復号器３により使用される外部のメモリであり、デブロッキングフィルタ用一時メモリ(Temporary Memory)５０およびフレーム間予測部用一時メモリ５１を含む。
【００３０】
ＣＴＢ分割部１０は、入力画像Ｉinを受け取ってＣＴＢ分割処理し、減算器１１は、ＣＴＢ分割部１０からのＣＴＢ分割処理された画像と、予測モード選択部１５から出力される予測画像の差分値を算出し、その差分値を直交変換量子化部１２に出力する。
【００３１】
エントロピー復号化部３０は、画像ストリームＩstm(符号化信号)を受け取って、エントロピー復号化処理を行い、逆量子化逆直交変換部３１は、エントロピー復号化部３０からの入力情報に対して、逆量子化逆直交変換を行う。
【００３２】
加算器３２は、逆量子化逆直交変換部３１から出力される逆量子化逆直交変換された画素と、予測モード選択部３３から出力される画素を加算する。予測モード選択部３３は、フレーム間予測部３６またはフレーム内予測部３５で復号化された画素を選択して、上述した加算器３２に出力する。
【００３３】
現フレームバッファ３４は、加算器３２の出力結果の画素を格納する。フレーム内予測部３５は、現フレームバッファ３４に保持された参照画像を受け取り、隣接ブロックからの画素レベルに基づいて、参照画像のフレーム内予測を行う。
【００３４】
フレーム間予測部３６は、周辺領域の動きベクトル(ＭＶ)に基づいて、動きベクトル予測値(ＭＶＰ)を算出する。さらに、フレーム間予測部３６は、対象ブロックの予測差分値(ＭＶＤ)と動きベクトル予測値(ＭＶＰ)との加算結果から、動きベクトル(ＭＶ)を算出する。
【００３５】
デブロッキングフィルタ３７は、現フレームバッファ３４に保持された参照画像を受け取り、隣接する２つのブロックの境界を平滑化して出力する。フレームバッファ管理部３８は、デブロッキングフィルタ３７の出力データを受け取って過去フレームバッファ３９に出力し、過去フレームバッファ３９はその出力データを記憶する。過去フレームバッファ３９は、フレームバッファ管理部３８からの値を格納する。
【００３６】
デブロッキングフィルタ用一時メモリ５０は、デブロッキングフィルタ３７の隣接メモリを示し、現ＣＴＢが処理した内容を格納して、現ＣＴＢが１ＣＴＢライン下の処理に移った時、その格納された内容が読み出される。なお、この現ＣＴＢが処理した内容は、外部メモリ５に格納してもよい。
【００３７】
フレーム間予測部用一時メモリ５１は、フレーム間予測部３６の隣接メモリを示し、現ＣＴＢが処理した内容を格納して、現ＣＴＢが１ＣＴＢライン下の処理に移った時、その格納された内容が読み出される。なお、この現ＣＴＢが処理した内容は、外部メモリ５に格納してもよい。
【００３８】
なお、復号器３により復号された出力画像Ｉoutは、そのまま出力されてもよいが、外部メモリ５に格納することもできる。
【００３９】
図２〜図５は、符号化処理および復号化処理の単位を説明するための図である。図２のピクチャ種類において、参照符号Ｉは、Ｉピクチャ(Intra-coded Picture)、Ｐは、Ｐピクチャ(Predicted Picture)、そして、Ｂは、Ｂピクチャ(Bi-directional Predicted Picture)を示す。なお、図２において、参照符号Ｃｕは、現処理ブロックを示す。
【００４０】
ここで、イントラ予測は、動きベクトル探索処理が不要なＩピクチャを使用し、インター予測は、動きベクトル探索処理を行うＰピクチャ(前方参照)および動きベクトル探索処理を行うＢピクチャ(前方，後方参照、双方向参照)を使用する。
【００４１】
具体的に、図２に示されるように、現在処理している画像(現処理ピクチャ(Picture))がＢピクチャの場合、参照画像(Picture)としては、例えば、前方参照としてＩ，Ｐピクチャを使用し、後方参照としてＰ，Ｐピクチャを使用する。なお、ＭＶ(動きベクトル)の成分としては、垂直成分および水平成分よりＭＶが求められる。
【００４２】
図３は、図２における現処理ピクチャの処理を示し、例えば、ＣＴＢ(６４×６４画素)単位で矢印の方向に、すなわち、左上端からＣＴＢ単位で１ラインずつ右下端に向かって順に処理を行う。
【００４３】
図４は、ＣＴＢを示し、ＣＴＢ内で分割がある場合、例えば、田の字分割(四分木分割)があり、さらに、その内部で分割がある場合を示す。図４(a)に示すＣＴＢにおける括弧付き数字(1)，(2)，(3)，…，(11)は、そのような分割があった場合における処理の順序の一例を示すものである。
【００４４】
図４(b)は、それぞれのブロックにおける処理の順序を示すもので、例えば、田の字分割ならばＺを記載する順、上下分割ならば上から下の順、そして、左右分割ならば、左から右の順に処理を行う。すなわち、図４(a)における(1)→(2)→(3)→…→(11)の順に処理を行う。
【００４５】
図５は、各ブロック単位を示し、例えば、図５(a)は、一番大きな外枠(６４×６４(画素))のＣＴＢ(Coding Tree Block)を示し、図５(b)は、田の字(四分木)分割された正方形単位(６４×６４，３２×３２，１６×１６，８×８)のＣＵ(Coding Unit)を示す。
【００４６】
さらに、図５(c)〜図５(e)は、例えば、最小のＣＵのさらに分割された一部のパート(Part：Part0，Part1、Part0〜Part3)であるＰＵ(Prediction Unit)を示す。
【００４７】
図６および図７は、動画像圧縮規格の一例における分割サイズを説明するための図である。図６および図７に示されるように、動画圧縮規格(ＨＥＶＣ(H.265))には、様々な分割サイズ(ブロック単位：ケース１〜２７)が存在する。
【００４８】
ここで、ケース１〜８では、Ｎ＝３２とし、ケース１は、ＣＵ＝６４×６４がＰＵの場合(分割しない場合)、すなわち、２Ｎ×２Ｎの場合であり、ＰＵ＝０(Part0)だけで表される。また、ケース２は、田の字分割した場合、すなわち、Ｎ×Ｎ(３２×３２)の場合であり、ＰＵ＝０(Part0)〜ＰＵ＝３(Part3)で表される。
【００４９】
さらに、ケース３は、上下に二等分割した場合、すなわち、２Ｎ×Ｎの場合であり、ＰＵ＝０(Part0)およびＰＵ＝１(Part1)で表され、ケース４は、左右に二等分割した場合、すなわち、Ｎ×２Ｎの場合であり、ＰＵ＝０(Part0)およびＰＵ＝１(Part1)で表される。
【００５０】
そして、ケース５は、上下方向を１６：４８で分割した場合、すなわち、２Ｎ×ｎＵの場合であり、６４×１６のＰＵ＝０(Part0)および６４×４８のＰＵ＝１(Part1)で表され、ケース６〜８の分割も同様に考えることができる。
【００５１】
ここで、ケース９〜１６では、Ｎ＝１６とし、また、ケース１７〜２４では、Ｎ＝８とし、他はＮ＝３２の場合と同様である。例えば、ケース２で分割されたＰＵ＝０(Part0)〜ＰＵ＝３(Part3)、すなわち、３２×３２(画素)の各ブロックは、そのままケース９に対応し、ケース１０において分割された１６×１６の各ブロックは、そのままケース１７に対応する。このように、例えば、ＨＥＶＣには、ケース１〜２７の分割サイズが存在する。
【００５２】
図８および図９は、動きベクトル復号化処理の一例を説明するための図であり、動きベクトル(ＭＶ)の復元(復号)処理を説明するためのものである。ここで、図８(a)は、例えば、ＣＴＢの分割が無い場合を示し、図８(b)〜図８(d)は、隣接ＣＴＢおよび現ＣＴＢで分割がある場合を示す。
【００５３】
参照符号Ｃｕは現処理ブロック、Ａ〜Ｄは隣接ブロック、ＭＶは動きベクトル、ＭＶＤは予測差分値(差分ベクトル)、そして、ＭＶＰは中間値を示す。すなわち、参照符号Ａは、現処理ブロックＣｕに対する、左隣接ブロック、Ｂは、真上隣接ブロック、Ｃは、右上隣接ブロック、そして、Ｄは、左上隣接ブロックを示す。
【００５４】
なお、Ａ，Ｂ，Ｃの中間値ＭＶＰは、ＭＶＰ＝Median(MV_MB_A, MV_MB_B, MV_MB_C)として求めるが、例えば、右上隣接ブロックＣの処理が完了せずに、MV_MB_Cが無効であれば、左上隣接ブロックＤのMV_MB_Dを使用する。そして、ＣｕのＭＶは、ＭＶ＝ＭＶＤ＋ＭＶＰとして求めることができる。
【００５５】
図８(a)に示されるように、現処理ブロックＣｕの動きベクトルＭＶの復号(復元)は、例えば、ＣＴＢのブロック毎に存在する差分ベクトルＭＶＤと、Ｃｕに対する周辺ブロック(左隣接ブロックＡ，真上隣接ブロックＢおよび右上隣接ブロックＣ)を使用して行う。
【００５６】
隣接ＣＴＢおよび現ＣＴＢで分割がある場合、例えば、図８(b)から図８(c)のように、処理を行うＣｕが次のブロック(１つ右隣のブロック)に移動すると、隣接ブロックＡ〜Ｄも変化する。
【００５７】
そして、例えば、図８(d)に示されるように、Ｃｕの位置によっては、隣接ブロックＣの処理が開始されていないため、Ｃが無効となり、Ｃの代わりにＤを使用する。
【００５８】
図９(a)は、ＣＴＢ(６４×６４(画素))の内部が四分木(田の字)分割されて、３２×３２のブロックとされ、さらに、３２×３２の４つのブロックが全て四分木分割されて、全てのＰＵが１６×１６とされた場合を示す。
【００５９】
なお、図９(b)〜図９(q)は、図９(a)における処理の順序(０〜１５)に対応し、それぞれにおける、現処理ブロックＣｕの位置、並びに、隣接ブロックＡ〜Ｄの位置およびＣの有効／無効を示す。
【００６０】
図９(a)に示されるように、０〜１５の順に、１６×１６のＰＵが処理される場合、例えば、図９(e)，図９(i)，図９(m)，図９(o)および図９(q)の場合、現処理ブロックＣｕに対する右上隣接ブロックＣは、未だ復号化されていないため、無効『×』になる。すなわち、右上隣接ブロックＣは、使用することができず、代わりに左上隣接ブロックＤを使用する。
【００６１】
ここで、図９(k)の場合、現処理ブロックＣｕに対する右上隣接ブロックＣは、既に復号化されている(ＭＶが生成されている)ため、そのまま使用することができる。なお、他の図の場合も、右上隣接ブロックＣは、既にＭＶの生成が済んでいるため、そのまま使用することができる。このように、現処理ブロックＣｕの位置によって、右上隣接ブロックＣを使用可能な場合と不可能な場合が存在することが分かる。
【００６２】
図１０および図１１は、隣接メモリの一例を説明するための図である。図１０および図１１において、参照符号ＡＭは、隣接メモリを示す。図１０に示されるように、例えば、位置(1)におけるＣＴＢを処理するとき、画面端の動きベクトルＭＶのデータを隣接メモリＡＭに保持する。そして、例えば、位置(2)におけるＣＴＢを処理するとき、位置(1)のＣＴＢを真上隣接ブロック(Ｂ)として使用する。
【００６３】
ここで、隣接メモリＡＭは、例えば、６４×６４のＣＴＢを、全て４×８のブロックに分割するメモリ容量が最大となる場合を考える。すなわち、ＣＴＢのブロック分割は様々な場合があり得るため、最も容量を使う場合を想定して隣接メモリＡＭの容量を決めることが望まれる。
【００６４】
図１２は、ピクチャ内のタイル分割の一例を説明するための図であり、１つのピクチャを、９つのタイル(Tile)０〜８に分割した様子を示すものである。図１２に示されるように、例えば、ＨＥＶＣでは、１つのピクチャ内でタイル分割が行われることがある。
【００６５】
図１２に示す例では、タイル０，２，６および８が同じサイズとされ、タイル１および７が同じサイズとされ、タイル３および５が同じサイズとされている。
【００６６】
このように、１つのピクチャを９つのタイル０〜８に分割すると、各タイル間では、前述したＣｕに対するＡ，Ｂ，Ｃ(Ｄ)の依存関係が存在しないため、それぞれのタイルで独立の処理を行うことができる。
【００６７】
すなわち、例えば、複数の演算処理部(コア：Core)を使用し、それぞれのコアが対応するタイルの処理を行うように並列して動作させることができる。
【００６８】
図１３は、ＣＴＢライン(画像ブロックライン)毎のコアの割り当てを説明するための図である。なお、以下の説明では、コアの数を４つとして説明するが、４つに限定されないのはいうまでもない。ここで、図１３(a)および図１３(b)は、４つのコアによる復号化処理を示し、図１３(c)は、隣接メモリＡＭを示し、そして、図１３(d)は、隣接条件が揃うまで後発コアが停止している様子を示す。
【００６９】
図１３(a)および図１３(b)に示されるように、４つのコアＣＲ１〜ＣＲ４は、それぞれ対応するＣＴＢラインＬ１〜Ｌ４，Ｌ５〜Ｌ８に割り当てられ、それぞれのブロックの復号化処理を行う。
【００７０】
ここで、例えば、ＣＲ１は、Ｌ１の処理が終了(完了)したらＬ５の処理を行い、ＣＲ２は、Ｌ２の処理が完了したらＬ６の処理を行い、ＣＲ３は、Ｌ３の処理が完了したらＬ７の処理を行い、そして、ＣＲ４は、Ｌ４の処理が完了したらＬ８の処理を行う。ここで、隣接メモリＡＭは、図１３(c)に示されるように、同時に１つのブロックのみ処理するため、１ＣＴＢライン分のメモリ容量になる。
【００７１】
図１３(d)に示されるように、ＣＴＢライン毎にコアＣＲ１〜ＣＲ４の割り当てを行う場合、例えば、隣接条件が揃うまで後発コアが停止することになる。すなわち、コアＣＲ２は、現処理ブロックＣｕの動きベクトルＭＶを復元する場合、例えば、コアＣＲ１がＣｕの右上隣接ブロックＣの処理を完了していないと、コアＣＲ１が処理を完了するまで、ＣＲ２は停止することになる。これは、ＣＲ３およびＣＲ４でも同様であり、処理の遅延を招くことになる。
【００７２】
図１４は、図１３に示すＣＴＢライン毎のコアの割り当てにおける課題を説明するための図である。図１４に示されるように、タイル分割を行わない場合、通常の動作において、コアＣＲ１〜ＣＲ４は、それぞれ対応するＣＴＢラインＬ１〜Ｌ４に割り当てられる。
【００７３】
そのため、図１３(d)を参照して説明したように、上側のＣＴＢの隣接条件が揃うまで、下側ＣＴＢのコアが停止する。例えば、コアＣＲ１が、コアＣＲ２が処理する現処理ブロックＣｕで使用する隣接ブロク(右上隣接ブロックＣ)のデータ(ＭＶ)を生成していない場合には、コアＣＲ２は、コアＣＲ１の生成が完了するまで処理を停止する。
【００７４】
ここで、図１４におけるＣＴＢラインＬ１の右端ブロックのように、分割サイズが小さいものが多い場合には、ＣＲ１による処理時間が長くなり、その結果、ＣＲ２の待ち時間も長くなる。すなわち、処理するブロックの分割サイズ数が多い場合には、処理の停止による遅延の影響も大きくなる。
【００７５】
図１５は、タイル毎のコアの割り当てを説明するための図である。ここで、図１５(a)および図１５(b)は、同じ大きさの４つのタイルを４つのコアで復号化処理する様子を示し、図１４(c)は、隣接メモリＡＭを示し、そして、図１４(d)は、タイルのサイズが異なる場合を示す。
【００７６】
図１５(a)および図１５(b)に示されるように、４つのコアＣＲ１〜ＣＲ４は、それぞれ対応するタイルＴ１〜Ｔ４におけるＣＴＢラインに割り当てられ、それぞれのブロックの復号化処理を行う。ここで、４つのタイルＴ１〜Ｔ４では、それぞれコアＣＲ１〜ＣＲ４により並列に処理が行われる。
【００７７】
すなわち、タイルＴ１では、コアＣＲ１がＣＴＢラインＬ１１〜Ｌ１４を順に処理し、タイルＴ２では、コアＣＲ２がＣＴＢラインＬ２１〜Ｌ２４を順に処理する。また、タイルＴ３では、コアＣＲ３がＣＴＢラインＬ３１〜Ｌ３４を順に処理し、タイルＴ４では、コアＣＲ４がＣＴＢラインＬ４１〜Ｌ４４を順に処理する。
【００７８】
このように、タイル毎にコアを割り当てた場合、各タイルの処理を並列に行って処理を高速化することができる。ただし、例えば、４つのコアＣＲ１〜ＣＲ４で４つのタイルＴ１〜Ｔ４を処理する場合には、同時に２つの隣接メモリＡＭが使用される可能性があるため、隣接メモリＡＭの容量は、図１３(c)の２倍準備することになる。すなわち、隣接メモリの容量は、例えば、タイルの上下方向の段数分だけ準備しておくことになる。
【００７９】
さらに、図１５(d)に示されるように、ＣＴＢを分割した各タイルＴ１〜Ｔ４のサイズは、必ずしも一体ではなく、例えば、タイル(Ｔ４)のサイズが小さく、短時間に処理が完了したコアＣＲ４は、そのまま停止することになる。
【００８０】
すなわち、複数のコアを使用して画像処理を効率的に行うようにした画像処理技術としては、様々なものが考えられるが、近年の画面サイズの増大や高精細化と相俟って、例えば、復号化の処理順番等において、コアの待ち合わせ時間が生じている。このようなコアの待ち合わせ時間は、全体としての画像処理の遅延を招くことになる。
【００８１】
以下、画像処理装置および画像処理方法の実施例を、添付図面を参照して詳述する。図１６は、本実施形態に係る画像処理装置の一例を示すブロック図である。ここで、図１６に示す画像処理装置は、図１を参照して説明した復号器３に対応するが、図１６では、４つのコアＣＲ１〜ＣＲ４に注目して描かれている。
【００８２】
図１６に示されるように、本実施形態の画像処理装置(復号器)３は、例えば、ＨＥＶＣストリーム等の画像ストリームＩstmを受け取って復号化し、４Ｋ画像等の復号化された出力画像Ｉoutを生成して、外部メモリ５(復号画像格納領域５Ｂ)に出力する。
【００８３】
復号器３は、復号器３内の全体制御を行う演算処理装置(ＣＰＵ：Central Processing Unit)300と、４つのコア(第１〜第４コア)ＣＲ１〜ＣＲ４を含む。ＣＰＵ300は、画像ストリームＩstmを受け取り、タイルおよび分割状況等を解析し、タイル毎およびＣＴＢライン(画像ブロックライン)毎等に、第１〜第４コアＣＲ１〜ＣＲ４に対する処理の振り分けを行う。
【００８４】
第１コアＣＲ１は、全体制御を行うＣＰＵ300によって振り分けられたタイル或いはＣＴＢラインの復号化処理を行う。また、第１コアＣＲ１は、他の第２，第３および第４コアＣＲ２，ＣＲ３およびＣＲ４の処理状態を監視する。さらに、第１コアＣＲ１は、後に詳述する、上端ＣＴＢライン処理の待ち合わせを検出すれば、上端ラインの応援処理を行う。
【００８５】
第２コアＣＲ２は、ＣＰＵ300によって振り分けられたタイル或いはＣＴＢラインの復号化処理を行い、他の第１，第３および第４コアＣＲ１，ＣＲ３およびＣＲ４の処理状態を監視する。また、第２コアＣＲ２は、上端ＣＴＢライン処理の待ち合わせを検出すれば、上端ラインの応援処理を行う。
【００８６】
第３コアＣＲ３は、ＣＰＵ300によって振り分けられたタイル或いはＣＴＢラインの復号化処理を行い、他の第１，第２および第４コアＣＲ１，ＣＲ２およびＣＲ４の処理状態を監視する。また、第３コアＣＲ３は、上端ＣＴＢライン処理の待ち合わせを検出すれば、上端ラインの応援処理を行う。
【００８７】
第４コアＣＲ４は、ＣＰＵ300によって振り分けられたタイル或いはＣＴＢラインの復号化処理を行い、他の第１，第２および第３コアＣＲ１，ＣＲ２およびＣＲ３の処理状態を監視する。また、第４コアＣＲ４は、上端ＣＴＢライン処理の待ち合わせを検出すれば、上端ラインの応援処理を行う。
【００８８】
外部メモリ５は、隣接メモリＡＭとして使用する隣接メモリ領域５Ａ、および、復号器３により復号された４Ｋ画像等の出力画像Ｉoutを格納する復号画像格納領域５Ｂを含む。
【００８９】
ここで、隣接メモリ領域５Ａは、第１〜第４コアＣＲ１〜ＣＲ４との間でデータの読み出しおよび書き込みを行い、復号画像格納領域５Ｂは、第１〜第４コアＣＲ１〜ＣＲ４により復号された画像を書き込む。
【００９０】
図１７は、図１６に示す画像処理装置に適用される第１実施例のコアの割り当て処理の一例を説明するためのフローチャートであり、使用コア(CORE)数＝４とした場合の処理の一例を示すものである。
【００９１】
図１７に示されるように、コアの割り当て処理が開始(START)すると、まず、ステップＳＴ１１において、処理する画像データにタイル(Tile)分割があるかどうかを判定する。なお、図１７において、割り当てを行う１COREは、第１コアＣＲ１，第２コアＣＲ２，第３コアＣＲ３，第４コアＣＲ４の各１つのコアに対応する。
【００９２】
また、割り当てを行う2COREは、例えば、ＣＲ１およびＣＲ２、並びに、ＣＲ３およびＣＲ４の各２つのコアに対応し、3COREは、例えば、ＣＲ１〜ＣＲ３またはＣＲ２〜ＣＲ４の３つのコアに対応する。
【００９３】
ステップＳＴ１１において、タイル分割がない(ＮＯ)と判定すると、ステップＳＴ１７に進んで、図１３を参照して説明したのと同様に、１つのタイルＴ0に対して４つのコアを割り当てる。すなわち、画像データ(タイルＴ0)において、１列目ライン１CORE(コア)，２列目ライン１CORE，３列目ライン１CORE，４列目ライン１COREとして４つのコアを対応するラインに割り当てる。
【００９４】
ここで、例えば、１列目ラインの処理が完了したコアは、次に５列目ラインに割り当てられ、２列目ラインの処理が完了したコアは、次に６列目ラインに割り当てられ、そして、３列目ラインの処理が完了したコアは、次に７列目ラインに割り当てられる。すなわち、タイル分割がない場合には、４つのコア全てを１つのタイルＴ0で使用し、４つのコアでＣＴＢの並列処理を行う。
【００９５】
一方、ステップＳＴ１１において、タイル分割がある(ＹＥＳ)と判定すると、ステップＳＴ１２に進んで、タイル分割が上下分割のみかどうかを判定する。ステップＳＴ１２において、タイル分割が上下分割のみ(ＹＥＳ)と判定すると、ステップＳＴ１８に進み、例えば、上側タイルＴ10の１列目ライン１CORE，２列目ライン１CORE，３列目ライン１CORE，４列目ライン１COREとして４つのコアを割り当てる。
【００９６】
ここで、例えば、上側タイルＴ10の１列目ラインの処理が完了したコアは、次に上側タイルＴ10の５列目ラインに割り当てられ、上側タイルＴ10の処理を行う。そして、上側タイルＴ10の処理が完了したら、例えば、下側タイルＴ20の１列目ライン１CORE，２列目ライン１CORE，３列目ライン１CORE，４列目ライン１COREとして４つのコアを割り当てる。
【００９７】
すなわち、上下分割のみの場合、例えば、４つのコア全てを上側タイルＴ10で使用し、４つのコアでＣＴＢの並列動作を行う。そして、上側タイルＴ10の処理が完了したら、４つのコア全てを下側タイル(次のタイル)Ｔ20で使用し、４つのコアでＣＴＢの並列動作を行う。
【００９８】
このように、上下分割の場合には、コアを分散して上下のタイルＴ10，Ｔ20に割り当てないことにより、上下方向の複数のタイルで並列処理を行う場合に求められる隣接メモリの容量増加(倍増)を招かないようにしている。換言すると、隣接メモリの容量を１ライン分のままとして処理を行い、回路規模の増大を防ぐようになっている。
【００９９】
次に、ステップＳＴ１２において、タイル分割が上下分割のみではない(ＮＯ)と判定すると、ステップＳＴ１３に進み、タイル内の分割数をカウントし、さらに、ステップＳＴ１４に進む。
【０１００】
ステップＳＴ１４では、横方向のタイル数が使用するコア数以上かどうか(横幅Tile数≧使用CORE数？)を判定し、横方向のタイル数が使用するコア数(４個)以上である(ＹＥＳ)と判定すると、ステップＳＴ２３に進む。
【０１０１】
例えば、横方向のタイル数が５の場合、コア数の４よりも多いので、横方向のタイル(上側における横方向のタイル)Ｔ11e〜Ｔ14eに対して、それぞれ１つのコアを割り当てる。
【０１０２】
すなわち、上側における左から１番目のタイル(Tile１番目：Ｔ11e)１CORE，Tile２番目(Ｔ12e)１CORE，Tile３番目(Ｔ13e)１CORE，Tile４番目(Ｔ14e)１COREとして、４つのコアを割り当てる。なお、例えば、上側におけるTile１番目(Ｔ11e)の処理が完了したコアは、次に、上側におけるTile５番目(Ｔ15e)に割り当てられる。
【０１０３】
また、ステップＳＴ１４において、横方向のタイル数が使用するコア数以上ではない(ＮＯ)と判定すると、ステップＳＴ１５に進み、横方向のタイル数が３かどうか(横幅３Tile？)を判定する。
【０１０４】
ステップＳＴ１５において、横方向のタイル数が３である(ＹＥＳ)と判定すると、ステップＳＴ２２に進み、一番分割サイズ数が大きいタイルに対して２つのコアを割り当て、それ以外のタイル(２つのタイル)に対して１つのコアを割り当てる。すなわち、上側１ライン分の横方向の３つのタイルに対して、４つのコアの全てを割り当て、下側の３つのタイルに対しては、コアの割り当てを行わない。
【０１０５】
なお、図１７におけるステップ２２の図では、３つのタイルＴ11d，Ｔ12d，Ｔ13dのサイズは全て等しいので、便宜的に左端(左上端)のタイルＴ11dに対して２COREを割り当てている。
【０１０６】
また、ステップＳＴ１５において、横方向のタイル数が３ではない(ＮＯ：横方向のタイル数が２)と判定すると、ステップＳＴ１６に進み、各タイルに含まれる分割数(ＰＵ(Prediction Unit)数)を比較する。
【０１０７】
ステップＳＴ１６において、右側タイルのＰＵが左側タイルのＰＵよりも多い場合には、ステップＳＴ１９に進んで、例えば、右側タイルＴ12aに３つのコア(右側Tile３CORE)を割り当て、左側タイルＴ11aに１つのコア(左側Tile１CORE)を割り当てる。すなわち、上側１ライン分の横方向の２つのタイルに対して、４つのコアの全てを割り当て、下側の２つのタイルに対しては、コアの割り当てを行わない。
【０１０８】
また、ステップＳＴ１６において、右側タイルのＰＵが左側タイルのＰＵよりも少ない場合には、ステップＳＴ２０に進んで、例えば、右側タイルＴ12bに１つのコア(右側Tile１CORE)を割り当て、左側タイルＴ11bに３つのコア(左側Tile３CORE)を割り当てる。すなわち、上側１ライン分の横方向の２つのタイルに対して、４つのコアの全てを割り当て、下側の２つのタイルに対しては、コアの割り当てを行わない。
【０１０９】
さらに、ステップＳＴ１６において、右側タイルのＰＵと左側タイルのＰＵが均等な場合には、ステップＳＴ２１に進んで、例えば、右側タイルＴ12cに２つのコア(右側Tile２CORE)を割り当て、左側タイルＴ11cに２つのコア(左側Tile２CORE)を割り当てる。すなわち、上側１ライン分の横方向の２つのタイルに対して、４つのコアの全てを割り当て、下側の２つのタイルに対しては、コアの割り当てを行わない。
【０１１０】
なお、それぞれのステップＳＴ１８〜ＳＴ２３において、上側のタイル(Ｔ10，Ｔ11a〜Ｔ15e)の処理が完了した後、コアを下側のタイル(Ｔ20，Ｔ21a〜Ｔ25e)に割り当て、下側のタイルの処理を行うことになる。
【０１１１】
このように、第１実施例によれば、タイルの分割が上下分割の場合には、コアを分散して上下のタイルに割り当てないため、上下方向の複数のタイルで並列処理を行うことがなく、隣接メモリの容量を１ライン分のままとして処理を行うことができる。
【０１１２】
図１８は、図１６に示す画像処理装置に適用される第２実施例のコアの割り当て処理を説明するための図であり、待ち合わせ処理を回避(低減)する処理を説明するためのものである。なお、図１８は、例えば、上述した図１７におけるステップＳＴ１７(ＳＴ１８)における１つのタイルの処理に４つのコアを使用する場合を例として示している。
【０１１３】
図１７を参照して説明したように、タイルに対応したコアの割り当て(振り分け)を行った後、例えば、１つのタイルで２つ以上のコアを使用する場合、ＣＴＢラインの並列処理を行う。例えば、上側のＣＴＢラインの分割数が多く、下側のＣＴＢラインで待ち合わせ処理が発生した場合、上端ＣＴＢライン側の分割状況を判断し、上端ＣＴＢライン側の処理を行う。
【０１１４】
図１８に示されるように、４つのコアＣＲ１〜ＣＲ４は、対応するＣＴＢラインＬ１〜Ｌ３に割り当てられる。ここで、図１８は、最上端のＣＴＢラインＬ１では、例えば、処理途中で極端に分割サイズが増えて、コアＣＲ１がブロックＢp0の生成が完了していないため、上から２番目のＣＴＢラインＬ２を処理するコアＣＲ２が待たされている様子を示す。
【０１１５】
すなわち、２番目のＣＴＢラインＬ２を処理するコアＣＲ２が待たされると、それ以降の３番目のＣＴＢラインＬ３を処理するコアＣＲ３および４番目のＣＴＢラインＬ４を処理するコアＣＲ４も待たされることになる。
【０１１６】
そのため、本第２実施例のコアの割り当て処理は、未だ処理が完了していないブロックＢp0に対して、本来のＣＴＢラインＬ１を処理するコアＣＲ１に加えて、ブロックＢp0の処理が完了しないと待たされるコアＣＲ２〜ＣＲ４も割り当てられるようになっている。
【０１１７】
すなわち、上側のＣＴＢの処理が完了するまで下側ＣＴＢの処理を開始するのは困難なため、待ち合わせで停止しているコアがあれば、その停止している時間で上側ＣＴＢの処理を助けるようになっている。
【０１１８】
換言すると、２番目以降のＣＴＢラインＬ２〜Ｌ４を処理する下側コアＣＲ２〜ＣＲ４が待たされている状態と、最上端のＣＴＢラインＬ１で並列処理動作が可能な状態を判定し、例えば、最上端ＣＴＢラインＬ１の分割が多いＣＴＢの処理を最優先で処理する。
【０１１９】
例えば、ブロックＢp0において、コアＣＲ１をＣＲ１ａ，ＣＲ１ｂのように処理させ、コアＣＲ２をＣＲ２ａ，ＣＲ２ｂのように処理させ、コアＣＲ３をＣＲ３ａ，ＣＲ３ｂのように処理させ、コアＣＲ４をＣＲ４ａおよびＣＲ４ｂのように処理させる。
【０１２０】
なお、４つのコアＣＲ１〜ＣＲ４によるブロックＢp0の処理が完了した後、例えば、コアＣＲ１は、最上端のＣＴＢラインＬ１におけるＢp0の次のブロックＢp1を処理する。また、Ｂp0の処理が完了した後、例えば、コアＣＲ２は、本来の処理に戻り、２番目のＣＴＢラインＬ２におけるブロックＢp2を処理する。
【０１２１】
このように、第２実施例によれば、処理が待たされるコアは、その待たされる原因となっている優先的に処理するブロックに割り当てられるため、全体としての処理時間を低減することが可能になる。
【０１２２】
図１９，図２１および図２３は、第２実施例のコアの割り当て処理の一例を説明するためのフローチャートであり、図２０，図２２および図２４は、それぞれ図１９，図２１および図２３に示すフローチャートにおける処理を説明するための図である。
【０１２３】
すなわち、図１９は、６４×６４(画素：ＣＴＢ)以下の処理を示し、図２１は、図１９におけるステップＳＴ３９の３２×３２以下の処理を示し、図２３は、図２１におけるステップＳＴ５１の１６×１６以下の処理を示す。
【０１２４】
図１９に示されるように、第２実施例のコアの割り当て処理(６４×６４以下)が開始すると、ステップＳＴ３１において、ＣＴＢ(Coding Tree Block：現ブロック)のサイズを判定する。
【０１２５】
ステップＳＴ３１において、現ブロックのサイズが６４×６４であると判定すると、ステップＳＴ３４に進み、６４×３２であると判定すると、ステップＳＴ３２に進み、３２×６４であると判定すると、ステップＳＴ３３に進む。なお、ステップＳＴ３１において、現ブロックのサイズが３２×３２以下であると判定すると、ステップＳＴ３９に進む。
【０１２６】
ステップＳＴ３４では、図２０(a)に示されるように、現在処理しているブロック(現ＣＴＢ)Ｂp11の次に処理するブロックは、右側のブロック(次ＣＴＢ)Ｂp12だけになり、下のブロックは、同時処理不可(×)になる。
【０１２７】
ステップＳＴ３２では、現ブロックのサイズがPart0(ＰＵ＝０)かどうかを判定し、現ブロックのサイズ(６４×３２)がPart0である(ＹＥＳ)と判定すると、ステップＳＴ３５に進み、Part0ではない(ＮＯ)と判定すると、ステップＳＴ３６に進む。
【０１２８】
また、ステップＳＴ３３でも、Part0かどうかを判定し、現ブロック(３２×６４)のサイズがPart0である(ＹＥＳ)と判定すると、ステップＳＴ３７に進み、Part0ではない(ＮＯ)と判定すると、ステップＳＴ３８に進む。
【０１２９】
ステップＳＴ３５では、図２０(b)に示されるように、Ｂp21(現ＣＴＢ)の次に処理するブロックは、右側のブロック(次ＣＴＢ)Ｂp23だけでなく、下のブロックＢp22も可能であり、同時にＢp22，Ｂp23の両方を処理することができる。すなわち、例えば、第１コアＣＲ１によりブロックＢp23を処理すると共に、第２コアＣＲ２によりブロックＢp22を並列に処理することが可能になる。
【０１３０】
なお、ステップＳＴ３６〜ＳＴ３８では、図２０(c)〜図２０(e)に示されるように、ステップＳＴ３４と同様に、現在処理しているブロックＢp24，Ｂp31，Ｂp33の右側のブロックＢp25，Ｂp32，Ｂp34だけになり、下のブロックは、同時処理不可(×)になる。
【０１３１】
図２１に示されるように、図１９におけるステップＳＴ３９の処理(３２×３２以下)の処理が開始すると、ステップＳＴ４１において、現ブロック(ＣＴＢ)のサイズを判定する。
【０１３２】
ステップＳＴ４１において、現ブロックのサイズが３２×３２であると判定すると、ステップＳＴ４４に進み、３２×１６であると判定すると、ステップＳＴ４２に進み、１６×３２であると判定すると、ステップＳＴ４３に進む。なお、ステップＳＴ４１において、現ブロックのサイズが１６×１６以下であると判定すると、ステップＳＴ５１に進む。
【０１３３】
ステップＳＴ４４では、現ブロックのサイズが、Part0(ＰＵ＝０)かどうかを判定し、ステップＳＴ４５では、Part1(ＰＵ＝１)かどうかを判定し、ステップＳＴ４６では、Part2(ＰＵ＝２)かどうかを判定する。
【０１３４】
そして、現ブロックのサイズが、Part0と判定すると、ステップＳＴ４７に進み、Part1と判定すると、ステップＳＴ４８に進み、Part2と判定するすると、ステップＳＴ４９に進み、Part0〜Part2ではないと判定すると、ステップＳＴ５０に進む。
【０１３５】
ここで、図２２(a)に示されるように、現ブロックのサイズが、Part2およびPart0〜Part2以外のときは、右側のブロックのみで、下のブロックは並列処理(×)である。しかしながら、現ブロックのサイズが、Part0およびPart1のときは、右側のブロックと共に、下側のブロックも並列的に処理することが可能なのが分かる。
【０１３６】
なお、図２２(b)は、ステップＳＴ４２でPart0である(ＹＥＳ)と判定された場合の各処理に対応し、図２２(c)は、ステップＳＴ４２でPart0ではない(ＮＯ)と判定された場合の各処理に対応する。
【０１３７】
さらに、図２２(d)は、ステップＳＴ４３でPart0である(ＹＥＳ)と判定された場合の各処理に対応し、図２２(e)は、ステップＳＴ４３でPart0ではない(ＮＯ)と判定された場合の各処理に対応する。
【０１３８】
すなわち、図２２(b)では、全ての場合で、並列処理が可能であり、図２２(c)〜図２２(e)では、２つの場合で並列処理が不可(×)であり、２つの場合で並列処理が可能なのが分かる。
【０１３９】
図２３に示されるように、図２１におけるステップＳＴ５１の処理(１６×１６以下)の処理が開始すると、ステップＳＴ６１において、現ブロック(ＣＴＢ)のサイズを判定する。
【０１４０】
ステップＳＴ６１において、現ブロックのサイズが１６×１６であると判定すると、ステップＳＴ６４に進み、１６×８であると判定すると、ステップＳＴ６２に進み、８×１６であると判定すると、ステップＳＴ６３に進む。なお、ステップＳＴ６１において、現ブロックのサイズが８×８以下であると判定すると、ステップＳＴ６９に進む。
【０１４１】
ステップＳＴ６２において、Part0である(ＹＥＳ)と判定すると、ステップＳＴ６５に進み、Part0ではない(ＮＯ)と判定すると、ステップＳＴ６６に進む。また、ステップＳＴ６３において、Part0である(ＹＥＳ)と判定すると、ステップＳＴ６７に進み、Part0ではない(ＮＯ)と判定すると、ステップＳＴ６８に進む。
【０１４２】
ここで、図２４(a)は、ステップＳＴ６４以降の処理に対応し、図２４(b)は、ステップＳＴ６５以降の処理に対応し、図２４(c)は、ステップＳＴ６６以降の処理に対応する。また、図２４(d)は、ステップＳＴ６７以降の処理に対応し、図２４(e)は、ステップＳＴ６８以降の処理に対応する。
【０１４３】
また、図２４(a)および図２４(c)〜図２４(e)に示されるように、ステップＳＴ６４およびＳＴ６６〜ＳＴ６８以下に処理では、各図における一番下の４つの場合を除き、右側のブロックおよび下のブロックの並列処理が可能なのが分かる。
【０１４４】
さらに、図２４(b)に示されるように、ステップＳＴ６５以下に処理では、全ての場合で、右側のブロックおよび下のブロックの並列処理が可能なのが分かる。なお、ステップＳＴ６９における現ブロックのサイズが８×８以下の処理としては、例えば、ＨＥＶＣにおいては、４×８および８×４があるが、その説明は省略する。
【０１４５】
このように、本第２実施例によれば、例えば、処理が待たされて停止しているコアが存在する場合には、その停止しているコアを使用して、複数のコアによる並列処理を行って、処理時間を低減することが可能になる。なお、並列処理に使用するコアは、１つに限定されず、停止しているコアが複数存在している場合には、複数のコアを使用することができるのはいうまでもない。
【０１４６】
図２５は、４つのコアによる並列処理を説明するための図である。なお、図２５では、例えば、上述した第２実施例のように、処理が待たされて停止しているコアを使用して並列処理を行うことは考慮していない。
【０１４７】
なお、図２５は、ＣＴＢのサイズを６４×６４とし、全ブロックのサイズを８×８とした例を示し、処理の順番１では、第１コアＣＲ１の１個のみで開始し、その後、次のサイクルの処理の順番２となる場合を示す。
【０１４８】
また、処理位置『１』の状態では、並列動作が可能であり、第１コアＣＲ１は、処理位置『１』から『４』へと処理を行い、処理の順番２では、第２コアＣＲ２が処理位置『２』の処理を行う。このような処理を処理位置『０』から『６３』まで繰り返して行うものとする。
【０１４９】
図２５に示されるように、このような処理を行うことにより、例えば、『０』〜『６３』までの６４サイクルの処理は、４つのコアＣＲ１〜ＣＲ４を使用することにより２２サイクルで完了することが可能なのが分かる。
【０１５０】
ここで、サイクル［６］〜［１６］では、４つのコアＣＲ１〜ＣＲ４の全てが並列動作し、サイクル［５］，［１７］および［１８］では、３つのコア(ＣＲ１〜ＣＲ３またはＣＲ２〜ＣＲ４)が並列動作する。また、サイクル［３］，［４］，［１９］および［２０］では、２つのコア(ＣＲ１，ＣＲ２またはＣＲ３，ＣＲ４)が並列動作する。なお、サイクル［１］，［２］，［２１］および［２２］では、１つのコア(ＣＲ１またはＣＲ４)が並列動作する。
【０１５１】
図２６および図２７は、第２実施例のコアの割り当て処理の効果を説明するための図であり、図２６は、第２実施例を適用しない場合の動作の一例を示し、図２７は、第２実施例を適用した場合の動作の一例を示す。
【０１５２】
ここで、図２６および図２７では、ＣＴＢラインＬ１〜Ｌ４に対して、基本的に、それぞれ第１コアＣＲ１〜第４コアＣＲ４が割り当てられ、さらに、図２７では、上述した第２実施例の停止しているコアを使用した並列処理を行うようになっている。
【０１５３】
図２６と図２７の比較から明らかなように、第２実施例を適用しない場合には、２０サイクル要していた処理が、第２実施例を適用することにより、１４サイクルに低減することができることが分かる。
【０１５４】
すなわち、図２６に示されるように、第２実施例を適用しない場合、複数のコアが同時(並列)に動作できるのは、例えば、ＣＲ１3，ＣＲ２3、ＣＲ１14，ＣＲ２14、ＣＲ２15，ＣＲ３15、ＣＲ２16，ＣＲ３16，ＣＲ４16等のみである。
【０１５５】
ここで、例えば、参照符号ＣＲ２16は、第２コアＣＲ２が１６サイクル目で行うブロック処理を示し、ＣＲ３16は、第３コアＣＲ３が１６サイクル目で行うブロック処理を示し、ＣＲ４16は、第４コアＣＲ４が１６サイクル目で行うブロック処理を示す。
【０１５６】
例えば、ＣＴＢラインＬ１において、細分化されたＣＴＢブロックＢpxを処理するとき、第２実施例を適用しない場合は、第１コアＣＲ１のみで処理するため、Ｌ２〜Ｌ４を処理するコアＣＲ２〜ＣＲ４は、待たされて停止するサイクルを含む。その結果、全ての処理を完了するまでに、２０サイクルを要することになる。
【０１５７】
これに対して、図２７に示されるように、第２実施例を適用した場合、複数のコアが並列動作できるのは、例えば、ＣＲ１3，ＣＲ２3やＣＲ２10，ＣＲ３10，ＣＲ４10等だけでなく、さらに多くの並列処理を行うことができる。
【０１５８】
すなわち、第２実施例を適用した場合は、例えば、ＣＴＢブロックＢpxの処理を、ＣＲ１5，ＣＲ３5、ＣＲ２6，ＣＲ３6のように複数のコアで行い、さらに、他のＣＴＢライン(ＣＴＢ)の処理もＣＲ２5、ＣＲ１6で並列に行うことができる。
【０１５９】
その結果、全ての処理を完了するまでに、２０サイクルから１４サイクルに処理時間を短縮することが可能になる。これは、ＣＴＢブロックを細分化するサイズや使用するコアに応じて、より一層の処理時間の短縮が期待できる。
【０１６０】
なお、上述した第１実施例および第２実施例の適用は、ＨＥＶＣ(H.265)に限定されるものではなく、複数のコア(プロセッサコア)を使用して画像を処理する様々な画像処理技術に対して適用することが可能である。
【０１６１】
また、本実施例は、図１或いは図１６を参照して説明したような復号器３に適用することができるが、例えば、図１６に示す復号器３の演算処理装置(ＣＰＵ)300が実行するプログラムとしても実施することが可能である。
【０１６２】
以上、実施形態を説明したが、ここに記載した全ての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１６３】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、
分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置であって、
前記演算処理装置は、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当てる、
ことを特徴とする画像処理装置。
【０１６４】
（付記２）
前記演算処理装置は、
前記複数のコアが割り当てられた前記１列分の複数のタイルと、前記第１方向に隣接するタイルに対しては、前記コアの割り当てを行わない、
ことを特徴とする付記１に記載の画像処理装置。
【０１６５】
（付記３）
前記演算処理装置は、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、第１のサイズを有するタイルに対して、第１の数のコアを割り当て、前記第１のサイズより大きい第２のサイズのタイルに対して、前記第１の数より大きい第２の数のコアを割り当てる、
ことを特徴とする付記２に記載の画像処理装置。
【０１６６】
（付記４）
前記演算処理装置は、
前記第２方向におけるタイルの数が前記コアの数よりも小さいとき、前記第２方向において、タイルに含まれる分割数が第１の数であるタイルに対して、第２の数のコアを割り当て、タイルに含まれる分割数が前記第１の数より大きい第３の数であるタイルに対して、前記第２の数より大きい第４の数のコアを割り当てる、
ことを特徴とする付記２に記載の画像処理装置。
【０１６７】
（付記５）
前記第１方向は、前記第１方向における少なくとも２つのタイルを同時に処理した場合、隣接メモリとして使用するメモリ容量の増加を招く方向である、
ことを特徴とする付記２乃至付記４のいずれか１項に記載の画像処理装置。
【０１６８】
（付記６）
前記第１方向は、前記画像データの上下方向である、
ことを特徴とする付記２乃至付記５のいずれか１項に記載の画像処理装置。
【０１６９】
（付記７）
前記第２方向は、前記第１方向と直交する方向である、
ことを特徴とする付記２乃至付記６のいずれか１項に記載の画像処理装置。
【０１７０】
（付記８）
前記第２方向は、前記画像データの左右方向である、
ことを特徴とする付記２乃至付記７のいずれか１項に記載の画像処理装置。
【０１７１】
（付記９）
１つの画像データを分割した複数の画像ブロックラインに対して割り当てられる複数のコアと、
前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置であって、
前記演算処理装置は、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする画像処理装置。
【０１７２】
（付記１０）
前記演算処理装置は、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、さらに後続の第３画像ブロックラインを処理する第３コアの動作が停止するとき、前記第３コアを、前記第１コアおよび前記第２コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする付記９に記載の画像処理装置。
【０１７３】
（付記１１）
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、
分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置であって、
前記演算処理装置は、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記１列分の複数のタイルの１つに複数のコアを割り当てたとき、前記複数のコアが割り当てられたタイルを分割した複数の画像ブロックラインに対して、前記複数のコアの割り当てを制御し、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする画像処理装置。
【０１７４】
（付記１２）
前記画像処理装置は、前記画像データに基づいたインター予測を行って画像を復号化する復号器である、
ことを特徴とする付記１乃至付記１１のいずれか１項に記載の画像処理装置。
【０１７５】
（付記１３）
１つの画像データを複数のタイルに分割し、分割されたタイルに対して複数のコアを割り当てて画像処理を行う画像処理方法であって、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当てる、
ことを特徴とする画像処理方法。
【０１７６】
（付記１４）
さらに、
前記複数のコアが割り当てられた前記１列分の複数のタイルと、前記第１方向に隣接するタイルに対しては、前記コアの割り当てを行わない、
ことを特徴とする付記１３に記載の画像処理方法。
【０１７７】
（付記１５）
１つの画像データを複数の画像ブロックラインに分割し、分割された画像ブロックラインに対して複数のコアを割り当てて画像処理を行う画像処理方法であって、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする画像処理方法。
【０１７８】
（付記１６）
１つの画像データを複数のタイルに分割し、分割されたタイルに対して複数のコアを割り当てて画像処理を行う画像処理方法であって、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記１列分の複数のタイルの１つに複数のコアを割り当てたとき、前記複数のコアが割り当てられたタイルを分割した複数の画像ブロックラインに対して、前記複数のコアの割り当てを制御し、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
ことを特徴とする画像処理方法。
【０１７９】
（付記１７）
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置の画像処理プログラムであって、
前記演算処理装置に、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当てる、
処理を実行させる、ことを特徴とする画像処理プログラム。
【０１８０】
（付記１８）
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置の画像処理プログラムであって、
前記演算処理装置に、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
処理を実行させる、ことを特徴とする画像処理プログラム。
【０１８１】
（付記１９）
１つの画像データを分割した複数のタイルに対して割り当てられる複数のコアと、分割された前記タイルに基づいて、前記複数のコアの割り当てを制御する演算処理装置と、を有する画像処理装置の画像処理プログラムであって、
前記演算処理装置に、
前記画像データが第１方向および前記第１方向とは異なる第２方向において複数のタイルに分割されたとき、前記第２方向の１列分の複数のタイルに対して前記複数のコアの全てを割り当て、
前記１列分の複数のタイルの１つに複数のコアを割り当てたとき、前記複数のコアが割り当てられたタイルを分割した複数の画像ブロックラインに対して、前記複数のコアの割り当てを制御し、
第１コアによる先行する第１画像ブロックラインの処理が完了していないことで、後続の第２画像ブロックラインを処理する第２コアの動作が停止するとき、前記第２コアを、前記第１コアに加えて前記第１画像ブロックラインの処理に割り当てる、
処理を実行させる、ことを特徴とする画像処理プログラム。
【符号の説明】
【０１８２】
１    符号器
３    復号器
５    外部メモリ
５Ａ    隣接メモリ領域
５Ｂ    復号画像格納領域
１０    ＣＴＢ分割部
１１    減算器
１２    直交変換量子化部
１３    エントロピー符号化
１４    逆量子化逆直交変換部
１５    予測モード選択部
１６    加算器
１７    動きベクトル検出部
１８    フレーム間予測部
１９    フレーム内予測部
２０    現フレームバッファ
２１    過去フレームバッファ
２２    フレームバッファ管理部
２３    デブロッキングフィルタ
３０    エントロピー復号化部
３１    逆量子化逆直交変換部
３２    加算器
３３    予測モード選択部
３４    現フレームバッファ
３５    フレーム内予測部
３６    フレーム間予測部
３７    デブロッキングフィルタ
３８    フレームバッファ管理部
３９    過去フレームバッファ
５０    デブロッキングフィルタ用一時メモリ
５１    フレーム間予測部用一時メモリ
300    演算処理装置(ＣＰＵ)
【図１】
0006613618.tif 000002
【図２】
0006613618.tif 000003
【図３】
0006613618.tif 000004
【図４】
0006613618.tif 000005
【図５】
0006613618.tif 000006
【図６】
0006613618.tif 000007
【図７】
0006613618.tif 000008
【図８】
0006613618.tif 000009
【図９】
0006613618.tif 000010
【図１０】
0006613618.tif 000011
【図１１】
0006613618.tif 000012
【図１２】
0006613618.tif 000013
【図１３】
0006613618.tif 000014
【図１４】
0006613618.tif 000015
【図１５】
0006613618.tif 000016
【図１６】
0006613618.tif 000017
【図１７】
0006613618.tif 000018
【図１８】
0006613618.tif 000019
【図１９】
0006613618.tif 000020
【図２０】
0006613618.tif 000021
【図２１】
0006613618.tif 000022
【図２２】
0006613618.tif 000023
【図２３】
0006613618.tif 000024
【図２４】
0006613618.tif 000025
【図２５】
0006613618.tif 000026
【図２６】
0006613618.tif 000027
【図２７】
0006613618.tif 000028