パレットモードコーディングに対する既存の手法には、すぐ前のライン(すなわち、copy-previousモード)以外のラインからコピーするようにcopy-aboveモードを拡張するうえでいくつかの冗長性が存在する。これらの冗長性は、特定のラインからコピーすることが禁止される状況において発生する場合がある。したがって、copy-previousモードからこれらの状況を除去することによって、コーディングされた前のラインのダイナミックレンジを縮小することができ、それによってコーディング効率が改善される。
パレットモードコーディングに対する既存の手法では、現在のブロックの外側の隣接ピクセルからピクセル値をコピーすること、すなわち、copy-outsideモードを容易にするようにcopy-aboveモードへの拡張が実施される。本開示の態様は、copy-outsideモードのフレキシビリティを向上させるかまたはcopy-outsideモードを実施するための追加の技法を実現し得るcopy-outsideモードのいくつかの異なる改良に関する。
下の説明では、ある種の実施形態に関するH.264/アドバンストビデオコーディング(AVC)技法が説明され、HEVC規格および関連する技法も論じられる。いくつかの実施形態が、本明細書においてHEVC規格および/またはH.264規格の文脈で説明されるが、当業者は、本明細書で開示されるシステムおよび方法が、任意の適切なビデオコーディング規格に適用可能であり得ることを了解されよう。たとえば、本明細書で開示される実施形態は、以下の規格、すなわち、International Telecommunication Union(ITU) Telecommunication Standardization Sector(ITU-T) H.261、International Organization for Standardization/International Electrotechnical Commission(ISO/IEC) MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、および範囲拡張を含むITU-T H.264(ISO/IEC MPEG-4 AVCとしても知られている)のうちの1つまたは複数に適用可能であり得る。
HEVCは一般に、多くの点で、前のビデオコーディング規格のフレームワークに従う。HEVCにおける予測のユニットは、いくつかの前のビデオコーディング規格における予測のユニット(たとえば、マクロブロック)とは異なる。実際に、マクロブロックの概念は、いくつかの前のビデオコーディング規格において理解されているように、HEVCには存在しない。マクロブロックは、考えられる利益の中でも、高い柔軟性を与え得る、四分木方式に基づく階層構造と置き換えられる。たとえば、HEVC方式では、3つのタイプのブロック、コーディングユニット(CU)、予測ユニット(PU)、および変換ユニット(TU)が定義される。CUは、領域分割の基本単位を指し得る。CUはマクロブロックの概念に類似すると見なされ得るが、HEVCは、CUの最大サイズを制限せず、コンテンツ適応性を改善するために4つの等しいサイズのCUへの再帰的分割を可能にし得る。PUは、インター/イントラ予測の基本単位と見なされてよく、単一のPUは、不規則な画像パターンを効率的にコーディングするために、複数の任意の形状区分を含み得る。TUは、変換の基本単位と見なされてよい。TUは、PUとは無関係に定義され得るが、TUのサイズは、TUが属するCUのサイズに制限され得る。3つの異なる概念へのブロック構造のこの分離は、各ユニットがユニットのそれぞれの役割に従って最適化されることを可能にでき、それによりコーディング効率の改善をもたらし得る。
ビデオコーディング規格
ビデオ画像、TV画像、静止画像、またはビデオレコーダもしくはコンピュータによって生成された画像のような、デジタル画像は、水平方向の線および垂直方向の線で構成されたピクセルまたはサンプルを含み得る。単一の画像中のピクセルの数は、通常、数万である。各ピクセルは、通常、ルミナンス情報とクロミナンス情報とを含む。圧縮がなければ、画像エンコーダから画像デコーダに搬送されるべき大量の情報が、リアルタイム画像送信を実現不可能にするであろう。送信されるべき情報の量を減らすために、JPEG、MPEGおよびH.263規格のような、いくつかの異なる圧縮方法が開発された。
ビデオコーディング規格は、ITU-T H.261と、ISO/IEC MPEG-1 Visualと、ITU-T H.262またはISO/IEC MPEG-2 Visualと、ITU-T H.263と、ISO/IEC MPEG-4 Visualと、(ISO/IEC MPEG-4 AVCとしても知られる)ITU-T H.264と、範囲拡張を含むHEVCとを含む。
さらに、ビデオコーディング規格、すなわち、HEVCが、ITU-T Video Coding Experts Group(VCEG)とISO/IEC MPEGのJoint Collaboration Team on Video Coding(JCT-VC)によって開発された。HEVCドラフト10の完全な引用は、文書JCTVC-L1003、Brossら、「High Efficiency Video Coding (HEVC) Text Specification Draft 10」、ITU-T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT-VC)、第12回会合:ジュネーブ、スイス、2013年1月14日〜2013年1月23日である。HEVCの範囲拡張も、JCT-VCによって開発されている。
ビデオコーディングシステム
添付の図面を参照して、新規のシステム、装置、および方法の様々な態様が、以下でより十分に説明される。しかしながら、本開示は、多くの異なる形態で具現化されてよく、本開示全体にわたって提示される特定の構造または機能に限定されるものと解釈されるべきではない。そうではなく、これらの態様は、本開示が十分なものであり、完全であるように、また本開示の範囲を当業者に十分伝えるように提供される。本明細書の教示に基づいて、本開示の範囲は、本開示の任意の他の態様と無関係に実装されるにせよ、本開示の他の態様と組み合わせて実装されるにせよ、本明細書で開示される新規のシステム、装置、および方法のいかなる態様をも包含するものであることを、当業者は了解されたい。たとえば、本明細書に記載される任意の数の態様を使用して装置が実装されてよく、または方法が実践されてよい。さらに、本開示の範囲は、本明細書に記載される本開示の様々な態様に加えて、またはそれらの態様以外に、他の構造、機能、または構造および機能を使用して実践されるような装置または方法を包含するものとする。本明細書で開示される任意の態様は、特許請求の範囲の1つまたは複数の要素により具現化され得ることを理解されたい。
特定の態様が本明細書で説明されるが、これらの態様の多数の変形および置換が、本開示の範囲に入る。好適な態様のいくつかの利益および利点に言及するが、本開示の範囲は特定の利益、使用、または目的に限定されるものではない。むしろ、本開示の態様は、様々なワイヤレス技術、システム構成、ネットワーク、および送信プロトコルに広く適用可能であるものであり、そのうちのいくつかが例として図および好ましい態様についての以下の説明において示される。発明を実施するための形態および各図面は、限定的ではなく、本開示の例示にすぎず、本開示の範囲は、添付の特許請求の範囲およびその均等物によって定義される。
添付の図面は例を示す。添付の図面中の参照番号によって示される要素は、以下の説明における同様の参照番号によって示される要素に対応する。本開示では、序数の単語(たとえば、「第1の」、「第2の」、「第3の」など)で始まる名前を有する要素は、必ずしもそれらの要素が特定の順序を有することを示唆するとは限らない。むしろ、そのような序数の単語は、同じまたは同様のタイプの、異なる要素を指すために使用されるにすぎない。
図1Aは、本開示で説明される態様による技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用され説明される場合、「ビデオコーダ」または「コーダ」という用語は、総称的にビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化とビデオ復号とを総称的に指し得る。ビデオエンコーダおよびビデオデコーダに加えて、本出願で説明される態様は、トランスコーダ(たとえば、ビットストリームを復号し、別のビットストリームを再符号化することができるデバイス)およびミドルボックス(たとえば、ビットストリームを修正し、変換し、かつ/または場合によっては操作することができるデバイス)のような、他の関連するデバイスに拡張され得る。
図1Aに示されるように、ビデオコーディングシステム10は、宛先デバイス14によって後で復号されるべき符号化されたビデオデータを生成するソースデバイス12を含む。図1Aの例では、ソースデバイス12および宛先デバイス14は、別個のデバイスを構成する。しかしながら、ソースデバイス12および宛先デバイス14は、図1Bの例に示されるように、同じデバイス上にあるかまたはその一部であり得ることに留意されたい。
もう一度図1Aを参照すると、ソースデバイス12および宛先デバイス14は、それぞれ、デスクトップコンピュータ、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、いわゆる「スマート」パッド、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイスなどを含む、広範囲にわたるデバイスのいずれかを備え得る。様々な実施形態では、ソースデバイス12および宛先デバイス14は、ワイヤレス通信に対応し得る。
宛先デバイス14は、復号されるべき符号化されたビデオデータを、リンク16を介して受信し得る。リンク16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な任意のタイプの媒体またはデバイスを備え得る。図1Aの例では、リンク16は、ソースデバイス12が符号化されたビデオデータをリアルタイムで宛先デバイス14に送信することを可能にするための通信媒体を備え得る。符号化されたビデオデータは、ワイヤレス通信プロトコルのような通信規格に従って変調され、宛先デバイス14に送信され得る。通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路のような、任意のワイヤレスまたは有線通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークのような、パケットベースのネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を可能にするために有用であり得る任意の他の機器を含み得る。
代替的に、符号化されたデータは出力インターフェース22から(任意選択で存在する)記憶デバイス31に出力され得る。同様に、符号化されたデータは、たとえば、宛先デバイス14の入力インターフェース28によって、記憶デバイス31からアクセスされ得る。記憶デバイス31は、ハードドライブ、フラッシュメモリ、揮発性メモリもしくは不揮発性メモリ、または符号化されたビデオデータを記憶するための任意の他の好適なデジタル記憶媒体のような、種々の分散されたまたはローカルにアクセスされるデータ記憶媒体のいずれかを含み得る。さらなる一例では、記憶デバイス31は、ソースデバイス12によって生成された符号化されたビデオを保持し得るファイルサーバまたは別の中間記憶デバイスに対応し得る。宛先デバイス14は、ストリーミングまたはダウンロードを介して、記憶デバイス31からの記憶されたビデオデータにアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶し、その符号化されたビデオデータを宛先デバイス14に送信することが可能な任意のタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、またはローカルディスクドライブを含む。宛先デバイス14は、インターネット接続を含む、任意の標準のデータ接続を通じて符号化されたビデオデータにアクセスし得る。これは、ファイルサーバに記憶された符号化されたビデオデータにアクセスするのに適しているワイヤレスチャネル(たとえば、ワイヤレスローカルエリアネットワーク(WLAN)接続)、有線接続(たとえば、デジタル加入者回線(DSL)、ケーブルモデムなど)、またはその両方の組合せを含み得る。記憶デバイス31からの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
本開示の技法は、ワイヤレスの適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信(たとえば、ハイパーテキスト転送プロトコル(HTTP)上での動的適応ストリーミングなど)、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例のような、様々なマルチメディア適用例のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話のような適用例をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
図1Aの例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。場合によっては、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ソースデバイス12において、ビデオソース18は、ビデオキャプチャデバイス、たとえばビデオカメラ、以前にキャプチャされたビデオを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェース、および/もしくはソースビデオとしてコンピュータグラフィックスデータを生成するためのコンピュータグラフィックスシステムなどのソース、またはそのようなソースの組合せを含み得る。一例として、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、図1Bの例に示されているように、いわゆる「カメラ電話」または「ビデオ電話」を形成し得る。しかしながら、本開示で説明される技法は一般に、ビデオコーディングに適用可能であってよく、ワイヤレスおよび/または有線の適用例に適用され得る。
キャプチャされたビデオ、以前にキャプチャされたビデオ、またはコンピュータにより生成されたビデオは、ビデオエンコーダ20によって符号化され得る。符号化されたビデオデータは、ソースデバイス12の出力インターフェース22を介して宛先デバイス14に送信され得る。符号化されたビデオデータは、さらに(または代替として)、復号および/または再生のための、宛先デバイス14または他のデバイスによる後のアクセスのために記憶デバイス31上に記憶され得る。図1Aおよび図1Bに示されるビデオエンコーダ20は、図2に示されるビデオエンコーダ20、または本明細書で説明される任意の他のビデオエンコーダを備え得る。
図1Aの例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの場合、入力インターフェース28は、受信機および/またはモデムを含み得る。宛先デバイス14の入力インターフェース28は、リンク16を介して、および/または記憶デバイス31から、符号化されたビデオデータを受信し得る。リンク16を介して通信され、または記憶デバイス31上に与えられた符号化されたビデオデータは、ビデオデータを復号する際に、ビデオデコーダ30のようなビデオデコーダが使用するためのビデオエンコーダ20によって生成される種々のシンタックス要素を含み得る。そのようなシンタックス要素は、通信媒体上で送信されるか、記憶媒体に記憶されるか、またはファイルサーバに記憶される、符号化されたビデオデータとともに含まれ得る。図1Aおよび図1Bに示されるビデオデコーダ30は、図3に示されるビデオデコーダ30、または本明細書で説明される任意の他のビデオデコーダを備え得る。
ディスプレイデバイス32は、宛先デバイス14と一体化されてよく、または宛先デバイス14の外部にあってよい。いくつかの例では、宛先デバイス14は、一体型ディスプレイデバイスを含んでよく、外部ディスプレイデバイスとインターフェースするように構成されてもよい。他の例では、宛先デバイス14はディスプレイデバイスであり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータをユーザに対して表示し、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスのような、種々のディスプレイデバイスのいずれかを備え得る。
関連する態様では、図1Bは例示的なビデオコーディングシステム10'を示し、ソースデバイス12および宛先デバイス14はデバイス11上にあるかまたはその一部である。デバイス11は、「スマート」フォンなどのような電話ハンドセットであり得る。デバイス11は、ソースデバイス12および宛先デバイス14と動作可能に通信している(任意選択で存在する)コントローラ/プロセッサデバイス13を含み得る。それ以外の点では、図1Bのビデオコーディングシステム10'およびそのコンポーネントは、図1Aのビデオコーディングシステム10およびそのコンポーネントと同様である。
ビデオエンコーダ20およびビデオデコーダ30は、HEVCなどのビデオ圧縮規格に従って動作することができ、HEVC Test Model(HM)に適合し得る。代替的に、ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG-4、Part 10、AVCと呼ばれるITU-T H.264規格のような、他のプロプライエタリ規格または業界規格、またはそのような規格の拡張に従って動作し得る。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。ビデオ圧縮規格の他の例には、MPEG-2およびITU-T H.263がある。
図1Aおよび図1Bの例には示されていないが、ビデオエンコーダ20およびビデオデコーダ30は、それぞれオーディオエンコーダおよびデコーダと統合されてよく、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するために、適切なMUX-DEMUXユニット、または他のハードウェアおよびソフトウェアを含み得る。適用可能な場合、いくつかの例では、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)のような他のプロトコルに適合し得る。
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダ回路のいずれか、またはそれらの任意の組合せとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、ソフトウェアのための命令を好適な非一時的コンピュータ可読媒体に記憶し、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェアでその命令を実行し得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、そのいずれもが、それぞれのデバイスにおいて複合エンコーダ/デコーダの一部として統合されてよい。
ビデオコーディング処理
上で簡単に述べられたように、ビデオエンコーダ20はビデオデータを符号化する。ビデオデータは、1つまたは複数のピクチャを備え得る。ピクチャの各々は、ビデオの一部を形成する静止画像である。いくつかの事例では、ピクチャはビデオ「フレーム」と呼ばれることがある。ビデオエンコーダ20がビデオデータを符号化するとき、ビデオエンコーダ20はビットストリームを生成し得る。ビットストリームは、ビデオデータのコーディングされた表現を形成する、ビットのシーケンスを含み得る。ビットストリームは、コーディングされたピクチャと関連するデータとを含み得る。コーディングされたピクチャとは、ピクチャのコーディングされた表現である。
ビットストリームを生成するために、ビデオエンコーダ20は、ビデオデータ中の各ピクチャに対して符号化動作を実行し得る。ビデオエンコーダ20がピクチャに対して符号化動作を実行するとき、ビデオエンコーダ20は、一連のコーディングされたピクチャと関連するデータとを生成し得る。関連するデータは、ビデオパラメータセット(VPS)、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、適合パラメータセット(APS)、および他のシンタックス構造を含み得る。SPSは、ピクチャの0個以上のシーケンスに適用可能なパラメータを含み得る。PPSは、0個以上のピクチャに適用可能なパラメータを含み得る。APSは、0個以上のピクチャに適用可能なパラメータを含み得る。APS中のパラメータは、PPS中のパラメータよりも変化する可能性が高いパラメータであり得る。
コーディングされたピクチャを生成するために、ビデオエンコーダ20は、ピクチャを等しいサイズのビデオブロックに区分し得る。ビデオブロックは、サンプルの2次元アレイであり得る。ビデオブロックの各々が、ツリーブロックと関連付けられる。いくつかの事例では、ツリーブロックは、最大コーディングユニット(LCU)と呼ばれ得る。HEVCのツリーブロックは、H.264/AVCのような、以前の規格のマクロブロックに広い意味で類似し得る。しかしながら、ツリーブロックは、特定のサイズに必ずしも限定されず、1つまたは複数のコーディングユニット(CU)を含み得る。ビデオエンコーダ20は、四分木区分を使用して、ツリーブロックのビデオブロックを、CUと関連付けられたビデオブロックに区分することができ、したがって「ツリーブロック」という名前がある。
いくつかの例では、ビデオエンコーダ20は、ピクチャを複数のスライスに区分し得る。スライスの各々が、整数個のCUを含み得る。いくつかの事例では、スライスは整数個のツリーブロックを備える。他の事例では、スライスの境界はツリーブロック内にあり得る。
ピクチャに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、ピクチャの各スライスに対して符号化動作を実行し得る。ビデオエンコーダ20がスライスに対して符号化動作を実行するとき、ビデオエンコーダ20は、スライスと関連付けられた符号化されたデータを生成し得る。スライスと関連付けられた符号化されたデータは、「コーディングされたスライス」と呼ばれ得る。
コーディングされたスライスを生成するために、ビデオエンコーダ20は、スライス中の各ツリーブロックに対して符号化動作を実行し得る。ビデオエンコーダ20がツリーブロックに対して符号化動作を実行するとき、ビデオエンコーダ20はコーディングされたツリーブロックを生成し得る。コーディングされたツリーブロックは、ツリーブロックの符号化されたバージョンを表すデータを備え得る。
ビデオエンコーダ20がコーディングされたスライスを生成するとき、ビデオエンコーダ20は、ラスター走査順序に従って、スライス中のツリーブロックに対して符号化動作を実行し得る(たとえば、そのツリーブロックを符号化し得る)。たとえば、ビデオエンコーダ20は、スライス中のツリーブロックの一番上の行にわたって左から右に進み、次いでツリーブロックの次の下の行にわたって左から右に進み、以下同様に進む順序で、ビデオエンコーダ20がスライス中のツリーブロックの各々を符号化するまで、スライスのツリーブロックを符号化し得る。
ラスター走査順序に従ってツリーブロックを符号化した結果として、所与のツリーブロックの上および左のツリーブロックは符号化されていることがあるが、所与のツリーブロックの下および右のツリーブロックはまだ符号化されていない。したがって、ビデオエンコーダ20は、所与のツリーブロックを符号化するとき、所与のツリーブロックの上および左のツリーブロックを符号化することによって生成された情報にアクセスすることが可能であり得る。しかしながら、ビデオエンコーダ20は、所与のツリーブロックを符号化するとき、所与のツリーブロックの下および右のツリーブロックを符号化することによって生成された情報にアクセスすることが可能ではないことがある。
コーディングされたツリーブロックを生成するために、ビデオエンコーダ20は、ツリーブロックのビデオブロックに対して四分木区分を再帰的に実行して、ビデオブロックを徐々により小さいビデオブロックに分割し得る。より小さいビデオブロックの各々が、異なるCUと関連付けられ得る。たとえば、ビデオエンコーダ20は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。区分されたCUは、そのビデオブロックが他のCUと関連付けられたビデオブロックに区分される、CUであり得る。区分されていないCUは、そのビデオブロックが他のCUと関連付けられたビデオブロックに区分されていない、CUであり得る。
ビットストリーム中の1つまたは複数のシンタックス要素は、ビデオエンコーダ20がツリーブロックのビデオブロックを区分し得る最大の回数を示し得る。CUのビデオブロックは、形状が正方形であり得る。CUのビデオブロックのサイズ(たとえば、CUのサイズ)は、8×8ピクセルから、最大で64×64以上のピクセルを有するツリーブロックのビデオブロックのサイズ(たとえば、ツリーブロックのサイズ)にまで及び得る。
ビデオエンコーダ20は、z走査順序に従って、ツリーブロックの各CUに対して符号化動作を実行し得る(たとえば、各CUを符号化し得る)。言い換えれば、ビデオエンコーダ20は、左上のCUと、右上のCUと、左下のCUと、次いで右下のCUとを、その順序で符号化し得る。ビデオエンコーダ20が、区分されたCUに対して符号化動作を実行するとき、ビデオエンコーダ20は、z走査順序に従って、区分されたCUのビデオブロックのサブブロックと関連付けられたCUを符号化し得る。言い換えれば、ビデオエンコーダ20は、左上のサブブロックと関連付けられたCUと、右上のサブブロックと関連付けられたCUと、左下のサブブロックと関連付けられたCUと、次いで右下のサブブロックと関連付けられたCUとを、その順序で符号化し得る。
z走査順序に従ってツリーブロックのCUを符号化した結果として、所与のCUの上、左上、右上、左、および左下のCUは符号化されていることがある。所与のCUの下および右のCUはまだ符号化されていない。したがって、ビデオエンコーダ20は、所与のCUを符号化するとき、所与のCUに隣接するいくつかのCUを符号化することによって生成された情報にアクセスすることが可能であり得る。しかしながら、ビデオエンコーダ20は、所与のCUを符号化するとき、所与のCUに隣接する他のCUを符号化することによって生成された情報にアクセスすることが可能ではないことがある。
ビデオエンコーダ20が、区分されていないCUを符号化するとき、ビデオエンコーダ20は、CUのために1つまたは複数の予測ユニット(PU)を生成し得る。CUのPUの各々は、CUのビデオブロック内の異なるビデオブロックと関連付けられ得る。ビデオエンコーダ20は、CUの各PUのための予測されるビデオブロックを生成し得る。PUの予測されるビデオブロックは、サンプルのブロックであり得る。ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PUのための予測されるビデオブロックを生成し得る。
ビデオエンコーダ20がイントラ予測を使用してPUの予測されるビデオブロックを生成するとき、ビデオエンコーダ20は、PUと関連付けられたピクチャの復号サンプルに基づいて、PUの予測されるビデオブロックを生成し得る。ビデオエンコーダ20がイントラ予測を使用してCUのPUの予測されるビデオブロックを生成する場合、CUはイントラ予測されたCUである。ビデオエンコーダ20がインター予測を使用してPUの予測されるビデオブロックを生成するとき、ビデオエンコーダ20は、PUと関連付けられたピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測されるビデオブロックを生成し得る。ビデオエンコーダ20がインター予測を使用してCUのPUの予測されるビデオブロックを生成する場合、CUはインター予測されたCUである。
さらに、ビデオエンコーダ20がインター予測を使用してPUのための予測されるビデオブロックを生成するとき、ビデオエンコーダ20はPUの動き情報を生成し得る。PUの動き情報は、PUの1つまたは複数の参照ブロックを示し得る。PUの各参照ブロックは、参照ピクチャ内のビデオブロックであり得る。参照ピクチャは、PUと関連付けられたピクチャ以外のピクチャであり得る。いくつかの事例では、PUの参照ブロックは、PUの「参照サンプル」と呼ばれることもある。ビデオエンコーダ20は、PUの参照ブロックに基づいて、PUのための予測されるビデオブロックを生成し得る。
ビデオエンコーダ20がCUの1つまたは複数のPUのための予測されるビデオブロックを生成した後、ビデオエンコーダ20は、CUのPUのための予測されるビデオブロックに基づいて、CUの残差データを生成し得る。CUの残差データは、CUのPUのための予測されるビデオブロック中のサンプルと、CUの元のビデオブロック中のサンプルとの差分を示し得る。
さらに、区分されていないCUに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、CUの残差データに対して再帰的な四分木区分を実行して、CUの残差データを、CUの変換ユニット(TU)と関連付けられた残差データの1つまたは複数のブロック(たとえば、残差ビデオブロック)に区分し得る。CUの各TUは、異なる残差ビデオブロックと関連付けられ得る。
ビデオエンコーダ20は、TUと関連付けられた変換係数ブロック(たとえば、変換係数のブロック)を生成するために、TUと関連付けられた残差ビデオブロックに1つまたは複数の変換を適用し得る。概念的に、変換係数ブロックは変換係数の2次元(2D)行列であり得る。
変換係数ブロックを生成した後、ビデオエンコーダ20は、変換係数ブロックに対して量子化処理を実行し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を行う処理を指す。量子化処理は、変換係数の一部またはすべてと関連付けられたビット深度を低減し得る。たとえば、量子化の間にnビットの変換係数がmビットの変換係数に切り捨てられることがあり、ここで、nはmよりも大きい。
ビデオエンコーダ20は、各CUを量子化パラメータ(QP)値と関連付け得る。CUと関連付けられたQP値は、ビデオエンコーダ20が、CUと関連付けられた変換係数ブロックをどのように量子化するかを決定し得る。ビデオエンコーダ20は、CUと関連付けられたQP値を調整することによって、CUと関連付けられた変換係数ブロックに適用される量子化の程度を調整し得る。
ビデオエンコーダ20が変換係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数ブロック中で変換係数を表すシンタックス要素のセットを生成し得る。ビデオエンコーダ20は、これらのシンタックス要素のいくつかに、コンテキスト適応型バイナリ算術コーディング(CABAC)動作のようなエントロピー符号化動作を適用し得る。コンテキスト適応型可変長コーディング(CAVLC)、確率間隔区分エントロピー(PIPE)コーディング、または他のバイナリ算術コーディングのような、他のエントロピーコーディング技法も使用され得る。
ビデオエンコーダ20によって生成されるビットストリームは、一連のネットワーク抽象化レイヤ(NAL)ユニットを含み得る。NALユニットの各々は、NALユニット中のデータのタイプの指示と、データを含むバイトとを含むシンタックス構造であり得る。たとえば、NALユニットは、ビデオパラメータセット、シーケンスパラメータセット、ピクチャパラメータセット、コーディングされたスライス、SEI、アクセスユニットデリミタ、フィラーデータ、または別のタイプのデータを表すデータを含み得る。NALユニット中のデータは、様々なシンタックス構造を含み得る。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。ビットストリームは、ビデオエンコーダ20によって符号化されたビデオデータのコーディングされた表現を含み得る。ビデオデコーダ30がビットストリームを受信するとき、ビデオデコーダ30は、ビットストリームに対して解析動作を実行し得る。ビデオデコーダ30が解析動作を実行するとき、ビデオデコーダ30は、ビットストリームからシンタックス要素を抽出し得る。ビデオデコーダ30は、ビットストリームから抽出されたシンタックス要素に基づいて、ビデオデータのピクチャを再構築し得る。シンタックス要素に基づいてビデオデータを再構築するための処理は、一般に、シンタックス要素を生成するためにビデオエンコーダ20によって実行される処理とは逆であり得る。
ビデオデコーダ30がCUと関連付けられたシンタックス要素を抽出した後、ビデオデコーダ30は、シンタックス要素に基づいて、CUのPUのための予測されるビデオブロックを生成し得る。さらに、ビデオデコーダ30は、CUのTUと関連付けられた変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、CUのTUと関連付けられた残差ビデオブロックを再構築し得る。予測されるビデオブロックを生成し、残差ビデオブロックを再構築した後、ビデオデコーダ30は、予測されるビデオブロックと残差ビデオブロックとに基づいて、CUのビデオブロックを再構築し得る。このようにして、ビデオデコーダ30は、ビットストリーム中のシンタックス要素に基づいて、CUのビデオブロックを再構築し得る。
ビデオエンコーダ
図2は、本開示で説明される態様による技法を実装し得るビデオエンコーダ20の例を示すブロック図である。ビデオデコーダ20は、HEVCの場合のように、ビデオフレームの単一のレイヤを処理するように構成され得る。さらに、ビデオエンコーダ20は、本開示の技法のいずれかまたはすべてを実行するように構成され得る。いくつかの例では、本開示で説明される技法は、ビデオエンコーダ20の様々なコンポーネント間で共有され得る。いくつかの例では、追加または代替として、プロセッサ(図示せず)が、本開示で説明される技法のいずれかまたはすべてを実行するように構成され得る。
説明の目的で、本開示は、HEVCコーディングの状況においてビデオエンコーダ20を説明する。しかしながら、本開示の技法は他のコーディング規格または方法に適用可能であり得る。図2に示される例は、シングルレイヤコーデックのためのものである。しかしながら、いくつかの実施形態では、ビデオエンコーダ20の一部またはすべてが、マルチレイヤコーデックの処理のために複製され得る。
ビデオエンコーダ20は、ビデオスライス内のビデオブロックのイントラコーディングおよびインターコーディングを実行し得る。イントラコーディングは、所与のビデオフレームまたはピクチャ内のビデオの空間冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの隣接するフレームまたはピクチャ内のビデオの時間冗長性を低減または除去するために時間的予測に依拠する。イントラモード(Iモード)は、いくつかの空間ベースのコーディングモードのいずれかを指し得る。単方向予測(Pモード)または双方向予測(Bモード)のようなインターモードは、いくつかの時間ベースのコーディングモードのいずれかを指し得る。
図2の例では、ビデオエンコーダ20は複数の機能コンポーネントを含む。ビデオエンコーダ20の機能コンポーネントは、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換ユニット110と、再構築ユニット112と、フィルタユニット113と、復号ピクチャバッファ114と、エントロピー符号化ユニット116とを含む。予測処理ユニット100は、インター予測ユニット121と、動き推定ユニット122と、動き補償ユニット124と、イントラ予測ユニット126と、レイヤ間予測ユニット128とを含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。さらに、動き推定ユニット122および動き補償ユニット124は、高度に統合され得るが、図2の例では、説明の目的で別々に表されている。
ビデオエンコーダ20は、ビデオデータを受信し得る。ビデオエンコーダ20は、様々なソースからビデオデータを受信し得る。たとえば、ビデオエンコーダ20は、(たとえば、図1Aまたは図1Bに示された)ビデオソース18、または別のソースからビデオデータを受信し得る。ビデオデータは、一連のピクチャを表し得る。ビデオデータを符号化するために、ビデオエンコーダ20は、ピクチャの各々に対して符号化動作を実行し得る。ピクチャに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、ピクチャの各スライスに対して符号化動作を実行し得る。スライスに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、スライス中のツリーブロックに対して符号化動作を実行し得る。
ツリーブロックに対して符号化動作を実行することの一部として、予測処理ユニット100は、ツリーブロックのビデオブロックに対して四分木区分を実行して、ビデオブロックを徐々により小さいビデオブロックに分割し得る。より小さいビデオブロックの各々が、異なるCUと関連付けられ得る。たとえば、予測処理ユニット100は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を、4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
CUと関連付けられたビデオブロックのサイズは、8×8のサンプルから、最大で64×64以上のサンプルを有するツリーブロックのサイズにまで及び得る。本開示では、「N×N(NxN)」および「N×N(N by N)」は、垂直方向の寸法および水平方向の寸法に関するビデオブロックのサンプルの寸法、たとえば、16×16(16x16)のサンプルまたは16×16(16 by 16)のサンプルを指すために、互換的に使用され得る。一般に、16×16のビデオブロックは、垂直方向に16個のサンプルを有し(y=16)、水平方向に16個のサンプルを有する(x=16)。同様に、N×Nのブロックは、一般に、垂直方向にN個のサンプルを有し、水平方向にN個のサンプルを有し、ここで、Nは非負の整数値を表す。
さらに、ツリーブロックに対して符号化動作を実行することの一部として、予測処理ユニット100は、ツリーブロックのための階層的な四分木データ構造を生成し得る。たとえば、ツリーブロックは、四分木データ構造のルートノードに対応し得る。予測処理ユニット100がツリーブロックのビデオブロックを4つのサブブロックに区分する場合、ルートノードは、四分木データ構造中に4つの子ノードを有する。子ノードの各々は、サブブロックの1つと関連付けられたCUに対応する。予測処理ユニット100がサブブロックの1つを4つのサブサブブロックに区分する場合、サブブロックと関連付けられたCUに対応するノードは、サブサブブロックの1つと関連付けられたCUに各々が対応する、4つの子ノードを有し得る。
四分木データ構造の各ノードは、対応するツリーブロックまたはCUのシンタックスデータ(たとえば、シンタックス要素)を含み得る。たとえば、四分木の中のノードは、そのノードに対応するCUのビデオブロックが4つのサブブロックに区分(たとえば、分割)されているかどうかを示す分割フラグを含み得る。CUのためのシンタックス要素は、再帰的に定義されてよく、CUのビデオブロックがサブブロックに分割されているかどうかに依存し得る。ビデオブロックが区分されていないCUは、四分木データ構造におけるリーフノードに対応し得る。コーディングされたツリーブロックは、対応するツリーブロックのための四分木データ構造に基づくデータを含み得る。
ビデオエンコーダ20は、ツリーブロックの区分されていない各CUに対して符号化動作を実行し得る。ビデオエンコーダ20が、区分されていないCUに対して符号化動作を実行するとき、ビデオエンコーダ20は、区分されていないCUの符号化された表現を表すデータを生成する。
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、2N×nU、nL×2N、nR×2N、または同様の対称なPUサイズでのインター予測とをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30は、2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズに対する非対称区分もサポートし得る。いくつかの例では、予測処理ユニット100は、CUのビデオブロックの辺と直角に交わらない境界に沿ってCUのPUの間でCUのビデオブロックを区分するように、幾何学的な区分を実行し得る。
インター予測ユニット121は、CUの各PUに対してインター予測を実行し得る。インター予測は、時間圧縮を実現し得る。PUに対してインター予測を実行するために、動き推定ユニット122は、PUのための動き情報を生成し得る。動き補償ユニット124は、PUベースの動き情報およびCUと関連付けられたピクチャ以外のピクチャ(たとえば、参照ピクチャ)の復号されたサンプルのための、予測されるビデオブロックを生成し得る。本開示では、動き補償ユニット124によって生成される予測されるビデオブロックは、インター予測されるビデオブロックと呼ばれることがある。
スライスは、Iスライス、Pスライス、またはBスライスであり得る。動き推定ユニット122および動き補償ユニット124は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUのために異なる動作を実行し得る。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、動き推定ユニット122および動き補償ユニット124は、PUに対してインター予測を実行しない。
PUがPスライス中にある場合、PUを含むピクチャは、「リスト0」と呼ばれる参照ピクチャのリストと関連付けられる。リスト0中の参照ピクチャの各々は、他のピクチャのインター予測に使用され得るサンプルを含む。動き推定ユニット122が、Pスライス中のPUに関して動き推定動作を実行するとき、動き推定ユニット122は、PUのための参照ブロックについて、リスト0中の参照ピクチャを探索し得る。PUの参照ブロックは、PUのビデオブロック中のサンプルに最も密接に対応するサンプルのセット、たとえば、サンプルのブロックであり得る。動き推定ユニット122は、参照ピクチャ中のサンプルのセットがどの程度密接にPUのビデオブロック中のサンプルに対応するかを決定するために、種々の尺度を使用し得る。たとえば、動き推定ユニット122は、絶対値差分和(SAD)、2乗差分和(SSD)、または他の差分の尺度によって、参照ピクチャ中のサンプルのセットがどの程度密接にPUのビデオブロック中のサンプルに対応するかを決定し得る。
Pスライス中のPUの参照ブロックを識別した後、動き推定ユニット122は、参照ブロックを含む、リスト0中の参照ピクチャを示す参照インデックスと、PUと参照ブロックとの間の空間変位を示す動きベクトルとを生成し得る。様々な例において、動き推定ユニット122は、動きベクトルを異なる精度で生成し得る。たとえば、動き推定ユニット122は、1/4サンプル精度、1/8サンプル精度、または他の分数のサンプル精度で動きベクトルを生成し得る。分数のサンプル精度の場合、参照ブロック値は、参照ピクチャ中の整数位置のサンプル値から補間され得る。動き推定ユニット122は、PUの動き情報として、参照インデックスと動きベクトルとを出力し得る。動き補償ユニット124は、PUの動き情報によって特定された参照ブロックに基づいて、PUの予測されるビデオブロックを生成し得る。
PUがBスライス中にある場合、PUを含むピクチャは、「リスト0」および「リスト1」と呼ばれる参照ピクチャの2つのリストと関連付けられ得る。いくつかの例では、Bスライスを含むピクチャは、リスト0とリスト1の組合せである、リストの組合せと関連付けられ得る。
さらに、PUがBスライス中にある場合、動き推定ユニット122は、PUのための単方向予測または双方向予測を実行し得る。動き推定ユニット122がPUのための単方向予測を実行するとき、動き推定ユニット122は、PUのための参照ブロックについて、リスト0またはリスト1の参照ピクチャを探索し得る。動き推定ユニット122は、次いで、参照ブロックを含む、リスト0またはリスト1中の参照ピクチャを示す参照インデックスと、PUと参照ブロックとの間の空間変位を示す動きベクトルとを生成し得る。動き推定ユニット122は、PUの動き情報として、参照インデックスと、予測方向インジケータと、動きベクトルとを出力し得る。予測方向インジケータは、参照インデックスが、リスト0中の参照ピクチャを示すか、またはリスト1中の参照ピクチャを示すかを示し得る。動き補償ユニット124は、PUの動き情報によって示された参照ブロックに基づいて、PUの予測されるビデオブロックを生成し得る。
動き推定ユニット122がPUのための双方向予測を実行するとき、動き推定ユニット122は、PUのための参照ブロックについて、リスト0中の参照ピクチャを探索することができ、また、PUのための別の参照ブロックについて、リスト1中の参照ピクチャを探索することができる。動き推定ユニット122は、次いで、参照ブロックを含む、リスト0およびリスト1中の参照ピクチャを示す参照インデックスと、参照ブロックとPUとの間の空間変位を示す動きベクトルとを生成し得る。動き推定ユニット122は、PUの動き情報として、PUの参照インデックスと動きベクトルとを出力し得る。動き補償ユニット124は、PUの動き情報によって示された参照ブロックに基づいて、PUの予測されるビデオブロックを生成し得る。
いくつかの事例では、動き推定ユニット122は、PUのための動き情報のフルセットをエントロピー符号化ユニット116に出力しない。そうではなく、動き推定ユニット122は、別のPUの動き情報を参照して、PUの動き情報をシグナリングし得る。たとえば、動き推定ユニット122は、PUの動き情報が、隣接PUの動き情報と十分に類似していると決定し得る。この例では、動き推定ユニット122は、PUと関連付けられたシンタックス構造において、PUが隣接PUと同じ動き情報を有することをビデオデコーダ30に示す値を示し得る。別の例では、動き推定ユニット122は、PUと関連付けられたシンタックス構造において、隣接PUと動きベクトル差分(MVD)とを特定し得る。動きベクトル差分は、PUの動きベクトルと、示される隣接PUの動きベクトルとの差分を示す。ビデオデコーダ30は、示される隣接PUの動きベクトルと、動きベクトル差分とを使用して、PUの動きベクトルを決定し得る。第2のPUの動き情報をシグナリングするときに第1のPUの動き情報を参照することによって、ビデオエンコーダ20は、より少数のビットを使用して、第2のPUの動き情報をシグナリングすることが可能であり得る。
CUに対して符号化動作を実行することの一部として、イントラ予測ユニット126は、CUのPUに対してイントラ予測を実行し得る。イントラ予測は、空間圧縮を実現し得る。イントラ予測ユニット126がPUに対してイントラ予測を実行するとき、イントラ予測ユニット126は、同じピクチャ中の他のPUの復号されたサンプルに基づいて、PUのための予測データを生成し得る。PUのための予測データは、予測されるビデオブロックと様々なシンタックス要素とを含み得る。イントラ予測ユニット126は、Iスライス、Pスライス、およびBスライス中のPUに対してイントラ予測を実行し得る。
PUに対してイントラ予測を実行するために、イントラ予測ユニット126は、PUのための予測データの複数のセットを生成するために、複数のイントラ予測モードを使用し得る。イントラ予測ユニット126がPUのための予測データのセットを生成するためにイントラ予測モードを使用するとき、イントラ予測ユニット126は、イントラ予測モードと関連付けられる方向および/または勾配で、隣接PUのビデオブロックからPUのビデオブロックにわたってサンプルを延ばし得る。隣接PUは、PU、CU、およびツリーブロックについて、左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測ユニット126は、PUのサイズに応じて、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。
予測処理ユニット100は、PUのための動き補償ユニット124によって生成された予測データ、またはPUのためのイントラ予測ユニット126によって生成された予測データの中から、PUの予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみの尺度に基づいて、PUのための予測データを選択する。
予測処理ユニット100が、イントラ予測ユニット126によって生成された予測データを選択する場合、予測処理ユニット100は、PUのための予測データを生成するために使用されたイントラ予測モード、たとえば、選択されたイントラ予測モードをシグナリングし得る。予測処理ユニット100は、選択されたイントラ予測モードを様々な方法でシグナリングし得る。たとえば、選択されたイントラ予測モードは、隣接PUのイントラ予測モードと同じであることが起こり得る。言い換えれば、隣接PUのイントラ予測モードは、現在のPUに対して最確モードであり得る。したがって、予測処理ユニット100は、選択されたイントラ予測モードが隣接PUのイントラ予測モードと同じであることを示すための、シンタックス要素を生成し得る。
上で論じられたように、ビデオエンコーダ20は、レイヤ間予測ユニット128を含み得る。レイヤ間予測ユニット128は、SHVCにおいて利用可能である1つまたは複数の異なるレイヤ(たとえば、ベースレイヤまたは参照レイヤ)を使用して、現在のブロック(たとえば、EL中の現在のブロック)を予測するように構成される。そのような予測は、レイヤ間予測と呼ばれ得る。レイヤ間予測ユニット128は、レイヤ間冗長性を低減するための予測方法を利用し、それによって、コーディング効率を改善し、計算リソースの要件を下げる。レイヤ間予測のいくつかの例は、レイヤ間イントラ予測、レイヤ間動き予測、およびレイヤ間残差予測を含む。レイヤ間イントラ予測は、エンハンスメントレイヤ中の現在のブロックを予測するために、ベースレイヤ中の並置されたブロックの再構築を使用する。レイヤ間動き予測は、エンハンスメントレイヤ中の動作を予測するために、ベースレイヤの動き情報を使用する。レイヤ間残差予測は、エンハンスメントレイヤの残差を予測するために、ベースレイヤの残差を使用する。
予測処理ユニット100がCUのPUのための予測データを選択した後、残差生成ユニット102は、CUのビデオブロックからCUのPUの予測されたビデオブロックを差し引くこと(たとえば、マイナス符号によって示される)によって、CUの残差データを生成し得る。CUの残差データは、CUのビデオブロック中のサンプルの異なるサンプル成分に対応する、2D残差ビデオブロックを含み得る。たとえば、残差データは、CUのPUの予測されるビデオブロック中のサンプルのルミナンス成分と、CUの元のビデオブロック中のサンプルのルミナンス成分との間の差分に対応する、残差ビデオブロックを含み得る。さらに、CUの残差データは、CUのPUの予測されるビデオブロック中のサンプルのクロミナンス成分と、CUの元のビデオブロック中のサンプルのクロミナンス成分との間の差分に対応する、残差ビデオブロックを含み得る。
予測処理ユニット100は、CUの残差ビデオブロックをサブブロックに区分するために、四分木区分を実行し得る。分割されていない各残差ビデオブロックは、CUの異なるTUと関連付けられ得る。CUのTUと関連付けられる残差ビデオブロックのサイズおよび位置は、CUのPUと関連付けられたビデオブロックのサイズおよび位置に基づいてもよく、または基づかなくてもよい。「残差四分木」(RQT)と呼ばれる四分木構造は、残差ビデオブロックの各々と関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
変換処理ユニット104は、TUと関連付けられた残差ビデオブロックに1つまたは複数の変換を適用することによって、CUの各TUのための1つまたは複数の変換係数ブロックを生成し得る。変換係数ブロックの各々は、変換係数の2D行列であり得る。変換処理ユニット104は、TUと関連付けられた残差ビデオブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を、TUと関連付けられた残差ビデオブロックに適用し得る。
変換処理ユニット104が、TUと関連付けられた変換係数ブロックを生成した後、量子化ユニット106は、変換係数ブロック中の変換係数を量子化し得る。量子化ユニット106は、CUと関連付けられたQP値に基づいて、CUのTUと関連付けられた変換係数ブロックを量子化し得る。
ビデオエンコーダ20は、様々な方法でQP値をCUと関連付け得る。たとえば、ビデオエンコーダ20は、CUと関連付けられたツリーブロックに対してレートひずみ分析を実行し得る。レートひずみ分析では、ビデオエンコーダ20は、ツリーブロックに対して符号化動作を複数回実行することによって、ツリーブロックの複数のコーディングされた表現を生成し得る。ビデオエンコーダ20がツリーブロックの異なる符号化された表現を生成するとき、ビデオエンコーダ20は、異なるQP値をCUと関連付け得る。ビデオエンコーダ20は、最小のビットレートおよびひずみの尺度を有するツリーブロックのコーディングされた表現において所与のQP値がCUと関連付けられるとき、所与のQP値がCUと関連付けられることをシグナリングし得る。
逆量子化ユニット108および逆変換ユニット110は、変換係数ブロックから残差ビデオブロックを再構築するために、それぞれ、逆量子化と逆変換とを変換係数ブロックに適用し得る。再構築ユニット112は、TUと関連付けられた再構築されたビデオブロックを生成するために、再構築された残差ビデオブロックを、予測処理ユニット100によって生成された1つまたは複数の予測されるビデオブロックからの対応するサンプルに追加し得る。このようにCUの各TUのためのビデオブロックを再構築することによって、ビデオエンコーダ20は、CUのビデオブロックを再構築し得る。
再構築ユニット112がCUのビデオブロックを再構築した後、フィルタユニット113は、CUと関連付けられたビデオブロックにおけるブロッキングアーティファクトを低減するために、デブロッキング動作を実行し得る。1つまたは複数のデブロッキング動作を実行した後、フィルタユニット113は、CUの再構築されたビデオブロックを復号ピクチャバッファ114に記憶し得る。動き推定ユニット122および動き補償ユニット124は、後続のピクチャのPUに対してインター予測を実行するために、再構築されたビデオブロックを含む参照ピクチャを使用し得る。加えて、イントラ予測ユニット126は、CUと同じピクチャ中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ114の中の再構築されたビデオブロックを使用し得る。
エントロピー符号化ユニット116は、ビデオエンコーダ20の他の機能コンポーネントからデータを受信し得る。たとえば、エントロピー符号化ユニット116は、量子化ユニット106から変換係数ブロックを受信することができ、予測処理ユニット100からシンタックス要素を受信することができる。エントロピー符号化ユニット116がデータを受信するとき、エントロピー符号化ユニット116は、1つまたは複数のエントロピー符号化動作を実行して、エントロピー符号化されたデータを生成し得る。たとえば、ビデオエンコーダ20は、CAVLC動作、CABAC動作、変数間(V2V)レングスコーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。エントロピー符号化ユニット116は、エントロピー符号化されたデータを含むビットストリームを出力することができる。
データに対してエントロピー符号化動作を実行することの一部として、エントロピー符号化ユニット116は、コンテキストモデルを選択し得る。エントロピー符号化ユニット116がCABAC動作を実行している場合、コンテキストモデルは、特定の値を有する特定のビンの確率の推定値を示し得る。CABACの文脈では、「ビン」という用語は、シンタックス要素の2値化されたバージョンのビットを指すために使用される。
ビデオデコーダ
図3は、本開示において説明される態様による技法を実装し得るビデオデコーダ30の例を示すブロック図である。ビデオデコーダ30は、HEVCの場合のように、ビデオフレームの単一のレイヤを処理するように構成され得る。さらに、ビデオデコーダ30は、本開示の技法のいずれかまたはすべてを実行するように構成され得る。いくつかの例では、本開示において説明される技法は、ビデオデコーダ30の様々なコンポーネント間で共有され得る。いくつかの例では、追加または代替として、プロセッサ(図示せず)が、本開示で説明される技法のいずれかまたはすべてを実行するように構成され得る。
説明の目的で、本開示は、HEVCコーディングの状況においてビデオデコーダ30を説明する。しかしながら、本開示の技法は他のコーディング規格または方法に適用可能であり得る。図3に示される例は、シングルレイヤコーデックのためのものである。しかしながら、いくつかの実施形態では、ビデオデコーダ30の一部またはすべてが、マルチレイヤコーデックの処理のために複製され得る。
図3の例では、ビデオデコーダ30は複数の機能コンポーネントを含む。ビデオデコーダ30の機能コンポーネントは、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換ユニット156と、再構築ユニット158と、フィルタユニット159と、復号ピクチャバッファ160とを含む。予測処理ユニット152は、動き補償ユニット162と、イントラ予測ユニット164と、レイヤ間予測ユニット166とを含む。いくつかの例では、ビデオデコーダ30は、図2のビデオエンコーダ20に関して説明された符号化経路とは全般に逆の復号経路を実行し得る。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
ビデオデコーダ30は、符号化されたビデオデータを備えるビットストリームを受信し得る。ビットストリームは、複数のシンタックス要素を含み得る。ビデオデコーダ30がビットストリームを受信するとき、エントロピー復号ユニット150は、ビットストリームに対して解析動作を実行し得る。ビットストリームに対して解析動作を実行した結果として、エントロピー復号ユニット150は、ビットストリームからシンタックス要素を抽出し得る。解析動作を実行することの一部として、エントロピー復号ユニット150は、ビットストリーム中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換ユニット156、再構築ユニット158、およびフィルタユニット159は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成する再構築動作を実行し得る。
上で論じられたように、ビットストリームは、一連のNALユニットを備え得る。ビットストリームのNALユニットは、ビデオパラメータセットNALユニット、シーケンスパラメータセットNALユニット、ピクチャパラメータセットNALユニット、SEI NALユニットなどを含み得る。ビットストリームに対して解析動作を実行することの一部として、エントロピー復号ユニット150は、シーケンスパラメータセットNALユニットからのシーケンスパラメータセット、ピクチャパラメータセットNALユニットからのピクチャパラメータセット、SEI NALユニットからのSEIデータなどを抽出しエントロピー復号する、解析動作を実行し得る。
加えて、ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームに対して解析動作を実行することの一部として、エントロピー復号ユニット150は、コーディングされたスライスNALユニットからコーディングされたスライスを抽出しエントロピー復号する、解析動作を実行し得る。コーディングされたスライスの各々は、スライスヘッダと、スライスデータとを含み得る。スライスヘッダは、スライスに関するシンタックス要素を含み得る。スライスヘッダ中のシンタックス要素は、スライスを含むピクチャと関連付けられたピクチャパラメータセットを識別するシンタックス要素を含み得る。エントロピー復号ユニット150は、スライスヘッダを復元するために、コーディングされたスライスヘッダ中のシンタックス要素に対してCABAC復号動作のようなエントロピー復号動作を実行し得る。
コーディングされたスライスNALユニットからスライスデータを抽出することの一部として、エントロピー復号ユニット150は、スライスデータ中のコーディングされたCUからシンタックス要素を抽出する解析動作を実行し得る。抽出されたシンタックス要素は、変換係数ブロックと関連付けられたシンタックス要素を含み得る。エントロピー復号ユニット150は、次いで、シンタックス要素のいくつかに対してCABAC復号動作を実行し得る。
エントロピー復号ユニット150が区分されていないCUに対して解析動作を実行した後、ビデオデコーダ30は、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30はCUの各TUに対して再構築動作を実行し得る。CUの各TUについて再構築動作を実行することによって、ビデオデコーダ30は、CUと関連付けられた残差ビデオブロックを再構築し得る。
TUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられた変換係数ブロックを逆量子化(inverse quantize)、たとえば、逆量子化(de-quantize)し得る。逆量子化ユニット154は、HEVCのために提案された、またはH.264復号規格によって定義された逆量子化処理と同様の方法で、変換係数ブロックを逆量子化し得る。逆量子化ユニット154は、量子化の程度を決定し、同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、変換係数ブロックのCUのためにビデオエンコーダ20によって計算される量子化パラメータQPを使用し得る。
逆量子化ユニット154が変換係数ブロックを逆量子化した後、逆変換ユニット156は、変換係数ブロックと関連付けられたTUのための残差ビデオブロックを生成し得る。逆変換ユニット156は、TUのための残差ビデオブロックを生成するために、変換係数ブロックに逆変換を適用し得る。たとえば、逆変換ユニット156は、変換係数ブロックに、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を適用し得る。いくつかの例では、逆変換ユニット156は、ビデオエンコーダ20からのシグナリングに基づいて、変換係数ブロックに適用すべき逆変換を決定し得る。そのような例では、逆変換ユニット156は、変換係数ブロックと関連付けられたツリーブロックのための四分木のルートノードにおいてシグナリングされた変換に基づいて、逆変換を決定し得る。他の例では、逆変換ユニット156は、ブロックサイズ、コーディングモードなどのような、1つまたは複数のコーディング特性から逆変換を推測し得る。いくつかの例では、逆変換ユニット156はカスケード逆変換を適用し得る。
いくつかの例では、動き補償ユニット162は、補間フィルタに基づく補間を実行することによって、PUの予測されるビデオブロックを改良し得る。サブサンプル精度を有する動き補償のために使用されるべき補間フィルタ用の識別子は、シンタックス要素に含まれ得る。動き補償ユニット162は、PUの予測されるビデオブロックの生成の間にビデオエンコーダ20によって使用されたのと同じ補間フィルタを使用して、参照ブロックのサブ整数サンプルに対する補間された値を計算し得る。動き補償ユニット162は、受信されたシンタックス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを決定し、その補間フィルタを使用して予測されるビデオブロックを生成し得る。
PUが、イントラ予測を使用して符号化される場合、イントラ予測ユニット164は、イントラ予測を実行してPUのための予測されるビデオブロックを生成し得る。たとえば、イントラ予測ユニット164は、ビットストリーム中のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定し得る。ビットストリームは、PUのイントラ予測モードを決定するためにイントラ予測ユニット164が使用し得るシンタックス要素を含み得る。
いくつかの事例では、イントラ予測ユニット164が現在のPUのイントラ予測モードを決定するために別のPUのイントラ予測モードを使用するべきであることを、シンタックス要素が示し得る。たとえば、現在のPUのイントラ予測モードが隣接PUのイントラ予測モードと同じであることが起こり得る。言い換えれば、隣接PUのイントラ予測モードは、現在のPUに対して最確モードであり得る。したがって、この例では、ビットストリームは、PUのイントラ予測モードが隣接PUのイントラ予測モードと同じであることを示す、小さいシンタックス要素を含み得る。イントラ予測ユニット164は次いで、空間的に隣接するPUのビデオブロックに基づいてPUのための予測データ(たとえば、予測されるサンプル)を生成するために、イントラ予測モードを使用し得る。
上で論じられたように、ビデオデコーダ30はレイヤ間予測ユニット166も含み得る。レイヤ間予測ユニット166は、SHVCにおいて利用可能である1つまたは複数の異なるレイヤ(たとえば、ベースレイヤまたは参照レイヤ)を使用して、現在のブロック(たとえば、エンハンスメントレイヤ中の現在のブロック)を予測するように構成される。そのような予測は、レイヤ間予測と呼ばれ得る。レイヤ間予測ユニット166は、レイヤ間冗長性を低減するための予測方法を利用し、それによって、コーディング効率を改善し、計算リソースの要件を下げる。レイヤ間予測のいくつかの例は、レイヤ間イントラ予測、レイヤ間動き予測、およびレイヤ間残差予測を含む。レイヤ間イントラ予測は、エンハンスメントレイヤ中の現在のブロックを予測するために、ベースレイヤ中の並置されたブロックの再構築を使用する。レイヤ間動き予測は、エンハンスメントレイヤ中の動作を予測するために、ベースレイヤの動き情報を使用する。レイヤ間残差予測は、エンハンスメントレイヤの残差を予測するために、ベースレイヤの残差を使用する。レイヤ間予測方式の各々が、以下でより詳細に論じられる。
再構築ユニット158は、適用可能なとき、CUのTUと関連付けられた残差ビデオブロックとCUのPUの予測されるビデオブロックとを使用して、たとえば、イントラ予測データまたはインター予測データのいずれかを使用して、CUのビデオブロックを再構築し得る。したがって、ビデオデコーダ30は、ビットストリーム中のシンタックス要素に基づいて、予測されるビデオブロックと残差ビデオブロックとを生成することができ、予測されるビデオブロックと残差ビデオブロックとに基づいて、ビデオブロックを生成することができる。
再構築ユニット158がCUのビデオブロックを再構築した後、フィルタユニット159は、CUと関連付けられるブロッキングアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット159が、CUと関連付けられたブロッキングアーティファクトを低減するためにデブロッキング動作を実行した後、ビデオデコーダ30はCUのビデオブロックを復号ピクチャバッファ160に記憶し得る。復号ピクチャバッファ160は、次の動き補償、イントラ予測、および図1Aまたは図1Bのディスプレイデバイス32のようなディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ160中のビデオブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
パレットコーディングモード
主として様々なコーディングユニット間の冗長性を除去する従来のイントラ予測およびインター予測とは異なり、パレットコーディングでは、コーディングユニット内の反復ピクセル値/パターンの冗長性を対象とする。パレットコーディングモードでは、ピクセル値をテーブルインデックス(パレットインデックスとも呼ばれる)にマップするパレットと呼ばれるルックアップテーブルが最初にシグナリングされる。いくつかの実装形態では、パレットは、指定された最大サイズ(たとえば、32個のピクセル値)を有する。パレットは、ブロックサンプル用の予測子または再構成された最終ブロックサンプルとして使用できる色成分(たとえば、RGB、YUVなど)値または強度を表すテーブルインデックスによって番号付けされたエントリを含む。すなわち、いくつかの実装形態では、パレットインデックスは、現在のブロックにおける対応するピクセルの値を予測するのに使用されてもよく、他の実施形態では、現在のブロックにおける対応するピクセルの最終色成分を示してもよい。いくつかの実装形態では、パレットブロックにおけるサンプルが、3つのランモード、すなわち、「copy-leftモード」(またはランモード)、「copy-aboveモード」、および「エスケープモード」(またはピクセルモード)を使用してコーディングされる。
copy-leftモードにおいてコーディングされるパレットブロック内の位置については、パレットインデックスが最初にシグナリングされ、次いで「run_length」(または「palette_run」)(たとえば、M)がシグナリングされる。パレットブロック内の現在の位置およびそれに続くM個の位置は、現在の位置に関してシグナリングされる同じパレットインデックスを有するので、それらの位置に関して追加の情報をシグナリングする必要はない。パレットインデックス(たとえば、i)は、すべての3つの色成分によって共有され、すなわち、再構成されたピクセル値は、(Y, U, V)=(paletteY[i], paletteU[i], paletteV[i])である(色空間はYUVであると仮定する)。
copy-aboveモードにおいてコーディングされるパレットブロック内の位置については、パレットブロック内の後に続くN個の位置(現在の位置を含めると、合計でN+1個の位置)に関して、パレットインデックスがパレットブロック内のすぐ上の位置のパレットインデックスに等しいことを示すように値「run_length」(または「copy_run」)(たとえば、N)がシグナリングされる。
エスケープモード(またはピクセルモード)においてコーディングされるパレットブロック内の位置については、パレットブロック内の現在の位置に対応するピクセル値がシグナリングされる。エスケープモードは、エスケープフラグ(たとえば、フラグ値1は、現在の位置がエスケープモードにおいてコーディングされていることを示す)またはパレットインデックス(たとえば、パレットエントリのうちのいずれにも対応しないインデックス値またはパレットサイズ以上のインデックス値)を使用してシグナリングされてもよい。
パレットエントリは、各々がテーブルインデックスにマッピングされた1つまたは複数のピクセル値を含む。たとえば、所与のコーディングユニットが3つの一意のピクセル値(たとえば、赤、緑、および青)を含む場合、パレットエントリは3つのエントリ(0、赤)、(1、緑)、および(2、青)を含んでもよい。palette_index_mapは、パレットエントリを使用してコーディングされた1つまたは複数のパレットブロックを含み、パレットブロック内のピクセル値を示すのにパレットテーブルインデックス(たとえば、上記の例では0、1、および2)が使用される。
図4は、入力されたCU410、インデックスブロック420、エスケープピクセル430、およびパレット440の例示的な構成を示す。図4に示すように、入力されたCU410は、3つの一意のピクセル値、たとえば、(一例として)白、グレー、および黒を含む。白およびグレーの頻度に基づいて、パレット440には白ピクセル値およびグレーピクセル値のみが含まれ、インデックス値0が白ピクセル値に関連付けられ、インデックス値1がグレーピクセル値に関連付けられる。パレットに含まれない黒ピクセル値は、エスケープピクセル430として示され、パレットとは独立にコーディングされる。図4に示すように、インデックスブロック420は、ブロック内の位置ごとにインデックス値を含む。インデックスブロック420内の2つの位置はエスケープモードと同様に(たとえば、パレットインデックス0または1を参照せずに)コーディングされる。図4の例では、単一のエスケープピクセルのみおよび2つのパレットエントリのみが使用されるが、本アプリケーションの実施形態はそれに限らず、任意の数のエスケープピクセルおよびパレットエントリが使用されてもよい。いくつかの実施形態では、パレットサイズは32個のエントリに限られ、32個のエントリのうちのいずれにも関連付けられていない任意のピクセル値がエスケープピクセルになる。最大パレットサイズは任意の数に設定される。さらに、CUサイズは、8×8ピクセルに限らず、16×16または任意の他のサイズであってもよい。
copy-previousモードに関する冗長性除去
上述のように、パレットモードでは、パレットは、ブロックサンプル用の予測子または再構成された最終ブロックサンプルとして使用される場合がある色成分値を表すインデックスによって番号付けされたエントリを含む。パレット内の各エントリは、1つの色成分(たとえば、ルーマ値)または2つの成分(たとえば、2つのクロマ値)または3つの色成分(たとえば、RGB、YUVなど)を含んでもよい。
事前に復号されたパレットエントリがリストに記憶されてもよい。このリストは、現在のパレットモードCUにおけるパレットエントリを予測するために使用されてもよい。パレットブロック内のサンプルは、たとえば、「copy-left」、「copy-above」、および「エスケープ」などの3つのランモード、またはそれらの均等物を使用してコーディングされてもよい。
この開示の一態様では、パレットモードにおいてブロックを予測またはコーディングする以下の態様を改善することが望ましい。
copy-aboveモードを拡張するための技法が実施されてもよい。上方隣接ピクセルからコピーすることの他に、そのような技法は、コピーが上に隣接する隣接ピクセルではないピクセルから開始するのを可能にする。そのような「copy-previous」ランモードでは、開始位置、たとえば、行番号yがビットストリームとしてコーディングされてもよい。
関連する態様では、短縮バイナリコードなどが使用されてもよい。ラインインデックスyが現在のラインインデックスxから1を引いた値、すなわち、x-1よりも小さくなるように制限されるので、x-2に等しい最大数のyの候補値が入力として使用されてもよい。
走査順序における現在の位置の前のピクセルがcopy-previousモードの終了位置としてシグナリングされるとき、前のcopy-previousランが現在のピクセルを含めるように1だけ拡張されているので、現在のピクセルの開始行yを前のピクセルの開始行y'と同じにすることはできない。したがって、前のピクセルがcopy-previousモードを使用しており、現在のピクセルもcopy-previousモードを使用してコーディングされる場合、yのダイナミックレンジを1だけ縮小することができる。
図5Aは、本開示において説明する態様によるcopy-aboveモードの一例を示すブロック図である。図5Bは、本開示において説明する態様によるcopy-previousモードの一例を示すブロック図である。図5Aおよび図5Bの各々では、現在のラインがグレーに示され、コピーされる上のラインまたは前のラインが黒色に示されている。図5Aの実装形態において、copy-aboveモードでは、上の隣接行がコピーされる。図5Bのcopy-previousモードでは、前のラインyが現在のラインxにコピーされる。
パレットモードについての既存の技法に関する上述の問題を解消するために、本開示では、以下に改良について説明する。後述の技法および手法が独立に適用されてもよくあるいは任意に組み合わされて適用されてもよいことに留意されたい。
本開示の1つまたは複数の態様によれば、前のラインyをコーディングする際に冗長性を除去するための技法が提供される。本開示は、前のラインyのインデックスを直接コーディングするための技法を説明する。しかし、インデックスyではなくインデックスxとインデックスyとの間の距離、すなわち、(x-y-2)をコーディングする際に同じまたは同様の技法が適用されてもよいことに留意されたい。
copy-previousモードにおいてコーディングする際にビットストリーム内で生じる場合があるいくつかの冗長性がある。たとえば、x-1よりも小さい行インデックスを有する現在のピクセル値の列にA個(A>=0)のエスケープピクセルが存在する場合、第1のタイプの冗長性が生じる場合がある。この状況では、copy-previousモードをエスケープピクセルから開始することはできないのでyのダイナミックレンジをAだけ縮小することができる。
現在のピクセルの上に隣接する隣接ピクセルがエスケープピクセルではなく、そのインデックス値がIであると仮定される場合に、第2のタイプの冗長性が生じる場合がある。インデックス値がIに等しく、x-1よりも小さい行インデックスを有する現在のピクセル値の列にB個(B>=0)のピクセルが存在する場合、第2のタイプの冗長性が生じる場合がある。この状況では、yのダイナミックレンジをBだけ縮小することができる。これは、最新のcopy-previousモードによれば、現在のピクセルのインデックスがその上に隣接する隣接ピクセルと同じである場合に、エンコーダがcopy-previousモードを選択することができないという制限がある場合があるからである。
現在のピクセル値に関するcopy-leftモードのインデックス値をコーディングする際、走査順序における現在のピクセルの左方隣接ピクセルがcopy-previousランの終了点である場合、そのようなcopy-previousが上方のd個のラインからのコピーであると仮定することができるときに、第3のタイプの冗長性が生じる場合がある。現在のピクセルよりもdライン上のピクセルがエスケープピクセルではない場合、現在のピクセルのインデックスを現在のピクセルのインデックスからdライン上のピクセルと等しくすることはできない。したがって、現在のインデックスのダイナミックレンジを1だけ縮小することができる。現在のピクセルよりもdライン上のピクセルがCU境界の外側に位置する場合、そのピクセルの対応する値またはインデックスは既定の値kに等しくなるように設定されてもよい。一実施形態では、k=0である。
さらに、第1のラインまたは第2のラインにおけるyをコーディングする場合、「copy-previousモード」では、コピーの開始点を現在のピクセルの上の隣接ピクセルとすることはできない。言い換えれば、(y>=x-2)である。(x<2)である場合、「copy-previousモード」を選択することはできない。したがって、いくつかの実装形態では、この境界条件に対処する際の別の方法が提案される。(x<2)であるとき、「copy-previousモード」が使用される場合、ライン(x-2)がコピーの開始点として使用されることが暗黙的に仮定される。この場合、yのコーディングをバイパスすることができ、ライン(x-2)におけるあらゆるピクセルについて、それらのインデックス値は既定の定数「k」であると仮定される。一実施形態では、k=0である。
3つの上述の冗長性除去方法および第1のラインまたは第2のラインにおいてyをコーディングする方法を同時に有効化することができ、またはコーディングデバイスがそれらの方法のうちの1つまたは2つまたは3つのみを使用してコーデックの複雑さを低減させてもよい。いくつかの実施形態では、CUまたはCUの一部(たとえば、特定のピクセル)についてどれを使用するかを示すかまたは推測するために指定された条件が使用されてもよい。いくつかの実施形態では、CUまたはCUの一部(たとえば、特定のピクセル)についてどれを使用するかを示すために1つまたは複数のシンタックス要素が使用されてもよい。いくつかの実施形態では、どれを使用するかを示すために推測とシンタックス要素の組合せを使用することができる。
図6は、本開示において説明する態様によるパレットモードにおける冗長性除去の一例を示すブロック図である。図6では、コーディングすることができないピクセルがグレーに示されており、白いピクセルが第1のパレット値を表し、クロスハッチされたピクセルが第2のパレット値を表し、Oと示されたピクセルが現在のピクセルを表し、Xと示されたピクセルが「エスケープモード」においてコーディングされたピクセルを表す。さらに、図6は、ピクセルのブロック610と、現在のピクセルOの上方の列内のピクセルを強調する形状620とを含む。
次に、冗長性の除去の一例について図6に関して説明する。上記の冗長性を利用しない場合、図6におけるインデックスyのダイナミックレンジは4であり、すなわち、yに関する候補値の最大数は4である。
第1のタイプの冗長性の除去によれば、yを、エスケープピクセルが出現する2とすることはできない。したがって、第1のタイプの冗長性を除去した後、yのダイナミックレンジを3に縮小することができる(たとえば、候補行は0、1、および3であってもよい)。
第2のタイプの冗長性の除去によれば、行3におけるピクセルが形状620内の行4におけるピクセルと同じインデックスを有するのでyを3に等しくすることはできない。したがって、yのダイナミックレンジをさらに2に縮小することができる(たとえば、候補行は0および1であってもよい)。
図6の例では、第1および第2のタイプの冗長性除去を利用しない場合、yの位置をコーディングするのに2つのビットが必要である。第1および第2のタイプの冗長性を利用することによって、yの位置をコーディングするのに必要なビットは1つだけになる。
パレットモードに関する冗長性を除去するための例示的なフローチャート
図7を参照して、パレットモードにおいてビデオデータをコーディングする場合に冗長性を除去するための例示的手順について説明する。図7は、本開示の態様による、パレットモードにおいてビデオデータをコーディングするための方法700を示すフローチャートである。図7に示されるステップは、ビデオエンコーダ(たとえば、ビデオエンコーダ20)、ビデオデコーダ(たとえば、ビデオデコーダ30)、またはそれらの構成要素によって実施されてもよい。便宜上、方法700については、ビデオエンコーダ20、ビデオデコーダ30、または他の構成要素であってもよいビデオコーダ(単にコーダとも呼ばれる)によって実施されるものとして説明する。
方法700は、ブロック701から開始する。ブロック705において、コーダは、前のラインインデックスをコーディングすることによって、copy-previousモードにおいてビデオデータの現在のブロックの現在のピクセルをコーディングする。前のラインインデックスは、現在のブロックにおける現在のピクセルの上方に位置するピクセルを含むラインのインデックスを示す。ブロック710において、コーダは、copy-previousモードにおいて前のラインインデックスに関する候補値の数を特定することによって現在のブロックの現在のピクセルをコーディングする。
ブロック715において、コーダは、copy-previousモードにおいて、現在のブロックにおける現在のピクセルの上方のピクセルの列内のエスケープピクセルの数を特定することによって現在のピクセルのコーディングを継続する。ブロック720において、コーダは、copy-previousモードにおいて、前のラインインデックスに関する候補値の数を特定したエスケープピクセルの数だけ減らすことによって現在のピクセルのコーディングを継続する。方法700は、ブロック725において終了する。
方法700において、図7に示すブロックのうちの1つもしくは複数は削除されても(たとえば、実施されなくても)よく、かつ/または方法が実施される順序は入れ換えられてもよい。いくつかの実施形態では、追加ブロックが方法700に追加されてもよい。本開示の実施形態は、図7に示す例に限定されず、また、図7に示す例によって限定されることもなく、本開示に従って他の変形形態が実施されてもよい。
現在のブロックの外側からのcopy-above
前述のように、パレットモードの現在の実装形態では、ランモードまたはエスケープモードのみが可能であるときのブロックの最初の行を除いてランモード、コピーモード、またはエスケープモードによって現在のブロックのあらゆるピクセルをコーディングすることができる。シンタックス要素palette_run_type_flagは、ランモードが使用されるかそれともコピーモードが使用されるかを示してもよい。ランモードでは、パレットインデックスpalette_indexがラン値palette_runとともにシグナリングされてもよい。ラン値は、同じパレットインデックスを有するピクセルの数を示す。コピーモードでは、パレットインデックスが現在のピクセルの直上に位置するピクセルからコピーされるピクセルの数を示すラン値のみがシグナリングされる。エスケープモードは、ランモード自体を示すために特定のパレットインデックスが使用されるランモード内でコーディングされてもよい。現在のパレットバージョンでは、このインデックスはパレットサイズに等しい。エスケープモードでは、ラン値は、このモードが、色の値がpalette_escape_valとして明示的にシグナリングされる単一のピクセルトリプレット(Y、U、およびV)に適用されるので、コーディングされない。コピーモードは、ブロックにおける第1の行に関しては、同じブロックに属する上のピクセルがないので有効化されない。
フラグpalette_escape_val_present_flagは、エスケープピクセルが使用されることを示すようにブロックごとにシグナリングされてもよい。このフラグが1に等しい場合は、パレットコーディング済みブロックに少なくとも1つのエスケープピクセルがあることを示し、このフラグが0に等しい場合は、パレットコーディング済みブロックに少なくとも1つのエスケープピクセルがないことを示す。
いくつかの実装形態では、パレットサイズが、0から、31に等しくてもよいmax_palette_sizeまでの範囲に制限される。
パレットモードによってコーディングされたブロックの場合、パレットは、事前にパレットコーディングされたブロックのパレットエントリから予測されてもまたは新しいエントリとして明示的にシグナリングされてもよく、あるいは事前にコーディングされたブロックのパレットが完全に再使用されてもよい。事前にコーディングされたブロックのパレットを完全に再使用するケースは、パレット共有と呼ばれ、前のブロックのパレット全体が修正なしに再使用されることを示すようにフラグpalette_share_flagがシグナリングされてもよい。
パレットモードでは、ブロックにおけるピクセル走査は、2つのタイプ、すなわち、垂直方向走行走査または水平方向走行(たとえば、蛇行状)走査の一方であってもよい。ブロックにおいて使用される走査パターンは、ブロックごとにシグナリングされるフラグpalette_transpose_flagに応じて導かれてもよい。
パレットインデックスコーディングの間に、パレットインデックス調整プロセスが適用されてもよい。パレットインデックス調整プロセスは、ブロックにおける第2のピクセルから開始し、走査順序における前のピクセルのパレットモードをチェックすることを含む。まず、最大パレットインデックスサイズは1だけ縮小される。走査順序における前のピクセルに関するパレットモードがランモードに等しい場合、インデックスが走査順序における前のピクセルに関するパレットインデックス以上である場合にはコーディングすべきパレットインデックスが1だけ小さくされる。同様に、走査順序における前のピクセルに関するパレットモードがコピーモードに等しい場合、インデックスが上のパレットインデックスよりも大きい場合にはコーディングすべきパレットインデックスが1だけ小さくされる。この説明は、符号化側からの説明であり、デコーダ側でも対応するプロセスを逆の順序で実行することができる。
JCTVC-S0114では、ブロックの第1の行に関してcopy-aboveモードを有効化することが提案されている。この場合、隣接ブロック(すなわち、走査順序に応じて左または上に隣接するブロック)の再構成されたピクセル値が現在のブロックパレットインデックスにマッピングされ、それらのインデックスは、コピーモードが有効化される場合に第1の行におけるピクセルに関して割り当てられるかまたはコピーされる。そのような手法の欠点は、マッピングプロセスが、単純ではない場合があり、デコーダ側でも必要になる場合があることである。本明細書で使用する「隣接ピクセルコピー」という用語は概して、copy-aboveモードにおいて使用される場合がある現在のブロックの外側の隣接ピクセルを指す。
SCM-3.0では、以下のシンタックス最適化が採用された。
パレットサイズは、0であるとき、すべてのピクセルは、エスケーモードでコーディングされると推測され、スケープ存在フラグ、パレットモード、パレットインデックス、パレットラン、およびパレット転置フラグはシグナリングされない。さらに、スケープ存在フラグは1に等しいと推測され、パレットモードはINDEXモードに等しいと推測され、パレットインデックスはESCAPEに等しくなるように設定され、パレットラン値はブロックサイズから1を引いたものに等しくなるように設定され、パレット転置フラグは0に設定される。
パレットサイズが1であり、ブロックにおいてエスケープピクセルが使用されないとき、パレットモード、パレットラン、またはパレット転置フラグはシグナリングされず、パレットモードはINDEXモードに等しいと推測され、パレットインデックスは0に設定され、パレットラン値はブロックサイズから1を引いたものに等しくなるように設定され、パレット転置フラグは0に設定される。
以下の説明では、水平方向走査順序を仮定してブロックにおける最初の行に関してcopy-aboveモードが有効化されるケースについて詳述するが、実際のピクセルが左の隣接列からコピーされる垂直方向走査順序が使用されるときに同様の方法を適用してcopy-aboveモードを有効化することができる。このケースはさらに、転置を含むcopy-aboveモードと呼ぶことができる。
隣接ピクセルコピーのためのcopy-aboveモードの修正
いくつかの実施形態では、隣接ブロック内に位置する第1の行の上方の行はマッピングプロセスの後にパレットインデックスを有するので、ビデオコーディングシステム(たとえば、エンコーダまたはデコーダ)は、第1の行に関するパレットインデックス調整を有効化する能力を含んでもよい。
図8は、本開示において説明する態様によるcopy-outsideの一例を示すブロック図である。図8は、前のブロック805と現在のブロックとを含む。図8におけるグレーピクセルは、copy-previousモードにおいてコーディングされるピクセルを示し、黒いピクセルは、再構成された値またはパレットインデックスなどがコピーされる隣接ピクセルを示す。図8の図は、隣接ピクセルが、現在のブロック810にはなく、前のブロックまたは隣接ブロック805に位置することを除いて図5Aの図に類似している。
いくつかの実施形態では、ビデオコーディングシステムが、現在のブロックのパレットインデックスへの隣接ピクセル値(色トリプレット)のマッピングを使用しないように制限される場合がある。ピクセル-パレットインデックス変換の代わりに、再構成された明度が、隣接ブロックの上のピクセルから直接コピーされる。この場合、そのようなピクセルを示すように、copy_indexと示される場合がある何らかの擬似パレットインデックスが割り当てられてもよい。以下に、現在のブロックの外側のピクセルのコピーを有効化するときにエンコーダが現在のパレットモードを符号化する様々な例に関する考えられる方法を示す。
第1のオプションでは、事前にコーディングされたピクセルがコピーモードを使用しており、上のピクセルがcopy_indexであるときに、パレットインデックス調整が無効化される。この場合、copy_indexは実パレットインデックスではなく、パレットインデックスコーディングにおいて冗長性を生じさせることはない。デコーダでは、copy_indexと示されたピクセルの場合、現在のピクセル値を再構成するのに同じ列内の隣接ピクセルが使用されてもよい。
第2のオプションでは、パレットインデックスにcopy_indexを含めることができる。この場合、特定のパレットインデックスが割り当てられる。たとえば、copy_indexはpalette_sizeに等しくてもよく、エスケープインデックスは(palette_size+1)に等しくてもよい。この場合、copy_indexに関してランモードがシグナリングされてもよく、ラン値は、上の隣接ブロックピクセルからコピーされるピクセルの数を示すことができる。この特定のランモードは、上の参照ピクセルが隣接ブロック内に位置するコピーモードに類似しており、唯一の違いは、このランモードが、特定のインデックス(copy_index)を有するランモードによって示されることである。この状況では、パレットインデックス調整プロセスが適用されてもよい。
第3のオプションでは、ランモードまたはエスケープモードが隣接ピクセルコピーモードを中断させるまで隣接ピクセルコピーを適用することができる。たとえば、隣接ピクセルからのコピーモードは、特定のラン値を有するブロック内の第1のピクセルに使用されてもよく、このモードにおける最後のピクセルの後に、隣接ピクセルコピーが無効化され、このブロックにおいて使用されることもまたはシグナリングされることもできなくなる。この場合、ピクセルに関して割り当てられるcopy_indexは、それらのピクセルが、後のピクセルまたはパレットインデックス調整プロセスのコピーモードに関して参照ピクセルとして使用されるときに有効なパレットインデックス、たとえば0によって置き換えられてもよい。
第4のオプションでは、ブロックの外側の隣接ピクセルコピーを追加のパレットモードとしてシグナリングすることができる。たとえば、現在の既存のランモードおよびコピーモードの他に、第3のモード(copy-outside)が利用可能なパレットモードリストに追加される。さらに、このシグナリング方法はまた、拡張されたパレットモードリストを示すように拡張される。たとえば、ランモードを示すのにコードワード「0」が使用されてもよく、copy-aboveモードを示すのにコードワード「10」が使用されてもよく、copy-outsideモードを示すのにコードワード「11」が使用されてもよい。以下において、「copy-outsideモード」という用語は、このモードが別個にシグナリングされるかそれともcopy-aboveモードに組み込まれるかにかかわらず、隣接ピクセルコピーを使用するcopy-aboveモードについて説明するのに使用される。インデックスは、上述の第2のオプションと同様に、ピクセルが現在のブロックの上方のピクセルからコピーされるかどうかを示すように設計することができる。インデックス調整は、事前にコーディングされたピクセルがcopy_indexであるときに有効化されてもよい。代替として、擬似インデックスがピクセルに割り当てられてもよく、隣接ピクセルがcopy_indexであるときにインデックス調整が無効化される。
すべての上述の例は、個別に適用することができ、あるいはビデオコーデックの特定の実施形態において任意の適切な組合せとして適用することができる。
隣接ピクセルの利用可能性
場合によっては、隣接ブロックの再構成されたピクセルが利用可能にならないことがあり、あるいは利用不能として処理される場合がある。そのようなケースは、隣接ブロックが別のスライスまたはタイルに属する場合に生じる。別の状況では、制約イントラ予測(CIP)が有効化され、隣接ブロックの再構成されたピクセルがインターコーディングされたブロックから得られるとき、イントラ予測を行うことを目的としてそのようなピクセルが利用不能と見なされ、イントラコーディングされたブロックのピクセルから利用不能なピクセルを充填するためにパディングプロセスが適用されてもよい。これらのパディングされたピクセルは、CIPが有効化されるときにパレットコーディングに関してcopy-outsideモードを有効化するのに使用されてもよい。CIPは概して、イントラ予測プロセスにおいて隣接ブロックの使用を制限することを指す場合がある。たとえば、CIPフラグは、インターモードによってコーディングされた隣接ピクセルをイントラ予測子として使用できないことを示す場合がある。
いくつかの例では、パレットモードをイントラ予測ツールと見なすことができ、パレットモードはイントラ予測行動に従うべきである。たとえば、CIPが有効化されるときに隣接ピクセルが別のスライス、タイル、またはインター予測されたブロックに属する場合、隣接ピクセルコピーが無効化されてもよく、場合によよっては、第1の行においてパレットモードをシグナリングする必要がなくなる。
代替として、再構成されたピクセルは、イントラ予測の参照ピクセルの場合と同様に導かれてもよく、たとえば、パディングがCIPモードとともに適用されてもよい。言い換えれば、イントラ参照ピクセルはcopy-outsideモードにおいて使用されてもよい。さらに、隣接する参照ピクセルは、パレットコーディングにおいて適用される前にフィルタ処理されてもよい。
いくつかの追加の実施形態では、パレットモード、たとえば、パレットインデックスマッピングを含む場合も含まない場合もあるcopy-outsideモードおよび同様のモードにおいて隣接ブロックピクセルを使用する任意の方法に利用可能性チェックおよび処理が適用されてもよい。
いくつかの例では、上の隣接ブロック内に位置する上の行のピクセルの一部のみが利用可能である場合がある。たとえば、ピクセルのサブセットのみがインターコーディングされCIPが有効化されたときには、ピクセルのサブセットのみが利用可能になる場合がある。この場合、copy-outsideモードは、行全体に関して無効化されてもよく、あるいは利用可能な隣接ピクセルに関してのみ有効化されてよく、あるいは行全体に関して有効化されるが、利用不能な隣接ピクセルにはデフォルトパレットインデックス、たとえば0が使用されてもよい。
利用可能性チェックは、スライスタイプに応じて行うことが可能であり、たとえば、隣接ブロックは、同じスライスまたはタイルに属する場合、常にIスライスに利用可能であると見なしてもよい(すなわち、時間的予測は行われない)。さらに、CIPフラグに応じて、同じスライスまたはタイルの隣接ブロックは、CIPフラグが有効化された非Iスライスには常に利用不能であると見なされてもよい。
上述のように、隣接ブロックが利用可能ではないときにはデフォルトパレットインデックスが使用されてもよい。必要な変更を加えたうえで(すなわち、必要な変更を加えた上で)同じ考えを適用することができ、隣接ピクセルが、使用されないが、依然として利用可能であるときは、デフォルトパレットインデックスまたは隣接ピクセルコピーが切り替えられてもよく、隣接ブロックが利用可能であるときに、使用(またはモード)がフラグおよびフラグ設定によって示されてもよく、たとえば、使用がアプリケーションまたはユーザによって制御されてもよい。フラグは、たとえば、copy-outsideモードの使用を示すフラグについての以下の開示に関して説明するように、ビットストリームにおいてシグナリングされてもよい。
隣接ピクセルのパレットインデックスへのマッピング
上述のように、再構成された隣接ピクセルは、現在のブロックのパレットインデックスにマッピングされてもよい。一実装形態では、再構成されたピクセルから最小限の逸脱を有する最も近いパレットカラーが、マッピングされるパレットインデックスとして選択されてもよい。たとえば、色成分ごとに算出された、再構成された値とパレットカラーとの間の最小絶対誤差を与えるパレットエントリが選択されてもよい。
この方法は、すべての隣接ピクセルをパレットインデックスに変換するが、再構成された隣接ピクセルに近いパレットカラーはないので、この方法における誤差はかなり大きい。いくつかの実装形態では、そのような誤差に関する限界があってもよく、この限界は、エンコーダとデコーダの両方に関して固定されかつ既知であっても、あるいはビットストリーム、VPS、PPS、SPS、スライスヘッダなどの少なくとも1つのパラメータセット、コーディングユニット(CU)またはコーディングツリーユニット(CTU)レベルフラグなどにおいてシグナリングされてもよい。ロスレスコーディングモードが有効化されたときには、誤差は基本的に0に設定されてもよく、シグナリングは必要とされない。
誤差が限界を超えているとき、隣接ピクセルは、エスケープピクセルにマッピングされてもよく、後で現在のブロック内でcopy-aboveモードにおいて使用されてもよい。たとえば、エスケープピクセルが第1の行内に位置し、その上のピクセルがエスケープピクセルにマッピングされた隣接ピクセルであるとき。
隣接ピクセルおよびパレット予測子
第1のラインに関するcopy-aboveにおいて使用される隣接ピクセルは、パレット予測子に付加されてもよく、すなわち、再構成されたあらゆる明度がパレット予測子に新しいエントリとして付加されてもよい。この付加は条件付きで行われてもよく、たとえば、パレット予測子が満杯でないときに行われてもよい。これらのエントリは、パレット予測子内の任意の位置、たとえば、パレット予測子の開始位置、現在のブロックパレットエントリから現在のブロック予測における前の未使用のパレットエントリまでの間、パレット予測子の終了位置、または同様の組合せもしくは任意の組合せに付加されてもよい。
隣接ピクセルコピーの使用を示すフラグ
隣接ピクセルコピーは、パレットモードに関する隣接ブロックに対して何らかの追加的な依存性を付加するので、あるアプリケーションではcopy-outsideモードでは隣接ピクセルを使用しないことが望ましい場合がある。この状況では、フラグ、またはシンタックス要素、またはインジケータが、第1のラインのcopy-aboveモードに関する上方隣接ピクセルが使用中であることを示すように少なくとも1つのパラメータセットまたはパラメータセット拡張要素、たとえば、VPS、SPS、PPS、スライスヘッダ、CUレベル、CTUレベルなどにおいてシグナリングされてもよい。たとえば、フラグが1に等しい場合は、隣接ピクセルコピーが使用されることを意味する場合がある。
場合によっては、同じフラグ(たとえば、copy_enable_flagと示すことができる)が、全般的なcopy-outsideモードの有効化を制御してもよく、このことは、デフォルトのパレットインデックスもしくは隣接ピクセルコピー値を使用すること、隣接ピクセルをパレットインデックスにマッピングすること、または他の方法によって実現されてもよい。
別の例では、たとえばPPS拡張要素におけるcopy_enable_flagシグナリングがCIPフラグに依存する場合がある。前述のように、CIPが有効化された、隣接ピクセルコピー値またはマッピングされたインデックスに関する解決策のうちの1つが、copy-outsideモードを無効化する場合があり、その代わりにデフォルトのパレットインデックスが使用されることがあるので、copy-outsideモードの使用を示すcopy_enable_flagは、CIPフラグが無効化される(たとえば、0に等しい)場合にのみシグナリングされる場合があり、copy_enable_flagは、存在しない場合、0に等しい(または有効化されている)と推測される。
さらに別の態様では、copy-outsideモードに関連するCIP制約がスライスタイプに応じて適用される場合がある。たとえば、copy_enable_flagは、非Iスライスまたはインター予測が利用可能なスライスに関するcopy-outsideモードの使用を制御し、場合によってはイントラブロックコピーモードを除外することがある(いくつかの実装形態では、イントラブロックコピーモードがインター予測モードによって実現される場合がある)。CIPに関連して、copy_enable_flagはCIPフラグから無条件にシグナリングされる場合があり、CIPフラグが有効化されると、copy_enable_flagは、スライスタイプに応じてcopy-outsideモードまたはマッピングされたインデックスを制御する。たとえば、copy_enable_flagは、Iスライスまたはイントラ予測およびイントラブロックコピー予測が利用可能なスライスにおけるcopy-outsideモードの有効化を制御する(すなわち、copy-outsideモードは有効化される場合も無効化される場合もある)か、あるいはIスライスまたはイントラ予測およびイントラブロックコピー予測が利用可能なスライスにおけるマッピングされたインデックスの有効化を制御し、copy-outsideモードは、非Iスライスまたはインター予測が利用可能なスライスに関して無効化され、場合によってはイントラブロックコピーモードを除外する。スライスベースの手法の利点としては、条件を導くことができるのがスライス当たり1度だけであり、条件が隣接ブロックの予測モードに依存する必要がないことが挙げられる。
複数のフラグまたはシンタックス要素がシグナリングされる場合、たとえば、パラメータセットまたはパラメータセット拡張要素、たとえば、PPS拡張要素もしくはスライスヘッダにおける第1のフラグ、および第2のフラグがCUレベルでシグナリングされる場合、CUレベルフラグは、PPSまたはスライスヘッダフラグが有効化される(1に等しい)場合にのみシグナリングされることがあり、そうでない場合、CUレベルフラグはシグナリングされず、無効化されている(すなわち、0に等しい)と推測される。
フラグが無効化され、copy-outsideモードが使用されないことを意味する場合、ブロックの最初の行に関してパレットモードをシグナリングする必要はなく、パレットモードは、その行におけるINDEXモードに等しくなるように導かれる。
別の例では、フラグは、copy_enable_flagと同じであってもよく、copy-aboveモードが有効化されるときに隣接ピクセルコピー(値もしくはマッピングされたインデックス)またはデフォルトのパレットインデックスを使用することがブロックにおける第1の行に関して適用されるかどうかを示すようにシグナリングされてもよい。このフラグは、両方のモードに必要な変化を制御することもできる。たとえば、前述のようなパレットインデックス調整が隣接ピクセルコピーに関して無効化される場合があるが、デフォルトのパレットインデックスが使用されるときにパレットインデックス調整が使用されることがあり、したがって、インデックス調整の使用がフラグによって制御される場合がある。さらに、同様に、シンタックス最適化に関する例において説明したような、copy-outsideモードに関して適用される場合がある追加のシンタックス最適化が、同じフラグによって制御されてもよい。
フラグは、(たとえば、CABACプロセスを介して)バイパスまたはエントロピーコンテキストコーディングされてもよい。コンテキストは、信号コンテキストであってもよく、あるいはブロックサイズ、パレットサイズ、パレット予測子サイズ、パレット走査順序、パレット共有モード、およびエスケープピクセルの使用などに応じて導かれてもよい。
上方隣接モードからのコピーに関するシンタックス最適化
前述のように、冗長シグナリングを回避するために、パレットサイズが0および1に等しい場合のシンタックス最適化が行われてもよい。しかし、この最適化は、copy-outsideモードが使用中である場合には妥当ではない場合がある。
たとえば、再構成された値が隣接ピクセルからコピーされると仮定すると、パレットサイズが0である場合、このことは、ブロックにはエスケープピクセルのみが存在し、エスケープ値(カラートリプレット)のみがシグナリングされることを意味していた。しかし、上方隣接モードからのコピーが有効化されると、パレットサイズは依然として零である場合があるが、パレットモードをcopy-aboveまたはインデックスとすることができ、したがって、エスケープピクセルのみが使用されると仮定することはできない。この場合、エスケープ存在フラグ、パレットモード、パレットラン値をシグナリングする必要がある。パレットサイズが1に等しい場合にも同様の考察を行うことができる。
copy-outsideモードが使用されるとき、いくつかの実施形態によれば、エンコーダ/デコーダが後述の特徴のうちの1つまたは複数を含む修正されたシンタックスを使用するように構成されてもよい。シンタックスのこれらの特徴は、別個に適用されてもあるいは任意の適切な組合せとして適用されてもよい。
シンタックスの特徴1-パレット転置フラグが常にシグナリングされてもよい。
シンタックスの特徴2-エスケープ存在フラグが常にシグナリングされてもよい。
シンタックスの特徴3-パレットサイズが0であり、エスケープ存在フラグが0であり、ブロックにはエスケープピクセルが存在しないことを意味する場合、すべてのピクセルが隣接ブロックからコピーされる。この場合、パレットモード、パレットインデックス、およびパレットラン値をシグナリングする必要はなく、パレットモードは、copy-aboveモードと等しいものと推測されてもよい。さらに、コーディングすべきパレットラン値は、ブロック内のピクセルの総数から1を引いたものに等しくなるように導かれてもよい。パレットサイズが0であり、エスケープ存在フラグが1に等しい場合、パレットモードおよびパレットラン値がシグナリングされるが、パレットインデックスは依然として必要ではなく、パレットインデックスは、パレットモードがインデックスモードに等しいときにはエスケープインデックスに等しくなるように導かれてもよい。
シンタックスの特徴4-パレットサイズが1である場合、パレットモードおよびパレットラン値がシグナリングされてもよい。さらに、エスケープ存在フラグが0である場合、1つのインデックスのみが考えられる。この場合、パレットインデックスをシグナリングする必要はなく、パレットインデックスは0に等しくなるように導かれてもよい。エスケープ存在フラグが1に等しい場合、パレットインデックスがシグナリングされてもよい。
上述のようにシンタックス最適化に任意の修正を施す代わりに、ビットストリーム適合要件が適用されてもよく、すなわち、エンコーダは、シンタックス最適化規則のうちの1つを破る場合があるパレットシンタックス要素の選択およびシグナリングを行わないものとする。規則のうちの1つが破られる場合、そのようなビットストリームは、規格に適合していないと見なされる。一例として、ビットストリームは、パレットサイズが0である場合、上方隣接モードからのコピー(値またはインデックスのいずれか)が、そのブロック内で選択されることがないように制約されもよい。
パレットモードに関する隣接ピクセルを参照するための例示的なフローチャート
図9を参照して、パレットモードにおいてビデオデータをコーディングする場合に隣接ピクセルを参照するための例示的手順について説明する。図9は、本開示の態様による、パレットモードにおいてビデオデータをコーディングするための方法900を示すフローチャートである。図9に示されるステップは、ビデオエンコーダ(たとえば、ビデオエンコーダ20)、ビデオデコーダ(たとえば、ビデオデコーダ30)、またはそれらの構成要素によって実施されてもよい。便宜上、方法900については、ビデオエンコーダ20、ビデオデコーダ30、または他の構成要素であってもよいビデオコーダ(単にコーダとも呼ばれる)によって実施されるものとして説明する。
方法900は、ブロック901から開始する。ブロック905において、コーダは、隣接ブロック内に位置する隣接ピクセルが利用可能であるかどうかを判定する。ブロック910において、コーダは、隣接ピクセルが利用可能であることに応答して、copy-aboveモードにおいてランレングス値をコーディングすることによってビデオデータの現在のブロックの現在のピクセルをコーディングする。現在のピクセルは、走査順序における現在のブロックの第1のライン内に存在する。この方法は、ブロック915において終了する。
方法900において、図9に示すブロックのうちの1つもしくは複数は削除されても(たとえば、実施されなくても)よく、かつ/または方法が実施される順序は入れ換えられてもよい。いくつかの実施形態では、追加ブロックが方法900に追加されてもよい。本開示の実施形態は、図9に示す例にも、その例によっても限定されず、本開示に従って他の変形形態が実装されてよい。
他の考慮事項
本明細書で開示される情報および信号は、種々の異なる技術および技法のいずれかを使用して表され得る。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表され得る。
本明細書で開示された実施形態に関して説明された様々な例示的な論理ブロックおよびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、およびステップが、上では全般にその機能に関して説明された。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、具体的な適用例およびシステム全体に対して課される設計制限に依存する。当業者は、具体的な適用例ごとに様々な方法で説明される機能を実装し得るが、そのような実装形態の決定は、本開示の範囲からの逸脱を引き起こすと解釈されるべきではない。
本明細書で説明される技法は、ハードウェア、ソフトウェア、ファームウェア、または任意のその組合せで実装され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスのような、種々のデバイスのいずれかにおいて実装され得る。デバイスまたはコンポーネントとして説明される特徴は、集積論理デバイスに一緒に、またはディスクリートであるが相互運用可能な論理デバイスとして別々に実装され得る。ソフトウェアで実装される場合、技法は、実行されると、上で説明された方法の1つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって、少なくとも部分的に実現され得る。コンピュータ可読データ記憶媒体は、パッケージング材料を含み得るコンピュータプログラム製品の一部を形成し得る。コンピュータ可読媒体は、同期型ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体などのような、メモリまたはデータ記憶媒体を備え得る。技法は、追加または代替として、伝搬される信号または電波のような、命令またはデータ構造の形態でプログラムコードを搬送または伝達し、コンピュータによってアクセスされ、読み取られ、および/または実行され得るコンピュータ可読通信媒体によって、少なくとも部分的に実現され得る。
コンピュータ可読媒体(たとえば、メモリまたは他のデータ記憶デバイス)と通信する(と協働する)プロセッサは、プログラムコードの命令を実行してもよく、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の同等の集積回路もしくは個別論理回路などの1つまたは複数のプロセッサを含んでもよい。そのようなプロセッサは、本開示で説明された技法のいずれかを実行するように構成され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。また、プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。したがって、本明細書で使用される「プロセッサ」という用語は、上記の構造、上記の構造の任意の組合せ、または本明細書で説明される技法の実装に適した任意の他の構造もしくは装置のいずれかを指し得る。加えて、いくつかの態様では、本明細書で説明される機能は、符号化および復号のために構成された専用のソフトウェアまたはハードウェア内で提供されてよく、または複合ビデオエンコーダ/デコーダ(コーデック)に組み込まれてよい。また、本技法は、1つもしくは複数の回路または論理素子において完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々なコンポーネントまたはユニットが説明されたが、それらのコンポーネントまたはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
上記のことは様々な異なる実施形態に関して説明されたが、一実施形態からの特徴または要素は、本開示の教示から逸脱することなく他の実施形態と組み合わされてよい。しかしながら、それぞれの実施形態の間での特徴の組合せは必ずしもそれに限定されない。本開示の様々な実施形態が説明された。これらおよび他の実施形態は、以下の特許請求の範囲内に入る。