(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-24
(54)【発明の名称】マルチスレッドCABAC復号
(51)【国際特許分類】
H04N 19/13 20140101AFI20240517BHJP
H04N 19/176 20140101ALI20240517BHJP
【FI】
H04N19/13
H04N19/176
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023575575
(86)(22)【出願日】2022-04-25
(85)【翻訳文提出日】2023-12-22
(86)【国際出願番号】 US2022026204
(87)【国際公開番号】W WO2022260771
(87)【国際公開日】2022-12-15
(32)【優先日】2021-06-07
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100105924
【氏名又は名称】森下 賢樹
(72)【発明者】
【氏名】ワン、ジェイソン
(72)【発明者】
【氏名】スリバスタバ、マノージュ
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA04
5C159MA05
5C159MA21
5C159MC11
5C159ME01
5C159PP04
5C159RC11
5C159TA59
5C159TB08
5C159TC41
5C159TC42
5C159TD15
5C159UA02
5C159UA05
(57)【要約】
【解決手段】CABAC符号化媒体の改良された復号のための方法、システム、及びコンピュータ可読媒体が記載される。復号ループは、コンテキスト確率を使用して、符号化された2進要素のシーケンスから、符号化された2進要素を復号して、復号された2進要素を生成することを含む。このシーケンス内の次の符号化された2進要素に対する次のコンテキスト確率が、復号された2進要素から決定され、この次の符号化された2進要素を復号するための次のコンテキスト確率が次の反復のために復号ループに提供される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
CABAC符号化媒体を復号する方法であって、
コンテキスト確率を使用して、符号化された2進要素のシーケンスから、前記符号化された2進要素を復号して、復号された2進要素を生成することと、
前記復号された2進要素から、前記シーケンス内の次の符号化された2進要素に対する次のコンテキスト確率を決定することと、
前記次の符号化された2進要素を復号するために、前記次のコンテキスト確率を、次の反復の復号ループに提供することと、
を含む、前記復号ループを含む、方法。
【請求項2】
次の符号化された2進要素に対する前記次のコンテキスト確率を決定することは、前記次のコンテキスト確率を決定するためのコンテキストを提供するように構成されている有限状態機械の状態を前進させることを含む、請求項1に記載の方法。
【請求項3】
前記復号ループは、前記復号された2進要素、及び前記有限状態機械の前記状態を用いて、ルックアップテーブル内の前記次のコンテキスト確率をルックアップすることをさらに含む、請求項2に記載の方法。
【請求項4】
前記ルックアップテーブルは、プロセッサのデータキャッシュに格納される、請求項3に記載の方法。
【請求項5】
前記復号ループが、第1の処理スレッドで処理される、請求項1に記載の方法。
【請求項6】
前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することと、前記復号された2進列の構文を構文解析して、第2の処理スレッドで前記構文解析された構文から、復号されたシンボルを生成することと、をさらに含む、請求項5に記載の方法。
【請求項7】
前記復号ループが、第1のプロセッサコアで処理される、請求項1に記載の方法。
【請求項8】
前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することと、復号された2進列の構文を構文解析して、第2のプロセッサコアで前記構文解析された構文から、復号されたシンボルを生成することと、をさらに含む、請求項7に記載の方法。
【請求項9】
前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することと、復号された2進列の構文を構文解析して、グラフィック処理装置で前記構文解析された構文から、復号されたシンボルを生成することと、をさらに含む、請求項7に記載の方法。
【請求項10】
符号化された離散コサイン変換係数、動きベクトルまたはブロック予測モードに対する2進列を復号することをさらに含む、請求項1に記載の方法。
【請求項11】
複数の構文解析器を並列に実行することをさらに含む、請求項1に記載の方法。
【請求項12】
前記有限状態機械のための命令は、プロセッサの命令キャッシュに格納される、請求項2に記載の方法。
【請求項13】
CABAC符号化媒体を復号するためのシステムであって、
プロセッサと、
前記プロセッサに結合されたメモリと、
前記メモリに具体化されたプロセッサ実行可能命令であって、前記命令が、
コンテキスト確率を使用して、符号化された2進要素のシーケンスから、符号化された2進要素を復号して、復号された2進要素を生成することと、
前記復号された2進要素から、前記シーケンス内の次の符号化された2進要素に対する次のコンテキスト確率を決定することと、
前記次の符号化された2進要素を復号するために、前記次のコンテキスト確率を、次の反復の復号ループに提供することと、
を含む、前記復号ループを含む、CABAC符号化媒体を復号する方法を実装するように構成されている、前記命令と、
を備える、システム。
【請求項14】
次の符号化された2進要素に対する前記次のコンテキスト確率を決定することは、前記次のコンテキスト確率を決定するためのコンテキストを提供するように構成されている有限状態機械の状態を前進させることを含む、請求項13に記載のシステム。
【請求項15】
前記復号ループは、前記復号された2進要素、及び前記有限状態機械の前記状態を用いて、ルックアップテーブル内の前記次のコンテキスト確率をルックアップすることをさらに含む、請求項14に記載のシステム。
【請求項16】
前記ルックアップテーブルは、前記プロセッサのデータキャッシュに格納されている、請求項15に記載のシステム。
【請求項17】
前記復号ループが、前記プロセッサの第1の処理スレッドで処理され、前記復号ループが、前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することをさらに含む、請求項13に記載のシステム。
【請求項18】
前記復号された2進列の構文を構文解析して、前記プロセッサの第2の処理スレッドで前記構文解析された構文から、復号されたシンボルを生成するように構成される構文解析器をさらに備える、請求項17に記載のシステム。
【請求項19】
前記復号ループが、前記プロセッサの第1のプロセッサコアで処理され、前記復号ループが、前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することをさらに含む、請求項13に記載のシステム。
【請求項20】
前記復号された2進列の構文を構文解析して、前記プロセッサの第2のプロセッサコアで前記構文解析された構文から、復号されたシンボルを生成するように構成される構文解析器をさらに備える、請求項19に記載のシステム。
【請求項21】
復号された2進列の構文を構文解析して、グラフィック処理装置で前記構文解析された構文から、復号されたシンボルを生成するように構成された構文解析器を有する前記グラフィック処理装置をさらに備え、前記復号ループが、前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することをさらに含む、請求項13に記載のシステム。
【請求項22】
前記復号ループが、前記復号ループの終了状態で、以前に復号された2つ以上の要素から、復号された2進列を出力することをさらに含み、前記方法が、符号化された離散コサイン変換係数、動きベクトルまたはブロック予測モードに対する2進列を復号することをさらに含む、請求項13に記載のシステム。
【請求項23】
並列に実行される複数の構文解析器をさらに備える、請求項13に記載のシステム。
【請求項24】
前記有限状態機械の命令が、前記プロセッサの命令キャッシュに格納される、請求項14に記載のシステム。
【請求項25】
コンピュータ可読命令が具体化された非一時的コンピュータ可読媒体であって、前記命令が、コンピュータによる実行時にCABAC符号化媒体を復号する方法を実装するように構成されており、前記方法が、
コンテキスト確率を使用して、符号化された2進要素のシーケンスから、符号化された2進要素を復号して、復号された2進要素を生成することと、
前記復号された2進要素から、前記シーケンス内の次の符号化された2進要素に対する次のコンテキスト確率を決定することと、
前記次の符号化された2進要素を復号するために、前記次のコンテキスト確率を、次の反復の復号ループに提供することと、
を含む、前記復号ループを含む、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の態様は、符号化された媒体の復号に関する。特に、本開示の態様は、改善されたコンテキスト適応型2値算術コード化(CABAC)の復号に関する。
【背景技術】
【0002】
図1に示されているように、先行技術のCABAC復号は密なループである。CABAC復号エンジン102は、復号すべき各二分決定(ビン)101に対して、ビンの確率テーブル107から、ビンがゼロまたは1である確率を求めなければならない。コンテキスト適応型2値算術コード化という名前が示すように、確率は、このビンのコンテキスト106に依存する。例としてVP9デコーダを使用すると、全てのDCT係数が同じ整数ビット深度によって表される場合、コンテキストがなければ各ビット位置における0または1の確率は同じである。例えば、同じビット深度整数全ての最上位ビットは同じ確率を共有する。DCT係数の真の確率を解決するには、コンテキストが決定されなくてはならない。
【0003】
ビンの正しいコンテキストを検出する(106)ために、デコーダは構文解析器104を実行して、それまでに復号された全てのビン103を構文解析し、復号されたシンボル105を決定しなければならない。例えば、構文解析器は、現在の係数のビット深度が5(4値ビットと1符号ビット)であることを検出し、この係数に対して4つのビンが復号されていることを検出するものとする。この場合、構文解析器は、4ビットが係数であると判定したときに、次のビンがこの係数の符号ビットを表すと判定する。この情報を知ることにより、CABACエンジンは、符号ビットビンを復号するための正しい確率を選択することができる。CABACエンジンは、次のビンを復号する前に、構文解析器が最後のビン構文解析を完了するのを常に待機する。これによって、ビンレベルでのデータ依存性が得られる。
【0004】
現代の汎用プロセッサは、複数のプロセッサコアを有し、各プロセッサコアは、複数の計算ユニットを有する。複数のプロセッサコアは、スレッドレベル並列を利用することができ、複数の計算ユニットは、命令レベル並列を利用することができる。しかしながら、CABACビンの復号は密なループであるため、複数のスレッドにおいて単一のループを実行すると、ループの反復ごとに大きなスレッド間通信遅延が生じる。CABACアルゴリズムは、ビンレベルでデータの依存関係を形成するので、CABACアルゴリズムには、複数の計算ユニットに対する命令レベルの並列性もない。その結果、CABAC復号ループは、コアごとに複数のプロセッサコア及び複数の計算ユニットを利用することができない。したがって、汎用プロセッサを用いたCABAC復号の性能は悪くなる傾向にある。
【0005】
CABACエントロピーコード化は、AVC(H.264)、HEVC(H.265)、VVC(H.266)、VP9、及びAV1などのビデオ圧縮規格では一般的である。現在のところ、専用のハードウェアデコーダだけが、100Mbps超の制約無しのCABACストリームをリアルタイムで復号できる。コンシューマグレードのプロセッサコア1つだけでは、そのようなストリームを復号するためには速さが十分ではない。既存の汎用プロセッサによって高ビットレートでリアルタイムの復号を可能にする唯一の実現可能なアプローチは、並列復号である。残念なことに、CABACストリームに適した並列復号は存在しない。ビデオコード化規格では、マルチスライス、マルチタイル、及びウエーブフロントなどの並列復号を可能にするために、複数のコード化ツールまたは制約が導入されている。しかし、これらのツールまたは制約は、コード化効率を若干低下させる可能性があり、全てのエンコーダが、これらのコード化ツールをサポートするわけではなく、または制約を受け入れるわけではない。最適には、デコーダは、全ての入力ストリームがそのようなツールまたは制約を有していることを前提とするべきではない。
【0006】
こうした文脈の中で、本開示の態様が生じる。
【図面の簡単な説明】
【0007】
本開示の教示は、添付図面とあわせて以下の詳細な説明を検討することによって容易に理解できる。
【0008】
【
図1】CABAC符号化媒体を復号するための先行技術の方法のフロー図である。
【
図2】本開示の態様による、CABAC符号化媒体を復号するための改善された方法のフロー図である。
【
図3】本開示の態様による、CABAC符号化媒体を復号するための改善された方法における状態機械の動作のフロー図である。
【
図4】本開示の態様による、CABAC符号化構文要素を復号するための二分決定木としての状態機械の実装を表すツリー図である。
【
図5】本開示の態様のコンテキスト内でのストリーミングデータピクチャの1つの可能な分割を例示する概略図である。
【
図6】本開示の態様に従って動作するように構成されているコンピュータシステムの一例を例示するブロック図である。
【発明を実施するための形態】
【0009】
以下の詳細な説明は、例示を目的として多くの具体的な詳細を含むが、当業者は、以下の詳細に対する多くの変形及び改変が本発明の範囲内にあることを認識する。したがって、以下で説明される発明の例示的な実施形態は、特許請求される発明への一般性を失うことなく、及び特許請求される発明への限定を課すことなく示される。
【0010】
本開示の態様は、並列復号ツール及び制約を導入したビデオ規格から独立して並列CABAC復号を可能にする。並列CABACの実装は、複数のCPUコアまたはCPU/GPUの計算能力を利用して、高ビットレートの制約されていないCABACストリームをリアルタイムで復号することができる。既存の並列化ソリューションは、並列化のための分割位置を決定するために、エンコーダ規格によって定義されたエンコーダからの情報を用いて、スライス、行またはタイルのレベルでピクチャを復号するタスクを分割する。ビデオ符号化規格の中には、並列復号のためにピクチャを分割するためのエンコーダからの情報を得ていないため、並列化が不可能なものもある。また、並列復号のためにピクチャを分割する情報は、ピクチャと共に符号化すべき追加データを必要とする。したがって、フレームがピクチャを分割するための情報と共に符号化されると、コード化効率が低下する。本開示の態様は、ピクチャを分割するための情報が不足しているビデオ規格での並列CABAC復号を可能にする方法を提供する。
【0011】
CABAC復号の並列化の改善された方法を説明する前に、デジタルピクチャ、例えば、ビデオピクチャが、ストリーミングアプリケーション及びストレージアプリケーション向けにどのように符号化/復号されるかを理解することが有用である。本開示の態様の文脈では、ビデオピクチャデータは、コード化及び復号に適したサイズのユニットで分解され得る。例えば、ビデオデータの場合には、このビデオデータは複数のピクチャに分解され得、各ピクチャは一連の画像における特定の画像に相当する。ビデオデータの各ユニットは、サイズの異なるサブユニットに分解されてもよい。一般的に、各ユニット内には、いくつかの最小または基本的なサブユニットが存在する。ビデオデータの場合、各ビデオフレームは、複数のピクセルに分解され得、各ピクセルはルマ(輝度)データ及びクロマ(色)データを含む。
【0012】
例として、及び限定することなく、
図5に示されるように、単一のピクチャ500(例えば、デジタルビデオフレーム)は、1つ以上のセクションに分解され得る。本明細書で使用するとき、用語「セクション」は、ピクチャ500内の1つ以上のルマサンプルまたはクロマサンプルのグループを指すことがある。セクションは、ピクチャ内の単一のルマサンプルまたはクロマサンプルからピクチャ全体までの範囲にわたり得る。セクションの非限定的な例は、スライス(例えば、マクロブロック行)502、マクロブロック504、サブマクロブロック506、ブロック508、及び個々のピクセル510を含む。
図5に例示されるように、各スライス502は、マクロブロック504の1つ以上の行、または1つ以上のそのような行の一部を含む。行内のマクロブロックの数は、マクロブロックのサイズ、ならびにピクチャ500のサイズ及び解像度によって決まる。例えば、各マクロブロックが16×16のクロマサンプルまたはルマサンプルを含む場合、各行内のマクロブロックの数は、ピクチャ500の幅(クロマサンプル単位またはルマサンプル単位)を16で割ることによって求められ得る。各マクロブロック504は、いくつかのサブマクロブロック506に分解され得る。各サブマクロブロック506は、いくつかのブロック508に分解され得、各ブロックは、いくつかのクロマサンプルまたはルマサンプル510を含み得る。例として、及び限定することなく、一般的なビデオコード化スキームでは、各マクロブロック504は、4つのサブマクロブロック506に分解されてもよい。各サブマクロブロックは、4つのブロック508に分解されてもよく、各ブロックは、16個のクロマサンプルまたはルマサンプル510の4×4配列を含んでもよい。
【0013】
H.265などの一部のコーデックは、符号化のために所与のピクチャを異なるサイズの2つ以上のセクションに分解できるようにする。具体的には、H.265規格は、ピクチャをパーティショニングするという「タイル」概念を導入している。タイルは、ピクチャの独立に復号可能な領域であり、いくつかの共有ヘッダ情報と共に符号化される。タイルは、追加的に、ビデオピクチャの局所領域への空間的ランダムアクセスを目的に使用され得る。ピクチャの典型的なタイル構成は、各タイルにおおよそ同数のコード化ユニット(CU)を有する矩形領域にピクチャをセグメント化することで構成される。コード化ユニットは、H.264規格のマクロブロック(MB)に類似している。ただし、CUのサイズはエンコーダによって設定することができ、マクロブロックよりも大きくすることができる。CUのサイズは、ピクチャの最良のパーティショニングのために、ビデオコンテンツに応じて柔軟かつ適応的に合わせることができる。
【0014】
各ピクチャは、フレームまたはフィールドのいずれかであり得ることに留意されたい。フレームは、完全画像を指す。フィールドは、特定のタイプのディスプレイデバイス上で画像を表示することを促進するために使用される画像の一部である。一般に、画像内のクロマサンプルまたはルマサンプルは、行に配列される。表示を促進するために、画像は、ピクセルの行を交互に2つの異なるフィールドに分けることによって分割されることがある。その場合、2つのフィールド内のクロマサンプルまたはルマサンプルの行が、完全画像を形成するようにインタレースされ得る。陰極線管(CRT)ディスプレイなどの一部のディスプレイデバイスでは、2つのフィールドが、単に続けざまに相次いで表示され得る。ディスプレイでピクセルを照明するために使用される蛍光体、または他の発光素子の残光が残像性と相まって、2つのフィールドが連続像として知覚されることになる。液晶ディスプレイなど特定のディスプレイデバイスでは、表示される前に2つのフィールドを単一のピクチャにインタレースする必要がある場合がある。符号化画像を表すストリーミングデータは、画像がフィールドであるかまたはフレームであるかを示す情報を含む場合があり、あるいは規格によっては、そのような情報が無い場合がある。そのような情報は、画像へのヘッダに含まれてもよい。
【0015】
MPEG2、MPEG4、及びH.264などの現代のビデオコーダ/デコーダ(コーデック)は、一般に、典型的にはIフレーム、Pフレーム、及びBフレームとそれぞれ称される、イントラフレーム、予測フレーム、及び両方向予測フレームとして知られる3つの基本的なタイプのうちの1つとしてビデオフレームを符号化する。
【0016】
Iフレームは、それ自体を除くピクチャを全く参照することなくコード化されたピクチャである。Iフレームは、ランダムアクセスのために使用され、他のPフレームまたはBフレームの復号のための参照として使用される。Iフレームは、ランダムアクセスポイント(デコーダが所与のピクチャ位置においてゼロから適切に復号を開始することを可能にする)を生じさせるためにエンコーダによって生成されることがある。Iフレームは、画像の詳細を区別することが、有効なPフレームまたはBフレームの生成を禁止する場合に生成されてもよい。Iフレームが完全なピクチャを含むことを理由に、Iフレームは典型的には、PフレームまたはBフレームよりも符号化するために多くのビットを必要とする。ビデオフレームは、多くの場合、入力ビデオ内でシーンの変更が検出されると、Iフレームとして符号化される。
【0017】
Pフレームは、復号されるために、いくつかの他のピクチャ(複数可)の事前復号を必要とする。Pフレームは、典型的には、Iフレームよりも符号化のために少ないビットを必要とする。Pフレームは、復号順序で前のIフレームに対する差分に関する符号化情報を含む。Pフレームは、典型的には、グループオブピクチャ(GoP)内の先行するIフレームを参照する。Pフレームは、画像データ及び動きベクトル変位の両方、ならびにその2つの組み合わせを含んでもよい。いくつかの標準コーデック(MPEG-2など)では、Pフレームは、復号中に参照として以前に復号されたピクチャを1つだけ使用し、そのピクチャが表示順序でPフレームに先行することも必要とする。H.264では、Pフレームは、復号中に参照として以前に復号された複数のピクチャを使用することができ、その予測に使用されるピクチャ(複数可)に対していずれかの任意の表示順序関係を有することができる。
【0018】
Bフレームは、復号されるためにIフレームまたはPフレームのいずれかの事前復号を必要とする。Pフレームと同様に、Bフレームは、画像データ及び動きベクトル変位の両方、及び/またはその2つの組み合わせを含んでもよい。Bフレームは、以前に復号された2つの異なる参照領域を使用して取得された予測を平均化することによって、動き領域(例えば、マクロブロックまたはより小さなエリアなどのフレームのセグメント)の予測を形成するいくつかの予測モードを含んでもよい。いくつかのコーデック(MPEG-2など)では、Bフレームは、他のピクチャの予測のための参照として使用されることはない。結果として、そのようなBピクチャには、細部が失われても後続ピクチャの予測品質に悪影響を与えないことを理由に、より低品質の符号化(通常よりも使用するビットが少なくなる)が使用されてもよい。H.264などの他のコーデックでは、Bフレームは、(エンコーダの判定により)他のピクチャの復号のための参照として使用される場合、または参照として使用されない場合がある。いくつかのコーデック(MPEG-2など)は、復号中に参照として以前に復号されたピクチャを正確に2つ使用し、それらのピクチャのうちの1つが表示順序でBフレームピクチャに先行し、もう1つがそれに続くことを求める。H.264などの他のコーデックでは、Bフレームは、復号中に参照として以前に復号されたピクチャを1つ、2つ、または3つ以上使用する場合があり、その予測に使用されるピクチャ(複数可)に対していずれかの任意の表示順序関係を有することができる。Bフレームは、典型的には、IフレームまたはPフレームのいずれかよりも符号化に少ないビットを必要とする。
【0019】
本明細書で使用されるように、用語Iフレーム、Bフレーム、及びPフレームは、例えば、ストリーミングビデオのコンテキストに関して上記説明されたように、Iフレーム、Bフレーム、及びPフレームと類似した特性を持ついずれかのストリーミングデータユニットに適用されてもよい。
【0020】
デジタルビデオピクチャを符号化するために、エンコーダは、複数のデジタル画像を受信し、各画像を符号化する。デジタルピクチャの符号化は、セクションごとに進められ得る。本明細書で使用するとき、画像圧縮は、デジタル画像にデータ圧縮を適用することを指す。画像圧縮の目的は、所与の画像のデータを効率的な圧縮データの形式で記憶または伝送することを可能にするために、その画像の画像データの冗長性を削減することである。
【0021】
エントロピー符号化は、コード長が信号の確率にマッチするように信号にコードを割り当てるコード化方式である。典型的には、エントロピーエンコーダは、等しい長さのコードによって表されるシンボルを、確率の負の対数に比例したコードによって表されるシンボルと置き換えることによって、データを圧縮するために使用される。
【0022】
CABACは、H.264/MPEG-4AVC及び高効率ビデオコード化(HEVC)規格で使用されるエントロピー符号化の一形態である。CABACは、ビデオ符号化で使用される他のほとんどのエントロピー符号化アルゴリズムよりもはるかに優れた圧縮を提供することが特徴的であり、H.264/AVC符号化方式に、以前のものよりも優れた圧縮能力を提供する主要な要素の1つである。しかしながら、CABACが算術コード化を使用するということは、コンテキスト適応型可変長コード化(CAVLC)よりも復号に大きな処理量を要求することがあることを留意されたい。
【0023】
研究から、CABACビン復号を実行するために以下の演算が必要であることが判明した。これらの演算は、CABACコア演算と称される。
1. 前に復号された全てのビンに従って、次のビンのためのコンテキストを選択する。
2. 次のビンの確率を求める。
3. 次のビンを復号する。
【0024】
この開示の洞察は、全ての構文解析器タスクがCABACコア演算に属しているわけではないことである。例えば、DCT係数の復号では、4つの値のビットビン及び1つの符号のビットビンを全て復号した後に、デコーダは、符号付き整数を再構築し、これをDCT係数マトリクスに格納する。整数再構築及び格納のプロセスは、CABACコア演算ではなく、CABAC復号を行うスレッドとは切り離された別のスレッドに移すこともあり得る。CABACビン復号は、算術計算及びテーブルルックアップを行うのに必要な演算がほとんどない、非常に密なループである。これに反して、構文解析器は格段に大きい。構文シンボルの各タイプは、再構築するための専用のコードブロックを有する。
【0025】
符号化システムの文法がスーパーブロックレベルまたはマクロブロックのレベルでコンテキストレスである場合、そのレベルでの状態とCABACビンコンテキストとの間には多対1の関係があることが判明している。換言すれば、機械状態を使用して、スーパーブロックレベルまたはマクロブロックレベルでCABACビンのコンテキストをルックアップすることができる。シンボル再構築がCABAC復号スレッドから除かれる場合、コンテキストのない文法で全てのシンボルを復号するように、有限状態機械が定義され得る。復号サイクルの構文再構築関数を除くことにより、少なくともサイクルの重い構文要素全てが、有限状態機械によって構文解析されることが可能になる。サイクルの重い構文要素は、DCT係数、動きベクトル、及びブロック予測モードなどの復号されたシンボルを含む。ループに依存し、状態機械を使用して再構築できないいくつかのシンボルが存在し、典型的には、これらのシンボルはピクチャレベルであり、先行技術で使用されているシンボル依存コンテキストルックアップを用いて復号され得ることに留意すべきである。
【0026】
図2に示されているように、CABACエンジン208と構文解析器209との間の分離によって、シンボルを完全に再構築することなく(205)、復号された2進列(「構文要素の2値化」または「ビン列」とも称される場合がある)を使用して、CABACエンジン208内にループを形成することができる。CABACエンジン208は、CABAC符号化入力ストリーム201を受信すること、復号されたビン列203を生成するCABAC復号エンジン202、現在の2進要素(本明細書では「ビン」とも呼ばれる)が復号されたときに状態を進め、コンテキスト確率ルックアップテーブル207にコンテキストを提供するコンテキスト状態機械206を含む。コンテキスト確率テーブル207は、状態機械206からの状態及び現在の復号された2進要素203と共に使用されて、次の2進要素が1または0になる確率をCABAC復号エンジン202に提供する。本明細書で使用される場合、2進要素またはビンは、ビット列の単一ビットである。2進列またはビンは、2進要素の集合であり、構文要素の2値化からの構文要素の値の中間表現である。
【0027】
復号された2進要素203からのコンテキスト確率、及び有限状態機械206の状態を解決することにより、プログラムサイズの縮小が可能となり、さらに、構文解析への依存性が無くなるため、並列処理が可能となる。構文再構築をCABAC復号スレッドから抜き出した後、スレッドは、既存のマルチコアプロセッサのCPUコアのレベル1命令キャッシュに容易に収まり得る。コンテキスト確率テーブル207は、CPUのデータキャッシュにロードされるのに十分に小さくなり得る。CABACエンジン208は、構文解析器209から独立して動作して、密なループでビンを復号することができる。これによってさらに、様々な程度の並列性が可能になる。構文解析器209の複数のインスタンスは、プロセッサの別個のスレッドまたはプロセッサの別個のコアで実行することができ、CABACエンジン208は、構文解析器209を実行する別個のコアにビンを供給することができる。いくつかの代替的な実装では、CABACエンジン208は、中央処理装置(CPU)上に実装することができ、構文解析器209は、1つ以上のグラフィック処理装置(GPU)上に実装することができる。いくつかの他の代替的な実装では、CABACエンジン208は、プロセッサのCPUコア上に実装されてもよく、構文解析器209は、プロセッサのGPUコア上に実装されてもよい。
【0028】
構文解析器209は、CABACエンジン208からの復号されたビン列203を復号されたシンボル205に変換する構文解析演算204を実装し得る。構文解析器は、各シンボルを個別に復号するために並列に実行され得る符号化規格における各タイプの構文シンボルに対して専用のコードブロックを含み、または並列性を高めるために、構文解析器209は、スーパーブロック、マクロブロック、またはブロックのレベルでシンボルを同時に復号してもよい。構文解析器209をCABACエンジン208から分離することにより、構文解析演算の並列化が可能になる。そのような並列化は、1つのコアまたは複数のコア、あるいはコア内の計算ユニットで実行され得る、並列スレッドの実装を含み得る。
【0029】
CABACエンジン208に戻ると、
図3は、本開示の態様による有限状態機械の例示的な実装を示す。図示されているように、有限状態機械は、初期状態301を取得し、初期状態を現在の状態に前進させる。システムは、次の状態を決定するために、(前のビンが復号された場合に)最後に復号されたビン値を有する有限状態機械の現在の状態を使用する(306)。次の状態は、ルックアップテーブル302を用いて、次のビンのコンテキスト確率を決定するために使用される。いくつかの実装では、コンテキスト状態機械206は、2つの別個のルックアップ演算を実行することができ、コンテキスト状態機械は、自機の状態からコンテキストをルックアップするために使用する内部ルックアップテーブルを含むことができる。状態機械206の内部ルックアップテーブルから求められた現在のコンテキストを用いて、次に状態機械は、コンテキスト確率ルックアップテーブル207からビン確率をルックアップすることができる。任意の好適な方法を使用して、コンテキストからビン確率を求めることができる。例として、限定としてではなく、1つの方法は、所与のコンテキストに対してビン確率を一定と定義し、したがって各コンテキストが配列内で確率を有する方法である。代替的な例として、限定としてではなく、もう1つの方法は、コンテキストによってインデックスされる確率の配列を有する方法である。CABACエンジンは、同じコンテキストを有する前のビンの復号結果に従って配列のエントリを更新し得る。
【0030】
コンテキスト確率が求められると、そのコンテキスト確率をCABAC復号エンジン202に供給すること(307)が可能であり、CABAC復号エンジン202は、そのコンテキスト確率を使用して、次のビン値を決定し得る。CABAC復号エンジン202の入力は、入力CABACストリーム201、及びルックアップテーブル302を用いて決定されたコンテキスト確率である。コンテキスト確率を提供した後、状態機械は、次の状態が終了状態であるかどうかを判定するためのチェックを実行する(303)。次の状態が終了状態でない場合(いいえ)、状態機械は、次の状態を現在の状態に変更し(304)、ビン値306及び現在の状態304を取得し、ルックアップテーブル302を使用して次のコンテキスト確率を決定するなどによって、ループを継続する。
【0031】
次の状態が終了状態である場合(はい)、有限状態が終了プログラム状態305に入る。CABAC復号ループは、先に復号された全ての2進要素から、復号されたビン列を出力する。例えば、限定するものではないが、CABAC復号ループは、2つ以上の先行して復号された2進要素を有する復号された2進列を出力することができる。終了プログラム状態305は、ブロック、マクロブロックまたはスーパーブロックの終了を示す付加的なエントリを含むことができる。状態エントリの終了は、シンボルのタイプを示すいくつかの2進数を含むことができ、復号されたビン列を適切な構文解析器に向かわせる。いくつかの実装では、並列に動作する複数の構文解析器が存在し、状態エントリの終了を用いて、復号されたビン列を、対応する復号されたビン列にシンボルをマッチさせる適切な構文解析器に向かわせることができる。あるいは、構文解析器は、エントリの終了フラグを使用して、適切な構文解析演算を選択することができる。
【0032】
したがって、CABAC符号化媒体の改善された復号を行う方法は、復号ループを含むことができ、この復号ループは、コンテキスト確率を使用して、符号化された2進要素のシーケンスから、符号化された2進要素を復号して、復号された2進要素を生成することを含み得る。次のコンテキスト確率が、復号された2進要素からのシーケンスにおける次の符号化された2進要素について決定され、次の反復のために復号ループに提供される。次の符号化された2進要素に対する次のコンテキスト確率を決定することは、次のコンテキスト確率を決定するためのコンテキストを提供するように構成されている有限状態機械の状態を前進させることを含み得る。有限状態機械のための命令は、プロセッサの命令キャッシュに格納され得る。さらに、復号された2進要素及び有限状態機械の状態を用いてルックアップテーブル内の次のコンテキスト確率をルックアップすることにより、ルックアップテーブルが使用され得る。ルックアップテーブルは、プロセッサのデータキャッシュに格納されてもよい。いくつかの実装では、復号された2進列が、復号ループの終了状態で、先行して復号された2つ以上の2進要素のシーケンスから生成されてもよい。以前に復号された2つ以上の2進要素は、符号化された2進シーケンスから復号された全ての2進要素であり得ることを理解されたい。復号ループは、第1の処理スレッドで処理されてもよく、復号された2進列の構文を構文解析して、構文解析された構文から復号されたシンボルを生成することは、第2の処理スレッドで行われてもよい。他の実装では、復号ループは第1のプロセッサコアで処理されてもよく、復号された2進列の構文を構文解析して、構文解析された構文から復号されたシンボルを生成することは、第2のプロセッサコアで実行されてもよい。さらに他の実装では、復号ループはプロセッサで処理されてもよく、復号された2進列の構文を構文解析して、構文解析された構文から復号されたシンボルを生成することは、グラフィック処理装置で実行されてもよい。CABAC符号化媒体を復号するための改善された方法は、並列に動作する複数の構文解析器を含んでもよく、復号された2進列の構文を構文解析して、この構文解析された構文から復号されたシンボルを生成する。CABAC符号化媒体を復号するための改善された方法は、符号化された離散コサイン変換係数、動きベクトルまたはブロック予測モードのための2進要素を復号することをさらに含み得る。
【0033】
図4は、最終的なシンボル値決定で終わる二分決定木として示されている有限状態機械の実装を示す。この二分決定木中の各ノードは、状態機械の状態を表す。第1の状態401は、関連する確率を有し得る2つの2進選択肢を有する。第1の状態401のビン値がゼロの場合、状態機械は、シンボル値0の終了状態402に進む。第1の状態401のビン値が1の場合、状態機械は、第2の状態403に進み、第2のビン値を決定する。第1の状態と同様に、第2の状態も、関連するコンテキスト確率を伴う2つの選択肢を有する。第2の状態403の2進値が1であると決定された場合、状態機械は、シンボル値4を有する終了状態404に進む。値が0であると決定された場合、状態機械は第3の状態405に進み、第3のビン値を決定する。上記のように、コンテキスト確率を使用して状態値を決定することができ、値が1であれば、状態は終了状態に進み、シンボル値は3に決定される(406)。値が0であると決定された場合、状態は第4の状態407に進み、これまでのように2進値が決定される。ここでは、第4の状態は、終了状態であり、したがって、両方のビン値が、終了シンボル値を提供する。2進値が0の場合、シンボル値は1であると決定され(408)、2進値が1の場合、終了シンボル値は2である(409)。状態は、最終的な値に到達するように組み合わされ得るビン値を表す。例えば、3のシンボル値に対しては、状態ツリーを介して処理することによって、101の2進数が生成される。
【表1】
上記表1は、
図4に示されているような状態機械の例をルックアップテーブルとして示す。表1の第1の列は、状態機械の現在の状態を表す。状態は、シンボルを完全に復号する必要なく、コンテキストを追跡する。現在の状態の2進値が決定されると、テーブルを使用して、次の状態及び次の状態の確率が決定され得る。例えば、第1の2進値が1である場合、状態機械は、次の状態の列に示される第2のビンに進み、次のビンが0である確率が最終列に提供される。この確率は、テーブルで使用される値ビンを決定するためにCABAC復号エンジンに提供される。したがって状態機械は、コンテキスト確率決定を支援するために、表1に示したものと同様の表を含むことができる。
【0034】
復号されたシンボルのコンテキスト依存性の性質は、シンボル間でコンテキスト確率が異なることを意味するので、復号対象の各シンボルに対して、表1などの別のコンテキストテーブル、及び別の状態機械が必要となり得る。いくつかの実装では、特定の記号についてテーブル内の一部のデータのみを置き換えることによって、テーブルの数を減らすことができる。例えば、限定するものではないが、いくつかのシンボルコンテキスト確率がほぼ同一の場合があり、それらのテーブルが数エントリしか異なっていない場合がある。ほぼ同一のテーブルを処理するために、新たなテーブル全体をデータキャッシュにロードするのではなく、既にロードされたテーブルにおいて、シンボルが異なるエントリのみを変更することができる。したがって、データバッファをフラッシュし、新たなテーブルを書き込むのに必要なサイクルを減らすことができる。
【0035】
図6は、本開示の態様によるビデオコード化を実装するために使用され得るコンピュータシステム600のブロック図を例示する。システム600は、一般に、メインバス605を介して通信するメインプロセッサ603、メモリ604、及びグラフィック処理装置(GPU)626を含み得る。プロセッサ603は、1つ以上のプロセッサコア、例えば、シングルコア、デュアルコア、クアッドコア、プロセッサ-コプロセッサ、セルプロセッサ、アーキテクチャなどを含み得る。各コアは、相互に並行して命令を処理することができる1つ以上の処理スレッドを含み得る。プロセッサは、システム用のGPUとして機能し得る1つ以上の統合グラフィックコアを含むことができる。
【0036】
本開示のいくつかの実装では、プロセッサ603は、CABACエンジン623及び構文解析器624を実行することができる。CABACエンジン623は、プロセッサ603の命令キャッシュに収まるほどデータサイズが十分に小さい状態機械命令を含み得る。CABACエンジン623はまた、CABAC復号されたバイナリ構文要素と状態機械からの状態とを、次の符号化された2進構文要素のためのコンテキスト確率に変換するために、1つ以上のコンテキストテーブルを含み得る。例えば、限定するものではないが、コンテキスト確率を決定するための2つのルックアップ演算である、第1の演算は、機械状態の状態からコンテキストを決定し、第2のルックアップは、コンテキストからビンコンテキスト確率を決定する。コンテキストテーブルは、例えばレベル1データキャッシュ、レベル2キャッシュまたはレベル3キャッシュなどのデータキャッシュに収まるほどデータサイズが十分に小さくてよい。構文解析器624は、CABACエンジン623とは別個のスレッド上で動作することができる。例えば、CABACエンジンは、第1のスレッドで実行することができ、構文解析器624は、第2のスレッドで並列に実行することができる。あるいは、構文解析器624は、プロセッサ603の別個のコアまたはGPUコアで実行可能である。構文解析器は、復号された2進列の構文または文法を構文解析し、復号された構文要素またはシンボルを生成し得る。いくつかの実装では、構文解析器627は、メモリからグラフィック処理装置(GPU)626にロード可能である。構文解析器627は、プロセッサ603上で実行されているCABACエンジン623から、復号された2進列を受け取り得る。
【0037】
メモリ604は、集積回路の形態、例えば、RAM、DRAM、及びROMなどであってもよい。メモリはまた、プロセッサ603内のプロセッサコアの全てによってアクセス可能なメインメモリであってもよい。いくつかの実施形態では、プロセッサ603は、1つ以上のプロセッサコアまたは1つ以上のコプロセッサと関連付けられたローカルメモリを有してもよい。デコーダプログラム622は、プロセッサ603上で実行することができるプロセッサ可読命令の形式でメモリ604に記憶されてもよい。デコーダプログラム622は、例えば上述したように、CABAC符号化された信号データを復号されたピクチャに復号するように構成されてもよい。デコーダプログラム622は、CABACエンジン623、及び構文解析器624の演算を調整し得る。CABACエンジン623は、CABAC符号化された2進要素を取得し、復号された2進要素を生成することができる。CABACエンジン623は、2つ以上の復号された2進要素、すなわち、構文解析器によって1つのシンボルまたは複数のシンボルに構文解析される復号された2進列を作成する。CABACエンジン623は、メモリ604からプロセッサ603の命令キャッシュにロードされる状態機械を含み得る。状態機械は、状態機械の適切なシンボルが復号されるまでメモリ604に格納される多くの状態機械610のうちの1つであってもよく、その時点で、適切な状態機械の命令がプロセッサ603の命令キャッシュにロードされる。CABACエンジンはまた、メモリ604からプロセッサ603のデータキャッシュにロードされるコンテキストテーブルを含み得る。コンテキストテーブルは、メモリ604に格納されている多数のコンテキストテーブル621のうちの1つであってよい。各シンボルは、上記で述べたように、状態機械からの状態と現在復号されている2進構文要素とを使用して、そのシンボルに関連する符号化された2進構文要素を復号するために、関連するコンテキストテーブルを有し得る。メモリ604は、復号された2進列を復号されたシンボルに変換する構文解析器プログラム609を含むこともできる。構文解析器プログラム609は、プロセッサ603によって実行されてもよく、構文解析器609の少なくとも一部が、メモリ604からプロセッサ603の命令キャッシュ及び/またはデータキャッシュにロードされてもよい。GPU627上で実行される構文解析器を有する実装では、構文解析器627は、プロセッサ603上で実行されている、またはメモリ604内のバッファ608に格納されているCABACエンジン623から、復号された2進構文要素を受け取ることができる。バッファ608は、符号化されたデータ、または復号プロセス中に生成または受信された他のデータをメモリ604に記憶することができる。
【0038】
システム600はまた、入出力(I/O)要素607、電源(P/S)611、クロック(CLK)612、及びキャッシュ613などの周知のサポート機能606を含んでもよい。システム600は、任意選択で、プログラム617及び/またはデータ618を記憶するためのディスクドライブ、CD-ROMドライブ、テープドライブ、または同種のものなどの大容量記憶装置615を含み得る。デコーダプログラム622及び構文解析器609は、プログラム617として大容量記憶装置615に記憶され得る。コンテキストテーブル621、状態機械610、及びバッファリングされたデータもまた、データ618として大容量記憶装置615に記憶され得る。デバイス600はまた、任意選択で、システム600とユーザとの間のインタラクションを促進するためのユーザインターフェース616及びユーザ入力デバイス602を含み得る。ユーザインターフェース616は、テキスト、数字、グラフィックシンボル、または画像を表示する陰極線管(CRT)またはフラットパネルスクリーンの形態を取り得る。ユーザ入力デバイス602は、キーボード、マウス、ジョイスティック、ライトペン、またはグラフィカルユーザインターフェース(GUI)と共に使用することができる他のデバイスを含んでもよい。システム600はまた、デバイスがインターネットなどのネットワーク620を通じて他のデバイスと通信することを可能にするためのネットワークインターフェース614を含んでもよい。システム600は、ネットワーク620に接続された他のデバイスから、ネットワークインターフェース614を介して、符号化されたストリーミングデータの1つ以上のフレーム(例えば、1つ以上の符号化されたビデオフレーム)を受信することができる。これらのコンポーネントは、ハードウェア、ソフトウェア、もしくはファームウェア、またはこれらのうちの2つ以上の何らかの組み合わせで実装され得る。
【0039】
上記は、本発明の好適な実施形態の完全な説明であるが、種々の代案、修正、及び等価物を使用することが可能である。したがって、本発明の範囲は、上記説明を参照して判定されるべきでなく、代わりに、均等物のそれらの全範囲に従った、添付の特許請求の範囲を参照して判定されるべきである。好ましいか否かに関わらず、本明細書で説明された任意の特徴が、好ましいか否かに関わらず、本明細書で説明された任意の他の特徴と組み合わされてよい。以下の特許請求の範囲では、不定冠詞「A」または「An」は、明確に述べられる場合を除き、冠詞に続く項目のうちの1つ以上の量を指す。添付の特許請求の範囲は、手段プラス機能の限定が、フレーズ「~する手段(means for)」を使用して所与の請求項に明確に記載されない限り、そのような限定を含むとして解釈されるべきではない。
【国際調査報告】