[0029] 概して、本開示は、高効率ビデオコーディング(HEVC)など、アドバンストビデオコーデックのコンテキストにおける、マルチレイヤ(またはマルチビュー)コーディングのためのネスティング補足エンハンスメント情報(SEI)メッセージに関する。より詳細には、本開示で説明する技法は、HEVCのマルチビュー拡張およびスケーラブル拡張、すなわち、それぞれMV−HEVCおよびSHVCにおける、ネスティングSEIメッセージ構造の構文解析中の構文解析エラーを低減するかまたはなくすためのシステム、装置、および方法に関する。
[0030] SEI NALユニットがローバイトシーケンスペイロード(RBSP)構造を備え得、RBSP構造は1つまたは複数のSEIメッセージ構造を備え得る。RBSP構造中に備えられ得る、異なるタイプのSEIメッセージ構造がある。これらのタイプは、1つまたは複数のSEIメッセージを含んでいることがある、ネスティングSEIメッセージ構造を含む。たとえば、スケーラブルネスティングSEIメッセージ構造およびビットストリームパーティションネスティングSEIメッセージ構造は、2つのそのようなタイプのネスティングSEIメッセージ構造である。
[0031] スケーラブルネスティングSEIメッセージ構造およびビットストリームパーティションネスティングSEIメッセージ構造のための従来のシンタックス構造(syntax structure)に基づいて、デコーダは、RBSP構造のトレーリングビット(trailing bit)中の、1の値を有する第1のビットの位置にバイト位置が等しくなるまで、ネスティングSEIメッセージ構造内のSEIメッセージを構文解析する。したがって、ネスティングSEIメッセージ構造が、RBSP構造内の他のデータ(すなわち、RBSPトレーリングビット以外のデータ)に先行した場合、これらの従来のシンタックス構造を実装するデコーダは、ネスティングSEIメッセージ構造内のSEIメッセージとして他のデータを構文解析することを試み、構文解析エラーを生じる。
[0032] 本明細書で開示する実施形態は、デコーダが、RBSPトレーリングビットではなく、ネスティングSEIメッセージ構造内のSEIメッセージの数に基づいて、SEIメッセージを構文解析し得るように、ネスティングSEIメッセージのための従来のシンタックス構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)を変更することによって、ネスティングSEIメッセージ構造に関係するこれらの構文解析エラーを防ぐ。たとえば、ネスティングSEIメッセージ構造内のSEIメッセージの数の指示が、ネスティングSEIメッセージ構造内にシンタックス要素として符号化され得る。このシンタックス要素は、次いで、その数のSEIメッセージのみが構文解析されることを保証するために、復号中に使用され得る。
[0033] いくつかの実施形態について、HEVCおよび/またはH.264規格のコンテキストにおいて本明細書で説明するが、本明細書で開示するシステムおよび方法が任意の好適なビデオコーディング規格に適用可能であり得ることを、当業者は諒解されよう。たとえば、本明細書で開示する実施形態は、以下の規格、すなわち、国際電気通信連合(ITU)電気通信標準化部門(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のうちの1つまたは複数に適用可能であり得る。また、本開示で説明する技法は、将来において開発される規格の一部になり得る。言い換えれば、本開示で説明する技法は、前に開発されたビデオコーディング規格、現在開発中のビデオコーディング規格、および次のビデオコーディング規格に適用可能であり得る。
[0034] HEVCは、概して、多くの点で、前のビデオコーディング規格のフレームワークに従う。HEVCにおける予測のユニットは、いくつかの前のビデオコーディング規格における予測のユニット(たとえば、マクロブロック(macroblock))とは異なる。事実上、いくつかの前のビデオコーディング規格において理解されているようなマクロブロックの概念は、HEVCでは存在しない。マクロブロックは、考えられる利益の中でも、高いフレキシビリティを与え得る、4分木方式に基づく階層構造と置き換えられる。たとえば、HEVC方式内で、3つのタイプのブロック、コーディングユニット(CU)、予測ユニット(PU:Prediction Unit)、および変換ユニット(TU:Transform Unit)が定義される。CUは領域スプリッティングの基本ユニットを指すことがある。CUはマクロブロックの概念に類似すると見なされ得るが、HEVCは、CUの最大サイズを制限せず、コンテンツ適応性を改善するために4つの等しいサイズのCUへの再帰的スプリッティングを可能にし得る。PUはインター/イントラ予測の基本ユニットと見なされ得、単一のPUは、不規則な画像パターンを効果的にコーディングするために、複数の任意の形状パーティションを含んでいることがある。TUは変換の基本ユニットと見なされ得る。TUは、PUとは無関係に定義され得るが、TUのサイズは、TUが属するCUのサイズに制限され得る。3つの異なる概念へのブロック構造のこの分離は、各ユニットがユニットのそれぞれの役割に従って最適化されることを可能にし得、それによりコーディング効率が改善され得る。
[0035] 単に説明の目的で、本明細書で開示するいくつかの実施形態について、ビデオデータの2つのレイヤ(たとえば、ベースレイヤなどの下位レイヤ、およびエンハンスメントレイヤなどの上位レイヤ)を含む例を用いて説明する。ビデオデータの「レイヤ」は、概して、ビュー、フレームレート、解像度などの少なくとも1つの共通の特性を有するピクチャのシーケンスを指すことがある。たとえば、レイヤは、マルチビュービデオデータの特定のビュー(たとえば、パースペクティブ)に関連するビデオデータを含み得る。別の例として、レイヤは、スケーラブルビデオデータの特定のレイヤに関連するビデオデータを含み得る。したがって、本開示は、ビデオデータのレイヤおよびビューを互換的に指すことがある。すなわち、ビデオデータのビューはビデオデータのレイヤと呼ばれることがあり、ビデオデータのレイヤはビデオデータのビューと呼ばれることがある。さらに、(マルチレイヤビデオコーダまたはマルチレイヤエンコーダデコーダとも呼ばれる)マルチレイヤコーデックは、マルチビューコーデックまたはスケーラブルコーデック(たとえば、MV−HEVC、3D−HEVC、SHVC、または別のマルチレイヤコーディング技法を使用するビデオデータを符号化および/または復号するように構成されたコーデック)を共同で指すことがある。ビデオ符号化およびビデオ復号は両方とも、一般にビデオコーディングと呼ばれることがある。そのような例は、複数のベースレイヤおよび/またはエンハンスメントレイヤを含む構成に適用可能であり得ることを理解されたい。さらに、説明を簡単にするために、以下の開示は、いくつかの実施形態に関して「フレーム()」または「ブロック」という用語を含む。ただし、これらの用語は限定的なものではない。たとえば、以下で説明する技法は、ブロック(たとえば、CU、PU、TU、マクロブロックなど)、スライス、フレームなど、任意の好適なビデオユニットとともに使用され得る。
ビデオコーディング規格(Video Coding Standards)
[0036] ビデオ画像、TV画像、静止画像、あるいはビデオレコーダまたはコンピュータによって生成された画像など、デジタル画像は、水平ラインおよび垂直ラインで構成されたピクセルまたはサンプルからなり得る。単一の画像中のピクセルの数は一般に数万個である。各ピクセルは、一般に、ルミナンス情報とクロミナンス情報とを含んでいる。圧縮がなければ、画像エンコーダから画像デコーダに搬送されるべき情報の甚だしい量は、リアルタイム画像送信を不可能にするであろう。送信されるべき情報の量を低減するために、JPEG、MPEGおよびH.263規格など、いくつかの異なる圧縮方法が開発された。
[0037] ビデオコーディング規格は、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、ならびにそれぞれSVCおよびMVCと称する、それのスケーラブルおよびマルチビューコーディング拡張を含む、(ISO/IEC MPEG−4 AVCとしても知られる)ITU−T H.264を含む。
[0038] さらに、HEVCが、ITU−Tビデオコーディングエキスパートグループ(VCEG)とISO/IECモーションピクチャエキスパートグループ(MPEG)とのジョイントコラボレーションチームオンビデオコーディング(JCT−VC)によって開発されている。HEVCのマルチビュー拡張すなわちMV−HEVC、およびSHVCと称されるHEVCのスケーラブル拡張も、それぞれJCT−3V(ITU−T/ISO/IECジョイントコラボレーティブチームオン3Dビデオコーディング拡張開発)およびJCT−VCによって開発されている。
ビデオコーディングシステム(Video Coding System)
[0039] 添付の図面を参照しながら新規のシステム、装置、および方法の様々な態様について以下でより十分に説明する。しかしながら、本開示は、多くの異なる形態で実施され得、本開示全体にわたって提示する任意の特定の構造または機能に限定されるものと解釈すべきではない。むしろ、これらの態様は、本開示が周到で完全になり、本開示の範囲を当業者に十分に伝えるために与えられる。本明細書の教示に基づいて、本開示の範囲は、本開示の他の態様とは無関係に実装されるにせよ、本開示の他の態様と組み合わせられるにせよ、本明細書で開示する新規のシステム、装置、および方法のいかなる態様をもカバーするものであることを、当業者は諒解されたい。たとえば、本明細書に記載の態様をいくつ使用しても、装置は実装され得、または方法は実施され得る。さらに、本開示の範囲は、本明細書に記載された本開示の様々な態様に加えてまたはそれらの態様以外に、他の構造、機能、または構造および機能を使用して実施されるそのような装置または方法を包含するものである。本明細書で開示する任意の態様が請求項の1つまたは複数の要素によって実施され得ることを理解されたい。
[0040] 本明細書では特定の態様について説明するが、これらの態様の多くの変形および置換は本開示の範囲内に入る。好適な態様のいくつかの利益および利点が説明されるが、本開示の範囲は特定の利益、使用、または目的に限定されるものではない。むしろ、本開示の態様は、様々なワイヤレス技術、システム構成、ネットワーク、および伝送プロトコルに広く適用可能であるものとし、それらのうちのいくつかを例として、図および好適な態様についての以下の説明において示す。発明を実施するための形態および図面は、本開示を限定するものではなく説明するものにすぎず、本開示の範囲は添付の特許請求の範囲およびそれの均等物によって定義される。
[0041] 図1は、(たとえば、ネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素を、ネスティングSEIメッセージ構造中にコーディングすること、および/またはSEIメッセージを構文解析するためにシンタックス要素を使用することによって)本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減するための技法を利用し得る、例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用し説明する「ビデオコーダ(video coder)」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング(video coding)」または「コーディング(coding)」という用語は、ビデオ符号化とビデオ復号とを総称的に指すことがある。
[0042] 図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化ビデオデータを生成する。宛先デバイス14は、ソースデバイス12によって生成された符号化ビデオデータを復号し得る。ソースデバイス12は、コンピュータ可読記憶媒体または他の通信チャネルを含み得る通信チャネル16を介してビデオデータを宛先デバイス14に与えることができる。図1の例では、ソースデバイス12および宛先デバイス14は、別個のデバイスを構成する。しかしながら、ソースデバイス12および宛先デバイス14は、同じデバイス(図示せず)の一部であり得ることに留意されたい。
[0043] ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、電話ハンドセット、いわゆる「スマート」フォンおよび/またはいわゆる「スマート」パッドなどのワイヤレス通信デバイス、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータ、ビデオストリーミングデバイス、アイウェアなど、エンティティ(たとえば、人間、動物、および/または別の被制御デバイス)によって(に)装着可能な(または着脱自在に取付け可能な)デバイス、ならびに/あるいはウェアラブルコンピューティングデバイス、エンティティ内で消費、摂取、または配置され得るデバイスまたは装置などを含む、広範囲にわたるデバイスをそれぞれ含み得る。ソースデバイス12および宛先デバイス14は、ワイヤレス通信(たとえば、セルラー通信、ローカルおよび/またはワイドエリア通信、ピアツーピア通信、ニアフィールド通信など)のために装備され得る。
[0044] 宛先デバイス14は、復号されるべき符号化ビデオデータを、通信チャネル16を介して受信し得る。通信チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動すること(すなわち、通信することまたは送信すること)が可能なタイプの媒体またはデバイスを備え得る。たとえば、通信チャネル16は、ソースデバイス12が、符号化ビデオデータをリアルタイムで宛先デバイス14に直接送信することを可能にするための通信媒体を備え得る。符号化ビデオデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調され、宛先デバイス14に送信され得る。通信媒体は、無線周波数(RF)スペクトルまたは1つまたは複数の物理伝送線路など、ワイヤレスまたはワイヤード通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を可能にするために有用であり得る他の機器を含み得る。
[0045] 本開示のいくつかの実施形態では、符号化データは、出力インターフェース22からストレージデバイスに出力され得る。そのような例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するストレージデバイスまたはコンピュータ可読記憶媒体に対応し得る。たとえば、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介してコンピュータ可読記憶媒体にアクセスし得る。同様に、符号化データは入力インターフェース28によってコンピュータ可読記憶媒体からアクセスされ得る。コンピュータ可読記憶媒体は、ハードドライブ、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、揮発性または不揮発性メモリ、あるいはビデオデータを記憶するための他のデジタル記憶媒体など、様々な分散されたまたはローカルにアクセスされるデータ記憶媒体のいずれかを含み得る。コンピュータ可読記憶媒体は、ソースデバイス12によって生成された符号化ビデオを記憶し得るファイルサーバまたは別の中間ストレージデバイスに対応し得る。宛先デバイス14は、ストリーミングまたはダウンロードを介して、コンピュータ可読記憶媒体から、記憶されたビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、その符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的ファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用)、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、またはローカルディスクドライブを含む。宛先デバイス14は、インターネット接続を含む標準のデータ接続を介して、符号化ビデオデータにアクセスし得る。これは、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適であるワイヤレスチャネル(たとえば、ワイヤレスローカルエリアネットワーク(WLAN)接続)、ワイヤード接続(たとえば、デジタル加入者線(DSL)、ケーブルモデムなど)、またはその両方の組合せを含み得る。コンピュータ可読記憶媒体からの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0046] 本開示の技法は、ワイヤレス適用例または設定に加えて適用例または設定を適用することができる。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーハイパーテキスト転送プロトコル(HTTP)などのインターネットストリーミングビデオ送信、データ記憶媒体上に符号化されたデジタルビデオ、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例など、様々なマルチメディア適用例のaをサポートするビデオコーディングに適用され得る。いくつかの実施形態では、システム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオテレフォニーなどの適用例をサポートするために、一方向または双方向ビデオ送信をサポートするように構成され得る。
[0047] 図1では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。ソースデバイス12のビデオエンコーダ20は、複数の規格(たとえば、HEVC)または規格拡張に準拠するビデオデータを含むビットストリームをコーディングするための技法を適用するように構成され得る。本開示の他の実施形態では、ソースデバイス12および宛先デバイス14は、他の構成要素または構成を含み得る。たとえば、ソースデバイス12は、外部カメラなど、ビデオソース18の「外部(external)」のビデオソース(すなわち、ビデオソース18以外のソース)から、ビデオデータを受信し得る。同様に、宛先デバイス14は、ディスプレイデバイス32などの一体型ディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
[0048] ソースデバイス12のビデオソース18は、ビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオを含んでいるビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースを含み得る。ビデオソース18は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、あるいはライブビデオ、アーカイブビデオ、および/またはコンピュータ生成ビデオの組合せを生成し得る。いくつかの実施形態では、ビデオソース18がビデオカメラであることに基づいて、ソースデバイス12および宛先デバイス14は、いわゆる「カメラフォン」または「ビデオフォン」を形成し得る。キャプチャされたビデオ、プリキャプチャされたビデオ、および/またはコンピュータ生成ビデオは、ビデオエンコーダ20によって符号化され得る。符号化ビデオ情報は、上記で説明したように、出力インターフェース22によって、コンピュータ可読記憶媒体を含み得る通信チャネル16に出力され得る。
[0049] コンピュータ可読記憶媒体は、ワイヤレスブロードキャストまたはワイヤードネットワーク送信などの一時媒体、あるいはハードディスク、フラッシュドライブ、コンパクトディスク、デジタルビデオディスク、Blu−rayディスク、または他のコンピュータ可読媒体などの記憶媒体(たとえば、非一時的記憶媒体)を含み得る。ネットワークサーバ(図示せず)は、(たとえば、ネットワーク送信を介して)ソースデバイス12から符号化ビデオデータを受信し、その符号化ビデオデータを宛先デバイス14に与え得る。ディスクスタンピング設備など、媒体製造設備のコンピューティングデバイスは、ソースデバイス12から符号化ビデオデータを受信し、その符号化ビデオデータを含んでいるディスクを生成し得る。したがって、通信チャネル16は、様々な形態の1つまたは複数のコンピュータ可読記憶媒体を含むものと理解され得る。
[0050] 宛先デバイス14の入力インターフェース28は、通信チャネル16を介して(たとえば、通信チャネル16から、または通信チャネル16上で)情報を受信することができる。通信チャネル16を介して受信された情報は、ビデオエンコーダ20によって定義され、ビデオデコーダ30によって使用され得る、ブロックおよび/または他のコード化ユニット(たとえば、ピクチャのグループ(GOP:group of picture))の特性および/または処理を記述するシンタックス要素を含む、シンタックス情報を含み得る。ディスプレイデバイス32は、復号されたビデオデータを、たとえば、ユーザに対して表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスのいずれかを含み得る。
[0051] ビデオエンコーダ20および/またはビデオデコーダ30は、HEVC規格などのビデオコーディング規格に従って動作し得、HEVCテストモデル(HM:HEVC Test Model)に準拠し得る。代替的に、ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG−4,Part10,アドバンストビデオコーディング(AVC)と呼ばれるITU−T H.264規格など、他のプロプライエタリ規格または業界規格、あるいはそのような規格の拡張に従って動作し得る。ただし、本開示の技法は、いかなる特定のコーディング規格にも限定されない。ビデオコーディング規格の他の例には、MPEG−2およびITU−T H.263がある。
[0052] 図1には示されていないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は、それぞれ、オーディオエンコーダおよびオーディオデコーダと統合され得、共通のデータストリーム中または別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するために、適切なMUX−DEMUXユニット、あるいは他のハードウェアおよび/またはソフトウェアを含み得る。適用可能な場合、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
[0053] 図1は一例にすぎず、(たとえば、ネスティングSEIメッセージ構造中にコーディングされた、SEIメッセージの数を示すシンタックス要素を利用することによって)本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減するための技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データがローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われ得る。符号化デバイスがデータを符号化し、メモリに記憶し得、および/または復号デバイスがメモリからデータを取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0054] ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアまたはそれらの任意の組合せなど、様々な好適なエンコーダ回路のいずれかとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、ソフトウェアのための命令を非一時的コンピュータ可読媒体に記憶し、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェアでその命令を実行し得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。ビデオエンコーダ20および/またはビデオデコーダ30を含むデバイスは、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを備え得る。
[0055] JCT−VCは、HEVC規格の開発に取り組み続けている。HEVC規格化の取り組みは、HEVCテストモデル(HM)と呼ばれるビデオコーディングデバイスの発展的モデルに基づく。HMは、たとえば、ITU−T H.264/AVCに従う既存のデバイスに対してビデオコーディングデバイスのいくつかの追加の能力を仮定する。たとえば、H.264は9つのイントラ予測符号化モードを提供するが、HMは33個ものイントラ予測符号化モードを提供し得る。
[0056] 概して、HMのワーキングモデルは、ビデオフレームまたはピクチャが、ルーマサンプルとクロマサンプルの両方を含む一連のツリーブロックまたは最大コーディングユニット(LCU:largest coding unit)に分割され得ることを記載している。ビットストリーム内のシンタックスデータが、ピクセルの数に関して最大コーディングユニットであるLCUのサイズを定義し得る。スライスは、コーディング順序でいくつかの連続するツリーブロックを含む。ビデオフレームまたはピクチャは、1つまたは複数のスライスに区分され得る。各ツリーブロックは、4分木に従ってコーディングユニット(CU)にスプリットされ得る。概して、4分木データ構造はCUごとに1つのノードを含み、ルートノードはツリーブロックに対応する。CUが4つのサブCUにスプリットされた場合、CUに対応するノードは4つのリーフノードを含み、リーフノードの各々はサブCUのうちの1つに対応する。
[0057] 4分木データ構造の各ノードは、対応するCUのためのシンタックスデータを与え得る。たとえば、4分木のノードは、そのノードに対応するCUがサブCUにスプリットされるかどうかを示すスプリットフラグを含み得る。CUのためのシンタックス要素は、再帰的に定義され得、CUがサブCUにスプリットされるかどうかに依存し得る。CUがさらにスプリットされない場合、そのCUはリーフCUと呼ばれる。本開示では、元のリーフCUの明示的スプリッティングが存在しない場合でも、リーフCUの4つのサブCUをリーフCUとも呼ぶ。たとえば、16×16サイズのCUがさらにスプリットされない場合、その16×16CUが決してスプリットされなくても、4つの8×8サブCUはリーフCUとも呼ばれる。
[0058] CUは、CUがサイズ差異を有しないことを除いて、H.264規格のマクロブロックと同様の目的を有する。たとえば、ツリーブロックは、(サブCUとも呼ばれる)4つの子ノードにスプリットされ得、各子ノードは、今度は親ノードとなり、別の4つの子ノードにスプリットされ得る。4分木のリーフノードと呼ばれる、最後のスプリットされていない子ノードは、リーフCUとも呼ばれるコーディングノードを備える。コード化ビットストリームに関連するシンタックスデータは、最大CU深さと呼ばれる、ツリーブロックがスプリットされ得る最大回数を定義し得、また、コーディングノードの最小サイズを定義し得る。それに応じて、ビットストリームは最小コーディングユニット(SCU:smallest coding unit)をも定義し得る。本開示では、HEVCのコンテキストにおけるCU、PU、またはTU、あるいは他の規格のコンテキストにおける同様のデータ構造(たとえば、H.264/AVCにおけるマクロブロックおよびそれのサブブロック)のいずれかを指すために「ブロック(block)」という用語を使用する。
[0059] CUは、コーディングノードと、コーディングノードに関連する予測ユニット(PU)および変換ユニット(TU)とを含む。CUのサイズは、コーディングノードのサイズに対応し、形状が正方形でなければならない。CUのサイズは、8×8ピクセルから最大64×64以上のピクセルをもつツリーブロックのサイズまでに及び得る。各CUは、1つまたは複数のPUと、1つまたは複数のTUとを含んでいることがある。CUに関連するシンタックスデータは、たとえば、CUを1つまたは複数のPUに区分することを記述し得る。区分モードは、CUが、スキップモード符号化またはダイレクトモード符号化されるか、イントラ予測モード符号化されるか、あるいはインター予測モード符号化されるかの間で異なり得る。PUは、形状が非正方形になるように区分され得る。CUに関連するシンタックスデータは、たとえば、4分木に従ってCUを1つまたは複数のTUに区分することも記述し得る。TUは、形状が正方形または非正方形(たとえば、矩形)であり得る。
[0060] HEVC規格は、CUごとに異なり得るTUに従う変換を可能にする。TUは、一般に、区分されたLCUについて定義された所与のCU内のPUのサイズに基づいてサイズ決定されるが、常にそうであるとは限らない。TUは、一般にPUと同じサイズであるかまたはPUよりも小さい。いくつかの例では、CUに対応する残差サンプルは、「残差4分木」(RQT:residual quad tree)と呼ばれる4分木構造を使用して、より小さいユニットに再分割され得る。RQTのリーフノードは変換ユニット(TU)と呼ばれることがある。TUに関連するピクセル差分値は、変換係数を生成するために変換され得、その変換係数は量子化され得る。
[0061] リーフCUは、1つまたは複数の予測ユニット(PU)を含み得る。概して、PUは、対応するCUの全部または一部分に対応する空間エリアを表し、そのPUの参照サンプルを取り出すためのデータを含み得る。その上、PUは、予測に関係するデータを含む。たとえば、PUがイントラモード符号化されるとき、PUについてのデータは、PUに対応するTUについてのイントラ予測モードを記述するデータを含み得る残差4分木(RQT)中に含まれ得る。別の例として、PUがインターモード符号化されるとき、PUは、PUのための1つまたは複数の動きベクトルを定義するデータを含み得る。PUの動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、1/4ピクセル精度もしくは1/8ピクセル精度)、動きベクトルが指す参照ピクチャ、および/または動きベクトルの参照ピクチャリスト(たとえば、リスト0、リスト1、もしくはリストC)を記述し得る。
[0062] 1つまたは複数のPUを有するリーフCUはまた、1つまたは複数の変換ユニット(TU)を含み得る。変換ユニットは、上記で説明したように、(TU4分木構造とも呼ばれる)RQTを使用して指定され得る。たとえば、スプリットフラグは、リーフCUが4つの変換ユニットにスプリットされるかどうかを示し得る。次いで、各変換ユニットは、さらなるサブTUにさらにスプリットされ得る。TUがさらにスプリットされないとき、そのTUはリーフTUと呼ばれることがある。概して、イントラコーディングでは、リーフCUに属するすべてのリーフTUは同じイントラ予測モードを共有する。すなわち、概して、リーフCUのすべてのTUの予測値を計算するために同じイントラ予測モードが適用される。イントラコーディングでは、ビデオエンコーダは、イントラ予測モードを使用して各リーフTUの残差値を、TUに対応するCUの一部と元のブロックとの間の差分として計算し得る。TUは、必ずしもPUのサイズに制限されるとは限らない。したがって、TUは、PUよりも大きいことも小さいこともある。イントラコーディングでは、PUは、同じCUの対応するリーフTUとコロケートされ得る。いくつかの例では、リーフTUの最大サイズは、対応するリーフCUのサイズに対応し得る。
[0063] その上、リーフCUのTUはまた、残差4分木(RQT)と呼ばれる、それぞれの4分木データ構造に関連付けられ得る。すなわち、リーフCUは、リーフCUがどのようにTUに区分されるかを示す4分木を含み得る。TU4分木のルートノードは概してリーフCUに対応し、CU4分木のルートノードは概してツリーブロック(またはLCU)に対応する。スプリットされないRQTのTUはリーフTUと呼ばれる。概して、本開示では、特に明記しない限り、リーフCUおよびリーフTUに言及するためにそれぞれCUおよびTUという用語を使用する。
[0064] ビデオシーケンスは、一般に、一連のビデオフレームまたはピクチャを含む。ピクチャのグループ(GOP)は、概して、ビデオピクチャのうちの一連の1つまたは複数を備える。GOPは、GOP中に含まれるいくつかのピクチャを記述するシンタックスデータを、GOPのヘッダ中、ピクチャのうちの1つまたは複数のヘッダ中、または他の場所に含み得る。ピクチャの各スライスは、それぞれのスライスのための符号化モードを記述するスライスシンタックスデータを含み得る。ビデオエンコーダ20は、一般に、ビデオデータを符号化するために個々のビデオスライス内のビデオブロックに対して動作する。ビデオブロックはCU内のコーディングノードに対応し得る。ビデオブロックは、固定サイズまたは変動サイズを有し得、指定されたコーディング規格に応じてサイズが異なり得る。
[0065] 一例として、HMは、様々なPUサイズでの予測をサポートする。特定のCUのサイズが2N×2Nであると仮定すると、HMは、2N×2NまたはN×NのPUサイズでのイントラ予測と、2N×2N、2N×N、N×2N、またはN×Nの対称PUサイズでのインター予測とをサポートする。HMはまた、2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズでのインター予測のための非対称区分をサポートする。非対称区分では、CUの一方向は区分されないが、他の方向は25%と75%とに区分される。25%の区分に対応するCUの部分は、「n」とその後ろに付く「Up」、「Down」、「Left」、または「Right」という表示によって示される。したがって、たとえば、「2N×nU」は、上部の2N×0.5N PUと下部の2N×1.5N PUとで水平方向に区分された2N×2N CUを指す。
[0066] 本開示では、「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は非負整数値を表す。ブロック中のピクセルは行および列に配列され得る。その上、ブロックは、必ずしも、水平方向において垂直方向と同じ数のピクセルを有する必要があるとは限らない。たとえば、ブロックは、NxMピクセルを備え得、ここで、Mは、必ずしもNに等しいとは限らない。
[0067] CUのPUを使用したイントラ予測コーディングまたはインター予測コーディングの後に、ビデオエンコーダ20は、CUのTUのための残差データを計算し得る。PUは、(ピクセル領域とも呼ばれる)空間領域において予測ピクセルデータを生成する方法またはモードを記述するシンタックスデータを備え得、TUは、変換、たとえば、残差ビデオデータへの離散サイン変換(DST)、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に同様の変換の適用後に、変換領域において係数を備え得る。残差データは、符号化されていないピクチャのピクセルと、PUに対応する予測値との間のピクセル差分に対応し得る。ビデオエンコーダ20は、CUのための残差データを含むTUを形成し、次いで、CUのための変換係数を生成するためにTUを変換し得る。
[0068] 変換係数を生成するための任意の変換の後に、ビデオエンコーダ20は変換係数の量子化を実行し得る。量子化は、それの最も広い通常の意味を有することが意図された広義の用語である。一実施形態では、量子化は、係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を行うプロセスを指す。量子化プロセスは、係数の一部または全部に関連するビット深度を低減し得る。たとえば、量子化中にnビット値がmビット値に切り捨てられ得、ここで、nはmよりも大きい。
[0069] 量子化の後に、ビデオエンコーダ20は、変換係数を走査し、量子化変換係数を含む2次元行列から1次元ベクトルを生成し得る。走査は、アレイの前部により高いエネルギー(したがって、より低い周波数)係数を配置し、アレイの後部により低いエネルギー(したがって、より高い周波数)係数を配置するように設計され得る。いくつかの例では、ビデオエンコーダ20は、エントロピー符号化され得るシリアル化ベクトル(serialized vector)を生成するために、量子化変換係数を走査するためにあらかじめ定義された走査順序を利用し得る。他の例では、ビデオエンコーダ20は適応型走査を実行し得る。1次元ベクトルを形成するために量子化変換係数を走査した後に、ビデオエンコーダ20は、たとえば、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)、コンテキスト適応型バイナリ算術コーディング(CABAC:context-adaptive binary arithmetic coding)、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング、または別のエントロピー符号化方法に従って1次元ベクトルをエントロピー符号化し得る。ビデオエンコーダ20はまた、ビデオデータを復号する際にビデオデコーダ30が使用するための符号化ビデオデータに関連するシンタックス要素をエントロピー符号化し得る。
[0070] CABACを実行するために、ビデオエンコーダ20は、コンテキストモデル内のコンテキストを、送信されるべきシンボルに割り当て得る。コンテキストは、たとえば、シンボルの隣接値が非0であるか否かに関係し得る。CAVLCを実行するために、ビデオエンコーダ20は、送信されるべきシンボルのための可変長コードを選択し得る。VLC中のコードワードは、比較的より短いコードが優勢シンボルに対応し、より長いコードが劣勢シンボルに対応するように構成され得る。このようにして、VLCの使用は、たとえば、送信されるべき各シンボルのために等長コードワード(equal-length codeword)を使用するよりも、ビット節約を達成し得る。確率決定は、シンボルに割り当てられたコンテキストに基づき得る。
[0071] ビデオエンコーダ20はさらに、ブロックベースのシンタックスデータ、フレームベースのシンタックスデータ、およびGOPベースのシンタックスデータなどのシンタックスデータを、たとえば、フレームヘッダ、ブロックヘッダ、スライスヘッダ、またはGOPヘッダ中でビデオデコーダ30に送り得る。GOPシンタックスデータは、それぞれのGOP中のフレームの数を記述し得、フレームシンタックスデータは、対応するフレームを符号化するために使用される符号化/予測モードを示し得る。
ビデオエンコーダ(Video Encoder)
[0072] 図2Aは、本開示で説明する態様による技法を実装し得るビデオエンコーダ20の一例を示すブロック図である。ビデオエンコーダ20は、HEVCの場合など、ビデオビットストリームのシングルレイヤを処理するように構成され得る。さらに、ビデオエンコーダ20は、限定はしないが、本明細書の他の場所でより詳細に説明するSEIメッセージ中の構文解析エラー(parsing error)を防ぐかまたは低減する方法と、関係するプロセスとを含む、本開示の技法のいずれかまたはすべてを実行するように構成され得る。一例として、レイヤ間予測ユニット66が(提供されたとき)、本開示で説明する技法のいずれかまたはすべてを実行するように構成され得る。ただし、本開示の態様はそのように限定されない。いくつかの例では、本開示で説明する技法は、ビデオエンコーダ20の様々な構成要素間で共有され得る。いくつかの例では、追加または代替として、プロセッサ(図示せず)が、本開示で説明する技法のいずれかまたはすべてを実行するように構成され得る。
[0073] 説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオエンコーダ20について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。図2Aのビデオエンコーダ20はコーデックのシングルレイヤを示している。しかしながら、図2Bに関してさらに説明するように、ビデオエンコーダ20の一部または全部はマルチレイヤコーデックに従う処理のために複製され得る。
[0074] ビデオエンコーダ20は、ビデオスライス内のビデオブロックの(イントラコーディング、インターコーディングまたはレイヤ間コーディングとも呼ばれる)イントラ予測、インター予測、およびレイヤ間予測を実行し得る。イントラコーディングは、所与のビデオフレームまたはピクチャ内のビデオの空間冗長性を低減または除去するために空間予測に依拠する。インターコーディングは、ビデオシーケンスの隣接フレームまたはピクチャ内のビデオの時間冗長性を低減または除去するために時間予測に依拠する。レイヤ間コーディングは、同じビデオコーディングシーケンス内の異なる(1つまたは複数の)レイヤ内のビデオに基づく予測に依拠する。イントラモード(Iモード)は、いくつかの空間ベースのコーディングモードのいずれかを指すことがある。単方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースのコーディングモードのいずれかを指すことがある。
[0075] 図2Aに示されているように、ビデオエンコーダ20は、符号化されるべきビデオフレーム内の現在ビデオブロックを受信する。図2Aの例では、ビデオエンコーダ20は、モード選択ユニット40と、参照フレームメモリ64と、加算器50と、変換処理ユニット52と、量子化ユニット54と、エントロピー符号化ユニット56とを含む。モード選択ユニット40は、動き補償ユニット44と、動き推定ユニット42と、イントラ予測ユニット46と、レイヤ間予測ユニット66と、パーティションユニット48とを含む。参照フレームメモリ64は復号ピクチャバッファを含み得る。復号ピクチャバッファは、それの通常の意味を有する広義の用語であり、いくつかの実施形態では、参照フレームのビデオコーデック管理型データ構造を指す。
[0076] ビデオブロック再構成のために、ビデオエンコーダ20はまた、逆量子化ユニット58と、逆変換ユニット60と、加算器62とを含む。再構成されたビデオからブロッキネスアーティファクト(blockiness artifact)を除去するためにブロック境界をフィルタ処理するためのデブロッキングフィルタ(図2Aに図示せず)も含まれ得る。所望される場合、デブロッキングフィルタは、一般に、加算器62の出力をフィルタ処理することになる。(ループ中またはループ後の)追加のフィルタもデブロッキングフィルタに加えて使用され得る。そのようなフィルタは、簡潔のために示されていないが、所望される場合、(ループ内フィルタとして)加算器50の出力をフィルタ処理し得る。
[0077] 符号化プロセス中に、ビデオエンコーダ20は、コーディングされるべきビデオフレームまたはスライスを受信する。フレームまたはスライスは複数のビデオブロックに分割され得る。動き推定ユニット42および動き補償ユニット44は、時間予測を行うために、1つまたは複数の参照フレーム中の1つまたは複数のブロックに対する受信されたビデオブロックのインター予測コーディングを実行する。イントラ予測ユニット46は、代替的に、空間予測を行うために、コーディングされるべきブロックと同じフレームまたはスライス中の1つまたは複数の隣接ブロックに対する受信されたビデオブロックのイントラ予測コーディングを実行し得る。ビデオエンコーダ20は、たとえば、ビデオデータのブロックごとに適切なコーディングモードを選択するために、複数のコーディングパスを実行し得る。
[0078] その上、パーティションユニット48は、前のコーディングパスにおける前の区分方式の評価に基づいて、ビデオデータのブロックをサブブロックに区分し得る。たとえば、パーティションユニット48は、最初にフレームまたはスライスをLCUに区分し、レートひずみ分析(たとえば、レートひずみ最適化など)に基づいてLCUの各々をサブCUに区分し得る。モード選択ユニット40は、さらに、サブCUへのLCUの区分を示す4分木データ構造を生成し得る。4分木のリーフノードCUは、1つまたは複数のPUと1つまたは複数のTUとを含み得る。
[0079] モード選択ユニット40は、たとえば、誤差結果に基づいてコーディングモード、すなわち、イントラ、インター、またはレイヤ間予測モードのうちの1つを選択し、得られたイントラ、インター、またはレイヤ間コーディングされたブロックを、残差ブロックデータを生成するために加算器50に与え、参照フレームとして使用するための符号化ブロックを再構成するために加算器62に与え得る。モード選択ユニット40はまた、動きベクトル、イントラモードインジケータ、パーティション情報、および他のそのようなシンタックス情報など、シンタックス要素をエントロピー符号化ユニット56に与える。
[0080] 動き推定ユニット42と動き補償ユニット44とは、高度に統合され得るが、概念的な目的のために別々に示されている。動き推定ユニット42によって実行される動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、現在フレーム(または他のコード化ユニット)内でコーディングされている現在ブロックに対する参照フレーム(または他のコード化ユニット)内の予測ブロックに対する現在ビデオフレームまたはピクチャ内のビデオブロックのPUの変位を示し得る。予測ブロックは、絶対差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって決定され得るピクセル差分に関して、コーディングされるべきブロックにぴったり一致することがわかるブロックである。いくつかの例では、ビデオエンコーダ20は、参照フレームメモリ64に記憶された参照ピクチャのサブ整数ピクセル位置の値を計算し得る。たとえば、ビデオエンコーダ20は、参照ピクチャの1/4ピクセル位置、1/8ピクセル位置、または他の分数ピクセル位置の値を補間し得る。したがって、動き推定ユニット42は、フルピクセル位置と分数ピクセル位置とに対する動き探索を実行し、分数ピクセル精度(fractional pixel precision)で動きベクトルを出力し得る。
[0081] 動き推定ユニット42は、PUの位置を参照ピクチャの予測ブロックの位置と比較することによって、インターコード化スライス中のビデオブロックのPUのための動きベクトルを計算する。参照ピクチャは、第1の参照ピクチャリスト(リスト0)または第2の参照ピクチャリスト(リスト1)から選択され得、それらの参照ピクチャリストの各々は、参照フレームメモリ64に記憶された1つまたは複数の参照ピクチャを識別する。動き推定ユニット42は、計算された動きベクトルをエントロピー符号化ユニット56と動き補償ユニット44とに送る。
[0082] 動き補償ユニット44によって実行される動き補償は、動き推定ユニット42によって決定された動きベクトルに基づいて予測ブロックをフェッチまたは生成することを伴い得る。動き推定ユニット42および動き補償ユニット44は、いくつかの例では、機能的に統合され得る。現在ビデオブロックのPUのための動きベクトルを受信すると、動き補償ユニット44は、動きベクトルが参照ピクチャリストのうちの1つにおいて指す予測ブロックの位置を特定し得る。加算器50は、以下で説明するように、コーディングされている現在ビデオブロックのピクセル値から予測ブロックのピクセル値を減算し、ピクセル差分値を形成することによって、残差ビデオブロックを形成する。いくつかの実施形態では、動き推定ユニット42はルーマ成分に対して動き推定を実行することができ、動き補償ユニット44は、クロマ成分とルーマ成分の両方のためにルーマ成分に基づいて計算された動きベクトルを使用することができる。モード選択ユニット40は、ビデオスライスのビデオブロックを復号する際にビデオデコーダ30が使用するためのビデオブロックとビデオスライスとに関連するシンタックス要素を生成し得る。
[0083] イントラ予測ユニット46は、上記で説明したように、動き推定ユニット42と動き補償ユニット44とによって実行されるインター予測の代替として、現在ブロックをイントラ予測または計算し得る。特に、イントラ予測ユニット46は、現在ブロックを符号化するために使用すべきイントラ予測モードを決定し得る。いくつかの例では、イントラ予測ユニット46は、(たとえば、別個の符号化パス中に、)様々なイントラ予測モードを使用して現在ブロックを符号化し得、イントラ予測ユニット46(または、いくつかの例では、モード選択ユニット40)は、テストされたモードから使用するのに適切なイントラ予測モードを選択し得る。
[0084] たとえば、イントラ予測ユニット46は、様々なテストされたイントラ予測モードのためのレートひずみ分析を使用してレートひずみ値を計算し、テストされたモードの中で最良のレートひずみ特性を有するイントラ予測モードを選択し得る。レートひずみ分析は、概して、符号化ブロックと、符号化ブロックを生成するために符号化された元の符号化されていないブロックとの間のひずみ(または誤差)の量、ならびに符号化ブロックを生成するために使用されるビットレート(すなわち、ビット数)を決定する。イントラ予測ユニット46は、どのイントラ予測モードがブロックについて最良のレートひずみ値を呈するかを決定するために、様々な符号化ブロックのためのひずみおよびレートから比を計算し得る。
[0085] ブロックのためのイントラ予測モードを選択した後に、イントラ予測ユニット46は、ブロックのための選択されたイントラ予測モードを示す情報をエントロピー符号化ユニット56に与え得る。エントロピー符号化ユニット56は、選択されたイントラ予測モードを示す情報を符号化し得る。ビデオエンコーダ20は、複数のイントラ予測モードインデックステーブルおよび複数の変更されたイントラ予測モードインデックステーブル(コードワードマッピングテーブルとも呼ばれる)と、様々なブロックの符号化コンテキストの定義と、コンテキストの各々について使用すべき、最確イントラ予測モード、イントラ予測モードインデックステーブル、および変更されたイントラ予測モードインデックステーブルの指示とを含み得る構成データを送信ビットストリーム中に含め得る。
[0086] ビデオエンコーダ20はレイヤ間予測ユニット66を含み得る。レイヤ間予測ユニット66は、SVCにおいて利用可能である1つまたは複数の異なるレイヤ(たとえば、ベースレイヤまたは参照レイヤ)を使用して、現在ブロック(たとえば、エンハンスメントレイヤ中の現在ブロック)を予測するように構成される。そのような予測はレイヤ間予測と呼ばれることがある。レイヤ間予測ユニット66は、レイヤ間冗長性を低減するために予測方法を利用し、それによって、コーディング効率を改善し、計算リソース要件を低減する。レイヤ間予測のいくつかの例としては、レイヤ間イントラ予測、レイヤ間動き予測、およびレイヤ間残差予測がある。レイヤ間イントラ予測は、エンハンスメントレイヤ中の現在ブロックを予測するために、ベースレイヤ中のコロケートブロックの再構成を使用する。レイヤ間動き予測は、エンハンスメントレイヤ中の動作を予測するために、ベースレイヤの動き情報を使用する。レイヤ間残差予測は、エンハンスメントレイヤの残差を予測するために、ベースレイヤの残差を使用する。ベースレイヤとエンハンスメントレイヤとが異なる空間解像度を有するとき、時間スケーリング関数を使用する空間動きベクトルスケーリングおよび/またはレイヤ間位置マッピングが、以下でより詳細に説明するように、レイヤ間予測ユニット66によって実行され得る。
[0087] ビデオエンコーダ20は、コーディングされている元のビデオブロックから、モード選択ユニット40からの予測データを減算することによって残差ビデオブロックを形成する。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。変換処理ユニット52は、離散コサイン変換(DCT)または概念的に同様の変換などの変換を残差ブロックに適用し、残差変換係数値を備えるビデオブロックを生成する。変換処理ユニット52は、DCTと概念的に同様である他の変換を実行し得る。たとえば、離散サイン変換(DST)、ウェーブレット変換、整数変換、サブバンド変換または他のタイプの変換も使用され得る。
[0088] 変換処理ユニット52は、変換を残差ブロックに適用し、残差変換係数のブロックを生成することができる。変換は、残差情報をピクセル値領域から周波数領域などの変換領域に変換し得る。変換処理ユニット52は、得られた変換係数を量子化ユニット54に送り得る。量子化ユニット54は、ビットレートをさらに低減するために変換係数を量子化する。量子化プロセスは、係数の一部または全部に関連するビット深度を低減し得る。量子化の程度は、量子化パラメータを調整することによって変更され得る。いくつかの例では、量子化ユニット54は、次いで、量子化変換係数を含む行列の走査を実行し得る。代替的に、エントロピー符号化ユニット56が走査を実行し得る。
[0089] 量子化の後に、エントロピー符号化ユニット56は、量子化変換係数をエントロピー符号化する。たとえば、エントロピー符号化ユニット56は、コンテキスト適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)、確率間隔区分エントロピー(PIPE)コーディングまたは別のエントロピーコーディング技法を実行し得る。コンテキストベースエントロピーコーディングの場合、コンテキストは隣接ブロックに基づき得る。エントロピー符号化ユニット56によるエントロピーコーディングの後に、符号化ビットストリームは、別のデバイス(たとえば、ビデオデコーダ30)に送信されるか、あるいは後で送信するかまたは取り出すためにアーカイブされ得る。
[0090] 逆量子化ユニット58および逆変換ユニット60は、(たとえば、参照ブロックとして後で使用するために)ピクセル領域において残差ブロックを再構成するために、それぞれ逆量子化および逆変換を適用する。動き補償ユニット44は、残差ブロックを参照フレームメモリ64のフレームのうちの1つの予測ブロックに加算することによって参照ブロックを計算し得る。動き補償ユニット44はまた、動き推定において使用するためのサブ整数ピクセル値を計算するために、再構成された残差ブロックに1つまたは複数の補間フィルタを適用し得る。加算器62は、参照フレームメモリ64に記憶するための再構成されたビデオブロックを生成するために、再構成された残差ブロックを、動き補償ユニット44によって生成された動き補償予測ブロックに加算する。再構成されたビデオブロックは、後続のビデオフレーム中のブロックをインターコーディングするために動き推定ユニット42および動き補償ユニット44によって参照ブロックとして使用され得る。
マルチレイヤビデオエンコーダ(Multi-Layer Video Encoder)
[0091] 図2Bは、本開示で説明する態様による技法を実装し得る(単にビデオエンコーダ21とも呼ばれる)マルチレイヤビデオエンコーダ21の一例を示すブロック図である。ビデオエンコーダ21は、SHVC、3D−HEVC、および/またはMV−HEVCの場合など、マルチレイヤビデオフレームを処理するように構成され得る。さらに、ビデオエンコーダ21は、限定はしないが、(たとえば、SEIメッセージの数を示すシンタックス要素を、ネスティングSEIメッセージ構造中にコーディングすることによって)本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減するための方法を含む、本開示の技法のいずれかまたはすべてを実行するように構成され得る。
[0092] ビデオエンコーダ21はビデオエンコーダ20Aとビデオエンコーダ20Bとを含み、それらの各々は図2Aのビデオエンコーダ20として構成され得、ビデオエンコーダ20に関して上記で説明した機能を実行し得る。さらに、参照番号の再利用によって示されるように、ビデオエンコーダ20Aおよび20Bは、ビデオエンコーダ20中に含まれる同じまたは同様のシステムとサブシステムとのうちの少なくともいくつかを含み得る。ビデオエンコーダ21は、2つのビデオエンコーダ20Aおよび20Bを含むものとして示されているが、ビデオエンコーダ21は、そのようなものとして限定されず、任意の数のビデオエンコーダレイヤを含み得る。いくつかの実施形態では、ビデオエンコーダ21はアクセスユニット(access unit)中の各ピクチャまたはフレームについてビデオエンコーダ20を含み得る。たとえば、5つのピクチャを含むアクセスユニットは、5つのエンコーダレイヤを含むビデオエンコーダによって処理または符号化され得る。いくつかの実施形態では、ビデオエンコーダ21は、アクセスユニット中のフレームよりも多くのエンコーダレイヤを含み得る。いくつかのそのような場合では、ビデオエンコーダレイヤのうちのいくつかは、いくつかのアクセスユニットを処理するときに非アクティブであり得る。
[0093] ビデオエンコーダ20Aおよび20Bに加えて、ビデオエンコーダ21はリサンプリングユニット90を含み得る。リサンプリングユニット90は、場合によっては、たとえば、エンハンスメントレイヤを作成するために、受信されたビデオフレームのベースレイヤをアップサンプリングし得る。リサンプリングユニット90は、フレームの受信されたベースレイヤに関連する特定の情報をアップサンプリングするが、他の情報をアップサンプリングしないことがある。たとえば、リサンプリングユニット90は、ベースレイヤの空間サイズまたはピクセルの数をアップサンプリングし得るが、スライスの数またはピクチャ順序カウントは一定のままであり得る。場合によっては、リサンプリングユニット90は、受信されたビデオを処理しないことがあるか、および/または随意であり得る。たとえば、場合によっては、モード選択ユニット40がアップサンプリングを実行し得る。いくつかの実施形態では、リサンプリングユニット90は、レイヤをアップサンプリングすることと、スライス境界ルールおよび/またはラスタ走査ルールのセットに準拠するために1つまたは複数のスライスを再編成、再定義、変更、または調整することとを行うように構成される。アクセスユニット中のベースレイヤまたは下位レイヤをアップサンプリングするものとして主に説明したが、場合によっては、リサンプリングユニット90はレイヤをダウンサンプリングし得る。たとえば、ビデオのストリーミング中に帯域幅が低減された場合、フレームは、アップサンプリングされるのではなく、ダウンサンプリングされ得る。リサンプリングユニット90は、クロッピングおよび/またはパディング演算をも実行するようにさらに構成され得る。
[0094] リサンプリングユニット90は、下位レイヤエンコーダ(たとえば、ビデオエンコーダ20A)の復号ピクチャバッファ114からピクチャまたはフレーム(またはピクチャに関連するピクチャ情報)を受信し、ピクチャ(または受信されたピクチャ情報)をアップサンプリングするように構成され得る。このアップサンプリングされたピクチャは、次いで、下位レイヤエンコーダと同じアクセスユニット中のピクチャを符号化するように構成された上位レイヤエンコーダ(たとえば、ビデオエンコーダ20B)のモード選択ユニット40に与えられ得る。場合によっては、上位レイヤエンコーダは、下位レイヤエンコーダから除去された1つのレイヤである。他の場合には、図2Bのレイヤ0ビデオエンコーダとレイヤ1エンコーダとの間に1つまたは複数の上位レイヤエンコーダがあり得る。
[0095] 場合によっては、リサンプリングユニット90は省略またはバイパスされ得る。そのような場合、ビデオエンコーダ20Aの復号ピクチャバッファ64からのピクチャは、直接、または少なくともリサンプリングユニット90に与えられることなしに、ビデオエンコーダ20Bのモード選択ユニット40に与えられ得る。たとえば、ビデオエンコーダ20Bに与えられたビデオデータと、ビデオエンコーダ20Aの復号ピクチャバッファ64からの参照ピクチャとが同じサイズまたは解像度である場合、参照ピクチャは、リサンプリングなしにビデオエンコーダ20Bに与えられ得る。
[0096] いくつかの実施形態では、ビデオエンコーダ21は、ビデオエンコーダ20Aにビデオデータを与える前に、ダウンサンプリングユニット94を使用して下位レイヤエンコーダに与えられるべきビデオデータをダウンサンプリングする。代替的に、ダウンサンプリングユニット94は、ビデオデータをアップサンプリングまたはダウンサンプリングすることが可能なリサンプリングユニット90であり得る。また他の実施形態では、ダウンサンプリングユニット94は省略され得る。
[0097] 図2Bに示されているように、ビデオエンコーダ21は、マルチプレクサ98、またはmuxをさらに含み得る。mux98は、ビデオエンコーダ21から合成ビットストリームを出力することができる。合成ビットストリームは、ビデオエンコーダ20Aおよび20Bの各々からビットストリームを取ることと、所与の時間において出力されるビットストリームを交替することとによって、作成され得る。場合によっては、2つの(または、3つ以上のビデオエンコーダレイヤの場合には、より多くの)ビットストリームからのビットが一度に1ビットずつ交替され得るが、多くの場合、ビットストリームは別様に合成され得る。たとえば、出力ビットストリームは、選択されたビットストリームを一度に1ブロックずつ交替することによって作成され得る。別の例では、出力ビットストリームは、ビデオエンコーダ20Aおよび20Bの各々から非1:1比のブロックを出力することによって作成され得る。たとえば、ビデオエンコーダ20Aから出力された各ブロックについて、2つのブロックがビデオエンコーダ20Bから出力され得る。いくつかの実施形態では、mux98からの出力ストリームはプリプログラムされ得る。他の実施形態では、mux98は、ソースデバイス12上のプロセッサからなど、ビデオエンコーダ21の外部のシステムから受信された制御信号に基づいて、ビデオエンコーダ20Aおよび20Bからのビットストリームを合成し得る。制御信号は、ビデオソース18からのビデオの解像度またはビットレートに基づいて、チャネル16の帯域幅に基づいて、ユーザに関連するサブスクリプション(たとえば、有料サブスクリプション対無料サブスクリプション)に基づいて、またはビデオエンコーダ21から望まれる解像度出力を決定するための他のファクタに基づいて生成され得る。
ビデオデコーダ(Video Decoder)
[0098] 図3Aは、本開示で説明する態様による技法を実装し得るビデオデコーダ30の一例を示すブロック図である。ビデオデコーダ30は、HEVCの場合など、ビデオビットストリームのシングルレイヤを処理するように構成され得る。さらに、ビデオデコーダ30は、限定はしないが、本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減する方法を含む、本開示の技法のいずれかまたはすべてを実行するように構成され得る。一例として、レイヤ間予測ユニット75が、限定はしないが、(たとえば、ネスティングSEIメッセージ(nesting SEI message)内の、SEIメッセージの数を示すシンタックス要素を利用することによって)本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減するための方法を含む、本開示で説明する技法のいずれかまたはすべてを実行するように構成され得る。ただし、本開示の態様はそのように限定されない。いくつかの例では、これらの技法は、ビデオデコーダ30の様々な構成要素間で共有され得る。いくつかの例では、追加または代替として、プロセッサ(図示せず)が、これらのいずれかまたはすべてを実行するように構成され得る。
[0099] 説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30について説明する。ただし、限定はしないが、本明細書の他の場所で説明するSEIメッセージの構文解析中の構文解析エラーをなくすかまたは低減するための方法を含む、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。図3Aのビデオデコーダ30はコーデックのシングルレイヤを示している。しかしながら、図3Bに関してさらに説明するように、ビデオデコーダ30の一部または全部はマルチレイヤコーデックに従う処理のために複製され得る。
[00100] 図3Aの例では、ビデオデコーダ30は、エントロピー復号ユニット70と、動き補償ユニット72と、イントラ予測ユニット74と、レイヤ間予測ユニット75と、逆量子化ユニット76と、逆変換ユニット78と、参照フレームメモリ82と、加算器80とを含む。いくつかの実施形態では、動き補償ユニット72および/またはイントラ予測ユニット74がレイヤ間予測を実行するように構成され得、その場合、レイヤ間予測ユニット75は省略され得る。ビデオデコーダ30は、いくつかの例では、図2A中のビデオエンコーダ20に関して説明した符号化パスとは概して逆の復号パスを実行し得る。動き補償ユニット72は、エントロピー復号ユニット70から受信された動きベクトルに基づいて予測データを生成し得、イントラ予測ユニット74は、エントロピー復号ユニット70から受信されたイントラ予測モードインジケータに基づいて予測データを生成し得る。参照フレームメモリ82は復号ピクチャバッファを含み得る。復号ピクチャバッファは、それの通常の意味を有する広義の用語であり、いくつかの実施形態では、参照フレームのビデオコーデック管理型データ構造を指す。
[00101] 復号プロセス中に、ビデオデコーダ30は、ビデオエンコーダ20から、符号化ビデオスライスのビデオブロックと、関連するシンタックス要素とを表す符号化ビデオビットストリームを受信する。ビデオデコーダ30のエントロピー復号ユニット70は、量子化係数と、動きベクトルまたはイントラ予測モードインジケータと、他のシンタックス要素とを生成するために、ビットストリームをエントロピー復号する。エントロピー復号ユニット70は、動きベクトルと他の予測シンタックス要素とを動き補償ユニット72に転送する。ビデオデコーダ30は、ビデオスライスレベルおよび/またはビデオブロックレベルでシンタックス要素を受信し得る。
[00102] ビデオスライスがイントラコード化(I)スライスとしてコーディングされるとき、イントラ予測ユニット74は、シグナリングされたイントラ予測モードと、現在フレームまたはピクチャの、前に復号されたブロックからのデータとに基づいて、現在ビデオスライスのビデオブロックのための予測データを生成し得る。ビデオフレームがインターコード化(たとえば、B、P、またはGPB)スライスとしてコーディングされるとき、動き補償ユニット72は、エントロピー復号ユニット70から受信された動きベクトルと他のシンタックス要素とに基づいて、現在ビデオスライスのビデオブロックのための予測ブロックを生成する。予測ブロックは、参照ピクチャリストのうちの1つ内の参照ピクチャのうちの1つから生成され得る。ビデオデコーダ30は、参照フレームメモリ82に記憶された参照ピクチャに基づいて、デフォルト構成技法を使用して、参照フレームリスト、すなわち、リスト0とリスト1とを構成し得る。
[00103] 動き補償ユニット72は、動きベクトルと他のシンタックス要素とを構文解析することによって現在ビデオスライスのビデオブロックのための予測情報を決定し、復号されている現在ビデオブロックのための予測ブロックを生成するために、その予測情報を使用する。たとえば、動き補償ユニット72は、ビデオスライスのビデオブロックをコーディングするために使用される予測モード(たとえば、イントラまたはインター予測)と、インター予測スライスタイプ(たとえば、Bスライス、Pスライス、またはGPBスライス)と、スライスのための参照ピクチャリストのうちの1つまたは複数のための構成情報と、スライスの各インター符号化ビデオブロックのための動きベクトルと、スライスの各インターコード化ビデオブロックのためのインター予測ステータスと、現在ビデオスライス中のビデオブロックを復号するための他の情報と、を決定するために、受信されたシンタックス要素のうちのいくつかを使用する。
[00104] 動き補償ユニット72はまた、補間フィルタに基づいて補間を実行し得る。動き補償ユニット72は、参照ブロックのサブ整数ピクセルの補間値を計算するために、ビデオブロックの符号化中にビデオエンコーダ20によって使用された補間フィルタを使用し得る。この場合、動き補償ユニット72は、受信されたシンタックス要素からビデオエンコーダ20によって使用された補間フィルタを決定し、予測ブロックを生成するために、その補間フィルタを使用し得る。
[00105] ビデオデコーダ30はレイヤ間予測ユニット75をも含み得る。レイヤ間予測ユニット75は、SVCにおいて利用可能である1つまたは複数の異なるレイヤ(たとえば、ベースレイヤまたは参照レイヤ)を使用して、現在ブロック(たとえば、エンハンスメントレイヤ中の現在ブロック)を予測するように構成される。そのような予測はレイヤ間予測と呼ばれることがある。レイヤ間予測ユニット75は、レイヤ間冗長性を低減するために予測方法を利用し、それによって、コーディング効率を改善し、計算リソース要件を低減する。レイヤ間予測のいくつかの例としては、レイヤ間イントラ予測、レイヤ間動き予測、およびレイヤ間残差予測がある。レイヤ間イントラ予測は、エンハンスメントレイヤ中の現在ブロックを予測するために、ベースレイヤ中のコロケートブロック(co-located block)の再構成を使用する。レイヤ間動き予測は、エンハンスメントレイヤ中の動作を予測するために、ベースレイヤの動き情報を使用する。レイヤ間残差予測は、エンハンスメントレイヤの残差を予測するために、ベースレイヤの残差を使用する。ベースレイヤとエンハンスメントレイヤとが異なる空間解像度を有するとき、空間動きベクトルスケーリングおよび/またはレイヤ間位置マッピングが、以下でより詳細に説明するように、時間スケーリング関数を使用してレイヤ間予測ユニット75によって実行され得る。
[00106] 逆量子化ユニット76は、ビットストリーム中で与えられ、エントロピー復号ユニット70によって復号された、量子化変換係数を逆量子化(inverse quantize)(たとえば、逆量子化(de-quantize))する。逆量子化プロセスは、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するための、ビデオスライス中の各ビデオブロックについてビデオデコーダ30によって計算される量子化パラメータQPYの使用を含み得る。
[00107] 逆変換ユニット78は、ピクセル領域において残差ブロックを生成するために、逆変換(たとえば、逆DCT、逆DST、逆整数変換、または概念的に同様の逆変換プロセス)を変換係数に適用する。
[00108] 動き補償ユニット72が、動きベクトルと他のシンタックス要素とに基づいて現在ビデオブロックのための予測ブロックを生成した後、ビデオデコーダ30は、逆変換ユニット78からの残差ブロックを動き補償ユニット72によって生成された対応する予測ブロックと加算することによって、復号されたビデオブロックを形成する。加算器90は、この加算演算を実行する1つまたは複数の構成要素を表す。所望される場合、ブロッキネスアーティファクト(blockiness artifact)を除去するために、復号されたブロックをフィルタ処理するためにデブロッキングフィルタも適用され得る。ピクセル遷移を平滑化するために、または場合によってはビデオ品質を改善するために、他のループフィルタも(コーディングループ中またはコーディングループ後のいずれかで)使用され得る。所与のフレームまたはピクチャ中の復号されたビデオブロックは、次いで、その後の動き補償のために使用される参照ピクチャを記憶する参照フレームメモリ82に記憶される。参照フレームメモリ82はまた、図1のディスプレイデバイス32などのディスプレイデバイス上での後の提示のために、復号されたビデオを記憶する。
マルチレイヤビデオデコーダ(Multi-Layer Video Decoder)
[00109] 図3Bは、本開示で説明する態様による技法を実装し得る(単にビデオデコーダ31とも呼ばれる)マルチレイヤビデオデコーダ31の一例を示すブロック図である。ビデオデコーダ31は、SHVC、3D−HEVC、および/またはMV−HEVCの場合など、マルチレイヤビデオフレームを処理するように構成され得る。さらに、ビデオデコーダ31は、本開示の技法のいずれかまたはすべてを実行するように構成され得る。
[00110] ビデオデコーダ31はビデオデコーダ30Aとビデオデコーダ30Bとを含み、それらの各々は図3Aのビデオデコーダ30として構成され得、ビデオデコーダ30に関して上記で説明した機能を実行し得る。さらに、参照番号の再利用によって示されるように、ビデオデコーダ30Aおよび30Bは、ビデオデコーダ30中に含まれるのと同じまたは同様のシステムとサブシステムとのうちの少なくともいくつかを含み得る。ビデオデコーダ31は、2つのビデオデコーダ30Aおよび30Bを含むものとして示されているが、ビデオデコーダ31は、そのようなものとして限定されず、任意の数のビデオデコーダレイヤを含み得る。いくつかの実施形態では、ビデオデコーダ31はアクセスユニット中の各ピクチャまたはフレームについてビデオデコーダ30を含み得る。たとえば、5つのピクチャを含むアクセスユニットは、5つのデコーダレイヤを含むビデオデコーダによって処理または復号され得る。いくつかの実施形態では、ビデオデコーダ31は、アクセスユニット中のフレームよりも多くのデコーダレイヤを含み得る。いくつかのそのような場合では、ビデオデコーダレイヤのうちのいくつかは、いくつかのアクセスユニットを処理するときに非アクティブであり得る。
[00111] ビデオデコーダ30Aおよび30Bに加えて、ビデオデコーダ31はアップサンプリングユニット92を含み得る。いくつかの実施形態では、アップサンプリングユニット92は、フレームまたはアクセスユニットのための参照ピクチャリストに追加されるべきエンハンストレイヤを作成するために、受信されたビデオフレームのベースレイヤをアップサンプリングし得る。このエンハンストレイヤは参照フレームメモリ82に(たとえば、それの復号ピクチャバッファなどに)記憶され得る。いくつかの実施形態では、アップサンプリングユニット92は、図2Bのリサンプリングユニット90に関して説明した実施形態の一部または全部を含むことができる。いくつかの実施形態では、アップサンプリングユニット92は、レイヤをアップサンプリングすることと、スライス境界ルールおよび/またはラスタ走査ルールのセットに準拠するために1つまたは複数のスライスを再編成、再定義、変更、または調整することとを行うように構成される。場合によっては、アップサンプリングユニット92は、受信されたビデオフレームのレイヤをアップサンプリングおよび/またはダウンサンプリングするように構成されたリサンプリングユニットであり得る。
[00112] アップサンプリングユニット92は、下位レイヤデコーダ(たとえば、ビデオデコーダ30A)の復号ピクチャバッファ82からピクチャまたはフレーム(またはピクチャに関連するピクチャ情報)を受信し、ピクチャ(または受信されたピクチャ情報)をアップサンプリングするように構成され得る。このアップサンプリングされたピクチャは、次いで、下位レイヤデコーダと同じアクセスユニット中のピクチャを復号するように構成された上位レイヤデコーダ(たとえば、ビデオデコーダ30B)のモード選択ユニット71に与えられ得る。場合によっては、上位レイヤデコーダは、下位レイヤデコーダから除去された1つのレイヤである。他の場合には、図3Bのレイヤ0デコーダとレイヤ1デコーダとの間に1つまたは複数の上位レイヤデコーダがあり得る。
[00113] 場合によっては、アップサンプリングユニット92は省略またはバイパスされ得る。そのような場合、ビデオデコーダ30Aの復号ピクチャバッファ82からのピクチャは、直接、または少なくともアップサンプリングユニット92に与えられることなしに、ビデオデコーダ30Bのモード選択ユニット71に与えられ得る。たとえば、ビデオデコーダ30Bに与えられたビデオデータと、ビデオデコーダ30Aの復号ピクチャバッファ82からの参照ピクチャとが同じサイズまたは解像度である場合、参照ピクチャは、アップサンプリングなしにビデオデコーダ30Bに与えられ得る。さらに、いくつかの実施形態では、アップサンプリングユニット92は、ビデオデコーダ30Aの復号ピクチャバッファ82から受信された参照ピクチャをアップサンプリングまたはダウンサンプリングするように構成されたリサンプリングユニット90であり得る。
[00114] 図3Bに示されているように、ビデオデコーダ31は、デマルチプレクサ99、またはdemuxをさらに含み得る。demux99は符号化ビデオビットストリームを複数のビットストリームにスプリットすることができ、demux99によって出力された各ビットストリームは異なるビデオデコーダ30Aおよび30Bに与えられる。複数のビットストリームは、ビットストリームを受信することによって作成され得、ビデオデコーダ30Aおよび30Bの各々は、所与の時間においてビットストリームの一部分を受信する。場合によっては、demux99において受信されるビットストリームからのビットは、ビデオデコーダの各々(たとえば、図3Bの例ではビデオデコーダ30Aおよび30B)の間で一度に1ビットずつ交替され得るが、多くの場合、ビットストリームは別様に分割される。たとえば、ビットストリームは、一度に1ブロックずつビットストリームを受信するビデオデコーダを交替することによって分割され得る。別の例では、ビットストリームは、非1:1比のブロックによって、ビデオデコーダ30Aおよび30Bの各々に分割され得る。たとえば、ビデオデコーダ30Aに与えられる各ブロックについて、2つのブロックがビデオデコーダ30Bに与えられ得る。いくつかの実施形態では、demux99によるビットストリームの分割はプリプログラムされ得る。他の実施形態では、demux99は、宛先デバイス14上のプロセッサからなど、ビデオデコーダ31の外部のシステムから受信された制御信号に基づいてビットストリームを分割し得る。制御信号は、入力インターフェース28からのビデオの解像度またはビットレートに基づいて、チャネル16の帯域幅に基づいて、ユーザに関連するサブスクリプション(たとえば、有料サブスクリプション対無料サブスクリプション)に基づいて、またはビデオデコーダ31によって取得可能な解像度を決定するための他のファクタに基づいて生成され得る。
補足エンハンスメント情報(SEI)メッセージ(Supplemental Enhancement Information (SEI) Messages)
[00115] HEVC規格によれば、コード化ビデオデータ(coded video data)は、ネットワークアブストラクションレイヤ(NAL:Network Abstraction Layer)ユニットと呼ばれるデータユニット(data unit)のシーケンスに編成され、これは、アクセスユニット(access unit)に形成される。アクセスユニットは、同じ出力時間に対応するピクチャをまとめて表す、1つまたは複数のNALユニットのセットを備える。アクセスユニット中の1つまたは複数のNALユニットは、同じ出力時間に対応するピクチャをまとめて構成する1つまたは複数のビデオコーディングレイヤ(VCL:video coding layer)NALユニットと、0個またはそれ以上の非VCL NALユニット(すなわち、VCL NALユニットでないNALユニット)とのセットを備える。VCL NALユニットは、コード化ビデオデータ(coded video data)のスライスセグメント(slice segment)を搬送する。非VCL NALユニットは一般に、制御情報を含んでいる。アクセスユニット中に存在し得る1つのタイプの非VCL NALユニットは、補足エンハンスメント情報(SEI)NALユニットであり、これは、復号されたビデオ信号のために概して必要でないが、復号されたビデオ信号のユーザビリティ(usability)を向上させ得る補足データ(supplemental data)(たとえば、タイミング情報)を含んでいる。SEI NALユニットは、以下で説明するSEIメッセージ構造を有するSEIメッセージを含んでいる。SEIメッセージは、たとえば、ピクチャ出力タイミング(picture output timing)、表示(displaying)、色空間の解釈(interpretation of color space)、および/またはフレーミングパッキング(framing packing)に関連する情報を与え得る、コード化ビデオデータに関連する様々なタイプのメタデータ(metadata)を含み得る。
[00116] SEI NALユニットは、1つまたは複数のSEIメッセージ構造を備え得る。一例による、SEI NALユニットの全体的構造が、図4に示されている。開示する技法の理解に有用でない構造の部分は省略されている。そのような省略は図4中で省略記号によって識別される。
[00117] SEI NALユニット410は、anRBSP、たとえば、sei_rbsp()構造420(sei_rbsp()構造420はSEI RBSP420とも呼ばれる)を備える。次に、sei_rbsp()構造420は、(2つの構造430Aおよび430Bとして示されている)1つまたは複数のsei_message()構造430を備え得る。2つのsei_message()構造430Aおよび430Bが示されているが、sei_rbsp()420は、1つのsei_message()構造430あるいは3つまたはそれ以上のsei_message()構造430を含む、任意の数のsei_message()構造430を備え得ることを理解されたい。
[00118] 各sei_message()構造430は、(それぞれ、sei_message()構造430Aおよび430Bについて、440Aおよび440Bとして示されている)sei_payload構造440を備える。sei_message()構造430のシンタックス構造は、sei_payload構造440中に含まれており、図4中で(それぞれ、sei_payload構造440Aおよび440Bについて、442Aおよび442Bとして示されている)xxx(payloadSize)構造442として表される。随意に、各sei_payload構造440は、SEI_message()構造430の将来の拡張性のために使用され得る、(それぞれ、sei_payload構造440Aおよび440Bについて、444Aおよび444Bとして示されている)ペイロード拡張(payload extension)444をも備え得る。
[00119] いくつかのSEIメッセージ構造は、ネスティングSEIメッセージ構造である。ネスティングSEIメッセージ構造は、1つまたは複数のSEIメッセージを含んでいることがある。たとえば、sei_message()構造430Aは、sei_message()構造430A内にネスティングされた複数のSEIメッセージを備え得る。ネスティングSEIメッセージ構造中に含まれている各SEIメッセージは、ネスティングSEIメッセージ構造によって指定されているように、レイヤのセット、動作点、出力レイヤセット、および/またはビットストリームパーティションに適用可能である。
[00120] 従来の慣例、たとえばHEVC仕様の現在のドラフト、HEVCバージョン1は、1つのタイプのネスティングSEIメッセージ構造、すなわち、スケーラブルネスティングSEIメッセージ構造を指定する。さらに、マルチレイヤ(またはマルチビュー)拡張の現在のドラフトは、別のタイプのネスティングSEIメッセージ構造、すなわち、ビットストリームパーティションネスティングSEIメッセージ構造を指定する。単数形または複数形の「ネスティングSEIメッセージ構造」および「ネスティングSEI構造」という用語は、本明細書では、スケーラブルネスティングSEIメッセージ構造と、ビットストリームパーティションネスティングSEIメッセージ構造とを総称して指すために使用される。
[00121] スケーラブルネスティングSEIメッセージ構造のための現在の(すなわち、従来の)シンタックス構造が、以下の表に示されている。開示する技法の理解に有用でないシンタックス構造の部分は省略されている。そのような省略は以下で省略記号によって識別される。
[00122] ビットストリームパーティションネスティングSEIメッセージ構造の現在のシンタックス構造が、以下の表に示されている。
[00123] 上記のように、スケーラブルネスティングSEIメッセージ構造とビットストリームパーティションネスティングSEIメッセージ構造の両方のためのシンタックス構造は、「do sei_message() while(more_rbsp_data())」のdo−whileシンタックスを備える。
[00124] このdo−whileシンタックスは、1つまたは複数のSEIメッセージがネスティングSEIメッセージ構造中にネスティングされることを可能にするが、これらの従来のシンタックス構造のdo−whileシンタックスは著しい欠点を有する。詳細には、do−whileシンタックスの条件として設定される関数「more_rbsp_data()」は、ネスティングSEIメッセージ構造を備えるSEI RBSP中の現在のバイト位置が、その特定のSEI RBSP(たとえば、図4のSEI RBSP420)中の1の値を有する最後の(すなわち、最下位の、右端の)ビットの位置に等しくなるまで、「1」の値(すなわち、TRUE)を返す。SEI RBSPシンタックス中の1の値を有するこの最後のビットは、1の値を有するrbsp_trailing_bits()シンタックス構造450中の第1のビットに対応する。図4に示されているように、rbsp_trailing_bits()シンタックス構造450は、SEI RBSP420の最後に存在する。したがって、SEI NALユニットがネスティングSEIメッセージ構造を備え、ネスティングSEIメッセージ構造がSEI NALユニット内の他のデータ(すなわち、RBSPトレーリングビット(trailing bit)以外のデータ)に先行する場合、ネスティングSEIメッセージ構造のdo−whileシンタックスは、関数sei_message()を使用して上記他のデータを処理し、SEI NALユニットの構文解析エラーを生じる。
[00125] たとえば、図4を参照すると、sei_payload構造440Aが、構造442AとしてネスティングSEIメッセージ構造を備える場合、デコーダは、ネスティングされたSEIメッセージのdo−whileシンタックスに基づいて、sei_rbsp構造420の最後のRBSPトレーリングビット(すなわち、rbsp_trailing_bits()450)に達するまで、sei_rbsp構造420を処理する。したがって、構造442Aのdo−whileシンタックスは、関数「sei_message()」に従って、もしあれば、sei_payload構造440Aのペイロード拡張、ならびにsei_message構造430Bを処理し、構文解析エラーを生じる。
[00126] したがって、ビットストリームが、現在の方式に従ってネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のいずれか)を備えるSEI NALユニットを含む場合、および以下のいずれかが真である場合、ビットストリームは適切に構文解析されないことがあり、したがって、準拠しないビットストリームである。
[00127] (1)SEI NALユニットが、復号順序において、ネスティングSEIメッセージ構造を含んでいるsei_payload構造に後続するSEIメッセージを備える、あるいは
[00128] (2)ネスティングSEIメッセージ構造を含んでいるsei_payload構造が、ペイロード拡張データ(たとえば、以下のシンタックス要素、すなわち、reserved_payload_extension_data、payload_bit_equal_to_one、またはpayload_bit_equal_to_zeroのいずれか)を備える。
[00129] ネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)の現在のシンタックス構造中のこれらの欠点の結果として、ネスティングSEIメッセージ構造は、sei_payload構造中で与えられる拡張機構を使用して拡張されないことがある。したがって、次に、ネスティングSEIメッセージ構造の現在のシンタックス構造におけるこれらの欠点に対処する方法について説明する。これらのそれぞれの例示的な実施形態の様々な特徴は、独立して、または互いに組み合わせて適用され得る。
[00130] 本開示の様々な実施形態では、ネスティングSEIメッセージ構造中に含まれているsei_messages()の数は、ビデオエンコーダ(たとえば、ビデオエンコーダ21のビデオエンコーダ20)によってシグナリングされ、ビデオデコーダ(たとえば、ビデオデコーダ30またはビデオデコーダ31)によって受信され得、ネスティングSEIメッセージ構造のシンタックス構造は、たとえばビデオデコーダによって、その数に基づいて構文解析され得る。たとえば、スケーラブルネスティングSEIメッセージ構造のシンタックス構造およびビットストリームパーティションネスティングSEIメッセージ構造のシンタックス構造の一方または両方は、上記で説明したように、関数「more_rbsp_data()」が1の値を返す限り、関数「sei_message()」を呼び出すdo−whileシンタックスを、シグナリングされた回数関数「sei_message()」を呼び出す(すなわち、関数「sei_message()」の実行または実施を命令する)シンタックスと置き換えることによって、変更され得る。
[00131] たとえば本開示によれば、スケーラブルネスティングSEIメッセージ構造のシンタックス構造は、以下の表に示されているように変更され得る。この場合も、開示する技法の理解に有用でないシンタックス構造の部分は省略されている。そのような省略は以下で省略記号によって識別される。
[00132] 同様に、ビットストリームパーティションネスティングSEIメッセージ構造のシンタックス構造は、以下の表に示されているように変更され得る。
[00133] 詳細には、上記の表1に示されているスケーラブルネスティングSEIメッセージ構造の現在のシンタックス構造中のライン09〜11は、表3において、変数(すなわち、シンタックス要素)「num_seis_in_scalable_minus1」によって指定された数に基づいて関数「sei_message()」を呼び出すシンタックス構造(syntax structure)と置き換えられている。同様に、表2に示されているビットストリームパーティションネスティングSEIメッセージ構造の現在のシンタックス構造中のライン05〜07は、表4において、変数「num_seis_in_bsp_minus1」に記憶された数に基づいて関数「sei_message()」を呼び出すシンタックス構造と置き換えられている。
[00134] 変数「num_seis_in_scalable_minus1」によって指定された数は、スケーラブルネスティングSEIメッセージ構造中に含まれているsei_message構造の数よりも1小さい。同様に、変数「num_seis_in_bsp_minus1」によって指定された数は、ビットストリームパーティションネスティングSEIメッセージ構造中に含まれているsei_message構造の数よりも1小さい。より詳細には、「num_seis_in_bsp_minus1」+1は、bsp_nesting()シンタックス構造中に含まれている、sei_message()構造の数を指定する。言い換えれば、各シンタックス要素によって指定された数よりも1大きい数が、それぞれのネスティングSEIメッセージ構造のシンタックス構造中に含まれているsei_message構造の数を示す。変数「num_seis_in_scalable_minus1」および「num_seis_in_bsp_minus1」は、整数、または数を表すことが可能な他のデータタイプであり得ることを理解されたい。
[00135] 表3と表4の両方では、置換された構造は、それぞれ「num_seis_in_scalable_minus1」によって指定された数よりも1大きい数(すなわち、「num_seis_in_scalable_minus1」+1)に等しい回数、および「num_seis_in_bsp_minus1」中の数よりも1大きい数(すなわち、「num_seis_in_bsp_minus1」)に等しい回数、命令「sei_message()」を通って反復する「for」ループを備える。シグナリングされた回数1つまたは複数の命令のセットを通って反復する他のタイプの構造が、示された「for」ループの代わりに使用され得ることを理解されたい。また、「for」ループは、たとえば、開始反復(starting iteration)を1だけ増加させること(すなわち、「i=0」の代わりに「i=1」)、または小なりイコール(less-than-or-equal)演算子を小なり(less-than)演算と置き換えること(すなわち、「i≦num_seis_in_scalable_minus1」の代わりに「i<num_seis_in_scalable」、および「i≦num_seis_in_bsp_minus1」の代わりに「i<num_seis_in_bsp」)によって、それぞれのネスティングSEIメッセージ構造中のsei_message構造の数よりも1小さい数の代わりに、それぞれのネスティングSEIメッセージ構造中のsei_message構造の数を使用するように変更され得ることを理解されたい。
[00136] 様々な実施形態では、num_seis_in_scalable_minus1の値および/またはnum_seis_in_bsp_minus1の値は、両端値を含む、0〜15の範囲に制約され得る。ただし、num_seis_in_scalable_minus1の値および/またはnum_seis_in_bsp_minus1の値は、異なる範囲および/または互いに異なる範囲に制約されるか、あるいはまったく制限されないことがあることを理解されたい。これらの値のうちの1つまたは複数が、値の範囲に制約されるとき、その制約はエンコーダまたはデコーダのいずれかにおいて、あるいはエンコーダとデコーダの両方において課され得る。たとえば、ビデオエンコーダ20は、所定の数を超えるSEIメッセージがSEI NALユニットのネスティングSEIメッセージ構造に追加されるのを防ぎ得る。
[00137] 変更されたネスティングSEIメッセージシンタックス構造の場合、ネスティングSEIメッセージ構造は、上記で説明した現在の(すなわち、従来の)ネスティングSEIメッセージ構造の制限を受けない。詳細には、ネスティングSEIメッセージ構造は、SEI NALユニット中の最後のSEIメッセージ構造であるようにもはや制約されず、(たとえば、reserved_payload_extension_dataシンタックス要素を使用して)拡張され得る。
[00138] 図5に、本開示の様々な実施形態による、ビデオコーディングのための例示的なプロセス500を示す。ステップ510において開始するプロセス500は、ビデオエンコーダ20、ビデオエンコーダ21、ビデオデコーダ30、および/またはビデオデコーダ31、あるいは任意の他の構成要素によって実装され得る。ステップ520において、SEI NALユニットを処理する。SEI NALユニットは、1つまたは複数のSEIメッセージ構造を備えるRBSPを備え得る。これらのSEIメッセージ構造のうちの1つまたは複数は、1つまたは複数のSEIメッセージを備えるように構成された少なくとも1つのネスティングSEIメッセージ構造を備える。ステップ530において、少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素をコーディングする。このコーディングは、(たとえば、図6中のステップ650に関して説明するように)シンタックス要素を復号すること、または(たとえば、図7中のステップ770に関して説明するように)シンタックス要素を符号化することを備え得る。さらに、ステップ530は、ステップ520における処理の一部として、またはそれとは別に実行され得る。プロセス500は、ステップ580において終了する。
[00139] 図6に、本開示の様々な実施形態による、ビデオ復号において使用されるための例示的なプロセス600を示す。ステップ610において開始するプロセス600は、ビデオデコーダ30、および/またはビデオデコーダ31、あるいは任意の他の構成要素によって実装され得る。便宜上、プロセス600について、ビデオデコーダ30によって実行されるとして説明する。ステップ620において、SEIメッセージ構造を受信する。ステップ630において、SEIメッセージ構造がネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)であるのか非ネスティングSEIメッセージ構造であるのかが決定される。ステップ630は、1つの特定のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のいずれか)のみ、あるいは複数のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造とビットストリームパーティションネスティングSEIメッセージ構造の両方)について実行され得ることを理解されたい。
[00140] ステップ630において、SEIメッセージ構造が非ネスティングSEIメッセージ構造であると決定された場合、ステップ640において、SEIメッセージ構造を従来通り(すなわち、HEVC仕様の現在のドラフトに示されているように)構文解析し、プロセス600はステップ680において終了する。
[00141] 一方、ステップ630において、SEIメッセージ構造がネスティングSEIメッセージ構造であると決定された場合、ステップ650において、ネスティングSEIメッセージ構造中の(1つまたは複数の)SEIメッセージの数を決定する。たとえば、この数は、ネスティングSEIメッセージ構造を符号化したビデオエンコーダ(たとえば、ビデオエンコーダ20またはビデオエンコーダ21)によって、SEIメッセージ構造または他の構造中に組み込まれていることがあり、その場合、ビデオデコーダ30は、ネスティングSEIメッセージ構造または他の構造中のその数のコード化位置からその数の値を抽出することによって、この数を決定する。代替的に、ネスティングSEIメッセージ構造中の(1つまたは複数の)SEIメッセージの数は、(たとえば、何らかの外部手段によって与えられる)別の様式で、ビデオエンコーダによってシグナリングされ得る。いずれの場合も、ネスティングSEIメッセージ構造中の(1つまたは複数の)SEIメッセージのシグナリングされた数は、(1つまたは複数の)SEIメッセージの実際の数、または(1つまたは複数の)SEIメッセージの数−1(たとえば、スケーラブルネスティングSEIメッセージのための変数「num_seis_in_scalable_minus1」、またはビットストリームパーティションネスティングSEIメッセージのための変数「num_seis_in_bsp_minus1」)であり得る。
[00142] ステップ660において、ネスティングSEIメッセージ構造中の決定された数の(1つまたは複数の)SEIメッセージが構文解析されたかどうかが決定される。ネスティングSEIメッセージ構造中の決定された数の(1つまたは複数の)SEIメッセージが構文解析されなかった場合、ステップ670において次のSEIメッセージを構文解析し、次いでプロセス600はステップ660に戻る。一方、ネスティングSEIメッセージ構造中の決定された数の(1つまたは複数の)SEIメッセージが構文解析された場合、プロセス600はステップ680において終了する。ステップ660とステップ670とによって形成されるこのループは、上記で説明したように、表3のライン10〜11と、表4のライン06〜07とによって示された「forループ」を使用して実装され得る。代替的に、ステップ660とステップ670とによって形成されるループは、異なるタイプのループ構造を使用して実装され得る。
[00143] 図7に、本開示の様々な実施形態による、ビデオ符号化において使用されるためのプロセス700を示す。ステップ710において開始するプロセス700は、ビデオエンコーダ20、および/またはビデオエンコーダ21、あるいは任意の他の構成要素によって実装され得る。ステップ720において、SEIメッセージ構造を生成するために、1つまたは複数のSEIメッセージを受信する。ステップ730において、生成されるべきSEIメッセージ構造がネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)であるかどうかが決定される。ステップ730は、1つの特定のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のいずれか)のみ、あるいは複数のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造とビットストリームパーティションネスティングSEIメッセージ構造の両方)について実行され得ることを理解されたい。
[00144] ステップ730において、SEIメッセージ構造が非ネスティングSEIメッセージ構造であると決定された場合、ステップ740において、受信されたSEIメッセージを従来通り(すなわち、HEVC仕様の現在のドラフトに示されているように)SEIメッセージ構造に追加し、プロセス700はステップ780において終了する。
[00145] 一方、ステップ730において、SEIメッセージ構造がネスティングSEIメッセージ構造であると決定された場合、ステップ750において、(たとえば、計数、構文解析などによって)ネスティングSEIメッセージ構造内に含まれるべき(1つまたは複数の)SEIメッセージの数を決定する。たとえば、ビデオエンコーダは、ビデオエンコーダがSEIメッセージ構造に(1つまたは複数の)SEIメッセージを追加している間、(1つまたは複数の)SEIメッセージの数を計数し得るか、またはSEIメッセージ構造に任意の(1つまたは複数の)SEIメッセージを追加することより前に(1つまたは複数の)SEIメッセージの数を計数し得る。いずれの場合も、ステップ760において表されるように、(1つまたは複数の)SEIメッセージを、ネスティングSEIメッセージ構造に追加する(たとえば、ネスティングSEIメッセージ構造内にコーディングする)。
[00146] ステップ770において、ステップ750において決定された(1つまたは複数の)SEIメッセージの数を、ネスティングSEIメッセージ構造または他の構造中に組み込む(たとえば、その構造中にコーディングする)。代替的に、(1つまたは複数の)SEIメッセージの数は、別の様式でシグナリングされ得る。いずれの場合も、ネスティングSEIメッセージ構造中の(1つまたは複数の)SEIメッセージのシグナリングされた数は、(1つまたは複数の)SEIメッセージの実際の数、または(1つまたは複数の)SEIメッセージの数−1(たとえば、スケーラブルネスティングSEIメッセージのための変数「num_seis_in_scalable_minus1」、またはビットストリームパーティションネスティングSEIメッセージのための「変数num_seis_in_bsp_minus1」)であり得る。プロセス700は、ステップ780において終了する。
[00147] 様々な実施形態では、ネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)が、SEI NALユニット中の最後のSEIメッセージ構造であるように制約されるように、制約が追加される。この制約は、上記で説明した、本開示の他の実施形態の(1つまたは複数の)特徴と組み合わせて、または代替として、使用され得る。
[00148] たとえば、ビデオエンコーダ20および/またはビデオエンコーダ21は、ネスティングSEIメッセージ構造が、sei_rbsp構造420中の他のデータ(すなわち、RBSPトレーリングビット構造450以外のデータ)に先行する位置において、SEI NALユニットに追加されるのを防ぎ得る。言い換えれば、ビデオエンコーダ20は、ネスティングSEIメッセージ構造がSEI NALユニットに追加される場合、そのネスティングSEIメッセージ構造がSEI NALユニット中の他のSEIメッセージ構造の後に追加されることを保証し得る。
[00149] さらに、ビデオエンコーダ20および/またはビデオエンコーダ21は、SEI NALユニットが2つのネスティングSEIメッセージ構造を備える状況を回避するために、単一のSEI NALユニットへの2つまたはそれ以上のネスティングSEIメッセージ構造の追加を防ぎ得る。そのような状況では、ネスティングSEIメッセージ構造のうちの1つは、上記で説明したように、必ず、他のデータ(すなわち、2つまたはそれ以上のネスティングSEIメッセージのうちの別のネスティングSEIメッセージ)に先行し、構文解析エラーを生じるであろう。
[00150] 図8に、本開示の様々な実施形態による、ビデオ符号化において使用されるためのプロセス800を示す。ステップ810において開始するプロセス800は、ビデオエンコーダ20、および/またはビデオエンコーダ21、あるいは任意の他の構成要素によって実装され得る。ステップ820において、SEI NALユニットを生成するために、1つまたは複数のSEIメッセージ構造を受信する。ステップ830において、SEI NALユニット中に組み込まれるべき(1つまたは複数の)SEIメッセージ構造がネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造および/またはビットストリームパーティションネスティングSEIメッセージ構造)を含むかどうかが決定される。ステップ830は、1つの特定のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のいずれか)のみ、あるいは複数のタイプのネスティングSEIメッセージ構造(たとえば、スケーラブルネスティングSEIメッセージ構造とビットストリームパーティションネスティングSEIメッセージ構造の両方)について実行され得ることを理解されたい。
[00151] ステップ830において、SEI NALユニット中に組み込まれるべき(1つまたは複数の)SEIメッセージ構造がネスティングSEIメッセージを含まないと決定された場合、ステップ840において、受信された(1つまたは複数の)SEIメッセージ構造を従来通り(すなわち、HEVC仕様の現在のドラフトに示されているように)SEI NALユニットに追加し、プロセス800はステップ880において終了する。
[00152] 一方、ステップ830において、SEI NALユニット中に組み込まれるべき(1つまたは複数の)SEIメッセージ構造がネスティングSEIメッセージ構造を含むと決定された場合、ステップ820において受信された(1つまたは複数の)SEIメッセージ構造は、ネスティングSEIメッセージ構造が(1つまたは複数の)SEIメッセージ構造のすべてのうちの最後であるように、順序付けられる。たとえば、4つのSEIメッセージ構造、A、B、C、およびDがステップ820において受信され、構造CはネスティングSEIメッセージ構造であり、A、B、およびDは非ネスティングSEIメッセージ構造である場合、ネスティングSEIメッセージ構造Cが最後であるように、構造が順序付けられる(たとえば、A−B−D−C、B−A−D−C、B−D−A−Cなど)。非ネスティングSEIメッセージ構造、A、B、およびDの順序は、構造A、B、およびDがそれぞれ順序において構造Cに先行する限り、任意の様式で(たとえば、非ネスティングSEIメッセージ構造が受信された順序で、ランダムに、他の条件またはパラメータに従ってなど)決定され得る。
[00153] ステップ820において受信された(1つまたは複数の)SEIメッセージ構造の順序(order)を、ステップ850において決定した後、ステップ860において、決定された順序において(1つまたは複数の)SEIメッセージ構造をSEI NALユニット中に組み込む。順序は、SEI NALユニットに(1つまたは複数の)SEIメッセージ構造のいずれかを追加することより前に決定され得ることを理解されたい。代替的に、(1つまたは複数の)SEIメッセージ構造がSEI NALユニットに追加されているとき、たとえば、非ネスティングSEIメッセージ構造が受信された順序において非ネスティングSEIメッセージ構造を加えること、ただし、遭遇したとき、すべての他のSEIメッセージ構造が追加された後に追加されるべき、ネスティングSEIメッセージ構造を記憶することによって、順序は決定され得る。プロセス800は、ステップ880において終了する。
SEIメッセージの構文解析においてペイロードサイズ情報を使用すること(Using Payload Size Information in the Parsing of SEI Messages)
[00154] SEIメッセージ構造(たとえば、図4中のsei_message()430Aまたは430B)は、SEIメッセージ構造のペイロード(たとえば、図4中のsei_payload()440Aまたは440B)中にRBSPバイトの数を示す変数「payloadSize」を備える。存在するとき、「payloadSize」において表されるこの数は、ペイロード拡張(payload extension)(たとえば、図4中の444Aまたは444B)中のバイト(byte)を含む、ペイロードのバイトのすべてを含む。
[00155] しかしながら、いくつかのSEIメッセージシンタックス構造は、recovery_point()など、特定のSEIメッセージシンタックス構造内にすべてのpayloadSizeバイトを含む。これにより、ペイロード拡張が存在する余地は残らない。HEVCのために現在定義されており、このカテゴリーの下に入るSEIメッセージシンタックス構造は、フィラーペイロードSEIメッセージ(filler payload SEI message)、ユーザデータ登録済み(user data registered)、ユーザデータ未登録(user data unregistered)、予約済みSEIメッセージ(reserved SEI message)、およびビデオパラメータセット(VPS)リライティングSEIメッセージ(Video Parameter Set (VPS) rewriting SEI message)である。
[00156] 上記例に応じて、本明細書で説明した技法のうちのいずれかのいくつかの行為またはイベントが、異なるシーケンスで実行され得、追加、マージ、または完全に除外され得る(たとえば、すべての説明した行為またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して同時に実行され得る。
[00157] 本明細書で開示する情報および信号は、多種多様な技術および技法のいずれかを使用して表され得る。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表され得る。
[00158] 本明細書で開示する実施形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈されるべきではない。
[00159] 本明細書で説明した技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなど、様々なデバイスのいずれかにおいて実装され得る。モジュールまたは構成要素として説明する任意の機能は、集積論理デバイスに一緒に、または個別であるが相互運用可能な論理デバイスとして別々に実装され得る。ソフトウェアで実装された場合、本技法は、実行されたとき、上記で説明した方法のうちの1つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって、少なくとも部分的に実現され得る。コンピュータ可読データ記憶媒体は、パッケージング材料を含むことがあるコンピュータプログラム製品の一部を形成し得る。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、フラッシュメモリ、磁気または光学データ記憶媒体など、メモリまたはデータ記憶媒体を備え得る。本技法は、追加または代替として、伝搬信号または電波など、命令またはデータ構造の形態でプログラムコードを搬送または伝達し、コンピュータによってアクセスされ、読み取られ、および/または実行され得るコンピュータ可読通信媒体によって、少なくとも部分的に実現され得る。
[00160] プログラムコードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサを含み得るプロセッサによって実行され得る。そのようなプロセッサは、本開示で説明した技法のいずれかを実行するように構成され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。したがって、本明細書で使用する「プロセッサ」という用語は、上記の構造、上記の構造の任意の組合せ、または本明細書で説明した技法の実装に好適な他の構造または装置のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に提供され得、あるいは複合ビデオエンコーダ/デコーダ(コーデック)に組み込まれ得る。
[00161] 本開示の様々な実施形態について説明した。これらおよび他の実施形態は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
ビデオコーディングのための方法であって、前記方法は、
1つまたは複数の補足エンハンスメント情報(SEI)メッセージ構造を備えるローバイトシーケンスペイロード(RBSP)を備える、SEIネットワークアブストラクションレイヤ(NAL)ユニットを処理することと、ここにおいて、前記1つまたは複数のSEIメッセージ構造が、1つまたは複数のSEIメッセージを有する少なくとも1つのネスティングSEIメッセージ構造を備える、
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素をコーディングすることとを備える、方法。
[C2]
前記少なくとも1つのネスティングSEIメッセージ構造が、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のうちの1つを備える、C1に記載の方法。
[C3]
前記シンタックス要素をコーディングすることが、前記シンタックス要素を復号することを備え、ここにおいて、前記方法が、前記復号されたシンタックス要素に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することをさらに備える、C1に記載の方法。
[C4]
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記決定された数に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造を構文解析することをさらに備える、C3に記載の方法。
[C5]
前記シンタックス要素が、前記少なくとも1つのネスティングSEIメッセージ構造から復号される、C3に記載の方法。
[C6]
前記シンタックス要素をコーディングすることが、前記シンタックス要素を符号化することを備え、ここにおいて、前記方法が、前記シンタックス要素を符号化することより前に、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することをさらに備える、C1に記載の方法。
[C7]
前記シンタックス要素が、前記少なくとも1つのネスティングSEIメッセージ構造中に符号化される、C6に記載の方法。
[C8]
ビデオコーディングのためのデバイスであって、前記デバイスは、
ビデオデータを記憶するように構成されたメモリと、
前記メモリと通信しているプロセッサとを備え、前記プロセッサは、
前記ビデオデータに関連する補足エンハンスメント情報(SEI)ネットワークアブストラクションレイヤ(NAL)ユニットを処理することと、ここにおいて、前記SEI
NALユニットが、1つまたは複数のSEIメッセージ構造を備えるローバイトシーケンスペイロード(RBSP)を備え、ここにおいて、前記1つまたは複数のSEIメッセージ構造が、1つまたは複数のSEIメッセージを有する少なくとも1つのネスティングSEIメッセージ構造を備える、
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素をコーディングすることとを行うように構成された、デバイス。
[C9]
前記少なくとも1つのネスティングSEIメッセージ構造が、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のうちの1つを備える、C8に記載のデバイス。
[C10]
前記プロセッサが、前記シンタックス要素を復号することと、前記復号されたシンタックス要素に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することとを行うようにさらに構成された、C8に記載のデバイス。
[C11]
前記プロセッサが、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記決定された数に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造を構文解析するようにさらに構成された、C10に記載のデバイス。
[C12]
前記プロセッサが、前記少なくとも1つのネスティングSEIメッセージ構造から前記シンタックス要素を復号するようにさらに構成された、C10に記載のデバイス。
[C13]
前記プロセッサが、前記シンタックス要素を符号化することと、前記シンタックス要素を符号化することより前に、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することとを行うようにさらに構成された、C8に記載のデバイス。
[C14]
前記プロセッサが、前記少なくとも1つのネスティングSEIメッセージ構造中に前記シンタックス要素を符号化するようにさらに構成された、C13に記載のデバイス。
[C15]
前記ビデオデータを表示するように構成されたディスプレイをさらに備える、C8に記載のデバイス。
[C16]
前記デバイスが、
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイスのうちの少なくとも1つを備える、C8に記載のデバイス。
[C17]
ビデオコーディングのためのデバイスであって、前記デバイスは、
ビデオデータに関連する補足エンハンスメント情報(SEI)ネットワークアブストラクションレイヤ(NAL)ユニットを処理するための手段と、ここにおいて、前記SEI
NALユニットが、1つまたは複数のSEIメッセージ構造を備えるローバイトシーケンスペイロード(RBSP)を備え、ここにおいて、前記1つまたは複数のSEIメッセージ構造が、1つまたは複数のSEIメッセージを有する少なくとも1つのネスティングSEIメッセージ構造を備える、
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素をコーディングするための手段とを備える、デバイス。
[C18]
前記少なくとも1つのネスティングSEIメッセージ構造が、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のうちの1つを備える、C17に記載のデバイス。
[C19]
前記シンタックス要素をコーディングするための前記手段が、前記シンタックス要素を復号するための手段を備え、ここにおいて、前記デバイスが、前記復号されたシンタックス要素に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定するための手段をさらに備える、C17に記載のデバイス。
[C20]
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記決定された数に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造を構文解析するための手段をさらに備える、C19に記載のデバイス。
[C21]
前記シンタックス要素を復号するための手段が、前記少なくとも1つのネスティングSEIメッセージ構造から前記シンタックス要素を復号する、C19に記載のデバイス。
[C22]
前記シンタックス要素をコーディングするための前記手段が、前記シンタックス要素を符号化するための手段を備え、ここにおいて、前記デバイスが、前記シンタックス要素を符号化することより前に、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定するための手段をさらに備える、C17に記載のデバイス。
[C23]
前記シンタックス要素を符号化するための前記手段が、前記少なくとも1つのネスティングSEIメッセージ構造中に前記シンタックス要素を符号化する、C22に記載のデバイス。
[C24]
実行されたとき、1つまたは複数のプロセッサに、
1つまたは複数の補足エンハンスメント情報(SEI)メッセージ構造を備えるローバイトシーケンスペイロード(RBSP)を備える、SEIネットワークアブストラクションレイヤ(NAL)ユニットを処理することと、ここにおいて、前記1つまたは複数のSEIメッセージ構造が、1つまたは複数のSEIメッセージを有する少なくとも1つのネスティングSEIメッセージ構造を備える、
前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの数を示すシンタックス要素をコーディングすることとを行わせる命令を記憶した非一時的コンピュータ可読媒体。
[C25]
前記少なくとも1つのネスティングSEIメッセージ構造が、スケーラブルネスティングSEIメッセージ構造またはビットストリームパーティションネスティングSEIメッセージ構造のうちの1つを備える、C24に記載の非一時的コンピュータ可読媒体。
[C26]
前記1つまたは複数のプロセッサに、前記シンタックス要素をコーディングすることを行わせる前記命令が、前記1つまたは複数のプロセッサに、前記シンタックス要素を復号することを行わせる命令を備え、ここにおいて、前記非一時的コンピュータ可読媒体が、前記1つまたは複数のプロセッサに、前記復号されたシンタックス要素に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することを行わせる命令をさらに備える、C24に記載の非一時的コンピュータ可読媒体。
[C27]
前記1つまたは複数のプロセッサに、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記決定された数に基づいて、前記少なくとも1つのネスティングSEIメッセージ構造を構文解析することを行わせる命令をさらに備える、C26に記載の非一時的コンピュータ可読媒体。
[C28]
前記1つまたは複数のプロセッサに、前記シンタックス要素を復号することを行わせる前記命令が、前記少なくとも1つのネスティングSEIメッセージ構造から前記シンタックス要素を復号するための命令を備える、C26に記載の非一時的コンピュータ可読媒体。
[C29]
前記1つまたは複数のプロセッサに、前記シンタックス要素をコーディングすることを行わせる前記命令が、前記1つまたは複数のプロセッサに、前記シンタックス要素を符号化することを行わせる命令を備え、ここにおいて、前記非一時的コンピュータ可読媒体が、前記1つまたは複数のプロセッサに、前記シンタックス要素を符号化することより前に、前記少なくとも1つのネスティングSEIメッセージ構造内に備えられるSEIメッセージの前記数を決定することを行わせる命令をさらに備える、C24に記載の非一時的コンピュータ可読媒体。
[C30]
前記1つまたは複数のプロセッサに、前記シンタックス要素を符号化することを行わせる前記命令が、前記少なくとも1つのネスティングSEIメッセージ構造中に前記シンタックス要素を符号化するための命令を備える、C29に記載の非一時的コンピュータ可読媒体。