(57)【特許請求の範囲】
【請求項１】
復号装置により実行される復号方法であって、
第１の符号列を入力する入力ステップと、
前記入力ステップで入力された第１の符号列を符号化ブロック間の依存性が低い第２の符号列に変換すると共に、第２の符号列の復号処理を符号化ブロック単位で２つ以上の作業スレッドに割り当てるエントロピー変換ステップと、
前記２つ以上の作業スレッドにて、前記エントロピー変換ステップにより割り当てられたブロック単位の第２の符号列を解読し、再生画像を復元する画像処理ステップと、
を備え、
前記第１の符号列では、復号済みデータから復元可能な一部の符号化要素の符号が省略されており、
前記エントロピー変換ステップでは、前記復号装置は、
前記第１の符号列を、前記省略された符号化要素の符号を省略せずに含めた符号列に変換する、
復号方法。
【請求項２】
前記エントロピー変換ステップでは、前記復号装置は、前記第２の符号列として、第１の符号列をビット間の依存性が低い第２の符号列に変換する、請求項１に記載の復号方法。
【請求項３】
前記エントロピー変換ステップでは、前記復号装置は、前記第２の符号列として、第１の符号列を符号化要素間の依存性が低い第２の符号列に変換する、請求項１又は２に記載の復号方法。
【請求項４】
前記エントロピー変換ステップは、
第１の符号列を解読し、前記第２の符号列として、符号化ブロック毎に分離して解読可能な第２の符号列に変換するサブステップと、
前記符号化ブロック毎の第２の符号列の復号処理を、復号処理の待ち行列に追加すると共に、その復号処理を符号化ブロックの列に基づいて定まるスレッドに関連付けるサブステップと、
各スレッドに関連付けられた全ての第２の符号列が復号処理されたかを判定し、処理されていない第２の符号列が存在する場合には、待ち処理を行うサブステップと、
を含む、請求項１〜３の何れか一項に記載の復号方法。
【請求項５】
前記画像処理ステップにおける一の作業スレッドの処理は、
対象の作業スレッドに関連付けられた第２の符号列の復号処理が存在するか否かを判定し、存在するまで処理待ちするサブステップと、
対象の作業スレッドに関連付けられた復号対象の符号化ブロックの復元に必要な全ての符号化ブロックが復元済みであるかを判定し、全ての符号化ブロックが復元されるまで処理待ちするサブステップと、
前記復号対象の符号化ブロックに対応して取得した第２の符号列を解読し、復号対象のブロックの再生画像を復元するサブステップと、
を含む請求項１〜３の何れか一項に記載の復号方法。
【請求項６】
前記第１の符号列が算術符号にて符号化されており、
前記エントロピー変換ステップでは、前記復号装置は、
前記第１の符号列を可変長符号に変換する、請求項１〜５の何れか一項に記載の復号方法。
【請求項７】
前記第１の符号列が符号化ブロックの列を跨ぐ予測を適用する差分パラメータ値の符号を含んでおり、
前記エントロピー変換ステップでは、前記復号装置は、
前記第１の符号列を、前記符号化ブロックの列を跨ぐ予測を適用する差分パラメータを含まない第２の符号列に変換する、請求項１〜５の何れか一項に記載の復号方法。
【請求項８】
前記第１の符号列は可変長符号を用いて符号化されており、
前記エントロピー変換ステップでは、前記復号装置は、
前記第１の符号列の一部を固定長符号に変換する、請求項１〜５の何れか一項に記載の復号方法。
【請求項９】
第１の符号列を入力する入力手段と、
前記入力手段により入力された第１の符号列を符号化ブロック間の依存性が低い第２の符号列に変換すると共に、第２の符号列の復号処理を符号化ブロック単位で２つ以上の作業スレッドに割り当てるエントロピー変換手段と、
前記２つ以上の作業スレッドにて、前記エントロピー変換手段により割り当てられたブロック単位の第２の符号列を解読し、再生画像を復元する画像処理手段と、
を備え、
前記第１の符号列では、復号済みデータから復元可能な一部の符号化要素の符号が省略されており、
前記エントロピー変換手段は、
前記第１の符号列を、前記省略された符号化要素の符号を省略せずに含めた符号列に変換する、
復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、復号方法及び復号装置に関する。
【背景技術】
【０００２】
一般的に、動画復号処理は複雑な処理であり、動画コンテンツの解像度拡大に伴い、高効率な動画復号処理は難しくなってきている。一方、単一のコンピュータ装置により供給される動画復号の処理能力は限られており、複数のコンピュータ装置または複数の処理コアを使う傾向がある。例えば、スマートフォンでは通常２個または４個のコアを含む中央処理装置（ＣＰＵ（Central Processor Unit））を有する。
【０００３】
高解像度のコンテンツをリアルタイムで滑らかな再生のために十分速く復号できるように、連続するビデオビットストリームの処理に複数コアを使う要求がある。最新の動画符号化標準方式であるＨ．２６５／ＨＥＶＣは、複数コアへの復号処理の分散を促進するようにビットストリームを構成する特徴（例えば、Ｔｉｌｅｓ、Ｗａｖｅｆｒｏｎｔｓと呼ばれる技術を利用）を有している。復号する方法として、ビットストリームのビット列を一度に復号し、復号したデータをメモリに蓄積し、復号したデータを複数コアに分散して並列に復号する方法がある。また、並列プロセッサ技術を利用する別の復号方法として、互いに並列に復号されるべきビデオブロックのバッチを定義し、複数のバッチを互いに並列に復号する復号方法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００９−５４０６８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の復号方法では、予めバッチが定義されている必要があるが、符号化方法によって、このような特徴を利用してすべてのビットストリームが生成されるとは限らない。そのため、このような特徴を利用しないビットストリームの復号が複数コアによる処理に対応する機能を備えることが望ましい。
【０００６】
また、ビットストリームのビット列を一度に復号し、復号したデータをメモリに蓄積し、復号したデータを複数コアに分散して並列に復号する方法では、復号データを蓄積するためのメモリサイズが非常に大きくなってしまう。そのため、メモリコストの増加だけのみならず、メモリバンド幅の拡張やキャッシュミスの増加にもつながる。
【０００７】
上記の課題を解決するために、符号化装置側の符号化方法によらずに、複数のスレッドを用いて並列的に復号処理を実行し得る復号方法及び復号装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る復号方法は、復号装置により実行される復号方法であって、第１の符号列を入力する入力ステップと、入力ステップで入力された第１の符号列を符号化ブロック間の依存性が低い第２の符号列に変換すると共に、第２の符号列の復号処理を符号化ブロック単位で２つ以上の作業スレッドに割り当てるエントロピー変換ステップと、２つ以上の作業スレッドにて、エントロピー変換ステップにより割り当てられたブロック単位の第２の符号列を解読し、再生画像を復元する画像処理ステップと、を備え、第１の符号列では、復号済みデータから復元可能な一部の符号化要素の符号が省略されており、エントロピー変換ステップでは、復号装置は、第１の符号列を、省略された符号化要素の符号を省略せずに含めた符号列に変換する。
【０００９】
本発明に係る復号装置は、第１の符号列を入力する入力手段と、入力手段により入力された第１の符号列を符号化ブロック間の依存性が低い第２の符号列に変換すると共に、第２の符号列の復号処理を符号化ブロック単位で２つ以上の作業スレッドに割り当てるエントロピー変換手段と、２つ以上の作業スレッドにて、エントロピー変換手段により割り当てられたブロック単位の第２の符号列を解読し、再生画像を復元する画像処理手段と、を備え、第１の符号列では、復号済みデータから復元可能な一部の符号化要素の符号が省略されており、エントロピー変換手段は、第１の符号列を、省略された符号化要素の符号を省略せずに含めた符号列に変換する。
【００１０】
本発明に係る復号方法におけるエントロピー変換ステップでは、エントロピー変換ステップでは、復号装置は、第２の符号列として、第１の符号列をビット間の依存性が低い第２の符号列に変換してもよい。
【００１１】
本発明に係る復号方法におけるエントロピー変換ステップでは、復号装置は、第２の符号列として、第１の符号列を符号化要素間の依存性が低い第２の符号列に変換してもよい。
【００１２】
本発明に係る復号方法におけるエントロピー変換ステップは、第１の符号列を解読し、第２の符号列として、符号化ブロック毎に分離して解読可能な第２の符号列に変換するサブステップと、符号化ブロック毎の第２の符号列の復号処理を、復号処理の待ち行列に追加すると共に、その復号処理を符号化ブロックの列に基づいて定まるスレッドに関連付けるサブステップと、各スレッドに関連付けられた全ての第２の符号列が復号処理されたかを判定し、処理されていない第２の符号列が存在する場合には、待ち処理を行うサブステップと、を含んでもよい。
【００１３】
本発明に係る復号方法では、画像処理ステップにおける一の作業スレッドの処理は、対象の作業スレッドに関連付けられた第２の符号列の復号処理が存在するか否かを判定し、存在するまで処理待ちするサブステップと、対象の作業スレッドに関連付けられた復号対象の符号化ブロックの復元に必要な全ての符号化ブロックが復元済みであるかを判定し、全ての符号化ブロックが復元されるまで処理待ちするサブステップと、復号対象の符号化ブロックに対応して取得した第２の符号列を解読し、復号対象のブロックの再生画像を復元するサブステップと、を含んでもよい。
【００１４】
本発明に係る復号方法では、第１の符号列が算術符号にて符号化されており、エントロピー変換ステップでは、復号装置は、第１の符号列を可変長符号に変換してもよい。
【００１５】
本発明に係る復号方法では、第１の符号列が符号化ブロックの列を跨ぐ予測を適用する差分パラメータ値の符号を含んでおり、エントロピー変換ステップでは、復号装置は、第１の符号列を、第１の符号列が符号化ブロックの列を跨ぐ予測を適用する差分パラメータを含まない第２の符号列に変換してもよい。
【００１６】
本発明に係る復号方法では、第１の符号列は可変長符号を用いて符号化されており、エントロピー変換ステップでは、復号装置は、第１の符号列の一部を固定長符号に変換してもよい。
【発明の効果】
【００１８】
本発明によれば、第１の符号列を符号化ブロック間の依存性が低い第２の符号列に変換するので、符号化装置側の符号化方法によらずに、複数のスレッドを用いて並列的に復号処理を実行することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態に係る復号装置１のブロック図である。
【図２】復号装置１のハードウェア構成図である。
【図３】ＣＴＵの例を概念的に説明する図である。
【図４】復号装置１による処理のフローチャートである。
【図５】エントロピー変換部３による処理のフローチャートである。
【図６】画像処理部５による処理のフローチャートである。
【発明を実施するための形態】
【００２０】
以下、添付図面を参照して、本発明の好適な実施形態について詳細に説明する。なお、図面の説明において同一又は相当要素には同一符号を付し、重複する説明は省略する。
【００２１】
図１は本発明の実施形態に係る復号装置１のブロック図である。図１に示すように、復号装置１は、ビットストリーム受付部２（入力手段）と、エントロピー変換部３（エントロピー変換手段）と、記憶部４と、画像処理部５（画像処理手段）と、表示部６とを備える。
【００２２】
ここで、図２を参照して、復号装置１のハードウェア構成について説明する。図２は、復号装置１のハードウェア構成図である。図２に示されるように、復号装置１は、物理的には、１または複数のＣＰＵ（Central  Processing  unit）２１、主記憶装置であるＲＡＭ（Random  Access  Memory）２２およびＲＯＭ（Read  Only  Memory)２３、データ送受信デバイスである通信モジュール２４、半導体メモリなどの補助記憶装置２５、操作盤（操作ボタンを含む）やタッチパネルなどのユーザの入力を受け付ける入力装置２６、ディスプレイなどの出力装置２７、などのハードウェアを備えるコンピュータとして構成することができる。図２における復号装置１の各機能は、たとえば、ＣＰＵ２１、ＲＡＭ２２などのハードウェア上に１または複数の所定のコンピュータソフトウェアを読み込ませることにより、ＣＰＵ２１の制御のもとで通信モジュール２４、入力装置２６、出力装置２７を動作させるとともに、ＲＡＭ２２および補助記憶装置２５におけるデータの読み出しおよび書き込みを行うことで実現することができる。
【００２３】
ビットストリーム受付部２は、ビットストリーム（第１の符号列）の入力を受け付ける部分である。具体的には、ビットストリーム受付部２は、符号化装置によって符号化されたビットストリームの入力を受け付ける。ビットストリーム受付部２は、ビットストリームとして、例えば、ＣＡＢＡＣ（Context-based  Adaptive  Binary  Arithmetic  Coding）データを入力する。ＣＡＢＡＣデータは、算術符号を用いて符号化されたデータである。ビットストリーム受付部２が入力を受け付けたＣＡＢＡＣデータを記憶手段（例えば、ＲＡＭ２２、補助記憶装置２５）に記憶しておくようにしてもよい。ビットストリーム受付部２は、ＣＡＢＡＣデータが入力された後に、当該ＣＡＢＡＣデータをエントロピー変換部３へ送出する。なお、ＣＡＢＡＣデータは、その一部(例えばスライスヘッダのデータ)が可変長符号にて符号化されている場合も含むこととする。
【００２４】
エントロピー変換部３は、ビットストリーム受付部２で入力されたビットストリームを符号化ブロック間の依存性が低い符号列に変換すると共に、変換した符号列の復号処理（ビットストリームを再生画像に復元する処理）を符号化ブロック単位で２つ以上の作業スレッドに割り当てる部分である。具体的には、エントロピー変換部３は、ビットストリーム受付部２によってＣＡＢＡＣデータが入力されると、スライスヘッダを解析すると共に、入力されたＣＡＢＡＣデータを解読する。また、エントロピー変換部３は、当該ＣＡＢＡＣデータを符号化ブロック間の依存性が低い符号列として、ＶＬＣ（Variable  Length  Coding）データ（可変長符号）に変換する。すなわち、エントロピー変換部３は、算術符号であるＣＡＢＡＣデータを可変長符号に変換する。
【００２５】
ＶＬＣデータの読み書きに必要とする算術演算の処理負荷（例えば、演算量）は、ＣＡＢＡＣデータの読み書きに必要とする算術演算の処理負荷よりも少ない。エントロピー変換部３は、ＣＡＢＡＣデータをＶＬＣデータに変換するので、ＶＬＣデータの各セグメント（例えば、各ＣＴＵ（Coding  Tree  Unit）に対応するＶＬＣデータ）を独立して読み込み可能にすることができる。なお、エントロピー変換部３は、ＣＴＵ単位でＶＬＣデータに変換する。ここでＣＴＵとは、ピクチャを構成する予め定められた符号化単位（符号化要素単位）であって、例えば６４×６４画素のブロックである。このブロックサイズは、６４×６４画素には限定されず、８×８画素、１６×１６画素、３２×３２画素でもよい。なお、各ＣＴＵのデータが固定長とは限らない。つまり、連続する２つのＣＴＵのデータの境界はデータサイズからは通常は分からない。そのため，ＣＴＵデータ間の境界にランダムにアクセスにするため、追加のポインターを保存することが必要となる。例えば、１つのポインターは、復号の１要素に定義される１つまたは１グループのＣＴＵ（復号の要素）に関連したメモリを示す必要がある。
【００２６】
このように、エントロピー変換部３は、ＣＡＢＡＣデータを、符号化要素間の依存性が低い符号列であるＶＬＣデータに変換（再符号化）する。すなわち、エントロピー変換部３は、中間の圧縮されたストリームである中間の圧縮フォーマットとして、ＶＬＣデータに変換する。この結果、エントロピー変換部３は、ＣＴＵ間の依存性が低く、ビット間の依存性も低いデータに変換することができる。なお、エントロピー変換部３は、変換したＶＬＣデータを記憶部４へ蓄積する。すなわち、記憶部４は、ＶＬＣデータを記憶し、画像処理部５がアクセス可能な状態にする。よって、エントロピー変換部３は、画像処理部５に対して、ＣＴＵ単位で分離して変換したＶＬＣデータを解読させることができる。
【００２７】
なお、ＶＬＣデータの代わりにＣＡＢＡＣデータを復号したデータもＣＴＵ間の依存性が低いデータであるが、ＶＬＣデータに比較してデータ量が非常に大きい。ＣＡＢＡＣデータをＶＬＣデータに変換することにより、記憶部４に蓄積するデータサイズを大幅に低減し、復号装置１のメモリバンド幅を小さくし、キャッシュミスの発生を抑制できる。
【００２８】
続いて、エントロピー変換部３が、再符号化する具体例を説明する。ビットストリーム受付部２が受け付けたビットストリームがバイナリー算術符号器にて圧縮されていると仮定する。この場合、エントロピー変換部３は、１つの手法として、Ｈ．２６５／ＨＥＶＣ符号化標準方式にみられるように、ビットストリームから得られるＢＩＮ列を取得し、ビット列として蓄積することが考えられる。しかしながら、この手法はランダムアクセス性が制限されるため十分ではない。例えば、量子化パラメータＱＰの復元については、過去に復号した要素との依存性がある（例えば、あるＣＴＵ列の最初の要素のＱＰ値は，直前に復元されたＣＴＵ列の最後の要素のＱＰ値と依存性がある）。このように、量子化パラメータＱＰ値は、符号化ブロックの列を跨ぐ予測を適用する差分パラメータ値である。
【００２９】
ここで、中間の圧縮フォーマット（中間の圧縮ストリーム）でＱＰ値を別の方法で符号化することによって独立性を高める手段（差分パラメータを含まない手段）がいくつかあり、以下に３つの方法を列挙する。
（１）全てのＱＰ値を差分ＱＰ値ではなく絶対値として符号化する。
（２）ＣＴＵ列の最初の要素について差分ＱＰ値ではなくＱＰ値そのものを符号化する。
（３）ＣＴＵ列の最初の要素では、ある定義した参照値からの差分ＱＰ値を伝送する。例えば、定義した参照値を２６のような中間値（ＱＰ値の範囲は０〜５１）やスライスヘッダの情報から得られる初期値とする。
【００３０】
上記（１）〜（３）のような処理をすることにより、エントロピー変換部３が、ＣＴＵ間の依存性が低いビットストリームに変換するので、画像処理部５が変換したビットストリームを符号化ブロック単位で分離して解読することが可能となる。
【００３１】
続いて、Ｈ．２６５／ＨＥＶＣ標準のコンテキストについて，エントロピー変換部３が、中間の圧縮フォーマット（中間の圧縮ストリーム）を簡単化する方法について説明する。
【００３２】
例えば、ビットストリーム受付部２で入力されたビットストリームが可変長符号を用いて符号化されている場合、エントロピー変換部３は、あるシンタックス要素（符号化要素）について、可変長符号の代わりに固定長符号を利用してもよい。例えば、ブロック内の最後の（有意）係数位置（last_sig_coeff_x_prefix,  last_sig_coeff_y_prefix,  last_sig_coeff_x_suffix  and  last_sig_coeff_y_suffix  シンタックス要素で表現）は固定長コードで表現され得る。ここでコード長は変換サイズに依存する。この処理により、符号化ブロック間の依存性が低いストリームに変換できる。例えば、中間フォーマットに算術符号を用いる場合でも、ブロックの最後の係数を固定長符号にすることにより、ビット列のＣＴＵ間の境界が明確となり、ＣＴＵの先頭ビットをランダムにアクセスできるようになる。このように、エントロピー変換部３は、ビットストリーム受付部２で入力されたビットストリームが可変長符号である場合に、ビットストリームの一部を固定長符号に変換するようにしてもよい。
【００３３】
また、エントロピー変換部３は、Significance map flag sig_coeff_flagのための推測ルールを中間の圧縮フォーマット（中間の圧縮ストリーム）に含めず、４×４サブブロックに常に１６個のsignificance map bitsを伝送するようにしてもよい（例えば、１〜１５番目のビット値が０であっても、１６番目のビットを１であると推察せずに、０を伝送する）。エントロピー変換部３は、上述の処理により、符号化要素間の依存性が少ない中間の圧縮ストリームに変換するので、復号処理の複雑さを緩和させることができる。このように、エントロピー変換部３は、入力されたビットストリームに、符号済みデータから復元可能な一部の符号化要素の符号が省略されていても、省略された符号を省略せずに含めた符号列に変換する。
【００３４】
また、エントロピー変換部３は、サインフラグ coeff_sign_flagのための推測ルールを中間の圧縮フォーマット（中間の圧縮ストリーム）に含めないようにしてもよい。ある条件の元では、４×４サブブロックの最後のサインフラグは自明となるため符号化する必要がないが、エントロピー変換部３は、中間の圧縮フォーマットにはすべての係数のサインビットを含める。エントロピー変換部３は、この処理により、ビット間の依存性が低く、復号時の推測処理が少ないストリームに変換するので、復号処理の複雑さを緩和させることができる。このように、エントロピー変換部３は、入力されたビットストリームに、符号済みデータから復元可能な一部の符号化要素の符号が省力されていても、省略された符号を省略せずに含めた符号列に変換する。
【００３５】
また、エントロピー変換部３は、単純で規則的な可変長コード（例えば，Exponential Golomb code）を係数の符号化に利用するようにしてもよい（ただし、ライスパラメータの適応化を使用しない）。この処理によりビット間の依存性が低いストリームに変換できる。
【００３６】
また、エントロピー変換部３は、中間圧縮ストリームの解読を容易にするために，シンタックス要素の順番を入れ替えてもよい。例えば、エントロピー変換部３は、４×４ブロック内の１つのcoefficientの位置のパスを考慮するときには、１より大きい係数や２より大きい係数のフラグや残りの係数の中間にサインビットを挟まないようにしてもよい。この処理はsingle unary decode演算の利用により実現できる。エントロピー変換部３は、上述の処理により、符号化要素間の依存性が少ないストリームに変換できるので、復号処理の複雑さを緩和させることができる。このように、エントロピー変換部３は、ビットストリームの一部が１つの単項演算で復号可能となるように入れ替えた符号列に変換する。
【００３７】
また、エントロピー変換部３は、符号化ブロック毎に対応するＶＬＣデータの解読処理（復号処理）を待ち行列（キュー）へ追加すると共に、復号処理を符号化ブロックの列に基づいて対応する作業スレッドを関連付け（マッピング）を行い、その旨を画像処理部５へ通知する。上記待ち行列は、後述する画像処理部５が実行する複数の作業スレッドについての待ち行列である。ここで、作業スレッドとは、ＶＬＣデータを解読し、対応する要素（ＣＴＵ）の復元処理を実行するためのスレッドである。また、複数の作業スレッドが存在し、それぞれの作業スレッドは独立して並列に動作するものとする。
【００３８】
ここで、エントロピー変換部３が、符号化ブロックの列に基づいて作業スレッドを関連付ける例について、図３を用いて説明する。図３は、ＣＴＵの列（横並びの符号化ブロックで構成される符号化ブロック列）を示す。各ＣＴＵは、ラベル付けがなされている（各ＣＴＵを一意に識別される識別子が定まっている）。図３の例では、各ＣＴＵに対して、各列と、同一列の順番（図３の左から右方向へ付される番号）とからなるラベル付けがなされる。例えば、Ａ列の最も左のＣＴＵには、「Ａ１」というラベルが付けられている。
【００３９】
エントロピー変換部３は、ＣＴＵの列と、作業スレッド番号（作業スレッド毎に一意に定められている番号）とに基づいて、各作業スレッドが処理対象とするＣＴＵを定める。すなわち、エントロピー変換部３は、ＣＴＵと作業スレッドとを関連付ける。
【００４０】
エントロピー変換部３は、作業スレッド数をＮ個と仮定した場合に、ＣＴＵ列Ｒ内のＣＴＵにはスレッド番号が割り当てられる（例えば、列ＲをＮで割った余りの値）。例えば、後述する画像処理部５を構成する作業スレッドの数が２つである場合、エントロピー変換部３は、奇数列のＣＴＵを第１の作業スレッドに割り当てて、偶数列のＣＴＵを第２の作業スレッドに割り当てる。このように、エントロピー変換部３が、各作業スレッドとＣＴＵとを関連付けると、この関連付けた結果を、記憶部４に登録する（エントロピー変換部３と画像処理部５にそれぞれ記憶しておいてもよい）。画像処理部５は、この関連付けに基づいて各作業スレッド単位に復号処理を行う。すなわち、図３の例では、画像処理部５が、第１作業スレッドとして、Ａ１、Ａ２、Ａ３、Ａ４、Ｃ１で示されるＣＴＵの再生画像の復元処理を実施し、第２作業スレッドとして、Ｂ１とＢ２で示されるＣＴＵの再生画像の復元処理を実施する。
【００４１】
また、エントロピー変換部３は、各スレッドに関連付けられた全ての第２の符号列（ＶＬＣデータ）が復号されたか否かを判定し、処理されていないＶＬＣデータが存在する場合には、待ち処理を行う。この処理は、エントロピー変換部３による処理と、上述の作業スレッドによる処理とを同期するための処理となる。エントロピー変換部３は、待ち処理として、公知のｓｌｅｅｐコマンドを実行することにより実現する。また、エントロピー変換部３は、ｐｔｈｒｅａｄライブラリによる条件変数を使って待ち処理を行ってもよい。
【００４２】
記憶部４は、エントロピー変換部３が変換したＶＬＣデータを記憶する部分である。また、記憶部４は、エントロピー変換部３によって定義された、各スレッドとＣＴＵとの関連付けを記憶する部分である。画像処理部５は、記憶部４が記憶する各作業スレッドとＣＴＵとの関連付けに基づいて、各作業スレッド単位でＣＴＵの再生画像の復元処理を行う（画像処理部５に各作業スレッドとＣＴＵとの関連付けを記録しておいてもよい）。
【００４３】
画像処理部５は、２つ以上の作業スレッドにて、エントロピー変換部３により割り当てられたブロック単位のＶＬＣデータを解読し、再生画像を復元する（すなわち、復号処理をする）部分である。画像処理部５は、複数の作業スレッドについて、各作業スレッドに割り当てられた要素の復元処理を並列に実施する。画像処理部５は、例えば、複数のＣＰＵにより実装され、ＣＰＵそれぞれが、作業スレッドに割り当てられたＣＴＵの再生画像の復元処理をする。また、画像処理部５は、エントロピー変換部３からの通知に応じて、復号処理をする。
【００４４】
画像処理部５は、対象の処理スレッドに関連付けられたＶＬＣデータが存在するか否かを判定し、存在するまで処理を待つ。具体的には、画像処理部５は、記憶部４を参照して、自己のスレッドに割り当てられたＣＴＵがあるか否かを判定し、存在するまで処理を待つ。この待ち処理としては、上述の公知のｓｌｅｅｐコマンドを実行したり、ｐｏｌｌｉｎｇ処理を実行したりする。また、画像処理部５は、条件変数に基づいた待ち処理をしてもよい。
【００４５】
画像処理部５は、対象の処理スレッドに関連付けられたＶＬＣデータが存在する場合、対象の作業スレッドに関連付けられた復号対象の符号化ブロックの復元に必要な全ての符号化ブロックが復元済みであるかを判定し、全ての符号化ブロックが復元されるまで処理待ちをする。
【００４６】
具体的には、画像処理部５は、処理対象となるＶＬＣデータの復号により復元されるＣＴＵに関わる（すなわち依存する）全ての要素（ＣＴＵ）が復元済みであるか否かを判定する。このような依存性は、イントラ予測や動きベクトル復元、あるいは交差する要素演算を伴うほかの処理から発生し得る。
【００４７】
Ｈ．２６５／ＨＥＶＣ標準では、ＣＴＵの復元には、隣接ＣＴＵの復元後に行うことが必要とされる（同じタイルに属する場合）。復元済みの隣接ＣＴＵは現ＣＴＵの直左，左上，直上，右上のＣＴＵを示す。図３に示したＣＴＵの例を用いて説明する。例えば、３スレッドが３つのＣＴＵ列を復元処理し，要素Ａ１、Ａ２、Ａ３とＢ１（図で濃く塗られたブロック）が復元済みとマークされていると仮定する。スレッド１は要素Ａ４を復元処理し，スレッド２は要素Ｂ２（依存性のある全要素Ａ１、Ａ２、Ａ３とＢ１が処理済みとマークされている）を処理する。スレッド３は，要素Ｃ１のＢ２への依存性がまだ解決されていないため、要素Ｃ１の復元処理待ちとなっている。Ｂ２がスレッド２によって処理済みとマークされれば、スレッド３は要素Ｃ１を復元処理する。
【００４８】
画像処理部５は、処理対象となるＶＬＣデータの復号により復元されるＣＴＵに関わる（依存する）全ての要素（ＣＴＵ）が復元されたと判定した場合、復号対象のＣＴＵに対応して取得したＶＬＣデータを解読し、復号対象のＣＴＵの再生画像を復元する。具体的には、画像処理部５は、当該復号処理として、対象となるＶＬＣデータを解析したり、動き補償を実施したり、イントラ予測、逆量子化、逆変換、残差信号と予測信号の加算等を実施する。なお、画像処理部５は、復元した再生画像を表示部６へ送出する。表示部６は、画像処理部５から取得した再生画像を表示する。
【００４９】
続いて、図４〜６のフローチャートを用いて、本実施形態に係る復号装置１で実行される復号方法の処理及び動作を説明する。図４に記載のフローチャートは、復号装置１による復号処理全体のフローチャートである。
【００５０】
まず、ビットストリーム受付部２は、ＣＡＢＡＣデータの入力を受け付けられる（ステップＳ１：入力ステップ）。そして、エントロピー変換部３は、ＣＡＢＡＣデータを解析してＶＬＣデータに変換する（ステップＳ２：エントロピー変換ステップ）。続いて、エントロピー変換部３は、変換したＶＬＣデータをＣＴＵ単位で作業スレッドに関連付ける（ステップＳ３：エントロピー変換ステップ）。続いて、画像処理部５は、各ＣＴＵのＶＬＣデータを解読し、復号画像（再生画像）を復元し（ステップＳ４：画像処理ステップ）、処理を終了する。なお、画像処理部５は、復号画像を表示部６へ送出し、表示部６に復号画像が表示される。
【００５１】
続いて、図５のフローチャートを用いて、本実施形態に係る復号装置１で実行される処理及び動作の内、エントロピー変換部３が行う処理の詳細を説明する。図５に示すフローチャートは、図４に示したフローチャートのステップＳ２とステップＳ３の処理の詳細を示すフローチャートである。まず、エントロピー変換部３は、ビットストリーム受付部２によって、ＣＡＢＡＣデータの入力を受け付けると、スライスヘッダを解析する（ステップＳ１１）。続いて、エントロピー変換部３は、ＣＡＢＡＣデータを解析する（ステップＳ１２）。この際に解析されるデータの量は１つの要素（ＣＴＵ）に対応する。そして、エントロピー変換部３は、ＣＡＢＡＣデータをＶＬＣデータとして再符号化し、ＶＬＣデータを記憶部４へ蓄積する（ステップＳ１３）。そして、エントロピー変換部３は、変換した（再符号化した）ＶＬＣデータに対応する要素（ＣＴＵ）の復元処理をキューに追加する（ステップＳ１４）。エントロピー変換部３は、追加のデータがあるか否かを判定し（ステップＳ１５）、追加のデータがある場合には（ステップＳ１５；ＹＥＳ）、ステップＳ１２へ進む。エントロピー変換部３は、追加のデータが無い場合には（ステップＳ１５；ＮＯ）、画像処理部５によって、復号対象とする要素（ＣＴＵ）の復元に必要となる全ての要素（ＣＴＵ）が復元済みであるか否かを判定する（ステップＳ１６）。全ての要素が復元されていない場合（ステップＳ１６；ＮＯ）、エントロピー変換部３は、待ち処理を行い（ステップＳ１７）、再度全ての要素が復元されたか否かを判定する（ステップＳ１６）。一方、全ての要素が復元されている場合（ステップＳ１６；ＹＥＳ）、処理を終了する。
【００５２】
続いて、図６のフローチャートを用いて、本実施形態に係る復号装置１で実行される処理及び動作の内、画像処理部５が行う処理の詳細を説明する。図６に示すフローチャートは、図４に示したフローチャートのステップＳ４の処理の詳細を示すフローチャートである。まず、画像処理部５は、キュー内に処理対象の要素（ＣＴＵ）があるか否かを判定する(ステップＳ２１)。キュー内に処理対象の要素が無い場合（ステップＳ２１；ＮＯ）、画像処理部５は、キュー内に処理対象の要素が存在するまで待ち処理を行い（ステップＳ２２）、再度ステップＳ２１へ進む。
【００５３】
キュー内に処理対象の要素がある場合（ステップＳ２１；ＹＥＳ）、画像処理部５は、キューから要素（ＣＴＵ）に対応するＶＬＣデータを取得する（ステップＳ２３）。続いて、画像処理部５は、当該要素の復元に必要な全ての要素が復元されたか否かを判定する（ステップＳ２４）。画像処理部５は、処理対象の要素の復元に必要な全ての要素が復元されていない場合（ステップＳ２４；ＮＯ）、待ち処理を実行し（ステップＳ２５）、再度ステップＳ２４へ進む。
【００５４】
処理対象の要素に関わる全ての要素が復元されている場合（ステップＳ２４；ＹＥＳ）、画像処理部５は、当該要素に関するＶＬＣデータを解析する（ステップＳ２６）。続いて、画像処理部５は、復号した動きデータを保存し（ステップＳ２７）、動き補償を実施する（ステップＳ２８）。続いて、画像処理部５は、予測信号加算や、イントラ予測、逆量子化、逆変換処理による残差信号（誤差信号）の復元、並びに残差信号と予測信号との加算による画像復元を実施する（ステップＳ２９）。続いて、画像処理部５は、デブロッキング処理を実施する（ステップＳ３０）。続いて、画像処理部５は、インループフィルタ処理を実施する（ステップＳ３１）。続いて、画像処理部５は、要素が復元済みである旨のマークをする（ステップＳ３２）。続いて、画像処理部５は、該当スレッドにおける処理が全て終了したか否かを判定し（ステップＳ３３）、終了していない場合（ステップＳ３３；ＮＯ）、ステップＳ２１へ進み、全て終了している場合（ステップＳ３３；ＹＥＳ）、処理を終了する。
【００５５】
上述のように、復号装置１は、ＣＡＢＡＣデータをＶＬＣデータへ変換することにより、入力を受け付けたビットストリームを再符号化し、当該再符号化したデータを記憶部４で記憶するので、圧縮処理をして少ないメモリサイズで記憶することができる。また、復号装置１は、複数の作業スレッドが並行して動作するように、変換したＶＬＣデータの復号処理をＣＴＵ単位で作業スレッドに関連付けており、データ間の依存性を極力減らすことができる。
【００５６】
なお、上述の実施形態では、Ｈ．２６５／ＨＥＶＣ動画符号化標準方式に基づいて記載したが、Ｈ．２６４／ＡＶＣのような他の符号化方式に適用してもよい。この場合、ＣＴＵの代わりにマクロブロックを適用することになる。また、上述の実施形態では、エントロピー変換部３にて変換されるＶＬＣデータに対応する要素や画像処理部５における処理対象の要素を１ＣＴＵ単位とする場合について述べたが、複数のＣＴＵからなる１グループのＣＴＵとして画像信号処理を行うことも可能である。
【符号の説明】
【００５７】
１…復号装置、２…ビットストリーム受付部、３…エントロピー変換部、４…記憶部、５…画像処理部、６…表示部。
【図１】
0006382728.tif 000002
【図２】
0006382728.tif 000003
【図３】
0006382728.tif 000004
【図４】
0006382728.tif 000005
【図５】
0006382728.tif 000006
【図６】
0006382728.tif 000007