本出願は、各々の内容全体が参照により本明細書に組み込まれる、2012年4月13日に出願された米国仮特許出願第61/623,929号、2012年4月13日に出願された米国仮特許出願第61/623,948号、および2012年4月13日に出願された米国仮特許出願第61/624,116号の利益を主張する。
[0024]ビデオエンコーダは、ビデオ符号化中に係数を量子化することができる。係数を量子化すると、係数のビット深度を削減することができる。高効率ビデオコーディング(HEVC)では、ビデオエンコーダは、デッドゾーン技法によるスカラー量子化を使用して、またはレートひずみ最適量子化(RDOQ)技法を使用して量子化を実行することができる。RDOQ技法は、デッドゾーン技法によるスカラー量子化に比べて、著しいパフォーマンス向上を実現することができる。しかしながら、RDOQ技法は、デッドゾーン技法によるスカラー量子化よりも著しく複雑である。
[0025]本開示の技法は、RDOQ技法の複雑さを低減することができる。たとえば、RDOQは、係数の量子化レベル(Level)、Level−1、および0のレートひずみ(RD)コストを決定することに関与することができる。本開示のいくつかの技法は、係数の計算された値がLevelと量子化ステップサイズの値との積よりも小さい場合、係数についての量子化レベル(Level)、Level−1、および0のRDコストを決定するだけで、RDOQ技法の複雑さを低減することができる。この条件が満足されたときこれらのRDコストのみを決定することによって、RDOQ技法を実施する複雑さが低減され得る。別の例では、本開示のいくつかの技法は、これらの技法を実装しているビデオエンコーダが、量子化オフセット参照テーブル内で量子化オフセットを参照し、これらの量子化オフセットを使用して係数を量子化することができるという点で、RDOQ技法の複雑さを低減することができる。量子化オフセット参照テーブル内で量子化オフセットを参照することによって、各係数についてLevel、Level−1、および0のRDコストを決定する必要がない場合がある。Level、Level−1、および0のRDコストの決定を除去すると、RDOQ技法の複雑さを低減することができる。別の例では、RDOQ技法の複雑さは、RDOQ技法内の様々なRDコストを計算するときにビデオエンコーダが使用できる乗算テーブルを生成することによって、低減され得る。
[0026]添付の図面は、例を示す。添付の図面内で参照番号によって示される要素は、以下の説明において同様の参照番号によって示される要素に対応する。本開示では、序数語(たとえば、「第1の」、「第2の」、「第3の」など)で始まる名称を有する要素は、それらの要素が特定の順序を有することを必ずしも意味するとは限らない。むしろ、そのような序数語は、同じまたは同様のタイプの異なる要素を指すために使用されるにすぎない。
[0027]図1は、本開示の技法を利用できる例示的なビデオコーディングシステム10を示すブロック図である。本明細書に記載されるように、「ビデオコーダ」という用語は、総称的にビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、総称的にビデオ符号化またはビデオ復号を指す場合がある。
[0028]図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれる場合がある。宛先デバイス14は、ソースデバイス12によって生成された、符号化されたビデオデータを復号することができる。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれる場合がある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備えることができる。
[0029]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信することができる。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な1つまたは複数の媒体および/またはデバイスを備えることができる。一例では、チャネル16は、ソースデバイス12が符号化ビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備えることができる。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って、符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスおよび/または有線の通信媒体を含む場合がある。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などのパケットベースネットワークの一部を形成する場合がある。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含む場合がある。
[0030]別の例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオデータを記憶する記憶媒体を含む場合がある。この例では、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスすることができる。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの様々なローカルアクセスデータ記憶媒体を含む場合がある。
[0031]さらなる例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含む場合がある。この例では、送信先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された、符号化されたビデオデータにアクセスすることができる。ファイルサーバは、符号化されたビデオデータを記憶すること、および符号化されたビデオデータを宛先デバイス14に送信することが可能な、あるタイプのサーバであり得る。例示的なファイルサーバには、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブが含まれる。
[0032]宛先デバイス14は、インターネット接続などの標準的なデータ接続を介して、符号化されたビデオデータにアクセスすることができる。例示的なタイプのデータ接続には、ファイルサーバに記憶された、符号化されたビデオデータにアクセスするのに適切である、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せが含まれる。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
[0033]本開示の技法は、ワイヤレスの用途または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、単方向または双方向のビデオ送信をサポートして、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするように構成され得る。
[0034]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含む場合がある。ビデオソース18は、ビデオキャプチャデバイス、たとえばビデオカメラ、以前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するビデオフィードインターフェース、および/もしくは、ビデオデータを生成するためのコンピュータグラフィックスシステム、またはそのようなビデオデータのソースの組合せを含む場合がある。
[0035]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化することができる。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化されたビデオデータを直接送信する。符号化されたビデオデータは、復号および/または再生のために宛先デバイス14が後でアクセスするために、記憶媒体またはファイルサーバ上に記憶される場合もある。
[0036]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して、符号化されたビデオデータを受信することができる。ディスプレイデバイス32は、宛先デバイス14と一体であり得るか、またはその外部にあり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備える場合がある。
[0037]ビデオエンコーダ20およびビデオデコーダ30は、現在開発中の高効率ビデオコーディング(HEVC)規格などのビデオ圧縮規格に従って動作することができ、HEVCテストモデル(HM)に準拠することができる。「HEVC Working Draft 6」または「WD6」と呼ばれる次回のHEVC規格のドラフトは、文書JCTVC−H1003、Brossらの「High efficiency video coding(HEVC) text specification draft 6」、ITU−T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT−VC)、第8回会議:米国カリフォルニア州サンホセ、2012年2月に記載されており、これは2013年2月21日の時点で、http://phenix.int−evry.fr/jct/doc_end_user/documents/8_San%20Jose/wg11/JCTVC−H1003−v22.zipからダウンロード可能であり、その内容全体は参照により本明細書に組み込まれる。「HEVC Working Draft 9」と呼ばれる次回のHEVC規格の別のドラフトは、Brossらの「High Efficiency Video Coding(HEVC) text specification draft 9」、ITU−T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT−VC)、第11回会議:中国、上海、2012年10月に記載されており、これは2013年2月21日の時点で、http://phenix.int−evry.fr/jct/doc_end_user/documents/11_Shanghai/wg11/JCTVC−K1003−v8.zipからダウンロード可能であり、その内容全体は参照により本明細書に組み込まれる。
[0038]代替的に、ビデオエンコーダ20およびビデオデコーダ30は、そのスケーラブルビデオコーディング(SVC)およびマルチビュービデオコーディング(MVC)の拡張版を含む、ITU−T H.261、ISO/IEC MPEG−1ビジュアル、ITU−T H.262またはISO/IEC MPEG−2ビジュアル、ITU−T H.263、(ISO/IEC MPEG−4 AVCとしても知られる)ISO/IEC MPEG−4ビジュアルおよびITU−T H.264を含む、他のプロプライエタリな標準または業界標準に従って動作することができる。しかしながら、本開示の技法は、いかなる特定のコーディング規格またはコーディング技法にも限定されない。
[0039]この場合も、図1は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用することができる。他の例では、データがローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。符号化デバイスはデータを符号化し、メモリに格納することができ、かつ/または、復号デバイスはデータをメモリから取り出し、復号することができる。多くの例では、符号化および復号は、互いに通信しないが、データをメモリに符号化し、かつ/またはデータをメモリから取り出し、復号するだけのデバイスによって実行される。
[0040]ビデオエンコーダ20およびビデオデコーダ30は、各々1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。本技法がソフトウェアに部分的に実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェア用の命令を記憶し、1つまたは複数のプロセッサを使用してその命令をハードウェア内で実行して、本開示の技法を実施することができる。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれも、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれる場合があり、両者のいずれかがそれぞれのデバイス内の複合エンコーダ/デコーダ(CODEC)の一部として組み込まれる場合がある。
[0041]本開示は、概して、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリング」することに言及する場合がある。「シグナリング」という用語は、概して、符号化されたビデオデータを表すシンタックス要素および/または他のデータの通信を指す場合がある。そのような通信は、リアルタイムまたはほぼリアルタイムで行われ得る。代替的に、そのような通信は、符号化時に符号化されたビットストリーム内でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに行われる場合があるなど、ある時間期間にわたって行われ得、次いで、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0042]上記で簡略に述べられたように、ビデオエンコーダ20はビデオデータを符号化する。ビデオデータは、1つまたは複数のピクチャを備える場合がある。ピクチャの各々は静止画像であり得る。場合によっては、ピクチャはビデオ「フレーム」と呼ばれる場合がある。ビデオエンコーダ20は、ビデオデータのコード化表現を形成するビット列を含むビットストリームを生成することができる。ビデオデータのコード化表現は、コード化ピクチャと関連データとを含む場合がある。コード化ピクチャはピクチャのコード化表現である。関連データには、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、および他のシンタックス構造が含まれ得る。SPSは、ゼロ以上のピクチャのシーケンスに適用可能なパラメータを含む場合がある。PPSは、ゼロ以上のピクチャに適用可能なパラメータを含む場合がある。シンタックス構造は、指定された順序でビットストリーム内に一緒に存在するゼロ以上のシンタックス要素のセットであり得る。
[0043]ピクチャの符号化表現を生成するために、ビデオエンコーダ20はピクチャをコーディングツリーブロック(CTB)のグリッドに区分化することができる。こうして、各CTBはピクチャの領域に関連付けられ得る。場合によっては、CTBは、「ツリーブロック」、「最大コーディングユニット」(LCU)、または「コーディングツリーユニット」と呼ばれる場合がある。HEVCのCTBは、H.264/AVCなどの以前の規格のマクロブロックに広い意味で類似する場合がある。しかしながら、CTBは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含む場合がある。
[0044]CTBの各々は、CTBに関連付けられた領域内のピクセルに対応する、ルミナンス(ルーマ)サンプルのブロックおよびクロミナンス(クロマ)サンプルの2つのブロックに関連付けられ得る。説明を簡単にするために、本開示は、サンプルの2次元アレイをサンプルブロックと呼ぶ場合がある。ビデオエンコーダ20は、四分木区分化を使用して、CTBに関連付けられた領域を、今後「コーディングツリーブロック」という名称の、CUに関連付けられた領域に区分化することができる。
[0045]ピクチャのCTBは、1つまたは複数のスライスにグループ化される場合がある。いくつかの例では、スライスの各々は整数個のCTBを含む。ピクチャを符号化することの一部として、ビデオエンコーダ20はピクチャの各スライスの符号化表現(すなわち、コード化スライス)を生成することができる。コード化スライスを生成するために、ビデオエンコーダ20はスライスの各CTBを符号化して、スライスの各CTBの符号化表現(すなわち、コード化CTB)を生成することができる。
[0046]コード化CTBを生成するために、ビデオエンコーダ20は、CTBに関連付けられた領域に対して再帰的に四分木区分化を実行して、領域を漸進的により小さい領域に分割することができる。より小さい領域はCUに関連付けられ得る。より小さい領域の各々は、ルーマサンプルのブロックおよびクロマサンプルの2つのブロックに関連付けられ得る。したがって、CUは、ルーマサンプルのブロックおよびクロマサンプルの2つのブロックに関連付けられ得る。区分化されたCUは、その領域が他のCUに関連付けられた領域に区分化されたCUであり得る。区分化されていないCUは、その領域が他のCUに関連付けられた領域に区分化されていないCUであり得る。
[0047]ビデオエンコーダ20は、区分化されていないCUごとに1つまたは複数の予測ユニット(PU)を生成することができる。CUの各PUは、そのCUの領域内の異なる領域に関連付けられ得る。ビデオエンコーダ20は、CUのPUごとに予測サンプルブロックを生成することができる。
[0048]ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、1つのPUについて複数の予測サンプルブロックを生成することができる。ビデオエンコーダ20がイントラ予測を使用してPUの予測サンプルブロックを生成する場合、ビデオエンコーダ20は、当該PUに関連付けられたピクチャの復号されたサンプルに基づいて、当該PUの予測サンプルブロックを生成することができる。ビデオエンコーダ20がインター予測を使用してPUの予測サンプルブロックを生成する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測サンプルブロックを生成することができる。
[0049]ビデオエンコーダ20は、1つのCUの複数のPUの予測サンプルブロックに基づいて、当該CUについて残差サンプルブロックを生成することができる。CUについての残差サンプルブロックは、CUのPUについての予測サンプルブロック内のサンプルとCUのオリジナルのサンプルブロック内の対応するサンプルとの間の差分を示すことができる。
[0050]さらに、区分化されていないCUを符号化することの一部として、ビデオエンコーダ20はCUの残差サンプルブロックに対して再帰的四分木区分化を実行して、CUの残差サンプルブロックをCUの変換ユニット(TU)に関連付けられた1つまたは複数のより小さい残差サンプルブロックに区分化することができる。CUのサンプルブロックは、ルーマサンプルの1つのブロックとクロマサンプルの2つのブロックとを含むことができるので、TUの各々は、ルーマサンプルの1つの残差サンプルブロックおよびクロマサンプルの2つの残差サンプルブロックに関連付けられ得る。
[0051]ビデオコーダ20は、TUに関連付けられた残差サンプルブロックに1つまたは複数の変換を適用して、係数ブロック(すなわち、係数のブロック)を生成することができる。ビデオエンコーダ20は、係数ブロックの各々に対して量子化プロセスを実行することができる。量子化は、一般に、係数を量子化して、係数を表すために使用されるデータの量をできるだけ削減することにより、さらなる圧縮を実現する処理を指す。
[0052]ビデオエンコーダ20は、これらのシンタックス要素の少なくとも一部に、コンテキスト適応型バイナリ算術コーディング(CABAC)演算などのエントロピー符号化演算を適用することができる。係数ブロックのシンタックス要素をエントロピー符号化することに加えて、ビデオエンコーダ20は、変換ブロックに逆量子化と逆変換とを適用して、変換ブロックから残差サンプルブロックを復元することができる。ビデオエンコーダ20は、復元された残差サンプルブロックを1つまたは複数の予測サンプルブロックからの対応するサンプルに追加して、復元されたサンプルブロックを生成することができる。このようにしてCUのTUごとにサンプルブロックを復元することによって、ビデオエンコーダ20は、CUのサンプルブロックを復元することができる。
[0053]ビデオエンコーダ20がCUのサンプルブロックを復元した後、ビデオエンコーダ20は、デブロッキング動作を実行して、CUに関連付けられたブロッキングアーティファクトを低減することができる。これらの動作を実行した後、ビデオエンコーダ20は、他のCUのPU用の予測サンプルブロックを生成する際に使用するために、CUの復元されたサンプルブロックを復号ピクチャバッファに記憶することができる。
[0054]ビデオデコーダ30はビットストリームを受信することができる。ビットストリームは、ビデオエンコーダ20によって符号化されたビデオデータのコード化表現を含むことができる。ビデオデコーダ30は、ビットストリームを構文解析して、ビットストリームからシンタックス要素を抽出することができる。ビットストリームから少なくともいくつかのシンタックス要素を抽出することの一部として、ビデオデコーダ30は、ビットストリーム内のデータをエントロピー復号することができる。
[0055]ビデオデコーダ30は、ビットストリームから抽出されたシンタックス要素に基づいて、ビデオデータのピクチャを復元することができる。シンタックス要素に基づいてビデオデータを復元するプロセスは、一般に、シンタックス要素を生成するためにビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、CUに関連付けられたシンタックス要素に基づいて、CUのPU用の予測サンプルブロックを生成することができる。加えて、ビデオデコーダ30は、CUのTUに関連付けられた係数ブロックを逆量子化することができる。ビデオデコーダ30は、係数ブロックに対して逆変換を実行して、CUのTUに関連付けられた残差サンプルブロックを復元することができる。ビデオデコーダ30は、予測サンプルブロックおよび残差サンプルブロックに基づいて、CUのサンプルブロックを復元することができる。
[0056]上記で説明されたように、ビデオエンコーダ20は残差サンプルブロックを生成することができる。残差サンプルブロック内の各サンプルは、サンプルブロックのオリジナルのバージョン内の対応するサンプルと同じサンプルブロックの予測バージョンとの間の差分を示すことができる。残差サンプルブロックを生成した後、ビデオエンコーダ20は、残差サンプルブロックに1つまたは複数の変換を適用することができる。残差サンプルブロックに1つまたは複数の変換を適用することによって、ビデオエンコーダ20は、残差サンプルブロックをサンプル領域から周波数領域に変換することができる。結果は、変換係数のブロック(すなわち、「変換係数ブロック」または「係数ブロック」)である。いくつかの例では、変換の目的は、信号を様々な周波数成分に非相関化することである。さらに、いくつかの例では、ビデオエンコーダ20は、残差サンプルブロックに変換を適用しない。そのような例では、ビデオエンコーダ20は、係数ブロックと同じ方法で残差サンプルブロックを扱うことができる。説明を簡単にするために、係数ブロックの本開示内の説明は、ビデオエンコーダ20が1つまたは複数の変換を適用しない残差サンプルブロックに適用することができる。
[0057]さらに、上記で説明されたように、係数ブロックを生成した後、ビデオエンコーダ20は、係数ブロックの係数を量子化することができる。係数を量子化すると、係数のビット深度を削減することができる。量子化は、符号化にひずみをもたらす可能性があるプロセスである。その後、量子化された係数は、CABACなどの可変長コーディングを使用して符号化される。HEVCでは、量子化用の2つの技法が存在する。1番目の量子化技法は、デッドゾーンによるスカラー量子化である。2番目の量子化技法は、レートひずみ最適量子化(RDOQ)である。
[0058]デッドゾーン技法によるスカラー量子化では、ビデオエンコーダ20は、下記等式(1)を使用して、係数を個別の量子化レベルにマッピングする。
は、マイナス無限大に向かって最も近い整数への丸めを表し、sign()は入力信号Wの符号を返す関数である。Δは量子化ステップであり、fは量子化オフセットである。等式(1)では、量子化オフセットfは、デッドゾーンのサイズを制御する。デッドゾーンは、0にマッピングする間隔である。量子化オフセットfはまた、0にマッピングする間隔の中心から離れるように復元レベルをシフトする。zは量子化レベルの値を示す。
[0059]復号の間、ビデオデコーダ30は、下記等式(2)を使用して、変換係数を逆量子化することができる
等式(2)では、W’は逆量子化された係数を表し、Δは量子化ステップであり、Zは受信された量子化レベルである。
[0060]RDOQ技法は、レート(すなわち、符号化されたビデオデータのビットレート)とひずみとの間のトレードオフを最適化するように試みる。一般に、ビデオエンコーダ20は、以下のステップを実行することによって、RDOQ技法を実施することができる。第1に、ビデオエンコーダ20は、コンテキストを初期化することができる:C1=1、C2=0。第2に、ビデオエンコーダ20は、逆対角走査順序で係数ブロックの係数を走査することができる。ビデオエンコーダ20が各係数を走査するとき、ビデオエンコーダ20は、1/2の量子化オフセットを使用して係数を量子化することができる。第3に、ビデオエンコーダ20は、係数ブロック内の係数用の最適レベルを決定することができる。第4に、ビデオエンコーダ20は、最適な最終有意係数を決定することができる。
[0061]前の段落の第3ステップで係数用の最適レベルを決定するために、ビデオエンコーダ20は、以下のステップを実行することができる。第1に、ビデオエンコーダ20は、最終有意係数を決定することができる。逆対角走査順序で係数を走査するとき、最終有意係数はゼロでないレベルに量子化されている最初に遭遇した係数である。第2に、残りの非ゼロ係数ごとに、ビデオエンコーダ20は、係数についての量子化レベルのレートひずみ(RD)コストに基づいて、最適レベルを選択することができる。残りの係数は、逆対角走査順序に従って最終有意係数の後に存在する係数である。
[0062]係数(すなわち、現在の係数)用の最適な量子化レベルを選択するために、ビデオエンコーダ20は、現在の係数用の量子化レベルが3よりも小さいかどうかを決定し得る。現在の係数用の量子化レベルが3よりも小さい場合、ビデオエンコーダ20は、現在の係数を値Levelと取り換えることから生じるはずのRDコストを計算し得、ここで、Levelは上記で計算された現在の係数用の量子化レベルを表す。さらに、現在の係数用の量子化レベルが3よりも小さい場合、ビデオエンコーダ20は、現在の係数をLevel−1と取り換えることから生じるはずのRDコストを計算し得る。加えて、現在の係数用の量子化レベルが3よりも小さい場合、ビデオエンコーダ20は、現在の係数を値0と取り換えることから生じるはずのRDコストを計算し得る。
[0063]現在の係数用の量子化レベルが3以上である場合、ビデオエンコーダ20は、現在の係数を値Levelと取り換えることから生じるはずのRDコストを計算し得る。さらに、現在の係数用の量子化レベルが3以上である場合、ビデオエンコーダ20は、現在の係数を値Level−1と取り換えることから生じるはずのRDコストを計算し得る。
[0064]さらに、ビデオエンコーダ20が現在の係数用の最適な量子化レベルを選択するとき、ビデオエンコーダ20は、係数ブロックのすべての係数を(コーディングされていないブロックでもたらされる)0に量子化するRDコストを更新することができる。ビデオエンコーダ20はまた、係数ブロックの各係数を符号化するRDコストを更新する。加えて、ビデオエンコーダ20は、係数ブロックの有意性マップを符号化するコストを更新する。係数ブロックの有意性マップは、係数ブロックのどの係数がゼロでないかを示す。
[0065]加えて、ビデオエンコーダ20は、現在の係数の最適な量子化(Lopt)に基づいて、コンテキストを更新する。ビデオエンコーダ20は、最も低いRDコストを有する現在の係数用の量子化レベル(すなわち、Level、Level−1、または0)としてLoptを決定することができる。ビデオエンコーダ20は、コンテキストを使用して、次の係数のレベル決定を実行することができる。たとえば、ビデオエンコーダ20は、コンテキストに少なくとも部分的に基づいて、次の係数に関連する様々なRDコストを決定することができる。
[0066]上記のように、ビデオエンコーダ20は、RDOQ技法を実施することの一部として、最適な最終有意係数を決定し得る。最適な最終有意係数を決定するために、ビデオエンコーダ20は、以下のステップを実行し得る。第1に、ビデオエンコーダ20は、現在のブロックがコーディングされていない場合、RDコストに等しくなるように値(d64BestCost)を初期化し得る。第2に、ビデオエンコーダ20がその量子化レベルが1よりも大きい係数に遭遇するまで、ビデオエンコーダ20は、逆対角走査に従って係数ブロックの係数を走査し得る。
[0067]ビデオエンコーダ20が係数(すなわち、現在の係数)を走査するとき、ビデオエンコーダ20は、以下のステップを実行する。第1に、ビデオエンコーダ20は、現在の係数が最終有意係数であると見なされる場合生じるはずの合計ブロックコスト(totalCost)を計算し得る。第2に、totalCostがd64BestCostよりも小さい場合、ビデオエンコーダ20は、現在の係数の係数ブロック内の位置を示すように最良の最終位置インジケータ(iBestLastIdxP1)を設定することができ、d64BestCostをtotalCostに等しく設定することができる。
[0068]上述されたRDOQ技法では、ビデオエンコーダ20は、いくつかのRDコストを計算する。ビデオエンコーダ20は、D+λ*RとしてRDコストを計算し得る。Dは、係数ブロックのオリジナルの係数と係数ブロックの復元された係数との間の平均二乗誤差を表す。Rは、対応するコンテキストモデルのエントロピーを表す。ビデオエンコーダ20は、係数ブロック用のRDOQを実施する前、または、HEVCにおける変換および量子化の基本単位であるTUの任意の係数ブロック用のRDOQを実施する前に、Rを推定し得る。すなわち、シンボルのレートRは、RDOQの前に(またはTUごとに)いつも、対応するコンテキストモデルのエントロピーとして推定され得る。
[0069]TUごとにレートR(すなわち、量子化レベルと有意性マップおよび最終有意係数の位置などの関連情報とを符号化するレート)を推定するために、ビデオエンコーダ20は、CABACコンテキストモデルのエントロピーを計算し得る。理論上、CABACは圧縮の限度を近似することができる。すなわち、CABACによって生成された平均コードワード長は、理論上、ソースのエントロピーを近似することができる。ビデオエンコーダ20がCABACを使用してデータシンボルを符号化するとき、データシンボルは最初に2値化される。2値化されたデータシンボルは「ビン」と呼ばれる場合がある。
[0070]次いで、ビデオエンコーダ20は、コンテキストモデルを選択することができる。コンテキストモデルは、最近コーディングされたデータシンボルの統計データを定義し得る。たとえば、1の量子化レベルを符号化する場合、コンテキストモデルは、1に量子化された以前の係数の数として定義され得る。このようにして、コンテキストモデルは、現在のシンボルについての条件付き確率を定義することができる。すなわち、コンテキストモデルは、以前コーディングされたシンボルが与えられれば、現在のシンボルの確率を示すことができる。さらに、コンテキストモデルは、ビンが「1」または「0」である確率を定義することができる。ビデオエンコーダ20がCABACを実行するとき、ビデオエンコーダ20は、選択されたコンテキストモデル(すなわち、「確率モデル」)に従って、2値化されたデータシンボル(すなわち、ビン)を符号化し得る。
[0071]2値化されたデータシンボルを符号化した後、ビデオエンコーダ20は、実際のコーディングされた値に少なくとも部分的に基づいて、選択されたコンテキストモデルを更新する。CABAC符号化が進行中である限り、ビデオエンコーダ20は、コンテキストモデルの更新を継続し得る。ビデオエンコーダ20がRDOQを実施する前に、ビデオエンコーダ20は、あらゆるコンテキストの現在の確率(すなわち、コンテキスト)モデルをロードし、ビデオエンコーダ20は、対応するエントロピーを計算し得る。ビデオエンコーダ20は、エントロピーを使用して、対応するコンテキスト用のシンボルを符号化するビットの数を推定する。言い換えれば、ビデオエンコーダ20は、コンテキストのエントロピーを使用して、当該コンテキストがシンボルを符号化するために使用された場合に、いくつのビットがシンボルの符号化されたバージョン内に存在するかを推定する。シンボルを符号化するためのビットの数を推定することは、本明細書では「ビット推定」と呼ばれる場合がある。
[0072]したがって、ビデオエンコーダ20が上述されたRDOQ技法を実施するとき、ビデオエンコーダ20は、以下のステップを実行し得る。
1.コンテキストを初期化する:C1=1、C2=0。
2.逆対角走査順序で1/2のオフセットを用いて係数を量子化する。
3.最適レベルの決定。
I.最終有意係数を固定する:逆対角走査で非ゼロに量子化された第1の係数。
II.逆対角走査で残りの非ゼロ係数について、RDコストに基づいて最適レベルを選択する。
a.最良のレベルLoptを選択する。
i.Level<3の場合、Level、Level−1、および0のRDコスト(D+λ・RLevel)を計算する。
ii.Level>=3の場合、Level、Level−1のRDコスト(D+λ・RLevel)を計算する。
b.符号化コストを更新する。
i.(コーディングされていないブロックについて)0への量子化のコスト。
ii.各係数を符号化するコスト。
iii.有意性マップを符号化するコスト(λ・Rsig_map)。
c.決定されたレベルLoptに基づいてコンテキストを更新する。コンテキストは、次の係数のレベル決定によって使用され得る。
III.次の係数を処理し、ステップIIに進む。
4.最適な最終有意係数の決定。
1)現在のブロックがコーディングされていない場合、RDコストになるようにd64BestCostを初期化する。
2)現在の係数が最終有意係数である場合、逆対角走査で、合計ブロックコストtotalCostを計算する。すなわち、λ・RpositionX+λ・RpositionYは加算される必要があり、有意性マップと対応するコストは調整されるべきである。
3)totalCost<d64BestCostの場合、新しい最良の最終位置(iBestLastIdxP1)は現在位置であり、d64BestCost=totalCostにする。
4)LevelofCurCoeff>1まで反復する。
[0073]デッドゾーン技法によるスカラー量子化と比較して、RDOQ技法は、著しいパフォーマンス向上を実現し得る。しかしながら、これらの向上は、ビデオエンコーダ20についての著しく増加した複雑さを犠牲にして成り立つ。下記の表1〜表4は、RDOQオフ(すなわち、デッドゾーンによるスカラー量子化)対RDOQのHEVCのパフォーマンスを示す。表1〜表4に示されたように、デッドゾーンによるスカラー量子化と比較して、RDOQは、3.4%から5.7%のパフォーマンス向上を実現することができる。
[0074]本開示の技法は、係数用の最適な量子化レベルを選択するRDOQ内のステップ(上記の説明のステップ(3))を簡略化することができる。上記のRDOQの説明の第3ステップ(すなわち、最適レベルの決定)から、複数のレベルのRDコストは、最適レベルを選択するために計算され得る。すなわち、ビデオエンコーダ20は、RDOQの第3ステップ内のRDコストに基づいて、Level、Level−1、または0から最適レベルを選択することができる。
[0075]本開示の技法によれば、ビデオエンコーダ20は、係数ブロックの係数ごとに、係数の値が係数の復元された値よりも小さい場合のみ、係数の量子化レベルとしてLevelと、Level−1と、0とを使用するRDコストを計算し得る。係数の復元された値は、係数についての量子化レベルを生成する際に使用されるステップサイズによって乗算された係数についての量子化レベル(Level)に等しい。言い換えれば、係数の値が係数の復元された値以上であることをビデオエンコーダ20が決定した場合、ビデオエンコーダ20は、Level、Level−1、および0についてRDコストを計算しないが、代わりに、係数についての量子化レベルとしてLevelを単に選択し得、このことは、係数についての最適な量子化レベルの選択を簡略化し得る。言い換えれば、ビデオエンコーダ20は、Level、Level−1、または0になるように係数を量子化するためのレートひずみコストを決定せずに、係数が初期量子化レベル(すなわち、Level)と量子化ステップサイズの値との積よりも小さいとの決定に応答して、係数についての実際の量子化レベルが係数についての初期量子化レベルであると決定し得る。
[0076]係数の値が係数の復元された値よりも小さい場合のみ、係数についての量子化レベルとしてLevelと、Level−1と、0とを使用することのRDコストを計算することは、ビデオエンコーダが実行する乗算演算の数を削減することができる。同時に、ビットレートが過剰に増大しない。
[0077]したがって、本開示の技法によれば、ビデオエンコーダ20は、以下のステップを実行することによって、本開示のRDOQ技法を実施し得る。第1に、ビデオエンコーダ20は、コンテキストを初期化し得る:C1=1、C2=0。第2に、ビデオエンコーダ20は、逆対角走査順序で係数ブロックの係数を走査し得る。ビデオエンコーダ20が各係数を走査するとき、ビデオエンコーダ20は、1/2のオフセットを用いて係数を量子化し得る。第3に、ビデオエンコーダ20は、係数ブロック内の係数についての最適レベルを決定し得る。第4に、ビデオエンコーダ20は、最適な最終有意係数を決定し得る。ビデオエンコーダ20は、上述されたRDOQの第1ステップと、第2ステップと、第4ステップとを実行し得る。
[0078]しかしながら、第3ステップで係数用の最適レベルを決定するために、ビデオエンコーダ20は、以下のステップを実行し得る。第1に、ビデオエンコーダ20は、最終有意係数を決定し得る。逆対角走査順序で係数を走査する(すなわち、一般に、最も高い周波数の係数から最も低い周波数の係数まで進む)とき、最終有意係数は0でないレベルに量子化されている最初に遭遇した係数である。第2に、残りの非ゼロ係数ごとに、ビデオエンコーダ20は、係数についての量子化レベルのRDコストに基づいて、最適レベルを選択し得る。残りの係数は、逆対角走査順序に従って最終有意係数の後に存在する係数である。
[0079]係数(すなわち、現在の係数)についての最適な量子化レベルを選択するために、本開示の技法によれば、ビデオエンコーダ20は、以下のステップを実行し得る。第1に、ビデオエンコーダ20は、現在の係数の値がLevel*StepSizeよりも小さいかどうかを決定し得、ここで、Levelはステップ(2)で決定された現在の係数用の量子化レベルであり、StepSizeは現在の係数を量子化するために使用される量子化ステップΔのサイズである。言い換えれば、ビデオエンコーダ20は、現在の係数の値が現在の係数の復元された値よりも小さいかどうかを決定し得る。現在の係数の値が現在の係数の復元された値よりも小さい場合、ビデオエンコーダ20は、現在の係数用の量子化レベルが3よりも小さいかどうかを決定し得る。
[0080]現在の係数が3よりも小さいとの決定に応答して、ビデオエンコーダ20は、現在の係数を値Levelと取り換えることから生じるはずのRDコストを計算し得、ここで、Levelは現在の係数についての量子化レベルを表す。さらに、現在の係数が3よりも小さいとの決定に応答して、ビデオエンコーダ20は、現在の係数を値Level−1と取り換えることから生じるはずのRDコストを計算し得る。現在の係数が3よりも小さいとの決定に応答して、ビデオエンコーダ20はまた、現在の係数を値0と取り換えることから生じるはずのRDコストを決定し得る。
[0081]現在の係数用の量子化レベルが3以上であるとの決定に応答して、ビデオエンコーダ20は、現在の係数を値Levelと取り換えることから生じるはずのRDコストを計算し得る。さらに、ビデオエンコーダ20は、現在の係数を値Level−1と取り換えることから生じるはずのRDコストを計算し得る。
[0082]ビデオエンコーダ20は、最も低いRDコストを有するバージョンとして現在の係数の最適な量子化レベルLoptを選択し得る。さらに、ビデオエンコーダ20は、最適な最終有意係数を決定する際に使用されるRDコストを更新し得る。すなわち、ビデオエンコーダ20は、係数ブロックのすべての係数を0に量子化すること(コーディングされていないブロックとなる)のRDコストを0に更新し得る。加えて、ビデオエンコーダ20は、係数ブロックの各係数を符号化するコストを更新し得る。ビデオエンコーダ20はまた、係数ブロックの有意性マップを符号化するコストを更新し得る。ビデオエンコーダ20は、現在の係数についての決定された最適な量子化レベル(Lopt)に基づいて、コンテキストを更新し得る。ビデオエンコーダ20は、係数ブロック内の次の係数のレベル決定においてコンテキストを使用することができる。
[0083]このようにして、ビデオエンコーダ20は、係数ブロックの係数についての初期量子化レベルを決定し得る。加えて、ビデオエンコーダ20は、係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定し得る。変換係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいとの決定に応答して、ビデオエンコーダ20は、係数を初期量子化レベルになるように量子化するレートひずみコスト、および係数を初期量子化レベルマイナス1になるように量子化するレートひずみコストを決定し得る。さらに、変換係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいとの決定に応答して、ビデオエンコーダ20は、計算されたレートひずみコストに基づいて、係数についての実際の量子化レベルを決定し得る。加えて、ビデオエンコーダ20は、係数ブロックの量子化バージョン内に実際の量子化レベルを含め得る。
[0084]上述されたように、RDOQアルゴリズムは2つの主要なパスを有する。1番目のパスは、個別の係数のRDコストに基づいて、Level、Level−1、および0の中から最適な量子化レベルを選択することである。固定された量子化ステップの場合、ビデオエンコーダ20は、常に、量子化レベルがRDOQアルゴリズムによって決定されたレベルに等しいように量子化オフセットを選択し得る。2番目のパスは、ブロックのRDコストに基づいて、最適な最終有意係数を選択することである。本開示のさらなる技法は、RDOQアルゴリズムの第1ステップを取り換えることによって、RDOQアルゴリズムを簡略化することができる。すなわち、本開示のさらなる技法は、係数についての最適な量子化レベルを選択するRDOQ内のステップを簡略化することができる。詳細には、量子化レベルがRDOQの1番目のパスで決定された最適レベルに等しいように量子化オフセットが調整された場合、1番目のパスのレベル決定に関わる複雑さは低減され得る。
[0085]RDOQのパフォーマンスを近似することができる量子化オフセットを決定するために、RDOQの(最終有意係数の決定において、いくつかのレベルが0に設定される)ステップ3およびステップ4でLevel、Level−1、または0が選択される回数は、周波数の係数ごとに収集され得る。このようにして、選択されているLevel、Level−1、または0のランクは、各々の異なる周波数での係数ごとに取得され得る。量子化オフセットが1/2、1/3、および1/6に限定される場合、ビデオエンコーダ20は、下記の表5に示されたように量子化オフセットを選択し得る。下記の表5は、Level、Level−1、または0がRDOQで選択された回数のランクに基づく量子化オフセットの例示的な決定を示す。いくつかの例では、表5はテストビデオデータに基づいて生成される。他の例では、表5はビデオエンコーダ20によって動的に生成される。
たとえば、Levelが係数ブロックの位置(I,J)にある係数について最も頻繁に選択された場合、量子化オフセット1/2が、位置(I,J)に設定され得る。そうではなく、Level−1または0がRDOQで最も頻繁に選択された場合、量子化オフセットは1/3または1/6に設定され得る。このようにして、ほぼ最適な量子化オフセットテーブルが生成され得る。
[0086]したがって、本開示のさらなる技法によれば、参照テーブルが生成される。いくつかの例では、ビデオエンコーダ20は参照テーブルを生成する。参照テーブルは、変換係数の位置を量子化オフセットにマッピングし得る。参照テーブルは、従来のRDOQ技法が係数ブロック内の様々な位置にある係数についての量子化オフセットを使用するレートに基づいて生成され得る。量子化オフセットの例には、1/2、1/3、および1/6が含まれ得る。すなわち、参照テーブルは、3つの可能な量子化オフセットの値:1/2、1/3、および1/6のうちの1つに係数の位置をマッピングし得る。ビデオエンコーダ20は、係数ブロック内のそれぞれの係数のそれぞれの位置を使用して、参照テーブル内でそれぞれの係数用のそれぞれの量子化オフセットを参照することができる。さらに、ビデオエンコーダ20は、1つまたは複数のそれぞれの係数についてのそれぞれの量子化オフセットに少なくとも部分的に基づいて、それぞれの係数についてのそれぞれの量子化レベルを決定することができる。
[0087]ビデオエンコーダ20が参照テーブルを使用して係数(すなわち、現在の係数)についての量子化オフセットを参照した後、ビデオエンコーダ20は、下記に再掲された等式(1)を使用して、現在の係数用の最適な量子化レベル(L
opt)を決定し得る。
言い換えれば、値Levelを使用するか、Level−1を使用するか、または0を使用するかを決定した後、ビデオエンコーダ20は、表5と同様の表に従って上記の等式(1)の中のfについての値を選択し得る。このようにして、ビデオエンコーダ20は、現在の係数用の量子化レベル(すなわち、関数(1)に従って計算されるzの値)を計算し得る。ビデオエンコーダ20は、量子化係数ブロック内の現在の係数についての量子化レベルを使用し得る。
[0088]RDOQ技法では、ビデオエンコーダ20はRDコストを計算する。RDコストを計算することは、いくつかのダブルポイント(double point)の加算および乗算を必要とする場合がある。ダブルポイントの加算および乗算は、倍精度型のデータ(たとえば、浮動小数点数)を含む数の加算および乗算を必要とする演算である。ダブルポイントの乗算は、他のタイプの計算動作よりも多くの計算時間がかかる場合がある。その結果、係数ごとのRDOQ技法用の主要な計算は、第3ステップ(すなわち、係数用の最適レベルの決定)において行われる場合がある。RDOQ技法の第3ステップにおけるダブルポイントの乗算は、以下を含む。
・復元エラーDについての2つのダブルポイントの乗算。D=dError*dError*dTemp、ここで、dErrorはオリジナルの係数と復元された係数との差分であり、dTempはスケーリングファクタである。
・λ・Rlevelについての1つのダブルポイントの乗算、ここで、Rlevelは量子化レベルを符号化するために推定されたビットの数である。
・λ・Rsig_mapについての1つのダブルポイントの乗算、ここで、Rsig_mapは現在の係数についての有意性マップを符号化するために推定されたビットの数である。
・現在の係数が0に量子化された場合引き起こされるひずみについての2つのダブルポイントの乗算。
さらに、RDOQ技法の第4ステップ(すなわち、最適な最終有意係数の決定)における主要な計算は、λ・RpositionX+λ・RpositionYについての2つのダブルポイントの乗算を含み、ここで、RpositionXおよびRpositionYは、最終有意係数の位置を符号化するために推定されたビットの数である。λは定数であるが、Rがコンテキストモデルを更新するエントロピーとして推定されるので、ビデオエンコーダ20はλ・Rを計算する必要があり得る。
[0089]時間的に隣接するピクチャは、通常、大いに相関する。すなわち、隣接ピクチャは互いに似ている可能性がある。したがって、本開示の1つまたは複数の技法によれば、ビデオエンコーダ20は、現在のフレーム内のシンボル用のビット推定として、前のフレームのコンテキストモデルのエントロピーを使用することができる。このようにして、ビデオエンコーダ20がRDOQを実施するたびに、ビデオエンコーダ20がコンテキストモデルのエントロピーをロードする必要はない場合がある。同様に、ビデオエンコーダ20がTUごとにコンテキストモデルのエントロピーをロードする必要はない場合がある。むしろ、ビデオエンコーダ20が新しいフレームの符号化を開始するたびに、ビデオエンコーダ20は、コンテキストモデルのエントロピーをロードする場合がある。言い換えれば、ビデオエンコーダ20は、1フレーム当たり一度、ビット推定を実行し得る。言い換えれば、ビデオエンコーダ20は、1フレーム当たり一度、現在のフレーム内のシンボルについてビットの数を推定し得る。
[0090]λは定数なので、ビデオエンコーダ20は、各々の新しいフレームを符号化する最初に乗算テーブルを構築することによって、ダブルポイント乗算を回避することができる。乗算テーブルは参照テーブルであり得る。ビデオエンコーダ20は、インデックスとしてコンテキストを使用して、乗算テーブル内のλ・Rの値を参照し得る。RDOQにおけるRDコスト計算の間、ビデオエンコーダ20は、乗算テーブル内のRDコストを参照し得る。現在のコンテキストモデルと前のフレームのコンテキストモデルとの間に不一致が存在する可能性があるので、RDコスト内のビット推定は、正確ではない場合がある。しかしながら、時間的に隣接するビデオフレームが大いに相関するという事実により、不一致によってもたらされるパフォーマンス低下は比較的小さい可能性がある。
[0091]図2は、本開示に記載される技法を実装できる例示的なビデオエンコーダを示すブロック図である。図2は、説明の目的で提供され、本開示において広く例示され、記載される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオエンコーダ20を記載する。しかしながら、本開示の技法は、他のコーディング規格または方法にも適用可能であり得る。
[0092]図2の例では、ビデオエンコーダ20は、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、復元ユニット112と、フィルタユニット113と、復号ピクチャバッファ114と、エントロピー符号化ユニット116とを含む。エントロピー符号化ユニット116は、正規CABACコーディングエンジン118と、バイパスコーディングエンジン120とを含む。予測処理ユニット100は、インター予測処理ユニット121と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット121は、動き推定ユニット122と、動き補償ユニット124とを含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含む場合がある。
[0093]ビデオエンコーダ20は、ビデオデータを受信する。ピクチャを符号化することの一部として、ビデオエンコーダ20はスライス内の各コーディングツリーブロック(CTB)を符号化することができる。CTBを符号化することの一部として、予測処理ユニット100は、CTBに関連付けられた領域に対して四分木区分化を実行して、領域を漸進的により小さい領域に分割することができる。より小さい領域はCUに関連付けられ得る。たとえば、予測処理ユニット100は、CTBの領域を4つの等しいサイズのサブ領域に区分化し、サブ領域のうちの1つまたは複数を4つの等しいサイズのサブサブ領域に区分化することができ、以下同様である。
[0094]ビデオエンコーダ20は、ピクチャ内のCTBのCUを符号化して、CUの符号化表現(すなわち、コード化CU)を生成することができる。ビデオエンコーダ20は、z走査順序に従ってCTBのCUを符号化することができる。言い換えれば、ビデオエンコーダ20は、左上のCUと、右上のCUと、左下のCUと、次いで右下のCUとを、その順序で符号化することができる。ビデオエンコーダ20が区分化されたCUを符号化するとき、ビデオエンコーダ20は、z走査順序に従って、区分化されたCUのサンプルブロックのサブブロックに関連付けられたCUを符号化することができる。
[0095]さらに、CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUの中で、CUのサンプルブロックを区分化することができる。ビデオエンコーダ20およびビデオデコーダ30は、様々なPUサイズをサポートすることができる。特定のCUのサイズを2N×2Nと仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測の場合は2N×2NまたはN×NのPUサイズをサポートすることができ、インター予測の場合は2N×2N、2N×N、N×2N、N×N、または同様の対称のPUサイズをサポートすることができる。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測用の2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズ用の非対称区分化をサポートすることができる。
[0096]インター予測処理ユニット121は、CUの各PUに対してインター予測を実行することによって、PU用の予測データを生成することができる。PU用の予測データは、そのPUに対応する予測サンプルブロックと、そのPUについての動き情報とを含むことができる。スライスは、Iスライス、Pスライス、またはBスライスであり得る。インター予測ユニット121は、PUがIスライス内にあるか、Pスライス内にあるか、またはBスライス内にあるかに応じて、CUのPUについて異なる演算を実行することができる。Iスライスでは、すべてのPUがイントラ予測される。したがって、PUがIスライス内にある場合、インター予測ユニット121は、PUに対してインター予測を実行しない。
[0097]PUがPスライス内にある場合、動き推定ユニット122は、PU用の参照ブロックについて参照ピクチャのリスト(たとえば、「リスト0」)内の参照ピクチャを検索し得る。参照ピクチャ用のデータは、復号ピクチャバッファ114に記憶され得る。PUの参照ブロックは、PUのサンプルブロックに最も密接に対応するサンプルブロックであり得る。動き推定ユニット122は、PUの参照ブロックを含む、リスト0内の参照ピクチャを示す参照ピクチャインデックスと、PUのサンプルブロックと参照ブロックとの間の空間変位を示す動きベクトルとを生成し得る。動き推定ユニット122は、PUの動き情報として、参照ピクチャインデックスと動きベクトルとを出力し得る。動き補償ユニット124は、PUの動き情報によって示される参照ブロックに少なくとも部分的に基づいて、PUの予測サンプルブロックを生成し得る。
[0098]PUがBスライス内にある場合、動き推定ユニット122は、PUについて単方向インター予測または双方向インター予測を実行することができる。PUについて単方向インター予測を実行するために、動き推定ユニット122は、PU用の参照ブロックを求めて、第1の参照ピクチャリスト(「リスト0」)または第2の参照ピクチャリスト(「リスト1」)の参照ピクチャを検索し得る。動き推定ユニット122は、参照ブロックを含む参照ピクチャのリスト0またはリスト1内の位置を示す参照ピクチャインデックスと、PUのサンプルブロックと参照ブロックとの間の空間的変位を示す動きベクトルと、参照ピクチャがリスト0内にあるか、またはリスト1内にあるかを示す予測方向インジケータとを、PUの動き情報として出力し得る。
[0099]PUについて双方向インター予測を実行するために、動き推定ユニット122は、PU用の参照ブロックを求めてリスト0内の参照ピクチャを検索し得、PU用の別の参照ブロックを求めてリスト1内の参照ピクチャを検索することもできる。動き推定ユニット122は、これらの参照ブロックを含む参照ピクチャのリスト0およびリスト1内の位置を示す参照ピクチャインデックスを生成し得る。加えて、動き推定ユニット122は、参照ブロックとPUのサンプルブロックとの間の空間的変位を示す動きベクトルを生成し得る。PUの動き情報は、PUの参照ピクチャインデックスと動きベクトルとを含み得る。動き補償ユニット124は、PUの動き情報によって示される参照ブロックに基づいて、PUの予測サンプルブロックを生成し得る。
[0100]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PU用の予測データを生成し得る。PU用の予測データは、PU用の予測サンプルブロックと様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス内、Pスライス内、およびBスライス内のPUに対してイントラ予測を実行し得る。
[0101]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PU用の予測データの複数のセットを生成し得る。イントラ予測モードを使用してPU用の予測データのセットを生成するために、イントラ予測処理ユニット126は、そのイントラ予測モードに関連付けられた方向にPUのサンプルブロック全体にわたって、隣接PUのサンプルブロックからのサンプルを拡張し得る。隣接PUは、PU、CU、およびCTBについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左であり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば33個の方向のイントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUのサンプルブロックのサイズに依存する場合がある。
[0102]予測処理ユニット100は、PUのためにインター予測処理ユニット121によって生成された予測データ、またはPUのためにイントラ予測処理ユニット126によって生成された予測データの中から、CUのPU用の予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみ測定基準に基づいて、CUのPU用の予測データを選択する。選択された予測データの予測サンプルブロックは、本明細書では、選択された予測サンプルブロックと呼ばれる場合がある。
[0103]残差生成ユニット102は、CUのサンプルブロックおよびCUのPUの選択された予測サンプルブロックに少なくとも部分的に基づいて、CUの残差サンプルブロックを生成し得る。たとえば、残差生成ユニット102は、残差サンプルブロック内の各サンプルが、CUのサンプルブロック内のサンプルとCUのPUの選択された予測サンプルブロック内の対応するサンプルとの間の差分に等しい値を有するように、CUの残差サンプルブロックを生成することができる。
[0104]予測処理ユニット100は、四分木区分化を実行して、CUの残差サンプルブロックをサブブロックに区分化し得る。各々の分割されていない残差サンプルブロックは、CUのTUに関連付けられ得る。CUのTUに関連付けられた残差サンプルブロックのサイズおよび位置は、CUのPUのサンプルブロックのサイズおよび位置に基づいても、基づかなくてもよい。
[0105]CUは、ルーマサンプルの1つのブロックおよびクロマサンプルの2つのブロックに関連付けられるので、TUの各々は、ルーマサンプルのブロックおよびクロマサンプルの2つのブロックに関連付けられ得る。変換処理ユニット104は、TUに関連付けられた残差サンプルブロックに1つまたは複数の変換を適用することによって、CUのTUごとに係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付けられた残差サンプルブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を残差サンプルブロックに適用し得る。
[0106]量子化ユニット106は、係数ブロック内の係数を量子化し得る。量子化プロセスは、係数の一部または全部に関連するビット深度を削減することができる。たとえば、nビットの係数は、量子化の間にmビットの係数に端数を切り捨てられ得、ここで、nはmよりも大きい。量子化ユニット106は、CUに関連付けられた量子化パラメータ(QP)の値に少なくとも部分的に基づいて、CUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられたQPの値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整することができる。本開示の技法によれば、量子化ユニット106は、図1に関して上記で説明されたように、参照テーブルを使用して、かつ/または修正されたRDOQプロセスに従って、係数用の量子化レベルの値を選択するように構成され得る。
[0107]逆量子化ユニット108と逆変換処理ユニット110は、係数ブロックにそれぞれ逆量子化と逆変換とを適用して、係数ブロックから残差サンプルブロックを復元し得る。復元ユニット112は、復元された残差サンプルブロックのサンプルを、予測処理ユニット100によって生成された1つまたは複数の予測サンプルブロックからの対応するサンプルに追加して、TUに関連付けられた復元サンプルブロックを生成し得る。このようにしてCUのTUごとにサンプルブロックを復元することによって、ビデオエンコーダ20は、CUのサンプルブロックを復元し得る。
[0108]フィルタユニット113は、デブロッキング動作を実行して、CUに関連付けられたサンプルブロック内のブロッキングアーティファクトを低減することができる。復号ピクチャバッファ114は、復元サンプルブロックを記憶することができる。インター予測ユニット121は、復元サンプルブロックを含む参照ピクチャを使用して、他のピクチャのPUに対してインター予測を実行し得る。加えて、イントラ予測処理ユニット126は、復号ピクチャバッファ114内の復元サンプルブロックを使用して、CUと同じピクチャ内の他のPUに対してイントラ予測を実行し得る。
[0109]エントロピー符号化ユニット116は、ビデオエンコーダ20の他の機能構成要素からデータを受け取ることができる。たとえば、エントロピー符号化ユニット116は、量子化ユニット106から係数ブロックを受け取り、予測処理ユニット100からシンタックス要素を受け取る。エントロピー符号化ユニット116は、このデータに対して1つまたは複数のエントロピー符号化演算を実行して、エントロピー符号化データを生成し得る。たとえば、エントロピー符号化ユニット116は、コンテキスト適応型可変長コーディング(CAVLC)演算、CABAC演算、可変長−可変長(V2V)コーディング演算、シンタックスベースのコンテキスト適応型バイナリ算術コーディング(SBAC)演算、確率間隔区分化エントロピー(PIPE)コーディング演算、または別のタイプのエントロピー符号化演算をデータに対して実行することができる。ビデオエンコーダ20は、エントロピー符号化ユニット116によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。
[0110]図3は、本開示の技法を実装できる例示的なビデオデコーダ30を示すブロック図である。図3は、説明の目的で提供され、本開示において広く例示され、記載される技法に対する限定ではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30を記載する。しかしながら、本開示の技法は、他のコーディング規格または方法にも適用可能であり得る。
[0111]図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、復元ユニット158と、フィルタユニット159と、復号ピクチャバッファ160とを含む。予測処理ユニット152は、動き補償ユニット162と、イントラ予測処理ユニット164とを含む。エントロピー復号ユニット150は、正規CABACコーディングエンジン166と、バイパスコーディングエンジン168とを含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含む場合がある。
[0112]ビデオデコーダ30はビットストリームを受信することができる。エントロピー復号ユニット150は、ビットストリームをパース(parse)して、ビットストリームからシンタックス要素を抽出することができる。加えて、エントロピー復号ユニット150は、ビットストリーム内のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、復元ユニット158、およびフィルタユニット159は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
[0113]加えて、ビデオデコーダ30は、区分化されていないCUに対して復元動作を実行することができる。区分化されていないCUに対して復元動作を実行するために、ビデオデコーダ30は、CUの各TUに対して復元動作を実行し得る。CUのTUごとに復元動作を実行することによって、ビデオデコーダ30は、CUの残差サンプルブロックを復元し得る。
[0114]CUのTUに対して復元動作を実行することの一部として、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち逆量子化(de-quantize)し得る。逆量子化ユニット154は、TUのCUに関連付けられたQPの値を使用して、量子化の程度を決定し、同様に、逆量子化ユニット154が適用するための逆量子化の程度を決定し得る。逆量子化ユニット154は、従来の逆量子化プロセスに従って係数を逆量子化し得、RDOQプロセスまたは参照テーブルを利用して、係数用の逆量子化値を決定する必要がない。このようにして、本開示の技法は、ビデオデコーダ30が修正なしに復号できる標準準拠のビットストリームを生成するために使用され得る。
[0115]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUに関連付けられた残差サンプルブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向性変換、または別の逆変換を、係数ブロックに適用し得る。
[0116]PUがイントラ予測を使用して符号化される場合、イントラ予測処理ユニット164は、イントラ予測を実行してPU用の予測サンプルブロックを生成し得る。イントラ予測処理ユニット164は、イントラ予測モードを使用して、空間的に隣接するPUのサンプルブロックに基づいて、PU用の予測サンプルブロックを生成し得る。イントラ予測処理ユニット164は、ビットストリームからパースされた1つまたは複数のシンタックス要素に基づいて、PU用のイントラ予測モードを決定し得る。
[0117]動き補償ユニット162は、ビットストリームから抽出されたシンタックス要素に少なくとも部分的に基づいて、第1の参照ピクチャリスト(リスト0)と第2の参照ピクチャリスト(リスト1)とを構築し得る。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PU用の動き情報を抽出し得る。動き補償ユニット162は、PUの動き情報に基づいて、PU用の1つまたは複数の参照ブロックを決定し得る。動き補償ユニット162は、PU用の1つまたは複数の参照ブロックに少なくとも部分的に基づいて、PU用の予測サンプルブロックを生成し得る。
[0118]復元ユニット158は、CUのTUに関連付けられた残差サンプルブロックと、CUのPUの予測サンプルブロック、すなわち適用可能な場合イントラ予測データまたはインター予測データとを使用して、CUのサンプルブロックを復元し得る。詳細には、復元ユニット158は、残差サンプルブロックのサンプルを予測サンプルブロックの対応するサンプルに追加して、CUのサンプルブロックを復元し得る。
[0119]フィルタユニット159は、デブロッキング動作を実行して、CTBのCUのサンプルブロックに関連付けられたブロッキングアーティファクトを低減することができる。ビデオデコーダ30は、復号ピクチャバッファ160にCUのサンプルブロックを記憶することができる。復号ピクチャバッファ160は、次の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上の提示のために、参照ピクチャを提供することができる。たとえば、ビデオデコーダ30は、復号ピクチャバッファ160内のサンプルブロックに少なくとも部分的に基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
[0120]図4は、デッドゾーンによるスカラー量子化を示す概念図である。図4の例では、各円は復元値W’を示し、各垂直線は決定レベルを示す。図4からわかるように、量子化オフセットfは、デッドゾーン(すなわち、0にマッピングする間隔)のサイズを制御する。量子化オフセットfはまた、間隔の中心から離れるように復元レベルをシフトする。
[0121]図4の例は、f=Δ/2およびf=Δ/3であるケースを示し、ここで、fは上述された公式(1)による量子化オフセットを表す。量子化オフセットがf=Δ/2からf=Δ/3に減少したとき、デッドゾーンは増大し、復元レベルは0に向かってシフトすることが、図4の例から観察され得る。復元エラーを最小化するために、復元された値は、変換された係数の分布に対する間隔の平均に等しい場合がある。変換された係数の分布は、ラプラス分布としてモデル化され得る。すなわち、最小の復元エラーを与える量子化オフセットfは、Δ/2よりも小さくなるべきである。加えて、量子化オフセットfをΔ/2よりも小さくすることによって、元々レベルnに量子化された係数は、n−1に量子化され得る。HEVCでは、量子化オフセットfは、経験的に、イントラモードの場合Δ/3に、インターモードの場合Δ/6に設定される。
[0122]図5は、量子化オフセットとレベル決定とを示す概念図である。言い換えれば、図5は、量子化オフセットと結果として生じたレベルとの間の関係を示す。図5の例では、垂直バー250は、量子化オフセットがΔ/2であるときの決定レベルを示す。(破線の垂直バーとして図5に示されたように)量子化オフセットが変化するにつれて、値がどこに入るかに応じて、値はレベルnまたはレベルn−1として量子化され得る。値がn・Δから(n+1/2)・Δまでの範囲に入った場合、量子化オフセットが何であれ、量子化レベルは、ゾーン252によって図5に示されたように、nのままであり得る。値が(n−1/2)・Δからn・Δからまでの範囲(ゾーン254)に入った場合、量子化オフセットおよび値がどこに入ったかに応じて、量子化レベルはnまたはn−1であり得る。
[0123]図6は、本開示の1つまたは複数の技法により、係数を量子化する例示的な動作300を示すフローチャートである。図6の例では、量子化ユニット106は、係数ブロックの係数用の初期量子化レベルを決定し得る(302)。係数は、係数ブロック内の逆走査順序で第1の非ゼロ係数の後に存在し得る。さらに、量子化ユニット106は、係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定し得る(304)。
[0124]変換係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいとの決定(304の「はい」)に応答して、量子化ユニット106は、初期量子化レベルが3よりも小さいかどうかを決定し得る(305)。初期量子化レベルが3よりも小さいとの決定(305の「はい」)に応答して、量子化ユニット106は、係数を該係数についての初期量子化レベルになるように量子化するレートひずみコスト、該係数を初期量子化レベルマイナス1になるように量子化するレートひずみコスト、および該係数をゼロになるように量子化するレートひずみコストを決定する(306)。したがって、初期量子化レベルが3よりも小さいとの決定に応答して、量子化ユニット106は、係数を該係数についての初期量子化レベルに量子化するレートひずみコスト、該係数を初期量子化レベルマイナス1になるように量子化するレートひずみコスト、および該係数をゼロになるように量子化するレートひずみコストを決定することができる。さらに、初期量子化レベルが3よりも小さくないとの決定(305の「いいえ」)に応答して、量子化ユニット106は、係数を初期量子化レベルになるように量子化するレートひずみコスト、および該係数を初期量子化レベルマイナス1になるように量子化するレートひずみコストを決定することができる(308)。すなわち、初期量子化レベルが3以上であることの決定に応答して、量子化ユニット106は、係数を初期量子化レベルになるように量子化するレートひずみコスト、および該係数を初期量子化レベルマイナス1になるように量子化するレートひずみコストを決定することができる。より一般的には、量子化ユニット106は、係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定し得る。変換係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さいとの決定に応答して、量子化ユニット106は、係数を初期量子化レベルになるように量子化するレートひずみコスト、および係数を初期量子化レベルマイナス1になるように量子化するレートひずみコストを決定し得る。
[0125]アクション306またはアクション308を実行した後、量子化ユニット106は、計算されたレートひずみコストに少なくとも部分的に基づいて、係数用の実際の量子化レベルを決定し得る(310)。アクション306もしくはアクション308とアクション310とを実行した後、または係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さくないとの決定(304の「いいえ」)に応答して、量子化ユニット106は、係数ブロックの量子化バージョンに実際の量子化レベルを含め得る(312)。係数が初期量子化レベルと量子化ステップサイズの値との積よりも小さくない場合、実際の量子化レベルは、係数用の初期量子化レベルであり得る。加えて、量子化ユニット106は、実際の量子化レベルをエントロピー符号化(たとえば、CABAC符号化)し得る(314)。量子化ユニット106は、エントロピー符号化された実際の量子化レベルを含むビットストリームを出力し得る(316)。
[0126]図7は、本開示の1つまたは複数の技法により、係数ブロックの係数を量子化する例示的な動作350を示すフローチャートである。図7の動作350は、図6の動作300の技法と同様の技法を実施することができる。図7の例では、量子化ユニット106は、C1=1、C2=0などのコンテキストを初期化し得る(352)。量子化ユニット106は、RDコストを決定する際にコンテキストを使用し得る。さらに、量子化ユニット106は、逆対角走査順序で係数ブロックの係数を走査し、1/2の量子化オフセットを使用して係数ブロック内の係数を量子化し得る(354)。次に、量子化ユニット106は、係数ブロックの最終有意係数を決定し得る(356)。最終有意係数は、逆走査順序で最初の非ゼロ変換係数であり得る。逆対角走査順序で係数を走査する(すなわち、一般に、最も高い周波数の係数から最も低い周波数の係数まで進む)とき、最終有意係数はゼロでないレベルに量子化されている最初に遭遇した係数である。
[0127]係数ブロックの最終有意係数を決定した後、量子化ユニット106は、図8に示された動作350の一部を実行し得る。図8は、本開示で後で詳細に記載される。量子化ユニット106が図8に示された動作350の一部を実行するとき、量子化ユニット106は、それぞれの残りの非ゼロ係数ごとに、それぞれの残りの非ゼロ係数用の最適レベルを決定することができる。図8に関して下記に記載されるように、量子化ユニット106は、それぞれの残りの非ゼロ係数用の量子化レベルのRDコストに少なくとも部分的に基づいて、それぞれの残りの非ゼロ係数用の最適レベルを決定し得る。残りの係数は、逆対角走査順序に従って最終有意係数の後に存在する係数である。
[0128]図8に示された動作350の一部を実行した後、量子化ユニット106は、現在のブロックがコーディングされていない場合、RDコストに等しくなるように最良コード値を初期化し得る(358)。すなわち、量子化ユニット106は、係数ブロックの各係数を0に量子化することからもたらされるはずのRDコストを決定し得る。量子化ユニット106は、このRDコストに等しくなるように最良コード値を設定し得る。
[0129]加えて、量子化ユニット106は、現在の係数インジケータを初期化し得る(360)。いくつかの例では、量子化ユニット106は、係数ブロックの最後の係数(たとえば、右下の係数)を示すように現在の係数インジケータを初期化し得る。現在の係数インジケータは、係数ブロック内の係数を示す。本開示は、現在の係数インジケータによって示される係数を現在の係数と呼ぶ場合がある。
[0130]次に、量子化ユニット106は、現在の係数が1よりも大きい量子化レベルを有するかどうかを決定し得る(362)。現在の係数が1よりも大きい量子化レベルを有するとの決定(362の「はい」)に応答して、量子化ユニット106は、動作350を終了し得る。一方、現在の係数が1よりも大きい量子化レベルを有していないとの決定(362の「いいえ」)に応答して、量子化ユニット106は、現在の係数が最終有意係数である場合もたらされるはずの合計ブロックRDコストを計算し得る(364)。ここで、合計ブロックRDコストは、次のように計算され得る。
ここで、Nは現在のTU内の係数の合計数であり、CiはTU内の係数iであり、λは定数であり、Riは係数Ciの量子化レベルを符号化するビットの数であり、Rposx、Rposy は、最終有意係数用の位置xとyとを符号化するビットの数であり、Rsignificance_mapは、有意性マップを符号化するビットの数である。
[0131]さらに、量子化ユニット106は、計算された合計ブロックRDコストが最良コスト値よりも小さいかどうかを決定し得る(366)。計算された合計ブロックRDコストが最良コスト値よりも小さいとの決定(366の「はい」)に応答して、量子化ユニット106は、最良の最終位置インジケータを現在の位置に設定し得、最良コスト値を計算された合計ブロックRDコストに設定し得る(368)。現在の位置は、現在の係数の係数ブロック内の位置である。
[0132]最良の最終位置インジケータと最良コスト値とを設定した後、または計算された合計ブロックRDコストが最良コスト値よりも小さいくないと決定した(366の「いいえ」)後、量子化ユニット106は、現在の係数インジケータが逆対角走査順序に従って係数ブロック内の次の係数を示すように、現在の係数インジケータを更新し得る(370)。次いで、量子化ユニット106は、現在の係数が1よりも大きい量子化レベルを有するかどうかを再び決定し得る(362)。このようにして、量子化ユニット106がその量子化レベルが1よりも大きい係数に遭遇するまで、量子化ユニット106は、逆対角走査順序に従って係数ブロックの係数を走査し得る。
[0133]図8は、図7の動作350の例示的な一部を示すフローチャートである。図8の例で示されたように、量子化ユニット106は、係数ブロック内にいくつかの残りの非ゼロ係数が存在するがどうかを決定し得る(400)。係数ブロック内に残りの非ゼロ数が存在しないとの決定(400の「いいえ」)に応答して、量子化ユニット106は、係数ブロック内の各係数の最適値を決定した可能性があり、したがって、図7に示された動作350の一部の実行を継続することができる。
[0134]一方、係数ブロック内に1つまたは複数の残りの非ゼロ係数が存在するとの決定(400の「はい」)に応答して、量子化ユニット106は、現在の係数の現在の値が現在の係数の復元された値よりも小さいかどうかを決定し得る(402)。現在の係数の現在の値は、量子化より前の現在の係数の値であり得る。現在の係数の復元された値は、Level*StepSizeに等しく、ここで、Levelは、図7のアクション354で決定されたように、現在の係数についての量子化レベルである。StepSizeは、現在の係数を量子化するために使用される量子化ステップΔのサイズである。
[0135]現在の係数の現在の値が現在の係数の復元された値よりも小さいとの決定(402の「はい」)に応答して、量子化ユニット106は、現在の係数の量子化レベル(Level)が3よりも小さいかどうかを決定し得る(404)。現在の係数用の量子化レベルが3よりも小さいとの決定(404の「はい」)に応答して、量子化ユニット106は、現在の係数を0と取り換えるためのRDコストを決定し得る(406)。現在の係数を0と取り換えるためのRDコストを決定した後、または現在の係数用の量子化レベルが3よりも小さくないとの決定(404の「いいえ」)に応答して、量子化ユニット106は、現在の係数を現在の係数用の量子化レベル(すなわち、Level)と取り換えるためのRDコストを決定し得る(408)。加えて、量子化ユニット106は、現在の係数を現在の係数用の量子化レベル(すなわち、Level−1)と交換するためのRDコストを決定し得る(410)。さらに、量子化ユニット106は、現在の係数用の最適な量子化レベルを、Level、Level−1、および0のうちの最も低いRDコストを有しているいずれかとして選択し得る(412)。このようにして、量子化ユニット106は、最も低いレートひずみコストをもたらす実際の量子化レベルを選択し得る。
[0136]現在の係数用の最適な量子化レベルを選択した後、または現在の係数の現在の値が現在の係数の復元された値よりも小さくないとの決定(402の「いいえ」)に応答して、量子化ユニット106は、係数ブロックのすべての係数を0に量子化するRDコストを更新し得る(414)。加えて、量子化ユニット106は、係数ブロックの各係数を符号化するRDコストを更新し得る(416)。量子化ユニット106は、係数ブロックの以前処理された係数のRDコストの現行の総和に現在の係数のRDコストを加算することによって、係数ブロックの各係数を符号化するRDコストを更新し得る。さらに、量子化ユニット106は、係数ブロックの有意性マップを符号化するRDコストを更新し得る(418)。量子化ユニット106は、係数ブロックのすべての係数を0に量子化するRDコスト、係数ブロックの各係数を符号化するRDコスト、および係数ブロックの有意性マップを符号化するRDコストに少なくとも部分的に基づいて、現在のブロックの最終有意係数の最適値を決定し得る。
[0137]加えて、量子化ユニット106は、現在の係数用の決定された最適な量子化レベルに基づいて、コンテキストを更新し得る(420)。量子化ユニット106は、係数ブロック内の次の係数のレベル決定においてコンテキストを使用し得る。コンテキストを更新した後、量子化ユニット106は、いくつかの残りの非ゼロ係数が存在するかどうかを再び決定し得る(400)。このようにして、量子化ユニット106は、係数ブロック内の係数の各々の最適値を決定し得る。
[0138]こうして、図7および図8の動作350では、RDOQ技法の第3ステップ(すなわち、係数用の最適レベルの決定)は、以下のように簡略化され得る。
3.最適レベルの決定
I.最終有意係数を固定する:逆対角走査で非ゼロに量子化された最初の係数。
II.逆対角走査で残っている非ゼロ係数について、RDコストに基づいて最適レベルを選択する。
a.currentValue<Level*StepSize、すなわちcurrentValue<reconstructedValueの場合、最良レベルLLoptを選択する。
i.Level<3の場合、Level、Level−1、および0のRDコストを計算する。
ii.Level>=3の場合、Level、Level−1のRDコストを計算する。
b.符号化コストを更新する。
i.(コーディングされていないブロックの場合)0に量子化するコスト。
ii.各係数を符号化するコスト。
iii.有意性マップを符号化するコスト。
c.決定されたレベルLoptに基づいてコンテキストを更新する。コンテキストは、次の係数のレベル決定によって使用される。
III.次の係数を符号化し、ステップIIに進む。
[0139]図6〜図8の例示的な技法のパフォーマンスが下記表6〜表9に示される。表6〜表9に示されたように、図6〜図8の技法を実施することによって被るRDパフォーマンス低下はほとんどない。さらに、レベル決定の節約Level
saveが計算され得る。Level
saveは次のように定義される。
は、n・Δから(n+1/2)・Δまでの範囲に入る値の数であり、N
totalは、レベル決定が実行された値の合計数である。実験結果は、Level
saveが60%と80%との間であることを示す。すなわち、レベル決定の60%から80%はスキップされ得、RDOQに関与する計算は削減されている。
[0140]図9は、本開示の1つまたは複数の技法により、係数ブロックの係数を量子化する例示的な動作450を示すフローチャートである。ビデオエンコーダ20は、図6の動作300または図7および図8の動作350を実行することの代替として、動作450を実行することができる。
[0141]図9の例に示されたように、変換処理ユニット104は、係数ブロックを生成するために、残差サンプルブロックに1つまたは複数の変換を適用することができる(452)。加えて、変換処理ユニット104は、係数ブロック内のそれぞれの係数のそれぞれの位置を使用して、参照テーブル内で、それぞれの係数についてそれぞれの量子化オフセットを参照し得る(454)。いくつかの例では、係数ブロック内のそれぞれの位置について、それぞれの位置についての参照テーブル内のエントリーは、RDOQアルゴリズムが、他のテストデータの係数ブロック内でそれぞれの位置に配置された係数用の最適な量子化値として、Level、Level−1、または0をそれにより選択する周波数に少なくとも部分的に基づき、ここで、Levelは係数用の初期量子化値を表す。
[0142]さらに、量子化ユニット106は、1つまたは複数の係数についてのそれぞれの量子化オフセットに少なくとも部分的に基づいて、それぞれの係数についてのそれぞれの量子化レベルを決定し得る(456)。量子化ユニット106は、1つまたは複数の係数についての量子化レベルに関連付けられたコストに少なくとも部分的に基づいて、最適な最終有意係数を決定し得る(458)。エントロピー符号化ユニット116は、最適な最終有意係数に少なくとも部分的に基づいて、係数ブロックの有意性マップをエントロピー符号化し得る(460)。加えて、エントロピー符号化ユニット116は、最適な最終有意係数の係数ブロック内の位置の前にある係数ブロック内の位置を有する係数用の量子化レベルをエントロピー符号化し得る(462)。さらに、ビデオエンコーダ20は、エントロピー符号化された実際の量子化レベルを含むビットストリームを出力し得る(464)。
[0143]図10は、本開示の1つまたは複数の技法により、係数ブロックの係数を量子化する別の例示的な動作500を示すフローチャートである。動作500は、図9の動作450における技法と同様の技法を使用することができる。
[0144]図10の例に示されたように、量子化ユニット106は、コンテキストを初期化し得る(502)。前述のように、量子化ユニット106は、RDコストを決定する際にコンテキストを使用し得る。加えて、量子化ユニット106は、現在の係数インジケータを初期化し得る(504)。いくつかの例では、量子化ユニット106は、係数ブロックの最後の係数(たとえば、右下の係数)を示すように現在の係数インジケータを初期化し得る。現在の係数インジケータは、係数ブロック内の係数を示す。本開示は、現在の係数インジケータによって示された係数を現在の係数と呼ぶ場合がある。
[0145]次に、本開示の技法によれば、量子化ユニット106は、参照テーブルを使用して現在の係数用の量子化オフセットを決定し得る(506)。したがって、量子化ユニット106は、現在の係数の位置を使用して現在の係数用の量子化オフセットを参照し得る。いくつかの例では、参照テーブルは、係数ブロック内の位置ごとに量子化オフセットを含むことができる。そのような例では、係数ブロック内のそれぞれの位置について、それぞれの位置についての参照テーブル内の量子化オフセットは、他の係数ブロック内でそれぞれの位置にある係数がLevel、Level−1、または0に量子化される周波数に少なくとも部分的に基づき、ここで、Levelは係数用の初期量子化レベルである。
[0146]いくつかの例では、量子化ユニット106は、それぞれの係数ごとに、
を決定し、ここで、zはそれぞれの係数用の量子化レベルであり、Wはそれぞれの係数の初期値であり、fは係数用の量子化オフセットであり、Δは量子化ステップであり、
は、マイナス無限大に向かって最も近い整数への丸めを表し、sign()はそれぞれの係数の初期値の符号を返す関数である。
[0147]さらに、量子化ユニット106は、決定された量子化オフセットに少なくとも部分的に基づいて、現在の係数についての量子化レベル(Level)を決定し得る(508)。量子化ユニット106は、上記の等式(1)を使用して現在の係数用の量子化レベルを決定し得る。
[0148]次いで、量子化ユニット106は、係数ブロックのすべての係数を0に量子化するRDコストを更新し得る(510)。加えて、量子化ユニット106は、係数ブロックの各係数を符号化するRDコストを更新し得る(512)。さらに、量子化ユニット106は、係数ブロックの有意性マップを符号化するRDコストを更新し得る(514)。量子化ユニット106は、係数ブロックのすべての係数を0に量子化するRDコスト、係数ブロックの各係数を符号化するRDコスト、および係数ブロックの有意性マップを符号化するRDコストに少なくとも部分的に基づいて、現在のブロックの最終有意係数の最適値を決定し得る。
[0149]次いで、量子化ユニット106は、係数ブロック内にいくつかの残りの係数が存在するかどうかを決定し得る(516)。係数ブロック内に1つまたは複数の残りの係数が存在するとの決定(516の「はい」)に応答して、量子化ユニット106は、現在の係数インジケータが逆対角走査順序に従って係数ブロック内の次の係数を示すように、現在の係数インジケータを更新し得る(518)。次いで、量子化ユニット106は、再び参照テーブルを使用して、新しい現在の係数用の量子化オフセットを決定し得る(506)。このようにして、量子化ユニット160は、逆対角走査順序で係数用の量子化レベルを決定し得る。さらに、このようにして、量子化ユニット106は、係数ブロック内のそれぞれの残りの係数について、参照テーブルを使用してそれぞれの残りの係数についての量子化レベルを決定し、それぞれの残りの係数についての量子化レベルに少なくとも部分的に基づいて、それぞれの残りの係数についての量子化レベルを決定することができる。
[0150]一方、係数ブロック内に残りの係数がこれ以上存在しないとの決定(516の「いいえ」)に応答して、量子化ユニット106は、現在のブロックがコーディングされていない場合、RDコストに等しくなるように最良コード値を初期化し得る(520)。加えて、量子化ユニット106は、現在の係数インジケータを初期化することができる(522)。いくつかの例では、量子化ユニット106は、係数ブロックの最後の係数(たとえば、右下の係数)を示すように現在の係数インジケータを初期化し得る。現在の係数インジケータは、係数ブロック内の係数を示す。本開示は、現在の係数インジケータによって示された係数を現在の係数と呼ぶ場合がある。
[0151]次に、量子化ユニット106は、現在の係数が1よりも大きい量子化レベルを有するかどうかを決定し得る(524)。現在の係数が1よりも大きい量子化レベルを有するとの決定(524の「はい」)に応答して、量子化ユニット106は、動作500を終了し得る。一方、現在の係数が1よりも大きい量子化レベルを有していないとの決定(524の「いいえ」)に応答して、量子化ユニット106は、現在の係数が最終有意係数である場合もたらされるはずの合計ブロックRDコストを計算し得る(526)。
[0152]さらに、量子化ユニット106は、計算された合計ブロックRDコストが最良コスト値よりも小さいかどうかを決定し得る(528)。計算された合計ブロックRDコストが最良コスト値よりも小さいとの決定(528の「はい」)に応答して、量子化ユニット106は、最良の最終位置インジケータを現在の位置に設定し、最良コスト値を計算された合計ブロックRDコストに設定し得る(530)。現在の位置は、係数ブロック内の現在の係数の位置である。
[0153]最良の最終位置インジケータと最良コスト値とを設定した後、または計算された合計ブロックRDコストが最良コスト値よりも小さいくないと決定した(528の「いいえ」)後、量子化ユニット106は、現在の係数インジケータが逆対角走査順序に従って係数ブロック内の次の係数を示すように、現在の係数インジケータを更新し得る(532)。次いで、量子化ユニット106は、現在の係数が1よりも大きい量子化レベルを有するかどうかを再び決定し得る(524)。このようにして、量子化ユニット106が量子化レベルが1よりも大きい係数に遭遇するまで、量子化ユニット106は、逆対角走査順序に従って係数ブロックの係数を走査し得る。さらに、このようにして、1つまたは複数の係数用の量子化レベルに関連付けられたコストは、最終有意係数として1つまたは複数の係数のうちの各々を選択することに関連付けられたレートひずみコストを含む。
[0154]こうして、図10の動作は、以下の簡略化されたRDOQアルゴリズムを実施することができる。
1.コンテキストを初期化する:C1=1、C2=0。
2.量子化オフセットテーブルを参照し、逆対角走査順序で量子化テーブルからのオフセットを用いて係数を量子化する。
3.ステップ5における最終有意係数の決定のためのコスト計算。
1)(コーディングされていないブロックの場合)0に量子化するコスト。
2)各係数を符号化するコスト。
3)有意性マップを符号化するコスト。
4.次の係数を処理し、ステップ2に進む。
5.最適な最終有意係数の決定。
1)現在のブロックがコーディングされていない場合、RDコストになるようにd64BestCostを初期化する。
2)現在の係数が最終有意係数である場合、逆対角走査で、合計ブロックコストtotalCostを計算する。
3)totalCost<d64BestCostの場合、新しい最良の最終位置(iBestLastIdxP1)は現在位置であり、d64BestCost=totalCost。
4)LevelofCurCoeff>1まで反復する。
[0155]下記の表10〜表13は、RDOQがオンであるビデオエンコーダのパフォーマンスと比較して、スキップされたレベル決定(すなわち、RDOQの第3ステップ)と最適な最終有意係数とともに、1/2である量子化オフセットを有する、図9および図10の動作の例示的なパフォーマンスを示す。図9および図10の簡略化されたRDOQアルゴリズムとオリジナルのRDOQアルゴリズムとを比較すると、RDの最適レベルの選択は、ここで、オフセットによる量子化と交換される。これにより、RDのパフォーマンス低下が小さくなり、RDOQの複雑さが低減され得る。たとえば、ビデオエンコーダ20が1/2の量子化オフセットを選択し、レベル決定(すなわち、RDOQの第3ステップ)が省略された場合、RDOQと比較された図9および図10の技法のパフォーマンスは、表10〜表13に示されたように、1%から3%のRDパフォーマンス低下を示す。
[0156]下記の表14〜表17は、スキップされたレベル決定と最適な最終有意係数とを伴い、イントラの場合1/3、インターの場合1/6である量子化オフセットを有する、図9および図10の動作の例示的なパフォーマンスを示し、ここで、アンカーはRDOQオンを有する。すなわち、量子化オフセットがイントラモードの場合1/3、インターモードの場合1/6であるように選択された場合、表14〜表17は、RDパフォーマンス低下が1.9%から3.6%であることを示す。
[0157]下記の表18〜表21は、スキップされたレベル決定と最適な最終有意係数とを伴い、イントラの場合1/2、インターの場合1/6である量子化オフセットをもつ図9および図10の動作の例示的なパフォーマンスを示し、ここで、アンカーはRDOQオンを有する。すなわち、量子化オフセットがイントラモードの場合1/2、インターモードの場合1/6であるように選択された場合、RDパフォーマンス低下は、1%から2.5%であり得る。
[0158]図11は、本開示の1つまたは複数の技法による、例示的な符号化動作650を示すフローチャートである。図11は、主にRDOQに関与するモジュールを示す目的用である。したがって、いくつかのプロセスは図11の例から省略され、「中間処理」および「他の処理」などのブロックとして簡略化される。いくつかのビデオエンコーダは、TUごとに、CU/PU分割、モード決定、インター/イントラ予測などのいくつかの中間処理を実行した後、各コンテキストモデルのエントロピーを計算することによって、ビット推定を実行し得る。次いで、従来のビデオエンコーダは、推定されたビットを使用してRDOQを実施し得る。したがって、そのようなビデオエンコーダは、TUごとにビット推定を実行し、RDOQの間レートのコスト(λ・R)は常に計算される必要があり得る。
[0159]対照的に、ビデオエンコーダ20は、図11の動作650を実行するとき、ピクチャの符号化の最初に一度だけビット推定を実行し得る。次いで、ビデオエンコーダ20は、コンテキストモデルの各々について(λ・Rについての)乗算テーブルを生成し得る。後で、ビデオエンコーダ20がRDOQアルゴリズムを実施するとき、ビデオエンコーダ20は、乗算テーブル内の値を参照してRDコストを計算し得る。
[0160]図11の例では、ビデオエンコーダ20は、現在のフレームが最後のフレームであるかどうかを決定し得る(652)。現在のフレームが最後のフレームではないとの決定(652の「いいえ」)に応答して、ビデオエンコーダ20は、ビット推定動作を実行し得る(654)。ビデオエンコーダ20がビット推定動作を実行するとき、ビデオエンコーダ20は、前のフレームで使用されたコンテキストモデルのエントロピーに少なくとも部分的に基づいて、現在のフレームで使用される各コンテキストモデルのエントロピーを決定し得る。現在のフレームで使用されるそれぞれのコンテキストモデルについて、ビデオエンコーダ20は、それぞれのコンテキストモデルのエントロピーを使用して、適用可能な量子化レベル、有意性マップフラグ、最終有意係数(LSC)の位置XおよびLSCの位置Yのそれぞれについて、Rlevelの値と、Rsig_mapの値と、RpositionXの値と、RpositionYの値とをそれぞれ決定し得る。上述されたように、Rlevelは、量子化レベルを符号化するために推定されたビットの数である。Rsig_mapは、係数の有意性マップを符号化するために推定されたビットの数である。RpositionXおよびRpositionYは、最終有意係数の位置を符号化するために推定されたビットの数である。
[0161]ビット推定動作を実行した後、ビデオエンコーダ20は、乗算テーブルを生成し得る(656)。乗算テーブルは、コンテキストと量子化レベルの値との各組合せに対し、λ・Rlevelの値を指定し得る。加えて、乗算テーブルは、コンテキストと有意性マップフラグの値との各組合せに対し、λ・Rsig_mapの値を指定し得る。乗算テーブルはまた、コンテキストとLSCのX座標との各組合せに対し、λ・RpositionXの値を指定し得る。乗算テーブルはまた、コンテキストとLSCのY座標との各組合せに対し、λ・RpositionYの値を指定し得る。
[0162]乗算テーブルの生成に続いて、ビデオエンコーダ20は中間処理を実行し得る(658)。中間処理は、現在のフレームをCUに区分化することと、CUをPUおよびTUに区分化することと、PUについてインター予測モードまたはイントラ予測モードを選択することなどを含み得る。
[0163]次いで、ビデオエンコーダ20は、現在のフレームのあらゆるTUが処理されたかどうかを決定し得る(660)。現在のフレームのあらゆるTUが処理されていないとの決定(660の「いいえ」)に応答して、ビデオエンコーダ20は、現在のTUについてTU処理を実行し得る(662)。ビデオエンコーダ20が現在のTUについてTU処理を実行するとき、ビデオエンコーダ20は、TUの残差サンプルブロックに1つまたは複数の変換を適用し得る。
[0164]次いで、ビデオエンコーダ20は、現在のTUの係数ブロックに対してRDOQを実施し得る(664)。ビデオエンコーダ20が現在のTUの係数ブロックに対してRDOQを実施するとき、ビデオエンコーダ20は、係数ブロックの係数ごとに最適な量子化値を決定し得る。特定の係数用の最適な量子化値を決定するとき、ビデオエンコーダ20は、乗算テーブルを使用して、現在の量子化レベルのコンテキストおよび特定の係数についての量子化レベルについて、λ・Rlevelの値を参照し得る。さらに、特定の係数についての最適な量子化値を決定するとき、ビデオエンコーダ20は、乗算テーブルを使用して、当該特定の係数についての有意性マップフラグの値および現在の有意性マップフラグコンテキストについてのλ・Rsig_mapの値を調べる。加えて、最適な最終有意係数を決定するとき、ビデオエンコーダ20は、乗算テーブルを使用して、LSCの現在のLSCのx座標コンテキストおよびLSCのx座標について、λ・RpositionXの値を調べる。最適な最終有意係数を決定するとき、ビデオエンコーダ20は、乗算テーブルを使用して、LSCの現在のLSCのy座標コンテキストおよびLSCのy座標について、λ・RpositionYの値を調べる。図11の例の中の破線矢印は、RDOQの間の乗算テーブルの使用を示す。ダブルポイント乗算を実行してλ・Rlevelの値と、λ・Rsig_mapの値と、λ・RpositionXの値と、λ・RpositionYの値とを決定する代わりに、RDOQを実施するときλ・Rlevelの値と、λ・Rsig_mapの値と、λ・RpositionXの値と、λ・RpositionYの値とを調べることによって、RDOQを実施する計算時間が減少され得る。
[0165]現在のTUの係数ブロックに対してRDOQを実施した後、ビデオエンコーダ20は、任意の残りのTU処理を実行し得る(666)。残りのTU処理は、現在のTUの係数の量子化値を示すシンタックス要素をCABAC符号化することを含む場合がある。次いで、ビデオエンコーダ20は、現在のフレームのあらゆるTUが処理されたかどうかを再び決定し得る(660)。現在のフレームについてあらゆるTUが処理されたとの決定(660の「はい」)に応答して、ビデオエンコーダ20は、現在のフレームについて他の処理を実行し得る(668)。現在のフレームについての他の処理には、ループフィルタリング、ビットストリーム生成、および次のフレームの予測用の復元フレームを生成することなどが含まれ得る。現在のフレームについての他の処理を実行した後、ビデオエンコーダ20は、現在のフレームが最後のフレームであるかどうかを再び決定し得る(652)。現在のフレームが最後のフレームではない場合(652の「いいえ」)、ビデオエンコーダ20は、次のフレームに関してアクション654〜668を実行し得る。そうではなく、現在のフレームが最後のフレームであるとの決定(652の「はい」)に応答して、ビデオエンコーダ20は、動作650を終了し得る。
[0166]このようにして、量子化ユニット106は、前のフレームのコンテキストモデルのエントロピーに少なくとも部分的に基づいて、コンテキストモデル用のレート値を決定し得る。さらに、量子化ユニット160は、コンテキストモデルの各々について、当該コンテキストモデルについてのレート値によって乗算されたλの値を示すテーブルを生成し、ここで、λは固定値である。係数を該係数についての初期量子化レベルになるように量子化することのレートひずみコスト、該係数を初期量子化レベルマイナス1になるように量子化することのレートひずみコスト、および該係数をゼロになるように量子化することのレートひずみコストを決定することは、テーブル内の値に少なくとも部分的に基づいて、係数を、該係数についての初期量子化レベル、初期量子化レベルマイナス1、およびゼロになるように量子化することのレートひずみコストを決定することを備える場合がある。
[0167]図12は、本開示の技法による、例示的なコーディング動作700を示すフローチャートである。ビデオエンコーダ20は、オールイントラ(AI)モード、ランダムアクセス(RA)モード、低遅延B(LB)モード、および低遅延P(LP)モードなどの、様々なコーディングモードで動作し得る。オールイントラ構成(すなわち、イントラのみの構成)では、ビデオシーケンス内の各ピクチャは、瞬時復号リフレッシュ(IDR)ピクチャとして符号化される。IDRピクチャはIスライスのみを含んでいる。
[0168]RA構成では、イントラピクチャは、周期的にビットストリームに挿入される。さらに、RA構成では、ビデオシーケンスの第1のイントラピクチャはIDRピクチャとして符号化され、他のイントラピクチャは非IDRピクチャとして符号化される。RA構成では、表示順序で連続するイントラピクチャの間に位置するピクチャは、Bピクチャとして符号化される。生成されたPおよびB(GPB)のピクチャは、最も低い時間レイヤとして使用され、インター予測用のIピクチャまたはGPBピクチャと呼ぶことができる。2番目および3番目の時間レイヤは、参照Bピクチャから構成され得、最も高い時間レイヤは、非参照Bピクチャのみを含んでいる。各インターコーディングされたピクチャのQPは、時間レイヤに応じてイントラコーディングされたピクチャのQPにオフセットを加算することによって導出され得る。参照ピクチャリストの組合せは、参照ピクチャインデックスの管理およびエントロピーコーディングに使用され得る。
[0169]低遅延構成(すなわち、低遅延B構成および低遅延P構成)では、ビデオシーケンス内の最初のピクチャのみがIDRピクチャとして符号化される。低遅延B構成では、他の連続するピクチャは、Bピクチャとして符号化される。低遅延P構成では、他の連続するピクチャは、Pピクチャとして符号化される。BピクチャまたはPピクチャ(すなわち、生成されたPまたはB(GPB)のピクチャ)は、参照ピクチャのみを使用し、参照ピクチャのピクチャ順序カウント(POC)値の各々は、現在のピクチャのPOCよりも小さい(すなわち、RefPicList0およびRefPicList1の中のすべての参照ピクチャは、現在のピクチャに対して表示順序で時間的に前である)。低遅延B構成および低遅延P構成では、RefPicList0およびRefPicList1の内容は同一である。
[0170]図12の例では、(ビデオエンコーダ20またはビデオデコーダ30などの)ビデオコーダは、ビデオエンコーダがオールイントラ構成で動作しているか、ランダムアクセス構成で動作しているか、または低遅延構成で動作しているかに少なくとも部分的に基づいて、量子化オフセットを決定し得る(702)。さらに、ビデオコーダは、量子化オフセットに少なくとも部分的に基づいて、係数についてのそれぞれの量子化レベルを決定し得る(704)。
[0171]いくつかの例では、ビデオエンコーダがオールイントラ構成またはランダムアクセス構成で動作しているとき、量子化オフセットは1/2に等しい。そのような例では、ビデオエンコーダが低遅延構成で動作しており、係数がイントラスライスに関連付けられるとき、量子化オフセットは1/2に等しい。さらに、そのような例では、ビデオエンコーダが低遅延構成で動作しており、係数がインタースライスに関連付けられるとき、量子化オフセットは1/6に等しい。
[0172]下記の表22は、オールイントラ(AI)、ランダムアクセス(RA)、低遅延B(LB)、および低遅延P(LP)などのHEVCの様々な構成で、様々なオフセットおよびRDOQオフについての例示的なパフォーマンス比較を示す。すなわち、下記の表22は、様々な量子化オフセットおよびRDOQオフのパフォーマンスを比較する。表22から、量子化オフセットを生成する別の方法が取得される。AI構成およびRA構成の場合、最良のパフォーマンスを与えることができるものとして、量子化オフセット1/2が使用される。LB構成およびLP構成の場合、最良のパフォーマンスを与えるので、イントラスライスは量子化オフセット1/2を使用すべきであり、インタースライスは量子化オフセット1/6を使用すべきである。表10〜表22は、適切な量子化オフセットを選択することによって、RDパフォーマンスは複雑さが低減されたRDOQのパフォーマンスを近似できることを示す。
[0173]1つまたは複数の例では、記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せに実装され得る。ソフトウェアに実装される場合、機能は、1つもしくは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む、データ記憶媒体または通信媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含む場合がある。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応する場合がある。データ記憶媒体は、本開示に記載された技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含む場合がある。
[0174]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0175]命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)などの1つもしくは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書に記載された技法の実施に適した任意の他の構造のいずれかを指す場合がある。加えて、いくつかの態様では、本明細書に記載された機能は、符号化および復号のために構成された専用のハードウェアおよび/もしくはソフトウェアモジュール内に提供され得、または複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素に完全に実装され得る。
[0176]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置に実装され得る。開示された技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示に記載されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによって実現される必要があるとは限らない。むしろ、上述されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上述された1つまたは複数のプロセッサを含む、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって提供され得る。
[0177]様々な例が記載された。これらおよび他の例は、以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1] ビデオデータを符号化する方法であって、
係数ブロックの係数について初期量子化レベルを決定することと、
前記係数が前記初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定することと、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、
前記係数を前記初期量子化レベルになるように量子化するレートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコストを決定することと、
前記計算されたレートひずみコストに少なくとも部分的に基づいて、前記係数について実際の量子化レベルを決定することと、
を備える、方法。
[2] 前記レートひずみコストを決定せずに、前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さくないとの決定に応答して、前記係数についての前記実際の量子化レベルが前記係数についての前記初期量子化レベルであると決定することをさらに備える、[1]に記載の方法。
[3] 前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、
前記初期量子化レベルが3よりも小さいとの決定に応答して、前記係数を前記係数についての前記初期量子化レベルになるように量子化する前記レートひずみコスト、前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコスト、および前記係数をゼロになるように量子化する前記レートひずみコストを決定することと、
前記初期量子化レベルが3以上であるとの決定に応答して、前記係数を前記初期量子化レベルに量子化する前記レートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコスト決定することと、
をさらに備える、[1]に記載の方法。
[4] 前記係数は、前記係数ブロック内の逆走査順序で第1の非ゼロ係数の後に存在する、[1]に記載の方法。
[5] 最終有意係数を決定することをさらに備え、前記最終有意係数は逆走査順序で前記係数ブロックの前記第1の非ゼロ係数である、[1]に記載の方法。
[6] 前記実際の量子化レベルをエントロピー符号化することと、
前記エントロピー符号化された実際の量子化レベルを含むビットストリームを出力することと、
をさらに備える、[1]に記載の方法。
[7] 前記実際の量子化レベルを決定することは、最も低いレートひずみコストをもたらす実際の量子化レベルを選択することを備える、[1]に記載の方法。
[8] 前記実際の量子化レベルを前記量子化ステップサイズの値と乗算することによって、前記係数の復元された値を生成することをさらに備える、[7]に記載の方法。
[9] 前記係数についての前記初期量子化レベルを決定することは、
を計算することを備え、ここで、zは前記係数についての前記初期量子化レベルであり、Wは前記係数の初期値であり、fは前記係数についての量子化オフセットであり、Δは量子化ステップであり、
は、マイナス無限大に向かって最も近い整数への丸めを表し、sign()は前記係数の前記初期値の符号を返す関数である、[1]に記載の方法。
[10] 前記方法は、
前のフレームのコンテキストモデルのエントロピーに少なくとも部分的に基づいて、前記コンテキストモデルについてのレート値を決定することと、
前記コンテキストモデルの各々について、前記コンテキストモデルについての前記レート値によって乗算されたλの値を示すテーブルを生成することと、ここで、λは固定値であり、
をさらに備え、
前記レートひずみコストを決定することは、前記テーブル内の前記値に少なくとも部分的に基づいて、前記係数を前記係数についての前記初期量子化レベルに量子化する前記レートひずみコスト、前記係数を前記初期量子化レベルマイナス1に量子化する前記レートひずみコスト、および前記係数をゼロになるように量子化する前記レートひずみコストを決定することを備える、
[1]に記載の方法。
[11] ビデオデータを符号化するコンピューティングデバイスであって、
係数ブロックの係数について初期量子化レベルを決定することと、
前記係数が前記初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定することと、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、
前記係数を前記初期量子化レベルになるように量子化するレートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコストを決定することと、
前記計算されたレートひずみコストに基づいて、前記係数について実際の量子化レベルを決定することと、
を行うように構成された1つまたは複数のプロセッサを備える、コンピューティングデバイス。
[12] 前記1つまたは複数のプロセッサは、前記レートひずみコストを決定せずに、前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さくないとの決定に応答して、前記係数についての前記実際の量子化レベルが前記係数についての前記初期量子化レベルであると決定するようにさらに構成された、[11]に記載のコンピューティングデバイス。
[13] 前記1つまたは複数のプロセッサは、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、
前記初期量子化レベルが3よりも小さいとの決定に応答して、前記係数を前記係数についての前記初期量子化レベルになるように量子化する前記レートひずみコスト、前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコスト、前記係数をゼロになるように量子化する前記レートひずみコストを決定することと、
前記初期量子化レベルが3以上であるとの決定に応答して、前記初期量子化レベルに量子化する前記レートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコストを決定することと、
を行うように構成された、[11]に記載のコンピューティングデバイス。
[14] 前記係数は、前記係数ブロック内の逆走査順序で第1の非ゼロ係数の後に存在する、[11]に記載のコンピューティングデバイス。
[15] 前記1つまたは複数のプロセッサは、最終有意係数を決定するようにさらに構成され、前記最終有意係数は逆走査順序で前記第1の非ゼロ係数である、[11]に記載のコンピューティングデバイス。
[16] 前記1つまたは複数のプロセッサは、
前記実際の量子化レベルをエントロピー符号化することと、
前記エントロピー符号化された実際の量子化レベルを含むビットストリームを出力することと、
を行うようにさらに構成された、[11]に記載のコンピューティングデバイス。
[17] 前記1つまたは複数のプロセッサは、少なくとも部分的に最も低いレートひずみコストをもたらす実際の量子化レベルを選択することによって、前記実際の量子化レベルを決定するように構成された、[11]に記載のコンピューティングデバイス。
[18] 前記1つまたは複数のプロセッサは、前記実際の量子化レベルを前記量子化ステップサイズの値と乗算することによって、前記係数の復元された値を生成するようにさらに構成された、[17]に記載のコンピューティングデバイス。
[19] 前記1つまたは複数のプロセッサは、
を計算することによって前記係数についての前記初期量子化レベルを決定するようにさらに構成され、ここで、zは前記係数についての前記初期量子化レベルであり、Wは前記係数の初期値であり、fは前記係数についての量子化オフセットであり、Δは量子化ステップであり、
は、マイナス無限大に向かって最も近い整数への丸めを表し、sign()が前記係数の前記初期値の符号を返す関数である、[11]に記載のコンピューティングデバイス。
[20] 前記1つまたは複数のプロセッサは、
前のフレームのコンテキストモデルのエントロピーに少なくとも部分的に基づいて、前記コンテキストモデルについてのレート値を決定することと、
前記コンテキストモデルの各々について、前記コンテキストモデルについての前記レート値によって乗算されたλの値を示すテーブルを生成することと、ここで、λは固定値であり、
前記テーブル内の前記値に少なくとも部分的に基づいて、前記係数を前記係数についての前記初期量子化レベルに量子化する前記レートひずみコスト、前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコスト、および前記係数をゼロになるように量子化する前記レートひずみコストを決定することと、
を行うように構成された、[11]に記載のコンピューティングデバイス。
[21] 係数ブロックの係数用の初期量子化レベルを決定するための手段と、
前記係数が前記初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定するための手段と、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、前記係数を前記初期量子化レベルになるように量子化するレートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化する前記レートひずみコストを決定するための手段と、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、前記計算されたレートひずみコストに基づいて、前記係数についての実際の量子化レベルを決定するための手段と、
を備える、コンピューティングデバイス。
[22] コンピューティングデバイスの1つまたは複数のプロセッサによって実行されるとき、
係数ブロックの係数についての初期量子化レベルを決定することと、
前記係数が前記初期量子化レベルと量子化ステップサイズの値との積よりも小さいかどうかを決定することと、
前記係数が前記初期量子化レベルと前記量子化ステップサイズの値との積よりも小さいとの決定に応答して、
前記係数を前記初期量子化レベルになるように量子化するレートひずみコスト、および前記係数を前記初期量子化レベルマイナス1になるように量子化するレートひずみコストを決定することと、
前記計算されたレートひずみコストに基づいて、前記係数についての実際の量子化レベルを決定することと、
を行うように前記コンピューティングデバイスを構成する命令を記憶する、コンピュータ可読記憶媒体。