本願は、本明細書に十分に説明されたかのごとくその全内容が引用により本明細書に組み込まれる、2012年6月28日に出願されたオーストラリア特許出願第2012203828号の出願日の35U.S.C.§119の下の恩典を主張する。
添付図面のいずれか1つ以上において、同一の参照番号を有するステップおよび/または特徴について言及される場合、それらのステップおよび/または特徴は、逆の意図が示されない限り、この説明の目的のために、同一の機能(単数または複数)または動作(単数または複数)を有する。
各々の変換ユニット(TU)で、残差係数データがビットストリームに符号化出来る。各々の「残差係数」は、変換ユニット内の画像特性を周波数(DCT)ドメインで表現し、変換ユニット内の一意の場所を占有する、数字である。変換ユニットは、空間ドメインと周波数ドメインとの間で変換される残差データサンプルのブロックである。周波数ドメインにおいて、変換ユニット(TU)は、残差データサンプルを残差係数データとして符号化する。変換ユニットの辺の寸法は、2のべき乗サイズであり、「ルーマ」チャネルの4サンプル〜32サンプル、「クロマ」チャネルの2〜16サンプルの範囲にわたる。変換ユニット(TU)ツリーの葉ノードは、残差係数データが必要でない場合は、変換ユニット(TU)を含むかまたはまったく何も含まないかのいずれかである。
以下において詳細に説明されるように、変換ユニットの空間表現が残差データサンプルの二次元アレイであるので、変更された離散コサイン変換(DCT)のような変換の結果として生じる周波数ドメイン表現もまた、残差係数の二次元アレイである。変換ユニット(TU)内の典型的なサンプルデータのスペクトル特性は、周波数ドメイン表現が空間表現よりもコンパクトであるようになっている。さらに、変換ユニット(TU)において典型的な、より低い周波数スペクトルの情報が支配的なので、低周波数の残差係数が表現される変換ユニット(TU)の左上に向かうほどより大きな値の残差係数のクラスタ化という結果を生じる。
修正離散コサイン変換(DCT)または修正離散サイン変換(DST)が、残差変換を実現するために使用できる。残差変換の実施は、各々の要求された変換ユニット(TU)サイズをサポートするように構成される。ビデオエンコーダにおいて、残差変換からの残差係数が、スケーリングされ、量子化される。スケーリングおよび量子化は、残差係数の大きさを低減し、画像品質の低減を犠牲にしてビットストリームにコーディングされたデータのサイズを低減する。
残差変換を実行した後、量子化処理が実行される。量子化処理の目的は、残差係数の大きさの精度を低減することによってより高い圧縮比を達成することである。大きさの精度の低減は、不可逆処理であるので、視覚品質に影響を及ぼす。精度低減レベルは、量子化パラメータ(QP)によって制御される。パラメータの値が高ければ高いほど、視覚品質がより大きく影響を受ける。
量子化の後、いくつかのビデオコーディング処理では、サンプル適応オフセット(SAO)フィルタリングが、エンコーダによって収集されたフレームデータおよびSAOオフセットデータに適用される。SAOデータは、元の画像と量子化後に再構成された画像との間の画素値分布の差分についての情報を含む。SAOデータは次に、二値化され、符号化され、デコーダに転送される。デコーダは、再構成されたフレームの視覚品質および客観品質を改善するためにSAOデータを使用しても良い。
開発中の高効率ビデオコーディング(HEVC)標準は、ビデオデータの高効率圧縮を達成しようとしている。推定および統計データ分析を使用することにより、ビデオデータの高効率圧縮を達成できる。開発中の高効率ビデオコーディング(HEVC)標準では、高ビットレートでビデオデータを符号化または復号することを目指している。開発中の高効率ビデオコーディング(HEVC)標準において用いられるコンテキスト適応二値算術コーディング(CABAC)スキームは、「バイパスコーディング」と呼ばれる、動作の「等確率」モードをサポートする。このモードでは、ビンがコンテキストモデルからのコンテキストに関連づけられないので、コンテキストモデル更新ステップは存在しない。このようなモードでは、各々のビンがバイパスコーディングされれば、複数の隣り合うビンをビットストリームから並行して読み取ることができ、その結果スループットが増大する。例えば、ハードウェア実装が、隣り合うバイパスコーディングデータのグループを並行して書き込み/読み取って、ビットストリームの符号化/復号のスループットを増大させることができる。
二値化の一態様はとして、個々のフラグに対応するシンタックス要素のコーディングに使用するためのコンテキストの選択がある。1つのフラグは、2つ以上のコンテキストを使用しても良い。どのコンテキストがフラグの特定のインスタンスのために使用されるべきかは、他のすでに利用可能な情報に依存して決定され、「コンテキストモデリング」として知られている。コンテキストモデリングは、フラグの現在のインスタンスの統計的特性を最も精確に表現するコンテキストが選択される処理である。例えば、フラグの値が同一フラグの隣接インスタンスの値によって頻繁に影響されるケースでは、コンテキストがフラグの隣接インスタンスの値に基づいて選択することが可能である。フレーム情報の大部分がルーマチャネルに含まれていることに起因して、コンテキストモデリングは、クロマチャネルと対比してルーマチャネルの別個のコンテキストを頻繁に使用する。しかしながら、2つのクロマチャネルの統計的特性が相対的に類似しているので、コンテキストは通常は、クロマチャネル間で共有される。
開発中の高効率ビデオコーディング(HEVC)標準では、ビデオデータの高効率圧縮を達成しようとしている。推定および統計データ分析を使用することにより、ビデオデータの高効率圧縮を達成することができる。開発中の高効率ビデオコーディング(HEVC)標準では、高ビットレートでビデオデータを符号化または復号することを目的としている。開発中の高効率ビデオコーディング(HEVC)標準において用いられるコンテキスト適応二値算術コーディング(CABAC)スキームは、「バイパスコーディング」と呼ばれる、動作の「等確率」モードをサポートする。このモードでは、ビンがコンテキストモデルからのコンテキストに関連づけられないので、コンテキストモデル更新ステップは存在しない。このようなモードでは、各々のビンがバイパスコーディングされれば、複数の隣り合うビンがビットストリームから並行して読み取ることができ、スループットが増大する。例えば、ハードウェア実装が、隣り合うバイパスコーディングデータのグループを並行して書き込み/読み取って、ビットストリームの符号化/復号のスループットを増大させることができる。
図1は、本開示に係るビデオエンコーダ100の機能モジュールを示す模式的なブロック図である。図2は、本開示に係る対応するビデオデコーダ200の機能モジュールを示す模式的なブロック図である。ビデオエンコーダ100およびビデオデコーダ200は、図3Aおよび図3Bに示すごとく、汎用コンピュータシステム300を使用して、実現しても良いし、コンピュータシステム300内の専用ハードウェアによって、コンピュータシステム300内で実行可能なソフトウェアによって、またはあるいはコンピュータシステム300内の専用ハードウェアおよび実行可能なソフトウェアの組み合わせによって、さまざまな機能モジュールが実現できる。
図3Aから分かる様に、コンピュータシステム300は、コンピュータモジュール301と、キーボード302、マウスポインタデバイス303、スキャナ326、カメラ327、およびマイクロフォン380といった入力デバイスと、プリンタ315、ディスプレイデバイス314、およびラウドスピーカー317を含む出力デバイスとを含む。コンピュータモジュール301は、外部変調器復調器(モデム)トランシーバデバイス316を、接続321を介した通信ネットワーク320への通信および通信ネットワーク320からの通信のために使用することができる。通信ネットワーク320は、インターネットのような広域ネットワーク(WAN)、セルラー電気通信ネットワーク、またはプライベートWANで良い。接続321が電話回線である場合、モデム316は、従来の「ダイアルアップ」モデムで良い。あるいは、接続321が高容量(例えば、ケーブル)接続である場合、モデム316は、ブロードバンドモデムを用いれば良い。ワイヤレスモデムもまた、通信ネットワーク320へのワイヤレス接続のために使用できる。
コンピュータモジュール301は通常は、少なくとも1つのプロセッサユニット305とメモリユニット306とを含む。例えば、メモリユニット306は、半導体ランダムアクセスメモリ(RAM)および半導体読み取り専用メモリ(ROM)を持つ。コンピュータモジュール301はまた、ビデオディスプレイ314、ラウドスピーカー317、およびマイクロフォン380に結合するオーディオビデオインターフェース307と、キーボード302、マウス303、スキャナ326、カメラ327、およびオプションでジョイスティックまたは他のヒューマンインターフェースデバイス(図示せず)に結合するI/Oインターフェース313と、外部モデム316およびプリンタ315のインターフェース308とを含む、多数の入力/出力(I/O)インターフェースを含む。いくつかの実装では、モデム316は、コンピュータモジュール301内、例えば、インターフェース308内に、組み込まれても良い。コンピュータモジュール301はまた、ローカルエリアネットワーク(LAN)として知られているローカルエリア通信ネットワーク322への接続323を介したコンピュータシステム300の結合を可能にするローカルネットワークインターフェース311を有する。図3Aに示されているように、ローカル通信ネットワーク322はまた、接続324を介してワイドネットワーク320に結合することが出来、通常は、いわゆる「ファイアウォール」デバイスまたは同様の機能のデバイスを含む。ローカルネットワークインターフェース311は、EtherNet(登録商標)回路カード、Bluetooth(登録商標)ワイヤレス機構、またはIEEE802.11ワイヤレス機構を備えていても良いが、多数の他のタイプのインターフェースがインターフェース311用に実施されても。
I/Oインターフェース308および313は、シリアル接続およびパラレル接続のいずれかまたは両方を提供することが出来、前者は通常は、ユニバーサルシリアルバス(USB)標準に従って実装され、対応するUSBコネクタ(図示せず)を有する。記憶デバイス309を備え、通常はハードディスクドライブ(HDD)310を含む。フロッピー(登録商標)ディスクドライブおよび磁気テープドライブ(図示せず)のような他の記憶デバイスを使用できる。光学ディスクドライブ312が通常は、データの不揮発性ソースとして動作するように備えられる。例えば、光ディスク(例えば、CD−ROM、DVD、ブルーレイディスク(登録商標))、USB−RAM、ポータブル外部ハードドライブ、およびフロッピー(登録商標)ディスクといった、ポータブルメモリデバイスが、システム300への適切なデータソースとして使用。通常は、HDD310、光学ドライブ312、ネットワーク320および322、またはカメラ327のいずれかが、符号化されるビデオデータのソースであり、または、ディスプレイ314とともに、記憶または再生される復号されたビデオデータの宛先である。
コンピュータモジュール301のコンポーネント305〜313は通常は、相互接続されたバス304を介して、および当業者に知られているコンピュータシステム300の従来の動作モードを結果として生じる手法で、通信する。例えば、プロセッサ305は、接続318を使用してシステムバス304に結合される。同様に、メモリ306および光学ディスクドライブ312は、接続319によってシステムバス304に結合される。前述した機構が実現できるコンピュータは、例えばIBMのPCおよび互換品、SuNのスパークステーション、AppleのMac(登録商標)、または同様のコンピュータシステムを含む。
適宜または所望される場合、エンコーダ100およびデコーダ200ならびに以下に説明される方法は、コンピュータシステム300を使用して実現することが出来、コンピュータシステム300では、エンコーダ100、デコーダ200、および以下に説明される処理が、コンピュータシステム300内で実行可能な1つ以上のソフトウェアアプリケーションプログラム333として実現できる。特に、エンコーダ100、デコーダ200、および説明される方法のステップは、コンピュータシステム300内で実行されるソフトウェア333における命令331(図3Bを参照)によって達成できる。ソフトウェア命令331は、1つ以上の特定のタスクを各々が実行する1つ以上のコードモジュールとして形成できる。ソフトウェアはまた、2つの別個の部分に分割され、そのうち、第1の部分および対応するコードモジュールは、以下に説明する方法を実行し、第2の部分および対応するコードモジュールは、第1の部分とユーザとの間のユーザインターフェースを管理しても良い。
ソフトウェアは、例えば、以下において説明される記憶デバイスを含むコンピュータ可読媒体に記憶できる。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム300へとロードされ、コンピュータシステム300により実行される。そのようなソフトウェアを有するコンピュータ可読媒体またはコンピュータ可読媒体上に記録されたコンピュータプログラムは、コンピュータプログラム製品である。コンピュータシステム300におけるコンピュータプログラム製品の使用により、好ましくは、エンコーダ100、デコーダ200、および説明される方法を実現するための有利な装置を実現する。
ソフトウェア333は通常は、HDD310またはメモリ306に記憶される。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム300へとロードされ、コンピュータシステム300により実行される。このようにして、例えば、ソフトウェア333は、光学ディスクドライブ312によって読み取られる光学的に読み取り可能なディスク記憶媒体(例えば、CD−ROM)325に記憶されても良い。
いくつかの例では、アプリケーションプログラム333は、1つ以上のCD−ROM325上に符号化され、ユーザに供給され、対応するドライブ312を介して読み取られ、また、あるいは、ネットワーク320または322からユーザによって読み取られても良い。なおもさらに、ソフトウェアはまた、他のコンピュータ可読媒体からコンピュータシステム300へとロードされることもできる。コンピュータ可読記憶媒体は、記録された命令および/またはデータを実行および/または処理のためにコンピュータシステム300に提供する任意の非一時的な有形記憶媒体のことを言う。そのような記憶媒体は、例えば、そのようなデバイスがコンピュータモジュール301の内部または外部にあろうとなかろうと、フロッピー(登録商標)ディスク、磁気テープ、CD−ROM、DVD、ブルーレイディスク、ハードディスクドライブ、ROMまたは集積回路、USBメモリ、光磁気ディスク、または、PCMCIAカード等といったコンピュータ読み取り可能なカードを含む。コンピュータモジュール301へのソフトウェア、アプリケーションプログラム、命令、および/または、ビデオデータまたは符号化されたビデオデータの提供関与し得る、一時的なまたは無形のコンピュータ可読伝送媒体は、例えば、別のコンピュータまたはネットワーク化されたデバイスへの無線または赤外線伝送チャネルならびにネットワーク接続、および、電子メール送信およびウェブサイトに記録された情報、等を含むインターネットまたはイントラネットを含む。
上述されたアプリケーションプログラム333の第2の部分および対応するコードモジュールを実行することにより、ディスプレイ314上に描画または表現される1つ以上のグラフィカルユーザインターフェース(GUI)を実現することができる。通常はキーボード302およびマウス303の操作により、コンピュータシステム300およびアプリケーションのユーザは、GUI(単数または複数)に関連づけられたアプリケーションへのコマンドおよび/または入力の制御を提供する機能的に適応可能な手法で、インターフェースを操作することができる。ラウドスピーカー317を介して出力されるスピーチプロンプトおよびマイクロフォン380を介して入力されるユーザボイスコマンドを利用するオーディオインターフェースのような、他の形態の機能的に適応可能なユーザインターフェースもまた実現することができる。
図3Bは、プロセッサ305および「メモリ」334の詳細な模式的なブロック図である。メモリ334は、図3Aにおけるコンピュータモジュール301によってアクセス可能な(HDD309および半導体メモリ306を含む)すべてのメモリモジュールの論理的な集約を表現する。
コンピュータモジュール301に最初に電源が投入されると、パワーオンセルフテスト(POST)プログラム350が実行される。POSTプログラム350は通常は、図3Aの半導体メモリ306のROM349に記憶される。ソフトウェアを記憶するROM349のようなハードウェアデバイスはファームウェアと呼ばれることがある。POSTプログラム350は、適切な機能を保証するためにコンピュータモジュール301内のハードウェアを検査し、通常は、正常な動作のために、プロセッサ305と、メモリ334(309、306)と、通常はこれもまたROM349に記憶される基本入出力システムソフトウェア(BIOS)モジュール351とをチェックする。POSTプログラム350が成功裏に実行されると、BIOS351は、図3Aのハードディスクドライブ310を起動する。ハードディスクドライブ310が起動すると、ハードディスクドライブ310に常駐しているブートストラップローダープログラム352がプロセッサ305を介して実行される。これにより、オペレーティングシステム353をRAMメモリ306へとロードし、その上でオペレーティングシステム353が動作を開始する。オペレーティングシステム353は、プロセッサ管理、メモリ管理、デバイス管理、ストレージ管理、ソフトウェアアプリケーションインターフェース、および一般的なユーザインターフェースを含む、さまざまなハイレベルな機能を遂行するためにプロセッサ305によって実行可能なシステムレベルアプリケーションである。
オペレーティングシステム353は、コンピュータモジュール301上で実行される各々の処理またはアプリケーションが別の処理に割り当てられたメモリと衝突せずに実行されるのに十分なメモリを有することを保証するように、メモリ334(309、306)を管理する。さらに、図3Aのシステム300において利用可能な異なるタイプのメモリは、各々の処理が効率的に実行できるように適切に使用されなくてはならない。したがって、集約されたメモリ334は、(特に言及しない限り)メモリの特定のセグメントがどのように割り当てられるかを示すというよりもむしろ、コンピュータシステム300によってアクセス可能なメモリの一般的な図およびその使用方法を提供するように意図される。
図3Bに示されるように、プロセッサ305は、制御ユニット339、算術論理演算ユニット(ALU)340、およびキャッシュメモリと時に呼ばれるローカルまたは内部メモリ348を含む、多数の機能モジュールを含む。キャッシュメモリ348は通常は、レジスタ部における多数の記憶レジスタ344〜346を含む。1つ以上の内部バス341がこれらの機能モジュールを機能的に相互接続する。プロセッサ305はまた通常は、接続318を使用してシステムバス304を介し外部デバイスと通信するための1つ以上のインターフェース342を有する。メモリ334は、接続319を使用してバス304に結合される。
アプリケーションプログラム333は、条件付き分岐およびループ命令を含む命令のシーケンス331を含む。プログラム333はまた、プログラム333の実行において使用されるデータ332を含んでも良い。命令331およびデータ332はそれぞれ、記憶場所328、329、330および335、336、337に記憶される。命令331および記憶場所328〜330の相対的なサイズに依存して、特定の命令は、記憶場所330に示される命令によって表現されているように、単一の記憶場所に記憶されても良い。あるいは、ある命令は、記憶場所328および329に示されている命令セグメントによって表現されているように別個の記憶場所にその各々が記憶される多数の部分へとセグメント化しても良い。
一般的に、プロセッサ305は、その中で実行される命令のセットを付与される。プロセッサ305は、その後の入力を待ち、その入力に対しプロセッサ305は、命令の別のセットを実行することによって反応する。各々の入力は、入力デバイス302、303のうちの1つ以上によって生成されたデータ、ネットワーク320、302のうちの1つにわたって外部ソースから受信されたデータ、記憶デバイス306、309のうちの1つから検索されたデータ、または、記憶媒体325から検索され、対応するリーダー312に挿入されたデータを含む、多数のソースの1つ以上から提供され、そのすべては、図3Aに描かれている。命令のセットの実行は、いくつかのケースにおいてデータの出力という結果を生じ得る。実行はまた、メモリ334へのデータまたは変数の記憶を含んでも良い。
エンコーダ100、デコーダ200、および説明されている方法は、メモリ334における対応する記憶場所355、356、357に記憶される、入力変数354を使用する。エンコーダ100、デコーダ200、および説明されている方法は、メモリ334における対応する記憶場所362、363、364に記憶される、出力変数361を生成する。中間変数358は、記憶場所359、360、366、および367に記憶されても良い。
図3Bのプロセッサ305を参照すると、レジスタ344、345、346、算術論理演算ユニット(ALU)340、および制御ユニット339は共に、プログラム333を構成する命令のセットにおけるすべての命令の「フェッチ、復号、および実行」サイクルを実行するために必要とされるマイクロオペレーションのシーケンスを実行するように機能する。各々のフェッチ、復号、および実行サイクルは、
(a)記憶場所328、329、330から命令331をフェッチするかまたは読み取る、フェッチ動作と、
(b)制御ユニット339がどの命令がフェッチされたかを決定する、復号動作と、
(c)制御ユニット339および/またはALU340が命令を実行する、実行動作と
を備える。
その後、次の命令のさらなるフェッチ、復号、および実行サイクルが実行されても良い。同様に、制御ユニット339が記憶場所332に値を記憶するかまたは書き込む、記憶サイクルが実行されても良い。
後述する処理における各々のステップまたはサブ処理は、プログラム333の1つ以上のセグメントに関連づけられ、通常は、プログラム333の言及されたセグメントの命令のセットにおけるすべての命令のフェッチ、復号、および実行サイクルを実行するように共に機能するプロセッサ305におけるレジスタ部344、345、347、ALU340、および制御ユニット339によって実行される。
エンコーダ100、デコーダ200、および説明されている方法は、あるいは、説明されている方法の機能または下位機能を実行する1つ以上の集積回路のような専用ハードウェアにおいて実現されてもよい。そのような専用ハードウェアは、グラフィックプロセッサ、デジタルシグナルプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または1つ以上のマイクロプロセッサおよび関連づけられたメモリを含んでいても良い。
上述のように、ビデオエンコーダ100は、ハードディスクドライブ310に常駐し、その実行中、プロセッサ305によって制御されている、ソフトウェアアプリケーションプログラム333の1つ以上のソフトウェアコードモジュールとして実現しても良い。特に、ビデオエンコーダ100は、ソフトウェアアプリケーションプログラム333の1つ以上のソフトウェアコードモジュールとして各々が実現できるモジュール102〜112、114、115、および151を備える。
図1のビデオエンコーダ100は、高効率ビデオコーディング(HEVC)ビデオ復号パイプラインの例であるが、モジュール102〜112、114、115、および151によって実行される処理ステージは、VC−1またはH.264/MPEG−4 AVCといった他のビデオコーデックと共通である。ビデオエンコーダ100は、輝度およびクロミナンスサンプルを含む一連のフレームとして、符号化されていないフレームデータ101を受信する。ビデオエンコーダ100は、フレームデータ101の各々のフレームを、例えば、コーディングユニット(CU)ツリーとして表現されるコーディングユニット(CU)の階層的なセットへと分割する。
ビデオエンコーダ100は、予測ユニット(PU)120として知られている予測データサンプルのアレイを、マルチプレクサモジュール110から出力することによって動作する。差分モジュール115が、予測ユニット(PU)120とフレームデータ101から受信されたデータサンプルの対応するアレイとの間の差分を出力し、この差分は、残差データサンプル122として知られている。
差分モジュール115からの残差データサンプル122は、変換モジュール102によって受信され、変換モジュール102は、差分を空間表現から周波数ドメイン表現に変換して、変換ツリーにおける各々の変換ユニット(TU)の変換係数124を作成する。開発中の高効率ビデオコーディング(HEVC)標準では、周波数ドメイン表現への変換は、従来の離散コサイン変換(DCT)がシフトと加算を使用して実現されるように修正された、修正DCTを使用して実現される。変換係数124が次に、スケーリングおよび量子化モジュール103に入力され、スケーリングおよび量子化されて、残差係数126が生成される。スケーリングおよび量子化処理は、精度の損失という結果を生じる。
残差係数126は、スケーリングおよび量子化モジュール103によって実行されたスケーリングを逆にして残差係数126のスケーリングし直されたバージョンであるスケーリングし直された変換係数128を生成する、逆スケーリングモジュール105に入力として受け取られる。残差係数126はまた、符号化ビットストリーム113に残差係数を符号化するエントロピーエンコーダモジュール104に入力として受け取られる。スケーリングおよび量子化モジュール103の結果として生じた精度の損失に起因して、スケーリングし直された変換係数128は、元の変換係数124と同一ではない。逆スケーリングモジュール105からのスケーリングし直された変換係数128は続いて、逆変換モジュール106に出力される。逆変換モジュール106は、周波数ドメインから空間ドメインへの逆変換を実行して、デコーダで生成される空間ドメイン表現と同一の、スケーリングし直された変換係数128の空間ドメイン表現130を生成する。
動き推定モジュール107が、フレームデータ101を、メモリ306内に構成されたフレームバッファモジュール112に記憶された以前のフレームデータと比較することによって、動きベクトル132を生成する。動きベクトル132は続いて、動きベクトル132から導出された空間オフセットを考慮に入れて、フレームバッファモジュール112に記憶されたサンプルをフィルタリングすることにより、インター予測参照サンプル134を生成する、動き補償モジュール108に入力される。図1には示されていないが、動きベクトル132はまた、符号化ビットストリーム113にコーディングするためにエントロピーエンコーダモジュール104にシンタックス要素として渡される。イントラフレーム予測モジュール109が、マルチプレクサモジュール110の出力120と逆変換モジュール106からの出力130とを合計する合計モジュール114から得られたサンプル138を使用して、イントラ予測参照サンプル136を生成する。
予測ユニット(PU)は、イントラ予測またはインター予測方法を使用してコーディングできる。イントラ予測を使用すべきかまたはインター予測を使用すべきかについての決定は、結果として生じる符号化ビットストリーム113の所望のビットレートと、イントラ予測またはインター予測方法のいずれかによって導入される画像品質歪みの量との間の、レート歪みトレードオフに応じて行われる。イントラ予測が使用される場合、1つのイントラ予測モードが、可能なモードのセットから、またレート歪みトレードオフに応じて、選択される。1つのイントラ予測モードが、各々の予測ユニット用に選択される。
マルチプレクサモジュール110は、図示されていないが当該技術においてよく知られている制御論理によって決定された現在の予測モード142に依存して、イントラフレーム予測モジュール109からのイントラ予測参照サンプル136または動き補償ブロック108からのインター予測参照サンプル134のいずれかを選択する。予測モード142はまた、エントロピーエンコーダ104に提供され、そのようなものとして、後述するように変換ユニットのスキャン順序を決定またはそうでなければ確立するために使用される。インターフレーム予測が対角線スキャン順序のみを使用するのに対し、イントラフレーム予測は、対角線スキャン、水平スキャン、または垂直スキャン順序を使用し得る。
合計モジュール114は、デブロッキングフィルタモジュール111に入力される合計138を生成する。デブロッキングフィルタモジュール111は、ブロック境界に沿ったフィルタリングを実行して、デブロッキングされたサンプル153を生成し、それは、入力フレームデータ101と共にサンプル適応オフセット(SAO)フィルタモジュール151に入力される。SAOフィルタモジュール151は、ブロック内部でフィルタリングを実行して、SAOフィルタリングサンプル140とSAOオフセットデータ152とを生成する。フィルタリングサンプル140は、メモリ306内に構成されたフレームバッファモジュール112に書き込まれる。SAOオフセットデータ152は、エントロピーエンコーダモジュール104に渡され、エントロピーエンコーダモジュール104において、データ152は、以下において説明されるように、ビットストリーム113にエントロピー符号化される。フレームバッファモジュール112は、将来参照するために過去の複数のフレームからのデータを保持するのに十分な容量を有するバッファである。
ビデオエンコーダ100において、1つの変換ユニット(TU)内の残差データサンプル122は、入力フレームデータ101のデータサンプルと入力フレームデータ101のデータサンプルの予測120との間の差分を求めることにより決定される。差分は、変換ユニット(TU)の残差係数の空間表現を提供する。変換ユニット(TU)の残差係数は、二次元の有意度マップに変換される。
変換ユニット(TU)における残差係数の有意度マップは続いて、スキャン順序として知られている特定の順序でスキャンされて、有意係数フラグのリストと呼ばれるフラグ値の一次元リストを形成する。スキャン順序は、イントラ予測モジュール109から予測モード142と共に受信されたもののようなスキャンパターンによって記述または指定することができる。スキャンパターンは、水平、垂直、対角線、またはジグザグで良い。
上述のように、ビデオエンコーダ100はまた、エントロピー符号化方法を実現するエントロピーエンコーダモジュール104を備える。エントロピーエンコーダモジュール104は、スケーリングおよび量子化モジュール103から受信された入来残差係数データ(または残差係数)126とSAOモジュール151から受信されたSAOデータ152とからシンタックス要素を生成する。エントロピーエンコーダモジュール104は、符号化ビットストリーム113を出力し、以下においてより詳細に説明する。開発中の高効率ビデオコーディング(HEVC)標準のために、符号化ビットストリーム113は、ネットワーク抽象層(NAL)ユニットに描写される。フレームの各々のスライスは、1つのNALユニットに含まれる。
エントロピーエンコーダモジュール104において実現されるエントロピー符号化方法のいくつかの代替例が存在する。開発中の高効率ビデオコーディング(HEVC)標準は、コンテキスト適応二値算術コーディング(CABAC)、H.264/MPEG−4 AVCに見られるコンテキスト適応二値算術コーディング(CABAC)の変形をサポートする。代替のエントロピーコーディングスキームは、確率区間区分エントロピー(PIPE)コーダとして知られている。
複数のビデオコーディング方法をサポートするビデオエンコーダ100のために、サポートされたエントロピーコーディング方法の1つが、エンコーダ100の構成に応じて選択される。さらに、各々のフレームからのコーディングユニットを符号化する場合に、エントロピーエンコーダモジュール104は、各々のフレームが1フレームあたり1つ以上のスライスを有し、各々のスライスがフレームの一部の画像データを含むように、符号化ビットストリーム113を書き込む。1フレームあたり1つのスライスを生成することは、各々のスライス境界を描写することに関連づけられたオーバーヘッドを低減する。しかしながら、フレームを複数のスライスに分割することもまた可能である。
図2のビデオデコーダ200は、ハードディスクドライブ310に常駐し、その実行中、プロセッサ305によって制御されている、ソフトウェアアプリケーションプログラム333の1つ以上のソフトウェアコードモジュールとして実現できる。特に、ビデオデコーダ200は、ソフトウェアアプリケーションプログラム333の1つ以上のソフトウェアコードモジュールとして各々が実現できるモジュール202〜208、および210を備える。ビデオデコーダ200は高効率ビデオコーディング(HEVC)ビデオ復号パイプラインに関連して説明されるが、モジュール202〜208および209によって実行される処理ステージは、H.264/MPEG−4 AVC、MPEG−2、およびVC−1といった、エントロピーコーディングを用いる他のビデオコーデックと共通である。
符号化ビットストリーム113のような符号化ビットストリームが、ビデオデコーダ200によって受信される。符号化ビットストリーム113は、メモリ306、ハードディスクドライブ310、CD−ROM、ブルーレイディスク(登録商標)、または他のコンピュータ可読記憶媒体から読み取られる。あるいは、符号化ビットストリーム113は、通信ネットワーク320に接続されたサーバまたは無線周波数受信機のような外部ソースから受信される。符号化ビットストリーム113は、復号されるフレームデータを表現する符号化シンタックス要素を含む。
符号化ビットストリーム113が、符号化ビットストリーム113からシンタックス要素220およびSAOオフセットデータ242を抽出し、シンタックス要素220の値をビデオデコーダ200における他のブロックに渡す、エントロピーデコーダモジュール202に入力される。エントロピーエンコーダモジュール104に関連して説明したような、エントロピーデコーダモジュール202において実現される複数のエントロピー復号方法が存在し得る。残差係数データを表現するシンタックス要素データ220は、逆スケーリングおよび変換モジュール203に渡され、動ベクトル情報を表現するシンタックス要素データ222は、動き補償モジュール204に渡される。逆スケーリングおよび変換モジュール203は、残差係数データに逆スケーリングを実行して、再構成された変換係数を作成する。モジュール203は続いて、逆変換モジュール106に関連して説明した逆変換のように、逆変換を実行して、再構成された変換係数を周波数ドメイン表現から空間ドメイン表現に変換し、残差サンプル224を生成する。
動き補償モジュール204は、メモリ306内に構成されたフレームバッファブロック208からの以前のフレームデータ226と組み合わせられたエントロピーデコーダモジュール202からの動きベクトルデータ222を用いて、出力される復号フレームデータの予測である予測ユニット(PU)のインター予測参照サンプル228を生成する。シンタックス要素が、現在のコーディングユニットがイントラ予測を使用してコーディングされたものであることを示す場合、イントラフレーム予測モジュール205が、予測ユニット(PU)と空間的に隣接するサンプルを用いて予測ユニット(PU)のイントラ予測参照サンプル230を生成する。空間的に隣接するサンプルは、合計モジュール210から出力された合計232から得られる。マルチプレクサモジュール206は、符号化ビットストリーム113におけるシンタックス要素によって示された現在の予測モードに依存して、予測ユニット(PU)のためにイントラ予測参照サンプルまたはインター予測参照サンプルを選択する。マルチプレクサモジュール206から出力されたサンプル234のアレイが、合計モジュール210により逆スケーリングおよび変換モジュール203からの残差サンプル224に加算されて合計232が生成され、合計232は続いて、デブロッキングフィルタモジュール207およびイントラフレーム予測モジュール205の各々に入力される。エンコーダ100とは対照的に、イントラフレーム予測モジュール205は、エントロピーデコーダ202から予測モード236を受信する。マルチプレクサ206は、エントロピーデコーダ202からイントラフレーム予測/インターフレーム予測選択信号を受信する。デブロッキングフィルタモジュール207は、データブロック境界に沿った可視のアーチファクトを滑らかにするためにデータブロック境界に沿ったフィルタリングを実行する。デブロッキングフィルタモジュール207の出力はエントロピーデコーダ202からのSAOオフセットデータ242と共に、SAOフィルタモジュール241に入力される。SAOフィルタモジュール241は、画像の視覚品質および客観品質の両方を改善するためにSAOオフセットデータ242を使用してブロック内部でフィルタリングを実行する。SAOフィルタモジュール241の出力244は、メモリ306内に構成されたフレームバッファモジュール208に書き込まれる。フレームバッファモジュール208は、将来参照するために復号された複数のフレームを保持するのに十分な記憶容量を提供する。復号されたフレーム209はまた、フレームバッファモジュール208から出力される。
ストリーム113における輝度チャネルおよび2つのクロミナンスチャネルのSAOデータ242は、以下のシンタックス要素、すなわち、sao_merge_left_flag、sao_merge_up_flag、sao_type_idx、sao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNを含む。
sao_merge_left_flagは二進値であり、現在のLCUがフレームにおいて最も左の位置にない場合にのみストリーム113中に存在し、そうでなければsao_merge_left_flagは0であると想定される。sao_merge_left_flagは、LCU毎および色チャネル毎にコーディングされ、左の隣接LCUからのsao_type_idx、sao_baNd_positioN、およびsao_offset要素の導出を示す。シンタックス的に、sao_merge_left_flagは、以下のごとく二値フラグである。
sao_merge_up_flagは二進値であり、sao_merge_left_flagの値が0であり、現在のLCUが、フレームにおける最も上の位置にない場合にのみストリーム113中に存在し、そうでなければ、sao_merge_up_flagは0であると想定される。
サンプル適応オフセットタイプインデックスデータを表現するシンタックス要素sao_type_idxは、1〜5までを含む範囲の整数値であり、sao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0である場合にのみ、ストリーム113中に存在し、そうでなければsao_type_idxの値は0であると想定される。sao_type_idxは、現在のコーディングツリーブロックのエッジオフセットタイプを示し、CU毎およびチャネル毎にコーディングされ、以下を記述する。
従来のビデオコーディングアプローチは、2つのコンテキストモデルと最悪のケースでも6つのCABACビンとを有する単項CABACコーディング、およびsao_type_idxのための以下のコーディングを使用する。
上記単項コーディングにおいて、第1のビンは、第1のコンテキストモデルを使用して符号化され、すべての他のビンは、第2のコンテキストモデルを使用して符号化される。
シンタックス要素sao_baNd_positioNは、整数値であり、sao_type_idxの値が5と等しい場合にのみ、ストリーム中に存在する。
シンタックス要素sao_offset_absは、4つの整数値のシーケンスであり、sao_type_idxの値が0と等しくない場合にのみ、ストリーム中に存在する。
シンタックス要素sao_offset_sigNは、4つの整数値のシーケンスであり、sao_type_idxの値が5と等しい場合にのみ、ストリーム113中に存在する。
本発明者達は、SAOシンタックス要素の二値化に伴う問題が存在すると判断した。sao_type_idxの二値化は次善であり、値が未知の範囲の大きさを持つ可能性がある場合には、単項コーディングが有用であるのに対し、大きさの最大可能範囲が既知である場合には、切り捨て単項コーディングがより効率的である。本発明者達はまた、0の値が0.9を超える確率を有し、他の値はコーディング効率に著しい影響を及ぼさないと判断した。さらに、本発明者達による実験は、sao_merge_left_flagのコンテキストの割り当てもまた次善であることを示した。コンテキストを低減すると、一般的にチャネル間の相関に起因して、コーディング利得をもたらすことが可能である。
本開示の一態様によると、本発明者達は、以下のようなsao_type_idx要素のための代替の二値化アプローチを提案する。
このコーディングによると、同一のLCUに属するsao_type_idxシンタックス要素はマージされるので、CABACおよびバイパスのビンはインターリーブされない。また、このコーディングにおいて、最初のビットは、算術的に符号化された部分である単一のCABACビンを表現し、次のビットは、対応するバイパスビンのバイパス符号化されたデータを表現する。sao_merge_left_flagのために、単一のコンテキストがすべてのチャネル間で共有されるので、コンテキストモデルの数は3から1に低減される。本発明者達による予備実験は、これが、ラングムアクセステスト条件では−0.1%の、全イントラテスト条件では0.0%のコーディング利得を提供することを示した。この改訂された二値化によると、最悪のケースにおいて、CABACビンの数は3から1に低減され、1つの冗長コンテキストが削除されるので、改善されたコーディング効率を提供する。本発明者達による予備実験はコーディング損失を示さない。このコーディングアプローチの変形もまた説明する。
シンタックス要素sao_type_idxの二値化スキーム500が、図5Aを参照して以下に説明する。二値化スキーム500は、5つの値を符号化するために(8つのオプションを付与する)3ビットを使用する場合、利用可能なオプションのうち3つは使用されないということを認識した、表4において提供されたものの1つの変形である。そのようなものとして、表4のアプローチは、最大6670個(=8*7*6*5*4)の変形を有し得るが、スキーム500もそのうちの1つである。
二値化スキーム500は、算術的に符号化された部分501およびオプションのバイパス符号化された部分502を含む。部分501は、1つの二進要素503で形成される。二進要素503は、二値化された値の1つに値「0」を、すべての他の値に「1」を割り当てられる。普通、値「0」は、最高推定確率を有する要素に割り当てられる。部分502は、要素503の値が「1」である場合にのみ存在する。部分502は、3つのバイパス符号化された二進要素504、505、506で形成される。二進要素504、505、506は、「1」と等しい要素503を有する二値化された各々の値のための一意の3ビットの二進値を割り当てられる。二進要素503、504、505、506は、隣り合うように次から次へと、または他のシンタックス要素によりインターリーブされて、のいずれかで、ストリーム113に記憶される。sao_type_idxの例示的な二値化510は、二値化スキーム500を実現する。分かる様に、例510は、算術的に符号化された部分501に対応する単一ビットの算術的に符号化された第1の部分511と、バイパス符号化された部分502に対応する固定長(3ビット)のバイパス符号化された第2の部分512を含む。ここで、第2の部分512のサイズまたは長さは、第1の部分511によって決定される。第1の部分511における1の値の存在は、バイパス符号化された部分512が存在することを示す。バイパス符号化された部分512の長さは、予め決められ、エンコーダおよびデコーダの両方に知られたものであり得る。あるいは、第1の部分511の値は、第2の部分512の長さを示せるが、第1の部分511は、バイパス符号化されたセクション部分512の符号化された異なる長さに対し少なくとも2ビットの長さであることが必要である。算術的に符号化された値10が、3ビットのバイパス符号化された部分を示す一方で、算術的に符号化された値11は、4ビットのバイパス符号化された部分を示す、といったものが例になるであろう。
最大コーディングユニット(LCU)のシンタックス構造400が、図4Aを参照して説明される。
シンタックス構造400は、SAO情報を表現するブロック401と、LCU構造、残差、予測、および他の情報を表現するブロック402とで形成される。ブロック401は、3つのブロック403、404、および405を含む。ブロック403は、輝度チャネルのSAO情報を含み、ブロック404および405は、2つのクロミナンスチャネルのSAO情報を含む。ブロック403、404、および405は、同一のシンタックス構造を有するので、ブロック403のために図4Aに示されたシンタックス要素406〜411は、ブロック404および405にも存在しうる。ブロック406は、sao_merge_left_flagシンタックス要素を含む。ブロック407はsao_merge_up_flagシンタックス要素を含む。ブロック408は、順序412で記憶された算術的に符号化された部分413およびバイパス符号化された部分414とともに二値化スキーム500を使用して二値化されたsao_type_idxシンタックス要素を含む。ブロック409は、sao_baNd_positioNシンタックス要素を含む。ブロック410は、sao_offset_absシンタックス要素を含む。ブロック411は、sao_offset_sigNシンタックス要素を含む。二値化スキーム500(およびいくつかの他のもの)が二進要素のインターリーブを可能にするので、順序412は(ビンの)特定の順序に関連する。
最大コーディングユニット(LCU)の代替のシンタックス構造420を、図4Bを参照して説明する。
シンタックス構造420は、SAO情報を表現するブロック421と、LCU構造、残差、予測、および他の情報を表現するブロック422と含む。ブロック421は、ブロック423、424、および425を含む。ブロック423は、3つのチャネルのsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を含む。ブロック424は、二値化スキーム500を使用して符号化された3つのチャネルのsao_type_idxシンタックス要素を含む。ブロック425は、3つのチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNのシンタックス要素を含む。
ブロック424は、ブロック426および427で形成される。ブロック426は、輝度チャネルおよび2つのクロミナンスチャネルに対応したsao_type_idxシンタックス要素の3つの算術的に符号化された部分428、429、および430を含む。ブロック427は、輝度チャネルおよび2つのクロミナンスチャネルに対応したsao_type_idxシンタックス要素の3つのバイパス符号化された部分431、432、および433を含む。部分431、432、および433は、対応する部分428、429、および430がそれらの存在を示す場合にのみ存在する。ブロック427の合計ビット長は、算術的に符号化された部分428、429、および430の値に基づいて決定される。
シンタックス要素sao_type_idxの代替の二値化スキーム520を、図5Bを参照して以下に説明する。
二値化スキーム520は、隣り合うように次から次へとストリーム113に記憶された3つの算術的に符号化された二進要素521、522、523を備える。sao_type_idxの例示的な二値化530は、二値化スキーム520を実現する。
最大コーディングユニット(LCU)の代替のシンタックス構造440を、図4Cを参照して説明する。
シンタックス構造440は、SAO情報を表現するブロック441と、LCU構造、残差、予測、および他の情報を表現するブロック442とを有する。ブロック441は、3つのブロック443、444、および445を含む。ブロック443は、輝度チャネルのSAO情報を含み、ブロック444および445は、2つのクロミナンスチャネルのSAO情報を含む。ブロック443、444、および445は、同一のシンタックス構造を有するので、ブロック443のために図4Cに示されたシンタックス要素446〜451は、ブロック444および445にも存在できる。ブロック446は、sao_merge_left_flagシンタックス要素を含む。ブロック447は、sao_merge_up_flagシンタックス要素を含む。ブロック448は、算術的に符号化されたすべてのビンとともに二値化スキーム520を使用して二値化されたsao_type_idxシンタックス要素を含む。ブロック449は、sao_baNd_positioNシンタックス要素を含む。ブロック450は、sao_offset_absシンタックス要素を含む。ブロック451は、sao_offset_sigNシンタックス要素を含む。
シンタックス要素sao_type_idxの代替の二値化スキーム540を、図5Cを参照して以下に説明する。
二値化スキーム540は、算術的に符号化された部分541およびバイパス符号化された部分542で形成される。部分541は、1つの二進要素543を含む。部分542は、2つのバイパス符号化された二進要素544、545を有する。二進要素543、544、545は、各々のsao_type_idxの値を一意に識別する。二進要素543、544、545は、隣り合うように次から次へと、または他のシンタックス要素によりインターリーブされて、のいずれかで、ストリーム113に記憶される。sao_type_idxの例示的な二値化550は、二値化スキーム540を実現する。
最大コーディングユニット(LCU)の代替のシンタックス構造460を、図4Dを参照して説明する。
シンタックス構造460は、SAO情報を表現するブロック461と、LCU構造、残差、予測、および他の情報を表現するブロック462とを有する。ブロック461は、3つのブロック463、464、および465を含む。ブロック463は、輝度チャネルのSAO情報を含み、ブロック464および465は、2つのクロミナンスチャネルのSAO情報を含む。ブロック463、464、および465は、同一のシンタックス構造を有するので、ブロック463のために図4Dに示されたシンタックス要素466〜471は、ブロック464および465にも存在できる。ブロック466は、sao_merge_left_flagシンタックス要素を含む。ブロック467は、sao_merge_up_flagシンタックス要素を含む。ブロック468は、上述されたものと同様の順序472で記憶された算術的に符号化された部分473およびバイパス符号化された部分474とともに二値化スキーム540を使用して二値化されたsao_type_idxシンタックス要素を含む。ブロック469は、sao_baNd_positioNシンタックス要素を含む。ブロック470は、sao_offset_absシンタックス要素を含む。ブロック471は、sao_offset_sigNシンタックス要素を含む。
最大コーディングユニット(LCU)の代替のシンタックス構造480を、図4Eを参照して説明する。
シンタックス構造480は、SAO情報を表現するブロック481と、LCU構造、残差、予測、および他の情報を表現するブロック482とで形成される。ブロック481は、ブロック483、484、および485を含む。ブロック483は、3つのチャネルのsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を含む。ブロック484は、二値化スキーム540を使用して符号化された3つのチャネルのsao_type_idxシンタックス要素を含む。ブロック485は、3つのチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNのシンタックス要素を含む。
ブロック484は、ブロック486および487を含む。ブロック486は、輝度チャネルおよび2つのクロミナンスチャネルの、それぞれ、sao_type_idxシンタックス要素の3つの算術的に符号化された部分488、489、および490を含む。ブロック487は、輝度チャネルおよび2つのクロミナンスチャネルのそれに対応したsao_type_idxシンタックス要素の3つのバイパス符号化された部分491、492、および493を含む。
シンタックス要素sao_type_idxの二値化スキーム560を、図5Dを参照して以下に説明する、が切り捨てられた単項の実現の例を表現する。
二値化スキーム560において、二値化されたシーケンス562の最大長は、sao_type_idxシンタックス要素の可能な明確な値の数から1を引いたものとして決定される。sao_type_idxシンタックス要素の6つの可能な値のケースでは、二値化されたシーケンス562の最大長は5である。二値化スキーム560において、すべてのsao_type_idxの値は、オプションの算術的に符号化された終結する「0」の値564が後続する、算術的に符号化された「1」の値563の一意のシーケンス561を割り当てられる。シーケンス561は、0から二値化されたシーケンス562の最大長までの範囲における長さを持つことができる。終結する「0」の値564は、所与の二値化された値の以前に符号化された「1」の値563の数が、二値化されたシーケンス562の最大長未満である場合にのみ、符号化される。sao_type_idxの例示的な二値化570が、二値化スキーム560を実現する。
最大コーディングユニット(LCU)の代替のシンタックス構造4100を、図4Fを参照して説明する。
シンタックス構造4100は、SAO情報を表現するブロック4101と、LCU構造、残差、予測、および他の情報を表現するブロック4102とで形成される。ブロック4101は、3つのブロック4103、4104、および4105で形成される。ブロック4103は、輝度チャネルのSAO情報を含み、ブロック4104および4105は、2つのクロミナンスチャネルのSAO情報を含む。ブロック4103、4104、4105は、同一のシンタックス構造を有するので、ブロック4103のために図4Fに示されたシンタックス要素4106〜4111は、ブロック4104および4105にも存在できる。ブロック4106は、sao_merge_left_flagシンタックス要素を含む。ブロック4107は、sao_merge_up_flagシンタックス要素を含む。ブロック4108は、二値化スキーム560を使用して二値化されたsao_type_idxシンタックス要素562を含む。ブロック4109は、sao_baNd_positioNシンタックス要素を含む。ブロック4110は、sao_offset_absシンタックス要素を含む。ブロック4111は、sao_offset_sigNシンタックス要素を含む。
シンタックス要素sao_type_idxの二値化スキーム580が、図5Eを参照して以下に説明する。
二値化スキーム580において、二値化されたシーケンス582の最大長は、sao_type_idxシンタックス要素の可能な明確な値の数から1を引いたものとして決定される。sao_type_idxシンタックス要素の6つの可能な値のケースでは、二値化されたシーケンス582の最大長は5である。
二値化スキーム580において、すべてのsao_type_idxの値は、オプションの終結する「0」の値584が後続する「1」の値583の一意のシーケンス581を割り当てられる。二値化スキーム580においては、二値化された値のすべてのビンは、算術的に符号化された最初のT個のビンを除いてバイパス符号化され、ここで、Tは、0から二値化されたシーケンス582の最大長から1を引いたものまでの範囲における値である。sao_type_idxシンタックス要素の6つの可能な値の場合については、パラメータTは0〜4までの範囲における任意の整数値をとることができる。二進要素581および二進要素584のシーケンスは、隣り合うように次から次へと、または他のシンタックス要素によりインターリーブされて、のいずれかで、ストリーム113に記憶できる。
sao_type_idxの例示的な二値化590は、パラメータT=2による二値化スキーム580を実現する。二値化590は、算術的に符号化された第1の部分591と可変長のバイパス符号化された第2の部分592とを有する。図5Eから分かるように、第1の部分591は、複数のビットを有し、(値2〜5のために)設定される場合、第2の部分592がビデオデータのストリーム中に存在することを示す、二番目のビットを(値1〜5のために)含むことができる。
最大コーディングユニット(LCU)の代替のシンタックス構造4200を、図4Gを参照して説明する。
シンタックス構造4200は、SAO情報を表現するブロック4201と、LCU構造、残差、予測、および他の情報を表現するブロック4202とで形成される。ブロック4201は、3つのブロック4203、4204、および4205を含む。ブロック4203は、輝度チャネルのSAO情報を含み、ブロック4204および4205は、2つのクロミナンスチャネルのSAO情報を含む。ブロック4203、4204、および4205は、同一のシンタックス構造を有するので、ブロック4203の図4Gに示されたシンタックス要素4206〜4211は、ブロック4204および4205にも存在することができる。ブロック4206は、sao_merge_left_flagシンタックス要素を含む。ブロック4207は、sao_merge_up_flagシンタックス要素を含む。ブロック4208は、上述したように、順序4212で隣り合うように記憶されたすべてのビンとともに二値化スキーム580を使用して二値化されたsao_type_idxシンタックス要素を含む。ブロック4209は、sao_baNd_positioNシンタックス要素を含む。ブロック4210は、sao_offset_absシンタックス要素を含む。ブロック4211は、sao_offset_sigNシンタックス要素を含む。
最大コーディングユニット(LCU)の代替のシンタックス構造4400を、図4Hを参照して説明する。
シンタックス構造4400は、SAO情報を表現するブロック4401と、LCU構造、残差、予測、および他の情報を表現するブロック4402とで形成される。ブロック4401は、ブロック4403、4404、および4405で形成される。ブロック4403は、3つのチャネルのsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を含む。ブロック4404は、二値化スキーム580を使用して符号化された3つのチャネルのsao_type_idxシンタックス要素を含む。ブロック4405は、3つのチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNのシンタックス要素を含む。
ブロック4404は、ブロック4406および4407で形成される。ブロック4406は、輝度チャネルおよび2つのクロミナンスチャネルに対応するsao_type_idxシンタックス要素の3つの算術的に符号化された部分4408、4409、および4410を含む。ブロック4406の最大ビット長は、二値化スキーム580のパラメータTの値によって決定される。ブロック427は、輝度チャネルおよび2つのクロミナンスチャネルに対応したsao_type_idxシンタックス要素の3つのバイパス符号化された部分4411、4412、および4413を含む。部分4411、4412、および4413は、対応する部分4408、4409、および4410がそれらの存在を示す場合にのみ存在する。ブロック4406の最大ビット長は、二値化スキーム580のパラメータTの値および算術的に符号化された部分4408、4409、および4410の値によって決定される。
最大コーディングユニット(LCU)の代替のシンタックス構造4600を、図4Iを参照して説明する。
シンタックス構造4600は、SAO情報を表現するブロック4601と、LCU構造、残差、予測、および他の情報を表現するブロック4602とで形成される。ブロック4601は、2つのブロック4603および4604を含む。ブロック4603は、3つのチャネルのsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を含み、ブロック4604は、sao_type_idx、sao_baNd_positioN、sao_offset_abs、sao_offset_sigNのような3つのチャネルの他のSAOシンタックス要素を含む。ブロック4603は、ブロック4606および4607を含む。ブロック4606は、3つのチャネルのsao_merge_left_flagシンタックス要素を含み、ブロック4607は、3つのチャネルのsao_merge_up_flagシンタックス要素を含む。ブロック4606は、LCUがフレームにおける最も左の位置にない場合にのみストリーム113中に存在する。ブロック4607は、LCUがフレームにおける最も上の位置にない場合にのみ存在する。ブロック4606および4607は、ブロック4603において異なる順序を持つことができる。
代替の実現においては、sao_merge_left_flagシンタックス要素が単一のブロックにグループ化できる一方で、sao_merge_up_flagは、各々のチャネルのために別個にコーディングできる。
シンタックス構造400、420、440、460、480、4100、4200、および4400におけるsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素は、算術的に符号化される。確率モデリングが3つのチャネルの各々のために実行される。モデリングが各々のチャネルのために独立して実行されるか、または2つのクロミナンスチャネルが合同コンテキストモデルを使用するか、または3つのチャネルが合同コンテキストモデルを使用するか、のいずれかである。
ストリーム113にLCUデータを符号化する方法600を、図6Aを参照して説明する。最初のステップ601において、SAO情報が符号化され、別のステップ602において、LCU構造、残差、予測、および他の情報が符号化される。
SAO情報を符号化する例示的な方法610を、図6Bを参照して説明する。方法610は、上述されたブロック401、441、461、4101、4201を符号化するための方法600のステップ601を実現するために使用される。方法610はステップ611で始まり、ステップ611で、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が符号化される。ステップ612では、輝度チャネルのsao_type_idxの値を符号化する。ステップ613では、輝度チャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を符号化する。ステップ614では、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を符号化する。ステップ615では、第1のクロミナンスチャネルのsao_type_idxの値を符号化する。ステップ616では、第1のクロミナンスチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を符号化する。ステップ617では、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を符号化する。ステップ618では、第2のクロミナンスチャネルのsao_type_idxの値を符号化する。ステップ619では、第2のクロミナンスチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を符号化する。ステップ611〜619の順序は、任意の特定の実現によって所望されるように変えることができる。
単一のチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を符号化する方法630を、図6Cを参照して説明する。方法630は、上述されたシンタックス構造400、440、460、4100、4200、4600におけるsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を符号化する方法610のステップ611、614、617を実現するために使用出来る。方法630は、LCUがフレームにおける最も左の位置にあるかどうかをチェックするステップ631によって始まる。この条件が真である場合には制御がステップ634に渡され、そうでなければ制御はステップ632に渡される。ステップ632は、ストリーム113にsao_merge_left_flagを符号化する。ステップ633は、sao_merge_left_flagの値が1と等しいかどうかをテストする。この条件が真である場合、制御は方法630を離れる。そうでなければ、制御はステップ634に渡される。ステップ634は、ストリーム113にsao_merge_up_flagを符号化する。このステップの後、制御は方法630を離れる。
単一のチャネルのsao_type_idxシンタックス要素を符号化する方法640を、図6Dを参照して次に説明する。方法640は、上述されたシンタックス構造400、440、460、4100、4200、4600におけるsao_type_idxシンタックス要素を符号化する方法610のステップ612、615、618を実現するために使用できる。方法640は、ステップ641によって始まる。ステップ641は、所与のチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御はステップ642に渡され、そうでなければ制御は方法640を離れる。ステップ642は、sao_type_idxの値を二値化する。次に、ステップ643は、ストリーム113にsao_type_idxの値の二進表現を符号化する。ステップ643の後、制御は方法640を離れる。
SAO情報を符号化する方法650を、図6Eを参照して説明する。方法650は、上述されたブロック421、481、4401、4601を符号化するための方法600のステップ601を実現するために使用できる。方法650は、これがフレームにおける最も左のLCUであるどうかをチェックするステップ651によって始まる。これが真である場合には制御がステップ653に渡され、そうでなければ制御はステップ652に渡される。ステップ652は、3つのチャネルのsao_merge_left_flagの値を符号化する。ステップ653は、これがフレームにおける最も上のLCUかどうかをチェックする。これが真である場合には制御がステップ655に渡され、そうでなければ制御はステップ654に渡される。ステップ654は、3つのチャネルのsao_merge_up_flagの値を符号化する。ステップ655は、3つのチャネルのsao_type_idxの値の算術的に符号化された部分を符号化する。ステップ656は、3つのチャネルのsao_type_idxの値のバイパス符号化された部分を符号化する。次に、ステップ657は、3つのチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を符号化する。
3つのチャネルのsao_merge_left_flagの値を符号化する方法660を、図6Fを参照して説明する。方法660は、上述されたシンタックス構造420、480、4400、4600におけるsao_merge_left_flagシンタックス要素を符号化するための方法650のステップ652を実現するために使用できる。方法660は、輝度チャネルのsao_merge_left_flagの値を符号化するステップ661によって始まる。次に、ステップ662は、第1のクロミナンスチャネルのsao_merge_left_flagの値を符号化する。次に、ステップ663は、第2のクロミナンスチャネルのsao_merge_left_flagの値を符号化する。この後、制御は方法660を離れる。
3つのチャネルのsao_merge_up_flagの値を符号化する方法670を、図6Gを参照して説明する。方法670は、上述されたシンタックス構造420、480、4400、4600におけるsao_merge_up_flagシンタックス要素を符号化するための方法650のステップ654を実現するために使用できる。方法670は、ステップ671によって始まる。ステップ671は、輝度チャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御がステップ672に渡され、そうでなければ制御はステップ673に渡される。ステップ672は、輝度チャネルのsao_merge_up_flagを符号化する。ステップ673は、第1のクロミナンスチャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御がステップ674に渡され、そうでなければ制御はステップ675に渡される。ステップ674は、第1のクロミナンスチャネルのsao_merge_up_flagを符号化する。ステップ675は、第2のクロミナンスチャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御は方法670を離れ、そうでなければ制御はステップ676に渡される。ステップ676は、第2のクロミナンスチャネルのsao_merge_up_flagを符号化する。この後、制御は方法670を離れる。
3つのチャネルのsao_type_idxの値の算術的にコーディングされた部分を符号化する方法680を、図6Hを参照して説明する。方法680は、上述されたシンタックス構造420、480、4400、4600におけるsao_type_idxシンタックス要素の算術的にコーディングされた部分を符号化するための方法650のステップ655を実現するために使用できる。方法680は、ステップ681によって始まる。ステップ681は、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ682に渡され、そうでなければ制御はステップ684に渡される。ステップ682は、輝度チャネルのsao_type_idxの値を二値化する。次に、ステップ683は、部分428、488、4408といった二値化された値の算術的にコーディングされた部分をストリーム113に符号化する。ステップ684は、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ685に渡され、そうでなければ制御はステップ687に渡される。ステップ685は、第1のクロミナンスチャネルのsao_type_idxの値を二値化する。次に、ステップ686は、部分429、489、4409といった二値化された値の算術的にコーディングされた部分をストリーム113に符号化する。ステップ687は、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御はステップ688に渡され、そうでなければ制御は方法680を離れる。ステップ688は、第2のクロミナンスチャネルのsao_type_idxの値を二値化する。次に、ステップ689は、部分430、490、4410といった二値化された値の算術的にコーディングされた部分をストリーム113に符号化する。
3つのチャネルのsao_type_idxの値のバイパスコーディングされた部分を符号化する方法690を、図6Iを参照して説明する。方法690は、上述されたシンタックス構造420、480、4400、4600におけるsao_type_idxシンタックス要素のバイパスコーディングされた部分を符号化するための方法650のステップ656を実現するために使用できる。方法690は、方法680のステップ682、685、688で生成された二値化されたsao_type_idxの値の入力を受理する。方法690は、ステップ691によって始まる。ステップ691は、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ692に渡され、そうでなければ制御はステップ693に渡される。ステップ692は、部分431、491、4411といった、ステップ682で二値化された値のバイパスコーディングされた部分を、ストリーム113に符号化する。ステップ693は、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ694に渡され、そうでなければ制御はステップ695に渡される。ステップ694は、部分432、492、4412といった、ステップ685によって二値化された値のバイパスコーディングされた部分を、ストリーム113に符号化する。ステップ695は、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御はステップ696に渡され、そうでなければ制御は方法690を離れる。ステップ696は、部分433、493、4413といった、ステップ688において二値化された値のバイパスコーディングされた部分を、ストリーム113に符号化する。
二値化スキーム500を使用してsao_type_idxの値を二値化する方法6100を、図6J(1)を参照して説明する。方法6100は、上述されたシンタックス構造420におけるsao_type_idxの値を二値化するための方法680のステップ682、685、688を実現するために使用できる。方法6100はまた、上述されたシンタックス構造400におけるsao_type_idxを二値化するための方法600のステップ642を実現するために使用できる。方法6100は、ステップ6101によって始まる。ステップ6101は、所与のsao_type_idxの値が最もありそうなsao_type_idxの値であると推定されるかどうかをチェックする。これが真である場合には制御がステップ6102に渡され、そうでなければ制御はステップ6103に渡される。ステップ6102は、部分501の二進要素503に二進値「0」を割り当てる。ステップ6102の後、制御は方法6100を離れる。ステップ6103は、算術的にコーディングされた部分501の二進要素503に二進値「1」を割り当てる。次に、ステップ6104は、バイパスコーディングされた部分502の二進要素504、505、506に一意の3ビットの二進コードを割り当てる。このステップの後、制御は方法6100を離れる。
二値化スキーム540を使用してsao_type_idxの値を二値化する方法6200を、図6J(2)を参照して説明する。方法6200は、上述されたシンタックス構造480におけるsao_type_idxの値を二値化するための方法680のステップ682、685、688を実現するために使用できる。方法6200はまた、上述されたシンタックス構造460におけるsao_type_idxの値を二値化するための方法640のステップ642を実現するために使用できる。方法6200は、ステップ6201によって始まる。ステップ6201は、所与のsao_type_idxの値に一意の3ビットの二進コードを割り当てる。次に、ステップ6202は、割り当てられた3ビットコードのうちの1ビットの値を、普通、最下位ビットのようなビット位置に基づいて、算術的にコーディングされた部分541の二進要素543に割り当てる。次に、ステップ6203は、割り当てられた二進値のうちの残りの2ビットを、バイパスコーディングされた部分542の二進要素544、545に割り当てる。このステップの後、制御は方法6200を離れる。
二値化スキーム580を使用してsao_type_idxの値を二値化する方法6300を、図6Kを参照して説明する。方法6300は、上述されたシンタックス構造4400におけるsao_type_idxの値を二値化するための方法680のステップ682、685、688を実現するために使用できる。方法6300はまた、上述されたシンタックス構造4200におけるsao_type_idxの値を二値化するための方法640のステップ642を実現するために使用できる。方法6300は、ステップ6301によって始まる。ステップ6301は、0から二値化されたシーケンス582の最大長LMAXまでの範囲における一意のコード長Lを、所与のsao_type_idxの値に割り当てる。普通、Lの値は、より短いLの値がより高い推定確率とともにsao_type_idxの値に割り当てられるように割り当てられる。パラメータTは二値化された値の算術的にコーディングされた部分の最大長を決定するために使用されている。次に、ステップ6302は、シーケンス581に加えられた二値の「1」の値の数ONESがL未満であるか、およびONESがT未満であるか、をチェックする。両方の条件が真である場合には制御がステップ6303に渡され、そうでなければ制御はステップ6304に渡される。ステップ6303は算術的にコーディングされた二値の「1」の値583をシーケンス581に加える。ステップ6303の後、制御はステップ6302に渡される。ステップ6304は、ONESがT未満であるか、ONESがLMAX未満であるか、をチェックする。これらの条件が真である場合、制御はステップ6309に渡され、そうでなければ、制御はステップ6305に渡される。ステップ6309は、算術的にコーディングされた二値の「0」の値を要素584に割り当てる。ステップ6309の後、制御は方法6300を離れる。ステップ6305は、ONESがL未満であるかどうかをチェックする。これが真である場合には制御がステップ6306に渡され、そうでなければ制御はステップ6307に渡される。ステップ6306は、バイパスコーディングされた二値の「1」の値583をシーケンス581に加える。ステップ6306の後、制御はステップ6305に渡される。ステップ6307は、ONESがLMAX未満であるかどうかをチェックする。これが真である場合には制御はステップ6308に渡され、そうでなければ制御は方法6300を離れる。ステップ6308は、バイパスコーディングされた二値の「0」の値を要素584に割り当てる。このステップの後、制御は方法6300を離れる。
二値化スキーム560を使用してsao_type_idxの値を二値化する方法6500を、図6L1を参照して説明する。方法6500は、上述されたシンタックス構造4100におけるsao_type_idxの値を二値化するための方法640のステップ642を実現するために使用できる。方法6500は、ステップ6501によって始まる。ステップ6501は、0から二値化されたシーケンス582の最大長LMAXまでの範囲における一意のコード長Lを、所与のsao_type_idxの値に割り当てる。普通、Lの値は、より短いLの値がより高い推定確率とともにsao_type_idxの値に割り当てられるように割り当てられる。次に、ステップ6502は、シーケンス581に加えられた二値の「1」の値の数ONESがL未満であるかをチェックする。この条件が真である場合には制御がステップ6503に渡され、そうでなければ制御はステップ6504に渡される。ステップ6503は算術的にコーディングされた二値の「1」の値583をシーケンス581に加える。ステップ6503の後、制御はステップ6502に渡されて戻る。ステップ6504は、ONESがLMAX未満であるかどうかをチェックする。この条件が真である場合には制御はステップ6505に渡され、そうでなければ制御は方法6500を離れる。ステップ6505は、算術的にコーディングされた二値の「0」の値を要素584に割り当てる。ステップ6505の後、制御は方法6300を離れる。
二値化スキーム520を使用してsao_type_idxの値を二値化する方法6600を、図6L2を参照して説明する。方法6600は、上述したシンタックス構造440におけるsao_type_idxの値を二値化するための方法640のステップ642を実現するために使用できる。方法6600は、ステップ6601によって始まる。ステップ6601で、一意の3ビットコードがsao_type_idxの値に割り当てられる。次に、ステップ6602は、割り当てられた3ビットコードを二進要素521、522、523に割り当てる。このステップの後、制御は方法6600を離れる。
ストリーム113からLCUデータを復号する方法700を、図7Aを参照して説明する。ステップ701において、SAO情報が復号される。ステップ702において、LCU構造、残差、予測、および他の情報が復号される。
SAO情報を復号する方法710を、図7Bを参照して説明する。
方法710は、上述されたブロック401、441、461、4101、4201を復号するための方法700のステップ701を実現するために使用できる。方法710はステップ711で始まり、ステップ711で、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が復号される。ステップ712は、輝度チャネルのsao_type_idxの値を復号する。ステップ713は、輝度チャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を復号する。ステップ714は、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を復号する。ステップ715は、第1のクロミナンスチャネルのsao_type_idxの値を復号する。ステップ716は、第1のクロミナンスチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を復号する。ステップ717は、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を復号する。ステップ718は、第2のクロミナンスチャネルのsao_type_idxの値を復号する。ステップ719は、第2のクロミナンスチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を復号する。ステップ711〜719の順序または実現は、特定の実現に依存して変更可能である。
単一のチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値を復号する方法730を、図7Cを参照して説明する。方法730は、上述されたシンタックス構造400、440、460、4100、4200、4600におけるsao_merge_left_flagおよびsao_merge_up_flagのシンタックス要素を復号する方法710のステップ711、714、717を実現するために使用できる。方法730は、LCUがフレームにおける最も左の位置にあるかどうかをチェックするステップ731によって始まる。この条件が真である場合には制御がステップ734に渡され、そうでなければ制御はステップ732に渡される。ステップ732は、ストリーム113からsao_merge_left_flagを復号する。ステップ733は、sao_merge_left_flagの値が1と等しいかどうかをテストする。この条件が真である場合、制御は方法730を離れる。そうでなければ、制御はステップ734に渡される。ステップ734は、ストリーム113からsao_merge_up_flagを復号する。このステップの後、制御は方法730を離れる。
単一のチャネルのsao_type_idxシンタックス要素を復号する方法740を、図7D参照して次に説明する。方法740は、上述されたシンタックス構造400、440、460、4100、4200、4600におけるsao_type_idxシンタックス要素を復号する方法710のステップ712、715、718を実現するために使用できる。方法740は、ステップ741によって始まる。ステップ741は、所与のチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックすることにより、sao_type_idxの復号が要求されるかどうかを決定するためにチェックする。これが真である場合には制御はステップ742に渡され、そうでなければ制御は方法740を離れる。ステップ742は、sao_type_idxの値を復号し、二値化解除する。ステップ743の後、制御は方法740を離れる。
SAO情報を復号する方法750を、図7Eを参照して説明する。方法750は、上述されたブロック421、481、4401、4601を復号するための方法700のステップ701を実現するために使用できる。方法750は、これがフレームにおける最も左のLCUであるどうかをチェックするステップ751によって始まる。これが真である場合には制御がステップ753に渡され、そうでなければ制御はステップ752に渡される。ステップ752は、3つのチャネルのsao_merge_left_flagの値を復号する。ステップ753は、これがフレームにおける最も上のLCUかどうかをチェックする。これが真である場合には制御がステップ755に渡され、そうでなければ制御はステップ754に渡される。ステップ754は、3つのチャネルのsao_merge_up_flagの値を復号する。ステップ755は、3つのチャネルのsao_type_idxの値の算術的に符号化された部分を復号する。ステップ756は、3つのチャネルのsao_type_idxの値のバイパス符号化された部分を復号する。次に、ステップ757は、3つのチャネルのsao_baNd_positioN、sao_offset_abs、およびsao_offset_sigNの値を復号する。
3つのチャネルのsao_merge_left_flagの値を復号する方法760を、図7Fを参照して説明する。方法760は、上述されたシンタックス構造420、480、4400、4600におけるsao_merge_left_flagシンタックス要素を復号するための方法750のステップ752を実現するために使用できる。方法760は、輝度チャネルのsao_merge_left_flagの値を復号するステップ761によって始まる。次に、ステップ762は、第1のクロミナンスチャネルのsao_merge_left_flagの値を復号する。次に、ステップ763は、第2のクロミナンスチャネルのsao_merge_left_flagの値を復号する。この後、制御は方法760を離れる。
3つのチャネルのsao_merge_up_flagの値を復号する方法770を、図7Gを参照して説明する。方法770は、上述されたシンタックス構造420、480、4400、4600におけるsao_merge_up_flagシンタックス要素を復号するための方法750のステップ754を実現するために使用できる。方法770は、ステップ771によって始まる。ステップ771は、輝度チャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御がステップ772に渡され、そうでなければ制御はステップ773に渡される。ステップ772は、輝度チャネルのsao_merge_up_flagの値を復号する。ステップ773は、第1のクロミナンスチャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御がステップ774に渡され、そうでなければ制御はステップ775に渡される。ステップ774は、第1のクロミナンスチャネルのsao_merge_up_flagの値を復号する。ステップ775は、第2のクロミナンスチャネルのsao_merge_left_flagの値が0と等しいかどうかをチェックする。これが真である場合には制御は方法770を離れ、そうでなければ制御はステップ776に渡される。ステップ776は、第2のクロミナンスチャネルのsao_merge_up_flagの値を復号する。この後、制御は方法770を離れる。
3つのチャネルのsao_type_idxの値の算術的にコーディングされた部分を復号する方法780を、図7Hを参照して説明する。方法780は、上述されたシンタックス構造420、480、4400、4600におけるsao_type_idxシンタックス要素の算術的にコーディングされた部分を復号するための方法750のステップ755を実現するために使用できる。方法780は、ステップ781によって始まる。ステップ781は、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ782に渡され、そうでなければ制御はステップ783に渡される。ステップ782は、輝度チャネルのストリーム113から、部分428、488、4408といったsao_type_idxの二値化された値の算術的にコーディングされた部分を復号する。ステップ783は、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ784に渡され、そうでなければ制御はステップ785に渡される。ステップ784は、第1のクロミナンスチャネルのストリーム113から、部分429、489、4409といったsao_type_idxの二値化された値の算術的にコーディングされた部分を復号する。ステップ785は、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0であるかどうかをチェックする。これが真である場合には制御はステップ786に渡され、そうでなければ制御は方法780を離れる。ステップ786は、第2のクロミナンスチャネルのストリーム113から、部分430、490、4410といったsao_type_idxの二値化された値の算術的にコーディングされた部分を復号する。
3つのチャネルのsao_type_idxの値のバイパスコーディングされた部分を復号する方法790を、図7Iを参照して説明する。方法790は、上述されたシンタックス構造420、480、4400、4600におけるsao_type_idxシンタックス要素のバイパスコーディングされた部分を復号するための方法750のステップ756を実現するために使用できる。方法790は、方法780のステップ782、784、786で復号されたsao_type_idxの値の部分を入力として受理する。方法790は、ステップ791によって始まる。ステップ791は、輝度チャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ792に渡され、そうでなければ制御はステップ793に渡される。ステップ792は、ストリーム113から、部分431、491、4411といった、輝度チャネルのsao_type_idxの値のバイパスコーディングされた部分を復号し、輝度チャネルのsao_type_idxの値を回復する。ステップ793は、第1のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0と等しいかどうかをチェックする。これが真である場合には制御がステップ794に渡され、そうでなければ制御はステップ795に渡される。ステップ794は、ストリーム113から、部分432、492、4412といった、第1のクロミナンスチャネルのsao_type_idxの値のバイパスコーディングされた部分を復号し、第1のクロミナンスチャネルのsao_type_idxの値を回復する。ステップ795は、第2のクロミナンスチャネルのsao_merge_left_flagおよびsao_merge_up_flagの値が両方とも0であるかどうかをチェックする。これが真である場合には制御はステップ796に渡され、そうでなければ制御は方法790を離れる。ステップ796は、ストリーム113から、部分433、493、および4413といった、第2のクロミナンスチャネルのsao_type_idxの値のバイパスコーディングされた部分を復号し、第2のクロミナンスチャネルのsao_type_idxの値を回復する。
二値化スキーム500を使用してsao_type_idxの値をストリーム113から復号し、二値化解除する方法7100を、図7J(1)を参照して説明する。方法7100は、上述されたシンタックス構造400におけるsao_type_idxの値を復号し、二値化解除するための方法700のステップ742を実現するために使用できる。方法7100は、ステップ7101によって始まる。ステップ7101は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7102は、復号されたビンの値が「1」であるかどうかをチェックする。これが真である場合には制御がステップ7103に渡され、そうでなければ制御はステップ7104に渡される。ステップ7103は、ストリーム113から3つのバイパス符号化されたビンを復号する。ステップ7104は、二値化スキーム500に従ってステップ7101、7103で復号されたビンに対応するsao_type_idxの値を戻す。
二値化スキーム540を使用してsao_type_idxの値をストリーム113から復号し、二値化解除する方法7200を、図7J(2)を参照して説明する。方法7200は、上述されたシンタックス構造460におけるsao_type_idxの値を復号し、二値化解除するための方法740のステップ742を実現するために使用できる。方法7200は、ステップ7201によって始まる。ステップ7201は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7202は、ストリーム113から2つのバイパス符号化されたビンを復号する。次に、ステップ7203は、二値化スキーム540に従ってステップ7201、7202で復号されたビンに対応するsao_type_idxの値を戻す。
二値化スキーム580を使用してsao_type_idxの値を復号し、二値化解除する方法7300を、図7Kを参照して説明する。方法7300は、上述されたシンタックス構造4200におけるsao_type_idxの値を復号し、二値化解除するための方法740のステップ742を実現するために使用できる。方法7300は、ステップ7301によって始まる。復号された「1」の値のカウンタONECNTをゼロにリセットする。次に、ステップ7302は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7303は、復号されたビンの値が「1」であるかどうかをチェックする。これが真である場合には制御がステップ7304に渡され、そうでなければ制御はステップ7311に渡される。ステップ7304は、ONECNTカウンタを1だけインクリメントする。次に、ステップ7305は、ONECNTカウンタが二値化された値の算術的にコーディングされたビンの最大値Tと等しいかどうかをチェックする。これが真である場合には制御がステップ7310に渡され、そうでなければ制御はステップ7306に渡される。ステップ7306は、ONECNTカウンタが二値化されたシーケンス582の最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7311に渡され、そうでなければ制御はステップ7302に渡される。ステップ7310は、ONECNTカウンタが最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7311に渡され、そうでなければ制御はステップ7307に渡される。ステップ7307は、バイパスコーディングされたビンを復号した。次に、ステップ730は、復号されたビンが「1」と等しいかどうかをチェックする。これが真である場合、制御はステップ7309に渡され、そうでなければ、制御はステップ7311に渡される。ステップ7309は、ONECNTカウンタをインクリメントし、制御をステップ7310へ渡す。ステップ7311は、二値化スキーム580に従ってONECNTカウンタの値に対応するsao_type_idxの値を戻す。
二値化スキーム560を使用してsao_type_idxの値を復号し、二値化解除する方法7500を、図7L(1)を参照して説明する。方法7500は、上述されたシンタックス構造4100におけるsao_type_idxの値を復号し、二値化解除するための方法740のステップ742を実現するために使用できる。方法7500は、ステップ7501によって始まる。ステップ7501は、復号された「1」のビンのカウンタONECNTを0にリセットする。次に、ステップ7502は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7503は、復号されたビンが「1」と等しいかどうかをチェックする。これが真である場合には制御がステップ7504に渡され、そうでなければ制御はステップ7506に渡される。ステップ7504は、ONECNTカウンタを1だけインクリメントする。次に、ステップ7505は、ONECNTカウンタの値が二値化されたシーケンス582の最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7506に渡され、そうでなければ制御はステップ7502に渡される。ステップ7506は、二値化スキーム560に従ってONECNTカウンタの値に対応するsao_type_idxの値を戻す。
二値化スキーム520を使用してsao_type_idxの値を復号し、二値化解除する方法7600を、図7L(2)を参照して説明する。方法7600は、上述されたシンタックス構造440におけるsao_type_idxの値を復号し、二値化解除するための方法740のステップ742を実現するために使用できる。方法7600は、ステップ7601によって始まる。ステップ7601は、ストリーム113から3つの算術的に符号化されたビンを復号する。次に、ステップ7602は、二値化スキーム520に従ってステップ7601で復号されたビンの値に対応するsao_type_idxの値を戻す。
二値化スキーム500を使用してsao_type_idxの値の算術的に符号化された部分501をストリーム113から復号する方法7700を、図7M(1)を参照して説明する。方法7700は、上述されたシンタックス構造420におけるsao_type_idxの値の算術的に符号化された部分428、429、430を復号するための方法780のステップ782、784、786を実現するために使用できる。ステップ7700は、ストリーム113から算術的に符号化されたビンを復号することによりステップ7701によって始まる。次に、ステップ7702は、以下において説明される方法7800のステップ7801にアクセス可能な記憶場所に復号された値を記憶する。この後、制御は方法7700を離れる。
二値化スキーム500を使用してsao_type_idxの値のバイパスコーディングされた部分502をストリーム113から復号する方法7800を、図7M(2)を参照して説明する。方法7800は、シンタックス構造420におけるsao_type_idxの値のバイパス符号化された部分431、432、433を復号するための方法790のステップ792、794、796を実現するために使用できる。方法7800は、ステップ7801によって始まる。ステップ7801は、方法7700のステップ7701で復号された値が「1」と等しいかどうかをチェックする。これが真である場合には制御がステップ7802に渡され、そうでなければ制御はステップ7803に渡される。ステップ7802は、ストリーム113から3つのバイパス符号化されたビンを復号する。ステップ7803は、二値化スキーム500に従ってステップ7701、7802で復号されたビンに対応するsao_type_idxの値を戻す。
二値化スキーム540を使用してsao_type_idxの値の算術的に符号化された部分541をストリーム113から復号する方法7900を、図7N(1)を参照して説明する。方法7900は、上述されたシンタックス構造480におけるsao_type_idxの値の算術的に符号化された部分488、489、490を復号するための方法780のステップ782、784、786を実現するために使用できる。方法7900は、ステップ7901によって始まる。ステップ7901は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7902は、以下において説明される方法7920のステップ7921にアクセス可能な記憶場所に復号された値を記憶する。この後、制御は方法7900を離れる。
二値化スキーム540を使用してsao_type_idxの値のバイパスコーディングされた部分542をストリーム113から復号する方法7920を、図7N(2)を参照して説明する。方法7920は、上述されたシンタックス構造480におけるsao_type_idxの値のバイパス符号化された部分491、492、493を復号するための方法790のステップ792、794、796を実現するために使用できる。方法7920は、ステップ7921によって始まる。ステップ7921は、ストリーム113から2つの算術的に符号化されたビンを復号する。次に、ステップ7922は、二値化スキーム540に従ってステップ7901、7921で復号されたビンに対応するsao_type_idxの値を戻す。
シーケンス582の算術的にコーディングされた部分591をストリーム113から復号する方法7940を、図7Oを参照して説明する。方法7940は、上述されたシンタックス構造4400におけるsao_type_idxの値の算術的に符号化された部分4408、4409、4410を復号するための方法780のステップ782、784、786を実現するために使用できる。方法7940は、ステップ7941によって始まる。ステップ7941は、復号された「1」の値のカウンタONECNTをゼロにリセットする。次に、ステップ7942は、「0」の値がストリームから復号されたことを示すフラグFINISHEDをゼロにリセットする。次に、ステップ7943は、ストリーム113から算術的に符号化されたビンを復号する。次に、ステップ7944は、復号されたビンの値が「1」と等しいかどうかをチェックする。これが真である場合には制御がステップ7945に渡され、そうでなければ制御はステップ7948に渡される。ステップ7945は、カウンタONECNTを1だけインクリメントする。次に、ステップ7946は、カウンタONECNTの値が二値化された値の算術的にコーディングされたビンの最大値Tと等しいかどうかをチェックする。これが真である場合には制御がステップ7949に渡され、そうでなければ制御はステップ7947に渡される。ステップ7947は、カウンタONECNTの値が二値化されたシーケンス582の最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7949に渡され、そうでなければ制御はステップ7943に渡される。ステップ7948は、フラグFINISHEDを1に設定する。ステップ7949は、フラグFINISHEDの値を記憶し、カウンタONECNTは、(以下において説明される)方法7960のステップにアクセス可能な記憶位置である。ステップ7949の後、制御は方法7940を離れる。
シーケンス582のバイパスコーディングされた部分592をストリーム113から復号する方法7960を、図7Pを参照して説明する。方法7960は、上述されたシンタックス構造4400におけるsao_type_idxの値のバイパス符号化された部分4411、4412、4413を復号するための方法790のステップ792、794、796を実現するために使用できる。方法7960は、ステップ7961によって始まる。ステップ7961は、方法7940において設定されたフラグFINISHEDの値が1と等しいかどうかをチェックする。これが真である場合には制御がステップ7966に渡され、そうでなければ制御はステップ7965に渡される。ステップ7965は、カウンタONECNTの値が二値化されたシーケンス582の最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7966に渡され、そうでなければ制御はステップ7962に渡される。ステップ7962は、ストリーム113からバイパスコーディングされたビンを復号する。次に、ステップ7963は、復号されたビンの値が「1」であるかどうかをチェックする。これが真である場合には制御がステップ7964に渡され、そうでなければ制御はステップ7966に渡される。ステップ7964は、カウンタONECNTを1だけインクリメントする。ステップ7965は、カウンタONECNTの値が二値化されたシーケンス582の最大長LMAXと等しいかどうかをチェックする。これが真である場合には制御がステップ7966に渡され、そうでなければ制御はステップ7962に渡される。ステップ7966は、二値化スキーム580に従ってカウンタONECNTの値に対応するsao_type_idxの値を戻す。